@innv/nest-initializer 0.1.0

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.
Files changed (66) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +257 -0
  3. package/dist/cjs/core/app-initializer.js +431 -0
  4. package/dist/cjs/core/auto-discovery.helper.js +46 -0
  5. package/dist/cjs/core/config-validator.helper.js +28 -0
  6. package/dist/cjs/core/index.js +17 -0
  7. package/dist/cjs/features/health.controller.js +92 -0
  8. package/dist/cjs/features/index.js +18 -0
  9. package/dist/cjs/features/metrics/metrics.controller.js +41 -0
  10. package/dist/cjs/features/metrics/metrics.interceptor.js +45 -0
  11. package/dist/cjs/features/metrics/metrics.module.js +38 -0
  12. package/dist/cjs/features/metrics/metrics.provider.js +29 -0
  13. package/dist/cjs/features/metrics/metrics.tokens.js +5 -0
  14. package/dist/cjs/features/terminus-health-check.module.js +39 -0
  15. package/dist/cjs/index.js +18 -0
  16. package/dist/cjs/plugins/index.js +19 -0
  17. package/dist/cjs/plugins/rate-limiter.plugin.js +26 -0
  18. package/dist/cjs/plugins/request-logger.plugin.js +13 -0
  19. package/dist/cjs/plugins/typeorm-migration.plugin.js +30 -0
  20. package/dist/cjs/starters/caching.starter.js +27 -0
  21. package/dist/cjs/starters/index.js +19 -0
  22. package/dist/cjs/starters/mongoose.starter.js +24 -0
  23. package/dist/cjs/starters/typeorm.starter.js +31 -0
  24. package/dist/esm/core/app-initializer.js +431 -0
  25. package/dist/esm/core/auto-discovery.helper.js +46 -0
  26. package/dist/esm/core/config-validator.helper.js +28 -0
  27. package/dist/esm/core/index.js +17 -0
  28. package/dist/esm/features/health.controller.js +92 -0
  29. package/dist/esm/features/index.js +18 -0
  30. package/dist/esm/features/metrics/metrics.controller.js +41 -0
  31. package/dist/esm/features/metrics/metrics.interceptor.js +45 -0
  32. package/dist/esm/features/metrics/metrics.module.js +38 -0
  33. package/dist/esm/features/metrics/metrics.provider.js +29 -0
  34. package/dist/esm/features/metrics/metrics.tokens.js +5 -0
  35. package/dist/esm/features/terminus-health-check.module.js +39 -0
  36. package/dist/esm/index.js +18 -0
  37. package/dist/esm/plugins/index.js +19 -0
  38. package/dist/esm/plugins/rate-limiter.plugin.js +26 -0
  39. package/dist/esm/plugins/request-logger.plugin.js +13 -0
  40. package/dist/esm/plugins/typeorm-migration.plugin.js +30 -0
  41. package/dist/esm/starters/caching.starter.js +27 -0
  42. package/dist/esm/starters/index.js +19 -0
  43. package/dist/esm/starters/mongoose.starter.js +24 -0
  44. package/dist/esm/starters/typeorm.starter.js +31 -0
  45. package/dist/types/core/app-initializer.d.ts +206 -0
  46. package/dist/types/core/auto-discovery.helper.d.ts +15 -0
  47. package/dist/types/core/config-validator.helper.d.ts +9 -0
  48. package/dist/types/core/index.d.ts +1 -0
  49. package/dist/types/features/health.controller.d.ts +11 -0
  50. package/dist/types/features/index.d.ts +2 -0
  51. package/dist/types/features/metrics/metrics.controller.d.ts +6 -0
  52. package/dist/types/features/metrics/metrics.interceptor.d.ts +8 -0
  53. package/dist/types/features/metrics/metrics.module.d.ts +4 -0
  54. package/dist/types/features/metrics/metrics.provider.d.ts +2 -0
  55. package/dist/types/features/metrics/metrics.tokens.d.ts +2 -0
  56. package/dist/types/features/terminus-health-check.module.d.ts +11 -0
  57. package/dist/types/index.d.ts +6 -0
  58. package/dist/types/plugins/index.d.ts +3 -0
  59. package/dist/types/plugins/rate-limiter.plugin.d.ts +8 -0
  60. package/dist/types/plugins/request-logger.plugin.d.ts +5 -0
  61. package/dist/types/plugins/typeorm-migration.plugin.d.ts +15 -0
  62. package/dist/types/starters/caching.starter.d.ts +20 -0
  63. package/dist/types/starters/index.d.ts +3 -0
  64. package/dist/types/starters/mongoose.starter.d.ts +24 -0
  65. package/dist/types/starters/typeorm.starter.d.ts +19 -0
  66. package/package.json +159 -0
