@wocker/utils 2.0.0-beta.0 → 2.0.0-beta.2

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/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@wocker/utils",
3
- "version": "2.0.0-beta.0",
3
+ "version": "2.0.0-beta.2",
4
4
  "author": "Kris Papercut <krispcut@gmail.com>",
5
5
  "description": "Utils for @wocker",
6
6
  "license": "MIT",
@@ -24,7 +24,7 @@
24
24
  "build": "tsc --project tsconfig.build.json",
25
25
  "watch": "tsc -w --project tsconfig.build.json",
26
26
  "test": "jest",
27
- "posttest": "jest-coverage-badges --output ./coverage/badges",
27
+ "make-coverage-badge": "make-coverage-badge",
28
28
  "test-watch": "jest --watchAll"
29
29
  },
30
30
  "dependencies": {
@@ -37,7 +37,7 @@
37
37
  "@types/mute-stream": "^0.0.4",
38
38
  "@types/node": "^22.14.1",
39
39
  "jest": "^29.7.0",
40
- "jest-coverage-badges": "^1.1.2",
40
+ "make-coverage-badge": "^1.2.0",
41
41
  "mute-stream": "^2.0.0",
42
42
  "ts-jest": "^29.3.2",
43
43
  "ts-node": "^10.9.2",
@@ -1,116 +0,0 @@
1
- import MuteStream from "mute-stream";
2
-
3
-
4
- export class CustomMuteStream extends MuteStream {
5
- protected _listeners: {
6
- [event: string]: Map<any, any>;
7
- } = {};
8
- protected _waiters: {
9
- [event: string]: {
10
- completed: number;
11
- resolve: (value: void | PromiseLike<void>) => void;
12
- };
13
- } = {};
14
-
15
- protected getOverride(event: string, listener: any) {
16
- if(!this._listeners) {
17
- this._listeners = {};
18
- }
19
-
20
- if(!this._listeners[event]) {
21
- this._listeners[event] = new Map();
22
- }
23
-
24
- let override = this._listeners[event].get(listener);
25
-
26
- if(!override) {
27
- override = async (...args: any[]) => {
28
- const result = await listener(...args);
29
-
30
- if(!this._waiters) {
31
- this._waiters = {};
32
- }
33
-
34
- if(this._waiters[event]) {
35
- this._waiters[event].completed++;
36
-
37
- if(this._waiters[event].completed === this._listeners[event].size) {
38
- this._waiters[event].resolve();
39
- }
40
- }
41
-
42
- return result;
43
- };
44
-
45
- this._listeners[event].set(listener, override);
46
- }
47
-
48
- return override;
49
- }
50
-
51
- protected hasOverride(event: string, listener: any) {
52
- return this._listeners && this._listeners[event] && this._listeners[event].has(listener);
53
- }
54
-
55
- protected removeOverride(event: string, listener: any) {
56
- if(!this.hasOverride(event, listener)) {
57
- return;
58
- }
59
-
60
- this._listeners[event].delete(listener);
61
- }
62
-
63
- public on(event: any, listener: any): this {
64
- const override = this.getOverride(event, listener);
65
-
66
- super.on(event, override);
67
-
68
- return this;
69
- }
70
-
71
- public addListener(event: any, listener: any): this {
72
- const override = this.getOverride(event, listener);
73
-
74
- super.addListener(event, override);
75
-
76
- return this;
77
- }
78
-
79
- public off(event: any, listener: any): this {
80
- if(this.hasOverride(event, listener)) {
81
- const override = this.getOverride(event, listener);
82
- super.off(event, override);
83
- this.removeOverride(event, listener);
84
- }
85
- else {
86
- super.off(event, listener);
87
- }
88
-
89
- return this;
90
- }
91
-
92
- public removeListener(event: any, listener: any): this {
93
- if(this.hasOverride(event, listener)) {
94
- const override = this.getOverride(event, listener);
95
-
96
- super.removeListener(event, override);
97
- this.removeOverride(event, listener);
98
- }
99
- else {
100
- super.removeListener(event, listener);
101
- }
102
-
103
- return this;
104
- }
105
-
106
- public async wait(event: string, data: any, key: any): Promise<void> {
107
- return new Promise<void>((resolve) => {
108
- this._waiters[event] = {
109
- resolve,
110
- completed: 0
111
- };
112
-
113
- this.emit(event, data, key);
114
- });
115
- }
116
- }
@@ -1,55 +0,0 @@
1
- import {CustomMuteStream} from "./CustomMuteStream";
2
- import {KeypressEvent} from "../../src/types/KeypressEvent";
3
- import EventEmitter from "node:events";
4
-
5
-
6
- export class PromptSimulator {
7
- protected emitter: EventEmitter;
8
-
9
- constructor(
10
- protected readonly input: CustomMuteStream
11
- ) {
12
- this.emitter = new EventEmitter();
13
- }
14
-
15
- public async keypress(key: string | KeypressEvent) {
16
- const event = typeof key === "string" ? {
17
- name: key
18
- } : key;
19
-
20
- return this.input.wait("keypress", null, event);
21
- }
22
-
23
- public async type(text: string) {
24
- this.input.write(text);
25
-
26
- for(const char of text) {
27
- await this.input.wait("keypress", null, {
28
- name: char
29
- });
30
- }
31
- }
32
-
33
- public async process(events: (string | KeypressEvent)[]): Promise<void> {
34
- const typeReg = /^type:(.*)$/;
35
-
36
- for(const event of events) {
37
- if(typeof event === "string" && typeReg.test(event)) {
38
- const [, text = ""] = typeReg.exec(event) || [];
39
-
40
- await this.type(text);
41
- continue;
42
- }
43
-
44
- await this.keypress(event);
45
- }
46
- }
47
-
48
- public onAbort(handle: () => void) {
49
- this.emitter.on("abort", handle);
50
- }
51
-
52
- public abort() {
53
- this.emitter.emit("abort");
54
- }
55
- }
@@ -1,32 +0,0 @@
1
- import {render} from "@inquirer/testing";
2
- import {Prompt, Context} from "@inquirer/type";
3
- import {CustomMuteStream} from "../makes/CustomMuteStream";
4
- import {PromptSimulator} from "../makes/PromptSimulator";
5
-
6
-
7
- export const customRender = async <const C, const V>(
8
- prompt: Prompt<V, C>,
9
- config: C,
10
- options?: Omit<Context, "signal" | "input">
11
- ) => {
12
- const input = new CustomMuteStream(),
13
- events = new PromptSimulator(input),
14
- abortController = new AbortController();
15
-
16
- const data = await render(prompt, config, {
17
- ...options || {},
18
- input,
19
- signal: abortController.signal
20
- });
21
-
22
- events.onAbort(() => {
23
- data.answer.catch(() => undefined);
24
- abortController.abort();
25
- });
26
-
27
- return {
28
- ...data,
29
- input,
30
- events
31
- };
32
- };