@effect/platform-node 0.29.1 → 0.29.3

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 +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;AAuDA,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;AAxEpC;;;;AA0EA;;;;AAIO,MAAMY,KAAK,GAAAC,OAAA,CAAAD,KAAA,GAAoCzB,QAAQ,CAACyB,KAAK"}
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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"}
@@ -4,6 +4,11 @@
4
4
  import type { FileSystem } from "@effect/platform/FileSystem";
5
5
  import type { Layer } from "effect/Layer";
6
6
  export type {
7
+ /**
8
+ * @since 1.0.0
9
+ * @category model
10
+ */
11
+ File,
7
12
  /**
8
13
  * @since 1.0.0
9
14
  * @category model
@@ -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"}
@@ -52,6 +52,10 @@ export * as Sink from "./Sink.js";
52
52
  * @since 1.0.0
53
53
  */
54
54
  export * as Stream from "./Stream.js";
55
+ /**
56
+ * @since 1.0.0
57
+ */
58
+ export * as Terminal from "./Terminal.js";
55
59
  /**
56
60
  * @since 1.0.0
57
61
  *
@@ -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,2 @@
1
+ export {};
2
+ //# sourceMappingURL=terminal.d.ts.map
@@ -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;AAuDpD;AACE;;;;AAIAC,UAAU;AACV;;;;AAIAC,IAAI,QACC,6BAA6B;AAEpC;;;;AAIA,OAAO,MAAMC,KAAK,GAAoCH,QAAQ,CAACG,KAAK"}
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
@@ -52,6 +52,10 @@ export * as Sink from "./Sink.js";
52
52
  * @since 1.0.0
53
53
  */
54
54
  export * as Stream from "./Stream.js";
55
+ /**
56
+ * @since 1.0.0
57
+ */
58
+ export * as Terminal from "./Terminal.js";
55
59
  /**
56
60
  * @since 1.0.0
57
61
  *
@@ -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.1",
3
+ "version": "0.29.3",
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.1"
15
+ "@effect/platform": "0.28.3"
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
@@ -7,6 +7,11 @@ import type { Layer } from "effect/Layer"
7
7
  import * as internal from "./internal/fileSystem.js"
8
8
 
9
9
  export type {
10
+ /**
11
+ * @since 1.0.0
12
+ * @category model
13
+ */
14
+ File,
10
15
  /**
11
16
  * @since 1.0.0
12
17
  * @category model
@@ -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
@@ -65,6 +65,11 @@ export * as Sink from "./Sink.js"
65
65
  */
66
66
  export * as Stream from "./Stream.js"
67
67
 
68
+ /**
69
+ * @since 1.0.0
70
+ */
71
+ export * as Terminal from "./Terminal.js"
72
+
68
73
  /**
69
74
  * @since 1.0.0
70
75
  *
@@ -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
+ )