@tui-sandbox/library 2.0.1 → 2.1.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 (48) hide show
  1. package/CHANGELOG.md +14 -0
  2. package/dist/src/client/neovim-client.d.ts +2 -1
  3. package/dist/src/client/neovim-client.js +19 -8
  4. package/dist/src/server/TestServer.d.ts +1 -1
  5. package/dist/src/server/TestServer.js +15 -24
  6. package/dist/src/server/connection/trpc.d.ts +7 -15
  7. package/dist/src/server/connection/trpc.js +0 -3
  8. package/dist/src/server/neovim/NeovimApplication.d.ts +4 -3
  9. package/dist/src/server/neovim/NeovimApplication.js +21 -13
  10. package/dist/src/server/neovim/environment/createTempDir.test.js +1 -0
  11. package/dist/src/server/neovim/index.d.ts +1 -2
  12. package/dist/src/server/neovim/index.js +15 -21
  13. package/dist/src/server/server.d.ts +8 -8
  14. package/dist/src/server/server.js +5 -7
  15. package/dist/src/server/updateTestdirectorySchemaFile.d.ts +2 -1
  16. package/dist/src/server/updateTestdirectorySchemaFile.js +4 -0
  17. package/dist/src/server/updateTestdirectorySchemaFile.test.d.ts +1 -0
  18. package/dist/src/server/updateTestdirectorySchemaFile.test.js +34 -0
  19. package/dist/src/server/utilities/DisposableSingleApplication.d.ts +6 -8
  20. package/dist/src/server/utilities/DisposableSingleApplication.js +9 -9
  21. package/dist/src/server/utilities/DisposableSingleApplication.test.d.ts +1 -0
  22. package/dist/src/server/utilities/DisposableSingleApplication.test.js +55 -0
  23. package/dist/src/server/utilities/TerminalApplication.d.ts +4 -3
  24. package/dist/src/server/utilities/TerminalApplication.js +1 -5
  25. package/dist/src/server/utilities/generator.d.ts +2 -0
  26. package/dist/src/server/utilities/generator.js +8 -0
  27. package/dist/src/server/utilities/generator.test.d.ts +1 -0
  28. package/dist/src/server/utilities/generator.test.js +41 -0
  29. package/dist/tsconfig.tsbuildinfo +1 -1
  30. package/dist/vitest.config.d.ts +2 -0
  31. package/dist/vitest.config.js +8 -0
  32. package/package.json +12 -15
  33. package/src/client/neovim-client.ts +21 -9
  34. package/src/server/TestServer.ts +17 -25
  35. package/src/server/connection/trpc.ts +1 -15
  36. package/src/server/neovim/NeovimApplication.ts +25 -15
  37. package/src/server/neovim/environment/createTempDir.test.ts +2 -0
  38. package/src/server/neovim/index.ts +25 -27
  39. package/src/server/server.ts +5 -7
  40. package/src/server/updateTestdirectorySchemaFile.test.ts +43 -0
  41. package/src/server/updateTestdirectorySchemaFile.ts +7 -2
  42. package/src/server/utilities/DisposableSingleApplication.test.ts +70 -0
  43. package/src/server/utilities/DisposableSingleApplication.ts +17 -12
  44. package/src/server/utilities/TerminalApplication.ts +4 -9
  45. package/src/server/utilities/generator.test.ts +49 -0
  46. package/src/server/utilities/generator.ts +13 -0
  47. package/tsconfig.json +2 -2
  48. package/vitest.config.ts +9 -0
@@ -1,19 +1,20 @@
1
1
  import type winston from "winston";
2
2
  import type { ITerminalDimensions } from "@xterm/addon-fit";
