├── vitest.config.ts
├── README.md
├── package.json
├── src
├── fsm.test.ts
└── fsm.ts
├── .gitignore
├── LICENSE
└── pnpm-lock.yaml
/vitest.config.ts:
--------------------------------------------------------------------------------
1 | ///
2 | import { defineConfig } from 'vitest/config'
3 |
4 | export default defineConfig({
5 | test: {
6 | typecheck: {
7 | checker: "tsc",
8 | include: ["src/**/*.test.ts"],
9 | }
10 | },
11 | })
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # tstate
2 |
3 | A strongly-typed, pure Typescript state library.
4 |
5 | ## Usage
6 |
7 | This library is highly experimental and not yet published to npm. It's a developing alternative to XState that strives for stronger modularity, minimalism, and especially simpler, stronger typings without code generation.
8 |
--------------------------------------------------------------------------------
/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "tstate",
3 | "version": "1.0.0",
4 | "description": "",
5 | "main": "index.js",
6 | "scripts": {
7 | "test": "vitest --typecheck"
8 | },
9 | "keywords": [],
10 | "author": "",
11 | "license": "ISC",
12 | "devDependencies": {
13 | "typescript": "^5.2.2",
14 | "vitest": "1.0.0-beta.4"
15 | },
16 | "dependencies": {}
17 | }
18 |
--------------------------------------------------------------------------------
/src/fsm.test.ts:
--------------------------------------------------------------------------------
1 | import {
2 | StateDefinition_Events,
3 | createStateDefinition,
4 | createStateMachine,
5 | } from "./fsm";
6 | import { test, expectTypeOf, expect } from "vitest";
7 |
8 | test("state definition typings", () => {
9 | const def = createStateDefinition({
10 | on: {
11 | foo: {
12 | target: "bar",
13 | },
14 | bar: {
15 | target: "init",
16 | },
17 | },
18 | });
19 |
20 | const x: StateDefinition_Events = "foo";
21 | expectTypeOf(x).toEqualTypeOf<"foo" | "bar">;
22 | });
23 |
24 | test("a basic machine transitions", () => {
25 | const machine = createStateMachine(
26 | {
27 | init: createStateDefinition({
28 | on: {
29 | foo: {
30 | target: "bar",
31 | },
32 | bar: {
33 | target: "init",
34 | },
35 | },
36 | }),
37 | bar: createStateDefinition({
38 | on: {
39 | baz: {
40 | target: "init",
41 | },
42 | },
43 | }),
44 | },
45 | "init"
46 | );
47 |
48 | const res = machine.send("foo");
49 | expect(res.value).toEqual("bar");
50 |
51 | const res2 = res.send("baz");
52 | expect(res2.value).toEqual("init");
53 | });
54 |
--------------------------------------------------------------------------------
/src/fsm.ts:
--------------------------------------------------------------------------------
1 | type TSError = never;
2 |
3 | type StateDefinition<
4 | State extends string,
5 | Events extends string,
6 | Context extends unknown,
7 | EventTargetMap extends { [K in Events]: { target: State } }
8 | > = {
9 | _ctx: Context;
10 | on: EventTargetMap;
11 | };
12 |
13 | export type StateDefinition_Events = Definition extends {
14 | on: { [K in infer Events]: unknown };
15 | }
16 | ? Events extends string
17 | ? Events
18 | : TSError<"StateDefinition events did not extend string">
19 | : TSError<"could not infer StateDefinition events">;
20 |
21 | type MachineDefinition = {
22 | [State in string]: StateDefinition<
23 | States,
24 | string,
25 | unknown,
26 | { [key: string]: { target: States } }
27 | >;
28 | };
29 |
30 | type StateValue<
31 | State extends string,
32 | Machine extends MachineDefinition
33 | > = {
34 | value: State;
35 | send: >(
36 | event: Event
37 | ) => StateValue;
38 | };
39 |
40 | export const createStateMachine = <
41 | const Definition extends MachineDefinition,
42 | const States extends keyof Definition & string,
43 | const InitialState extends States
44 | >(
45 | definition: Definition,
46 | initialState: InitialState
47 | ): StateValue => {
48 | return {
49 | value: initialState,
50 | send(event) {
51 | return createStateMachine(
52 | definition,
53 | definition[initialState].on[event].target
54 | );
55 | },
56 | } as StateValue;
57 | };
58 |
59 | export const createStateDefinition = <
60 | Context,
61 | const Definition extends Omit<
62 | StateDefinition<
63 | string,
64 | string,
65 | Context,
66 | { [key: string]: { target: string } }
67 | >,
68 | "_ctx"
69 | >
70 | >(
71 | definition: Definition
72 | ): StateDefinition<
73 | Definition["on"][keyof Definition["on"]]["target"],
74 | StateDefinition_Events,
75 | Context,
76 | Definition["on"]
77 | > =>
78 | ({
79 | ...definition,
80 | _ctx: undefined as unknown as Context,
81 | } as StateDefinition<
82 | Definition["on"][StateDefinition_Events]["target"],
83 | StateDefinition_Events,
84 | Context,
85 | Definition["on"]
86 | >);
87 |
--------------------------------------------------------------------------------
/.gitignore:
--------------------------------------------------------------------------------
1 | # Created by https://www.toptal.com/developers/gitignore/api/node
2 | # Edit at https://www.toptal.com/developers/gitignore?templates=node
3 |
4 | ### Node ###
5 | # Logs
6 | logs
7 | *.log
8 | npm-debug.log*
9 | yarn-debug.log*
10 | yarn-error.log*
11 | lerna-debug.log*
12 | .pnpm-debug.log*
13 |
14 | # Diagnostic reports (https://nodejs.org/api/report.html)
15 | report.[0-9]*.[0-9]*.[0-9]*.[0-9]*.json
16 |
17 | # Runtime data
18 | pids
19 | *.pid
20 | *.seed
21 | *.pid.lock
22 |
23 | # Directory for instrumented libs generated by jscoverage/JSCover
24 | lib-cov
25 |
26 | # Coverage directory used by tools like istanbul
27 | coverage
28 | *.lcov
29 |
30 | # nyc test coverage
31 | .nyc_output
32 |
33 | # Grunt intermediate storage (https://gruntjs.com/creating-plugins#storing-task-files)
34 | .grunt
35 |
36 | # Bower dependency directory (https://bower.io/)
37 | bower_components
38 |
39 | # node-waf configuration
40 | .lock-wscript
41 |
42 | # Compiled binary addons (https://nodejs.org/api/addons.html)
43 | build/Release
44 |
45 | # Dependency directories
46 | node_modules/
47 | jspm_packages/
48 |
49 | # Snowpack dependency directory (https://snowpack.dev/)
50 | web_modules/
51 |
52 | # TypeScript cache
53 | *.tsbuildinfo
54 |
55 | # Optional npm cache directory
56 | .npm
57 |
58 | # Optional eslint cache
59 | .eslintcache
60 |
61 | # Optional stylelint cache
62 | .stylelintcache
63 |
64 | # Microbundle cache
65 | .rpt2_cache/
66 | .rts2_cache_cjs/
67 | .rts2_cache_es/
68 | .rts2_cache_umd/
69 |
70 | # Optional REPL history
71 | .node_repl_history
72 |
73 | # Output of 'npm pack'
74 | *.tgz
75 |
76 | # Yarn Integrity file
77 | .yarn-integrity
78 |
79 | # dotenv environment variable files
80 | .env
81 | .env.development.local
82 | .env.test.local
83 | .env.production.local
84 | .env.local
85 |
86 | # parcel-bundler cache (https://parceljs.org/)
87 | .cache
88 | .parcel-cache
89 |
90 | # Next.js build output
91 | .next
92 | out
93 |
94 | # Nuxt.js build / generate output
95 | .nuxt
96 | dist
97 |
98 | # Gatsby files
99 | .cache/
100 | # Comment in the public line in if your project uses Gatsby and not Next.js
101 | # https://nextjs.org/blog/next-9-1#public-directory-support
102 | # public
103 |
104 | # vuepress build output
105 | .vuepress/dist
106 |
107 | # vuepress v2.x temp and cache directory
108 | .temp
109 |
110 | # Docusaurus cache and generated files
111 | .docusaurus
112 |
113 | # Serverless directories
114 | .serverless/
115 |
116 | # FuseBox cache
117 | .fusebox/
118 |
119 | # DynamoDB Local files
120 | .dynamodb/
121 |
122 | # TernJS port file
123 | .tern-port
124 |
125 | # Stores VSCode versions used for testing VSCode extensions
126 | .vscode-test
127 |
128 | # yarn v2
129 | .yarn/cache
130 | .yarn/unplugged
131 | .yarn/build-state.yml
132 | .yarn/install-state.gz
133 | .pnp.*
134 |
135 | ### Node Patch ###
136 | # Serverless Webpack directories
137 | .webpack/
138 |
139 | # Optional stylelint cache
140 |
141 | # SvelteKit build / generate output
142 | .svelte-kit
143 |
144 | # End of https://www.toptal.com/developers/gitignore/api/node
145 |
146 | .DS_Store
147 |
--------------------------------------------------------------------------------
/LICENSE:
--------------------------------------------------------------------------------
1 | EUROPEAN UNION PUBLIC LICENCE v. 1.2
2 | EUPL © the European Union 2007, 2016
3 |
4 | This European Union Public Licence (the ‘EUPL’) applies to the Work (as defined
5 | below) which is provided under the terms of this Licence. Any use of the Work,
6 | other than as authorised under this Licence is prohibited (to the extent such
7 | use is covered by a right of the copyright holder of the Work).
8 |
9 | The Work is provided under the terms of this Licence when the Licensor (as
10 | defined below) has placed the following notice immediately following the
11 | copyright notice for the Work:
12 |
13 | Licensed under the EUPL
14 |
15 | or has expressed by any other means his willingness to license under the EUPL.
16 |
17 | 1. Definitions
18 |
19 | In this Licence, the following terms have the following meaning:
20 |
21 | - ‘The Licence’: this Licence.
22 |
23 | - ‘The Original Work’: the work or software distributed or communicated by the
24 | Licensor under this Licence, available as Source Code and also as Executable
25 | Code as the case may be.
26 |
27 | - ‘Derivative Works’: the works or software that could be created by the
28 | Licensee, based upon the Original Work or modifications thereof. This Licence
29 | does not define the extent of modification or dependence on the Original Work
30 | required in order to classify a work as a Derivative Work; this extent is
31 | determined by copyright law applicable in the country mentioned in Article 15.
32 |
33 | - ‘The Work’: the Original Work or its Derivative Works.
34 |
35 | - ‘The Source Code’: the human-readable form of the Work which is the most
36 | convenient for people to study and modify.
37 |
38 | - ‘The Executable Code’: any code which has generally been compiled and which is
39 | meant to be interpreted by a computer as a program.
40 |
41 | - ‘The Licensor’: the natural or legal person that distributes or communicates
42 | the Work under the Licence.
43 |
44 | - ‘Contributor(s)’: any natural or legal person who modifies the Work under the
45 | Licence, or otherwise contributes to the creation of a Derivative Work.
46 |
47 | - ‘The Licensee’ or ‘You’: any natural or legal person who makes any usage of
48 | the Work under the terms of the Licence.
49 |
50 | - ‘Distribution’ or ‘Communication’: any act of selling, giving, lending,
51 | renting, distributing, communicating, transmitting, or otherwise making
52 | available, online or offline, copies of the Work or providing access to its
53 | essential functionalities at the disposal of any other natural or legal
54 | person.
55 |
56 | 2. Scope of the rights granted by the Licence
57 |
58 | The Licensor hereby grants You a worldwide, royalty-free, non-exclusive,
59 | sublicensable licence to do the following, for the duration of copyright vested
60 | in the Original Work:
61 |
62 | - use the Work in any circumstance and for all usage,
63 | - reproduce the Work,
64 | - modify the Work, and make Derivative Works based upon the Work,
65 | - communicate to the public, including the right to make available or display
66 | the Work or copies thereof to the public and perform publicly, as the case may
67 | be, the Work,
68 | - distribute the Work or copies thereof,
69 | - lend and rent the Work or copies thereof,
70 | - sublicense rights in the Work or copies thereof.
71 |
72 | Those rights can be exercised on any media, supports and formats, whether now
73 | known or later invented, as far as the applicable law permits so.
74 |
75 | In the countries where moral rights apply, the Licensor waives his right to
76 | exercise his moral right to the extent allowed by law in order to make effective
77 | the licence of the economic rights here above listed.
78 |
79 | The Licensor grants to the Licensee royalty-free, non-exclusive usage rights to
80 | any patents held by the Licensor, to the extent necessary to make use of the
81 | rights granted on the Work under this Licence.
82 |
83 | 3. Communication of the Source Code
84 |
85 | The Licensor may provide the Work either in its Source Code form, or as
86 | Executable Code. If the Work is provided as Executable Code, the Licensor
87 | provides in addition a machine-readable copy of the Source Code of the Work
88 | along with each copy of the Work that the Licensor distributes or indicates, in
89 | a notice following the copyright notice attached to the Work, a repository where
90 | the Source Code is easily and freely accessible for as long as the Licensor
91 | continues to distribute or communicate the Work.
92 |
93 | 4. Limitations on copyright
94 |
95 | Nothing in this Licence is intended to deprive the Licensee of the benefits from
96 | any exception or limitation to the exclusive rights of the rights owners in the
97 | Work, of the exhaustion of those rights or of other applicable limitations
98 | thereto.
99 |
100 | 5. Obligations of the Licensee
101 |
102 | The grant of the rights mentioned above is subject to some restrictions and
103 | obligations imposed on the Licensee. Those obligations are the following:
104 |
105 | Attribution right: The Licensee shall keep intact all copyright, patent or
106 | trademarks notices and all notices that refer to the Licence and to the
107 | disclaimer of warranties. The Licensee must include a copy of such notices and a
108 | copy of the Licence with every copy of the Work he/she distributes or
109 | communicates. The Licensee must cause any Derivative Work to carry prominent
110 | notices stating that the Work has been modified and the date of modification.
111 |
112 | Copyleft clause: If the Licensee distributes or communicates copies of the
113 | Original Works or Derivative Works, this Distribution or Communication will be
114 | done under the terms of this Licence or of a later version of this Licence
115 | unless the Original Work is expressly distributed only under this version of the
116 | Licence — for example by communicating ‘EUPL v. 1.2 only’. The Licensee
117 | (becoming Licensor) cannot offer or impose any additional terms or conditions on
118 | the Work or Derivative Work that alter or restrict the terms of the Licence.
119 |
120 | Compatibility clause: If the Licensee Distributes or Communicates Derivative
121 | Works or copies thereof based upon both the Work and another work licensed under
122 | a Compatible Licence, this Distribution or Communication can be done under the
123 | terms of this Compatible Licence. For the sake of this clause, ‘Compatible
124 | Licence’ refers to the licences listed in the appendix attached to this Licence.
125 | Should the Licensee's obligations under the Compatible Licence conflict with
126 | his/her obligations under this Licence, the obligations of the Compatible
127 | Licence shall prevail.
128 |
129 | Provision of Source Code: When distributing or communicating copies of the Work,
130 | the Licensee will provide a machine-readable copy of the Source Code or indicate
131 | a repository where this Source will be easily and freely available for as long
132 | as the Licensee continues to distribute or communicate the Work.
133 |
134 | Legal Protection: This Licence does not grant permission to use the trade names,
135 | trademarks, service marks, or names of the Licensor, except as required for
136 | reasonable and customary use in describing the origin of the Work and
137 | reproducing the content of the copyright notice.
138 |
139 | 6. Chain of Authorship
140 |
141 | The original Licensor warrants that the copyright in the Original Work granted
142 | hereunder is owned by him/her or licensed to him/her and that he/she has the
143 | power and authority to grant the Licence.
144 |
145 | Each Contributor warrants that the copyright in the modifications he/she brings
146 | to the Work are owned by him/her or licensed to him/her and that he/she has the
147 | power and authority to grant the Licence.
148 |
149 | Each time You accept the Licence, the original Licensor and subsequent
150 | Contributors grant You a licence to their contributions to the Work, under the
151 | terms of this Licence.
152 |
153 | 7. Disclaimer of Warranty
154 |
155 | The Work is a work in progress, which is continuously improved by numerous
156 | Contributors. It is not a finished work and may therefore contain defects or
157 | ‘bugs’ inherent to this type of development.
158 |
159 | For the above reason, the Work is provided under the Licence on an ‘as is’ basis
160 | and without warranties of any kind concerning the Work, including without
161 | limitation merchantability, fitness for a particular purpose, absence of defects
162 | or errors, accuracy, non-infringement of intellectual property rights other than
163 | copyright as stated in Article 6 of this Licence.
164 |
165 | This disclaimer of warranty is an essential part of the Licence and a condition
166 | for the grant of any rights to the Work.
167 |
168 | 8. Disclaimer of Liability
169 |
170 | Except in the cases of wilful misconduct or damages directly caused to natural
171 | persons, the Licensor will in no event be liable for any direct or indirect,
172 | material or moral, damages of any kind, arising out of the Licence or of the use
173 | of the Work, including without limitation, damages for loss of goodwill, work
174 | stoppage, computer failure or malfunction, loss of data or any commercial
175 | damage, even if the Licensor has been advised of the possibility of such damage.
176 | However, the Licensor will be liable under statutory product liability laws as
177 | far such laws apply to the Work.
178 |
179 | 9. Additional agreements
180 |
181 | While distributing the Work, You may choose to conclude an additional agreement,
182 | defining obligations or services consistent with this Licence. However, if
183 | accepting obligations, You may act only on your own behalf and on your sole
184 | responsibility, not on behalf of the original Licensor or any other Contributor,
185 | and only if You agree to indemnify, defend, and hold each Contributor harmless
186 | for any liability incurred by, or claims asserted against such Contributor by
187 | the fact You have accepted any warranty or additional liability.
188 |
189 | 10. Acceptance of the Licence
190 |
191 | The provisions of this Licence can be accepted by clicking on an icon ‘I agree’
192 | placed under the bottom of a window displaying the text of this Licence or by
193 | affirming consent in any other similar way, in accordance with the rules of
194 | applicable law. Clicking on that icon indicates your clear and irrevocable
195 | acceptance of this Licence and all of its terms and conditions.
196 |
197 | Similarly, you irrevocably accept this Licence and all of its terms and
198 | conditions by exercising any rights granted to You by Article 2 of this Licence,
199 | such as the use of the Work, the creation by You of a Derivative Work or the
200 | Distribution or Communication by You of the Work or copies thereof.
201 |
202 | 11. Information to the public
203 |
204 | In case of any Distribution or Communication of the Work by means of electronic
205 | communication by You (for example, by offering to download the Work from a
206 | remote location) the distribution channel or media (for example, a website) must
207 | at least provide to the public the information requested by the applicable law
208 | regarding the Licensor, the Licence and the way it may be accessible, concluded,
209 | stored and reproduced by the Licensee.
210 |
211 | 12. Termination of the Licence
212 |
213 | The Licence and the rights granted hereunder will terminate automatically upon
214 | any breach by the Licensee of the terms of the Licence.
215 |
216 | Such a termination will not terminate the licences of any person who has
217 | received the Work from the Licensee under the Licence, provided such persons
218 | remain in full compliance with the Licence.
219 |
220 | 13. Miscellaneous
221 |
222 | Without prejudice of Article 9 above, the Licence represents the complete
223 | agreement between the Parties as to the Work.
224 |
225 | If any provision of the Licence is invalid or unenforceable under applicable
226 | law, this will not affect the validity or enforceability of the Licence as a
227 | whole. Such provision will be construed or reformed so as necessary to make it
228 | valid and enforceable.
229 |
230 | The European Commission may publish other linguistic versions or new versions of
231 | this Licence or updated versions of the Appendix, so far this is required and
232 | reasonable, without reducing the scope of the rights granted by the Licence. New
233 | versions of the Licence will be published with a unique version number.
234 |
235 | All linguistic versions of this Licence, approved by the European Commission,
236 | have identical value. Parties can take advantage of the linguistic version of
237 | their choice.
238 |
239 | 14. Jurisdiction
240 |
241 | Without prejudice to specific agreement between parties,
242 |
243 | - any litigation resulting from the interpretation of this License, arising
244 | between the European Union institutions, bodies, offices or agencies, as a
245 | Licensor, and any Licensee, will be subject to the jurisdiction of the Court
246 | of Justice of the European Union, as laid down in article 272 of the Treaty on
247 | the Functioning of the European Union,
248 |
249 | - any litigation arising between other parties and resulting from the
250 | interpretation of this License, will be subject to the exclusive jurisdiction
251 | of the competent court where the Licensor resides or conducts its primary
252 | business.
253 |
254 | 15. Applicable Law
255 |
256 | Without prejudice to specific agreement between parties,
257 |
258 | - this Licence shall be governed by the law of the European Union Member State
259 | where the Licensor has his seat, resides or has his registered office,
260 |
261 | - this licence shall be governed by Belgian law if the Licensor has no seat,
262 | residence or registered office inside a European Union Member State.
263 |
264 | Appendix
265 |
266 | ‘Compatible Licences’ according to Article 5 EUPL are:
267 |
268 | - GNU General Public License (GPL) v. 2, v. 3
269 | - GNU Affero General Public License (AGPL) v. 3
270 | - Open Software License (OSL) v. 2.1, v. 3.0
271 | - Eclipse Public License (EPL) v. 1.0
272 | - CeCILL v. 2.0, v. 2.1
273 | - Mozilla Public Licence (MPL) v. 2
274 | - GNU Lesser General Public Licence (LGPL) v. 2.1, v. 3
275 | - Creative Commons Attribution-ShareAlike v. 3.0 Unported (CC BY-SA 3.0) for
276 | works other than software
277 | - European Union Public Licence (EUPL) v. 1.1, v. 1.2
278 | - Québec Free and Open-Source Licence — Reciprocity (LiLiQ-R) or Strong
279 | Reciprocity (LiLiQ-R+).
280 |
281 | The European Commission may update this Appendix to later versions of the above
282 | licences without producing a new version of the EUPL, as long as they provide
283 | the rights granted in Article 2 of this Licence and protect the covered Source
284 | Code from exclusive appropriation.
285 |
286 | All other changes or additions to this Appendix require the production of a new
287 | EUPL version.
--------------------------------------------------------------------------------
/pnpm-lock.yaml:
--------------------------------------------------------------------------------
1 | lockfileVersion: '6.0'
2 |
3 | settings:
4 | autoInstallPeers: true
5 | excludeLinksFromLockfile: false
6 |
7 | devDependencies:
8 | typescript:
9 | specifier: ^5.2.2
10 | version: 5.2.2
11 | vitest:
12 | specifier: 1.0.0-beta.4
13 | version: 1.0.0-beta.4
14 |
15 | packages:
16 |
17 | /@esbuild/android-arm64@0.18.20:
18 | resolution: {integrity: sha512-Nz4rJcchGDtENV0eMKUNa6L12zz2zBDXuhj/Vjh18zGqB44Bi7MBMSXjgunJgjRhCmKOjnPuZp4Mb6OKqtMHLQ==}
19 | engines: {node: '>=12'}
20 | cpu: [arm64]
21 | os: [android]
22 | requiresBuild: true
23 | dev: true
24 | optional: true
25 |
26 | /@esbuild/android-arm@0.18.20:
27 | resolution: {integrity: sha512-fyi7TDI/ijKKNZTUJAQqiG5T7YjJXgnzkURqmGj13C6dCqckZBLdl4h7bkhHt/t0WP+zO9/zwroDvANaOqO5Sw==}
28 | engines: {node: '>=12'}
29 | cpu: [arm]
30 | os: [android]
31 | requiresBuild: true
32 | dev: true
33 | optional: true
34 |
35 | /@esbuild/android-x64@0.18.20:
36 | resolution: {integrity: sha512-8GDdlePJA8D6zlZYJV/jnrRAi6rOiNaCC/JclcXpB+KIuvfBN4owLtgzY2bsxnx666XjJx2kDPUmnTtR8qKQUg==}
37 | engines: {node: '>=12'}
38 | cpu: [x64]
39 | os: [android]
40 | requiresBuild: true
41 | dev: true
42 | optional: true
43 |
44 | /@esbuild/darwin-arm64@0.18.20:
45 | resolution: {integrity: sha512-bxRHW5kHU38zS2lPTPOyuyTm+S+eobPUnTNkdJEfAddYgEcll4xkT8DB9d2008DtTbl7uJag2HuE5NZAZgnNEA==}
46 | engines: {node: '>=12'}
47 | cpu: [arm64]
48 | os: [darwin]
49 | requiresBuild: true
50 | dev: true
51 | optional: true
52 |
53 | /@esbuild/darwin-x64@0.18.20:
54 | resolution: {integrity: sha512-pc5gxlMDxzm513qPGbCbDukOdsGtKhfxD1zJKXjCCcU7ju50O7MeAZ8c4krSJcOIJGFR+qx21yMMVYwiQvyTyQ==}
55 | engines: {node: '>=12'}
56 | cpu: [x64]
57 | os: [darwin]
58 | requiresBuild: true
59 | dev: true
60 | optional: true
61 |
62 | /@esbuild/freebsd-arm64@0.18.20:
63 | resolution: {integrity: sha512-yqDQHy4QHevpMAaxhhIwYPMv1NECwOvIpGCZkECn8w2WFHXjEwrBn3CeNIYsibZ/iZEUemj++M26W3cNR5h+Tw==}
64 | engines: {node: '>=12'}
65 | cpu: [arm64]
66 | os: [freebsd]
67 | requiresBuild: true
68 | dev: true
69 | optional: true
70 |
71 | /@esbuild/freebsd-x64@0.18.20:
72 | resolution: {integrity: sha512-tgWRPPuQsd3RmBZwarGVHZQvtzfEBOreNuxEMKFcd5DaDn2PbBxfwLcj4+aenoh7ctXcbXmOQIn8HI6mCSw5MQ==}
73 | engines: {node: '>=12'}
74 | cpu: [x64]
75 | os: [freebsd]
76 | requiresBuild: true
77 | dev: true
78 | optional: true
79 |
80 | /@esbuild/linux-arm64@0.18.20:
81 | resolution: {integrity: sha512-2YbscF+UL7SQAVIpnWvYwM+3LskyDmPhe31pE7/aoTMFKKzIc9lLbyGUpmmb8a8AixOL61sQ/mFh3jEjHYFvdA==}
82 | engines: {node: '>=12'}
83 | cpu: [arm64]
84 | os: [linux]
85 | requiresBuild: true
86 | dev: true
87 | optional: true
88 |
89 | /@esbuild/linux-arm@0.18.20:
90 | resolution: {integrity: sha512-/5bHkMWnq1EgKr1V+Ybz3s1hWXok7mDFUMQ4cG10AfW3wL02PSZi5kFpYKrptDsgb2WAJIvRcDm+qIvXf/apvg==}
91 | engines: {node: '>=12'}
92 | cpu: [arm]
93 | os: [linux]
94 | requiresBuild: true
95 | dev: true
96 | optional: true
97 |
98 | /@esbuild/linux-ia32@0.18.20:
99 | resolution: {integrity: sha512-P4etWwq6IsReT0E1KHU40bOnzMHoH73aXp96Fs8TIT6z9Hu8G6+0SHSw9i2isWrD2nbx2qo5yUqACgdfVGx7TA==}
100 | engines: {node: '>=12'}
101 | cpu: [ia32]
102 | os: [linux]
103 | requiresBuild: true
104 | dev: true
105 | optional: true
106 |
107 | /@esbuild/linux-loong64@0.18.20:
108 | resolution: {integrity: sha512-nXW8nqBTrOpDLPgPY9uV+/1DjxoQ7DoB2N8eocyq8I9XuqJ7BiAMDMf9n1xZM9TgW0J8zrquIb/A7s3BJv7rjg==}
109 | engines: {node: '>=12'}
110 | cpu: [loong64]
111 | os: [linux]
112 | requiresBuild: true
113 | dev: true
114 | optional: true
115 |
116 | /@esbuild/linux-mips64el@0.18.20:
117 | resolution: {integrity: sha512-d5NeaXZcHp8PzYy5VnXV3VSd2D328Zb+9dEq5HE6bw6+N86JVPExrA6O68OPwobntbNJ0pzCpUFZTo3w0GyetQ==}
118 | engines: {node: '>=12'}
119 | cpu: [mips64el]
120 | os: [linux]
121 | requiresBuild: true
122 | dev: true
123 | optional: true
124 |
125 | /@esbuild/linux-ppc64@0.18.20:
126 | resolution: {integrity: sha512-WHPyeScRNcmANnLQkq6AfyXRFr5D6N2sKgkFo2FqguP44Nw2eyDlbTdZwd9GYk98DZG9QItIiTlFLHJHjxP3FA==}
127 | engines: {node: '>=12'}
128 | cpu: [ppc64]
129 | os: [linux]
130 | requiresBuild: true
131 | dev: true
132 | optional: true
133 |
134 | /@esbuild/linux-riscv64@0.18.20:
135 | resolution: {integrity: sha512-WSxo6h5ecI5XH34KC7w5veNnKkju3zBRLEQNY7mv5mtBmrP/MjNBCAlsM2u5hDBlS3NGcTQpoBvRzqBcRtpq1A==}
136 | engines: {node: '>=12'}
137 | cpu: [riscv64]
138 | os: [linux]
139 | requiresBuild: true
140 | dev: true
141 | optional: true
142 |
143 | /@esbuild/linux-s390x@0.18.20:
144 | resolution: {integrity: sha512-+8231GMs3mAEth6Ja1iK0a1sQ3ohfcpzpRLH8uuc5/KVDFneH6jtAJLFGafpzpMRO6DzJ6AvXKze9LfFMrIHVQ==}
145 | engines: {node: '>=12'}
146 | cpu: [s390x]
147 | os: [linux]
148 | requiresBuild: true
149 | dev: true
150 | optional: true
151 |
152 | /@esbuild/linux-x64@0.18.20:
153 | resolution: {integrity: sha512-UYqiqemphJcNsFEskc73jQ7B9jgwjWrSayxawS6UVFZGWrAAtkzjxSqnoclCXxWtfwLdzU+vTpcNYhpn43uP1w==}
154 | engines: {node: '>=12'}
155 | cpu: [x64]
156 | os: [linux]
157 | requiresBuild: true
158 | dev: true
159 | optional: true
160 |
161 | /@esbuild/netbsd-x64@0.18.20:
162 | resolution: {integrity: sha512-iO1c++VP6xUBUmltHZoMtCUdPlnPGdBom6IrO4gyKPFFVBKioIImVooR5I83nTew5UOYrk3gIJhbZh8X44y06A==}
163 | engines: {node: '>=12'}
164 | cpu: [x64]
165 | os: [netbsd]
166 | requiresBuild: true
167 | dev: true
168 | optional: true
169 |
170 | /@esbuild/openbsd-x64@0.18.20:
171 | resolution: {integrity: sha512-e5e4YSsuQfX4cxcygw/UCPIEP6wbIL+se3sxPdCiMbFLBWu0eiZOJ7WoD+ptCLrmjZBK1Wk7I6D/I3NglUGOxg==}
172 | engines: {node: '>=12'}
173 | cpu: [x64]
174 | os: [openbsd]
175 | requiresBuild: true
176 | dev: true
177 | optional: true
178 |
179 | /@esbuild/sunos-x64@0.18.20:
180 | resolution: {integrity: sha512-kDbFRFp0YpTQVVrqUd5FTYmWo45zGaXe0X8E1G/LKFC0v8x0vWrhOWSLITcCn63lmZIxfOMXtCfti/RxN/0wnQ==}
181 | engines: {node: '>=12'}
182 | cpu: [x64]
183 | os: [sunos]
184 | requiresBuild: true
185 | dev: true
186 | optional: true
187 |
188 | /@esbuild/win32-arm64@0.18.20:
189 | resolution: {integrity: sha512-ddYFR6ItYgoaq4v4JmQQaAI5s7npztfV4Ag6NrhiaW0RrnOXqBkgwZLofVTlq1daVTQNhtI5oieTvkRPfZrePg==}
190 | engines: {node: '>=12'}
191 | cpu: [arm64]
192 | os: [win32]
193 | requiresBuild: true
194 | dev: true
195 | optional: true
196 |
197 | /@esbuild/win32-ia32@0.18.20:
198 | resolution: {integrity: sha512-Wv7QBi3ID/rROT08SABTS7eV4hX26sVduqDOTe1MvGMjNd3EjOz4b7zeexIR62GTIEKrfJXKL9LFxTYgkyeu7g==}
199 | engines: {node: '>=12'}
200 | cpu: [ia32]
201 | os: [win32]
202 | requiresBuild: true
203 | dev: true
204 | optional: true
205 |
206 | /@esbuild/win32-x64@0.18.20:
207 | resolution: {integrity: sha512-kTdfRcSiDfQca/y9QIkng02avJ+NCaQvrMejlsB3RRv5sE9rRoeBPISaZpKxHELzRxZyLvNts1P27W3wV+8geQ==}
208 | engines: {node: '>=12'}
209 | cpu: [x64]
210 | os: [win32]
211 | requiresBuild: true
212 | dev: true
213 | optional: true
214 |
215 | /@jest/schemas@29.6.3:
216 | resolution: {integrity: sha512-mo5j5X+jIZmJQveBKeS/clAueipV7KgiX1vMgCxam1RNYiqE1w62n0/tJJnHtjW8ZHcQco5gY85jA3mi0L+nSA==}
217 | engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
218 | dependencies:
219 | '@sinclair/typebox': 0.27.8
220 | dev: true
221 |
222 | /@jridgewell/sourcemap-codec@1.4.15:
223 | resolution: {integrity: sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==}
224 | dev: true
225 |
226 | /@sinclair/typebox@0.27.8:
227 | resolution: {integrity: sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA==}
228 | dev: true
229 |
230 | /@vitest/expect@1.0.0-beta.4:
231 | resolution: {integrity: sha512-JOpNEva2AFxfySH3F+X+hT52Kq/ZdIrGtzWYbj6yRuBuxFqM55n/7/jV4XtQG+XkmehP3OUZGx5zISOU8KHPQw==}
232 | dependencies:
233 | '@vitest/spy': 1.0.0-beta.4
234 | '@vitest/utils': 1.0.0-beta.4
235 | chai: 4.3.10
236 | dev: true
237 |
238 | /@vitest/runner@1.0.0-beta.4:
239 | resolution: {integrity: sha512-rlXCMp5MxMVVVN5hdhzPL9NpIkfZC0EXwAtN5gwBbCBoVRv9dBQiZ5qTw+LaNmugPl8gm76U4e4/nMZS9s6wyw==}
240 | dependencies:
241 | '@vitest/utils': 1.0.0-beta.4
242 | p-limit: 4.0.0
243 | pathe: 1.1.1
244 | dev: true
245 |
246 | /@vitest/snapshot@1.0.0-beta.4:
247 | resolution: {integrity: sha512-CzmHLGo4RNEQUojYtuEz8wWKp9/p3hvXskejRRJB1iCRH48uWROmoyb2iEQUhgpQw/+WwI4wRP7jek5lp48pRA==}
248 | dependencies:
249 | magic-string: 0.30.5
250 | pathe: 1.1.1
251 | pretty-format: 29.7.0
252 | dev: true
253 |
254 | /@vitest/spy@1.0.0-beta.4:
255 | resolution: {integrity: sha512-YvKUUl7KucKzLJb8+RTd8H3G24EVPGk+CVMFawwtD/KuYjBzM8RCh3oJTTba6ktLpB8JLVy8NVTNL4Oeigqs8A==}
256 | dependencies:
257 | tinyspy: 2.2.0
258 | dev: true
259 |
260 | /@vitest/utils@1.0.0-beta.4:
261 | resolution: {integrity: sha512-YY4bhhVqyTxuNwuZJXiCM4/D0Z7Z3H3JDHNM8gXty7EyRUf4iPDQtXzIWe1r4zdTtoFnzFAeMr+891pWlv4SPA==}
262 | dependencies:
263 | diff-sequences: 29.6.3
264 | loupe: 2.3.7
265 | pretty-format: 29.7.0
266 | dev: true
267 |
268 | /acorn-walk@8.3.0:
269 | resolution: {integrity: sha512-FS7hV565M5l1R08MXqo8odwMTB02C2UqzB17RVgu9EyuYFBqJZ3/ZY97sQD5FewVu1UyDFc1yztUDrAwT0EypA==}
270 | engines: {node: '>=0.4.0'}
271 | dev: true
272 |
273 | /acorn@8.11.2:
274 | resolution: {integrity: sha512-nc0Axzp/0FILLEVsm4fNwLCwMttvhEI263QtVPQcbpfZZ3ts0hLsZGOpE6czNlid7CJ9MlyH8reXkpsf3YUY4w==}
275 | engines: {node: '>=0.4.0'}
276 | hasBin: true
277 | dev: true
278 |
279 | /ansi-styles@5.2.0:
280 | resolution: {integrity: sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==}
281 | engines: {node: '>=10'}
282 | dev: true
283 |
284 | /assertion-error@1.1.0:
285 | resolution: {integrity: sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw==}
286 | dev: true
287 |
288 | /cac@6.7.14:
289 | resolution: {integrity: sha512-b6Ilus+c3RrdDk+JhLKUAQfzzgLEPy6wcXqS7f/xe1EETvsDP6GORG7SFuOs6cID5YkqchW/LXZbX5bc8j7ZcQ==}
290 | engines: {node: '>=8'}
291 | dev: true
292 |
293 | /chai@4.3.10:
294 | resolution: {integrity: sha512-0UXG04VuVbruMUYbJ6JctvH0YnC/4q3/AkT18q4NaITo91CUm0liMS9VqzT9vZhVQ/1eqPanMWjBM+Juhfb/9g==}
295 | engines: {node: '>=4'}
296 | dependencies:
297 | assertion-error: 1.1.0
298 | check-error: 1.0.3
299 | deep-eql: 4.1.3
300 | get-func-name: 2.0.2
301 | loupe: 2.3.7
302 | pathval: 1.1.1
303 | type-detect: 4.0.8
304 | dev: true
305 |
306 | /check-error@1.0.3:
307 | resolution: {integrity: sha512-iKEoDYaRmd1mxM90a2OEfWhjsjPpYPuQ+lMYsoxB126+t8fw7ySEO48nmDg5COTjxDI65/Y2OWpeEHk3ZOe8zg==}
308 | dependencies:
309 | get-func-name: 2.0.2
310 | dev: true
311 |
312 | /debug@4.3.4:
313 | resolution: {integrity: sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==}
314 | engines: {node: '>=6.0'}
315 | peerDependencies:
316 | supports-color: '*'
317 | peerDependenciesMeta:
318 | supports-color:
319 | optional: true
320 | dependencies:
321 | ms: 2.1.2
322 | dev: true
323 |
324 | /deep-eql@4.1.3:
325 | resolution: {integrity: sha512-WaEtAOpRA1MQ0eohqZjpGD8zdI0Ovsm8mmFhaDN8dvDZzyoUMcYDnf5Y6iu7HTXxf8JDS23qWa4a+hKCDyOPzw==}
326 | engines: {node: '>=6'}
327 | dependencies:
328 | type-detect: 4.0.8
329 | dev: true
330 |
331 | /diff-sequences@29.6.3:
332 | resolution: {integrity: sha512-EjePK1srD3P08o2j4f0ExnylqRs5B9tJjcp9t1krH2qRi8CCdsYfwe9JgSLurFBWwq4uOlipzfk5fHNvwFKr8Q==}
333 | engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
334 | dev: true
335 |
336 | /esbuild@0.18.20:
337 | resolution: {integrity: sha512-ceqxoedUrcayh7Y7ZX6NdbbDzGROiyVBgC4PriJThBKSVPWnnFHZAkfI1lJT8QFkOwH4qOS2SJkS4wvpGl8BpA==}
338 | engines: {node: '>=12'}
339 | hasBin: true
340 | requiresBuild: true
341 | optionalDependencies:
342 | '@esbuild/android-arm': 0.18.20
343 | '@esbuild/android-arm64': 0.18.20
344 | '@esbuild/android-x64': 0.18.20
345 | '@esbuild/darwin-arm64': 0.18.20
346 | '@esbuild/darwin-x64': 0.18.20
347 | '@esbuild/freebsd-arm64': 0.18.20
348 | '@esbuild/freebsd-x64': 0.18.20
349 | '@esbuild/linux-arm': 0.18.20
350 | '@esbuild/linux-arm64': 0.18.20
351 | '@esbuild/linux-ia32': 0.18.20
352 | '@esbuild/linux-loong64': 0.18.20
353 | '@esbuild/linux-mips64el': 0.18.20
354 | '@esbuild/linux-ppc64': 0.18.20
355 | '@esbuild/linux-riscv64': 0.18.20
356 | '@esbuild/linux-s390x': 0.18.20
357 | '@esbuild/linux-x64': 0.18.20
358 | '@esbuild/netbsd-x64': 0.18.20
359 | '@esbuild/openbsd-x64': 0.18.20
360 | '@esbuild/sunos-x64': 0.18.20
361 | '@esbuild/win32-arm64': 0.18.20
362 | '@esbuild/win32-ia32': 0.18.20
363 | '@esbuild/win32-x64': 0.18.20
364 | dev: true
365 |
366 | /fsevents@2.3.3:
367 | resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==}
368 | engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0}
369 | os: [darwin]
370 | requiresBuild: true
371 | dev: true
372 | optional: true
373 |
374 | /get-func-name@2.0.2:
375 | resolution: {integrity: sha512-8vXOvuE167CtIc3OyItco7N/dpRtBbYOsPsXCz7X/PMnlGjYjSGuZJgM1Y7mmew7BKf9BqvLX2tnOVy1BBUsxQ==}
376 | dev: true
377 |
378 | /jsonc-parser@3.2.0:
379 | resolution: {integrity: sha512-gfFQZrcTc8CnKXp6Y4/CBT3fTc0OVuDofpre4aEeEpSBPV5X5v4+Vmx+8snU7RLPrNHPKSgLxGo9YuQzz20o+w==}
380 | dev: true
381 |
382 | /local-pkg@0.4.3:
383 | resolution: {integrity: sha512-SFppqq5p42fe2qcZQqqEOiVRXl+WCP1MdT6k7BDEW1j++sp5fIY+/fdRQitvKgB5BrBcmrs5m/L0v2FrU5MY1g==}
384 | engines: {node: '>=14'}
385 | dev: true
386 |
387 | /loupe@2.3.7:
388 | resolution: {integrity: sha512-zSMINGVYkdpYSOBmLi0D1Uo7JU9nVdQKrHxC8eYlV+9YKK9WePqAlL7lSlorG/U2Fw1w0hTBmaa/jrQ3UbPHtA==}
389 | dependencies:
390 | get-func-name: 2.0.2
391 | dev: true
392 |
393 | /magic-string@0.30.5:
394 | resolution: {integrity: sha512-7xlpfBaQaP/T6Vh8MO/EqXSW5En6INHEvEXQiuff7Gku0PWjU3uf6w/j9o7O+SpB5fOAkrI5HeoNgwjEO0pFsA==}
395 | engines: {node: '>=12'}
396 | dependencies:
397 | '@jridgewell/sourcemap-codec': 1.4.15
398 | dev: true
399 |
400 | /mlly@1.4.2:
401 | resolution: {integrity: sha512-i/Ykufi2t1EZ6NaPLdfnZk2AX8cs0d+mTzVKuPfqPKPatxLApaBoxJQ9x1/uckXtrS/U5oisPMDkNs0yQTaBRg==}
402 | dependencies:
403 | acorn: 8.11.2
404 | pathe: 1.1.1
405 | pkg-types: 1.0.3
406 | ufo: 1.3.1
407 | dev: true
408 |
409 | /ms@2.1.2:
410 | resolution: {integrity: sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==}
411 | dev: true
412 |
413 | /nanoid@3.3.7:
414 | resolution: {integrity: sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==}
415 | engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1}
416 | hasBin: true
417 | dev: true
418 |
419 | /p-limit@4.0.0:
420 | resolution: {integrity: sha512-5b0R4txpzjPWVw/cXXUResoD4hb6U/x9BH08L7nw+GN1sezDzPdxeRvpc9c433fZhBan/wusjbCsqwqm4EIBIQ==}
421 | engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0}
422 | dependencies:
423 | yocto-queue: 1.0.0
424 | dev: true
425 |
426 | /pathe@1.1.1:
427 | resolution: {integrity: sha512-d+RQGp0MAYTIaDBIMmOfMwz3E+LOZnxx1HZd5R18mmCZY0QBlK0LDZfPc8FW8Ed2DlvsuE6PRjroDY+wg4+j/Q==}
428 | dev: true
429 |
430 | /pathval@1.1.1:
431 | resolution: {integrity: sha512-Dp6zGqpTdETdR63lehJYPeIOqpiNBNtc7BpWSLrOje7UaIsE5aY92r/AunQA7rsXvet3lrJ3JnZX29UPTKXyKQ==}
432 | dev: true
433 |
434 | /picocolors@1.0.0:
435 | resolution: {integrity: sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==}
436 | dev: true
437 |
438 | /pkg-types@1.0.3:
439 | resolution: {integrity: sha512-nN7pYi0AQqJnoLPC9eHFQ8AcyaixBUOwvqc5TDnIKCMEE6I0y8P7OKA7fPexsXGCGxQDl/cmrLAp26LhcwxZ4A==}
440 | dependencies:
441 | jsonc-parser: 3.2.0
442 | mlly: 1.4.2
443 | pathe: 1.1.1
444 | dev: true
445 |
446 | /postcss@8.4.31:
447 | resolution: {integrity: sha512-PS08Iboia9mts/2ygV3eLpY5ghnUcfLV/EXTOW1E2qYxJKGGBUtNjN76FYHnMs36RmARn41bC0AZmn+rR0OVpQ==}
448 | engines: {node: ^10 || ^12 || >=14}
449 | dependencies:
450 | nanoid: 3.3.7
451 | picocolors: 1.0.0
452 | source-map-js: 1.0.2
453 | dev: true
454 |
455 | /pretty-format@29.7.0:
456 | resolution: {integrity: sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==}
457 | engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
458 | dependencies:
459 | '@jest/schemas': 29.6.3
460 | ansi-styles: 5.2.0
461 | react-is: 18.2.0
462 | dev: true
463 |
464 | /react-is@18.2.0:
465 | resolution: {integrity: sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==}
466 | dev: true
467 |
468 | /rollup@3.29.4:
469 | resolution: {integrity: sha512-oWzmBZwvYrU0iJHtDmhsm662rC15FRXmcjCk1xD771dFDx5jJ02ufAQQTn0etB2emNk4J9EZg/yWKpsn9BWGRw==}
470 | engines: {node: '>=14.18.0', npm: '>=8.0.0'}
471 | hasBin: true
472 | optionalDependencies:
473 | fsevents: 2.3.3
474 | dev: true
475 |
476 | /siginfo@2.0.0:
477 | resolution: {integrity: sha512-ybx0WO1/8bSBLEWXZvEd7gMW3Sn3JFlW3TvX1nREbDLRNQNaeNN8WK0meBwPdAaOI7TtRRRJn/Es1zhrrCHu7g==}
478 | dev: true
479 |
480 | /source-map-js@1.0.2:
481 | resolution: {integrity: sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==}
482 | engines: {node: '>=0.10.0'}
483 | dev: true
484 |
485 | /stackback@0.0.2:
486 | resolution: {integrity: sha512-1XMJE5fQo1jGH6Y/7ebnwPOBEkIEnT4QF32d5R1+VXdXveM0IBMJt8zfaxX1P3QhVwrYe+576+jkANtSS2mBbw==}
487 | dev: true
488 |
489 | /std-env@3.4.3:
490 | resolution: {integrity: sha512-f9aPhy8fYBuMN+sNfakZV18U39PbalgjXG3lLB9WkaYTxijru61wb57V9wxxNthXM5Sd88ETBWi29qLAsHO52Q==}
491 | dev: true
492 |
493 | /strip-literal@1.3.0:
494 | resolution: {integrity: sha512-PugKzOsyXpArk0yWmUwqOZecSO0GH0bPoctLcqNDH9J04pVW3lflYE0ujElBGTloevcxF5MofAOZ7C5l2b+wLg==}
495 | dependencies:
496 | acorn: 8.11.2
497 | dev: true
498 |
499 | /tinybench@2.5.1:
500 | resolution: {integrity: sha512-65NKvSuAVDP/n4CqH+a9w2kTlLReS9vhsAP06MWx+/89nMinJyB2icyl58RIcqCmIggpojIGeuJGhjU1aGMBSg==}
501 | dev: true
502 |
503 | /tinypool@0.8.1:
504 | resolution: {integrity: sha512-zBTCK0cCgRROxvs9c0CGK838sPkeokNGdQVUUwHAbynHFlmyJYj825f/oRs528HaIJ97lo0pLIlDUzwN+IorWg==}
505 | engines: {node: '>=14.0.0'}
506 | dev: true
507 |
508 | /tinyspy@2.2.0:
509 | resolution: {integrity: sha512-d2eda04AN/cPOR89F7Xv5bK/jrQEhmcLFe6HFldoeO9AJtps+fqEnh486vnT/8y4bw38pSyxDcTCAq+Ks2aJTg==}
510 | engines: {node: '>=14.0.0'}
511 | dev: true
512 |
513 | /type-detect@4.0.8:
514 | resolution: {integrity: sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==}
515 | engines: {node: '>=4'}
516 | dev: true
517 |
518 | /typescript@5.2.2:
519 | resolution: {integrity: sha512-mI4WrpHsbCIcwT9cF4FZvr80QUeKvsUsUvKDoR+X/7XHQH98xYD8YHZg7ANtz2GtZt/CBq2QJ0thkGJMHfqc1w==}
520 | engines: {node: '>=14.17'}
521 | hasBin: true
522 | dev: true
523 |
524 | /ufo@1.3.1:
525 | resolution: {integrity: sha512-uY/99gMLIOlJPwATcMVYfqDSxUR9//AUcgZMzwfSTJPDKzA1S8mX4VLqa+fiAtveraQUBCz4FFcwVZBGbwBXIw==}
526 | dev: true
527 |
528 | /vite-node@1.0.0-beta.4:
529 | resolution: {integrity: sha512-YODjVvHd2Jih+TGMG3B99ktSyvET9w2cMevorAjcuQ3KKiPhDxEf2bRia2KsDHfnUGIfSpwoUdbcDdJ5xR7epg==}
530 | engines: {node: ^18.0.0 || >=20.0.0}
531 | hasBin: true
532 | dependencies:
533 | cac: 6.7.14
534 | debug: 4.3.4
535 | mlly: 1.4.2
536 | pathe: 1.1.1
537 | picocolors: 1.0.0
538 | vite: 4.5.0
539 | transitivePeerDependencies:
540 | - '@types/node'
541 | - less
542 | - lightningcss
543 | - sass
544 | - stylus
545 | - sugarss
546 | - supports-color
547 | - terser
548 | dev: true
549 |
550 | /vite@4.5.0:
551 | resolution: {integrity: sha512-ulr8rNLA6rkyFAlVWw2q5YJ91v098AFQ2R0PRFwPzREXOUJQPtFUG0t+/ZikhaOCDqFoDhN6/v8Sq0o4araFAw==}
552 | engines: {node: ^14.18.0 || >=16.0.0}
553 | hasBin: true
554 | peerDependencies:
555 | '@types/node': '>= 14'
556 | less: '*'
557 | lightningcss: ^1.21.0
558 | sass: '*'
559 | stylus: '*'
560 | sugarss: '*'
561 | terser: ^5.4.0
562 | peerDependenciesMeta:
563 | '@types/node':
564 | optional: true
565 | less:
566 | optional: true
567 | lightningcss:
568 | optional: true
569 | sass:
570 | optional: true
571 | stylus:
572 | optional: true
573 | sugarss:
574 | optional: true
575 | terser:
576 | optional: true
577 | dependencies:
578 | esbuild: 0.18.20
579 | postcss: 8.4.31
580 | rollup: 3.29.4
581 | optionalDependencies:
582 | fsevents: 2.3.3
583 | dev: true
584 |
585 | /vitest@1.0.0-beta.4:
586 | resolution: {integrity: sha512-WOJTqxY3hWqn4yy26SK+cx+BlPBeK/KtY9ALWkD6FLWLhSGY0QFEmarc8sdb/UGZQ8xs5pOvcQQS9JJSV8HH8g==}
587 | engines: {node: ^18.0.0 || >=20.0.0}
588 | hasBin: true
589 | peerDependencies:
590 | '@edge-runtime/vm': '*'
591 | '@types/node': ^18.0.0 || >=20.0.0
592 | '@vitest/browser': '*'
593 | '@vitest/ui': '*'
594 | happy-dom: '*'
595 | jsdom: '*'
596 | peerDependenciesMeta:
597 | '@edge-runtime/vm':
598 | optional: true
599 | '@types/node':
600 | optional: true
601 | '@vitest/browser':
602 | optional: true
603 | '@vitest/ui':
604 | optional: true
605 | happy-dom:
606 | optional: true
607 | jsdom:
608 | optional: true
609 | dependencies:
610 | '@vitest/expect': 1.0.0-beta.4
611 | '@vitest/runner': 1.0.0-beta.4
612 | '@vitest/snapshot': 1.0.0-beta.4
613 | '@vitest/spy': 1.0.0-beta.4
614 | '@vitest/utils': 1.0.0-beta.4
615 | acorn: 8.11.2
616 | acorn-walk: 8.3.0
617 | cac: 6.7.14
618 | chai: 4.3.10
619 | debug: 4.3.4
620 | local-pkg: 0.4.3
621 | magic-string: 0.30.5
622 | pathe: 1.1.1
623 | picocolors: 1.0.0
624 | std-env: 3.4.3
625 | strip-literal: 1.3.0
626 | tinybench: 2.5.1
627 | tinypool: 0.8.1
628 | vite: 4.5.0
629 | vite-node: 1.0.0-beta.4
630 | why-is-node-running: 2.2.2
631 | transitivePeerDependencies:
632 | - less
633 | - lightningcss
634 | - sass
635 | - stylus
636 | - sugarss
637 | - supports-color
638 | - terser
639 | dev: true
640 |
641 | /why-is-node-running@2.2.2:
642 | resolution: {integrity: sha512-6tSwToZxTOcotxHeA+qGCq1mVzKR3CwcJGmVcY+QE8SHy6TnpFnh8PAvPNHYr7EcuVeG0QSMxtYCuO1ta/G/oA==}
643 | engines: {node: '>=8'}
644 | hasBin: true
645 | dependencies:
646 | siginfo: 2.0.0
647 | stackback: 0.0.2
648 | dev: true
649 |
650 | /yocto-queue@1.0.0:
651 | resolution: {integrity: sha512-9bnSc/HEW2uRy67wc+T8UwauLuPJVn28jb+GtJY16iiKWyvmYJRXVT4UamsAEGQfPohgr2q4Tq0sQbQlxTfi1g==}
652 | engines: {node: '>=12.20'}
653 | dev: true
654 |
--------------------------------------------------------------------------------