@application-kit/bootstrap 0.2.4 → 0.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/CHANGELOG.md +13 -0
- package/README.md +41 -3
- package/dist/cjs/consumer/consumer-bootstrap.d.ts +3 -0
- package/dist/cjs/consumer/consumer-bootstrap.js +17 -0
- package/dist/cjs/consumer/consumer-process.environment.d.ts +3 -0
- package/dist/cjs/consumer/consumer-process.environment.js +27 -0
- package/dist/cjs/consumer/index.d.ts +2 -0
- package/dist/cjs/consumer/index.js +18 -0
- package/dist/cjs/web/index.d.ts +2 -0
- package/dist/cjs/web/index.js +2 -0
- package/dist/cjs/web/web-bootstrap.d.ts +4 -0
- package/dist/cjs/web/web-bootstrap.js +20 -0
- package/dist/cjs/web/web-process.environment.d.ts +4 -0
- package/dist/cjs/web/web-process.environment.js +35 -0
- package/dist/esm/consumer/consumer-bootstrap.d.ts +3 -0
- package/dist/esm/consumer/consumer-bootstrap.js +10 -0
- package/dist/esm/consumer/consumer-process.environment.d.ts +3 -0
- package/dist/esm/consumer/consumer-process.environment.js +23 -0
- package/dist/esm/consumer/index.d.ts +2 -0
- package/dist/esm/consumer/index.js +2 -0
- package/dist/esm/web/index.d.ts +2 -0
- package/dist/esm/web/index.js +2 -0
- package/dist/esm/web/web-bootstrap.d.ts +4 -0
- package/dist/esm/web/web-bootstrap.js +13 -0
- package/dist/esm/web/web-process.environment.d.ts +4 -0
- package/dist/esm/web/web-process.environment.js +31 -0
- package/package.json +18 -3
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,18 @@
|
|
|
1
1
|
# @application-kit/bootstrap
|
|
2
2
|
|
|
3
|
+
## 0.3.0
|
|
4
|
+
|
|
5
|
+
### Minor Changes
|
|
6
|
+
|
|
7
|
+
- c9f24d0: Процессы запускаются целиком из пакета, а переменные контракта чарта валидируются на старте:
|
|
8
|
+
|
|
9
|
+
- `webBootstrap(rootModule, options)` из `/web` читает `PORT` (по умолчанию 3000) и `TRUST_PROXY_HOPS` (по умолчанию 0), создаёт приложение через `createFastifyApplication`, слушает `0.0.0.0` и возвращает приложение;
|
|
10
|
+
- новый вход `/consumer`: `consumerBootstrap(rootModule, server)` читает `METRICS_PORT` (по умолчанию 3001), поднимает сервер `/metrics` и передаёт корневой модуль транспорту `server` (например `kafkaConsumerServer` из `@application-kit/kafka`) вместе с логгером `nestjs-pino`.
|
|
11
|
+
|
|
12
|
+
Значение, которое не является целым числом в допустимом диапазоне (`abc`, `-1`, `1.5`, порт больше 65535), роняет старт ошибкой `ClassValidationError` с именем переменной ещё до создания приложения. Раньше `Number('abc')` давал `NaN`, и доверенных прокси становилось молча ноль.
|
|
13
|
+
|
|
14
|
+
Для этих входов нужен peer `@libs-for-dev/nestjs-config-module` ^3.0.0 рядом с `class-transformer` и `class-validator`. Потребителю `createFastifyApplication` менять ничего не нужно.
|
|
15
|
+
|
|
3
16
|
## 0.2.4
|
|
4
17
|
|
|
5
18
|
### Patch Changes
|
package/README.md
CHANGED
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
# @application-kit/bootstrap
|
|
2
2
|
|
|
3
|
-
Бутстрап процессов NestJS: web на Fastify с
|
|
4
|
-
|
|
3
|
+
Бутстрап процессов NestJS: web на Fastify с периметром, consumer с сервером метрик и CLI на nestjs-console. Состав
|
|
4
|
+
модулей, Swagger и хуки метрик знает приложение: пакет собирает процесс из его корневого модуля и опций. Порт, число
|
|
5
|
+
прокси и порт метрик — переменные окружения контракта чарта; невалидное значение роняет старт.
|
|
5
6
|
|
|
6
7
|
## Установка
|
|
7
8
|
|
|
@@ -17,13 +18,38 @@ Peer-зависимости — `@nestjs/common`, `@nestjs/core`, `nestjs-pino`;
|
|
|
17
18
|
|
|
18
19
|
| Вход | Для чего | Тянет |
|
|
19
20
|
|------|----------|-------|
|
|
20
|
-
| `@application-kit/bootstrap/web` | `createFastifyApplication` — web-процесс на Fastify | `@nestjs/platform-fastify`, `@fastify/cookie`, `class-validator`, `class-transformer`, `@opentelemetry/api` |
|
|
21
|
+
| `@application-kit/bootstrap/web` | `webBootstrap`, `createFastifyApplication` — web-процесс на Fastify | `@nestjs/platform-fastify`, `@fastify/cookie`, `class-validator`, `class-transformer`, `@opentelemetry/api`, `@libs-for-dev/nestjs-config-module` |
|
|
22
|
+
| `@application-kit/bootstrap/consumer` | `consumerBootstrap` — процесс-консьюмер без HTTP-слоя | `class-validator`, `class-transformer`, `@libs-for-dev/nestjs-config-module` |
|
|
21
23
|
| `@application-kit/bootstrap/cli` | `cliBootstrap` — CLI-процесс | `nestjs-console` |
|
|
22
24
|
|
|
23
25
|
Корневого входа нет: web-процессу `nestjs-console` не нужен, CLI — Fastify.
|
|
24
26
|
|
|
27
|
+
## Окружение
|
|
28
|
+
|
|
29
|
+
| Переменная | Процесс | По умолчанию | |
|
|
30
|
+
|------------|---------|--------------|---|
|
|
31
|
+
| `PORT` | web | `3000` | порт `listen` на `0.0.0.0` |
|
|
32
|
+
| `TRUST_PROXY_HOPS` | web | `0` | сколько прокси перед приложением доверенные; `0` — только сокет |
|
|
33
|
+
| `METRICS_PORT` | consumer | `3001` | порт отдельного сервера `/metrics` |
|
|
34
|
+
|
|
35
|
+
Значение — целое не меньше 0 (порт — не больше 65535). Иное (`abc`, `1.5`, `-1`) — `ClassValidationError` с именем
|
|
36
|
+
переменной до создания приложения: `Number('abc')` дал бы `NaN`, и доверенных прокси молча стало бы ноль.
|
|
37
|
+
|
|
25
38
|
## Web
|
|
26
39
|
|
|
40
|
+
```ts
|
|
41
|
+
import { webBootstrap } from '@application-kit/bootstrap/web'
|
|
42
|
+
|
|
43
|
+
void webBootstrap(AppModule, {
|
|
44
|
+
configure: (app) => {
|
|
45
|
+
setupMetricsHooks(app)
|
|
46
|
+
},
|
|
47
|
+
})
|
|
48
|
+
```
|
|
49
|
+
|
|
50
|
+
`webBootstrap` берёт порт и прокси из окружения, собирает приложение через `createFastifyApplication`, слушает и
|
|
51
|
+
возвращает его. `createFastifyApplication` — для своего запуска, когда порт и прокси приходят не из окружения:
|
|
52
|
+
|
|
27
53
|
```ts
|
|
28
54
|
import { createFastifyApplication } from '@application-kit/bootstrap/web'
|
|
29
55
|
|
|
@@ -56,6 +82,18 @@ await app.listen(port, '0.0.0.0')
|
|
|
56
82
|
| `cookie` | `{}` | опции `@fastify/cookie`; `false` — плагин не регистрируется |
|
|
57
83
|
| `configure` | — | `(app) => void`, зовётся после хука request-id, до интерцептора и пайпа |
|
|
58
84
|
|
|
85
|
+
## Consumer
|
|
86
|
+
|
|
87
|
+
```ts
|
|
88
|
+
import { consumerBootstrap } from '@application-kit/bootstrap/consumer'
|
|
89
|
+
import { kafkaConsumerServer } from '@application-kit/kafka'
|
|
90
|
+
|
|
91
|
+
void consumerBootstrap(ConsumerModule, kafkaConsumerServer)
|
|
92
|
+
```
|
|
93
|
+
|
|
94
|
+
Сервер `/metrics` поднимается на `METRICS_PORT` со своим реестром метрик процесса, затем корневой модуль уходит
|
|
95
|
+
транспорту вместе с логгером `nestjs-pino`. Транспорт передаёт приложение: от брокера пакет не зависит.
|
|
96
|
+
|
|
59
97
|
## CLI
|
|
60
98
|
|
|
61
99
|
```ts
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.consumerBootstrap = void 0;
|
|
7
|
+
const metrics_1 = require("@application-kit/observability/metrics");
|
|
8
|
+
const nestjs_config_module_1 = require("@libs-for-dev/nestjs-config-module");
|
|
9
|
+
const nestjs_pino_1 = require("nestjs-pino");
|
|
10
|
+
const node_process_1 = __importDefault(require("node:process"));
|
|
11
|
+
const consumer_process_environment_js_1 = require("./consumer-process.environment.js");
|
|
12
|
+
const consumerBootstrap = async (rootModule, server) => {
|
|
13
|
+
const environment = (0, nestjs_config_module_1.exposeObjectWithValidation)(node_process_1.default.env, consumer_process_environment_js_1.ConsumerProcessEnvironment);
|
|
14
|
+
(0, metrics_1.startMetricsServer)({ port: environment.METRICS_PORT, registry: new metrics_1.MetricsRegistry() });
|
|
15
|
+
await server(rootModule, nestjs_pino_1.Logger);
|
|
16
|
+
};
|
|
17
|
+
exports.consumerBootstrap = consumerBootstrap;
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
3
|
+
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
4
|
+
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
5
|
+
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
6
|
+
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
7
|
+
};
|
|
8
|
+
var __metadata = (this && this.__metadata) || function (k, v) {
|
|
9
|
+
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
|
|
10
|
+
};
|
|
11
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
12
|
+
exports.ConsumerProcessEnvironment = void 0;
|
|
13
|
+
const class_transformer_1 = require("class-transformer");
|
|
14
|
+
const class_validator_1 = require("class-validator");
|
|
15
|
+
const MAX_PORT = 65_535;
|
|
16
|
+
class ConsumerProcessEnvironment {
|
|
17
|
+
METRICS_PORT = 3001;
|
|
18
|
+
}
|
|
19
|
+
exports.ConsumerProcessEnvironment = ConsumerProcessEnvironment;
|
|
20
|
+
__decorate([
|
|
21
|
+
(0, class_transformer_1.Expose)(),
|
|
22
|
+
(0, class_validator_1.IsInt)(),
|
|
23
|
+
(0, class_validator_1.Max)(MAX_PORT),
|
|
24
|
+
(0, class_validator_1.Min)(0),
|
|
25
|
+
(0, class_transformer_1.Type)(() => Number),
|
|
26
|
+
__metadata("design:type", Object)
|
|
27
|
+
], ConsumerProcessEnvironment.prototype, "METRICS_PORT", void 0);
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
14
|
+
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
15
|
+
};
|
|
16
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
17
|
+
__exportStar(require("./consumer-bootstrap.js"), exports);
|
|
18
|
+
__exportStar(require("./consumer-process.environment.js"), exports);
|
package/dist/cjs/web/index.d.ts
CHANGED
package/dist/cjs/web/index.js
CHANGED
|
@@ -16,3 +16,5 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
|
16
16
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
17
17
|
__exportStar(require("./create-fastify-application.js"), exports);
|
|
18
18
|
__exportStar(require("./fastify-application-options.interface.js"), exports);
|
|
19
|
+
__exportStar(require("./web-bootstrap.js"), exports);
|
|
20
|
+
__exportStar(require("./web-process.environment.js"), exports);
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import type { Type } from '@nestjs/common';
|
|
2
|
+
import type { NestFastifyApplication } from '@nestjs/platform-fastify';
|
|
3
|
+
import type { FastifyApplicationOptionsInterface } from './fastify-application-options.interface.js';
|
|
4
|
+
export declare const webBootstrap: (rootModule: Type, options?: Omit<FastifyApplicationOptionsInterface, "trustProxyHops">) => Promise<NestFastifyApplication>;
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.webBootstrap = void 0;
|
|
7
|
+
const nestjs_config_module_1 = require("@libs-for-dev/nestjs-config-module");
|
|
8
|
+
const nestjs_pino_1 = require("nestjs-pino");
|
|
9
|
+
const node_process_1 = __importDefault(require("node:process"));
|
|
10
|
+
const create_fastify_application_js_1 = require("./create-fastify-application.js");
|
|
11
|
+
const web_process_environment_js_1 = require("./web-process.environment.js");
|
|
12
|
+
const LISTEN_HOST = '0.0.0.0';
|
|
13
|
+
const webBootstrap = async (rootModule, options = {}) => {
|
|
14
|
+
const environment = (0, nestjs_config_module_1.exposeObjectWithValidation)(node_process_1.default.env, web_process_environment_js_1.WebProcessEnvironment);
|
|
15
|
+
const app = await (0, create_fastify_application_js_1.createFastifyApplication)(rootModule, { ...options, trustProxyHops: environment.TRUST_PROXY_HOPS });
|
|
16
|
+
await app.listen(environment.PORT, LISTEN_HOST);
|
|
17
|
+
app.get(nestjs_pino_1.Logger).log(`Application is running on port "${environment.PORT}"`);
|
|
18
|
+
return app;
|
|
19
|
+
};
|
|
20
|
+
exports.webBootstrap = webBootstrap;
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
3
|
+
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
4
|
+
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
5
|
+
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
6
|
+
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
7
|
+
};
|
|
8
|
+
var __metadata = (this && this.__metadata) || function (k, v) {
|
|
9
|
+
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
|
|
10
|
+
};
|
|
11
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
12
|
+
exports.WebProcessEnvironment = void 0;
|
|
13
|
+
const class_transformer_1 = require("class-transformer");
|
|
14
|
+
const class_validator_1 = require("class-validator");
|
|
15
|
+
const MAX_PORT = 65_535;
|
|
16
|
+
class WebProcessEnvironment {
|
|
17
|
+
PORT = 3000;
|
|
18
|
+
TRUST_PROXY_HOPS = 0;
|
|
19
|
+
}
|
|
20
|
+
exports.WebProcessEnvironment = WebProcessEnvironment;
|
|
21
|
+
__decorate([
|
|
22
|
+
(0, class_transformer_1.Expose)(),
|
|
23
|
+
(0, class_validator_1.IsInt)(),
|
|
24
|
+
(0, class_validator_1.Max)(MAX_PORT),
|
|
25
|
+
(0, class_validator_1.Min)(0),
|
|
26
|
+
(0, class_transformer_1.Type)(() => Number),
|
|
27
|
+
__metadata("design:type", Object)
|
|
28
|
+
], WebProcessEnvironment.prototype, "PORT", void 0);
|
|
29
|
+
__decorate([
|
|
30
|
+
(0, class_transformer_1.Expose)(),
|
|
31
|
+
(0, class_validator_1.IsInt)(),
|
|
32
|
+
(0, class_validator_1.Min)(0),
|
|
33
|
+
(0, class_transformer_1.Type)(() => Number),
|
|
34
|
+
__metadata("design:type", Object)
|
|
35
|
+
], WebProcessEnvironment.prototype, "TRUST_PROXY_HOPS", void 0);
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { MetricsRegistry, startMetricsServer } from '@application-kit/observability/metrics';
|
|
2
|
+
import { exposeObjectWithValidation } from '@libs-for-dev/nestjs-config-module';
|
|
3
|
+
import { Logger } from 'nestjs-pino';
|
|
4
|
+
import process from 'node:process';
|
|
5
|
+
import { ConsumerProcessEnvironment } from './consumer-process.environment.js';
|
|
6
|
+
export const consumerBootstrap = async (rootModule, server) => {
|
|
7
|
+
const environment = exposeObjectWithValidation(process.env, ConsumerProcessEnvironment);
|
|
8
|
+
startMetricsServer({ port: environment.METRICS_PORT, registry: new MetricsRegistry() });
|
|
9
|
+
await server(rootModule, Logger);
|
|
10
|
+
};
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
2
|
+
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
3
|
+
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
4
|
+
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
5
|
+
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
6
|
+
};
|
|
7
|
+
var __metadata = (this && this.__metadata) || function (k, v) {
|
|
8
|
+
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
|
|
9
|
+
};
|
|
10
|
+
import { Expose, Type } from 'class-transformer';
|
|
11
|
+
import { IsInt, Max, Min } from 'class-validator';
|
|
12
|
+
const MAX_PORT = 65_535;
|
|
13
|
+
export class ConsumerProcessEnvironment {
|
|
14
|
+
METRICS_PORT = 3001;
|
|
15
|
+
}
|
|
16
|
+
__decorate([
|
|
17
|
+
Expose(),
|
|
18
|
+
IsInt(),
|
|
19
|
+
Max(MAX_PORT),
|
|
20
|
+
Min(0),
|
|
21
|
+
Type(() => Number),
|
|
22
|
+
__metadata("design:type", Object)
|
|
23
|
+
], ConsumerProcessEnvironment.prototype, "METRICS_PORT", void 0);
|
package/dist/esm/web/index.d.ts
CHANGED
package/dist/esm/web/index.js
CHANGED
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import type { Type } from '@nestjs/common';
|
|
2
|
+
import type { NestFastifyApplication } from '@nestjs/platform-fastify';
|
|
3
|
+
import type { FastifyApplicationOptionsInterface } from './fastify-application-options.interface.js';
|
|
4
|
+
export declare const webBootstrap: (rootModule: Type, options?: Omit<FastifyApplicationOptionsInterface, "trustProxyHops">) => Promise<NestFastifyApplication>;
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { exposeObjectWithValidation } from '@libs-for-dev/nestjs-config-module';
|
|
2
|
+
import { Logger } from 'nestjs-pino';
|
|
3
|
+
import process from 'node:process';
|
|
4
|
+
import { createFastifyApplication } from './create-fastify-application.js';
|
|
5
|
+
import { WebProcessEnvironment } from './web-process.environment.js';
|
|
6
|
+
const LISTEN_HOST = '0.0.0.0';
|
|
7
|
+
export const webBootstrap = async (rootModule, options = {}) => {
|
|
8
|
+
const environment = exposeObjectWithValidation(process.env, WebProcessEnvironment);
|
|
9
|
+
const app = await createFastifyApplication(rootModule, { ...options, trustProxyHops: environment.TRUST_PROXY_HOPS });
|
|
10
|
+
await app.listen(environment.PORT, LISTEN_HOST);
|
|
11
|
+
app.get(Logger).log(`Application is running on port "${environment.PORT}"`);
|
|
12
|
+
return app;
|
|
13
|
+
};
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
2
|
+
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
3
|
+
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
4
|
+
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
5
|
+
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
6
|
+
};
|
|
7
|
+
var __metadata = (this && this.__metadata) || function (k, v) {
|
|
8
|
+
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
|
|
9
|
+
};
|
|
10
|
+
import { Expose, Type } from 'class-transformer';
|
|
11
|
+
import { IsInt, Max, Min } from 'class-validator';
|
|
12
|
+
const MAX_PORT = 65_535;
|
|
13
|
+
export class WebProcessEnvironment {
|
|
14
|
+
PORT = 3000;
|
|
15
|
+
TRUST_PROXY_HOPS = 0;
|
|
16
|
+
}
|
|
17
|
+
__decorate([
|
|
18
|
+
Expose(),
|
|
19
|
+
IsInt(),
|
|
20
|
+
Max(MAX_PORT),
|
|
21
|
+
Min(0),
|
|
22
|
+
Type(() => Number),
|
|
23
|
+
__metadata("design:type", Object)
|
|
24
|
+
], WebProcessEnvironment.prototype, "PORT", void 0);
|
|
25
|
+
__decorate([
|
|
26
|
+
Expose(),
|
|
27
|
+
IsInt(),
|
|
28
|
+
Min(0),
|
|
29
|
+
Type(() => Number),
|
|
30
|
+
__metadata("design:type", Object)
|
|
31
|
+
], WebProcessEnvironment.prototype, "TRUST_PROXY_HOPS", void 0);
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@application-kit/bootstrap",
|
|
3
|
-
"version": "0.
|
|
4
|
-
"description": "Бутстрап процессов NestJS: web на Fastify с периметром (доверенные прокси по хопам, request-id в каждом ответе, cookie, ValidationPipe с плоским списком ошибок, graceful shutdown)
|
|
3
|
+
"version": "0.3.0",
|
|
4
|
+
"description": "Бутстрап процессов NestJS: web на Fastify с периметром (доверенные прокси по хопам, request-id в каждом ответе, cookie, ValidationPipe с плоским списком ошибок, graceful shutdown), consumer с сервером метрик, CLI на nestjs-console с логгером pino; порты и прокси — из валидированного окружения",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"bootstrap",
|
|
7
7
|
"fastify",
|
|
@@ -32,6 +32,16 @@
|
|
|
32
32
|
"default": "./dist/cjs/cli/index.js"
|
|
33
33
|
}
|
|
34
34
|
},
|
|
35
|
+
"./consumer": {
|
|
36
|
+
"import": {
|
|
37
|
+
"types": "./dist/esm/consumer/index.d.ts",
|
|
38
|
+
"default": "./dist/esm/consumer/index.js"
|
|
39
|
+
},
|
|
40
|
+
"require": {
|
|
41
|
+
"types": "./dist/cjs/consumer/index.d.ts",
|
|
42
|
+
"default": "./dist/cjs/consumer/index.js"
|
|
43
|
+
}
|
|
44
|
+
},
|
|
35
45
|
"./package.json": "./package.json",
|
|
36
46
|
"./web": {
|
|
37
47
|
"import": {
|
|
@@ -51,7 +61,7 @@
|
|
|
51
61
|
"dist"
|
|
52
62
|
],
|
|
53
63
|
"scripts": {
|
|
54
|
-
"build": "rm -rf ./dist && node ../../scripts/barrels.mjs create ./src/cli && node ../../scripts/barrels.mjs create ./src/web && tsc --project tsconfig.build.json && tsc --project tsconfig.build.cjs.json && node ../../scripts/barrels.mjs clean ./src && node ../../scripts/mark-cjs.mjs ./dist/cjs",
|
|
64
|
+
"build": "rm -rf ./dist && node ../../scripts/barrels.mjs create ./src/cli && node ../../scripts/barrels.mjs create ./src/consumer && node ../../scripts/barrels.mjs create ./src/web && tsc --project tsconfig.build.json && tsc --project tsconfig.build.cjs.json && node ../../scripts/barrels.mjs clean ./src && node ../../scripts/mark-cjs.mjs ./dist/cjs",
|
|
55
65
|
"lint:tsc": "tsc --noEmit --pretty --project .",
|
|
56
66
|
"test:mutation": "stryker run",
|
|
57
67
|
"test:unit": "vitest run"
|
|
@@ -61,6 +71,7 @@
|
|
|
61
71
|
},
|
|
62
72
|
"devDependencies": {
|
|
63
73
|
"@fastify/cookie": "^11.1.3",
|
|
74
|
+
"@libs-for-dev/nestjs-config-module": "3.0.0",
|
|
64
75
|
"@nestjs/common": "^11.2.7",
|
|
65
76
|
"@nestjs/core": "^11.2.7",
|
|
66
77
|
"@nestjs/platform-fastify": "^11.2.7",
|
|
@@ -81,6 +92,7 @@
|
|
|
81
92
|
},
|
|
82
93
|
"peerDependencies": {
|
|
83
94
|
"@fastify/cookie": "^11.0.0",
|
|
95
|
+
"@libs-for-dev/nestjs-config-module": "^3.0.0",
|
|
84
96
|
"@nestjs/common": "^11.0.0",
|
|
85
97
|
"@nestjs/core": "^11.0.0",
|
|
86
98
|
"@nestjs/platform-fastify": "^11.0.0",
|
|
@@ -94,6 +106,9 @@
|
|
|
94
106
|
"@fastify/cookie": {
|
|
95
107
|
"optional": true
|
|
96
108
|
},
|
|
109
|
+
"@libs-for-dev/nestjs-config-module": {
|
|
110
|
+
"optional": true
|
|
111
|
+
},
|
|
97
112
|
"@nestjs/platform-fastify": {
|
|
98
113
|
"optional": true
|
|
99
114
|
},
|