@zola_do/nestjs-shared
v0.2.18
Published
Shared package for NestJS applications - re-exports all @zola_do packages
Downloads
474
Maintainers
Readme
@zola_do/nestjs-shared
Meta package that re-exports all @zola_do/* packages for one-shot installation.
Overview
@zola_do/nestjs-shared is a convenience meta package that exports all sub-packages:
- One-shot Installation — Install all packages at once
- Backward Compatible — Same API as individual packages
- Full Monorepo — Everything you need for NestJS applications
Included Packages
| Package | Description | | -------------------------------------------------------- | ------------------------------------------------ | | @zola_do/collection-query | TypeORM filter, sort, paginate, cursor support | | @zola_do/typeorm | TypeORM configuration from environment variables | | @zola_do/authorization | JWT auth, guards, strategies | | @zola_do/crud | Generic CRUD controllers, services, repositories | | @zola_do/audit | RabbitMQ audit logging | | @zola_do/email | SMTP email service | | @zola_do/minio | MinIO object storage | | @zola_do/seaweed | S3-compatible storage | | @zola_do/docx | DOCX template processing | | @zola_do/document-manipulator | PDF/DOCX merge and conversion | | @zola_do/workflow-engine | State machine workflow converter | | @zola_do/health | Terminus readiness/liveness health checks |
Installation
# Install all packages
npm install @zola_do/nestjs-sharedUsage
Import from the meta package or from individual packages:
// From meta package (convenient)
import {
AuthorizationModule,
EntityCrudController,
CollectionQuery,
CommonEntity,
AuditModule,
EmailService,
} from '@zola_do/nestjs-shared';
// From individual packages (tree-shaking)
import { AuthorizationModule } from '@zola_do/authorization';
import { EntityCrudController } from '@zola_do/crud/controller';Quick Start
1. Install
npm install @zola_do/nestjs-shared2. Configure Environment
# Database
DATABASE_HOST=localhost
DATABASE_PORT=5432
DATABASE_NAME=myapp
DATABASE_USER=postgres
DATABASE_PASSWORD=secret
# JWT
JWT_ACCESS_TOKEN_SECRET=your-secret
JWT_ACCESS_TOKEN_EXPIRES=15m
JWT_REFRESH_TOKEN_SECRET=your-refresh-secret
JWT_REFRESH_TOKEN_EXPIRES=7d3. Set Up App Module
import { Module } from '@nestjs/common';
import { TypeOrmModule } from '@nestjs/typeorm';
import { dataSourceOptions } from '@zola_do/nestjs-shared';
import { AuthorizationModule } from '@zola_do/nestjs-shared';
import { AuditModule } from '@zola_do/nestjs-shared';
import { EmailModule } from '@zola_do/nestjs-shared';
@Module({
imports: [
TypeOrmModule.forRoot(dataSourceOptions),
AuthorizationModule,
AuditModule,
EmailModule,
],
})
export class AppModule {}4. Create CRUD Entity
import { CommonEntity } from '@zola_do/nestjs-shared';
import { Entity, Column } from 'typeorm';
@Entity('products')
export class Product extends CommonEntity {
@Column()
name: string;
@Column('decimal', { precision: 10, scale: 2 })
price: number;
}5. Create CRUD Controller
import { Controller } from '@nestjs/common';
import {
EntityCrudController,
EntityCrudService,
} from '@zola_do/nestjs-shared';
import { Product } from './product.entity';
@Controller('products')
export class ProductsController extends EntityCrudController<Product>({
createPermission: 'product:create',
viewPermission: 'product:view',
updatePermission: 'product:update',
deletePermission: 'product:delete',
}) {
constructor(service: EntityCrudService<Product>) {
super(service);
}
}Common Patterns
Full-Featured Module
import { Module } from '@nestjs/common';
import { TypeOrmModule } from '@nestjs/typeorm';
import {
AuthorizationModule,
EntityCrudController,
EntityCrudService,
CommonEntity,
} from '@zola_do/nestjs-shared';
import { Product } from './product.entity';
import { CreateProductDto, UpdateProductDto } from './product.dto';
@Module({
imports: [
TypeOrmModule.forFeature([Product]),
AuthorizationModule,
],
controllers: [
class extends EntityCrudController<Product>({
createDto: CreateProductDto,
updateDto: UpdateProductDto,
createPermission: 'product:create',
viewPermission: 'product:view',
updatePermission: 'product:update',
deletePermission: 'product:delete',
beforeCreate: async ({ req, itemData }) => {
itemData.organizationId = req.user.organizationId;
},
}),
],
providers: [EntityCrudService],
})
export class ProductsModule {}Using Email Service
import { EmailService } from '@zola_do/nestjs-shared';
@Injectable()
class OrderService {
constructor(private readonly emailService: EmailService) {}
async sendOrderConfirmation(order: Order) {
await this.emailService.sendEmail({
to: order.customerEmail,
subject: `Order #${order.number} Confirmed`,
html: `<h1>Thank you for your order!</h1>`,
});
}
}Using Collection Query
import {
decodeCollectionQuery,
QueryConstructor,
} from '@zola_do/nestjs-shared';
@Controller('products')
export class ProductsController {
@Get()
async findAll(@Query('q') q: string) {
const query = decodeCollectionQuery(q);
const dataQuery = QueryConstructor.constructQuery<Product>(
this.productRepo,
query,
);
return dataQuery.getManyAndCount();
}
}Exports
The meta package re-exports everything from all sub-packages:
// Collection Query
import {
CollectionQuery,
QueryConstructor,
FilterOperators,
} from '@zola_do/nestjs-shared';
// TypeORM
import {
dataSourceOptions,
TypeOrmConfigHelper,
CommonEntity,
} from '@zola_do/nestjs-shared';
// Authorization
import {
AuthorizationModule,
JwtGuard,
PermissionsGuard,
AllowAnonymous,
CurrentUser,
AuthHelper,
} from '@zola_do/nestjs-shared';
// CRUD
import {
EntityCrudController,
EntityCrudService,
EntityCrudOptions,
CRUD_REQUEST_CONTEXT_RESOLVER,
} from '@zola_do/nestjs-shared';
// Audit
import {
AuditModule,
AuditRmqEvent,
AuditLoggerInterceptor,
} from '@zola_do/nestjs-shared';
// Email
import { EmailModule, EmailService } from '@zola_do/nestjs-shared';
// Storage
import {
MinIoModule,
MinIOService,
StorageModule,
StorageService,
} from '@zola_do/nestjs-shared';
// Documents
import { DocxModule, DocxService } from '@zola_do/nestjs-shared';
import {
DocumentManipulatorModule,
DocumentManipulatorService,
} from '@zola_do/nestjs-shared';
// Workflow
import { WorkflowEngineService } from '@zola_do/nestjs-shared';Peer Dependencies
The meta package requires these peer dependencies:
npm install @nestjs/common @nestjs/core @nestjs/typeorm @nestjs/jwt @nestjs/passport
npm install @nestjs/config @nestjs/swagger @nestjs/throttler
npm install typeorm typeorm-extension passport passport-jwt
npm install class-validator class-transformer
npm install bcryptjs jsonwebtoken
npm install @nestjs-modules/mailer nodemailer
npm install @aws-sdk/client-s3 @aws-sdk/s3-request-presigner
npm install minio
npm install docx-templates pdf-lib docx-merger axios form-data
npm install dotenvOptional peer dependencies (for full functionality):
npm install @nestjs/microservices amqplib # For audit logging
npm install @nestjs/throttler # For rate limiting
npm install libreoffice-convert # For document conversionDocumentation
For detailed documentation on each package:
| Package | README | | -------------------- | ---------------------------------------------------------------------------- | | collection-query | packages/collection-query/README.md | | typeorm | packages/typeorm/README.md | | authorization | packages/authorization/README.md | | crud | packages/crud/README.md | | audit | packages/audit/README.md | | email | packages/email/README.md | | minio | packages/minio/README.md | | seaweed | packages/seaweed/README.md | | docx | packages/docx/README.md | | document-manipulator | packages/document-manipulator/README.md | | workflow-engine | packages/workflow-engine/README.md |
For architecture overview, see ARCHITECTURE.md.
License
ISC
