@chadborghini/adonisjs-mediable
v1.0.1
Published
A lightweight, flexible media attachment system for AdonisJS 6+. Inspired by Laravel Media Library, rewritten for AdonisJS with TypeScript.
Readme
@chadborghini/adonisjs-mediable
A lightweight, flexible media attachment system for AdonisJS 6+.
Inspired by Laravel Media Library, rewritten for AdonisJS with TypeScript.
This package provides:
hasMedia()model mixin- Media uploading & storage
- Automatic file naming
- Media tagging
- Query helpers (
media(),firstMedia(), etc.) - Full TypeScript support
- Extendable uploader class
- Works with any Drive disk (local, s3, etc.)
🚀 Installation
1. Install via npm
npm install @chadborghini/adonisjs-mediable2. Configure the package
node ace configure @chadborghini/adonisjs-mediableThis will:
Publish migration files
Register service provider
3. Run migration
node ace migration:run4. Configure your model
import { compose } from '@adonisjs/core/helpers'
import { BaseModel } from '@adonisjs/lucid/orm'
import { MediableMorphMap, hasMedia } from '@chadborghini/adonisjs-mediable'
import { MediableModelInterface } from '@chadborghini/adonisjs-mediable/types'
@MediableMorphMap('products')
export default class Product extends compose(BaseModel, hasMedia()) implements MediableModelInterface {
getModelId() {
return this.id
}
}Usage
import { MediaUploader } from '@chadborghini/adonisjs-mediable'
const file = request.file('image')
const media = await MediaUploader
.fromSource(file)
.toDestination('public', 'products')
.upload()
product.attachMedia(media, 'thumbnail')Retrieve Media
const files = await product.media()
const images = await product.media('thumbnail')
const image = await product.firstMedia('thumbnail')Remove Media
await product.detachMedia(mediaId)