summaryrefslogtreecommitdiff
path: root/runtime/js/40_signals.js
diff options
context:
space:
mode:
authorLeo Kettmeir <crowlkats@toaxl.com>2023-02-07 20:22:46 +0100
committerGitHub <noreply@github.com>2023-02-07 20:22:46 +0100
commitb4aa1530970f7b9cc4e6f2f27e077852c4e178d3 (patch)
tree3d008912affe8550692183bd2697a386db5e3c79 /runtime/js/40_signals.js
parent65500f36e870b4ada3996b06aa287e30177d21a3 (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.js129
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 };