Skip to content

@happ-integ/neon

Низкоуровневый клиент для Neon Serverless PostgreSQL.

Установка

bash
pnpm add @happ-integ/neon

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

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

typescript
import { NeonClient } from "@happ-integ/neon";

const db = new NeonClient("sofa");
await db.init(); // Создаёт schema если не существует

Raw SQL запросы

typescript
const users = await db.query<User>("SELECT * FROM users WHERE status = $1 ORDER BY created_at DESC LIMIT $2", [
	"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",
	}
);

// 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" },
]);

Создание таблиц

typescript
await db.createTable("users", {
	id: "TEXT PRIMARY KEY",
	name: "TEXT NOT NULL",
	email: "TEXT UNIQUE",
	created_at: "TIMESTAMP DEFAULT CURRENT_TIMESTAMP",
});

Health Check

typescript
const isHealthy = await db.healthCheck();

API

NeonClient

typescript
new NeonClient(project: string)

Параметры:

ПараметрТипОписание
projectstringИмя проекта (станет schema в БД)

Требуемая переменная:

DATABASE_URL=postgresql://user:password@host/database

Методы

init(): Promise<void>

Создать schema для проекта. Вызовите один раз при инициализации.

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

Raw SQL запрос с параметризацией ($1, $2, ...).

insert(table, data): Promise<void>

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

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

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

delete(table, where): Promise<void>

createTable(table, columns): Promise<void>

dropTable(table): Promise<void>

healthCheck(): Promise<boolean>

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

Каждый проект получает отдельный schema:

typescript
const db = new NeonClient("sofa");
await db.init(); // Создаёт schema "sofa"
await db.insert("users", {...}); // Вставляет в таблицу "sofa"."users"

Преимущества vs D1

  • ✅ Полноценный PostgreSQL
  • ✅ Транзакции
  • ✅ Сложные запросы (JSON, arrays, функции)
  • ✅ Лучше для больших объёмов
  • ❌ Медленнее для простых операций

Переменные окружения

bash
DATABASE_URL=postgresql://username:password@ep-xxxx.us-east-1.neon.tech/dbname

Получить из панели Neon → Connection string.