@effect/platform-node 0.33.4 → 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.
@@ -1,10 +1,16 @@
1
1
  import { defaultTeardown } from "@effect/platform/Runtime";
2
+ import * as Cause from "effect/Cause";
2
3
  import * as Effect from "effect/Effect";
3
4
  import { equals } from "effect/Equal";
4
5
  import * as Fiber from "effect/Fiber";
5
6
  /** @internal */
6
7
  export const runMain = (effect, teardown = defaultTeardown) => {
7
- const fiber = Effect.runFork(effect);
8
+ const fiber = Effect.runFork(Effect.tapErrorCause(effect, cause => {
9
+ if (Cause.isInterruptedOnly(cause)) {
10
+ return Effect.unit;
11
+ }
12
+ return Effect.logError(cause);
13
+ }));
8
14
  fiber.addObserver(exit => teardown(exit, code => {
9
15
  Effect.runCallback(interruptAll(fiber.id()), () => {
10
16
  process.exit(code);
@@ -1 +1 @@
1
- {"version":3,"file":"runtime.js","names":["defaultTeardown","Effect","equals","Fiber","runMain","effect","teardown","fiber","runFork","addObserver","exit","code","runCallback","interruptAll","id","process","onSigint","removeListener","interruptAsFork","once","rootWithoutSelf","fiberIdWith","selfId","map","roots","filter","flatMap","length","unit","interruptAllAs","postInterruptRoots"],"sources":["../../../src/internal/runtime.ts"],"sourcesContent":[null],"mappings":"AAAA,SAASA,eAAe,QAAsB,0BAA0B;AACxE,OAAO,KAAKC,MAAM,MAAM,eAAe;AACvC,SAASC,MAAM,QAAQ,cAAc;AACrC,OAAO,KAAKC,KAAK,MAAM,cAAc;AAGrC;AACA,OAAO,MAAMC,OAAO,GAAYA,CAC9BC,MAAkC,EAClCC,QAAQ,GAAGN,eAAe,KACxB;EACF,MAAMO,KAAK,GAAGN,MAAM,CAACO,OAAO,CAACH,MAAM,CAAC;EAEpCE,KAAK,CAACE,WAAW,CAAEC,IAAI,IACrBJ,QAAQ,CAACI,IAAI,EAAGC,IAAI,IAAI;IACtBV,MAAM,CAACW,WAAW,CAACC,YAAY,CAACN,KAAK,CAACO,EAAE,EAAE,CAAC,EAAE,MAAK;MAChDC,OAAO,CAACL,IAAI,CAACC,IAAI,CAAC;IACpB,CAAC,CAAC;EACJ,CAAC,CAAC,CACH;EAED,SAASK,QAAQA,CAAA;IACfD,OAAO,CAACE,cAAc,CAAC,QAAQ,EAAED,QAAQ,CAAC;IAC1CD,OAAO,CAACE,cAAc,CAAC,SAAS,EAAED,QAAQ,CAAC;IAC3Cf,MAAM,CAACO,OAAO,CAACD,KAAK,CAACW,eAAe,CAACX,KAAK,CAACO,EAAE,EAAE,CAAC,CAAC;EACnD;EAEAC,OAAO,CAACI,IAAI,CAAC,QAAQ,EAAEH,QAAQ,CAAC;EAChCD,OAAO,CAACI,IAAI,CAAC,SAAS,EAAEH,QAAQ,CAAC;AACnC,CAAC;AAED,MAAMI,eAAe,gBAAGnB,MAAM,CAACoB,WAAW,CAAEC,MAAM,IAChDrB,MAAM,CAACsB,GAAG,CAACpB,KAAK,CAACqB,KAAK,EAAGA,KAAK,IAAKA,KAAK,CAACC,MAAM,CAAElB,KAAK,IAAK,CAACL,MAAM,CAACK,KAAK,CAACO,EAAE,EAAE,EAAEQ,MAAM,CAAC,CAAC,CAAC,CACzF;AAED,MAAMT,YAAY,GAAIC,EAAmB,IACvCb,MAAM,CAACyB,OAAO,CAACN,eAAe,EAAGI,KAAK,IAAI;EACxC,IAAIA,KAAK,CAACG,MAAM,KAAK,CAAC,EAAE;IACtB,OAAO1B,MAAM,CAAC2B,IAAI;EACpB;EACA,OAAO3B,MAAM,CAACyB,OAAO,CACnBvB,KAAK,CAAC0B,cAAc,CAACL,KAAK,EAAEV,EAAE,CAAC,EAC/B,MACEb,MAAM,CAACyB,OAAO,CACZN,eAAe,EACdU,kBAAkB,IAAKA,kBAAkB,CAACH,MAAM,GAAG,CAAC,GAAGd,YAAY,CAACC,EAAE,CAAC,GAAGb,MAAM,CAAC2B,IAAI,CACvF,CACJ;AACH,CAAC,CAAC"}
1
+ {"version":3,"file":"runtime.js","names":["defaultTeardown","Cause","Effect","equals","Fiber","runMain","effect","teardown","fiber","runFork","tapErrorCause","cause","isInterruptedOnly","unit","logError","addObserver","exit","code","runCallback","interruptAll","id","process","onSigint","removeListener","interruptAsFork","once","rootWithoutSelf","fiberIdWith","selfId","map","roots","filter","flatMap","length","interruptAllAs","postInterruptRoots"],"sources":["../../../src/internal/runtime.ts"],"sourcesContent":[null],"mappings":"AAAA,SAASA,eAAe,QAAsB,0BAA0B;AACxE,OAAO,KAAKC,KAAK,MAAM,cAAc;AACrC,OAAO,KAAKC,MAAM,MAAM,eAAe;AACvC,SAASC,MAAM,QAAQ,cAAc;AACrC,OAAO,KAAKC,KAAK,MAAM,cAAc;AAGrC;AACA,OAAO,MAAMC,OAAO,GAAYA,CAC9BC,MAAkC,EAClCC,QAAQ,GAAGP,eAAe,KACxB;EACF,MAAMQ,KAAK,GAAGN,MAAM,CAACO,OAAO,CAC1BP,MAAM,CAACQ,aAAa,CAACJ,MAAM,EAAGK,KAAK,IAAI;IACrC,IAAIV,KAAK,CAACW,iBAAiB,CAACD,KAAK,CAAC,EAAE;MAClC,OAAOT,MAAM,CAACW,IAAI;IACpB;IACA,OAAOX,MAAM,CAACY,QAAQ,CAACH,KAAK,CAAC;EAC/B,CAAC,CAAC,CACH;EAEDH,KAAK,CAACO,WAAW,CAAEC,IAAI,IACrBT,QAAQ,CAACS,IAAI,EAAGC,IAAI,IAAI;IACtBf,MAAM,CAACgB,WAAW,CAACC,YAAY,CAACX,KAAK,CAACY,EAAE,EAAE,CAAC,EAAE,MAAK;MAChDC,OAAO,CAACL,IAAI,CAACC,IAAI,CAAC;IACpB,CAAC,CAAC;EACJ,CAAC,CAAC,CACH;EAED,SAASK,QAAQA,CAAA;IACfD,OAAO,CAACE,cAAc,CAAC,QAAQ,EAAED,QAAQ,CAAC;IAC1CD,OAAO,CAACE,cAAc,CAAC,SAAS,EAAED,QAAQ,CAAC;IAC3CpB,MAAM,CAACO,OAAO,CAACD,KAAK,CAACgB,eAAe,CAAChB,KAAK,CAACY,EAAE,EAAE,CAAC,CAAC;EACnD;EAEAC,OAAO,CAACI,IAAI,CAAC,QAAQ,EAAEH,QAAQ,CAAC;EAChCD,OAAO,CAACI,IAAI,CAAC,SAAS,EAAEH,QAAQ,CAAC;AACnC,CAAC;AAED,MAAMI,eAAe,gBAAGxB,MAAM,CAACyB,WAAW,CAAEC,MAAM,IAChD1B,MAAM,CAAC2B,GAAG,CAACzB,KAAK,CAAC0B,KAAK,EAAGA,KAAK,IAAKA,KAAK,CAACC,MAAM,CAAEvB,KAAK,IAAK,CAACL,MAAM,CAACK,KAAK,CAACY,EAAE,EAAE,EAAEQ,MAAM,CAAC,CAAC,CAAC,CACzF;AAED,MAAMT,YAAY,GAAIC,EAAmB,IACvClB,MAAM,CAAC8B,OAAO,CAACN,eAAe,EAAGI,KAAK,IAAI;EACxC,IAAIA,KAAK,CAACG,MAAM,KAAK,CAAC,EAAE;IACtB,OAAO/B,MAAM,CAACW,IAAI;EACpB;EACA,OAAOX,MAAM,CAAC8B,OAAO,CACnB5B,KAAK,CAAC8B,cAAc,CAACJ,KAAK,EAAEV,EAAE,CAAC,EAC/B,MACElB,MAAM,CAAC8B,OAAO,CACZN,eAAe,EACdS,kBAAkB,IAAKA,kBAAkB,CAACF,MAAM,GAAG,CAAC,GAAGd,YAAY,CAACC,EAAE,CAAC,GAAGlB,MAAM,CAACW,IAAI,CACvF,CACJ;AACH,CAAC,CAAC"}
@@ -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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"}
@@ -5,6 +5,7 @@ Object.defineProperty(exports, "__esModule", {
5
5
  });
6
6
  exports.runMain = void 0;
7
7
  var _Runtime = /*#__PURE__*/require("@effect/platform/Runtime");
8
+ var Cause = /*#__PURE__*/_interopRequireWildcard( /*#__PURE__*/require("effect/Cause"));
8
9
  var Effect = /*#__PURE__*/_interopRequireWildcard( /*#__PURE__*/require("effect/Effect"));
9
10
  var _Equal = /*#__PURE__*/require("effect/Equal");
10
11
  var Fiber = /*#__PURE__*/_interopRequireWildcard( /*#__PURE__*/require("effect/Fiber"));
@@ -35,7 +36,12 @@ function _interopRequireWildcard(e, r) {
35
36
  }
36
37
  /** @internal */
37
38
  const runMain = (effect, teardown = _Runtime.defaultTeardown) => {
38
- const fiber = Effect.runFork(effect);
39
+ const fiber = Effect.runFork(Effect.tapErrorCause(effect, cause => {
40
+ if (Cause.isInterruptedOnly(cause)) {
41
+ return Effect.unit;
42
+ }
43
+ return Effect.logError(cause);
44
+ }));
39
45
  fiber.addObserver(exit => teardown(exit, code => {
40
46
  Effect.runCallback(interruptAll(fiber.id()), () => {
41
47
  process.exit(code);
@@ -1 +1 @@
1
- {"version":3,"file":"runtime.js","names":["_Runtime","require","Effect","_interopRequireWildcard","_Equal","Fiber","_getRequireWildcardCache","e","WeakMap","r","t","__esModule","default","has","get","n","__proto__","a","Object","defineProperty","getOwnPropertyDescriptor","u","prototype","hasOwnProperty","call","i","set","runMain","effect","teardown","defaultTeardown","fiber","runFork","addObserver","exit","code","runCallback","interruptAll","id","process","onSigint","removeListener","interruptAsFork","once","exports","rootWithoutSelf","fiberIdWith","selfId","map","roots","filter","equals","flatMap","length","unit","interruptAllAs","postInterruptRoots"],"sources":["../src/internal/runtime.ts"],"sourcesContent":[null],"mappings":"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"}
1
+ {"version":3,"file":"runtime.js","names":["_Runtime","require","Cause","_interopRequireWildcard","Effect","_Equal","Fiber","_getRequireWildcardCache","e","WeakMap","r","t","__esModule","default","has","get","n","__proto__","a","Object","defineProperty","getOwnPropertyDescriptor","u","prototype","hasOwnProperty","call","i","set","runMain","effect","teardown","defaultTeardown","fiber","runFork","tapErrorCause","cause","isInterruptedOnly","unit","logError","addObserver","exit","code","runCallback","interruptAll","id","process","onSigint","removeListener","interruptAsFork","once","exports","rootWithoutSelf","fiberIdWith","selfId","map","roots","filter","equals","flatMap","length","interruptAllAs","postInterruptRoots"],"sources":["../src/internal/runtime.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":";;;;;;AAAA,IAAAA,KAAA,gBAAAC,uBAAA,eAAAC,OAAA;AACA,IAAAC,QAAA,gBAAAF,uBAAA,eAAAC,OAAA;AACA,IAAAE,MAAA,gBAAAH,uBAAA,eAAAC,OAAA;AACA,IAAAG,KAAA,gBAAAJ,uBAAA,eAAAC,OAAA;AACA,IAAAI,MAAA,gBAAAL,uBAAA,eAAAC,OAAA;AACA,IAAAK,QAAA,gBAAAN,uBAAA,eAAAC,OAAA;AAAyC,SAAAM,yBAAAC,CAAA;EAAA,yBAAAC,OAAA;EAAA,IAAAC,CAAA,OAAAD,OAAA;IAAAE,CAAA,OAAAF,OAAA;EAAA,QAAAF,wBAAA,YAAAA,CAAAC,CAAA;IAAA,OAAAA,CAAA,GAAAG,CAAA,GAAAD,CAAA;EAAA,GAAAF,CAAA;AAAA;AAAA,SAAAR,wBAAAQ,CAAA,EAAAE,CAAA;EAAA,KAAAA,CAAA,IAAAF,CAAA,IAAAA,CAAA,CAAAI,UAAA,SAAAJ,CAAA;EAAA,aAAAA,CAAA,uBAAAA,CAAA,yBAAAA,CAAA;IAAAK,OAAA,EAAAL;EAAA;EAAA,IAAAG,CAAA,GAAAJ,wBAAA,CAAAG,CAAA;EAAA,IAAAC,CAAA,IAAAA,CAAA,CAAAG,GAAA,CAAAN,CAAA,UAAAG,CAAA,CAAAI,GAAA,CAAAP,CAAA;EAAA,IAAAQ,CAAA;MAAAC,SAAA;IAAA;IAAAC,CAAA,GAAAC,MAAA,CAAAC,cAAA,IAAAD,MAAA,CAAAE,wBAAA;EAAA,SAAAC,CAAA,IAAAd,CAAA,oBAAAc,CAAA,IAAAH,MAAA,CAAAI,SAAA,CAAAC,cAAA,CAAAC,IAAA,CAAAjB,CAAA,EAAAc,CAAA;IAAA,IAAAI,CAAA,GAAAR,CAAA,GAAAC,MAAA,CAAAE,wBAAA,CAAAb,CAAA,EAAAc,CAAA;IAAAI,CAAA,KAAAA,CAAA,CAAAX,GAAA,IAAAW,CAAA,CAAAC,GAAA,IAAAR,MAAA,CAAAC,cAAA,CAAAJ,CAAA,EAAAM,CAAA,EAAAI,CAAA,IAAAV,CAAA,CAAAM,CAAA,IAAAd,CAAA,CAAAc,CAAA;EAAA;EAAA,OAAAN,CAAA,CAAAH,OAAA,GAAAL,CAAA,EAAAG,CAAA,IAAAA,CAAA,CAAAgB,GAAA,CAAAnB,CAAA,EAAAQ,CAAA,GAAAA,CAAA;AAAA;AAEzC,MAAMY,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;AACO,MAAMC,IAAI,GAAGA,CAClBC,UAAA,GAAqDN,iBAAiB,KAEtEzB,MAAM,CAACgC,GAAG,CAAC,WAAUC,CAAC;EACpB,MAAMP,KAAK,GAAG,OAAOO,CAAC,CAACjC,MAAM,CAACkC,IAAI,CAAC,MAAMC,UAAU,CAACC,OAAO,CAACC,KAAK,CAAC,CAAC;EACnE,MAAMC,MAAM,GAAG,OAAOL,CAAC,CAACjC,MAAM,CAACkC,IAAI,CAAC,MAAMC,UAAU,CAACC,OAAO,CAACG,MAAM,CAAC,CAAC;EAErE;EACA,MAAMC,wBAAwB,GAAGxC,MAAM,CAACkC,IAAI,CAAC,MAC3C/B,QAAQ,CAACsC,eAAe,CAAC;IACvBf,KAAK;IACLgB,iBAAiB,EAAE;GACpB,CAAC,CACH;EAED;EACA,MAAMC,kBAAkB,GAAIC,EAAsB,IAAwB;IACxEzC,QAAQ,CAACwC,kBAAkB,CAACjB,KAAK,EAAEkB,EAAE,CAAC;IACtC,IAAIlB,KAAK,CAACmB,KAAK,EAAE;MACfnB,KAAK,CAACoB,UAAU,CAAC,IAAI,CAAC;IACxB;IACA,OAAOF,EAAE;EACX,CAAC;EAED;EACA,MAAMG,wBAAwB,GAAIH,EAAsB,IACtD5C,MAAM,CAACkC,IAAI,CAAC,MAAK;IACf,IAAIR,KAAK,CAACmB,KAAK,EAAE;MACfnB,KAAK,CAACoB,UAAU,CAAC,KAAK,CAAC;IACzB;IACAF,EAAE,CAACI,KAAK,EAAE;EACZ,CAAC,CAAC;EAEJ;EACA,MAAMC,mBAAmB,GAAIvB,KAAsC,IACjE1B,MAAM,CAACkD,KAAK,CAAqDC,MAAM,IAAI;IACzE,MAAMC,cAAc,GAAGA,CAAC1B,KAAyB,EAAEC,GAAiB,KAAI;MACtE,MAAM0B,SAAS,GAAuB;QACpC3B,KAAK,EAAExB,MAAM,CAACoD,YAAY,CAAC5B,KAAK,CAAC;QACjCC,GAAG,EAAE;UACHE,IAAI,EAAEF,GAAG,CAACE,IAAI,IAAI,EAAE;UACpBD,IAAI,EAAED,GAAG,CAACC,IAAI,IAAI,KAAK;UACvB2B,IAAI,EAAE5B,GAAG,CAAC4B,IAAI,IAAI,KAAK;UACvBC,KAAK,EAAE7B,GAAG,CAAC6B,KAAK,IAAI;;OAEvB;MACD,IAAIzB,UAAU,CAACsB,SAAS,CAAC,EAAE;QACzBF,MAAM,CAACnD,MAAM,CAACyD,IAAI,CAAC,IAAI1D,QAAQ,CAAC2D,aAAa,EAAE,CAAC,CAAC;MACnD,CAAC,MAAM;QACLP,MAAM,CAACnD,MAAM,CAAC2D,OAAO,CAACN,SAAS,CAAC,CAAC;MACnC;IACF,CAAC;IACD3B,KAAK,CAACkC,IAAI,CAAC,UAAU,EAAER,cAAc,CAAC;IACtC,OAAOpD,MAAM,CAACkC,IAAI,CAAC,MAAK;MACtBR,KAAK,CAACmC,cAAc,CAAC,UAAU,EAAET,cAAc,CAAC;IAClD,CAAC,CAAC;EACJ,CAAC,CAAC;EAEJ;EACA,MAAMU,eAAe,GAAIlB,EAAsB,IAC7C5C,MAAM,CAACkD,KAAK,CAAyCC,MAAM,IAAI;IAC7D,MAAMY,UAAU,GAAIC,IAAY,IAAI;MAClCb,MAAM,CAACnD,MAAM,CAAC2D,OAAO,CAACK,IAAI,CAAC,CAAC;IAC9B,CAAC;IACDpB,EAAE,CAACqB,EAAE,CAAC,MAAM,EAAEF,UAAU,CAAC;IACzB,OAAO/D,MAAM,CAACkC,IAAI,CAAC,MAAK;MACtBU,EAAE,CAACiB,cAAc,CAAC,MAAM,EAAEE,UAAU,CAAC;IACvC,CAAC,CAAC;EACJ,CAAC,CAAC;EAEJ,MAAMG,SAAS,GAAGlE,MAAM,CAACmE,iBAAiB,CACxC3B,wBAAwB,CAAC4B,IAAI,CAACpE,MAAM,CAACqE,GAAG,CAAC1B,kBAAkB,CAAC,CAAC,EAC7D,MAAMM,mBAAmB,CAACvB,KAAK,CAAC,EAChCqB,wBAAwB,CACzB;EAED,MAAMuB,QAAQ,GAAGtE,MAAM,CAACmE,iBAAiB,CACvC3B,wBAAwB,EACvBI,EAAE,IAAKkB,eAAe,CAAClB,EAAE,CAAC,EAC3BG,wBAAwB,CACzB;EAED,MAAMwB,OAAO,GAAIC,MAAc,IAC7BxE,MAAM,CAACyE,eAAe,CACpBzE,MAAM,CAACkD,KAAK,CAAEC,MAAM,IAAI;IACtBb,MAAM,CAACoC,KAAK,CAACF,MAAM,EAAGG,GAAG,IAAI;MAC3B,IAAIA,GAAG,EAAE;QACPxB,MAAM,CAACnD,MAAM,CAACyD,IAAI,CAAC7D,KAAK,CAACgF,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;MACAxB,MAAM,CAACnD,MAAM,CAACiF,IAAI,CAAC;IACrB,CAAC,CAAC;EACJ,CAAC,CAAC,CACH;EAEH,OAAOlF,QAAQ,CAACA,QAAQ,CAACmF,EAAE,CAAC;IAC1B;IACAC,OAAO,EAAEnF,MAAM,CAACkC,IAAI,CAAC,MAAMI,MAAM,CAAC6C,OAAO,IAAI,CAAC,CAAC;IAC/CjB,SAAS;IACTI,QAAQ;IACRC;GACD,CAAC;AACJ,CAAC,CAAC;AAEJ;AAAAa,OAAA,CAAAtD,IAAA,GAAAA,IAAA;AACO,MAAMuD,KAAK,GAAAD,OAAA,CAAAC,KAAA,gBAAiDpF,KAAK,CAACqF,MAAM,CAC7EvF,QAAQ,CAACA,QAAQ,eACjB+B,IAAI,CAACL,iBAAiB,CAAC,CACxB"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@effect/platform-node",
3
- "version": "0.33.4",
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",
@@ -1,4 +1,5 @@
1
1
  import { defaultTeardown, type RunMain } from "@effect/platform/Runtime"
2
+ import * as Cause from "effect/Cause"
2
3
  import * as Effect from "effect/Effect"
3
4
  import { equals } from "effect/Equal"
4
5
  import * as Fiber from "effect/Fiber"
@@ -9,7 +10,14 @@ export const runMain: RunMain = <E, A>(
9
10
  effect: Effect.Effect<never, E, A>,
10
11
  teardown = defaultTeardown
11
12
  ) => {
12
- const fiber = Effect.runFork(effect)
13
+ const fiber = Effect.runFork(
14
+ Effect.tapErrorCause(effect, (cause) => {
15
+ if (Cause.isInterruptedOnly(cause)) {
16
+ return Effect.unit
17
+ }
18
+ return Effect.logError(cause)
19
+ })
20
+ )
13
21
 
14
22
  fiber.addObserver((exit) =>
15
23
  teardown(exit, (code) => {
@@ -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
  })