@dudousxd/nestjs-diagnostics 0.8.0 → 0.9.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 +22 -0
- package/README.md +31 -1
- package/dist/channel.d.ts +1 -1
- package/dist/channel.d.ts.map +1 -1
- package/dist/channel.js +3 -1
- package/dist/channel.js.map +1 -1
- package/dist/index.d.ts +2 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -0
- package/dist/index.js.map +1 -1
- package/dist/nestjs/delivery.d.ts +92 -0
- package/dist/nestjs/delivery.d.ts.map +1 -0
- package/dist/nestjs/delivery.js +2 -0
- package/dist/nestjs/delivery.js.map +1 -0
- package/dist/nestjs/diagnostics.explorer.d.ts +51 -11
- package/dist/nestjs/diagnostics.explorer.d.ts.map +1 -1
- package/dist/nestjs/diagnostics.explorer.js +209 -53
- package/dist/nestjs/diagnostics.explorer.js.map +1 -1
- package/dist/nestjs/diagnostics.module.d.ts +9 -2
- package/dist/nestjs/diagnostics.module.d.ts.map +1 -1
- package/dist/nestjs/diagnostics.module.js +23 -3
- package/dist/nestjs/diagnostics.module.js.map +1 -1
- package/dist/nestjs/diagnostics.options.d.ts +31 -0
- package/dist/nestjs/diagnostics.options.d.ts.map +1 -0
- package/dist/nestjs/diagnostics.options.js +3 -0
- package/dist/nestjs/diagnostics.options.js.map +1 -0
- package/dist/nestjs/index.d.ts +6 -3
- package/dist/nestjs/index.d.ts.map +1 -1
- package/dist/nestjs/index.js +4 -2
- package/dist/nestjs/index.js.map +1 -1
- package/dist/nestjs/on-diagnostic.decorator.d.ts +33 -7
- package/dist/nestjs/on-diagnostic.decorator.d.ts.map +1 -1
- package/dist/nestjs/on-diagnostic.decorator.js +0 -9
- package/dist/nestjs/on-diagnostic.decorator.js.map +1 -1
- package/dist/nestjs/queue-transport.d.ts +47 -0
- package/dist/nestjs/queue-transport.d.ts.map +1 -0
- package/dist/nestjs/queue-transport.js +45 -0
- package/dist/nestjs/queue-transport.js.map +1 -0
- package/dist/nestjs/role.d.ts +13 -0
- package/dist/nestjs/role.d.ts.map +1 -0
- package/dist/nestjs/role.js +13 -0
- package/dist/nestjs/role.js.map +1 -0
- package/dist/nestjs/transports.d.ts +125 -0
- package/dist/nestjs/transports.d.ts.map +1 -0
- package/dist/nestjs/transports.js +127 -0
- package/dist/nestjs/transports.js.map +1 -0
- package/dist/official.d.ts +2 -2
- package/dist/redis-relay.d.ts +60 -0
- package/dist/redis-relay.d.ts.map +1 -0
- package/dist/redis-relay.js +170 -0
- package/dist/redis-relay.js.map +1 -0
- package/dist/relayed.d.ts +8 -0
- package/dist/relayed.d.ts.map +1 -0
- package/dist/relayed.js +31 -0
- package/dist/relayed.js.map +1 -0
- package/dist/trace.d.ts.map +1 -1
- package/dist/trace.js +2 -0
- package/dist/trace.js.map +1 -1
- package/dist/types.d.ts +9 -0
- package/dist/types.d.ts.map +1 -1
- package/package.json +14 -6
- package/skills/emit-diagnostics/SKILL.md +5 -2
- package/skills/react-with-on-diagnostic/SKILL.md +41 -13
- package/skills/trace-spans/SKILL.md +2 -1
|
@@ -10,96 +10,252 @@ var __metadata = (this && this.__metadata) || function (k, v) {
|
|
|
10
10
|
var __param = (this && this.__param) || function (paramIndex, decorator) {
|
|
11
11
|
return function (target, key) { decorator(target, key, paramIndex); }
|
|
12
12
|
};
|
|
13
|
+
import { randomUUID } from 'node:crypto';
|
|
13
14
|
import diagnostics_channel from 'node:diagnostics_channel';
|
|
14
|
-
import { Inject, Injectable, Logger, } from '@nestjs/common';
|
|
15
|
-
import { DiscoveryService, MetadataScanner } from '@nestjs/core';
|
|
15
|
+
import { Inject, Injectable, Logger, Optional, } from '@nestjs/common';
|
|
16
|
+
import { DiscoveryService, MetadataScanner, ModuleRef } from '@nestjs/core';
|
|
16
17
|
import { CHANNEL_PREFIX, channelName } from '../channel.js';
|
|
17
18
|
import { onChannelRegistered, registeredChannels } from '../registry.js';
|
|
19
|
+
import { isRelayed } from '../relayed.js';
|
|
20
|
+
import { DIAGNOSTICS_OPTIONS } from './diagnostics.options.js';
|
|
18
21
|
import { ON_DIAGNOSTIC_META } from './on-diagnostic.decorator.js';
|
|
22
|
+
import { resolveRole } from './role.js';
|
|
23
|
+
/** Thrown by the listener invoker for a listener id this process does not know. */
|
|
24
|
+
export class UnknownDiagnosticListenerError extends Error {
|
|
25
|
+
listenerId;
|
|
26
|
+
code = 'E_UNKNOWN_DIAGNOSTICS_LISTENER';
|
|
27
|
+
constructor(listenerId) {
|
|
28
|
+
super(`@dudousxd/nestjs-diagnostics: no listener "${listenerId}" is registered in this process. Every process that runs deliveries must register the same listeners.`);
|
|
29
|
+
this.listenerId = listenerId;
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
function matches(meta, lib, event) {
|
|
33
|
+
if (meta.lib !== lib)
|
|
34
|
+
return false;
|
|
35
|
+
const matcher = meta.event;
|
|
36
|
+
if (matcher === undefined)
|
|
37
|
+
return true;
|
|
38
|
+
if (typeof matcher === 'string')
|
|
39
|
+
return matcher === event;
|
|
40
|
+
matcher.lastIndex = 0;
|
|
41
|
+
return matcher.test(event);
|
|
42
|
+
}
|
|
43
|
+
/** A diagnostics POINT event (from `emit`). Span phase events from `trace` are never dispatched. */
|
|
44
|
+
function isPointEvent(msg) {
|
|
45
|
+
if (typeof msg !== 'object' || msg === null)
|
|
46
|
+
return false;
|
|
47
|
+
const env = msg;
|
|
48
|
+
if (typeof env.lib !== 'string' || typeof env.event !== 'string')
|
|
49
|
+
return false;
|
|
50
|
+
return env.phase === undefined || env.spanId === undefined;
|
|
51
|
+
}
|
|
52
|
+
function libOf(name) {
|
|
53
|
+
if (!name.startsWith(`${CHANNEL_PREFIX}:`))
|
|
54
|
+
return undefined;
|
|
55
|
+
const rest = name.slice(CHANNEL_PREFIX.length + 1);
|
|
56
|
+
const idx = rest.indexOf(':');
|
|
57
|
+
return idx > 0 ? rest.slice(0, idx) : undefined;
|
|
58
|
+
}
|
|
59
|
+
/**
|
|
60
|
+
* Discovers `@OnDiagnostic` methods, starts the `default` transport and routes every matching
|
|
61
|
+
* event: to the delivering transport (only in the emitting process), or straight to the handler.
|
|
62
|
+
*/
|
|
19
63
|
let DiagnosticsExplorer = class DiagnosticsExplorer {
|
|
20
64
|
discovery;
|
|
21
65
|
scanner;
|
|
66
|
+
moduleRef;
|
|
22
67
|
logger = new Logger('DiagnosticsExplorer');
|
|
23
|
-
|
|
24
|
-
|
|
68
|
+
listeners = new Map();
|
|
69
|
+
matchCache = new Map();
|
|
70
|
+
subscribed = new Set();
|
|
71
|
+
wildcardLibs = new Set();
|
|
72
|
+
pending = [];
|
|
73
|
+
scheduled = null;
|
|
25
74
|
offChannelRegistered = null;
|
|
26
|
-
|
|
75
|
+
transport = null;
|
|
76
|
+
deliver = null;
|
|
77
|
+
role = 'all';
|
|
78
|
+
options;
|
|
79
|
+
constructor(discovery, scanner, moduleRef, options) {
|
|
27
80
|
this.discovery = discovery;
|
|
28
81
|
this.scanner = scanner;
|
|
82
|
+
this.moduleRef = moduleRef;
|
|
83
|
+
this.options = options ?? {};
|
|
84
|
+
}
|
|
85
|
+
/**
|
|
86
|
+
* Run listener `listenerId` for `envelope` in this process. The handler is called synchronously;
|
|
87
|
+
* the promise rejects with its error.
|
|
88
|
+
*/
|
|
89
|
+
invoke = (listenerId, envelope) => {
|
|
90
|
+
const listener = this.listeners.get(listenerId);
|
|
91
|
+
if (!listener)
|
|
92
|
+
return Promise.reject(new UnknownDiagnosticListenerError(listenerId));
|
|
93
|
+
try {
|
|
94
|
+
const fn = listener.instance[listener.method];
|
|
95
|
+
return Promise.resolve(fn.call(listener.instance, envelope)).then(() => undefined);
|
|
96
|
+
}
|
|
97
|
+
catch (error) {
|
|
98
|
+
return Promise.reject(error);
|
|
99
|
+
}
|
|
100
|
+
};
|
|
101
|
+
/** Every listener discovered in this process. */
|
|
102
|
+
registeredListeners() {
|
|
103
|
+
return [...this.listeners.values()];
|
|
104
|
+
}
|
|
105
|
+
async onApplicationBootstrap() {
|
|
106
|
+
this.role = resolveRole(this.options.role, this.options.default);
|
|
107
|
+
this.discover();
|
|
108
|
+
const name = this.options.default;
|
|
109
|
+
if (name) {
|
|
110
|
+
const provider = this.options.transports?.[name];
|
|
111
|
+
if (!provider) {
|
|
112
|
+
throw new Error(`@dudousxd/nestjs-diagnostics: default is "${name}", but transports.${name} is not defined`);
|
|
113
|
+
}
|
|
114
|
+
const listeners = this.registeredListeners();
|
|
115
|
+
this.transport = await provider({
|
|
116
|
+
moduleRef: this.moduleRef,
|
|
117
|
+
role: this.role,
|
|
118
|
+
nodeId: this.options.nodeId ?? randomUUID(),
|
|
119
|
+
listenerLibs: [...new Set(listeners.flatMap((l) => l.matchers.map((m) => m.lib)))],
|
|
120
|
+
listenerIds: listeners.map((l) => l.id),
|
|
121
|
+
invoke: this.invoke,
|
|
122
|
+
logger: this.logger,
|
|
123
|
+
});
|
|
124
|
+
this.deliver = this.transport.deliver?.bind(this.transport) ?? null;
|
|
125
|
+
}
|
|
126
|
+
// An 'api' process without a delivering transport has nothing to do with its listeners.
|
|
127
|
+
if (this.role === 'api' && !this.deliver)
|
|
128
|
+
return;
|
|
129
|
+
this.subscribeListeners();
|
|
29
130
|
}
|
|
30
|
-
|
|
131
|
+
async onApplicationShutdown() {
|
|
132
|
+
await this.flush();
|
|
133
|
+
this.offChannelRegistered?.();
|
|
134
|
+
this.offChannelRegistered = null;
|
|
135
|
+
for (const name of this.subscribed)
|
|
136
|
+
diagnostics_channel.channel(name).unsubscribe(this.onEvent);
|
|
137
|
+
this.subscribed.clear();
|
|
138
|
+
this.wildcardLibs.clear();
|
|
139
|
+
const transport = this.transport;
|
|
140
|
+
this.transport = null;
|
|
141
|
+
this.deliver = null;
|
|
142
|
+
try {
|
|
143
|
+
await transport?.stop?.();
|
|
144
|
+
}
|
|
145
|
+
catch (error) {
|
|
146
|
+
this.logger.error(`failed to stop the diagnostics transport: ${messageOf(error)}`);
|
|
147
|
+
}
|
|
148
|
+
}
|
|
149
|
+
discover() {
|
|
31
150
|
for (const wrapper of this.discovery.getProviders()) {
|
|
32
151
|
const instance = wrapper.instance;
|
|
33
152
|
if (!instance || typeof instance !== 'object')
|
|
34
153
|
continue;
|
|
35
154
|
const proto = Object.getPrototypeOf(instance);
|
|
36
|
-
for (const
|
|
37
|
-
const metas = Reflect.getMetadata(ON_DIAGNOSTIC_META, proto,
|
|
155
|
+
for (const method of this.scanner.getAllMethodNames(proto)) {
|
|
156
|
+
const metas = Reflect.getMetadata(ON_DIAGNOSTIC_META, proto, method);
|
|
38
157
|
if (!metas?.length)
|
|
39
158
|
continue;
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
159
|
+
const id = `${instance.constructor.name}#${method}`;
|
|
160
|
+
const existing = this.listeners.get(id);
|
|
161
|
+
if (existing) {
|
|
162
|
+
if (existing.instance.constructor === instance.constructor)
|
|
163
|
+
continue;
|
|
164
|
+
throw new Error(`@dudousxd/nestjs-diagnostics: two listeners share the id "${id}". Listener ids are <ClassName>#<method> and must be unique; rename one class.`);
|
|
165
|
+
}
|
|
166
|
+
this.listeners.set(id, { id, matchers: metas, instance, method });
|
|
167
|
+
}
|
|
168
|
+
}
|
|
169
|
+
this.matchCache.clear();
|
|
170
|
+
}
|
|
171
|
+
/** The listeners that receive an event on `aviary:<lib>:<event>`. */
|
|
172
|
+
listenersFor(lib, event) {
|
|
173
|
+
const key = `${lib}\0${event}`;
|
|
174
|
+
let hit = this.matchCache.get(key);
|
|
175
|
+
if (hit === undefined) {
|
|
176
|
+
hit = this.registeredListeners().filter((l) => l.matchers.some((m) => matches(m, lib, event)));
|
|
177
|
+
this.matchCache.set(key, hit);
|
|
178
|
+
}
|
|
179
|
+
return hit;
|
|
180
|
+
}
|
|
181
|
+
subscribeListeners() {
|
|
182
|
+
for (const listener of this.listeners.values()) {
|
|
183
|
+
for (const meta of listener.matchers) {
|
|
184
|
+
if (typeof meta.event === 'string') {
|
|
185
|
+
this.subscribe(channelName(meta.lib, meta.event));
|
|
186
|
+
}
|
|
187
|
+
else if (!this.wildcardLibs.has(meta.lib)) {
|
|
188
|
+
this.wildcardLibs.add(meta.lib);
|
|
189
|
+
for (const name of registeredChannels()) {
|
|
190
|
+
if (libOf(name) === meta.lib)
|
|
191
|
+
this.subscribe(name);
|
|
52
192
|
}
|
|
53
193
|
}
|
|
54
194
|
}
|
|
55
195
|
}
|
|
56
196
|
this.offChannelRegistered = onChannelRegistered((name) => {
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
}
|
|
197
|
+
const lib = libOf(name);
|
|
198
|
+
if (lib !== undefined && this.wildcardLibs.has(lib))
|
|
199
|
+
this.subscribe(name);
|
|
61
200
|
});
|
|
62
201
|
}
|
|
63
|
-
|
|
64
|
-
this.
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
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 });
|
|
202
|
+
subscribe(name) {
|
|
203
|
+
if (this.subscribed.has(name))
|
|
204
|
+
return;
|
|
205
|
+
diagnostics_channel.channel(name).subscribe(this.onEvent);
|
|
206
|
+
this.subscribed.add(name);
|
|
77
207
|
}
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
208
|
+
onEvent = (msg) => {
|
|
209
|
+
if (!isPointEvent(msg))
|
|
210
|
+
return;
|
|
211
|
+
const matched = this.listenersFor(msg.lib, msg.event);
|
|
212
|
+
if (matched.length === 0)
|
|
213
|
+
return;
|
|
214
|
+
if (this.deliver) {
|
|
215
|
+
// Delivery happens once, at the origin. A relayed copy was already handed over there.
|
|
216
|
+
if (isRelayed(msg))
|
|
217
|
+
return;
|
|
218
|
+
const envelope = (typeof msg.id === 'string' ? msg : { ...msg, id: randomUUID() });
|
|
219
|
+
for (const listener of matched)
|
|
220
|
+
this.pending.push({ listenerId: listener.id, envelope });
|
|
221
|
+
this.scheduled ??= setImmediate(() => void this.flush());
|
|
222
|
+
return;
|
|
223
|
+
}
|
|
224
|
+
for (const listener of matched) {
|
|
225
|
+
this.invoke(listener.id, msg).catch((error) => this.logger.error(`@OnDiagnostic ${listener.id} handler failed: ${messageOf(error)}`));
|
|
226
|
+
}
|
|
227
|
+
};
|
|
228
|
+
/** Hand this turn's deliveries to the transport, in emit order. Settles once they are handed over. */
|
|
229
|
+
async flush() {
|
|
230
|
+
if (this.scheduled !== null) {
|
|
231
|
+
clearImmediate(this.scheduled);
|
|
232
|
+
this.scheduled = null;
|
|
233
|
+
}
|
|
234
|
+
if (this.pending.length === 0 || !this.deliver)
|
|
235
|
+
return;
|
|
236
|
+
const deliveries = this.pending.splice(0);
|
|
237
|
+
const report = (error) => this.logger.error(`failed to hand ${deliveries.length} diagnostics deliveries to the transport: ${messageOf(error)}`);
|
|
81
238
|
try {
|
|
82
|
-
|
|
83
|
-
const result = fn.call(instance, event);
|
|
84
|
-
if (result != null && typeof result.then === 'function') {
|
|
85
|
-
result.catch((err) => this.logError(methodName, err));
|
|
86
|
-
}
|
|
239
|
+
await this.deliver(deliveries);
|
|
87
240
|
}
|
|
88
|
-
catch (
|
|
89
|
-
|
|
241
|
+
catch (error) {
|
|
242
|
+
report(error);
|
|
90
243
|
}
|
|
91
244
|
}
|
|
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
245
|
};
|
|
97
246
|
DiagnosticsExplorer = __decorate([
|
|
98
247
|
Injectable(),
|
|
99
248
|
__param(0, Inject(DiscoveryService)),
|
|
100
249
|
__param(1, Inject(MetadataScanner)),
|
|
250
|
+
__param(2, Inject(ModuleRef)),
|
|
251
|
+
__param(3, Optional()),
|
|
252
|
+
__param(3, Inject(DIAGNOSTICS_OPTIONS)),
|
|
101
253
|
__metadata("design:paramtypes", [DiscoveryService,
|
|
102
|
-
MetadataScanner
|
|
254
|
+
MetadataScanner,
|
|
255
|
+
ModuleRef, Object])
|
|
103
256
|
], DiagnosticsExplorer);
|
|
104
257
|
export { DiagnosticsExplorer };
|
|
258
|
+
function messageOf(error) {
|
|
259
|
+
return error instanceof Error ? error.message : String(error);
|
|
260
|
+
}
|
|
105
261
|
//# sourceMappingURL=diagnostics.explorer.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"diagnostics.explorer.js","sourceRoot":"","sources":["../../src/nestjs/diagnostics.explorer.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,OAAO,mBAAmB,MAAM,0BAA0B,CAAC;AAC3D,OAAO,EACL,MAAM,EACN,UAAU,EACV,MAAM,
|
|
1
|
+
{"version":3,"file":"diagnostics.explorer.js","sourceRoot":"","sources":["../../src/nestjs/diagnostics.explorer.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,6 +1,13 @@
|
|
|
1
1
|
import { type DynamicModule } from '@nestjs/common';
|
|
2
|
+
import { type DiagnosticsModuleAsyncOptions, type DiagnosticsModuleOptions } from './diagnostics.options.js';
|
|
3
|
+
import type { TransportProvider } from './transports.js';
|
|
2
4
|
export declare class DiagnosticsModule {
|
|
3
|
-
/**
|
|
4
|
-
|
|
5
|
+
/**
|
|
6
|
+
* Register once at the app root; enables `@OnDiagnostic` on any provider. Pick a `default`
|
|
7
|
+
* transport to run listeners across processes.
|
|
8
|
+
*/
|
|
9
|
+
static forRoot<TTransports extends Record<string, TransportProvider>>(options?: DiagnosticsModuleOptions<TTransports>): DynamicModule;
|
|
10
|
+
/** Like {@link forRoot}, with options built from injected providers. */
|
|
11
|
+
static forRootAsync(options: DiagnosticsModuleAsyncOptions): DynamicModule;
|
|
5
12
|
}
|
|
6
13
|
//# sourceMappingURL=diagnostics.module.d.ts.map
|
|
@@ -1 +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;
|
|
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;AAG5D,OAAO,EAEL,KAAK,6BAA6B,EAClC,KAAK,wBAAwB,EAC9B,MAAM,0BAA0B,CAAC;AAClC,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAC;AAEzD,qBACa,iBAAiB;IAC5B;;;OAGG;IACH,MAAM,CAAC,OAAO,CAAC,WAAW,SAAS,MAAM,CAAC,MAAM,EAAE,iBAAiB,CAAC,EAClE,OAAO,GAAE,wBAAwB,CAAC,WAAW,CAAM,GAClD,aAAa;IAShB,wEAAwE;IACxE,MAAM,CAAC,YAAY,CAAC,OAAO,EAAE,6BAA6B,GAAG,aAAa;CAe3E"}
|
|
@@ -8,14 +8,34 @@ var DiagnosticsModule_1;
|
|
|
8
8
|
import { Module } from '@nestjs/common';
|
|
9
9
|
import { DiscoveryModule } from '@nestjs/core';
|
|
10
10
|
import { DiagnosticsExplorer } from './diagnostics.explorer.js';
|
|
11
|
+
import { DIAGNOSTICS_OPTIONS, } from './diagnostics.options.js';
|
|
11
12
|
let DiagnosticsModule = DiagnosticsModule_1 = class DiagnosticsModule {
|
|
12
|
-
/**
|
|
13
|
-
|
|
13
|
+
/**
|
|
14
|
+
* Register once at the app root; enables `@OnDiagnostic` on any provider. Pick a `default`
|
|
15
|
+
* transport to run listeners across processes.
|
|
16
|
+
*/
|
|
17
|
+
static forRoot(options = {}) {
|
|
14
18
|
return {
|
|
15
19
|
module: DiagnosticsModule_1,
|
|
16
20
|
global: true,
|
|
17
21
|
imports: [DiscoveryModule],
|
|
18
|
-
providers: [DiagnosticsExplorer],
|
|
22
|
+
providers: [{ provide: DIAGNOSTICS_OPTIONS, useValue: options }, DiagnosticsExplorer],
|
|
23
|
+
};
|
|
24
|
+
}
|
|
25
|
+
/** Like {@link forRoot}, with options built from injected providers. */
|
|
26
|
+
static forRootAsync(options) {
|
|
27
|
+
return {
|
|
28
|
+
module: DiagnosticsModule_1,
|
|
29
|
+
global: true,
|
|
30
|
+
imports: [DiscoveryModule, ...(options.imports ?? [])],
|
|
31
|
+
providers: [
|
|
32
|
+
{
|
|
33
|
+
provide: DIAGNOSTICS_OPTIONS,
|
|
34
|
+
useFactory: options.useFactory,
|
|
35
|
+
inject: (options.inject ?? []),
|
|
36
|
+
},
|
|
37
|
+
DiagnosticsExplorer,
|
|
38
|
+
],
|
|
19
39
|
};
|
|
20
40
|
}
|
|
21
41
|
};
|
|
@@ -1 +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;
|
|
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;AAChE,OAAO,EACL,mBAAmB,GAGpB,MAAM,0BAA0B,CAAC;AAI3B,IAAM,iBAAiB,yBAAvB,MAAM,iBAAiB;IAC5B;;;OAGG;IACH,MAAM,CAAC,OAAO,CACZ,UAAiD,EAAE;QAEnD,OAAO;YACL,MAAM,EAAE,mBAAiB;YACzB,MAAM,EAAE,IAAI;YACZ,OAAO,EAAE,CAAC,eAAe,CAAC;YAC1B,SAAS,EAAE,CAAC,EAAE,OAAO,EAAE,mBAAmB,EAAE,QAAQ,EAAE,OAAO,EAAE,EAAE,mBAAmB,CAAC;SACtF,CAAC;IACJ,CAAC;IAED,wEAAwE;IACxE,MAAM,CAAC,YAAY,CAAC,OAAsC;QACxD,OAAO;YACL,MAAM,EAAE,mBAAiB;YACzB,MAAM,EAAE,IAAI;YACZ,OAAO,EAAE,CAAC,eAAe,EAAE,GAAG,CAAC,OAAO,CAAC,OAAO,IAAI,EAAE,CAAC,CAAC;YACtD,SAAS,EAAE;gBACT;oBACE,OAAO,EAAE,mBAAmB;oBAC5B,UAAU,EAAE,OAAO,CAAC,UAAU;oBAC9B,MAAM,EAAE,CAAC,OAAO,CAAC,MAAM,IAAI,EAAE,CAAU;iBACxC;gBACD,mBAAmB;aACpB;SACF,CAAC;IACJ,CAAC;CACF,CAAA;AAhCY,iBAAiB;IAD7B,MAAM,CAAC,EAAE,CAAC;GACE,iBAAiB,CAgC7B"}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import type { DynamicModule } from '@nestjs/common';
|
|
2
|
+
import type { DiagnosticsRole } from './role.js';
|
|
3
|
+
import type { TransportProvider } from './transports.js';
|
|
4
|
+
/** Injection token of the {@link DiagnosticsModuleOptions}. */
|
|
5
|
+
export declare const DIAGNOSTICS_OPTIONS: unique symbol;
|
|
6
|
+
/**
|
|
7
|
+
* Options of `DiagnosticsModule.forRoot()`. Without a `default` transport, listeners run in the
|
|
8
|
+
* emitting process (local).
|
|
9
|
+
*/
|
|
10
|
+
export interface DiagnosticsModuleOptions<TTransports extends Record<string, TransportProvider> = Record<string, TransportProvider>> {
|
|
11
|
+
/**
|
|
12
|
+
* Which half of a split deployment this process is: `'all'` (default), `'api'` (emits and hands
|
|
13
|
+
* work to the transport, never consumes or runs listeners) or `'worker'` (consumes and runs
|
|
14
|
+
* listeners). `'api'` and `'worker'` need a `default` transport.
|
|
15
|
+
*/
|
|
16
|
+
role?: DiagnosticsRole;
|
|
17
|
+
/** Name of the transport (a key of `transports`) that starts at bootstrap. */
|
|
18
|
+
default?: keyof TTransports & string;
|
|
19
|
+
/** Named transports, built with the `transports` factory. Only `default` starts. */
|
|
20
|
+
transports?: TTransports;
|
|
21
|
+
/** Unique id of THIS process, for echo suppression. Default a random id. */
|
|
22
|
+
nodeId?: string;
|
|
23
|
+
}
|
|
24
|
+
/** Async configuration: build the options (and your Redis clients) from DI. */
|
|
25
|
+
export interface DiagnosticsModuleAsyncOptions {
|
|
26
|
+
/** Modules whose exported providers the factory injects. */
|
|
27
|
+
imports?: DynamicModule['imports'];
|
|
28
|
+
inject?: unknown[];
|
|
29
|
+
useFactory: (...args: never[]) => Promise<DiagnosticsModuleOptions> | DiagnosticsModuleOptions;
|
|
30
|
+
}
|
|
31
|
+
//# sourceMappingURL=diagnostics.options.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"diagnostics.options.d.ts","sourceRoot":"","sources":["../../src/nestjs/diagnostics.options.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AACpD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,WAAW,CAAC;AACjD,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAC;AAEzD,+DAA+D;AAC/D,eAAO,MAAM,mBAAmB,eAAqD,CAAC;AAEtF;;;GAGG;AACH,MAAM,WAAW,wBAAwB,CACvC,WAAW,SAAS,MAAM,CAAC,MAAM,EAAE,iBAAiB,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,iBAAiB,CAAC;IAEzF;;;;OAIG;IACH,IAAI,CAAC,EAAE,eAAe,CAAC;IACvB,8EAA8E;IAC9E,OAAO,CAAC,EAAE,MAAM,WAAW,GAAG,MAAM,CAAC;IACrC,oFAAoF;IACpF,UAAU,CAAC,EAAE,WAAW,CAAC;IACzB,4EAA4E;IAC5E,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,+EAA+E;AAC/E,MAAM,WAAW,6BAA6B;IAC5C,4DAA4D;IAC5D,OAAO,CAAC,EAAE,aAAa,CAAC,SAAS,CAAC,CAAC;IACnC,MAAM,CAAC,EAAE,OAAO,EAAE,CAAC;IACnB,UAAU,EAAE,CAAC,GAAG,IAAI,EAAE,KAAK,EAAE,KAAK,OAAO,CAAC,wBAAwB,CAAC,GAAG,wBAAwB,CAAC;CAChG"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"diagnostics.options.js","sourceRoot":"","sources":["../../src/nestjs/diagnostics.options.ts"],"names":[],"mappings":"AAIA,+DAA+D;AAC/D,MAAM,CAAC,MAAM,mBAAmB,GAAG,MAAM,CAAC,GAAG,CAAC,sCAAsC,CAAC,CAAC"}
|
package/dist/nestjs/index.d.ts
CHANGED
|
@@ -1,6 +1,9 @@
|
|
|
1
|
-
export { ON_DIAGNOSTIC_META, OnDiagnostic } from './on-diagnostic.decorator.js';
|
|
2
|
-
export type { OnDiagnosticMeta } from './on-diagnostic.decorator.js';
|
|
1
|
+
export { type DiagnosticEventOf, type ListenerEventMatcher, type ListenerMethodDecorator, ON_DIAGNOSTIC_META, OnDiagnostic, type OnDiagnosticMeta, } from './on-diagnostic.decorator.js';
|
|
3
2
|
export { DiagnosticsModule } from './diagnostics.module.js';
|
|
4
|
-
export {
|
|
3
|
+
export { DIAGNOSTICS_OPTIONS, type DiagnosticsModuleAsyncOptions, type DiagnosticsModuleOptions, } from './diagnostics.options.js';
|
|
4
|
+
export { DiagnosticsExplorer, type RegisteredListener, UnknownDiagnosticListenerError, } from './diagnostics.explorer.js';
|
|
5
|
+
export type { DiagnosticsRole } from './role.js';
|
|
6
|
+
export type { DeliveredEvent, DeliveryTransportContext, DurableDiagnosticsDeliveryModule, DurableTransportConfig, ListenerDelivery, ListenerDeliveryTransport, ListenerInvoker, } from './delivery.js';
|
|
7
|
+
export { type QueueTransportConfig, type RedisTransportConfig, type TransportContext, type TransportHandle, type TransportProvider, transports, } from './transports.js';
|
|
5
8
|
export { InjectCapability } from '../inject-capability.js';
|
|
6
9
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/nestjs/index.ts"],"names":[],"mappings":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/nestjs/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,KAAK,iBAAiB,EACtB,KAAK,oBAAoB,EACzB,KAAK,uBAAuB,EAC5B,kBAAkB,EAClB,YAAY,EACZ,KAAK,gBAAgB,GACtB,MAAM,8BAA8B,CAAC;AACtC,OAAO,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAC;AAC5D,OAAO,EACL,mBAAmB,EACnB,KAAK,6BAA6B,EAClC,KAAK,wBAAwB,GAC9B,MAAM,0BAA0B,CAAC;AAClC,OAAO,EACL,mBAAmB,EACnB,KAAK,kBAAkB,EACvB,8BAA8B,GAC/B,MAAM,2BAA2B,CAAC;AACnC,YAAY,EAAE,eAAe,EAAE,MAAM,WAAW,CAAC;AACjD,YAAY,EACV,cAAc,EACd,wBAAwB,EACxB,gCAAgC,EAChC,sBAAsB,EACtB,gBAAgB,EAChB,yBAAyB,EACzB,eAAe,GAChB,MAAM,eAAe,CAAC;AACvB,OAAO,EACL,KAAK,oBAAoB,EACzB,KAAK,oBAAoB,EACzB,KAAK,gBAAgB,EACrB,KAAK,eAAe,EACpB,KAAK,iBAAiB,EACtB,UAAU,GACX,MAAM,iBAAiB,CAAC;AACzB,OAAO,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC"}
|
package/dist/nestjs/index.js
CHANGED
|
@@ -1,5 +1,7 @@
|
|
|
1
|
-
export { ON_DIAGNOSTIC_META, OnDiagnostic } from './on-diagnostic.decorator.js';
|
|
1
|
+
export { ON_DIAGNOSTIC_META, OnDiagnostic, } from './on-diagnostic.decorator.js';
|
|
2
2
|
export { DiagnosticsModule } from './diagnostics.module.js';
|
|
3
|
-
export {
|
|
3
|
+
export { DIAGNOSTICS_OPTIONS, } from './diagnostics.options.js';
|
|
4
|
+
export { DiagnosticsExplorer, UnknownDiagnosticListenerError, } from './diagnostics.explorer.js';
|
|
5
|
+
export { transports, } from './transports.js';
|
|
4
6
|
export { InjectCapability } from '../inject-capability.js';
|
|
5
7
|
//# sourceMappingURL=index.js.map
|
package/dist/nestjs/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/nestjs/index.ts"],"names":[],"mappings":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/nestjs/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAIL,kBAAkB,EAClB,YAAY,GAEb,MAAM,8BAA8B,CAAC;AACtC,OAAO,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAC;AAC5D,OAAO,EACL,mBAAmB,GAGpB,MAAM,0BAA0B,CAAC;AAClC,OAAO,EACL,mBAAmB,EAEnB,8BAA8B,GAC/B,MAAM,2BAA2B,CAAC;AAWnC,OAAO,EAML,UAAU,GACX,MAAM,iBAAiB,CAAC;AACzB,OAAO,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC"}
|
|
@@ -1,18 +1,44 @@
|
|
|
1
|
+
import type { DiagnosticEvent, EventOf, LibOf, PayloadOf } from '../types.js';
|
|
1
2
|
/** Metadata key under which a method's @OnDiagnostic subscriptions accumulate. */
|
|
2
3
|
export declare const ON_DIAGNOSTIC_META: unique symbol;
|
|
4
|
+
/** Which events of a lib a listener receives: one exact name, a pattern, or every event. */
|
|
5
|
+
export type ListenerEventMatcher = string | RegExp | undefined;
|
|
3
6
|
/** One subscription declared on a method. `event` omitted = every event of `lib`. */
|
|
4
7
|
export interface OnDiagnosticMeta {
|
|
5
8
|
lib: string;
|
|
6
|
-
event?: string;
|
|
9
|
+
event?: string | RegExp;
|
|
7
10
|
}
|
|
11
|
+
/** The envelope a listener for `(TLib, TEvent)` receives, typed from the `ChannelRegistry`. */
|
|
12
|
+
export type DiagnosticEventOf<TLib extends string, TEvent extends string> = DiagnosticEvent<PayloadOf<TLib, TEvent>>;
|
|
8
13
|
/**
|
|
9
|
-
*
|
|
10
|
-
* `
|
|
14
|
+
* What a listener's parameter must accept: the registered envelope for a channel declared in the
|
|
15
|
+
* `ChannelRegistry`; any envelope otherwise, so handlers on untyped channels keep annotating their
|
|
16
|
+
* own payload type.
|
|
17
|
+
*/
|
|
18
|
+
type AnyEvent = DiagnosticEvent<any>;
|
|
19
|
+
type ListenerEventOf<TLib extends string, TEvent extends string> = unknown extends PayloadOf<TLib, TEvent> ? AnyEvent : DiagnosticEventOf<TLib, TEvent>;
|
|
20
|
+
type ListenerMethod<TEvent> = (event: TEvent) => unknown;
|
|
21
|
+
/**
|
|
22
|
+
* The decorator {@link OnDiagnostic} returns. The decorated method's parameter must accept
|
|
23
|
+
* `TEvent`, so a channel declared in the `ChannelRegistry` checks the handler's payload type.
|
|
24
|
+
*/
|
|
25
|
+
export type ListenerMethodDecorator<TEvent> = <M extends ListenerMethod<TEvent>>(target: object, key: string | symbol, descriptor: TypedPropertyDescriptor<M>) => void;
|
|
26
|
+
/**
|
|
27
|
+
* Make a provider method a diagnostics listener. Requires `DiagnosticsModule.forRoot()`.
|
|
28
|
+
*
|
|
29
|
+
* - `@OnDiagnostic('resilience', 'circuit-opened')`: the exact channel.
|
|
30
|
+
* - `@OnDiagnostic('durable', /^run\./)`: every event of the lib whose name matches.
|
|
31
|
+
* - `@OnDiagnostic('resilience')`: every `aviary:resilience:*` channel (current and future).
|
|
11
32
|
*
|
|
12
|
-
*
|
|
13
|
-
*
|
|
33
|
+
* The listener id is `<ClassName>#<method>`. Delivering transports route work by it, so keep it
|
|
34
|
+
* stable while deliveries may be pending. Stackable: one method can listen to several channels
|
|
35
|
+
* and keeps one id.
|
|
14
36
|
*
|
|
15
|
-
*
|
|
37
|
+
* For a channel declared in the `ChannelRegistry`, the handler's parameter is checked against
|
|
38
|
+
* {@link DiagnosticEventOf}.
|
|
16
39
|
*/
|
|
17
|
-
export declare function OnDiagnostic(lib:
|
|
40
|
+
export declare function OnDiagnostic<TLib extends LibOf>(lib: TLib): ListenerMethodDecorator<AnyEvent>;
|
|
41
|
+
export declare function OnDiagnostic<TLib extends LibOf, TEvent extends EventOf<TLib>>(lib: TLib, event: TEvent): ListenerMethodDecorator<ListenerEventOf<TLib, TEvent>>;
|
|
42
|
+
export declare function OnDiagnostic<TLib extends LibOf>(lib: TLib, event: RegExp): ListenerMethodDecorator<AnyEvent>;
|
|
43
|
+
export {};
|
|
18
44
|
//# sourceMappingURL=on-diagnostic.decorator.d.ts.map
|
|
@@ -1 +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;
|
|
1
|
+
{"version":3,"file":"on-diagnostic.decorator.d.ts","sourceRoot":"","sources":["../../src/nestjs/on-diagnostic.decorator.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,OAAO,EAAE,KAAK,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAE9E,kFAAkF;AAClF,eAAO,MAAM,kBAAkB,eAA2B,CAAC;AAE3D,4FAA4F;AAC5F,MAAM,MAAM,oBAAoB,GAAG,MAAM,GAAG,MAAM,GAAG,SAAS,CAAC;AAE/D,qFAAqF;AACrF,MAAM,WAAW,gBAAgB;IAC/B,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;CACzB;AAED,+FAA+F;AAC/F,MAAM,MAAM,iBAAiB,CAAC,IAAI,SAAS,MAAM,EAAE,MAAM,SAAS,MAAM,IAAI,eAAe,CACzF,SAAS,CAAC,IAAI,EAAE,MAAM,CAAC,CACxB,CAAC;AAEF;;;;GAIG;AAEH,KAAK,QAAQ,GAAG,eAAe,CAAC,GAAG,CAAC,CAAC;AACrC,KAAK,eAAe,CAAC,IAAI,SAAS,MAAM,EAAE,MAAM,SAAS,MAAM,IAAI,OAAO,SAAS,SAAS,CAC1F,IAAI,EACJ,MAAM,CACP,GACG,QAAQ,GACR,iBAAiB,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;AAEpC,KAAK,cAAc,CAAC,MAAM,IAAI,CAAC,KAAK,EAAE,MAAM,KAAK,OAAO,CAAC;AAEzD;;;GAGG;AACH,MAAM,MAAM,uBAAuB,CAAC,MAAM,IAAI,CAAC,CAAC,SAAS,cAAc,CAAC,MAAM,CAAC,EAC7E,MAAM,EAAE,MAAM,EACd,GAAG,EAAE,MAAM,GAAG,MAAM,EACpB,UAAU,EAAE,uBAAuB,CAAC,CAAC,CAAC,KACnC,IAAI,CAAC;AAEV;;;;;;;;;;;;;GAaG;AACH,wBAAgB,YAAY,CAAC,IAAI,SAAS,KAAK,EAAE,GAAG,EAAE,IAAI,GAAG,uBAAuB,CAAC,QAAQ,CAAC,CAAC;AAC/F,wBAAgB,YAAY,CAAC,IAAI,SAAS,KAAK,EAAE,MAAM,SAAS,OAAO,CAAC,IAAI,CAAC,EAC3E,GAAG,EAAE,IAAI,EACT,KAAK,EAAE,MAAM,GACZ,uBAAuB,CAAC,eAAe,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC,CAAC;AAC1D,wBAAgB,YAAY,CAAC,IAAI,SAAS,KAAK,EAC7C,GAAG,EAAE,IAAI,EACT,KAAK,EAAE,MAAM,GACZ,uBAAuB,CAAC,QAAQ,CAAC,CAAC"}
|
|
@@ -1,14 +1,5 @@
|
|
|
1
1
|
/** Metadata key under which a method's @OnDiagnostic subscriptions accumulate. */
|
|
2
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
3
|
export function OnDiagnostic(lib, event) {
|
|
13
4
|
return (target, key) => {
|
|
14
5
|
const existing = Reflect.getMetadata(ON_DIAGNOSTIC_META, target, key) ??
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"on-diagnostic.decorator.js","sourceRoot":"","sources":["../../src/nestjs/on-diagnostic.decorator.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"on-diagnostic.decorator.js","sourceRoot":"","sources":["../../src/nestjs/on-diagnostic.decorator.ts"],"names":[],"mappings":"AAEA,kFAAkF;AAClF,MAAM,CAAC,MAAM,kBAAkB,GAAG,MAAM,CAAC,gBAAgB,CAAC,CAAC;AAiE3D,MAAM,UAAU,YAAY,CAC1B,GAAW,EACX,KAAuB;IAEvB,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"}
|