@effect/platform-node 0.29.1 → 0.29.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/dist/cjs/FileSystem.js.map +1 -1
- package/dist/cjs/Terminal.js +50 -0
- package/dist/cjs/Terminal.js.map +1 -0
- package/dist/cjs/index.js +3 -1
- package/dist/cjs/internal/terminal.js +101 -0
- package/dist/cjs/internal/terminal.js.map +1 -0
- package/dist/dts/FileSystem.d.ts +5 -0
- package/dist/dts/FileSystem.d.ts.map +1 -1
- package/dist/dts/Terminal.d.ts +35 -0
- package/dist/dts/Terminal.d.ts.map +1 -0
- package/dist/dts/index.d.ts +4 -0
- package/dist/dts/index.d.ts.map +1 -1
- package/dist/dts/internal/terminal.d.ts +2 -0
- package/dist/dts/internal/terminal.d.ts.map +1 -0
- package/dist/esm/FileSystem.js.map +1 -1
- package/dist/esm/Terminal.js +18 -0
- package/dist/esm/Terminal.js.map +1 -0
- package/dist/esm/index.js +4 -0
- package/dist/esm/index.js.map +1 -1
- package/dist/esm/internal/terminal.js +69 -0
- package/dist/esm/internal/terminal.js.map +1 -0
- package/package.json +10 -2
- package/src/FileSystem.ts +5 -0
- package/src/Terminal.ts +42 -0
- package/src/index.ts +5 -0
- package/src/internal/terminal.ts +86 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"FileSystem.js","names":["internal","_interopRequireWildcard","require","_FileSystem","_getRequireWildcardCache","e","WeakMap","r","t","__esModule","default","has","get","n","__proto__","a","Object","defineProperty","getOwnPropertyDescriptor","u","prototype","hasOwnProperty","call","i","set","layer","exports"],"sources":["../../src/FileSystem.ts"],"sourcesContent":[null],"mappings":";;;;;;;;;;;;;;;;;;AAMA,IAAAA,QAAA,gBAAAC,uBAAA,eAAAC,OAAA;
|
|
1
|
+
{"version":3,"file":"FileSystem.js","names":["internal","_interopRequireWildcard","require","_FileSystem","_getRequireWildcardCache","e","WeakMap","r","t","__esModule","default","has","get","n","__proto__","a","Object","defineProperty","getOwnPropertyDescriptor","u","prototype","hasOwnProperty","call","i","set","layer","exports"],"sources":["../../src/FileSystem.ts"],"sourcesContent":[null],"mappings":";;;;;;;;;;;;;;;;;;AAMA,IAAAA,QAAA,gBAAAC,uBAAA,eAAAC,OAAA;AA4DA,IAAAC,WAAA,gBAAAD,OAAA;AAWoC,SAAAE,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,SAAAJ,wBAAAI,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;AA7EpC;;;;AA+EA;;;;AAIO,MAAMY,KAAK,GAAAC,OAAA,CAAAD,KAAA,GAAoCzB,QAAQ,CAACyB,KAAK"}
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
Object.defineProperty(exports, "Terminal", {
|
|
7
|
+
enumerable: true,
|
|
8
|
+
get: function () {
|
|
9
|
+
return _Terminal.Terminal;
|
|
10
|
+
}
|
|
11
|
+
});
|
|
12
|
+
exports.make = exports.layer = void 0;
|
|
13
|
+
var InternalTerminal = /*#__PURE__*/_interopRequireWildcard( /*#__PURE__*/require("./internal/terminal.js"));
|
|
14
|
+
var _Terminal = /*#__PURE__*/require("@effect/platform/Terminal");
|
|
15
|
+
function _getRequireWildcardCache(e) {
|
|
16
|
+
if ("function" != typeof WeakMap) return null;
|
|
17
|
+
var r = new WeakMap(),
|
|
18
|
+
t = new WeakMap();
|
|
19
|
+
return (_getRequireWildcardCache = function (e) {
|
|
20
|
+
return e ? t : r;
|
|
21
|
+
})(e);
|
|
22
|
+
}
|
|
23
|
+
function _interopRequireWildcard(e, r) {
|
|
24
|
+
if (!r && e && e.__esModule) return e;
|
|
25
|
+
if (null === e || "object" != typeof e && "function" != typeof e) return {
|
|
26
|
+
default: e
|
|
27
|
+
};
|
|
28
|
+
var t = _getRequireWildcardCache(r);
|
|
29
|
+
if (t && t.has(e)) return t.get(e);
|
|
30
|
+
var n = {
|
|
31
|
+
__proto__: null
|
|
32
|
+
},
|
|
33
|
+
a = Object.defineProperty && Object.getOwnPropertyDescriptor;
|
|
34
|
+
for (var u in e) if ("default" !== u && Object.prototype.hasOwnProperty.call(e, u)) {
|
|
35
|
+
var i = a ? Object.getOwnPropertyDescriptor(e, u) : null;
|
|
36
|
+
i && (i.get || i.set) ? Object.defineProperty(n, u, i) : n[u] = e[u];
|
|
37
|
+
}
|
|
38
|
+
return n.default = e, t && t.set(e, n), n;
|
|
39
|
+
}
|
|
40
|
+
/**
|
|
41
|
+
* @since 1.0.0
|
|
42
|
+
* @category constructors
|
|
43
|
+
*/
|
|
44
|
+
const make = exports.make = InternalTerminal.make;
|
|
45
|
+
/**
|
|
46
|
+
* @since 1.0.0
|
|
47
|
+
* @category layer
|
|
48
|
+
*/
|
|
49
|
+
const layer = exports.layer = InternalTerminal.layer;
|
|
50
|
+
//# sourceMappingURL=Terminal.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Terminal.js","names":["InternalTerminal","_interopRequireWildcard","require","_Terminal","_getRequireWildcardCache","e","WeakMap","r","t","__esModule","default","has","get","n","__proto__","a","Object","defineProperty","getOwnPropertyDescriptor","u","prototype","hasOwnProperty","call","i","set","make","exports","layer"],"sources":["../../src/Terminal.ts"],"sourcesContent":[null],"mappings":";;;;;;;;;;;;AAOA,IAAAA,gBAAA,gBAAAC,uBAAA,eAAAC,OAAA;AAeA,IAAAC,SAAA,gBAAAD,OAAA;AAMkC,SAAAE,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,SAAAJ,wBAAAI,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;AAElC;;;;AAIO,MAAMY,IAAI,GAAAC,OAAA,CAAAD,IAAA,GACfzB,gBAAgB,CAACyB,IAAI;AAEvB;;;;AAIO,MAAME,KAAK,GAAAD,OAAA,CAAAC,KAAA,GAAkC3B,gBAAgB,CAAC2B,KAAK"}
|
package/dist/cjs/index.js
CHANGED
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
Object.defineProperty(exports, "__esModule", {
|
|
4
4
|
value: true
|
|
5
5
|
});
|
|
6
|
-
exports.WorkerRunner = exports.Worker = exports.Stream = exports.Sink = exports.Runtime = exports.Path = exports.NodeContext = exports.KeyValueStore = exports.HttpServer = exports.HttpClient = exports.FileSystem = exports.Error = exports.Effectify = exports.CommandExecutor = exports.Command = void 0;
|
|
6
|
+
exports.WorkerRunner = exports.Worker = exports.Terminal = exports.Stream = exports.Sink = exports.Runtime = exports.Path = exports.NodeContext = exports.KeyValueStore = exports.HttpServer = exports.HttpClient = exports.FileSystem = exports.Error = exports.Effectify = exports.CommandExecutor = exports.Command = void 0;
|
|
7
7
|
var _Command = /*#__PURE__*/_interopRequireWildcard( /*#__PURE__*/require("./Command.js"));
|
|
8
8
|
exports.Command = _Command;
|
|
9
9
|
var _CommandExecutor = /*#__PURE__*/_interopRequireWildcard( /*#__PURE__*/require("./CommandExecutor.js"));
|
|
@@ -30,6 +30,8 @@ var _Sink = /*#__PURE__*/_interopRequireWildcard( /*#__PURE__*/require("./Sink.j
|
|
|
30
30
|
exports.Sink = _Sink;
|
|
31
31
|
var _Stream = /*#__PURE__*/_interopRequireWildcard( /*#__PURE__*/require("./Stream.js"));
|
|
32
32
|
exports.Stream = _Stream;
|
|
33
|
+
var _Terminal = /*#__PURE__*/_interopRequireWildcard( /*#__PURE__*/require("./Terminal.js"));
|
|
34
|
+
exports.Terminal = _Terminal;
|
|
33
35
|
var _Worker = /*#__PURE__*/_interopRequireWildcard( /*#__PURE__*/require("./Worker.js"));
|
|
34
36
|
exports.Worker = _Worker;
|
|
35
37
|
var _WorkerRunner = /*#__PURE__*/_interopRequireWildcard( /*#__PURE__*/require("./WorkerRunner.js"));
|
|
@@ -0,0 +1,101 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.make = exports.layer = void 0;
|
|
7
|
+
var Error = /*#__PURE__*/_interopRequireWildcard( /*#__PURE__*/require("@effect/platform/Error"));
|
|
8
|
+
var Terminal = /*#__PURE__*/_interopRequireWildcard( /*#__PURE__*/require("@effect/platform/Terminal"));
|
|
9
|
+
var Effect = /*#__PURE__*/_interopRequireWildcard( /*#__PURE__*/require("effect/Effect"));
|
|
10
|
+
var Layer = /*#__PURE__*/_interopRequireWildcard( /*#__PURE__*/require("effect/Layer"));
|
|
11
|
+
var Option = /*#__PURE__*/_interopRequireWildcard( /*#__PURE__*/require("effect/Option"));
|
|
12
|
+
var readline = /*#__PURE__*/_interopRequireWildcard( /*#__PURE__*/require("node:readline"));
|
|
13
|
+
function _getRequireWildcardCache(e) {
|
|
14
|
+
if ("function" != typeof WeakMap) return null;
|
|
15
|
+
var r = new WeakMap(),
|
|
16
|
+
t = new WeakMap();
|
|
17
|
+
return (_getRequireWildcardCache = function (e) {
|
|
18
|
+
return e ? t : r;
|
|
19
|
+
})(e);
|
|
20
|
+
}
|
|
21
|
+
function _interopRequireWildcard(e, r) {
|
|
22
|
+
if (!r && e && e.__esModule) return e;
|
|
23
|
+
if (null === e || "object" != typeof e && "function" != typeof e) return {
|
|
24
|
+
default: e
|
|
25
|
+
};
|
|
26
|
+
var t = _getRequireWildcardCache(r);
|
|
27
|
+
if (t && t.has(e)) return t.get(e);
|
|
28
|
+
var n = {
|
|
29
|
+
__proto__: null
|
|
30
|
+
},
|
|
31
|
+
a = Object.defineProperty && Object.getOwnPropertyDescriptor;
|
|
32
|
+
for (var u in e) if ("default" !== u && Object.prototype.hasOwnProperty.call(e, u)) {
|
|
33
|
+
var i = a ? Object.getOwnPropertyDescriptor(e, u) : null;
|
|
34
|
+
i && (i.get || i.set) ? Object.defineProperty(n, u, i) : n[u] = e[u];
|
|
35
|
+
}
|
|
36
|
+
return n.default = e, t && t.set(e, n), n;
|
|
37
|
+
}
|
|
38
|
+
const defaultShouldQuit = input => input.key.ctrl && (input.key.name === "c" || input.key.name === "d");
|
|
39
|
+
/** @internal */
|
|
40
|
+
const make = (shouldQuit = defaultShouldQuit) => Effect.gen(function* (_) {
|
|
41
|
+
const input = yield* _(Effect.sync(() => globalThis.process.stdin));
|
|
42
|
+
const output = yield* _(Effect.sync(() => globalThis.process.stdin));
|
|
43
|
+
// Create a readline interface and force it to emit keypress events
|
|
44
|
+
yield* _(Effect.acquireRelease(Effect.sync(() => {
|
|
45
|
+
const rl = readline.createInterface({
|
|
46
|
+
input,
|
|
47
|
+
escapeCodeTimeout: 50
|
|
48
|
+
});
|
|
49
|
+
readline.emitKeypressEvents(input, rl);
|
|
50
|
+
if (input.isTTY) {
|
|
51
|
+
input.setRawMode(true);
|
|
52
|
+
}
|
|
53
|
+
return rl;
|
|
54
|
+
}), rl => Effect.sync(() => {
|
|
55
|
+
if (input.isTTY) {
|
|
56
|
+
input.setRawMode(false);
|
|
57
|
+
}
|
|
58
|
+
rl.close();
|
|
59
|
+
})));
|
|
60
|
+
const readInput = Effect.async(resume => {
|
|
61
|
+
const handleKeypress = (input, key) => {
|
|
62
|
+
const userInput = {
|
|
63
|
+
input: Option.fromNullable(input),
|
|
64
|
+
key: {
|
|
65
|
+
name: key.name || "",
|
|
66
|
+
ctrl: key.ctrl || false,
|
|
67
|
+
meta: key.meta || false,
|
|
68
|
+
shift: key.shift || false
|
|
69
|
+
}
|
|
70
|
+
};
|
|
71
|
+
if (shouldQuit(userInput)) {
|
|
72
|
+
resume(Effect.fail(new Terminal.QuitException()));
|
|
73
|
+
}
|
|
74
|
+
resume(Effect.succeed(userInput));
|
|
75
|
+
};
|
|
76
|
+
input.once("keypress", handleKeypress);
|
|
77
|
+
return Effect.sync(() => {
|
|
78
|
+
input.removeListener("keypress", handleKeypress);
|
|
79
|
+
});
|
|
80
|
+
});
|
|
81
|
+
const display = prompt => Effect.uninterruptible(Effect.async(resume => {
|
|
82
|
+
output.write(prompt, err => {
|
|
83
|
+
if (err) {
|
|
84
|
+
resume(Effect.fail(Error.BadArgument({
|
|
85
|
+
module: "Terminal",
|
|
86
|
+
method: "display",
|
|
87
|
+
message: err.message ?? String(err)
|
|
88
|
+
})));
|
|
89
|
+
}
|
|
90
|
+
resume(Effect.unit);
|
|
91
|
+
});
|
|
92
|
+
}));
|
|
93
|
+
return Terminal.Terminal.of({
|
|
94
|
+
readInput,
|
|
95
|
+
display
|
|
96
|
+
});
|
|
97
|
+
});
|
|
98
|
+
/** @internal */
|
|
99
|
+
exports.make = make;
|
|
100
|
+
const layer = exports.layer = /*#__PURE__*/Layer.scoped(Terminal.Terminal, /*#__PURE__*/make(defaultShouldQuit));
|
|
101
|
+
//# sourceMappingURL=terminal.js.map
|
|
@@ -0,0 +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","acquireRelease","rl","createInterface","escapeCodeTimeout","emitKeypressEvents","isTTY","setRawMode","close","readInput","async","resume","handleKeypress","userInput","fromNullable","meta","shift","fail","QuitException","succeed","once","removeListener","display","prompt","uninterruptible","write","err","BadArgument","module","method","message","String","unit","of","exports","layer","scoped"],"sources":["../../../src/internal/terminal.ts"],"sourcesContent":[null],"mappings":"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"}
|
package/dist/dts/FileSystem.d.ts
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"FileSystem.d.ts","sourceRoot":"","sources":["../../src/FileSystem.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,6BAA6B,CAAA;AAC7D,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,cAAc,CAAA;AAGzC,YAAY;AACV;;;GAGG;AACH,oBAAoB;AACpB;;;GAGG;AACH,wBAAwB;AACxB;;;GAGG;AACH,mBAAmB;AACnB;;;GAGG;AACH,eAAe;AACf;;;GAGG;AACH,oBAAoB;AACpB;;;GAGG;AACH,aAAa;AACb;;;GAGG;AACH,QAAQ;AACR;;;GAGG;AACH,WAAW;AACX;;;GAGG;AACH,aAAa;AACb;;;GAGG;AACH,gBAAgB,EACjB,MAAM,6BAA6B,CAAA;AAEpC,OAAO;AACL;;;GAGG;AACH,UAAU;AACV;;;GAGG;AACH,IAAI,EACL,MAAM,6BAA6B,CAAA;AAEpC;;;GAGG;AACH,eAAO,MAAM,KAAK,EAAE,KAAK,CAAC,KAAK,EAAE,KAAK,EAAE,UAAU,CAAkB,CAAA"}
|
|
1
|
+
{"version":3,"file":"FileSystem.d.ts","sourceRoot":"","sources":["../../src/FileSystem.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,6BAA6B,CAAA;AAC7D,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,cAAc,CAAA;AAGzC,YAAY;AACV;;;GAGG;AACH,IAAI;AACJ;;;GAGG;AACH,oBAAoB;AACpB;;;GAGG;AACH,wBAAwB;AACxB;;;GAGG;AACH,mBAAmB;AACnB;;;GAGG;AACH,eAAe;AACf;;;GAGG;AACH,oBAAoB;AACpB;;;GAGG;AACH,aAAa;AACb;;;GAGG;AACH,QAAQ;AACR;;;GAGG;AACH,WAAW;AACX;;;GAGG;AACH,aAAa;AACb;;;GAGG;AACH,gBAAgB,EACjB,MAAM,6BAA6B,CAAA;AAEpC,OAAO;AACL;;;GAGG;AACH,UAAU;AACV;;;GAGG;AACH,IAAI,EACL,MAAM,6BAA6B,CAAA;AAEpC;;;GAGG;AACH,eAAO,MAAM,KAAK,EAAE,KAAK,CAAC,KAAK,EAAE,KAAK,EAAE,UAAU,CAAkB,CAAA"}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @since 1.0.0
|
|
3
|
+
*/
|
|
4
|
+
import type { Terminal, UserInput } from "@effect/platform/Terminal";
|
|
5
|
+
import type { Effect } from "effect/Effect";
|
|
6
|
+
import type { Layer } from "effect/Layer";
|
|
7
|
+
import type { Scope } from "effect/Scope";
|
|
8
|
+
export type {
|
|
9
|
+
/**
|
|
10
|
+
* @since 1.0.0
|
|
11
|
+
* @category model
|
|
12
|
+
*/
|
|
13
|
+
Key,
|
|
14
|
+
/**
|
|
15
|
+
* @since 1.0.0
|
|
16
|
+
* @category model
|
|
17
|
+
*/
|
|
18
|
+
UserInput } from "@effect/platform/Terminal";
|
|
19
|
+
export {
|
|
20
|
+
/**
|
|
21
|
+
* @since 1.0.0
|
|
22
|
+
* @category tag
|
|
23
|
+
*/
|
|
24
|
+
Terminal } from "@effect/platform/Terminal";
|
|
25
|
+
/**
|
|
26
|
+
* @since 1.0.0
|
|
27
|
+
* @category constructors
|
|
28
|
+
*/
|
|
29
|
+
export declare const make: (shouldQuit?: (input: UserInput) => boolean) => Effect<Scope, never, Terminal>;
|
|
30
|
+
/**
|
|
31
|
+
* @since 1.0.0
|
|
32
|
+
* @category layer
|
|
33
|
+
*/
|
|
34
|
+
export declare const layer: Layer<never, never, Terminal>;
|
|
35
|
+
//# sourceMappingURL=Terminal.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Terminal.d.ts","sourceRoot":"","sources":["../../src/Terminal.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,OAAO,KAAK,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,2BAA2B,CAAA;AACpE,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,eAAe,CAAA;AAC3C,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,cAAc,CAAA;AACzC,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,cAAc,CAAA;AAGzC,YAAY;AACV;;;GAGG;AACH,GAAG;AACH;;;GAGG;AACH,SAAS,EACV,MAAM,2BAA2B,CAAA;AAElC,OAAO;AACL;;;GAGG;AACH,QAAQ,EACT,MAAM,2BAA2B,CAAA;AAElC;;;GAGG;AACH,eAAO,MAAM,IAAI,EAAE,CAAC,UAAU,CAAC,EAAE,CAAC,KAAK,EAAE,SAAS,KAAK,OAAO,KAAK,MAAM,CAAC,KAAK,EAAE,KAAK,EAAE,QAAQ,CACzE,CAAA;AAEvB;;;GAGG;AACH,eAAO,MAAM,KAAK,EAAE,KAAK,CAAC,KAAK,EAAE,KAAK,EAAE,QAAQ,CAA0B,CAAA"}
|
package/dist/dts/index.d.ts
CHANGED
package/dist/dts/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,OAAO,KAAK,OAAO,MAAM,cAAc,CAAA;AAEvC;;GAEG;AACH,OAAO,KAAK,eAAe,MAAM,sBAAsB,CAAA;AAEvD;;GAEG;AACH,OAAO,KAAK,SAAS,MAAM,gBAAgB,CAAA;AAE3C;;GAEG;AACH,OAAO,KAAK,KAAK,MAAM,YAAY,CAAA;AAEnC;;GAEG;AACH,OAAO,KAAK,UAAU,MAAM,iBAAiB,CAAA;AAE7C;;GAEG;AACH,OAAO,KAAK,UAAU,MAAM,iBAAiB,CAAA;AAE7C;;GAEG;AACH,OAAO,KAAK,UAAU,MAAM,iBAAiB,CAAA;AAE7C;;;;GAIG;AACH,OAAO,KAAK,aAAa,MAAM,oBAAoB,CAAA;AAEnD;;GAEG;AACH,OAAO,KAAK,WAAW,MAAM,kBAAkB,CAAA;AAE/C;;GAEG;AACH,OAAO,KAAK,IAAI,MAAM,WAAW,CAAA;AAEjC;;GAEG;AACH,OAAO,KAAK,OAAO,MAAM,cAAc,CAAA;AAEvC;;GAEG;AACH,OAAO,KAAK,IAAI,MAAM,WAAW,CAAA;AAEjC;;GAEG;AACH,OAAO,KAAK,MAAM,MAAM,aAAa,CAAA;AAErC;;;;GAIG;AACH,OAAO,KAAK,MAAM,MAAM,aAAa,CAAA;AAErC;;;;GAIG;AACH,OAAO,KAAK,YAAY,MAAM,mBAAmB,CAAA"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,OAAO,KAAK,OAAO,MAAM,cAAc,CAAA;AAEvC;;GAEG;AACH,OAAO,KAAK,eAAe,MAAM,sBAAsB,CAAA;AAEvD;;GAEG;AACH,OAAO,KAAK,SAAS,MAAM,gBAAgB,CAAA;AAE3C;;GAEG;AACH,OAAO,KAAK,KAAK,MAAM,YAAY,CAAA;AAEnC;;GAEG;AACH,OAAO,KAAK,UAAU,MAAM,iBAAiB,CAAA;AAE7C;;GAEG;AACH,OAAO,KAAK,UAAU,MAAM,iBAAiB,CAAA;AAE7C;;GAEG;AACH,OAAO,KAAK,UAAU,MAAM,iBAAiB,CAAA;AAE7C;;;;GAIG;AACH,OAAO,KAAK,aAAa,MAAM,oBAAoB,CAAA;AAEnD;;GAEG;AACH,OAAO,KAAK,WAAW,MAAM,kBAAkB,CAAA;AAE/C;;GAEG;AACH,OAAO,KAAK,IAAI,MAAM,WAAW,CAAA;AAEjC;;GAEG;AACH,OAAO,KAAK,OAAO,MAAM,cAAc,CAAA;AAEvC;;GAEG;AACH,OAAO,KAAK,IAAI,MAAM,WAAW,CAAA;AAEjC;;GAEG;AACH,OAAO,KAAK,MAAM,MAAM,aAAa,CAAA;AAErC;;GAEG;AACH,OAAO,KAAK,QAAQ,MAAM,eAAe,CAAA;AAEzC;;;;GAIG;AACH,OAAO,KAAK,MAAM,MAAM,aAAa,CAAA;AAErC;;;;GAIG;AACH,OAAO,KAAK,YAAY,MAAM,mBAAmB,CAAA"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"terminal.d.ts","sourceRoot":"","sources":["../../../src/internal/terminal.ts"],"names":[],"mappings":""}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"FileSystem.js","names":["internal","FileSystem","Size","layer"],"sources":["../../src/FileSystem.ts"],"sourcesContent":[null],"mappings":"AAAA;;;AAMA,OAAO,KAAKA,QAAQ,MAAM,0BAA0B;
|
|
1
|
+
{"version":3,"file":"FileSystem.js","names":["internal","FileSystem","Size","layer"],"sources":["../../src/FileSystem.ts"],"sourcesContent":[null],"mappings":"AAAA;;;AAMA,OAAO,KAAKA,QAAQ,MAAM,0BAA0B;AA4DpD;AACE;;;;AAIAC,UAAU;AACV;;;;AAIAC,IAAI,QACC,6BAA6B;AAEpC;;;;AAIA,OAAO,MAAMC,KAAK,GAAoCH,QAAQ,CAACG,KAAK"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import * as InternalTerminal from "./internal/terminal.js";
|
|
2
|
+
export {
|
|
3
|
+
/**
|
|
4
|
+
* @since 1.0.0
|
|
5
|
+
* @category tag
|
|
6
|
+
*/
|
|
7
|
+
Terminal } from "@effect/platform/Terminal";
|
|
8
|
+
/**
|
|
9
|
+
* @since 1.0.0
|
|
10
|
+
* @category constructors
|
|
11
|
+
*/
|
|
12
|
+
export const make = InternalTerminal.make;
|
|
13
|
+
/**
|
|
14
|
+
* @since 1.0.0
|
|
15
|
+
* @category layer
|
|
16
|
+
*/
|
|
17
|
+
export const layer = InternalTerminal.layer;
|
|
18
|
+
//# sourceMappingURL=Terminal.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Terminal.js","names":["InternalTerminal","Terminal","make","layer"],"sources":["../../src/Terminal.ts"],"sourcesContent":[null],"mappings":"AAOA,OAAO,KAAKA,gBAAgB,MAAM,wBAAwB;AAe1D;AACE;;;;AAIAC,QAAQ,QACH,2BAA2B;AAElC;;;;AAIA,OAAO,MAAMC,IAAI,GACfF,gBAAgB,CAACE,IAAI;AAEvB;;;;AAIA,OAAO,MAAMC,KAAK,GAAkCH,gBAAgB,CAACG,KAAK"}
|
package/dist/esm/index.js
CHANGED
package/dist/esm/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","names":["Command","CommandExecutor","Effectify","Error","FileSystem","HttpClient","HttpServer","KeyValueStore","NodeContext","Path","Runtime","Sink","Stream","Worker","WorkerRunner"],"sources":["../../src/index.ts"],"sourcesContent":[null],"mappings":"AAAA;;;AAGA,OAAO,KAAKA,OAAO,MAAM,cAAc;AAEvC;;;AAGA,OAAO,KAAKC,eAAe,MAAM,sBAAsB;AAEvD;;;AAGA,OAAO,KAAKC,SAAS,MAAM,gBAAgB;AAE3C;;;AAGA,OAAO,KAAKC,KAAK,MAAM,YAAY;AAEnC;;;AAGA,OAAO,KAAKC,UAAU,MAAM,iBAAiB;AAE7C;;;AAGA,OAAO,KAAKC,UAAU,MAAM,iBAAiB;AAE7C;;;AAGA,OAAO,KAAKC,UAAU,MAAM,iBAAiB;AAE7C;;;;;AAKA,OAAO,KAAKC,aAAa,MAAM,oBAAoB;AAEnD;;;AAGA,OAAO,KAAKC,WAAW,MAAM,kBAAkB;AAE/C;;;AAGA,OAAO,KAAKC,IAAI,MAAM,WAAW;AAEjC;;;AAGA,OAAO,KAAKC,OAAO,MAAM,cAAc;AAEvC;;;AAGA,OAAO,KAAKC,IAAI,MAAM,WAAW;AAEjC;;;AAGA,OAAO,KAAKC,MAAM,MAAM,aAAa;AAErC;;;;;AAKA,OAAO,KAAKC,MAAM,MAAM,aAAa;AAErC;;;;;AAKA,OAAO,KAAKC,YAAY,MAAM,mBAAmB"}
|
|
1
|
+
{"version":3,"file":"index.js","names":["Command","CommandExecutor","Effectify","Error","FileSystem","HttpClient","HttpServer","KeyValueStore","NodeContext","Path","Runtime","Sink","Stream","Terminal","Worker","WorkerRunner"],"sources":["../../src/index.ts"],"sourcesContent":[null],"mappings":"AAAA;;;AAGA,OAAO,KAAKA,OAAO,MAAM,cAAc;AAEvC;;;AAGA,OAAO,KAAKC,eAAe,MAAM,sBAAsB;AAEvD;;;AAGA,OAAO,KAAKC,SAAS,MAAM,gBAAgB;AAE3C;;;AAGA,OAAO,KAAKC,KAAK,MAAM,YAAY;AAEnC;;;AAGA,OAAO,KAAKC,UAAU,MAAM,iBAAiB;AAE7C;;;AAGA,OAAO,KAAKC,UAAU,MAAM,iBAAiB;AAE7C;;;AAGA,OAAO,KAAKC,UAAU,MAAM,iBAAiB;AAE7C;;;;;AAKA,OAAO,KAAKC,aAAa,MAAM,oBAAoB;AAEnD;;;AAGA,OAAO,KAAKC,WAAW,MAAM,kBAAkB;AAE/C;;;AAGA,OAAO,KAAKC,IAAI,MAAM,WAAW;AAEjC;;;AAGA,OAAO,KAAKC,OAAO,MAAM,cAAc;AAEvC;;;AAGA,OAAO,KAAKC,IAAI,MAAM,WAAW;AAEjC;;;AAGA,OAAO,KAAKC,MAAM,MAAM,aAAa;AAErC;;;AAGA,OAAO,KAAKC,QAAQ,MAAM,eAAe;AAEzC;;;;;AAKA,OAAO,KAAKC,MAAM,MAAM,aAAa;AAErC;;;;;AAKA,OAAO,KAAKC,YAAY,MAAM,mBAAmB"}
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
import * as Error from "@effect/platform/Error";
|
|
2
|
+
import * as Terminal from "@effect/platform/Terminal";
|
|
3
|
+
import * as Effect from "effect/Effect";
|
|
4
|
+
import * as Layer from "effect/Layer";
|
|
5
|
+
import * as Option from "effect/Option";
|
|
6
|
+
import * as readline from "node:readline";
|
|
7
|
+
const defaultShouldQuit = input => input.key.ctrl && (input.key.name === "c" || input.key.name === "d");
|
|
8
|
+
/** @internal */
|
|
9
|
+
export const make = (shouldQuit = defaultShouldQuit) => Effect.gen(function* (_) {
|
|
10
|
+
const input = yield* _(Effect.sync(() => globalThis.process.stdin));
|
|
11
|
+
const output = yield* _(Effect.sync(() => globalThis.process.stdin));
|
|
12
|
+
// Create a readline interface and force it to emit keypress events
|
|
13
|
+
yield* _(Effect.acquireRelease(Effect.sync(() => {
|
|
14
|
+
const rl = readline.createInterface({
|
|
15
|
+
input,
|
|
16
|
+
escapeCodeTimeout: 50
|
|
17
|
+
});
|
|
18
|
+
readline.emitKeypressEvents(input, rl);
|
|
19
|
+
if (input.isTTY) {
|
|
20
|
+
input.setRawMode(true);
|
|
21
|
+
}
|
|
22
|
+
return rl;
|
|
23
|
+
}), rl => Effect.sync(() => {
|
|
24
|
+
if (input.isTTY) {
|
|
25
|
+
input.setRawMode(false);
|
|
26
|
+
}
|
|
27
|
+
rl.close();
|
|
28
|
+
})));
|
|
29
|
+
const readInput = Effect.async(resume => {
|
|
30
|
+
const handleKeypress = (input, key) => {
|
|
31
|
+
const userInput = {
|
|
32
|
+
input: Option.fromNullable(input),
|
|
33
|
+
key: {
|
|
34
|
+
name: key.name || "",
|
|
35
|
+
ctrl: key.ctrl || false,
|
|
36
|
+
meta: key.meta || false,
|
|
37
|
+
shift: key.shift || false
|
|
38
|
+
}
|
|
39
|
+
};
|
|
40
|
+
if (shouldQuit(userInput)) {
|
|
41
|
+
resume(Effect.fail(new Terminal.QuitException()));
|
|
42
|
+
}
|
|
43
|
+
resume(Effect.succeed(userInput));
|
|
44
|
+
};
|
|
45
|
+
input.once("keypress", handleKeypress);
|
|
46
|
+
return Effect.sync(() => {
|
|
47
|
+
input.removeListener("keypress", handleKeypress);
|
|
48
|
+
});
|
|
49
|
+
});
|
|
50
|
+
const display = prompt => Effect.uninterruptible(Effect.async(resume => {
|
|
51
|
+
output.write(prompt, err => {
|
|
52
|
+
if (err) {
|
|
53
|
+
resume(Effect.fail(Error.BadArgument({
|
|
54
|
+
module: "Terminal",
|
|
55
|
+
method: "display",
|
|
56
|
+
message: err.message ?? String(err)
|
|
57
|
+
})));
|
|
58
|
+
}
|
|
59
|
+
resume(Effect.unit);
|
|
60
|
+
});
|
|
61
|
+
}));
|
|
62
|
+
return Terminal.Terminal.of({
|
|
63
|
+
readInput,
|
|
64
|
+
display
|
|
65
|
+
});
|
|
66
|
+
});
|
|
67
|
+
/** @internal */
|
|
68
|
+
export const layer = /*#__PURE__*/Layer.scoped(Terminal.Terminal, /*#__PURE__*/make(defaultShouldQuit));
|
|
69
|
+
//# sourceMappingURL=terminal.js.map
|
|
@@ -0,0 +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","acquireRelease","rl","createInterface","escapeCodeTimeout","emitKeypressEvents","isTTY","setRawMode","close","readInput","async","resume","handleKeypress","userInput","fromNullable","meta","shift","fail","QuitException","succeed","once","removeListener","display","prompt","uninterruptible","write","err","BadArgument","module","method","message","String","unit","of","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.29.
|
|
3
|
+
"version": "0.29.2",
|
|
4
4
|
"description": "Unified interfaces for common platform-specific services",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"repository": {
|
|
@@ -12,7 +12,7 @@
|
|
|
12
12
|
"dependencies": {
|
|
13
13
|
"busboy": "^1.6.0",
|
|
14
14
|
"mime": "^3.0.0",
|
|
15
|
-
"@effect/platform": "0.28.
|
|
15
|
+
"@effect/platform": "0.28.2"
|
|
16
16
|
},
|
|
17
17
|
"peerDependencies": {
|
|
18
18
|
"effect": "2.0.0-next.54"
|
|
@@ -122,6 +122,11 @@
|
|
|
122
122
|
"import": "./dist/esm/Stream.js",
|
|
123
123
|
"default": "./dist/cjs/Stream.js"
|
|
124
124
|
},
|
|
125
|
+
"./Terminal": {
|
|
126
|
+
"types": "./dist/dts/Terminal.d.ts",
|
|
127
|
+
"import": "./dist/esm/Terminal.js",
|
|
128
|
+
"default": "./dist/cjs/Terminal.js"
|
|
129
|
+
},
|
|
125
130
|
"./Worker": {
|
|
126
131
|
"types": "./dist/dts/Worker.d.ts",
|
|
127
132
|
"import": "./dist/esm/Worker.js",
|
|
@@ -192,6 +197,9 @@
|
|
|
192
197
|
"Stream": [
|
|
193
198
|
"./dist/dts/Stream.d.ts"
|
|
194
199
|
],
|
|
200
|
+
"Terminal": [
|
|
201
|
+
"./dist/dts/Terminal.d.ts"
|
|
202
|
+
],
|
|
195
203
|
"Worker": [
|
|
196
204
|
"./dist/dts/Worker.d.ts"
|
|
197
205
|
],
|
package/src/FileSystem.ts
CHANGED
package/src/Terminal.ts
ADDED
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @since 1.0.0
|
|
3
|
+
*/
|
|
4
|
+
import type { Terminal, UserInput } from "@effect/platform/Terminal"
|
|
5
|
+
import type { Effect } from "effect/Effect"
|
|
6
|
+
import type { Layer } from "effect/Layer"
|
|
7
|
+
import type { Scope } from "effect/Scope"
|
|
8
|
+
import * as InternalTerminal from "./internal/terminal.js"
|
|
9
|
+
|
|
10
|
+
export type {
|
|
11
|
+
/**
|
|
12
|
+
* @since 1.0.0
|
|
13
|
+
* @category model
|
|
14
|
+
*/
|
|
15
|
+
Key,
|
|
16
|
+
/**
|
|
17
|
+
* @since 1.0.0
|
|
18
|
+
* @category model
|
|
19
|
+
*/
|
|
20
|
+
UserInput
|
|
21
|
+
} from "@effect/platform/Terminal"
|
|
22
|
+
|
|
23
|
+
export {
|
|
24
|
+
/**
|
|
25
|
+
* @since 1.0.0
|
|
26
|
+
* @category tag
|
|
27
|
+
*/
|
|
28
|
+
Terminal
|
|
29
|
+
} from "@effect/platform/Terminal"
|
|
30
|
+
|
|
31
|
+
/**
|
|
32
|
+
* @since 1.0.0
|
|
33
|
+
* @category constructors
|
|
34
|
+
*/
|
|
35
|
+
export const make: (shouldQuit?: (input: UserInput) => boolean) => Effect<Scope, never, Terminal> =
|
|
36
|
+
InternalTerminal.make
|
|
37
|
+
|
|
38
|
+
/**
|
|
39
|
+
* @since 1.0.0
|
|
40
|
+
* @category layer
|
|
41
|
+
*/
|
|
42
|
+
export const layer: Layer<never, never, Terminal> = InternalTerminal.layer
|
package/src/index.ts
CHANGED
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
import * as Error from "@effect/platform/Error"
|
|
2
|
+
import * as Terminal from "@effect/platform/Terminal"
|
|
3
|
+
import * as Effect from "effect/Effect"
|
|
4
|
+
import * as Layer from "effect/Layer"
|
|
5
|
+
import * as Option from "effect/Option"
|
|
6
|
+
import * as readline from "node:readline"
|
|
7
|
+
|
|
8
|
+
const defaultShouldQuit = (input: Terminal.UserInput): boolean =>
|
|
9
|
+
input.key.ctrl && (input.key.name === "c" || input.key.name === "d")
|
|
10
|
+
|
|
11
|
+
/** @internal */
|
|
12
|
+
export const make = (
|
|
13
|
+
shouldQuit: (input: Terminal.UserInput) => boolean = defaultShouldQuit
|
|
14
|
+
) =>
|
|
15
|
+
Effect.gen(function*(_) {
|
|
16
|
+
const input = yield* _(Effect.sync(() => globalThis.process.stdin))
|
|
17
|
+
const output = yield* _(Effect.sync(() => globalThis.process.stdin))
|
|
18
|
+
|
|
19
|
+
// Create a readline interface and force it to emit keypress events
|
|
20
|
+
yield* _(Effect.acquireRelease(
|
|
21
|
+
Effect.sync(() => {
|
|
22
|
+
const rl = readline.createInterface({ input, escapeCodeTimeout: 50 })
|
|
23
|
+
readline.emitKeypressEvents(input, rl)
|
|
24
|
+
if (input.isTTY) {
|
|
25
|
+
input.setRawMode(true)
|
|
26
|
+
}
|
|
27
|
+
return rl
|
|
28
|
+
}),
|
|
29
|
+
(rl) =>
|
|
30
|
+
Effect.sync(() => {
|
|
31
|
+
if (input.isTTY) {
|
|
32
|
+
input.setRawMode(false)
|
|
33
|
+
}
|
|
34
|
+
rl.close()
|
|
35
|
+
})
|
|
36
|
+
))
|
|
37
|
+
|
|
38
|
+
const readInput = Effect.async<never, Terminal.QuitException, Terminal.UserInput>((resume) => {
|
|
39
|
+
const handleKeypress = (input: string | undefined, key: readline.Key) => {
|
|
40
|
+
const userInput: Terminal.UserInput = {
|
|
41
|
+
input: Option.fromNullable(input),
|
|
42
|
+
key: {
|
|
43
|
+
name: key.name || "",
|
|
44
|
+
ctrl: key.ctrl || false,
|
|
45
|
+
meta: key.meta || false,
|
|
46
|
+
shift: key.shift || false
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
if (shouldQuit(userInput)) {
|
|
50
|
+
resume(Effect.fail(new Terminal.QuitException()))
|
|
51
|
+
}
|
|
52
|
+
resume(Effect.succeed(userInput))
|
|
53
|
+
}
|
|
54
|
+
input.once("keypress", handleKeypress)
|
|
55
|
+
return Effect.sync(() => {
|
|
56
|
+
input.removeListener("keypress", handleKeypress)
|
|
57
|
+
})
|
|
58
|
+
})
|
|
59
|
+
|
|
60
|
+
const display = (prompt: string): Effect.Effect<never, Error.PlatformError, void> =>
|
|
61
|
+
Effect.uninterruptible(
|
|
62
|
+
Effect.async((resume) => {
|
|
63
|
+
output.write(prompt, (err) => {
|
|
64
|
+
if (err) {
|
|
65
|
+
resume(Effect.fail(Error.BadArgument({
|
|
66
|
+
module: "Terminal",
|
|
67
|
+
method: "display",
|
|
68
|
+
message: (err as Error).message ?? String(err)
|
|
69
|
+
})))
|
|
70
|
+
}
|
|
71
|
+
resume(Effect.unit)
|
|
72
|
+
})
|
|
73
|
+
})
|
|
74
|
+
)
|
|
75
|
+
|
|
76
|
+
return Terminal.Terminal.of({
|
|
77
|
+
readInput,
|
|
78
|
+
display
|
|
79
|
+
})
|
|
80
|
+
})
|
|
81
|
+
|
|
82
|
+
/** @internal */
|
|
83
|
+
export const layer: Layer.Layer<never, never, Terminal.Terminal> = Layer.scoped(
|
|
84
|
+
Terminal.Terminal,
|
|
85
|
+
make(defaultShouldQuit)
|
|
86
|
+
)
|