├── .github └── workflows │ ├── publish.yml │ ├── setup │ └── action.yml │ └── tests.yml ├── .gitignore ├── .npmrc ├── .prettierrc ├── LICENSE ├── README.md ├── eslint.config.js ├── package.json ├── pnpm-lock.yaml ├── src ├── commands │ └── new │ │ ├── config │ │ ├── billing.ts │ │ ├── db.ts │ │ ├── email.ts │ │ ├── env.ts │ │ └── storage.ts │ │ ├── db.ts │ │ ├── index.ts │ │ └── prerequisites.ts ├── config.ts ├── index.ts └── utils │ ├── handle-error.ts │ ├── index.ts │ └── logger.ts ├── tsconfig.json └── tsup.config.ts /.github/workflows/publish.yml: -------------------------------------------------------------------------------- 1 | name: CI / Publish 2 | 3 | on: 4 | push: 5 | branches: 6 | - main 7 | workflow_dispatch: 8 | 9 | env: 10 | NODE_VERSION: 20.x 11 | 12 | jobs: 13 | tests: 14 | name: 🧪 Tests 15 | uses: ./.github/workflows/tests.yml 16 | 17 | publish: 18 | name: 📦 Publish 19 | runs-on: ubuntu-latest 20 | needs: [tests] 21 | steps: 22 | - name: ✅ Checkout code 23 | uses: actions/checkout@v4 24 | 25 | - name: 🔨 Setup 26 | uses: ./.github/workflows/setup 27 | with: 28 | node-version: ${{ env.NODE_VERSION }} 29 | 30 | - name: 📦 Publish 31 | run: pnpm publish 32 | env: 33 | NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }} 34 | -------------------------------------------------------------------------------- /.github/workflows/setup/action.yml: -------------------------------------------------------------------------------- 1 | name: "CI / Setup" 2 | description: "Common setup steps for Github Actions" 3 | 4 | inputs: 5 | node-version: 6 | description: "Node.js version" 7 | required: true 8 | default: "20.x" 9 | install-packages: 10 | description: "Install packages" 11 | required: false 12 | default: "true" 13 | 14 | runs: 15 | using: "composite" 16 | steps: 17 | - name: ✅ Checkout code 18 | uses: actions/checkout@v4 19 | 20 | - name: 🎬 Setup pnpm 21 | uses: pnpm/action-setup@v4 22 | 23 | - name: 🔨 Setup Node.js ${{ inputs.node-version }} 24 | uses: actions/setup-node@v4 25 | with: 26 | node-version: ${{ inputs.node-version }} 27 | cache: "pnpm" 28 | registry-url: 'https://registry.npmjs.org' 29 | 30 | - name: 🔌 Install 31 | if: ${{ inputs.install-packages == 'true' }} 32 | shell: bash 33 | run: pnpm install 34 | -------------------------------------------------------------------------------- /.github/workflows/tests.yml: -------------------------------------------------------------------------------- 1 | name: CI / Tests 2 | 3 | on: 4 | push: 5 | branches: ["*"] 6 | merge_group: 7 | workflow_dispatch: 8 | workflow_call: 9 | 10 | concurrency: 11 | group: ${{ github.workflow }}-${{ github.ref }} 12 | cancel-in-progress: true 13 | 14 | env: 15 | NODE_VERSION: 20.x 16 | 17 | jobs: 18 | test: 19 | name: 🧪 Test 20 | runs-on: ubuntu-latest 21 | steps: 22 | - name: ✅ Checkout code 23 | uses: actions/checkout@v4 24 | 25 | - name: 🔨 Setup 26 | uses: ./.github/workflows/setup 27 | with: 28 | node-version: ${{ env.NODE_VERSION }} 29 | 30 | - name: 🖌️ Format 31 | run: pnpm run format 32 | 33 | - name: 🛻 Lint 34 | run: pnpm run lint 35 | 36 | - name: 🧪 Typecheck 37 | run: pnpm run typecheck 38 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | node_modules 2 | dist 3 | .idea 4 | .vscode -------------------------------------------------------------------------------- /.npmrc: -------------------------------------------------------------------------------- 1 | @turbostarter:registry=https://registry.npmjs.org 2 | save-exact=true -------------------------------------------------------------------------------- /.prettierrc: -------------------------------------------------------------------------------- 1 | { 2 | "singleQuote": false, 3 | "trailingComma": "all", 4 | "tabWidth": 2, 5 | "useTabs": false, 6 | "printWidth": 80 7 | } 8 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | GNU GENERAL PUBLIC LICENSE 2 | Version 3, 29 June 2007 3 | 4 | Copyright (C) 2007 Free Software Foundation, Inc. 5 | Everyone is permitted to copy and distribute verbatim copies 6 | of this license document, but changing it is not allowed. 7 | 8 | Preamble 9 | 10 | The GNU General Public License is a free, copyleft license for 11 | software and other kinds of works. 12 | 13 | The licenses for most software and other practical works are designed 14 | to take away your freedom to share and change the works. By contrast, 15 | the GNU General Public License is intended to guarantee your freedom to 16 | share and change all versions of a program--to make sure it remains free 17 | software for all its users. We, the Free Software Foundation, use the 18 | GNU General Public License for most of our software; it applies also to 19 | any other work released this way by its authors. You can apply it to 20 | your programs, too. 21 | 22 | When we speak of free software, we are referring to freedom, not 23 | price. Our General Public Licenses are designed to make sure that you 24 | have the freedom to distribute copies of free software (and charge for 25 | them if you wish), that you receive source code or can get it if you 26 | want it, that you can change the software or use pieces of it in new 27 | free programs, and that you know you can do these things. 28 | 29 | To protect your rights, we need to prevent others from denying you 30 | these rights or asking you to surrender the rights. Therefore, you have 31 | certain responsibilities if you distribute copies of the software, or if 32 | you modify it: responsibilities to respect the freedom of others. 33 | 34 | For example, if you distribute copies of such a program, whether 35 | gratis or for a fee, you must pass on to the recipients the same 36 | freedoms that you received. You must make sure that they, too, receive 37 | or can get the source code. And you must show them these terms so they 38 | know their rights. 39 | 40 | Developers that use the GNU GPL protect your rights with two steps: 41 | (1) assert copyright on the software, and (2) offer you this License 42 | giving you legal permission to copy, distribute and/or modify it. 43 | 44 | For the developers' and authors' protection, the GPL clearly explains 45 | that there is no warranty for this free software. For both users' and 46 | authors' sake, the GPL requires that modified versions be marked as 47 | changed, so that their problems will not be attributed erroneously to 48 | authors of previous versions. 49 | 50 | Some devices are designed to deny users access to install or run 51 | modified versions of the software inside them, although the manufacturer 52 | can do so. This is fundamentally incompatible with the aim of 53 | protecting users' freedom to change the software. The systematic 54 | pattern of such abuse occurs in the area of products for individuals to 55 | use, which is precisely where it is most unacceptable. Therefore, we 56 | have designed this version of the GPL to prohibit the practice for those 57 | products. If such problems arise substantially in other domains, we 58 | stand ready to extend this provision to those domains in future versions 59 | of the GPL, as needed to protect the freedom of users. 60 | 61 | Finally, every program is threatened constantly by software patents. 62 | States should not allow patents to restrict development and use of 63 | software on general-purpose computers, but in those that do, we wish to 64 | avoid the special danger that patents applied to a free program could 65 | make it effectively proprietary. To prevent this, the GPL assures that 66 | patents cannot be used to render the program non-free. 67 | 68 | The precise terms and conditions for copying, distribution and 69 | modification follow. 70 | 71 | TERMS AND CONDITIONS 72 | 73 | 0. Definitions. 74 | 75 | "This License" refers to version 3 of the GNU General Public License. 76 | 77 | "Copyright" also means copyright-like laws that apply to other kinds of 78 | works, such as semiconductor masks. 79 | 80 | "The Program" refers to any copyrightable work licensed under this 81 | License. Each licensee is addressed as "you". "Licensees" and 82 | "recipients" may be individuals or organizations. 83 | 84 | To "modify" a work means to copy from or adapt all or part of the work 85 | in a fashion requiring copyright permission, other than the making of an 86 | exact copy. The resulting work is called a "modified version" of the 87 | earlier work or a work "based on" the earlier work. 88 | 89 | A "covered work" means either the unmodified Program or a work based 90 | on the Program. 91 | 92 | To "propagate" a work means to do anything with it that, without 93 | permission, would make you directly or secondarily liable for 94 | infringement under applicable copyright law, except executing it on a 95 | computer or modifying a private copy. Propagation includes copying, 96 | distribution (with or without modification), making available to the 97 | public, and in some countries other activities as well. 98 | 99 | To "convey" a work means any kind of propagation that enables other 100 | parties to make or receive copies. Mere interaction with a user through 101 | a computer network, with no transfer of a copy, is not conveying. 102 | 103 | An interactive user interface displays "Appropriate Legal Notices" 104 | to the extent that it includes a convenient and prominently visible 105 | feature that (1) displays an appropriate copyright notice, and (2) 106 | tells the user that there is no warranty for the work (except to the 107 | extent that warranties are provided), that licensees may convey the 108 | work under this License, and how to view a copy of this License. If 109 | the interface presents a list of user commands or options, such as a 110 | menu, a prominent item in the list meets this criterion. 111 | 112 | 1. Source Code. 113 | 114 | The "source code" for a work means the preferred form of the work 115 | for making modifications to it. "Object code" means any non-source 116 | form of a work. 117 | 118 | A "Standard Interface" means an interface that either is an official 119 | standard defined by a recognized standards body, or, in the case of 120 | interfaces specified for a particular programming language, one that 121 | is widely used among developers working in that language. 122 | 123 | The "System Libraries" of an executable work include anything, other 124 | than the work as a whole, that (a) is included in the normal form of 125 | packaging a Major Component, but which is not part of that Major 126 | Component, and (b) serves only to enable use of the work with that 127 | Major Component, or to implement a Standard Interface for which an 128 | implementation is available to the public in source code form. A 129 | "Major Component", in this context, means a major essential component 130 | (kernel, window system, and so on) of the specific operating system 131 | (if any) on which the executable work runs, or a compiler used to 132 | produce the work, or an object code interpreter used to run it. 133 | 134 | The "Corresponding Source" for a work in object code form means all 135 | the source code needed to generate, install, and (for an executable 136 | work) run the object code and to modify the work, including scripts to 137 | control those activities. However, it does not include the work's 138 | System Libraries, or general-purpose tools or generally available free 139 | programs which are used unmodified in performing those activities but 140 | which are not part of the work. For example, Corresponding Source 141 | includes interface definition files associated with source files for 142 | the work, and the source code for shared libraries and dynamically 143 | linked subprograms that the work is specifically designed to require, 144 | such as by intimate data communication or control flow between those 145 | subprograms and other parts of the work. 146 | 147 | The Corresponding Source need not include anything that users 148 | can regenerate automatically from other parts of the Corresponding 149 | Source. 150 | 151 | The Corresponding Source for a work in source code form is that 152 | same work. 153 | 154 | 2. Basic Permissions. 155 | 156 | All rights granted under this License are granted for the term of 157 | copyright on the Program, and are irrevocable provided the stated 158 | conditions are met. This License explicitly affirms your unlimited 159 | permission to run the unmodified Program. The output from running a 160 | covered work is covered by this License only if the output, given its 161 | content, constitutes a covered work. This License acknowledges your 162 | rights of fair use or other equivalent, as provided by copyright law. 163 | 164 | You may make, run and propagate covered works that you do not 165 | convey, without conditions so long as your license otherwise remains 166 | in force. You may convey covered works to others for the sole purpose 167 | of having them make modifications exclusively for you, or provide you 168 | with facilities for running those works, provided that you comply with 169 | the terms of this License in conveying all material for which you do 170 | not control copyright. Those thus making or running the covered works 171 | for you must do so exclusively on your behalf, under your direction 172 | and control, on terms that prohibit them from making any copies of 173 | your copyrighted material outside their relationship with you. 174 | 175 | Conveying under any other circumstances is permitted solely under 176 | the conditions stated below. Sublicensing is not allowed; section 10 177 | makes it unnecessary. 178 | 179 | 3. Protecting Users' Legal Rights From Anti-Circumvention Law. 180 | 181 | No covered work shall be deemed part of an effective technological 182 | measure under any applicable law fulfilling obligations under article 183 | 11 of the WIPO copyright treaty adopted on 20 December 1996, or 184 | similar laws prohibiting or restricting circumvention of such 185 | measures. 186 | 187 | When you convey a covered work, you waive any legal power to forbid 188 | circumvention of technological measures to the extent such circumvention 189 | is effected by exercising rights under this License with respect to 190 | the covered work, and you disclaim any intention to limit operation or 191 | modification of the work as a means of enforcing, against the work's 192 | users, your or third parties' legal rights to forbid circumvention of 193 | technological measures. 194 | 195 | 4. Conveying Verbatim Copies. 196 | 197 | You may convey verbatim copies of the Program's source code as you 198 | receive it, in any medium, provided that you conspicuously and 199 | appropriately publish on each copy an appropriate copyright notice; 200 | keep intact all notices stating that this License and any 201 | non-permissive terms added in accord with section 7 apply to the code; 202 | keep intact all notices of the absence of any warranty; and give all 203 | recipients a copy of this License along with the Program. 204 | 205 | You may charge any price or no price for each copy that you convey, 206 | and you may offer support or warranty protection for a fee. 207 | 208 | 5. Conveying Modified Source Versions. 209 | 210 | You may convey a work based on the Program, or the modifications to 211 | produce it from the Program, in the form of source code under the 212 | terms of section 4, provided that you also meet all of these conditions: 213 | 214 | a) The work must carry prominent notices stating that you modified 215 | it, and giving a relevant date. 216 | 217 | b) The work must carry prominent notices stating that it is 218 | released under this License and any conditions added under section 219 | 7. This requirement modifies the requirement in section 4 to 220 | "keep intact all notices". 221 | 222 | c) You must license the entire work, as a whole, under this 223 | License to anyone who comes into possession of a copy. This 224 | License will therefore apply, along with any applicable section 7 225 | additional terms, to the whole of the work, and all its parts, 226 | regardless of how they are packaged. This License gives no 227 | permission to license the work in any other way, but it does not 228 | invalidate such permission if you have separately received it. 229 | 230 | d) If the work has interactive user interfaces, each must display 231 | Appropriate Legal Notices; however, if the Program has interactive 232 | interfaces that do not display Appropriate Legal Notices, your 233 | work need not make them do so. 234 | 235 | A compilation of a covered work with other separate and independent 236 | works, which are not by their nature extensions of the covered work, 237 | and which are not combined with it such as to form a larger program, 238 | in or on a volume of a storage or distribution medium, is called an 239 | "aggregate" if the compilation and its resulting copyright are not 240 | used to limit the access or legal rights of the compilation's users 241 | beyond what the individual works permit. Inclusion of a covered work 242 | in an aggregate does not cause this License to apply to the other 243 | parts of the aggregate. 244 | 245 | 6. Conveying Non-Source Forms. 246 | 247 | You may convey a covered work in object code form under the terms 248 | of sections 4 and 5, provided that you also convey the 249 | machine-readable Corresponding Source under the terms of this License, 250 | in one of these ways: 251 | 252 | a) Convey the object code in, or embodied in, a physical product 253 | (including a physical distribution medium), accompanied by the 254 | Corresponding Source fixed on a durable physical medium 255 | customarily used for software interchange. 256 | 257 | b) Convey the object code in, or embodied in, a physical product 258 | (including a physical distribution medium), accompanied by a 259 | written offer, valid for at least three years and valid for as 260 | long as you offer spare parts or customer support for that product 261 | model, to give anyone who possesses the object code either (1) a 262 | copy of the Corresponding Source for all the software in the 263 | product that is covered by this License, on a durable physical 264 | medium customarily used for software interchange, for a price no 265 | more than your reasonable cost of physically performing this 266 | conveying of source, or (2) access to copy the 267 | Corresponding Source from a network server at no charge. 268 | 269 | c) Convey individual copies of the object code with a copy of the 270 | written offer to provide the Corresponding Source. This 271 | alternative is allowed only occasionally and noncommercially, and 272 | only if you received the object code with such an offer, in accord 273 | with subsection 6b. 274 | 275 | d) Convey the object code by offering access from a designated 276 | place (gratis or for a charge), and offer equivalent access to the 277 | Corresponding Source in the same way through the same place at no 278 | further charge. You need not require recipients to copy the 279 | Corresponding Source along with the object code. If the place to 280 | copy the object code is a network server, the Corresponding Source 281 | may be on a different server (operated by you or a third party) 282 | that supports equivalent copying facilities, provided you maintain 283 | clear directions next to the object code saying where to find the 284 | Corresponding Source. Regardless of what server hosts the 285 | Corresponding Source, you remain obligated to ensure that it is 286 | available for as long as needed to satisfy these requirements. 287 | 288 | e) Convey the object code using peer-to-peer transmission, provided 289 | you inform other peers where the object code and Corresponding 290 | Source of the work are being offered to the general public at no 291 | charge under subsection 6d. 292 | 293 | A separable portion of the object code, whose source code is excluded 294 | from the Corresponding Source as a System Library, need not be 295 | included in conveying the object code work. 296 | 297 | A "User Product" is either (1) a "consumer product", which means any 298 | tangible personal property which is normally used for personal, family, 299 | or household purposes, or (2) anything designed or sold for incorporation 300 | into a dwelling. In determining whether a product is a consumer product, 301 | doubtful cases shall be resolved in favor of coverage. For a particular 302 | product received by a particular user, "normally used" refers to a 303 | typical or common use of that class of product, regardless of the status 304 | of the particular user or of the way in which the particular user 305 | actually uses, or expects or is expected to use, the product. A product 306 | is a consumer product regardless of whether the product has substantial 307 | commercial, industrial or non-consumer uses, unless such uses represent 308 | the only significant mode of use of the product. 309 | 310 | "Installation Information" for a User Product means any methods, 311 | procedures, authorization keys, or other information required to install 312 | and execute modified versions of a covered work in that User Product from 313 | a modified version of its Corresponding Source. The information must 314 | suffice to ensure that the continued functioning of the modified object 315 | code is in no case prevented or interfered with solely because 316 | modification has been made. 317 | 318 | If you convey an object code work under this section in, or with, or 319 | specifically for use in, a User Product, and the conveying occurs as 320 | part of a transaction in which the right of possession and use of the 321 | User Product is transferred to the recipient in perpetuity or for a 322 | fixed term (regardless of how the transaction is characterized), the 323 | Corresponding Source conveyed under this section must be accompanied 324 | by the Installation Information. But this requirement does not apply 325 | if neither you nor any third party retains the ability to install 326 | modified object code on the User Product (for example, the work has 327 | been installed in ROM). 328 | 329 | The requirement to provide Installation Information does not include a 330 | requirement to continue to provide support service, warranty, or updates 331 | for a work that has been modified or installed by the recipient, or for 332 | the User Product in which it has been modified or installed. Access to a 333 | network may be denied when the modification itself materially and 334 | adversely affects the operation of the network or violates the rules and 335 | protocols for communication across the network. 336 | 337 | Corresponding Source conveyed, and Installation Information provided, 338 | in accord with this section must be in a format that is publicly 339 | documented (and with an implementation available to the public in 340 | source code form), and must require no special password or key for 341 | unpacking, reading or copying. 342 | 343 | 7. Additional Terms. 344 | 345 | "Additional permissions" are terms that supplement the terms of this 346 | License by making exceptions from one or more of its conditions. 347 | Additional permissions that are applicable to the entire Program shall 348 | be treated as though they were included in this License, to the extent 349 | that they are valid under applicable law. If additional permissions 350 | apply only to part of the Program, that part may be used separately 351 | under those permissions, but the entire Program remains governed by 352 | this License without regard to the additional permissions. 353 | 354 | When you convey a copy of a covered work, you may at your option 355 | remove any additional permissions from that copy, or from any part of 356 | it. (Additional permissions may be written to require their own 357 | removal in certain cases when you modify the work.) You may place 358 | additional permissions on material, added by you to a covered work, 359 | for which you have or can give appropriate copyright permission. 360 | 361 | Notwithstanding any other provision of this License, for material you 362 | add to a covered work, you may (if authorized by the copyright holders of 363 | that material) supplement the terms of this License with terms: 364 | 365 | a) Disclaiming warranty or limiting liability differently from the 366 | terms of sections 15 and 16 of this License; or 367 | 368 | b) Requiring preservation of specified reasonable legal notices or 369 | author attributions in that material or in the Appropriate Legal 370 | Notices displayed by works containing it; or 371 | 372 | c) Prohibiting misrepresentation of the origin of that material, or 373 | requiring that modified versions of such material be marked in 374 | reasonable ways as different from the original version; or 375 | 376 | d) Limiting the use for publicity purposes of names of licensors or 377 | authors of the material; or 378 | 379 | e) Declining to grant rights under trademark law for use of some 380 | trade names, trademarks, or service marks; or 381 | 382 | f) Requiring indemnification of licensors and authors of that 383 | material by anyone who conveys the material (or modified versions of 384 | it) with contractual assumptions of liability to the recipient, for 385 | any liability that these contractual assumptions directly impose on 386 | those licensors and authors. 387 | 388 | All other non-permissive additional terms are considered "further 389 | restrictions" within the meaning of section 10. If the Program as you 390 | received it, or any part of it, contains a notice stating that it is 391 | governed by this License along with a term that is a further 392 | restriction, you may remove that term. If a license document contains 393 | a further restriction but permits relicensing or conveying under this 394 | License, you may add to a covered work material governed by the terms 395 | of that license document, provided that the further restriction does 396 | not survive such relicensing or conveying. 397 | 398 | If you add terms to a covered work in accord with this section, you 399 | must place, in the relevant source files, a statement of the 400 | additional terms that apply to those files, or a notice indicating 401 | where to find the applicable terms. 402 | 403 | Additional terms, permissive or non-permissive, may be stated in the 404 | form of a separately written license, or stated as exceptions; 405 | the above requirements apply either way. 406 | 407 | 8. Termination. 408 | 409 | You may not propagate or modify a covered work except as expressly 410 | provided under this License. Any attempt otherwise to propagate or 411 | modify it is void, and will automatically terminate your rights under 412 | this License (including any patent licenses granted under the third 413 | paragraph of section 11). 414 | 415 | However, if you cease all violation of this License, then your 416 | license from a particular copyright holder is reinstated (a) 417 | provisionally, unless and until the copyright holder explicitly and 418 | finally terminates your license, and (b) permanently, if the copyright 419 | holder fails to notify you of the violation by some reasonable means 420 | prior to 60 days after the cessation. 421 | 422 | Moreover, your license from a particular copyright holder is 423 | reinstated permanently if the copyright holder notifies you of the 424 | violation by some reasonable means, this is the first time you have 425 | received notice of violation of this License (for any work) from that 426 | copyright holder, and you cure the violation prior to 30 days after 427 | your receipt of the notice. 428 | 429 | Termination of your rights under this section does not terminate the 430 | licenses of parties who have received copies or rights from you under 431 | this License. If your rights have been terminated and not permanently 432 | reinstated, you do not qualify to receive new licenses for the same 433 | material under section 10. 434 | 435 | 9. Acceptance Not Required for Having Copies. 436 | 437 | You are not required to accept this License in order to receive or 438 | run a copy of the Program. Ancillary propagation of a covered work 439 | occurring solely as a consequence of using peer-to-peer transmission 440 | to receive a copy likewise does not require acceptance. However, 441 | nothing other than this License grants you permission to propagate or 442 | modify any covered work. These actions infringe copyright if you do 443 | not accept this License. Therefore, by modifying or propagating a 444 | covered work, you indicate your acceptance of this License to do so. 445 | 446 | 10. Automatic Licensing of Downstream Recipients. 447 | 448 | Each time you convey a covered work, the recipient automatically 449 | receives a license from the original licensors, to run, modify and 450 | propagate that work, subject to this License. You are not responsible 451 | for enforcing compliance by third parties with this License. 452 | 453 | An "entity transaction" is a transaction transferring control of an 454 | organization, or substantially all assets of one, or subdividing an 455 | organization, or merging organizations. If propagation of a covered 456 | work results from an entity transaction, each party to that 457 | transaction who receives a copy of the work also receives whatever 458 | licenses to the work the party's predecessor in interest had or could 459 | give under the previous paragraph, plus a right to possession of the 460 | Corresponding Source of the work from the predecessor in interest, if 461 | the predecessor has it or can get it with reasonable efforts. 462 | 463 | You may not impose any further restrictions on the exercise of the 464 | rights granted or affirmed under this License. For example, you may 465 | not impose a license fee, royalty, or other charge for exercise of 466 | rights granted under this License, and you may not initiate litigation 467 | (including a cross-claim or counterclaim in a lawsuit) alleging that 468 | any patent claim is infringed by making, using, selling, offering for 469 | sale, or importing the Program or any portion of it. 470 | 471 | 11. Patents. 472 | 473 | A "contributor" is a copyright holder who authorizes use under this 474 | License of the Program or a work on which the Program is based. The 475 | work thus licensed is called the contributor's "contributor version". 476 | 477 | A contributor's "essential patent claims" are all patent claims 478 | owned or controlled by the contributor, whether already acquired or 479 | hereafter acquired, that would be infringed by some manner, permitted 480 | by this License, of making, using, or selling its contributor version, 481 | but do not include claims that would be infringed only as a 482 | consequence of further modification of the contributor version. For 483 | purposes of this definition, "control" includes the right to grant 484 | patent sublicenses in a manner consistent with the requirements of 485 | this License. 486 | 487 | Each contributor grants you a non-exclusive, worldwide, royalty-free 488 | patent license under the contributor's essential patent claims, to 489 | make, use, sell, offer for sale, import and otherwise run, modify and 490 | propagate the contents of its contributor version. 491 | 492 | In the following three paragraphs, a "patent license" is any express 493 | agreement or commitment, however denominated, not to enforce a patent 494 | (such as an express permission to practice a patent or covenant not to 495 | sue for patent infringement). To "grant" such a patent license to a 496 | party means to make such an agreement or commitment not to enforce a 497 | patent against the party. 498 | 499 | If you convey a covered work, knowingly relying on a patent license, 500 | and the Corresponding Source of the work is not available for anyone 501 | to copy, free of charge and under the terms of this License, through a 502 | publicly available network server or other readily accessible means, 503 | then you must either (1) cause the Corresponding Source to be so 504 | available, or (2) arrange to deprive yourself of the benefit of the 505 | patent license for this particular work, or (3) arrange, in a manner 506 | consistent with the requirements of this License, to extend the patent 507 | license to downstream recipients. "Knowingly relying" means you have 508 | actual knowledge that, but for the patent license, your conveying the 509 | covered work in a country, or your recipient's use of the covered work 510 | in a country, would infringe one or more identifiable patents in that 511 | country that you have reason to believe are valid. 512 | 513 | If, pursuant to or in connection with a single transaction or 514 | arrangement, you convey, or propagate by procuring conveyance of, a 515 | covered work, and grant a patent license to some of the parties 516 | receiving the covered work authorizing them to use, propagate, modify 517 | or convey a specific copy of the covered work, then the patent license 518 | you grant is automatically extended to all recipients of the covered 519 | work and works based on it. 520 | 521 | A patent license is "discriminatory" if it does not include within 522 | the scope of its coverage, prohibits the exercise of, or is 523 | conditioned on the non-exercise of one or more of the rights that are 524 | specifically granted under this License. You may not convey a covered 525 | work if you are a party to an arrangement with a third party that is 526 | in the business of distributing software, under which you make payment 527 | to the third party based on the extent of your activity of conveying 528 | the work, and under which the third party grants, to any of the 529 | parties who would receive the covered work from you, a discriminatory 530 | patent license (a) in connection with copies of the covered work 531 | conveyed by you (or copies made from those copies), or (b) primarily 532 | for and in connection with specific products or compilations that 533 | contain the covered work, unless you entered into that arrangement, 534 | or that patent license was granted, prior to 28 March 2007. 535 | 536 | Nothing in this License shall be construed as excluding or limiting 537 | any implied license or other defenses to infringement that may 538 | otherwise be available to you under applicable patent law. 539 | 540 | 12. No Surrender of Others' Freedom. 541 | 542 | If conditions are imposed on you (whether by court order, agreement or 543 | otherwise) that contradict the conditions of this License, they do not 544 | excuse you from the conditions of this License. If you cannot convey a 545 | covered work so as to satisfy simultaneously your obligations under this 546 | License and any other pertinent obligations, then as a consequence you may 547 | not convey it at all. For example, if you agree to terms that obligate you 548 | to collect a royalty for further conveying from those to whom you convey 549 | the Program, the only way you could satisfy both those terms and this 550 | License would be to refrain entirely from conveying the Program. 551 | 552 | 13. Use with the GNU Affero General Public License. 553 | 554 | Notwithstanding any other provision of this License, you have 555 | permission to link or combine any covered work with a work licensed 556 | under version 3 of the GNU Affero General Public License into a single 557 | combined work, and to convey the resulting work. The terms of this 558 | License will continue to apply to the part which is the covered work, 559 | but the special requirements of the GNU Affero General Public License, 560 | section 13, concerning interaction through a network will apply to the 561 | combination as such. 562 | 563 | 14. Revised Versions of this License. 564 | 565 | The Free Software Foundation may publish revised and/or new versions of 566 | the GNU General Public License from time to time. Such new versions will 567 | be similar in spirit to the present version, but may differ in detail to 568 | address new problems or concerns. 569 | 570 | Each version is given a distinguishing version number. If the 571 | Program specifies that a certain numbered version of the GNU General 572 | Public License "or any later version" applies to it, you have the 573 | option of following the terms and conditions either of that numbered 574 | version or of any later version published by the Free Software 575 | Foundation. If the Program does not specify a version number of the 576 | GNU General Public License, you may choose any version ever published 577 | by the Free Software Foundation. 578 | 579 | If the Program specifies that a proxy can decide which future 580 | versions of the GNU General Public License can be used, that proxy's 581 | public statement of acceptance of a version permanently authorizes you 582 | to choose that version for the Program. 583 | 584 | Later license versions may give you additional or different 585 | permissions. However, no additional obligations are imposed on any 586 | author or copyright holder as a result of your choosing to follow a 587 | later version. 588 | 589 | 15. Disclaimer of Warranty. 590 | 591 | THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY 592 | APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT 593 | HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY 594 | OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, 595 | THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR 596 | PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM 597 | IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF 598 | ALL NECESSARY SERVICING, REPAIR OR CORRECTION. 599 | 600 | 16. Limitation of Liability. 601 | 602 | IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING 603 | WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS 604 | THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY 605 | GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE 606 | USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF 607 | DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD 608 | PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), 609 | EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF 610 | SUCH DAMAGES. 611 | 612 | 17. Interpretation of Sections 15 and 16. 613 | 614 | If the disclaimer of warranty and limitation of liability provided 615 | above cannot be given local legal effect according to their terms, 616 | reviewing courts shall apply local law that most closely approximates 617 | an absolute waiver of all civil liability in connection with the 618 | Program, unless a warranty or assumption of liability accompanies a 619 | copy of the Program in return for a fee. 620 | 621 | END OF TERMS AND CONDITIONS 622 | 623 | How to Apply These Terms to Your New Programs 624 | 625 | If you develop a new program, and you want it to be of the greatest 626 | possible use to the public, the best way to achieve this is to make it 627 | free software which everyone can redistribute and change under these terms. 628 | 629 | To do so, attach the following notices to the program. It is safest 630 | to attach them to the start of each source file to most effectively 631 | state the exclusion of warranty; and each file should have at least 632 | the "copyright" line and a pointer to where the full notice is found. 633 | 634 | 635 | Copyright (C) 636 | 637 | This program is free software: you can redistribute it and/or modify 638 | it under the terms of the GNU General Public License as published by 639 | the Free Software Foundation, either version 3 of the License, or 640 | (at your option) any later version. 641 | 642 | This program is distributed in the hope that it will be useful, 643 | but WITHOUT ANY WARRANTY; without even the implied warranty of 644 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 645 | GNU General Public License for more details. 646 | 647 | You should have received a copy of the GNU General Public License 648 | along with this program. If not, see . 649 | 650 | Also add information on how to contact you by electronic and paper mail. 651 | 652 | If the program does terminal interaction, make it output a short 653 | notice like this when it starts in an interactive mode: 654 | 655 | Copyright (C) 656 | This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'. 657 | This is free software, and you are welcome to redistribute it 658 | under certain conditions; type `show c' for details. 659 | 660 | The hypothetical commands `show w' and `show c' should show the appropriate 661 | parts of the General Public License. Of course, your program's commands 662 | might be different; for a GUI interface, you would use an "about box". 663 | 664 | You should also get your employer (if you work as a programmer) or school, 665 | if any, to sign a "copyright disclaimer" for the program, if necessary. 666 | For more information on this, and how to apply and follow the GNU GPL, see 667 | . 668 | 669 | The GNU General Public License does not permit incorporating your program 670 | into proprietary programs. If your program is a subroutine library, you 671 | may consider it more useful to permit linking proprietary applications with 672 | the library. If this is what you want to do, use the GNU Lesser General 673 | Public License instead of this License. But first, please read 674 | . 675 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Turbostarter CLI 2 | 3 | Your TurboStarter assistant for starting new projects, adding plugins and more. 4 | 5 | ## Installation 6 | 7 | You can run commands using `npx`: 8 | 9 | ``` 10 | npx turbostarter 11 | ``` 12 | 13 | This ensures that you always run the latest version of the CLI. 14 | 15 | ## Usage 16 | 17 | Running the CLI without any arguments will display the general information about the CLI: 18 | 19 | ``` 20 | Usage: turbostarter [options] [command] 21 | 22 | Your Turbo Assistant for starting new projects, adding plugins and more. 23 | 24 | Options: 25 | -v, --version display the version number 26 | -h, --help display help for command 27 | 28 | Commands: 29 | new create a new TurboStarter project 30 | help [command] display help for command 31 | ``` 32 | 33 | ### Creating a new project 34 | 35 | To create a new TurboStarter project, run the following command: 36 | 37 | ``` 38 | npx turbostarter new 39 | ``` 40 | 41 | The CLI will ask you a few questions about the project (e.g. name, database, billing etc.) and then create a new project in the working directory. 42 | 43 | The command will also install all dependencies and run the project setup scripts. 44 | 45 | ## Documentation 46 | 47 | Visit [https://turbostarter.dev/docs/web/cli](https://turbostarter.dev/docs/web/cli) to view the documentation. 48 | 49 | ## License 50 | 51 | Licensed under the [GNU General Public License v3.0](https://github.com/turbostarter/cli/blob/main/LICENSE). 52 | -------------------------------------------------------------------------------- /eslint.config.js: -------------------------------------------------------------------------------- 1 | import * as path from "node:path"; 2 | import { fileURLToPath } from "node:url"; 3 | import { includeIgnoreFile } from "@eslint/compat"; 4 | import eslint from "@eslint/js"; 5 | import importPlugin from "eslint-plugin-import"; 6 | import unusedImportsPlugin from "eslint-plugin-unused-imports"; 7 | import tseslint from "typescript-eslint"; 8 | 9 | export default tseslint.config( 10 | includeIgnoreFile( 11 | path.resolve(path.dirname(fileURLToPath(import.meta.url)), ".gitignore") 12 | ), 13 | { ignores: ["**/*.config.*"] }, 14 | { 15 | files: ["**/*.js", "**/*.ts", "**/*.tsx"], 16 | plugins: { 17 | import: importPlugin, 18 | "unused-imports": unusedImportsPlugin, 19 | }, 20 | extends: [ 21 | eslint.configs.recommended, 22 | ...tseslint.configs.recommended, 23 | ...tseslint.configs.recommendedTypeChecked, 24 | ...tseslint.configs.stylisticTypeChecked, 25 | ], 26 | rules: { 27 | "@typescript-eslint/no-unused-vars": "off", 28 | "@typescript-eslint/consistent-type-imports": [ 29 | "warn", 30 | { prefer: "type-imports", fixStyle: "separate-type-imports" }, 31 | ], 32 | "@typescript-eslint/no-misused-promises": [ 33 | 2, 34 | { checksVoidReturn: { attributes: false } }, 35 | ], 36 | "@typescript-eslint/no-unnecessary-condition": [ 37 | "error", 38 | { 39 | allowConstantLoopConditions: true, 40 | }, 41 | ], 42 | "@typescript-eslint/no-unsafe-argument": "off", 43 | "@typescript-eslint/no-non-null-assertion": "error", 44 | "import/consistent-type-specifier-style": ["error", "prefer-top-level"], 45 | "import/order": [ 46 | "error", 47 | { 48 | alphabetize: { 49 | caseInsensitive: true, 50 | order: "asc", 51 | }, 52 | pathGroups: [ 53 | { 54 | pattern: "@turbostarter/**", 55 | group: "internal", 56 | position: "before", 57 | }, 58 | { 59 | pattern: "~/**", 60 | group: "internal", 61 | position: "before", 62 | }, 63 | ], 64 | groups: [ 65 | ["builtin", "external"], 66 | "internal", 67 | "parent", 68 | "sibling", 69 | "index", 70 | "object", 71 | "type", 72 | ], 73 | "newlines-between": "always", 74 | warnOnUnassignedImports: true, 75 | pathGroupsExcludedImportTypes: ["type"], 76 | }, 77 | ], 78 | "unused-imports/no-unused-imports": "error", 79 | "unused-imports/no-unused-vars": [ 80 | "warn", 81 | { 82 | vars: "all", 83 | varsIgnorePattern: "^_", 84 | args: "after-used", 85 | argsIgnorePattern: "^_", 86 | }, 87 | ], 88 | }, 89 | }, 90 | { 91 | linterOptions: { reportUnusedDisableDirectives: true }, 92 | languageOptions: { parserOptions: { projectService: true } }, 93 | } 94 | ); 95 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "@turbostarter/cli", 3 | "version": "1.0.5", 4 | "main": "index.js", 5 | "type": "module", 6 | "exports": "./dist/index.js", 7 | "publishConfig": { 8 | "registry": "https://registry.npmjs.org/", 9 | "access": "public" 10 | }, 11 | "bin": { 12 | "turbostarter": "./dist/index.js" 13 | }, 14 | "repository": { 15 | "url": "https://github.com/turbostarter/cli.git" 16 | }, 17 | "homepage": "https://turbostarter.dev", 18 | "files": [ 19 | "dist" 20 | ], 21 | "keywords": [ 22 | "turbostarter", 23 | "cli", 24 | "starter kit", 25 | "template", 26 | "web", 27 | "mobile", 28 | "browser extension" 29 | ], 30 | "scripts": { 31 | "start": "node dist/index.js", 32 | "dev": "tsup --watch", 33 | "build": "tsup", 34 | "typecheck": "tsc --noEmit", 35 | "prepare": "pnpm run build", 36 | "lint": "eslint", 37 | "lint:fix": "eslint --fix", 38 | "format": "prettier --check \"**/*.{ts,tsx,mdx}\" --cache", 39 | "format:fix": "prettier --write \"**/*.{ts,tsx,mdx}\" --cache" 40 | }, 41 | "author": "Bartosz Zagrodzki", 42 | "license": "ISC", 43 | "description": "Your TurboStarter assistant for starting new projects, adding plugins and more.", 44 | "devDependencies": { 45 | "@eslint/compat": "1.2.0", 46 | "@types/lodash": "4.17.12", 47 | "@types/node": "22.7.5", 48 | "@types/prompts": "^2.4.2", 49 | "eslint": "9.12.0", 50 | "eslint-plugin-import": "2.31.0", 51 | "eslint-plugin-unused-imports": "4.1.4", 52 | "prettier": "3.3.3", 53 | "tsup": "8.3.0", 54 | "typescript": "5.5.4", 55 | "typescript-eslint": "8.9.0" 56 | }, 57 | "dependencies": { 58 | "commander": "12.1.0", 59 | "execa": "9.4.0", 60 | "lodash": "4.17.21", 61 | "ora": "^6.1.2", 62 | "picocolors": "1.1.0", 63 | "prompts": "^2.4.2", 64 | "zod": "3.23.8" 65 | }, 66 | "packageManager": "pnpm@9.9.0" 67 | } 68 | -------------------------------------------------------------------------------- /pnpm-lock.yaml: -------------------------------------------------------------------------------- 1 | lockfileVersion: '9.0' 2 | 3 | settings: 4 | autoInstallPeers: true 5 | excludeLinksFromLockfile: false 6 | 7 | importers: 8 | 9 | .: 10 | dependencies: 11 | commander: 12 | specifier: 12.1.0 13 | version: 12.1.0 14 | execa: 15 | specifier: 9.4.0 16 | version: 9.4.0 17 | lodash: 18 | specifier: 4.17.21 19 | version: 4.17.21 20 | ora: 21 | specifier: ^6.1.2 22 | version: 6.3.1 23 | picocolors: 24 | specifier: 1.1.0 25 | version: 1.1.0 26 | prompts: 27 | specifier: ^2.4.2 28 | version: 2.4.2 29 | zod: 30 | specifier: 3.23.8 31 | version: 3.23.8 32 | devDependencies: 33 | '@eslint/compat': 34 | specifier: 1.2.0 35 | version: 1.2.0(eslint@9.12.0(jiti@1.21.6)) 36 | '@types/lodash': 37 | specifier: 4.17.12 38 | version: 4.17.12 39 | '@types/node': 40 | specifier: 22.7.5 41 | version: 22.7.5 42 | '@types/prompts': 43 | specifier: ^2.4.2 44 | version: 2.4.9 45 | eslint: 46 | specifier: 9.12.0 47 | version: 9.12.0(jiti@1.21.6) 48 | eslint-plugin-import: 49 | specifier: 2.31.0 50 | version: 2.31.0(@typescript-eslint/parser@8.9.0(eslint@9.12.0(jiti@1.21.6))(typescript@5.5.4))(eslint@9.12.0(jiti@1.21.6)) 51 | eslint-plugin-unused-imports: 52 | specifier: 4.1.4 53 | version: 4.1.4(@typescript-eslint/eslint-plugin@8.9.0(@typescript-eslint/parser@8.9.0(eslint@9.12.0(jiti@1.21.6))(typescript@5.5.4))(eslint@9.12.0(jiti@1.21.6))(typescript@5.5.4))(eslint@9.12.0(jiti@1.21.6)) 54 | prettier: 55 | specifier: 3.3.3 56 | version: 3.3.3 57 | tsup: 58 | specifier: 8.3.0 59 | version: 8.3.0(jiti@1.21.6)(typescript@5.5.4) 60 | typescript: 61 | specifier: 5.5.4 62 | version: 5.5.4 63 | typescript-eslint: 64 | specifier: 8.9.0 65 | version: 8.9.0(eslint@9.12.0(jiti@1.21.6))(typescript@5.5.4) 66 | 67 | packages: 68 | 69 | '@esbuild/aix-ppc64@0.23.1': 70 | resolution: {integrity: sha512-6VhYk1diRqrhBAqpJEdjASR/+WVRtfjpqKuNw11cLiaWpAT/Uu+nokB+UJnevzy/P9C/ty6AOe0dwueMrGh/iQ==} 71 | engines: {node: '>=18'} 72 | cpu: [ppc64] 73 | os: [aix] 74 | 75 | '@esbuild/android-arm64@0.23.1': 76 | resolution: {integrity: sha512-xw50ipykXcLstLeWH7WRdQuysJqejuAGPd30vd1i5zSyKK3WE+ijzHmLKxdiCMtH1pHz78rOg0BKSYOSB/2Khw==} 77 | engines: {node: '>=18'} 78 | cpu: [arm64] 79 | os: [android] 80 | 81 | '@esbuild/android-arm@0.23.1': 82 | resolution: {integrity: sha512-uz6/tEy2IFm9RYOyvKl88zdzZfwEfKZmnX9Cj1BHjeSGNuGLuMD1kR8y5bteYmwqKm1tj8m4cb/aKEorr6fHWQ==} 83 | engines: {node: '>=18'} 84 | cpu: [arm] 85 | os: [android] 86 | 87 | '@esbuild/android-x64@0.23.1': 88 | resolution: {integrity: sha512-nlN9B69St9BwUoB+jkyU090bru8L0NA3yFvAd7k8dNsVH8bi9a8cUAUSEcEEgTp2z3dbEDGJGfP6VUnkQnlReg==} 89 | engines: {node: '>=18'} 90 | cpu: [x64] 91 | os: [android] 92 | 93 | '@esbuild/darwin-arm64@0.23.1': 94 | resolution: {integrity: sha512-YsS2e3Wtgnw7Wq53XXBLcV6JhRsEq8hkfg91ESVadIrzr9wO6jJDMZnCQbHm1Guc5t/CdDiFSSfWP58FNuvT3Q==} 95 | engines: {node: '>=18'} 96 | cpu: [arm64] 97 | os: [darwin] 98 | 99 | '@esbuild/darwin-x64@0.23.1': 100 | resolution: {integrity: sha512-aClqdgTDVPSEGgoCS8QDG37Gu8yc9lTHNAQlsztQ6ENetKEO//b8y31MMu2ZaPbn4kVsIABzVLXYLhCGekGDqw==} 101 | engines: {node: '>=18'} 102 | cpu: [x64] 103 | os: [darwin] 104 | 105 | '@esbuild/freebsd-arm64@0.23.1': 106 | resolution: {integrity: sha512-h1k6yS8/pN/NHlMl5+v4XPfikhJulk4G+tKGFIOwURBSFzE8bixw1ebjluLOjfwtLqY0kewfjLSrO6tN2MgIhA==} 107 | engines: {node: '>=18'} 108 | cpu: [arm64] 109 | os: [freebsd] 110 | 111 | '@esbuild/freebsd-x64@0.23.1': 112 | resolution: {integrity: sha512-lK1eJeyk1ZX8UklqFd/3A60UuZ/6UVfGT2LuGo3Wp4/z7eRTRYY+0xOu2kpClP+vMTi9wKOfXi2vjUpO1Ro76g==} 113 | engines: {node: '>=18'} 114 | cpu: [x64] 115 | os: [freebsd] 116 | 117 | '@esbuild/linux-arm64@0.23.1': 118 | resolution: {integrity: sha512-/93bf2yxencYDnItMYV/v116zff6UyTjo4EtEQjUBeGiVpMmffDNUyD9UN2zV+V3LRV3/on4xdZ26NKzn6754g==} 119 | engines: {node: '>=18'} 120 | cpu: [arm64] 121 | os: [linux] 122 | 123 | '@esbuild/linux-arm@0.23.1': 124 | resolution: {integrity: sha512-CXXkzgn+dXAPs3WBwE+Kvnrf4WECwBdfjfeYHpMeVxWE0EceB6vhWGShs6wi0IYEqMSIzdOF1XjQ/Mkm5d7ZdQ==} 125 | engines: {node: '>=18'} 126 | cpu: [arm] 127 | os: [linux] 128 | 129 | '@esbuild/linux-ia32@0.23.1': 130 | resolution: {integrity: sha512-VTN4EuOHwXEkXzX5nTvVY4s7E/Krz7COC8xkftbbKRYAl96vPiUssGkeMELQMOnLOJ8k3BY1+ZY52tttZnHcXQ==} 131 | engines: {node: '>=18'} 132 | cpu: [ia32] 133 | os: [linux] 134 | 135 | '@esbuild/linux-loong64@0.23.1': 136 | resolution: {integrity: sha512-Vx09LzEoBa5zDnieH8LSMRToj7ir/Jeq0Gu6qJ/1GcBq9GkfoEAoXvLiW1U9J1qE/Y/Oyaq33w5p2ZWrNNHNEw==} 137 | engines: {node: '>=18'} 138 | cpu: [loong64] 139 | os: [linux] 140 | 141 | '@esbuild/linux-mips64el@0.23.1': 142 | resolution: {integrity: sha512-nrFzzMQ7W4WRLNUOU5dlWAqa6yVeI0P78WKGUo7lg2HShq/yx+UYkeNSE0SSfSure0SqgnsxPvmAUu/vu0E+3Q==} 143 | engines: {node: '>=18'} 144 | cpu: [mips64el] 145 | os: [linux] 146 | 147 | '@esbuild/linux-ppc64@0.23.1': 148 | resolution: {integrity: sha512-dKN8fgVqd0vUIjxuJI6P/9SSSe/mB9rvA98CSH2sJnlZ/OCZWO1DJvxj8jvKTfYUdGfcq2dDxoKaC6bHuTlgcw==} 149 | engines: {node: '>=18'} 150 | cpu: [ppc64] 151 | os: [linux] 152 | 153 | '@esbuild/linux-riscv64@0.23.1': 154 | resolution: {integrity: sha512-5AV4Pzp80fhHL83JM6LoA6pTQVWgB1HovMBsLQ9OZWLDqVY8MVobBXNSmAJi//Csh6tcY7e7Lny2Hg1tElMjIA==} 155 | engines: {node: '>=18'} 156 | cpu: [riscv64] 157 | os: [linux] 158 | 159 | '@esbuild/linux-s390x@0.23.1': 160 | resolution: {integrity: sha512-9ygs73tuFCe6f6m/Tb+9LtYxWR4c9yg7zjt2cYkjDbDpV/xVn+68cQxMXCjUpYwEkze2RcU/rMnfIXNRFmSoDw==} 161 | engines: {node: '>=18'} 162 | cpu: [s390x] 163 | os: [linux] 164 | 165 | '@esbuild/linux-x64@0.23.1': 166 | resolution: {integrity: sha512-EV6+ovTsEXCPAp58g2dD68LxoP/wK5pRvgy0J/HxPGB009omFPv3Yet0HiaqvrIrgPTBuC6wCH1LTOY91EO5hQ==} 167 | engines: {node: '>=18'} 168 | cpu: [x64] 169 | os: [linux] 170 | 171 | '@esbuild/netbsd-x64@0.23.1': 172 | resolution: {integrity: sha512-aevEkCNu7KlPRpYLjwmdcuNz6bDFiE7Z8XC4CPqExjTvrHugh28QzUXVOZtiYghciKUacNktqxdpymplil1beA==} 173 | engines: {node: '>=18'} 174 | cpu: [x64] 175 | os: [netbsd] 176 | 177 | '@esbuild/openbsd-arm64@0.23.1': 178 | resolution: {integrity: sha512-3x37szhLexNA4bXhLrCC/LImN/YtWis6WXr1VESlfVtVeoFJBRINPJ3f0a/6LV8zpikqoUg4hyXw0sFBt5Cr+Q==} 179 | engines: {node: '>=18'} 180 | cpu: [arm64] 181 | os: [openbsd] 182 | 183 | '@esbuild/openbsd-x64@0.23.1': 184 | resolution: {integrity: sha512-aY2gMmKmPhxfU+0EdnN+XNtGbjfQgwZj43k8G3fyrDM/UdZww6xrWxmDkuz2eCZchqVeABjV5BpildOrUbBTqA==} 185 | engines: {node: '>=18'} 186 | cpu: [x64] 187 | os: [openbsd] 188 | 189 | '@esbuild/sunos-x64@0.23.1': 190 | resolution: {integrity: sha512-RBRT2gqEl0IKQABT4XTj78tpk9v7ehp+mazn2HbUeZl1YMdaGAQqhapjGTCe7uw7y0frDi4gS0uHzhvpFuI1sA==} 191 | engines: {node: '>=18'} 192 | cpu: [x64] 193 | os: [sunos] 194 | 195 | '@esbuild/win32-arm64@0.23.1': 196 | resolution: {integrity: sha512-4O+gPR5rEBe2FpKOVyiJ7wNDPA8nGzDuJ6gN4okSA1gEOYZ67N8JPk58tkWtdtPeLz7lBnY6I5L3jdsr3S+A6A==} 197 | engines: {node: '>=18'} 198 | cpu: [arm64] 199 | os: [win32] 200 | 201 | '@esbuild/win32-ia32@0.23.1': 202 | resolution: {integrity: sha512-BcaL0Vn6QwCwre3Y717nVHZbAa4UBEigzFm6VdsVdT/MbZ38xoj1X9HPkZhbmaBGUD1W8vxAfffbDe8bA6AKnQ==} 203 | engines: {node: '>=18'} 204 | cpu: [ia32] 205 | os: [win32] 206 | 207 | '@esbuild/win32-x64@0.23.1': 208 | resolution: {integrity: sha512-BHpFFeslkWrXWyUPnbKm+xYYVYruCinGcftSBaa8zoF9hZO4BcSCFUvHVTtzpIY6YzUnYtuEhZ+C9iEXjxnasg==} 209 | engines: {node: '>=18'} 210 | cpu: [x64] 211 | os: [win32] 212 | 213 | '@eslint-community/eslint-utils@4.4.0': 214 | resolution: {integrity: sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==} 215 | engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} 216 | peerDependencies: 217 | eslint: ^6.0.0 || ^7.0.0 || >=8.0.0 218 | 219 | '@eslint-community/regexpp@4.11.1': 220 | resolution: {integrity: sha512-m4DVN9ZqskZoLU5GlWZadwDnYo3vAEydiUayB9widCl9ffWx2IvPnp6n3on5rJmziJSw9Bv+Z3ChDVdMwXCY8Q==} 221 | engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0} 222 | 223 | '@eslint/compat@1.2.0': 224 | resolution: {integrity: sha512-CkPWddN7J9JPrQedEr2X7AjK9y1jaMJtxZ4A/+jTMFA2+n5BWhcKHW/EbJyARqg2zzQfgtWUtVmG3hrG6+nGpg==} 225 | engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 226 | peerDependencies: 227 | eslint: ^9.10.0 228 | peerDependenciesMeta: 229 | eslint: 230 | optional: true 231 | 232 | '@eslint/config-array@0.18.0': 233 | resolution: {integrity: sha512-fTxvnS1sRMu3+JjXwJG0j/i4RT9u4qJ+lqS/yCGap4lH4zZGzQ7tu+xZqQmcMZq5OBZDL4QRxQzRjkWcGt8IVw==} 234 | engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 235 | 236 | '@eslint/core@0.6.0': 237 | resolution: {integrity: sha512-8I2Q8ykA4J0x0o7cg67FPVnehcqWTBehu/lmY+bolPFHGjh49YzGBMXTvpqVgEbBdvNCSxj6iFgiIyHzf03lzg==} 238 | engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 239 | 240 | '@eslint/eslintrc@3.1.0': 241 | resolution: {integrity: sha512-4Bfj15dVJdoy3RfZmmo86RK1Fwzn6SstsvK9JS+BaVKqC6QQQQyXekNaC+g+LKNgkQ+2VhGAzm6hO40AhMR3zQ==} 242 | engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 243 | 244 | '@eslint/js@9.12.0': 245 | resolution: {integrity: sha512-eohesHH8WFRUprDNyEREgqP6beG6htMeUYeCpkEgBCieCMme5r9zFWjzAJp//9S+Kub4rqE+jXe9Cp1a7IYIIA==} 246 | engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 247 | 248 | '@eslint/object-schema@2.1.4': 249 | resolution: {integrity: sha512-BsWiH1yFGjXXS2yvrf5LyuoSIIbPrGUWob917o+BTKuZ7qJdxX8aJLRxs1fS9n6r7vESrq1OUqb68dANcFXuQQ==} 250 | engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 251 | 252 | '@eslint/plugin-kit@0.2.0': 253 | resolution: {integrity: sha512-vH9PiIMMwvhCx31Af3HiGzsVNULDbyVkHXwlemn/B0TFj/00ho3y55efXrUZTfQipxoHC5u4xq6zblww1zm1Ig==} 254 | engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 255 | 256 | '@humanfs/core@0.19.0': 257 | resolution: {integrity: sha512-2cbWIHbZVEweE853g8jymffCA+NCMiuqeECeBBLm8dg2oFdjuGJhgN4UAbI+6v0CKbbhvtXA4qV8YR5Ji86nmw==} 258 | engines: {node: '>=18.18.0'} 259 | 260 | '@humanfs/node@0.16.5': 261 | resolution: {integrity: sha512-KSPA4umqSG4LHYRodq31VDwKAvaTF4xmVlzM8Aeh4PlU1JQ3IG0wiA8C25d3RQ9nJyM3mBHyI53K06VVL/oFFg==} 262 | engines: {node: '>=18.18.0'} 263 | 264 | '@humanwhocodes/module-importer@1.0.1': 265 | resolution: {integrity: sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==} 266 | engines: {node: '>=12.22'} 267 | 268 | '@humanwhocodes/retry@0.3.1': 269 | resolution: {integrity: sha512-JBxkERygn7Bv/GbN5Rv8Ul6LVknS+5Bp6RgDC/O8gEBU/yeH5Ui5C/OlWrTb6qct7LjjfT6Re2NxB0ln0yYybA==} 270 | engines: {node: '>=18.18'} 271 | 272 | '@isaacs/cliui@8.0.2': 273 | resolution: {integrity: sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==} 274 | engines: {node: '>=12'} 275 | 276 | '@jridgewell/gen-mapping@0.3.5': 277 | resolution: {integrity: sha512-IzL8ZoEDIBRWEzlCcRhOaCupYyN5gdIK+Q6fbFdPDg6HqX6jpkItn7DFIpW9LQzXG6Df9sA7+OKnq0qlz/GaQg==} 278 | engines: {node: '>=6.0.0'} 279 | 280 | '@jridgewell/resolve-uri@3.1.2': 281 | resolution: {integrity: sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==} 282 | engines: {node: '>=6.0.0'} 283 | 284 | '@jridgewell/set-array@1.2.1': 285 | resolution: {integrity: sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==} 286 | engines: {node: '>=6.0.0'} 287 | 288 | '@jridgewell/sourcemap-codec@1.5.0': 289 | resolution: {integrity: sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==} 290 | 291 | '@jridgewell/trace-mapping@0.3.25': 292 | resolution: {integrity: sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==} 293 | 294 | '@nodelib/fs.scandir@2.1.5': 295 | resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==} 296 | engines: {node: '>= 8'} 297 | 298 | '@nodelib/fs.stat@2.0.5': 299 | resolution: {integrity: sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==} 300 | engines: {node: '>= 8'} 301 | 302 | '@nodelib/fs.walk@1.2.8': 303 | resolution: {integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==} 304 | engines: {node: '>= 8'} 305 | 306 | '@pkgjs/parseargs@0.11.0': 307 | resolution: {integrity: sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==} 308 | engines: {node: '>=14'} 309 | 310 | '@rollup/rollup-android-arm-eabi@4.24.0': 311 | resolution: {integrity: sha512-Q6HJd7Y6xdB48x8ZNVDOqsbh2uByBhgK8PiQgPhwkIw/HC/YX5Ghq2mQY5sRMZWHb3VsFkWooUVOZHKr7DmDIA==} 312 | cpu: [arm] 313 | os: [android] 314 | 315 | '@rollup/rollup-android-arm64@4.24.0': 316 | resolution: {integrity: sha512-ijLnS1qFId8xhKjT81uBHuuJp2lU4x2yxa4ctFPtG+MqEE6+C5f/+X/bStmxapgmwLwiL3ih122xv8kVARNAZA==} 317 | cpu: [arm64] 318 | os: [android] 319 | 320 | '@rollup/rollup-darwin-arm64@4.24.0': 321 | resolution: {integrity: sha512-bIv+X9xeSs1XCk6DVvkO+S/z8/2AMt/2lMqdQbMrmVpgFvXlmde9mLcbQpztXm1tajC3raFDqegsH18HQPMYtA==} 322 | cpu: [arm64] 323 | os: [darwin] 324 | 325 | '@rollup/rollup-darwin-x64@4.24.0': 326 | resolution: {integrity: sha512-X6/nOwoFN7RT2svEQWUsW/5C/fYMBe4fnLK9DQk4SX4mgVBiTA9h64kjUYPvGQ0F/9xwJ5U5UfTbl6BEjaQdBQ==} 327 | cpu: [x64] 328 | os: [darwin] 329 | 330 | '@rollup/rollup-linux-arm-gnueabihf@4.24.0': 331 | resolution: {integrity: sha512-0KXvIJQMOImLCVCz9uvvdPgfyWo93aHHp8ui3FrtOP57svqrF/roSSR5pjqL2hcMp0ljeGlU4q9o/rQaAQ3AYA==} 332 | cpu: [arm] 333 | os: [linux] 334 | 335 | '@rollup/rollup-linux-arm-musleabihf@4.24.0': 336 | resolution: {integrity: sha512-it2BW6kKFVh8xk/BnHfakEeoLPv8STIISekpoF+nBgWM4d55CZKc7T4Dx1pEbTnYm/xEKMgy1MNtYuoA8RFIWw==} 337 | cpu: [arm] 338 | os: [linux] 339 | 340 | '@rollup/rollup-linux-arm64-gnu@4.24.0': 341 | resolution: {integrity: sha512-i0xTLXjqap2eRfulFVlSnM5dEbTVque/3Pi4g2y7cxrs7+a9De42z4XxKLYJ7+OhE3IgxvfQM7vQc43bwTgPwA==} 342 | cpu: [arm64] 343 | os: [linux] 344 | 345 | '@rollup/rollup-linux-arm64-musl@4.24.0': 346 | resolution: {integrity: sha512-9E6MKUJhDuDh604Qco5yP/3qn3y7SLXYuiC0Rpr89aMScS2UAmK1wHP2b7KAa1nSjWJc/f/Lc0Wl1L47qjiyQw==} 347 | cpu: [arm64] 348 | os: [linux] 349 | 350 | '@rollup/rollup-linux-powerpc64le-gnu@4.24.0': 351 | resolution: {integrity: sha512-2XFFPJ2XMEiF5Zi2EBf4h73oR1V/lycirxZxHZNc93SqDN/IWhYYSYj8I9381ikUFXZrz2v7r2tOVk2NBwxrWw==} 352 | cpu: [ppc64] 353 | os: [linux] 354 | 355 | '@rollup/rollup-linux-riscv64-gnu@4.24.0': 356 | resolution: {integrity: sha512-M3Dg4hlwuntUCdzU7KjYqbbd+BLq3JMAOhCKdBE3TcMGMZbKkDdJ5ivNdehOssMCIokNHFOsv7DO4rlEOfyKpg==} 357 | cpu: [riscv64] 358 | os: [linux] 359 | 360 | '@rollup/rollup-linux-s390x-gnu@4.24.0': 361 | resolution: {integrity: sha512-mjBaoo4ocxJppTorZVKWFpy1bfFj9FeCMJqzlMQGjpNPY9JwQi7OuS1axzNIk0nMX6jSgy6ZURDZ2w0QW6D56g==} 362 | cpu: [s390x] 363 | os: [linux] 364 | 365 | '@rollup/rollup-linux-x64-gnu@4.24.0': 366 | resolution: {integrity: sha512-ZXFk7M72R0YYFN5q13niV0B7G8/5dcQ9JDp8keJSfr3GoZeXEoMHP/HlvqROA3OMbMdfr19IjCeNAnPUG93b6A==} 367 | cpu: [x64] 368 | os: [linux] 369 | 370 | '@rollup/rollup-linux-x64-musl@4.24.0': 371 | resolution: {integrity: sha512-w1i+L7kAXZNdYl+vFvzSZy8Y1arS7vMgIy8wusXJzRrPyof5LAb02KGr1PD2EkRcl73kHulIID0M501lN+vobQ==} 372 | cpu: [x64] 373 | os: [linux] 374 | 375 | '@rollup/rollup-win32-arm64-msvc@4.24.0': 376 | resolution: {integrity: sha512-VXBrnPWgBpVDCVY6XF3LEW0pOU51KbaHhccHw6AS6vBWIC60eqsH19DAeeObl+g8nKAz04QFdl/Cefta0xQtUQ==} 377 | cpu: [arm64] 378 | os: [win32] 379 | 380 | '@rollup/rollup-win32-ia32-msvc@4.24.0': 381 | resolution: {integrity: sha512-xrNcGDU0OxVcPTH/8n/ShH4UevZxKIO6HJFK0e15XItZP2UcaiLFd5kiX7hJnqCbSztUF8Qot+JWBC/QXRPYWQ==} 382 | cpu: [ia32] 383 | os: [win32] 384 | 385 | '@rollup/rollup-win32-x64-msvc@4.24.0': 386 | resolution: {integrity: sha512-fbMkAF7fufku0N2dE5TBXcNlg0pt0cJue4xBRE2Qc5Vqikxr4VCgKj/ht6SMdFcOacVA9rqF70APJ8RN/4vMJw==} 387 | cpu: [x64] 388 | os: [win32] 389 | 390 | '@rtsao/scc@1.1.0': 391 | resolution: {integrity: sha512-zt6OdqaDoOnJ1ZYsCYGt9YmWzDXl4vQdKTyJev62gFhRGKdx7mcT54V9KIjg+d2wi9EXsPvAPKe7i7WjfVWB8g==} 392 | 393 | '@sec-ant/readable-stream@0.4.1': 394 | resolution: {integrity: sha512-831qok9r2t8AlxLko40y2ebgSDhenenCatLVeW/uBtnHPyhHOvG0C7TvfgecV+wHzIm5KUICgzmVpWS+IMEAeg==} 395 | 396 | '@sindresorhus/merge-streams@4.0.0': 397 | resolution: {integrity: sha512-tlqY9xq5ukxTUZBmoOp+m61cqwQD5pHJtFY3Mn8CA8ps6yghLH/Hw8UPdqg4OLmFW3IFlcXnQNmo/dh8HzXYIQ==} 398 | engines: {node: '>=18'} 399 | 400 | '@types/estree@1.0.6': 401 | resolution: {integrity: sha512-AYnb1nQyY49te+VRAVgmzfcgjYS91mY5P0TKUDCLEM+gNnA+3T6rWITXRLYCpahpqSQbN5cE+gHpnPyXjHWxcw==} 402 | 403 | '@types/json-schema@7.0.15': 404 | resolution: {integrity: sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==} 405 | 406 | '@types/json5@0.0.29': 407 | resolution: {integrity: sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==} 408 | 409 | '@types/lodash@4.17.12': 410 | resolution: {integrity: sha512-sviUmCE8AYdaF/KIHLDJBQgeYzPBI0vf/17NaYehBJfYD1j6/L95Slh07NlyK2iNyBNaEkb3En2jRt+a8y3xZQ==} 411 | 412 | '@types/node@22.7.5': 413 | resolution: {integrity: sha512-jML7s2NAzMWc//QSJ1a3prpk78cOPchGvXJsC3C6R6PSMoooztvRVQEz89gmBTBY1SPMaqo5teB4uNHPdetShQ==} 414 | 415 | '@types/prompts@2.4.9': 416 | resolution: {integrity: sha512-qTxFi6Buiu8+50/+3DGIWLHM6QuWsEKugJnnP6iv2Mc4ncxE4A/OJkjuVOA+5X0X1S/nq5VJRa8Lu+nwcvbrKA==} 417 | 418 | '@typescript-eslint/eslint-plugin@8.9.0': 419 | resolution: {integrity: sha512-Y1n621OCy4m7/vTXNlCbMVp87zSd7NH0L9cXD8aIpOaNlzeWxIK4+Q19A68gSmTNRZn92UjocVUWDthGxtqHFg==} 420 | engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 421 | peerDependencies: 422 | '@typescript-eslint/parser': ^8.0.0 || ^8.0.0-alpha.0 423 | eslint: ^8.57.0 || ^9.0.0 424 | typescript: '*' 425 | peerDependenciesMeta: 426 | typescript: 427 | optional: true 428 | 429 | '@typescript-eslint/parser@8.9.0': 430 | resolution: {integrity: sha512-U+BLn2rqTTHnc4FL3FJjxaXptTxmf9sNftJK62XLz4+GxG3hLHm/SUNaaXP5Y4uTiuYoL5YLy4JBCJe3+t8awQ==} 431 | engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 432 | peerDependencies: 433 | eslint: ^8.57.0 || ^9.0.0 434 | typescript: '*' 435 | peerDependenciesMeta: 436 | typescript: 437 | optional: true 438 | 439 | '@typescript-eslint/scope-manager@8.9.0': 440 | resolution: {integrity: sha512-bZu9bUud9ym1cabmOYH9S6TnbWRzpklVmwqICeOulTCZ9ue2/pczWzQvt/cGj2r2o1RdKoZbuEMalJJSYw3pHQ==} 441 | engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 442 | 443 | '@typescript-eslint/type-utils@8.9.0': 444 | resolution: {integrity: sha512-JD+/pCqlKqAk5961vxCluK+clkppHY07IbV3vett97KOV+8C6l+CPEPwpUuiMwgbOz/qrN3Ke4zzjqbT+ls+1Q==} 445 | engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 446 | peerDependencies: 447 | typescript: '*' 448 | peerDependenciesMeta: 449 | typescript: 450 | optional: true 451 | 452 | '@typescript-eslint/types@8.9.0': 453 | resolution: {integrity: sha512-SjgkvdYyt1FAPhU9c6FiYCXrldwYYlIQLkuc+LfAhCna6ggp96ACncdtlbn8FmnG72tUkXclrDExOpEYf1nfJQ==} 454 | engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 455 | 456 | '@typescript-eslint/typescript-estree@8.9.0': 457 | resolution: {integrity: sha512-9iJYTgKLDG6+iqegehc5+EqE6sqaee7kb8vWpmHZ86EqwDjmlqNNHeqDVqb9duh+BY6WCNHfIGvuVU3Tf9Db0g==} 458 | engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 459 | peerDependencies: 460 | typescript: '*' 461 | peerDependenciesMeta: 462 | typescript: 463 | optional: true 464 | 465 | '@typescript-eslint/utils@8.9.0': 466 | resolution: {integrity: sha512-PKgMmaSo/Yg/F7kIZvrgrWa1+Vwn036CdNUvYFEkYbPwOH4i8xvkaRlu148W3vtheWK9ckKRIz7PBP5oUlkrvQ==} 467 | engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 468 | peerDependencies: 469 | eslint: ^8.57.0 || ^9.0.0 470 | 471 | '@typescript-eslint/visitor-keys@8.9.0': 472 | resolution: {integrity: sha512-Ht4y38ubk4L5/U8xKUBfKNYGmvKvA1CANoxiTRMM+tOLk3lbF3DvzZCxJCRSE+2GdCMSh6zq9VZJc3asc1XuAA==} 473 | engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 474 | 475 | acorn-jsx@5.3.2: 476 | resolution: {integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==} 477 | peerDependencies: 478 | acorn: ^6.0.0 || ^7.0.0 || ^8.0.0 479 | 480 | acorn@8.12.1: 481 | resolution: {integrity: sha512-tcpGyI9zbizT9JbV6oYE477V6mTlXvvi0T0G3SNIYE2apm/G5huBa1+K89VGeovbg+jycCrfhl3ADxErOuO6Jg==} 482 | engines: {node: '>=0.4.0'} 483 | hasBin: true 484 | 485 | ajv@6.12.6: 486 | resolution: {integrity: sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==} 487 | 488 | ansi-regex@5.0.1: 489 | resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==} 490 | engines: {node: '>=8'} 491 | 492 | ansi-regex@6.1.0: 493 | resolution: {integrity: sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA==} 494 | engines: {node: '>=12'} 495 | 496 | ansi-styles@4.3.0: 497 | resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==} 498 | engines: {node: '>=8'} 499 | 500 | ansi-styles@6.2.1: 501 | resolution: {integrity: sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==} 502 | engines: {node: '>=12'} 503 | 504 | any-promise@1.3.0: 505 | resolution: {integrity: sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A==} 506 | 507 | anymatch@3.1.3: 508 | resolution: {integrity: sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==} 509 | engines: {node: '>= 8'} 510 | 511 | argparse@2.0.1: 512 | resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==} 513 | 514 | array-buffer-byte-length@1.0.1: 515 | resolution: {integrity: sha512-ahC5W1xgou+KTXix4sAO8Ki12Q+jf4i0+tmk3sC+zgcynshkHxzpXdImBehiUYKKKDwvfFiJl1tZt6ewscS1Mg==} 516 | engines: {node: '>= 0.4'} 517 | 518 | array-includes@3.1.8: 519 | resolution: {integrity: sha512-itaWrbYbqpGXkGhZPGUulwnhVf5Hpy1xiCFsGqyIGglbBxmG5vSjxQen3/WGOjPpNEv1RtBLKxbmVXm8HpJStQ==} 520 | engines: {node: '>= 0.4'} 521 | 522 | array.prototype.findlastindex@1.2.5: 523 | resolution: {integrity: sha512-zfETvRFA8o7EiNn++N5f/kaCw221hrpGsDmcpndVupkPzEc1Wuf3VgC0qby1BbHs7f5DVYjgtEU2LLh5bqeGfQ==} 524 | engines: {node: '>= 0.4'} 525 | 526 | array.prototype.flat@1.3.2: 527 | resolution: {integrity: sha512-djYB+Zx2vLewY8RWlNCUdHjDXs2XOgm602S9E7P/UpHgfeHL00cRiIF+IN/G/aUJ7kGPb6yO/ErDI5V2s8iycA==} 528 | engines: {node: '>= 0.4'} 529 | 530 | array.prototype.flatmap@1.3.2: 531 | resolution: {integrity: sha512-Ewyx0c9PmpcsByhSW4r+9zDU7sGjFc86qf/kKtuSCRdhfbk0SNLLkaT5qvcHnRGgc5NP/ly/y+qkXkqONX54CQ==} 532 | engines: {node: '>= 0.4'} 533 | 534 | arraybuffer.prototype.slice@1.0.3: 535 | resolution: {integrity: sha512-bMxMKAjg13EBSVscxTaYA4mRc5t1UAXa2kXiGTNfZ079HIWXEkKmkgFrh/nJqamaLSrXO5H4WFFkPEaLJWbs3A==} 536 | engines: {node: '>= 0.4'} 537 | 538 | available-typed-arrays@1.0.7: 539 | resolution: {integrity: sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ==} 540 | engines: {node: '>= 0.4'} 541 | 542 | balanced-match@1.0.2: 543 | resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} 544 | 545 | base64-js@1.5.1: 546 | resolution: {integrity: sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==} 547 | 548 | binary-extensions@2.3.0: 549 | resolution: {integrity: sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==} 550 | engines: {node: '>=8'} 551 | 552 | bl@5.1.0: 553 | resolution: {integrity: sha512-tv1ZJHLfTDnXE6tMHv73YgSJaWR2AFuPwMntBe7XL/GBFHnT0CLnsHMogfk5+GzCDC5ZWarSCYaIGATZt9dNsQ==} 554 | 555 | brace-expansion@1.1.11: 556 | resolution: {integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==} 557 | 558 | brace-expansion@2.0.1: 559 | resolution: {integrity: sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==} 560 | 561 | braces@3.0.3: 562 | resolution: {integrity: sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==} 563 | engines: {node: '>=8'} 564 | 565 | buffer@6.0.3: 566 | resolution: {integrity: sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==} 567 | 568 | bundle-require@5.0.0: 569 | resolution: {integrity: sha512-GuziW3fSSmopcx4KRymQEJVbZUfqlCqcq7dvs6TYwKRZiegK/2buMxQTPs6MGlNv50wms1699qYO54R8XfRX4w==} 570 | engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} 571 | peerDependencies: 572 | esbuild: '>=0.18' 573 | 574 | cac@6.7.14: 575 | resolution: {integrity: sha512-b6Ilus+c3RrdDk+JhLKUAQfzzgLEPy6wcXqS7f/xe1EETvsDP6GORG7SFuOs6cID5YkqchW/LXZbX5bc8j7ZcQ==} 576 | engines: {node: '>=8'} 577 | 578 | call-bind@1.0.7: 579 | resolution: {integrity: sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w==} 580 | engines: {node: '>= 0.4'} 581 | 582 | callsites@3.1.0: 583 | resolution: {integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==} 584 | engines: {node: '>=6'} 585 | 586 | chalk@4.1.2: 587 | resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==} 588 | engines: {node: '>=10'} 589 | 590 | chalk@5.3.0: 591 | resolution: {integrity: sha512-dLitG79d+GV1Nb/VYcCDFivJeK1hiukt9QjRNVOsUtTy1rR1YJsmpGGTZ3qJos+uw7WmWF4wUwBd9jxjocFC2w==} 592 | engines: {node: ^12.17.0 || ^14.13 || >=16.0.0} 593 | 594 | chokidar@3.6.0: 595 | resolution: {integrity: sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==} 596 | engines: {node: '>= 8.10.0'} 597 | 598 | cli-cursor@4.0.0: 599 | resolution: {integrity: sha512-VGtlMu3x/4DOtIUwEkRezxUZ2lBacNJCHash0N0WeZDBS+7Ux1dm3XWAgWYxLJFMMdOeXMHXorshEFhbMSGelg==} 600 | engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} 601 | 602 | cli-spinners@2.9.2: 603 | resolution: {integrity: sha512-ywqV+5MmyL4E7ybXgKys4DugZbX0FC6LnwrhjuykIjnK9k8OQacQ7axGKnjDXWNhns0xot3bZI5h55H8yo9cJg==} 604 | engines: {node: '>=6'} 605 | 606 | clone@1.0.4: 607 | resolution: {integrity: sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg==} 608 | engines: {node: '>=0.8'} 609 | 610 | color-convert@2.0.1: 611 | resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==} 612 | engines: {node: '>=7.0.0'} 613 | 614 | color-name@1.1.4: 615 | resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==} 616 | 617 | commander@12.1.0: 618 | resolution: {integrity: sha512-Vw8qHK3bZM9y/P10u3Vib8o/DdkvA2OtPtZvD871QKjy74Wj1WSKFILMPRPSdUSx5RFK1arlJzEtA4PkFgnbuA==} 619 | engines: {node: '>=18'} 620 | 621 | commander@4.1.1: 622 | resolution: {integrity: sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==} 623 | engines: {node: '>= 6'} 624 | 625 | concat-map@0.0.1: 626 | resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==} 627 | 628 | consola@3.2.3: 629 | resolution: {integrity: sha512-I5qxpzLv+sJhTVEoLYNcTW+bThDCPsit0vLNKShZx6rLtpilNpmmeTPaeqJb9ZE9dV3DGaeby6Vuhrw38WjeyQ==} 630 | engines: {node: ^14.18.0 || >=16.10.0} 631 | 632 | cross-spawn@7.0.3: 633 | resolution: {integrity: sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==} 634 | engines: {node: '>= 8'} 635 | 636 | data-view-buffer@1.0.1: 637 | resolution: {integrity: sha512-0lht7OugA5x3iJLOWFhWK/5ehONdprk0ISXqVFn/NFrDu+cuc8iADFrGQz5BnRK7LLU3JmkbXSxaqX+/mXYtUA==} 638 | engines: {node: '>= 0.4'} 639 | 640 | data-view-byte-length@1.0.1: 641 | resolution: {integrity: sha512-4J7wRJD3ABAzr8wP+OcIcqq2dlUKp4DVflx++hs5h5ZKydWMI6/D/fAot+yh6g2tHh8fLFTvNOaVN357NvSrOQ==} 642 | engines: {node: '>= 0.4'} 643 | 644 | data-view-byte-offset@1.0.0: 645 | resolution: {integrity: sha512-t/Ygsytq+R995EJ5PZlD4Cu56sWa8InXySaViRzw9apusqsOO2bQP+SbYzAhR0pFKoB+43lYy8rWban9JSuXnA==} 646 | engines: {node: '>= 0.4'} 647 | 648 | debug@3.2.7: 649 | resolution: {integrity: sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==} 650 | peerDependencies: 651 | supports-color: '*' 652 | peerDependenciesMeta: 653 | supports-color: 654 | optional: true 655 | 656 | debug@4.3.7: 657 | resolution: {integrity: sha512-Er2nc/H7RrMXZBFCEim6TCmMk02Z8vLC2Rbi1KEBggpo0fS6l0S1nnapwmIi3yW/+GOJap1Krg4w0Hg80oCqgQ==} 658 | engines: {node: '>=6.0'} 659 | peerDependencies: 660 | supports-color: '*' 661 | peerDependenciesMeta: 662 | supports-color: 663 | optional: true 664 | 665 | deep-is@0.1.4: 666 | resolution: {integrity: sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==} 667 | 668 | defaults@1.0.4: 669 | resolution: {integrity: sha512-eFuaLoy/Rxalv2kr+lqMlUnrDWV+3j4pljOIJgLIhI058IQfWJ7vXhyEIHu+HtC738klGALYxOKDO0bQP3tg8A==} 670 | 671 | define-data-property@1.1.4: 672 | resolution: {integrity: sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==} 673 | engines: {node: '>= 0.4'} 674 | 675 | define-properties@1.2.1: 676 | resolution: {integrity: sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==} 677 | engines: {node: '>= 0.4'} 678 | 679 | doctrine@2.1.0: 680 | resolution: {integrity: sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==} 681 | engines: {node: '>=0.10.0'} 682 | 683 | eastasianwidth@0.2.0: 684 | resolution: {integrity: sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==} 685 | 686 | emoji-regex@8.0.0: 687 | resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==} 688 | 689 | emoji-regex@9.2.2: 690 | resolution: {integrity: sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==} 691 | 692 | es-abstract@1.23.3: 693 | resolution: {integrity: sha512-e+HfNH61Bj1X9/jLc5v1owaLYuHdeHHSQlkhCBiTK8rBvKaULl/beGMxwrMXjpYrv4pz22BlY570vVePA2ho4A==} 694 | engines: {node: '>= 0.4'} 695 | 696 | es-define-property@1.0.0: 697 | resolution: {integrity: sha512-jxayLKShrEqqzJ0eumQbVhTYQM27CfT1T35+gCgDFoL82JLsXqTJ76zv6A0YLOgEnLUMvLzsDsGIrl8NFpT2gQ==} 698 | engines: {node: '>= 0.4'} 699 | 700 | es-errors@1.3.0: 701 | resolution: {integrity: sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==} 702 | engines: {node: '>= 0.4'} 703 | 704 | es-object-atoms@1.0.0: 705 | resolution: {integrity: sha512-MZ4iQ6JwHOBQjahnjwaC1ZtIBH+2ohjamzAO3oaHcXYup7qxjF2fixyH+Q71voWHeOkI2q/TnJao/KfXYIZWbw==} 706 | engines: {node: '>= 0.4'} 707 | 708 | es-set-tostringtag@2.0.3: 709 | resolution: {integrity: sha512-3T8uNMC3OQTHkFUsFq8r/BwAXLHvU/9O9mE0fBc/MY5iq/8H7ncvO947LmYA6ldWw9Uh8Yhf25zu6n7nML5QWQ==} 710 | engines: {node: '>= 0.4'} 711 | 712 | es-shim-unscopables@1.0.2: 713 | resolution: {integrity: sha512-J3yBRXCzDu4ULnQwxyToo/OjdMx6akgVC7K6few0a7F/0wLtmKKN7I73AH5T2836UuXRqN7Qg+IIUw/+YJksRw==} 714 | 715 | es-to-primitive@1.2.1: 716 | resolution: {integrity: sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==} 717 | engines: {node: '>= 0.4'} 718 | 719 | esbuild@0.23.1: 720 | resolution: {integrity: sha512-VVNz/9Sa0bs5SELtn3f7qhJCDPCF5oMEl5cO9/SSinpE9hbPVvxbd572HH5AKiP7WD8INO53GgfDDhRjkylHEg==} 721 | engines: {node: '>=18'} 722 | hasBin: true 723 | 724 | escape-string-regexp@4.0.0: 725 | resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==} 726 | engines: {node: '>=10'} 727 | 728 | eslint-import-resolver-node@0.3.9: 729 | resolution: {integrity: sha512-WFj2isz22JahUv+B788TlO3N6zL3nNJGU8CcZbPZvVEkBPaJdCV4vy5wyghty5ROFbCRnm132v8BScu5/1BQ8g==} 730 | 731 | eslint-module-utils@2.12.0: 732 | resolution: {integrity: sha512-wALZ0HFoytlyh/1+4wuZ9FJCD/leWHQzzrxJ8+rebyReSLk7LApMyd3WJaLVoN+D5+WIdJyDK1c6JnE65V4Zyg==} 733 | engines: {node: '>=4'} 734 | peerDependencies: 735 | '@typescript-eslint/parser': '*' 736 | eslint: '*' 737 | eslint-import-resolver-node: '*' 738 | eslint-import-resolver-typescript: '*' 739 | eslint-import-resolver-webpack: '*' 740 | peerDependenciesMeta: 741 | '@typescript-eslint/parser': 742 | optional: true 743 | eslint: 744 | optional: true 745 | eslint-import-resolver-node: 746 | optional: true 747 | eslint-import-resolver-typescript: 748 | optional: true 749 | eslint-import-resolver-webpack: 750 | optional: true 751 | 752 | eslint-plugin-import@2.31.0: 753 | resolution: {integrity: sha512-ixmkI62Rbc2/w8Vfxyh1jQRTdRTF52VxwRVHl/ykPAmqG+Nb7/kNn+byLP0LxPgI7zWA16Jt82SybJInmMia3A==} 754 | engines: {node: '>=4'} 755 | peerDependencies: 756 | '@typescript-eslint/parser': '*' 757 | eslint: ^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 || ^8 || ^9 758 | peerDependenciesMeta: 759 | '@typescript-eslint/parser': 760 | optional: true 761 | 762 | eslint-plugin-unused-imports@4.1.4: 763 | resolution: {integrity: sha512-YptD6IzQjDardkl0POxnnRBhU1OEePMV0nd6siHaRBbd+lyh6NAhFEobiznKU7kTsSsDeSD62Pe7kAM1b7dAZQ==} 764 | peerDependencies: 765 | '@typescript-eslint/eslint-plugin': ^8.0.0-0 || ^7.0.0 || ^6.0.0 || ^5.0.0 766 | eslint: ^9.0.0 || ^8.0.0 767 | peerDependenciesMeta: 768 | '@typescript-eslint/eslint-plugin': 769 | optional: true 770 | 771 | eslint-scope@8.1.0: 772 | resolution: {integrity: sha512-14dSvlhaVhKKsa9Fx1l8A17s7ah7Ef7wCakJ10LYk6+GYmP9yDti2oq2SEwcyndt6knfcZyhyxwY3i9yL78EQw==} 773 | engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 774 | 775 | eslint-visitor-keys@3.4.3: 776 | resolution: {integrity: sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==} 777 | engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} 778 | 779 | eslint-visitor-keys@4.1.0: 780 | resolution: {integrity: sha512-Q7lok0mqMUSf5a/AdAZkA5a/gHcO6snwQClVNNvFKCAVlxXucdU8pKydU5ZVZjBx5xr37vGbFFWtLQYreLzrZg==} 781 | engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 782 | 783 | eslint@9.12.0: 784 | resolution: {integrity: sha512-UVIOlTEWxwIopRL1wgSQYdnVDcEvs2wyaO6DGo5mXqe3r16IoCNWkR29iHhyaP4cICWjbgbmFUGAhh0GJRuGZw==} 785 | engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 786 | hasBin: true 787 | peerDependencies: 788 | jiti: '*' 789 | peerDependenciesMeta: 790 | jiti: 791 | optional: true 792 | 793 | espree@10.2.0: 794 | resolution: {integrity: sha512-upbkBJbckcCNBDBDXEbuhjbP68n+scUd3k/U2EkyM9nw+I/jPiL4cLF/Al06CF96wRltFda16sxDFrxsI1v0/g==} 795 | engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 796 | 797 | esquery@1.6.0: 798 | resolution: {integrity: sha512-ca9pw9fomFcKPvFLXhBKUK90ZvGibiGOvRJNbjljY7s7uq/5YO4BOzcYtJqExdx99rF6aAcnRxHmcUHcz6sQsg==} 799 | engines: {node: '>=0.10'} 800 | 801 | esrecurse@4.3.0: 802 | resolution: {integrity: sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==} 803 | engines: {node: '>=4.0'} 804 | 805 | estraverse@5.3.0: 806 | resolution: {integrity: sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==} 807 | engines: {node: '>=4.0'} 808 | 809 | esutils@2.0.3: 810 | resolution: {integrity: sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==} 811 | engines: {node: '>=0.10.0'} 812 | 813 | execa@5.1.1: 814 | resolution: {integrity: sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==} 815 | engines: {node: '>=10'} 816 | 817 | execa@9.4.0: 818 | resolution: {integrity: sha512-yKHlle2YGxZE842MERVIplWwNH5VYmqqcPFgtnlU//K8gxuFFXu0pwd/CrfXTumFpeEiufsP7+opT/bPJa1yVw==} 819 | engines: {node: ^18.19.0 || >=20.5.0} 820 | 821 | fast-deep-equal@3.1.3: 822 | resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==} 823 | 824 | fast-glob@3.3.2: 825 | resolution: {integrity: sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==} 826 | engines: {node: '>=8.6.0'} 827 | 828 | fast-json-stable-stringify@2.1.0: 829 | resolution: {integrity: sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==} 830 | 831 | fast-levenshtein@2.0.6: 832 | resolution: {integrity: sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==} 833 | 834 | fastq@1.17.1: 835 | resolution: {integrity: sha512-sRVD3lWVIXWg6By68ZN7vho9a1pQcN/WBFaAAsDDFzlJjvoGx0P8z7V1t72grFJfJhu3YPZBuu25f7Kaw2jN1w==} 836 | 837 | fdir@6.4.0: 838 | resolution: {integrity: sha512-3oB133prH1o4j/L5lLW7uOCF1PlD+/It2L0eL/iAqWMB91RBbqTewABqxhj0ibBd90EEmWZq7ntIWzVaWcXTGQ==} 839 | peerDependencies: 840 | picomatch: ^3 || ^4 841 | peerDependenciesMeta: 842 | picomatch: 843 | optional: true 844 | 845 | figures@6.1.0: 846 | resolution: {integrity: sha512-d+l3qxjSesT4V7v2fh+QnmFnUWv9lSpjarhShNTgBOfA0ttejbQUAlHLitbjkoRiDulW0OPoQPYIGhIC8ohejg==} 847 | engines: {node: '>=18'} 848 | 849 | file-entry-cache@8.0.0: 850 | resolution: {integrity: sha512-XXTUwCvisa5oacNGRP9SfNtYBNAMi+RPwBFmblZEF7N7swHYQS6/Zfk7SRwx4D5j3CH211YNRco1DEMNVfZCnQ==} 851 | engines: {node: '>=16.0.0'} 852 | 853 | fill-range@7.1.1: 854 | resolution: {integrity: sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==} 855 | engines: {node: '>=8'} 856 | 857 | find-up@5.0.0: 858 | resolution: {integrity: sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==} 859 | engines: {node: '>=10'} 860 | 861 | flat-cache@4.0.1: 862 | resolution: {integrity: sha512-f7ccFPK3SXFHpx15UIGyRJ/FJQctuKZ0zVuN3frBo4HnK3cay9VEW0R6yPYFHC0AgqhukPzKjq22t5DmAyqGyw==} 863 | engines: {node: '>=16'} 864 | 865 | flatted@3.3.1: 866 | resolution: {integrity: sha512-X8cqMLLie7KsNUDSdzeN8FYK9rEt4Dt67OsG/DNGnYTSDBG4uFAJFBnUeiV+zCVAvwFy56IjM9sH51jVaEhNxw==} 867 | 868 | for-each@0.3.3: 869 | resolution: {integrity: sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==} 870 | 871 | foreground-child@3.3.0: 872 | resolution: {integrity: sha512-Ld2g8rrAyMYFXBhEqMz8ZAHBi4J4uS1i/CxGMDnjyFWddMXLVcDp051DZfu+t7+ab7Wv6SMqpWmyFIj5UbfFvg==} 873 | engines: {node: '>=14'} 874 | 875 | fsevents@2.3.3: 876 | resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==} 877 | engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} 878 | os: [darwin] 879 | 880 | function-bind@1.1.2: 881 | resolution: {integrity: sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==} 882 | 883 | function.prototype.name@1.1.6: 884 | resolution: {integrity: sha512-Z5kx79swU5P27WEayXM1tBi5Ze/lbIyiNgU3qyXUOf9b2rgXYyF9Dy9Cx+IQv/Lc8WCG6L82zwUPpSS9hGehIg==} 885 | engines: {node: '>= 0.4'} 886 | 887 | functions-have-names@1.2.3: 888 | resolution: {integrity: sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==} 889 | 890 | get-intrinsic@1.2.4: 891 | resolution: {integrity: sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ==} 892 | engines: {node: '>= 0.4'} 893 | 894 | get-stream@6.0.1: 895 | resolution: {integrity: sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==} 896 | engines: {node: '>=10'} 897 | 898 | get-stream@9.0.1: 899 | resolution: {integrity: sha512-kVCxPF3vQM/N0B1PmoqVUqgHP+EeVjmZSQn+1oCRPxd2P21P2F19lIgbR3HBosbB1PUhOAoctJnfEn2GbN2eZA==} 900 | engines: {node: '>=18'} 901 | 902 | get-symbol-description@1.0.2: 903 | resolution: {integrity: sha512-g0QYk1dZBxGwk+Ngc+ltRH2IBp2f7zBkBMBJZCDerh6EhlhSR6+9irMCuT/09zD6qkarHUSn529sK/yL4S27mg==} 904 | engines: {node: '>= 0.4'} 905 | 906 | glob-parent@5.1.2: 907 | resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==} 908 | engines: {node: '>= 6'} 909 | 910 | glob-parent@6.0.2: 911 | resolution: {integrity: sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==} 912 | engines: {node: '>=10.13.0'} 913 | 914 | glob@10.4.5: 915 | resolution: {integrity: sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==} 916 | hasBin: true 917 | 918 | globals@14.0.0: 919 | resolution: {integrity: sha512-oahGvuMGQlPw/ivIYBjVSrWAfWLBeku5tpPE2fOPLi+WHffIWbuh2tCjhyQhTBPMf5E9jDEH4FOmTYgYwbKwtQ==} 920 | engines: {node: '>=18'} 921 | 922 | globalthis@1.0.4: 923 | resolution: {integrity: sha512-DpLKbNU4WylpxJykQujfCcwYWiV/Jhm50Goo0wrVILAv5jOr9d+H+UR3PhSCD2rCCEIg0uc+G+muBTwD54JhDQ==} 924 | engines: {node: '>= 0.4'} 925 | 926 | gopd@1.0.1: 927 | resolution: {integrity: sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==} 928 | 929 | graphemer@1.4.0: 930 | resolution: {integrity: sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==} 931 | 932 | has-bigints@1.0.2: 933 | resolution: {integrity: sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==} 934 | 935 | has-flag@4.0.0: 936 | resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==} 937 | engines: {node: '>=8'} 938 | 939 | has-property-descriptors@1.0.2: 940 | resolution: {integrity: sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==} 941 | 942 | has-proto@1.0.3: 943 | resolution: {integrity: sha512-SJ1amZAJUiZS+PhsVLf5tGydlaVB8EdFpaSO4gmiUKUOxk8qzn5AIy4ZeJUmh22znIdk/uMAUT2pl3FxzVUH+Q==} 944 | engines: {node: '>= 0.4'} 945 | 946 | has-symbols@1.0.3: 947 | resolution: {integrity: sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==} 948 | engines: {node: '>= 0.4'} 949 | 950 | has-tostringtag@1.0.2: 951 | resolution: {integrity: sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==} 952 | engines: {node: '>= 0.4'} 953 | 954 | hasown@2.0.2: 955 | resolution: {integrity: sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==} 956 | engines: {node: '>= 0.4'} 957 | 958 | human-signals@2.1.0: 959 | resolution: {integrity: sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==} 960 | engines: {node: '>=10.17.0'} 961 | 962 | human-signals@8.0.0: 963 | resolution: {integrity: sha512-/1/GPCpDUCCYwlERiYjxoczfP0zfvZMU/OWgQPMya9AbAE24vseigFdhAMObpc8Q4lc/kjutPfUddDYyAmejnA==} 964 | engines: {node: '>=18.18.0'} 965 | 966 | ieee754@1.2.1: 967 | resolution: {integrity: sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==} 968 | 969 | ignore@5.3.2: 970 | resolution: {integrity: sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==} 971 | engines: {node: '>= 4'} 972 | 973 | import-fresh@3.3.0: 974 | resolution: {integrity: sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==} 975 | engines: {node: '>=6'} 976 | 977 | imurmurhash@0.1.4: 978 | resolution: {integrity: sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==} 979 | engines: {node: '>=0.8.19'} 980 | 981 | inherits@2.0.4: 982 | resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==} 983 | 984 | internal-slot@1.0.7: 985 | resolution: {integrity: sha512-NGnrKwXzSms2qUUih/ILZ5JBqNTSa1+ZmP6flaIp6KmSElgE9qdndzS3cqjrDovwFdmwsGsLdeFgB6suw+1e9g==} 986 | engines: {node: '>= 0.4'} 987 | 988 | is-array-buffer@3.0.4: 989 | resolution: {integrity: sha512-wcjaerHw0ydZwfhiKbXJWLDY8A7yV7KhjQOpb83hGgGfId/aQa4TOvwyzn2PuswW2gPCYEL/nEAiSVpdOj1lXw==} 990 | engines: {node: '>= 0.4'} 991 | 992 | is-bigint@1.0.4: 993 | resolution: {integrity: sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==} 994 | 995 | is-binary-path@2.1.0: 996 | resolution: {integrity: sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==} 997 | engines: {node: '>=8'} 998 | 999 | is-boolean-object@1.1.2: 1000 | resolution: {integrity: sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==} 1001 | engines: {node: '>= 0.4'} 1002 | 1003 | is-callable@1.2.7: 1004 | resolution: {integrity: sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==} 1005 | engines: {node: '>= 0.4'} 1006 | 1007 | is-core-module@2.15.1: 1008 | resolution: {integrity: sha512-z0vtXSwucUJtANQWldhbtbt7BnL0vxiFjIdDLAatwhDYty2bad6s+rijD6Ri4YuYJubLzIJLUidCh09e1djEVQ==} 1009 | engines: {node: '>= 0.4'} 1010 | 1011 | is-data-view@1.0.1: 1012 | resolution: {integrity: sha512-AHkaJrsUVW6wq6JS8y3JnM/GJF/9cf+k20+iDzlSaJrinEo5+7vRiteOSwBhHRiAyQATN1AmY4hwzxJKPmYf+w==} 1013 | engines: {node: '>= 0.4'} 1014 | 1015 | is-date-object@1.0.5: 1016 | resolution: {integrity: sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==} 1017 | engines: {node: '>= 0.4'} 1018 | 1019 | is-extglob@2.1.1: 1020 | resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==} 1021 | engines: {node: '>=0.10.0'} 1022 | 1023 | is-fullwidth-code-point@3.0.0: 1024 | resolution: {integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==} 1025 | engines: {node: '>=8'} 1026 | 1027 | is-glob@4.0.3: 1028 | resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==} 1029 | engines: {node: '>=0.10.0'} 1030 | 1031 | is-interactive@2.0.0: 1032 | resolution: {integrity: sha512-qP1vozQRI+BMOPcjFzrjXuQvdak2pHNUMZoeG2eRbiSqyvbEf/wQtEOTOX1guk6E3t36RkaqiSt8A/6YElNxLQ==} 1033 | engines: {node: '>=12'} 1034 | 1035 | is-negative-zero@2.0.3: 1036 | resolution: {integrity: sha512-5KoIu2Ngpyek75jXodFvnafB6DJgr3u8uuK0LEZJjrU19DrMD3EVERaR8sjz8CCGgpZvxPl9SuE1GMVPFHx1mw==} 1037 | engines: {node: '>= 0.4'} 1038 | 1039 | is-number-object@1.0.7: 1040 | resolution: {integrity: sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ==} 1041 | engines: {node: '>= 0.4'} 1042 | 1043 | is-number@7.0.0: 1044 | resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==} 1045 | engines: {node: '>=0.12.0'} 1046 | 1047 | is-plain-obj@4.1.0: 1048 | resolution: {integrity: sha512-+Pgi+vMuUNkJyExiMBt5IlFoMyKnr5zhJ4Uspz58WOhBF5QoIZkFyNHIbBAtHwzVAgk5RtndVNsDRN61/mmDqg==} 1049 | engines: {node: '>=12'} 1050 | 1051 | is-regex@1.1.4: 1052 | resolution: {integrity: sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==} 1053 | engines: {node: '>= 0.4'} 1054 | 1055 | is-shared-array-buffer@1.0.3: 1056 | resolution: {integrity: sha512-nA2hv5XIhLR3uVzDDfCIknerhx8XUKnstuOERPNNIinXG7v9u+ohXF67vxm4TPTEPU6lm61ZkwP3c9PCB97rhg==} 1057 | engines: {node: '>= 0.4'} 1058 | 1059 | is-stream@2.0.1: 1060 | resolution: {integrity: sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==} 1061 | engines: {node: '>=8'} 1062 | 1063 | is-stream@4.0.1: 1064 | resolution: {integrity: sha512-Dnz92NInDqYckGEUJv689RbRiTSEHCQ7wOVeALbkOz999YpqT46yMRIGtSNl2iCL1waAZSx40+h59NV/EwzV/A==} 1065 | engines: {node: '>=18'} 1066 | 1067 | is-string@1.0.7: 1068 | resolution: {integrity: sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==} 1069 | engines: {node: '>= 0.4'} 1070 | 1071 | is-symbol@1.0.4: 1072 | resolution: {integrity: sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==} 1073 | engines: {node: '>= 0.4'} 1074 | 1075 | is-typed-array@1.1.13: 1076 | resolution: {integrity: sha512-uZ25/bUAlUY5fR4OKT4rZQEBrzQWYV9ZJYGGsUmEJ6thodVJ1HX64ePQ6Z0qPWP+m+Uq6e9UugrE38jeYsDSMw==} 1077 | engines: {node: '>= 0.4'} 1078 | 1079 | is-unicode-supported@1.3.0: 1080 | resolution: {integrity: sha512-43r2mRvz+8JRIKnWJ+3j8JtjRKZ6GmjzfaE/qiBJnikNnYv/6bagRJ1kUhNk8R5EX/GkobD+r+sfxCPJsiKBLQ==} 1081 | engines: {node: '>=12'} 1082 | 1083 | is-unicode-supported@2.1.0: 1084 | resolution: {integrity: sha512-mE00Gnza5EEB3Ds0HfMyllZzbBrmLOX3vfWoj9A9PEnTfratQ/BcaJOuMhnkhjXvb2+FkY3VuHqtAGpTPmglFQ==} 1085 | engines: {node: '>=18'} 1086 | 1087 | is-weakref@1.0.2: 1088 | resolution: {integrity: sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==} 1089 | 1090 | isarray@2.0.5: 1091 | resolution: {integrity: sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==} 1092 | 1093 | isexe@2.0.0: 1094 | resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==} 1095 | 1096 | jackspeak@3.4.3: 1097 | resolution: {integrity: sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==} 1098 | 1099 | jiti@1.21.6: 1100 | resolution: {integrity: sha512-2yTgeWTWzMWkHu6Jp9NKgePDaYHbntiwvYuuJLbbN9vl7DC9DvXKOB2BC3ZZ92D3cvV/aflH0osDfwpHepQ53w==} 1101 | hasBin: true 1102 | 1103 | joycon@3.1.1: 1104 | resolution: {integrity: sha512-34wB/Y7MW7bzjKRjUKTa46I2Z7eV62Rkhva+KkopW7Qvv/OSWBqvkSY7vusOPrNuZcUG3tApvdVgNB8POj3SPw==} 1105 | engines: {node: '>=10'} 1106 | 1107 | js-yaml@4.1.0: 1108 | resolution: {integrity: sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==} 1109 | hasBin: true 1110 | 1111 | json-buffer@3.0.1: 1112 | resolution: {integrity: sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==} 1113 | 1114 | json-schema-traverse@0.4.1: 1115 | resolution: {integrity: sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==} 1116 | 1117 | json-stable-stringify-without-jsonify@1.0.1: 1118 | resolution: {integrity: sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==} 1119 | 1120 | json5@1.0.2: 1121 | resolution: {integrity: sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==} 1122 | hasBin: true 1123 | 1124 | keyv@4.5.4: 1125 | resolution: {integrity: sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==} 1126 | 1127 | kleur@3.0.3: 1128 | resolution: {integrity: sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==} 1129 | engines: {node: '>=6'} 1130 | 1131 | levn@0.4.1: 1132 | resolution: {integrity: sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==} 1133 | engines: {node: '>= 0.8.0'} 1134 | 1135 | lilconfig@3.1.2: 1136 | resolution: {integrity: sha512-eop+wDAvpItUys0FWkHIKeC9ybYrTGbU41U5K7+bttZZeohvnY7M9dZ5kB21GNWiFT2q1OoPTvncPCgSOVO5ow==} 1137 | engines: {node: '>=14'} 1138 | 1139 | lines-and-columns@1.2.4: 1140 | resolution: {integrity: sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==} 1141 | 1142 | load-tsconfig@0.2.5: 1143 | resolution: {integrity: sha512-IXO6OCs9yg8tMKzfPZ1YmheJbZCiEsnBdcB03l0OcfK9prKnJb96siuHCr5Fl37/yo9DnKU+TLpxzTUspw9shg==} 1144 | engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} 1145 | 1146 | locate-path@6.0.0: 1147 | resolution: {integrity: sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==} 1148 | engines: {node: '>=10'} 1149 | 1150 | lodash.merge@4.6.2: 1151 | resolution: {integrity: sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==} 1152 | 1153 | lodash.sortby@4.7.0: 1154 | resolution: {integrity: sha512-HDWXG8isMntAyRF5vZ7xKuEvOhT4AhlRt/3czTSjvGUxjYCBVRQY48ViDHyfYz9VIoBkW4TMGQNapx+l3RUwdA==} 1155 | 1156 | lodash@4.17.21: 1157 | resolution: {integrity: sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==} 1158 | 1159 | log-symbols@5.1.0: 1160 | resolution: {integrity: sha512-l0x2DvrW294C9uDCoQe1VSU4gf529FkSZ6leBl4TiqZH/e+0R7hSfHQBNut2mNygDgHwvYHfFLn6Oxb3VWj2rA==} 1161 | engines: {node: '>=12'} 1162 | 1163 | lru-cache@10.4.3: 1164 | resolution: {integrity: sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==} 1165 | 1166 | merge-stream@2.0.0: 1167 | resolution: {integrity: sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==} 1168 | 1169 | merge2@1.4.1: 1170 | resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==} 1171 | engines: {node: '>= 8'} 1172 | 1173 | micromatch@4.0.8: 1174 | resolution: {integrity: sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==} 1175 | engines: {node: '>=8.6'} 1176 | 1177 | mimic-fn@2.1.0: 1178 | resolution: {integrity: sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==} 1179 | engines: {node: '>=6'} 1180 | 1181 | minimatch@3.1.2: 1182 | resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==} 1183 | 1184 | minimatch@9.0.5: 1185 | resolution: {integrity: sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==} 1186 | engines: {node: '>=16 || 14 >=14.17'} 1187 | 1188 | minimist@1.2.8: 1189 | resolution: {integrity: sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==} 1190 | 1191 | minipass@7.1.2: 1192 | resolution: {integrity: sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==} 1193 | engines: {node: '>=16 || 14 >=14.17'} 1194 | 1195 | ms@2.1.3: 1196 | resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==} 1197 | 1198 | mz@2.7.0: 1199 | resolution: {integrity: sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==} 1200 | 1201 | natural-compare@1.4.0: 1202 | resolution: {integrity: sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==} 1203 | 1204 | normalize-path@3.0.0: 1205 | resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==} 1206 | engines: {node: '>=0.10.0'} 1207 | 1208 | npm-run-path@4.0.1: 1209 | resolution: {integrity: sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==} 1210 | engines: {node: '>=8'} 1211 | 1212 | npm-run-path@6.0.0: 1213 | resolution: {integrity: sha512-9qny7Z9DsQU8Ou39ERsPU4OZQlSTP47ShQzuKZ6PRXpYLtIFgl/DEBYEXKlvcEa+9tHVcK8CF81Y2V72qaZhWA==} 1214 | engines: {node: '>=18'} 1215 | 1216 | object-assign@4.1.1: 1217 | resolution: {integrity: sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==} 1218 | engines: {node: '>=0.10.0'} 1219 | 1220 | object-inspect@1.13.2: 1221 | resolution: {integrity: sha512-IRZSRuzJiynemAXPYtPe5BoI/RESNYR7TYm50MC5Mqbd3Jmw5y790sErYw3V6SryFJD64b74qQQs9wn5Bg/k3g==} 1222 | engines: {node: '>= 0.4'} 1223 | 1224 | object-keys@1.1.1: 1225 | resolution: {integrity: sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==} 1226 | engines: {node: '>= 0.4'} 1227 | 1228 | object.assign@4.1.5: 1229 | resolution: {integrity: sha512-byy+U7gp+FVwmyzKPYhW2h5l3crpmGsxl7X2s8y43IgxvG4g3QZ6CffDtsNQy1WsmZpQbO+ybo0AlW7TY6DcBQ==} 1230 | engines: {node: '>= 0.4'} 1231 | 1232 | object.fromentries@2.0.8: 1233 | resolution: {integrity: sha512-k6E21FzySsSK5a21KRADBd/NGneRegFO5pLHfdQLpRDETUNJueLXs3WCzyQ3tFRDYgbq3KHGXfTbi2bs8WQ6rQ==} 1234 | engines: {node: '>= 0.4'} 1235 | 1236 | object.groupby@1.0.3: 1237 | resolution: {integrity: sha512-+Lhy3TQTuzXI5hevh8sBGqbmurHbbIjAi0Z4S63nthVLmLxfbj4T54a4CfZrXIrt9iP4mVAPYMo/v99taj3wjQ==} 1238 | engines: {node: '>= 0.4'} 1239 | 1240 | object.values@1.2.0: 1241 | resolution: {integrity: sha512-yBYjY9QX2hnRmZHAjG/f13MzmBzxzYgQhFrke06TTyKY5zSTEqkOeukBzIdVA3j3ulu8Qa3MbVFShV7T2RmGtQ==} 1242 | engines: {node: '>= 0.4'} 1243 | 1244 | onetime@5.1.2: 1245 | resolution: {integrity: sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==} 1246 | engines: {node: '>=6'} 1247 | 1248 | optionator@0.9.4: 1249 | resolution: {integrity: sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==} 1250 | engines: {node: '>= 0.8.0'} 1251 | 1252 | ora@6.3.1: 1253 | resolution: {integrity: sha512-ERAyNnZOfqM+Ao3RAvIXkYh5joP220yf59gVe2X/cI6SiCxIdi4c9HZKZD8R6q/RDXEje1THBju6iExiSsgJaQ==} 1254 | engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} 1255 | 1256 | p-limit@3.1.0: 1257 | resolution: {integrity: sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==} 1258 | engines: {node: '>=10'} 1259 | 1260 | p-locate@5.0.0: 1261 | resolution: {integrity: sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==} 1262 | engines: {node: '>=10'} 1263 | 1264 | package-json-from-dist@1.0.1: 1265 | resolution: {integrity: sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw==} 1266 | 1267 | parent-module@1.0.1: 1268 | resolution: {integrity: sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==} 1269 | engines: {node: '>=6'} 1270 | 1271 | parse-ms@4.0.0: 1272 | resolution: {integrity: sha512-TXfryirbmq34y8QBwgqCVLi+8oA3oWx2eAnSn62ITyEhEYaWRlVZ2DvMM9eZbMs/RfxPu/PK/aBLyGj4IrqMHw==} 1273 | engines: {node: '>=18'} 1274 | 1275 | path-exists@4.0.0: 1276 | resolution: {integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==} 1277 | engines: {node: '>=8'} 1278 | 1279 | path-key@3.1.1: 1280 | resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==} 1281 | engines: {node: '>=8'} 1282 | 1283 | path-key@4.0.0: 1284 | resolution: {integrity: sha512-haREypq7xkM7ErfgIyA0z+Bj4AGKlMSdlQE2jvJo6huWD1EdkKYV+G/T4nq0YEF2vgTT8kqMFKo1uHn950r4SQ==} 1285 | engines: {node: '>=12'} 1286 | 1287 | path-parse@1.0.7: 1288 | resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==} 1289 | 1290 | path-scurry@1.11.1: 1291 | resolution: {integrity: sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==} 1292 | engines: {node: '>=16 || 14 >=14.18'} 1293 | 1294 | picocolors@1.1.0: 1295 | resolution: {integrity: sha512-TQ92mBOW0l3LeMeyLV6mzy/kWr8lkd/hp3mTg7wYK7zJhuBStmGMBG0BdeDZS/dZx1IukaX6Bk11zcln25o1Aw==} 1296 | 1297 | picomatch@2.3.1: 1298 | resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==} 1299 | engines: {node: '>=8.6'} 1300 | 1301 | picomatch@4.0.2: 1302 | resolution: {integrity: sha512-M7BAV6Rlcy5u+m6oPhAPFgJTzAioX/6B0DxyvDlo9l8+T3nLKbrczg2WLUyzd45L8RqfUMyGPzekbMvX2Ldkwg==} 1303 | engines: {node: '>=12'} 1304 | 1305 | pirates@4.0.6: 1306 | resolution: {integrity: sha512-saLsH7WeYYPiD25LDuLRRY/i+6HaPYr6G1OUlN39otzkSTxKnubR9RTxS3/Kk50s1g2JTgFwWQDQyplC5/SHZg==} 1307 | engines: {node: '>= 6'} 1308 | 1309 | possible-typed-array-names@1.0.0: 1310 | resolution: {integrity: sha512-d7Uw+eZoloe0EHDIYoe+bQ5WXnGMOpmiZFTuMWCwpjzzkL2nTjcKiAk4hh8TjnGye2TwWOk3UXucZ+3rbmBa8Q==} 1311 | engines: {node: '>= 0.4'} 1312 | 1313 | postcss-load-config@6.0.1: 1314 | resolution: {integrity: sha512-oPtTM4oerL+UXmx+93ytZVN82RrlY/wPUV8IeDxFrzIjXOLF1pN+EmKPLbubvKHT2HC20xXsCAH2Z+CKV6Oz/g==} 1315 | engines: {node: '>= 18'} 1316 | peerDependencies: 1317 | jiti: '>=1.21.0' 1318 | postcss: '>=8.0.9' 1319 | tsx: ^4.8.1 1320 | yaml: ^2.4.2 1321 | peerDependenciesMeta: 1322 | jiti: 1323 | optional: true 1324 | postcss: 1325 | optional: true 1326 | tsx: 1327 | optional: true 1328 | yaml: 1329 | optional: true 1330 | 1331 | prelude-ls@1.2.1: 1332 | resolution: {integrity: sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==} 1333 | engines: {node: '>= 0.8.0'} 1334 | 1335 | prettier@3.3.3: 1336 | resolution: {integrity: sha512-i2tDNA0O5IrMO757lfrdQZCc2jPNDVntV0m/+4whiDfWaTKfMNgR7Qz0NAeGz/nRqF4m5/6CLzbP4/liHt12Ew==} 1337 | engines: {node: '>=14'} 1338 | hasBin: true 1339 | 1340 | pretty-ms@9.1.0: 1341 | resolution: {integrity: sha512-o1piW0n3tgKIKCwk2vpM/vOV13zjJzvP37Ioze54YlTHE06m4tjEbzg9WsKkvTuyYln2DHjo5pY4qrZGI0otpw==} 1342 | engines: {node: '>=18'} 1343 | 1344 | prompts@2.4.2: 1345 | resolution: {integrity: sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q==} 1346 | engines: {node: '>= 6'} 1347 | 1348 | punycode@2.3.1: 1349 | resolution: {integrity: sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==} 1350 | engines: {node: '>=6'} 1351 | 1352 | queue-microtask@1.2.3: 1353 | resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==} 1354 | 1355 | readable-stream@3.6.2: 1356 | resolution: {integrity: sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==} 1357 | engines: {node: '>= 6'} 1358 | 1359 | readdirp@3.6.0: 1360 | resolution: {integrity: sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==} 1361 | engines: {node: '>=8.10.0'} 1362 | 1363 | regexp.prototype.flags@1.5.3: 1364 | resolution: {integrity: sha512-vqlC04+RQoFalODCbCumG2xIOvapzVMHwsyIGM/SIE8fRhFFsXeH8/QQ+s0T0kDAhKc4k30s73/0ydkHQz6HlQ==} 1365 | engines: {node: '>= 0.4'} 1366 | 1367 | resolve-from@4.0.0: 1368 | resolution: {integrity: sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==} 1369 | engines: {node: '>=4'} 1370 | 1371 | resolve-from@5.0.0: 1372 | resolution: {integrity: sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==} 1373 | engines: {node: '>=8'} 1374 | 1375 | resolve@1.22.8: 1376 | resolution: {integrity: sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==} 1377 | hasBin: true 1378 | 1379 | restore-cursor@4.0.0: 1380 | resolution: {integrity: sha512-I9fPXU9geO9bHOt9pHHOhOkYerIMsmVaWB0rA2AI9ERh/+x/i7MV5HKBNrg+ljO5eoPVgCcnFuRjJ9uH6I/3eg==} 1381 | engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} 1382 | 1383 | reusify@1.0.4: 1384 | resolution: {integrity: sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==} 1385 | engines: {iojs: '>=1.0.0', node: '>=0.10.0'} 1386 | 1387 | rollup@4.24.0: 1388 | resolution: {integrity: sha512-DOmrlGSXNk1DM0ljiQA+i+o0rSLhtii1je5wgk60j49d1jHT5YYttBv1iWOnYSTG+fZZESUOSNiAl89SIet+Cg==} 1389 | engines: {node: '>=18.0.0', npm: '>=8.0.0'} 1390 | hasBin: true 1391 | 1392 | run-parallel@1.2.0: 1393 | resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==} 1394 | 1395 | safe-array-concat@1.1.2: 1396 | resolution: {integrity: sha512-vj6RsCsWBCf19jIeHEfkRMw8DPiBb+DMXklQ/1SGDHOMlHdPUkZXFQ2YdplS23zESTijAcurb1aSgJA3AgMu1Q==} 1397 | engines: {node: '>=0.4'} 1398 | 1399 | safe-buffer@5.2.1: 1400 | resolution: {integrity: sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==} 1401 | 1402 | safe-regex-test@1.0.3: 1403 | resolution: {integrity: sha512-CdASjNJPvRa7roO6Ra/gLYBTzYzzPyyBXxIMdGW3USQLyjWEls2RgW5UBTXaQVp+OrpeCK3bLem8smtmheoRuw==} 1404 | engines: {node: '>= 0.4'} 1405 | 1406 | semver@6.3.1: 1407 | resolution: {integrity: sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==} 1408 | hasBin: true 1409 | 1410 | semver@7.6.3: 1411 | resolution: {integrity: sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==} 1412 | engines: {node: '>=10'} 1413 | hasBin: true 1414 | 1415 | set-function-length@1.2.2: 1416 | resolution: {integrity: sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==} 1417 | engines: {node: '>= 0.4'} 1418 | 1419 | set-function-name@2.0.2: 1420 | resolution: {integrity: sha512-7PGFlmtwsEADb0WYyvCMa1t+yke6daIG4Wirafur5kcf+MhUnPms1UeR0CKQdTZD81yESwMHbtn+TR+dMviakQ==} 1421 | engines: {node: '>= 0.4'} 1422 | 1423 | shebang-command@2.0.0: 1424 | resolution: {integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==} 1425 | engines: {node: '>=8'} 1426 | 1427 | shebang-regex@3.0.0: 1428 | resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==} 1429 | engines: {node: '>=8'} 1430 | 1431 | side-channel@1.0.6: 1432 | resolution: {integrity: sha512-fDW/EZ6Q9RiO8eFG8Hj+7u/oW+XrPTIChwCOM2+th2A6OblDtYYIpve9m+KvI9Z4C9qSEXlaGR6bTEYHReuglA==} 1433 | engines: {node: '>= 0.4'} 1434 | 1435 | signal-exit@3.0.7: 1436 | resolution: {integrity: sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==} 1437 | 1438 | signal-exit@4.1.0: 1439 | resolution: {integrity: sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==} 1440 | engines: {node: '>=14'} 1441 | 1442 | sisteransi@1.0.5: 1443 | resolution: {integrity: sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==} 1444 | 1445 | source-map@0.8.0-beta.0: 1446 | resolution: {integrity: sha512-2ymg6oRBpebeZi9UUNsgQ89bhx01TcTkmNTGnNO88imTmbSgy4nfujrgVEFKWpMTEGA11EDkTt7mqObTPdigIA==} 1447 | engines: {node: '>= 8'} 1448 | 1449 | stdin-discarder@0.1.0: 1450 | resolution: {integrity: sha512-xhV7w8S+bUwlPTb4bAOUQhv8/cSS5offJuX8GQGq32ONF0ZtDWKfkdomM3HMRA+LhX6um/FZ0COqlwsjD53LeQ==} 1451 | engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} 1452 | 1453 | string-width@4.2.3: 1454 | resolution: {integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==} 1455 | engines: {node: '>=8'} 1456 | 1457 | string-width@5.1.2: 1458 | resolution: {integrity: sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==} 1459 | engines: {node: '>=12'} 1460 | 1461 | string.prototype.trim@1.2.9: 1462 | resolution: {integrity: sha512-klHuCNxiMZ8MlsOihJhJEBJAiMVqU3Z2nEXWfWnIqjN0gEFS9J9+IxKozWWtQGcgoa1WUZzLjKPTr4ZHNFTFxw==} 1463 | engines: {node: '>= 0.4'} 1464 | 1465 | string.prototype.trimend@1.0.8: 1466 | resolution: {integrity: sha512-p73uL5VCHCO2BZZ6krwwQE3kCzM7NKmis8S//xEC6fQonchbum4eP6kR4DLEjQFO3Wnj3Fuo8NM0kOSjVdHjZQ==} 1467 | 1468 | string.prototype.trimstart@1.0.8: 1469 | resolution: {integrity: sha512-UXSH262CSZY1tfu3G3Secr6uGLCFVPMhIqHjlgCUtCCcgihYc/xKs9djMTMUOb2j1mVSeU8EU6NWc/iQKU6Gfg==} 1470 | engines: {node: '>= 0.4'} 1471 | 1472 | string_decoder@1.3.0: 1473 | resolution: {integrity: sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==} 1474 | 1475 | strip-ansi@6.0.1: 1476 | resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==} 1477 | engines: {node: '>=8'} 1478 | 1479 | strip-ansi@7.1.0: 1480 | resolution: {integrity: sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==} 1481 | engines: {node: '>=12'} 1482 | 1483 | strip-bom@3.0.0: 1484 | resolution: {integrity: sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==} 1485 | engines: {node: '>=4'} 1486 | 1487 | strip-final-newline@2.0.0: 1488 | resolution: {integrity: sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==} 1489 | engines: {node: '>=6'} 1490 | 1491 | strip-final-newline@4.0.0: 1492 | resolution: {integrity: sha512-aulFJcD6YK8V1G7iRB5tigAP4TsHBZZrOV8pjV++zdUwmeV8uzbY7yn6h9MswN62adStNZFuCIx4haBnRuMDaw==} 1493 | engines: {node: '>=18'} 1494 | 1495 | strip-json-comments@3.1.1: 1496 | resolution: {integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==} 1497 | engines: {node: '>=8'} 1498 | 1499 | sucrase@3.35.0: 1500 | resolution: {integrity: sha512-8EbVDiu9iN/nESwxeSxDKe0dunta1GOlHufmSSXxMD2z2/tMZpDMpvXQGsc+ajGo8y2uYUmixaSRUc/QPoQ0GA==} 1501 | engines: {node: '>=16 || 14 >=14.17'} 1502 | hasBin: true 1503 | 1504 | supports-color@7.2.0: 1505 | resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==} 1506 | engines: {node: '>=8'} 1507 | 1508 | supports-preserve-symlinks-flag@1.0.0: 1509 | resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==} 1510 | engines: {node: '>= 0.4'} 1511 | 1512 | text-table@0.2.0: 1513 | resolution: {integrity: sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==} 1514 | 1515 | thenify-all@1.6.0: 1516 | resolution: {integrity: sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA==} 1517 | engines: {node: '>=0.8'} 1518 | 1519 | thenify@3.3.1: 1520 | resolution: {integrity: sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw==} 1521 | 1522 | tinyglobby@0.2.9: 1523 | resolution: {integrity: sha512-8or1+BGEdk1Zkkw2ii16qSS7uVrQJPre5A9o/XkWPATkk23FZh/15BKFxPnlTy6vkljZxLqYCzzBMj30ZrSvjw==} 1524 | engines: {node: '>=12.0.0'} 1525 | 1526 | to-regex-range@5.0.1: 1527 | resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==} 1528 | engines: {node: '>=8.0'} 1529 | 1530 | tr46@1.0.1: 1531 | resolution: {integrity: sha512-dTpowEjclQ7Kgx5SdBkqRzVhERQXov8/l9Ft9dVM9fmg0W0KQSVaXX9T4i6twCPNtYiZM53lpSSUAwJbFPOHxA==} 1532 | 1533 | tree-kill@1.2.2: 1534 | resolution: {integrity: sha512-L0Orpi8qGpRG//Nd+H90vFB+3iHnue1zSSGmNOOCh1GLJ7rUKVwV2HvijphGQS2UmhUZewS9VgvxYIdgr+fG1A==} 1535 | hasBin: true 1536 | 1537 | ts-api-utils@1.3.0: 1538 | resolution: {integrity: sha512-UQMIo7pb8WRomKR1/+MFVLTroIvDVtMX3K6OUir8ynLyzB8Jeriont2bTAtmNPa1ekAgN7YPDyf6V+ygrdU+eQ==} 1539 | engines: {node: '>=16'} 1540 | peerDependencies: 1541 | typescript: '>=4.2.0' 1542 | 1543 | ts-interface-checker@0.1.13: 1544 | resolution: {integrity: sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA==} 1545 | 1546 | tsconfig-paths@3.15.0: 1547 | resolution: {integrity: sha512-2Ac2RgzDe/cn48GvOe3M+o82pEFewD3UPbyoUHHdKasHwJKjds4fLXWf/Ux5kATBKN20oaFGu+jbElp1pos0mg==} 1548 | 1549 | tsup@8.3.0: 1550 | resolution: {integrity: sha512-ALscEeyS03IomcuNdFdc0YWGVIkwH1Ws7nfTbAPuoILvEV2hpGQAY72LIOjglGo4ShWpZfpBqP/jpQVCzqYQag==} 1551 | engines: {node: '>=18'} 1552 | hasBin: true 1553 | peerDependencies: 1554 | '@microsoft/api-extractor': ^7.36.0 1555 | '@swc/core': ^1 1556 | postcss: ^8.4.12 1557 | typescript: '>=4.5.0' 1558 | peerDependenciesMeta: 1559 | '@microsoft/api-extractor': 1560 | optional: true 1561 | '@swc/core': 1562 | optional: true 1563 | postcss: 1564 | optional: true 1565 | typescript: 1566 | optional: true 1567 | 1568 | type-check@0.4.0: 1569 | resolution: {integrity: sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==} 1570 | engines: {node: '>= 0.8.0'} 1571 | 1572 | typed-array-buffer@1.0.2: 1573 | resolution: {integrity: sha512-gEymJYKZtKXzzBzM4jqa9w6Q1Jjm7x2d+sh19AdsD4wqnMPDYyvwpsIc2Q/835kHuo3BEQ7CjelGhfTsoBb2MQ==} 1574 | engines: {node: '>= 0.4'} 1575 | 1576 | typed-array-byte-length@1.0.1: 1577 | resolution: {integrity: sha512-3iMJ9q0ao7WE9tWcaYKIptkNBuOIcZCCT0d4MRvuuH88fEoEH62IuQe0OtraD3ebQEoTRk8XCBoknUNc1Y67pw==} 1578 | engines: {node: '>= 0.4'} 1579 | 1580 | typed-array-byte-offset@1.0.2: 1581 | resolution: {integrity: sha512-Ous0vodHa56FviZucS2E63zkgtgrACj7omjwd/8lTEMEPFFyjfixMZ1ZXenpgCFBBt4EC1J2XsyVS2gkG0eTFA==} 1582 | engines: {node: '>= 0.4'} 1583 | 1584 | typed-array-length@1.0.6: 1585 | resolution: {integrity: sha512-/OxDN6OtAk5KBpGb28T+HZc2M+ADtvRxXrKKbUwtsLgdoxgX13hyy7ek6bFRl5+aBs2yZzB0c4CnQfAtVypW/g==} 1586 | engines: {node: '>= 0.4'} 1587 | 1588 | typescript-eslint@8.9.0: 1589 | resolution: {integrity: sha512-AuD/FXGYRQyqyOBCpNLldMlsCGvmDNxptQ3Dp58/NXeB+FqyvTfXmMyba3PYa0Vi9ybnj7G8S/yd/4Cw8y47eA==} 1590 | engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 1591 | peerDependencies: 1592 | typescript: '*' 1593 | peerDependenciesMeta: 1594 | typescript: 1595 | optional: true 1596 | 1597 | typescript@5.5.4: 1598 | resolution: {integrity: sha512-Mtq29sKDAEYP7aljRgtPOpTvOfbwRWlS6dPRzwjdE+C0R4brX/GUyhHSecbHMFLNBLcJIPt9nl9yG5TZ1weH+Q==} 1599 | engines: {node: '>=14.17'} 1600 | hasBin: true 1601 | 1602 | unbox-primitive@1.0.2: 1603 | resolution: {integrity: sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==} 1604 | 1605 | undici-types@6.19.8: 1606 | resolution: {integrity: sha512-ve2KP6f/JnbPBFyobGHuerC9g1FYGn/F8n1LWTwNxCEzd6IfqTwUQcNXgEtmmQ6DlRrC1hrSrBnCZPokRrDHjw==} 1607 | 1608 | unicorn-magic@0.3.0: 1609 | resolution: {integrity: sha512-+QBBXBCvifc56fsbuxZQ6Sic3wqqc3WWaqxs58gvJrcOuN83HGTCwz3oS5phzU9LthRNE9VrJCFCLUgHeeFnfA==} 1610 | engines: {node: '>=18'} 1611 | 1612 | uri-js@4.4.1: 1613 | resolution: {integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==} 1614 | 1615 | util-deprecate@1.0.2: 1616 | resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==} 1617 | 1618 | wcwidth@1.0.1: 1619 | resolution: {integrity: sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg==} 1620 | 1621 | webidl-conversions@4.0.2: 1622 | resolution: {integrity: sha512-YQ+BmxuTgd6UXZW3+ICGfyqRyHXVlD5GtQr5+qjiNW7bF0cqrzX500HVXPBOvgXb5YnzDd+h0zqyv61KUD7+Sg==} 1623 | 1624 | whatwg-url@7.1.0: 1625 | resolution: {integrity: sha512-WUu7Rg1DroM7oQvGWfOiAK21n74Gg+T4elXEQYkOhtyLeWiJFoOGLXPKI/9gzIie9CtwVLm8wtw6YJdKyxSjeg==} 1626 | 1627 | which-boxed-primitive@1.0.2: 1628 | resolution: {integrity: sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==} 1629 | 1630 | which-typed-array@1.1.15: 1631 | resolution: {integrity: sha512-oV0jmFtUky6CXfkqehVvBP/LSWJ2sy4vWMioiENyJLePrBO/yKyV9OyJySfAKosh+RYkIl5zJCNZ8/4JncrpdA==} 1632 | engines: {node: '>= 0.4'} 1633 | 1634 | which@2.0.2: 1635 | resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==} 1636 | engines: {node: '>= 8'} 1637 | hasBin: true 1638 | 1639 | word-wrap@1.2.5: 1640 | resolution: {integrity: sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==} 1641 | engines: {node: '>=0.10.0'} 1642 | 1643 | wrap-ansi@7.0.0: 1644 | resolution: {integrity: sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==} 1645 | engines: {node: '>=10'} 1646 | 1647 | wrap-ansi@8.1.0: 1648 | resolution: {integrity: sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==} 1649 | engines: {node: '>=12'} 1650 | 1651 | yocto-queue@0.1.0: 1652 | resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==} 1653 | engines: {node: '>=10'} 1654 | 1655 | yoctocolors@2.1.1: 1656 | resolution: {integrity: sha512-GQHQqAopRhwU8Kt1DDM8NjibDXHC8eoh1erhGAJPEyveY9qqVeXvVikNKrDz69sHowPMorbPUrH/mx8c50eiBQ==} 1657 | engines: {node: '>=18'} 1658 | 1659 | zod@3.23.8: 1660 | resolution: {integrity: sha512-XBx9AXhXktjUqnepgTiE5flcKIYWi/rme0Eaj+5Y0lftuGBq+jyRu/md4WnuxqgP1ubdpNCsYEYPxrzVHD8d6g==} 1661 | 1662 | snapshots: 1663 | 1664 | '@esbuild/aix-ppc64@0.23.1': 1665 | optional: true 1666 | 1667 | '@esbuild/android-arm64@0.23.1': 1668 | optional: true 1669 | 1670 | '@esbuild/android-arm@0.23.1': 1671 | optional: true 1672 | 1673 | '@esbuild/android-x64@0.23.1': 1674 | optional: true 1675 | 1676 | '@esbuild/darwin-arm64@0.23.1': 1677 | optional: true 1678 | 1679 | '@esbuild/darwin-x64@0.23.1': 1680 | optional: true 1681 | 1682 | '@esbuild/freebsd-arm64@0.23.1': 1683 | optional: true 1684 | 1685 | '@esbuild/freebsd-x64@0.23.1': 1686 | optional: true 1687 | 1688 | '@esbuild/linux-arm64@0.23.1': 1689 | optional: true 1690 | 1691 | '@esbuild/linux-arm@0.23.1': 1692 | optional: true 1693 | 1694 | '@esbuild/linux-ia32@0.23.1': 1695 | optional: true 1696 | 1697 | '@esbuild/linux-loong64@0.23.1': 1698 | optional: true 1699 | 1700 | '@esbuild/linux-mips64el@0.23.1': 1701 | optional: true 1702 | 1703 | '@esbuild/linux-ppc64@0.23.1': 1704 | optional: true 1705 | 1706 | '@esbuild/linux-riscv64@0.23.1': 1707 | optional: true 1708 | 1709 | '@esbuild/linux-s390x@0.23.1': 1710 | optional: true 1711 | 1712 | '@esbuild/linux-x64@0.23.1': 1713 | optional: true 1714 | 1715 | '@esbuild/netbsd-x64@0.23.1': 1716 | optional: true 1717 | 1718 | '@esbuild/openbsd-arm64@0.23.1': 1719 | optional: true 1720 | 1721 | '@esbuild/openbsd-x64@0.23.1': 1722 | optional: true 1723 | 1724 | '@esbuild/sunos-x64@0.23.1': 1725 | optional: true 1726 | 1727 | '@esbuild/win32-arm64@0.23.1': 1728 | optional: true 1729 | 1730 | '@esbuild/win32-ia32@0.23.1': 1731 | optional: true 1732 | 1733 | '@esbuild/win32-x64@0.23.1': 1734 | optional: true 1735 | 1736 | '@eslint-community/eslint-utils@4.4.0(eslint@9.12.0(jiti@1.21.6))': 1737 | dependencies: 1738 | eslint: 9.12.0(jiti@1.21.6) 1739 | eslint-visitor-keys: 3.4.3 1740 | 1741 | '@eslint-community/regexpp@4.11.1': {} 1742 | 1743 | '@eslint/compat@1.2.0(eslint@9.12.0(jiti@1.21.6))': 1744 | optionalDependencies: 1745 | eslint: 9.12.0(jiti@1.21.6) 1746 | 1747 | '@eslint/config-array@0.18.0': 1748 | dependencies: 1749 | '@eslint/object-schema': 2.1.4 1750 | debug: 4.3.7 1751 | minimatch: 3.1.2 1752 | transitivePeerDependencies: 1753 | - supports-color 1754 | 1755 | '@eslint/core@0.6.0': {} 1756 | 1757 | '@eslint/eslintrc@3.1.0': 1758 | dependencies: 1759 | ajv: 6.12.6 1760 | debug: 4.3.7 1761 | espree: 10.2.0 1762 | globals: 14.0.0 1763 | ignore: 5.3.2 1764 | import-fresh: 3.3.0 1765 | js-yaml: 4.1.0 1766 | minimatch: 3.1.2 1767 | strip-json-comments: 3.1.1 1768 | transitivePeerDependencies: 1769 | - supports-color 1770 | 1771 | '@eslint/js@9.12.0': {} 1772 | 1773 | '@eslint/object-schema@2.1.4': {} 1774 | 1775 | '@eslint/plugin-kit@0.2.0': 1776 | dependencies: 1777 | levn: 0.4.1 1778 | 1779 | '@humanfs/core@0.19.0': {} 1780 | 1781 | '@humanfs/node@0.16.5': 1782 | dependencies: 1783 | '@humanfs/core': 0.19.0 1784 | '@humanwhocodes/retry': 0.3.1 1785 | 1786 | '@humanwhocodes/module-importer@1.0.1': {} 1787 | 1788 | '@humanwhocodes/retry@0.3.1': {} 1789 | 1790 | '@isaacs/cliui@8.0.2': 1791 | dependencies: 1792 | string-width: 5.1.2 1793 | string-width-cjs: string-width@4.2.3 1794 | strip-ansi: 7.1.0 1795 | strip-ansi-cjs: strip-ansi@6.0.1 1796 | wrap-ansi: 8.1.0 1797 | wrap-ansi-cjs: wrap-ansi@7.0.0 1798 | 1799 | '@jridgewell/gen-mapping@0.3.5': 1800 | dependencies: 1801 | '@jridgewell/set-array': 1.2.1 1802 | '@jridgewell/sourcemap-codec': 1.5.0 1803 | '@jridgewell/trace-mapping': 0.3.25 1804 | 1805 | '@jridgewell/resolve-uri@3.1.2': {} 1806 | 1807 | '@jridgewell/set-array@1.2.1': {} 1808 | 1809 | '@jridgewell/sourcemap-codec@1.5.0': {} 1810 | 1811 | '@jridgewell/trace-mapping@0.3.25': 1812 | dependencies: 1813 | '@jridgewell/resolve-uri': 3.1.2 1814 | '@jridgewell/sourcemap-codec': 1.5.0 1815 | 1816 | '@nodelib/fs.scandir@2.1.5': 1817 | dependencies: 1818 | '@nodelib/fs.stat': 2.0.5 1819 | run-parallel: 1.2.0 1820 | 1821 | '@nodelib/fs.stat@2.0.5': {} 1822 | 1823 | '@nodelib/fs.walk@1.2.8': 1824 | dependencies: 1825 | '@nodelib/fs.scandir': 2.1.5 1826 | fastq: 1.17.1 1827 | 1828 | '@pkgjs/parseargs@0.11.0': 1829 | optional: true 1830 | 1831 | '@rollup/rollup-android-arm-eabi@4.24.0': 1832 | optional: true 1833 | 1834 | '@rollup/rollup-android-arm64@4.24.0': 1835 | optional: true 1836 | 1837 | '@rollup/rollup-darwin-arm64@4.24.0': 1838 | optional: true 1839 | 1840 | '@rollup/rollup-darwin-x64@4.24.0': 1841 | optional: true 1842 | 1843 | '@rollup/rollup-linux-arm-gnueabihf@4.24.0': 1844 | optional: true 1845 | 1846 | '@rollup/rollup-linux-arm-musleabihf@4.24.0': 1847 | optional: true 1848 | 1849 | '@rollup/rollup-linux-arm64-gnu@4.24.0': 1850 | optional: true 1851 | 1852 | '@rollup/rollup-linux-arm64-musl@4.24.0': 1853 | optional: true 1854 | 1855 | '@rollup/rollup-linux-powerpc64le-gnu@4.24.0': 1856 | optional: true 1857 | 1858 | '@rollup/rollup-linux-riscv64-gnu@4.24.0': 1859 | optional: true 1860 | 1861 | '@rollup/rollup-linux-s390x-gnu@4.24.0': 1862 | optional: true 1863 | 1864 | '@rollup/rollup-linux-x64-gnu@4.24.0': 1865 | optional: true 1866 | 1867 | '@rollup/rollup-linux-x64-musl@4.24.0': 1868 | optional: true 1869 | 1870 | '@rollup/rollup-win32-arm64-msvc@4.24.0': 1871 | optional: true 1872 | 1873 | '@rollup/rollup-win32-ia32-msvc@4.24.0': 1874 | optional: true 1875 | 1876 | '@rollup/rollup-win32-x64-msvc@4.24.0': 1877 | optional: true 1878 | 1879 | '@rtsao/scc@1.1.0': {} 1880 | 1881 | '@sec-ant/readable-stream@0.4.1': {} 1882 | 1883 | '@sindresorhus/merge-streams@4.0.0': {} 1884 | 1885 | '@types/estree@1.0.6': {} 1886 | 1887 | '@types/json-schema@7.0.15': {} 1888 | 1889 | '@types/json5@0.0.29': {} 1890 | 1891 | '@types/lodash@4.17.12': {} 1892 | 1893 | '@types/node@22.7.5': 1894 | dependencies: 1895 | undici-types: 6.19.8 1896 | 1897 | '@types/prompts@2.4.9': 1898 | dependencies: 1899 | '@types/node': 22.7.5 1900 | kleur: 3.0.3 1901 | 1902 | '@typescript-eslint/eslint-plugin@8.9.0(@typescript-eslint/parser@8.9.0(eslint@9.12.0(jiti@1.21.6))(typescript@5.5.4))(eslint@9.12.0(jiti@1.21.6))(typescript@5.5.4)': 1903 | dependencies: 1904 | '@eslint-community/regexpp': 4.11.1 1905 | '@typescript-eslint/parser': 8.9.0(eslint@9.12.0(jiti@1.21.6))(typescript@5.5.4) 1906 | '@typescript-eslint/scope-manager': 8.9.0 1907 | '@typescript-eslint/type-utils': 8.9.0(eslint@9.12.0(jiti@1.21.6))(typescript@5.5.4) 1908 | '@typescript-eslint/utils': 8.9.0(eslint@9.12.0(jiti@1.21.6))(typescript@5.5.4) 1909 | '@typescript-eslint/visitor-keys': 8.9.0 1910 | eslint: 9.12.0(jiti@1.21.6) 1911 | graphemer: 1.4.0 1912 | ignore: 5.3.2 1913 | natural-compare: 1.4.0 1914 | ts-api-utils: 1.3.0(typescript@5.5.4) 1915 | optionalDependencies: 1916 | typescript: 5.5.4 1917 | transitivePeerDependencies: 1918 | - supports-color 1919 | 1920 | '@typescript-eslint/parser@8.9.0(eslint@9.12.0(jiti@1.21.6))(typescript@5.5.4)': 1921 | dependencies: 1922 | '@typescript-eslint/scope-manager': 8.9.0 1923 | '@typescript-eslint/types': 8.9.0 1924 | '@typescript-eslint/typescript-estree': 8.9.0(typescript@5.5.4) 1925 | '@typescript-eslint/visitor-keys': 8.9.0 1926 | debug: 4.3.7 1927 | eslint: 9.12.0(jiti@1.21.6) 1928 | optionalDependencies: 1929 | typescript: 5.5.4 1930 | transitivePeerDependencies: 1931 | - supports-color 1932 | 1933 | '@typescript-eslint/scope-manager@8.9.0': 1934 | dependencies: 1935 | '@typescript-eslint/types': 8.9.0 1936 | '@typescript-eslint/visitor-keys': 8.9.0 1937 | 1938 | '@typescript-eslint/type-utils@8.9.0(eslint@9.12.0(jiti@1.21.6))(typescript@5.5.4)': 1939 | dependencies: 1940 | '@typescript-eslint/typescript-estree': 8.9.0(typescript@5.5.4) 1941 | '@typescript-eslint/utils': 8.9.0(eslint@9.12.0(jiti@1.21.6))(typescript@5.5.4) 1942 | debug: 4.3.7 1943 | ts-api-utils: 1.3.0(typescript@5.5.4) 1944 | optionalDependencies: 1945 | typescript: 5.5.4 1946 | transitivePeerDependencies: 1947 | - eslint 1948 | - supports-color 1949 | 1950 | '@typescript-eslint/types@8.9.0': {} 1951 | 1952 | '@typescript-eslint/typescript-estree@8.9.0(typescript@5.5.4)': 1953 | dependencies: 1954 | '@typescript-eslint/types': 8.9.0 1955 | '@typescript-eslint/visitor-keys': 8.9.0 1956 | debug: 4.3.7 1957 | fast-glob: 3.3.2 1958 | is-glob: 4.0.3 1959 | minimatch: 9.0.5 1960 | semver: 7.6.3 1961 | ts-api-utils: 1.3.0(typescript@5.5.4) 1962 | optionalDependencies: 1963 | typescript: 5.5.4 1964 | transitivePeerDependencies: 1965 | - supports-color 1966 | 1967 | '@typescript-eslint/utils@8.9.0(eslint@9.12.0(jiti@1.21.6))(typescript@5.5.4)': 1968 | dependencies: 1969 | '@eslint-community/eslint-utils': 4.4.0(eslint@9.12.0(jiti@1.21.6)) 1970 | '@typescript-eslint/scope-manager': 8.9.0 1971 | '@typescript-eslint/types': 8.9.0 1972 | '@typescript-eslint/typescript-estree': 8.9.0(typescript@5.5.4) 1973 | eslint: 9.12.0(jiti@1.21.6) 1974 | transitivePeerDependencies: 1975 | - supports-color 1976 | - typescript 1977 | 1978 | '@typescript-eslint/visitor-keys@8.9.0': 1979 | dependencies: 1980 | '@typescript-eslint/types': 8.9.0 1981 | eslint-visitor-keys: 3.4.3 1982 | 1983 | acorn-jsx@5.3.2(acorn@8.12.1): 1984 | dependencies: 1985 | acorn: 8.12.1 1986 | 1987 | acorn@8.12.1: {} 1988 | 1989 | ajv@6.12.6: 1990 | dependencies: 1991 | fast-deep-equal: 3.1.3 1992 | fast-json-stable-stringify: 2.1.0 1993 | json-schema-traverse: 0.4.1 1994 | uri-js: 4.4.1 1995 | 1996 | ansi-regex@5.0.1: {} 1997 | 1998 | ansi-regex@6.1.0: {} 1999 | 2000 | ansi-styles@4.3.0: 2001 | dependencies: 2002 | color-convert: 2.0.1 2003 | 2004 | ansi-styles@6.2.1: {} 2005 | 2006 | any-promise@1.3.0: {} 2007 | 2008 | anymatch@3.1.3: 2009 | dependencies: 2010 | normalize-path: 3.0.0 2011 | picomatch: 2.3.1 2012 | 2013 | argparse@2.0.1: {} 2014 | 2015 | array-buffer-byte-length@1.0.1: 2016 | dependencies: 2017 | call-bind: 1.0.7 2018 | is-array-buffer: 3.0.4 2019 | 2020 | array-includes@3.1.8: 2021 | dependencies: 2022 | call-bind: 1.0.7 2023 | define-properties: 1.2.1 2024 | es-abstract: 1.23.3 2025 | es-object-atoms: 1.0.0 2026 | get-intrinsic: 1.2.4 2027 | is-string: 1.0.7 2028 | 2029 | array.prototype.findlastindex@1.2.5: 2030 | dependencies: 2031 | call-bind: 1.0.7 2032 | define-properties: 1.2.1 2033 | es-abstract: 1.23.3 2034 | es-errors: 1.3.0 2035 | es-object-atoms: 1.0.0 2036 | es-shim-unscopables: 1.0.2 2037 | 2038 | array.prototype.flat@1.3.2: 2039 | dependencies: 2040 | call-bind: 1.0.7 2041 | define-properties: 1.2.1 2042 | es-abstract: 1.23.3 2043 | es-shim-unscopables: 1.0.2 2044 | 2045 | array.prototype.flatmap@1.3.2: 2046 | dependencies: 2047 | call-bind: 1.0.7 2048 | define-properties: 1.2.1 2049 | es-abstract: 1.23.3 2050 | es-shim-unscopables: 1.0.2 2051 | 2052 | arraybuffer.prototype.slice@1.0.3: 2053 | dependencies: 2054 | array-buffer-byte-length: 1.0.1 2055 | call-bind: 1.0.7 2056 | define-properties: 1.2.1 2057 | es-abstract: 1.23.3 2058 | es-errors: 1.3.0 2059 | get-intrinsic: 1.2.4 2060 | is-array-buffer: 3.0.4 2061 | is-shared-array-buffer: 1.0.3 2062 | 2063 | available-typed-arrays@1.0.7: 2064 | dependencies: 2065 | possible-typed-array-names: 1.0.0 2066 | 2067 | balanced-match@1.0.2: {} 2068 | 2069 | base64-js@1.5.1: {} 2070 | 2071 | binary-extensions@2.3.0: {} 2072 | 2073 | bl@5.1.0: 2074 | dependencies: 2075 | buffer: 6.0.3 2076 | inherits: 2.0.4 2077 | readable-stream: 3.6.2 2078 | 2079 | brace-expansion@1.1.11: 2080 | dependencies: 2081 | balanced-match: 1.0.2 2082 | concat-map: 0.0.1 2083 | 2084 | brace-expansion@2.0.1: 2085 | dependencies: 2086 | balanced-match: 1.0.2 2087 | 2088 | braces@3.0.3: 2089 | dependencies: 2090 | fill-range: 7.1.1 2091 | 2092 | buffer@6.0.3: 2093 | dependencies: 2094 | base64-js: 1.5.1 2095 | ieee754: 1.2.1 2096 | 2097 | bundle-require@5.0.0(esbuild@0.23.1): 2098 | dependencies: 2099 | esbuild: 0.23.1 2100 | load-tsconfig: 0.2.5 2101 | 2102 | cac@6.7.14: {} 2103 | 2104 | call-bind@1.0.7: 2105 | dependencies: 2106 | es-define-property: 1.0.0 2107 | es-errors: 1.3.0 2108 | function-bind: 1.1.2 2109 | get-intrinsic: 1.2.4 2110 | set-function-length: 1.2.2 2111 | 2112 | callsites@3.1.0: {} 2113 | 2114 | chalk@4.1.2: 2115 | dependencies: 2116 | ansi-styles: 4.3.0 2117 | supports-color: 7.2.0 2118 | 2119 | chalk@5.3.0: {} 2120 | 2121 | chokidar@3.6.0: 2122 | dependencies: 2123 | anymatch: 3.1.3 2124 | braces: 3.0.3 2125 | glob-parent: 5.1.2 2126 | is-binary-path: 2.1.0 2127 | is-glob: 4.0.3 2128 | normalize-path: 3.0.0 2129 | readdirp: 3.6.0 2130 | optionalDependencies: 2131 | fsevents: 2.3.3 2132 | 2133 | cli-cursor@4.0.0: 2134 | dependencies: 2135 | restore-cursor: 4.0.0 2136 | 2137 | cli-spinners@2.9.2: {} 2138 | 2139 | clone@1.0.4: {} 2140 | 2141 | color-convert@2.0.1: 2142 | dependencies: 2143 | color-name: 1.1.4 2144 | 2145 | color-name@1.1.4: {} 2146 | 2147 | commander@12.1.0: {} 2148 | 2149 | commander@4.1.1: {} 2150 | 2151 | concat-map@0.0.1: {} 2152 | 2153 | consola@3.2.3: {} 2154 | 2155 | cross-spawn@7.0.3: 2156 | dependencies: 2157 | path-key: 3.1.1 2158 | shebang-command: 2.0.0 2159 | which: 2.0.2 2160 | 2161 | data-view-buffer@1.0.1: 2162 | dependencies: 2163 | call-bind: 1.0.7 2164 | es-errors: 1.3.0 2165 | is-data-view: 1.0.1 2166 | 2167 | data-view-byte-length@1.0.1: 2168 | dependencies: 2169 | call-bind: 1.0.7 2170 | es-errors: 1.3.0 2171 | is-data-view: 1.0.1 2172 | 2173 | data-view-byte-offset@1.0.0: 2174 | dependencies: 2175 | call-bind: 1.0.7 2176 | es-errors: 1.3.0 2177 | is-data-view: 1.0.1 2178 | 2179 | debug@3.2.7: 2180 | dependencies: 2181 | ms: 2.1.3 2182 | 2183 | debug@4.3.7: 2184 | dependencies: 2185 | ms: 2.1.3 2186 | 2187 | deep-is@0.1.4: {} 2188 | 2189 | defaults@1.0.4: 2190 | dependencies: 2191 | clone: 1.0.4 2192 | 2193 | define-data-property@1.1.4: 2194 | dependencies: 2195 | es-define-property: 1.0.0 2196 | es-errors: 1.3.0 2197 | gopd: 1.0.1 2198 | 2199 | define-properties@1.2.1: 2200 | dependencies: 2201 | define-data-property: 1.1.4 2202 | has-property-descriptors: 1.0.2 2203 | object-keys: 1.1.1 2204 | 2205 | doctrine@2.1.0: 2206 | dependencies: 2207 | esutils: 2.0.3 2208 | 2209 | eastasianwidth@0.2.0: {} 2210 | 2211 | emoji-regex@8.0.0: {} 2212 | 2213 | emoji-regex@9.2.2: {} 2214 | 2215 | es-abstract@1.23.3: 2216 | dependencies: 2217 | array-buffer-byte-length: 1.0.1 2218 | arraybuffer.prototype.slice: 1.0.3 2219 | available-typed-arrays: 1.0.7 2220 | call-bind: 1.0.7 2221 | data-view-buffer: 1.0.1 2222 | data-view-byte-length: 1.0.1 2223 | data-view-byte-offset: 1.0.0 2224 | es-define-property: 1.0.0 2225 | es-errors: 1.3.0 2226 | es-object-atoms: 1.0.0 2227 | es-set-tostringtag: 2.0.3 2228 | es-to-primitive: 1.2.1 2229 | function.prototype.name: 1.1.6 2230 | get-intrinsic: 1.2.4 2231 | get-symbol-description: 1.0.2 2232 | globalthis: 1.0.4 2233 | gopd: 1.0.1 2234 | has-property-descriptors: 1.0.2 2235 | has-proto: 1.0.3 2236 | has-symbols: 1.0.3 2237 | hasown: 2.0.2 2238 | internal-slot: 1.0.7 2239 | is-array-buffer: 3.0.4 2240 | is-callable: 1.2.7 2241 | is-data-view: 1.0.1 2242 | is-negative-zero: 2.0.3 2243 | is-regex: 1.1.4 2244 | is-shared-array-buffer: 1.0.3 2245 | is-string: 1.0.7 2246 | is-typed-array: 1.1.13 2247 | is-weakref: 1.0.2 2248 | object-inspect: 1.13.2 2249 | object-keys: 1.1.1 2250 | object.assign: 4.1.5 2251 | regexp.prototype.flags: 1.5.3 2252 | safe-array-concat: 1.1.2 2253 | safe-regex-test: 1.0.3 2254 | string.prototype.trim: 1.2.9 2255 | string.prototype.trimend: 1.0.8 2256 | string.prototype.trimstart: 1.0.8 2257 | typed-array-buffer: 1.0.2 2258 | typed-array-byte-length: 1.0.1 2259 | typed-array-byte-offset: 1.0.2 2260 | typed-array-length: 1.0.6 2261 | unbox-primitive: 1.0.2 2262 | which-typed-array: 1.1.15 2263 | 2264 | es-define-property@1.0.0: 2265 | dependencies: 2266 | get-intrinsic: 1.2.4 2267 | 2268 | es-errors@1.3.0: {} 2269 | 2270 | es-object-atoms@1.0.0: 2271 | dependencies: 2272 | es-errors: 1.3.0 2273 | 2274 | es-set-tostringtag@2.0.3: 2275 | dependencies: 2276 | get-intrinsic: 1.2.4 2277 | has-tostringtag: 1.0.2 2278 | hasown: 2.0.2 2279 | 2280 | es-shim-unscopables@1.0.2: 2281 | dependencies: 2282 | hasown: 2.0.2 2283 | 2284 | es-to-primitive@1.2.1: 2285 | dependencies: 2286 | is-callable: 1.2.7 2287 | is-date-object: 1.0.5 2288 | is-symbol: 1.0.4 2289 | 2290 | esbuild@0.23.1: 2291 | optionalDependencies: 2292 | '@esbuild/aix-ppc64': 0.23.1 2293 | '@esbuild/android-arm': 0.23.1 2294 | '@esbuild/android-arm64': 0.23.1 2295 | '@esbuild/android-x64': 0.23.1 2296 | '@esbuild/darwin-arm64': 0.23.1 2297 | '@esbuild/darwin-x64': 0.23.1 2298 | '@esbuild/freebsd-arm64': 0.23.1 2299 | '@esbuild/freebsd-x64': 0.23.1 2300 | '@esbuild/linux-arm': 0.23.1 2301 | '@esbuild/linux-arm64': 0.23.1 2302 | '@esbuild/linux-ia32': 0.23.1 2303 | '@esbuild/linux-loong64': 0.23.1 2304 | '@esbuild/linux-mips64el': 0.23.1 2305 | '@esbuild/linux-ppc64': 0.23.1 2306 | '@esbuild/linux-riscv64': 0.23.1 2307 | '@esbuild/linux-s390x': 0.23.1 2308 | '@esbuild/linux-x64': 0.23.1 2309 | '@esbuild/netbsd-x64': 0.23.1 2310 | '@esbuild/openbsd-arm64': 0.23.1 2311 | '@esbuild/openbsd-x64': 0.23.1 2312 | '@esbuild/sunos-x64': 0.23.1 2313 | '@esbuild/win32-arm64': 0.23.1 2314 | '@esbuild/win32-ia32': 0.23.1 2315 | '@esbuild/win32-x64': 0.23.1 2316 | 2317 | escape-string-regexp@4.0.0: {} 2318 | 2319 | eslint-import-resolver-node@0.3.9: 2320 | dependencies: 2321 | debug: 3.2.7 2322 | is-core-module: 2.15.1 2323 | resolve: 1.22.8 2324 | transitivePeerDependencies: 2325 | - supports-color 2326 | 2327 | eslint-module-utils@2.12.0(@typescript-eslint/parser@8.9.0(eslint@9.12.0(jiti@1.21.6))(typescript@5.5.4))(eslint-import-resolver-node@0.3.9)(eslint@9.12.0(jiti@1.21.6)): 2328 | dependencies: 2329 | debug: 3.2.7 2330 | optionalDependencies: 2331 | '@typescript-eslint/parser': 8.9.0(eslint@9.12.0(jiti@1.21.6))(typescript@5.5.4) 2332 | eslint: 9.12.0(jiti@1.21.6) 2333 | eslint-import-resolver-node: 0.3.9 2334 | transitivePeerDependencies: 2335 | - supports-color 2336 | 2337 | eslint-plugin-import@2.31.0(@typescript-eslint/parser@8.9.0(eslint@9.12.0(jiti@1.21.6))(typescript@5.5.4))(eslint@9.12.0(jiti@1.21.6)): 2338 | dependencies: 2339 | '@rtsao/scc': 1.1.0 2340 | array-includes: 3.1.8 2341 | array.prototype.findlastindex: 1.2.5 2342 | array.prototype.flat: 1.3.2 2343 | array.prototype.flatmap: 1.3.2 2344 | debug: 3.2.7 2345 | doctrine: 2.1.0 2346 | eslint: 9.12.0(jiti@1.21.6) 2347 | eslint-import-resolver-node: 0.3.9 2348 | eslint-module-utils: 2.12.0(@typescript-eslint/parser@8.9.0(eslint@9.12.0(jiti@1.21.6))(typescript@5.5.4))(eslint-import-resolver-node@0.3.9)(eslint@9.12.0(jiti@1.21.6)) 2349 | hasown: 2.0.2 2350 | is-core-module: 2.15.1 2351 | is-glob: 4.0.3 2352 | minimatch: 3.1.2 2353 | object.fromentries: 2.0.8 2354 | object.groupby: 1.0.3 2355 | object.values: 1.2.0 2356 | semver: 6.3.1 2357 | string.prototype.trimend: 1.0.8 2358 | tsconfig-paths: 3.15.0 2359 | optionalDependencies: 2360 | '@typescript-eslint/parser': 8.9.0(eslint@9.12.0(jiti@1.21.6))(typescript@5.5.4) 2361 | transitivePeerDependencies: 2362 | - eslint-import-resolver-typescript 2363 | - eslint-import-resolver-webpack 2364 | - supports-color 2365 | 2366 | eslint-plugin-unused-imports@4.1.4(@typescript-eslint/eslint-plugin@8.9.0(@typescript-eslint/parser@8.9.0(eslint@9.12.0(jiti@1.21.6))(typescript@5.5.4))(eslint@9.12.0(jiti@1.21.6))(typescript@5.5.4))(eslint@9.12.0(jiti@1.21.6)): 2367 | dependencies: 2368 | eslint: 9.12.0(jiti@1.21.6) 2369 | optionalDependencies: 2370 | '@typescript-eslint/eslint-plugin': 8.9.0(@typescript-eslint/parser@8.9.0(eslint@9.12.0(jiti@1.21.6))(typescript@5.5.4))(eslint@9.12.0(jiti@1.21.6))(typescript@5.5.4) 2371 | 2372 | eslint-scope@8.1.0: 2373 | dependencies: 2374 | esrecurse: 4.3.0 2375 | estraverse: 5.3.0 2376 | 2377 | eslint-visitor-keys@3.4.3: {} 2378 | 2379 | eslint-visitor-keys@4.1.0: {} 2380 | 2381 | eslint@9.12.0(jiti@1.21.6): 2382 | dependencies: 2383 | '@eslint-community/eslint-utils': 4.4.0(eslint@9.12.0(jiti@1.21.6)) 2384 | '@eslint-community/regexpp': 4.11.1 2385 | '@eslint/config-array': 0.18.0 2386 | '@eslint/core': 0.6.0 2387 | '@eslint/eslintrc': 3.1.0 2388 | '@eslint/js': 9.12.0 2389 | '@eslint/plugin-kit': 0.2.0 2390 | '@humanfs/node': 0.16.5 2391 | '@humanwhocodes/module-importer': 1.0.1 2392 | '@humanwhocodes/retry': 0.3.1 2393 | '@types/estree': 1.0.6 2394 | '@types/json-schema': 7.0.15 2395 | ajv: 6.12.6 2396 | chalk: 4.1.2 2397 | cross-spawn: 7.0.3 2398 | debug: 4.3.7 2399 | escape-string-regexp: 4.0.0 2400 | eslint-scope: 8.1.0 2401 | eslint-visitor-keys: 4.1.0 2402 | espree: 10.2.0 2403 | esquery: 1.6.0 2404 | esutils: 2.0.3 2405 | fast-deep-equal: 3.1.3 2406 | file-entry-cache: 8.0.0 2407 | find-up: 5.0.0 2408 | glob-parent: 6.0.2 2409 | ignore: 5.3.2 2410 | imurmurhash: 0.1.4 2411 | is-glob: 4.0.3 2412 | json-stable-stringify-without-jsonify: 1.0.1 2413 | lodash.merge: 4.6.2 2414 | minimatch: 3.1.2 2415 | natural-compare: 1.4.0 2416 | optionator: 0.9.4 2417 | text-table: 0.2.0 2418 | optionalDependencies: 2419 | jiti: 1.21.6 2420 | transitivePeerDependencies: 2421 | - supports-color 2422 | 2423 | espree@10.2.0: 2424 | dependencies: 2425 | acorn: 8.12.1 2426 | acorn-jsx: 5.3.2(acorn@8.12.1) 2427 | eslint-visitor-keys: 4.1.0 2428 | 2429 | esquery@1.6.0: 2430 | dependencies: 2431 | estraverse: 5.3.0 2432 | 2433 | esrecurse@4.3.0: 2434 | dependencies: 2435 | estraverse: 5.3.0 2436 | 2437 | estraverse@5.3.0: {} 2438 | 2439 | esutils@2.0.3: {} 2440 | 2441 | execa@5.1.1: 2442 | dependencies: 2443 | cross-spawn: 7.0.3 2444 | get-stream: 6.0.1 2445 | human-signals: 2.1.0 2446 | is-stream: 2.0.1 2447 | merge-stream: 2.0.0 2448 | npm-run-path: 4.0.1 2449 | onetime: 5.1.2 2450 | signal-exit: 3.0.7 2451 | strip-final-newline: 2.0.0 2452 | 2453 | execa@9.4.0: 2454 | dependencies: 2455 | '@sindresorhus/merge-streams': 4.0.0 2456 | cross-spawn: 7.0.3 2457 | figures: 6.1.0 2458 | get-stream: 9.0.1 2459 | human-signals: 8.0.0 2460 | is-plain-obj: 4.1.0 2461 | is-stream: 4.0.1 2462 | npm-run-path: 6.0.0 2463 | pretty-ms: 9.1.0 2464 | signal-exit: 4.1.0 2465 | strip-final-newline: 4.0.0 2466 | yoctocolors: 2.1.1 2467 | 2468 | fast-deep-equal@3.1.3: {} 2469 | 2470 | fast-glob@3.3.2: 2471 | dependencies: 2472 | '@nodelib/fs.stat': 2.0.5 2473 | '@nodelib/fs.walk': 1.2.8 2474 | glob-parent: 5.1.2 2475 | merge2: 1.4.1 2476 | micromatch: 4.0.8 2477 | 2478 | fast-json-stable-stringify@2.1.0: {} 2479 | 2480 | fast-levenshtein@2.0.6: {} 2481 | 2482 | fastq@1.17.1: 2483 | dependencies: 2484 | reusify: 1.0.4 2485 | 2486 | fdir@6.4.0(picomatch@4.0.2): 2487 | optionalDependencies: 2488 | picomatch: 4.0.2 2489 | 2490 | figures@6.1.0: 2491 | dependencies: 2492 | is-unicode-supported: 2.1.0 2493 | 2494 | file-entry-cache@8.0.0: 2495 | dependencies: 2496 | flat-cache: 4.0.1 2497 | 2498 | fill-range@7.1.1: 2499 | dependencies: 2500 | to-regex-range: 5.0.1 2501 | 2502 | find-up@5.0.0: 2503 | dependencies: 2504 | locate-path: 6.0.0 2505 | path-exists: 4.0.0 2506 | 2507 | flat-cache@4.0.1: 2508 | dependencies: 2509 | flatted: 3.3.1 2510 | keyv: 4.5.4 2511 | 2512 | flatted@3.3.1: {} 2513 | 2514 | for-each@0.3.3: 2515 | dependencies: 2516 | is-callable: 1.2.7 2517 | 2518 | foreground-child@3.3.0: 2519 | dependencies: 2520 | cross-spawn: 7.0.3 2521 | signal-exit: 4.1.0 2522 | 2523 | fsevents@2.3.3: 2524 | optional: true 2525 | 2526 | function-bind@1.1.2: {} 2527 | 2528 | function.prototype.name@1.1.6: 2529 | dependencies: 2530 | call-bind: 1.0.7 2531 | define-properties: 1.2.1 2532 | es-abstract: 1.23.3 2533 | functions-have-names: 1.2.3 2534 | 2535 | functions-have-names@1.2.3: {} 2536 | 2537 | get-intrinsic@1.2.4: 2538 | dependencies: 2539 | es-errors: 1.3.0 2540 | function-bind: 1.1.2 2541 | has-proto: 1.0.3 2542 | has-symbols: 1.0.3 2543 | hasown: 2.0.2 2544 | 2545 | get-stream@6.0.1: {} 2546 | 2547 | get-stream@9.0.1: 2548 | dependencies: 2549 | '@sec-ant/readable-stream': 0.4.1 2550 | is-stream: 4.0.1 2551 | 2552 | get-symbol-description@1.0.2: 2553 | dependencies: 2554 | call-bind: 1.0.7 2555 | es-errors: 1.3.0 2556 | get-intrinsic: 1.2.4 2557 | 2558 | glob-parent@5.1.2: 2559 | dependencies: 2560 | is-glob: 4.0.3 2561 | 2562 | glob-parent@6.0.2: 2563 | dependencies: 2564 | is-glob: 4.0.3 2565 | 2566 | glob@10.4.5: 2567 | dependencies: 2568 | foreground-child: 3.3.0 2569 | jackspeak: 3.4.3 2570 | minimatch: 9.0.5 2571 | minipass: 7.1.2 2572 | package-json-from-dist: 1.0.1 2573 | path-scurry: 1.11.1 2574 | 2575 | globals@14.0.0: {} 2576 | 2577 | globalthis@1.0.4: 2578 | dependencies: 2579 | define-properties: 1.2.1 2580 | gopd: 1.0.1 2581 | 2582 | gopd@1.0.1: 2583 | dependencies: 2584 | get-intrinsic: 1.2.4 2585 | 2586 | graphemer@1.4.0: {} 2587 | 2588 | has-bigints@1.0.2: {} 2589 | 2590 | has-flag@4.0.0: {} 2591 | 2592 | has-property-descriptors@1.0.2: 2593 | dependencies: 2594 | es-define-property: 1.0.0 2595 | 2596 | has-proto@1.0.3: {} 2597 | 2598 | has-symbols@1.0.3: {} 2599 | 2600 | has-tostringtag@1.0.2: 2601 | dependencies: 2602 | has-symbols: 1.0.3 2603 | 2604 | hasown@2.0.2: 2605 | dependencies: 2606 | function-bind: 1.1.2 2607 | 2608 | human-signals@2.1.0: {} 2609 | 2610 | human-signals@8.0.0: {} 2611 | 2612 | ieee754@1.2.1: {} 2613 | 2614 | ignore@5.3.2: {} 2615 | 2616 | import-fresh@3.3.0: 2617 | dependencies: 2618 | parent-module: 1.0.1 2619 | resolve-from: 4.0.0 2620 | 2621 | imurmurhash@0.1.4: {} 2622 | 2623 | inherits@2.0.4: {} 2624 | 2625 | internal-slot@1.0.7: 2626 | dependencies: 2627 | es-errors: 1.3.0 2628 | hasown: 2.0.2 2629 | side-channel: 1.0.6 2630 | 2631 | is-array-buffer@3.0.4: 2632 | dependencies: 2633 | call-bind: 1.0.7 2634 | get-intrinsic: 1.2.4 2635 | 2636 | is-bigint@1.0.4: 2637 | dependencies: 2638 | has-bigints: 1.0.2 2639 | 2640 | is-binary-path@2.1.0: 2641 | dependencies: 2642 | binary-extensions: 2.3.0 2643 | 2644 | is-boolean-object@1.1.2: 2645 | dependencies: 2646 | call-bind: 1.0.7 2647 | has-tostringtag: 1.0.2 2648 | 2649 | is-callable@1.2.7: {} 2650 | 2651 | is-core-module@2.15.1: 2652 | dependencies: 2653 | hasown: 2.0.2 2654 | 2655 | is-data-view@1.0.1: 2656 | dependencies: 2657 | is-typed-array: 1.1.13 2658 | 2659 | is-date-object@1.0.5: 2660 | dependencies: 2661 | has-tostringtag: 1.0.2 2662 | 2663 | is-extglob@2.1.1: {} 2664 | 2665 | is-fullwidth-code-point@3.0.0: {} 2666 | 2667 | is-glob@4.0.3: 2668 | dependencies: 2669 | is-extglob: 2.1.1 2670 | 2671 | is-interactive@2.0.0: {} 2672 | 2673 | is-negative-zero@2.0.3: {} 2674 | 2675 | is-number-object@1.0.7: 2676 | dependencies: 2677 | has-tostringtag: 1.0.2 2678 | 2679 | is-number@7.0.0: {} 2680 | 2681 | is-plain-obj@4.1.0: {} 2682 | 2683 | is-regex@1.1.4: 2684 | dependencies: 2685 | call-bind: 1.0.7 2686 | has-tostringtag: 1.0.2 2687 | 2688 | is-shared-array-buffer@1.0.3: 2689 | dependencies: 2690 | call-bind: 1.0.7 2691 | 2692 | is-stream@2.0.1: {} 2693 | 2694 | is-stream@4.0.1: {} 2695 | 2696 | is-string@1.0.7: 2697 | dependencies: 2698 | has-tostringtag: 1.0.2 2699 | 2700 | is-symbol@1.0.4: 2701 | dependencies: 2702 | has-symbols: 1.0.3 2703 | 2704 | is-typed-array@1.1.13: 2705 | dependencies: 2706 | which-typed-array: 1.1.15 2707 | 2708 | is-unicode-supported@1.3.0: {} 2709 | 2710 | is-unicode-supported@2.1.0: {} 2711 | 2712 | is-weakref@1.0.2: 2713 | dependencies: 2714 | call-bind: 1.0.7 2715 | 2716 | isarray@2.0.5: {} 2717 | 2718 | isexe@2.0.0: {} 2719 | 2720 | jackspeak@3.4.3: 2721 | dependencies: 2722 | '@isaacs/cliui': 8.0.2 2723 | optionalDependencies: 2724 | '@pkgjs/parseargs': 0.11.0 2725 | 2726 | jiti@1.21.6: 2727 | optional: true 2728 | 2729 | joycon@3.1.1: {} 2730 | 2731 | js-yaml@4.1.0: 2732 | dependencies: 2733 | argparse: 2.0.1 2734 | 2735 | json-buffer@3.0.1: {} 2736 | 2737 | json-schema-traverse@0.4.1: {} 2738 | 2739 | json-stable-stringify-without-jsonify@1.0.1: {} 2740 | 2741 | json5@1.0.2: 2742 | dependencies: 2743 | minimist: 1.2.8 2744 | 2745 | keyv@4.5.4: 2746 | dependencies: 2747 | json-buffer: 3.0.1 2748 | 2749 | kleur@3.0.3: {} 2750 | 2751 | levn@0.4.1: 2752 | dependencies: 2753 | prelude-ls: 1.2.1 2754 | type-check: 0.4.0 2755 | 2756 | lilconfig@3.1.2: {} 2757 | 2758 | lines-and-columns@1.2.4: {} 2759 | 2760 | load-tsconfig@0.2.5: {} 2761 | 2762 | locate-path@6.0.0: 2763 | dependencies: 2764 | p-locate: 5.0.0 2765 | 2766 | lodash.merge@4.6.2: {} 2767 | 2768 | lodash.sortby@4.7.0: {} 2769 | 2770 | lodash@4.17.21: {} 2771 | 2772 | log-symbols@5.1.0: 2773 | dependencies: 2774 | chalk: 5.3.0 2775 | is-unicode-supported: 1.3.0 2776 | 2777 | lru-cache@10.4.3: {} 2778 | 2779 | merge-stream@2.0.0: {} 2780 | 2781 | merge2@1.4.1: {} 2782 | 2783 | micromatch@4.0.8: 2784 | dependencies: 2785 | braces: 3.0.3 2786 | picomatch: 2.3.1 2787 | 2788 | mimic-fn@2.1.0: {} 2789 | 2790 | minimatch@3.1.2: 2791 | dependencies: 2792 | brace-expansion: 1.1.11 2793 | 2794 | minimatch@9.0.5: 2795 | dependencies: 2796 | brace-expansion: 2.0.1 2797 | 2798 | minimist@1.2.8: {} 2799 | 2800 | minipass@7.1.2: {} 2801 | 2802 | ms@2.1.3: {} 2803 | 2804 | mz@2.7.0: 2805 | dependencies: 2806 | any-promise: 1.3.0 2807 | object-assign: 4.1.1 2808 | thenify-all: 1.6.0 2809 | 2810 | natural-compare@1.4.0: {} 2811 | 2812 | normalize-path@3.0.0: {} 2813 | 2814 | npm-run-path@4.0.1: 2815 | dependencies: 2816 | path-key: 3.1.1 2817 | 2818 | npm-run-path@6.0.0: 2819 | dependencies: 2820 | path-key: 4.0.0 2821 | unicorn-magic: 0.3.0 2822 | 2823 | object-assign@4.1.1: {} 2824 | 2825 | object-inspect@1.13.2: {} 2826 | 2827 | object-keys@1.1.1: {} 2828 | 2829 | object.assign@4.1.5: 2830 | dependencies: 2831 | call-bind: 1.0.7 2832 | define-properties: 1.2.1 2833 | has-symbols: 1.0.3 2834 | object-keys: 1.1.1 2835 | 2836 | object.fromentries@2.0.8: 2837 | dependencies: 2838 | call-bind: 1.0.7 2839 | define-properties: 1.2.1 2840 | es-abstract: 1.23.3 2841 | es-object-atoms: 1.0.0 2842 | 2843 | object.groupby@1.0.3: 2844 | dependencies: 2845 | call-bind: 1.0.7 2846 | define-properties: 1.2.1 2847 | es-abstract: 1.23.3 2848 | 2849 | object.values@1.2.0: 2850 | dependencies: 2851 | call-bind: 1.0.7 2852 | define-properties: 1.2.1 2853 | es-object-atoms: 1.0.0 2854 | 2855 | onetime@5.1.2: 2856 | dependencies: 2857 | mimic-fn: 2.1.0 2858 | 2859 | optionator@0.9.4: 2860 | dependencies: 2861 | deep-is: 0.1.4 2862 | fast-levenshtein: 2.0.6 2863 | levn: 0.4.1 2864 | prelude-ls: 1.2.1 2865 | type-check: 0.4.0 2866 | word-wrap: 1.2.5 2867 | 2868 | ora@6.3.1: 2869 | dependencies: 2870 | chalk: 5.3.0 2871 | cli-cursor: 4.0.0 2872 | cli-spinners: 2.9.2 2873 | is-interactive: 2.0.0 2874 | is-unicode-supported: 1.3.0 2875 | log-symbols: 5.1.0 2876 | stdin-discarder: 0.1.0 2877 | strip-ansi: 7.1.0 2878 | wcwidth: 1.0.1 2879 | 2880 | p-limit@3.1.0: 2881 | dependencies: 2882 | yocto-queue: 0.1.0 2883 | 2884 | p-locate@5.0.0: 2885 | dependencies: 2886 | p-limit: 3.1.0 2887 | 2888 | package-json-from-dist@1.0.1: {} 2889 | 2890 | parent-module@1.0.1: 2891 | dependencies: 2892 | callsites: 3.1.0 2893 | 2894 | parse-ms@4.0.0: {} 2895 | 2896 | path-exists@4.0.0: {} 2897 | 2898 | path-key@3.1.1: {} 2899 | 2900 | path-key@4.0.0: {} 2901 | 2902 | path-parse@1.0.7: {} 2903 | 2904 | path-scurry@1.11.1: 2905 | dependencies: 2906 | lru-cache: 10.4.3 2907 | minipass: 7.1.2 2908 | 2909 | picocolors@1.1.0: {} 2910 | 2911 | picomatch@2.3.1: {} 2912 | 2913 | picomatch@4.0.2: {} 2914 | 2915 | pirates@4.0.6: {} 2916 | 2917 | possible-typed-array-names@1.0.0: {} 2918 | 2919 | postcss-load-config@6.0.1(jiti@1.21.6): 2920 | dependencies: 2921 | lilconfig: 3.1.2 2922 | optionalDependencies: 2923 | jiti: 1.21.6 2924 | 2925 | prelude-ls@1.2.1: {} 2926 | 2927 | prettier@3.3.3: {} 2928 | 2929 | pretty-ms@9.1.0: 2930 | dependencies: 2931 | parse-ms: 4.0.0 2932 | 2933 | prompts@2.4.2: 2934 | dependencies: 2935 | kleur: 3.0.3 2936 | sisteransi: 1.0.5 2937 | 2938 | punycode@2.3.1: {} 2939 | 2940 | queue-microtask@1.2.3: {} 2941 | 2942 | readable-stream@3.6.2: 2943 | dependencies: 2944 | inherits: 2.0.4 2945 | string_decoder: 1.3.0 2946 | util-deprecate: 1.0.2 2947 | 2948 | readdirp@3.6.0: 2949 | dependencies: 2950 | picomatch: 2.3.1 2951 | 2952 | regexp.prototype.flags@1.5.3: 2953 | dependencies: 2954 | call-bind: 1.0.7 2955 | define-properties: 1.2.1 2956 | es-errors: 1.3.0 2957 | set-function-name: 2.0.2 2958 | 2959 | resolve-from@4.0.0: {} 2960 | 2961 | resolve-from@5.0.0: {} 2962 | 2963 | resolve@1.22.8: 2964 | dependencies: 2965 | is-core-module: 2.15.1 2966 | path-parse: 1.0.7 2967 | supports-preserve-symlinks-flag: 1.0.0 2968 | 2969 | restore-cursor@4.0.0: 2970 | dependencies: 2971 | onetime: 5.1.2 2972 | signal-exit: 3.0.7 2973 | 2974 | reusify@1.0.4: {} 2975 | 2976 | rollup@4.24.0: 2977 | dependencies: 2978 | '@types/estree': 1.0.6 2979 | optionalDependencies: 2980 | '@rollup/rollup-android-arm-eabi': 4.24.0 2981 | '@rollup/rollup-android-arm64': 4.24.0 2982 | '@rollup/rollup-darwin-arm64': 4.24.0 2983 | '@rollup/rollup-darwin-x64': 4.24.0 2984 | '@rollup/rollup-linux-arm-gnueabihf': 4.24.0 2985 | '@rollup/rollup-linux-arm-musleabihf': 4.24.0 2986 | '@rollup/rollup-linux-arm64-gnu': 4.24.0 2987 | '@rollup/rollup-linux-arm64-musl': 4.24.0 2988 | '@rollup/rollup-linux-powerpc64le-gnu': 4.24.0 2989 | '@rollup/rollup-linux-riscv64-gnu': 4.24.0 2990 | '@rollup/rollup-linux-s390x-gnu': 4.24.0 2991 | '@rollup/rollup-linux-x64-gnu': 4.24.0 2992 | '@rollup/rollup-linux-x64-musl': 4.24.0 2993 | '@rollup/rollup-win32-arm64-msvc': 4.24.0 2994 | '@rollup/rollup-win32-ia32-msvc': 4.24.0 2995 | '@rollup/rollup-win32-x64-msvc': 4.24.0 2996 | fsevents: 2.3.3 2997 | 2998 | run-parallel@1.2.0: 2999 | dependencies: 3000 | queue-microtask: 1.2.3 3001 | 3002 | safe-array-concat@1.1.2: 3003 | dependencies: 3004 | call-bind: 1.0.7 3005 | get-intrinsic: 1.2.4 3006 | has-symbols: 1.0.3 3007 | isarray: 2.0.5 3008 | 3009 | safe-buffer@5.2.1: {} 3010 | 3011 | safe-regex-test@1.0.3: 3012 | dependencies: 3013 | call-bind: 1.0.7 3014 | es-errors: 1.3.0 3015 | is-regex: 1.1.4 3016 | 3017 | semver@6.3.1: {} 3018 | 3019 | semver@7.6.3: {} 3020 | 3021 | set-function-length@1.2.2: 3022 | dependencies: 3023 | define-data-property: 1.1.4 3024 | es-errors: 1.3.0 3025 | function-bind: 1.1.2 3026 | get-intrinsic: 1.2.4 3027 | gopd: 1.0.1 3028 | has-property-descriptors: 1.0.2 3029 | 3030 | set-function-name@2.0.2: 3031 | dependencies: 3032 | define-data-property: 1.1.4 3033 | es-errors: 1.3.0 3034 | functions-have-names: 1.2.3 3035 | has-property-descriptors: 1.0.2 3036 | 3037 | shebang-command@2.0.0: 3038 | dependencies: 3039 | shebang-regex: 3.0.0 3040 | 3041 | shebang-regex@3.0.0: {} 3042 | 3043 | side-channel@1.0.6: 3044 | dependencies: 3045 | call-bind: 1.0.7 3046 | es-errors: 1.3.0 3047 | get-intrinsic: 1.2.4 3048 | object-inspect: 1.13.2 3049 | 3050 | signal-exit@3.0.7: {} 3051 | 3052 | signal-exit@4.1.0: {} 3053 | 3054 | sisteransi@1.0.5: {} 3055 | 3056 | source-map@0.8.0-beta.0: 3057 | dependencies: 3058 | whatwg-url: 7.1.0 3059 | 3060 | stdin-discarder@0.1.0: 3061 | dependencies: 3062 | bl: 5.1.0 3063 | 3064 | string-width@4.2.3: 3065 | dependencies: 3066 | emoji-regex: 8.0.0 3067 | is-fullwidth-code-point: 3.0.0 3068 | strip-ansi: 6.0.1 3069 | 3070 | string-width@5.1.2: 3071 | dependencies: 3072 | eastasianwidth: 0.2.0 3073 | emoji-regex: 9.2.2 3074 | strip-ansi: 7.1.0 3075 | 3076 | string.prototype.trim@1.2.9: 3077 | dependencies: 3078 | call-bind: 1.0.7 3079 | define-properties: 1.2.1 3080 | es-abstract: 1.23.3 3081 | es-object-atoms: 1.0.0 3082 | 3083 | string.prototype.trimend@1.0.8: 3084 | dependencies: 3085 | call-bind: 1.0.7 3086 | define-properties: 1.2.1 3087 | es-object-atoms: 1.0.0 3088 | 3089 | string.prototype.trimstart@1.0.8: 3090 | dependencies: 3091 | call-bind: 1.0.7 3092 | define-properties: 1.2.1 3093 | es-object-atoms: 1.0.0 3094 | 3095 | string_decoder@1.3.0: 3096 | dependencies: 3097 | safe-buffer: 5.2.1 3098 | 3099 | strip-ansi@6.0.1: 3100 | dependencies: 3101 | ansi-regex: 5.0.1 3102 | 3103 | strip-ansi@7.1.0: 3104 | dependencies: 3105 | ansi-regex: 6.1.0 3106 | 3107 | strip-bom@3.0.0: {} 3108 | 3109 | strip-final-newline@2.0.0: {} 3110 | 3111 | strip-final-newline@4.0.0: {} 3112 | 3113 | strip-json-comments@3.1.1: {} 3114 | 3115 | sucrase@3.35.0: 3116 | dependencies: 3117 | '@jridgewell/gen-mapping': 0.3.5 3118 | commander: 4.1.1 3119 | glob: 10.4.5 3120 | lines-and-columns: 1.2.4 3121 | mz: 2.7.0 3122 | pirates: 4.0.6 3123 | ts-interface-checker: 0.1.13 3124 | 3125 | supports-color@7.2.0: 3126 | dependencies: 3127 | has-flag: 4.0.0 3128 | 3129 | supports-preserve-symlinks-flag@1.0.0: {} 3130 | 3131 | text-table@0.2.0: {} 3132 | 3133 | thenify-all@1.6.0: 3134 | dependencies: 3135 | thenify: 3.3.1 3136 | 3137 | thenify@3.3.1: 3138 | dependencies: 3139 | any-promise: 1.3.0 3140 | 3141 | tinyglobby@0.2.9: 3142 | dependencies: 3143 | fdir: 6.4.0(picomatch@4.0.2) 3144 | picomatch: 4.0.2 3145 | 3146 | to-regex-range@5.0.1: 3147 | dependencies: 3148 | is-number: 7.0.0 3149 | 3150 | tr46@1.0.1: 3151 | dependencies: 3152 | punycode: 2.3.1 3153 | 3154 | tree-kill@1.2.2: {} 3155 | 3156 | ts-api-utils@1.3.0(typescript@5.5.4): 3157 | dependencies: 3158 | typescript: 5.5.4 3159 | 3160 | ts-interface-checker@0.1.13: {} 3161 | 3162 | tsconfig-paths@3.15.0: 3163 | dependencies: 3164 | '@types/json5': 0.0.29 3165 | json5: 1.0.2 3166 | minimist: 1.2.8 3167 | strip-bom: 3.0.0 3168 | 3169 | tsup@8.3.0(jiti@1.21.6)(typescript@5.5.4): 3170 | dependencies: 3171 | bundle-require: 5.0.0(esbuild@0.23.1) 3172 | cac: 6.7.14 3173 | chokidar: 3.6.0 3174 | consola: 3.2.3 3175 | debug: 4.3.7 3176 | esbuild: 0.23.1 3177 | execa: 5.1.1 3178 | joycon: 3.1.1 3179 | picocolors: 1.1.0 3180 | postcss-load-config: 6.0.1(jiti@1.21.6) 3181 | resolve-from: 5.0.0 3182 | rollup: 4.24.0 3183 | source-map: 0.8.0-beta.0 3184 | sucrase: 3.35.0 3185 | tinyglobby: 0.2.9 3186 | tree-kill: 1.2.2 3187 | optionalDependencies: 3188 | typescript: 5.5.4 3189 | transitivePeerDependencies: 3190 | - jiti 3191 | - supports-color 3192 | - tsx 3193 | - yaml 3194 | 3195 | type-check@0.4.0: 3196 | dependencies: 3197 | prelude-ls: 1.2.1 3198 | 3199 | typed-array-buffer@1.0.2: 3200 | dependencies: 3201 | call-bind: 1.0.7 3202 | es-errors: 1.3.0 3203 | is-typed-array: 1.1.13 3204 | 3205 | typed-array-byte-length@1.0.1: 3206 | dependencies: 3207 | call-bind: 1.0.7 3208 | for-each: 0.3.3 3209 | gopd: 1.0.1 3210 | has-proto: 1.0.3 3211 | is-typed-array: 1.1.13 3212 | 3213 | typed-array-byte-offset@1.0.2: 3214 | dependencies: 3215 | available-typed-arrays: 1.0.7 3216 | call-bind: 1.0.7 3217 | for-each: 0.3.3 3218 | gopd: 1.0.1 3219 | has-proto: 1.0.3 3220 | is-typed-array: 1.1.13 3221 | 3222 | typed-array-length@1.0.6: 3223 | dependencies: 3224 | call-bind: 1.0.7 3225 | for-each: 0.3.3 3226 | gopd: 1.0.1 3227 | has-proto: 1.0.3 3228 | is-typed-array: 1.1.13 3229 | possible-typed-array-names: 1.0.0 3230 | 3231 | typescript-eslint@8.9.0(eslint@9.12.0(jiti@1.21.6))(typescript@5.5.4): 3232 | dependencies: 3233 | '@typescript-eslint/eslint-plugin': 8.9.0(@typescript-eslint/parser@8.9.0(eslint@9.12.0(jiti@1.21.6))(typescript@5.5.4))(eslint@9.12.0(jiti@1.21.6))(typescript@5.5.4) 3234 | '@typescript-eslint/parser': 8.9.0(eslint@9.12.0(jiti@1.21.6))(typescript@5.5.4) 3235 | '@typescript-eslint/utils': 8.9.0(eslint@9.12.0(jiti@1.21.6))(typescript@5.5.4) 3236 | optionalDependencies: 3237 | typescript: 5.5.4 3238 | transitivePeerDependencies: 3239 | - eslint 3240 | - supports-color 3241 | 3242 | typescript@5.5.4: {} 3243 | 3244 | unbox-primitive@1.0.2: 3245 | dependencies: 3246 | call-bind: 1.0.7 3247 | has-bigints: 1.0.2 3248 | has-symbols: 1.0.3 3249 | which-boxed-primitive: 1.0.2 3250 | 3251 | undici-types@6.19.8: {} 3252 | 3253 | unicorn-magic@0.3.0: {} 3254 | 3255 | uri-js@4.4.1: 3256 | dependencies: 3257 | punycode: 2.3.1 3258 | 3259 | util-deprecate@1.0.2: {} 3260 | 3261 | wcwidth@1.0.1: 3262 | dependencies: 3263 | defaults: 1.0.4 3264 | 3265 | webidl-conversions@4.0.2: {} 3266 | 3267 | whatwg-url@7.1.0: 3268 | dependencies: 3269 | lodash.sortby: 4.7.0 3270 | tr46: 1.0.1 3271 | webidl-conversions: 4.0.2 3272 | 3273 | which-boxed-primitive@1.0.2: 3274 | dependencies: 3275 | is-bigint: 1.0.4 3276 | is-boolean-object: 1.1.2 3277 | is-number-object: 1.0.7 3278 | is-string: 1.0.7 3279 | is-symbol: 1.0.4 3280 | 3281 | which-typed-array@1.1.15: 3282 | dependencies: 3283 | available-typed-arrays: 1.0.7 3284 | call-bind: 1.0.7 3285 | for-each: 0.3.3 3286 | gopd: 1.0.1 3287 | has-tostringtag: 1.0.2 3288 | 3289 | which@2.0.2: 3290 | dependencies: 3291 | isexe: 2.0.0 3292 | 3293 | word-wrap@1.2.5: {} 3294 | 3295 | wrap-ansi@7.0.0: 3296 | dependencies: 3297 | ansi-styles: 4.3.0 3298 | string-width: 4.2.3 3299 | strip-ansi: 6.0.1 3300 | 3301 | wrap-ansi@8.1.0: 3302 | dependencies: 3303 | ansi-styles: 6.2.1 3304 | string-width: 5.1.2 3305 | strip-ansi: 7.1.0 3306 | 3307 | yocto-queue@0.1.0: {} 3308 | 3309 | yoctocolors@2.1.1: {} 3310 | 3311 | zod@3.23.8: {} 3312 | -------------------------------------------------------------------------------- /src/commands/new/config/billing.ts: -------------------------------------------------------------------------------- 1 | import prompts from "prompts"; 2 | 3 | import { BillingProvider, config } from "~/config"; 4 | import { getLabel, onCancel } from "~/utils"; 5 | 6 | const getBillingProvider = async (): Promise<{ 7 | [key in typeof config.env.billing.provider]: BillingProvider; 8 | }> => { 9 | return prompts( 10 | [ 11 | { 12 | type: "select", 13 | choices: Object.values(BillingProvider).map((provider) => ({ 14 | title: getLabel(provider), 15 | value: provider, 16 | })), 17 | name: config.env.billing.provider, 18 | message: "What do you want to use for billing?", 19 | }, 20 | ], 21 | { 22 | onCancel, 23 | }, 24 | ); 25 | }; 26 | 27 | const getBillingProviderConfig = async (provider: BillingProvider) => { 28 | switch (provider) { 29 | case BillingProvider.STRIPE: 30 | return prompts( 31 | [ 32 | { 33 | type: "text", 34 | name: config.env.billing.stripe.secretKey, 35 | message: "Enter your Stripe secret key", 36 | }, 37 | { 38 | type: "text", 39 | name: config.env.billing.stripe.webhookSecret, 40 | message: "Enter your Stripe webhook secret", 41 | }, 42 | ], 43 | { 44 | onCancel, 45 | }, 46 | ); 47 | case BillingProvider.LEMON_SQUEEZY: 48 | return prompts( 49 | [ 50 | { 51 | type: "text", 52 | name: config.env.billing.lemonsqueezy.storeId, 53 | message: "Enter your Lemon Squeezy store ID", 54 | }, 55 | { 56 | type: "text", 57 | name: config.env.billing.lemonsqueezy.apiKey, 58 | message: "Enter your Lemon Squeezy API key", 59 | }, 60 | { 61 | type: "text", 62 | name: config.env.billing.lemonsqueezy.signingSecret, 63 | message: "Enter your Lemon Squeezy signing secret", 64 | }, 65 | ], 66 | { 67 | onCancel, 68 | }, 69 | ); 70 | } 71 | }; 72 | 73 | export const getBillingConfig = async () => { 74 | const provider = await getBillingProvider(); 75 | const config = await getBillingProviderConfig(provider.BILLING_PROVIDER); 76 | 77 | return { ...provider, ...config }; 78 | }; 79 | -------------------------------------------------------------------------------- /src/commands/new/config/db.ts: -------------------------------------------------------------------------------- 1 | import prompts from "prompts"; 2 | 3 | import { config, DatabaseType } from "~/config"; 4 | import { onCancel } from "~/utils"; 5 | 6 | const getDatabaseCloudConfig = async () => { 7 | return prompts( 8 | [ 9 | { 10 | type: "text", 11 | name: config.env.db.url, 12 | message: "Enter your database URL", 13 | }, 14 | ], 15 | { 16 | onCancel, 17 | }, 18 | ); 19 | }; 20 | 21 | export const getDatabaseConfig = async () => { 22 | const response = await prompts( 23 | [ 24 | { 25 | type: "select", 26 | name: "type", 27 | message: "How do you want to use database?", 28 | choices: [ 29 | { 30 | title: "Local (powered by Docker)", 31 | value: DatabaseType.LOCAL, 32 | selected: true, 33 | }, 34 | { 35 | title: `Cloud`, 36 | value: DatabaseType.CLOUD, 37 | }, 38 | ], 39 | }, 40 | ], 41 | { 42 | onCancel, 43 | }, 44 | ); 45 | 46 | if (response.type === DatabaseType.CLOUD) { 47 | const dbConfig = await getDatabaseCloudConfig(); 48 | 49 | return { ...response, env: dbConfig }; 50 | } 51 | 52 | return response; 53 | }; 54 | -------------------------------------------------------------------------------- /src/commands/new/config/email.ts: -------------------------------------------------------------------------------- 1 | import prompts from "prompts"; 2 | 3 | import { EmailProvider, config } from "~/config"; 4 | import { getLabel, onCancel } from "~/utils"; 5 | 6 | const getEmailProvider = async (): Promise<{ 7 | [key in typeof config.env.email.provider]: EmailProvider; 8 | }> => { 9 | return prompts( 10 | [ 11 | { 12 | type: "select", 13 | name: config.env.email.provider, 14 | message: "What do you want to use for emails?", 15 | choices: Object.values(EmailProvider).map((provider) => ({ 16 | title: getLabel(provider), 17 | value: provider, 18 | })), 19 | }, 20 | ], 21 | { 22 | onCancel, 23 | }, 24 | ); 25 | }; 26 | 27 | const getEmailProviderConfig = async (provider: EmailProvider) => { 28 | switch (provider) { 29 | case EmailProvider.RESEND: 30 | return prompts( 31 | [ 32 | { 33 | type: "text", 34 | name: config.env.email.resend.apiKey, 35 | message: "Enter your Resend API key", 36 | }, 37 | ], 38 | { 39 | onCancel, 40 | }, 41 | ); 42 | case EmailProvider.SENDGRID: 43 | return prompts( 44 | [ 45 | { 46 | type: "text", 47 | name: config.env.email.sendgrid.apiKey, 48 | message: "Enter your Sendgrid API key", 49 | }, 50 | ], 51 | { 52 | onCancel, 53 | }, 54 | ); 55 | case EmailProvider.PLUNK: 56 | return prompts( 57 | [ 58 | { 59 | type: "text", 60 | name: config.env.email.plunk.apiKey, 61 | message: "Enter your Plunk API key", 62 | }, 63 | ], 64 | { 65 | onCancel, 66 | }, 67 | ); 68 | case EmailProvider.POSTMARK: 69 | return prompts( 70 | [ 71 | { 72 | type: "text", 73 | name: config.env.email.postmark.apiKey, 74 | message: "Enter your Postmark API key", 75 | }, 76 | ], 77 | { 78 | onCancel, 79 | }, 80 | ); 81 | case EmailProvider.NODEMAILER: 82 | return prompts( 83 | [ 84 | { 85 | type: "text", 86 | name: config.env.email.nodemailer.user, 87 | message: "Enter your Nodemailer user", 88 | }, 89 | { 90 | type: "text", 91 | name: config.env.email.nodemailer.password, 92 | message: "Enter your Nodemailer user password", 93 | }, 94 | { 95 | type: "text", 96 | name: config.env.email.nodemailer.host, 97 | message: "Enter your Nodemailer host", 98 | }, 99 | { 100 | type: "number", 101 | name: config.env.email.nodemailer.port, 102 | message: "Enter your Nodemailer port", 103 | }, 104 | ], 105 | { 106 | onCancel, 107 | }, 108 | ); 109 | } 110 | }; 111 | 112 | export const getEmailConfig = async () => { 113 | const provider = await getEmailProvider(); 114 | const config = await getEmailProviderConfig(provider.EMAIL_PROVIDER); 115 | 116 | return { ...provider, ...config }; 117 | }; 118 | -------------------------------------------------------------------------------- /src/commands/new/config/env.ts: -------------------------------------------------------------------------------- 1 | import { promises } from "fs"; 2 | import _ from "lodash"; 3 | import ora from "ora"; 4 | import { join } from "path"; 5 | 6 | import { EnvFile, envInPaths, EnvPath } from "~/config"; 7 | import { logger } from "~/utils"; 8 | 9 | export const prepareEnvironment = async (projectDir: string) => { 10 | try { 11 | await Promise.allSettled( 12 | Object.values(EnvPath).map(async (path) => { 13 | const cwd = join(projectDir, path); 14 | await promises.copyFile( 15 | join(cwd, EnvFile.EXAMPLE), 16 | join(cwd, EnvFile.LOCAL), 17 | ); 18 | }), 19 | ); 20 | } catch { 21 | logger.error("Failed to prepare environment!"); 22 | process.exit(1); 23 | } 24 | }; 25 | 26 | export const setEnvironmentVariable = async ( 27 | projectDir: string, 28 | key: string, 29 | value: string, 30 | ) => { 31 | if (!value) { 32 | return; 33 | } 34 | 35 | const paths = _.keys( 36 | _.pickBy(envInPaths, (values) => _.includes(values, key)), 37 | ); 38 | 39 | for (const path of paths) { 40 | const cwd = join(projectDir, path); 41 | const envFilePath = join(cwd, EnvFile.LOCAL); 42 | 43 | const content = await promises.readFile(envFilePath, "utf8"); 44 | 45 | const regex = new RegExp(`^${key}=.*`, "gm"); 46 | 47 | if (regex.test(content)) { 48 | await promises.writeFile( 49 | envFilePath, 50 | content.replace(regex, `${key}="${value}"`), 51 | ); 52 | } else { 53 | await promises.appendFile(envFilePath, `\n${key}="${value}"`); 54 | } 55 | } 56 | }; 57 | 58 | export const setEnvironmentVariables = async ( 59 | projectDir: string, 60 | variables: Record, 61 | ) => { 62 | const spinner = ora(`Setting environment variables...`).start(); 63 | 64 | try { 65 | for (const [key, value] of Object.entries(variables)) { 66 | await setEnvironmentVariable(projectDir, key, value); 67 | } 68 | 69 | spinner.succeed("Environment variables successfully set!"); 70 | } catch { 71 | logger.error("Failed to set environment variables!"); 72 | process.exit(1); 73 | } 74 | }; 75 | -------------------------------------------------------------------------------- /src/commands/new/config/storage.ts: -------------------------------------------------------------------------------- 1 | import prompts from "prompts"; 2 | 3 | import { config, StorageProvider } from "~/config"; 4 | import { onCancel } from "~/utils"; 5 | import { getLabel } from "~/utils"; 6 | 7 | const getStorageProvider = async (): Promise<{ 8 | [key in typeof config.env.storage.provider]: StorageProvider; 9 | }> => { 10 | return prompts( 11 | [ 12 | { 13 | type: "select", 14 | choices: Object.values(StorageProvider).map((provider) => ({ 15 | title: getLabel(provider), 16 | value: provider, 17 | })), 18 | name: config.env.storage.provider, 19 | message: "What do you want to use for storage?", 20 | }, 21 | ], 22 | { 23 | onCancel, 24 | }, 25 | ); 26 | }; 27 | 28 | const getStorageProviderConfig = () => { 29 | return prompts( 30 | [ 31 | { 32 | type: "text", 33 | name: config.env.storage.s3.region, 34 | message: "Enter your S3 region", 35 | initial: "us-east-1", 36 | }, 37 | { 38 | type: "text", 39 | name: config.env.storage.s3.endpoint, 40 | message: "Enter your S3 endpoint", 41 | initial: "https://s3.amazonaws.com", 42 | }, 43 | { 44 | type: "text", 45 | name: config.env.storage.s3.bucket, 46 | message: "Enter your default S3 bucket name", 47 | }, 48 | { 49 | type: "text", 50 | name: config.env.storage.s3.accessKeyId, 51 | message: "Enter your S3 access key ID", 52 | }, 53 | { 54 | type: "text", 55 | name: config.env.storage.s3.secretAccessKey, 56 | message: "Enter your S3 secret access key", 57 | }, 58 | ], 59 | { 60 | onCancel, 61 | }, 62 | ); 63 | }; 64 | 65 | export const getStorageConfig = async () => { 66 | const provider = await getStorageProvider(); 67 | const config = await getStorageProviderConfig(); 68 | 69 | return { ...provider, ...config }; 70 | }; 71 | -------------------------------------------------------------------------------- /src/commands/new/db.ts: -------------------------------------------------------------------------------- 1 | import { execa } from "execa"; 2 | import ora from "ora"; 3 | 4 | import { validateDockerInstalled } from "~/commands/new/prerequisites"; 5 | 6 | export const startDatabase = async (cwd: string) => { 7 | await validateDockerInstalled(); 8 | 9 | const spinner = ora(`Starting PostgreSQL database...`).start(); 10 | 11 | try { 12 | await execa("pnpm", ["db:setup"], { cwd }); 13 | 14 | spinner.succeed("Database successfully started!"); 15 | } catch (error) { 16 | console.error(error); 17 | spinner.fail("Failed to start database!"); 18 | process.exit(1); 19 | } 20 | }; 21 | -------------------------------------------------------------------------------- /src/commands/new/index.ts: -------------------------------------------------------------------------------- 1 | import { Command } from "commander"; 2 | import { execa } from "execa"; 3 | import ora from "ora"; 4 | import path, { join } from "path"; 5 | import color from "picocolors"; 6 | import prompts from "prompts"; 7 | import { z } from "zod"; 8 | 9 | import { getBillingConfig } from "~/commands/new/config/billing"; 10 | import { getDatabaseConfig } from "~/commands/new/config/db"; 11 | import { getEmailConfig } from "~/commands/new/config/email"; 12 | import { 13 | prepareEnvironment, 14 | setEnvironmentVariables, 15 | } from "~/commands/new/config/env"; 16 | import { getStorageConfig } from "~/commands/new/config/storage"; 17 | import { startDatabase } from "~/commands/new/db"; 18 | import { App, appSpecificFiles, config, DatabaseType } from "~/config"; 19 | import { handleError, logger, onCancel } from "~/utils"; 20 | 21 | import { validatePrerequisites } from "./prerequisites"; 22 | 23 | const newOptionsSchema = z.object({ 24 | cwd: z.string(), 25 | }); 26 | 27 | export const newCommand = new Command() 28 | .name("new") 29 | .description("create a new TurboStarter project") 30 | .option( 31 | "-c, --cwd ", 32 | "the working directory. defaults to the current directory.", 33 | process.cwd(), 34 | ) 35 | .action(async (opts: z.infer) => { 36 | try { 37 | logger.log(`${color.bgYellow(color.black(" TurboStarter "))}\n`); 38 | 39 | const options = newOptionsSchema.parse({ 40 | cwd: path.resolve(opts.cwd), 41 | }); 42 | 43 | await initializeProject(options); 44 | 45 | logger.log( 46 | `\n🎉 You can now get started. Open the project and just ship it! 🎉\n`, 47 | ); 48 | 49 | logger.info( 50 | `Problems? ${color.underline("https://turbostarter.dev/docs")}`, 51 | ); 52 | } catch (error) { 53 | logger.break(); 54 | handleError(error); 55 | } 56 | }); 57 | 58 | const initializeProject = async (options: z.infer) => { 59 | await validatePrerequisites(); 60 | 61 | const global = await prompts( 62 | [ 63 | { 64 | type: "multiselect", 65 | name: "apps", 66 | message: `What do you want to ship?`, 67 | instructions: false, 68 | choices: [ 69 | { title: "Web app", value: App.WEB, selected: true }, 70 | { title: "Mobile app", value: App.MOBILE, selected: false }, 71 | { 72 | title: "Browser extension", 73 | value: App.EXTENSION, 74 | selected: false, 75 | }, 76 | ], 77 | hint: `You ${color.bold("must")} ship a web app, to ensure backend services work.`, 78 | }, 79 | { 80 | type: "text", 81 | name: "name", 82 | message: "Enter your project name.", 83 | validate: (value: string) => 84 | value.length > 0 ? true : "Name is required!", 85 | }, 86 | ], 87 | { 88 | onCancel, 89 | }, 90 | ); 91 | 92 | const dbConfig = await getDatabaseConfig(); 93 | const billingConfig = await getBillingConfig(); 94 | const emailConfig = await getEmailConfig(); 95 | const storageConfig = await getStorageConfig(); 96 | 97 | const config = { 98 | ...("env" in dbConfig ? dbConfig.env : {}), 99 | ...billingConfig, 100 | ...emailConfig, 101 | ...storageConfig, 102 | }; 103 | 104 | const projectDir = await cloneRepository( 105 | options.cwd, 106 | global.name, 107 | global.apps, 108 | ); 109 | await configureGit(projectDir); 110 | await prepareEnvironment(projectDir); 111 | await setEnvironmentVariables(projectDir, config); 112 | await installDependencies(projectDir); 113 | 114 | if (dbConfig.type === DatabaseType.LOCAL) { 115 | await startDatabase(projectDir); 116 | } 117 | }; 118 | 119 | const cloneRepository = async (cwd: string, name: string, apps: App[]) => { 120 | const spinner = ora(`Cloning repository into ${name}...`).start(); 121 | const projectDir = join(cwd, name); 122 | 123 | const filesToRemove = Object.values(App) 124 | .filter((app) => !apps.includes(app)) 125 | .map((app) => appSpecificFiles[app]) 126 | .flat(); 127 | 128 | try { 129 | await execa( 130 | "git", 131 | ["clone", "-b", "main", "--single-branch", config.repository, name], 132 | { cwd }, 133 | ); 134 | 135 | if (filesToRemove.length) { 136 | await execa("rm", ["-rf", ...filesToRemove], { cwd: projectDir }); 137 | } 138 | 139 | spinner.succeed("Repository successfully pulled!"); 140 | return projectDir; 141 | } catch { 142 | spinner.fail("Failed to clone TurboStarter! Please try again."); 143 | process.exit(1); 144 | } 145 | }; 146 | 147 | const configureGit = async (cwd: string) => { 148 | const spinner = ora(`Configuring Git...`).start(); 149 | 150 | try { 151 | await execa("rm", ["-rf", ".git"], { cwd }); 152 | await execa("git", ["init"], { cwd }); 153 | await execa("git", ["remote", "add", "upstream", config.repository], { 154 | cwd, 155 | }); 156 | await execa("git", ["add", "."], { cwd }); 157 | await execa("git", ["commit", "-m", "Initial commit"], { cwd }); 158 | 159 | spinner.succeed("Git successfully configured!"); 160 | } catch { 161 | spinner.fail("Failed to configure Git! Please try again."); 162 | process.exit(1); 163 | } 164 | }; 165 | 166 | const installDependencies = async (cwd: string) => { 167 | const spinner = ora(`Installing dependencies...`).start(); 168 | 169 | try { 170 | await execa("pnpm", ["install"], { cwd }); 171 | 172 | spinner.succeed("Dependencies successfully installed!"); 173 | } catch { 174 | spinner.fail("Failed to install dependencies! Please try again."); 175 | process.exit(1); 176 | } 177 | }; 178 | -------------------------------------------------------------------------------- /src/commands/new/prerequisites.ts: -------------------------------------------------------------------------------- 1 | import { execa } from "execa"; 2 | import ora from "ora"; 3 | import color from "picocolors"; 4 | 5 | import { logger } from "~/utils/logger"; 6 | 7 | export const validateNodeInstalled = async () => { 8 | try { 9 | await execa("node", ["--version"]); 10 | } catch { 11 | logger.error( 12 | "Node.js is not installed. Please install Node.js and try again.\n", 13 | ); 14 | logger.info( 15 | `To install Node.js, visit: ${color.underline("https://nodejs.org/en/")}`, 16 | ); 17 | 18 | process.exit(1); 19 | } 20 | }; 21 | 22 | export const validatePnpmInstalled = async () => { 23 | try { 24 | await execa("pnpm", ["--version"]); 25 | } catch { 26 | try { 27 | await execa("npm", ["install", "-g", "pnpm"]); 28 | } catch { 29 | logger.error( 30 | "pnpm is not installed. Please install pnpm manually and try again. \n", 31 | ); 32 | logger.info( 33 | `To install pnpm, visit: ${color.underline("https://pnpm.io/installation")}`, 34 | ); 35 | 36 | process.exit(1); 37 | } 38 | } 39 | }; 40 | 41 | export const validateDockerInstalled = async () => { 42 | try { 43 | await execa("docker", ["--version"]); 44 | } catch { 45 | logger.error( 46 | "Docker is not installed. Please install Docker and try again.", 47 | ); 48 | logger.info( 49 | `To install Docker, visit: ${color.underline("https://docs.docker.com/get-docker/")}`, 50 | ); 51 | process.exit(1); 52 | } 53 | }; 54 | 55 | const validateGitInstalled = async () => { 56 | try { 57 | await execa("git", ["--version"]); 58 | } catch { 59 | logger.error("Git is not installed. Please install Git and try again."); 60 | logger.info( 61 | `To install Git, visit: ${color.underline("https://git-scm.com/downloads")}`, 62 | ); 63 | process.exit(1); 64 | } 65 | }; 66 | 67 | export const validatePrerequisites = async () => { 68 | const spinner = ora("Checking prerequisites... \n").start(); 69 | try { 70 | await validateGitInstalled(); 71 | await validateNodeInstalled(); 72 | await validatePnpmInstalled(); 73 | spinner.succeed("All prerequisites are satisfied, let's start! 🚀\n"); 74 | } catch { 75 | spinner.fail("Failed to check prerequisites."); 76 | process.exit(1); 77 | } 78 | }; 79 | -------------------------------------------------------------------------------- /src/config.ts: -------------------------------------------------------------------------------- 1 | export const DatabaseType = { 2 | LOCAL: "local", 3 | CLOUD: "cloud", 4 | } as const; 5 | 6 | export const StorageProvider = { 7 | S3: "s3", 8 | } as const; 9 | 10 | export const BillingProvider = { 11 | STRIPE: "stripe", 12 | LEMON_SQUEEZY: "lemon-squeezy", 13 | } as const; 14 | 15 | export const EmailProvider = { 16 | RESEND: "resend", 17 | SENDGRID: "sendgrid", 18 | POSTMARK: "postmark", 19 | PLUNK: "plunk", 20 | NODEMAILER: "nodemailer", 21 | } as const; 22 | 23 | export const EnvPath = { 24 | ROOT: "./", 25 | WEB: "./apps/web", 26 | MOBILE: "./apps/mobile", 27 | EXTENSION: "./apps/extension", 28 | } as const; 29 | 30 | export const EnvFile = { 31 | EXAMPLE: ".env.example", 32 | LOCAL: ".env.local", 33 | } as const; 34 | 35 | export const App = { 36 | WEB: "web", 37 | MOBILE: "mobile", 38 | EXTENSION: "extension", 39 | } as const; 40 | 41 | export type DatabaseType = (typeof DatabaseType)[keyof typeof DatabaseType]; 42 | export type StorageProvider = 43 | (typeof StorageProvider)[keyof typeof StorageProvider]; 44 | export type BillingProvider = 45 | (typeof BillingProvider)[keyof typeof BillingProvider]; 46 | export type EmailProvider = (typeof EmailProvider)[keyof typeof EmailProvider]; 47 | export type EnvPath = (typeof EnvPath)[keyof typeof EnvPath]; 48 | export type EnvFile = (typeof EnvFile)[keyof typeof EnvFile]; 49 | export type App = (typeof App)[keyof typeof App]; 50 | 51 | const env = { 52 | db: { 53 | url: "DATABASE_URL", 54 | }, 55 | billing: { 56 | provider: "BILLING_PROVIDER", 57 | stripe: { 58 | secretKey: "STRIPE_SECRET_KEY", 59 | webhookSecret: "STRIPE_WEBHOOK_SECRET", 60 | }, 61 | lemonsqueezy: { 62 | apiKey: "LEMON_SQUEEZY_API_KEY", 63 | signingSecret: "LEMON_SQUEEZY_SIGNING_SECRET", 64 | storeId: "LEMON_SQUEEZY_STORE_ID", 65 | }, 66 | }, 67 | email: { 68 | provider: "EMAIL_PROVIDER", 69 | resend: { 70 | apiKey: "RESEND_API_KEY", 71 | }, 72 | sendgrid: { 73 | apiKey: "SENDGRID_API_KEY", 74 | }, 75 | plunk: { 76 | apiKey: "PLUNK_API_KEY", 77 | }, 78 | postmark: { 79 | apiKey: "POSTMARK_API_KEY", 80 | }, 81 | nodemailer: { 82 | user: "NODEMAILER_USER", 83 | password: "NODEMAILER_PASSWORD", 84 | host: "NODEMAILER_HOST", 85 | port: "NODEMAILER_PORT", 86 | }, 87 | }, 88 | storage: { 89 | provider: "STORAGE_PROVIDER", 90 | s3: { 91 | region: "S3_REGION", 92 | bucket: "S3_BUCKET", 93 | endpoint: "S3_ENDPOINT", 94 | accessKeyId: "S3_ACCESS_KEY_ID", 95 | secretAccessKey: "S3_SECRET_ACCESS_KEY", 96 | }, 97 | }, 98 | } as const; 99 | 100 | export const envInPaths = { 101 | [EnvPath.ROOT]: [env.db.url], 102 | [EnvPath.WEB]: [ 103 | env.billing.provider, 104 | env.billing.stripe.secretKey, 105 | env.billing.stripe.webhookSecret, 106 | env.billing.lemonsqueezy.apiKey, 107 | env.billing.lemonsqueezy.signingSecret, 108 | env.billing.lemonsqueezy.storeId, 109 | env.email.provider, 110 | env.email.resend.apiKey, 111 | env.email.sendgrid.apiKey, 112 | env.email.plunk.apiKey, 113 | env.email.postmark.apiKey, 114 | env.email.nodemailer.user, 115 | env.email.nodemailer.password, 116 | env.storage.provider, 117 | env.storage.s3.accessKeyId, 118 | env.storage.s3.secretAccessKey, 119 | ], 120 | }; 121 | 122 | export const appSpecificFiles = { 123 | [App.WEB]: [], 124 | [App.MOBILE]: [ 125 | "apps/mobile", 126 | "packages/ui/mobile", 127 | "packages/analytics/mobile", 128 | ".github/workflows/publish-mobile.yml", 129 | ], 130 | [App.EXTENSION]: [ 131 | "apps/extension", 132 | "packages/analytics/extension", 133 | ".github/workflows/publish-extension.yml", 134 | ], 135 | }; 136 | 137 | export const config = { 138 | name: "TurboStarter", 139 | repository: "https://github.com/turbostarter/main.git", 140 | env, 141 | } as const; 142 | -------------------------------------------------------------------------------- /src/index.ts: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env node 2 | import { Command } from "commander"; 3 | 4 | import { newCommand } from "~/commands/new"; 5 | 6 | import packageInfo from "../package.json"; 7 | 8 | process.on("SIGINT", () => process.exit(0)); 9 | process.on("SIGTERM", () => process.exit(0)); 10 | 11 | function main() { 12 | const program = new Command() 13 | .name("turbostarter") 14 | .description( 15 | "Your TurboStarter assistant for starting new projects, adding plugins and more.", 16 | ) 17 | .version( 18 | packageInfo.version || "1.0.0", 19 | "-v, --version", 20 | "display the version number", 21 | ); 22 | 23 | program.addCommand(newCommand); 24 | program.parse(); 25 | } 26 | 27 | void main(); 28 | -------------------------------------------------------------------------------- /src/utils/handle-error.ts: -------------------------------------------------------------------------------- 1 | import { logger } from "./logger"; 2 | 3 | export function handleError(error: unknown) { 4 | if (typeof error === "string") { 5 | logger.error(error); 6 | process.exit(1); 7 | } 8 | 9 | if (error instanceof Error) { 10 | logger.error(error.message); 11 | process.exit(1); 12 | } 13 | 14 | logger.error("Something went wrong. Please try again."); 15 | process.exit(1); 16 | } 17 | -------------------------------------------------------------------------------- /src/utils/index.ts: -------------------------------------------------------------------------------- 1 | import _ from "lodash"; 2 | 3 | import { logger } from "~/utils/logger"; 4 | 5 | export const getLabel = (value: string) => { 6 | return value 7 | .split("-") 8 | .map((word) => _.capitalize(word)) 9 | .join(" "); 10 | }; 11 | 12 | export const onCancel = () => { 13 | logger.break(); 14 | logger.error("Operation cancelled."); 15 | process.exit(0); 16 | }; 17 | 18 | export * from "./handle-error"; 19 | export * from "./logger"; 20 | -------------------------------------------------------------------------------- /src/utils/logger.ts: -------------------------------------------------------------------------------- 1 | import colors from "picocolors"; 2 | 3 | export const logger = { 4 | error(log: string) { 5 | console.log(colors.red(log)); 6 | }, 7 | warn(log: string) { 8 | console.log(colors.yellow(log)); 9 | }, 10 | info(log: string) { 11 | console.log(colors.cyan(log)); 12 | }, 13 | success(log: string) { 14 | console.log(colors.green(log)); 15 | }, 16 | log(log: string) { 17 | console.log(log); 18 | }, 19 | break() { 20 | console.log(""); 21 | }, 22 | }; 23 | -------------------------------------------------------------------------------- /tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "https://json.schemastore.org/tsconfig", 3 | "compilerOptions": { 4 | "baseUrl": ".", 5 | "composite": false, 6 | "declaration": true, 7 | "declarationMap": true, 8 | "esModuleInterop": true, 9 | "forceConsistentCasingInFileNames": true, 10 | "inlineSources": false, 11 | "isolatedModules": false, 12 | "moduleResolution": "node", 13 | "noUnusedLocals": false, 14 | "noUnusedParameters": false, 15 | "preserveWatchOutput": true, 16 | "skipLibCheck": true, 17 | "strict": true, 18 | "resolveJsonModule": true, 19 | "paths": { 20 | "~/*": ["./src/*"] 21 | } 22 | }, 23 | "include": ["*.ts", "src"], 24 | "exclude": ["node_modules"] 25 | } 26 | -------------------------------------------------------------------------------- /tsup.config.ts: -------------------------------------------------------------------------------- 1 | import { defineConfig } from "tsup"; 2 | 3 | export default defineConfig({ 4 | clean: true, 5 | dts: true, 6 | minify: true, 7 | sourcemap: true, 8 | entry: ["src/index.ts"], 9 | format: ["esm"], 10 | target: "esnext", 11 | outDir: "dist", 12 | }); 13 | --------------------------------------------------------------------------------