diff options
author | Leo Kettmeir <crowlkats@toaxl.com> | 2023-02-07 20:22:46 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2023-02-07 20:22:46 +0100 |
commit | b4aa1530970f7b9cc4e6f2f27e077852c4e178d3 (patch) | |
tree | 3d008912affe8550692183bd2697a386db5e3c79 /runtime/js/40_signals.js | |
parent | 65500f36e870b4ada3996b06aa287e30177d21a3 (diff) |
refactor: Use ES modules for internal runtime code (#17648)
This PR refactors all internal js files (except core) to be written as
ES modules.
`__bootstrap`has been mostly replaced with static imports in form in
`internal:[path to file from repo root]`.
To specify if files are ESM, an `esm` method has been added to
`Extension`, similar to the `js` method.
A new ModuleLoader called `InternalModuleLoader` has been added to
enable the loading of internal specifiers, which is used in all
situations except when a snapshot is only loaded, and not a new one is
created from it.
---------
Co-authored-by: Bartek IwaĆczuk <biwanczuk@gmail.com>
Diffstat (limited to 'runtime/js/40_signals.js')
-rw-r--r-- | runtime/js/40_signals.js | 129 |
1 files changed, 62 insertions, 67 deletions
diff --git a/runtime/js/40_signals.js b/runtime/js/40_signals.js index ff1502a55..4ae310151 100644 --- a/runtime/js/40_signals.js +++ b/runtime/js/40_signals.js @@ -1,88 +1,83 @@ // Copyright 2018-2023 the Deno authors. All rights reserved. MIT license. -"use strict"; -((window) => { - const core = window.Deno.core; - const ops = core.ops; - const { - SafeSetIterator, - Set, - SetPrototypeDelete, - SymbolFor, - TypeError, - } = window.__bootstrap.primordials; +const core = globalThis.Deno.core; +const ops = core.ops; +const primordials = globalThis.__bootstrap.primordials; +const { + SafeSetIterator, + Set, + SetPrototypeDelete, + SymbolFor, + TypeError, +} = primordials; - function bindSignal(signo) { - return ops.op_signal_bind(signo); - } +function bindSignal(signo) { + return ops.op_signal_bind(signo); +} - function pollSignal(rid) { - const promise = core.opAsync("op_signal_poll", rid); - core.unrefOp(promise[SymbolFor("Deno.core.internalPromiseId")]); - return promise; - } +function pollSignal(rid) { + const promise = core.opAsync("op_signal_poll", rid); + core.unrefOp(promise[SymbolFor("Deno.core.internalPromiseId")]); + return promise; +} - function unbindSignal(rid) { - ops.op_signal_unbind(rid); - } +function unbindSignal(rid) { + ops.op_signal_unbind(rid); +} - // Stores signal listeners and resource data. This has type of - // `Record<string, { rid: number | undefined, listeners: Set<() => void> }` - const signalData = {}; +// Stores signal listeners and resource data. This has type of +// `Record<string, { rid: number | undefined, listeners: Set<() => void> }` +const signalData = {}; - /** Gets the signal handlers and resource data of the given signal */ - function getSignalData(signo) { - return signalData[signo] ?? - (signalData[signo] = { rid: undefined, listeners: new Set() }); - } +/** Gets the signal handlers and resource data of the given signal */ +function getSignalData(signo) { + return signalData[signo] ?? + (signalData[signo] = { rid: undefined, listeners: new Set() }); +} - function checkSignalListenerType(listener) { - if (typeof listener !== "function") { - throw new TypeError( - `Signal listener must be a function. "${typeof listener}" is given.`, - ); - } +function checkSignalListenerType(listener) { + if (typeof listener !== "function") { + throw new TypeError( + `Signal listener must be a function. "${typeof listener}" is given.`, + ); } +} - function addSignalListener(signo, listener) { - checkSignalListenerType(listener); +function addSignalListener(signo, listener) { + checkSignalListenerType(listener); - const sigData = getSignalData(signo); - sigData.listeners.add(listener); + const sigData = getSignalData(signo); + sigData.listeners.add(listener); - if (!sigData.rid) { - // If signal resource doesn't exist, create it. - // The program starts listening to the signal - sigData.rid = bindSignal(signo); - loop(sigData); - } + if (!sigData.rid) { + // If signal resource doesn't exist, create it. + // The program starts listening to the signal + sigData.rid = bindSignal(signo); + loop(sigData); } +} - function removeSignalListener(signo, listener) { - checkSignalListenerType(listener); +function removeSignalListener(signo, listener) { + checkSignalListenerType(listener); - const sigData = getSignalData(signo); - SetPrototypeDelete(sigData.listeners, listener); + const sigData = getSignalData(signo); + SetPrototypeDelete(sigData.listeners, listener); - if (sigData.listeners.size === 0 && sigData.rid) { - unbindSignal(sigData.rid); - sigData.rid = undefined; - } + if (sigData.listeners.size === 0 && sigData.rid) { + unbindSignal(sigData.rid); + sigData.rid = undefined; } +} - async function loop(sigData) { - while (sigData.rid) { - if (await pollSignal(sigData.rid)) { - return; - } - for (const listener of new SafeSetIterator(sigData.listeners)) { - listener(); - } +async function loop(sigData) { + while (sigData.rid) { + if (await pollSignal(sigData.rid)) { + return; + } + for (const listener of new SafeSetIterator(sigData.listeners)) { + listener(); } } +} - window.__bootstrap.signals = { - addSignalListener, - removeSignalListener, - }; -})(this); +export { addSignalListener, removeSignalListener }; |