@supabase-community/vue-supabase 1.0.0 → 3.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/README.md +157 -0
- package/dist/index.d.ts +4 -0
- package/dist/index.js +10 -0
- package/dist/index.js.map +1 -0
- package/dist/state.d.ts +5 -0
- package/dist/state.js +21 -0
- package/dist/state.js.map +1 -0
- package/dist/types.d.ts +22 -0
- package/dist/types.js +3 -0
- package/dist/types.js.map +1 -0
- package/dist/useSupabaseClient.d.ts +10 -0
- package/dist/useSupabaseClient.js +34 -0
- package/dist/useSupabaseClient.js.map +1 -0
- package/package.json +60 -10
package/LICENSE
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2026 Supabase
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
package/README.md
ADDED
|
@@ -0,0 +1,157 @@
|
|
|
1
|
+
# @supabase-community/vue-supabase
|
|
2
|
+
|
|
3
|
+
This package provides a typed wrapper around the official Supabase JavaScript client for Vue 3 applications. It keeps the API close to the official SDK so you can use `supabase.auth`, `supabase.from`, and other features directly.
|
|
4
|
+
|
|
5
|
+
_This package is aimed to work with modern Vue 3. To use it with Vue 2, check out https://github.com/supabase-community/vue-supabase/tree/v2.3.0_
|
|
6
|
+
|
|
7
|
+
## Features
|
|
8
|
+
|
|
9
|
+
- Vue 3 composable `useSupabaseClient`
|
|
10
|
+
- Authentication support
|
|
11
|
+
- Use supabase-js isomorphic client
|
|
12
|
+
- TypeScript support
|
|
13
|
+
|
|
14
|
+
## Getting started
|
|
15
|
+
|
|
16
|
+
1. Install the plugin
|
|
17
|
+
|
|
18
|
+
```bash
|
|
19
|
+
npm install @supabase-community/vue-supabase
|
|
20
|
+
```
|
|
21
|
+
|
|
22
|
+
2. Add required environment variables:
|
|
23
|
+
|
|
24
|
+
```bash
|
|
25
|
+
# .env
|
|
26
|
+
VITE_SUPABASE_URL="https://example.supabase.co"
|
|
27
|
+
VITE_SUPABASE_ANON_KEY="<your_publishable_key>"
|
|
28
|
+
```
|
|
29
|
+
|
|
30
|
+
3. Register a client:
|
|
31
|
+
|
|
32
|
+
```ts
|
|
33
|
+
// main.ts
|
|
34
|
+
import { useSupabaseClient } from "@supabase-community/vue-supabase";
|
|
35
|
+
|
|
36
|
+
const supabase = useSupabaseClient({
|
|
37
|
+
supabaseUrl: import.meta.env.VITE_SUPABASE_URL,
|
|
38
|
+
supabaseKey: import.meta.env.VITE_SUPABASE_ANON_KEY,
|
|
39
|
+
});
|
|
40
|
+
```
|
|
41
|
+
|
|
42
|
+
4. Use the client in your Vue app
|
|
43
|
+
|
|
44
|
+
```ts
|
|
45
|
+
// App.vue
|
|
46
|
+
<script setup lang="ts">
|
|
47
|
+
import { useSupabaseClient } from "@supabase-community/vue-supabase";
|
|
48
|
+
|
|
49
|
+
const supabase = useSupabaseClient();
|
|
50
|
+
const { data, error } = await supabase.from("profiles").select("*");
|
|
51
|
+
</script>
|
|
52
|
+
|
|
53
|
+
<template>
|
|
54
|
+
<ul>
|
|
55
|
+
<li v-for="profile in data" :key="profile.id">
|
|
56
|
+
{{ profile }}
|
|
57
|
+
</li>
|
|
58
|
+
</ul>
|
|
59
|
+
</template>
|
|
60
|
+
```
|
|
61
|
+
|
|
62
|
+
And that's it! You are good to go!
|
|
63
|
+
|
|
64
|
+
## Advanced
|
|
65
|
+
|
|
66
|
+
This section covers a few common advanced patterns that work naturally with the composable.
|
|
67
|
+
|
|
68
|
+
### Realtime
|
|
69
|
+
|
|
70
|
+
Realtime subscriptions work directly through the Supabase client, so you can react to database changes in your Vue app.
|
|
71
|
+
|
|
72
|
+
```ts
|
|
73
|
+
const supabase = useSupabaseClient();
|
|
74
|
+
|
|
75
|
+
const channel = supabase.channel("profiles-updates");
|
|
76
|
+
|
|
77
|
+
channel
|
|
78
|
+
.on(
|
|
79
|
+
"postgres_changes",
|
|
80
|
+
{ event: "*", schema: "public", table: "profiles" },
|
|
81
|
+
payload => {
|
|
82
|
+
console.log("Change received:", payload);
|
|
83
|
+
}
|
|
84
|
+
)
|
|
85
|
+
.subscribe();
|
|
86
|
+
```
|
|
87
|
+
|
|
88
|
+
### TypeScript
|
|
89
|
+
|
|
90
|
+
You can either define your own local types or generate them from your Supabase project with the CLI. The generated types are especially useful when your schema evolves over time.
|
|
91
|
+
|
|
92
|
+
Local type registration:
|
|
93
|
+
|
|
94
|
+
```ts
|
|
95
|
+
import { useSupabaseClient } from "@supabase-community/vue-supabase";
|
|
96
|
+
|
|
97
|
+
interface Database {
|
|
98
|
+
public: {
|
|
99
|
+
Tables: {
|
|
100
|
+
profiles: {
|
|
101
|
+
Row: { id: string; name: string | null };
|
|
102
|
+
Insert: { id?: string; name?: string | null };
|
|
103
|
+
Update: { name?: string | null };
|
|
104
|
+
Relationships: [];
|
|
105
|
+
};
|
|
106
|
+
};
|
|
107
|
+
};
|
|
108
|
+
}
|
|
109
|
+
|
|
110
|
+
const supabase = useSupabaseClient<Database>({
|
|
111
|
+
supabaseUrl: import.meta.env.VITE_SUPABASE_URL,
|
|
112
|
+
supabaseKey: import.meta.env.VITE_SUPABASE_ANON_KEY,
|
|
113
|
+
});
|
|
114
|
+
```
|
|
115
|
+
|
|
116
|
+
Generate types from the Supabase CLI:
|
|
117
|
+
|
|
118
|
+
```bash
|
|
119
|
+
npx supabase login
|
|
120
|
+
npx supabase gen types typescript --project-id <project-id> --schema public > src/types/supabase.ts
|
|
121
|
+
```
|
|
122
|
+
|
|
123
|
+
Then use the generated types in your app:
|
|
124
|
+
|
|
125
|
+
```ts
|
|
126
|
+
import { useSupabaseClient } from "@supabase-community/vue-supabase";
|
|
127
|
+
import type { Database } from "./types/supabase";
|
|
128
|
+
|
|
129
|
+
const supabase = useSupabaseClient<Database>({
|
|
130
|
+
supabaseUrl: import.meta.env.VITE_SUPABASE_URL,
|
|
131
|
+
supabaseKey: import.meta.env.VITE_SUPABASE_ANON_KEY,
|
|
132
|
+
});
|
|
133
|
+
```
|
|
134
|
+
|
|
135
|
+
### Auth
|
|
136
|
+
|
|
137
|
+
Auth stays close to the official Supabase client API and works the same way as in the core SDK.
|
|
138
|
+
|
|
139
|
+
```ts
|
|
140
|
+
const supabase = useSupabaseClient();
|
|
141
|
+
|
|
142
|
+
await supabase.auth.signInWithPassword({
|
|
143
|
+
email: "user@example.com",
|
|
144
|
+
password: "password",
|
|
145
|
+
});
|
|
146
|
+
```
|
|
147
|
+
|
|
148
|
+
## Development
|
|
149
|
+
|
|
150
|
+
1. Clone this repository.
|
|
151
|
+
2. Install dependencies using `npm install`.
|
|
152
|
+
3. Build the package using `npm run build`.
|
|
153
|
+
4. Launch the playground using `npm run dev`.
|
|
154
|
+
|
|
155
|
+
## License
|
|
156
|
+
|
|
157
|
+
[MIT License](./LICENSE)
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
export { useSupabaseClient } from "./useSupabaseClient";
|
|
2
|
+
export type { UseSupabaseClientOptions } from "./types";
|
|
3
|
+
export { getSupabaseClient, resetSupabaseClient, setSupabaseClient, } from "./state";
|
|
4
|
+
export type { SupabaseClient, SupabaseClientOptions, } from "@supabase/supabase-js";
|
package/dist/index.js
ADDED
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.setSupabaseClient = exports.resetSupabaseClient = exports.getSupabaseClient = exports.useSupabaseClient = void 0;
|
|
4
|
+
var useSupabaseClient_1 = require("./useSupabaseClient");
|
|
5
|
+
Object.defineProperty(exports, "useSupabaseClient", { enumerable: true, get: function () { return useSupabaseClient_1.useSupabaseClient; } });
|
|
6
|
+
var state_1 = require("./state");
|
|
7
|
+
Object.defineProperty(exports, "getSupabaseClient", { enumerable: true, get: function () { return state_1.getSupabaseClient; } });
|
|
8
|
+
Object.defineProperty(exports, "resetSupabaseClient", { enumerable: true, get: function () { return state_1.resetSupabaseClient; } });
|
|
9
|
+
Object.defineProperty(exports, "setSupabaseClient", { enumerable: true, get: function () { return state_1.setSupabaseClient; } });
|
|
10
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;AAAA,yDAAwD;AAA/C,sHAAA,iBAAiB,OAAA;AAE1B,iCAIiB;AAHf,0GAAA,iBAAiB,OAAA;AACjB,4GAAA,mBAAmB,OAAA;AACnB,0GAAA,iBAAiB,OAAA"}
|
package/dist/state.d.ts
ADDED
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import { createClient, type SupabaseClient } from "@supabase/supabase-js";
|
|
2
|
+
export declare function setSupabaseClient<Database>(client: SupabaseClient<Database>): void;
|
|
3
|
+
export declare function getSupabaseClient<Database = Record<string, never>>(): SupabaseClient<Database> | null;
|
|
4
|
+
export declare function resetSupabaseClient(): void;
|
|
5
|
+
export declare function createSupabaseClientFromConfig<Database = Record<string, never>>(supabaseUrl: string, supabaseKey: string, options?: Parameters<typeof createClient>[2]): SupabaseClient<Database>;
|
package/dist/state.js
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.setSupabaseClient = setSupabaseClient;
|
|
4
|
+
exports.getSupabaseClient = getSupabaseClient;
|
|
5
|
+
exports.resetSupabaseClient = resetSupabaseClient;
|
|
6
|
+
exports.createSupabaseClientFromConfig = createSupabaseClientFromConfig;
|
|
7
|
+
const supabase_js_1 = require("@supabase/supabase-js");
|
|
8
|
+
let sharedClient = null;
|
|
9
|
+
function setSupabaseClient(client) {
|
|
10
|
+
sharedClient = client;
|
|
11
|
+
}
|
|
12
|
+
function getSupabaseClient() {
|
|
13
|
+
return sharedClient;
|
|
14
|
+
}
|
|
15
|
+
function resetSupabaseClient() {
|
|
16
|
+
sharedClient = null;
|
|
17
|
+
}
|
|
18
|
+
function createSupabaseClientFromConfig(supabaseUrl, supabaseKey, options) {
|
|
19
|
+
return (0, supabase_js_1.createClient)(supabaseUrl, supabaseKey, options);
|
|
20
|
+
}
|
|
21
|
+
//# sourceMappingURL=state.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"state.js","sourceRoot":"","sources":["../src/state.ts"],"names":[],"mappings":";;AAIA,8CAIC;AAED,8CAIC;AAED,kDAEC;AAED,wEAQC;AA5BD,uDAA0E;AAE1E,IAAI,YAAY,GAAY,IAAI,CAAC;AAEjC,SAAgB,iBAAiB,CAC/B,MAAgC;IAEhC,YAAY,GAAG,MAAM,CAAC;AACxB,CAAC;AAED,SAAgB,iBAAiB;IAG/B,OAAO,YAA+C,CAAC;AACzD,CAAC;AAED,SAAgB,mBAAmB;IACjC,YAAY,GAAG,IAAI,CAAC;AACtB,CAAC;AAED,SAAgB,8BAA8B,CAG5C,WAAmB,EACnB,WAAmB,EACnB,OAA4C;IAE5C,OAAO,IAAA,0BAAY,EAAW,WAAW,EAAE,WAAW,EAAE,OAAO,CAAC,CAAC;AACnE,CAAC"}
|
package/dist/types.d.ts
ADDED
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import type { SupabaseClient } from "@supabase/supabase-js";
|
|
2
|
+
/**
|
|
3
|
+
* Options for initializing a shared Supabase client via the composable.
|
|
4
|
+
*/
|
|
5
|
+
export interface UseSupabaseClientOptions<Database = Record<string, never>> {
|
|
6
|
+
/**
|
|
7
|
+
* Reuse an existing Supabase client instance.
|
|
8
|
+
*/
|
|
9
|
+
client?: SupabaseClient<Database>;
|
|
10
|
+
/**
|
|
11
|
+
* Supabase project URL.
|
|
12
|
+
*/
|
|
13
|
+
supabaseUrl?: string;
|
|
14
|
+
/**
|
|
15
|
+
* Supabase anonymous/service key.
|
|
16
|
+
*/
|
|
17
|
+
supabaseKey?: string;
|
|
18
|
+
/**
|
|
19
|
+
* Optional client options forwarded to Supabase JS.
|
|
20
|
+
*/
|
|
21
|
+
options?: Parameters<typeof import("@supabase/supabase-js").createClient>[2];
|
|
22
|
+
}
|
package/dist/types.js
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import type { SupabaseClient } from "@supabase/supabase-js";
|
|
2
|
+
import type { UseSupabaseClientOptions } from "./types";
|
|
3
|
+
/**
|
|
4
|
+
* Returns a shared Supabase client for Vue 3 apps.
|
|
5
|
+
*
|
|
6
|
+
* The composable supports either passing an existing client instance or
|
|
7
|
+
* initializing one from a URL and anon key. Once initialized, subsequent
|
|
8
|
+
* calls without options return the shared client.
|
|
9
|
+
*/
|
|
10
|
+
export declare function useSupabaseClient<Database = Record<string, never>>(options?: UseSupabaseClientOptions<Database>): SupabaseClient<Database>;
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.useSupabaseClient = useSupabaseClient;
|
|
4
|
+
const state_1 = require("./state");
|
|
5
|
+
/**
|
|
6
|
+
* Returns a shared Supabase client for Vue 3 apps.
|
|
7
|
+
*
|
|
8
|
+
* The composable supports either passing an existing client instance or
|
|
9
|
+
* initializing one from a URL and anon key. Once initialized, subsequent
|
|
10
|
+
* calls without options return the shared client.
|
|
11
|
+
*/
|
|
12
|
+
function useSupabaseClient(options) {
|
|
13
|
+
if (options?.client) {
|
|
14
|
+
(0, state_1.setSupabaseClient)(options.client);
|
|
15
|
+
return options.client;
|
|
16
|
+
}
|
|
17
|
+
const existingClient = (0, state_1.getSupabaseClient)();
|
|
18
|
+
if (existingClient) {
|
|
19
|
+
if (options && (options.supabaseUrl || options.supabaseKey)) {
|
|
20
|
+
throw new Error("[vue-supabase] A Supabase client has already been initialized. Reinitialization is not supported.");
|
|
21
|
+
}
|
|
22
|
+
return existingClient;
|
|
23
|
+
}
|
|
24
|
+
if (!options) {
|
|
25
|
+
throw new Error("[vue-supabase] No Supabase client has been initialized. Call useSupabaseClient({ client }) or useSupabaseClient({ supabaseUrl, supabaseKey }) first.");
|
|
26
|
+
}
|
|
27
|
+
if (!options.supabaseUrl || !options.supabaseKey) {
|
|
28
|
+
throw new Error("[vue-supabase] Missing Supabase client configuration. Provide either { client } or { supabaseUrl, supabaseKey }.");
|
|
29
|
+
}
|
|
30
|
+
const client = (0, state_1.createSupabaseClientFromConfig)(options.supabaseUrl, options.supabaseKey, options.options);
|
|
31
|
+
(0, state_1.setSupabaseClient)(client);
|
|
32
|
+
return client;
|
|
33
|
+
}
|
|
34
|
+
//# sourceMappingURL=useSupabaseClient.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useSupabaseClient.js","sourceRoot":"","sources":["../src/useSupabaseClient.ts"],"names":[],"mappings":";;AAeA,8CAsCC;AApDD,mCAIiB;AAGjB;;;;;;GAMG;AACH,SAAgB,iBAAiB,CAC/B,OAA4C;IAE5C,IAAI,OAAO,EAAE,MAAM,EAAE,CAAC;QACpB,IAAA,yBAAiB,EAAC,OAAO,CAAC,MAAM,CAAC,CAAC;QAClC,OAAO,OAAO,CAAC,MAAM,CAAC;IACxB,CAAC;IAED,MAAM,cAAc,GAAG,IAAA,yBAAiB,GAAE,CAAC;IAC3C,IAAI,cAAc,EAAE,CAAC;QACnB,IAAI,OAAO,IAAI,CAAC,OAAO,CAAC,WAAW,IAAI,OAAO,CAAC,WAAW,CAAC,EAAE,CAAC;YAC5D,MAAM,IAAI,KAAK,CACb,mGAAmG,CACpG,CAAC;QACJ,CAAC;QACD,OAAO,cAA0C,CAAC;IACpD,CAAC;IAED,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,MAAM,IAAI,KAAK,CACb,sJAAsJ,CACvJ,CAAC;IACJ,CAAC;IAED,IAAI,CAAC,OAAO,CAAC,WAAW,IAAI,CAAC,OAAO,CAAC,WAAW,EAAE,CAAC;QACjD,MAAM,IAAI,KAAK,CACb,kHAAkH,CACnH,CAAC;IACJ,CAAC;IAED,MAAM,MAAM,GAAG,IAAA,sCAA8B,EAC3C,OAAO,CAAC,WAAW,EACnB,OAAO,CAAC,WAAW,EACnB,OAAO,CAAC,OAAO,CAChB,CAAC;IAEF,IAAA,yBAAiB,EAAC,MAAM,CAAC,CAAC;IAC1B,OAAO,MAAM,CAAC;AAChB,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,20 +1,70 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@supabase-community/vue-supabase",
|
|
3
|
-
"version": "
|
|
4
|
-
"description": "",
|
|
3
|
+
"version": "3.0.1",
|
|
4
|
+
"description": "A minimal Vue 3 integration layer for Supabase.",
|
|
5
|
+
"keywords": [
|
|
6
|
+
"vue",
|
|
7
|
+
"vue3",
|
|
8
|
+
"supabase",
|
|
9
|
+
"@supabase-community/vue"
|
|
10
|
+
],
|
|
11
|
+
"author": "Supabase Community",
|
|
12
|
+
"license": "MIT",
|
|
5
13
|
"homepage": "https://github.com/supabase-community/vue-supabase#readme",
|
|
6
|
-
"bugs": {
|
|
7
|
-
"url": "https://github.com/supabase-community/vue-supabase/issues"
|
|
8
|
-
},
|
|
9
14
|
"repository": {
|
|
10
15
|
"type": "git",
|
|
11
16
|
"url": "git+https://github.com/supabase-community/vue-supabase.git"
|
|
12
17
|
},
|
|
13
|
-
"
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
"
|
|
18
|
+
"bugs": {
|
|
19
|
+
"url": "https://github.com/supabase-community/vue-supabase/issues"
|
|
20
|
+
},
|
|
21
|
+
"engines": {
|
|
22
|
+
"node": ">=22"
|
|
23
|
+
},
|
|
17
24
|
"scripts": {
|
|
18
|
-
"
|
|
25
|
+
"build": "tsc -p tsconfig.build.json",
|
|
26
|
+
"test": "vitest run",
|
|
27
|
+
"typecheck": "tsc --noEmit -p tsconfig.json",
|
|
28
|
+
"typecheck:playground": "vue-tsc --noEmit -p playground/tsconfig.json",
|
|
29
|
+
"lint": "eslint . --ext .ts",
|
|
30
|
+
"format": "prettier --write .",
|
|
31
|
+
"format:check": "prettier --check .",
|
|
32
|
+
"dev": "cd playground && npm run dev"
|
|
33
|
+
},
|
|
34
|
+
"main": "dist/index.js",
|
|
35
|
+
"module": "dist/index.js",
|
|
36
|
+
"types": "dist/index.d.ts",
|
|
37
|
+
"exports": {
|
|
38
|
+
".": {
|
|
39
|
+
"types": "./dist/index.d.ts",
|
|
40
|
+
"import": "./dist/index.js",
|
|
41
|
+
"require": "./dist/index.js",
|
|
42
|
+
"default": "./dist/index.js"
|
|
43
|
+
}
|
|
44
|
+
},
|
|
45
|
+
"files": [
|
|
46
|
+
"dist",
|
|
47
|
+
"README.md",
|
|
48
|
+
"LICENSE"
|
|
49
|
+
],
|
|
50
|
+
"dependencies": {
|
|
51
|
+
"@supabase/supabase-js": "^2.52.0"
|
|
52
|
+
},
|
|
53
|
+
"peerDependencies": {
|
|
54
|
+
"vue": "^3.0.0"
|
|
55
|
+
},
|
|
56
|
+
"devDependencies": {
|
|
57
|
+
"@types/node": "^24.2.0",
|
|
58
|
+
"@typescript-eslint/eslint-plugin": "^8.17.0",
|
|
59
|
+
"@typescript-eslint/parser": "^8.17.0",
|
|
60
|
+
"eslint": "^9.25.0",
|
|
61
|
+
"eslint-config-prettier": "^10.0.0",
|
|
62
|
+
"eslint-plugin-prettier": "^5.0.0",
|
|
63
|
+
"prettier": "^3.5.0",
|
|
64
|
+
"typescript": "^5.8.3",
|
|
65
|
+
"vitest": "^3.2.4",
|
|
66
|
+
"vue": "^3.5.4",
|
|
67
|
+
"vue-eslint-parser": "^9.0.0",
|
|
68
|
+
"vue-tsc": "^2.1.8"
|
|
19
69
|
}
|
|
20
70
|
}
|