Skip to content

@happ-integ/d1

Низкоуровневый клиент для Cloudflare D1 (SQLite).

Установка

bash
pnpm add @happ-integ/d1

Использование

Инициализация

typescript
import { D1Client } from "@happ-integ/d1";

const db = new D1Client(env.DB, "sofa");

Raw SQL запросы

typescript
const users = await db.query<User>("SELECT * FROM sofa_users WHERE status = ? ORDER BY created_at DESC LIMIT ?", [
	"active",
	10,
]);

console.log(users.data); // User[]
console.log(users.rowCount); // число строк

CRUD операции

typescript
// Insert
await db.insert("users", {
	id: "1",
	name: "John",
	email: "john@example.com",
});

// Select
const users = await db.select<User>(
	"users",
	{ status: "active" },
	{
		limit: 10,
		orderBy: "created_at",
		orderDirection: "DESC",
	}
);

// Update
await db.update("users", { status: "inactive" }, { id: "1" });

// Delete
await db.delete("users", { id: "1" });

Batch операции

typescript
// Вставить много записей
await db.insertMany("users", [
	{ id: "1", name: "John" },
	{ id: "2", name: "Jane" },
]);

Health Check

typescript
const isHealthy = await db.healthCheck();

API

D1Client

typescript
new D1Client(db: D1Database, project: string)

Параметры:

ПараметрТипОписание
dbD1DatabaseD1 binding из env
projectstringИмя проекта (для префиксов таблиц)

Методы

query<T>(sql, params?): Promise<IQueryResult<T>>

Raw SQL запрос.

insert(table, data): Promise<void>

Вставить одну запись.

insertMany(table, data[]): Promise<void>

Вставить несколько записей.

select<T>(table, where?, options?): Promise<T[]>

Получить записи.

Options:

typescript
{
  limit?: number;
  offset?: number;
  orderBy?: string;
  orderDirection?: "ASC" | "DESC";
}

update(table, data, where): Promise<void>

Обновить записи.

delete(table, where): Promise<void>

Удалить записи.

healthCheck(): Promise<boolean>

Проверка соединения.

Изоляция проектов

Таблицы автоматически префиксируются именем проекта:

typescript
const db = new D1Client(env.DB, "sofa");
await db.insert("users", {...}); // Вставляет в таблицу "sofa_users"

Это позволяет безопасно использовать одну базу для нескольких интеграций.

Когда использовать

  • ✅ Сложные SQL запросы
  • ✅ Batch операции
  • ✅ Полный контроль над SQL
  • ❌ Для простых CRUD — используйте @happ-integ/db