// deno-fmt-ignore-file // deno-lint-ignore-file // Copyright Joyent and Node contributors. All rights reserved. MIT license. // Taken from Node 18.12.1 // This file is automatically generated by `tests/node_compat/runner/setup.ts`. Do not modify this file manually. 'use strict'; const common = require('../common'); const dc = require('diagnostics_channel'); const assert = require('assert'); const { Channel } = dc; const name = 'test'; const input = { foo: 'bar' }; // Individual channel objects can be created to avoid future lookups const channel = dc.channel(name); assert.ok(channel instanceof Channel); // No subscribers yet, should not publish assert.ok(!channel.hasSubscribers); const subscriber = common.mustCall((message, name) => { assert.strictEqual(name, channel.name); assert.deepStrictEqual(message, input); }); // Now there's a subscriber, should publish dc.subscribe(name, subscriber); assert.ok(channel.hasSubscribers); // The ActiveChannel prototype swap should not fail instanceof assert.ok(channel instanceof Channel); // Should trigger the subscriber once channel.publish(input); // Should not publish after subscriber is unsubscribed assert.ok(dc.unsubscribe(name, subscriber)); assert.ok(!channel.hasSubscribers); // unsubscribe() should return false when subscriber is not found assert.ok(!dc.unsubscribe(name, subscriber)); assert.throws(() => { dc.subscribe(name, null); }, { code: 'ERR_INVALID_ARG_TYPE' }); // Reaching zero subscribers should not delete from the channels map as there // will be no more weakref to incRef if another subscribe happens while the // channel object itself exists. channel.subscribe(subscriber); channel.unsubscribe(subscriber); channel.subscribe(subscriber);