https://github.com/skorotkiewicz/denokvclient
DenoKvClient - Wrapper for Deno KV
https://github.com/skorotkiewicz/denokvclient
deno javascript prisma
Last synced: about 2 months ago
JSON representation
DenoKvClient - Wrapper for Deno KV
- Host: GitHub
- URL: https://github.com/skorotkiewicz/denokvclient
- Owner: skorotkiewicz
- Created: 2024-11-11T19:22:23.000Z (7 months ago)
- Default Branch: main
- Last Pushed: 2024-12-02T16:59:00.000Z (6 months ago)
- Last Synced: 2025-04-15T03:40:00.346Z (about 2 months ago)
- Topics: deno, javascript, prisma
- Language: JavaScript
- Homepage: https://npmjs.com/package/denokvclient
- Size: 90.8 KB
- Stars: 0
- Watchers: 1
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
Awesome Lists containing this project
README
# DenoKvClient - Wrapper for Deno KV
A simple client wrapper for the Deno KV (Key-Value) store, written in JavaScript. This library provides a convenient way to interact with the Deno KV service, with support for creating, reading, updating, and deleting data.
## Installation
To use the DenoKvClient, you need install a dependency in your project:
```
yarn add denokvclient
```I'm use this on my own [Deno KV](https://github.com/denoland/denokv) server.
## Usage
1. Import the `DenoKvClient` class:
```js
import { DenoKvClient, createSchema } from "denokvclient";import { z } from "zod";
import "dotenv/config";
import { v4 as uuidv4 } from "uuid";
```2. Initialize the client with the Deno KV service URL and an access token:
```js
// Define your schemas
export const User = z.object({
id: z.optional(z.string().uuid()).describe("primary"),
createdAt: z.optional(z.date()),
name: z.string(),
email: z.string().email(),
});export const Order = z.object({
id: z.optional(z.string().uuid()).describe("primary"),
createdAt: z.optional(z.date()),
name: z.string(),
userId: z.string().uuid(),
});// Define schemas with relations
const schema = createSchema().model({
users: {
schema: User,
relations: {
orders: ["orders", [Order], "id", "userId"],
},
},
orders: {
schema: Order,
relations: {
user: ["users", User, "userId", "id"],
},
},
});const client = new DenoKvClient(schema);
await client.init("http://0.0.0.0:4512", "your_access_token_here");
```3. Use the client to interact with the Deno KV store:
```js
// Create a new entry
const newUser = await client.users.create({
data: {
username: "ola",
name: "Ola",
age: 31,
},
select: {
age: true,
name: true,
},
});
console.log(newUser);// Find a unique entry
const user = await client.users.findUnique({
where: {
username: "ola",
},
select: {
age: true,
username: true,
tags: true,
},
});
console.log(user);// Update an entry
const updatedUser = await client.users.update({
where: {
username: "ola",
},
data: {
name: "Ola Updated",
age: 32,
tags: [
{ id: 1, tag: "hello" },
{ id: 2, tag: "world" },
{ id: 3, tag: "example" },
],
},
select: {
name: true,
age: true,
},
});
console.log(updatedUser);////////////// matchesWhere //////////////
// Find users with email starting with "john"
const usersStartingWithJohn = await client.users.findMany({
where: {
email: {
startsWith: "john",
},
},
});
console.log("Users with email starting with 'john':", usersStartingWithJohn);// Filtered users
const filteredUsers = await client.users.findMany({
where: {
name: {
contains: "John", // name contains "John"
},
email: {
endsWith: "@example.com", // email ends with "@example.com"
},
},
});
console.log("Filtered users:", filteredUsers);
```## Features
- Namespace Support: The client uses a proxy to dynamically create namespaces (e.g., `client.users`, `client.bans`) for managing data.
- CRUD Operations: Supports creating, reading, updating, and deleting data in the Deno KV store.
- Selective Data Fetching: The `select` option allows you to specify which fields should be returned in the response.
- Error Handling: The client provides basic error handling and can be extended to handle more complex error scenarios.
## Contributing
If you find any issues or would like to contribute to the project, feel free to open a pull request or submit an issue on the GitHub repository.
## License
This project is licensed under the MIT License.