@@ -0,0 +1,2 @@
1
+ export declare const METRICS_REGISTRY = "METRICS_REGISTRY";
2
+ export declare const METRICS_HTTP_HISTOGRAM = "METRICS_HTTP_HISTOGRAM";
@@ -0,0 +1,11 @@
1
+ import { DynamicModule } from '@nestjs/common';
2
+ export interface TerminusHealthCheckOptions {
3
+ database?: boolean;
4
+ memory?: {
5
+ heapThreshold?: number;
6
+ rssThreshold?: number;
7
+ };
8
+ }
9
+ export declare class TerminusHealthCheckModule {
10
+ static forRoot(options: TerminusHealthCheckOptions): DynamicModule;
11
+ }
@@ -0,0 +1,6 @@
1
+ export * from './core/app-initializer';
2
+ export { TypeOrmStarterOptions } from './starters/typeorm.starter';
3
+ export { MongooseStarterOptions } from './starters/mongoose.starter';
4
+ export { CachingStarterOptions } from './starters/caching.starter';
5
+ export { TerminusHealthCheckOptions } from './features/terminus-health-check.module';
6
+ export * from './plugins';
@@ -0,0 +1,3 @@
1
+ export * from './rate-limiter.plugin';
2
+ export * from './request-logger.plugin';
3
+ export * from './typeorm-migration.plugin';
@@ -0,0 +1,8 @@
1
+ import { INestApplication } from '@nestjs/common';
2
+ import { Options as RateLimitOptions } from 'express-rate-limit';
3
+ import { AppInitializerPlugin } from '../core';
4
+ export declare class RateLimiterPlugin implements AppInitializerPlugin {
5
+ private readonly options;
6
+ constructor(options?: Partial<RateLimitOptions>);
7
+ apply(app: INestApplication): void;
8
+ }
@@ -0,0 +1,5 @@
1
+ import { INestApplication } from '@nestjs/common';
2
+ import { AppInitializerPlugin } from '../core';
3
+ export declare class RequestLoggerPlugin implements AppInitializerPlugin {
4
+ apply(app: INestApplication): void;
5
+ }
@@ -0,0 +1,15 @@
1
+ import { INestApplication } from '@nestjs/common';
2
+ import { AppInitializerPlugin } from '../core';
3
+ /**
4
+ * Um plugin do AppInitializer que executa automaticamente as migrations
5
+ * do TypeORM na inicialização da aplicação.
6
+ */
7
+ export declare class TypeOrmMigrationPlugin implements AppInitializerPlugin {
8
+ private readonly logger;
9
+ /**
10
+ * Método 'apply' que será chamado pelo AppInitializer durante o bootstrap.
11
+ * Este método é assíncrono para poder aguardar a conclusão das migrations.
12
+ * @param app A instância da aplicação NestJS.
13
+ */
14
+ apply(app: INestApplication): Promise<void>;
15
+ }
@@ -0,0 +1,20 @@
1
+ /**
2
+ * Opções para o "Starter" de Cache (Redis).
3
+ */
4
+ export interface CachingStarterOptions {
5
+ /**
6
+ * Chave do .env que contém a URL de conexão com o Redis.
7
+ * (Padrão: 'REDIS_URL')
8
+ */
9
+ redisUrlEnvKey?: string;
10
+ /**
11
+ * Tempo de vida (TTL) padrão para os itens em cache, em segundos.
12
+ * (Padrão: 300 segundos / 5 minutos)
13
+ */
14
+ defaultTtlInSeconds?: number;
15
+ }
16
+ /**
17
+ * Cria o módulo dinâmico para o "Starter" de Cache.
18
+ * Configura o CacheModule para ser global e usar o Redis.
19
+ */
20
+ export declare function createCachingStarter(options?: CachingStarterOptions): import("@nestjs/common").DynamicModule;
@@ -0,0 +1,3 @@
1
+ export * from './typeorm.starter';
2
+ export * from './mongoose.starter';
3
+ export * from './caching.starter';
@@ -0,0 +1,24 @@
1
+ import { MongooseModuleOptions } from '@nestjs/mongoose';
2
+ /**
3
+ * Opções para o "Starter" de Mongoose (MongoDB).
4
+ */
5
+ export interface MongooseStarterOptions {
6
+ /**
7
+ * Chave do .env que contém a URI de conexão com o MongoDB.
8
+ * (Padrão: 'MONGO_URI')
9
+ */
10
+ uriEnvKey?: string;
11
+ /**
12
+ * Permite sobrescrever qualquer outra opção de configuração do Mongoose
13
+ * (ex: { retryAttempts: 2 }).
14
+ */
15
+ mongooseOptions?: Omit<MongooseModuleOptions, 'uri'>;
16
+ }
17
+ /**
18
+ * Cria o módulo dinâmico para o "Starter" de Mongoose.
19
+ * Configura o MongooseModule para ser global e usar a URI do .env.
20
+ */
21
+ export declare function createMongooseStarter(options?: MongooseStarterOptions): {
22
+ module: import("@nestjs/common").DynamicModule;
23
+ plugins: never[];
24
+ };
@@ -0,0 +1,19 @@
1
+ import { TypeOrmModuleOptions } from '@nestjs/typeorm';
2
+ import { AppInitializerPlugin } from '../core';
3
+ /**
4
+ * Opções para o "Starter" de TypeORM.
5
+ */
6
+ export interface TypeOrmStarterOptions {
7
+ autoLoadEntities?: boolean;
8
+ runMigrationsOnStartup?: boolean;
9
+ databaseUrlEnvKey?: string;
10
+ typeOrmOptions?: Omit<TypeOrmModuleOptions, 'url' | 'autoLoadEntities' | 'synchronize'>;
11
+ }
12
+ /**
13
+ * Cria o módulo dinâmico para o "Starter" de TypeORM.
14
+ * Esta função constrói toda a configuração necessária para o TypeOrmModule.
15
+ */
16
+ export declare function createTypeOrmStarter(options?: TypeOrmStarterOptions): {
17
+ module: import("@nestjs/common").DynamicModule;
18
+ plugins: AppInitializerPlugin[];
19
+ };
package/package.json ADDED
@@ -0,0 +1,159 @@
1
+ {
2
+ "name": "@innv/nest-initializer",
3
+ "version": "0.1.0",
4
+ "description": "Uma plataforma fluente e opinativa para inicializar e configurar aplicações NestJS com as melhores práticas.",
5
+ "author": "Innovare",
6
+ "license": "MIT",
7
+ "repository": {
8
+ "type": "git",
9
+ "url": "git+https://github.com/innovare-tech/nest-initializer.git"
10
+ },
11
+ "bugs": {
12
+ "url": "https://github.com/innovare-tech/nest-initializer/issues"
13
+ },
14
+ "homepage": "https://github.com/innovare-tech/nest-initializer/issues#readme",
15
+ "main": "dist/cjs/index.js",
16
+ "module": "dist/esm/index.js",
17
+ "types": "dist/types/index.d.ts",
18
+ "files": [
19
+ "dist"
20
+ ],
21
+ "engines": {
22
+ "node": ">=18.0.0"
23
+ },
24
+ "scripts": {
25
+ "test": "jest --coverage",
26
+ "test:watch": "jest --watch",
27
+ "build:clean": "rimraf dist",
28
+ "build:cjs": "tsc -p tsconfig.build-cjs.json",
29
+ "build:esm": "tsc -p tsconfig.build-esm.json",
30
+ "build:types": "tsc -p tsconfig.build-types.json",
31
+ "build": "npm run build:clean && npm run build:cjs && npm run build:esm && npm run build:types",
32
+ "lint": "eslint .",
33
+ "lint:fix": "eslint . --fix",
34
+ "format": "prettier --write \"{src,test}/**/*.ts\"",
35
+ "prepare": "husky install",
36
+ "prepublishOnly": "npm run lint && npm test && npm run build"
37
+ },
38
+ "dependencies": {
39
+ "cache-manager-redis-store": "3.0.1",
40
+ "compression": "1.8.1",
41
+ "glob": "11.0.3",
42
+ "helmet": "8.1.0",
43
+ "morgan": "^1.10.1",
44
+ "zod": "4.1.12"
45
+ },
46
+ "peerDependencies": {
47
+ "@nestjs/axios": "^4.0.1",
48
+ "@nestjs/cache-manager": "^3.0.1",
49
+ "@nestjs/common": "^10.0.0 || ^11.0.0",
50
+ "@nestjs/config": "^4.0.2",
51
+ "@nestjs/core": "^10.0.0 || ^11.0.0",
52
+ "@nestjs/mongoose": "^10.0.0 || ^11.0.0",
53
+ "@nestjs/platform-express": "^10.0.0 || ^11.0.0",
54
+ "@nestjs/platform-fastify": "^10.0.0 || ^11.0.0",
55
+ "@nestjs/swagger": "^7.0.0",
56
+ "@nestjs/terminus": "^10.0.0 || ^11.0.0",
57
+ "@nestjs/typeorm": "^10.0.0",
58
+ "axios": "^1.6.0",
59
+ "mongoose": "^8.0.0",
60
+ "prom-client": "^15.0.0",
61
+ "reflect-metadata": "^0.1.13 || ^0.2.0",
62
+ "rxjs": "^7.0.0",
63
+ "typeorm": "^0.3.0"
64
+ },
65
+ "peerDependenciesMeta": {
66
+ "@nestjs/axios": {
67
+ "optional": true
68
+ },
69
+ "@nestjs/cache-manager": {
70
+ "optional": true
71
+ },
72
+ "@nestjs/config": {
73
+ "optional": true
74
+ },
75
+ "@nestjs/mongoose": {
76
+ "optional": true
77
+ },
78
+ "@nestjs/platform-express": {
79
+ "optional": true
80
+ },
81
+ "@nestjs/platform-fastify": {
82
+ "optional": true
83
+ },
84
+ "@nestjs/swagger": {
85
+ "optional": true
86
+ },
87
+ "@nestjs/terminus": {
88
+ "optional": true
89
+ },
90
+ "@nestjs/typeorm": {
91
+ "optional": true
92
+ },
93
+ "axios": {
94
+ "optional": true
95
+ },
96
+ "mongoose": {
97
+ "optional": true
98
+ },
99
+ "prom-client": {
100
+ "optional": true
101
+ },
102
+ "typeorm": {
103
+ "optional": true
104
+ }
105
+ },
106
+ "devDependencies": {
107
+ "@commitlint/cli": "^19.3.0",
108
+ "@commitlint/config-conventional": "^19.2.2",
109
+ "@eslint/js": "^9.38.0",
110
+ "@nestjs/axios": "^4.0.1",
111
+ "@nestjs/cache-manager": "^3.0.1",
112
+ "@nestjs/common": "^11.1.6",
113
+ "@nestjs/config": "^4.0.2",
114
+ "@nestjs/core": "^11.1.6",
115
+ "@nestjs/mongoose": "^11.0.3",
116
+ "@nestjs/platform-express": "^11.1.6",
117
+ "@nestjs/swagger": "^11.2.1",
118
+ "@nestjs/terminus": "^11.0.0",
119
+ "@nestjs/testing": "^11.1.7",
120
+ "@nestjs/typeorm": "^11.0.0",
121
+ "@types/compression": "^1.7.5",
122
+ "@types/jest": "^29.5.14",
123
+ "@types/morgan": "^1.9.10",
124
+ "@types/node": "^18.19.3",
125
+ "@typescript-eslint/eslint-plugin": "^7.10.0",
126
+ "@typescript-eslint/parser": "^7.10.0",
127
+ "class-transformer": "^0.5.1",
128
+ "class-validator": "^0.14.2",
129
+ "eslint": "^8.57.0",
130
+ "eslint-config-prettier": "^9.1.0",
131
+ "eslint-plugin-prettier": "^5.1.3",
132
+ "express-rate-limit": "^8.1.0",
133
+ "globals": "^15.0.0",
134
+ "husky": "^9.0.11",
135
+ "jest": "^29.7.0",
136
+ "prettier": "^3.2.5",
137
+ "prom-client": "^15.1.3",
138
+ "reflect-metadata": "^0.2.2",
139
+ "rimraf": "^5.0.7",
140
+ "rxjs": "^7.8.1",
141
+ "ts-jest": "^29.4.5",
142
+ "typeorm": "^0.3.27",
143
+ "typescript": "^5.4.5",
144
+ "typescript-eslint": "^8.46.2"
145
+ },
146
+ "keywords": [
147
+ "nestjs",
148
+ "nest",
149
+ "initializer",
150
+ "bootstrap",
151
+ "builder",
152
+ "configuration",
153
+ "fluent",
154
+ "opinionated",
155
+ "starter",
156
+ "actuator",
157
+ "auto-discovery"
158
+ ]
159
+ }