@zola_do/nestjs-shared 0.2.4 → 0.2.7

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -1,15 +1,42 @@
1
1
  # @zola_do/nestjs-shared
2
2
 
3
+ [![npm version](https://img.shields.io/npm/v/@zola_do/nestjs-shared.svg)](https://www.npmjs.com/package/@zola_do/nestjs-shared)
4
+ [![npm downloads](https://img.shields.io/npm/dm/@zola_do/nestjs-shared.svg)](https://www.npmjs.com/package/@zola_do/nestjs-shared)
5
+ [![License: ISC](https://img.shields.io/badge/License-ISC-blue.svg)](https://opensource.org/licenses/ISC)
6
+
3
7
  Meta package that re-exports all `@zola_do/*` packages for one-shot installation.
4
8
 
9
+ ## Overview
10
+
11
+ `@zola_do/nestjs-shared` is a convenience meta package that exports all sub-packages:
12
+
13
+ - **One-shot Installation** — Install all packages at once
14
+ - **Backward Compatible** — Same API as individual packages
15
+ - **Full Monorepo** — Everything you need for NestJS applications
16
+
17
+ ### Included Packages
18
+
19
+ | Package | Description |
20
+ | -------------------------------------------------------- | ------------------------------------------------ |
21
+ | [@zola_do/collection-query](../collection-query) | TypeORM filter, sort, paginate, cursor support |
22
+ | [@zola_do/typeorm](../typeorm) | TypeORM configuration from environment variables |
23
+ | [@zola_do/authorization](../authorization) | JWT auth, guards, strategies |
24
+ | [@zola_do/crud](../crud) | Generic CRUD controllers, services, repositories |
25
+ | [@zola_do/audit](../audit) | RabbitMQ audit logging |
26
+ | [@zola_do/email](../email) | SMTP email service |
27
+ | [@zola_do/minio](../minio) | MinIO object storage |
28
+ | [@zola_do/seaweed](../seaweed) | S3-compatible storage |
29
+ | [@zola_do/docx](../docx) | DOCX template processing |
30
+ | [@zola_do/document-manipulator](../document-manipulator) | PDF/DOCX merge and conversion |
31
+ | [@zola_do/workflow-engine](../workflow-engine) | State machine workflow converter |
32
+
5
33
  ## Installation
6
34
 
7
35
  ```bash
36
+ # Install all packages
8
37
  npm install @zola_do/nestjs-shared
9
38
  ```
10
39
 
11
- This installs all 14 sub-packages. For smaller installs, install individual packages instead.
12
-
13
40
  **Note:** If installation fails due to `nestjs-minio-client` postinstall script, use:
14
41
 
15
42
  ```bash
@@ -21,34 +48,296 @@ npm install @zola_do/nestjs-shared --ignore-scripts
21
48
  Import from the meta package or from individual packages:
22
49
 
23
50
  ```typescript
24
- // From meta package
25
- import { AuthorizationModule, CommonEntity, EntityCrudController } from '@zola_do/nestjs-shared';
51
+ // From meta package (convenient)
52
+ import {
53
+ AuthorizationModule,
54
+ EntityCrudController,
55
+ CollectionQuery,
56
+ CommonEntity,
57
+ AuditModule,
58
+ EmailService,
59
+ } from "@zola_do/nestjs-shared";
60
+
61
+ // From individual packages (tree-shaking)
62
+ import { AuthorizationModule } from "@zola_do/authorization";
63
+ import { EntityCrudController } from "@zola_do/crud/controller";
64
+ ```
65
+
66
+ ## Quick Start
67
+
68
+ ### 1. Install
69
+
70
+ ```bash
71
+ npm install @zola_do/nestjs-shared
72
+ ```
73
+
74
+ ### 2. Configure Environment
75
+
76
+ ```bash
77
+ # Database
78
+ DATABASE_HOST=localhost
79
+ DATABASE_PORT=5432
80
+ DATABASE_NAME=myapp
81
+ DATABASE_USER=postgres
82
+ DATABASE_PASSWORD=secret
83
+
84
+ # JWT
85
+ JWT_ACCESS_TOKEN_SECRET=your-secret
86
+ JWT_ACCESS_TOKEN_EXPIRES=15m
87
+ JWT_REFRESH_TOKEN_SECRET=your-refresh-secret
88
+ JWT_REFRESH_TOKEN_EXPIRES=7d
89
+ ```
90
+
91
+ ### 3. Set Up App Module
92
+
93
+ ```typescript
94
+ import { Module } from "@nestjs/common";
95
+ import { TypeOrmModule } from "@nestjs/typeorm";
96
+ import { dataSourceOptions } from "@zola_do/nestjs-shared";
97
+ import { AuthorizationModule } from "@zola_do/nestjs-shared";
98
+ import { AuditModule } from "@zola_do/nestjs-shared";
99
+ import { EmailModule } from "@zola_do/nestjs-shared";
100
+
101
+ @Module({
102
+ imports: [
103
+ TypeOrmModule.forRoot(dataSourceOptions),
104
+ AuthorizationModule,
105
+ AuditModule,
106
+ EmailModule,
107
+ ],
108
+ })
109
+ export class AppModule {}
110
+ ```
111
+
112
+ ### 4. Create CRUD Entity
113
+
114
+ ```typescript
115
+ import { CommonEntity } from "@zola_do/nestjs-shared";
116
+ import { Entity, Column } from "typeorm";
117
+
118
+ @Entity("products")
119
+ export class Product extends CommonEntity {
120
+ @Column()
121
+ name: string;
122
+
123
+ @Column("decimal", { precision: 10, scale: 2 })
124
+ price: number;
125
+ }
126
+ ```
127
+
128
+ ### 5. Create CRUD Controller
129
+
130
+ ```typescript
131
+ import { Controller } from "@nestjs/common";
132
+ import {
133
+ EntityCrudController,
134
+ EntityCrudService,
135
+ } from "@zola_do/nestjs-shared";
136
+ import { Product } from "./product.entity";
137
+
138
+ @Controller("products")
139
+ export class ProductsController extends EntityCrudController<Product>({
140
+ createPermission: "product:create",
141
+ viewPermission: "product:view",
142
+ updatePermission: "product:update",
143
+ deletePermission: "product:delete",
144
+ }) {
145
+ constructor(service: EntityCrudService<Product>) {
146
+ super(service);
147
+ }
148
+ }
149
+ ```
150
+
151
+ ## Common Patterns
152
+
153
+ ### Full-Featured Module
154
+
155
+ ```typescript
156
+ import { Module } from '@nestjs/common';
157
+ import { TypeOrmModule } from '@nestjs/typeorm';
158
+ import {
159
+ AuthorizationModule,
160
+ EntityCrudController,
161
+ EntityCrudService,
162
+ CommonEntity,
163
+ } from '@zola_do/nestjs-shared';
164
+ import { Product } from './product.entity';
165
+ import { CreateProductDto, UpdateProductDto } from './product.dto';
166
+
167
+ @Module({
168
+ imports: [
169
+ TypeOrmModule.forFeature([Product]),
170
+ AuthorizationModule,
171
+ ],
172
+ controllers: [
173
+ class extends EntityCrudController<Product>({
174
+ createDto: CreateProductDto,
175
+ updateDto: UpdateProductDto,
176
+ createPermission: 'product:create',
177
+ viewPermission: 'product:view',
178
+ updatePermission: 'product:update',
179
+ deletePermission: 'product:delete',
180
+ beforeCreate: async ({ req, itemData }) => {
181
+ itemData.organizationId = req.user.organizationId;
182
+ },
183
+ }),
184
+ ],
185
+ providers: [EntityCrudService],
186
+ })
187
+ export class ProductsModule {}
188
+ ```
189
+
190
+ ### Using Email Service
191
+
192
+ ```typescript
193
+ import { EmailService } from "@zola_do/nestjs-shared";
194
+
195
+ @Injectable()
196
+ class OrderService {
197
+ constructor(private readonly emailService: EmailService) {}
198
+
199
+ async sendOrderConfirmation(order: Order) {
200
+ await this.emailService.sendEmail({
201
+ to: order.customerEmail,
202
+ subject: `Order #${order.number} Confirmed`,
203
+ html: `<h1>Thank you for your order!</h1>`,
204
+ });
205
+ }
206
+ }
207
+ ```
208
+
209
+ ### Using Collection Query
210
+
211
+ ```typescript
212
+ import {
213
+ decodeCollectionQuery,
214
+ QueryConstructor,
215
+ } from "@zola_do/nestjs-shared";
216
+
217
+ @Controller("products")
218
+ export class ProductsController {
219
+ @Get()
220
+ async findAll(@Query("q") q: string) {
221
+ const query = decodeCollectionQuery(q);
222
+ const dataQuery = QueryConstructor.constructQuery<Product>(
223
+ this.productRepo,
224
+ query,
225
+ );
226
+ return dataQuery.getManyAndCount();
227
+ }
228
+ }
229
+ ```
230
+
231
+ ## Exports
232
+
233
+ The meta package re-exports everything from all sub-packages:
234
+
235
+ ```typescript
236
+ // Collection Query
237
+ import {
238
+ CollectionQuery,
239
+ QueryConstructor,
240
+ FilterOperators,
241
+ } from "@zola_do/nestjs-shared";
242
+
243
+ // TypeORM
244
+ import {
245
+ dataSourceOptions,
246
+ TypeOrmConfigHelper,
247
+ CommonEntity,
248
+ } from "@zola_do/nestjs-shared";
249
+
250
+ // Authorization
251
+ import {
252
+ AuthorizationModule,
253
+ JwtGuard,
254
+ PermissionsGuard,
255
+ AllowAnonymous,
256
+ CurrentUser,
257
+ AuthHelper,
258
+ } from "@zola_do/nestjs-shared";
259
+
260
+ // CRUD
261
+ import {
262
+ EntityCrudController,
263
+ EntityCrudService,
264
+ EntityCrudOptions,
265
+ CRUD_REQUEST_CONTEXT_RESOLVER,
266
+ } from "@zola_do/nestjs-shared";
267
+
268
+ // Audit
269
+ import {
270
+ AuditModule,
271
+ AuditRmqEvent,
272
+ AuditLoggerInterceptor,
273
+ } from "@zola_do/nestjs-shared";
274
+
275
+ // Email
276
+ import { EmailModule, EmailService } from "@zola_do/nestjs-shared";
277
+
278
+ // Storage
279
+ import {
280
+ MinIoModule,
281
+ MinIOService,
282
+ StorageModule,
283
+ StorageService,
284
+ } from "@zola_do/nestjs-shared";
26
285
 
27
- // Or from individual packages
28
- import { AuthorizationModule } from '@zola_do/authorization';
286
+ // Documents
287
+ import { DocxModule, DocxService } from "@zola_do/nestjs-shared";
288
+ import {
289
+ DocumentManipulatorModule,
290
+ DocumentManipulatorService,
291
+ } from "@zola_do/nestjs-shared";
292
+
293
+ // Workflow
294
+ import { WorkflowEngineService } from "@zola_do/nestjs-shared";
29
295
  ```
30
296
 
31
- ## Sub-Packages
297
+ ## Peer Dependencies
32
298
 
33
- | Package | Description |
34
- |---------|-------------|
35
- | [@zola_do/collection-query](../collection-query) | TypeORM filter, sort, paginate |
36
- | [@zola_do/typeorm](../typeorm) | TypeORM configuration |
37
- | [@zola_do/authorization](../authorization) | JWT auth, guards, strategies |
38
- | [@zola_do/crud](../crud) | Generic CRUD controllers and services |
39
- | [@zola_do/audit](../audit) | RabbitMQ audit logging |
40
- | [@zola_do/email](../email) | SMTP email service |
41
- | [@zola_do/minio](../minio) | MinIO object storage |
42
- | [@zola_do/seaweed](../seaweed) | S3-compatible storage |
43
- | [@zola_do/docx](../docx) | DOCX template processing |
44
- | [@zola_do/document-manipulator](../document-manipulator) | PDF/DOCX merge and conversion |
45
- | [@zola_do/workflow-engine](../workflow-engine) | State machine workflow converter |
299
+ The meta package requires these peer dependencies:
46
300
 
47
- See each package's README for installation, usage, and environment variables.
301
+ ```bash
302
+ npm install @nestjs/common @nestjs/core @nestjs/typeorm @nestjs/jwt @nestjs/passport
303
+ npm install @nestjs/config @nestjs/swagger @nestjs/throttler
304
+ npm install typeorm typeorm-extension passport passport-jwt
305
+ npm install class-validator class-transformer
306
+ npm install bcrypt jsonwebtoken
307
+ npm install @nestjs-modules/mailer nodemailer
308
+ npm install @aws-sdk/client-s3 @aws-sdk/s3-request-presigner
309
+ npm install nestjs-minio-client
310
+ npm install docx-templates pdf-lib docx-merger axios form-data
311
+ npm install dotenv
312
+ ```
313
+
314
+ Optional peer dependencies (for full functionality):
315
+
316
+ ```bash
317
+ npm install @nestjs/microservices amqplib # For audit logging
318
+ npm install @nestjs/throttler # For rate limiting
319
+ npm install libreoffice-convert # For document conversion
320
+ ```
48
321
 
49
322
  ## Documentation
50
323
 
51
- For full monorepo documentation, peer dependencies, development setup, and release workflow, see the root [README](../../README.md) and [PACKAGE_DEVELOPMENT_GUIDE](../../PACKAGE_DEVELOPMENT_GUIDE.md).
324
+ For detailed documentation on each package:
325
+
326
+ | Package | README |
327
+ | -------------------- | ---------------------------------------------------------------------------- |
328
+ | collection-query | [packages/collection-query/README.md](../collection-query/README.md) |
329
+ | typeorm | [packages/typeorm/README.md](../typeorm/README.md) |
330
+ | authorization | [packages/authorization/README.md](../authorization/README.md) |
331
+ | crud | [packages/crud/README.md](../crud/README.md) |
332
+ | audit | [packages/audit/README.md](../audit/README.md) |
333
+ | email | [packages/email/README.md](../email/README.md) |
334
+ | minio | [packages/minio/README.md](../minio/README.md) |
335
+ | seaweed | [packages/seaweed/README.md](../seaweed/README.md) |
336
+ | docx | [packages/docx/README.md](../docx/README.md) |
337
+ | document-manipulator | [packages/document-manipulator/README.md](../document-manipulator/README.md) |
338
+ | workflow-engine | [packages/workflow-engine/README.md](../workflow-engine/README.md) |
339
+
340
+ For architecture overview, see [ARCHITECTURE.md](../../ARCHITECTURE.md).
52
341
 
53
342
  ## License
54
343
 
package/dist/index.d.ts CHANGED
@@ -9,3 +9,4 @@ export * from '@zola_do/seaweed';
9
9
  export * from '@zola_do/docx';
10
10
  export * from '@zola_do/document-manipulator';
11
11
  export * from '@zola_do/workflow-engine';
12
+ export * from '@zola_do/health';
package/dist/index.js CHANGED
@@ -25,4 +25,5 @@ __exportStar(require("@zola_do/seaweed"), exports);
25
25
  __exportStar(require("@zola_do/docx"), exports);
26
26
  __exportStar(require("@zola_do/document-manipulator"), exports);
27
27
  __exportStar(require("@zola_do/workflow-engine"), exports);
28
+ __exportStar(require("@zola_do/health"), exports);
28
29
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,4DAA0C;AAC1C,mDAAiC;AACjC,yDAAuC;AACvC,gDAA8B;AAC9B,iDAA+B;AAC/B,iDAA+B;AAC/B,iDAA+B;AAC/B,mDAAiC;AACjC,gDAA8B;AAC9B,gEAA8C;AAC9C,2DAAyC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,4DAA0C;AAC1C,mDAAiC;AACjC,yDAAuC;AACvC,gDAA8B;AAC9B,iDAA+B;AAC/B,iDAA+B;AAC/B,iDAA+B;AAC/B,mDAAiC;AACjC,gDAA8B;AAC9B,gEAA8C;AAC9C,2DAAyC;AACzC,kDAAgC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@zola_do/nestjs-shared",
3
- "version": "0.2.4",
3
+ "version": "0.2.7",
4
4
  "description": "Shared package for NestJS applications - re-exports all @zola_do packages",
5
5
  "author": "zolaDO",
6
6
  "license": "ISC",
@@ -31,17 +31,18 @@
31
31
  "prepublishOnly": "npm run build"
32
32
  },
33
33
  "dependencies": {
34
- "@zola_do/collection-query": "^0.2.0",
35
- "@zola_do/typeorm": "^0.2.0",
36
- "@zola_do/authorization": "^0.2.0",
37
- "@zola_do/crud": "^0.2.0",
38
- "@zola_do/audit": "^0.2.0",
39
- "@zola_do/email": "^0.2.0",
40
- "@zola_do/minio": "^0.2.0",
41
- "@zola_do/seaweed": "^0.2.0",
42
- "@zola_do/docx": "^0.2.0",
43
- "@zola_do/document-manipulator": "^0.2.0",
44
- "@zola_do/workflow-engine": "^0.2.0"
34
+ "@zola_do/collection-query": "^0.2.5",
35
+ "@zola_do/typeorm": "^0.2.5",
36
+ "@zola_do/authorization": "^0.2.5",
37
+ "@zola_do/crud": "^0.2.5",
38
+ "@zola_do/audit": "^0.2.5",
39
+ "@zola_do/email": "^0.2.5",
40
+ "@zola_do/minio": "^0.2.5",
41
+ "@zola_do/seaweed": "^0.2.5",
42
+ "@zola_do/docx": "^0.2.5",
43
+ "@zola_do/document-manipulator": "^0.2.5",
44
+ "@zola_do/workflow-engine": "^0.2.5",
45
+ "@zola_do/health": "^0.2.5"
45
46
  },
46
47
  "devDependencies": {
47
48
  "rimraf": "^6.1.3",