@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.
Files changed (57) hide show
  1. package/LICENSE +9 -0
  2. package/dist/src/client/validateMouseEvent.d.ts +1 -0
  3. package/dist/src/client/validateMouseEvent.js +13 -0
  4. package/dist/src/client/websocket-client.d.ts +25 -0
  5. package/dist/src/client/websocket-client.js +127 -0
  6. package/dist/src/server/connection/trpc.d.ts +44 -0
  7. package/dist/src/server/connection/trpc.js +5 -0
  8. package/dist/src/server/dirtree/index.d.ts +25 -0
  9. package/dist/src/server/dirtree/index.js +80 -0
  10. package/dist/src/server/dirtree/index.test.d.ts +1 -0
  11. package/dist/src/server/dirtree/index.test.js +172 -0
  12. package/dist/src/server/dirtree/json-to-zod.d.ts +1 -0
  13. package/dist/src/server/dirtree/json-to-zod.js +56 -0
  14. package/dist/src/server/index.d.ts +8 -0
  15. package/dist/src/server/index.js +49 -0
  16. package/dist/src/server/neovim/NeovimApplication.d.ts +25 -0
  17. package/dist/src/server/neovim/NeovimApplication.js +111 -0
  18. package/dist/src/server/neovim/environment/createTempDir.d.ts +3 -0
  19. package/dist/src/server/neovim/environment/createTempDir.js +41 -0
  20. package/dist/src/server/neovim/index.d.ts +13 -0
  21. package/dist/src/server/neovim/index.js +40 -0
  22. package/dist/src/server/server.d.ts +59 -0
  23. package/dist/src/server/server.js +55 -0
  24. package/dist/src/server/types.d.ts +13 -0
  25. package/dist/src/server/types.js +1 -0
  26. package/dist/src/server/updateTestdirectorySchemaFile.d.ts +6 -0
  27. package/dist/src/server/updateTestdirectorySchemaFile.js +13 -0
  28. package/dist/src/server/utilities/DisposableSingleApplication.d.ts +16 -0
  29. package/dist/src/server/utilities/DisposableSingleApplication.js +27 -0
  30. package/dist/src/server/utilities/Lazy.d.ts +6 -0
  31. package/dist/src/server/utilities/Lazy.js +13 -0
  32. package/dist/src/server/utilities/TerminalApplication.d.ts +21 -0
  33. package/dist/src/server/utilities/TerminalApplication.js +54 -0
  34. package/dist/src/server/utilities/tabId.d.ts +9 -0
  35. package/dist/src/server/utilities/tabId.js +2 -0
  36. package/dist/tsconfig.tsbuildinfo +1 -0
  37. package/package.json +41 -0
  38. package/src/client/style.css +26 -0
  39. package/src/client/validateMouseEvent.ts +15 -0
  40. package/src/client/websocket-client.ts +157 -0
  41. package/src/public/DejaVuSansMNerdFontMono-Regular.ttf +0 -0
  42. package/src/server/connection/trpc.ts +17 -0
  43. package/src/server/dirtree/index.test.ts +179 -0
  44. package/src/server/dirtree/index.ts +114 -0
  45. package/src/server/dirtree/json-to-zod.ts +58 -0
  46. package/src/server/index.ts +54 -0
  47. package/src/server/neovim/NeovimApplication.ts +134 -0
  48. package/src/server/neovim/environment/createTempDir.ts +46 -0
  49. package/src/server/neovim/index.ts +63 -0
  50. package/src/server/server.ts +67 -0
  51. package/src/server/types.ts +13 -0
  52. package/src/server/updateTestdirectorySchemaFile.ts +23 -0
  53. package/src/server/utilities/DisposableSingleApplication.ts +33 -0
  54. package/src/server/utilities/Lazy.ts +12 -0
  55. package/src/server/utilities/TerminalApplication.ts +88 -0
  56. package/src/server/utilities/tabId.ts +4 -0
  57. 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
+ }
@@ -0,0 +1,4 @@
1
+ import { z } from "zod"
2
+
3
+ export type TabId = z.infer<typeof tabIdSchema>
4
+ export const tabIdSchema = z.object({ tabId: z.string() })
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
+ }