diff options
Diffstat (limited to 'ext/node/polyfills/diagnostics_channel.ts')
-rw-r--r-- | ext/node/polyfills/diagnostics_channel.ts | 93 |
1 files changed, 0 insertions, 93 deletions
diff --git a/ext/node/polyfills/diagnostics_channel.ts b/ext/node/polyfills/diagnostics_channel.ts deleted file mode 100644 index 4f54c3431..000000000 --- a/ext/node/polyfills/diagnostics_channel.ts +++ /dev/null @@ -1,93 +0,0 @@ -// Copyright 2018-2024 the Deno authors. All rights reserved. MIT license. - -// TODO(petamoriken): enable prefer-primordials for node polyfills -// deno-lint-ignore-file prefer-primordials - -import { ERR_INVALID_ARG_TYPE } from "ext:deno_node/internal/errors.ts"; -import { validateFunction } from "ext:deno_node/internal/validators.mjs"; -import { nextTick } from "node:process"; - -type Subscriber = (message: unknown, name?: string) => void; - -export class Channel { - _subscribers: Subscriber[]; - name: string; - constructor(name: string) { - this._subscribers = []; - this.name = name; - } - - publish(message: unknown) { - for (const subscriber of this._subscribers) { - try { - subscriber(message, this.name); - } catch (err) { - nextTick(() => { - throw err; - }); - } - } - } - - subscribe(subscription: Subscriber) { - validateFunction(subscription, "subscription"); - - this._subscribers.push(subscription); - } - - unsubscribe(subscription: Subscriber) { - if (!this._subscribers.includes(subscription)) { - return false; - } - - this._subscribers.splice(this._subscribers.indexOf(subscription), 1); - - return true; - } - - get hasSubscribers() { - return this._subscribers.length > 0; - } -} - -const channels: Record<string, Channel> = {}; - -export function channel(name: string) { - if (typeof name !== "string" && typeof name !== "symbol") { - throw new ERR_INVALID_ARG_TYPE("channel", ["string", "symbol"], name); - } - - if (!Object.hasOwn(channels, name)) { - channels[name] = new Channel(name); - } - - return channels[name]; -} - -export function hasSubscribers(name: string) { - if (!Object.hasOwn(channels, name)) { - return false; - } - - return channels[name].hasSubscribers; -} - -export function subscribe(name: string, subscription: Subscriber) { - const c = channel(name); - - return c.subscribe(subscription); -} - -export function unsubscribe(name: string, subscription: Subscriber) { - const c = channel(name); - - return c.unsubscribe(subscription); -} - -export default { - channel, - hasSubscribers, - subscribe, - unsubscribe, - Channel, -}; |