Saltar a contenido

@arcaelas/dynamite

Banner

ORM moderno con decoradores para AWS DynamoDB Decoradores TypeScript | Relaciones tipadas | Lecturas por índice | Mínimo boilerplate


Características

  • Diseño con decoradores - Define modelos con decoradores TypeScript
  • Relaciones tipadas - HasMany, BelongsTo, ManyToMany con tipado completo
  • Sincronización bajo demanda - sync() crea las tablas, tablas pivote y GSI que falten
  • Validación y transformación - Decoradores integrados para procesar datos
  • Soft deletes - Decorador @DeleteAt para registros recuperables
  • Transacciones - Soporte completo de transacciones con rollback
  • Lifecycle hooks - Decoradores @Before/@After opt-in para create, update y destroy
  • Lecturas por índice - GetItem, BatchGetItem o Query siempre que el filtro lo permita; Scan solo como último recurso
  • Escrituras por lotes - createMany(), deleteMany() y los updates masivos escriben 25 items por petición

Inicio Rápido

import { Dynamite, Table, PrimaryKey, CreatedAt, CreationOptional } from '@arcaelas/dynamite';

// Define tu modelo
class User extends Table<User> {
  @PrimaryKey()
  declare id: CreationOptional<string>;

  declare name: string;
  declare email: string;

  @CreatedAt()
  declare created_at: CreationOptional<string>;
}

// Configura y conecta
const dynamite = new Dynamite({
  region: 'us-east-1',
  tables: [User]
});
await dynamite.connect();
await dynamite.sync(); // solo en desarrollo

// Crear
const user = await User.create({
  name: 'John Doe',
  email: 'john@example.com'
});

// Consultar
const users = await User.where('name', 'John Doe');

// Actualizar
user.email = 'newemail@example.com';
await user.save();

// Eliminar
await user.destroy();

Decoradores

Decorador Descripción
@PrimaryKey() Clave de partición
@Index() Índice Secundario Global
@Default(value) Valor por defecto (estático o función)
@Validate(fn) Validación al asignar
@Set(fn) Transformación al escribir
@Get(fn) Transformación al leer
@CreatedAt() Auto-asignar al crear
@UpdatedAt() Auto-asignar al actualizar
@DeleteAt() Timestamp de soft delete
@HasMany() Relación uno a muchos
@BelongsTo() Relación muchos a uno
@ManyToMany() Muchos a muchos con tabla pivote

Relaciones

class User extends Table<User> {
  @PrimaryKey()
  declare id: CreationOptional<string>;

  @HasMany(() => Post, 'user_id')
  declare posts: NonAttribute<Post[]>;
}

class Post extends Table<Post> {
  @PrimaryKey()
  declare id: CreationOptional<string>;

  @Index()
  declare user_id: string;

  @BelongsTo(() => User, 'id', 'user_id')
  declare user: NonAttribute<User | null>;
}

// Cargar con relaciones
const user = await User.first({ id: '123' }, { include: { posts: true } });
console.log(user.posts); // Post[]

Siguientes Pasos

  • Instalación


    Configura Dynamite en tu proyecto

    Instalar

  • Primeros Pasos


    Crea tu primer modelo paso a paso

    Comenzar

  • Referencia API


    Documentación completa de todas las clases

    Referencia

  • Ejemplos


    Ejemplos prácticos listos para usar

    Ejemplos


Desarrollado por Arcaelas Insiders