@tui-sandbox/library 0.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +9 -0
- package/dist/src/client/validateMouseEvent.d.ts +1 -0
- package/dist/src/client/validateMouseEvent.js +13 -0
- package/dist/src/client/websocket-client.d.ts +25 -0
- package/dist/src/client/websocket-client.js +127 -0
- package/dist/src/server/connection/trpc.d.ts +44 -0
- package/dist/src/server/connection/trpc.js +5 -0
- package/dist/src/server/dirtree/index.d.ts +25 -0
- package/dist/src/server/dirtree/index.js +80 -0
- package/dist/src/server/dirtree/index.test.d.ts +1 -0
- package/dist/src/server/dirtree/index.test.js +172 -0
- package/dist/src/server/dirtree/json-to-zod.d.ts +1 -0
- package/dist/src/server/dirtree/json-to-zod.js +56 -0
- package/dist/src/server/index.d.ts +8 -0
- package/dist/src/server/index.js +49 -0
- package/dist/src/server/neovim/NeovimApplication.d.ts +25 -0
- package/dist/src/server/neovim/NeovimApplication.js +111 -0
- package/dist/src/server/neovim/environment/createTempDir.d.ts +3 -0
- package/dist/src/server/neovim/environment/createTempDir.js +41 -0
- package/dist/src/server/neovim/index.d.ts +13 -0
- package/dist/src/server/neovim/index.js +40 -0
- package/dist/src/server/server.d.ts +59 -0
- package/dist/src/server/server.js +55 -0
- package/dist/src/server/types.d.ts +13 -0
- package/dist/src/server/types.js +1 -0
- package/dist/src/server/updateTestdirectorySchemaFile.d.ts +6 -0
- package/dist/src/server/updateTestdirectorySchemaFile.js +13 -0
- package/dist/src/server/utilities/DisposableSingleApplication.d.ts +16 -0
- package/dist/src/server/utilities/DisposableSingleApplication.js +27 -0
- package/dist/src/server/utilities/Lazy.d.ts +6 -0
- package/dist/src/server/utilities/Lazy.js +13 -0
- package/dist/src/server/utilities/TerminalApplication.d.ts +21 -0
- package/dist/src/server/utilities/TerminalApplication.js +54 -0
- package/dist/src/server/utilities/tabId.d.ts +9 -0
- package/dist/src/server/utilities/tabId.js +2 -0
- package/dist/tsconfig.tsbuildinfo +1 -0
- package/package.json +41 -0
- package/src/client/style.css +26 -0
- package/src/client/validateMouseEvent.ts +15 -0
- package/src/client/websocket-client.ts +157 -0
- package/src/public/DejaVuSansMNerdFontMono-Regular.ttf +0 -0
- package/src/server/connection/trpc.ts +17 -0
- package/src/server/dirtree/index.test.ts +179 -0
- package/src/server/dirtree/index.ts +114 -0
- package/src/server/dirtree/json-to-zod.ts +58 -0
- package/src/server/index.ts +54 -0
- package/src/server/neovim/NeovimApplication.ts +134 -0
- package/src/server/neovim/environment/createTempDir.ts +46 -0
- package/src/server/neovim/index.ts +63 -0
- package/src/server/server.ts +67 -0
- package/src/server/types.ts +13 -0
- package/src/server/updateTestdirectorySchemaFile.ts +23 -0
- package/src/server/utilities/DisposableSingleApplication.ts +33 -0
- package/src/server/utilities/Lazy.ts +12 -0
- package/src/server/utilities/TerminalApplication.ts +88 -0
- package/src/server/utilities/tabId.ts +4 -0
- package/tsconfig.json +22 -0
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
import type winston from "winston"
|
|
2
|
+
import { createLogger, format, transports } from "winston"
|
|
3
|
+
|
|
4
|
+
import type { ITerminalDimensions } from "@xterm/addon-fit"
|
|
5
|
+
import type { IPty } from "node-pty"
|
|
6
|
+
import pty from "node-pty"
|
|
7
|
+
|
|
8
|
+
// NOTE the size for the terminal was chosen so that it looks good in my
|
|
9
|
+
// cypress test preview
|
|
10
|
+
const defaultDimensions: ITerminalDimensions = { cols: 125, rows: 43 }
|
|
11
|
+
|
|
12
|
+
// NOTE separating stdout and stderr is not supported by node-pty
|
|
13
|
+
// https://github.com/microsoft/node-pty/issues/71
|
|
14
|
+
export class TerminalApplication {
|
|
15
|
+
public readonly processId: number
|
|
16
|
+
|
|
17
|
+
public readonly logger: winston.Logger
|
|
18
|
+
|
|
19
|
+
private constructor(
|
|
20
|
+
private readonly subProcess: IPty,
|
|
21
|
+
public readonly onStdoutOrStderr: (data: string) => void
|
|
22
|
+
) {
|
|
23
|
+
this.processId = subProcess.pid
|
|
24
|
+
|
|
25
|
+
this.logger = createLogger({
|
|
26
|
+
transports: [new transports.Console()],
|
|
27
|
+
defaultMeta: { pid: this.processId },
|
|
28
|
+
format: format.combine(format.colorize(), format.cli()),
|
|
29
|
+
})
|
|
30
|
+
|
|
31
|
+
this.logger.debug(`started`)
|
|
32
|
+
|
|
33
|
+
subProcess.onData(this.onStdoutOrStderr)
|
|
34
|
+
|
|
35
|
+
subProcess.onExit(({ exitCode, signal }) => {
|
|
36
|
+
this.logger.debug(
|
|
37
|
+
`Child process ${this.processId} exited with code ${String(exitCode)} and signal ${String(signal)}`
|
|
38
|
+
)
|
|
39
|
+
})
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
/** @constructor Start a new terminal application. */
|
|
43
|
+
public static start({
|
|
44
|
+
onStdoutOrStderr,
|
|
45
|
+
command,
|
|
46
|
+
args,
|
|
47
|
+
cwd,
|
|
48
|
+
env,
|
|
49
|
+
dimensions: givenDimensions,
|
|
50
|
+
}: {
|
|
51
|
+
onStdoutOrStderr: (data: string) => void
|
|
52
|
+
command: string
|
|
53
|
+
args: string[]
|
|
54
|
+
cwd: string
|
|
55
|
+
env?: NodeJS.ProcessEnv
|
|
56
|
+
dimensions?: ITerminalDimensions
|
|
57
|
+
}): TerminalApplication {
|
|
58
|
+
const dimensions = givenDimensions ?? defaultDimensions
|
|
59
|
+
|
|
60
|
+
console.log(`Starting '${command} ${args.join(" ")}' in cwd '${cwd}'`)
|
|
61
|
+
const ptyProcess = pty.spawn(command, args, {
|
|
62
|
+
name: "xterm-color",
|
|
63
|
+
cwd,
|
|
64
|
+
env,
|
|
65
|
+
cols: dimensions.cols,
|
|
66
|
+
rows: dimensions.rows,
|
|
67
|
+
})
|
|
68
|
+
|
|
69
|
+
const processId = ptyProcess.pid
|
|
70
|
+
|
|
71
|
+
if (!processId) {
|
|
72
|
+
throw new Error("Failed to spawn child process")
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
return new TerminalApplication(ptyProcess, onStdoutOrStderr)
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
/** Write to the terminal's stdin. */
|
|
79
|
+
public write(data: string): void {
|
|
80
|
+
this.subProcess.write(data)
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
public async killAndWait(): Promise<void> {
|
|
84
|
+
console.log(`💣 Killing process ${this.processId}`)
|
|
85
|
+
this.subProcess.kill()
|
|
86
|
+
console.log(`💥 Killed process ${this.processId}`)
|
|
87
|
+
}
|
|
88
|
+
}
|
package/tsconfig.json
ADDED
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
{
|
|
2
|
+
"compilerOptions": {
|
|
3
|
+
"skipLibCheck": true,
|
|
4
|
+
"module": "ESNext",
|
|
5
|
+
"moduleResolution": "Bundler",
|
|
6
|
+
"target": "ESNext",
|
|
7
|
+
"isolatedModules": true,
|
|
8
|
+
"esModuleInterop": true,
|
|
9
|
+
"outDir": "dist",
|
|
10
|
+
"lib": ["ES2023", "ESNext.Disposable"],
|
|
11
|
+
"types": ["node"],
|
|
12
|
+
"composite": true,
|
|
13
|
+
|
|
14
|
+
/* Linting */
|
|
15
|
+
"strict": true,
|
|
16
|
+
"noUnusedLocals": false,
|
|
17
|
+
"noUnusedParameters": true,
|
|
18
|
+
"noFallthroughCasesInSwitch": true
|
|
19
|
+
},
|
|
20
|
+
|
|
21
|
+
"include": ["./src/"]
|
|
22
|
+
}
|