summaryrefslogtreecommitdiff
path: root/cli
diff options
context:
space:
mode:
Diffstat (limited to 'cli')
-rw-r--r--cli/diagnostics.rs3
-rw-r--r--cli/dts/lib.deno.ns.d.ts5
-rw-r--r--cli/dts/lib.deno.unstable.d.ts174
-rw-r--r--cli/tests/testdata/raw_mode_cbreak.ts2
-rw-r--r--cli/tests/unit/process_test.ts32
-rw-r--r--cli/tests/unit/signal_test.ts58
6 files changed, 89 insertions, 185 deletions
diff --git a/cli/diagnostics.rs b/cli/diagnostics.rs
index 01c096a11..203ae2e84 100644
--- a/cli/diagnostics.rs
+++ b/cli/diagnostics.rs
@@ -25,17 +25,14 @@ const UNSTABLE_DENO_PROPS: &[&str] = &[
"EmitOptions",
"EmitResult",
"HttpClient",
- "LinuxSignal",
"Location",
"MXRecord",
- "MacOSSignal",
"Metrics",
"OpMetrics",
"RecordType",
"ResolveDnsOptions",
"SRVRecord",
"SetRawOptions",
- "Signal",
"SignalStream",
"StartTlsOptions",
"SystemMemoryInfo",
diff --git a/cli/dts/lib.deno.ns.d.ts b/cli/dts/lib.deno.ns.d.ts
index 6a5b73112..b8126f4cf 100644
--- a/cli/dts/lib.deno.ns.d.ts
+++ b/cli/dts/lib.deno.ns.d.ts
@@ -1982,13 +1982,12 @@ declare namespace Deno {
stderrOutput(): Promise<Uint8Array>;
close(): void;
- /** **UNSTABLE**: The `signo` argument may change to require the Deno.Signal
- * enum.
+ /** **UNSTABLE**
*
* Send a signal to process. This functionality currently only works on
* Linux and Mac OS.
*/
- kill(signo: number): void;
+ kill(signo: string): void; // TODO(ry): Use Signal type here once made stable.
}
export type ProcessStatus =
diff --git a/cli/dts/lib.deno.unstable.d.ts b/cli/dts/lib.deno.unstable.d.ts
index d991196cb..82ab9f5a1 100644
--- a/cli/dts/lib.deno.unstable.d.ts
+++ b/cli/dts/lib.deno.unstable.d.ts
@@ -562,77 +562,40 @@ declare namespace Deno {
*/
export function applySourceMap(location: Location): Location;
- enum LinuxSignal {
- SIGHUP = 1,
- SIGINT = 2,
- SIGQUIT = 3,
- SIGILL = 4,
- SIGTRAP = 5,
- SIGABRT = 6,
- SIGBUS = 7,
- SIGFPE = 8,
- SIGKILL = 9,
- SIGUSR1 = 10,
- SIGSEGV = 11,
- SIGUSR2 = 12,
- SIGPIPE = 13,
- SIGALRM = 14,
- SIGTERM = 15,
- SIGSTKFLT = 16,
- SIGCHLD = 17,
- SIGCONT = 18,
- SIGSTOP = 19,
- SIGTSTP = 20,
- SIGTTIN = 21,
- SIGTTOU = 22,
- SIGURG = 23,
- SIGXCPU = 24,
- SIGXFSZ = 25,
- SIGVTALRM = 26,
- SIGPROF = 27,
- SIGWINCH = 28,
- SIGIO = 29,
- SIGPWR = 30,
- SIGSYS = 31,
- }
- enum MacOSSignal {
- SIGHUP = 1,
- SIGINT = 2,
- SIGQUIT = 3,
- SIGILL = 4,
- SIGTRAP = 5,
- SIGABRT = 6,
- SIGEMT = 7,
- SIGFPE = 8,
- SIGKILL = 9,
- SIGBUS = 10,
- SIGSEGV = 11,
- SIGSYS = 12,
- SIGPIPE = 13,
- SIGALRM = 14,
- SIGTERM = 15,
- SIGURG = 16,
- SIGSTOP = 17,
- SIGTSTP = 18,
- SIGCONT = 19,
- SIGCHLD = 20,
- SIGTTIN = 21,
- SIGTTOU = 22,
- SIGIO = 23,
- SIGXCPU = 24,
- SIGXFSZ = 25,
- SIGVTALRM = 26,
- SIGPROF = 27,
- SIGWINCH = 28,
- SIGINFO = 29,
- SIGUSR1 = 30,
- SIGUSR2 = 31,
- }
-
- /** **UNSTABLE**: Further changes required to make platform independent.
- *
- * Signals numbers. This is platform dependent. */
- export const Signal: typeof MacOSSignal | typeof LinuxSignal;
+ export type Signal =
+ | "SIGABRT"
+ | "SIGALRM"
+ | "SIGBUS"
+ | "SIGCHLD"
+ | "SIGCONT"
+ | "SIGEMT"
+ | "SIGFPE"
+ | "SIGHUP"
+ | "SIGILL"
+ | "SIGINFO"
+ | "SIGINT"
+ | "SIGIO"
+ | "SIGKILL"
+ | "SIGPIPE"
+ | "SIGPROF"
+ | "SIGPWR"
+ | "SIGQUIT"
+ | "SIGSEGV"
+ | "SIGSTKFLT"
+ | "SIGSTOP"
+ | "SIGSYS"
+ | "SIGTERM"
+ | "SIGTRAP"
+ | "SIGTSTP"
+ | "SIGTTIN"
+ | "SIGTTOU"
+ | "SIGURG"
+ | "SIGUSR1"
+ | "SIGUSR2"
+ | "SIGVTALRM"
+ | "SIGWINCH"
+ | "SIGXCPU"
+ | "SIGXFSZ";
/** **UNSTABLE**: new API, yet to be vetted.
*
@@ -640,7 +603,7 @@ declare namespace Deno {
* `PromiseLike`. */
export class SignalStream
implements AsyncIterableIterator<void>, PromiseLike<void> {
- constructor(signal: typeof Deno.Signal);
+ constructor(signal: Signal);
then<T, S>(
f: (v: void) => T | Promise<T>,
g?: (v: void) => S | Promise<S>,
@@ -656,7 +619,7 @@ declare namespace Deno {
* iterator.
*
* ```ts
- * for await (const _ of Deno.signal(Deno.Signal.SIGTERM)) {
+ * for await (const _ of Deno.signal("SIGTERM")) {
* console.log("got SIGTERM!");
* }
* ```
@@ -665,7 +628,7 @@ declare namespace Deno {
* first one.
*
* ```ts
- * await Deno.signal(Deno.Signal.SIGTERM);
+ * await Deno.signal("SIGTERM");
* console.log("SIGTERM received!")
* ```
*
@@ -673,7 +636,7 @@ declare namespace Deno {
* of the signal stream object.
*
* ```ts
- * const sig = Deno.signal(Deno.Signal.SIGTERM);
+ * const sig = Deno.signal("SIGTERM");
* setTimeout(() => { sig.dispose(); }, 5000);
* for await (const _ of sig) {
* console.log("SIGTERM!")
@@ -685,55 +648,7 @@ declare namespace Deno {
*
* NOTE: This functionality is not yet implemented on Windows.
*/
- export function signal(signo: number): SignalStream;
-
- /** **UNSTABLE**: new API, yet to be vetted. */
- export const signals: {
- /** Returns the stream of SIGALRM signals.
- *
- * This method is the shorthand for `Deno.signal(Deno.Signal.SIGALRM)`. */
- alarm: () => SignalStream;
- /** Returns the stream of SIGCHLD signals.
- *
- * This method is the shorthand for `Deno.signal(Deno.Signal.SIGCHLD)`. */
- child: () => SignalStream;
- /** Returns the stream of SIGHUP signals.
- *
- * This method is the shorthand for `Deno.signal(Deno.Signal.SIGHUP)`. */
- hungup: () => SignalStream;
- /** Returns the stream of SIGINT signals.
- *
- * This method is the shorthand for `Deno.signal(Deno.Signal.SIGINT)`. */
- interrupt: () => SignalStream;
- /** Returns the stream of SIGIO signals.
- *
- * This method is the shorthand for `Deno.signal(Deno.Signal.SIGIO)`. */
- io: () => SignalStream;
- /** Returns the stream of SIGPIPE signals.
- *
- * This method is the shorthand for `Deno.signal(Deno.Signal.SIGPIPE)`. */
- pipe: () => SignalStream;
- /** Returns the stream of SIGQUIT signals.
- *
- * This method is the shorthand for `Deno.signal(Deno.Signal.SIGQUIT)`. */
- quit: () => SignalStream;
- /** Returns the stream of SIGTERM signals.
- *
- * This method is the shorthand for `Deno.signal(Deno.Signal.SIGTERM)`. */
- terminate: () => SignalStream;
- /** Returns the stream of SIGUSR1 signals.
- *
- * This method is the shorthand for `Deno.signal(Deno.Signal.SIGUSR1)`. */
- userDefined1: () => SignalStream;
- /** Returns the stream of SIGUSR2 signals.
- *
- * This method is the shorthand for `Deno.signal(Deno.Signal.SIGUSR2)`. */
- userDefined2: () => SignalStream;
- /** Returns the stream of SIGWINCH signals.
- *
- * This method is the shorthand for `Deno.signal(Deno.Signal.SIGWINCH)`. */
- windowChange: () => SignalStream;
- };
+ export function signal(sig: Signal): SignalStream;
export type SetRawOptions = {
cbreak: boolean;
@@ -803,11 +718,8 @@ declare namespace Deno {
},
>(opt: T): Process<T>;
- /** **UNSTABLE**: The `signo` argument may change to require the Deno.Signal
- * enum.
- *
- * Send a signal to process under given `pid`. This functionality currently
- * only works on Linux and Mac OS.
+ /** **UNSTABLE**: Send a signal to process under given `pid`. This
+ * functionality only works on Linux and Mac OS.
*
* If `pid` is negative, the signal will be sent to the process group
* identified by `pid`.
@@ -816,10 +728,10 @@ declare namespace Deno {
* cmd: ["sleep", "10000"]
* });
*
- * Deno.kill(p.pid, Deno.Signal.SIGINT);
+ * Deno.kill(p.pid, "SIGINT");
*
* Requires `allow-run` permission. */
- export function kill(pid: number, signo: number): void;
+ export function kill(pid: number, signo: Signal): void;
/** **UNSTABLE**: New API, yet to be vetted. Additional consideration is still
* necessary around the permissions required.
diff --git a/cli/tests/testdata/raw_mode_cbreak.ts b/cli/tests/testdata/raw_mode_cbreak.ts
index b1c6d324b..c66c36f0d 100644
--- a/cli/tests/testdata/raw_mode_cbreak.ts
+++ b/cli/tests/testdata/raw_mode_cbreak.ts
@@ -1,7 +1,7 @@
Deno.setRaw(0, true);
Deno.setRaw(0, true, { cbreak: true }); // Can be called multiple times
-const signal = Deno.signals.interrupt();
+const signal = Deno.signal("SIGINT");
Deno.stdout.writeSync(new TextEncoder().encode("S"));
diff --git a/cli/tests/unit/process_test.ts b/cli/tests/unit/process_test.ts
index 2d0a15b16..73df3fa91 100644
--- a/cli/tests/unit/process_test.ts
+++ b/cli/tests/unit/process_test.ts
@@ -120,7 +120,12 @@ unitTest(
},
async function runCommandFailedWithSignal() {
const p = Deno.run({
- cmd: [Deno.execPath(), "eval", "--unstable", "Deno.kill(Deno.pid, 9)"],
+ cmd: [
+ Deno.execPath(),
+ "eval",
+ "--unstable",
+ "Deno.kill(Deno.pid, 'SIGKILL')",
+ ],
});
const status = await p.status();
assertEquals(status.success, false);
@@ -436,7 +441,7 @@ unitTest(
let error = null;
try {
- p.kill(Deno.Signal.SIGTERM);
+ p.kill("SIGTERM");
} catch (e) {
error = e;
}
@@ -454,21 +459,13 @@ unitTest(
},
);
-unitTest(function signalNumbers() {
- if (Deno.build.os === "darwin") {
- assertEquals(Deno.Signal.SIGSTOP, 17);
- } else if (Deno.build.os === "linux") {
- assertEquals(Deno.Signal.SIGSTOP, 19);
- }
-});
-
unitTest(function killPermissions() {
assertThrows(() => {
// Unlike the other test cases, we don't have permission to spawn a
// subprocess we can safely kill. Instead we send SIGCONT to the current
// process - assuming that Deno does not have a special handler set for it
// and will just continue even if a signal is erroneously sent.
- Deno.kill(Deno.pid, Deno.Signal.SIGCONT);
+ Deno.kill(Deno.pid, "SIGCONT");
}, Deno.errors.PermissionDenied);
});
@@ -479,19 +476,17 @@ unitTest(
cmd: [Deno.execPath(), "eval", "setTimeout(() => {}, 10000)"],
});
- assertEquals(Deno.Signal.SIGINT, 2);
- Deno.kill(p.pid, Deno.Signal.SIGINT);
+ Deno.kill(p.pid, "SIGINT");
const status = await p.status();
assertEquals(status.success, false);
try {
- assertEquals(status.code, 128 + Deno.Signal.SIGINT);
- assertEquals(status.signal, Deno.Signal.SIGINT);
+ assertEquals(status.signal, "SIGINT");
} catch {
// TODO(nayeemrmn): On Windows sometimes the following values are given
// instead. Investigate and remove this catch when fixed.
- assertEquals(status.code, 1);
- assertEquals(status.signal, undefined);
+ assertEquals(status.code, 130);
+ assertEquals(status.signal, 2);
}
p.close();
},
@@ -505,7 +500,8 @@ unitTest({ perms: { run: true, read: true } }, function killFailed() {
assert(!p.stdout);
assertThrows(() => {
- Deno.kill(p.pid, 12345);
+ // @ts-expect-error testing runtime error of bad signal
+ Deno.kill(p.pid, "foobar");
}, TypeError);
p.close();
diff --git a/cli/tests/unit/signal_test.ts b/cli/tests/unit/signal_test.ts
index d0cd40950..9afa737ee 100644
--- a/cli/tests/unit/signal_test.ts
+++ b/cli/tests/unit/signal_test.ts
@@ -13,84 +13,84 @@ unitTest(
function signalsNotImplemented() {
assertThrows(
() => {
- Deno.signal(1);
+ Deno.signal("SIGINT");
},
Error,
"not implemented",
);
assertThrows(
() => {
- Deno.signals.alarm(); // for SIGALRM
+ Deno.signal("SIGALRM");
},
Error,
"not implemented",
);
assertThrows(
() => {
- Deno.signals.child(); // for SIGCHLD
+ Deno.signal("SIGCHLD");
},
Error,
"not implemented",
);
assertThrows(
() => {
- Deno.signals.hungup(); // for SIGHUP
+ Deno.signal("SIGHUP");
},
Error,
"not implemented",
);
assertThrows(
() => {
- Deno.signals.interrupt(); // for SIGINT
+ Deno.signal("SIGINT");
},
Error,
"not implemented",
);
assertThrows(
() => {
- Deno.signals.io(); // for SIGIO
+ Deno.signal("SIGIO");
},
Error,
"not implemented",
);
assertThrows(
() => {
- Deno.signals.pipe(); // for SIGPIPE
+ Deno.signal("SIGPIPE");
},
Error,
"not implemented",
);
assertThrows(
() => {
- Deno.signals.quit(); // for SIGQUIT
+ Deno.signal("SIGQUIT");
},
Error,
"not implemented",
);
assertThrows(
() => {
- Deno.signals.terminate(); // for SIGTERM
+ Deno.signal("SIGTERM");
},
Error,
"not implemented",
);
assertThrows(
() => {
- Deno.signals.userDefined1(); // for SIGUSR1
+ Deno.signal("SIGUSR1");
},
Error,
"not implemented",
);
assertThrows(
() => {
- Deno.signals.userDefined2(); // for SIGURS2
+ Deno.signal("SIGUSR2");
},
Error,
"not implemented",
);
assertThrows(
() => {
- Deno.signals.windowChange(); // for SIGWINCH
+ Deno.signal("SIGWINCH");
},
Error,
"not implemented",
@@ -106,12 +106,12 @@ unitTest(
const t = setInterval(() => {}, 1000);
let c = 0;
- const sig = Deno.signal(Deno.Signal.SIGUSR1);
+ const sig = Deno.signal("SIGUSR1");
setTimeout(async () => {
await delay(20);
for (const _ of Array(3)) {
// Sends SIGUSR1 3 times.
- Deno.kill(Deno.pid, Deno.Signal.SIGUSR1);
+ Deno.kill(Deno.pid, "SIGUSR1");
await delay(20);
}
sig.dispose();
@@ -138,7 +138,7 @@ unitTest(
Deno.execPath(),
"eval",
"--unstable",
- "(async () => { for await (const _ of Deno.signals.io()) {} })()",
+ "(async () => { for await (const _ of Deno.signal('SIGIO')) {} })()",
],
});
const res = await p.status();
@@ -154,9 +154,9 @@ unitTest(
// This prevents the program from exiting.
const t = setInterval(() => {}, 1000);
- const sig = Deno.signal(Deno.Signal.SIGUSR1);
+ const sig = Deno.signal("SIGUSR1");
setTimeout(() => {
- Deno.kill(Deno.pid, Deno.Signal.SIGUSR1);
+ Deno.kill(Deno.pid, "SIGUSR1");
resolvable.resolve();
}, 20);
await sig;
@@ -176,7 +176,7 @@ unitTest(
const t = setInterval(() => {}, 1000);
let called = false;
- const sig = Deno.signal(Deno.Signal.SIGUSR1);
+ const sig = Deno.signal("SIGUSR1");
sig.then(() => {
called = true;
});
@@ -200,37 +200,37 @@ unitTest(
{ ignore: Deno.build.os === "windows", perms: { run: true } },
function signalShorthandsTest() {
let s: Deno.SignalStream;
- s = Deno.signals.alarm(); // for SIGALRM
+ s = Deno.signal("SIGALRM");
assert(s instanceof Deno.SignalStream);
s.dispose();
- s = Deno.signals.child(); // for SIGCHLD
+ s = Deno.signal("SIGCHLD");
assert(s instanceof Deno.SignalStream);
s.dispose();
- s = Deno.signals.hungup(); // for SIGHUP
+ s = Deno.signal("SIGHUP");
assert(s instanceof Deno.SignalStream);
s.dispose();
- s = Deno.signals.interrupt(); // for SIGINT
+ s = Deno.signal("SIGINT");
assert(s instanceof Deno.SignalStream);
s.dispose();
- s = Deno.signals.io(); // for SIGIO
+ s = Deno.signal("SIGIO");
assert(s instanceof Deno.SignalStream);
s.dispose();
- s = Deno.signals.pipe(); // for SIGPIPE
+ s = Deno.signal("SIGPIPE");
assert(s instanceof Deno.SignalStream);
s.dispose();
- s = Deno.signals.quit(); // for SIGQUIT
+ s = Deno.signal("SIGQUIT");
assert(s instanceof Deno.SignalStream);
s.dispose();
- s = Deno.signals.terminate(); // for SIGTERM
+ s = Deno.signal("SIGTERM");
assert(s instanceof Deno.SignalStream);
s.dispose();
- s = Deno.signals.userDefined1(); // for SIGUSR1
+ s = Deno.signal("SIGUSR1");
assert(s instanceof Deno.SignalStream);
s.dispose();
- s = Deno.signals.userDefined2(); // for SIGURS2
+ s = Deno.signal("SIGUSR2");
assert(s instanceof Deno.SignalStream);
s.dispose();
- s = Deno.signals.windowChange(); // for SIGWINCH
+ s = Deno.signal("SIGWINCH");
assert(s instanceof Deno.SignalStream);
s.dispose();
},