@effect/platform-node 0.33.5 → 0.34.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.
@@ -9,21 +9,28 @@ const defaultShouldQuit = input => input.key.ctrl && (input.key.name === "c" ||
9
9
  export const make = (shouldQuit = defaultShouldQuit) => Effect.gen(function* (_) {
10
10
  const input = yield* _(Effect.sync(() => globalThis.process.stdin));
11
11
  const output = yield* _(Effect.sync(() => globalThis.process.stdout));
12
- // Acquire a `readline` interface and use it to force `stdin` to emit
13
- // keypress events
14
- const acquireReadlineInterface = Effect.sync(() => {
15
- const rl = readline.createInterface({
16
- input,
17
- escapeCodeTimeout: 50
18
- });
12
+ // Acquire a readline interface
13
+ const acquireReadlineInterface = Effect.sync(() => readline.createInterface({
14
+ input,
15
+ escapeCodeTimeout: 50
16
+ }));
17
+ // Uses the readline interface to force `stdin` to emit keypress events
18
+ const emitKeypressEvents = rl => {
19
19
  readline.emitKeypressEvents(input, rl);
20
20
  if (input.isTTY) {
21
21
  input.setRawMode(true);
22
22
  }
23
23
  return rl;
24
+ };
25
+ // Close the `readline` interface
26
+ const releaseReadlineInterface = rl => Effect.sync(() => {
27
+ if (input.isTTY) {
28
+ input.setRawMode(false);
29
+ }
30
+ rl.close();
24
31
  });
25
- // Handle the `"keypress"` event emitted by `stdin` forced by `readline`
26
- const handleKeypressEvent = Effect.async(resume => {
32
+ // Handle the `"keypress"` event emitted by `stdin` (forced by readline)
33
+ const handleKeypressEvent = input => Effect.async(resume => {
27
34
  const handleKeypress = (input, key) => {
28
35
  const userInput = {
29
36
  input: Option.fromNullable(input),
@@ -45,14 +52,18 @@ export const make = (shouldQuit = defaultShouldQuit) => Effect.gen(function* (_)
45
52
  input.removeListener("keypress", handleKeypress);
46
53
  });
47
54
  });
48
- // Close the `readline` interface
49
- const releaseReadlineInterface = rl => Effect.sync(() => {
50
- if (input.isTTY) {
51
- input.setRawMode(false);
52
- }
53
- rl.close();
55
+ // Handle the `"line"` event emitted by the readline interface
56
+ const handleLineEvent = rl => Effect.async(resume => {
57
+ const handleLine = line => {
58
+ resume(Effect.succeed(line));
59
+ };
60
+ rl.on("line", handleLine);
61
+ return Effect.sync(() => {
62
+ rl.removeListener("line", handleLine);
63
+ });
54
64
  });
55
- const readInput = Effect.acquireUseRelease(acquireReadlineInterface, () => handleKeypressEvent, releaseReadlineInterface);
65
+ const readInput = Effect.acquireUseRelease(acquireReadlineInterface.pipe(Effect.map(emitKeypressEvents)), () => handleKeypressEvent(input), releaseReadlineInterface);
66
+ const readLine = Effect.acquireUseRelease(acquireReadlineInterface, rl => handleLineEvent(rl), releaseReadlineInterface);
56
67
  const display = prompt => Effect.uninterruptible(Effect.async(resume => {
57
68
  output.write(prompt, err => {
58
69
  if (err) {
@@ -67,8 +78,9 @@ export const make = (shouldQuit = defaultShouldQuit) => Effect.gen(function* (_)
67
78
  }));
68
79
  return Terminal.Terminal.of({
69
80
  // The columns property can be undefined if stdout was redirected
70
- columns: output.columns || 0,
81
+ columns: Effect.sync(() => output.columns || 0),
71
82
  readInput,
83
+ readLine,
72
84
  display
73
85
  });
74
86
  });
@@ -1 +1 @@
1
- {"version":3,"file":"terminal.js","names":["Error","Terminal","Effect","Layer","Option","readline","defaultShouldQuit","input","key","ctrl","name","make","shouldQuit","gen","_","sync","globalThis","process","stdin","output","stdout","acquireReadlineInterface","rl","createInterface","escapeCodeTimeout","emitKeypressEvents","isTTY","setRawMode","handleKeypressEvent","async","resume","handleKeypress","userInput","fromNullable","meta","shift","fail","QuitException","succeed","once","removeListener","releaseReadlineInterface","close","readInput","acquireUseRelease","display","prompt","uninterruptible","write","err","BadArgument","module","method","message","String","unit","of","columns","layer","scoped"],"sources":["../../../src/internal/terminal.ts"],"sourcesContent":[null],"mappings":"AAAA,OAAO,KAAKA,KAAK,MAAM,wBAAwB;AAC/C,OAAO,KAAKC,QAAQ,MAAM,2BAA2B;AACrD,OAAO,KAAKC,MAAM,MAAM,eAAe;AACvC,OAAO,KAAKC,KAAK,MAAM,cAAc;AACrC,OAAO,KAAKC,MAAM,MAAM,eAAe;AACvC,OAAO,KAAKC,QAAQ,MAAM,eAAe;AAEzC,MAAMC,iBAAiB,GAAIC,KAAyB,IAClDA,KAAK,CAACC,GAAG,CAACC,IAAI,KAAKF,KAAK,CAACC,GAAG,CAACE,IAAI,KAAK,GAAG,IAAIH,KAAK,CAACC,GAAG,CAACE,IAAI,KAAK,GAAG,CAAC;AAEtE;AACA,OAAO,MAAMC,IAAI,GAAGA,CAClBC,UAAA,GAAqDN,iBAAiB,KAEtEJ,MAAM,CAACW,GAAG,CAAC,WAAUC,CAAC;EACpB,MAAMP,KAAK,GAAG,OAAOO,CAAC,CAACZ,MAAM,CAACa,IAAI,CAAC,MAAMC,UAAU,CAACC,OAAO,CAACC,KAAK,CAAC,CAAC;EACnE,MAAMC,MAAM,GAAG,OAAOL,CAAC,CAACZ,MAAM,CAACa,IAAI,CAAC,MAAMC,UAAU,CAACC,OAAO,CAACG,MAAM,CAAC,CAAC;EAErE;EACA;EACA,MAAMC,wBAAwB,GAAGnB,MAAM,CAACa,IAAI,CAAC,MAAK;IAChD,MAAMO,EAAE,GAAGjB,QAAQ,CAACkB,eAAe,CAAC;MAAEhB,KAAK;MAAEiB,iBAAiB,EAAE;IAAE,CAAE,CAAC;IACrEnB,QAAQ,CAACoB,kBAAkB,CAAClB,KAAK,EAAEe,EAAE,CAAC;IACtC,IAAIf,KAAK,CAACmB,KAAK,EAAE;MACfnB,KAAK,CAACoB,UAAU,CAAC,IAAI,CAAC;IACxB;IACA,OAAOL,EAAE;EACX,CAAC,CAAC;EAEF;EACA,MAAMM,mBAAmB,GAAG1B,MAAM,CAAC2B,KAAK,CAAqDC,MAAM,IAAI;IACrG,MAAMC,cAAc,GAAGA,CAACxB,KAAyB,EAAEC,GAAiB,KAAI;MACtE,MAAMwB,SAAS,GAAuB;QACpCzB,KAAK,EAAEH,MAAM,CAAC6B,YAAY,CAAC1B,KAAK,CAAC;QACjCC,GAAG,EAAE;UACHE,IAAI,EAAEF,GAAG,CAACE,IAAI,IAAI,EAAE;UACpBD,IAAI,EAAED,GAAG,CAACC,IAAI,IAAI,KAAK;UACvByB,IAAI,EAAE1B,GAAG,CAAC0B,IAAI,IAAI,KAAK;UACvBC,KAAK,EAAE3B,GAAG,CAAC2B,KAAK,IAAI;;OAEvB;MACD,IAAIvB,UAAU,CAACoB,SAAS,CAAC,EAAE;QACzBF,MAAM,CAAC5B,MAAM,CAACkC,IAAI,CAAC,IAAInC,QAAQ,CAACoC,aAAa,EAAE,CAAC,CAAC;MACnD,CAAC,MAAM;QACLP,MAAM,CAAC5B,MAAM,CAACoC,OAAO,CAACN,SAAS,CAAC,CAAC;MACnC;IACF,CAAC;IACDzB,KAAK,CAACgC,IAAI,CAAC,UAAU,EAAER,cAAc,CAAC;IACtC,OAAO7B,MAAM,CAACa,IAAI,CAAC,MAAK;MACtBR,KAAK,CAACiC,cAAc,CAAC,UAAU,EAAET,cAAc,CAAC;IAClD,CAAC,CAAC;EACJ,CAAC,CAAC;EAEF;EACA,MAAMU,wBAAwB,GAAInB,EAAsB,IACtDpB,MAAM,CAACa,IAAI,CAAC,MAAK;IACf,IAAIR,KAAK,CAACmB,KAAK,EAAE;MACfnB,KAAK,CAACoB,UAAU,CAAC,KAAK,CAAC;IACzB;IACAL,EAAE,CAACoB,KAAK,EAAE;EACZ,CAAC,CAAC;EAEJ,MAAMC,SAAS,GAAGzC,MAAM,CAAC0C,iBAAiB,CACxCvB,wBAAwB,EACxB,MAAMO,mBAAmB,EACzBa,wBAAwB,CACzB;EAED,MAAMI,OAAO,GAAIC,MAAc,IAC7B5C,MAAM,CAAC6C,eAAe,CACpB7C,MAAM,CAAC2B,KAAK,CAAEC,MAAM,IAAI;IACtBX,MAAM,CAAC6B,KAAK,CAACF,MAAM,EAAGG,GAAG,IAAI;MAC3B,IAAIA,GAAG,EAAE;QACPnB,MAAM,CAAC5B,MAAM,CAACkC,IAAI,CAACpC,KAAK,CAACkD,WAAW,CAAC;UACnCC,MAAM,EAAE,UAAU;UAClBC,MAAM,EAAE,SAAS;UACjBC,OAAO,EAAGJ,GAAa,CAACI,OAAO,IAAIC,MAAM,CAACL,GAAG;SAC9C,CAAC,CAAC,CAAC;MACN;MACAnB,MAAM,CAAC5B,MAAM,CAACqD,IAAI,CAAC;IACrB,CAAC,CAAC;EACJ,CAAC,CAAC,CACH;EAEH,OAAOtD,QAAQ,CAACA,QAAQ,CAACuD,EAAE,CAAC;IAC1B;IACAC,OAAO,EAAEtC,MAAM,CAACsC,OAAO,IAAI,CAAC;IAC5Bd,SAAS;IACTE;GACD,CAAC;AACJ,CAAC,CAAC;AAEJ;AACA,OAAO,MAAMa,KAAK,gBAAiDvD,KAAK,CAACwD,MAAM,CAC7E1D,QAAQ,CAACA,QAAQ,eACjBU,IAAI,CAACL,iBAAiB,CAAC,CACxB"}
1
+ {"version":3,"file":"terminal.js","names":["Error","Terminal","Effect","Layer","Option","readline","defaultShouldQuit","input","key","ctrl","name","make","shouldQuit","gen","_","sync","globalThis","process","stdin","output","stdout","acquireReadlineInterface","createInterface","escapeCodeTimeout","emitKeypressEvents","rl","isTTY","setRawMode","releaseReadlineInterface","close","handleKeypressEvent","async","resume","handleKeypress","userInput","fromNullable","meta","shift","fail","QuitException","succeed","once","removeListener","handleLineEvent","handleLine","line","on","readInput","acquireUseRelease","pipe","map","readLine","display","prompt","uninterruptible","write","err","BadArgument","module","method","message","String","unit","of","columns","layer","scoped"],"sources":["../../../src/internal/terminal.ts"],"sourcesContent":[null],"mappings":"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"}
@@ -40,21 +40,28 @@ const defaultShouldQuit = input => input.key.ctrl && (input.key.name === "c" ||
40
40
  const make = (shouldQuit = defaultShouldQuit) => Effect.gen(function* (_) {
41
41
  const input = yield* _(Effect.sync(() => globalThis.process.stdin));
42
42
  const output = yield* _(Effect.sync(() => globalThis.process.stdout));
43
- // Acquire a `readline` interface and use it to force `stdin` to emit
44
- // keypress events
45
- const acquireReadlineInterface = Effect.sync(() => {
46
- const rl = readline.createInterface({
47
- input,
48
- escapeCodeTimeout: 50
49
- });
43
+ // Acquire a readline interface
44
+ const acquireReadlineInterface = Effect.sync(() => readline.createInterface({
45
+ input,
46
+ escapeCodeTimeout: 50
47
+ }));
48
+ // Uses the readline interface to force `stdin` to emit keypress events
49
+ const emitKeypressEvents = rl => {
50
50
  readline.emitKeypressEvents(input, rl);
51
51
  if (input.isTTY) {
52
52
  input.setRawMode(true);
53
53
  }
54
54
  return rl;
55
+ };
56
+ // Close the `readline` interface
57
+ const releaseReadlineInterface = rl => Effect.sync(() => {
58
+ if (input.isTTY) {
59
+ input.setRawMode(false);
60
+ }
61
+ rl.close();
55
62
  });
56
- // Handle the `"keypress"` event emitted by `stdin` forced by `readline`
57
- const handleKeypressEvent = Effect.async(resume => {
63
+ // Handle the `"keypress"` event emitted by `stdin` (forced by readline)
64
+ const handleKeypressEvent = input => Effect.async(resume => {
58
65
  const handleKeypress = (input, key) => {
59
66
  const userInput = {
60
67
  input: Option.fromNullable(input),
@@ -76,14 +83,18 @@ const make = (shouldQuit = defaultShouldQuit) => Effect.gen(function* (_) {
76
83
  input.removeListener("keypress", handleKeypress);
77
84
  });
78
85
  });
79
- // Close the `readline` interface
80
- const releaseReadlineInterface = rl => Effect.sync(() => {
81
- if (input.isTTY) {
82
- input.setRawMode(false);
83
- }
84
- rl.close();
86
+ // Handle the `"line"` event emitted by the readline interface
87
+ const handleLineEvent = rl => Effect.async(resume => {
88
+ const handleLine = line => {
89
+ resume(Effect.succeed(line));
90
+ };
91
+ rl.on("line", handleLine);
92
+ return Effect.sync(() => {
93
+ rl.removeListener("line", handleLine);
94
+ });
85
95
  });
86
- const readInput = Effect.acquireUseRelease(acquireReadlineInterface, () => handleKeypressEvent, releaseReadlineInterface);
96
+ const readInput = Effect.acquireUseRelease(acquireReadlineInterface.pipe(Effect.map(emitKeypressEvents)), () => handleKeypressEvent(input), releaseReadlineInterface);
97
+ const readLine = Effect.acquireUseRelease(acquireReadlineInterface, rl => handleLineEvent(rl), releaseReadlineInterface);
87
98
  const display = prompt => Effect.uninterruptible(Effect.async(resume => {
88
99
  output.write(prompt, err => {
89
100
  if (err) {
@@ -98,8 +109,9 @@ const make = (shouldQuit = defaultShouldQuit) => Effect.gen(function* (_) {
98
109
  }));
99
110
  return Terminal.Terminal.of({
100
111
  // The columns property can be undefined if stdout was redirected
101
- columns: output.columns || 0,
112
+ columns: Effect.sync(() => output.columns || 0),
102
113
  readInput,
114
+ readLine,
103
115
  display
104
116
  });
105
117
  });
@@ -1 +1 @@
1
- {"version":3,"file":"terminal.js","names":["Error","_interopRequireWildcard","require","Terminal","Effect","Layer","Option","readline","_getRequireWildcardCache","e","WeakMap","r","t","__esModule","default","has","get","n","__proto__","a","Object","defineProperty","getOwnPropertyDescriptor","u","prototype","hasOwnProperty","call","i","set","defaultShouldQuit","input","key","ctrl","name","make","shouldQuit","gen","_","sync","globalThis","process","stdin","output","stdout","acquireReadlineInterface","rl","createInterface","escapeCodeTimeout","emitKeypressEvents","isTTY","setRawMode","handleKeypressEvent","async","resume","handleKeypress","userInput","fromNullable","meta","shift","fail","QuitException","succeed","once","removeListener","releaseReadlineInterface","close","readInput","acquireUseRelease","display","prompt","uninterruptible","write","err","BadArgument","module","method","message","String","unit","of","columns","exports","layer","scoped"],"sources":["../src/internal/terminal.ts"],"sourcesContent":[null],"mappings":"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"}
1
+ {"version":3,"file":"terminal.js","names":["Error","_interopRequireWildcard","require","Terminal","Effect","Layer","Option","readline","_getRequireWildcardCache","e","WeakMap","r","t","__esModule","default","has","get","n","__proto__","a","Object","defineProperty","getOwnPropertyDescriptor","u","prototype","hasOwnProperty","call","i","set","defaultShouldQuit","input","key","ctrl","name","make","shouldQuit","gen","_","sync","globalThis","process","stdin","output","stdout","acquireReadlineInterface","createInterface","escapeCodeTimeout","emitKeypressEvents","rl","isTTY","setRawMode","releaseReadlineInterface","close","handleKeypressEvent","async","resume","handleKeypress","userInput","fromNullable","meta","shift","fail","QuitException","succeed","once","removeListener","handleLineEvent","handleLine","line","on","readInput","acquireUseRelease","pipe","map","readLine","display","prompt","uninterruptible","write","err","BadArgument","module","method","message","String","unit","of","columns","exports","layer","scoped"],"sources":["../src/internal/terminal.ts"],"sourcesContent":[null],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@effect/platform-node",
3
- "version": "0.33.5",
3
+ "version": "0.34.0",
4
4
  "description": "Unified interfaces for common platform-specific services",
5
5
  "license": "MIT",
6
6
  "repository": {
@@ -12,10 +12,10 @@
12
12
  "dependencies": {
13
13
  "mime": "^3.0.0",
14
14
  "multipasta": "^0.1.19",
15
- "@effect/platform": "0.32.2"
15
+ "@effect/platform": "0.33.0"
16
16
  },
17
17
  "peerDependencies": {
18
- "effect": "2.0.0-next.58"
18
+ "effect": "2.0.0-next.59"
19
19
  },
20
20
  "main": "./index.js",
21
21
  "module": "./dist/esm/index.js",
@@ -16,40 +16,22 @@ export const make = (
16
16
  const input = yield* _(Effect.sync(() => globalThis.process.stdin))
17
17
  const output = yield* _(Effect.sync(() => globalThis.process.stdout))
18
18
 
19
- // Acquire a `readline` interface and use it to force `stdin` to emit
20
- // keypress events
21
- const acquireReadlineInterface = Effect.sync(() => {
22
- const rl = readline.createInterface({ input, escapeCodeTimeout: 50 })
19
+ // Acquire a readline interface
20
+ const acquireReadlineInterface = Effect.sync(() =>
21
+ readline.createInterface({
22
+ input,
23
+ escapeCodeTimeout: 50
24
+ })
25
+ )
26
+
27
+ // Uses the readline interface to force `stdin` to emit keypress events
28
+ const emitKeypressEvents = (rl: readline.Interface): readline.Interface => {
23
29
  readline.emitKeypressEvents(input, rl)
24
30
  if (input.isTTY) {
25
31
  input.setRawMode(true)
26
32
  }
27
33
  return rl
28
- })
29
-
30
- // Handle the `"keypress"` event emitted by `stdin` forced by `readline`
31
- const handleKeypressEvent = Effect.async<never, Terminal.QuitException, Terminal.UserInput>((resume) => {
32
- const handleKeypress = (input: string | undefined, key: readline.Key) => {
33
- const userInput: Terminal.UserInput = {
34
- input: Option.fromNullable(input),
35
- key: {
36
- name: key.name || "",
37
- ctrl: key.ctrl || false,
38
- meta: key.meta || false,
39
- shift: key.shift || false
40
- }
41
- }
42
- if (shouldQuit(userInput)) {
43
- resume(Effect.fail(new Terminal.QuitException()))
44
- } else {
45
- resume(Effect.succeed(userInput))
46
- }
47
- }
48
- input.once("keypress", handleKeypress)
49
- return Effect.sync(() => {
50
- input.removeListener("keypress", handleKeypress)
51
- })
52
- })
34
+ }
53
35
 
54
36
  // Close the `readline` interface
55
37
  const releaseReadlineInterface = (rl: readline.Interface) =>
@@ -60,9 +42,52 @@ export const make = (
60
42
  rl.close()
61
43
  })
62
44
 
45
+ // Handle the `"keypress"` event emitted by `stdin` (forced by readline)
46
+ const handleKeypressEvent = (input: typeof globalThis.process.stdin) =>
47
+ Effect.async<never, Terminal.QuitException, Terminal.UserInput>((resume) => {
48
+ const handleKeypress = (input: string | undefined, key: readline.Key) => {
49
+ const userInput: Terminal.UserInput = {
50
+ input: Option.fromNullable(input),
51
+ key: {
52
+ name: key.name || "",
53
+ ctrl: key.ctrl || false,
54
+ meta: key.meta || false,
55
+ shift: key.shift || false
56
+ }
57
+ }
58
+ if (shouldQuit(userInput)) {
59
+ resume(Effect.fail(new Terminal.QuitException()))
60
+ } else {
61
+ resume(Effect.succeed(userInput))
62
+ }
63
+ }
64
+ input.once("keypress", handleKeypress)
65
+ return Effect.sync(() => {
66
+ input.removeListener("keypress", handleKeypress)
67
+ })
68
+ })
69
+
70
+ // Handle the `"line"` event emitted by the readline interface
71
+ const handleLineEvent = (rl: readline.Interface) =>
72
+ Effect.async<never, Terminal.QuitException, string>((resume) => {
73
+ const handleLine = (line: string) => {
74
+ resume(Effect.succeed(line))
75
+ }
76
+ rl.on("line", handleLine)
77
+ return Effect.sync(() => {
78
+ rl.removeListener("line", handleLine)
79
+ })
80
+ })
81
+
63
82
  const readInput = Effect.acquireUseRelease(
83
+ acquireReadlineInterface.pipe(Effect.map(emitKeypressEvents)),
84
+ () => handleKeypressEvent(input),
85
+ releaseReadlineInterface
86
+ )
87
+
88
+ const readLine = Effect.acquireUseRelease(
64
89
  acquireReadlineInterface,
65
- () => handleKeypressEvent,
90
+ (rl) => handleLineEvent(rl),
66
91
  releaseReadlineInterface
67
92
  )
68
93
 
@@ -84,8 +109,9 @@ export const make = (
84
109
 
85
110
  return Terminal.Terminal.of({
86
111
  // The columns property can be undefined if stdout was redirected
87
- columns: output.columns || 0,
112
+ columns: Effect.sync(() => output.columns || 0),
88
113
  readInput,
114
+ readLine,
89
115
  display
90
116
  })
91
117
  })