mirror of
https://github.com/denoland/deno.git
synced 2025-09-26 12:19:12 +00:00
parent
c32d692a8f
commit
195b17ae12
9 changed files with 58 additions and 368 deletions
231
cli/tsc/dts/lib.deno.ns.d.ts
vendored
231
cli/tsc/dts/lib.deno.ns.d.ts
vendored
|
@ -3925,175 +3925,6 @@ declare namespace Deno {
|
||||||
options?: { recursive: boolean },
|
options?: { recursive: boolean },
|
||||||
): FsWatcher;
|
): FsWatcher;
|
||||||
|
|
||||||
/**
|
|
||||||
* Options which can be used with {@linkcode Deno.run}.
|
|
||||||
*
|
|
||||||
* @deprecated This will be removed in Deno 2.0. See the
|
|
||||||
* {@link https://docs.deno.com/runtime/manual/advanced/migrate_deprecations | Deno 1.x to 2.x Migration Guide}
|
|
||||||
* for migration instructions.
|
|
||||||
*
|
|
||||||
* @category Subprocess */
|
|
||||||
export interface RunOptions {
|
|
||||||
/** Arguments to pass.
|
|
||||||
*
|
|
||||||
* _Note_: the first element needs to be a path to the executable that is
|
|
||||||
* being run. */
|
|
||||||
cmd: readonly string[] | [string | URL, ...string[]];
|
|
||||||
/** The current working directory that should be used when running the
|
|
||||||
* sub-process. */
|
|
||||||
cwd?: string;
|
|
||||||
/** Any environment variables to be set when running the sub-process. */
|
|
||||||
env?: Record<string, string>;
|
|
||||||
/** By default subprocess inherits `stdout` of parent process. To change
|
|
||||||
* this this option can be set to a resource ID (_rid_) of an open file,
|
|
||||||
* `"inherit"`, `"piped"`, or `"null"`:
|
|
||||||
*
|
|
||||||
* - _number_: the resource ID of an open file/resource. This allows you to
|
|
||||||
* write to a file.
|
|
||||||
* - `"inherit"`: The default if unspecified. The subprocess inherits from the
|
|
||||||
* parent.
|
|
||||||
* - `"piped"`: A new pipe should be arranged to connect the parent and child
|
|
||||||
* sub-process.
|
|
||||||
* - `"null"`: This stream will be ignored. This is the equivalent of attaching
|
|
||||||
* the stream to `/dev/null`.
|
|
||||||
*/
|
|
||||||
stdout?: "inherit" | "piped" | "null" | number;
|
|
||||||
/** By default subprocess inherits `stderr` of parent process. To change
|
|
||||||
* this this option can be set to a resource ID (_rid_) of an open file,
|
|
||||||
* `"inherit"`, `"piped"`, or `"null"`:
|
|
||||||
*
|
|
||||||
* - _number_: the resource ID of an open file/resource. This allows you to
|
|
||||||
* write to a file.
|
|
||||||
* - `"inherit"`: The default if unspecified. The subprocess inherits from the
|
|
||||||
* parent.
|
|
||||||
* - `"piped"`: A new pipe should be arranged to connect the parent and child
|
|
||||||
* sub-process.
|
|
||||||
* - `"null"`: This stream will be ignored. This is the equivalent of attaching
|
|
||||||
* the stream to `/dev/null`.
|
|
||||||
*/
|
|
||||||
stderr?: "inherit" | "piped" | "null" | number;
|
|
||||||
/** By default subprocess inherits `stdin` of parent process. To change
|
|
||||||
* this this option can be set to a resource ID (_rid_) of an open file,
|
|
||||||
* `"inherit"`, `"piped"`, or `"null"`:
|
|
||||||
*
|
|
||||||
* - _number_: the resource ID of an open file/resource. This allows you to
|
|
||||||
* read from a file.
|
|
||||||
* - `"inherit"`: The default if unspecified. The subprocess inherits from the
|
|
||||||
* parent.
|
|
||||||
* - `"piped"`: A new pipe should be arranged to connect the parent and child
|
|
||||||
* sub-process.
|
|
||||||
* - `"null"`: This stream will be ignored. This is the equivalent of attaching
|
|
||||||
* the stream to `/dev/null`.
|
|
||||||
*/
|
|
||||||
stdin?: "inherit" | "piped" | "null" | number;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* The status resolved from the `.status()` method of a
|
|
||||||
* {@linkcode Deno.Process} instance.
|
|
||||||
*
|
|
||||||
* If `success` is `true`, then `code` will be `0`, but if `success` is
|
|
||||||
* `false`, the sub-process exit code will be set in `code`.
|
|
||||||
*
|
|
||||||
* @deprecated This will be removed in Deno 2.0. See the
|
|
||||||
* {@link https://docs.deno.com/runtime/manual/advanced/migrate_deprecations | Deno 1.x to 2.x Migration Guide}
|
|
||||||
* for migration instructions.
|
|
||||||
*
|
|
||||||
* @category Subprocess */
|
|
||||||
export type ProcessStatus =
|
|
||||||
| {
|
|
||||||
success: true;
|
|
||||||
code: 0;
|
|
||||||
signal?: undefined;
|
|
||||||
}
|
|
||||||
| {
|
|
||||||
success: false;
|
|
||||||
code: number;
|
|
||||||
signal?: number;
|
|
||||||
};
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Represents an instance of a sub process that is returned from
|
|
||||||
* {@linkcode Deno.run} which can be used to manage the sub-process.
|
|
||||||
*
|
|
||||||
* @deprecated This will be removed in Deno 2.0. See the
|
|
||||||
* {@link https://docs.deno.com/runtime/manual/advanced/migrate_deprecations | Deno 1.x to 2.x Migration Guide}
|
|
||||||
* for migration instructions.
|
|
||||||
*
|
|
||||||
* @category Subprocess */
|
|
||||||
export class Process<T extends RunOptions = RunOptions> {
|
|
||||||
/** The resource ID of the sub-process. */
|
|
||||||
readonly rid: number;
|
|
||||||
/** The operating system's process ID for the sub-process. */
|
|
||||||
readonly pid: number;
|
|
||||||
/** A reference to the sub-processes `stdin`, which allows interacting with
|
|
||||||
* the sub-process at a low level. */
|
|
||||||
readonly stdin: T["stdin"] extends "piped" ? Writer & Closer & {
|
|
||||||
writable: WritableStream<Uint8Array>;
|
|
||||||
}
|
|
||||||
: (Writer & Closer & { writable: WritableStream<Uint8Array> }) | null;
|
|
||||||
/** A reference to the sub-processes `stdout`, which allows interacting with
|
|
||||||
* the sub-process at a low level. */
|
|
||||||
readonly stdout: T["stdout"] extends "piped" ? Reader & Closer & {
|
|
||||||
readable: ReadableStream<Uint8Array>;
|
|
||||||
}
|
|
||||||
: (Reader & Closer & { readable: ReadableStream<Uint8Array> }) | null;
|
|
||||||
/** A reference to the sub-processes `stderr`, which allows interacting with
|
|
||||||
* the sub-process at a low level. */
|
|
||||||
readonly stderr: T["stderr"] extends "piped" ? Reader & Closer & {
|
|
||||||
readable: ReadableStream<Uint8Array>;
|
|
||||||
}
|
|
||||||
: (Reader & Closer & { readable: ReadableStream<Uint8Array> }) | null;
|
|
||||||
/** Wait for the process to exit and return its exit status.
|
|
||||||
*
|
|
||||||
* Calling this function multiple times will return the same status.
|
|
||||||
*
|
|
||||||
* The `stdin` reference to the process will be closed before waiting to
|
|
||||||
* avoid a deadlock.
|
|
||||||
*
|
|
||||||
* If `stdout` and/or `stderr` were set to `"piped"`, they must be closed
|
|
||||||
* manually before the process can exit.
|
|
||||||
*
|
|
||||||
* To run process to completion and collect output from both `stdout` and
|
|
||||||
* `stderr` use:
|
|
||||||
*
|
|
||||||
* ```ts
|
|
||||||
* const p = Deno.run({ cmd: [ "echo", "hello world" ], stderr: 'piped', stdout: 'piped' });
|
|
||||||
* const [status, stdout, stderr] = await Promise.all([
|
|
||||||
* p.status(),
|
|
||||||
* p.output(),
|
|
||||||
* p.stderrOutput()
|
|
||||||
* ]);
|
|
||||||
* p.close();
|
|
||||||
* ```
|
|
||||||
*/
|
|
||||||
status(): Promise<ProcessStatus>;
|
|
||||||
/** Buffer the stdout until EOF and return it as `Uint8Array`.
|
|
||||||
*
|
|
||||||
* You must set `stdout` to `"piped"` when creating the process.
|
|
||||||
*
|
|
||||||
* This calls `close()` on stdout after its done. */
|
|
||||||
output(): Promise<Uint8Array>;
|
|
||||||
/** Buffer the stderr until EOF and return it as `Uint8Array`.
|
|
||||||
*
|
|
||||||
* You must set `stderr` to `"piped"` when creating the process.
|
|
||||||
*
|
|
||||||
* This calls `close()` on stderr after its done. */
|
|
||||||
stderrOutput(): Promise<Uint8Array>;
|
|
||||||
/** Clean up resources associated with the sub-process instance. */
|
|
||||||
close(): void;
|
|
||||||
/** Send a signal to process.
|
|
||||||
* Default signal is `"SIGTERM"`.
|
|
||||||
*
|
|
||||||
* ```ts
|
|
||||||
* const p = Deno.run({ cmd: [ "sleep", "20" ]});
|
|
||||||
* p.kill("SIGTERM");
|
|
||||||
* p.close();
|
|
||||||
* ```
|
|
||||||
*/
|
|
||||||
kill(signo?: Signal): void;
|
|
||||||
}
|
|
||||||
|
|
||||||
/** Operating signals which can be listened for or sent to sub-processes. What
|
/** Operating signals which can be listened for or sent to sub-processes. What
|
||||||
* signals and what their standard behaviors are OS dependent.
|
* signals and what their standard behaviors are OS dependent.
|
||||||
*
|
*
|
||||||
|
@ -4175,61 +4006,6 @@ declare namespace Deno {
|
||||||
handler: () => void,
|
handler: () => void,
|
||||||
): void;
|
): void;
|
||||||
|
|
||||||
/**
|
|
||||||
* Spawns new subprocess. RunOptions must contain at a minimum the `opt.cmd`,
|
|
||||||
* an array of program arguments, the first of which is the binary.
|
|
||||||
*
|
|
||||||
* ```ts
|
|
||||||
* const p = Deno.run({
|
|
||||||
* cmd: ["curl", "https://example.com"],
|
|
||||||
* });
|
|
||||||
* const status = await p.status();
|
|
||||||
* ```
|
|
||||||
*
|
|
||||||
* Subprocess uses same working directory as parent process unless `opt.cwd`
|
|
||||||
* is specified.
|
|
||||||
*
|
|
||||||
* Environmental variables from parent process can be cleared using `opt.clearEnv`.
|
|
||||||
* Doesn't guarantee that only `opt.env` variables are present,
|
|
||||||
* as the OS may set environmental variables for processes.
|
|
||||||
*
|
|
||||||
* Environmental variables for subprocess can be specified using `opt.env`
|
|
||||||
* mapping.
|
|
||||||
*
|
|
||||||
* `opt.uid` sets the child process’s user ID. This translates to a setuid call
|
|
||||||
* in the child process. Failure in the setuid call will cause the spawn to fail.
|
|
||||||
*
|
|
||||||
* `opt.gid` is similar to `opt.uid`, but sets the group ID of the child process.
|
|
||||||
* This has the same semantics as the uid field.
|
|
||||||
*
|
|
||||||
* By default subprocess inherits stdio of parent process. To change
|
|
||||||
* this this, `opt.stdin`, `opt.stdout`, and `opt.stderr` can be set
|
|
||||||
* independently to a resource ID (_rid_) of an open file, `"inherit"`,
|
|
||||||
* `"piped"`, or `"null"`:
|
|
||||||
*
|
|
||||||
* - _number_: the resource ID of an open file/resource. This allows you to
|
|
||||||
* read or write to a file.
|
|
||||||
* - `"inherit"`: The default if unspecified. The subprocess inherits from the
|
|
||||||
* parent.
|
|
||||||
* - `"piped"`: A new pipe should be arranged to connect the parent and child
|
|
||||||
* sub-process.
|
|
||||||
* - `"null"`: This stream will be ignored. This is the equivalent of attaching
|
|
||||||
* the stream to `/dev/null`.
|
|
||||||
*
|
|
||||||
* Details of the spawned process are returned as an instance of
|
|
||||||
* {@linkcode Deno.Process}.
|
|
||||||
*
|
|
||||||
* Requires `allow-run` permission.
|
|
||||||
*
|
|
||||||
* @deprecated This will be soft-removed in Deno 2.0. See the
|
|
||||||
* {@link https://docs.deno.com/runtime/manual/advanced/migrate_deprecations | Deno 1.x to 2.x Migration Guide}
|
|
||||||
* for migration instructions.
|
|
||||||
*
|
|
||||||
* @tags allow-run
|
|
||||||
* @category Subprocess
|
|
||||||
*/
|
|
||||||
export function run<T extends RunOptions = RunOptions>(opt: T): Process<T>;
|
|
||||||
|
|
||||||
/** Create a child process.
|
/** Create a child process.
|
||||||
*
|
*
|
||||||
* If any stdio options are not set to `"piped"`, accessing the corresponding
|
* If any stdio options are not set to `"piped"`, accessing the corresponding
|
||||||
|
@ -5308,11 +5084,10 @@ declare namespace Deno {
|
||||||
* Windows.
|
* Windows.
|
||||||
*
|
*
|
||||||
* ```ts
|
* ```ts
|
||||||
* const p = Deno.run({
|
* const command = new Deno.Command("sleep", { args: ["10000"] });
|
||||||
* cmd: ["sleep", "10000"]
|
* const child = command.spawn();
|
||||||
* });
|
|
||||||
*
|
*
|
||||||
* Deno.kill(p.pid, "SIGINT");
|
* Deno.kill(child.pid, "SIGINT");
|
||||||
* ```
|
* ```
|
||||||
*
|
*
|
||||||
* Requires `allow-run` permission.
|
* Requires `allow-run` permission.
|
||||||
|
|
74
cli/tsc/dts/lib.deno.unstable.d.ts
vendored
74
cli/tsc/dts/lib.deno.unstable.d.ts
vendored
|
@ -840,80 +840,6 @@ declare namespace Deno {
|
||||||
present(): void;
|
present(): void;
|
||||||
}
|
}
|
||||||
|
|
||||||
/** **UNSTABLE**: New API, yet to be vetted.
|
|
||||||
*
|
|
||||||
* These are unstable options which can be used with {@linkcode Deno.run}.
|
|
||||||
*
|
|
||||||
* @category Subprocess
|
|
||||||
* @experimental
|
|
||||||
*/
|
|
||||||
export interface UnstableRunOptions extends RunOptions {
|
|
||||||
/** If `true`, clears the environment variables before executing the
|
|
||||||
* sub-process.
|
|
||||||
*
|
|
||||||
* @default {false} */
|
|
||||||
clearEnv?: boolean;
|
|
||||||
/** For POSIX systems, sets the group ID for the sub process. */
|
|
||||||
gid?: number;
|
|
||||||
/** For POSIX systems, sets the user ID for the sub process. */
|
|
||||||
uid?: number;
|
|
||||||
}
|
|
||||||
|
|
||||||
/** **UNSTABLE**: New API, yet to be vetted.
|
|
||||||
*
|
|
||||||
* Spawns new subprocess. RunOptions must contain at a minimum the `opt.cmd`,
|
|
||||||
* an array of program arguments, the first of which is the binary.
|
|
||||||
*
|
|
||||||
* ```ts
|
|
||||||
* const p = Deno.run({
|
|
||||||
* cmd: ["curl", "https://example.com"],
|
|
||||||
* });
|
|
||||||
* const status = await p.status();
|
|
||||||
* ```
|
|
||||||
*
|
|
||||||
* Subprocess uses same working directory as parent process unless `opt.cwd`
|
|
||||||
* is specified.
|
|
||||||
*
|
|
||||||
* Environmental variables from parent process can be cleared using `opt.clearEnv`.
|
|
||||||
* Doesn't guarantee that only `opt.env` variables are present,
|
|
||||||
* as the OS may set environmental variables for processes.
|
|
||||||
*
|
|
||||||
* Environmental variables for subprocess can be specified using `opt.env`
|
|
||||||
* mapping.
|
|
||||||
*
|
|
||||||
* `opt.uid` sets the child process’s user ID. This translates to a setuid call
|
|
||||||
* in the child process. Failure in the setuid call will cause the spawn to fail.
|
|
||||||
*
|
|
||||||
* `opt.gid` is similar to `opt.uid`, but sets the group ID of the child process.
|
|
||||||
* This has the same semantics as the uid field.
|
|
||||||
*
|
|
||||||
* By default subprocess inherits stdio of parent process. To change
|
|
||||||
* this this, `opt.stdin`, `opt.stdout`, and `opt.stderr` can be set
|
|
||||||
* independently to a resource ID (_rid_) of an open file, `"inherit"`,
|
|
||||||
* `"piped"`, or `"null"`:
|
|
||||||
*
|
|
||||||
* - _number_: the resource ID of an open file/resource. This allows you to
|
|
||||||
* read or write to a file.
|
|
||||||
* - `"inherit"`: The default if unspecified. The subprocess inherits from the
|
|
||||||
* parent.
|
|
||||||
* - `"piped"`: A new pipe should be arranged to connect the parent and child
|
|
||||||
* sub-process.
|
|
||||||
* - `"null"`: This stream will be ignored. This is the equivalent of attaching
|
|
||||||
* the stream to `/dev/null`.
|
|
||||||
*
|
|
||||||
* Details of the spawned process are returned as an instance of
|
|
||||||
* {@linkcode Deno.Process}.
|
|
||||||
*
|
|
||||||
* Requires `allow-run` permission.
|
|
||||||
*
|
|
||||||
* @tags allow-run
|
|
||||||
* @category Subprocess
|
|
||||||
* @experimental
|
|
||||||
*/
|
|
||||||
export function run<T extends UnstableRunOptions = UnstableRunOptions>(
|
|
||||||
opt: T,
|
|
||||||
): Process<T>;
|
|
||||||
|
|
||||||
/** **UNSTABLE**: New API, yet to be vetted.
|
/** **UNSTABLE**: New API, yet to be vetted.
|
||||||
*
|
*
|
||||||
* A custom `HttpClient` for use with {@linkcode fetch} function. This is
|
* A custom `HttpClient` for use with {@linkcode fetch} function. This is
|
||||||
|
|
|
@ -130,6 +130,8 @@ class Process {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Note: This function was soft-removed in Deno 2. Its types have been removed,
|
||||||
|
// but its implementation has been kept to avoid breaking changes.
|
||||||
function run({
|
function run({
|
||||||
cmd,
|
cmd,
|
||||||
cwd = undefined,
|
cwd = undefined,
|
||||||
|
@ -144,11 +146,6 @@ function run({
|
||||||
...new SafeArrayIterator(ArrayPrototypeSlice(cmd, 1)),
|
...new SafeArrayIterator(ArrayPrototypeSlice(cmd, 1)),
|
||||||
];
|
];
|
||||||
}
|
}
|
||||||
internals.warnOnDeprecatedApi(
|
|
||||||
"Deno.run()",
|
|
||||||
(new Error()).stack,
|
|
||||||
`Use "Deno.Command()" API instead.`,
|
|
||||||
);
|
|
||||||
const res = opRun({
|
const res = opRun({
|
||||||
cmd: ArrayPrototypeMap(cmd, String),
|
cmd: ArrayPrototypeMap(cmd, String),
|
||||||
cwd,
|
cwd,
|
||||||
|
|
29
tests/testdata/coverage/complex_test.ts
vendored
29
tests/testdata/coverage/complex_test.ts
vendored
|
@ -7,32 +7,29 @@ Deno.test("complex", function () {
|
||||||
Deno.test("sub process with stdin", async () => {
|
Deno.test("sub process with stdin", async () => {
|
||||||
// ensure launching deno run with stdin doesn't affect coverage
|
// ensure launching deno run with stdin doesn't affect coverage
|
||||||
const code = "console.log('5')";
|
const code = "console.log('5')";
|
||||||
// deno-lint-ignore no-deprecated-deno-api
|
const command = new Deno.Command(Deno.execPath(), {
|
||||||
const p = await Deno.run({
|
args: ["run", "-"],
|
||||||
cmd: [Deno.execPath(), "run", "-"],
|
|
||||||
stdin: "piped",
|
stdin: "piped",
|
||||||
stdout: "piped",
|
stdout: "piped",
|
||||||
});
|
});
|
||||||
const encoder = new TextEncoder();
|
await using child = command.spawn();
|
||||||
await p.stdin.write(encoder.encode(code));
|
await ReadableStream.from([code])
|
||||||
await p.stdin.close();
|
.pipeThrough(new TextEncoderStream())
|
||||||
const output = new TextDecoder().decode(await p.output());
|
.pipeTo(child.stdin);
|
||||||
p.close();
|
const { stdout } = await child.output();
|
||||||
|
const output = new TextDecoder().decode(stdout);
|
||||||
if (output.trim() !== "5") {
|
if (output.trim() !== "5") {
|
||||||
throw new Error("Failed");
|
throw new Error("Failed");
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
Deno.test("sub process with deno eval", async () => {
|
Deno.test("sub process with deno eval", () => {
|
||||||
// ensure launching deno eval doesn't affect coverage
|
// ensure launching deno eval doesn't affect coverage
|
||||||
const code = "console.log('5')";
|
const code = "console.log('5')";
|
||||||
// deno-lint-ignore no-deprecated-deno-api
|
const { stdout } = new Deno.Command(Deno.execPath(), {
|
||||||
const p = await Deno.run({
|
args: ["eval", code],
|
||||||
cmd: [Deno.execPath(), "eval", code],
|
}).outputSync();
|
||||||
stdout: "piped",
|
const output = new TextDecoder().decode(stdout);
|
||||||
});
|
|
||||||
const output = new TextDecoder().decode(await p.output());
|
|
||||||
p.close();
|
|
||||||
if (output.trim() !== "5") {
|
if (output.trim() !== "5") {
|
||||||
throw new Error("Failed");
|
throw new Error("Failed");
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,5 +1,6 @@
|
||||||
import { runEcho as runEcho2 } from "http://localhost:4545/run/warn_on_deprecated_api/mod.ts";
|
import { runEcho as runEcho2 } from "http://localhost:4545/run/warn_on_deprecated_api/mod.ts";
|
||||||
|
|
||||||
|
// @ts-ignore `Deno.run()` was soft-removed in Deno 2.
|
||||||
const p = Deno.run({
|
const p = Deno.run({
|
||||||
cmd: [
|
cmd: [
|
||||||
Deno.execPath(),
|
Deno.execPath(),
|
||||||
|
@ -11,6 +12,7 @@ await p.status();
|
||||||
p.close();
|
p.close();
|
||||||
|
|
||||||
async function runEcho() {
|
async function runEcho() {
|
||||||
|
// @ts-ignore `Deno.run()` was soft-removed in Deno 2.
|
||||||
const p = Deno.run({
|
const p = Deno.run({
|
||||||
cmd: [
|
cmd: [
|
||||||
Deno.execPath(),
|
Deno.execPath(),
|
||||||
|
|
|
@ -1,5 +1,4 @@
|
||||||
Download http://localhost:4545/run/warn_on_deprecated_api/mod.ts
|
Download http://localhost:4545/run/warn_on_deprecated_api/mod.ts
|
||||||
warning: Use of deprecated "Deno.run()" API. This API will be removed in Deno 2. Run again with DENO_VERBOSE_WARNINGS=1 to get more details.
|
|
||||||
hello world
|
hello world
|
||||||
hello world
|
hello world
|
||||||
hello world
|
hello world
|
||||||
|
|
|
@ -1,5 +1,4 @@
|
||||||
Download http://localhost:4545/run/warn_on_deprecated_api/mod.ts
|
Download http://localhost:4545/run/warn_on_deprecated_api/mod.ts
|
||||||
warning: Use of deprecated "Deno.run()" API. This API will be removed in Deno 2.
|
|
||||||
|
|
||||||
See the Deno 1 to 2 Migration Guide for more information at https://docs.deno.com/runtime/manual/advanced/migrate_deprecations
|
See the Deno 1 to 2 Migration Guide for more information at https://docs.deno.com/runtime/manual/advanced/migrate_deprecations
|
||||||
|
|
||||||
|
@ -9,7 +8,6 @@ Stack trace:
|
||||||
hint: Use "Deno.Command()" API instead.
|
hint: Use "Deno.Command()" API instead.
|
||||||
|
|
||||||
hello world
|
hello world
|
||||||
warning: Use of deprecated "Deno.run()" API. This API will be removed in Deno 2.
|
|
||||||
|
|
||||||
See the Deno 1 to 2 Migration Guide for more information at https://docs.deno.com/runtime/manual/advanced/migrate_deprecations
|
See the Deno 1 to 2 Migration Guide for more information at https://docs.deno.com/runtime/manual/advanced/migrate_deprecations
|
||||||
|
|
||||||
|
@ -20,7 +18,6 @@ Stack trace:
|
||||||
hint: Use "Deno.Command()" API instead.
|
hint: Use "Deno.Command()" API instead.
|
||||||
|
|
||||||
hello world
|
hello world
|
||||||
warning: Use of deprecated "Deno.run()" API. This API will be removed in Deno 2.
|
|
||||||
|
|
||||||
See the Deno 1 to 2 Migration Guide for more information at https://docs.deno.com/runtime/manual/advanced/migrate_deprecations
|
See the Deno 1 to 2 Migration Guide for more information at https://docs.deno.com/runtime/manual/advanced/migrate_deprecations
|
||||||
|
|
||||||
|
@ -31,7 +28,6 @@ Stack trace:
|
||||||
hint: Use "Deno.Command()" API instead.
|
hint: Use "Deno.Command()" API instead.
|
||||||
|
|
||||||
hello world
|
hello world
|
||||||
warning: Use of deprecated "Deno.run()" API. This API will be removed in Deno 2.
|
|
||||||
|
|
||||||
See the Deno 1 to 2 Migration Guide for more information at https://docs.deno.com/runtime/manual/advanced/migrate_deprecations
|
See the Deno 1 to 2 Migration Guide for more information at https://docs.deno.com/runtime/manual/advanced/migrate_deprecations
|
||||||
|
|
||||||
|
@ -51,7 +47,6 @@ hello world
|
||||||
hello world
|
hello world
|
||||||
hello world
|
hello world
|
||||||
hello world
|
hello world
|
||||||
warning: Use of deprecated "Deno.run()" API. This API will be removed in Deno 2.
|
|
||||||
|
|
||||||
See the Deno 1 to 2 Migration Guide for more information at https://docs.deno.com/runtime/manual/advanced/migrate_deprecations
|
See the Deno 1 to 2 Migration Guide for more information at https://docs.deno.com/runtime/manual/advanced/migrate_deprecations
|
||||||
|
|
||||||
|
|
|
@ -2087,7 +2087,6 @@ Deno.test({
|
||||||
async function client() {
|
async function client() {
|
||||||
const url = `http://${hostname}:${port}/`;
|
const url = `http://${hostname}:${port}/`;
|
||||||
const cmd = [
|
const cmd = [
|
||||||
"curl",
|
|
||||||
"-i",
|
"-i",
|
||||||
"--request",
|
"--request",
|
||||||
"GET",
|
"GET",
|
||||||
|
@ -2097,16 +2096,17 @@ Deno.test({
|
||||||
"--header",
|
"--header",
|
||||||
"Accept-Encoding: deflate, gzip",
|
"Accept-Encoding: deflate, gzip",
|
||||||
];
|
];
|
||||||
const proc = Deno.run({ cmd, stdout: "piped", stderr: "null" });
|
const { success, stdout } = await new Deno.Command("curl", {
|
||||||
const status = await proc.status();
|
args: cmd,
|
||||||
assert(status.success);
|
stderr: "null",
|
||||||
const output = decoder.decode(await proc.output());
|
}).output();
|
||||||
|
assert(success);
|
||||||
|
const output = decoder.decode(stdout);
|
||||||
assert(output.includes("vary: Accept-Encoding\r\n"));
|
assert(output.includes("vary: Accept-Encoding\r\n"));
|
||||||
assert(output.includes("content-encoding: gzip\r\n"));
|
assert(output.includes("content-encoding: gzip\r\n"));
|
||||||
// Ensure the content-length header is updated.
|
// Ensure the content-length header is updated.
|
||||||
assert(!output.includes(`content-length: ${contentLength}\r\n`));
|
assert(!output.includes(`content-length: ${contentLength}\r\n`));
|
||||||
assert(output.includes("content-length: "));
|
assert(output.includes("content-length: "));
|
||||||
proc.close();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
await Promise.all([server(), client()]);
|
await Promise.all([server(), client()]);
|
||||||
|
@ -2149,7 +2149,6 @@ Deno.test({
|
||||||
async function client() {
|
async function client() {
|
||||||
const url = `http://${hostname}:${port}/`;
|
const url = `http://${hostname}:${port}/`;
|
||||||
const cmd = [
|
const cmd = [
|
||||||
"curl",
|
|
||||||
"-i",
|
"-i",
|
||||||
"--request",
|
"--request",
|
||||||
"GET",
|
"GET",
|
||||||
|
@ -2159,13 +2158,15 @@ Deno.test({
|
||||||
"--header",
|
"--header",
|
||||||
"Accept-Encoding: deflate, gzip",
|
"Accept-Encoding: deflate, gzip",
|
||||||
];
|
];
|
||||||
const proc = Deno.run({ cmd, stdout: "piped", stderr: "null" });
|
const { success, stdout } = await new Deno.Command("curl", {
|
||||||
const status = await proc.status();
|
args: cmd,
|
||||||
assert(status.success);
|
stderr: "null",
|
||||||
const output = decoder.decode(await proc.output());
|
stdout: "piped",
|
||||||
|
}).output();
|
||||||
|
assert(success);
|
||||||
|
const output = decoder.decode(stdout);
|
||||||
assert(output.includes("vary: Accept-Encoding\r\n"));
|
assert(output.includes("vary: Accept-Encoding\r\n"));
|
||||||
assert(output.includes("content-encoding: arbitrary\r\n"));
|
assert(output.includes("content-encoding: arbitrary\r\n"));
|
||||||
proc.close();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
await Promise.all([server(), client()]);
|
await Promise.all([server(), client()]);
|
||||||
|
|
|
@ -1,3 +1,4 @@
|
||||||
|
// deno-lint-ignore-file no-deprecated-deno-api
|
||||||
// Copyright 2018-2024 the Deno authors. All rights reserved. MIT license.
|
// Copyright 2018-2024 the Deno authors. All rights reserved. MIT license.
|
||||||
import {
|
import {
|
||||||
assert,
|
assert,
|
||||||
|
@ -12,7 +13,7 @@ Deno.test(
|
||||||
{ permissions: { read: true, run: false } },
|
{ permissions: { read: true, run: false } },
|
||||||
function runPermissions() {
|
function runPermissions() {
|
||||||
assertThrows(() => {
|
assertThrows(() => {
|
||||||
// deno-lint-ignore no-deprecated-deno-api
|
// @ts-ignore `Deno.run()` was soft-removed in Deno 2.
|
||||||
Deno.run({
|
Deno.run({
|
||||||
cmd: [Deno.execPath(), "eval", "console.log('hello world')"],
|
cmd: [Deno.execPath(), "eval", "console.log('hello world')"],
|
||||||
});
|
});
|
||||||
|
@ -23,7 +24,7 @@ Deno.test(
|
||||||
Deno.test(
|
Deno.test(
|
||||||
{ permissions: { run: true, read: true } },
|
{ permissions: { run: true, read: true } },
|
||||||
async function runSuccess() {
|
async function runSuccess() {
|
||||||
// deno-lint-ignore no-deprecated-deno-api
|
// @ts-ignore `Deno.run()` was soft-removed in Deno 2.
|
||||||
const p = Deno.run({
|
const p = Deno.run({
|
||||||
// freeze the array to ensure it's not modified
|
// freeze the array to ensure it's not modified
|
||||||
cmd: Object.freeze([
|
cmd: Object.freeze([
|
||||||
|
@ -46,7 +47,7 @@ Deno.test(
|
||||||
Deno.test(
|
Deno.test(
|
||||||
{ permissions: { run: true, read: true } },
|
{ permissions: { run: true, read: true } },
|
||||||
async function runUrl() {
|
async function runUrl() {
|
||||||
// deno-lint-ignore no-deprecated-deno-api
|
// @ts-ignore `Deno.run()` was soft-removed in Deno 2.
|
||||||
const p = Deno.run({
|
const p = Deno.run({
|
||||||
cmd: [
|
cmd: [
|
||||||
new URL(`file:///${Deno.execPath()}`),
|
new URL(`file:///${Deno.execPath()}`),
|
||||||
|
@ -70,7 +71,7 @@ Deno.test(
|
||||||
async function runStdinRid0(): Promise<
|
async function runStdinRid0(): Promise<
|
||||||
void
|
void
|
||||||
> {
|
> {
|
||||||
// deno-lint-ignore no-deprecated-deno-api
|
// @ts-ignore `Deno.run()` was soft-removed in Deno 2.
|
||||||
const p = Deno.run({
|
const p = Deno.run({
|
||||||
cmd: [Deno.execPath(), "eval", "console.log('hello world')"],
|
cmd: [Deno.execPath(), "eval", "console.log('hello world')"],
|
||||||
stdin: 0,
|
stdin: 0,
|
||||||
|
@ -90,26 +91,23 @@ Deno.test(
|
||||||
{ permissions: { run: true, read: true } },
|
{ permissions: { run: true, read: true } },
|
||||||
function runInvalidStdio() {
|
function runInvalidStdio() {
|
||||||
assertThrows(() =>
|
assertThrows(() =>
|
||||||
// deno-lint-ignore no-deprecated-deno-api
|
// @ts-ignore `Deno.run()` was soft-removed in Deno 2.
|
||||||
Deno.run({
|
Deno.run({
|
||||||
cmd: [Deno.execPath(), "eval", "console.log('hello world')"],
|
cmd: [Deno.execPath(), "eval", "console.log('hello world')"],
|
||||||
// @ts-expect-error because Deno.run should throw on invalid stdin.
|
|
||||||
stdin: "a",
|
stdin: "a",
|
||||||
})
|
})
|
||||||
);
|
);
|
||||||
assertThrows(() =>
|
assertThrows(() =>
|
||||||
// deno-lint-ignore no-deprecated-deno-api
|
// @ts-ignore `Deno.run()` was soft-removed in Deno 2.
|
||||||
Deno.run({
|
Deno.run({
|
||||||
cmd: [Deno.execPath(), "eval", "console.log('hello world')"],
|
cmd: [Deno.execPath(), "eval", "console.log('hello world')"],
|
||||||
// @ts-expect-error because Deno.run should throw on invalid stdout.
|
|
||||||
stdout: "b",
|
stdout: "b",
|
||||||
})
|
})
|
||||||
);
|
);
|
||||||
assertThrows(() =>
|
assertThrows(() =>
|
||||||
// deno-lint-ignore no-deprecated-deno-api
|
// @ts-ignore `Deno.run()` was soft-removed in Deno 2.
|
||||||
Deno.run({
|
Deno.run({
|
||||||
cmd: [Deno.execPath(), "eval", "console.log('hello world')"],
|
cmd: [Deno.execPath(), "eval", "console.log('hello world')"],
|
||||||
// @ts-expect-error because Deno.run should throw on invalid stderr.
|
|
||||||
stderr: "c",
|
stderr: "c",
|
||||||
})
|
})
|
||||||
);
|
);
|
||||||
|
@ -119,7 +117,7 @@ Deno.test(
|
||||||
Deno.test(
|
Deno.test(
|
||||||
{ permissions: { run: true, read: true } },
|
{ permissions: { run: true, read: true } },
|
||||||
async function runCommandFailedWithCode() {
|
async function runCommandFailedWithCode() {
|
||||||
// deno-lint-ignore no-deprecated-deno-api
|
// @ts-ignore `Deno.run()` was soft-removed in Deno 2.
|
||||||
const p = Deno.run({
|
const p = Deno.run({
|
||||||
cmd: [Deno.execPath(), "eval", "Deno.exit(41 + 1)"],
|
cmd: [Deno.execPath(), "eval", "Deno.exit(41 + 1)"],
|
||||||
});
|
});
|
||||||
|
@ -136,7 +134,7 @@ Deno.test(
|
||||||
permissions: { run: true, read: true },
|
permissions: { run: true, read: true },
|
||||||
},
|
},
|
||||||
async function runCommandFailedWithSignal() {
|
async function runCommandFailedWithSignal() {
|
||||||
// deno-lint-ignore no-deprecated-deno-api
|
// @ts-ignore `Deno.run()` was soft-removed in Deno 2.
|
||||||
const p = Deno.run({
|
const p = Deno.run({
|
||||||
cmd: [
|
cmd: [
|
||||||
Deno.execPath(),
|
Deno.execPath(),
|
||||||
|
@ -160,7 +158,7 @@ Deno.test(
|
||||||
Deno.test({ permissions: { run: true } }, function runNotFound() {
|
Deno.test({ permissions: { run: true } }, function runNotFound() {
|
||||||
let error;
|
let error;
|
||||||
try {
|
try {
|
||||||
// deno-lint-ignore no-deprecated-deno-api
|
// @ts-ignore `Deno.run()` was soft-removed in Deno 2.
|
||||||
Deno.run({ cmd: ["this file hopefully doesn't exist"] });
|
Deno.run({ cmd: ["this file hopefully doesn't exist"] });
|
||||||
} catch (e) {
|
} catch (e) {
|
||||||
error = e;
|
error = e;
|
||||||
|
@ -192,7 +190,7 @@ tryExit();
|
||||||
`;
|
`;
|
||||||
|
|
||||||
Deno.writeFileSync(`${cwd}/${programFile}`, enc.encode(program));
|
Deno.writeFileSync(`${cwd}/${programFile}`, enc.encode(program));
|
||||||
// deno-lint-ignore no-deprecated-deno-api
|
// @ts-ignore `Deno.run()` was soft-removed in Deno 2.
|
||||||
const p = Deno.run({
|
const p = Deno.run({
|
||||||
cwd,
|
cwd,
|
||||||
cmd: [Deno.execPath(), "run", "--allow-read", programFile],
|
cmd: [Deno.execPath(), "run", "--allow-read", programFile],
|
||||||
|
@ -216,7 +214,7 @@ Deno.test(
|
||||||
async function runStdinPiped(): Promise<
|
async function runStdinPiped(): Promise<
|
||||||
void
|
void
|
||||||
> {
|
> {
|
||||||
// deno-lint-ignore no-deprecated-deno-api
|
// @ts-ignore `Deno.run()` was soft-removed in Deno 2.
|
||||||
const p = Deno.run({
|
const p = Deno.run({
|
||||||
cmd: [
|
cmd: [
|
||||||
Deno.execPath(),
|
Deno.execPath(),
|
||||||
|
@ -254,7 +252,7 @@ Deno.test(
|
||||||
async function runStdoutPiped(): Promise<
|
async function runStdoutPiped(): Promise<
|
||||||
void
|
void
|
||||||
> {
|
> {
|
||||||
// deno-lint-ignore no-deprecated-deno-api
|
// @ts-ignore `Deno.run()` was soft-removed in Deno 2.
|
||||||
const p = Deno.run({
|
const p = Deno.run({
|
||||||
cmd: [
|
cmd: [
|
||||||
Deno.execPath(),
|
Deno.execPath(),
|
||||||
|
@ -291,7 +289,7 @@ Deno.test(
|
||||||
async function runStderrPiped(): Promise<
|
async function runStderrPiped(): Promise<
|
||||||
void
|
void
|
||||||
> {
|
> {
|
||||||
// deno-lint-ignore no-deprecated-deno-api
|
// @ts-ignore `Deno.run()` was soft-removed in Deno 2.
|
||||||
const p = Deno.run({
|
const p = Deno.run({
|
||||||
cmd: [
|
cmd: [
|
||||||
Deno.execPath(),
|
Deno.execPath(),
|
||||||
|
@ -326,7 +324,7 @@ Deno.test(
|
||||||
Deno.test(
|
Deno.test(
|
||||||
{ permissions: { run: true, read: true } },
|
{ permissions: { run: true, read: true } },
|
||||||
async function runOutput() {
|
async function runOutput() {
|
||||||
// deno-lint-ignore no-deprecated-deno-api
|
// @ts-ignore `Deno.run()` was soft-removed in Deno 2.
|
||||||
const p = Deno.run({
|
const p = Deno.run({
|
||||||
cmd: [
|
cmd: [
|
||||||
Deno.execPath(),
|
Deno.execPath(),
|
||||||
|
@ -347,7 +345,7 @@ Deno.test(
|
||||||
async function runStderrOutput(): Promise<
|
async function runStderrOutput(): Promise<
|
||||||
void
|
void
|
||||||
> {
|
> {
|
||||||
// deno-lint-ignore no-deprecated-deno-api
|
// @ts-ignore `Deno.run()` was soft-removed in Deno 2.
|
||||||
const p = Deno.run({
|
const p = Deno.run({
|
||||||
cmd: [
|
cmd: [
|
||||||
Deno.execPath(),
|
Deno.execPath(),
|
||||||
|
@ -377,7 +375,7 @@ Deno.test(
|
||||||
write: true,
|
write: true,
|
||||||
});
|
});
|
||||||
|
|
||||||
// deno-lint-ignore no-deprecated-deno-api
|
// @ts-ignore `Deno.run()` was soft-removed in Deno 2.
|
||||||
const p = Deno.run({
|
const p = Deno.run({
|
||||||
cmd: [
|
cmd: [
|
||||||
Deno.execPath(),
|
Deno.execPath(),
|
||||||
|
@ -414,7 +412,7 @@ Deno.test(
|
||||||
await Deno.writeTextFile(fileName, "hello");
|
await Deno.writeTextFile(fileName, "hello");
|
||||||
using file = await Deno.open(fileName);
|
using file = await Deno.open(fileName);
|
||||||
|
|
||||||
// deno-lint-ignore no-deprecated-deno-api
|
// @ts-ignore `Deno.run()` was soft-removed in Deno 2.
|
||||||
const p = Deno.run({
|
const p = Deno.run({
|
||||||
cmd: [
|
cmd: [
|
||||||
Deno.execPath(),
|
Deno.execPath(),
|
||||||
|
@ -439,7 +437,7 @@ Deno.test(
|
||||||
Deno.test(
|
Deno.test(
|
||||||
{ permissions: { run: true, read: true } },
|
{ permissions: { run: true, read: true } },
|
||||||
async function runEnv() {
|
async function runEnv() {
|
||||||
// deno-lint-ignore no-deprecated-deno-api
|
// @ts-ignore `Deno.run()` was soft-removed in Deno 2.
|
||||||
const p = Deno.run({
|
const p = Deno.run({
|
||||||
cmd: [
|
cmd: [
|
||||||
Deno.execPath(),
|
Deno.execPath(),
|
||||||
|
@ -462,7 +460,7 @@ Deno.test(
|
||||||
Deno.test(
|
Deno.test(
|
||||||
{ permissions: { run: true, read: true } },
|
{ permissions: { run: true, read: true } },
|
||||||
async function runClose() {
|
async function runClose() {
|
||||||
// deno-lint-ignore no-deprecated-deno-api
|
// @ts-ignore `Deno.run()` was soft-removed in Deno 2.
|
||||||
const p = Deno.run({
|
const p = Deno.run({
|
||||||
cmd: [
|
cmd: [
|
||||||
Deno.execPath(),
|
Deno.execPath(),
|
||||||
|
@ -486,7 +484,7 @@ Deno.test(
|
||||||
Deno.test(
|
Deno.test(
|
||||||
{ permissions: { run: true, read: true } },
|
{ permissions: { run: true, read: true } },
|
||||||
async function runKillAfterStatus() {
|
async function runKillAfterStatus() {
|
||||||
// deno-lint-ignore no-deprecated-deno-api
|
// @ts-ignore `Deno.run()` was soft-removed in Deno 2.
|
||||||
const p = Deno.run({
|
const p = Deno.run({
|
||||||
cmd: [Deno.execPath(), "eval", 'console.log("hello")'],
|
cmd: [Deno.execPath(), "eval", 'console.log("hello")'],
|
||||||
});
|
});
|
||||||
|
@ -543,7 +541,7 @@ Deno.test(
|
||||||
Deno.test(
|
Deno.test(
|
||||||
{ permissions: { run: true, read: true } },
|
{ permissions: { run: true, read: true } },
|
||||||
async function killSuccess() {
|
async function killSuccess() {
|
||||||
// deno-lint-ignore no-deprecated-deno-api
|
// @ts-ignore `Deno.run()` was soft-removed in Deno 2.
|
||||||
const p = Deno.run({
|
const p = Deno.run({
|
||||||
cmd: [Deno.execPath(), "eval", "setTimeout(() => {}, 10000)"],
|
cmd: [Deno.execPath(), "eval", "setTimeout(() => {}, 10000)"],
|
||||||
});
|
});
|
||||||
|
@ -567,7 +565,7 @@ Deno.test(
|
||||||
);
|
);
|
||||||
|
|
||||||
Deno.test({ permissions: { run: true, read: true } }, function killFailed() {
|
Deno.test({ permissions: { run: true, read: true } }, function killFailed() {
|
||||||
// deno-lint-ignore no-deprecated-deno-api
|
// @ts-ignore `Deno.run()` was soft-removed in Deno 2.
|
||||||
const p = Deno.run({
|
const p = Deno.run({
|
||||||
cmd: [Deno.execPath(), "eval", "setTimeout(() => {}, 10000)"],
|
cmd: [Deno.execPath(), "eval", "setTimeout(() => {}, 10000)"],
|
||||||
});
|
});
|
||||||
|
@ -588,7 +586,7 @@ Deno.test(
|
||||||
ignore: Deno.build.os === "windows",
|
ignore: Deno.build.os === "windows",
|
||||||
},
|
},
|
||||||
async function non_existent_cwd(): Promise<void> {
|
async function non_existent_cwd(): Promise<void> {
|
||||||
// deno-lint-ignore no-deprecated-deno-api
|
// @ts-ignore `Deno.run()` was soft-removed in Deno 2.
|
||||||
const p = Deno.run({
|
const p = Deno.run({
|
||||||
cmd: [
|
cmd: [
|
||||||
Deno.execPath(),
|
Deno.execPath(),
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue