@koalarx/nest 1.2.3 → 1.3.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.
- package/core/backgroud-services/cron-service/{cron-job.d.ts → cron-job.handler.base.d.ts} +1 -1
- package/core/backgroud-services/cron-service/{cron-job.js → cron-job.handler.base.js} +3 -3
- package/core/backgroud-services/cron-service/{cron-job.spec.d.ts → cron-job.handler.spec.d.ts} +2 -2
- package/core/backgroud-services/cron-service/{cron-job.spec.js → cron-job.handler.spec.js} +2 -2
- package/core/backgroud-services/event-service/{event-handler.d.ts → event-handler.base.d.ts} +1 -1
- package/core/backgroud-services/event-service/{event-handler.js → event-handler.base.js} +3 -3
- package/core/backgroud-services/event-service/event-job.d.ts +2 -2
- package/core/backgroud-services/event-service/event-queue.spec.js +2 -2
- package/core/controllers/controller.decorator.d.ts +2 -0
- package/core/controllers/controller.decorator.js +12 -0
- package/core/koala-app.d.ts +17 -5
- package/core/koala-app.js +63 -6
- package/core/koala-nest.module.d.ts +6 -1
- package/core/koala-nest.module.js +14 -1
- package/env/env.service.d.ts +1 -1
- package/package.json +2 -2
- package/tsconfig.lib.tsbuildinfo +1 -1
|
@@ -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
|
|
5
|
+
export declare abstract class CronJobHandler {
|
|
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.
|
|
3
|
+
exports.CronJobHandler = 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
|
|
6
|
+
class CronJobHandler {
|
|
7
7
|
redlockService;
|
|
8
8
|
loggingService;
|
|
9
9
|
_timeout;
|
|
@@ -46,4 +46,4 @@ class CronJob {
|
|
|
46
46
|
}
|
|
47
47
|
}
|
|
48
48
|
}
|
|
49
|
-
exports.
|
|
49
|
+
exports.CronJobHandler = CronJobHandler;
|
package/core/backgroud-services/cron-service/{cron-job.spec.d.ts → cron-job.handler.spec.d.ts}
RENAMED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import {
|
|
2
|
-
export declare class CronJobTest extends
|
|
1
|
+
import { CronJobHandler, CronJobResponse } from './cron-job.handler.base';
|
|
2
|
+
export declare class CronJobTest extends CronJobHandler {
|
|
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
|
|
10
|
-
class CronJobTest extends
|
|
9
|
+
const cron_job_handler_base_1 = require("./cron-job.handler.base");
|
|
10
|
+
class CronJobTest extends cron_job_handler_base_1.CronJobHandler {
|
|
11
11
|
constructor() {
|
|
12
12
|
super(new fake_red_lock_service_1.FakeRedLockService(), new fake_logging_service_1.FakeLoggingService());
|
|
13
13
|
}
|
package/core/backgroud-services/event-service/{event-handler.d.ts → event-handler.base.d.ts}
RENAMED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { EventClass } from './event-class';
|
|
2
|
-
export declare abstract class
|
|
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.
|
|
3
|
+
exports.EventHandlerBase = void 0;
|
|
4
4
|
const event_queue_1 = require("./event-queue");
|
|
5
|
-
class
|
|
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.
|
|
10
|
+
exports.EventHandlerBase = EventHandlerBase;
|
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
import { Type } from '@nestjs/common';
|
|
2
2
|
import { EventClass } from './event-class';
|
|
3
|
-
import {
|
|
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<
|
|
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
|
|
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
|
|
10
|
+
class CustomEventHandler extends event_handler_base_1.EventHandlerBase {
|
|
11
11
|
static async isCalled() {
|
|
12
12
|
return null;
|
|
13
13
|
}
|
|
@@ -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;
|
package/core/koala-app.d.ts
CHANGED
|
@@ -1,22 +1,34 @@
|
|
|
1
1
|
import { INestApplication, Type } from '@nestjs/common';
|
|
2
2
|
import { BaseExceptionFilter } from '@nestjs/core';
|
|
3
|
-
import {
|
|
4
|
-
import {
|
|
3
|
+
import { SecuritySchemeObject } from '@nestjs/swagger/dist/interfaces/open-api-spec.interface';
|
|
4
|
+
import { CronJobHandler } 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
|
-
|
|
28
|
+
authorizations?: boolean | ApiDocAuthorizationConfig[];
|
|
17
29
|
}
|
|
18
|
-
type CronJobClass = string | symbol | Function | Type<
|
|
19
|
-
type EventJobClass = string | symbol | Function | Type<
|
|
30
|
+
type CronJobClass = string | symbol | Function | Type<CronJobHandler>;
|
|
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
|
-
|
|
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.
|
|
78
|
-
|
|
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.
|
|
81
|
-
|
|
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)({
|
|
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 { CronJobHandler } 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<CronJobHandler>[];
|
|
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: [
|
|
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
|
};
|
package/env/env.service.d.ts
CHANGED
|
@@ -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.
|
|
3
|
+
"version": "1.3.0",
|
|
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.
|
|
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",
|