@dudousxd/nestjs-diagnostics 0.4.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 CHANGED
@@ -1,5 +1,16 @@
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
+
3
14
  ## 0.4.0
4
15
 
5
16
  ### Minor Changes
@@ -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';
@@ -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"}
@@ -2,4 +2,5 @@ export { ON_DIAGNOSTIC_META, OnDiagnostic } from './on-diagnostic.decorator.js';
2
2
  export type { OnDiagnosticMeta } from './on-diagnostic.decorator.js';
3
3
  export { DiagnosticsModule } from './diagnostics.module.js';
4
4
  export { DiagnosticsExplorer } from './diagnostics.explorer.js';
5
+ export { InjectCapability } from '../inject-capability.js';
5
6
  //# sourceMappingURL=index.d.ts.map
@@ -1 +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"}
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"}
@@ -1,4 +1,5 @@
1
1
  export { ON_DIAGNOSTIC_META, OnDiagnostic } from './on-diagnostic.decorator.js';
2
2
  export { DiagnosticsModule } from './diagnostics.module.js';
3
3
  export { DiagnosticsExplorer } from './diagnostics.explorer.js';
4
+ export { InjectCapability } from '../inject-capability.js';
4
5
  //# sourceMappingURL=index.js.map
@@ -1 +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"}
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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@dudousxd/nestjs-diagnostics",
3
- "version": "0.4.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": {