1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
|
// Copyright 2018-2024 the Deno authors. All rights reserved. MIT license.
import * as colors from "@std/fmt/colors";
import { assert } from "@std/assert";
export { colors };
import { join, resolve } from "@std/path";
export {
assert,
assertEquals,
assertFalse,
AssertionError,
assertIsError,
assertMatch,
assertNotEquals,
assertNotStrictEquals,
assertRejects,
assertStrictEquals,
assertStringIncludes,
assertThrows,
fail,
unimplemented,
unreachable,
} from "@std/assert";
export { delay } from "@std/async/delay";
export { readLines } from "@std/io/read-lines";
export { parseArgs } from "@std/cli/parse-args";
export function pathToAbsoluteFileUrl(path: string): URL {
path = resolve(path);
return new URL(`file://${Deno.build.os === "windows" ? "/" : ""}${path}`);
}
export function execCode(code: string): Promise<readonly [number, string]> {
return execCode2(code).finished();
}
export function execCode3(cmd: string, args: string[]) {
const command = new Deno.Command(cmd, {
args,
stdout: "piped",
stderr: "inherit",
});
const child = command.spawn();
const stdout = child.stdout.pipeThrough(new TextDecoderStream()).getReader();
let output = "";
return {
async waitStdoutText(text: string) {
while (true) {
const readData = await stdout.read();
if (readData.value) {
output += readData.value;
if (output.includes(text)) {
return;
}
}
if (readData.done) {
throw new Error(`Did not find text '${text}' in stdout.`);
}
}
},
async finished() {
while (true) {
const readData = await stdout.read();
if (readData.value) {
output += readData.value;
}
if (readData.done) {
break;
}
}
const status = await child.status;
return [status.code, output] as const;
},
};
}
export function execCode2(code: string) {
return execCode3(Deno.execPath(), ["eval", code]);
}
export function tmpUnixSocketPath(): string {
const folder = Deno.makeTempDirSync();
return join(folder, "socket");
}
export async function curlRequest(args: string[]) {
const { success, stdout, stderr } = await new Deno.Command("curl", {
args,
stdout: "piped",
stderr: "piped",
}).output();
const decoder = new TextDecoder();
assert(
success,
`Failed to cURL ${args}: stdout\n\n${
decoder.decode(stdout)
}\n\nstderr:\n\n${decoder.decode(stderr)}`,
);
return decoder.decode(stdout);
}
export async function curlRequestWithStdErr(args: string[]) {
const { success, stdout, stderr } = await new Deno.Command("curl", {
args,
stdout: "piped",
stderr: "piped",
}).output();
const decoder = new TextDecoder();
assert(
success,
`Failed to cURL ${args}: stdout\n\n${
decoder.decode(stdout)
}\n\nstderr:\n\n${decoder.decode(stderr)}`,
);
return [decoder.decode(stdout), decoder.decode(stderr)];
}
|