3
- export declare class TerminalApplication {
3
+ import type { StartableApplication } from "./DisposableSingleApplication";
4
+ export declare class TerminalApplication implements StartableApplication {
4
5
  private readonly subProcess;
5
6
  readonly onStdoutOrStderr: (data: string) => void;
6
7
  readonly processId: number;
7
8
  readonly logger: winston.Logger;
8
9
  private constructor();
9
10
  /** @constructor Start a new terminal application. */
10
- static start({ onStdoutOrStderr, command, args, cwd, env, dimensions: givenDimensions, }: {
11
+ static start({ onStdoutOrStderr, command, args, cwd, env, dimensions, }: {
11
12
  onStdoutOrStderr: (data: string) => void;
12
13
  command: string;
13
14
  args: string[];
14
15
  cwd: string;
15
16
  env?: NodeJS.ProcessEnv;
16
- dimensions?: ITerminalDimensions;
17
+ dimensions: ITerminalDimensions;
17
18
  }): TerminalApplication;
18
19
  /** Write to the terminal's stdin. */
19
20
  write(data: string): void;
@@ -1,8 +1,5 @@
1
1
  import { createLogger, format, transports } from "winston";
2
2
  import pty from "node-pty";
3
- // NOTE the size for the terminal was chosen so that it looks good in my
4
- // cypress test preview
5
- const defaultDimensions = { cols: 125, rows: 43 };
6
3
  // NOTE separating stdout and stderr is not supported by node-pty
7
4
  // https://github.com/microsoft/node-pty/issues/71
8
5
  export class TerminalApplication {
@@ -26,8 +23,7 @@ export class TerminalApplication {
26
23
  });
27
24
  }
28
25
  /** @constructor Start a new terminal application. */
29
- static start({ onStdoutOrStderr, command, args, cwd, env, dimensions: givenDimensions, }) {
30
- const dimensions = givenDimensions ?? defaultDimensions;
26
+ static start({ onStdoutOrStderr, command, args, cwd, env, dimensions, }) {
31
27
  console.log(`Starting '${command} ${args.join(" ")}' in cwd '${cwd}'`);
32
28
  const ptyProcess = pty.spawn(command, args, {
33
29
  name: "xterm-color",
@@ -0,0 +1,2 @@
1
+ import type EventEmitter from "events";
2
+ export declare function convertEventEmitterToAsyncGenerator(emitter: EventEmitter, eventName: string): AsyncGenerator<string, void, unknown>;
@@ -0,0 +1,8 @@
1
+ export async function* convertEventEmitterToAsyncGenerator(emitter, eventName) {
2
+ // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition
3
+ while (true) {
4
+ yield await new Promise(resolve => {
5
+ emitter.once(eventName, resolve);
6
+ });
7
+ }
8
+ }
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,41 @@
1
+ import { EventEmitter } from "stream";
2
+ import { convertEventEmitterToAsyncGenerator } from "./generator";
3
+ describe("when a listener is attached", () => {
4
+ it("forwards events from an EventEmitter to an async generator", async () => {
5
+ const eventEmitter = new EventEmitter();
6
+ const generator = convertEventEmitterToAsyncGenerator(eventEmitter, "test");
7
+ {
8
+ const promise = generator.next();
9
+ eventEmitter.emit("test", "message");
10
+ expect(await promise).toMatchInlineSnapshot(`
11
+ {
12
+ "done": false,
13
+ "value": "message",
14
+ }
15
+ `);
16
+ const promise2 = generator.next();
17
+ eventEmitter.emit("test", "message2");
18
+ expect(await promise2).toMatchInlineSnapshot(`
19
+ {
20
+ "done": false,
21
+ "value": "message2",
22
+ }
23
+ `);
24
+ }
25
+ });
26
+ });
27
+ describe("when no listener is attached, messages are lost permanently", () => {
28
+ it("does not resend lost events after a subscriber attaches", async () => {
29
+ const eventEmitter = new EventEmitter();
30
+ eventEmitter.emit("test", "this message should be lost");
31
+ const generator = convertEventEmitterToAsyncGenerator(eventEmitter, "test");
32
+ const promise = generator.next();
33
+ eventEmitter.emit("test", "new message that will be received");
34
+ expect(await promise).toMatchInlineSnapshot(`
35
+ {
36
+ "done": false,
37
+ "value": "new message that will be received",
38
+ }
39
+ `);
40
+ });
41
+ });