Compare commits

...

2 Commits

Author SHA1 Message Date
Jarred Sumner
059034db6b Merge branch 'main' into fix-tracing-channel-has-subscribers 2026-03-06 19:58:49 -08:00
Claude
23f65520af fix(node): add missing hasSubscribers getter to TracingChannel
The `TracingChannel` class in `node:diagnostics_channel` was missing the
`hasSubscribers` getter, causing it to return `undefined` instead of a
boolean. This adds the getter which returns `true` if any of the five
sub-channels (start, end, asyncStart, asyncEnd, error) have subscribers,
matching Node.js behavior.

Closes #27805
2026-03-04 22:50:27 +00:00
2 changed files with 61 additions and 0 deletions

View File

@@ -255,6 +255,16 @@ class TracingChannel {
asyncEnd;
error;
get hasSubscribers() {
return (
this.start.hasSubscribers ||
this.end.hasSubscribers ||
this.asyncStart.hasSubscribers ||
this.asyncEnd.hasSubscribers ||
this.error.hasSubscribers
);
}
constructor(nameOrChannels) {
if (typeof nameOrChannels === "string") {
this.start = channel(`tracing:${nameOrChannels}:start`);

View File

@@ -0,0 +1,51 @@
'use strict';
const common = require('../common');
const dc = require('diagnostics_channel');
const assert = require('assert');
const handler = common.mustNotCall();
{
const handlers = {
start: common.mustNotCall()
};
const channel = dc.tracingChannel('test');
assert.strictEqual(channel.hasSubscribers, false);
channel.subscribe(handlers);
assert.strictEqual(channel.hasSubscribers, true);
channel.unsubscribe(handlers);
assert.strictEqual(channel.hasSubscribers, false);
channel.start.subscribe(handler);
assert.strictEqual(channel.hasSubscribers, true);
channel.start.unsubscribe(handler);
assert.strictEqual(channel.hasSubscribers, false);
}
{
const handlers = {
asyncEnd: common.mustNotCall()
};
const channel = dc.tracingChannel('test');
assert.strictEqual(channel.hasSubscribers, false);
channel.subscribe(handlers);
assert.strictEqual(channel.hasSubscribers, true);
channel.unsubscribe(handlers);
assert.strictEqual(channel.hasSubscribers, false);
channel.asyncEnd.subscribe(handler);
assert.strictEqual(channel.hasSubscribers, true);
channel.asyncEnd.unsubscribe(handler);
assert.strictEqual(channel.hasSubscribers, false);
}