├── .gitignore ├── .npmignore ├── README.md ├── cli.js ├── index.js ├── nextjs_mock └── src │ └── app │ └── api │ └── hello │ └── route.ts ├── package.json ├── pnpm-lock.yaml ├── run.js ├── tests └── transform.test.js └── transform.js /.gitignore: -------------------------------------------------------------------------------- 1 | node_modules 2 | -------------------------------------------------------------------------------- /.npmignore: -------------------------------------------------------------------------------- 1 | node_modules 2 | nextjs_mock -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | 2 | # NextJS Eject 3 | 4 | ### *Eject your NextJS app to be AWS Lambda ready* 5 | 6 | ![image](https://github.com/kevb10/nextjs-eject/assets/7396751/f9e9e465-6698-4bb4-b1b3-b5dc878db7b4) 7 | 8 | 9 | ## 📄 Description 10 | 11 | Are you looking to scale your NextJS application beyond what the NextJS API can efficiently handle? **@kevb10/nextjs-eject** seamlessly migrates your NextJS API routes to AWS Lambda functions, preparing your app to leverage the power, scalability, and cost-effectiveness of AWS. 12 | 13 | This plugin analyzes your NextJS project and generates corresponding Lambda functions for each API route. It sets up the necessary AWS infrastructure without modifying your NextJS code. You simply configure your NextJS app to call the new Lambda endpoints instead of the built-in NextJS API. 14 | 15 | Key benefits: 16 | 17 | - Effortlessly transition to AWS Lambda 18 | - Unlock unlimited scaling potential 19 | - Reduce infrastructure and traffic costs 20 | - Take back control 21 | - Generated Lambda functions are pre-configured and deployment-ready 22 | - Minimal changes required to your existing NextJS project 23 | - Fully customizable to match your infrastructure needs 24 | 25 | **@kevb10/nextjs-eject** does all the heavy lifting to get your NextJS application ready for rapid growth. Say goodbye to NextJS API limitations and leverage the performance of AWS Lambda today! 26 | 27 | ## ⚙️ Requirements 28 | 29 | NextJS 13 (App Router) 30 | 31 | ## 🎮 Usage 32 | 33 | `npx nextjs-eject` 34 | 35 | ## 😋 Who cooked it? 36 | 37 | [![Kevin Manase](https://s.gravatar.com/avatar/e0947d54020257fb215d7310b6eac5ba?s=200)](https://twitter.com/kevinmanase "Kevin Manase personal website") 38 | 39 | [![@kevinmanase][twitter-image]](https://twitter.com/kevinmanase) [![kevb10][github-image]](https://github.com/kevb10) 40 | 41 | **[Kevin Manase](https://twitter.com/kevinmanase)**, a highly passionate, zen & pragmatic software engineer 😊 42 | 43 | ## ⚖️ License 44 | 45 | **NextJS Eject** is generously distributed under the *[ISC](https://opensource.org/licenses/ISC)*. 46 | 47 | 48 | [twitter-image]: https://img.shields.io/badge/Twitter-1DA1F2?style=for-the-badge&logo=twitter&logoColor=white 49 | [github-image]: https://img.shields.io/badge/GitHub-100000?style=for-the-badge&logo=github&logoColor=white 50 | 51 | 52 | -------------------------------------------------------------------------------- /cli.js: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env node 2 | const { eject } = require("."); 3 | eject(); -------------------------------------------------------------------------------- /index.js: -------------------------------------------------------------------------------- 1 | const fs = require('fs'); 2 | const path = require('path'); 3 | const { transformFile } = require('./transform'); 4 | 5 | function processDirectory(directory) { 6 | fs.readdirSync(directory, { withFileTypes: true }).forEach(entry => { 7 | const entryPath = path.join(directory, entry.name); 8 | if (entry.isDirectory()) { 9 | processDirectory(entryPath); // Recursively process subdirectories 10 | } else if (entry.isFile() && entry.name === 'route.ts') { 11 | const handlerPath = entryPath.replace('route.ts', 'handler.ts'); 12 | fs.renameSync(entryPath, handlerPath); 13 | transformFile(handlerPath); 14 | } 15 | }); 16 | } 17 | 18 | function eject(projectDir = process.cwd()) { 19 | const possibleRoots = [ 20 | path.join(projectDir, 'src', 'app', 'api'), 21 | path.join(projectDir, 'app', 'api') 22 | ]; 23 | 24 | let apiDir; 25 | for (const root of possibleRoots) { 26 | if (fs.existsSync(root)) { 27 | apiDir = root; 28 | break; 29 | } 30 | } 31 | 32 | if (!apiDir) { 33 | throw new Error('Could not find api directory'); 34 | } 35 | 36 | const lambdasDir = apiDir.replace(/api$/, 'lambdas'); 37 | fs.renameSync(apiDir, lambdasDir); 38 | 39 | processDirectory(lambdasDir); // Process the directory and its subdirectories 40 | } 41 | 42 | module.exports = { eject }; 43 | -------------------------------------------------------------------------------- /nextjs_mock/src/app/api/hello/route.ts: -------------------------------------------------------------------------------- 1 | declare const NextResponse: any; 2 | declare type NextRequest = {}; 3 | export async function GET(request: NextRequest) { 4 | return NextResponse.json({ message: 'Hello World' }); 5 | } -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "@kevb10/nextjs-eject", 3 | "version": "0.0.3", 4 | "description": "Eject your NextJS app to be AWS Lambda ready", 5 | "bin": { 6 | "nextjs-eject": "cli.js" 7 | }, 8 | "main": "index.js", 9 | "scripts": { 10 | "test": "jest", 11 | "real_test": "node run.js" 12 | }, 13 | "repository": { 14 | "type": "git", 15 | "url": "git+https://github.com/kevb10/nextjs-eject.git" 16 | }, 17 | "keywords": [ 18 | "nextjs-eject", 19 | "nextjs", 20 | "eject", 21 | "react-eject", 22 | "react", 23 | "vercel-eject", 24 | "vercel" 25 | ], 26 | "author": "Kevin Manase @kevinmanase", 27 | "license": "ISC", 28 | "bugs": { 29 | "url": "https://github.com/kevb10/nextjs-eject/issues" 30 | }, 31 | "homepage": "https://github.com/kevb10/nextjs-eject#readme", 32 | "devDependencies": { 33 | "@types/node": "^20.9.3", 34 | "jest": "^29.7.0" 35 | }, 36 | "dependencies": { 37 | "@babel/core": "^7.23.3", 38 | "@babel/generator": "^7.23.4", 39 | "@babel/parser": "^7.23.4", 40 | "@babel/traverse": "^7.23.4", 41 | "@babel/types": "^7.23.4" 42 | }, 43 | "directories": { 44 | "test": "tests" 45 | } 46 | } 47 | -------------------------------------------------------------------------------- /pnpm-lock.yaml: -------------------------------------------------------------------------------- 1 | lockfileVersion: '6.0' 2 | 3 | settings: 4 | autoInstallPeers: true 5 | excludeLinksFromLockfile: false 6 | 7 | dependencies: 8 | '@babel/core': 9 | specifier: ^7.23.3 10 | version: 7.23.3 11 | '@babel/generator': 12 | specifier: ^7.23.4 13 | version: 7.23.4 14 | '@babel/parser': 15 | specifier: ^7.23.4 16 | version: 7.23.4 17 | '@babel/traverse': 18 | specifier: ^7.23.4 19 | version: 7.23.4 20 | '@babel/types': 21 | specifier: ^7.23.4 22 | version: 7.23.4 23 | 24 | devDependencies: 25 | '@types/node': 26 | specifier: ^20.9.3 27 | version: 20.9.3 28 | jest: 29 | specifier: ^29.7.0 30 | version: 29.7.0(@types/node@20.9.3) 31 | 32 | packages: 33 | 34 | /@ampproject/remapping@2.2.1: 35 | resolution: {integrity: sha512-lFMjJTrFL3j7L9yBxwYfCq2k6qqwHyzuUl/XBnif78PWTJYyL/dfowQHWE3sp6U6ZzqWiiIZnpTMO96zhkjwtg==} 36 | engines: {node: '>=6.0.0'} 37 | dependencies: 38 | '@jridgewell/gen-mapping': 0.3.3 39 | '@jridgewell/trace-mapping': 0.3.20 40 | 41 | /@babel/code-frame@7.23.4: 42 | resolution: {integrity: sha512-r1IONyb6Ia+jYR2vvIDhdWdlTGhqbBoFqLTQidzZ4kepUFH15ejXvFHxCVbtl7BOXIudsIubf4E81xeA3h3IXA==} 43 | engines: {node: '>=6.9.0'} 44 | dependencies: 45 | '@babel/highlight': 7.23.4 46 | chalk: 2.4.2 47 | 48 | /@babel/compat-data@7.23.3: 49 | resolution: {integrity: sha512-BmR4bWbDIoFJmJ9z2cZ8Gmm2MXgEDgjdWgpKmKWUt54UGFJdlj31ECtbaDvCG/qVdG3AQ1SfpZEs01lUFbzLOQ==} 50 | engines: {node: '>=6.9.0'} 51 | 52 | /@babel/core@7.23.3: 53 | resolution: {integrity: sha512-Jg+msLuNuCJDyBvFv5+OKOUjWMZgd85bKjbICd3zWrKAo+bJ49HJufi7CQE0q0uR8NGyO6xkCACScNqyjHSZew==} 54 | engines: {node: '>=6.9.0'} 55 | dependencies: 56 | '@ampproject/remapping': 2.2.1 57 | '@babel/code-frame': 7.23.4 58 | '@babel/generator': 7.23.4 59 | '@babel/helper-compilation-targets': 7.22.15 60 | '@babel/helper-module-transforms': 7.23.3(@babel/core@7.23.3) 61 | '@babel/helpers': 7.23.4 62 | '@babel/parser': 7.23.4 63 | '@babel/template': 7.22.15 64 | '@babel/traverse': 7.23.4 65 | '@babel/types': 7.23.4 66 | convert-source-map: 2.0.0 67 | debug: 4.3.4 68 | gensync: 1.0.0-beta.2 69 | json5: 2.2.3 70 | semver: 6.3.1 71 | transitivePeerDependencies: 72 | - supports-color 73 | 74 | /@babel/generator@7.23.4: 75 | resolution: {integrity: sha512-esuS49Cga3HcThFNebGhlgsrVLkvhqvYDTzgjfFFlHJcIfLe5jFmRRfCQ1KuBfc4Jrtn3ndLgKWAKjBE+IraYQ==} 76 | engines: {node: '>=6.9.0'} 77 | dependencies: 78 | '@babel/types': 7.23.4 79 | '@jridgewell/gen-mapping': 0.3.3 80 | '@jridgewell/trace-mapping': 0.3.20 81 | jsesc: 2.5.2 82 | 83 | /@babel/helper-compilation-targets@7.22.15: 84 | resolution: {integrity: sha512-y6EEzULok0Qvz8yyLkCvVX+02ic+By2UdOhylwUOvOn9dvYc9mKICJuuU1n1XBI02YWsNsnrY1kc6DVbjcXbtw==} 85 | engines: {node: '>=6.9.0'} 86 | dependencies: 87 | '@babel/compat-data': 7.23.3 88 | '@babel/helper-validator-option': 7.22.15 89 | browserslist: 4.22.1 90 | lru-cache: 5.1.1 91 | semver: 6.3.1 92 | 93 | /@babel/helper-environment-visitor@7.22.20: 94 | resolution: {integrity: sha512-zfedSIzFhat/gFhWfHtgWvlec0nqB9YEIVrpuwjruLlXfUSnA8cJB0miHKwqDnQ7d32aKo2xt88/xZptwxbfhA==} 95 | engines: {node: '>=6.9.0'} 96 | 97 | /@babel/helper-function-name@7.23.0: 98 | resolution: {integrity: sha512-OErEqsrxjZTJciZ4Oo+eoZqeW9UIiOcuYKRJA4ZAgV9myA+pOXhhmpfNCKjEH/auVfEYVFJ6y1Tc4r0eIApqiw==} 99 | engines: {node: '>=6.9.0'} 100 | dependencies: 101 | '@babel/template': 7.22.15 102 | '@babel/types': 7.23.4 103 | 104 | /@babel/helper-hoist-variables@7.22.5: 105 | resolution: {integrity: sha512-wGjk9QZVzvknA6yKIUURb8zY3grXCcOZt+/7Wcy8O2uctxhplmUPkOdlgoNhmdVee2c92JXbf1xpMtVNbfoxRw==} 106 | engines: {node: '>=6.9.0'} 107 | dependencies: 108 | '@babel/types': 7.23.4 109 | 110 | /@babel/helper-module-imports@7.22.15: 111 | resolution: {integrity: sha512-0pYVBnDKZO2fnSPCrgM/6WMc7eS20Fbok+0r88fp+YtWVLZrp4CkafFGIp+W0VKw4a22sgebPT99y+FDNMdP4w==} 112 | engines: {node: '>=6.9.0'} 113 | dependencies: 114 | '@babel/types': 7.23.4 115 | 116 | /@babel/helper-module-transforms@7.23.3(@babel/core@7.23.3): 117 | resolution: {integrity: sha512-7bBs4ED9OmswdfDzpz4MpWgSrV7FXlc3zIagvLFjS5H+Mk7Snr21vQ6QwrsoCGMfNC4e4LQPdoULEt4ykz0SRQ==} 118 | engines: {node: '>=6.9.0'} 119 | peerDependencies: 120 | '@babel/core': ^7.0.0 121 | dependencies: 122 | '@babel/core': 7.23.3 123 | '@babel/helper-environment-visitor': 7.22.20 124 | '@babel/helper-module-imports': 7.22.15 125 | '@babel/helper-simple-access': 7.22.5 126 | '@babel/helper-split-export-declaration': 7.22.6 127 | '@babel/helper-validator-identifier': 7.22.20 128 | 129 | /@babel/helper-plugin-utils@7.22.5: 130 | resolution: {integrity: sha512-uLls06UVKgFG9QD4OeFYLEGteMIAa5kpTPcFL28yuCIIzsf6ZyKZMllKVOCZFhiZ5ptnwX4mtKdWCBE/uT4amg==} 131 | engines: {node: '>=6.9.0'} 132 | dev: true 133 | 134 | /@babel/helper-simple-access@7.22.5: 135 | resolution: {integrity: sha512-n0H99E/K+Bika3++WNL17POvo4rKWZ7lZEp1Q+fStVbUi8nxPQEBOlTmCOxW/0JsS56SKKQ+ojAe2pHKJHN35w==} 136 | engines: {node: '>=6.9.0'} 137 | dependencies: 138 | '@babel/types': 7.23.4 139 | 140 | /@babel/helper-split-export-declaration@7.22.6: 141 | resolution: {integrity: sha512-AsUnxuLhRYsisFiaJwvp1QF+I3KjD5FOxut14q/GzovUe6orHLesW2C7d754kRm53h5gqrz6sFl6sxc4BVtE/g==} 142 | engines: {node: '>=6.9.0'} 143 | dependencies: 144 | '@babel/types': 7.23.4 145 | 146 | /@babel/helper-string-parser@7.23.4: 147 | resolution: {integrity: sha512-803gmbQdqwdf4olxrX4AJyFBV/RTr3rSmOj0rKwesmzlfhYNDEs+/iOcznzpNWlJlIlTJC2QfPFcHB6DlzdVLQ==} 148 | engines: {node: '>=6.9.0'} 149 | 150 | /@babel/helper-validator-identifier@7.22.20: 151 | resolution: {integrity: sha512-Y4OZ+ytlatR8AI+8KZfKuL5urKp7qey08ha31L8b3BwewJAoJamTzyvxPR/5D+KkdJCGPq/+8TukHBlY10FX9A==} 152 | engines: {node: '>=6.9.0'} 153 | 154 | /@babel/helper-validator-option@7.22.15: 155 | resolution: {integrity: sha512-bMn7RmyFjY/mdECUbgn9eoSY4vqvacUnS9i9vGAGttgFWesO6B4CYWA7XlpbWgBt71iv/hfbPlynohStqnu5hA==} 156 | engines: {node: '>=6.9.0'} 157 | 158 | /@babel/helpers@7.23.4: 159 | resolution: {integrity: sha512-HfcMizYz10cr3h29VqyfGL6ZWIjTwWfvYBMsBVGwpcbhNGe3wQ1ZXZRPzZoAHhd9OqHadHqjQ89iVKINXnbzuw==} 160 | engines: {node: '>=6.9.0'} 161 | dependencies: 162 | '@babel/template': 7.22.15 163 | '@babel/traverse': 7.23.4 164 | '@babel/types': 7.23.4 165 | transitivePeerDependencies: 166 | - supports-color 167 | 168 | /@babel/highlight@7.23.4: 169 | resolution: {integrity: sha512-acGdbYSfp2WheJoJm/EBBBLh/ID8KDc64ISZ9DYtBmC8/Q204PZJLHyzeB5qMzJ5trcOkybd78M4x2KWsUq++A==} 170 | engines: {node: '>=6.9.0'} 171 | dependencies: 172 | '@babel/helper-validator-identifier': 7.22.20 173 | chalk: 2.4.2 174 | js-tokens: 4.0.0 175 | 176 | /@babel/parser@7.23.4: 177 | resolution: {integrity: sha512-vf3Xna6UEprW+7t6EtOmFpHNAuxw3xqPZghy+brsnusscJRW5BMUzzHZc5ICjULee81WeUV2jjakG09MDglJXQ==} 178 | engines: {node: '>=6.0.0'} 179 | hasBin: true 180 | dependencies: 181 | '@babel/types': 7.23.4 182 | 183 | /@babel/plugin-syntax-async-generators@7.8.4(@babel/core@7.23.3): 184 | resolution: {integrity: sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==} 185 | peerDependencies: 186 | '@babel/core': ^7.0.0-0 187 | dependencies: 188 | '@babel/core': 7.23.3 189 | '@babel/helper-plugin-utils': 7.22.5 190 | dev: true 191 | 192 | /@babel/plugin-syntax-bigint@7.8.3(@babel/core@7.23.3): 193 | resolution: {integrity: sha512-wnTnFlG+YxQm3vDxpGE57Pj0srRU4sHE/mDkt1qv2YJJSeUAec2ma4WLUnUPeKjyrfntVwe/N6dCXpU+zL3Npg==} 194 | peerDependencies: 195 | '@babel/core': ^7.0.0-0 196 | dependencies: 197 | '@babel/core': 7.23.3 198 | '@babel/helper-plugin-utils': 7.22.5 199 | dev: true 200 | 201 | /@babel/plugin-syntax-class-properties@7.12.13(@babel/core@7.23.3): 202 | resolution: {integrity: sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==} 203 | peerDependencies: 204 | '@babel/core': ^7.0.0-0 205 | dependencies: 206 | '@babel/core': 7.23.3 207 | '@babel/helper-plugin-utils': 7.22.5 208 | dev: true 209 | 210 | /@babel/plugin-syntax-import-meta@7.10.4(@babel/core@7.23.3): 211 | resolution: {integrity: sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g==} 212 | peerDependencies: 213 | '@babel/core': ^7.0.0-0 214 | dependencies: 215 | '@babel/core': 7.23.3 216 | '@babel/helper-plugin-utils': 7.22.5 217 | dev: true 218 | 219 | /@babel/plugin-syntax-json-strings@7.8.3(@babel/core@7.23.3): 220 | resolution: {integrity: sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==} 221 | peerDependencies: 222 | '@babel/core': ^7.0.0-0 223 | dependencies: 224 | '@babel/core': 7.23.3 225 | '@babel/helper-plugin-utils': 7.22.5 226 | dev: true 227 | 228 | /@babel/plugin-syntax-jsx@7.23.3(@babel/core@7.23.3): 229 | resolution: {integrity: sha512-EB2MELswq55OHUoRZLGg/zC7QWUKfNLpE57m/S2yr1uEneIgsTgrSzXP3NXEsMkVn76OlaVVnzN+ugObuYGwhg==} 230 | engines: {node: '>=6.9.0'} 231 | peerDependencies: 232 | '@babel/core': ^7.0.0-0 233 | dependencies: 234 | '@babel/core': 7.23.3 235 | '@babel/helper-plugin-utils': 7.22.5 236 | dev: true 237 | 238 | /@babel/plugin-syntax-logical-assignment-operators@7.10.4(@babel/core@7.23.3): 239 | resolution: {integrity: sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==} 240 | peerDependencies: 241 | '@babel/core': ^7.0.0-0 242 | dependencies: 243 | '@babel/core': 7.23.3 244 | '@babel/helper-plugin-utils': 7.22.5 245 | dev: true 246 | 247 | /@babel/plugin-syntax-nullish-coalescing-operator@7.8.3(@babel/core@7.23.3): 248 | resolution: {integrity: sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==} 249 | peerDependencies: 250 | '@babel/core': ^7.0.0-0 251 | dependencies: 252 | '@babel/core': 7.23.3 253 | '@babel/helper-plugin-utils': 7.22.5 254 | dev: true 255 | 256 | /@babel/plugin-syntax-numeric-separator@7.10.4(@babel/core@7.23.3): 257 | resolution: {integrity: sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==} 258 | peerDependencies: 259 | '@babel/core': ^7.0.0-0 260 | dependencies: 261 | '@babel/core': 7.23.3 262 | '@babel/helper-plugin-utils': 7.22.5 263 | dev: true 264 | 265 | /@babel/plugin-syntax-object-rest-spread@7.8.3(@babel/core@7.23.3): 266 | resolution: {integrity: sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==} 267 | peerDependencies: 268 | '@babel/core': ^7.0.0-0 269 | dependencies: 270 | '@babel/core': 7.23.3 271 | '@babel/helper-plugin-utils': 7.22.5 272 | dev: true 273 | 274 | /@babel/plugin-syntax-optional-catch-binding@7.8.3(@babel/core@7.23.3): 275 | resolution: {integrity: sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==} 276 | peerDependencies: 277 | '@babel/core': ^7.0.0-0 278 | dependencies: 279 | '@babel/core': 7.23.3 280 | '@babel/helper-plugin-utils': 7.22.5 281 | dev: true 282 | 283 | /@babel/plugin-syntax-optional-chaining@7.8.3(@babel/core@7.23.3): 284 | resolution: {integrity: sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==} 285 | peerDependencies: 286 | '@babel/core': ^7.0.0-0 287 | dependencies: 288 | '@babel/core': 7.23.3 289 | '@babel/helper-plugin-utils': 7.22.5 290 | dev: true 291 | 292 | /@babel/plugin-syntax-top-level-await@7.14.5(@babel/core@7.23.3): 293 | resolution: {integrity: sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==} 294 | engines: {node: '>=6.9.0'} 295 | peerDependencies: 296 | '@babel/core': ^7.0.0-0 297 | dependencies: 298 | '@babel/core': 7.23.3 299 | '@babel/helper-plugin-utils': 7.22.5 300 | dev: true 301 | 302 | /@babel/plugin-syntax-typescript@7.23.3(@babel/core@7.23.3): 303 | resolution: {integrity: sha512-9EiNjVJOMwCO+43TqoTrgQ8jMwcAd0sWyXi9RPfIsLTj4R2MADDDQXELhffaUx/uJv2AYcxBgPwH6j4TIA4ytQ==} 304 | engines: {node: '>=6.9.0'} 305 | peerDependencies: 306 | '@babel/core': ^7.0.0-0 307 | dependencies: 308 | '@babel/core': 7.23.3 309 | '@babel/helper-plugin-utils': 7.22.5 310 | dev: true 311 | 312 | /@babel/template@7.22.15: 313 | resolution: {integrity: sha512-QPErUVm4uyJa60rkI73qneDacvdvzxshT3kksGqlGWYdOTIUOwJ7RDUL8sGqslY1uXWSL6xMFKEXDS3ox2uF0w==} 314 | engines: {node: '>=6.9.0'} 315 | dependencies: 316 | '@babel/code-frame': 7.23.4 317 | '@babel/parser': 7.23.4 318 | '@babel/types': 7.23.4 319 | 320 | /@babel/traverse@7.23.4: 321 | resolution: {integrity: sha512-IYM8wSUwunWTB6tFC2dkKZhxbIjHoWemdK+3f8/wq8aKhbUscxD5MX72ubd90fxvFknaLPeGw5ycU84V1obHJg==} 322 | engines: {node: '>=6.9.0'} 323 | dependencies: 324 | '@babel/code-frame': 7.23.4 325 | '@babel/generator': 7.23.4 326 | '@babel/helper-environment-visitor': 7.22.20 327 | '@babel/helper-function-name': 7.23.0 328 | '@babel/helper-hoist-variables': 7.22.5 329 | '@babel/helper-split-export-declaration': 7.22.6 330 | '@babel/parser': 7.23.4 331 | '@babel/types': 7.23.4 332 | debug: 4.3.4 333 | globals: 11.12.0 334 | transitivePeerDependencies: 335 | - supports-color 336 | 337 | /@babel/types@7.23.4: 338 | resolution: {integrity: sha512-7uIFwVYpoplT5jp/kVv6EF93VaJ8H+Yn5IczYiaAi98ajzjfoZfslet/e0sLh+wVBjb2qqIut1b0S26VSafsSQ==} 339 | engines: {node: '>=6.9.0'} 340 | dependencies: 341 | '@babel/helper-string-parser': 7.23.4 342 | '@babel/helper-validator-identifier': 7.22.20 343 | to-fast-properties: 2.0.0 344 | 345 | /@bcoe/v8-coverage@0.2.3: 346 | resolution: {integrity: sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==} 347 | dev: true 348 | 349 | /@istanbuljs/load-nyc-config@1.1.0: 350 | resolution: {integrity: sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ==} 351 | engines: {node: '>=8'} 352 | dependencies: 353 | camelcase: 5.3.1 354 | find-up: 4.1.0 355 | get-package-type: 0.1.0 356 | js-yaml: 3.14.1 357 | resolve-from: 5.0.0 358 | dev: true 359 | 360 | /@istanbuljs/schema@0.1.3: 361 | resolution: {integrity: sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==} 362 | engines: {node: '>=8'} 363 | dev: true 364 | 365 | /@jest/console@29.7.0: 366 | resolution: {integrity: sha512-5Ni4CU7XHQi32IJ398EEP4RrB8eV09sXP2ROqD4bksHrnTree52PsxvX8tpL8LvTZ3pFzXyPbNQReSN41CAhOg==} 367 | engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} 368 | dependencies: 369 | '@jest/types': 29.6.3 370 | '@types/node': 20.9.3 371 | chalk: 4.1.2 372 | jest-message-util: 29.7.0 373 | jest-util: 29.7.0 374 | slash: 3.0.0 375 | dev: true 376 | 377 | /@jest/core@29.7.0: 378 | resolution: {integrity: sha512-n7aeXWKMnGtDA48y8TLWJPJmLmmZ642Ceo78cYWEpiD7FzDgmNDV/GCVRorPABdXLJZ/9wzzgZAlHjXjxDHGsg==} 379 | engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} 380 | peerDependencies: 381 | node-notifier: ^8.0.1 || ^9.0.0 || ^10.0.0 382 | peerDependenciesMeta: 383 | node-notifier: 384 | optional: true 385 | dependencies: 386 | '@jest/console': 29.7.0 387 | '@jest/reporters': 29.7.0 388 | '@jest/test-result': 29.7.0 389 | '@jest/transform': 29.7.0 390 | '@jest/types': 29.6.3 391 | '@types/node': 20.9.3 392 | ansi-escapes: 4.3.2 393 | chalk: 4.1.2 394 | ci-info: 3.9.0 395 | exit: 0.1.2 396 | graceful-fs: 4.2.11 397 | jest-changed-files: 29.7.0 398 | jest-config: 29.7.0(@types/node@20.9.3) 399 | jest-haste-map: 29.7.0 400 | jest-message-util: 29.7.0 401 | jest-regex-util: 29.6.3 402 | jest-resolve: 29.7.0 403 | jest-resolve-dependencies: 29.7.0 404 | jest-runner: 29.7.0 405 | jest-runtime: 29.7.0 406 | jest-snapshot: 29.7.0 407 | jest-util: 29.7.0 408 | jest-validate: 29.7.0 409 | jest-watcher: 29.7.0 410 | micromatch: 4.0.5 411 | pretty-format: 29.7.0 412 | slash: 3.0.0 413 | strip-ansi: 6.0.1 414 | transitivePeerDependencies: 415 | - babel-plugin-macros 416 | - supports-color 417 | - ts-node 418 | dev: true 419 | 420 | /@jest/environment@29.7.0: 421 | resolution: {integrity: sha512-aQIfHDq33ExsN4jP1NWGXhxgQ/wixs60gDiKO+XVMd8Mn0NWPWgc34ZQDTb2jKaUWQ7MuwoitXAsN2XVXNMpAw==} 422 | engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} 423 | dependencies: 424 | '@jest/fake-timers': 29.7.0 425 | '@jest/types': 29.6.3 426 | '@types/node': 20.9.3 427 | jest-mock: 29.7.0 428 | dev: true 429 | 430 | /@jest/expect-utils@29.7.0: 431 | resolution: {integrity: sha512-GlsNBWiFQFCVi9QVSx7f5AgMeLxe9YCCs5PuP2O2LdjDAA8Jh9eX7lA1Jq/xdXw3Wb3hyvlFNfZIfcRetSzYcA==} 432 | engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} 433 | dependencies: 434 | jest-get-type: 29.6.3 435 | dev: true 436 | 437 | /@jest/expect@29.7.0: 438 | resolution: {integrity: sha512-8uMeAMycttpva3P1lBHB8VciS9V0XAr3GymPpipdyQXbBcuhkLQOSe8E/p92RyAdToS6ZD1tFkX+CkhoECE0dQ==} 439 | engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} 440 | dependencies: 441 | expect: 29.7.0 442 | jest-snapshot: 29.7.0 443 | transitivePeerDependencies: 444 | - supports-color 445 | dev: true 446 | 447 | /@jest/fake-timers@29.7.0: 448 | resolution: {integrity: sha512-q4DH1Ha4TTFPdxLsqDXK1d3+ioSL7yL5oCMJZgDYm6i+6CygW5E5xVr/D1HdsGxjt1ZWSfUAs9OxSB/BNelWrQ==} 449 | engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} 450 | dependencies: 451 | '@jest/types': 29.6.3 452 | '@sinonjs/fake-timers': 10.3.0 453 | '@types/node': 20.9.3 454 | jest-message-util: 29.7.0 455 | jest-mock: 29.7.0 456 | jest-util: 29.7.0 457 | dev: true 458 | 459 | /@jest/globals@29.7.0: 460 | resolution: {integrity: sha512-mpiz3dutLbkW2MNFubUGUEVLkTGiqW6yLVTA+JbP6fI6J5iL9Y0Nlg8k95pcF8ctKwCS7WVxteBs29hhfAotzQ==} 461 | engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} 462 | dependencies: 463 | '@jest/environment': 29.7.0 464 | '@jest/expect': 29.7.0 465 | '@jest/types': 29.6.3 466 | jest-mock: 29.7.0 467 | transitivePeerDependencies: 468 | - supports-color 469 | dev: true 470 | 471 | /@jest/reporters@29.7.0: 472 | resolution: {integrity: sha512-DApq0KJbJOEzAFYjHADNNxAE3KbhxQB1y5Kplb5Waqw6zVbuWatSnMjE5gs8FUgEPmNsnZA3NCWl9NG0ia04Pg==} 473 | engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} 474 | peerDependencies: 475 | node-notifier: ^8.0.1 || ^9.0.0 || ^10.0.0 476 | peerDependenciesMeta: 477 | node-notifier: 478 | optional: true 479 | dependencies: 480 | '@bcoe/v8-coverage': 0.2.3 481 | '@jest/console': 29.7.0 482 | '@jest/test-result': 29.7.0 483 | '@jest/transform': 29.7.0 484 | '@jest/types': 29.6.3 485 | '@jridgewell/trace-mapping': 0.3.20 486 | '@types/node': 20.9.3 487 | chalk: 4.1.2 488 | collect-v8-coverage: 1.0.2 489 | exit: 0.1.2 490 | glob: 7.2.3 491 | graceful-fs: 4.2.11 492 | istanbul-lib-coverage: 3.2.2 493 | istanbul-lib-instrument: 6.0.1 494 | istanbul-lib-report: 3.0.1 495 | istanbul-lib-source-maps: 4.0.1 496 | istanbul-reports: 3.1.6 497 | jest-message-util: 29.7.0 498 | jest-util: 29.7.0 499 | jest-worker: 29.7.0 500 | slash: 3.0.0 501 | string-length: 4.0.2 502 | strip-ansi: 6.0.1 503 | v8-to-istanbul: 9.1.3 504 | transitivePeerDependencies: 505 | - supports-color 506 | dev: true 507 | 508 | /@jest/schemas@29.6.3: 509 | resolution: {integrity: sha512-mo5j5X+jIZmJQveBKeS/clAueipV7KgiX1vMgCxam1RNYiqE1w62n0/tJJnHtjW8ZHcQco5gY85jA3mi0L+nSA==} 510 | engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} 511 | dependencies: 512 | '@sinclair/typebox': 0.27.8 513 | dev: true 514 | 515 | /@jest/source-map@29.6.3: 516 | resolution: {integrity: sha512-MHjT95QuipcPrpLM+8JMSzFx6eHp5Bm+4XeFDJlwsvVBjmKNiIAvasGK2fxz2WbGRlnvqehFbh07MMa7n3YJnw==} 517 | engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} 518 | dependencies: 519 | '@jridgewell/trace-mapping': 0.3.20 520 | callsites: 3.1.0 521 | graceful-fs: 4.2.11 522 | dev: true 523 | 524 | /@jest/test-result@29.7.0: 525 | resolution: {integrity: sha512-Fdx+tv6x1zlkJPcWXmMDAG2HBnaR9XPSd5aDWQVsfrZmLVT3lU1cwyxLgRmXR9yrq4NBoEm9BMsfgFzTQAbJYA==} 526 | engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} 527 | dependencies: 528 | '@jest/console': 29.7.0 529 | '@jest/types': 29.6.3 530 | '@types/istanbul-lib-coverage': 2.0.6 531 | collect-v8-coverage: 1.0.2 532 | dev: true 533 | 534 | /@jest/test-sequencer@29.7.0: 535 | resolution: {integrity: sha512-GQwJ5WZVrKnOJuiYiAF52UNUJXgTZx1NHjFSEB0qEMmSZKAkdMoIzw/Cj6x6NF4AvV23AUqDpFzQkN/eYCYTxw==} 536 | engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} 537 | dependencies: 538 | '@jest/test-result': 29.7.0 539 | graceful-fs: 4.2.11 540 | jest-haste-map: 29.7.0 541 | slash: 3.0.0 542 | dev: true 543 | 544 | /@jest/transform@29.7.0: 545 | resolution: {integrity: sha512-ok/BTPFzFKVMwO5eOHRrvnBVHdRy9IrsrW1GpMaQ9MCnilNLXQKmAX8s1YXDFaai9xJpac2ySzV0YeRRECr2Vw==} 546 | engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} 547 | dependencies: 548 | '@babel/core': 7.23.3 549 | '@jest/types': 29.6.3 550 | '@jridgewell/trace-mapping': 0.3.20 551 | babel-plugin-istanbul: 6.1.1 552 | chalk: 4.1.2 553 | convert-source-map: 2.0.0 554 | fast-json-stable-stringify: 2.1.0 555 | graceful-fs: 4.2.11 556 | jest-haste-map: 29.7.0 557 | jest-regex-util: 29.6.3 558 | jest-util: 29.7.0 559 | micromatch: 4.0.5 560 | pirates: 4.0.6 561 | slash: 3.0.0 562 | write-file-atomic: 4.0.2 563 | transitivePeerDependencies: 564 | - supports-color 565 | dev: true 566 | 567 | /@jest/types@29.6.3: 568 | resolution: {integrity: sha512-u3UPsIilWKOM3F9CXtrG8LEJmNxwoCQC/XVj4IKYXvvpx7QIi/Kg1LI5uDmDpKlac62NUtX7eLjRh+jVZcLOzw==} 569 | engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} 570 | dependencies: 571 | '@jest/schemas': 29.6.3 572 | '@types/istanbul-lib-coverage': 2.0.6 573 | '@types/istanbul-reports': 3.0.4 574 | '@types/node': 20.9.3 575 | '@types/yargs': 17.0.32 576 | chalk: 4.1.2 577 | dev: true 578 | 579 | /@jridgewell/gen-mapping@0.3.3: 580 | resolution: {integrity: sha512-HLhSWOLRi875zjjMG/r+Nv0oCW8umGb0BgEhyX3dDX3egwZtB8PqLnjz3yedt8R5StBrzcg4aBpnh8UA9D1BoQ==} 581 | engines: {node: '>=6.0.0'} 582 | dependencies: 583 | '@jridgewell/set-array': 1.1.2 584 | '@jridgewell/sourcemap-codec': 1.4.15 585 | '@jridgewell/trace-mapping': 0.3.20 586 | 587 | /@jridgewell/resolve-uri@3.1.1: 588 | resolution: {integrity: sha512-dSYZh7HhCDtCKm4QakX0xFpsRDqjjtZf/kjI/v3T3Nwt5r8/qz/M19F9ySyOqU94SXBmeG9ttTul+YnR4LOxFA==} 589 | engines: {node: '>=6.0.0'} 590 | 591 | /@jridgewell/set-array@1.1.2: 592 | resolution: {integrity: sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==} 593 | engines: {node: '>=6.0.0'} 594 | 595 | /@jridgewell/sourcemap-codec@1.4.15: 596 | resolution: {integrity: sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==} 597 | 598 | /@jridgewell/trace-mapping@0.3.20: 599 | resolution: {integrity: sha512-R8LcPeWZol2zR8mmH3JeKQ6QRCFb7XgUhV9ZlGhHLGyg4wpPiPZNQOOWhFZhxKw8u//yTbNGI42Bx/3paXEQ+Q==} 600 | dependencies: 601 | '@jridgewell/resolve-uri': 3.1.1 602 | '@jridgewell/sourcemap-codec': 1.4.15 603 | 604 | /@sinclair/typebox@0.27.8: 605 | resolution: {integrity: sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA==} 606 | dev: true 607 | 608 | /@sinonjs/commons@3.0.0: 609 | resolution: {integrity: sha512-jXBtWAF4vmdNmZgD5FoKsVLv3rPgDnLgPbU84LIJ3otV44vJlDRokVng5v8NFJdCf/da9legHcKaRuZs4L7faA==} 610 | dependencies: 611 | type-detect: 4.0.8 612 | dev: true 613 | 614 | /@sinonjs/fake-timers@10.3.0: 615 | resolution: {integrity: sha512-V4BG07kuYSUkTCSBHG8G8TNhM+F19jXFWnQtzj+we8DrkpSBCee9Z3Ms8yiGer/dlmhe35/Xdgyo3/0rQKg7YA==} 616 | dependencies: 617 | '@sinonjs/commons': 3.0.0 618 | dev: true 619 | 620 | /@types/babel__core@7.20.5: 621 | resolution: {integrity: sha512-qoQprZvz5wQFJwMDqeseRXWv3rqMvhgpbXFfVyWhbx9X47POIA6i/+dXefEmZKoAgOaTdaIgNSMqMIU61yRyzA==} 622 | dependencies: 623 | '@babel/parser': 7.23.4 624 | '@babel/types': 7.23.4 625 | '@types/babel__generator': 7.6.7 626 | '@types/babel__template': 7.4.4 627 | '@types/babel__traverse': 7.20.4 628 | dev: true 629 | 630 | /@types/babel__generator@7.6.7: 631 | resolution: {integrity: sha512-6Sfsq+EaaLrw4RmdFWE9Onp63TOUue71AWb4Gpa6JxzgTYtimbM086WnYTy2U67AofR++QKCo08ZP6pwx8YFHQ==} 632 | dependencies: 633 | '@babel/types': 7.23.4 634 | dev: true 635 | 636 | /@types/babel__template@7.4.4: 637 | resolution: {integrity: sha512-h/NUaSyG5EyxBIp8YRxo4RMe2/qQgvyowRwVMzhYhBCONbW8PUsg4lkFMrhgZhUe5z3L3MiLDuvyJ/CaPa2A8A==} 638 | dependencies: 639 | '@babel/parser': 7.23.4 640 | '@babel/types': 7.23.4 641 | dev: true 642 | 643 | /@types/babel__traverse@7.20.4: 644 | resolution: {integrity: sha512-mSM/iKUk5fDDrEV/e83qY+Cr3I1+Q3qqTuEn++HAWYjEa1+NxZr6CNrcJGf2ZTnq4HoFGC3zaTPZTobCzCFukA==} 645 | dependencies: 646 | '@babel/types': 7.23.4 647 | dev: true 648 | 649 | /@types/graceful-fs@4.1.9: 650 | resolution: {integrity: sha512-olP3sd1qOEe5dXTSaFvQG+02VdRXcdytWLAZsAq1PecU8uqQAhkrnbli7DagjtXKW/Bl7YJbUsa8MPcuc8LHEQ==} 651 | dependencies: 652 | '@types/node': 20.9.3 653 | dev: true 654 | 655 | /@types/istanbul-lib-coverage@2.0.6: 656 | resolution: {integrity: sha512-2QF/t/auWm0lsy8XtKVPG19v3sSOQlJe/YHZgfjb/KBBHOGSV+J2q/S671rcq9uTBrLAXmZpqJiaQbMT+zNU1w==} 657 | dev: true 658 | 659 | /@types/istanbul-lib-report@3.0.3: 660 | resolution: {integrity: sha512-NQn7AHQnk/RSLOxrBbGyJM/aVQ+pjj5HCgasFxc0K/KhoATfQ/47AyUl15I2yBUpihjmas+a+VJBOqecrFH+uA==} 661 | dependencies: 662 | '@types/istanbul-lib-coverage': 2.0.6 663 | dev: true 664 | 665 | /@types/istanbul-reports@3.0.4: 666 | resolution: {integrity: sha512-pk2B1NWalF9toCRu6gjBzR69syFjP4Od8WRAX+0mmf9lAjCRicLOWc+ZrxZHx/0XRjotgkF9t6iaMJ+aXcOdZQ==} 667 | dependencies: 668 | '@types/istanbul-lib-report': 3.0.3 669 | dev: true 670 | 671 | /@types/node@20.9.3: 672 | resolution: {integrity: sha512-nk5wXLAXGBKfrhLB0cyHGbSqopS+nz0BUgZkUQqSHSSgdee0kssp1IAqlQOu333bW+gMNs2QREx7iynm19Abxw==} 673 | dependencies: 674 | undici-types: 5.26.5 675 | dev: true 676 | 677 | /@types/stack-utils@2.0.3: 678 | resolution: {integrity: sha512-9aEbYZ3TbYMznPdcdr3SmIrLXwC/AKZXQeCf9Pgao5CKb8CyHuEX5jzWPTkvregvhRJHcpRO6BFoGW9ycaOkYw==} 679 | dev: true 680 | 681 | /@types/yargs-parser@21.0.3: 682 | resolution: {integrity: sha512-I4q9QU9MQv4oEOz4tAHJtNz1cwuLxn2F3xcc2iV5WdqLPpUnj30aUuxt1mAxYTG+oe8CZMV/+6rU4S4gRDzqtQ==} 683 | dev: true 684 | 685 | /@types/yargs@17.0.32: 686 | resolution: {integrity: sha512-xQ67Yc/laOG5uMfX/093MRlGGCIBzZMarVa+gfNKJxWAIgykYpVGkBdbqEzGDDfCrVUj6Hiff4mTZ5BA6TmAog==} 687 | dependencies: 688 | '@types/yargs-parser': 21.0.3 689 | dev: true 690 | 691 | /ansi-escapes@4.3.2: 692 | resolution: {integrity: sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==} 693 | engines: {node: '>=8'} 694 | dependencies: 695 | type-fest: 0.21.3 696 | dev: true 697 | 698 | /ansi-regex@5.0.1: 699 | resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==} 700 | engines: {node: '>=8'} 701 | dev: true 702 | 703 | /ansi-styles@3.2.1: 704 | resolution: {integrity: sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==} 705 | engines: {node: '>=4'} 706 | dependencies: 707 | color-convert: 1.9.3 708 | 709 | /ansi-styles@4.3.0: 710 | resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==} 711 | engines: {node: '>=8'} 712 | dependencies: 713 | color-convert: 2.0.1 714 | dev: true 715 | 716 | /ansi-styles@5.2.0: 717 | resolution: {integrity: sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==} 718 | engines: {node: '>=10'} 719 | dev: true 720 | 721 | /anymatch@3.1.3: 722 | resolution: {integrity: sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==} 723 | engines: {node: '>= 8'} 724 | dependencies: 725 | normalize-path: 3.0.0 726 | picomatch: 2.3.1 727 | dev: true 728 | 729 | /argparse@1.0.10: 730 | resolution: {integrity: sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==} 731 | dependencies: 732 | sprintf-js: 1.0.3 733 | dev: true 734 | 735 | /babel-jest@29.7.0(@babel/core@7.23.3): 736 | resolution: {integrity: sha512-BrvGY3xZSwEcCzKvKsCi2GgHqDqsYkOP4/by5xCgIwGXQxIEh+8ew3gmrE1y7XRR6LHZIj6yLYnUi/mm2KXKBg==} 737 | engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} 738 | peerDependencies: 739 | '@babel/core': ^7.8.0 740 | dependencies: 741 | '@babel/core': 7.23.3 742 | '@jest/transform': 29.7.0 743 | '@types/babel__core': 7.20.5 744 | babel-plugin-istanbul: 6.1.1 745 | babel-preset-jest: 29.6.3(@babel/core@7.23.3) 746 | chalk: 4.1.2 747 | graceful-fs: 4.2.11 748 | slash: 3.0.0 749 | transitivePeerDependencies: 750 | - supports-color 751 | dev: true 752 | 753 | /babel-plugin-istanbul@6.1.1: 754 | resolution: {integrity: sha512-Y1IQok9821cC9onCx5otgFfRm7Lm+I+wwxOx738M/WLPZ9Q42m4IG5W0FNX8WLL2gYMZo3JkuXIH2DOpWM+qwA==} 755 | engines: {node: '>=8'} 756 | dependencies: 757 | '@babel/helper-plugin-utils': 7.22.5 758 | '@istanbuljs/load-nyc-config': 1.1.0 759 | '@istanbuljs/schema': 0.1.3 760 | istanbul-lib-instrument: 5.2.1 761 | test-exclude: 6.0.0 762 | transitivePeerDependencies: 763 | - supports-color 764 | dev: true 765 | 766 | /babel-plugin-jest-hoist@29.6.3: 767 | resolution: {integrity: sha512-ESAc/RJvGTFEzRwOTT4+lNDk/GNHMkKbNzsvT0qKRfDyyYTskxB5rnU2njIDYVxXCBHHEI1c0YwHob3WaYujOg==} 768 | engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} 769 | dependencies: 770 | '@babel/template': 7.22.15 771 | '@babel/types': 7.23.4 772 | '@types/babel__core': 7.20.5 773 | '@types/babel__traverse': 7.20.4 774 | dev: true 775 | 776 | /babel-preset-current-node-syntax@1.0.1(@babel/core@7.23.3): 777 | resolution: {integrity: sha512-M7LQ0bxarkxQoN+vz5aJPsLBn77n8QgTFmo8WK0/44auK2xlCXrYcUxHFxgU7qW5Yzw/CjmLRK2uJzaCd7LvqQ==} 778 | peerDependencies: 779 | '@babel/core': ^7.0.0 780 | dependencies: 781 | '@babel/core': 7.23.3 782 | '@babel/plugin-syntax-async-generators': 7.8.4(@babel/core@7.23.3) 783 | '@babel/plugin-syntax-bigint': 7.8.3(@babel/core@7.23.3) 784 | '@babel/plugin-syntax-class-properties': 7.12.13(@babel/core@7.23.3) 785 | '@babel/plugin-syntax-import-meta': 7.10.4(@babel/core@7.23.3) 786 | '@babel/plugin-syntax-json-strings': 7.8.3(@babel/core@7.23.3) 787 | '@babel/plugin-syntax-logical-assignment-operators': 7.10.4(@babel/core@7.23.3) 788 | '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3(@babel/core@7.23.3) 789 | '@babel/plugin-syntax-numeric-separator': 7.10.4(@babel/core@7.23.3) 790 | '@babel/plugin-syntax-object-rest-spread': 7.8.3(@babel/core@7.23.3) 791 | '@babel/plugin-syntax-optional-catch-binding': 7.8.3(@babel/core@7.23.3) 792 | '@babel/plugin-syntax-optional-chaining': 7.8.3(@babel/core@7.23.3) 793 | '@babel/plugin-syntax-top-level-await': 7.14.5(@babel/core@7.23.3) 794 | dev: true 795 | 796 | /babel-preset-jest@29.6.3(@babel/core@7.23.3): 797 | resolution: {integrity: sha512-0B3bhxR6snWXJZtR/RliHTDPRgn1sNHOR0yVtq/IiQFyuOVjFS+wuio/R4gSNkyYmKmJB4wGZv2NZanmKmTnNA==} 798 | engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} 799 | peerDependencies: 800 | '@babel/core': ^7.0.0 801 | dependencies: 802 | '@babel/core': 7.23.3 803 | babel-plugin-jest-hoist: 29.6.3 804 | babel-preset-current-node-syntax: 1.0.1(@babel/core@7.23.3) 805 | dev: true 806 | 807 | /balanced-match@1.0.2: 808 | resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} 809 | dev: true 810 | 811 | /brace-expansion@1.1.11: 812 | resolution: {integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==} 813 | dependencies: 814 | balanced-match: 1.0.2 815 | concat-map: 0.0.1 816 | dev: true 817 | 818 | /braces@3.0.2: 819 | resolution: {integrity: sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==} 820 | engines: {node: '>=8'} 821 | dependencies: 822 | fill-range: 7.0.1 823 | dev: true 824 | 825 | /browserslist@4.22.1: 826 | resolution: {integrity: sha512-FEVc202+2iuClEhZhrWy6ZiAcRLvNMyYcxZ8raemul1DYVOVdFsbqckWLdsixQZCpJlwe77Z3UTalE7jsjnKfQ==} 827 | engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} 828 | hasBin: true 829 | dependencies: 830 | caniuse-lite: 1.0.30001563 831 | electron-to-chromium: 1.4.590 832 | node-releases: 2.0.13 833 | update-browserslist-db: 1.0.13(browserslist@4.22.1) 834 | 835 | /bser@2.1.1: 836 | resolution: {integrity: sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ==} 837 | dependencies: 838 | node-int64: 0.4.0 839 | dev: true 840 | 841 | /buffer-from@1.1.2: 842 | resolution: {integrity: sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==} 843 | dev: true 844 | 845 | /callsites@3.1.0: 846 | resolution: {integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==} 847 | engines: {node: '>=6'} 848 | dev: true 849 | 850 | /camelcase@5.3.1: 851 | resolution: {integrity: sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==} 852 | engines: {node: '>=6'} 853 | dev: true 854 | 855 | /camelcase@6.3.0: 856 | resolution: {integrity: sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==} 857 | engines: {node: '>=10'} 858 | dev: true 859 | 860 | /caniuse-lite@1.0.30001563: 861 | resolution: {integrity: sha512-na2WUmOxnwIZtwnFI2CZ/3er0wdNzU7hN+cPYz/z2ajHThnkWjNBOpEPP4n+4r2WPM847JaMotaJE3bnfzjyKw==} 862 | 863 | /chalk@2.4.2: 864 | resolution: {integrity: sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==} 865 | engines: {node: '>=4'} 866 | dependencies: 867 | ansi-styles: 3.2.1 868 | escape-string-regexp: 1.0.5 869 | supports-color: 5.5.0 870 | 871 | /chalk@4.1.2: 872 | resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==} 873 | engines: {node: '>=10'} 874 | dependencies: 875 | ansi-styles: 4.3.0 876 | supports-color: 7.2.0 877 | dev: true 878 | 879 | /char-regex@1.0.2: 880 | resolution: {integrity: sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw==} 881 | engines: {node: '>=10'} 882 | dev: true 883 | 884 | /ci-info@3.9.0: 885 | resolution: {integrity: sha512-NIxF55hv4nSqQswkAeiOi1r83xy8JldOFDTWiug55KBu9Jnblncd2U6ViHmYgHf01TPZS77NJBhBMKdWj9HQMQ==} 886 | engines: {node: '>=8'} 887 | dev: true 888 | 889 | /cjs-module-lexer@1.2.3: 890 | resolution: {integrity: sha512-0TNiGstbQmCFwt4akjjBg5pLRTSyj/PkWQ1ZoO2zntmg9yLqSRxwEa4iCfQLGjqhiqBfOJa7W/E8wfGrTDmlZQ==} 891 | dev: true 892 | 893 | /cliui@8.0.1: 894 | resolution: {integrity: sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==} 895 | engines: {node: '>=12'} 896 | dependencies: 897 | string-width: 4.2.3 898 | strip-ansi: 6.0.1 899 | wrap-ansi: 7.0.0 900 | dev: true 901 | 902 | /co@4.6.0: 903 | resolution: {integrity: sha512-QVb0dM5HvG+uaxitm8wONl7jltx8dqhfU33DcqtOZcLSVIKSDDLDi7+0LbAKiyI8hD9u42m2YxXSkMGWThaecQ==} 904 | engines: {iojs: '>= 1.0.0', node: '>= 0.12.0'} 905 | dev: true 906 | 907 | /collect-v8-coverage@1.0.2: 908 | resolution: {integrity: sha512-lHl4d5/ONEbLlJvaJNtsF/Lz+WvB07u2ycqTYbdrq7UypDXailES4valYb2eWiJFxZlVmpGekfqoxQhzyFdT4Q==} 909 | dev: true 910 | 911 | /color-convert@1.9.3: 912 | resolution: {integrity: sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==} 913 | dependencies: 914 | color-name: 1.1.3 915 | 916 | /color-convert@2.0.1: 917 | resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==} 918 | engines: {node: '>=7.0.0'} 919 | dependencies: 920 | color-name: 1.1.4 921 | dev: true 922 | 923 | /color-name@1.1.3: 924 | resolution: {integrity: sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==} 925 | 926 | /color-name@1.1.4: 927 | resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==} 928 | dev: true 929 | 930 | /concat-map@0.0.1: 931 | resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==} 932 | dev: true 933 | 934 | /convert-source-map@2.0.0: 935 | resolution: {integrity: sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==} 936 | 937 | /create-jest@29.7.0(@types/node@20.9.3): 938 | resolution: {integrity: sha512-Adz2bdH0Vq3F53KEMJOoftQFutWCukm6J24wbPWRO4k1kMY7gS7ds/uoJkNuV8wDCtWWnuwGcJwpWcih+zEW1Q==} 939 | engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} 940 | hasBin: true 941 | dependencies: 942 | '@jest/types': 29.6.3 943 | chalk: 4.1.2 944 | exit: 0.1.2 945 | graceful-fs: 4.2.11 946 | jest-config: 29.7.0(@types/node@20.9.3) 947 | jest-util: 29.7.0 948 | prompts: 2.4.2 949 | transitivePeerDependencies: 950 | - '@types/node' 951 | - babel-plugin-macros 952 | - supports-color 953 | - ts-node 954 | dev: true 955 | 956 | /cross-spawn@7.0.3: 957 | resolution: {integrity: sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==} 958 | engines: {node: '>= 8'} 959 | dependencies: 960 | path-key: 3.1.1 961 | shebang-command: 2.0.0 962 | which: 2.0.2 963 | dev: true 964 | 965 | /debug@4.3.4: 966 | resolution: {integrity: sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==} 967 | engines: {node: '>=6.0'} 968 | peerDependencies: 969 | supports-color: '*' 970 | peerDependenciesMeta: 971 | supports-color: 972 | optional: true 973 | dependencies: 974 | ms: 2.1.2 975 | 976 | /dedent@1.5.1: 977 | resolution: {integrity: sha512-+LxW+KLWxu3HW3M2w2ympwtqPrqYRzU8fqi6Fhd18fBALe15blJPI/I4+UHveMVG6lJqB4JNd4UG0S5cnVHwIg==} 978 | peerDependencies: 979 | babel-plugin-macros: ^3.1.0 980 | peerDependenciesMeta: 981 | babel-plugin-macros: 982 | optional: true 983 | dev: true 984 | 985 | /deepmerge@4.3.1: 986 | resolution: {integrity: sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==} 987 | engines: {node: '>=0.10.0'} 988 | dev: true 989 | 990 | /detect-newline@3.1.0: 991 | resolution: {integrity: sha512-TLz+x/vEXm/Y7P7wn1EJFNLxYpUD4TgMosxY6fAVJUnJMbupHBOncxyWUG9OpTaH9EBD7uFI5LfEgmMOc54DsA==} 992 | engines: {node: '>=8'} 993 | dev: true 994 | 995 | /diff-sequences@29.6.3: 996 | resolution: {integrity: sha512-EjePK1srD3P08o2j4f0ExnylqRs5B9tJjcp9t1krH2qRi8CCdsYfwe9JgSLurFBWwq4uOlipzfk5fHNvwFKr8Q==} 997 | engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} 998 | dev: true 999 | 1000 | /electron-to-chromium@1.4.590: 1001 | resolution: {integrity: sha512-hohItzsQcG7/FBsviCYMtQwUSWvVF7NVqPOnJCErWsAshsP/CR2LAXdmq276RbESNdhxiAq5/vRo1g2pxGXVww==} 1002 | 1003 | /emittery@0.13.1: 1004 | resolution: {integrity: sha512-DeWwawk6r5yR9jFgnDKYt4sLS0LmHJJi3ZOnb5/JdbYwj3nW+FxQnHIjhBKz8YLC7oRNPVM9NQ47I3CVx34eqQ==} 1005 | engines: {node: '>=12'} 1006 | dev: true 1007 | 1008 | /emoji-regex@8.0.0: 1009 | resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==} 1010 | dev: true 1011 | 1012 | /error-ex@1.3.2: 1013 | resolution: {integrity: sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==} 1014 | dependencies: 1015 | is-arrayish: 0.2.1 1016 | dev: true 1017 | 1018 | /escalade@3.1.1: 1019 | resolution: {integrity: sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==} 1020 | engines: {node: '>=6'} 1021 | 1022 | /escape-string-regexp@1.0.5: 1023 | resolution: {integrity: sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==} 1024 | engines: {node: '>=0.8.0'} 1025 | 1026 | /escape-string-regexp@2.0.0: 1027 | resolution: {integrity: sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==} 1028 | engines: {node: '>=8'} 1029 | dev: true 1030 | 1031 | /esprima@4.0.1: 1032 | resolution: {integrity: sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==} 1033 | engines: {node: '>=4'} 1034 | hasBin: true 1035 | dev: true 1036 | 1037 | /execa@5.1.1: 1038 | resolution: {integrity: sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==} 1039 | engines: {node: '>=10'} 1040 | dependencies: 1041 | cross-spawn: 7.0.3 1042 | get-stream: 6.0.1 1043 | human-signals: 2.1.0 1044 | is-stream: 2.0.1 1045 | merge-stream: 2.0.0 1046 | npm-run-path: 4.0.1 1047 | onetime: 5.1.2 1048 | signal-exit: 3.0.7 1049 | strip-final-newline: 2.0.0 1050 | dev: true 1051 | 1052 | /exit@0.1.2: 1053 | resolution: {integrity: sha512-Zk/eNKV2zbjpKzrsQ+n1G6poVbErQxJ0LBOJXaKZ1EViLzH+hrLu9cdXI4zw9dBQJslwBEpbQ2P1oS7nDxs6jQ==} 1054 | engines: {node: '>= 0.8.0'} 1055 | dev: true 1056 | 1057 | /expect@29.7.0: 1058 | resolution: {integrity: sha512-2Zks0hf1VLFYI1kbh0I5jP3KHHyCHpkfyHBzsSXRFgl/Bg9mWYfMW8oD+PdMPlEwy5HNsR9JutYy6pMeOh61nw==} 1059 | engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} 1060 | dependencies: 1061 | '@jest/expect-utils': 29.7.0 1062 | jest-get-type: 29.6.3 1063 | jest-matcher-utils: 29.7.0 1064 | jest-message-util: 29.7.0 1065 | jest-util: 29.7.0 1066 | dev: true 1067 | 1068 | /fast-json-stable-stringify@2.1.0: 1069 | resolution: {integrity: sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==} 1070 | dev: true 1071 | 1072 | /fb-watchman@2.0.2: 1073 | resolution: {integrity: sha512-p5161BqbuCaSnB8jIbzQHOlpgsPmK5rJVDfDKO91Axs5NC1uu3HRQm6wt9cd9/+GtQQIO53JdGXXoyDpTAsgYA==} 1074 | dependencies: 1075 | bser: 2.1.1 1076 | dev: true 1077 | 1078 | /fill-range@7.0.1: 1079 | resolution: {integrity: sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==} 1080 | engines: {node: '>=8'} 1081 | dependencies: 1082 | to-regex-range: 5.0.1 1083 | dev: true 1084 | 1085 | /find-up@4.1.0: 1086 | resolution: {integrity: sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==} 1087 | engines: {node: '>=8'} 1088 | dependencies: 1089 | locate-path: 5.0.0 1090 | path-exists: 4.0.0 1091 | dev: true 1092 | 1093 | /fs.realpath@1.0.0: 1094 | resolution: {integrity: sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==} 1095 | dev: true 1096 | 1097 | /fsevents@2.3.3: 1098 | resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==} 1099 | engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} 1100 | os: [darwin] 1101 | requiresBuild: true 1102 | dev: true 1103 | optional: true 1104 | 1105 | /function-bind@1.1.2: 1106 | resolution: {integrity: sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==} 1107 | dev: true 1108 | 1109 | /gensync@1.0.0-beta.2: 1110 | resolution: {integrity: sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==} 1111 | engines: {node: '>=6.9.0'} 1112 | 1113 | /get-caller-file@2.0.5: 1114 | resolution: {integrity: sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==} 1115 | engines: {node: 6.* || 8.* || >= 10.*} 1116 | dev: true 1117 | 1118 | /get-package-type@0.1.0: 1119 | resolution: {integrity: sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q==} 1120 | engines: {node: '>=8.0.0'} 1121 | dev: true 1122 | 1123 | /get-stream@6.0.1: 1124 | resolution: {integrity: sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==} 1125 | engines: {node: '>=10'} 1126 | dev: true 1127 | 1128 | /glob@7.2.3: 1129 | resolution: {integrity: sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==} 1130 | dependencies: 1131 | fs.realpath: 1.0.0 1132 | inflight: 1.0.6 1133 | inherits: 2.0.4 1134 | minimatch: 3.1.2 1135 | once: 1.4.0 1136 | path-is-absolute: 1.0.1 1137 | dev: true 1138 | 1139 | /globals@11.12.0: 1140 | resolution: {integrity: sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==} 1141 | engines: {node: '>=4'} 1142 | 1143 | /graceful-fs@4.2.11: 1144 | resolution: {integrity: sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==} 1145 | dev: true 1146 | 1147 | /has-flag@3.0.0: 1148 | resolution: {integrity: sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==} 1149 | engines: {node: '>=4'} 1150 | 1151 | /has-flag@4.0.0: 1152 | resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==} 1153 | engines: {node: '>=8'} 1154 | dev: true 1155 | 1156 | /hasown@2.0.0: 1157 | resolution: {integrity: sha512-vUptKVTpIJhcczKBbgnS+RtcuYMB8+oNzPK2/Hp3hanz8JmpATdmmgLgSaadVREkDm+e2giHwY3ZRkyjSIDDFA==} 1158 | engines: {node: '>= 0.4'} 1159 | dependencies: 1160 | function-bind: 1.1.2 1161 | dev: true 1162 | 1163 | /html-escaper@2.0.2: 1164 | resolution: {integrity: sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==} 1165 | dev: true 1166 | 1167 | /human-signals@2.1.0: 1168 | resolution: {integrity: sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==} 1169 | engines: {node: '>=10.17.0'} 1170 | dev: true 1171 | 1172 | /import-local@3.1.0: 1173 | resolution: {integrity: sha512-ASB07uLtnDs1o6EHjKpX34BKYDSqnFerfTOJL2HvMqF70LnxpjkzDB8J44oT9pu4AMPkQwf8jl6szgvNd2tRIg==} 1174 | engines: {node: '>=8'} 1175 | hasBin: true 1176 | dependencies: 1177 | pkg-dir: 4.2.0 1178 | resolve-cwd: 3.0.0 1179 | dev: true 1180 | 1181 | /imurmurhash@0.1.4: 1182 | resolution: {integrity: sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==} 1183 | engines: {node: '>=0.8.19'} 1184 | dev: true 1185 | 1186 | /inflight@1.0.6: 1187 | resolution: {integrity: sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==} 1188 | dependencies: 1189 | once: 1.4.0 1190 | wrappy: 1.0.2 1191 | dev: true 1192 | 1193 | /inherits@2.0.4: 1194 | resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==} 1195 | dev: true 1196 | 1197 | /is-arrayish@0.2.1: 1198 | resolution: {integrity: sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==} 1199 | dev: true 1200 | 1201 | /is-core-module@2.13.1: 1202 | resolution: {integrity: sha512-hHrIjvZsftOsvKSn2TRYl63zvxsgE0K+0mYMoH6gD4omR5IWB2KynivBQczo3+wF1cCkjzvptnI9Q0sPU66ilw==} 1203 | dependencies: 1204 | hasown: 2.0.0 1205 | dev: true 1206 | 1207 | /is-fullwidth-code-point@3.0.0: 1208 | resolution: {integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==} 1209 | engines: {node: '>=8'} 1210 | dev: true 1211 | 1212 | /is-generator-fn@2.1.0: 1213 | resolution: {integrity: sha512-cTIB4yPYL/Grw0EaSzASzg6bBy9gqCofvWN8okThAYIxKJZC+udlRAmGbM0XLeniEJSs8uEgHPGuHSe1XsOLSQ==} 1214 | engines: {node: '>=6'} 1215 | dev: true 1216 | 1217 | /is-number@7.0.0: 1218 | resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==} 1219 | engines: {node: '>=0.12.0'} 1220 | dev: true 1221 | 1222 | /is-stream@2.0.1: 1223 | resolution: {integrity: sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==} 1224 | engines: {node: '>=8'} 1225 | dev: true 1226 | 1227 | /isexe@2.0.0: 1228 | resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==} 1229 | dev: true 1230 | 1231 | /istanbul-lib-coverage@3.2.2: 1232 | resolution: {integrity: sha512-O8dpsF+r0WV/8MNRKfnmrtCWhuKjxrq2w+jpzBL5UZKTi2LeVWnWOmWRxFlesJONmc+wLAGvKQZEOanko0LFTg==} 1233 | engines: {node: '>=8'} 1234 | dev: true 1235 | 1236 | /istanbul-lib-instrument@5.2.1: 1237 | resolution: {integrity: sha512-pzqtp31nLv/XFOzXGuvhCb8qhjmTVo5vjVk19XE4CRlSWz0KoeJ3bw9XsA7nOp9YBf4qHjwBxkDzKcME/J29Yg==} 1238 | engines: {node: '>=8'} 1239 | dependencies: 1240 | '@babel/core': 7.23.3 1241 | '@babel/parser': 7.23.4 1242 | '@istanbuljs/schema': 0.1.3 1243 | istanbul-lib-coverage: 3.2.2 1244 | semver: 6.3.1 1245 | transitivePeerDependencies: 1246 | - supports-color 1247 | dev: true 1248 | 1249 | /istanbul-lib-instrument@6.0.1: 1250 | resolution: {integrity: sha512-EAMEJBsYuyyztxMxW3g7ugGPkrZsV57v0Hmv3mm1uQsmB+QnZuepg731CRaIgeUVSdmsTngOkSnauNF8p7FIhA==} 1251 | engines: {node: '>=10'} 1252 | dependencies: 1253 | '@babel/core': 7.23.3 1254 | '@babel/parser': 7.23.4 1255 | '@istanbuljs/schema': 0.1.3 1256 | istanbul-lib-coverage: 3.2.2 1257 | semver: 7.5.4 1258 | transitivePeerDependencies: 1259 | - supports-color 1260 | dev: true 1261 | 1262 | /istanbul-lib-report@3.0.1: 1263 | resolution: {integrity: sha512-GCfE1mtsHGOELCU8e/Z7YWzpmybrx/+dSTfLrvY8qRmaY6zXTKWn6WQIjaAFw069icm6GVMNkgu0NzI4iPZUNw==} 1264 | engines: {node: '>=10'} 1265 | dependencies: 1266 | istanbul-lib-coverage: 3.2.2 1267 | make-dir: 4.0.0 1268 | supports-color: 7.2.0 1269 | dev: true 1270 | 1271 | /istanbul-lib-source-maps@4.0.1: 1272 | resolution: {integrity: sha512-n3s8EwkdFIJCG3BPKBYvskgXGoy88ARzvegkitk60NxRdwltLOTaH7CUiMRXvwYorl0Q712iEjcWB+fK/MrWVw==} 1273 | engines: {node: '>=10'} 1274 | dependencies: 1275 | debug: 4.3.4 1276 | istanbul-lib-coverage: 3.2.2 1277 | source-map: 0.6.1 1278 | transitivePeerDependencies: 1279 | - supports-color 1280 | dev: true 1281 | 1282 | /istanbul-reports@3.1.6: 1283 | resolution: {integrity: sha512-TLgnMkKg3iTDsQ9PbPTdpfAK2DzjF9mqUG7RMgcQl8oFjad8ob4laGxv5XV5U9MAfx8D6tSJiUyuAwzLicaxlg==} 1284 | engines: {node: '>=8'} 1285 | dependencies: 1286 | html-escaper: 2.0.2 1287 | istanbul-lib-report: 3.0.1 1288 | dev: true 1289 | 1290 | /jest-changed-files@29.7.0: 1291 | resolution: {integrity: sha512-fEArFiwf1BpQ+4bXSprcDc3/x4HSzL4al2tozwVpDFpsxALjLYdyiIK4e5Vz66GQJIbXJ82+35PtysofptNX2w==} 1292 | engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} 1293 | dependencies: 1294 | execa: 5.1.1 1295 | jest-util: 29.7.0 1296 | p-limit: 3.1.0 1297 | dev: true 1298 | 1299 | /jest-circus@29.7.0: 1300 | resolution: {integrity: sha512-3E1nCMgipcTkCocFwM90XXQab9bS+GMsjdpmPrlelaxwD93Ad8iVEjX/vvHPdLPnFf+L40u+5+iutRdA1N9myw==} 1301 | engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} 1302 | dependencies: 1303 | '@jest/environment': 29.7.0 1304 | '@jest/expect': 29.7.0 1305 | '@jest/test-result': 29.7.0 1306 | '@jest/types': 29.6.3 1307 | '@types/node': 20.9.3 1308 | chalk: 4.1.2 1309 | co: 4.6.0 1310 | dedent: 1.5.1 1311 | is-generator-fn: 2.1.0 1312 | jest-each: 29.7.0 1313 | jest-matcher-utils: 29.7.0 1314 | jest-message-util: 29.7.0 1315 | jest-runtime: 29.7.0 1316 | jest-snapshot: 29.7.0 1317 | jest-util: 29.7.0 1318 | p-limit: 3.1.0 1319 | pretty-format: 29.7.0 1320 | pure-rand: 6.0.4 1321 | slash: 3.0.0 1322 | stack-utils: 2.0.6 1323 | transitivePeerDependencies: 1324 | - babel-plugin-macros 1325 | - supports-color 1326 | dev: true 1327 | 1328 | /jest-cli@29.7.0(@types/node@20.9.3): 1329 | resolution: {integrity: sha512-OVVobw2IubN/GSYsxETi+gOe7Ka59EFMR/twOU3Jb2GnKKeMGJB5SGUUrEz3SFVmJASUdZUzy83sLNNQ2gZslg==} 1330 | engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} 1331 | hasBin: true 1332 | peerDependencies: 1333 | node-notifier: ^8.0.1 || ^9.0.0 || ^10.0.0 1334 | peerDependenciesMeta: 1335 | node-notifier: 1336 | optional: true 1337 | dependencies: 1338 | '@jest/core': 29.7.0 1339 | '@jest/test-result': 29.7.0 1340 | '@jest/types': 29.6.3 1341 | chalk: 4.1.2 1342 | create-jest: 29.7.0(@types/node@20.9.3) 1343 | exit: 0.1.2 1344 | import-local: 3.1.0 1345 | jest-config: 29.7.0(@types/node@20.9.3) 1346 | jest-util: 29.7.0 1347 | jest-validate: 29.7.0 1348 | yargs: 17.7.2 1349 | transitivePeerDependencies: 1350 | - '@types/node' 1351 | - babel-plugin-macros 1352 | - supports-color 1353 | - ts-node 1354 | dev: true 1355 | 1356 | /jest-config@29.7.0(@types/node@20.9.3): 1357 | resolution: {integrity: sha512-uXbpfeQ7R6TZBqI3/TxCU4q4ttk3u0PJeC+E0zbfSoSjq6bJ7buBPxzQPL0ifrkY4DNu4JUdk0ImlBUYi840eQ==} 1358 | engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} 1359 | peerDependencies: 1360 | '@types/node': '*' 1361 | ts-node: '>=9.0.0' 1362 | peerDependenciesMeta: 1363 | '@types/node': 1364 | optional: true 1365 | ts-node: 1366 | optional: true 1367 | dependencies: 1368 | '@babel/core': 7.23.3 1369 | '@jest/test-sequencer': 29.7.0 1370 | '@jest/types': 29.6.3 1371 | '@types/node': 20.9.3 1372 | babel-jest: 29.7.0(@babel/core@7.23.3) 1373 | chalk: 4.1.2 1374 | ci-info: 3.9.0 1375 | deepmerge: 4.3.1 1376 | glob: 7.2.3 1377 | graceful-fs: 4.2.11 1378 | jest-circus: 29.7.0 1379 | jest-environment-node: 29.7.0 1380 | jest-get-type: 29.6.3 1381 | jest-regex-util: 29.6.3 1382 | jest-resolve: 29.7.0 1383 | jest-runner: 29.7.0 1384 | jest-util: 29.7.0 1385 | jest-validate: 29.7.0 1386 | micromatch: 4.0.5 1387 | parse-json: 5.2.0 1388 | pretty-format: 29.7.0 1389 | slash: 3.0.0 1390 | strip-json-comments: 3.1.1 1391 | transitivePeerDependencies: 1392 | - babel-plugin-macros 1393 | - supports-color 1394 | dev: true 1395 | 1396 | /jest-diff@29.7.0: 1397 | resolution: {integrity: sha512-LMIgiIrhigmPrs03JHpxUh2yISK3vLFPkAodPeo0+BuF7wA2FoQbkEg1u8gBYBThncu7e1oEDUfIXVuTqLRUjw==} 1398 | engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} 1399 | dependencies: 1400 | chalk: 4.1.2 1401 | diff-sequences: 29.6.3 1402 | jest-get-type: 29.6.3 1403 | pretty-format: 29.7.0 1404 | dev: true 1405 | 1406 | /jest-docblock@29.7.0: 1407 | resolution: {integrity: sha512-q617Auw3A612guyaFgsbFeYpNP5t2aoUNLwBUbc/0kD1R4t9ixDbyFTHd1nok4epoVFpr7PmeWHrhvuV3XaJ4g==} 1408 | engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} 1409 | dependencies: 1410 | detect-newline: 3.1.0 1411 | dev: true 1412 | 1413 | /jest-each@29.7.0: 1414 | resolution: {integrity: sha512-gns+Er14+ZrEoC5fhOfYCY1LOHHr0TI+rQUHZS8Ttw2l7gl+80eHc/gFf2Ktkw0+SIACDTeWvpFcv3B04VembQ==} 1415 | engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} 1416 | dependencies: 1417 | '@jest/types': 29.6.3 1418 | chalk: 4.1.2 1419 | jest-get-type: 29.6.3 1420 | jest-util: 29.7.0 1421 | pretty-format: 29.7.0 1422 | dev: true 1423 | 1424 | /jest-environment-node@29.7.0: 1425 | resolution: {integrity: sha512-DOSwCRqXirTOyheM+4d5YZOrWcdu0LNZ87ewUoywbcb2XR4wKgqiG8vNeYwhjFMbEkfju7wx2GYH0P2gevGvFw==} 1426 | engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} 1427 | dependencies: 1428 | '@jest/environment': 29.7.0 1429 | '@jest/fake-timers': 29.7.0 1430 | '@jest/types': 29.6.3 1431 | '@types/node': 20.9.3 1432 | jest-mock: 29.7.0 1433 | jest-util: 29.7.0 1434 | dev: true 1435 | 1436 | /jest-get-type@29.6.3: 1437 | resolution: {integrity: sha512-zrteXnqYxfQh7l5FHyL38jL39di8H8rHoecLH3JNxH3BwOrBsNeabdap5e0I23lD4HHI8W5VFBZqG4Eaq5LNcw==} 1438 | engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} 1439 | dev: true 1440 | 1441 | /jest-haste-map@29.7.0: 1442 | resolution: {integrity: sha512-fP8u2pyfqx0K1rGn1R9pyE0/KTn+G7PxktWidOBTqFPLYX0b9ksaMFkhK5vrS3DVun09pckLdlx90QthlW7AmA==} 1443 | engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} 1444 | dependencies: 1445 | '@jest/types': 29.6.3 1446 | '@types/graceful-fs': 4.1.9 1447 | '@types/node': 20.9.3 1448 | anymatch: 3.1.3 1449 | fb-watchman: 2.0.2 1450 | graceful-fs: 4.2.11 1451 | jest-regex-util: 29.6.3 1452 | jest-util: 29.7.0 1453 | jest-worker: 29.7.0 1454 | micromatch: 4.0.5 1455 | walker: 1.0.8 1456 | optionalDependencies: 1457 | fsevents: 2.3.3 1458 | dev: true 1459 | 1460 | /jest-leak-detector@29.7.0: 1461 | resolution: {integrity: sha512-kYA8IJcSYtST2BY9I+SMC32nDpBT3J2NvWJx8+JCuCdl/CR1I4EKUJROiP8XtCcxqgTTBGJNdbB1A8XRKbTetw==} 1462 | engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} 1463 | dependencies: 1464 | jest-get-type: 29.6.3 1465 | pretty-format: 29.7.0 1466 | dev: true 1467 | 1468 | /jest-matcher-utils@29.7.0: 1469 | resolution: {integrity: sha512-sBkD+Xi9DtcChsI3L3u0+N0opgPYnCRPtGcQYrgXmR+hmt/fYfWAL0xRXYU8eWOdfuLgBe0YCW3AFtnRLagq/g==} 1470 | engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} 1471 | dependencies: 1472 | chalk: 4.1.2 1473 | jest-diff: 29.7.0 1474 | jest-get-type: 29.6.3 1475 | pretty-format: 29.7.0 1476 | dev: true 1477 | 1478 | /jest-message-util@29.7.0: 1479 | resolution: {integrity: sha512-GBEV4GRADeP+qtB2+6u61stea8mGcOT4mCtrYISZwfu9/ISHFJ/5zOMXYbpBE9RsS5+Gb63DW4FgmnKJ79Kf6w==} 1480 | engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} 1481 | dependencies: 1482 | '@babel/code-frame': 7.23.4 1483 | '@jest/types': 29.6.3 1484 | '@types/stack-utils': 2.0.3 1485 | chalk: 4.1.2 1486 | graceful-fs: 4.2.11 1487 | micromatch: 4.0.5 1488 | pretty-format: 29.7.0 1489 | slash: 3.0.0 1490 | stack-utils: 2.0.6 1491 | dev: true 1492 | 1493 | /jest-mock@29.7.0: 1494 | resolution: {integrity: sha512-ITOMZn+UkYS4ZFh83xYAOzWStloNzJFO2s8DWrE4lhtGD+AorgnbkiKERe4wQVBydIGPx059g6riW5Btp6Llnw==} 1495 | engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} 1496 | dependencies: 1497 | '@jest/types': 29.6.3 1498 | '@types/node': 20.9.3 1499 | jest-util: 29.7.0 1500 | dev: true 1501 | 1502 | /jest-pnp-resolver@1.2.3(jest-resolve@29.7.0): 1503 | resolution: {integrity: sha512-+3NpwQEnRoIBtx4fyhblQDPgJI0H1IEIkX7ShLUjPGA7TtUTvI1oiKi3SR4oBR0hQhQR80l4WAe5RrXBwWMA8w==} 1504 | engines: {node: '>=6'} 1505 | peerDependencies: 1506 | jest-resolve: '*' 1507 | peerDependenciesMeta: 1508 | jest-resolve: 1509 | optional: true 1510 | dependencies: 1511 | jest-resolve: 29.7.0 1512 | dev: true 1513 | 1514 | /jest-regex-util@29.6.3: 1515 | resolution: {integrity: sha512-KJJBsRCyyLNWCNBOvZyRDnAIfUiRJ8v+hOBQYGn8gDyF3UegwiP4gwRR3/SDa42g1YbVycTidUF3rKjyLFDWbg==} 1516 | engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} 1517 | dev: true 1518 | 1519 | /jest-resolve-dependencies@29.7.0: 1520 | resolution: {integrity: sha512-un0zD/6qxJ+S0et7WxeI3H5XSe9lTBBR7bOHCHXkKR6luG5mwDDlIzVQ0V5cZCuoTgEdcdwzTghYkTWfubi+nA==} 1521 | engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} 1522 | dependencies: 1523 | jest-regex-util: 29.6.3 1524 | jest-snapshot: 29.7.0 1525 | transitivePeerDependencies: 1526 | - supports-color 1527 | dev: true 1528 | 1529 | /jest-resolve@29.7.0: 1530 | resolution: {integrity: sha512-IOVhZSrg+UvVAshDSDtHyFCCBUl/Q3AAJv8iZ6ZjnZ74xzvwuzLXid9IIIPgTnY62SJjfuupMKZsZQRsCvxEgA==} 1531 | engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} 1532 | dependencies: 1533 | chalk: 4.1.2 1534 | graceful-fs: 4.2.11 1535 | jest-haste-map: 29.7.0 1536 | jest-pnp-resolver: 1.2.3(jest-resolve@29.7.0) 1537 | jest-util: 29.7.0 1538 | jest-validate: 29.7.0 1539 | resolve: 1.22.8 1540 | resolve.exports: 2.0.2 1541 | slash: 3.0.0 1542 | dev: true 1543 | 1544 | /jest-runner@29.7.0: 1545 | resolution: {integrity: sha512-fsc4N6cPCAahybGBfTRcq5wFR6fpLznMg47sY5aDpsoejOcVYFb07AHuSnR0liMcPTgBsA3ZJL6kFOjPdoNipQ==} 1546 | engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} 1547 | dependencies: 1548 | '@jest/console': 29.7.0 1549 | '@jest/environment': 29.7.0 1550 | '@jest/test-result': 29.7.0 1551 | '@jest/transform': 29.7.0 1552 | '@jest/types': 29.6.3 1553 | '@types/node': 20.9.3 1554 | chalk: 4.1.2 1555 | emittery: 0.13.1 1556 | graceful-fs: 4.2.11 1557 | jest-docblock: 29.7.0 1558 | jest-environment-node: 29.7.0 1559 | jest-haste-map: 29.7.0 1560 | jest-leak-detector: 29.7.0 1561 | jest-message-util: 29.7.0 1562 | jest-resolve: 29.7.0 1563 | jest-runtime: 29.7.0 1564 | jest-util: 29.7.0 1565 | jest-watcher: 29.7.0 1566 | jest-worker: 29.7.0 1567 | p-limit: 3.1.0 1568 | source-map-support: 0.5.13 1569 | transitivePeerDependencies: 1570 | - supports-color 1571 | dev: true 1572 | 1573 | /jest-runtime@29.7.0: 1574 | resolution: {integrity: sha512-gUnLjgwdGqW7B4LvOIkbKs9WGbn+QLqRQQ9juC6HndeDiezIwhDP+mhMwHWCEcfQ5RUXa6OPnFF8BJh5xegwwQ==} 1575 | engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} 1576 | dependencies: 1577 | '@jest/environment': 29.7.0 1578 | '@jest/fake-timers': 29.7.0 1579 | '@jest/globals': 29.7.0 1580 | '@jest/source-map': 29.6.3 1581 | '@jest/test-result': 29.7.0 1582 | '@jest/transform': 29.7.0 1583 | '@jest/types': 29.6.3 1584 | '@types/node': 20.9.3 1585 | chalk: 4.1.2 1586 | cjs-module-lexer: 1.2.3 1587 | collect-v8-coverage: 1.0.2 1588 | glob: 7.2.3 1589 | graceful-fs: 4.2.11 1590 | jest-haste-map: 29.7.0 1591 | jest-message-util: 29.7.0 1592 | jest-mock: 29.7.0 1593 | jest-regex-util: 29.6.3 1594 | jest-resolve: 29.7.0 1595 | jest-snapshot: 29.7.0 1596 | jest-util: 29.7.0 1597 | slash: 3.0.0 1598 | strip-bom: 4.0.0 1599 | transitivePeerDependencies: 1600 | - supports-color 1601 | dev: true 1602 | 1603 | /jest-snapshot@29.7.0: 1604 | resolution: {integrity: sha512-Rm0BMWtxBcioHr1/OX5YCP8Uov4riHvKPknOGs804Zg9JGZgmIBkbtlxJC/7Z4msKYVbIJtfU+tKb8xlYNfdkw==} 1605 | engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} 1606 | dependencies: 1607 | '@babel/core': 7.23.3 1608 | '@babel/generator': 7.23.4 1609 | '@babel/plugin-syntax-jsx': 7.23.3(@babel/core@7.23.3) 1610 | '@babel/plugin-syntax-typescript': 7.23.3(@babel/core@7.23.3) 1611 | '@babel/types': 7.23.4 1612 | '@jest/expect-utils': 29.7.0 1613 | '@jest/transform': 29.7.0 1614 | '@jest/types': 29.6.3 1615 | babel-preset-current-node-syntax: 1.0.1(@babel/core@7.23.3) 1616 | chalk: 4.1.2 1617 | expect: 29.7.0 1618 | graceful-fs: 4.2.11 1619 | jest-diff: 29.7.0 1620 | jest-get-type: 29.6.3 1621 | jest-matcher-utils: 29.7.0 1622 | jest-message-util: 29.7.0 1623 | jest-util: 29.7.0 1624 | natural-compare: 1.4.0 1625 | pretty-format: 29.7.0 1626 | semver: 7.5.4 1627 | transitivePeerDependencies: 1628 | - supports-color 1629 | dev: true 1630 | 1631 | /jest-util@29.7.0: 1632 | resolution: {integrity: sha512-z6EbKajIpqGKU56y5KBUgy1dt1ihhQJgWzUlZHArA/+X2ad7Cb5iF+AK1EWVL/Bo7Rz9uurpqw6SiBCefUbCGA==} 1633 | engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} 1634 | dependencies: 1635 | '@jest/types': 29.6.3 1636 | '@types/node': 20.9.3 1637 | chalk: 4.1.2 1638 | ci-info: 3.9.0 1639 | graceful-fs: 4.2.11 1640 | picomatch: 2.3.1 1641 | dev: true 1642 | 1643 | /jest-validate@29.7.0: 1644 | resolution: {integrity: sha512-ZB7wHqaRGVw/9hST/OuFUReG7M8vKeq0/J2egIGLdvjHCmYqGARhzXmtgi+gVeZ5uXFF219aOc3Ls2yLg27tkw==} 1645 | engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} 1646 | dependencies: 1647 | '@jest/types': 29.6.3 1648 | camelcase: 6.3.0 1649 | chalk: 4.1.2 1650 | jest-get-type: 29.6.3 1651 | leven: 3.1.0 1652 | pretty-format: 29.7.0 1653 | dev: true 1654 | 1655 | /jest-watcher@29.7.0: 1656 | resolution: {integrity: sha512-49Fg7WXkU3Vl2h6LbLtMQ/HyB6rXSIX7SqvBLQmssRBGN9I0PNvPmAmCWSOY6SOvrjhI/F7/bGAv9RtnsPA03g==} 1657 | engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} 1658 | dependencies: 1659 | '@jest/test-result': 29.7.0 1660 | '@jest/types': 29.6.3 1661 | '@types/node': 20.9.3 1662 | ansi-escapes: 4.3.2 1663 | chalk: 4.1.2 1664 | emittery: 0.13.1 1665 | jest-util: 29.7.0 1666 | string-length: 4.0.2 1667 | dev: true 1668 | 1669 | /jest-worker@29.7.0: 1670 | resolution: {integrity: sha512-eIz2msL/EzL9UFTFFx7jBTkeZfku0yUAyZZZmJ93H2TYEiroIx2PQjEXcwYtYl8zXCxb+PAmA2hLIt/6ZEkPHw==} 1671 | engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} 1672 | dependencies: 1673 | '@types/node': 20.9.3 1674 | jest-util: 29.7.0 1675 | merge-stream: 2.0.0 1676 | supports-color: 8.1.1 1677 | dev: true 1678 | 1679 | /jest@29.7.0(@types/node@20.9.3): 1680 | resolution: {integrity: sha512-NIy3oAFp9shda19hy4HK0HRTWKtPJmGdnvywu01nOqNC2vZg+Z+fvJDxpMQA88eb2I9EcafcdjYgsDthnYTvGw==} 1681 | engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} 1682 | hasBin: true 1683 | peerDependencies: 1684 | node-notifier: ^8.0.1 || ^9.0.0 || ^10.0.0 1685 | peerDependenciesMeta: 1686 | node-notifier: 1687 | optional: true 1688 | dependencies: 1689 | '@jest/core': 29.7.0 1690 | '@jest/types': 29.6.3 1691 | import-local: 3.1.0 1692 | jest-cli: 29.7.0(@types/node@20.9.3) 1693 | transitivePeerDependencies: 1694 | - '@types/node' 1695 | - babel-plugin-macros 1696 | - supports-color 1697 | - ts-node 1698 | dev: true 1699 | 1700 | /js-tokens@4.0.0: 1701 | resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==} 1702 | 1703 | /js-yaml@3.14.1: 1704 | resolution: {integrity: sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==} 1705 | hasBin: true 1706 | dependencies: 1707 | argparse: 1.0.10 1708 | esprima: 4.0.1 1709 | dev: true 1710 | 1711 | /jsesc@2.5.2: 1712 | resolution: {integrity: sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==} 1713 | engines: {node: '>=4'} 1714 | hasBin: true 1715 | 1716 | /json-parse-even-better-errors@2.3.1: 1717 | resolution: {integrity: sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==} 1718 | dev: true 1719 | 1720 | /json5@2.2.3: 1721 | resolution: {integrity: sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==} 1722 | engines: {node: '>=6'} 1723 | hasBin: true 1724 | 1725 | /kleur@3.0.3: 1726 | resolution: {integrity: sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==} 1727 | engines: {node: '>=6'} 1728 | dev: true 1729 | 1730 | /leven@3.1.0: 1731 | resolution: {integrity: sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==} 1732 | engines: {node: '>=6'} 1733 | dev: true 1734 | 1735 | /lines-and-columns@1.2.4: 1736 | resolution: {integrity: sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==} 1737 | dev: true 1738 | 1739 | /locate-path@5.0.0: 1740 | resolution: {integrity: sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==} 1741 | engines: {node: '>=8'} 1742 | dependencies: 1743 | p-locate: 4.1.0 1744 | dev: true 1745 | 1746 | /lru-cache@5.1.1: 1747 | resolution: {integrity: sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==} 1748 | dependencies: 1749 | yallist: 3.1.1 1750 | 1751 | /lru-cache@6.0.0: 1752 | resolution: {integrity: sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==} 1753 | engines: {node: '>=10'} 1754 | dependencies: 1755 | yallist: 4.0.0 1756 | dev: true 1757 | 1758 | /make-dir@4.0.0: 1759 | resolution: {integrity: sha512-hXdUTZYIVOt1Ex//jAQi+wTZZpUpwBj/0QsOzqegb3rGMMeJiSEu5xLHnYfBrRV4RH2+OCSOO95Is/7x1WJ4bw==} 1760 | engines: {node: '>=10'} 1761 | dependencies: 1762 | semver: 7.5.4 1763 | dev: true 1764 | 1765 | /makeerror@1.0.12: 1766 | resolution: {integrity: sha512-JmqCvUhmt43madlpFzG4BQzG2Z3m6tvQDNKdClZnO3VbIudJYmxsT0FNJMeiB2+JTSlTQTSbU8QdesVmwJcmLg==} 1767 | dependencies: 1768 | tmpl: 1.0.5 1769 | dev: true 1770 | 1771 | /merge-stream@2.0.0: 1772 | resolution: {integrity: sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==} 1773 | dev: true 1774 | 1775 | /micromatch@4.0.5: 1776 | resolution: {integrity: sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==} 1777 | engines: {node: '>=8.6'} 1778 | dependencies: 1779 | braces: 3.0.2 1780 | picomatch: 2.3.1 1781 | dev: true 1782 | 1783 | /mimic-fn@2.1.0: 1784 | resolution: {integrity: sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==} 1785 | engines: {node: '>=6'} 1786 | dev: true 1787 | 1788 | /minimatch@3.1.2: 1789 | resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==} 1790 | dependencies: 1791 | brace-expansion: 1.1.11 1792 | dev: true 1793 | 1794 | /ms@2.1.2: 1795 | resolution: {integrity: sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==} 1796 | 1797 | /natural-compare@1.4.0: 1798 | resolution: {integrity: sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==} 1799 | dev: true 1800 | 1801 | /node-int64@0.4.0: 1802 | resolution: {integrity: sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw==} 1803 | dev: true 1804 | 1805 | /node-releases@2.0.13: 1806 | resolution: {integrity: sha512-uYr7J37ae/ORWdZeQ1xxMJe3NtdmqMC/JZK+geofDrkLUApKRHPd18/TxtBOJ4A0/+uUIliorNrfYV6s1b02eQ==} 1807 | 1808 | /normalize-path@3.0.0: 1809 | resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==} 1810 | engines: {node: '>=0.10.0'} 1811 | dev: true 1812 | 1813 | /npm-run-path@4.0.1: 1814 | resolution: {integrity: sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==} 1815 | engines: {node: '>=8'} 1816 | dependencies: 1817 | path-key: 3.1.1 1818 | dev: true 1819 | 1820 | /once@1.4.0: 1821 | resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==} 1822 | dependencies: 1823 | wrappy: 1.0.2 1824 | dev: true 1825 | 1826 | /onetime@5.1.2: 1827 | resolution: {integrity: sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==} 1828 | engines: {node: '>=6'} 1829 | dependencies: 1830 | mimic-fn: 2.1.0 1831 | dev: true 1832 | 1833 | /p-limit@2.3.0: 1834 | resolution: {integrity: sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==} 1835 | engines: {node: '>=6'} 1836 | dependencies: 1837 | p-try: 2.2.0 1838 | dev: true 1839 | 1840 | /p-limit@3.1.0: 1841 | resolution: {integrity: sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==} 1842 | engines: {node: '>=10'} 1843 | dependencies: 1844 | yocto-queue: 0.1.0 1845 | dev: true 1846 | 1847 | /p-locate@4.1.0: 1848 | resolution: {integrity: sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==} 1849 | engines: {node: '>=8'} 1850 | dependencies: 1851 | p-limit: 2.3.0 1852 | dev: true 1853 | 1854 | /p-try@2.2.0: 1855 | resolution: {integrity: sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==} 1856 | engines: {node: '>=6'} 1857 | dev: true 1858 | 1859 | /parse-json@5.2.0: 1860 | resolution: {integrity: sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==} 1861 | engines: {node: '>=8'} 1862 | dependencies: 1863 | '@babel/code-frame': 7.23.4 1864 | error-ex: 1.3.2 1865 | json-parse-even-better-errors: 2.3.1 1866 | lines-and-columns: 1.2.4 1867 | dev: true 1868 | 1869 | /path-exists@4.0.0: 1870 | resolution: {integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==} 1871 | engines: {node: '>=8'} 1872 | dev: true 1873 | 1874 | /path-is-absolute@1.0.1: 1875 | resolution: {integrity: sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==} 1876 | engines: {node: '>=0.10.0'} 1877 | dev: true 1878 | 1879 | /path-key@3.1.1: 1880 | resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==} 1881 | engines: {node: '>=8'} 1882 | dev: true 1883 | 1884 | /path-parse@1.0.7: 1885 | resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==} 1886 | dev: true 1887 | 1888 | /picocolors@1.0.0: 1889 | resolution: {integrity: sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==} 1890 | 1891 | /picomatch@2.3.1: 1892 | resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==} 1893 | engines: {node: '>=8.6'} 1894 | dev: true 1895 | 1896 | /pirates@4.0.6: 1897 | resolution: {integrity: sha512-saLsH7WeYYPiD25LDuLRRY/i+6HaPYr6G1OUlN39otzkSTxKnubR9RTxS3/Kk50s1g2JTgFwWQDQyplC5/SHZg==} 1898 | engines: {node: '>= 6'} 1899 | dev: true 1900 | 1901 | /pkg-dir@4.2.0: 1902 | resolution: {integrity: sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==} 1903 | engines: {node: '>=8'} 1904 | dependencies: 1905 | find-up: 4.1.0 1906 | dev: true 1907 | 1908 | /pretty-format@29.7.0: 1909 | resolution: {integrity: sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==} 1910 | engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} 1911 | dependencies: 1912 | '@jest/schemas': 29.6.3 1913 | ansi-styles: 5.2.0 1914 | react-is: 18.2.0 1915 | dev: true 1916 | 1917 | /prompts@2.4.2: 1918 | resolution: {integrity: sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q==} 1919 | engines: {node: '>= 6'} 1920 | dependencies: 1921 | kleur: 3.0.3 1922 | sisteransi: 1.0.5 1923 | dev: true 1924 | 1925 | /pure-rand@6.0.4: 1926 | resolution: {integrity: sha512-LA0Y9kxMYv47GIPJy6MI84fqTd2HmYZI83W/kM/SkKfDlajnZYfmXFTxkbY+xSBPkLJxltMa9hIkmdc29eguMA==} 1927 | dev: true 1928 | 1929 | /react-is@18.2.0: 1930 | resolution: {integrity: sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==} 1931 | dev: true 1932 | 1933 | /require-directory@2.1.1: 1934 | resolution: {integrity: sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==} 1935 | engines: {node: '>=0.10.0'} 1936 | dev: true 1937 | 1938 | /resolve-cwd@3.0.0: 1939 | resolution: {integrity: sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg==} 1940 | engines: {node: '>=8'} 1941 | dependencies: 1942 | resolve-from: 5.0.0 1943 | dev: true 1944 | 1945 | /resolve-from@5.0.0: 1946 | resolution: {integrity: sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==} 1947 | engines: {node: '>=8'} 1948 | dev: true 1949 | 1950 | /resolve.exports@2.0.2: 1951 | resolution: {integrity: sha512-X2UW6Nw3n/aMgDVy+0rSqgHlv39WZAlZrXCdnbyEiKm17DSqHX4MmQMaST3FbeWR5FTuRcUwYAziZajji0Y7mg==} 1952 | engines: {node: '>=10'} 1953 | dev: true 1954 | 1955 | /resolve@1.22.8: 1956 | resolution: {integrity: sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==} 1957 | hasBin: true 1958 | dependencies: 1959 | is-core-module: 2.13.1 1960 | path-parse: 1.0.7 1961 | supports-preserve-symlinks-flag: 1.0.0 1962 | dev: true 1963 | 1964 | /semver@6.3.1: 1965 | resolution: {integrity: sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==} 1966 | hasBin: true 1967 | 1968 | /semver@7.5.4: 1969 | resolution: {integrity: sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==} 1970 | engines: {node: '>=10'} 1971 | hasBin: true 1972 | dependencies: 1973 | lru-cache: 6.0.0 1974 | dev: true 1975 | 1976 | /shebang-command@2.0.0: 1977 | resolution: {integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==} 1978 | engines: {node: '>=8'} 1979 | dependencies: 1980 | shebang-regex: 3.0.0 1981 | dev: true 1982 | 1983 | /shebang-regex@3.0.0: 1984 | resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==} 1985 | engines: {node: '>=8'} 1986 | dev: true 1987 | 1988 | /signal-exit@3.0.7: 1989 | resolution: {integrity: sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==} 1990 | dev: true 1991 | 1992 | /sisteransi@1.0.5: 1993 | resolution: {integrity: sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==} 1994 | dev: true 1995 | 1996 | /slash@3.0.0: 1997 | resolution: {integrity: sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==} 1998 | engines: {node: '>=8'} 1999 | dev: true 2000 | 2001 | /source-map-support@0.5.13: 2002 | resolution: {integrity: sha512-SHSKFHadjVA5oR4PPqhtAVdcBWwRYVd6g6cAXnIbRiIwc2EhPrTuKUBdSLvlEKyIP3GCf89fltvcZiP9MMFA1w==} 2003 | dependencies: 2004 | buffer-from: 1.1.2 2005 | source-map: 0.6.1 2006 | dev: true 2007 | 2008 | /source-map@0.6.1: 2009 | resolution: {integrity: sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==} 2010 | engines: {node: '>=0.10.0'} 2011 | dev: true 2012 | 2013 | /sprintf-js@1.0.3: 2014 | resolution: {integrity: sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==} 2015 | dev: true 2016 | 2017 | /stack-utils@2.0.6: 2018 | resolution: {integrity: sha512-XlkWvfIm6RmsWtNJx+uqtKLS8eqFbxUg0ZzLXqY0caEy9l7hruX8IpiDnjsLavoBgqCCR71TqWO8MaXYheJ3RQ==} 2019 | engines: {node: '>=10'} 2020 | dependencies: 2021 | escape-string-regexp: 2.0.0 2022 | dev: true 2023 | 2024 | /string-length@4.0.2: 2025 | resolution: {integrity: sha512-+l6rNN5fYHNhZZy41RXsYptCjA2Igmq4EG7kZAYFQI1E1VTXarr6ZPXBg6eq7Y6eK4FEhY6AJlyuFIb/v/S0VQ==} 2026 | engines: {node: '>=10'} 2027 | dependencies: 2028 | char-regex: 1.0.2 2029 | strip-ansi: 6.0.1 2030 | dev: true 2031 | 2032 | /string-width@4.2.3: 2033 | resolution: {integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==} 2034 | engines: {node: '>=8'} 2035 | dependencies: 2036 | emoji-regex: 8.0.0 2037 | is-fullwidth-code-point: 3.0.0 2038 | strip-ansi: 6.0.1 2039 | dev: true 2040 | 2041 | /strip-ansi@6.0.1: 2042 | resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==} 2043 | engines: {node: '>=8'} 2044 | dependencies: 2045 | ansi-regex: 5.0.1 2046 | dev: true 2047 | 2048 | /strip-bom@4.0.0: 2049 | resolution: {integrity: sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w==} 2050 | engines: {node: '>=8'} 2051 | dev: true 2052 | 2053 | /strip-final-newline@2.0.0: 2054 | resolution: {integrity: sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==} 2055 | engines: {node: '>=6'} 2056 | dev: true 2057 | 2058 | /strip-json-comments@3.1.1: 2059 | resolution: {integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==} 2060 | engines: {node: '>=8'} 2061 | dev: true 2062 | 2063 | /supports-color@5.5.0: 2064 | resolution: {integrity: sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==} 2065 | engines: {node: '>=4'} 2066 | dependencies: 2067 | has-flag: 3.0.0 2068 | 2069 | /supports-color@7.2.0: 2070 | resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==} 2071 | engines: {node: '>=8'} 2072 | dependencies: 2073 | has-flag: 4.0.0 2074 | dev: true 2075 | 2076 | /supports-color@8.1.1: 2077 | resolution: {integrity: sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==} 2078 | engines: {node: '>=10'} 2079 | dependencies: 2080 | has-flag: 4.0.0 2081 | dev: true 2082 | 2083 | /supports-preserve-symlinks-flag@1.0.0: 2084 | resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==} 2085 | engines: {node: '>= 0.4'} 2086 | dev: true 2087 | 2088 | /test-exclude@6.0.0: 2089 | resolution: {integrity: sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w==} 2090 | engines: {node: '>=8'} 2091 | dependencies: 2092 | '@istanbuljs/schema': 0.1.3 2093 | glob: 7.2.3 2094 | minimatch: 3.1.2 2095 | dev: true 2096 | 2097 | /tmpl@1.0.5: 2098 | resolution: {integrity: sha512-3f0uOEAQwIqGuWW2MVzYg8fV/QNnc/IpuJNG837rLuczAaLVHslWHZQj4IGiEl5Hs3kkbhwL9Ab7Hrsmuj+Smw==} 2099 | dev: true 2100 | 2101 | /to-fast-properties@2.0.0: 2102 | resolution: {integrity: sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==} 2103 | engines: {node: '>=4'} 2104 | 2105 | /to-regex-range@5.0.1: 2106 | resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==} 2107 | engines: {node: '>=8.0'} 2108 | dependencies: 2109 | is-number: 7.0.0 2110 | dev: true 2111 | 2112 | /type-detect@4.0.8: 2113 | resolution: {integrity: sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==} 2114 | engines: {node: '>=4'} 2115 | dev: true 2116 | 2117 | /type-fest@0.21.3: 2118 | resolution: {integrity: sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==} 2119 | engines: {node: '>=10'} 2120 | dev: true 2121 | 2122 | /undici-types@5.26.5: 2123 | resolution: {integrity: sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==} 2124 | dev: true 2125 | 2126 | /update-browserslist-db@1.0.13(browserslist@4.22.1): 2127 | resolution: {integrity: sha512-xebP81SNcPuNpPP3uzeW1NYXxI3rxyJzF3pD6sH4jE7o/IX+WtSpwnVU+qIsDPyk0d3hmFQ7mjqc6AtV604hbg==} 2128 | hasBin: true 2129 | peerDependencies: 2130 | browserslist: '>= 4.21.0' 2131 | dependencies: 2132 | browserslist: 4.22.1 2133 | escalade: 3.1.1 2134 | picocolors: 1.0.0 2135 | 2136 | /v8-to-istanbul@9.1.3: 2137 | resolution: {integrity: sha512-9lDD+EVI2fjFsMWXc6dy5JJzBsVTcQ2fVkfBvncZ6xJWG9wtBhOldG+mHkSL0+V1K/xgZz0JDO5UT5hFwHUghg==} 2138 | engines: {node: '>=10.12.0'} 2139 | dependencies: 2140 | '@jridgewell/trace-mapping': 0.3.20 2141 | '@types/istanbul-lib-coverage': 2.0.6 2142 | convert-source-map: 2.0.0 2143 | dev: true 2144 | 2145 | /walker@1.0.8: 2146 | resolution: {integrity: sha512-ts/8E8l5b7kY0vlWLewOkDXMmPdLcVV4GmOQLyxuSswIJsweeFZtAsMF7k1Nszz+TYBQrlYRmzOnr398y1JemQ==} 2147 | dependencies: 2148 | makeerror: 1.0.12 2149 | dev: true 2150 | 2151 | /which@2.0.2: 2152 | resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==} 2153 | engines: {node: '>= 8'} 2154 | hasBin: true 2155 | dependencies: 2156 | isexe: 2.0.0 2157 | dev: true 2158 | 2159 | /wrap-ansi@7.0.0: 2160 | resolution: {integrity: sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==} 2161 | engines: {node: '>=10'} 2162 | dependencies: 2163 | ansi-styles: 4.3.0 2164 | string-width: 4.2.3 2165 | strip-ansi: 6.0.1 2166 | dev: true 2167 | 2168 | /wrappy@1.0.2: 2169 | resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==} 2170 | dev: true 2171 | 2172 | /write-file-atomic@4.0.2: 2173 | resolution: {integrity: sha512-7KxauUdBmSdWnmpaGFg+ppNjKF8uNLry8LyzjauQDOVONfFLNKrKvQOxZ/VuTIcS/gge/YNahf5RIIQWTSarlg==} 2174 | engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0} 2175 | dependencies: 2176 | imurmurhash: 0.1.4 2177 | signal-exit: 3.0.7 2178 | dev: true 2179 | 2180 | /y18n@5.0.8: 2181 | resolution: {integrity: sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==} 2182 | engines: {node: '>=10'} 2183 | dev: true 2184 | 2185 | /yallist@3.1.1: 2186 | resolution: {integrity: sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==} 2187 | 2188 | /yallist@4.0.0: 2189 | resolution: {integrity: sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==} 2190 | dev: true 2191 | 2192 | /yargs-parser@21.1.1: 2193 | resolution: {integrity: sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==} 2194 | engines: {node: '>=12'} 2195 | dev: true 2196 | 2197 | /yargs@17.7.2: 2198 | resolution: {integrity: sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==} 2199 | engines: {node: '>=12'} 2200 | dependencies: 2201 | cliui: 8.0.1 2202 | escalade: 3.1.1 2203 | get-caller-file: 2.0.5 2204 | require-directory: 2.1.1 2205 | string-width: 4.2.3 2206 | y18n: 5.0.8 2207 | yargs-parser: 21.1.1 2208 | dev: true 2209 | 2210 | /yocto-queue@0.1.0: 2211 | resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==} 2212 | engines: {node: '>=10'} 2213 | dev: true 2214 | -------------------------------------------------------------------------------- /run.js: -------------------------------------------------------------------------------- 1 | const { eject } = require("."); 2 | 3 | eject('nextjs_mock/'); -------------------------------------------------------------------------------- /tests/transform.test.js: -------------------------------------------------------------------------------- 1 | const fs = require('fs'); 2 | const path = require('path'); 3 | const { transformFile } = require('../transform'); 4 | 5 | function createTsFile(content, filePath) { 6 | fs.writeFileSync(filePath, content, 'utf8'); 7 | } 8 | 9 | 10 | describe('transformFile function', () => { 11 | describe('POST function is transformed correctly', () => { 12 | const mockFilePath = path.join(__dirname, 'tempMockFile.ts'); 13 | const mockContent = ` 14 | declare const NextResponse: any; 15 | declare type NextRequest = {}; 16 | export async function POST(request: NextRequest) { 17 | const body = await request.json(); 18 | return NextResponse.json({ message: 'Hello World' }); 19 | } 20 | `; 21 | 22 | const expectedOutput = ` 23 | declare const NextResponse: any; 24 | declare type NextRequest = {}; 25 | export async function handler(event, context) { 26 | const body = await event.json(); 27 | return { 28 | statusCode: 200, 29 | headers: { 30 | "Content-Type": "application/json" 31 | }, 32 | body: JSON.stringify({ 33 | message: 'Hello World' 34 | }) 35 | }; 36 | } 37 | `; 38 | 39 | beforeAll(() => { 40 | // Create the TypeScript file 41 | createTsFile(mockContent, mockFilePath); 42 | }); 43 | 44 | afterAll(() => { 45 | // Delete the TypeScript file 46 | if (fs.existsSync(mockFilePath)) { 47 | fs.unlinkSync(mockFilePath); 48 | } 49 | }); 50 | 51 | test('transforms TypeScript file correctly', () => { 52 | // Run your transformation function here 53 | transformFile(mockFilePath); 54 | 55 | // Read the transformed file 56 | const transformedContent = fs.readFileSync(mockFilePath, 'utf8'); 57 | 58 | // Assert that the transformed content matches the expected output. Ignore whitespace. 59 | expect(transformedContent.replace(/\s/g, '')).toBe(expectedOutput.replace(/\s/g, '')); 60 | }); 61 | }); 62 | describe('GET function is transformed correctly', () => { 63 | const mockFilePath = path.join(__dirname, 'tempMockFile.ts'); 64 | const mockContent = ` 65 | declare const NextResponse: any; 66 | declare type NextRequest = {}; 67 | export async function GET(request: NextRequest) { 68 | const queryParams = request.query; 69 | return NextResponse.json({ message: 'Hello World' }); 70 | } 71 | `; 72 | 73 | const expectedOutput = ` 74 | declare const NextResponse: any; 75 | declare type NextRequest = {}; 76 | export async function handler(event, context) { 77 | const queryParams = event.query; 78 | return { 79 | statusCode: 200, 80 | headers: { 81 | "Content-Type": "application/json" 82 | }, 83 | body: JSON.stringify({ 84 | message: 'Hello World' 85 | }) 86 | }; 87 | } 88 | `; 89 | 90 | beforeAll(() => { 91 | // Create the TypeScript file 92 | createTsFile(mockContent, mockFilePath); 93 | }); 94 | 95 | afterAll(() => { 96 | // Delete the TypeScript file 97 | if (fs.existsSync(mockFilePath)) { 98 | fs.unlinkSync(mockFilePath); 99 | } 100 | }); 101 | 102 | test('transforms TypeScript file correctly', () => { 103 | // Run your transformation function here 104 | transformFile(mockFilePath); 105 | 106 | // Read the transformed file 107 | const transformedContent = fs.readFileSync(mockFilePath, 'utf8'); 108 | 109 | // Assert that the transformed content matches the expected output. Ignore whitespace. 110 | expect(transformedContent.replace(/\s/g, '')).toBe(expectedOutput.replace(/\s/g, '')); 111 | }); 112 | }); 113 | }); 114 | -------------------------------------------------------------------------------- /transform.js: -------------------------------------------------------------------------------- 1 | const fs = require('fs'); 2 | const parser = require('@babel/parser'); 3 | const traverse = require('@babel/traverse').default; 4 | const generate = require('@babel/generator').default; 5 | const t = require('@babel/types'); 6 | 7 | // Function to transform a file using AST 8 | function transformFile(filePath) { 9 | const code = fs.readFileSync(filePath, 'utf8'); 10 | 11 | // Parse the code into an AST 12 | const ast = parser.parse(code, { 13 | sourceType: 'module', 14 | plugins: ['typescript'] 15 | }); 16 | 17 | // Traverse the AST to apply transformations 18 | traverse(ast, { 19 | FunctionDeclaration(path) { 20 | // Replace specific function declarations 21 | if (path.node.id && ['GET', 'POST', 'OPTION', 'PATCH', 'DELETE'].includes(path.node.id.name)) { 22 | path.node.id.name = 'handler'; 23 | path.node.async = true; // Ensure the function is async 24 | path.node.params = [t.identifier('event'), t.identifier('context')]; // Change parameters 25 | } 26 | }, 27 | VariableDeclarator(path) { 28 | if (path.node.id.name === 'body' && path.node.init.type === 'AwaitExpression' && 29 | path.node.init.argument.type === 'CallExpression' && 30 | path.node.init.argument.callee.object.name === 'request' && 31 | path.node.init.argument.callee.property.name === 'json') { 32 | 33 | path.node.init.argument.callee.object.name = 'event'; 34 | } 35 | }, 36 | VariableDeclaration(path) { 37 | if (path.node.declarations[0].id.name === 'queryParams' && 38 | path.node.declarations[0].init.type === 'MemberExpression' && 39 | path.node.declarations[0].init.object.name === 'request' && 40 | path.node.declarations[0].init.property.name === 'query') { 41 | 42 | path.node.declarations[0].init.object.name = 'event'; 43 | } 44 | }, 45 | ReturnStatement(path) { 46 | // Logic to modify return statements for Lambda format 47 | if (path.node.argument && path.node.argument.type === 'CallExpression' && 48 | path.node.argument.callee.property && 49 | path.node.argument.callee.property.name === 'json') { 50 | 51 | let responseBody = path.node.argument.arguments[0]; 52 | let responseOptions = path.node.argument.arguments[1]; 53 | 54 | // Create the new return statement for Lambda 55 | let newReturnStatement = t.returnStatement( 56 | t.objectExpression([ 57 | t.objectProperty(t.identifier('statusCode'), responseOptions ? 58 | t.memberExpression(responseOptions, t.identifier('status')) : t.numericLiteral(200)), 59 | t.objectProperty(t.identifier('headers'), t.objectExpression([ 60 | t.objectProperty(t.stringLiteral('Content-Type'), t.stringLiteral('application/json')) 61 | ])), 62 | t.objectProperty(t.identifier('body'), t.callExpression( 63 | t.memberExpression(t.identifier('JSON'), t.identifier('stringify')), [responseBody])) 64 | ]) 65 | ); 66 | 67 | path.replaceWith(newReturnStatement); 68 | } 69 | } 70 | }); 71 | 72 | // Generate the modified code 73 | const output = generate(ast, {}, code); 74 | fs.writeFileSync(filePath, output.code); 75 | } 76 | 77 | module.exports = { transformFile }; --------------------------------------------------------------------------------