├── .editorconfig ├── .eslintignore ├── .eslintrc.cjs ├── .gitignore ├── .nvmrc ├── .prettierignore ├── .prettierrc ├── .vscode └── settings.json ├── LICENSE ├── README.md ├── package.json ├── pnpm-lock.yaml ├── src ├── days │ ├── 1 │ │ ├── Puzzle.ts │ │ ├── example-test-1.txt │ │ ├── example-test-2.txt │ │ └── input.txt │ └── 2 │ │ ├── Puzzle.ts │ │ ├── example-test-1.txt │ │ ├── example-test-2.txt │ │ └── input.txt ├── index.spec.ts ├── index.ts ├── scripts │ └── initNewDay │ │ ├── Puzzle.ts.tpl │ │ └── initNewDay.ts ├── types │ └── Puzzle.ts └── utils │ └── readFile.ts └── tsconfig.json /.editorconfig: -------------------------------------------------------------------------------- 1 | # EditorConfig is awesome: https://editorconfig.org 2 | 3 | # top-most EditorConfig file 4 | root = true 5 | 6 | # Unix-style newlines with a newline ending every file 7 | [*] 8 | end_of_line = lf 9 | 10 | # Indentation override for all JS/TS files 11 | [*.{js,jsx,ts,tsx}] 12 | indent_style = space 13 | charset = utf-8 14 | indent_size = 2 15 | 16 | -------------------------------------------------------------------------------- /.eslintignore: -------------------------------------------------------------------------------- 1 | # don't ever lint node_modules 2 | node_modules 3 | # don't lint build output (make sure it's set to your correct build folder name) 4 | dist -------------------------------------------------------------------------------- /.eslintrc.cjs: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | env: { 3 | node: true, 4 | }, 5 | root: true, 6 | parser: '@typescript-eslint/parser', 7 | plugins: ['@typescript-eslint'], 8 | extends: [ 9 | 'eslint:recommended', 10 | 'plugin:@typescript-eslint/recommended', 11 | 'prettier', 12 | ], 13 | rules: { 14 | 'no-multi-spaces': [ 15 | 'error', 16 | { 17 | ignoreEOLComments: true, 18 | exceptions: { 19 | VariableDeclarator: true, 20 | }, 21 | }, 22 | ], 23 | 'block-spacing': ['error', 'always'], 24 | 'array-bracket-spacing': ['error', 'never'], 25 | 'space-in-parens': ['error', 'never'], 26 | 'comma-spacing': [ 27 | 'error', 28 | { 29 | before: false, 30 | after: true, 31 | }, 32 | ], 33 | 'key-spacing': [ 34 | 'error', 35 | { 36 | afterColon: true, 37 | beforeColon: false, 38 | }, 39 | ], 40 | quotes: [ 41 | 'error', 42 | 'single', 43 | { 44 | avoidEscape: true, 45 | allowTemplateLiterals: true, 46 | }, 47 | ], 48 | semi: ['error', 'always'], 49 | 'no-console': ['off'], 50 | 'no-constant-condition': ['warn'], 51 | curly: ['error', 'all'], 52 | 'brace-style': [ 53 | 'error', 54 | '1tbs', 55 | { 56 | allowSingleLine: false, 57 | }, 58 | ], 59 | 'keyword-spacing': [ 60 | 'error', 61 | { 62 | before: true, 63 | after: true, 64 | }, 65 | ], 66 | 'object-curly-spacing': ['error', 'always'], 67 | 'no-mixed-spaces-and-tabs': ['error', 'smart-tabs'], 68 | 'spaced-comment': [2, 'always'], 69 | 'space-before-blocks': ['error', 'always'], 70 | 'space-before-function-paren': 'off', 71 | 'prefer-template': 'error', 72 | 'no-useless-concat': 'error', 73 | 'eol-last': ['error', 'always'], 74 | 'template-curly-spacing': ['error', 'never'], 75 | 'no-multiple-empty-lines': 'off', 76 | }, 77 | }; 78 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | node_modules 2 | dist 3 | .DS_Store 4 | input.txt 5 | -------------------------------------------------------------------------------- /.nvmrc: -------------------------------------------------------------------------------- 1 | 20.10.0 -------------------------------------------------------------------------------- /.prettierignore: -------------------------------------------------------------------------------- 1 | node_modules 2 | dist 3 | package-lock.json 4 | -------------------------------------------------------------------------------- /.prettierrc: -------------------------------------------------------------------------------- 1 | { 2 | "trailingComma": "es5", 3 | "tabWidth": 2, 4 | "useTabs": false, 5 | "semi": true, 6 | "singleQuote": true 7 | } 8 | -------------------------------------------------------------------------------- /.vscode/settings.json: -------------------------------------------------------------------------------- 1 | { 2 | "editor.formatOnSave": true 3 | } 4 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2021 Francesco Maida 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # 🎄 AdventOfCode-typescript-template 🎄 2 | 3 | This is a TypeScript boilerplate for Advent of Code. 4 | 5 | built with ❤️ and: 6 | 7 | - [typescript](https://www.typescriptlang.org/) 👨‍💻 8 | - [vitest](https://vitest.dev/) 🧪 9 | - [bun](https://bun.sh/) 🧅 10 | 11 | ## 👷‍♂️ Project structure 12 | 13 | the project has the following structure: 14 | 15 | ``` 16 | src 17 | - days: contains the solutions for the puzzles 18 | - scripts: utility scripts for development lifecycle 19 | - types: types and interfaces 20 | - utils: utility scripts used for development and problem solving (i.e read an input file) 21 | ``` 22 | 23 | ## 🚀 Getting started 24 | 25 | This readme assumes you are using [pnpm](https://pnpm.io/) as package manager, but any other package manager will do. 26 | 27 | The runtime used for this project is bun [bun](https://bun.sh/), check the docs for installing it. 28 | 29 | install all required dependencies with `pnpm i` 30 | 31 | ## 🎄 Adding a new puzzle 32 | 33 | when the new AoC puzzle is available run `pnpm init-day {day}` 34 | 35 | replace `{day}` with the number of the advent day, i.e. `pnpm init-day 2`. 36 | 37 | This command will create a new directory in the `days` folder with the following content 38 | 39 | - `Puzzle.ts`: the boilerplate module with the placeholder methods for solving both daily puzzles 40 | - `index.txt`: the input file where to add the puzzle input 41 | 42 | The structure of the boilerplate module is the following: 43 | 44 | ```typescript 45 | const first = (input: string) => { 46 | console.log(input); 47 | return 'solution 1'; 48 | }; 49 | 50 | const expectedFirstSolution = 'solution 1'; 51 | 52 | const second = (input: string) => { 53 | console.log(input); 54 | return 'solution 2'; 55 | }; 56 | 57 | const expectedSecondSolution = 'solution 2'; 58 | 59 | export { first, expectedFirstSolution, second, expectedSecondSolution }; 60 | ``` 61 | 62 | ## 🔧 Development 63 | 64 | When your solution is ready, or when you want to start developing incrementally (watch mode) run `pnpm dev {day}` where {day} is the day you are working on, i.e. `pnpm dev 1` will run the puzzle class for day 1. 65 | 66 | ## 🧪 Testing 67 | 68 | You can run test for all puzzles agains their expected output with `pnpm t` this will test all the solutions in the `days` folder 69 | 70 | ## 🛫 Contributing 71 | 72 | Every contribution is welcome. Just fork this repo and open a MR with your changes, and don't forget to add your name to the contributors section of this README. 73 | 74 | ## 👨👩 Contributors 75 | 76 | [Francesco Maida](https://edge33.github.io) 77 | 78 | [Devin Spikowski](https://github.com/vegeta897) 79 | 80 | [Nitish Thiyagarajan](https://www.tnitish.com) 81 | 82 | [Abdul Isik](https://abdulisik.com) 83 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "advent-of-code-boilerplate", 3 | "version": "1.0.0", 4 | "description": "Boilerplate workspace for advent of code puzzle", 5 | "main": "index.ts", 6 | "scripts": { 7 | "dev": "bun src/index.ts", 8 | "build": "rm -rf dist && tsc", 9 | "test": "vitest", 10 | "start": "node dist/index.js", 11 | "init-day": "bun src/scripts/initNewDay/initNewDay.ts", 12 | "lint": "eslint src", 13 | "lint:fix": "eslint --fix src" 14 | }, 15 | "author": "Francesco Maida", 16 | "license": "MIT", 17 | "devDependencies": { 18 | "@types/node": "^20.10.1", 19 | "@typescript-eslint/eslint-plugin": "^6.13.1", 20 | "@typescript-eslint/parser": "^6.13.1", 21 | "eslint": "^8.54.0", 22 | "eslint-config-prettier": "^9.0.0", 23 | "prettier": "^3.1.0", 24 | "typescript": "^5.3.2", 25 | "vitest": "^0.34.6" 26 | }, 27 | "dependencies": { 28 | "bun": "^1.1.38" 29 | } 30 | } 31 | -------------------------------------------------------------------------------- /pnpm-lock.yaml: -------------------------------------------------------------------------------- 1 | lockfileVersion: '6.0' 2 | 3 | settings: 4 | autoInstallPeers: true 5 | excludeLinksFromLockfile: false 6 | 7 | devDependencies: 8 | '@types/node': 9 | specifier: ^20.10.1 10 | version: 20.10.1 11 | '@typescript-eslint/eslint-plugin': 12 | specifier: ^6.13.1 13 | version: 6.13.1(@typescript-eslint/parser@6.13.1)(eslint@8.54.0)(typescript@5.3.2) 14 | '@typescript-eslint/parser': 15 | specifier: ^6.13.1 16 | version: 6.13.1(eslint@8.54.0)(typescript@5.3.2) 17 | eslint: 18 | specifier: ^8.54.0 19 | version: 8.54.0 20 | eslint-config-prettier: 21 | specifier: ^9.0.0 22 | version: 9.0.0(eslint@8.54.0) 23 | prettier: 24 | specifier: ^3.1.0 25 | version: 3.1.0 26 | typescript: 27 | specifier: ^5.3.2 28 | version: 5.3.2 29 | vitest: 30 | specifier: ^0.34.6 31 | version: 0.34.6 32 | 33 | packages: 34 | 35 | /@aashutoshrathi/word-wrap@1.2.6: 36 | resolution: {integrity: sha512-1Yjs2SvM8TflER/OD3cOjhWWOZb58A2t7wpE2S9XfBYTiIl+XFhQG2bjy4Pu1I+EAlCNUzRDYDdFwFYUKvXcIA==} 37 | engines: {node: '>=0.10.0'} 38 | dev: true 39 | 40 | /@esbuild/android-arm64@0.19.8: 41 | resolution: {integrity: sha512-B8JbS61bEunhfx8kasogFENgQfr/dIp+ggYXwTqdbMAgGDhRa3AaPpQMuQU0rNxDLECj6FhDzk1cF9WHMVwrtA==} 42 | engines: {node: '>=12'} 43 | cpu: [arm64] 44 | os: [android] 45 | requiresBuild: true 46 | dev: true 47 | optional: true 48 | 49 | /@esbuild/android-arm@0.19.8: 50 | resolution: {integrity: sha512-31E2lxlGM1KEfivQl8Yf5aYU/mflz9g06H6S15ITUFQueMFtFjESRMoDSkvMo8thYvLBax+VKTPlpnx+sPicOA==} 51 | engines: {node: '>=12'} 52 | cpu: [arm] 53 | os: [android] 54 | requiresBuild: true 55 | dev: true 56 | optional: true 57 | 58 | /@esbuild/android-x64@0.19.8: 59 | resolution: {integrity: sha512-rdqqYfRIn4jWOp+lzQttYMa2Xar3OK9Yt2fhOhzFXqg0rVWEfSclJvZq5fZslnz6ypHvVf3CT7qyf0A5pM682A==} 60 | engines: {node: '>=12'} 61 | cpu: [x64] 62 | os: [android] 63 | requiresBuild: true 64 | dev: true 65 | optional: true 66 | 67 | /@esbuild/darwin-arm64@0.19.8: 68 | resolution: {integrity: sha512-RQw9DemMbIq35Bprbboyf8SmOr4UXsRVxJ97LgB55VKKeJOOdvsIPy0nFyF2l8U+h4PtBx/1kRf0BelOYCiQcw==} 69 | engines: {node: '>=12'} 70 | cpu: [arm64] 71 | os: [darwin] 72 | requiresBuild: true 73 | dev: true 74 | optional: true 75 | 76 | /@esbuild/darwin-x64@0.19.8: 77 | resolution: {integrity: sha512-3sur80OT9YdeZwIVgERAysAbwncom7b4bCI2XKLjMfPymTud7e/oY4y+ci1XVp5TfQp/bppn7xLw1n/oSQY3/Q==} 78 | engines: {node: '>=12'} 79 | cpu: [x64] 80 | os: [darwin] 81 | requiresBuild: true 82 | dev: true 83 | optional: true 84 | 85 | /@esbuild/freebsd-arm64@0.19.8: 86 | resolution: {integrity: sha512-WAnPJSDattvS/XtPCTj1tPoTxERjcTpH6HsMr6ujTT+X6rylVe8ggxk8pVxzf5U1wh5sPODpawNicF5ta/9Tmw==} 87 | engines: {node: '>=12'} 88 | cpu: [arm64] 89 | os: [freebsd] 90 | requiresBuild: true 91 | dev: true 92 | optional: true 93 | 94 | /@esbuild/freebsd-x64@0.19.8: 95 | resolution: {integrity: sha512-ICvZyOplIjmmhjd6mxi+zxSdpPTKFfyPPQMQTK/w+8eNK6WV01AjIztJALDtwNNfFhfZLux0tZLC+U9nSyA5Zg==} 96 | engines: {node: '>=12'} 97 | cpu: [x64] 98 | os: [freebsd] 99 | requiresBuild: true 100 | dev: true 101 | optional: true 102 | 103 | /@esbuild/linux-arm64@0.19.8: 104 | resolution: {integrity: sha512-z1zMZivxDLHWnyGOctT9JP70h0beY54xDDDJt4VpTX+iwA77IFsE1vCXWmprajJGa+ZYSqkSbRQ4eyLCpCmiCQ==} 105 | engines: {node: '>=12'} 106 | cpu: [arm64] 107 | os: [linux] 108 | requiresBuild: true 109 | dev: true 110 | optional: true 111 | 112 | /@esbuild/linux-arm@0.19.8: 113 | resolution: {integrity: sha512-H4vmI5PYqSvosPaTJuEppU9oz1dq2A7Mr2vyg5TF9Ga+3+MGgBdGzcyBP7qK9MrwFQZlvNyJrvz6GuCaj3OukQ==} 114 | engines: {node: '>=12'} 115 | cpu: [arm] 116 | os: [linux] 117 | requiresBuild: true 118 | dev: true 119 | optional: true 120 | 121 | /@esbuild/linux-ia32@0.19.8: 122 | resolution: {integrity: sha512-1a8suQiFJmZz1khm/rDglOc8lavtzEMRo0v6WhPgxkrjcU0LkHj+TwBrALwoz/OtMExvsqbbMI0ChyelKabSvQ==} 123 | engines: {node: '>=12'} 124 | cpu: [ia32] 125 | os: [linux] 126 | requiresBuild: true 127 | dev: true 128 | optional: true 129 | 130 | /@esbuild/linux-loong64@0.19.8: 131 | resolution: {integrity: sha512-fHZWS2JJxnXt1uYJsDv9+b60WCc2RlvVAy1F76qOLtXRO+H4mjt3Tr6MJ5l7Q78X8KgCFudnTuiQRBhULUyBKQ==} 132 | engines: {node: '>=12'} 133 | cpu: [loong64] 134 | os: [linux] 135 | requiresBuild: true 136 | dev: true 137 | optional: true 138 | 139 | /@esbuild/linux-mips64el@0.19.8: 140 | resolution: {integrity: sha512-Wy/z0EL5qZYLX66dVnEg9riiwls5IYnziwuju2oUiuxVc+/edvqXa04qNtbrs0Ukatg5HEzqT94Zs7J207dN5Q==} 141 | engines: {node: '>=12'} 142 | cpu: [mips64el] 143 | os: [linux] 144 | requiresBuild: true 145 | dev: true 146 | optional: true 147 | 148 | /@esbuild/linux-ppc64@0.19.8: 149 | resolution: {integrity: sha512-ETaW6245wK23YIEufhMQ3HSeHO7NgsLx8gygBVldRHKhOlD1oNeNy/P67mIh1zPn2Hr2HLieQrt6tWrVwuqrxg==} 150 | engines: {node: '>=12'} 151 | cpu: [ppc64] 152 | os: [linux] 153 | requiresBuild: true 154 | dev: true 155 | optional: true 156 | 157 | /@esbuild/linux-riscv64@0.19.8: 158 | resolution: {integrity: sha512-T2DRQk55SgoleTP+DtPlMrxi/5r9AeFgkhkZ/B0ap99zmxtxdOixOMI570VjdRCs9pE4Wdkz7JYrsPvsl7eESg==} 159 | engines: {node: '>=12'} 160 | cpu: [riscv64] 161 | os: [linux] 162 | requiresBuild: true 163 | dev: true 164 | optional: true 165 | 166 | /@esbuild/linux-s390x@0.19.8: 167 | resolution: {integrity: sha512-NPxbdmmo3Bk7mbNeHmcCd7R7fptJaczPYBaELk6NcXxy7HLNyWwCyDJ/Xx+/YcNH7Im5dHdx9gZ5xIwyliQCbg==} 168 | engines: {node: '>=12'} 169 | cpu: [s390x] 170 | os: [linux] 171 | requiresBuild: true 172 | dev: true 173 | optional: true 174 | 175 | /@esbuild/linux-x64@0.19.8: 176 | resolution: {integrity: sha512-lytMAVOM3b1gPypL2TRmZ5rnXl7+6IIk8uB3eLsV1JwcizuolblXRrc5ShPrO9ls/b+RTp+E6gbsuLWHWi2zGg==} 177 | engines: {node: '>=12'} 178 | cpu: [x64] 179 | os: [linux] 180 | requiresBuild: true 181 | dev: true 182 | optional: true 183 | 184 | /@esbuild/netbsd-x64@0.19.8: 185 | resolution: {integrity: sha512-hvWVo2VsXz/8NVt1UhLzxwAfo5sioj92uo0bCfLibB0xlOmimU/DeAEsQILlBQvkhrGjamP0/el5HU76HAitGw==} 186 | engines: {node: '>=12'} 187 | cpu: [x64] 188 | os: [netbsd] 189 | requiresBuild: true 190 | dev: true 191 | optional: true 192 | 193 | /@esbuild/openbsd-x64@0.19.8: 194 | resolution: {integrity: sha512-/7Y7u77rdvmGTxR83PgaSvSBJCC2L3Kb1M/+dmSIvRvQPXXCuC97QAwMugBNG0yGcbEGfFBH7ojPzAOxfGNkwQ==} 195 | engines: {node: '>=12'} 196 | cpu: [x64] 197 | os: [openbsd] 198 | requiresBuild: true 199 | dev: true 200 | optional: true 201 | 202 | /@esbuild/sunos-x64@0.19.8: 203 | resolution: {integrity: sha512-9Lc4s7Oi98GqFA4HzA/W2JHIYfnXbUYgekUP/Sm4BG9sfLjyv6GKKHKKVs83SMicBF2JwAX6A1PuOLMqpD001w==} 204 | engines: {node: '>=12'} 205 | cpu: [x64] 206 | os: [sunos] 207 | requiresBuild: true 208 | dev: true 209 | optional: true 210 | 211 | /@esbuild/win32-arm64@0.19.8: 212 | resolution: {integrity: sha512-rq6WzBGjSzihI9deW3fC2Gqiak68+b7qo5/3kmB6Gvbh/NYPA0sJhrnp7wgV4bNwjqM+R2AApXGxMO7ZoGhIJg==} 213 | engines: {node: '>=12'} 214 | cpu: [arm64] 215 | os: [win32] 216 | requiresBuild: true 217 | dev: true 218 | optional: true 219 | 220 | /@esbuild/win32-ia32@0.19.8: 221 | resolution: {integrity: sha512-AIAbverbg5jMvJznYiGhrd3sumfwWs8572mIJL5NQjJa06P8KfCPWZQ0NwZbPQnbQi9OWSZhFVSUWjjIrn4hSw==} 222 | engines: {node: '>=12'} 223 | cpu: [ia32] 224 | os: [win32] 225 | requiresBuild: true 226 | dev: true 227 | optional: true 228 | 229 | /@esbuild/win32-x64@0.19.8: 230 | resolution: {integrity: sha512-bfZ0cQ1uZs2PqpulNL5j/3w+GDhP36k1K5c38QdQg+Swy51jFZWWeIkteNsufkQxp986wnqRRsb/bHbY1WQ7TA==} 231 | engines: {node: '>=12'} 232 | cpu: [x64] 233 | os: [win32] 234 | requiresBuild: true 235 | dev: true 236 | optional: true 237 | 238 | /@eslint-community/eslint-utils@4.4.0(eslint@8.54.0): 239 | resolution: {integrity: sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==} 240 | engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} 241 | peerDependencies: 242 | eslint: ^6.0.0 || ^7.0.0 || >=8.0.0 243 | dependencies: 244 | eslint: 8.54.0 245 | eslint-visitor-keys: 3.4.3 246 | dev: true 247 | 248 | /@eslint-community/regexpp@4.10.0: 249 | resolution: {integrity: sha512-Cu96Sd2By9mCNTx2iyKOmq10v22jUVQv0lQnlGNy16oE9589yE+QADPbrMGCkA51cKZSg3Pu/aTJVTGfL/qjUA==} 250 | engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0} 251 | dev: true 252 | 253 | /@eslint/eslintrc@2.1.3: 254 | resolution: {integrity: sha512-yZzuIG+jnVu6hNSzFEN07e8BxF3uAzYtQb6uDkaYZLo6oYZDCq454c5kB8zxnzfCYyP4MIuyBn10L0DqwujTmA==} 255 | engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} 256 | dependencies: 257 | ajv: 6.12.6 258 | debug: 4.3.4 259 | espree: 9.6.1 260 | globals: 13.23.0 261 | ignore: 5.3.0 262 | import-fresh: 3.3.0 263 | js-yaml: 4.1.0 264 | minimatch: 3.1.2 265 | strip-json-comments: 3.1.1 266 | transitivePeerDependencies: 267 | - supports-color 268 | dev: true 269 | 270 | /@eslint/js@8.54.0: 271 | resolution: {integrity: sha512-ut5V+D+fOoWPgGGNj83GGjnntO39xDy6DWxO0wb7Jp3DcMX0TfIqdzHF85VTQkerdyGmuuMD9AKAo5KiNlf/AQ==} 272 | engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} 273 | dev: true 274 | 275 | /@humanwhocodes/config-array@0.11.13: 276 | resolution: {integrity: sha512-JSBDMiDKSzQVngfRjOdFXgFfklaXI4K9nLF49Auh21lmBWRLIK3+xTErTWD4KU54pb6coM6ESE7Awz/FNU3zgQ==} 277 | engines: {node: '>=10.10.0'} 278 | dependencies: 279 | '@humanwhocodes/object-schema': 2.0.1 280 | debug: 4.3.4 281 | minimatch: 3.1.2 282 | transitivePeerDependencies: 283 | - supports-color 284 | dev: true 285 | 286 | /@humanwhocodes/module-importer@1.0.1: 287 | resolution: {integrity: sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==} 288 | engines: {node: '>=12.22'} 289 | dev: true 290 | 291 | /@humanwhocodes/object-schema@2.0.1: 292 | resolution: {integrity: sha512-dvuCeX5fC9dXgJn9t+X5atfmgQAzUOWqS1254Gh0m6i8wKd10ebXkfNKiRK+1GWi/yTvvLDHpoxLr0xxxeslWw==} 293 | dev: true 294 | 295 | /@jest/schemas@29.6.3: 296 | resolution: {integrity: sha512-mo5j5X+jIZmJQveBKeS/clAueipV7KgiX1vMgCxam1RNYiqE1w62n0/tJJnHtjW8ZHcQco5gY85jA3mi0L+nSA==} 297 | engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} 298 | dependencies: 299 | '@sinclair/typebox': 0.27.8 300 | dev: true 301 | 302 | /@jridgewell/sourcemap-codec@1.4.15: 303 | resolution: {integrity: sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==} 304 | dev: true 305 | 306 | /@nodelib/fs.scandir@2.1.5: 307 | resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==} 308 | engines: {node: '>= 8'} 309 | dependencies: 310 | '@nodelib/fs.stat': 2.0.5 311 | run-parallel: 1.2.0 312 | dev: true 313 | 314 | /@nodelib/fs.stat@2.0.5: 315 | resolution: {integrity: sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==} 316 | engines: {node: '>= 8'} 317 | dev: true 318 | 319 | /@nodelib/fs.walk@1.2.8: 320 | resolution: {integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==} 321 | engines: {node: '>= 8'} 322 | dependencies: 323 | '@nodelib/fs.scandir': 2.1.5 324 | fastq: 1.15.0 325 | dev: true 326 | 327 | /@rollup/rollup-android-arm-eabi@4.6.1: 328 | resolution: {integrity: sha512-0WQ0ouLejaUCRsL93GD4uft3rOmB8qoQMU05Kb8CmMtMBe7XUDLAltxVZI1q6byNqEtU7N1ZX1Vw5lIpgulLQA==} 329 | cpu: [arm] 330 | os: [android] 331 | requiresBuild: true 332 | dev: true 333 | optional: true 334 | 335 | /@rollup/rollup-android-arm64@4.6.1: 336 | resolution: {integrity: sha512-1TKm25Rn20vr5aTGGZqo6E4mzPicCUD79k17EgTLAsXc1zysyi4xXKACfUbwyANEPAEIxkzwue6JZ+stYzWUTA==} 337 | cpu: [arm64] 338 | os: [android] 339 | requiresBuild: true 340 | dev: true 341 | optional: true 342 | 343 | /@rollup/rollup-darwin-arm64@4.6.1: 344 | resolution: {integrity: sha512-cEXJQY/ZqMACb+nxzDeX9IPLAg7S94xouJJCNVE5BJM8JUEP4HeTF+ti3cmxWeSJo+5D+o8Tc0UAWUkfENdeyw==} 345 | cpu: [arm64] 346 | os: [darwin] 347 | requiresBuild: true 348 | dev: true 349 | optional: true 350 | 351 | /@rollup/rollup-darwin-x64@4.6.1: 352 | resolution: {integrity: sha512-LoSU9Xu56isrkV2jLldcKspJ7sSXmZWkAxg7sW/RfF7GS4F5/v4EiqKSMCFbZtDu2Nc1gxxFdQdKwkKS4rwxNg==} 353 | cpu: [x64] 354 | os: [darwin] 355 | requiresBuild: true 356 | dev: true 357 | optional: true 358 | 359 | /@rollup/rollup-linux-arm-gnueabihf@4.6.1: 360 | resolution: {integrity: sha512-EfI3hzYAy5vFNDqpXsNxXcgRDcFHUWSx5nnRSCKwXuQlI5J9dD84g2Usw81n3FLBNsGCegKGwwTVsSKK9cooSQ==} 361 | cpu: [arm] 362 | os: [linux] 363 | requiresBuild: true 364 | dev: true 365 | optional: true 366 | 367 | /@rollup/rollup-linux-arm64-gnu@4.6.1: 368 | resolution: {integrity: sha512-9lhc4UZstsegbNLhH0Zu6TqvDfmhGzuCWtcTFXY10VjLLUe4Mr0Ye2L3rrtHaDd/J5+tFMEuo5LTCSCMXWfUKw==} 369 | cpu: [arm64] 370 | os: [linux] 371 | requiresBuild: true 372 | dev: true 373 | optional: true 374 | 375 | /@rollup/rollup-linux-arm64-musl@4.6.1: 376 | resolution: {integrity: sha512-FfoOK1yP5ksX3wwZ4Zk1NgyGHZyuRhf99j64I5oEmirV8EFT7+OhUZEnP+x17lcP/QHJNWGsoJwrz4PJ9fBEXw==} 377 | cpu: [arm64] 378 | os: [linux] 379 | requiresBuild: true 380 | dev: true 381 | optional: true 382 | 383 | /@rollup/rollup-linux-x64-gnu@4.6.1: 384 | resolution: {integrity: sha512-DNGZvZDO5YF7jN5fX8ZqmGLjZEXIJRdJEdTFMhiyXqyXubBa0WVLDWSNlQ5JR2PNgDbEV1VQowhVRUh+74D+RA==} 385 | cpu: [x64] 386 | os: [linux] 387 | requiresBuild: true 388 | dev: true 389 | optional: true 390 | 391 | /@rollup/rollup-linux-x64-musl@4.6.1: 392 | resolution: {integrity: sha512-RkJVNVRM+piYy87HrKmhbexCHg3A6Z6MU0W9GHnJwBQNBeyhCJG9KDce4SAMdicQnpURggSvtbGo9xAWOfSvIQ==} 393 | cpu: [x64] 394 | os: [linux] 395 | requiresBuild: true 396 | dev: true 397 | optional: true 398 | 399 | /@rollup/rollup-win32-arm64-msvc@4.6.1: 400 | resolution: {integrity: sha512-v2FVT6xfnnmTe3W9bJXl6r5KwJglMK/iRlkKiIFfO6ysKs0rDgz7Cwwf3tjldxQUrHL9INT/1r4VA0n9L/F1vQ==} 401 | cpu: [arm64] 402 | os: [win32] 403 | requiresBuild: true 404 | dev: true 405 | optional: true 406 | 407 | /@rollup/rollup-win32-ia32-msvc@4.6.1: 408 | resolution: {integrity: sha512-YEeOjxRyEjqcWphH9dyLbzgkF8wZSKAKUkldRY6dgNR5oKs2LZazqGB41cWJ4Iqqcy9/zqYgmzBkRoVz3Q9MLw==} 409 | cpu: [ia32] 410 | os: [win32] 411 | requiresBuild: true 412 | dev: true 413 | optional: true 414 | 415 | /@rollup/rollup-win32-x64-msvc@4.6.1: 416 | resolution: {integrity: sha512-0zfTlFAIhgz8V2G8STq8toAjsYYA6eci1hnXuyOTUFnymrtJwnS6uGKiv3v5UrPZkBlamLvrLV2iiaeqCKzb0A==} 417 | cpu: [x64] 418 | os: [win32] 419 | requiresBuild: true 420 | dev: true 421 | optional: true 422 | 423 | /@sinclair/typebox@0.27.8: 424 | resolution: {integrity: sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA==} 425 | dev: true 426 | 427 | /@types/chai-subset@1.3.5: 428 | resolution: {integrity: sha512-c2mPnw+xHtXDoHmdtcCXGwyLMiauiAyxWMzhGpqHC4nqI/Y5G2XhTampslK2rb59kpcuHon03UH8W6iYUzw88A==} 429 | dependencies: 430 | '@types/chai': 4.3.11 431 | dev: true 432 | 433 | /@types/chai@4.3.11: 434 | resolution: {integrity: sha512-qQR1dr2rGIHYlJulmr8Ioq3De0Le9E4MJ5AiaeAETJJpndT1uUNHsGFK3L/UIu+rbkQSdj8J/w2bCsBZc/Y5fQ==} 435 | dev: true 436 | 437 | /@types/json-schema@7.0.15: 438 | resolution: {integrity: sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==} 439 | dev: true 440 | 441 | /@types/node@20.10.1: 442 | resolution: {integrity: sha512-T2qwhjWwGH81vUEx4EXmBKsTJRXFXNZTL4v0gi01+zyBmCwzE6TyHszqX01m+QHTEq+EZNo13NeJIdEqf+Myrg==} 443 | dependencies: 444 | undici-types: 5.26.5 445 | dev: true 446 | 447 | /@types/semver@7.5.6: 448 | resolution: {integrity: sha512-dn1l8LaMea/IjDoHNd9J52uBbInB796CDffS6VdIxvqYCPSG0V0DzHp76GpaWnlhg88uYyPbXCDIowa86ybd5A==} 449 | dev: true 450 | 451 | /@typescript-eslint/eslint-plugin@6.13.1(@typescript-eslint/parser@6.13.1)(eslint@8.54.0)(typescript@5.3.2): 452 | resolution: {integrity: sha512-5bQDGkXaxD46bPvQt08BUz9YSaO4S0fB1LB5JHQuXTfkGPI3+UUeS387C/e9jRie5GqT8u5kFTrMvAjtX4O5kA==} 453 | engines: {node: ^16.0.0 || >=18.0.0} 454 | peerDependencies: 455 | '@typescript-eslint/parser': ^6.0.0 || ^6.0.0-alpha 456 | eslint: ^7.0.0 || ^8.0.0 457 | typescript: '*' 458 | peerDependenciesMeta: 459 | typescript: 460 | optional: true 461 | dependencies: 462 | '@eslint-community/regexpp': 4.10.0 463 | '@typescript-eslint/parser': 6.13.1(eslint@8.54.0)(typescript@5.3.2) 464 | '@typescript-eslint/scope-manager': 6.13.1 465 | '@typescript-eslint/type-utils': 6.13.1(eslint@8.54.0)(typescript@5.3.2) 466 | '@typescript-eslint/utils': 6.13.1(eslint@8.54.0)(typescript@5.3.2) 467 | '@typescript-eslint/visitor-keys': 6.13.1 468 | debug: 4.3.4 469 | eslint: 8.54.0 470 | graphemer: 1.4.0 471 | ignore: 5.3.0 472 | natural-compare: 1.4.0 473 | semver: 7.5.4 474 | ts-api-utils: 1.0.3(typescript@5.3.2) 475 | typescript: 5.3.2 476 | transitivePeerDependencies: 477 | - supports-color 478 | dev: true 479 | 480 | /@typescript-eslint/parser@6.13.1(eslint@8.54.0)(typescript@5.3.2): 481 | resolution: {integrity: sha512-fs2XOhWCzRhqMmQf0eicLa/CWSaYss2feXsy7xBD/pLyWke/jCIVc2s1ikEAtSW7ina1HNhv7kONoEfVNEcdDQ==} 482 | engines: {node: ^16.0.0 || >=18.0.0} 483 | peerDependencies: 484 | eslint: ^7.0.0 || ^8.0.0 485 | typescript: '*' 486 | peerDependenciesMeta: 487 | typescript: 488 | optional: true 489 | dependencies: 490 | '@typescript-eslint/scope-manager': 6.13.1 491 | '@typescript-eslint/types': 6.13.1 492 | '@typescript-eslint/typescript-estree': 6.13.1(typescript@5.3.2) 493 | '@typescript-eslint/visitor-keys': 6.13.1 494 | debug: 4.3.4 495 | eslint: 8.54.0 496 | typescript: 5.3.2 497 | transitivePeerDependencies: 498 | - supports-color 499 | dev: true 500 | 501 | /@typescript-eslint/scope-manager@6.13.1: 502 | resolution: {integrity: sha512-BW0kJ7ceiKi56GbT2KKzZzN+nDxzQK2DS6x0PiSMPjciPgd/JRQGMibyaN2cPt2cAvuoH0oNvn2fwonHI+4QUQ==} 503 | engines: {node: ^16.0.0 || >=18.0.0} 504 | dependencies: 505 | '@typescript-eslint/types': 6.13.1 506 | '@typescript-eslint/visitor-keys': 6.13.1 507 | dev: true 508 | 509 | /@typescript-eslint/type-utils@6.13.1(eslint@8.54.0)(typescript@5.3.2): 510 | resolution: {integrity: sha512-A2qPlgpxx2v//3meMqQyB1qqTg1h1dJvzca7TugM3Yc2USDY+fsRBiojAEo92HO7f5hW5mjAUF6qobOPzlBCBQ==} 511 | engines: {node: ^16.0.0 || >=18.0.0} 512 | peerDependencies: 513 | eslint: ^7.0.0 || ^8.0.0 514 | typescript: '*' 515 | peerDependenciesMeta: 516 | typescript: 517 | optional: true 518 | dependencies: 519 | '@typescript-eslint/typescript-estree': 6.13.1(typescript@5.3.2) 520 | '@typescript-eslint/utils': 6.13.1(eslint@8.54.0)(typescript@5.3.2) 521 | debug: 4.3.4 522 | eslint: 8.54.0 523 | ts-api-utils: 1.0.3(typescript@5.3.2) 524 | typescript: 5.3.2 525 | transitivePeerDependencies: 526 | - supports-color 527 | dev: true 528 | 529 | /@typescript-eslint/types@6.13.1: 530 | resolution: {integrity: sha512-gjeEskSmiEKKFIbnhDXUyiqVma1gRCQNbVZ1C8q7Zjcxh3WZMbzWVfGE9rHfWd1msQtPS0BVD9Jz9jded44eKg==} 531 | engines: {node: ^16.0.0 || >=18.0.0} 532 | dev: true 533 | 534 | /@typescript-eslint/typescript-estree@6.13.1(typescript@5.3.2): 535 | resolution: {integrity: sha512-sBLQsvOC0Q7LGcUHO5qpG1HxRgePbT6wwqOiGLpR8uOJvPJbfs0mW3jPA3ujsDvfiVwVlWUDESNXv44KtINkUQ==} 536 | engines: {node: ^16.0.0 || >=18.0.0} 537 | peerDependencies: 538 | typescript: '*' 539 | peerDependenciesMeta: 540 | typescript: 541 | optional: true 542 | dependencies: 543 | '@typescript-eslint/types': 6.13.1 544 | '@typescript-eslint/visitor-keys': 6.13.1 545 | debug: 4.3.4 546 | globby: 11.1.0 547 | is-glob: 4.0.3 548 | semver: 7.5.4 549 | ts-api-utils: 1.0.3(typescript@5.3.2) 550 | typescript: 5.3.2 551 | transitivePeerDependencies: 552 | - supports-color 553 | dev: true 554 | 555 | /@typescript-eslint/utils@6.13.1(eslint@8.54.0)(typescript@5.3.2): 556 | resolution: {integrity: sha512-ouPn/zVoan92JgAegesTXDB/oUp6BP1v8WpfYcqh649ejNc9Qv+B4FF2Ff626kO1xg0wWwwG48lAJ4JuesgdOw==} 557 | engines: {node: ^16.0.0 || >=18.0.0} 558 | peerDependencies: 559 | eslint: ^7.0.0 || ^8.0.0 560 | dependencies: 561 | '@eslint-community/eslint-utils': 4.4.0(eslint@8.54.0) 562 | '@types/json-schema': 7.0.15 563 | '@types/semver': 7.5.6 564 | '@typescript-eslint/scope-manager': 6.13.1 565 | '@typescript-eslint/types': 6.13.1 566 | '@typescript-eslint/typescript-estree': 6.13.1(typescript@5.3.2) 567 | eslint: 8.54.0 568 | semver: 7.5.4 569 | transitivePeerDependencies: 570 | - supports-color 571 | - typescript 572 | dev: true 573 | 574 | /@typescript-eslint/visitor-keys@6.13.1: 575 | resolution: {integrity: sha512-NDhQUy2tg6XGNBGDRm1XybOHSia8mcXmlbKWoQP+nm1BIIMxa55shyJfZkHpEBN62KNPLrocSM2PdPcaLgDKMQ==} 576 | engines: {node: ^16.0.0 || >=18.0.0} 577 | dependencies: 578 | '@typescript-eslint/types': 6.13.1 579 | eslint-visitor-keys: 3.4.3 580 | dev: true 581 | 582 | /@ungap/structured-clone@1.2.0: 583 | resolution: {integrity: sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ==} 584 | dev: true 585 | 586 | /@vitest/expect@0.34.6: 587 | resolution: {integrity: sha512-QUzKpUQRc1qC7qdGo7rMK3AkETI7w18gTCUrsNnyjjJKYiuUB9+TQK3QnR1unhCnWRC0AbKv2omLGQDF/mIjOw==} 588 | dependencies: 589 | '@vitest/spy': 0.34.6 590 | '@vitest/utils': 0.34.6 591 | chai: 4.3.10 592 | dev: true 593 | 594 | /@vitest/runner@0.34.6: 595 | resolution: {integrity: sha512-1CUQgtJSLF47NnhN+F9X2ycxUP0kLHQ/JWvNHbeBfwW8CzEGgeskzNnHDyv1ieKTltuR6sdIHV+nmR6kPxQqzQ==} 596 | dependencies: 597 | '@vitest/utils': 0.34.6 598 | p-limit: 4.0.0 599 | pathe: 1.1.1 600 | dev: true 601 | 602 | /@vitest/snapshot@0.34.6: 603 | resolution: {integrity: sha512-B3OZqYn6k4VaN011D+ve+AA4whM4QkcwcrwaKwAbyyvS/NB1hCWjFIBQxAQQSQir9/RtyAAGuq+4RJmbn2dH4w==} 604 | dependencies: 605 | magic-string: 0.30.5 606 | pathe: 1.1.1 607 | pretty-format: 29.7.0 608 | dev: true 609 | 610 | /@vitest/spy@0.34.6: 611 | resolution: {integrity: sha512-xaCvneSaeBw/cz8ySmF7ZwGvL0lBjfvqc1LpQ/vcdHEvpLn3Ff1vAvjw+CoGn0802l++5L/pxb7whwcWAw+DUQ==} 612 | dependencies: 613 | tinyspy: 2.2.0 614 | dev: true 615 | 616 | /@vitest/utils@0.34.6: 617 | resolution: {integrity: sha512-IG5aDD8S6zlvloDsnzHw0Ut5xczlF+kv2BOTo+iXfPr54Yhi5qbVOgGB1hZaVq4iJ4C/MZ2J0y15IlsV/ZcI0A==} 618 | dependencies: 619 | diff-sequences: 29.6.3 620 | loupe: 2.3.7 621 | pretty-format: 29.7.0 622 | dev: true 623 | 624 | /acorn-jsx@5.3.2(acorn@8.11.2): 625 | resolution: {integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==} 626 | peerDependencies: 627 | acorn: ^6.0.0 || ^7.0.0 || ^8.0.0 628 | dependencies: 629 | acorn: 8.11.2 630 | dev: true 631 | 632 | /acorn-walk@8.3.0: 633 | resolution: {integrity: sha512-FS7hV565M5l1R08MXqo8odwMTB02C2UqzB17RVgu9EyuYFBqJZ3/ZY97sQD5FewVu1UyDFc1yztUDrAwT0EypA==} 634 | engines: {node: '>=0.4.0'} 635 | dev: true 636 | 637 | /acorn@8.11.2: 638 | resolution: {integrity: sha512-nc0Axzp/0FILLEVsm4fNwLCwMttvhEI263QtVPQcbpfZZ3ts0hLsZGOpE6czNlid7CJ9MlyH8reXkpsf3YUY4w==} 639 | engines: {node: '>=0.4.0'} 640 | hasBin: true 641 | dev: true 642 | 643 | /ajv@6.12.6: 644 | resolution: {integrity: sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==} 645 | dependencies: 646 | fast-deep-equal: 3.1.3 647 | fast-json-stable-stringify: 2.1.0 648 | json-schema-traverse: 0.4.1 649 | uri-js: 4.4.1 650 | dev: true 651 | 652 | /ansi-regex@5.0.1: 653 | resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==} 654 | engines: {node: '>=8'} 655 | dev: true 656 | 657 | /ansi-styles@4.3.0: 658 | resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==} 659 | engines: {node: '>=8'} 660 | dependencies: 661 | color-convert: 2.0.1 662 | dev: true 663 | 664 | /ansi-styles@5.2.0: 665 | resolution: {integrity: sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==} 666 | engines: {node: '>=10'} 667 | dev: true 668 | 669 | /argparse@2.0.1: 670 | resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==} 671 | dev: true 672 | 673 | /array-union@2.1.0: 674 | resolution: {integrity: sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==} 675 | engines: {node: '>=8'} 676 | dev: true 677 | 678 | /assertion-error@1.1.0: 679 | resolution: {integrity: sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw==} 680 | dev: true 681 | 682 | /balanced-match@1.0.2: 683 | resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} 684 | dev: true 685 | 686 | /brace-expansion@1.1.11: 687 | resolution: {integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==} 688 | dependencies: 689 | balanced-match: 1.0.2 690 | concat-map: 0.0.1 691 | dev: true 692 | 693 | /braces@3.0.2: 694 | resolution: {integrity: sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==} 695 | engines: {node: '>=8'} 696 | dependencies: 697 | fill-range: 7.0.1 698 | dev: true 699 | 700 | /cac@6.7.14: 701 | resolution: {integrity: sha512-b6Ilus+c3RrdDk+JhLKUAQfzzgLEPy6wcXqS7f/xe1EETvsDP6GORG7SFuOs6cID5YkqchW/LXZbX5bc8j7ZcQ==} 702 | engines: {node: '>=8'} 703 | dev: true 704 | 705 | /callsites@3.1.0: 706 | resolution: {integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==} 707 | engines: {node: '>=6'} 708 | dev: true 709 | 710 | /chai@4.3.10: 711 | resolution: {integrity: sha512-0UXG04VuVbruMUYbJ6JctvH0YnC/4q3/AkT18q4NaITo91CUm0liMS9VqzT9vZhVQ/1eqPanMWjBM+Juhfb/9g==} 712 | engines: {node: '>=4'} 713 | dependencies: 714 | assertion-error: 1.1.0 715 | check-error: 1.0.3 716 | deep-eql: 4.1.3 717 | get-func-name: 2.0.2 718 | loupe: 2.3.7 719 | pathval: 1.1.1 720 | type-detect: 4.0.8 721 | dev: true 722 | 723 | /chalk@4.1.2: 724 | resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==} 725 | engines: {node: '>=10'} 726 | dependencies: 727 | ansi-styles: 4.3.0 728 | supports-color: 7.2.0 729 | dev: true 730 | 731 | /check-error@1.0.3: 732 | resolution: {integrity: sha512-iKEoDYaRmd1mxM90a2OEfWhjsjPpYPuQ+lMYsoxB126+t8fw7ySEO48nmDg5COTjxDI65/Y2OWpeEHk3ZOe8zg==} 733 | dependencies: 734 | get-func-name: 2.0.2 735 | dev: true 736 | 737 | /color-convert@2.0.1: 738 | resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==} 739 | engines: {node: '>=7.0.0'} 740 | dependencies: 741 | color-name: 1.1.4 742 | dev: true 743 | 744 | /color-name@1.1.4: 745 | resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==} 746 | dev: true 747 | 748 | /concat-map@0.0.1: 749 | resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==} 750 | dev: true 751 | 752 | /cross-spawn@7.0.3: 753 | resolution: {integrity: sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==} 754 | engines: {node: '>= 8'} 755 | dependencies: 756 | path-key: 3.1.1 757 | shebang-command: 2.0.0 758 | which: 2.0.2 759 | dev: true 760 | 761 | /debug@4.3.4: 762 | resolution: {integrity: sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==} 763 | engines: {node: '>=6.0'} 764 | peerDependencies: 765 | supports-color: '*' 766 | peerDependenciesMeta: 767 | supports-color: 768 | optional: true 769 | dependencies: 770 | ms: 2.1.2 771 | dev: true 772 | 773 | /deep-eql@4.1.3: 774 | resolution: {integrity: sha512-WaEtAOpRA1MQ0eohqZjpGD8zdI0Ovsm8mmFhaDN8dvDZzyoUMcYDnf5Y6iu7HTXxf8JDS23qWa4a+hKCDyOPzw==} 775 | engines: {node: '>=6'} 776 | dependencies: 777 | type-detect: 4.0.8 778 | dev: true 779 | 780 | /deep-is@0.1.4: 781 | resolution: {integrity: sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==} 782 | dev: true 783 | 784 | /diff-sequences@29.6.3: 785 | resolution: {integrity: sha512-EjePK1srD3P08o2j4f0ExnylqRs5B9tJjcp9t1krH2qRi8CCdsYfwe9JgSLurFBWwq4uOlipzfk5fHNvwFKr8Q==} 786 | engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} 787 | dev: true 788 | 789 | /dir-glob@3.0.1: 790 | resolution: {integrity: sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==} 791 | engines: {node: '>=8'} 792 | dependencies: 793 | path-type: 4.0.0 794 | dev: true 795 | 796 | /doctrine@3.0.0: 797 | resolution: {integrity: sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==} 798 | engines: {node: '>=6.0.0'} 799 | dependencies: 800 | esutils: 2.0.3 801 | dev: true 802 | 803 | /esbuild@0.19.8: 804 | resolution: {integrity: sha512-l7iffQpT2OrZfH2rXIp7/FkmaeZM0vxbxN9KfiCwGYuZqzMg/JdvX26R31Zxn/Pxvsrg3Y9N6XTcnknqDyyv4w==} 805 | engines: {node: '>=12'} 806 | hasBin: true 807 | requiresBuild: true 808 | optionalDependencies: 809 | '@esbuild/android-arm': 0.19.8 810 | '@esbuild/android-arm64': 0.19.8 811 | '@esbuild/android-x64': 0.19.8 812 | '@esbuild/darwin-arm64': 0.19.8 813 | '@esbuild/darwin-x64': 0.19.8 814 | '@esbuild/freebsd-arm64': 0.19.8 815 | '@esbuild/freebsd-x64': 0.19.8 816 | '@esbuild/linux-arm': 0.19.8 817 | '@esbuild/linux-arm64': 0.19.8 818 | '@esbuild/linux-ia32': 0.19.8 819 | '@esbuild/linux-loong64': 0.19.8 820 | '@esbuild/linux-mips64el': 0.19.8 821 | '@esbuild/linux-ppc64': 0.19.8 822 | '@esbuild/linux-riscv64': 0.19.8 823 | '@esbuild/linux-s390x': 0.19.8 824 | '@esbuild/linux-x64': 0.19.8 825 | '@esbuild/netbsd-x64': 0.19.8 826 | '@esbuild/openbsd-x64': 0.19.8 827 | '@esbuild/sunos-x64': 0.19.8 828 | '@esbuild/win32-arm64': 0.19.8 829 | '@esbuild/win32-ia32': 0.19.8 830 | '@esbuild/win32-x64': 0.19.8 831 | dev: true 832 | 833 | /escape-string-regexp@4.0.0: 834 | resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==} 835 | engines: {node: '>=10'} 836 | dev: true 837 | 838 | /eslint-config-prettier@9.0.0(eslint@8.54.0): 839 | resolution: {integrity: sha512-IcJsTkJae2S35pRsRAwoCE+925rJJStOdkKnLVgtE+tEpqU0EVVM7OqrwxqgptKdX29NUwC82I5pXsGFIgSevw==} 840 | hasBin: true 841 | peerDependencies: 842 | eslint: '>=7.0.0' 843 | dependencies: 844 | eslint: 8.54.0 845 | dev: true 846 | 847 | /eslint-scope@7.2.2: 848 | resolution: {integrity: sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==} 849 | engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} 850 | dependencies: 851 | esrecurse: 4.3.0 852 | estraverse: 5.3.0 853 | dev: true 854 | 855 | /eslint-visitor-keys@3.4.3: 856 | resolution: {integrity: sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==} 857 | engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} 858 | dev: true 859 | 860 | /eslint@8.54.0: 861 | resolution: {integrity: sha512-NY0DfAkM8BIZDVl6PgSa1ttZbx3xHgJzSNJKYcQglem6CppHyMhRIQkBVSSMaSRnLhig3jsDbEzOjwCVt4AmmA==} 862 | engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} 863 | hasBin: true 864 | dependencies: 865 | '@eslint-community/eslint-utils': 4.4.0(eslint@8.54.0) 866 | '@eslint-community/regexpp': 4.10.0 867 | '@eslint/eslintrc': 2.1.3 868 | '@eslint/js': 8.54.0 869 | '@humanwhocodes/config-array': 0.11.13 870 | '@humanwhocodes/module-importer': 1.0.1 871 | '@nodelib/fs.walk': 1.2.8 872 | '@ungap/structured-clone': 1.2.0 873 | ajv: 6.12.6 874 | chalk: 4.1.2 875 | cross-spawn: 7.0.3 876 | debug: 4.3.4 877 | doctrine: 3.0.0 878 | escape-string-regexp: 4.0.0 879 | eslint-scope: 7.2.2 880 | eslint-visitor-keys: 3.4.3 881 | espree: 9.6.1 882 | esquery: 1.5.0 883 | esutils: 2.0.3 884 | fast-deep-equal: 3.1.3 885 | file-entry-cache: 6.0.1 886 | find-up: 5.0.0 887 | glob-parent: 6.0.2 888 | globals: 13.23.0 889 | graphemer: 1.4.0 890 | ignore: 5.3.0 891 | imurmurhash: 0.1.4 892 | is-glob: 4.0.3 893 | is-path-inside: 3.0.3 894 | js-yaml: 4.1.0 895 | json-stable-stringify-without-jsonify: 1.0.1 896 | levn: 0.4.1 897 | lodash.merge: 4.6.2 898 | minimatch: 3.1.2 899 | natural-compare: 1.4.0 900 | optionator: 0.9.3 901 | strip-ansi: 6.0.1 902 | text-table: 0.2.0 903 | transitivePeerDependencies: 904 | - supports-color 905 | dev: true 906 | 907 | /espree@9.6.1: 908 | resolution: {integrity: sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==} 909 | engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} 910 | dependencies: 911 | acorn: 8.11.2 912 | acorn-jsx: 5.3.2(acorn@8.11.2) 913 | eslint-visitor-keys: 3.4.3 914 | dev: true 915 | 916 | /esquery@1.5.0: 917 | resolution: {integrity: sha512-YQLXUplAwJgCydQ78IMJywZCceoqk1oH01OERdSAJc/7U2AylwjhSCLDEtqwg811idIS/9fIU5GjG73IgjKMVg==} 918 | engines: {node: '>=0.10'} 919 | dependencies: 920 | estraverse: 5.3.0 921 | dev: true 922 | 923 | /esrecurse@4.3.0: 924 | resolution: {integrity: sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==} 925 | engines: {node: '>=4.0'} 926 | dependencies: 927 | estraverse: 5.3.0 928 | dev: true 929 | 930 | /estraverse@5.3.0: 931 | resolution: {integrity: sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==} 932 | engines: {node: '>=4.0'} 933 | dev: true 934 | 935 | /esutils@2.0.3: 936 | resolution: {integrity: sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==} 937 | engines: {node: '>=0.10.0'} 938 | dev: true 939 | 940 | /fast-deep-equal@3.1.3: 941 | resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==} 942 | dev: true 943 | 944 | /fast-glob@3.3.2: 945 | resolution: {integrity: sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==} 946 | engines: {node: '>=8.6.0'} 947 | dependencies: 948 | '@nodelib/fs.stat': 2.0.5 949 | '@nodelib/fs.walk': 1.2.8 950 | glob-parent: 5.1.2 951 | merge2: 1.4.1 952 | micromatch: 4.0.5 953 | dev: true 954 | 955 | /fast-json-stable-stringify@2.1.0: 956 | resolution: {integrity: sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==} 957 | dev: true 958 | 959 | /fast-levenshtein@2.0.6: 960 | resolution: {integrity: sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==} 961 | dev: true 962 | 963 | /fastq@1.15.0: 964 | resolution: {integrity: sha512-wBrocU2LCXXa+lWBt8RoIRD89Fi8OdABODa/kEnyeyjS5aZO5/GNvI5sEINADqP/h8M29UHTHUb53sUu5Ihqdw==} 965 | dependencies: 966 | reusify: 1.0.4 967 | dev: true 968 | 969 | /file-entry-cache@6.0.1: 970 | resolution: {integrity: sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==} 971 | engines: {node: ^10.12.0 || >=12.0.0} 972 | dependencies: 973 | flat-cache: 3.2.0 974 | dev: true 975 | 976 | /fill-range@7.0.1: 977 | resolution: {integrity: sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==} 978 | engines: {node: '>=8'} 979 | dependencies: 980 | to-regex-range: 5.0.1 981 | dev: true 982 | 983 | /find-up@5.0.0: 984 | resolution: {integrity: sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==} 985 | engines: {node: '>=10'} 986 | dependencies: 987 | locate-path: 6.0.0 988 | path-exists: 4.0.0 989 | dev: true 990 | 991 | /flat-cache@3.2.0: 992 | resolution: {integrity: sha512-CYcENa+FtcUKLmhhqyctpclsq7QF38pKjZHsGNiSQF5r4FtoKDWabFDl3hzaEQMvT1LHEysw5twgLvpYYb4vbw==} 993 | engines: {node: ^10.12.0 || >=12.0.0} 994 | dependencies: 995 | flatted: 3.2.9 996 | keyv: 4.5.4 997 | rimraf: 3.0.2 998 | dev: true 999 | 1000 | /flatted@3.2.9: 1001 | resolution: {integrity: sha512-36yxDn5H7OFZQla0/jFJmbIKTdZAQHngCedGxiMmpNfEZM0sdEeT+WczLQrjK6D7o2aiyLYDnkw0R3JK0Qv1RQ==} 1002 | dev: true 1003 | 1004 | /fs.realpath@1.0.0: 1005 | resolution: {integrity: sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==} 1006 | dev: true 1007 | 1008 | /fsevents@2.3.3: 1009 | resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==} 1010 | engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} 1011 | os: [darwin] 1012 | requiresBuild: true 1013 | dev: true 1014 | optional: true 1015 | 1016 | /get-func-name@2.0.2: 1017 | resolution: {integrity: sha512-8vXOvuE167CtIc3OyItco7N/dpRtBbYOsPsXCz7X/PMnlGjYjSGuZJgM1Y7mmew7BKf9BqvLX2tnOVy1BBUsxQ==} 1018 | dev: true 1019 | 1020 | /glob-parent@5.1.2: 1021 | resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==} 1022 | engines: {node: '>= 6'} 1023 | dependencies: 1024 | is-glob: 4.0.3 1025 | dev: true 1026 | 1027 | /glob-parent@6.0.2: 1028 | resolution: {integrity: sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==} 1029 | engines: {node: '>=10.13.0'} 1030 | dependencies: 1031 | is-glob: 4.0.3 1032 | dev: true 1033 | 1034 | /glob@7.2.3: 1035 | resolution: {integrity: sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==} 1036 | dependencies: 1037 | fs.realpath: 1.0.0 1038 | inflight: 1.0.6 1039 | inherits: 2.0.4 1040 | minimatch: 3.1.2 1041 | once: 1.4.0 1042 | path-is-absolute: 1.0.1 1043 | dev: true 1044 | 1045 | /globals@13.23.0: 1046 | resolution: {integrity: sha512-XAmF0RjlrjY23MA51q3HltdlGxUpXPvg0GioKiD9X6HD28iMjo2dKC8Vqwm7lne4GNr78+RHTfliktR6ZH09wA==} 1047 | engines: {node: '>=8'} 1048 | dependencies: 1049 | type-fest: 0.20.2 1050 | dev: true 1051 | 1052 | /globby@11.1.0: 1053 | resolution: {integrity: sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==} 1054 | engines: {node: '>=10'} 1055 | dependencies: 1056 | array-union: 2.1.0 1057 | dir-glob: 3.0.1 1058 | fast-glob: 3.3.2 1059 | ignore: 5.3.0 1060 | merge2: 1.4.1 1061 | slash: 3.0.0 1062 | dev: true 1063 | 1064 | /graphemer@1.4.0: 1065 | resolution: {integrity: sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==} 1066 | dev: true 1067 | 1068 | /has-flag@4.0.0: 1069 | resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==} 1070 | engines: {node: '>=8'} 1071 | dev: true 1072 | 1073 | /ignore@5.3.0: 1074 | resolution: {integrity: sha512-g7dmpshy+gD7mh88OC9NwSGTKoc3kyLAZQRU1mt53Aw/vnvfXnbC+F/7F7QoYVKbV+KNvJx8wArewKy1vXMtlg==} 1075 | engines: {node: '>= 4'} 1076 | dev: true 1077 | 1078 | /import-fresh@3.3.0: 1079 | resolution: {integrity: sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==} 1080 | engines: {node: '>=6'} 1081 | dependencies: 1082 | parent-module: 1.0.1 1083 | resolve-from: 4.0.0 1084 | dev: true 1085 | 1086 | /imurmurhash@0.1.4: 1087 | resolution: {integrity: sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==} 1088 | engines: {node: '>=0.8.19'} 1089 | dev: true 1090 | 1091 | /inflight@1.0.6: 1092 | resolution: {integrity: sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==} 1093 | dependencies: 1094 | once: 1.4.0 1095 | wrappy: 1.0.2 1096 | dev: true 1097 | 1098 | /inherits@2.0.4: 1099 | resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==} 1100 | dev: true 1101 | 1102 | /is-extglob@2.1.1: 1103 | resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==} 1104 | engines: {node: '>=0.10.0'} 1105 | dev: true 1106 | 1107 | /is-glob@4.0.3: 1108 | resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==} 1109 | engines: {node: '>=0.10.0'} 1110 | dependencies: 1111 | is-extglob: 2.1.1 1112 | dev: true 1113 | 1114 | /is-number@7.0.0: 1115 | resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==} 1116 | engines: {node: '>=0.12.0'} 1117 | dev: true 1118 | 1119 | /is-path-inside@3.0.3: 1120 | resolution: {integrity: sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==} 1121 | engines: {node: '>=8'} 1122 | dev: true 1123 | 1124 | /isexe@2.0.0: 1125 | resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==} 1126 | dev: true 1127 | 1128 | /js-yaml@4.1.0: 1129 | resolution: {integrity: sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==} 1130 | hasBin: true 1131 | dependencies: 1132 | argparse: 2.0.1 1133 | dev: true 1134 | 1135 | /json-buffer@3.0.1: 1136 | resolution: {integrity: sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==} 1137 | dev: true 1138 | 1139 | /json-schema-traverse@0.4.1: 1140 | resolution: {integrity: sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==} 1141 | dev: true 1142 | 1143 | /json-stable-stringify-without-jsonify@1.0.1: 1144 | resolution: {integrity: sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==} 1145 | dev: true 1146 | 1147 | /jsonc-parser@3.2.0: 1148 | resolution: {integrity: sha512-gfFQZrcTc8CnKXp6Y4/CBT3fTc0OVuDofpre4aEeEpSBPV5X5v4+Vmx+8snU7RLPrNHPKSgLxGo9YuQzz20o+w==} 1149 | dev: true 1150 | 1151 | /keyv@4.5.4: 1152 | resolution: {integrity: sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==} 1153 | dependencies: 1154 | json-buffer: 3.0.1 1155 | dev: true 1156 | 1157 | /levn@0.4.1: 1158 | resolution: {integrity: sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==} 1159 | engines: {node: '>= 0.8.0'} 1160 | dependencies: 1161 | prelude-ls: 1.2.1 1162 | type-check: 0.4.0 1163 | dev: true 1164 | 1165 | /local-pkg@0.4.3: 1166 | resolution: {integrity: sha512-SFppqq5p42fe2qcZQqqEOiVRXl+WCP1MdT6k7BDEW1j++sp5fIY+/fdRQitvKgB5BrBcmrs5m/L0v2FrU5MY1g==} 1167 | engines: {node: '>=14'} 1168 | dev: true 1169 | 1170 | /locate-path@6.0.0: 1171 | resolution: {integrity: sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==} 1172 | engines: {node: '>=10'} 1173 | dependencies: 1174 | p-locate: 5.0.0 1175 | dev: true 1176 | 1177 | /lodash.merge@4.6.2: 1178 | resolution: {integrity: sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==} 1179 | dev: true 1180 | 1181 | /loupe@2.3.7: 1182 | resolution: {integrity: sha512-zSMINGVYkdpYSOBmLi0D1Uo7JU9nVdQKrHxC8eYlV+9YKK9WePqAlL7lSlorG/U2Fw1w0hTBmaa/jrQ3UbPHtA==} 1183 | dependencies: 1184 | get-func-name: 2.0.2 1185 | dev: true 1186 | 1187 | /lru-cache@6.0.0: 1188 | resolution: {integrity: sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==} 1189 | engines: {node: '>=10'} 1190 | dependencies: 1191 | yallist: 4.0.0 1192 | dev: true 1193 | 1194 | /magic-string@0.30.5: 1195 | resolution: {integrity: sha512-7xlpfBaQaP/T6Vh8MO/EqXSW5En6INHEvEXQiuff7Gku0PWjU3uf6w/j9o7O+SpB5fOAkrI5HeoNgwjEO0pFsA==} 1196 | engines: {node: '>=12'} 1197 | dependencies: 1198 | '@jridgewell/sourcemap-codec': 1.4.15 1199 | dev: true 1200 | 1201 | /merge2@1.4.1: 1202 | resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==} 1203 | engines: {node: '>= 8'} 1204 | dev: true 1205 | 1206 | /micromatch@4.0.5: 1207 | resolution: {integrity: sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==} 1208 | engines: {node: '>=8.6'} 1209 | dependencies: 1210 | braces: 3.0.2 1211 | picomatch: 2.3.1 1212 | dev: true 1213 | 1214 | /minimatch@3.1.2: 1215 | resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==} 1216 | dependencies: 1217 | brace-expansion: 1.1.11 1218 | dev: true 1219 | 1220 | /mlly@1.4.2: 1221 | resolution: {integrity: sha512-i/Ykufi2t1EZ6NaPLdfnZk2AX8cs0d+mTzVKuPfqPKPatxLApaBoxJQ9x1/uckXtrS/U5oisPMDkNs0yQTaBRg==} 1222 | dependencies: 1223 | acorn: 8.11.2 1224 | pathe: 1.1.1 1225 | pkg-types: 1.0.3 1226 | ufo: 1.3.2 1227 | dev: true 1228 | 1229 | /ms@2.1.2: 1230 | resolution: {integrity: sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==} 1231 | dev: true 1232 | 1233 | /nanoid@3.3.7: 1234 | resolution: {integrity: sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==} 1235 | engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} 1236 | hasBin: true 1237 | dev: true 1238 | 1239 | /natural-compare@1.4.0: 1240 | resolution: {integrity: sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==} 1241 | dev: true 1242 | 1243 | /once@1.4.0: 1244 | resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==} 1245 | dependencies: 1246 | wrappy: 1.0.2 1247 | dev: true 1248 | 1249 | /optionator@0.9.3: 1250 | resolution: {integrity: sha512-JjCoypp+jKn1ttEFExxhetCKeJt9zhAgAve5FXHixTvFDW/5aEktX9bufBKLRRMdU7bNtpLfcGu94B3cdEJgjg==} 1251 | engines: {node: '>= 0.8.0'} 1252 | dependencies: 1253 | '@aashutoshrathi/word-wrap': 1.2.6 1254 | deep-is: 0.1.4 1255 | fast-levenshtein: 2.0.6 1256 | levn: 0.4.1 1257 | prelude-ls: 1.2.1 1258 | type-check: 0.4.0 1259 | dev: true 1260 | 1261 | /p-limit@3.1.0: 1262 | resolution: {integrity: sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==} 1263 | engines: {node: '>=10'} 1264 | dependencies: 1265 | yocto-queue: 0.1.0 1266 | dev: true 1267 | 1268 | /p-limit@4.0.0: 1269 | resolution: {integrity: sha512-5b0R4txpzjPWVw/cXXUResoD4hb6U/x9BH08L7nw+GN1sezDzPdxeRvpc9c433fZhBan/wusjbCsqwqm4EIBIQ==} 1270 | engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} 1271 | dependencies: 1272 | yocto-queue: 1.0.0 1273 | dev: true 1274 | 1275 | /p-locate@5.0.0: 1276 | resolution: {integrity: sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==} 1277 | engines: {node: '>=10'} 1278 | dependencies: 1279 | p-limit: 3.1.0 1280 | dev: true 1281 | 1282 | /parent-module@1.0.1: 1283 | resolution: {integrity: sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==} 1284 | engines: {node: '>=6'} 1285 | dependencies: 1286 | callsites: 3.1.0 1287 | dev: true 1288 | 1289 | /path-exists@4.0.0: 1290 | resolution: {integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==} 1291 | engines: {node: '>=8'} 1292 | dev: true 1293 | 1294 | /path-is-absolute@1.0.1: 1295 | resolution: {integrity: sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==} 1296 | engines: {node: '>=0.10.0'} 1297 | dev: true 1298 | 1299 | /path-key@3.1.1: 1300 | resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==} 1301 | engines: {node: '>=8'} 1302 | dev: true 1303 | 1304 | /path-type@4.0.0: 1305 | resolution: {integrity: sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==} 1306 | engines: {node: '>=8'} 1307 | dev: true 1308 | 1309 | /pathe@1.1.1: 1310 | resolution: {integrity: sha512-d+RQGp0MAYTIaDBIMmOfMwz3E+LOZnxx1HZd5R18mmCZY0QBlK0LDZfPc8FW8Ed2DlvsuE6PRjroDY+wg4+j/Q==} 1311 | dev: true 1312 | 1313 | /pathval@1.1.1: 1314 | resolution: {integrity: sha512-Dp6zGqpTdETdR63lehJYPeIOqpiNBNtc7BpWSLrOje7UaIsE5aY92r/AunQA7rsXvet3lrJ3JnZX29UPTKXyKQ==} 1315 | dev: true 1316 | 1317 | /picocolors@1.0.0: 1318 | resolution: {integrity: sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==} 1319 | dev: true 1320 | 1321 | /picomatch@2.3.1: 1322 | resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==} 1323 | engines: {node: '>=8.6'} 1324 | dev: true 1325 | 1326 | /pkg-types@1.0.3: 1327 | resolution: {integrity: sha512-nN7pYi0AQqJnoLPC9eHFQ8AcyaixBUOwvqc5TDnIKCMEE6I0y8P7OKA7fPexsXGCGxQDl/cmrLAp26LhcwxZ4A==} 1328 | dependencies: 1329 | jsonc-parser: 3.2.0 1330 | mlly: 1.4.2 1331 | pathe: 1.1.1 1332 | dev: true 1333 | 1334 | /postcss@8.4.31: 1335 | resolution: {integrity: sha512-PS08Iboia9mts/2ygV3eLpY5ghnUcfLV/EXTOW1E2qYxJKGGBUtNjN76FYHnMs36RmARn41bC0AZmn+rR0OVpQ==} 1336 | engines: {node: ^10 || ^12 || >=14} 1337 | dependencies: 1338 | nanoid: 3.3.7 1339 | picocolors: 1.0.0 1340 | source-map-js: 1.0.2 1341 | dev: true 1342 | 1343 | /prelude-ls@1.2.1: 1344 | resolution: {integrity: sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==} 1345 | engines: {node: '>= 0.8.0'} 1346 | dev: true 1347 | 1348 | /prettier@3.1.0: 1349 | resolution: {integrity: sha512-TQLvXjq5IAibjh8EpBIkNKxO749UEWABoiIZehEPiY4GNpVdhaFKqSTu+QrlU6D2dPAfubRmtJTi4K4YkQ5eXw==} 1350 | engines: {node: '>=14'} 1351 | hasBin: true 1352 | dev: true 1353 | 1354 | /pretty-format@29.7.0: 1355 | resolution: {integrity: sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==} 1356 | engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} 1357 | dependencies: 1358 | '@jest/schemas': 29.6.3 1359 | ansi-styles: 5.2.0 1360 | react-is: 18.2.0 1361 | dev: true 1362 | 1363 | /punycode@2.3.1: 1364 | resolution: {integrity: sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==} 1365 | engines: {node: '>=6'} 1366 | dev: true 1367 | 1368 | /queue-microtask@1.2.3: 1369 | resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==} 1370 | dev: true 1371 | 1372 | /react-is@18.2.0: 1373 | resolution: {integrity: sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==} 1374 | dev: true 1375 | 1376 | /resolve-from@4.0.0: 1377 | resolution: {integrity: sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==} 1378 | engines: {node: '>=4'} 1379 | dev: true 1380 | 1381 | /reusify@1.0.4: 1382 | resolution: {integrity: sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==} 1383 | engines: {iojs: '>=1.0.0', node: '>=0.10.0'} 1384 | dev: true 1385 | 1386 | /rimraf@3.0.2: 1387 | resolution: {integrity: sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==} 1388 | hasBin: true 1389 | dependencies: 1390 | glob: 7.2.3 1391 | dev: true 1392 | 1393 | /rollup@4.6.1: 1394 | resolution: {integrity: sha512-jZHaZotEHQaHLgKr8JnQiDT1rmatjgKlMekyksz+yk9jt/8z9quNjnKNRoaM0wd9DC2QKXjmWWuDYtM3jfF8pQ==} 1395 | engines: {node: '>=18.0.0', npm: '>=8.0.0'} 1396 | hasBin: true 1397 | optionalDependencies: 1398 | '@rollup/rollup-android-arm-eabi': 4.6.1 1399 | '@rollup/rollup-android-arm64': 4.6.1 1400 | '@rollup/rollup-darwin-arm64': 4.6.1 1401 | '@rollup/rollup-darwin-x64': 4.6.1 1402 | '@rollup/rollup-linux-arm-gnueabihf': 4.6.1 1403 | '@rollup/rollup-linux-arm64-gnu': 4.6.1 1404 | '@rollup/rollup-linux-arm64-musl': 4.6.1 1405 | '@rollup/rollup-linux-x64-gnu': 4.6.1 1406 | '@rollup/rollup-linux-x64-musl': 4.6.1 1407 | '@rollup/rollup-win32-arm64-msvc': 4.6.1 1408 | '@rollup/rollup-win32-ia32-msvc': 4.6.1 1409 | '@rollup/rollup-win32-x64-msvc': 4.6.1 1410 | fsevents: 2.3.3 1411 | dev: true 1412 | 1413 | /run-parallel@1.2.0: 1414 | resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==} 1415 | dependencies: 1416 | queue-microtask: 1.2.3 1417 | dev: true 1418 | 1419 | /semver@7.5.4: 1420 | resolution: {integrity: sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==} 1421 | engines: {node: '>=10'} 1422 | hasBin: true 1423 | dependencies: 1424 | lru-cache: 6.0.0 1425 | dev: true 1426 | 1427 | /shebang-command@2.0.0: 1428 | resolution: {integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==} 1429 | engines: {node: '>=8'} 1430 | dependencies: 1431 | shebang-regex: 3.0.0 1432 | dev: true 1433 | 1434 | /shebang-regex@3.0.0: 1435 | resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==} 1436 | engines: {node: '>=8'} 1437 | dev: true 1438 | 1439 | /siginfo@2.0.0: 1440 | resolution: {integrity: sha512-ybx0WO1/8bSBLEWXZvEd7gMW3Sn3JFlW3TvX1nREbDLRNQNaeNN8WK0meBwPdAaOI7TtRRRJn/Es1zhrrCHu7g==} 1441 | dev: true 1442 | 1443 | /slash@3.0.0: 1444 | resolution: {integrity: sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==} 1445 | engines: {node: '>=8'} 1446 | dev: true 1447 | 1448 | /source-map-js@1.0.2: 1449 | resolution: {integrity: sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==} 1450 | engines: {node: '>=0.10.0'} 1451 | dev: true 1452 | 1453 | /stackback@0.0.2: 1454 | resolution: {integrity: sha512-1XMJE5fQo1jGH6Y/7ebnwPOBEkIEnT4QF32d5R1+VXdXveM0IBMJt8zfaxX1P3QhVwrYe+576+jkANtSS2mBbw==} 1455 | dev: true 1456 | 1457 | /std-env@3.5.0: 1458 | resolution: {integrity: sha512-JGUEaALvL0Mf6JCfYnJOTcobY+Nc7sG/TemDRBqCA0wEr4DER7zDchaaixTlmOxAjG1uRJmX82EQcxwTQTkqVA==} 1459 | dev: true 1460 | 1461 | /strip-ansi@6.0.1: 1462 | resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==} 1463 | engines: {node: '>=8'} 1464 | dependencies: 1465 | ansi-regex: 5.0.1 1466 | dev: true 1467 | 1468 | /strip-json-comments@3.1.1: 1469 | resolution: {integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==} 1470 | engines: {node: '>=8'} 1471 | dev: true 1472 | 1473 | /strip-literal@1.3.0: 1474 | resolution: {integrity: sha512-PugKzOsyXpArk0yWmUwqOZecSO0GH0bPoctLcqNDH9J04pVW3lflYE0ujElBGTloevcxF5MofAOZ7C5l2b+wLg==} 1475 | dependencies: 1476 | acorn: 8.11.2 1477 | dev: true 1478 | 1479 | /supports-color@7.2.0: 1480 | resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==} 1481 | engines: {node: '>=8'} 1482 | dependencies: 1483 | has-flag: 4.0.0 1484 | dev: true 1485 | 1486 | /text-table@0.2.0: 1487 | resolution: {integrity: sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==} 1488 | dev: true 1489 | 1490 | /tinybench@2.5.1: 1491 | resolution: {integrity: sha512-65NKvSuAVDP/n4CqH+a9w2kTlLReS9vhsAP06MWx+/89nMinJyB2icyl58RIcqCmIggpojIGeuJGhjU1aGMBSg==} 1492 | dev: true 1493 | 1494 | /tinypool@0.7.0: 1495 | resolution: {integrity: sha512-zSYNUlYSMhJ6Zdou4cJwo/p7w5nmAH17GRfU/ui3ctvjXFErXXkruT4MWW6poDeXgCaIBlGLrfU6TbTXxyGMww==} 1496 | engines: {node: '>=14.0.0'} 1497 | dev: true 1498 | 1499 | /tinyspy@2.2.0: 1500 | resolution: {integrity: sha512-d2eda04AN/cPOR89F7Xv5bK/jrQEhmcLFe6HFldoeO9AJtps+fqEnh486vnT/8y4bw38pSyxDcTCAq+Ks2aJTg==} 1501 | engines: {node: '>=14.0.0'} 1502 | dev: true 1503 | 1504 | /to-regex-range@5.0.1: 1505 | resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==} 1506 | engines: {node: '>=8.0'} 1507 | dependencies: 1508 | is-number: 7.0.0 1509 | dev: true 1510 | 1511 | /ts-api-utils@1.0.3(typescript@5.3.2): 1512 | resolution: {integrity: sha512-wNMeqtMz5NtwpT/UZGY5alT+VoKdSsOOP/kqHFcUW1P/VRhH2wJ48+DN2WwUliNbQ976ETwDL0Ifd2VVvgonvg==} 1513 | engines: {node: '>=16.13.0'} 1514 | peerDependencies: 1515 | typescript: '>=4.2.0' 1516 | dependencies: 1517 | typescript: 5.3.2 1518 | dev: true 1519 | 1520 | /type-check@0.4.0: 1521 | resolution: {integrity: sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==} 1522 | engines: {node: '>= 0.8.0'} 1523 | dependencies: 1524 | prelude-ls: 1.2.1 1525 | dev: true 1526 | 1527 | /type-detect@4.0.8: 1528 | resolution: {integrity: sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==} 1529 | engines: {node: '>=4'} 1530 | dev: true 1531 | 1532 | /type-fest@0.20.2: 1533 | resolution: {integrity: sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==} 1534 | engines: {node: '>=10'} 1535 | dev: true 1536 | 1537 | /typescript@5.3.2: 1538 | resolution: {integrity: sha512-6l+RyNy7oAHDfxC4FzSJcz9vnjTKxrLpDG5M2Vu4SHRVNg6xzqZp6LYSR9zjqQTu8DU/f5xwxUdADOkbrIX2gQ==} 1539 | engines: {node: '>=14.17'} 1540 | hasBin: true 1541 | dev: true 1542 | 1543 | /ufo@1.3.2: 1544 | resolution: {integrity: sha512-o+ORpgGwaYQXgqGDwd+hkS4PuZ3QnmqMMxRuajK/a38L6fTpcE5GPIfrf+L/KemFzfUpeUQc1rRS1iDBozvnFA==} 1545 | dev: true 1546 | 1547 | /undici-types@5.26.5: 1548 | resolution: {integrity: sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==} 1549 | dev: true 1550 | 1551 | /uri-js@4.4.1: 1552 | resolution: {integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==} 1553 | dependencies: 1554 | punycode: 2.3.1 1555 | dev: true 1556 | 1557 | /vite-node@0.34.6(@types/node@20.10.1): 1558 | resolution: {integrity: sha512-nlBMJ9x6n7/Amaz6F3zJ97EBwR2FkzhBRxF5e+jE6LA3yi6Wtc2lyTij1OnDMIr34v5g/tVQtsVAzhT0jc5ygA==} 1559 | engines: {node: '>=v14.18.0'} 1560 | hasBin: true 1561 | dependencies: 1562 | cac: 6.7.14 1563 | debug: 4.3.4 1564 | mlly: 1.4.2 1565 | pathe: 1.1.1 1566 | picocolors: 1.0.0 1567 | vite: 5.0.4(@types/node@20.10.1) 1568 | transitivePeerDependencies: 1569 | - '@types/node' 1570 | - less 1571 | - lightningcss 1572 | - sass 1573 | - stylus 1574 | - sugarss 1575 | - supports-color 1576 | - terser 1577 | dev: true 1578 | 1579 | /vite@5.0.4(@types/node@20.10.1): 1580 | resolution: {integrity: sha512-RzAr8LSvM8lmhB4tQ5OPcBhpjOZRZjuxv9zO5UcxeoY2bd3kP3Ticd40Qma9/BqZ8JS96Ll/jeBX9u+LJZrhVg==} 1581 | engines: {node: ^18.0.0 || >=20.0.0} 1582 | hasBin: true 1583 | peerDependencies: 1584 | '@types/node': ^18.0.0 || >=20.0.0 1585 | less: '*' 1586 | lightningcss: ^1.21.0 1587 | sass: '*' 1588 | stylus: '*' 1589 | sugarss: '*' 1590 | terser: ^5.4.0 1591 | peerDependenciesMeta: 1592 | '@types/node': 1593 | optional: true 1594 | less: 1595 | optional: true 1596 | lightningcss: 1597 | optional: true 1598 | sass: 1599 | optional: true 1600 | stylus: 1601 | optional: true 1602 | sugarss: 1603 | optional: true 1604 | terser: 1605 | optional: true 1606 | dependencies: 1607 | '@types/node': 20.10.1 1608 | esbuild: 0.19.8 1609 | postcss: 8.4.31 1610 | rollup: 4.6.1 1611 | optionalDependencies: 1612 | fsevents: 2.3.3 1613 | dev: true 1614 | 1615 | /vitest@0.34.6: 1616 | resolution: {integrity: sha512-+5CALsOvbNKnS+ZHMXtuUC7nL8/7F1F2DnHGjSsszX8zCjWSSviphCb/NuS9Nzf4Q03KyyDRBAXhF/8lffME4Q==} 1617 | engines: {node: '>=v14.18.0'} 1618 | hasBin: true 1619 | peerDependencies: 1620 | '@edge-runtime/vm': '*' 1621 | '@vitest/browser': '*' 1622 | '@vitest/ui': '*' 1623 | happy-dom: '*' 1624 | jsdom: '*' 1625 | playwright: '*' 1626 | safaridriver: '*' 1627 | webdriverio: '*' 1628 | peerDependenciesMeta: 1629 | '@edge-runtime/vm': 1630 | optional: true 1631 | '@vitest/browser': 1632 | optional: true 1633 | '@vitest/ui': 1634 | optional: true 1635 | happy-dom: 1636 | optional: true 1637 | jsdom: 1638 | optional: true 1639 | playwright: 1640 | optional: true 1641 | safaridriver: 1642 | optional: true 1643 | webdriverio: 1644 | optional: true 1645 | dependencies: 1646 | '@types/chai': 4.3.11 1647 | '@types/chai-subset': 1.3.5 1648 | '@types/node': 20.10.1 1649 | '@vitest/expect': 0.34.6 1650 | '@vitest/runner': 0.34.6 1651 | '@vitest/snapshot': 0.34.6 1652 | '@vitest/spy': 0.34.6 1653 | '@vitest/utils': 0.34.6 1654 | acorn: 8.11.2 1655 | acorn-walk: 8.3.0 1656 | cac: 6.7.14 1657 | chai: 4.3.10 1658 | debug: 4.3.4 1659 | local-pkg: 0.4.3 1660 | magic-string: 0.30.5 1661 | pathe: 1.1.1 1662 | picocolors: 1.0.0 1663 | std-env: 3.5.0 1664 | strip-literal: 1.3.0 1665 | tinybench: 2.5.1 1666 | tinypool: 0.7.0 1667 | vite: 5.0.4(@types/node@20.10.1) 1668 | vite-node: 0.34.6(@types/node@20.10.1) 1669 | why-is-node-running: 2.2.2 1670 | transitivePeerDependencies: 1671 | - less 1672 | - lightningcss 1673 | - sass 1674 | - stylus 1675 | - sugarss 1676 | - supports-color 1677 | - terser 1678 | dev: true 1679 | 1680 | /which@2.0.2: 1681 | resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==} 1682 | engines: {node: '>= 8'} 1683 | hasBin: true 1684 | dependencies: 1685 | isexe: 2.0.0 1686 | dev: true 1687 | 1688 | /why-is-node-running@2.2.2: 1689 | resolution: {integrity: sha512-6tSwToZxTOcotxHeA+qGCq1mVzKR3CwcJGmVcY+QE8SHy6TnpFnh8PAvPNHYr7EcuVeG0QSMxtYCuO1ta/G/oA==} 1690 | engines: {node: '>=8'} 1691 | hasBin: true 1692 | dependencies: 1693 | siginfo: 2.0.0 1694 | stackback: 0.0.2 1695 | dev: true 1696 | 1697 | /wrappy@1.0.2: 1698 | resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==} 1699 | dev: true 1700 | 1701 | /yallist@4.0.0: 1702 | resolution: {integrity: sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==} 1703 | dev: true 1704 | 1705 | /yocto-queue@0.1.0: 1706 | resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==} 1707 | engines: {node: '>=10'} 1708 | dev: true 1709 | 1710 | /yocto-queue@1.0.0: 1711 | resolution: {integrity: sha512-9bnSc/HEW2uRy67wc+T8UwauLuPJVn28jb+GtJY16iiKWyvmYJRXVT4UamsAEGQfPohgr2q4Tq0sQbQlxTfi1g==} 1712 | engines: {node: '>=12.20'} 1713 | dev: true 1714 | -------------------------------------------------------------------------------- /src/days/1/Puzzle.ts: -------------------------------------------------------------------------------- 1 | const first = (input: string) => { 2 | console.log(input); 3 | return 'solution 1'; 4 | }; 5 | 6 | const expectedFirstSolution = 'solution 1'; 7 | 8 | const second = (input: string) => { 9 | console.log(input); 10 | return 'solution 2'; 11 | }; 12 | 13 | const expectedSecondSolution = 'solution 2'; 14 | 15 | export { first, expectedFirstSolution, second, expectedSecondSolution }; 16 | -------------------------------------------------------------------------------- /src/days/1/example-test-1.txt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/edge33/AdventOfCode-typescript-template/fae85b7b89594c6727e505559e8d54ab08e532e4/src/days/1/example-test-1.txt -------------------------------------------------------------------------------- /src/days/1/example-test-2.txt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/edge33/AdventOfCode-typescript-template/fae85b7b89594c6727e505559e8d54ab08e532e4/src/days/1/example-test-2.txt -------------------------------------------------------------------------------- /src/days/1/input.txt: -------------------------------------------------------------------------------- 1 | this is the input file -------------------------------------------------------------------------------- /src/days/2/Puzzle.ts: -------------------------------------------------------------------------------- 1 | const first = (input: string) => { 2 | return 'solution 1'; 3 | }; 4 | 5 | const expectedFirstSolution = 'solution 1'; 6 | 7 | const second = (input: string) => { 8 | return 'solution 2'; 9 | }; 10 | 11 | const expectedSecondSolution = 'solution 2'; 12 | 13 | export { first, expectedFirstSolution, second, expectedSecondSolution }; 14 | -------------------------------------------------------------------------------- /src/days/2/example-test-1.txt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/edge33/AdventOfCode-typescript-template/fae85b7b89594c6727e505559e8d54ab08e532e4/src/days/2/example-test-1.txt -------------------------------------------------------------------------------- /src/days/2/example-test-2.txt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/edge33/AdventOfCode-typescript-template/fae85b7b89594c6727e505559e8d54ab08e532e4/src/days/2/example-test-2.txt -------------------------------------------------------------------------------- /src/days/2/input.txt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/edge33/AdventOfCode-typescript-template/fae85b7b89594c6727e505559e8d54ab08e532e4/src/days/2/input.txt -------------------------------------------------------------------------------- /src/index.spec.ts: -------------------------------------------------------------------------------- 1 | import { readdirSync } from 'fs'; 2 | import { describe, expect, it } from 'vitest'; 3 | import readFile from './utils/readFile'; 4 | import Puzzle from './types/Puzzle'; 5 | 6 | describe('AoC test runner', () => { 7 | const dirs = readdirSync('./src/days', { withFileTypes: true }) 8 | .filter((dirent) => dirent.isDirectory()) 9 | .map((dirent) => dirent.name); 10 | 11 | for (const day of dirs) { 12 | it(`Tests day ${day}`, async () => { 13 | let exampleOneInput = ''; 14 | let exampleTwoInput = ''; 15 | const puzzleName = day; 16 | try { 17 | const puzzlePath = `src/days/${puzzleName}`; 18 | exampleOneInput = await readFile(`${puzzlePath}/example-test-1.txt`); 19 | exampleTwoInput = await readFile(`${puzzlePath}/example-test-2.txt`); 20 | } catch (error) { 21 | console.error(error); 22 | process.exit(1); 23 | } 24 | const { 25 | first, 26 | expectedFirstSolution, 27 | second, 28 | expectedSecondSolution, 29 | }: Puzzle = await import(`./days/${puzzleName}/Puzzle`); 30 | 31 | expect(first(exampleOneInput).toString()).toBe( 32 | expectedFirstSolution.toString() 33 | ); 34 | expect(second(exampleTwoInput).toString()).toBe( 35 | expectedSecondSolution.toString() 36 | }); 37 | } 38 | }); 39 | -------------------------------------------------------------------------------- /src/index.ts: -------------------------------------------------------------------------------- 1 | import type Puzzle from './types/Puzzle'; 2 | import readFile from './utils/readFile'; 3 | 4 | const args = process.argv.slice(2); 5 | const dayToSolve = args[0]; 6 | 7 | if (!dayToSolve) { 8 | console.error('No day specified run with npm run dev {day}'); 9 | process.exit(1); 10 | } 11 | console.log(`Solving Day #${args[0]}`); 12 | (async () => { 13 | let input = ''; 14 | const puzzleName = args[0]; 15 | try { 16 | const puzzlePath = `src/days/${puzzleName}`; 17 | input = await readFile(`${puzzlePath}/input.txt`); 18 | } catch (error) { 19 | console.error(error); 20 | process.exit(1); 21 | } 22 | const { first, second }: Puzzle = await import(`./days/${puzzleName}/Puzzle`); 23 | 24 | console.log(first(input)); 25 | console.log(second(input)); 26 | })(); 27 | -------------------------------------------------------------------------------- /src/scripts/initNewDay/Puzzle.ts.tpl: -------------------------------------------------------------------------------- 1 | const first = (input: string) => { 2 | return 'solution 1'; 3 | }; 4 | 5 | const expectedFirstSolution = 'solution 1'; 6 | 7 | const second = (input: string) => { 8 | return 'solution 2'; 9 | }; 10 | 11 | const expectedSecondSolution = 'solution 2'; 12 | 13 | export { first, expectedFirstSolution, second, expectedSecondSolution }; 14 | -------------------------------------------------------------------------------- /src/scripts/initNewDay/initNewDay.ts: -------------------------------------------------------------------------------- 1 | import { existsSync, copyFileSync, mkdirSync, writeFileSync } from 'fs'; 2 | 3 | /** 4 | * Creates the boilerplate code for a new puzzle 5 | * Usage: npm run init-day {dayNumber} i.e npm run 1 6 | * It will create a new folder under src/days/{dayNumber} 7 | * with the boilerplate code to build the solution, and an empty input .txt file. 8 | */ 9 | 10 | const args = process.argv.slice(2); 11 | const day = args[0]; 12 | if (!day) { 13 | console.log('Please run with the day to bootstrap, i.e. npm run init-day 1'); 14 | } 15 | console.log(`creating template for day ${day}`); 16 | const basePath = 'src/days'; 17 | 18 | if (existsSync(`src/days/${day}`)) { 19 | console.log(`day ${day} already exists`); 20 | process.exit(0); 21 | } 22 | const newDayPath = `${basePath}/${day}`; 23 | mkdirSync(newDayPath); 24 | copyFileSync(`${__dirname}/Puzzle.ts.tpl`, `${newDayPath}/Puzzle.ts`); 25 | writeFileSync(`${newDayPath}/input.txt`, ''); 26 | writeFileSync(`${newDayPath}/example-test-1.txt`, ''); 27 | writeFileSync(`${newDayPath}/example-test-2.txt`, ''); 28 | -------------------------------------------------------------------------------- /src/types/Puzzle.ts: -------------------------------------------------------------------------------- 1 | type Puzzle = { 2 | first: (input: string) => string; 3 | expectedFirstSolution: string; 4 | second: (input: string) => string; 5 | expectedSecondSolution: string; 6 | }; 7 | 8 | export default Puzzle; 9 | -------------------------------------------------------------------------------- /src/utils/readFile.ts: -------------------------------------------------------------------------------- 1 | import { readFile } from 'fs'; 2 | 3 | export default (inputFilePath: string) => { 4 | return new Promise((resolve, reject) => { 5 | readFile(inputFilePath, 'utf-8', (err, data) => { 6 | if (err) { 7 | reject(err); 8 | } 9 | resolve(data); 10 | }); 11 | }); 12 | }; 13 | -------------------------------------------------------------------------------- /tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | "module": "commonjs", 4 | "noImplicitAny": true, 5 | "removeComments": true, 6 | "preserveConstEnums": true, 7 | "sourceMap": false, 8 | "outDir": "dist" 9 | }, 10 | "include": ["src/**/*.ts"], 11 | "exclude": ["node_modules", "**/*.spec.ts", "src/scripts/**/*"] 12 | } 13 | --------------------------------------------------------------------------------