@koalarx/nest 1.2.3 → 1.3.1

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.
@@ -2,7 +2,7 @@ import { ILoggingService } from '../../../services/logging/ilogging.service';
2
2
  import { IRedLockService } from '../../../services/redlock/ired-lock.service';
3
3
  import { RequestResult } from '../../request-overflow/request-result';
4
4
  export type CronJobResponse = RequestResult<Error, null>;
5
- export declare abstract class CronJob {
5
+ export declare abstract class CronJobHandlerBase {
6
6
  private readonly redlockService;
7
7
  private readonly loggingService;
8
8
  private readonly _timeout;
@@ -1,9 +1,9 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.CronJob = void 0;
3
+ exports.CronJobHandlerBase = void 0;
4
4
  const delay_1 = require("@koalarx/utils/operators/delay");
5
5
  const koala_global_vars_1 = require("../../koala-global-vars");
6
- class CronJob {
6
+ class CronJobHandlerBase {
7
7
  redlockService;
8
8
  loggingService;
9
9
  _timeout;
@@ -46,4 +46,4 @@ class CronJob {
46
46
  }
47
47
  }
48
48
  }
49
- exports.CronJob = CronJob;
49
+ exports.CronJobHandlerBase = CronJobHandlerBase;
@@ -1,5 +1,5 @@
1
- import { CronJob, CronJobResponse } from './cron-job';
2
- export declare class CronJobTest extends CronJob {
1
+ import { CronJobHandlerBase, CronJobResponse } from './cron-job.handler.base';
2
+ export declare class CronJobTest extends CronJobHandlerBase {
3
3
  constructor();
4
4
  static isCalled(): Promise<CronJobResponse>;
5
5
  protected run(): Promise<CronJobResponse>;
@@ -6,8 +6,8 @@ const vitest_1 = require("vitest");
6
6
  const fake_logging_service_1 = require("../../../test/services/fake-logging.service");
7
7
  const fake_red_lock_service_1 = require("../../../test/services/fake-red-lock.service");
8
8
  const request_result_1 = require("../../request-overflow/request-result");
9
- const cron_job_1 = require("./cron-job");
10
- class CronJobTest extends cron_job_1.CronJob {
9
+ const cron_job_handler_base_1 = require("./cron-job.handler.base");
10
+ class CronJobTest extends cron_job_handler_base_1.CronJobHandlerBase {
11
11
  constructor() {
12
12
  super(new fake_red_lock_service_1.FakeRedLockService(), new fake_logging_service_1.FakeLoggingService());
13
13
  }
@@ -1,5 +1,5 @@
1
1
  import { EventClass } from './event-class';
2
- export declare abstract class EventHandler<TEvent extends EventClass<any>> {
2
+ export declare abstract class EventHandlerBase<TEvent extends EventClass<any>> {
3
3
  setupSubscriptions(): void;
4
4
  abstract handleEvent(event: TEvent): Promise<void>;
5
5
  }
@@ -1,10 +1,10 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.EventHandler = void 0;
3
+ exports.EventHandlerBase = void 0;
4
4
  const event_queue_1 = require("./event-queue");
5
- class EventHandler {
5
+ class EventHandlerBase {
6
6
  setupSubscriptions() {
7
7
  event_queue_1.EventQueue.register(this.handleEvent.bind(this), this.constructor.name);
8
8
  }
9
9
  }
10
- exports.EventHandler = EventHandler;
10
+ exports.EventHandlerBase = EventHandlerBase;
@@ -1,12 +1,12 @@
1
1
  import { Type } from '@nestjs/common';
2
2
  import { EventClass } from './event-class';
3
- import { EventHandler } from './event-handler';
3
+ import { EventHandlerBase } from './event-handler.base';
4
4
  import { EventQueue } from './event-queue';
5
5
  export declare abstract class EventJob<TEntity> {
6
6
  _id: `${string}-${string}-${string}-${string}-${string}`;
7
7
  private _eventQueue;
8
8
  constructor();
9
- abstract defineHandlers(): Array<Type<EventHandler<any>>>;
9
+ abstract defineHandlers(): Array<Type<EventHandlerBase<any>>>;
10
10
  get eventQueue(): EventQueue[];
11
11
  clearQueue(): void;
12
12
  addEvent(event: EventClass<TEntity>): void;
@@ -2,12 +2,12 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  const vitest_1 = require("vitest");
4
4
  const event_class_1 = require("./event-class");
5
- const event_handler_1 = require("./event-handler");
5
+ const event_handler_base_1 = require("./event-handler.base");
6
6
  const event_job_1 = require("./event-job");
7
7
  const event_queue_1 = require("./event-queue");
8
8
  class CustomEvent extends event_class_1.EventClass {
9
9
  }
10
- class CustomEventHandler extends event_handler_1.EventHandler {
10
+ class CustomEventHandler extends event_handler_base_1.EventHandlerBase {
11
11
  static async isCalled() {
12
12
  return null;
13
13
  }
@@ -0,0 +1,2 @@
1
+ import { RouterConfigBase } from './router-config.base';
2
+ export declare function Controller(config: RouterConfigBase): (target: any) => void;
@@ -0,0 +1,12 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.Controller = void 0;
4
+ const common_1 = require("@nestjs/common");
5
+ const swagger_1 = require("@nestjs/swagger");
6
+ function Controller(config) {
7
+ return function (target) {
8
+ (0, common_1.Controller)(config.group)(target);
9
+ (0, swagger_1.ApiTags)(config.tag)(target);
10
+ };
11
+ }
12
+ exports.Controller = Controller;
@@ -1,22 +1,34 @@
1
1
  import { INestApplication, Type } from '@nestjs/common';
2
2
  import { BaseExceptionFilter } from '@nestjs/core';
3
- import { CronJob } from '../core/backgroud-services/cron-service/cron-job';
4
- import { EventHandler } from '../core/backgroud-services/event-service/event-handler';
3
+ import { SecuritySchemeObject } from '@nestjs/swagger/dist/interfaces/open-api-spec.interface';
4
+ import { CronJobHandlerBase } from './backgroud-services/cron-service/cron-job.handler.base';
5
+ import { EventHandlerBase } from './backgroud-services/event-service/event-handler.base';
5
6
  import { PrismaTransactionalClient } from './database/prisma-transactional-client';
7
+ interface ApiDocAuthorizationConfig {
8
+ name: string;
9
+ config: SecuritySchemeObject;
10
+ }
11
+ interface ApiDocServerConfig {
12
+ url: string;
13
+ description: string;
14
+ }
15
+ type ScalarTheme = 'alternate' | 'default' | 'moon' | 'purple' | 'solarized' | 'bluePlanet' | 'saturn' | 'kepler' | 'mars' | 'deepSpace' | 'none';
6
16
  interface ApiDocConfig {
7
17
  endpoint: string;
8
18
  title: string;
9
19
  ui?: 'swagger' | 'scalar';
20
+ theme?: ScalarTheme;
10
21
  description?: string;
11
22
  externalDoc?: {
12
23
  message: string;
13
24
  url: string;
14
25
  };
26
+ servers?: ApiDocServerConfig[];
15
27
  version: string;
16
- withAuthorization?: boolean;
28
+ authorizations?: boolean | ApiDocAuthorizationConfig[];
17
29
  }
18
- type CronJobClass = string | symbol | Function | Type<CronJob>;
19
- type EventJobClass = string | symbol | Function | Type<EventHandler<any>>;
30
+ type CronJobClass = string | symbol | Function | Type<CronJobHandlerBase>;
31
+ type EventJobClass = string | symbol | Function | Type<EventHandlerBase<any>>;
20
32
  export declare class KoalaApp {
21
33
  private readonly app;
22
34
  private _globalExceptionFilter;
package/core/koala-app.js CHANGED
@@ -72,13 +72,28 @@ class KoalaApp {
72
72
  .setTitle(config.title)
73
73
  .setVersion(config.version);
74
74
  if (config.description) {
75
- documentBuilder.setDescription(config.description);
75
+ if (config.externalDoc) {
76
+ documentBuilder.setDescription(`${config.description}\n\n[${config.externalDoc.message}](${config.externalDoc.url})`);
77
+ }
78
+ else {
79
+ documentBuilder.setDescription(config.description);
80
+ }
76
81
  }
77
- if (config.externalDoc) {
78
- documentBuilder.setExternalDoc(config.externalDoc.message, config.externalDoc.url);
82
+ if (config.authorizations) {
83
+ if (Array.isArray(config.authorizations)) {
84
+ for (const auth of config.authorizations) {
85
+ documentBuilder.addBearerAuth(auth.config, auth.name);
86
+ documentBuilder.addSecurityRequirements(auth.name);
87
+ }
88
+ }
89
+ else {
90
+ documentBuilder.addBearerAuth();
91
+ }
79
92
  }
80
- if (config.withAuthorization) {
81
- documentBuilder.addBearerAuth();
93
+ if (config.servers) {
94
+ for (const server of config.servers) {
95
+ documentBuilder.addServer(server.url, server.description);
96
+ }
82
97
  }
83
98
  const document = swagger_1.SwaggerModule.createDocument(this.app, documentBuilder.build());
84
99
  const swaggerEndpoint = config.endpoint;
@@ -89,7 +104,49 @@ class KoalaApp {
89
104
  swaggerUiEnabled: config.ui !== 'scalar',
90
105
  });
91
106
  if (config.ui === 'scalar') {
92
- this.app.use(swaggerEndpoint, (0, nestjs_api_reference_1.apiReference)({ spec: { content: document } }));
107
+ this.app.use(swaggerEndpoint, (0, nestjs_api_reference_1.apiReference)({
108
+ spec: {
109
+ content: document,
110
+ },
111
+ hideModels: true,
112
+ hideDownloadButton: true,
113
+ hideClientButton: true,
114
+ theme: config.theme ?? 'default',
115
+ hiddenClients: [
116
+ 'libcurl',
117
+ 'clj_http',
118
+ 'restsharp',
119
+ 'native',
120
+ 'http1.1',
121
+ 'asynchttp',
122
+ 'nethttp',
123
+ 'okhttp',
124
+ 'unirest',
125
+ 'xhr',
126
+ 'okhttp',
127
+ 'native',
128
+ 'request',
129
+ 'unirest',
130
+ 'nsurlsession',
131
+ 'cohttp',
132
+ 'guzzle',
133
+ 'http1',
134
+ 'http2',
135
+ 'webrequest',
136
+ 'restmethod',
137
+ 'requests',
138
+ 'httr',
139
+ 'native',
140
+ 'httpie',
141
+ 'wget',
142
+ 'nsurlsession',
143
+ 'undici',
144
+ ],
145
+ metaData: {
146
+ title: config.title,
147
+ description: config.description,
148
+ },
149
+ }));
93
150
  }
94
151
  return this;
95
152
  }
@@ -1,9 +1,14 @@
1
- import { DynamicModule, Provider } from '@nestjs/common';
1
+ import { DynamicModule, Provider, Type } from '@nestjs/common';
2
2
  import { ZodType } from 'zod';
3
3
  import { ILoggingService } from '../services/logging/ilogging.service';
4
+ import { CronJobHandlerBase } from './backgroud-services/cron-service/cron-job.handler.base';
5
+ import { EventHandlerBase } from './backgroud-services/event-service/event-handler.base';
4
6
  interface KoalaNestModuleConfig {
5
7
  logging?: Provider<ILoggingService>;
6
8
  env?: ZodType;
9
+ constrollers?: Type<any>[];
10
+ cronJobs?: Type<CronJobHandlerBase>[];
11
+ eventJobs?: Type<EventHandlerBase<any>>[];
7
12
  }
8
13
  export declare class KoalaNestModule {
9
14
  static register(config?: KoalaNestModuleConfig): DynamicModule;
@@ -21,6 +21,9 @@ const ired_lock_service_1 = require("../services/redlock/ired-lock.service");
21
21
  const red_lock_service_1 = require("../services/redlock/red-lock.service");
22
22
  let KoalaNestModule = exports.KoalaNestModule = KoalaNestModule_1 = class KoalaNestModule {
23
23
  static register(config) {
24
+ const controllers = config?.constrollers ?? [];
25
+ const cronJobsProviders = config?.cronJobs ?? [];
26
+ const eventJobsProviders = config?.eventJobs ?? [];
24
27
  return {
25
28
  module: KoalaNestModule_1,
26
29
  imports: [
@@ -29,8 +32,11 @@ let KoalaNestModule = exports.KoalaNestModule = KoalaNestModule_1 = class KoalaN
29
32
  isGlobal: true,
30
33
  }),
31
34
  env_module_1.EnvModule,
35
+ ...controllers,
32
36
  ],
33
37
  providers: [
38
+ ...cronJobsProviders,
39
+ ...eventJobsProviders,
34
40
  {
35
41
  provide: ilogging_service_1.ILoggingService,
36
42
  useValue: config?.logging ?? logging_service_1.LoggingService,
@@ -39,7 +45,14 @@ let KoalaNestModule = exports.KoalaNestModule = KoalaNestModule_1 = class KoalaN
39
45
  { provide: ired_lock_service_1.IRedLockService, useClass: red_lock_service_1.RedLockService },
40
46
  env_service_1.EnvService,
41
47
  ],
42
- exports: [ilogging_service_1.ILoggingService, iredis_service_1.IRedisService, ired_lock_service_1.IRedLockService],
48
+ exports: [
49
+ ...cronJobsProviders,
50
+ ...eventJobsProviders,
51
+ ilogging_service_1.ILoggingService,
52
+ iredis_service_1.IRedisService,
53
+ ired_lock_service_1.IRedLockService,
54
+ env_service_1.EnvService,
55
+ ],
43
56
  };
44
57
  }
45
58
  };
@@ -1,6 +1,6 @@
1
1
  import { ConfigService } from '@nestjs/config';
2
2
  import { Env } from './env';
3
- export declare class EnvService<TEnv = Env> {
3
+ export declare class EnvService<TEnv extends Env = Env> {
4
4
  private readonly configService;
5
5
  constructor(configService: ConfigService<TEnv, true>);
6
6
  get<T extends keyof TEnv>(key: T): (string extends infer T_1 ? T_1 extends string ? T_1 extends keyof TEnv ? string extends infer T_2 ? T_2 extends string ? T_2 extends import("@nestjs/config").Path<TEnv[T_1]> ? import("@nestjs/config").PathValue<TEnv[T_1], T_2> : never : never : never : never : never : never) | (any extends infer T_3 ? T_3 extends any ? T_3 extends keyof TEnv ? TEnv[T_3] : never : never : never);
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@koalarx/nest",
3
- "version": "1.2.3",
3
+ "version": "1.3.1",
4
4
  "description": "",
5
5
  "repository": {
6
6
  "type": "git",
@@ -22,7 +22,7 @@
22
22
  "@nestjs/platform-express": "11.0.12",
23
23
  "@nestjs/swagger": "11.0.7",
24
24
  "@prisma/client": "6.5.0",
25
- "@scalar/nestjs-api-reference": "0.4.2",
25
+ "@scalar/nestjs-api-reference": "0.4.3",
26
26
  "cookie-parser": "1.4.6",
27
27
  "dotenv": "16.0.3",
28
28
  "express-basic-auth": "1.2.1",