@dudousxd/nestjs-diagnostics 0.3.0 → 0.5.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 +21 -0
- package/README.md +34 -0
- package/dist/capability.d.ts +30 -0
- package/dist/capability.d.ts.map +1 -0
- package/dist/capability.js +11 -0
- package/dist/capability.js.map +1 -0
- package/dist/conformance.d.ts +9 -0
- package/dist/conformance.d.ts.map +1 -0
- package/dist/conformance.js +18 -0
- package/dist/conformance.js.map +1 -0
- package/dist/index.d.ts +3 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -0
- package/dist/index.js.map +1 -1
- package/dist/inject-capability.d.ts +9 -0
- package/dist/inject-capability.d.ts.map +1 -0
- package/dist/inject-capability.js +17 -0
- package/dist/inject-capability.js.map +1 -0
- package/dist/nestjs/diagnostics.explorer.d.ts +20 -0
- package/dist/nestjs/diagnostics.explorer.d.ts.map +1 -0
- package/dist/nestjs/diagnostics.explorer.js +105 -0
- package/dist/nestjs/diagnostics.explorer.js.map +1 -0
- package/dist/nestjs/diagnostics.module.d.ts +6 -0
- package/dist/nestjs/diagnostics.module.d.ts.map +1 -0
- package/dist/nestjs/diagnostics.module.js +26 -0
- package/dist/nestjs/diagnostics.module.js.map +1 -0
- package/dist/nestjs/index.d.ts +6 -0
- package/dist/nestjs/index.d.ts.map +1 -0
- package/dist/nestjs/index.js +5 -0
- package/dist/nestjs/index.js.map +1 -0
- package/dist/nestjs/on-diagnostic.decorator.d.ts +18 -0
- package/dist/nestjs/on-diagnostic.decorator.d.ts.map +1 -0
- package/dist/nestjs/on-diagnostic.decorator.js +20 -0
- package/dist/nestjs/on-diagnostic.decorator.js.map +1 -0
- package/package.json +27 -1
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,26 @@
|
|
|
1
1
|
# @dudousxd/nestjs-diagnostics
|
|
2
2
|
|
|
3
|
+
## 0.5.0
|
|
4
|
+
|
|
5
|
+
### Minor Changes
|
|
6
|
+
|
|
7
|
+
- [`ade4cad`](https://github.com/DavideCarvalho/nestjs-diagnostics/commit/ade4cad4ce96dc1e8a83d136f7f15477cf3183fb) - Add the "capabilities" half of the integration protocol, alongside the existing event transport:
|
|
8
|
+
|
|
9
|
+
- `capability(lib, name)` — single canonical source for cross-lib DI token names (`@dudousxd/nestjs-<lib>:<name>` via `Symbol.for`), the mirror of `channelName`.
|
|
10
|
+
- `CapabilityRegistry` (augmentable via declaration merging) + `CapabilityOf<TLib, TName>` — the typed registry mirroring `ChannelRegistry`/`PayloadOf`.
|
|
11
|
+
- `InjectCapability(lib, name)` — optional, typed parameter injector equivalent to `@Optional() @Inject(capability(lib, name))`, removing hand-copied magic-string tokens between libraries.
|
|
12
|
+
- `assertCapabilityNaming(lib, tokens)` — contract-test helper that turns token-naming drift into a failing test.
|
|
13
|
+
|
|
14
|
+
## 0.4.0
|
|
15
|
+
|
|
16
|
+
### Minor Changes
|
|
17
|
+
|
|
18
|
+
- [`5d035d1`](https://github.com/DavideCarvalho/nestjs-diagnostics/commit/5d035d11263b40b2af1aaa18c1ffc6f03ec66df3) - Add the `@dudousxd/nestjs-diagnostics/nestjs` subpath: `@OnDiagnostic(lib, event?)`,
|
|
19
|
+
`DiagnosticsModule.forRoot()`, and a `DiscoveryService` explorer that subscribes
|
|
20
|
+
diagnostics channels to provider methods for ergonomic, DI-friendly in-app
|
|
21
|
+
reactions. `@nestjs/*` are optional peers; the main barrel stays
|
|
22
|
+
framework-agnostic.
|
|
23
|
+
|
|
3
24
|
## 0.3.0
|
|
4
25
|
|
|
5
26
|
### Minor Changes
|
package/README.md
CHANGED
|
@@ -98,6 +98,40 @@ watcher records every diagnostic event in the Telescope dashboard.
|
|
|
98
98
|
| `CONTEXT_ACCESSOR` | Shared DI token for the optional context accessor. |
|
|
99
99
|
| `DiagnosticEvent`, `EmitOptions`, `ContextAccessor` | Types. |
|
|
100
100
|
|
|
101
|
+
## Reacting to events in NestJS — `@OnDiagnostic`
|
|
102
|
+
|
|
103
|
+
The `@dudousxd/nestjs-diagnostics/nestjs` subpath adds an ergonomic way to react
|
|
104
|
+
to any `aviary:<lib>:<event>` in a NestJS app — no extra event library. Register
|
|
105
|
+
the module once, then decorate provider methods:
|
|
106
|
+
|
|
107
|
+
```ts
|
|
108
|
+
import { Module } from '@nestjs/common';
|
|
109
|
+
import { DiagnosticsModule } from '@dudousxd/nestjs-diagnostics/nestjs';
|
|
110
|
+
|
|
111
|
+
@Module({ imports: [DiagnosticsModule.forRoot()] })
|
|
112
|
+
export class AppModule {}
|
|
113
|
+
```
|
|
114
|
+
|
|
115
|
+
```ts
|
|
116
|
+
import { Injectable } from '@nestjs/common';
|
|
117
|
+
import { OnDiagnostic } from '@dudousxd/nestjs-diagnostics/nestjs';
|
|
118
|
+
import type { DiagnosticEvent } from '@dudousxd/nestjs-diagnostics';
|
|
119
|
+
|
|
120
|
+
@Injectable()
|
|
121
|
+
export class Reactions {
|
|
122
|
+
@OnDiagnostic('resilience', 'circuit-opened') // one exact channel
|
|
123
|
+
onCircuitOpen(e: DiagnosticEvent) { /* … */ }
|
|
124
|
+
|
|
125
|
+
@OnDiagnostic('resilience') // every aviary:resilience:* channel
|
|
126
|
+
onAnyResilience(e: DiagnosticEvent) { /* … */ }
|
|
127
|
+
}
|
|
128
|
+
```
|
|
129
|
+
|
|
130
|
+
A handler runs on the DI-resolved instance (injected dependencies work). A
|
|
131
|
+
handler that throws or rejects is logged and swallowed — it can never break the
|
|
132
|
+
code that emitted. `@nestjs/common` + `@nestjs/core` are optional peers; the main
|
|
133
|
+
barrel stays framework-agnostic.
|
|
134
|
+
|
|
101
135
|
## License
|
|
102
136
|
|
|
103
137
|
MIT
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* O token de DI estável para a capability `<lib>:<name>`. Fonte única do naming
|
|
3
|
+
* `@dudousxd/nestjs-<lib>:<name>`. Como usa o registry global de símbolos
|
|
4
|
+
* (`Symbol.for`), produtor e consumidor em libs diferentes — sem se importarem —
|
|
5
|
+
* resolvem o MESMO símbolo. Espelha o `channelName(lib, event)` do transporte de
|
|
6
|
+
* eventos, do outro lado do mesmo protocolo.
|
|
7
|
+
*/
|
|
8
|
+
export declare function capability(lib: string, name: string): symbol;
|
|
9
|
+
/**
|
|
10
|
+
* Registry tipado de capabilities, augmentado pelas libs via declaration merging
|
|
11
|
+
* — espelho exato do `ChannelRegistry` do transporte de eventos. Vazio por
|
|
12
|
+
* padrão; o caminho não-tipado (`unknown`) está sempre disponível.
|
|
13
|
+
*
|
|
14
|
+
* ```ts
|
|
15
|
+
* declare module '@dudousxd/nestjs-diagnostics' {
|
|
16
|
+
* interface CapabilityRegistry {
|
|
17
|
+
* context: { accessor: ContextAccessor };
|
|
18
|
+
* }
|
|
19
|
+
* }
|
|
20
|
+
* ```
|
|
21
|
+
*/
|
|
22
|
+
export interface CapabilityRegistry {
|
|
23
|
+
}
|
|
24
|
+
/**
|
|
25
|
+
* O tipo declarado para `(TLib, TName)` no {@link CapabilityRegistry}, ou
|
|
26
|
+
* `unknown` quando o par não está registrado. Espelha `PayloadOf` do
|
|
27
|
+
* transporte de eventos.
|
|
28
|
+
*/
|
|
29
|
+
export type CapabilityOf<TLib extends string, TName extends string> = TLib extends keyof CapabilityRegistry ? TName extends keyof CapabilityRegistry[TLib] ? CapabilityRegistry[TLib][TName] : unknown : unknown;
|
|
30
|
+
//# sourceMappingURL=capability.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"capability.d.ts","sourceRoot":"","sources":["../src/capability.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AACH,wBAAgB,UAAU,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,CAE5D;AAED;;;;;;;;;;;;GAYG;AACH,MAAM,WAAW,kBAAkB;CAAG;AAEtC;;;;GAIG;AACH,MAAM,MAAM,YAAY,CACtB,IAAI,SAAS,MAAM,EACnB,KAAK,SAAS,MAAM,IAClB,IAAI,SAAS,MAAM,kBAAkB,GACrC,KAAK,SAAS,MAAM,kBAAkB,CAAC,IAAI,CAAC,GAC1C,kBAAkB,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,GAC/B,OAAO,GACT,OAAO,CAAC"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* O token de DI estável para a capability `<lib>:<name>`. Fonte única do naming
|
|
3
|
+
* `@dudousxd/nestjs-<lib>:<name>`. Como usa o registry global de símbolos
|
|
4
|
+
* (`Symbol.for`), produtor e consumidor em libs diferentes — sem se importarem —
|
|
5
|
+
* resolvem o MESMO símbolo. Espelha o `channelName(lib, event)` do transporte de
|
|
6
|
+
* eventos, do outro lado do mesmo protocolo.
|
|
7
|
+
*/
|
|
8
|
+
export function capability(lib, name) {
|
|
9
|
+
return Symbol.for(`@dudousxd/nestjs-${lib}:${name}`);
|
|
10
|
+
}
|
|
11
|
+
//# sourceMappingURL=capability.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"capability.js","sourceRoot":"","sources":["../src/capability.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AACH,MAAM,UAAU,UAAU,CAAC,GAAW,EAAE,IAAY;IAClD,OAAO,MAAM,CAAC,GAAG,CAAC,oBAAoB,GAAG,IAAI,IAAI,EAAE,CAAC,CAAC;AACvD,CAAC"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Trava anti-drift para contract tests: assere que TODO token exportado por uma
|
|
3
|
+
* lib segue o naming canônico `@dudousxd/nestjs-<lib>:<name>` (i.e. foi criado
|
|
4
|
+
* por `capability(lib, ...)`). `Symbol.for(k).description === k`, então basta
|
|
5
|
+
* checar o prefixo da `description` — não é preciso comparar identidade.
|
|
6
|
+
* Lança um erro que NOMEIA o export ofensor, virando o drift em teste vermelho.
|
|
7
|
+
*/
|
|
8
|
+
export declare function assertCapabilityNaming(lib: string, tokens: Record<string, symbol>): void;
|
|
9
|
+
//# sourceMappingURL=conformance.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"conformance.d.ts","sourceRoot":"","sources":["../src/conformance.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AACH,wBAAgB,sBAAsB,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,IAAI,CAWxF"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Trava anti-drift para contract tests: assere que TODO token exportado por uma
|
|
3
|
+
* lib segue o naming canônico `@dudousxd/nestjs-<lib>:<name>` (i.e. foi criado
|
|
4
|
+
* por `capability(lib, ...)`). `Symbol.for(k).description === k`, então basta
|
|
5
|
+
* checar o prefixo da `description` — não é preciso comparar identidade.
|
|
6
|
+
* Lança um erro que NOMEIA o export ofensor, virando o drift em teste vermelho.
|
|
7
|
+
*/
|
|
8
|
+
export function assertCapabilityNaming(lib, tokens) {
|
|
9
|
+
const prefix = `@dudousxd/nestjs-${lib}:`;
|
|
10
|
+
for (const [exportName, token] of Object.entries(tokens)) {
|
|
11
|
+
const desc = token.description;
|
|
12
|
+
if (desc === undefined || !desc.startsWith(prefix)) {
|
|
13
|
+
throw new Error(`Capability token "${exportName}" has description ${JSON.stringify(desc)}, ` +
|
|
14
|
+
`expected to start with "${prefix}". Use capability('${lib}', <name>).`);
|
|
15
|
+
}
|
|
16
|
+
}
|
|
17
|
+
}
|
|
18
|
+
//# sourceMappingURL=conformance.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"conformance.js","sourceRoot":"","sources":["../src/conformance.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AACH,MAAM,UAAU,sBAAsB,CAAC,GAAW,EAAE,MAA8B;IAChF,MAAM,MAAM,GAAG,oBAAoB,GAAG,GAAG,CAAC;IAC1C,KAAK,MAAM,CAAC,UAAU,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC;QACzD,MAAM,IAAI,GAAG,KAAK,CAAC,WAAW,CAAC;QAC/B,IAAI,IAAI,KAAK,SAAS,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,EAAE,CAAC;YACnD,MAAM,IAAI,KAAK,CACb,qBAAqB,UAAU,qBAAqB,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI;gBAC1E,2BAA2B,MAAM,sBAAsB,GAAG,aAAa,CAC1E,CAAC;QACJ,CAAC;IACH,CAAC;AACH,CAAC"}
|
package/dist/index.d.ts
CHANGED
|
@@ -1,3 +1,6 @@
|
|
|
1
|
+
export { capability } from './capability.js';
|
|
2
|
+
export type { CapabilityOf, CapabilityRegistry } from './capability.js';
|
|
3
|
+
export { assertCapabilityNaming } from './conformance.js';
|
|
1
4
|
export { CHANNEL_PREFIX, channelName, emit, getChannel, SCHEMA_VERSION } from './channel.js';
|
|
2
5
|
export { CONTEXT_ACCESSOR, type ContextAccessor, type ContextStore, getContextAccessor, resolveTraceId, setContextAccessor, type UserRef, } from './context-accessor.js';
|
|
3
6
|
export { onChannelRegistered, registerChannel, registeredChannels, resetRegistry, } from './registry.js';
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,WAAW,EAAE,IAAI,EAAE,UAAU,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAC7F,OAAO,EACL,gBAAgB,EAChB,KAAK,eAAe,EACpB,KAAK,YAAY,EACjB,kBAAkB,EAClB,cAAc,EACd,kBAAkB,EAClB,KAAK,OAAO,GACb,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EACL,mBAAmB,EACnB,eAAe,EACf,kBAAkB,EAClB,aAAa,GACd,MAAM,eAAe,CAAC;AACvB,OAAO,EACL,mBAAmB,EACnB,KAAK,EACL,KAAK,iBAAiB,EACtB,iBAAiB,EACjB,KAAK,cAAc,EACnB,cAAc,GACf,MAAM,YAAY,CAAC;AACpB,YAAY,EACV,eAAe,EACf,eAAe,EACf,WAAW,EACX,OAAO,EACP,KAAK,EACL,SAAS,EACT,SAAS,EACT,SAAS,EACT,YAAY,GACb,MAAM,YAAY,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAC7C,YAAY,EAAE,YAAY,EAAE,kBAAkB,EAAE,MAAM,iBAAiB,CAAC;AACxE,OAAO,EAAE,sBAAsB,EAAE,MAAM,kBAAkB,CAAC;AAC1D,OAAO,EAAE,cAAc,EAAE,WAAW,EAAE,IAAI,EAAE,UAAU,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAC7F,OAAO,EACL,gBAAgB,EAChB,KAAK,eAAe,EACpB,KAAK,YAAY,EACjB,kBAAkB,EAClB,cAAc,EACd,kBAAkB,EAClB,KAAK,OAAO,GACb,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EACL,mBAAmB,EACnB,eAAe,EACf,kBAAkB,EAClB,aAAa,GACd,MAAM,eAAe,CAAC;AACvB,OAAO,EACL,mBAAmB,EACnB,KAAK,EACL,KAAK,iBAAiB,EACtB,iBAAiB,EACjB,KAAK,cAAc,EACnB,cAAc,GACf,MAAM,YAAY,CAAC;AACpB,YAAY,EACV,eAAe,EACf,eAAe,EACf,WAAW,EACX,OAAO,EACP,KAAK,EACL,SAAS,EACT,SAAS,EACT,SAAS,EACT,YAAY,GACb,MAAM,YAAY,CAAC"}
|
package/dist/index.js
CHANGED
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
export { capability } from './capability.js';
|
|
2
|
+
export { assertCapabilityNaming } from './conformance.js';
|
|
1
3
|
export { CHANNEL_PREFIX, channelName, emit, getChannel, SCHEMA_VERSION } from './channel.js';
|
|
2
4
|
export { CONTEXT_ACCESSOR, getContextAccessor, resolveTraceId, setContextAccessor, } from './context-accessor.js';
|
|
3
5
|
export { onChannelRegistered, registerChannel, registeredChannels, resetRegistry, } from './registry.js';
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,WAAW,EAAE,IAAI,EAAE,UAAU,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAC7F,OAAO,EACL,gBAAgB,EAGhB,kBAAkB,EAClB,cAAc,EACd,kBAAkB,GAEnB,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EACL,mBAAmB,EACnB,eAAe,EACf,kBAAkB,EAClB,aAAa,GACd,MAAM,eAAe,CAAC;AACvB,OAAO,EACL,mBAAmB,EACnB,KAAK,EAEL,iBAAiB,EAEjB,cAAc,GACf,MAAM,YAAY,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAE7C,OAAO,EAAE,sBAAsB,EAAE,MAAM,kBAAkB,CAAC;AAC1D,OAAO,EAAE,cAAc,EAAE,WAAW,EAAE,IAAI,EAAE,UAAU,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAC7F,OAAO,EACL,gBAAgB,EAGhB,kBAAkB,EAClB,cAAc,EACd,kBAAkB,GAEnB,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EACL,mBAAmB,EACnB,eAAe,EACf,kBAAkB,EAClB,aAAa,GACd,MAAM,eAAe,CAAC;AACvB,OAAO,EACL,mBAAmB,EACnB,KAAK,EAEL,iBAAiB,EAEjB,cAAc,GACf,MAAM,YAAY,CAAC"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Injeta a capability de um peer `<lib>:<name>` OPCIONALMENTE — equivale a
|
|
3
|
+
* `@Optional() @Inject(capability(lib, name))`, sem a string mágica copiada à
|
|
4
|
+
* mão. Quando o produtor (a outra lib) está ausente, o parâmetro recebe
|
|
5
|
+
* `undefined` em vez de quebrar a injeção. O tipo do parâmetro é anotado pelo
|
|
6
|
+
* consumidor (ver nota no plano sobre declaration merging cross-repo).
|
|
7
|
+
*/
|
|
8
|
+
export declare function InjectCapability(lib: string, name: string): ParameterDecorator;
|
|
9
|
+
//# sourceMappingURL=inject-capability.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"inject-capability.d.ts","sourceRoot":"","sources":["../src/inject-capability.ts"],"names":[],"mappings":"AAGA;;;;;;GAMG;AACH,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,kBAAkB,CAM9E"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { Inject, Optional } from '@nestjs/common';
|
|
2
|
+
import { capability } from './capability.js';
|
|
3
|
+
/**
|
|
4
|
+
* Injeta a capability de um peer `<lib>:<name>` OPCIONALMENTE — equivale a
|
|
5
|
+
* `@Optional() @Inject(capability(lib, name))`, sem a string mágica copiada à
|
|
6
|
+
* mão. Quando o produtor (a outra lib) está ausente, o parâmetro recebe
|
|
7
|
+
* `undefined` em vez de quebrar a injeção. O tipo do parâmetro é anotado pelo
|
|
8
|
+
* consumidor (ver nota no plano sobre declaration merging cross-repo).
|
|
9
|
+
*/
|
|
10
|
+
export function InjectCapability(lib, name) {
|
|
11
|
+
const token = capability(lib, name);
|
|
12
|
+
return (target, propertyKey, parameterIndex) => {
|
|
13
|
+
Optional()(target, propertyKey, parameterIndex);
|
|
14
|
+
Inject(token)(target, propertyKey, parameterIndex);
|
|
15
|
+
};
|
|
16
|
+
}
|
|
17
|
+
//# sourceMappingURL=inject-capability.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"inject-capability.js","sourceRoot":"","sources":["../src/inject-capability.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAClD,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAE7C;;;;;;GAMG;AACH,MAAM,UAAU,gBAAgB,CAAC,GAAW,EAAE,IAAY;IACxD,MAAM,KAAK,GAAG,UAAU,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;IACpC,OAAO,CAAC,MAAM,EAAE,WAAW,EAAE,cAAc,EAAE,EAAE;QAC7C,QAAQ,EAAE,CAAC,MAAM,EAAE,WAAW,EAAE,cAAc,CAAC,CAAC;QAChD,MAAM,CAAC,KAAK,CAAC,CAAC,MAAM,EAAE,WAAW,EAAE,cAAc,CAAC,CAAC;IACrD,CAAC,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { type OnApplicationBootstrap, type OnApplicationShutdown } from '@nestjs/common';
|
|
2
|
+
import { DiscoveryService, MetadataScanner } from '@nestjs/core';
|
|
3
|
+
export declare class DiagnosticsExplorer implements OnApplicationBootstrap, OnApplicationShutdown {
|
|
4
|
+
private readonly discovery;
|
|
5
|
+
private readonly scanner;
|
|
6
|
+
private readonly logger;
|
|
7
|
+
private readonly subscriptions;
|
|
8
|
+
private readonly wildcards;
|
|
9
|
+
private offChannelRegistered;
|
|
10
|
+
constructor(discovery: DiscoveryService, scanner: MetadataScanner);
|
|
11
|
+
onApplicationBootstrap(): void;
|
|
12
|
+
onApplicationShutdown(): void;
|
|
13
|
+
/** Subscribe once to `name`; the listener fans the envelope into `invoke`. */
|
|
14
|
+
private subscribe;
|
|
15
|
+
/** Invoke a handler, swallowing sync throws and async rejections so a buggy
|
|
16
|
+
* reaction can never break the synchronous `emit()` that triggered it. */
|
|
17
|
+
private safeInvoke;
|
|
18
|
+
private logError;
|
|
19
|
+
}
|
|
20
|
+
//# sourceMappingURL=diagnostics.explorer.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"diagnostics.explorer.d.ts","sourceRoot":"","sources":["../../src/nestjs/diagnostics.explorer.ts"],"names":[],"mappings":"AACA,OAAO,EAIL,KAAK,sBAAsB,EAC3B,KAAK,qBAAqB,EAC3B,MAAM,gBAAgB,CAAC;AACxB,OAAO,EAAE,gBAAgB,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AAQjE,qBACa,mBAAoB,YAAW,sBAAsB,EAAE,qBAAqB;IAO3D,OAAO,CAAC,QAAQ,CAAC,SAAS;IAC3B,OAAO,CAAC,QAAQ,CAAC,OAAO;IAPnD,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAqC;IAC5D,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAiE;IAC/F,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAiD;IAC3E,OAAO,CAAC,oBAAoB,CAA6B;gBAGZ,SAAS,EAAE,gBAAgB,EAC5B,OAAO,EAAE,eAAe;IAGpE,sBAAsB,IAAI,IAAI;IA+B9B,qBAAqB,IAAI,IAAI;IAU7B,8EAA8E;IAC9E,OAAO,CAAC,SAAS;IAMjB;+EAC2E;IAC3E,OAAO,CAAC,UAAU;IAgBlB,OAAO,CAAC,QAAQ;CAIjB"}
|
|
@@ -0,0 +1,105 @@
|
|
|
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
|
+
var __param = (this && this.__param) || function (paramIndex, decorator) {
|
|
11
|
+
return function (target, key) { decorator(target, key, paramIndex); }
|
|
12
|
+
};
|
|
13
|
+
import diagnostics_channel from 'node:diagnostics_channel';
|
|
14
|
+
import { Inject, Injectable, Logger, } from '@nestjs/common';
|
|
15
|
+
import { DiscoveryService, MetadataScanner } from '@nestjs/core';
|
|
16
|
+
import { CHANNEL_PREFIX, channelName } from '../channel.js';
|
|
17
|
+
import { onChannelRegistered, registeredChannels } from '../registry.js';
|
|
18
|
+
import { ON_DIAGNOSTIC_META } from './on-diagnostic.decorator.js';
|
|
19
|
+
let DiagnosticsExplorer = class DiagnosticsExplorer {
|
|
20
|
+
discovery;
|
|
21
|
+
scanner;
|
|
22
|
+
logger = new Logger('DiagnosticsExplorer');
|
|
23
|
+
subscriptions = [];
|
|
24
|
+
wildcards = [];
|
|
25
|
+
offChannelRegistered = null;
|
|
26
|
+
constructor(discovery, scanner) {
|
|
27
|
+
this.discovery = discovery;
|
|
28
|
+
this.scanner = scanner;
|
|
29
|
+
}
|
|
30
|
+
onApplicationBootstrap() {
|
|
31
|
+
for (const wrapper of this.discovery.getProviders()) {
|
|
32
|
+
const instance = wrapper.instance;
|
|
33
|
+
if (!instance || typeof instance !== 'object')
|
|
34
|
+
continue;
|
|
35
|
+
const proto = Object.getPrototypeOf(instance);
|
|
36
|
+
for (const methodName of this.scanner.getAllMethodNames(proto)) {
|
|
37
|
+
const metas = Reflect.getMetadata(ON_DIAGNOSTIC_META, proto, methodName);
|
|
38
|
+
if (!metas?.length)
|
|
39
|
+
continue;
|
|
40
|
+
for (const meta of metas) {
|
|
41
|
+
const invoke = (event) => this.safeInvoke(instance, methodName, event);
|
|
42
|
+
if (meta.event !== undefined) {
|
|
43
|
+
this.subscribe(channelName(meta.lib, meta.event), invoke);
|
|
44
|
+
}
|
|
45
|
+
else {
|
|
46
|
+
const prefix = `${CHANNEL_PREFIX}:${meta.lib}:`;
|
|
47
|
+
this.wildcards.push({ prefix, invoke });
|
|
48
|
+
for (const name of registeredChannels()) {
|
|
49
|
+
if (name.startsWith(prefix))
|
|
50
|
+
this.subscribe(name, invoke);
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
this.offChannelRegistered = onChannelRegistered((name) => {
|
|
57
|
+
for (const w of this.wildcards) {
|
|
58
|
+
if (name.startsWith(w.prefix))
|
|
59
|
+
this.subscribe(name, w.invoke);
|
|
60
|
+
}
|
|
61
|
+
});
|
|
62
|
+
}
|
|
63
|
+
onApplicationShutdown() {
|
|
64
|
+
this.offChannelRegistered?.();
|
|
65
|
+
this.offChannelRegistered = null;
|
|
66
|
+
for (const { name, listener } of this.subscriptions) {
|
|
67
|
+
diagnostics_channel.channel(name).unsubscribe(listener);
|
|
68
|
+
}
|
|
69
|
+
this.subscriptions.length = 0;
|
|
70
|
+
this.wildcards.length = 0;
|
|
71
|
+
}
|
|
72
|
+
/** Subscribe once to `name`; the listener fans the envelope into `invoke`. */
|
|
73
|
+
subscribe(name, invoke) {
|
|
74
|
+
const listener = (msg) => invoke(msg);
|
|
75
|
+
diagnostics_channel.channel(name).subscribe(listener);
|
|
76
|
+
this.subscriptions.push({ name, listener });
|
|
77
|
+
}
|
|
78
|
+
/** Invoke a handler, swallowing sync throws and async rejections so a buggy
|
|
79
|
+
* reaction can never break the synchronous `emit()` that triggered it. */
|
|
80
|
+
safeInvoke(instance, methodName, event) {
|
|
81
|
+
try {
|
|
82
|
+
const fn = instance[methodName];
|
|
83
|
+
const result = fn.call(instance, event);
|
|
84
|
+
if (result != null && typeof result.then === 'function') {
|
|
85
|
+
result.catch((err) => this.logError(methodName, err));
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
catch (err) {
|
|
89
|
+
this.logError(methodName, err);
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
logError(methodName, err) {
|
|
93
|
+
const message = err instanceof Error ? err.message : String(err);
|
|
94
|
+
this.logger.error(`@OnDiagnostic ${methodName} handler failed: ${message}`);
|
|
95
|
+
}
|
|
96
|
+
};
|
|
97
|
+
DiagnosticsExplorer = __decorate([
|
|
98
|
+
Injectable(),
|
|
99
|
+
__param(0, Inject(DiscoveryService)),
|
|
100
|
+
__param(1, Inject(MetadataScanner)),
|
|
101
|
+
__metadata("design:paramtypes", [DiscoveryService,
|
|
102
|
+
MetadataScanner])
|
|
103
|
+
], DiagnosticsExplorer);
|
|
104
|
+
export { DiagnosticsExplorer };
|
|
105
|
+
//# sourceMappingURL=diagnostics.explorer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"diagnostics.explorer.js","sourceRoot":"","sources":["../../src/nestjs/diagnostics.explorer.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"diagnostics.module.d.ts","sourceRoot":"","sources":["../../src/nestjs/diagnostics.module.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,aAAa,EAAU,MAAM,gBAAgB,CAAC;AAI5D,qBACa,iBAAiB;IAC5B,8EAA8E;IAC9E,MAAM,CAAC,OAAO,IAAI,aAAa;CAQhC"}
|
|
@@ -0,0 +1,26 @@
|
|
|
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 DiagnosticsModule_1;
|
|
8
|
+
import { Module } from '@nestjs/common';
|
|
9
|
+
import { DiscoveryModule } from '@nestjs/core';
|
|
10
|
+
import { DiagnosticsExplorer } from './diagnostics.explorer.js';
|
|
11
|
+
let DiagnosticsModule = DiagnosticsModule_1 = class DiagnosticsModule {
|
|
12
|
+
/** Register once at the app root; enables `@OnDiagnostic` on any provider. */
|
|
13
|
+
static forRoot() {
|
|
14
|
+
return {
|
|
15
|
+
module: DiagnosticsModule_1,
|
|
16
|
+
global: true,
|
|
17
|
+
imports: [DiscoveryModule],
|
|
18
|
+
providers: [DiagnosticsExplorer],
|
|
19
|
+
};
|
|
20
|
+
}
|
|
21
|
+
};
|
|
22
|
+
DiagnosticsModule = DiagnosticsModule_1 = __decorate([
|
|
23
|
+
Module({})
|
|
24
|
+
], DiagnosticsModule);
|
|
25
|
+
export { DiagnosticsModule };
|
|
26
|
+
//# sourceMappingURL=diagnostics.module.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"diagnostics.module.js","sourceRoot":"","sources":["../../src/nestjs/diagnostics.module.ts"],"names":[],"mappings":";;;;;;;AAAA,OAAO,EAAsB,MAAM,EAAE,MAAM,gBAAgB,CAAC;AAC5D,OAAO,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AAC/C,OAAO,EAAE,mBAAmB,EAAE,MAAM,2BAA2B,CAAC;AAGzD,IAAM,iBAAiB,yBAAvB,MAAM,iBAAiB;IAC5B,8EAA8E;IAC9E,MAAM,CAAC,OAAO;QACZ,OAAO;YACL,MAAM,EAAE,mBAAiB;YACzB,MAAM,EAAE,IAAI;YACZ,OAAO,EAAE,CAAC,eAAe,CAAC;YAC1B,SAAS,EAAE,CAAC,mBAAmB,CAAC;SACjC,CAAC;IACJ,CAAC;CACF,CAAA;AAVY,iBAAiB;IAD7B,MAAM,CAAC,EAAE,CAAC;GACE,iBAAiB,CAU7B"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
export { ON_DIAGNOSTIC_META, OnDiagnostic } from './on-diagnostic.decorator.js';
|
|
2
|
+
export type { OnDiagnosticMeta } from './on-diagnostic.decorator.js';
|
|
3
|
+
export { DiagnosticsModule } from './diagnostics.module.js';
|
|
4
|
+
export { DiagnosticsExplorer } from './diagnostics.explorer.js';
|
|
5
|
+
export { InjectCapability } from '../inject-capability.js';
|
|
6
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/nestjs/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,YAAY,EAAE,MAAM,8BAA8B,CAAC;AAChF,YAAY,EAAE,gBAAgB,EAAE,MAAM,8BAA8B,CAAC;AACrE,OAAO,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAC;AAC5D,OAAO,EAAE,mBAAmB,EAAE,MAAM,2BAA2B,CAAC;AAChE,OAAO,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC"}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
export { ON_DIAGNOSTIC_META, OnDiagnostic } from './on-diagnostic.decorator.js';
|
|
2
|
+
export { DiagnosticsModule } from './diagnostics.module.js';
|
|
3
|
+
export { DiagnosticsExplorer } from './diagnostics.explorer.js';
|
|
4
|
+
export { InjectCapability } from '../inject-capability.js';
|
|
5
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/nestjs/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,YAAY,EAAE,MAAM,8BAA8B,CAAC;AAEhF,OAAO,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAC;AAC5D,OAAO,EAAE,mBAAmB,EAAE,MAAM,2BAA2B,CAAC;AAChE,OAAO,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
/** Metadata key under which a method's @OnDiagnostic subscriptions accumulate. */
|
|
2
|
+
export declare const ON_DIAGNOSTIC_META: unique symbol;
|
|
3
|
+
/** One subscription declared on a method. `event` omitted = every event of `lib`. */
|
|
4
|
+
export interface OnDiagnosticMeta {
|
|
5
|
+
lib: string;
|
|
6
|
+
event?: string;
|
|
7
|
+
}
|
|
8
|
+
/**
|
|
9
|
+
* Subscribe a provider method to a diagnostics channel. Requires
|
|
10
|
+
* `DiagnosticsModule.forRoot()` to be imported so the explorer wires it up.
|
|
11
|
+
*
|
|
12
|
+
* - `@OnDiagnostic('resilience', 'circuit-opened')` — the exact channel.
|
|
13
|
+
* - `@OnDiagnostic('resilience')` — every `aviary:resilience:*` channel (current + future).
|
|
14
|
+
*
|
|
15
|
+
* Stackable: apply more than once to react to several channels with one method.
|
|
16
|
+
*/
|
|
17
|
+
export declare function OnDiagnostic(lib: string, event?: string): MethodDecorator;
|
|
18
|
+
//# sourceMappingURL=on-diagnostic.decorator.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"on-diagnostic.decorator.d.ts","sourceRoot":"","sources":["../../src/nestjs/on-diagnostic.decorator.ts"],"names":[],"mappings":"AAAA,kFAAkF;AAClF,eAAO,MAAM,kBAAkB,eAA2B,CAAC;AAE3D,qFAAqF;AACrF,MAAM,WAAW,gBAAgB;IAC/B,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED;;;;;;;;GAQG;AACH,wBAAgB,YAAY,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM,GAAG,eAAe,CAQzE"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
/** Metadata key under which a method's @OnDiagnostic subscriptions accumulate. */
|
|
2
|
+
export const ON_DIAGNOSTIC_META = Symbol('diagnostics:on');
|
|
3
|
+
/**
|
|
4
|
+
* Subscribe a provider method to a diagnostics channel. Requires
|
|
5
|
+
* `DiagnosticsModule.forRoot()` to be imported so the explorer wires it up.
|
|
6
|
+
*
|
|
7
|
+
* - `@OnDiagnostic('resilience', 'circuit-opened')` — the exact channel.
|
|
8
|
+
* - `@OnDiagnostic('resilience')` — every `aviary:resilience:*` channel (current + future).
|
|
9
|
+
*
|
|
10
|
+
* Stackable: apply more than once to react to several channels with one method.
|
|
11
|
+
*/
|
|
12
|
+
export function OnDiagnostic(lib, event) {
|
|
13
|
+
return (target, key) => {
|
|
14
|
+
const existing = Reflect.getMetadata(ON_DIAGNOSTIC_META, target, key) ??
|
|
15
|
+
[];
|
|
16
|
+
const meta = { lib, ...(event !== undefined ? { event } : {}) };
|
|
17
|
+
Reflect.defineMetadata(ON_DIAGNOSTIC_META, [...existing, meta], target, key);
|
|
18
|
+
};
|
|
19
|
+
}
|
|
20
|
+
//# sourceMappingURL=on-diagnostic.decorator.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"on-diagnostic.decorator.js","sourceRoot":"","sources":["../../src/nestjs/on-diagnostic.decorator.ts"],"names":[],"mappings":"AAAA,kFAAkF;AAClF,MAAM,CAAC,MAAM,kBAAkB,GAAG,MAAM,CAAC,gBAAgB,CAAC,CAAC;AAQ3D;;;;;;;;GAQG;AACH,MAAM,UAAU,YAAY,CAAC,GAAW,EAAE,KAAc;IACtD,OAAO,CAAC,MAAM,EAAE,GAAG,EAAE,EAAE;QACrB,MAAM,QAAQ,GACX,OAAO,CAAC,WAAW,CAAC,kBAAkB,EAAE,MAAM,EAAE,GAAG,CAAoC;YACxF,EAAE,CAAC;QACL,MAAM,IAAI,GAAqB,EAAE,GAAG,EAAE,GAAG,CAAC,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC;QAClF,OAAO,CAAC,cAAc,CAAC,kBAAkB,EAAE,CAAC,GAAG,QAAQ,EAAE,IAAI,CAAC,EAAE,MAAM,EAAE,GAAG,CAAC,CAAC;IAC/E,CAAC,CAAC;AACJ,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@dudousxd/nestjs-diagnostics",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.5.0",
|
|
4
4
|
"description": "A standard convention for @dudousxd/nestjs-* libs to emit observability events over node:diagnostics_channel.",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"repository": {
|
|
@@ -17,6 +17,27 @@
|
|
|
17
17
|
"types": "./dist/index.d.ts",
|
|
18
18
|
"import": "./dist/index.js",
|
|
19
19
|
"default": "./dist/index.js"
|
|
20
|
+
},
|
|
21
|
+
"./nestjs": {
|
|
22
|
+
"types": "./dist/nestjs/index.d.ts",
|
|
23
|
+
"import": "./dist/nestjs/index.js",
|
|
24
|
+
"default": "./dist/nestjs/index.js"
|
|
25
|
+
}
|
|
26
|
+
},
|
|
27
|
+
"peerDependencies": {
|
|
28
|
+
"@nestjs/common": "^10 || ^11",
|
|
29
|
+
"@nestjs/core": "^10 || ^11",
|
|
30
|
+
"reflect-metadata": "^0.2"
|
|
31
|
+
},
|
|
32
|
+
"peerDependenciesMeta": {
|
|
33
|
+
"@nestjs/common": {
|
|
34
|
+
"optional": true
|
|
35
|
+
},
|
|
36
|
+
"@nestjs/core": {
|
|
37
|
+
"optional": true
|
|
38
|
+
},
|
|
39
|
+
"reflect-metadata": {
|
|
40
|
+
"optional": true
|
|
20
41
|
}
|
|
21
42
|
},
|
|
22
43
|
"files": [
|
|
@@ -36,8 +57,13 @@
|
|
|
36
57
|
"**/trace.ts"
|
|
37
58
|
],
|
|
38
59
|
"devDependencies": {
|
|
60
|
+
"@nestjs/common": "^11",
|
|
61
|
+
"@nestjs/core": "^11",
|
|
62
|
+
"@nestjs/testing": "^11",
|
|
39
63
|
"@types/node": "^20.0.0",
|
|
64
|
+
"reflect-metadata": "^0.2",
|
|
40
65
|
"typescript": "^5.4.0",
|
|
66
|
+
"unplugin-swc": "^1.5.1",
|
|
41
67
|
"vitest": "^3.0.0"
|
|
42
68
|
},
|
|
43
69
|
"engines": {
|