astro-ghostcms/.pnpm-store/v3/files/7b/1800b0035ab2f7bb8701d7d94d5...

124 lines
3.8 KiB
Plaintext

import { Writable } from 'node:stream';
import { Console } from 'node:console';
import { relative } from 'node:path';
import { getSafeTimers, getColors } from '@vitest/utils';
import { R as RealDate } from '../vendor/date.Ns1pGd_X.js';
const UNKNOWN_TEST_ID = "__vitest__unknown_test__";
function getTaskIdByStack(root) {
var _a, _b;
const stack = (_a = new Error("STACK_TRACE_ERROR").stack) == null ? void 0 : _a.split("\n");
if (!stack)
return UNKNOWN_TEST_ID;
const index = stack.findIndex((line2) => line2.includes("at Console.value (node:internal/console/"));
const line = index === -1 ? null : stack[index + 2];
if (!line)
return UNKNOWN_TEST_ID;
const filepath = (_b = line.match(/at\s(.*)\s?/)) == null ? void 0 : _b[1];
if (filepath)
return relative(root, filepath);
return UNKNOWN_TEST_ID;
}
function createCustomConsole(state) {
const stdoutBuffer = /* @__PURE__ */ new Map();
const stderrBuffer = /* @__PURE__ */ new Map();
const timers = /* @__PURE__ */ new Map();
const { setTimeout, clearTimeout } = getSafeTimers();
function schedule(taskId) {
const timer = timers.get(taskId);
const { stdoutTime, stderrTime } = timer;
clearTimeout(timer.timer);
timer.timer = setTimeout(() => {
if (stderrTime < stdoutTime) {
sendStderr(taskId);
sendStdout(taskId);
} else {
sendStdout(taskId);
sendStderr(taskId);
}
});
}
function sendStdout(taskId) {
const buffer = stdoutBuffer.get(taskId);
if (!buffer)
return;
const content = buffer.map((i) => String(i)).join("");
const timer = timers.get(taskId);
state.rpc.onUserConsoleLog({
type: "stdout",
content: content || "<empty line>",
taskId,
time: timer.stdoutTime || RealDate.now(),
size: buffer.length
});
stdoutBuffer.set(taskId, []);
timer.stdoutTime = 0;
}
function sendStderr(taskId) {
const buffer = stderrBuffer.get(taskId);
if (!buffer)
return;
const content = buffer.map((i) => String(i)).join("");
const timer = timers.get(taskId);
state.rpc.onUserConsoleLog({
type: "stderr",
content: content || "<empty line>",
taskId,
time: timer.stderrTime || RealDate.now(),
size: buffer.length
});
stderrBuffer.set(taskId, []);
timer.stderrTime = 0;
}
const stdout = new Writable({
write(data, encoding, callback) {
var _a;
const id = ((_a = state == null ? void 0 : state.current) == null ? void 0 : _a.id) ?? getTaskIdByStack(state.ctx.config.root);
let timer = timers.get(id);
if (timer) {
timer.stdoutTime = timer.stdoutTime || RealDate.now();
} else {
timer = { stdoutTime: RealDate.now(), stderrTime: RealDate.now(), timer: 0 };
timers.set(id, timer);
}
let buffer = stdoutBuffer.get(id);
if (!buffer) {
buffer = [];
stdoutBuffer.set(id, buffer);
}
buffer.push(data);
schedule(id);
callback();
}
});
const stderr = new Writable({
write(data, encoding, callback) {
var _a;
const id = ((_a = state == null ? void 0 : state.current) == null ? void 0 : _a.id) ?? getTaskIdByStack(state.ctx.config.root);
let timer = timers.get(id);
if (timer) {
timer.stderrTime = timer.stderrTime || RealDate.now();
} else {
timer = { stderrTime: RealDate.now(), stdoutTime: RealDate.now(), timer: 0 };
timers.set(id, timer);
}
let buffer = stderrBuffer.get(id);
if (!buffer) {
buffer = [];
stderrBuffer.set(id, buffer);
}
buffer.push(data);
schedule(id);
callback();
}
});
return new Console({
stdout,
stderr,
colorMode: getColors().isColorSupported,
groupIndentation: 2
});
}
export { UNKNOWN_TEST_ID, createCustomConsole };