├── .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 |
--------------------------------------------------------------------------------