@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 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 с периметром и CLI на nestjs-console. Состав модулей, Swagger, метрики, порт и
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,3 @@
1
+ import type { DynamicModule, Type } from '@nestjs/common';
2
+ export type ConsumerServerType = (rootModule: DynamicModule | Type, loggerModule: Type) => Promise<void>;
3
+ export declare const consumerBootstrap: (rootModule: Type, server: ConsumerServerType) => Promise<void>;
@@ -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,3 @@
1
+ export declare class ConsumerProcessEnvironment {
2
+ METRICS_PORT: number;
3
+ }
@@ -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,2 @@
1
+ export * from './consumer-bootstrap.js';
2
+ export * from './consumer-process.environment.js';
@@ -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);
@@ -1,2 +1,4 @@
1
1
  export * from './create-fastify-application.js';
2
2
  export * from './fastify-application-options.interface.js';
3
+ export * from './web-bootstrap.js';
4
+ export * from './web-process.environment.js';
@@ -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,4 @@
1
+ export declare class WebProcessEnvironment {
2
+ PORT: number;
3
+ TRUST_PROXY_HOPS: number;
4
+ }
@@ -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,3 @@
1
+ import type { DynamicModule, Type } from '@nestjs/common';
2
+ export type ConsumerServerType = (rootModule: DynamicModule | Type, loggerModule: Type) => Promise<void>;
3
+ export declare const consumerBootstrap: (rootModule: Type, server: ConsumerServerType) => Promise<void>;
@@ -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,3 @@
1
+ export declare class ConsumerProcessEnvironment {
2
+ METRICS_PORT: number;
3
+ }
@@ -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);
@@ -0,0 +1,2 @@
1
+ export * from './consumer-bootstrap.js';
2
+ export * from './consumer-process.environment.js';
@@ -0,0 +1,2 @@
1
+ export * from './consumer-bootstrap.js';
2
+ export * from './consumer-process.environment.js';
@@ -1,2 +1,4 @@
1
1
  export * from './create-fastify-application.js';
2
2
  export * from './fastify-application-options.interface.js';
3
+ export * from './web-bootstrap.js';
4
+ export * from './web-process.environment.js';
@@ -1,2 +1,4 @@
1
1
  export * from './create-fastify-application.js';
2
2
  export * from './fastify-application-options.interface.js';
3
+ export * from './web-bootstrap.js';
4
+ export * from './web-process.environment.js';
@@ -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,4 @@
1
+ export declare class WebProcessEnvironment {
2
+ PORT: number;
3
+ TRUST_PROXY_HOPS: number;
4
+ }
@@ -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.2.4",
4
- "description": "Бутстрап процессов NestJS: web на Fastify с периметром (доверенные прокси по хопам, request-id в каждом ответе, cookie, ValidationPipe с плоским списком ошибок, graceful shutdown) и CLI на nestjs-console с логгером pino",
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
  },