kit
kit copied to clipboard
TypeError: process.stdout.cursorTo is not a function
Describe the bug
After upgrading to SvelteKit 1.17.0+ endpoint prerender with process.stdout.cursorTo() fails.
Seems to be related to https://github.com/sveltejs/kit/pull/9919 - prerender in worker rather than subprocess to support Deno.
Reproduction
// src/routes/+server.ts
import type { RequestHandler } from './$types';
export const prerender = true;
export const GET = (() => {
const now = new Date().toISOString();
process.stdout.write(now);
process.stdout.cursorTo(0);
return new Response(now);
}) satisfies RequestHandler;
npm i @sveltejs/[email protected]
npm run build
✓ built in 217ms
TypeError: process.stdout.cursorTo is not a function
node:internal/event_target:1012
process.nextTick(() => { throw err; });
^
Error: 500 /
Logs
No response
System Info
System:
OS: macOS 13.3.1
CPU: (10) arm64 Apple M1 Pro
Memory: 158.95 MB / 16.00 GB
Shell: 5.9 - /bin/zsh
Binaries:
Node: 18.16.0 - ~/.nvm/versions/node/v18.16.0/bin/node
npm: 9.5.1 - ~/.nvm/versions/node/v18.16.0/bin/npm
Browsers:
Chrome: 113.0.5672.126
Firefox: 113.0.1
Safari: 16.4
npmPackages:
@sveltejs/adapter-auto: ^2.0.0 => 2.1.0
@sveltejs/kit: ^1.17.0 => 1.17.0
svelte: ^3.54.0 => 3.59.1
vite: ^4.3.0 => 4.3.8
Severity
blocking an upgrade
Additional Information
No response
Related https://github.com/nodejs/node/issues/28386
Solution
Check if a stream is connected to a TTY context.
const { isTTY } = process.stdout;
if (isTTY) process.stdout.write('-'.repeat(100));
Reference
This property refers to the value of underlying file descriptor of
process.stdout. The value is fixed at1. In Worker threads, this field does not exist.
$ node -p "Boolean(process.stdin.isTTY)"
# true
$ echo "foo" | node -p "Boolean(process.stdin.isTTY)"
# false
$ node -p "Boolean(process.stdout.isTTY)"
# true
$ node -p "Boolean(process.stdout.isTTY)" | cat
# false