@shamar/mongoose
v0.1.4
Published
Mongoose DataAdapter for Shamar admin — list, CRUD, soft-delete, MongoDB models.
Readme
@shamar/mongoose
Mongoose DataAdapter for Shamar — list, CRUD, soft-delete, and relation search over MongoDB collections.
Install
pnpm add @shamar/mongoose mongoosePeer: mongoose >=8 (required when you use this adapter).
In a typical Adonis app you install @shamar/adonis and choose Mongoose at configure time; the provider calls createMongooseAdapter() for you. Your app owns mongoose.connect (and disconnect) — Shamar does not open the connection.
With @shamar/adonis
// config/shamar.ts
import { defineConfig, panel } from '@shamar/adonis'
export default defineConfig({
orm: 'mongoose',
panels: [
panel('admin')
.path('/admin')
.discoverResources('app/resources/admin'),
],
})See the playground for a full Mongoose + dual-panel example.
Model binding
Prefer a Mongoose model class on the resource:
import { Resource } from '@shamar/core'
import Product from '#models/product'
export default class ProductResource extends Resource {
static model = Product
static slug = 'products'
}String model names work when you pass a connection into the adapter:
import { createMongooseAdapter } from '@shamar/mongoose'
import mongoose from 'mongoose'
const adapter = createMongooseAdapter({
connection: mongoose.connection,
})
// resource: static model = 'Product'IDs
Documents are normalized for the admin UI: Mongo _id is exposed as string id on serialized records. Lookups accept the string id.
Soft delete
export default class TicketResource extends Resource {
static softDelete = true // field: deletedAt
// static softDelete = { field: 'deleted_at' }
}List/find skip stamped documents; delete sets the timestamp instead of removing the document.
Standalone
import { createMongooseAdapter } from '@shamar/mongoose'
const adapter = createMongooseAdapter()
// or createMongooseAdapter({ connection })Behavior notes
- List — pagination, sort, search, filters, group-by, soft-delete exclusion, policy scopes
- Search — relation / permission catalog pickers
- Exists —
.unique()form validation - Models are duck-typed (
find,findById,create, …) so this package does not hard-depend on mongoose types at compile time
Related
@shamar/core— Resource DSL@shamar/adonis— host wiring@shamar/lucid— SQL adapter- Playground — reference Mongoose app
