├── .editorconfig
├── .eslintignore
├── .eslintrc.js
├── .gitignore
├── .vscode
└── settings.json
├── LICENSE
├── README.md
├── package.json
├── pnpm-lock.yaml
├── src
├── composable.ts
├── index.ts
├── mapping.ts
├── models.ts
├── plugin.ts
├── service.ts
├── symbols.ts
└── ts-helpers.ts
├── test
└── service.ts
├── tsconfig.build.json
└── tsconfig.json
/.editorconfig:
--------------------------------------------------------------------------------
1 | root = true
2 |
3 | [*]
4 | charset = utf-8
5 | indent_style = space
6 | indent_size = 2
7 | end_of_line = lf
8 | insert_final_newline = true
9 | trim_trailing_whitespace = true
10 |
--------------------------------------------------------------------------------
/.eslintignore:
--------------------------------------------------------------------------------
1 | /dist
2 | /node_modules
3 | .eslintrc.js
--------------------------------------------------------------------------------
/.eslintrc.js:
--------------------------------------------------------------------------------
1 | const { resolve } = require("path");
2 | module.exports = {
3 | // https://eslint.org/docs/user-guide/configuring#configuration-cascading-and-hierarchy
4 | // This option interrupts the configuration hierarchy at this file
5 | // Remove this if you have an higher level ESLint config file (it usually happens into a monorepos)
6 | root: true,
7 |
8 | env: {
9 | browser: true,
10 | },
11 |
12 | // Rules order is important, please avoid shuffling them
13 | extends: ["coralloy"],
14 | };
15 |
--------------------------------------------------------------------------------
/.gitignore:
--------------------------------------------------------------------------------
1 | node_modules
2 | dist
--------------------------------------------------------------------------------
/.vscode/settings.json:
--------------------------------------------------------------------------------
1 | {
2 | "cSpell.words": ["signalr"]
3 | }
4 |
--------------------------------------------------------------------------------
/LICENSE:
--------------------------------------------------------------------------------
1 | The MIT License
2 |
3 | Copyright (c) 2021 Dreamonkey S.r.l.
4 |
5 | Permission is hereby granted, free of charge, to any person obtaining a copy
6 | of this software and associated documentation files (the "Software"), to deal
7 | in the Software without restriction, including without limitation the rights
8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9 | copies of the Software, and to permit persons to whom the Software is
10 | furnished to do so, subject to the following conditions:
11 |
12 | The above copyright notice and this permission notice shall be included in
13 | all copies or substantial portions of the Software.
14 |
15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
21 | THE SOFTWARE.
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # vue-signalr
2 |
3 | A Vue3 plugin which wraps SignalR and provider stricter typings.
4 |
5 | ## Installation
6 |
7 | Install this package and SignalR peer dependency
8 |
9 | `$ yarn add @dreamonkey/vue-signalr @microsoft/signalr`
10 |
11 | Apply the plugin providing a `HubConnection` instance
12 |
13 | ```ts
14 | import { VueSignalR } from "@dreamonkey/vue-signalr";
15 | import { HubConnectionBuilder } from "@microsoft/signalr";
16 | import { createApp } from "vue";
17 | import App from "./App.vue";
18 |
19 | // Create your connection
20 | // See https://docs.microsoft.com/en-us/javascript/api/@microsoft/signalr/hubconnectionbuilder
21 | const connection = new HubConnectionBuilder()
22 | .withUrl("http://localhost:5000/signalr")
23 | .build();
24 |
25 | createApp(App).use(VueSignalR, { connection }).mount("#app");
26 | ```
27 |
28 | ## Usage
29 |
30 | ```ts
31 | import { useSignalR } from "@dreamonkey/vue-signalr";
32 | import { inject } from "vue";
33 |
34 | export default {
35 | setup() {
36 | const signalr = useSignalR();
37 |
38 | signalr.invoke("SendMessage", { message });
39 |
40 | signalr.on("MessageReceived", ({ message }) => {
41 | /* do stuff */
42 | });
43 | },
44 | };
45 | ```
46 |
47 | While SignalR doesn't make a distinction between client side and server side methods, into this package we refer the formers as "Events" and the latters as "Commands".
48 |
49 | Commands can be sent using `signalr.invoke()`, while events can be enabled or disabled using `signalr.on()` and `signalr.off()`
50 |
51 |
52 |
53 | #### Unsubscribing
54 |
55 | All Event you create a listener for using `signalr.on()` must be unsubscribed when not used anymore, to avoid memory leaks and erratic code behavior.
56 | If you call `signalr.on()` within a Vue component `setup` scope, the listener will be unsubscribed automatically into `onBeforeUnmount` hook.
57 | This behavior can be disabled via `autoOffInsideComponentScope` plugin option.
58 |
59 | If you disabled it, or you start a listener outside a component scope, you'll need to unsubscribe it manually using `signal.off()` and providing **the same listener function reference** to it.
60 | Not providing it will remove all listeners from the provided Event
61 |
62 | ```ts
63 | const messageReceivedCallback = (message) => console.log(message.prop);
64 |
65 | signalr.on("MessageReceived", messageReceivedCallback);
66 |
67 | signalr.off("MessageReceived", messageReceivedCallback); // Remove this listener
68 | signalr.off("MessageReceived"); // Remove all listeners on `MessageReceived` event
69 | ```
70 |
71 | ### Type-safety
72 |
73 | Command and Events names and payloads are registered via type augmentation of dedicated interfaces (`SignalREvents` and `SignalRCommands`) into `@dreamonkey/vue-signalr` scope.
74 | These types are later used to provide you autocompletion.
75 |
76 | **The package works with plain strings too, you're not required to register Commands/Events typings**
77 |
78 | ```ts
79 | import "@dreamonkey/vue-signalr";
80 |
81 | interface MessageReceivedPayload {
82 | message: string;
83 | }
84 |
85 | interface SendMessagePayload {
86 | message: string;
87 | }
88 |
89 | declare module "@dreamonkey/vue-signalr" {
90 | interface SignalREvents {
91 | // Define an event, its payload is a single parameter of type `MessageReceivedPayload`
92 | MessageReceived: MessageReceivedPayload;
93 | // Define an event, its payload is composed by 0 or more parameters of type `MessageReceivedPayload`
94 | MultipleMessagesReceived: MessageReceivedPayload[];
95 | // Define an event, its payload is composed by exactly 2 parameters of type `MessageReceivedPayload`
96 | TwoMessagesReceived: [MessageReceivedPayload, MessageReceivedPayload];
97 | // Define an event with no payload
98 | MainTopicJoined: false;
99 | }
100 |
101 | interface SignalRCommands {
102 | // Define a command and its payload
103 | SendMessage: SendMessagePayload;
104 | // Define a command with no payload
105 | JoinMainTopic: false;
106 | }
107 | }
108 | ```
109 |
110 | ### Methods remapping
111 |
112 | In case you need to remap a Command or Event name, you could do so using `remapMethod` or `remapMethods` helpers
113 |
114 | ```ts
115 | import { remapMethod } from "@dreamonkey/vue-signalr";
116 |
117 | remapMethod("receiveMessageWithStrangeMethodName", "MessageReceived");
118 |
119 | remapMethods([
120 | ["legacyTopic2Joined", "MainTopicJoined"],
121 | ["createNewMessage", "SendMessage"],
122 | ]);
123 | ```
124 |
125 | ### Error Handling
126 |
127 | You can react to connection/reconnection errors providing a `failFn` option into the plugin options
128 |
129 | ```ts
130 | import { VueSignalR } from "@dreamonkey/vue-signalr";
131 | import { createApp } from "vue";
132 | import App from "./App.vue";
133 |
134 | const connection = new HubConnectionBuilder()
135 | .withUrl("http://localhost:5000/signalr")
136 | .build();
137 |
138 | createApp(App)
139 | .use(VueSignalR, {
140 | connection,
141 | failFn: () => {
142 | /* do stuff */
143 | },
144 | })
145 | .mount("#app");
146 | ```
147 |
148 | ### Possible next steps
149 |
150 | - take inspiration from other helpers into https://socket.io/docs/v4/listening-to-events/
151 | - take inspiration from other features at the end of https://socket.io/docs/v4/how-it-works/
152 | - add rooms join/leave abstractions (?)
153 |
154 | ### Credits
155 |
156 | This package has been inspired by https://github.com/quangdaon/vue-signalr
157 |
--------------------------------------------------------------------------------
/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "@dreamonkey/vue-signalr",
3 | "version": "1.2.0",
4 | "description": "SignalR plugin for Vue 3",
5 | "repository": {
6 | "type": "git",
7 | "url": "git+https://github.com/dreamonkey/vue-signalr.git"
8 | },
9 | "homepage": "https://github.com/dreamonkey/vue-signalr/blob/master/README.md",
10 | "bugs": "https://github.com/dreamonkey/vue-signalr/issues",
11 | "main": "dist/index.js",
12 | "types": "dist/index.d.ts",
13 | "files": [
14 | "dist"
15 | ],
16 | "scripts": {
17 | "lint": "eslint --ext .js,.ts,.vue ./ --fix --report-unused-disable-directives",
18 | "format": "prettier --write \"**/*.{json,md,graphql,vue,js,ts}\" --ignore-path .gitignore",
19 | "build": "rimraf dist && tsc --declaration --project tsconfig.build.json",
20 | "deploy": "pnpm build && pnpm publish --tag latest"
21 | },
22 | "keywords": [
23 | "vue",
24 | "signalr",
25 | "websocket"
26 | ],
27 | "author": "Paolo Caleffi
(https://github.com/IlCallo)",
28 | "license": "MIT",
29 | "peerDependencies": {
30 | "@microsoft/signalr": "^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0",
31 | "vue": "^3.0.0"
32 | },
33 | "devDependencies": {
34 | "@babel/types": "^7.25.6",
35 | "@microsoft/signalr": "^8.0.7",
36 | "@types/node": "^20.0.0",
37 | "eslint": "^8.57.0",
38 | "eslint-config-coralloy": "^0.4.0",
39 | "prettier": "^3.3.3",
40 | "rimraf": "^6.0.1",
41 | "typescript": "~5.5.0",
42 | "vue": "^3.5.4"
43 | },
44 | "publishConfig": {
45 | "access": "public"
46 | }
47 | }
48 |
--------------------------------------------------------------------------------
/pnpm-lock.yaml:
--------------------------------------------------------------------------------
1 | lockfileVersion: '9.0'
2 |
3 | settings:
4 | autoInstallPeers: true
5 | excludeLinksFromLockfile: false
6 |
7 | importers:
8 |
9 | .:
10 | devDependencies:
11 | '@babel/types':
12 | specifier: ^7.25.6
13 | version: 7.25.6
14 | '@microsoft/signalr':
15 | specifier: ^8.0.7
16 | version: 8.0.7
17 | '@types/node':
18 | specifier: ^20.0.0
19 | version: 20.16.5
20 | eslint:
21 | specifier: ^8.57.0
22 | version: 8.57.0
23 | eslint-config-coralloy:
24 | specifier: ^0.4.0
25 | version: 0.4.0(eslint@8.57.0)(prettier@3.3.3)(typescript@5.5.4)
26 | prettier:
27 | specifier: ^3.3.3
28 | version: 3.3.3
29 | rimraf:
30 | specifier: ^6.0.1
31 | version: 6.0.1
32 | typescript:
33 | specifier: ~5.5.0
34 | version: 5.5.4
35 | vue:
36 | specifier: ^3.5.4
37 | version: 3.5.4(typescript@5.5.4)
38 |
39 | packages:
40 |
41 | '@babel/helper-string-parser@7.24.8':
42 | resolution: {integrity: sha512-pO9KhhRcuUyGnJWwyEgnRJTSIZHiT+vMD0kPeD+so0l7mxkMT19g3pjY9GTnHySck/hDzq+dtW/4VgnMkippsQ==}
43 | engines: {node: '>=6.9.0'}
44 |
45 | '@babel/helper-validator-identifier@7.24.7':
46 | resolution: {integrity: sha512-rR+PBcQ1SMQDDyF6X0wxtG8QyLCgUB0eRAGguqRLfkCA87l7yAP7ehq8SNj96OOGTO8OBV70KhuFYcIkHXOg0w==}
47 | engines: {node: '>=6.9.0'}
48 |
49 | '@babel/parser@7.25.6':
50 | resolution: {integrity: sha512-trGdfBdbD0l1ZPmcJ83eNxB9rbEax4ALFTF7fN386TMYbeCQbyme5cOEXQhbGXKebwGaB/J52w1mrklMcbgy6Q==}
51 | engines: {node: '>=6.0.0'}
52 | hasBin: true
53 |
54 | '@babel/types@7.25.6':
55 | resolution: {integrity: sha512-/l42B1qxpG6RdfYf343Uw1vmDjeNhneUXtzhojE7pDgfpEypmRhI6j1kr17XCVv4Cgl9HdAiQY2x0GwKm7rWCw==}
56 | engines: {node: '>=6.9.0'}
57 |
58 | '@eslint-community/eslint-utils@4.4.0':
59 | resolution: {integrity: sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==}
60 | engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
61 | peerDependencies:
62 | eslint: ^6.0.0 || ^7.0.0 || >=8.0.0
63 |
64 | '@eslint-community/regexpp@4.11.0':
65 | resolution: {integrity: sha512-G/M/tIiMrTAxEWRfLfQJMmGNX28IxBg4PBz8XqQhqUHLFI6TL2htpIB1iQCj144V5ee/JaKyT9/WZ0MGZWfA7A==}
66 | engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0}
67 |
68 | '@eslint/eslintrc@2.1.4':
69 | resolution: {integrity: sha512-269Z39MS6wVJtsoUl10L60WdkhJVdPG24Q4eZTH3nnF6lpvSShEK3wQjDX9JRWAUPvPh7COouPpU9IrqaZFvtQ==}
70 | engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
71 |
72 | '@eslint/js@8.57.0':
73 | resolution: {integrity: sha512-Ys+3g2TaW7gADOJzPt83SJtCDhMjndcDMFVQ/Tj9iA1BfJzFKD9mAUXT3OenpuPHbI6P/myECxRJrofUsDx/5g==}
74 | engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
75 |
76 | '@humanwhocodes/config-array@0.11.14':
77 | resolution: {integrity: sha512-3T8LkOmg45BV5FICb15QQMsyUSWrQ8AygVfC7ZG32zOalnqrilm018ZVCw0eapXux8FtA33q8PSRSstjee3jSg==}
78 | engines: {node: '>=10.10.0'}
79 | deprecated: Use @eslint/config-array instead
80 |
81 | '@humanwhocodes/module-importer@1.0.1':
82 | resolution: {integrity: sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==}
83 | engines: {node: '>=12.22'}
84 |
85 | '@humanwhocodes/object-schema@2.0.3':
86 | resolution: {integrity: sha512-93zYdMES/c1D69yZiKDBj0V24vqNzB/koF26KPaagAfd3P/4gUlh3Dys5ogAK+Exi9QyzlD8x/08Zt7wIKcDcA==}
87 | deprecated: Use @eslint/object-schema instead
88 |
89 | '@isaacs/cliui@8.0.2':
90 | resolution: {integrity: sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==}
91 | engines: {node: '>=12'}
92 |
93 | '@jridgewell/sourcemap-codec@1.5.0':
94 | resolution: {integrity: sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==}
95 |
96 | '@microsoft/signalr@8.0.7':
97 | resolution: {integrity: sha512-PHcdMv8v5hJlBkRHAuKG5trGViQEkPYee36LnJQx4xHOQ5LL4X0nEWIxOp5cCtZ7tu+30quz5V3k0b1YNuc6lw==}
98 |
99 | '@nodelib/fs.scandir@2.1.5':
100 | resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==}
101 | engines: {node: '>= 8'}
102 |
103 | '@nodelib/fs.stat@2.0.5':
104 | resolution: {integrity: sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==}
105 | engines: {node: '>= 8'}
106 |
107 | '@nodelib/fs.walk@1.2.8':
108 | resolution: {integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==}
109 | engines: {node: '>= 8'}
110 |
111 | '@nolyfill/is-core-module@1.0.39':
112 | resolution: {integrity: sha512-nn5ozdjYQpUCZlWGuxcJY/KpxkWQs4DcbMCmKojjyrYDEAGy4Ce19NN4v5MduafTwJlbKc99UA8YhSVqq9yPZA==}
113 | engines: {node: '>=12.4.0'}
114 |
115 | '@pkgjs/parseargs@0.11.0':
116 | resolution: {integrity: sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==}
117 | engines: {node: '>=14'}
118 |
119 | '@types/node@20.16.5':
120 | resolution: {integrity: sha512-VwYCweNo3ERajwy0IUlqqcyZ8/A7Zwa9ZP3MnENWcB11AejO+tLy3pu850goUW2FC/IJMdZUfKpX/yxL1gymCA==}
121 |
122 | '@typescript-eslint/eslint-plugin@8.5.0':
123 | resolution: {integrity: sha512-lHS5hvz33iUFQKuPFGheAB84LwcJ60G8vKnEhnfcK1l8kGVLro2SFYW6K0/tj8FUhRJ0VHyg1oAfg50QGbPPHw==}
124 | engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
125 | peerDependencies:
126 | '@typescript-eslint/parser': ^8.0.0 || ^8.0.0-alpha.0
127 | eslint: ^8.57.0 || ^9.0.0
128 | typescript: '*'
129 | peerDependenciesMeta:
130 | typescript:
131 | optional: true
132 |
133 | '@typescript-eslint/parser@8.5.0':
134 | resolution: {integrity: sha512-gF77eNv0Xz2UJg/NbpWJ0kqAm35UMsvZf1GHj8D9MRFTj/V3tAciIWXfmPLsAAF/vUlpWPvUDyH1jjsr0cMVWw==}
135 | engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
136 | peerDependencies:
137 | eslint: ^8.57.0 || ^9.0.0
138 | typescript: '*'
139 | peerDependenciesMeta:
140 | typescript:
141 | optional: true
142 |
143 | '@typescript-eslint/scope-manager@7.18.0':
144 | resolution: {integrity: sha512-jjhdIE/FPF2B7Z1uzc6i3oWKbGcHb87Qw7AWj6jmEqNOfDFbJWtjt/XfwCpvNkpGWlcJaog5vTR+VV8+w9JflA==}
145 | engines: {node: ^18.18.0 || >=20.0.0}
146 |
147 | '@typescript-eslint/scope-manager@8.5.0':
148 | resolution: {integrity: sha512-06JOQ9Qgj33yvBEx6tpC8ecP9o860rsR22hWMEd12WcTRrfaFgHr2RB/CA/B+7BMhHkXT4chg2MyboGdFGawYg==}
149 | engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
150 |
151 | '@typescript-eslint/type-utils@8.5.0':
152 | resolution: {integrity: sha512-N1K8Ix+lUM+cIDhL2uekVn/ZD7TZW+9/rwz8DclQpcQ9rk4sIL5CAlBC0CugWKREmDjBzI/kQqU4wkg46jWLYA==}
153 | engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
154 | peerDependencies:
155 | typescript: '*'
156 | peerDependenciesMeta:
157 | typescript:
158 | optional: true
159 |
160 | '@typescript-eslint/types@7.18.0':
161 | resolution: {integrity: sha512-iZqi+Ds1y4EDYUtlOOC+aUmxnE9xS/yCigkjA7XpTKV6nCBd3Hp/PRGGmdwnfkV2ThMyYldP1wRpm/id99spTQ==}
162 | engines: {node: ^18.18.0 || >=20.0.0}
163 |
164 | '@typescript-eslint/types@8.5.0':
165 | resolution: {integrity: sha512-qjkormnQS5wF9pjSi6q60bKUHH44j2APxfh9TQRXK8wbYVeDYYdYJGIROL87LGZZ2gz3Rbmjc736qyL8deVtdw==}
166 | engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
167 |
168 | '@typescript-eslint/typescript-estree@7.18.0':
169 | resolution: {integrity: sha512-aP1v/BSPnnyhMHts8cf1qQ6Q1IFwwRvAQGRvBFkWlo3/lH29OXA3Pts+c10nxRxIBrDnoMqzhgdwVe5f2D6OzA==}
170 | engines: {node: ^18.18.0 || >=20.0.0}
171 | peerDependencies:
172 | typescript: '*'
173 | peerDependenciesMeta:
174 | typescript:
175 | optional: true
176 |
177 | '@typescript-eslint/typescript-estree@8.5.0':
178 | resolution: {integrity: sha512-vEG2Sf9P8BPQ+d0pxdfndw3xIXaoSjliG0/Ejk7UggByZPKXmJmw3GW5jV2gHNQNawBUyfahoSiCFVov0Ruf7Q==}
179 | engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
180 | peerDependencies:
181 | typescript: '*'
182 | peerDependenciesMeta:
183 | typescript:
184 | optional: true
185 |
186 | '@typescript-eslint/utils@7.18.0':
187 | resolution: {integrity: sha512-kK0/rNa2j74XuHVcoCZxdFBMF+aq/vH83CXAOHieC+2Gis4mF8jJXT5eAfyD3K0sAxtPuwxaIOIOvhwzVDt/kw==}
188 | engines: {node: ^18.18.0 || >=20.0.0}
189 | peerDependencies:
190 | eslint: ^8.56.0
191 |
192 | '@typescript-eslint/utils@8.5.0':
193 | resolution: {integrity: sha512-6yyGYVL0e+VzGYp60wvkBHiqDWOpT63pdMV2CVG4LVDd5uR6q1qQN/7LafBZtAtNIn/mqXjsSeS5ggv/P0iECw==}
194 | engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
195 | peerDependencies:
196 | eslint: ^8.57.0 || ^9.0.0
197 |
198 | '@typescript-eslint/visitor-keys@7.18.0':
199 | resolution: {integrity: sha512-cDF0/Gf81QpY3xYyJKDV14Zwdmid5+uuENhjH2EqFaF0ni+yAyq/LzMaIJdhNJXZI7uLzwIlA+V7oWoyn6Curg==}
200 | engines: {node: ^18.18.0 || >=20.0.0}
201 |
202 | '@typescript-eslint/visitor-keys@8.5.0':
203 | resolution: {integrity: sha512-yTPqMnbAZJNy2Xq2XU8AdtOW9tJIr+UQb64aXB9f3B1498Zx9JorVgFJcZpEc9UBuCCrdzKID2RGAMkYcDtZOw==}
204 | engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
205 |
206 | '@ungap/structured-clone@1.2.0':
207 | resolution: {integrity: sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ==}
208 |
209 | '@vue/compiler-core@3.5.4':
210 | resolution: {integrity: sha512-oNwn+BAt3n9dK9uAYvI+XGlutwuTq/wfj4xCBaZCqwwVIGtD7D6ViihEbyYZrDHIHTDE3Q6oL3/hqmAyFEy9DQ==}
211 |
212 | '@vue/compiler-dom@3.5.4':
213 | resolution: {integrity: sha512-yP9RRs4BDLOLfldn6ah+AGCNovGjMbL9uHvhDHf5wan4dAHLnFGOkqtfE7PPe4HTXIqE7l/NILdYw53bo1C8jw==}
214 |
215 | '@vue/compiler-sfc@3.5.4':
216 | resolution: {integrity: sha512-P+yiPhL+NYH7m0ZgCq7AQR2q7OIE+mpAEgtkqEeH9oHSdIRvUO+4X6MPvblJIWcoe4YC5a2Gdf/RsoyP8FFiPQ==}
217 |
218 | '@vue/compiler-ssr@3.5.4':
219 | resolution: {integrity: sha512-acESdTXsxPnYr2C4Blv0ggx5zIFMgOzZmYU2UgvIff9POdRGbRNBHRyzHAnizcItvpgerSKQbllUc9USp3V7eg==}
220 |
221 | '@vue/reactivity@3.5.4':
222 | resolution: {integrity: sha512-HKKbEuP7tYSGCq4e4nK6ZW6l5hyG66OUetefBp4budUyjvAYsnQDf+bgFzg2RAgnH0CInyqXwD9y47jwJEHrQw==}
223 |
224 | '@vue/runtime-core@3.5.4':
225 | resolution: {integrity: sha512-f3ek2sTA0AFu0n+w+kCtz567Euqqa3eHewvo4klwS7mWfSj/A+UmYTwsnUFo35KeyAFY60JgrCGvEBsu1n/3LA==}
226 |
227 | '@vue/runtime-dom@3.5.4':
228 | resolution: {integrity: sha512-ofyc0w6rbD5KtjhP1i9hGOKdxGpvmuB1jprP7Djlj0X7R5J/oLwuNuE98GJ8WW31Hu2VxQHtk/LYTAlW8xrJdw==}
229 |
230 | '@vue/server-renderer@3.5.4':
231 | resolution: {integrity: sha512-FbjV6DJLgKRetMYFBA1UXCroCiED/Ckr53/ba9wivyd7D/Xw9fpo0T6zXzCnxQwyvkyrL7y6plgYhWhNjGxY5g==}
232 | peerDependencies:
233 | vue: 3.5.4
234 |
235 | '@vue/shared@3.5.4':
236 | resolution: {integrity: sha512-L2MCDD8l7yC62Te5UUyPVpmexhL9ipVnYRw9CsWfm/BGRL5FwDX4a25bcJ/OJSD3+Hx+k/a8LDKcG2AFdJV3BA==}
237 |
238 | abort-controller@3.0.0:
239 | resolution: {integrity: sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg==}
240 | engines: {node: '>=6.5'}
241 |
242 | acorn-jsx@5.3.2:
243 | resolution: {integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==}
244 | peerDependencies:
245 | acorn: ^6.0.0 || ^7.0.0 || ^8.0.0
246 |
247 | acorn@8.12.1:
248 | resolution: {integrity: sha512-tcpGyI9zbizT9JbV6oYE477V6mTlXvvi0T0G3SNIYE2apm/G5huBa1+K89VGeovbg+jycCrfhl3ADxErOuO6Jg==}
249 | engines: {node: '>=0.4.0'}
250 | hasBin: true
251 |
252 | ajv@6.12.6:
253 | resolution: {integrity: sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==}
254 |
255 | ansi-regex@5.0.1:
256 | resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==}
257 | engines: {node: '>=8'}
258 |
259 | ansi-regex@6.1.0:
260 | resolution: {integrity: sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA==}
261 | engines: {node: '>=12'}
262 |
263 | ansi-styles@4.3.0:
264 | resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==}
265 | engines: {node: '>=8'}
266 |
267 | ansi-styles@6.2.1:
268 | resolution: {integrity: sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==}
269 | engines: {node: '>=12'}
270 |
271 | argparse@2.0.1:
272 | resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==}
273 |
274 | array-union@2.1.0:
275 | resolution: {integrity: sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==}
276 | engines: {node: '>=8'}
277 |
278 | balanced-match@1.0.2:
279 | resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==}
280 |
281 | boolbase@1.0.0:
282 | resolution: {integrity: sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==}
283 |
284 | brace-expansion@1.1.11:
285 | resolution: {integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==}
286 |
287 | brace-expansion@2.0.1:
288 | resolution: {integrity: sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==}
289 |
290 | braces@3.0.2:
291 | resolution: {integrity: sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==}
292 | engines: {node: '>=8'}
293 |
294 | callsites@3.1.0:
295 | resolution: {integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==}
296 | engines: {node: '>=6'}
297 |
298 | chalk@4.1.2:
299 | resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==}
300 | engines: {node: '>=10'}
301 |
302 | color-convert@2.0.1:
303 | resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==}
304 | engines: {node: '>=7.0.0'}
305 |
306 | color-name@1.1.4:
307 | resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==}
308 |
309 | concat-map@0.0.1:
310 | resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==}
311 |
312 | cross-spawn@7.0.3:
313 | resolution: {integrity: sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==}
314 | engines: {node: '>= 8'}
315 |
316 | cssesc@3.0.0:
317 | resolution: {integrity: sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==}
318 | engines: {node: '>=4'}
319 | hasBin: true
320 |
321 | csstype@3.1.3:
322 | resolution: {integrity: sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==}
323 |
324 | debug@3.2.7:
325 | resolution: {integrity: sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==}
326 | peerDependencies:
327 | supports-color: '*'
328 | peerDependenciesMeta:
329 | supports-color:
330 | optional: true
331 |
332 | debug@4.3.4:
333 | resolution: {integrity: sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==}
334 | engines: {node: '>=6.0'}
335 | peerDependencies:
336 | supports-color: '*'
337 | peerDependenciesMeta:
338 | supports-color:
339 | optional: true
340 |
341 | debug@4.3.7:
342 | resolution: {integrity: sha512-Er2nc/H7RrMXZBFCEim6TCmMk02Z8vLC2Rbi1KEBggpo0fS6l0S1nnapwmIi3yW/+GOJap1Krg4w0Hg80oCqgQ==}
343 | engines: {node: '>=6.0'}
344 | peerDependencies:
345 | supports-color: '*'
346 | peerDependenciesMeta:
347 | supports-color:
348 | optional: true
349 |
350 | deep-is@0.1.4:
351 | resolution: {integrity: sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==}
352 |
353 | dir-glob@3.0.1:
354 | resolution: {integrity: sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==}
355 | engines: {node: '>=8'}
356 |
357 | doctrine@3.0.0:
358 | resolution: {integrity: sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==}
359 | engines: {node: '>=6.0.0'}
360 |
361 | eastasianwidth@0.2.0:
362 | resolution: {integrity: sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==}
363 |
364 | emoji-regex@8.0.0:
365 | resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==}
366 |
367 | emoji-regex@9.2.2:
368 | resolution: {integrity: sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==}
369 |
370 | enhanced-resolve@5.17.1:
371 | resolution: {integrity: sha512-LMHl3dXhTcfv8gM4kEzIUeTQ+7fpdA0l2tUf34BddXPkz2A5xJ5L/Pchd5BL6rdccM9QGvu0sWZzK1Z1t4wwyg==}
372 | engines: {node: '>=10.13.0'}
373 |
374 | entities@4.5.0:
375 | resolution: {integrity: sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==}
376 | engines: {node: '>=0.12'}
377 |
378 | escape-string-regexp@4.0.0:
379 | resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==}
380 | engines: {node: '>=10'}
381 |
382 | eslint-config-coralloy@0.4.0:
383 | resolution: {integrity: sha512-nps546Cm+LxC3W1Ve0m6vvG9ERhi6TRgUMyv9HDzpvxZm7d81XMk40r341aIUz85yj8uXTmNyYnwTFcBot1Zhw==}
384 | peerDependencies:
385 | eslint: ^8.0.0 || ^9.0.0
386 | prettier: ^2.7.0 || ^3.0.0
387 | typescript: ^4.7.0 || ^5.0.0
388 |
389 | eslint-config-prettier@9.1.0:
390 | resolution: {integrity: sha512-NSWl5BFQWEPi1j4TjVNItzYV7dZXZ+wP6I6ZhrBGpChQhZRUaElihE9uRRkcbRnNb76UMKDF3r+WTmNcGPKsqw==}
391 | hasBin: true
392 | peerDependencies:
393 | eslint: '>=7.0.0'
394 |
395 | eslint-import-resolver-node@0.3.9:
396 | resolution: {integrity: sha512-WFj2isz22JahUv+B788TlO3N6zL3nNJGU8CcZbPZvVEkBPaJdCV4vy5wyghty5ROFbCRnm132v8BScu5/1BQ8g==}
397 |
398 | eslint-import-resolver-typescript@3.6.3:
399 | resolution: {integrity: sha512-ud9aw4szY9cCT1EWWdGv1L1XR6hh2PaRWif0j2QjQ0pgTY/69iw+W0Z4qZv5wHahOl8isEr+k/JnyAqNQkLkIA==}
400 | engines: {node: ^14.18.0 || >=16.0.0}
401 | peerDependencies:
402 | eslint: '*'
403 | eslint-plugin-import: '*'
404 | eslint-plugin-import-x: '*'
405 | peerDependenciesMeta:
406 | eslint-plugin-import:
407 | optional: true
408 | eslint-plugin-import-x:
409 | optional: true
410 |
411 | eslint-module-utils@2.11.0:
412 | resolution: {integrity: sha512-gbBE5Hitek/oG6MUVj6sFuzEjA/ClzNflVrLovHi/JgLdC7fiN5gLAY1WIPW1a0V5I999MnsrvVrCOGmmVqDBQ==}
413 | engines: {node: '>=4'}
414 | peerDependencies:
415 | '@typescript-eslint/parser': '*'
416 | eslint: '*'
417 | eslint-import-resolver-node: '*'
418 | eslint-import-resolver-typescript: '*'
419 | eslint-import-resolver-webpack: '*'
420 | peerDependenciesMeta:
421 | '@typescript-eslint/parser':
422 | optional: true
423 | eslint:
424 | optional: true
425 | eslint-import-resolver-node:
426 | optional: true
427 | eslint-import-resolver-typescript:
428 | optional: true
429 | eslint-import-resolver-webpack:
430 | optional: true
431 |
432 | eslint-plugin-import-x@3.1.0:
433 | resolution: {integrity: sha512-/UbPA+bYY7nIxcjL3kpcDY3UNdoLHFhyBFzHox2M0ypcUoueTn6woZUUmzzi5et/dXChksasYYFeKE2wshOrhg==}
434 | engines: {node: '>=16'}
435 | peerDependencies:
436 | eslint: ^8.56.0 || ^9.0.0-0
437 |
438 | eslint-plugin-vue@9.28.0:
439 | resolution: {integrity: sha512-ShrihdjIhOTxs+MfWun6oJWuk+g/LAhN+CiuOl/jjkG3l0F2AuK5NMTaWqyvBgkFtpYmyks6P4603mLmhNJW8g==}
440 | engines: {node: ^14.17.0 || >=16.0.0}
441 | peerDependencies:
442 | eslint: ^6.2.0 || ^7.0.0 || ^8.0.0 || ^9.0.0
443 |
444 | eslint-scope@7.2.2:
445 | resolution: {integrity: sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==}
446 | engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
447 |
448 | eslint-visitor-keys@3.4.0:
449 | resolution: {integrity: sha512-HPpKPUBQcAsZOsHAFwTtIKcYlCje62XB7SEAcxjtmW6TD1WVpkS6i6/hOVtTZIl4zGj/mBqpFVGvaDneik+VoQ==}
450 | engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
451 |
452 | eslint-visitor-keys@3.4.3:
453 | resolution: {integrity: sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==}
454 | engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
455 |
456 | eslint@8.57.0:
457 | resolution: {integrity: sha512-dZ6+mexnaTIbSBZWgou51U6OmzIhYM2VcNdtiTtI7qPNZm35Akpr0f6vtw3w1Kmn5PYo+tZVfh13WrhpS6oLqQ==}
458 | engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
459 | hasBin: true
460 |
461 | espree@9.6.1:
462 | resolution: {integrity: sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==}
463 | engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
464 |
465 | esquery@1.5.0:
466 | resolution: {integrity: sha512-YQLXUplAwJgCydQ78IMJywZCceoqk1oH01OERdSAJc/7U2AylwjhSCLDEtqwg811idIS/9fIU5GjG73IgjKMVg==}
467 | engines: {node: '>=0.10'}
468 |
469 | esrecurse@4.3.0:
470 | resolution: {integrity: sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==}
471 | engines: {node: '>=4.0'}
472 |
473 | estraverse@5.3.0:
474 | resolution: {integrity: sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==}
475 | engines: {node: '>=4.0'}
476 |
477 | estree-walker@2.0.2:
478 | resolution: {integrity: sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==}
479 |
480 | esutils@2.0.3:
481 | resolution: {integrity: sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==}
482 | engines: {node: '>=0.10.0'}
483 |
484 | event-target-shim@5.0.1:
485 | resolution: {integrity: sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ==}
486 | engines: {node: '>=6'}
487 |
488 | eventsource@2.0.2:
489 | resolution: {integrity: sha512-IzUmBGPR3+oUG9dUeXynyNmf91/3zUSJg1lCktzKw47OXuhco54U3r9B7O4XX+Rb1Itm9OZ2b0RkTs10bICOxA==}
490 | engines: {node: '>=12.0.0'}
491 |
492 | fast-deep-equal@3.1.3:
493 | resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==}
494 |
495 | fast-glob@3.3.2:
496 | resolution: {integrity: sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==}
497 | engines: {node: '>=8.6.0'}
498 |
499 | fast-json-stable-stringify@2.1.0:
500 | resolution: {integrity: sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==}
501 |
502 | fast-levenshtein@2.0.6:
503 | resolution: {integrity: sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==}
504 |
505 | fastq@1.13.0:
506 | resolution: {integrity: sha512-YpkpUnK8od0o1hmeSc7UUs/eB/vIPWJYjKck2QKIzAf71Vm1AAQ3EbuZB3g2JIy+pg+ERD0vqI79KyZiB2e2Nw==}
507 |
508 | fetch-cookie@2.1.0:
509 | resolution: {integrity: sha512-39+cZRbWfbibmj22R2Jy6dmTbAWC+oqun1f1FzQaNurkPDUP4C38jpeZbiXCR88RKRVDp8UcDrbFXkNhN+NjYg==}
510 |
511 | file-entry-cache@6.0.1:
512 | resolution: {integrity: sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==}
513 | engines: {node: ^10.12.0 || >=12.0.0}
514 |
515 | fill-range@7.0.1:
516 | resolution: {integrity: sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==}
517 | engines: {node: '>=8'}
518 |
519 | find-up@5.0.0:
520 | resolution: {integrity: sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==}
521 | engines: {node: '>=10'}
522 |
523 | flat-cache@3.2.0:
524 | resolution: {integrity: sha512-CYcENa+FtcUKLmhhqyctpclsq7QF38pKjZHsGNiSQF5r4FtoKDWabFDl3hzaEQMvT1LHEysw5twgLvpYYb4vbw==}
525 | engines: {node: ^10.12.0 || >=12.0.0}
526 |
527 | flatted@3.3.1:
528 | resolution: {integrity: sha512-X8cqMLLie7KsNUDSdzeN8FYK9rEt4Dt67OsG/DNGnYTSDBG4uFAJFBnUeiV+zCVAvwFy56IjM9sH51jVaEhNxw==}
529 |
530 | foreground-child@3.3.0:
531 | resolution: {integrity: sha512-Ld2g8rrAyMYFXBhEqMz8ZAHBi4J4uS1i/CxGMDnjyFWddMXLVcDp051DZfu+t7+ab7Wv6SMqpWmyFIj5UbfFvg==}
532 | engines: {node: '>=14'}
533 |
534 | fs.realpath@1.0.0:
535 | resolution: {integrity: sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==}
536 |
537 | function-bind@1.1.2:
538 | resolution: {integrity: sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==}
539 |
540 | get-tsconfig@4.8.0:
541 | resolution: {integrity: sha512-Pgba6TExTZ0FJAn1qkJAjIeKoDJ3CsI2ChuLohJnZl/tTU8MVrq3b+2t5UOPfRa4RMsorClBjJALkJUMjG1PAw==}
542 |
543 | glob-parent@5.1.2:
544 | resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==}
545 | engines: {node: '>= 6'}
546 |
547 | glob-parent@6.0.2:
548 | resolution: {integrity: sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==}
549 | engines: {node: '>=10.13.0'}
550 |
551 | glob@11.0.0:
552 | resolution: {integrity: sha512-9UiX/Bl6J2yaBbxKoEBRm4Cipxgok8kQYcOPEhScPwebu2I0HoQOuYdIO6S3hLuWoZgpDpwQZMzTFxgpkyT76g==}
553 | engines: {node: 20 || >=22}
554 | hasBin: true
555 |
556 | glob@7.2.3:
557 | resolution: {integrity: sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==}
558 | deprecated: Glob versions prior to v9 are no longer supported
559 |
560 | globals@13.24.0:
561 | resolution: {integrity: sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==}
562 | engines: {node: '>=8'}
563 |
564 | globby@11.1.0:
565 | resolution: {integrity: sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==}
566 | engines: {node: '>=10'}
567 |
568 | graceful-fs@4.2.11:
569 | resolution: {integrity: sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==}
570 |
571 | graphemer@1.4.0:
572 | resolution: {integrity: sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==}
573 |
574 | has-flag@4.0.0:
575 | resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==}
576 | engines: {node: '>=8'}
577 |
578 | hasown@2.0.2:
579 | resolution: {integrity: sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==}
580 | engines: {node: '>= 0.4'}
581 |
582 | ignore@5.3.2:
583 | resolution: {integrity: sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==}
584 | engines: {node: '>= 4'}
585 |
586 | import-fresh@3.3.0:
587 | resolution: {integrity: sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==}
588 | engines: {node: '>=6'}
589 |
590 | imurmurhash@0.1.4:
591 | resolution: {integrity: sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==}
592 | engines: {node: '>=0.8.19'}
593 |
594 | inflight@1.0.6:
595 | resolution: {integrity: sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==}
596 | deprecated: This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful.
597 |
598 | inherits@2.0.4:
599 | resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==}
600 |
601 | is-bun-module@1.2.1:
602 | resolution: {integrity: sha512-AmidtEM6D6NmUiLOvvU7+IePxjEjOzra2h0pSrsfSAcXwl/83zLLXDByafUJy9k/rKK0pvXMLdwKwGHlX2Ke6Q==}
603 |
604 | is-core-module@2.15.1:
605 | resolution: {integrity: sha512-z0vtXSwucUJtANQWldhbtbt7BnL0vxiFjIdDLAatwhDYty2bad6s+rijD6Ri4YuYJubLzIJLUidCh09e1djEVQ==}
606 | engines: {node: '>= 0.4'}
607 |
608 | is-extglob@2.1.1:
609 | resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==}
610 | engines: {node: '>=0.10.0'}
611 |
612 | is-fullwidth-code-point@3.0.0:
613 | resolution: {integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==}
614 | engines: {node: '>=8'}
615 |
616 | is-glob@4.0.3:
617 | resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==}
618 | engines: {node: '>=0.10.0'}
619 |
620 | is-number@7.0.0:
621 | resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==}
622 | engines: {node: '>=0.12.0'}
623 |
624 | is-path-inside@3.0.3:
625 | resolution: {integrity: sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==}
626 | engines: {node: '>=8'}
627 |
628 | isexe@2.0.0:
629 | resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==}
630 |
631 | jackspeak@4.0.1:
632 | resolution: {integrity: sha512-cub8rahkh0Q/bw1+GxP7aeSe29hHHn2V4m29nnDlvCdlgU+3UGxkZp7Z53jLUdpX3jdTO0nJZUDl3xvbWc2Xog==}
633 | engines: {node: 20 || >=22}
634 |
635 | js-yaml@4.1.0:
636 | resolution: {integrity: sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==}
637 | hasBin: true
638 |
639 | json-buffer@3.0.1:
640 | resolution: {integrity: sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==}
641 |
642 | json-schema-traverse@0.4.1:
643 | resolution: {integrity: sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==}
644 |
645 | json-stable-stringify-without-jsonify@1.0.1:
646 | resolution: {integrity: sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==}
647 |
648 | keyv@4.5.4:
649 | resolution: {integrity: sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==}
650 |
651 | levn@0.4.1:
652 | resolution: {integrity: sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==}
653 | engines: {node: '>= 0.8.0'}
654 |
655 | locate-path@6.0.0:
656 | resolution: {integrity: sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==}
657 | engines: {node: '>=10'}
658 |
659 | lodash.merge@4.6.2:
660 | resolution: {integrity: sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==}
661 |
662 | lodash@4.17.21:
663 | resolution: {integrity: sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==}
664 |
665 | lru-cache@11.0.1:
666 | resolution: {integrity: sha512-CgeuL5uom6j/ZVrg7G/+1IXqRY8JXX4Hghfy5YE0EhoYQWvndP1kufu58cmZLNIDKnRhZrXfdS9urVWx98AipQ==}
667 | engines: {node: 20 || >=22}
668 |
669 | magic-string@0.30.11:
670 | resolution: {integrity: sha512-+Wri9p0QHMy+545hKww7YAu5NyzF8iomPL/RQazugQ9+Ez4Ic3mERMd8ZTX5rfK944j+560ZJi8iAwgak1Ac7A==}
671 |
672 | merge2@1.4.1:
673 | resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==}
674 | engines: {node: '>= 8'}
675 |
676 | micromatch@4.0.4:
677 | resolution: {integrity: sha512-pRmzw/XUcwXGpD9aI9q/0XOwLNygjETJ8y0ao0wdqprrzDa4YnxLcz7fQRZr8voh8V10kGhABbNcHVk5wHgWwg==}
678 | engines: {node: '>=8.6'}
679 |
680 | minimatch@10.0.1:
681 | resolution: {integrity: sha512-ethXTt3SGGR+95gudmqJ1eNhRO7eGEGIgYA9vnPatK4/etz2MEVDno5GMCibdMTuBMyElzIlgxMna3K94XDIDQ==}
682 | engines: {node: 20 || >=22}
683 |
684 | minimatch@3.1.2:
685 | resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==}
686 |
687 | minimatch@9.0.5:
688 | resolution: {integrity: sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==}
689 | engines: {node: '>=16 || 14 >=14.17'}
690 |
691 | minipass@7.1.2:
692 | resolution: {integrity: sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==}
693 | engines: {node: '>=16 || 14 >=14.17'}
694 |
695 | ms@2.1.2:
696 | resolution: {integrity: sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==}
697 |
698 | ms@2.1.3:
699 | resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==}
700 |
701 | nanoid@3.3.7:
702 | resolution: {integrity: sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==}
703 | engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1}
704 | hasBin: true
705 |
706 | natural-compare@1.4.0:
707 | resolution: {integrity: sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==}
708 |
709 | node-fetch@2.6.9:
710 | resolution: {integrity: sha512-DJm/CJkZkRjKKj4Zi4BsKVZh3ValV5IR5s7LVZnW+6YMh0W1BfNA8XSs6DLMGYlId5F3KnA70uu2qepcR08Qqg==}
711 | engines: {node: 4.x || >=6.0.0}
712 | peerDependencies:
713 | encoding: ^0.1.0
714 | peerDependenciesMeta:
715 | encoding:
716 | optional: true
717 |
718 | nth-check@2.1.1:
719 | resolution: {integrity: sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==}
720 |
721 | once@1.4.0:
722 | resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==}
723 |
724 | optionator@0.9.4:
725 | resolution: {integrity: sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==}
726 | engines: {node: '>= 0.8.0'}
727 |
728 | p-limit@3.1.0:
729 | resolution: {integrity: sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==}
730 | engines: {node: '>=10'}
731 |
732 | p-locate@5.0.0:
733 | resolution: {integrity: sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==}
734 | engines: {node: '>=10'}
735 |
736 | package-json-from-dist@1.0.0:
737 | resolution: {integrity: sha512-dATvCeZN/8wQsGywez1mzHtTlP22H8OEfPrVMLNr4/eGa+ijtLn/6M5f0dY8UKNrC2O9UCU6SSoG3qRKnt7STw==}
738 |
739 | parent-module@1.0.1:
740 | resolution: {integrity: sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==}
741 | engines: {node: '>=6'}
742 |
743 | path-exists@4.0.0:
744 | resolution: {integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==}
745 | engines: {node: '>=8'}
746 |
747 | path-is-absolute@1.0.1:
748 | resolution: {integrity: sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==}
749 | engines: {node: '>=0.10.0'}
750 |
751 | path-key@3.1.1:
752 | resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==}
753 | engines: {node: '>=8'}
754 |
755 | path-parse@1.0.7:
756 | resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==}
757 |
758 | path-scurry@2.0.0:
759 | resolution: {integrity: sha512-ypGJsmGtdXUOeM5u93TyeIEfEhM6s+ljAhrk5vAvSx8uyY/02OvrZnA0YNGUrPXfpJMgI1ODd3nwz8Npx4O4cg==}
760 | engines: {node: 20 || >=22}
761 |
762 | path-type@4.0.0:
763 | resolution: {integrity: sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==}
764 | engines: {node: '>=8'}
765 |
766 | picocolors@1.1.0:
767 | resolution: {integrity: sha512-TQ92mBOW0l3LeMeyLV6mzy/kWr8lkd/hp3mTg7wYK7zJhuBStmGMBG0BdeDZS/dZx1IukaX6Bk11zcln25o1Aw==}
768 |
769 | picomatch@2.3.1:
770 | resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==}
771 | engines: {node: '>=8.6'}
772 |
773 | postcss-selector-parser@6.1.2:
774 | resolution: {integrity: sha512-Q8qQfPiZ+THO/3ZrOrO0cJJKfpYCagtMUkXbnEfmgUjwXg6z/WBeOyS9APBBPCTSiDV+s4SwQGu8yFsiMRIudg==}
775 | engines: {node: '>=4'}
776 |
777 | postcss@8.4.45:
778 | resolution: {integrity: sha512-7KTLTdzdZZYscUc65XmjFiB73vBhBfbPztCYdUNvlaso9PrzjzcmjqBPR0lNGkcVlcO4BjiO5rK/qNz+XAen1Q==}
779 | engines: {node: ^10 || ^12 || >=14}
780 |
781 | prelude-ls@1.2.1:
782 | resolution: {integrity: sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==}
783 | engines: {node: '>= 0.8.0'}
784 |
785 | prettier@3.3.3:
786 | resolution: {integrity: sha512-i2tDNA0O5IrMO757lfrdQZCc2jPNDVntV0m/+4whiDfWaTKfMNgR7Qz0NAeGz/nRqF4m5/6CLzbP4/liHt12Ew==}
787 | engines: {node: '>=14'}
788 | hasBin: true
789 |
790 | psl@1.8.0:
791 | resolution: {integrity: sha512-RIdOzyoavK+hA18OGGWDqUTsCLhtA7IcZ/6NCs4fFJaHBDab+pDDmDIByWFRQJq2Cd7r1OoQxBGKOaztq+hjIQ==}
792 |
793 | punycode@2.1.1:
794 | resolution: {integrity: sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==}
795 | engines: {node: '>=6'}
796 |
797 | querystringify@2.2.0:
798 | resolution: {integrity: sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ==}
799 |
800 | queue-microtask@1.2.3:
801 | resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==}
802 |
803 | requires-port@1.0.0:
804 | resolution: {integrity: sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ==}
805 |
806 | resolve-from@4.0.0:
807 | resolution: {integrity: sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==}
808 | engines: {node: '>=4'}
809 |
810 | resolve-pkg-maps@1.0.0:
811 | resolution: {integrity: sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw==}
812 |
813 | resolve@1.22.8:
814 | resolution: {integrity: sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==}
815 | hasBin: true
816 |
817 | reusify@1.0.4:
818 | resolution: {integrity: sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==}
819 | engines: {iojs: '>=1.0.0', node: '>=0.10.0'}
820 |
821 | rimraf@3.0.2:
822 | resolution: {integrity: sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==}
823 | deprecated: Rimraf versions prior to v4 are no longer supported
824 | hasBin: true
825 |
826 | rimraf@6.0.1:
827 | resolution: {integrity: sha512-9dkvaxAsk/xNXSJzMgFqqMCuFgt2+KsOFek3TMLfo8NCPfWpBmqwyNn5Y+NX56QUYfCtsyhF3ayiboEoUmJk/A==}
828 | engines: {node: 20 || >=22}
829 | hasBin: true
830 |
831 | run-parallel@1.2.0:
832 | resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==}
833 |
834 | semver@7.6.3:
835 | resolution: {integrity: sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==}
836 | engines: {node: '>=10'}
837 | hasBin: true
838 |
839 | set-cookie-parser@2.6.0:
840 | resolution: {integrity: sha512-RVnVQxTXuerk653XfuliOxBP81Sf0+qfQE73LIYKcyMYHG94AuH0kgrQpRDuTZnSmjpysHmzxJXKNfa6PjFhyQ==}
841 |
842 | shebang-command@2.0.0:
843 | resolution: {integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==}
844 | engines: {node: '>=8'}
845 |
846 | shebang-regex@3.0.0:
847 | resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==}
848 | engines: {node: '>=8'}
849 |
850 | signal-exit@4.1.0:
851 | resolution: {integrity: sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==}
852 | engines: {node: '>=14'}
853 |
854 | slash@3.0.0:
855 | resolution: {integrity: sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==}
856 | engines: {node: '>=8'}
857 |
858 | source-map-js@1.2.1:
859 | resolution: {integrity: sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==}
860 | engines: {node: '>=0.10.0'}
861 |
862 | stable-hash@0.0.4:
863 | resolution: {integrity: sha512-LjdcbuBeLcdETCrPn9i8AYAZ1eCtu4ECAWtP7UleOiZ9LzVxRzzUZEoZ8zB24nhkQnDWyET0I+3sWokSDS3E7g==}
864 |
865 | string-width@4.2.3:
866 | resolution: {integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==}
867 | engines: {node: '>=8'}
868 |
869 | string-width@5.1.2:
870 | resolution: {integrity: sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==}
871 | engines: {node: '>=12'}
872 |
873 | strip-ansi@6.0.1:
874 | resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==}
875 | engines: {node: '>=8'}
876 |
877 | strip-ansi@7.1.0:
878 | resolution: {integrity: sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==}
879 | engines: {node: '>=12'}
880 |
881 | strip-json-comments@3.1.1:
882 | resolution: {integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==}
883 | engines: {node: '>=8'}
884 |
885 | supports-color@7.2.0:
886 | resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==}
887 | engines: {node: '>=8'}
888 |
889 | supports-preserve-symlinks-flag@1.0.0:
890 | resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==}
891 | engines: {node: '>= 0.4'}
892 |
893 | tapable@2.2.1:
894 | resolution: {integrity: sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==}
895 | engines: {node: '>=6'}
896 |
897 | text-table@0.2.0:
898 | resolution: {integrity: sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==}
899 |
900 | to-fast-properties@2.0.0:
901 | resolution: {integrity: sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==}
902 | engines: {node: '>=4'}
903 |
904 | to-regex-range@5.0.1:
905 | resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==}
906 | engines: {node: '>=8.0'}
907 |
908 | tough-cookie@4.1.2:
909 | resolution: {integrity: sha512-G9fqXWoYFZgTc2z8Q5zaHy/vJMjm+WV0AkAeHxVCQiEB1b+dGvWzFW6QV07cY5jQ5gRkeid2qIkzkxUnmoQZUQ==}
910 | engines: {node: '>=6'}
911 |
912 | tr46@0.0.3:
913 | resolution: {integrity: sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==}
914 |
915 | ts-api-utils@1.3.0:
916 | resolution: {integrity: sha512-UQMIo7pb8WRomKR1/+MFVLTroIvDVtMX3K6OUir8ynLyzB8Jeriont2bTAtmNPa1ekAgN7YPDyf6V+ygrdU+eQ==}
917 | engines: {node: '>=16'}
918 | peerDependencies:
919 | typescript: '>=4.2.0'
920 |
921 | tslib@2.7.0:
922 | resolution: {integrity: sha512-gLXCKdN1/j47AiHiOkJN69hJmcbGTHI0ImLmbYLHykhgeN0jVGola9yVjFgzCUklsZQMW55o+dW7IXv3RCXDzA==}
923 |
924 | type-check@0.4.0:
925 | resolution: {integrity: sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==}
926 | engines: {node: '>= 0.8.0'}
927 |
928 | type-fest@0.20.2:
929 | resolution: {integrity: sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==}
930 | engines: {node: '>=10'}
931 |
932 | typescript@5.5.4:
933 | resolution: {integrity: sha512-Mtq29sKDAEYP7aljRgtPOpTvOfbwRWlS6dPRzwjdE+C0R4brX/GUyhHSecbHMFLNBLcJIPt9nl9yG5TZ1weH+Q==}
934 | engines: {node: '>=14.17'}
935 | hasBin: true
936 |
937 | undici-types@6.19.8:
938 | resolution: {integrity: sha512-ve2KP6f/JnbPBFyobGHuerC9g1FYGn/F8n1LWTwNxCEzd6IfqTwUQcNXgEtmmQ6DlRrC1hrSrBnCZPokRrDHjw==}
939 |
940 | universalify@0.2.0:
941 | resolution: {integrity: sha512-CJ1QgKmNg3CwvAv/kOFmtnEN05f0D/cn9QntgNOQlQF9dgvVTHj3t+8JPdjqawCHk7V/KA+fbUqzZ9XWhcqPUg==}
942 | engines: {node: '>= 4.0.0'}
943 |
944 | uri-js@4.4.1:
945 | resolution: {integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==}
946 |
947 | url-parse@1.5.4:
948 | resolution: {integrity: sha512-ITeAByWWoqutFClc/lRZnFplgXgEZr3WJ6XngMM/N9DMIm4K8zXPCZ1Jdu0rERwO84w1WC5wkle2ubwTA4NTBg==}
949 |
950 | util-deprecate@1.0.2:
951 | resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==}
952 |
953 | vue-eslint-parser@9.4.3:
954 | resolution: {integrity: sha512-2rYRLWlIpaiN8xbPiDyXZXRgLGOtWxERV7ND5fFAv5qo1D2N9Fu9MNajBNc6o13lZ+24DAWCkQCvj4klgmcITg==}
955 | engines: {node: ^14.17.0 || >=16.0.0}
956 | peerDependencies:
957 | eslint: '>=6.0.0'
958 |
959 | vue@3.5.4:
960 | resolution: {integrity: sha512-3yAj2gkmiY+i7+22A1PWM+kjOVXjU74UPINcTiN7grIVPyFFI0lpGwHlV/4xydDmobaBn7/xmi+YG8HeSlCTcg==}
961 | peerDependencies:
962 | typescript: '*'
963 | peerDependenciesMeta:
964 | typescript:
965 | optional: true
966 |
967 | webidl-conversions@3.0.1:
968 | resolution: {integrity: sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==}
969 |
970 | whatwg-url@5.0.0:
971 | resolution: {integrity: sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==}
972 |
973 | which@2.0.2:
974 | resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==}
975 | engines: {node: '>= 8'}
976 | hasBin: true
977 |
978 | word-wrap@1.2.5:
979 | resolution: {integrity: sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==}
980 | engines: {node: '>=0.10.0'}
981 |
982 | wrap-ansi@7.0.0:
983 | resolution: {integrity: sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==}
984 | engines: {node: '>=10'}
985 |
986 | wrap-ansi@8.1.0:
987 | resolution: {integrity: sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==}
988 | engines: {node: '>=12'}
989 |
990 | wrappy@1.0.2:
991 | resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==}
992 |
993 | ws@7.5.9:
994 | resolution: {integrity: sha512-F+P9Jil7UiSKSkppIiD94dN07AwvFixvLIj1Og1Rl9GGMuNipJnV9JzjD6XuqmAeiswGvUmNLjr5cFuXwNS77Q==}
995 | engines: {node: '>=8.3.0'}
996 | peerDependencies:
997 | bufferutil: ^4.0.1
998 | utf-8-validate: ^5.0.2
999 | peerDependenciesMeta:
1000 | bufferutil:
1001 | optional: true
1002 | utf-8-validate:
1003 | optional: true
1004 |
1005 | xml-name-validator@4.0.0:
1006 | resolution: {integrity: sha512-ICP2e+jsHvAj2E2lIHxa5tjXRlKDJo4IdvPvCXbXQGdzSfmSpNVyIKMvoZHjDY9DP0zV17iI85o90vRFXNccRw==}
1007 | engines: {node: '>=12'}
1008 |
1009 | yocto-queue@0.1.0:
1010 | resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==}
1011 | engines: {node: '>=10'}
1012 |
1013 | snapshots:
1014 |
1015 | '@babel/helper-string-parser@7.24.8': {}
1016 |
1017 | '@babel/helper-validator-identifier@7.24.7': {}
1018 |
1019 | '@babel/parser@7.25.6':
1020 | dependencies:
1021 | '@babel/types': 7.25.6
1022 |
1023 | '@babel/types@7.25.6':
1024 | dependencies:
1025 | '@babel/helper-string-parser': 7.24.8
1026 | '@babel/helper-validator-identifier': 7.24.7
1027 | to-fast-properties: 2.0.0
1028 |
1029 | '@eslint-community/eslint-utils@4.4.0(eslint@8.57.0)':
1030 | dependencies:
1031 | eslint: 8.57.0
1032 | eslint-visitor-keys: 3.4.0
1033 |
1034 | '@eslint-community/regexpp@4.11.0': {}
1035 |
1036 | '@eslint/eslintrc@2.1.4':
1037 | dependencies:
1038 | ajv: 6.12.6
1039 | debug: 4.3.7
1040 | espree: 9.6.1
1041 | globals: 13.24.0
1042 | ignore: 5.3.2
1043 | import-fresh: 3.3.0
1044 | js-yaml: 4.1.0
1045 | minimatch: 3.1.2
1046 | strip-json-comments: 3.1.1
1047 | transitivePeerDependencies:
1048 | - supports-color
1049 |
1050 | '@eslint/js@8.57.0': {}
1051 |
1052 | '@humanwhocodes/config-array@0.11.14':
1053 | dependencies:
1054 | '@humanwhocodes/object-schema': 2.0.3
1055 | debug: 4.3.7
1056 | minimatch: 3.1.2
1057 | transitivePeerDependencies:
1058 | - supports-color
1059 |
1060 | '@humanwhocodes/module-importer@1.0.1': {}
1061 |
1062 | '@humanwhocodes/object-schema@2.0.3': {}
1063 |
1064 | '@isaacs/cliui@8.0.2':
1065 | dependencies:
1066 | string-width: 5.1.2
1067 | string-width-cjs: string-width@4.2.3
1068 | strip-ansi: 7.1.0
1069 | strip-ansi-cjs: strip-ansi@6.0.1
1070 | wrap-ansi: 8.1.0
1071 | wrap-ansi-cjs: wrap-ansi@7.0.0
1072 |
1073 | '@jridgewell/sourcemap-codec@1.5.0': {}
1074 |
1075 | '@microsoft/signalr@8.0.7':
1076 | dependencies:
1077 | abort-controller: 3.0.0
1078 | eventsource: 2.0.2
1079 | fetch-cookie: 2.1.0
1080 | node-fetch: 2.6.9
1081 | ws: 7.5.9
1082 | transitivePeerDependencies:
1083 | - bufferutil
1084 | - encoding
1085 | - utf-8-validate
1086 |
1087 | '@nodelib/fs.scandir@2.1.5':
1088 | dependencies:
1089 | '@nodelib/fs.stat': 2.0.5
1090 | run-parallel: 1.2.0
1091 |
1092 | '@nodelib/fs.stat@2.0.5': {}
1093 |
1094 | '@nodelib/fs.walk@1.2.8':
1095 | dependencies:
1096 | '@nodelib/fs.scandir': 2.1.5
1097 | fastq: 1.13.0
1098 |
1099 | '@nolyfill/is-core-module@1.0.39': {}
1100 |
1101 | '@pkgjs/parseargs@0.11.0':
1102 | optional: true
1103 |
1104 | '@types/node@20.16.5':
1105 | dependencies:
1106 | undici-types: 6.19.8
1107 |
1108 | '@typescript-eslint/eslint-plugin@8.5.0(@typescript-eslint/parser@8.5.0(eslint@8.57.0)(typescript@5.5.4))(eslint@8.57.0)(typescript@5.5.4)':
1109 | dependencies:
1110 | '@eslint-community/regexpp': 4.11.0
1111 | '@typescript-eslint/parser': 8.5.0(eslint@8.57.0)(typescript@5.5.4)
1112 | '@typescript-eslint/scope-manager': 8.5.0
1113 | '@typescript-eslint/type-utils': 8.5.0(eslint@8.57.0)(typescript@5.5.4)
1114 | '@typescript-eslint/utils': 8.5.0(eslint@8.57.0)(typescript@5.5.4)
1115 | '@typescript-eslint/visitor-keys': 8.5.0
1116 | eslint: 8.57.0
1117 | graphemer: 1.4.0
1118 | ignore: 5.3.2
1119 | natural-compare: 1.4.0
1120 | ts-api-utils: 1.3.0(typescript@5.5.4)
1121 | optionalDependencies:
1122 | typescript: 5.5.4
1123 | transitivePeerDependencies:
1124 | - supports-color
1125 |
1126 | '@typescript-eslint/parser@8.5.0(eslint@8.57.0)(typescript@5.5.4)':
1127 | dependencies:
1128 | '@typescript-eslint/scope-manager': 8.5.0
1129 | '@typescript-eslint/types': 8.5.0
1130 | '@typescript-eslint/typescript-estree': 8.5.0(typescript@5.5.4)
1131 | '@typescript-eslint/visitor-keys': 8.5.0
1132 | debug: 4.3.4
1133 | eslint: 8.57.0
1134 | optionalDependencies:
1135 | typescript: 5.5.4
1136 | transitivePeerDependencies:
1137 | - supports-color
1138 |
1139 | '@typescript-eslint/scope-manager@7.18.0':
1140 | dependencies:
1141 | '@typescript-eslint/types': 7.18.0
1142 | '@typescript-eslint/visitor-keys': 7.18.0
1143 |
1144 | '@typescript-eslint/scope-manager@8.5.0':
1145 | dependencies:
1146 | '@typescript-eslint/types': 8.5.0
1147 | '@typescript-eslint/visitor-keys': 8.5.0
1148 |
1149 | '@typescript-eslint/type-utils@8.5.0(eslint@8.57.0)(typescript@5.5.4)':
1150 | dependencies:
1151 | '@typescript-eslint/typescript-estree': 8.5.0(typescript@5.5.4)
1152 | '@typescript-eslint/utils': 8.5.0(eslint@8.57.0)(typescript@5.5.4)
1153 | debug: 4.3.4
1154 | ts-api-utils: 1.3.0(typescript@5.5.4)
1155 | optionalDependencies:
1156 | typescript: 5.5.4
1157 | transitivePeerDependencies:
1158 | - eslint
1159 | - supports-color
1160 |
1161 | '@typescript-eslint/types@7.18.0': {}
1162 |
1163 | '@typescript-eslint/types@8.5.0': {}
1164 |
1165 | '@typescript-eslint/typescript-estree@7.18.0(typescript@5.5.4)':
1166 | dependencies:
1167 | '@typescript-eslint/types': 7.18.0
1168 | '@typescript-eslint/visitor-keys': 7.18.0
1169 | debug: 4.3.4
1170 | globby: 11.1.0
1171 | is-glob: 4.0.3
1172 | minimatch: 9.0.5
1173 | semver: 7.6.3
1174 | ts-api-utils: 1.3.0(typescript@5.5.4)
1175 | optionalDependencies:
1176 | typescript: 5.5.4
1177 | transitivePeerDependencies:
1178 | - supports-color
1179 |
1180 | '@typescript-eslint/typescript-estree@8.5.0(typescript@5.5.4)':
1181 | dependencies:
1182 | '@typescript-eslint/types': 8.5.0
1183 | '@typescript-eslint/visitor-keys': 8.5.0
1184 | debug: 4.3.4
1185 | fast-glob: 3.3.2
1186 | is-glob: 4.0.3
1187 | minimatch: 9.0.5
1188 | semver: 7.6.3
1189 | ts-api-utils: 1.3.0(typescript@5.5.4)
1190 | optionalDependencies:
1191 | typescript: 5.5.4
1192 | transitivePeerDependencies:
1193 | - supports-color
1194 |
1195 | '@typescript-eslint/utils@7.18.0(eslint@8.57.0)(typescript@5.5.4)':
1196 | dependencies:
1197 | '@eslint-community/eslint-utils': 4.4.0(eslint@8.57.0)
1198 | '@typescript-eslint/scope-manager': 7.18.0
1199 | '@typescript-eslint/types': 7.18.0
1200 | '@typescript-eslint/typescript-estree': 7.18.0(typescript@5.5.4)
1201 | eslint: 8.57.0
1202 | transitivePeerDependencies:
1203 | - supports-color
1204 | - typescript
1205 |
1206 | '@typescript-eslint/utils@8.5.0(eslint@8.57.0)(typescript@5.5.4)':
1207 | dependencies:
1208 | '@eslint-community/eslint-utils': 4.4.0(eslint@8.57.0)
1209 | '@typescript-eslint/scope-manager': 8.5.0
1210 | '@typescript-eslint/types': 8.5.0
1211 | '@typescript-eslint/typescript-estree': 8.5.0(typescript@5.5.4)
1212 | eslint: 8.57.0
1213 | transitivePeerDependencies:
1214 | - supports-color
1215 | - typescript
1216 |
1217 | '@typescript-eslint/visitor-keys@7.18.0':
1218 | dependencies:
1219 | '@typescript-eslint/types': 7.18.0
1220 | eslint-visitor-keys: 3.4.3
1221 |
1222 | '@typescript-eslint/visitor-keys@8.5.0':
1223 | dependencies:
1224 | '@typescript-eslint/types': 8.5.0
1225 | eslint-visitor-keys: 3.4.3
1226 |
1227 | '@ungap/structured-clone@1.2.0': {}
1228 |
1229 | '@vue/compiler-core@3.5.4':
1230 | dependencies:
1231 | '@babel/parser': 7.25.6
1232 | '@vue/shared': 3.5.4
1233 | entities: 4.5.0
1234 | estree-walker: 2.0.2
1235 | source-map-js: 1.2.1
1236 |
1237 | '@vue/compiler-dom@3.5.4':
1238 | dependencies:
1239 | '@vue/compiler-core': 3.5.4
1240 | '@vue/shared': 3.5.4
1241 |
1242 | '@vue/compiler-sfc@3.5.4':
1243 | dependencies:
1244 | '@babel/parser': 7.25.6
1245 | '@vue/compiler-core': 3.5.4
1246 | '@vue/compiler-dom': 3.5.4
1247 | '@vue/compiler-ssr': 3.5.4
1248 | '@vue/shared': 3.5.4
1249 | estree-walker: 2.0.2
1250 | magic-string: 0.30.11
1251 | postcss: 8.4.45
1252 | source-map-js: 1.2.1
1253 |
1254 | '@vue/compiler-ssr@3.5.4':
1255 | dependencies:
1256 | '@vue/compiler-dom': 3.5.4
1257 | '@vue/shared': 3.5.4
1258 |
1259 | '@vue/reactivity@3.5.4':
1260 | dependencies:
1261 | '@vue/shared': 3.5.4
1262 |
1263 | '@vue/runtime-core@3.5.4':
1264 | dependencies:
1265 | '@vue/reactivity': 3.5.4
1266 | '@vue/shared': 3.5.4
1267 |
1268 | '@vue/runtime-dom@3.5.4':
1269 | dependencies:
1270 | '@vue/reactivity': 3.5.4
1271 | '@vue/runtime-core': 3.5.4
1272 | '@vue/shared': 3.5.4
1273 | csstype: 3.1.3
1274 |
1275 | '@vue/server-renderer@3.5.4(vue@3.5.4(typescript@5.5.4))':
1276 | dependencies:
1277 | '@vue/compiler-ssr': 3.5.4
1278 | '@vue/shared': 3.5.4
1279 | vue: 3.5.4(typescript@5.5.4)
1280 |
1281 | '@vue/shared@3.5.4': {}
1282 |
1283 | abort-controller@3.0.0:
1284 | dependencies:
1285 | event-target-shim: 5.0.1
1286 |
1287 | acorn-jsx@5.3.2(acorn@8.12.1):
1288 | dependencies:
1289 | acorn: 8.12.1
1290 |
1291 | acorn@8.12.1: {}
1292 |
1293 | ajv@6.12.6:
1294 | dependencies:
1295 | fast-deep-equal: 3.1.3
1296 | fast-json-stable-stringify: 2.1.0
1297 | json-schema-traverse: 0.4.1
1298 | uri-js: 4.4.1
1299 |
1300 | ansi-regex@5.0.1: {}
1301 |
1302 | ansi-regex@6.1.0: {}
1303 |
1304 | ansi-styles@4.3.0:
1305 | dependencies:
1306 | color-convert: 2.0.1
1307 |
1308 | ansi-styles@6.2.1: {}
1309 |
1310 | argparse@2.0.1: {}
1311 |
1312 | array-union@2.1.0: {}
1313 |
1314 | balanced-match@1.0.2: {}
1315 |
1316 | boolbase@1.0.0: {}
1317 |
1318 | brace-expansion@1.1.11:
1319 | dependencies:
1320 | balanced-match: 1.0.2
1321 | concat-map: 0.0.1
1322 |
1323 | brace-expansion@2.0.1:
1324 | dependencies:
1325 | balanced-match: 1.0.2
1326 |
1327 | braces@3.0.2:
1328 | dependencies:
1329 | fill-range: 7.0.1
1330 |
1331 | callsites@3.1.0: {}
1332 |
1333 | chalk@4.1.2:
1334 | dependencies:
1335 | ansi-styles: 4.3.0
1336 | supports-color: 7.2.0
1337 |
1338 | color-convert@2.0.1:
1339 | dependencies:
1340 | color-name: 1.1.4
1341 |
1342 | color-name@1.1.4: {}
1343 |
1344 | concat-map@0.0.1: {}
1345 |
1346 | cross-spawn@7.0.3:
1347 | dependencies:
1348 | path-key: 3.1.1
1349 | shebang-command: 2.0.0
1350 | which: 2.0.2
1351 |
1352 | cssesc@3.0.0: {}
1353 |
1354 | csstype@3.1.3: {}
1355 |
1356 | debug@3.2.7:
1357 | dependencies:
1358 | ms: 2.1.2
1359 |
1360 | debug@4.3.4:
1361 | dependencies:
1362 | ms: 2.1.2
1363 |
1364 | debug@4.3.7:
1365 | dependencies:
1366 | ms: 2.1.3
1367 |
1368 | deep-is@0.1.4: {}
1369 |
1370 | dir-glob@3.0.1:
1371 | dependencies:
1372 | path-type: 4.0.0
1373 |
1374 | doctrine@3.0.0:
1375 | dependencies:
1376 | esutils: 2.0.3
1377 |
1378 | eastasianwidth@0.2.0: {}
1379 |
1380 | emoji-regex@8.0.0: {}
1381 |
1382 | emoji-regex@9.2.2: {}
1383 |
1384 | enhanced-resolve@5.17.1:
1385 | dependencies:
1386 | graceful-fs: 4.2.11
1387 | tapable: 2.2.1
1388 |
1389 | entities@4.5.0: {}
1390 |
1391 | escape-string-regexp@4.0.0: {}
1392 |
1393 | eslint-config-coralloy@0.4.0(eslint@8.57.0)(prettier@3.3.3)(typescript@5.5.4):
1394 | dependencies:
1395 | '@typescript-eslint/eslint-plugin': 8.5.0(@typescript-eslint/parser@8.5.0(eslint@8.57.0)(typescript@5.5.4))(eslint@8.57.0)(typescript@5.5.4)
1396 | '@typescript-eslint/parser': 8.5.0(eslint@8.57.0)(typescript@5.5.4)
1397 | eslint: 8.57.0
1398 | eslint-config-prettier: 9.1.0(eslint@8.57.0)
1399 | eslint-import-resolver-typescript: 3.6.3(@typescript-eslint/parser@8.5.0(eslint@8.57.0)(typescript@5.5.4))(eslint-plugin-import-x@3.1.0(eslint@8.57.0)(typescript@5.5.4))(eslint@8.57.0)
1400 | eslint-plugin-import-x: 3.1.0(eslint@8.57.0)(typescript@5.5.4)
1401 | eslint-plugin-vue: 9.28.0(eslint@8.57.0)
1402 | prettier: 3.3.3
1403 | typescript: 5.5.4
1404 | transitivePeerDependencies:
1405 | - eslint-import-resolver-node
1406 | - eslint-import-resolver-webpack
1407 | - eslint-plugin-import
1408 | - supports-color
1409 |
1410 | eslint-config-prettier@9.1.0(eslint@8.57.0):
1411 | dependencies:
1412 | eslint: 8.57.0
1413 |
1414 | eslint-import-resolver-node@0.3.9:
1415 | dependencies:
1416 | debug: 3.2.7
1417 | is-core-module: 2.15.1
1418 | resolve: 1.22.8
1419 | transitivePeerDependencies:
1420 | - supports-color
1421 |
1422 | eslint-import-resolver-typescript@3.6.3(@typescript-eslint/parser@8.5.0(eslint@8.57.0)(typescript@5.5.4))(eslint-plugin-import-x@3.1.0(eslint@8.57.0)(typescript@5.5.4))(eslint@8.57.0):
1423 | dependencies:
1424 | '@nolyfill/is-core-module': 1.0.39
1425 | debug: 4.3.7
1426 | enhanced-resolve: 5.17.1
1427 | eslint: 8.57.0
1428 | eslint-module-utils: 2.11.0(@typescript-eslint/parser@8.5.0(eslint@8.57.0)(typescript@5.5.4))(eslint-import-resolver-typescript@3.6.3(@typescript-eslint/parser@8.5.0(eslint@8.57.0)(typescript@5.5.4))(eslint-plugin-import-x@3.1.0(eslint@8.57.0)(typescript@5.5.4))(eslint@8.57.0))(eslint@8.57.0)
1429 | fast-glob: 3.3.2
1430 | get-tsconfig: 4.8.0
1431 | is-bun-module: 1.2.1
1432 | is-glob: 4.0.3
1433 | optionalDependencies:
1434 | eslint-plugin-import-x: 3.1.0(eslint@8.57.0)(typescript@5.5.4)
1435 | transitivePeerDependencies:
1436 | - '@typescript-eslint/parser'
1437 | - eslint-import-resolver-node
1438 | - eslint-import-resolver-webpack
1439 | - supports-color
1440 |
1441 | eslint-module-utils@2.11.0(@typescript-eslint/parser@8.5.0(eslint@8.57.0)(typescript@5.5.4))(eslint-import-resolver-typescript@3.6.3(@typescript-eslint/parser@8.5.0(eslint@8.57.0)(typescript@5.5.4))(eslint-plugin-import-x@3.1.0(eslint@8.57.0)(typescript@5.5.4))(eslint@8.57.0))(eslint@8.57.0):
1442 | dependencies:
1443 | debug: 3.2.7
1444 | optionalDependencies:
1445 | '@typescript-eslint/parser': 8.5.0(eslint@8.57.0)(typescript@5.5.4)
1446 | eslint: 8.57.0
1447 | eslint-import-resolver-typescript: 3.6.3(@typescript-eslint/parser@8.5.0(eslint@8.57.0)(typescript@5.5.4))(eslint-plugin-import-x@3.1.0(eslint@8.57.0)(typescript@5.5.4))(eslint@8.57.0)
1448 | transitivePeerDependencies:
1449 | - supports-color
1450 |
1451 | eslint-plugin-import-x@3.1.0(eslint@8.57.0)(typescript@5.5.4):
1452 | dependencies:
1453 | '@typescript-eslint/utils': 7.18.0(eslint@8.57.0)(typescript@5.5.4)
1454 | debug: 4.3.4
1455 | doctrine: 3.0.0
1456 | eslint: 8.57.0
1457 | eslint-import-resolver-node: 0.3.9
1458 | get-tsconfig: 4.8.0
1459 | is-glob: 4.0.3
1460 | minimatch: 9.0.5
1461 | semver: 7.6.3
1462 | stable-hash: 0.0.4
1463 | tslib: 2.7.0
1464 | transitivePeerDependencies:
1465 | - supports-color
1466 | - typescript
1467 |
1468 | eslint-plugin-vue@9.28.0(eslint@8.57.0):
1469 | dependencies:
1470 | '@eslint-community/eslint-utils': 4.4.0(eslint@8.57.0)
1471 | eslint: 8.57.0
1472 | globals: 13.24.0
1473 | natural-compare: 1.4.0
1474 | nth-check: 2.1.1
1475 | postcss-selector-parser: 6.1.2
1476 | semver: 7.6.3
1477 | vue-eslint-parser: 9.4.3(eslint@8.57.0)
1478 | xml-name-validator: 4.0.0
1479 | transitivePeerDependencies:
1480 | - supports-color
1481 |
1482 | eslint-scope@7.2.2:
1483 | dependencies:
1484 | esrecurse: 4.3.0
1485 | estraverse: 5.3.0
1486 |
1487 | eslint-visitor-keys@3.4.0: {}
1488 |
1489 | eslint-visitor-keys@3.4.3: {}
1490 |
1491 | eslint@8.57.0:
1492 | dependencies:
1493 | '@eslint-community/eslint-utils': 4.4.0(eslint@8.57.0)
1494 | '@eslint-community/regexpp': 4.11.0
1495 | '@eslint/eslintrc': 2.1.4
1496 | '@eslint/js': 8.57.0
1497 | '@humanwhocodes/config-array': 0.11.14
1498 | '@humanwhocodes/module-importer': 1.0.1
1499 | '@nodelib/fs.walk': 1.2.8
1500 | '@ungap/structured-clone': 1.2.0
1501 | ajv: 6.12.6
1502 | chalk: 4.1.2
1503 | cross-spawn: 7.0.3
1504 | debug: 4.3.7
1505 | doctrine: 3.0.0
1506 | escape-string-regexp: 4.0.0
1507 | eslint-scope: 7.2.2
1508 | eslint-visitor-keys: 3.4.3
1509 | espree: 9.6.1
1510 | esquery: 1.5.0
1511 | esutils: 2.0.3
1512 | fast-deep-equal: 3.1.3
1513 | file-entry-cache: 6.0.1
1514 | find-up: 5.0.0
1515 | glob-parent: 6.0.2
1516 | globals: 13.24.0
1517 | graphemer: 1.4.0
1518 | ignore: 5.3.2
1519 | imurmurhash: 0.1.4
1520 | is-glob: 4.0.3
1521 | is-path-inside: 3.0.3
1522 | js-yaml: 4.1.0
1523 | json-stable-stringify-without-jsonify: 1.0.1
1524 | levn: 0.4.1
1525 | lodash.merge: 4.6.2
1526 | minimatch: 3.1.2
1527 | natural-compare: 1.4.0
1528 | optionator: 0.9.4
1529 | strip-ansi: 6.0.1
1530 | text-table: 0.2.0
1531 | transitivePeerDependencies:
1532 | - supports-color
1533 |
1534 | espree@9.6.1:
1535 | dependencies:
1536 | acorn: 8.12.1
1537 | acorn-jsx: 5.3.2(acorn@8.12.1)
1538 | eslint-visitor-keys: 3.4.3
1539 |
1540 | esquery@1.5.0:
1541 | dependencies:
1542 | estraverse: 5.3.0
1543 |
1544 | esrecurse@4.3.0:
1545 | dependencies:
1546 | estraverse: 5.3.0
1547 |
1548 | estraverse@5.3.0: {}
1549 |
1550 | estree-walker@2.0.2: {}
1551 |
1552 | esutils@2.0.3: {}
1553 |
1554 | event-target-shim@5.0.1: {}
1555 |
1556 | eventsource@2.0.2: {}
1557 |
1558 | fast-deep-equal@3.1.3: {}
1559 |
1560 | fast-glob@3.3.2:
1561 | dependencies:
1562 | '@nodelib/fs.stat': 2.0.5
1563 | '@nodelib/fs.walk': 1.2.8
1564 | glob-parent: 5.1.2
1565 | merge2: 1.4.1
1566 | micromatch: 4.0.4
1567 |
1568 | fast-json-stable-stringify@2.1.0: {}
1569 |
1570 | fast-levenshtein@2.0.6: {}
1571 |
1572 | fastq@1.13.0:
1573 | dependencies:
1574 | reusify: 1.0.4
1575 |
1576 | fetch-cookie@2.1.0:
1577 | dependencies:
1578 | set-cookie-parser: 2.6.0
1579 | tough-cookie: 4.1.2
1580 |
1581 | file-entry-cache@6.0.1:
1582 | dependencies:
1583 | flat-cache: 3.2.0
1584 |
1585 | fill-range@7.0.1:
1586 | dependencies:
1587 | to-regex-range: 5.0.1
1588 |
1589 | find-up@5.0.0:
1590 | dependencies:
1591 | locate-path: 6.0.0
1592 | path-exists: 4.0.0
1593 |
1594 | flat-cache@3.2.0:
1595 | dependencies:
1596 | flatted: 3.3.1
1597 | keyv: 4.5.4
1598 | rimraf: 3.0.2
1599 |
1600 | flatted@3.3.1: {}
1601 |
1602 | foreground-child@3.3.0:
1603 | dependencies:
1604 | cross-spawn: 7.0.3
1605 | signal-exit: 4.1.0
1606 |
1607 | fs.realpath@1.0.0: {}
1608 |
1609 | function-bind@1.1.2: {}
1610 |
1611 | get-tsconfig@4.8.0:
1612 | dependencies:
1613 | resolve-pkg-maps: 1.0.0
1614 |
1615 | glob-parent@5.1.2:
1616 | dependencies:
1617 | is-glob: 4.0.3
1618 |
1619 | glob-parent@6.0.2:
1620 | dependencies:
1621 | is-glob: 4.0.3
1622 |
1623 | glob@11.0.0:
1624 | dependencies:
1625 | foreground-child: 3.3.0
1626 | jackspeak: 4.0.1
1627 | minimatch: 10.0.1
1628 | minipass: 7.1.2
1629 | package-json-from-dist: 1.0.0
1630 | path-scurry: 2.0.0
1631 |
1632 | glob@7.2.3:
1633 | dependencies:
1634 | fs.realpath: 1.0.0
1635 | inflight: 1.0.6
1636 | inherits: 2.0.4
1637 | minimatch: 3.1.2
1638 | once: 1.4.0
1639 | path-is-absolute: 1.0.1
1640 |
1641 | globals@13.24.0:
1642 | dependencies:
1643 | type-fest: 0.20.2
1644 |
1645 | globby@11.1.0:
1646 | dependencies:
1647 | array-union: 2.1.0
1648 | dir-glob: 3.0.1
1649 | fast-glob: 3.3.2
1650 | ignore: 5.3.2
1651 | merge2: 1.4.1
1652 | slash: 3.0.0
1653 |
1654 | graceful-fs@4.2.11: {}
1655 |
1656 | graphemer@1.4.0: {}
1657 |
1658 | has-flag@4.0.0: {}
1659 |
1660 | hasown@2.0.2:
1661 | dependencies:
1662 | function-bind: 1.1.2
1663 |
1664 | ignore@5.3.2: {}
1665 |
1666 | import-fresh@3.3.0:
1667 | dependencies:
1668 | parent-module: 1.0.1
1669 | resolve-from: 4.0.0
1670 |
1671 | imurmurhash@0.1.4: {}
1672 |
1673 | inflight@1.0.6:
1674 | dependencies:
1675 | once: 1.4.0
1676 | wrappy: 1.0.2
1677 |
1678 | inherits@2.0.4: {}
1679 |
1680 | is-bun-module@1.2.1:
1681 | dependencies:
1682 | semver: 7.6.3
1683 |
1684 | is-core-module@2.15.1:
1685 | dependencies:
1686 | hasown: 2.0.2
1687 |
1688 | is-extglob@2.1.1: {}
1689 |
1690 | is-fullwidth-code-point@3.0.0: {}
1691 |
1692 | is-glob@4.0.3:
1693 | dependencies:
1694 | is-extglob: 2.1.1
1695 |
1696 | is-number@7.0.0: {}
1697 |
1698 | is-path-inside@3.0.3: {}
1699 |
1700 | isexe@2.0.0: {}
1701 |
1702 | jackspeak@4.0.1:
1703 | dependencies:
1704 | '@isaacs/cliui': 8.0.2
1705 | optionalDependencies:
1706 | '@pkgjs/parseargs': 0.11.0
1707 |
1708 | js-yaml@4.1.0:
1709 | dependencies:
1710 | argparse: 2.0.1
1711 |
1712 | json-buffer@3.0.1: {}
1713 |
1714 | json-schema-traverse@0.4.1: {}
1715 |
1716 | json-stable-stringify-without-jsonify@1.0.1: {}
1717 |
1718 | keyv@4.5.4:
1719 | dependencies:
1720 | json-buffer: 3.0.1
1721 |
1722 | levn@0.4.1:
1723 | dependencies:
1724 | prelude-ls: 1.2.1
1725 | type-check: 0.4.0
1726 |
1727 | locate-path@6.0.0:
1728 | dependencies:
1729 | p-locate: 5.0.0
1730 |
1731 | lodash.merge@4.6.2: {}
1732 |
1733 | lodash@4.17.21: {}
1734 |
1735 | lru-cache@11.0.1: {}
1736 |
1737 | magic-string@0.30.11:
1738 | dependencies:
1739 | '@jridgewell/sourcemap-codec': 1.5.0
1740 |
1741 | merge2@1.4.1: {}
1742 |
1743 | micromatch@4.0.4:
1744 | dependencies:
1745 | braces: 3.0.2
1746 | picomatch: 2.3.1
1747 |
1748 | minimatch@10.0.1:
1749 | dependencies:
1750 | brace-expansion: 2.0.1
1751 |
1752 | minimatch@3.1.2:
1753 | dependencies:
1754 | brace-expansion: 1.1.11
1755 |
1756 | minimatch@9.0.5:
1757 | dependencies:
1758 | brace-expansion: 2.0.1
1759 |
1760 | minipass@7.1.2: {}
1761 |
1762 | ms@2.1.2: {}
1763 |
1764 | ms@2.1.3: {}
1765 |
1766 | nanoid@3.3.7: {}
1767 |
1768 | natural-compare@1.4.0: {}
1769 |
1770 | node-fetch@2.6.9:
1771 | dependencies:
1772 | whatwg-url: 5.0.0
1773 |
1774 | nth-check@2.1.1:
1775 | dependencies:
1776 | boolbase: 1.0.0
1777 |
1778 | once@1.4.0:
1779 | dependencies:
1780 | wrappy: 1.0.2
1781 |
1782 | optionator@0.9.4:
1783 | dependencies:
1784 | deep-is: 0.1.4
1785 | fast-levenshtein: 2.0.6
1786 | levn: 0.4.1
1787 | prelude-ls: 1.2.1
1788 | type-check: 0.4.0
1789 | word-wrap: 1.2.5
1790 |
1791 | p-limit@3.1.0:
1792 | dependencies:
1793 | yocto-queue: 0.1.0
1794 |
1795 | p-locate@5.0.0:
1796 | dependencies:
1797 | p-limit: 3.1.0
1798 |
1799 | package-json-from-dist@1.0.0: {}
1800 |
1801 | parent-module@1.0.1:
1802 | dependencies:
1803 | callsites: 3.1.0
1804 |
1805 | path-exists@4.0.0: {}
1806 |
1807 | path-is-absolute@1.0.1: {}
1808 |
1809 | path-key@3.1.1: {}
1810 |
1811 | path-parse@1.0.7: {}
1812 |
1813 | path-scurry@2.0.0:
1814 | dependencies:
1815 | lru-cache: 11.0.1
1816 | minipass: 7.1.2
1817 |
1818 | path-type@4.0.0: {}
1819 |
1820 | picocolors@1.1.0: {}
1821 |
1822 | picomatch@2.3.1: {}
1823 |
1824 | postcss-selector-parser@6.1.2:
1825 | dependencies:
1826 | cssesc: 3.0.0
1827 | util-deprecate: 1.0.2
1828 |
1829 | postcss@8.4.45:
1830 | dependencies:
1831 | nanoid: 3.3.7
1832 | picocolors: 1.1.0
1833 | source-map-js: 1.2.1
1834 |
1835 | prelude-ls@1.2.1: {}
1836 |
1837 | prettier@3.3.3: {}
1838 |
1839 | psl@1.8.0: {}
1840 |
1841 | punycode@2.1.1: {}
1842 |
1843 | querystringify@2.2.0: {}
1844 |
1845 | queue-microtask@1.2.3: {}
1846 |
1847 | requires-port@1.0.0: {}
1848 |
1849 | resolve-from@4.0.0: {}
1850 |
1851 | resolve-pkg-maps@1.0.0: {}
1852 |
1853 | resolve@1.22.8:
1854 | dependencies:
1855 | is-core-module: 2.15.1
1856 | path-parse: 1.0.7
1857 | supports-preserve-symlinks-flag: 1.0.0
1858 |
1859 | reusify@1.0.4: {}
1860 |
1861 | rimraf@3.0.2:
1862 | dependencies:
1863 | glob: 7.2.3
1864 |
1865 | rimraf@6.0.1:
1866 | dependencies:
1867 | glob: 11.0.0
1868 | package-json-from-dist: 1.0.0
1869 |
1870 | run-parallel@1.2.0:
1871 | dependencies:
1872 | queue-microtask: 1.2.3
1873 |
1874 | semver@7.6.3: {}
1875 |
1876 | set-cookie-parser@2.6.0: {}
1877 |
1878 | shebang-command@2.0.0:
1879 | dependencies:
1880 | shebang-regex: 3.0.0
1881 |
1882 | shebang-regex@3.0.0: {}
1883 |
1884 | signal-exit@4.1.0: {}
1885 |
1886 | slash@3.0.0: {}
1887 |
1888 | source-map-js@1.2.1: {}
1889 |
1890 | stable-hash@0.0.4: {}
1891 |
1892 | string-width@4.2.3:
1893 | dependencies:
1894 | emoji-regex: 8.0.0
1895 | is-fullwidth-code-point: 3.0.0
1896 | strip-ansi: 6.0.1
1897 |
1898 | string-width@5.1.2:
1899 | dependencies:
1900 | eastasianwidth: 0.2.0
1901 | emoji-regex: 9.2.2
1902 | strip-ansi: 7.1.0
1903 |
1904 | strip-ansi@6.0.1:
1905 | dependencies:
1906 | ansi-regex: 5.0.1
1907 |
1908 | strip-ansi@7.1.0:
1909 | dependencies:
1910 | ansi-regex: 6.1.0
1911 |
1912 | strip-json-comments@3.1.1: {}
1913 |
1914 | supports-color@7.2.0:
1915 | dependencies:
1916 | has-flag: 4.0.0
1917 |
1918 | supports-preserve-symlinks-flag@1.0.0: {}
1919 |
1920 | tapable@2.2.1: {}
1921 |
1922 | text-table@0.2.0: {}
1923 |
1924 | to-fast-properties@2.0.0: {}
1925 |
1926 | to-regex-range@5.0.1:
1927 | dependencies:
1928 | is-number: 7.0.0
1929 |
1930 | tough-cookie@4.1.2:
1931 | dependencies:
1932 | psl: 1.8.0
1933 | punycode: 2.1.1
1934 | universalify: 0.2.0
1935 | url-parse: 1.5.4
1936 |
1937 | tr46@0.0.3: {}
1938 |
1939 | ts-api-utils@1.3.0(typescript@5.5.4):
1940 | dependencies:
1941 | typescript: 5.5.4
1942 |
1943 | tslib@2.7.0: {}
1944 |
1945 | type-check@0.4.0:
1946 | dependencies:
1947 | prelude-ls: 1.2.1
1948 |
1949 | type-fest@0.20.2: {}
1950 |
1951 | typescript@5.5.4: {}
1952 |
1953 | undici-types@6.19.8: {}
1954 |
1955 | universalify@0.2.0: {}
1956 |
1957 | uri-js@4.4.1:
1958 | dependencies:
1959 | punycode: 2.1.1
1960 |
1961 | url-parse@1.5.4:
1962 | dependencies:
1963 | querystringify: 2.2.0
1964 | requires-port: 1.0.0
1965 |
1966 | util-deprecate@1.0.2: {}
1967 |
1968 | vue-eslint-parser@9.4.3(eslint@8.57.0):
1969 | dependencies:
1970 | debug: 4.3.4
1971 | eslint: 8.57.0
1972 | eslint-scope: 7.2.2
1973 | eslint-visitor-keys: 3.4.3
1974 | espree: 9.6.1
1975 | esquery: 1.5.0
1976 | lodash: 4.17.21
1977 | semver: 7.6.3
1978 | transitivePeerDependencies:
1979 | - supports-color
1980 |
1981 | vue@3.5.4(typescript@5.5.4):
1982 | dependencies:
1983 | '@vue/compiler-dom': 3.5.4
1984 | '@vue/compiler-sfc': 3.5.4
1985 | '@vue/runtime-dom': 3.5.4
1986 | '@vue/server-renderer': 3.5.4(vue@3.5.4(typescript@5.5.4))
1987 | '@vue/shared': 3.5.4
1988 | optionalDependencies:
1989 | typescript: 5.5.4
1990 |
1991 | webidl-conversions@3.0.1: {}
1992 |
1993 | whatwg-url@5.0.0:
1994 | dependencies:
1995 | tr46: 0.0.3
1996 | webidl-conversions: 3.0.1
1997 |
1998 | which@2.0.2:
1999 | dependencies:
2000 | isexe: 2.0.0
2001 |
2002 | word-wrap@1.2.5: {}
2003 |
2004 | wrap-ansi@7.0.0:
2005 | dependencies:
2006 | ansi-styles: 4.3.0
2007 | string-width: 4.2.3
2008 | strip-ansi: 6.0.1
2009 |
2010 | wrap-ansi@8.1.0:
2011 | dependencies:
2012 | ansi-styles: 6.2.1
2013 | string-width: 5.1.2
2014 | strip-ansi: 7.1.0
2015 |
2016 | wrappy@1.0.2: {}
2017 |
2018 | ws@7.5.9: {}
2019 |
2020 | xml-name-validator@4.0.0: {}
2021 |
2022 | yocto-queue@0.1.0: {}
2023 |
--------------------------------------------------------------------------------
/src/composable.ts:
--------------------------------------------------------------------------------
1 | import { inject } from "vue";
2 | import { SignalRSymbol } from "./symbols";
3 |
4 | export function useSignalR() {
5 | const signalr = inject(SignalRSymbol);
6 |
7 | if (!signalr) {
8 | throw new Error("Failed to inject SignalR");
9 | }
10 |
11 | return signalr;
12 | }
13 |
--------------------------------------------------------------------------------
/src/index.ts:
--------------------------------------------------------------------------------
1 | export * from "./composable";
2 | export * from "./mapping";
3 | export * from "./models";
4 | export * from "./plugin";
5 | export * from "./service";
6 | export * from "./symbols";
7 |
8 | // These interfaces must be here to ease their augmentation
9 | // even if this creates a circular dependency with models file
10 |
11 | /**
12 | * Use this interface to map Commands (aka server methods) names and their payloads
13 | *
14 | * @example
15 | * ```ts
16 | * import '@dreamonkey/vue-signalr';
17 | *
18 | * interface SendMessagePayload {
19 | * message: string;
20 | * }
21 | *
22 | * declare module '@dreamonkey/vue-signalr' {
23 | * interface SignalRCommands {
24 | * SendMessage: SendMessagePayload, // Define a command and its payload
25 | * JoinMainTopic: false, // Define a command with no payload
26 | * }
27 | * }
28 | * ```
29 | */
30 | // eslint-disable-next-line @typescript-eslint/no-empty-object-type
31 | export interface SignalRCommands {}
32 |
33 | /**
34 | * Use this interface to map Events (aka client methods) names and their payloads
35 | *
36 | * @example
37 | * ```ts
38 | * import '@dreamonkey/vue-signalr';
39 | *
40 | * interface MessageReceivedPayload {
41 | * message: string;
42 | * }
43 | *
44 | * declare module '@dreamonkey/vue-signalr' {
45 | * interface SignalREvents {
46 | * MessageReceived: MessageReceivedPayload, // Define an event and its payload
47 | * MainTopicJoined: false, // Define an event with no payload
48 | * }
49 | * }
50 | * ```
51 | */
52 | // eslint-disable-next-line @typescript-eslint/no-empty-object-type
53 | export interface SignalREvents {}
54 |
--------------------------------------------------------------------------------
/src/mapping.ts:
--------------------------------------------------------------------------------
1 | const methodNamesMap = new Map();
2 |
3 | export function remapMethod(name: string, alias: string) {
4 | methodNamesMap.set(alias, name);
5 | }
6 |
7 | export function remapMethods(mappings: [name: string, alias: string][]) {
8 | for (const [name, alias] of mappings) {
9 | remapMethod(name, alias);
10 | }
11 | }
12 |
13 | export function resolveMethodName(nameOrAlias: string) {
14 | // "??" syntax isn't transpiled by TS due to esnext target
15 | // and would break projects using the package
16 | // eslint-disable-next-line @typescript-eslint/prefer-nullish-coalescing
17 | return methodNamesMap.get(nameOrAlias) || nameOrAlias;
18 | }
19 |
--------------------------------------------------------------------------------
/src/models.ts:
--------------------------------------------------------------------------------
1 | import { HubConnection } from "@microsoft/signalr";
2 | import { LiteralUnion } from "./ts-helpers";
3 | import { SignalRCommands, SignalREvents } from "./index";
4 |
5 | export type SignalRCommandKey = LiteralUnion;
6 | export type SignalRCommandPayload<
7 | K extends SignalRCommandKey,
8 | // eslint-disable-next-line @typescript-eslint/no-explicit-any
9 | P = K extends keyof SignalRCommands ? SignalRCommands[K] : any[],
10 | > = P extends false ? never[] : P extends unknown[] ? P : [P];
11 |
12 | export type SignalREventKey = LiteralUnion;
13 | export type SignalREventPayload<
14 | K extends SignalREventKey,
15 | // eslint-disable-next-line @typescript-eslint/no-explicit-any
16 | P = K extends keyof SignalREvents ? SignalREvents[K] : any[],
17 | > = P extends false ? never[] : P extends unknown[] ? P : [P];
18 |
19 | export interface VueSignalRConfig {
20 | connection: HubConnection;
21 | autoOffInsideComponentScope: boolean;
22 | // eslint-disable-next-line @typescript-eslint/no-explicit-any
23 | failFn: (error: any) => void;
24 | }
25 |
26 | export interface SignalROnOptions {
27 | skip?: (...payload: Payload) => boolean;
28 | once?: boolean;
29 | }
30 |
--------------------------------------------------------------------------------
/src/plugin.ts:
--------------------------------------------------------------------------------
1 | import { App } from "vue";
2 | import { VueSignalRConfig } from "./models";
3 | import { createService } from "./service";
4 | import { SignalRSymbol } from "./symbols";
5 |
6 | export const VueSignalR = {
7 | install(app: App, options: VueSignalRConfig) {
8 | const service = createService(options);
9 |
10 | app.provide(SignalRSymbol, service);
11 |
12 | void service.init();
13 | },
14 | };
15 |
--------------------------------------------------------------------------------
/src/service.ts:
--------------------------------------------------------------------------------
1 | import { getCurrentInstance, onBeforeUnmount, ref } from "vue";
2 | import { resolveMethodName } from "./mapping";
3 | import {
4 | SignalRCommandKey,
5 | SignalRCommandPayload,
6 | SignalREventKey,
7 | SignalREventPayload,
8 | SignalROnOptions,
9 | VueSignalRConfig,
10 | } from "./models";
11 |
12 | export function createService({
13 | connection,
14 | // eslint-disable-next-line @typescript-eslint/no-empty-function
15 | failFn = () => {},
16 | autoOffInsideComponentScope = true,
17 | }: VueSignalRConfig) {
18 | const connected = ref(false);
19 | const invokeQueue: (() => void)[] = [];
20 | const activeListenersSet = new Set();
21 |
22 | connection.onclose(failFn);
23 |
24 | async function init() {
25 | try {
26 | await connection.start();
27 | connected.value = true;
28 | while (invokeQueue.length) {
29 | const action = invokeQueue.shift();
30 | // "action?.()" syntax isn't transpiled by TS due to esnext target
31 | // and would break projects using the package
32 | // eslint-disable-next-line @typescript-eslint/no-unused-expressions
33 | action && action();
34 | }
35 | } catch (error) {
36 | failFn(error);
37 | }
38 | }
39 |
40 | function invoke(
41 | methodName: Key,
42 | ...payload: SignalRCommandPayload
43 | ) {
44 | return new Promise((resolve, reject) => {
45 | const invokeFn = () =>
46 | connection
47 | .invoke(resolveMethodName(methodName), ...payload)
48 | .then(resolve)
49 | // eslint-disable-next-line @typescript-eslint/use-unknown-in-catch-callback-variable
50 | .catch(reject);
51 |
52 | if (connected.value) {
53 | void invokeFn();
54 | } else {
55 | invokeQueue.push(invokeFn);
56 | }
57 | });
58 | }
59 |
60 | function on(
61 | methodName: Key,
62 | callback: (...payload: SignalREventPayload) => void,
63 | { skip, once }: SignalROnOptions> = {},
64 | ) {
65 | const originalMethodName = resolveMethodName(methodName);
66 |
67 | connection.on(originalMethodName, (...payload) => {
68 | // Needed to make TS happy with a cast
69 | const _payload = payload as Parameters;
70 | // "skip?.()" syntax isn't transpiled by TS due to esnext target
71 | // and would break projects using the package
72 | // eslint-disable-next-line @typescript-eslint/prefer-optional-chain
73 | if (skip && skip(..._payload)) {
74 | return;
75 | }
76 |
77 | if (once) {
78 | off(methodName, callback);
79 | }
80 |
81 | callback(..._payload);
82 | });
83 |
84 | if (autoOffInsideComponentScope) {
85 | // Auto-unregister listener if inside a component
86 | const instance = getCurrentInstance();
87 | if (instance) {
88 | activeListenersSet.add(callback);
89 |
90 | onBeforeUnmount(() => {
91 | if (activeListenersSet.delete(callback)) {
92 | off(methodName, callback);
93 | }
94 | });
95 | }
96 | }
97 | }
98 |
99 | function once(
100 | methodName: Key,
101 | callback: (...payload: SignalREventPayload) => void,
102 | options: SignalROnOptions> = {},
103 | ) {
104 | on(methodName, callback, { ...options, once: true });
105 | }
106 |
107 | function off(
108 | methodName: Key,
109 | callback?: (...payload: SignalREventPayload) => void,
110 | ) {
111 | const originalMethodName = resolveMethodName(methodName);
112 |
113 | if (callback) {
114 | connection.off(originalMethodName, (...payload) => {
115 | // Needed to make TS happy with a cast
116 | const _payload = payload as Parameters;
117 | callback(..._payload);
118 | });
119 | } else {
120 | connection.off(originalMethodName);
121 | }
122 | }
123 |
124 | return {
125 | init,
126 | connected,
127 | invoke,
128 | on,
129 | off,
130 | once,
131 | };
132 | }
133 |
--------------------------------------------------------------------------------
/src/symbols.ts:
--------------------------------------------------------------------------------
1 | import { InjectionKey } from "vue";
2 | import {
3 | SignalRCommandKey,
4 | SignalRCommandPayload,
5 | SignalREventKey,
6 | SignalREventPayload,
7 | SignalROnOptions,
8 | } from "./models";
9 | import { createService } from "./service";
10 |
11 | type CreateServiceReturntype = ReturnType;
12 |
13 | // Relying solely on `ReturnType` would collapse SignalRXxxKey to `string` type
14 | // into built types, since it would infer the `keyof Xxx` part as empty,
15 | // due to the holder interfaces being empty at build time
16 | export interface SignalRService {
17 | init: CreateServiceReturntype["init"];
18 | connected: CreateServiceReturntype["connected"];
19 | invoke: (
20 | methodName: Key,
21 | ...payload: SignalRCommandPayload
22 | ) => Promise;
23 | on: (
24 | methodName: Key,
25 | callback: (...payload: SignalREventPayload) => void,
26 | options?: SignalROnOptions>,
27 | ) => void;
28 | off: (
29 | methodName: Key,
30 | callback?: (...payload: SignalREventPayload) => void,
31 | ) => void;
32 | }
33 |
34 | export const SignalRSymbol: InjectionKey =
35 | Symbol("SignalRService");
36 |
--------------------------------------------------------------------------------
/src/ts-helpers.ts:
--------------------------------------------------------------------------------
1 | // Needed to prevent TS to collapse `'value1' | 'value2' | string` to `string`, which breaks first parameter autocomplete
2 | // See: https://github.com/microsoft/TypeScript/issues/29729#issuecomment-832522611
3 | export type LiteralUnion =
4 | | T
5 | | (U & Record);
6 |
--------------------------------------------------------------------------------
/test/service.ts:
--------------------------------------------------------------------------------
1 | import { useSignalR, remapMethod, remapMethods } from "../src";
2 |
3 | interface MessageReceivedPayload {
4 | message: string;
5 | }
6 |
7 | interface SendMessagePayload {
8 | message: string;
9 | }
10 |
11 | declare module "../src" {
12 | interface SignalREvents {
13 | MessageReceived: MessageReceivedPayload;
14 | MultipleMessagesReceived: MessageReceivedPayload[];
15 | TwoMessagesReceived: [MessageReceivedPayload, MessageReceivedPayload];
16 | MainTopicJoined: false;
17 | }
18 |
19 | interface SignalRCommands {
20 | SendMessage: SendMessagePayload;
21 | JoinMainTopic: false;
22 | }
23 | }
24 |
25 | // Map an old strange method name to an alias
26 | remapMethod("JoinLegacyTopicV2", "MainTopicJoined");
27 | // Maps the same method name to 2 different aliases
28 | remapMethods([
29 | ["sendStrangeMessage", "SendMessageFromPageOne"],
30 | ["sendStrangeMessage", "SendMessageFromPageTwo"],
31 | ]);
32 |
33 | const signalr = useSignalR();
34 |
35 | // The payload have a single parameter of type MessageReceivedPayload
36 | signalr.on("MessageReceived", ({ message }) => {
37 | console.log(message);
38 | });
39 | // The payload have a 0 or more parameters of type MessageReceivedPayload
40 | signalr.on("MultipleMessagesReceived", (...messages) => {
41 | console.log(messages.length);
42 | });
43 | // The payload have exactly 2 parameters of type MessageReceivedPayload
44 | signalr.on(
45 | "TwoMessagesReceived",
46 | ({ message: message1 }, { message: message2 }) => {
47 | console.log(message1, message2);
48 | },
49 | );
50 | // The payload have no params, type 'never'
51 | signalr.on("MainTopicJoined", (undefinedParam) => {
52 | console.log(undefinedParam);
53 | });
54 | // Types not provided, fallback to a payload of type 'any[]'
55 | signalr.on("RandomEvent", (...params) => {
56 | console.log(params);
57 | });
58 |
59 | // @ts-expect-error Error due to the missing payload
60 | void signalr.invoke("SendMessage");
61 | // Provide correct payload
62 | void signalr.invoke("SendMessage", { message: "Message" });
63 | // @ts-expect-error Error due to excess payload
64 | void signalr.invoke("JoinMainTopic", {});
65 | // Don't provide any payload
66 | void signalr.invoke("JoinMainTopic");
67 | // Types not provided, fallback to a payload of type 'any[]'
68 | void signalr.invoke("RandomCommand", "Data!", "More!");
69 |
--------------------------------------------------------------------------------
/tsconfig.build.json:
--------------------------------------------------------------------------------
1 | {
2 | "extends": "./tsconfig.json",
3 | "include": ["src"]
4 | }
5 |
--------------------------------------------------------------------------------
/tsconfig.json:
--------------------------------------------------------------------------------
1 | {
2 | "compilerOptions": {
3 | "target": "esnext",
4 | "module": "esnext",
5 | "strict": true,
6 | "moduleResolution": "node",
7 | "sourceMap": true,
8 | "outDir": "dist",
9 | "baseUrl": "."
10 | },
11 | "exclude": ["node_modules", "dist"]
12 | }
13 |
--------------------------------------------------------------------------------