@effect/platform-node-shared 0.0.0-snapshot-c0ae728e57df2c572ea803e1bb7121088cd67b49

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.
Files changed (154) hide show
  1. package/Http/Etag/package.json +6 -0
  2. package/Http/Multipart/package.json +6 -0
  3. package/LICENSE +21 -0
  4. package/NodeCommandExecutor/package.json +6 -0
  5. package/NodeFileSystem/package.json +6 -0
  6. package/NodeKeyValueStore/package.json +6 -0
  7. package/NodePath/package.json +6 -0
  8. package/NodeRuntime/package.json +6 -0
  9. package/NodeSink/package.json +6 -0
  10. package/NodeStream/package.json +6 -0
  11. package/NodeTerminal/package.json +6 -0
  12. package/README.md +64 -0
  13. package/dist/cjs/Http/Etag.js +43 -0
  14. package/dist/cjs/Http/Etag.js.map +1 -0
  15. package/dist/cjs/Http/Multipart.js +48 -0
  16. package/dist/cjs/Http/Multipart.js.map +1 -0
  17. package/dist/cjs/NodeCommandExecutor.js +38 -0
  18. package/dist/cjs/NodeCommandExecutor.js.map +1 -0
  19. package/dist/cjs/NodeFileSystem.js +42 -0
  20. package/dist/cjs/NodeFileSystem.js.map +1 -0
  21. package/dist/cjs/NodeKeyValueStore.js +42 -0
  22. package/dist/cjs/NodeKeyValueStore.js.map +1 -0
  23. package/dist/cjs/NodePath.js +52 -0
  24. package/dist/cjs/NodePath.js.map +1 -0
  25. package/dist/cjs/NodeRuntime.js +38 -0
  26. package/dist/cjs/NodeRuntime.js.map +1 -0
  27. package/dist/cjs/NodeSink.js +43 -0
  28. package/dist/cjs/NodeSink.js.map +1 -0
  29. package/dist/cjs/NodeStream.js +68 -0
  30. package/dist/cjs/NodeStream.js.map +1 -0
  31. package/dist/cjs/NodeTerminal.js +43 -0
  32. package/dist/cjs/NodeTerminal.js.map +1 -0
  33. package/dist/cjs/internal/commandExecutor.js +151 -0
  34. package/dist/cjs/internal/commandExecutor.js.map +1 -0
  35. package/dist/cjs/internal/error.js +44 -0
  36. package/dist/cjs/internal/error.js.map +1 -0
  37. package/dist/cjs/internal/fileSystem.js +370 -0
  38. package/dist/cjs/internal/fileSystem.js.map +1 -0
  39. package/dist/cjs/internal/http/etag.js +74 -0
  40. package/dist/cjs/internal/http/etag.js.map +1 -0
  41. package/dist/cjs/internal/http/multipart.js +119 -0
  42. package/dist/cjs/internal/http/multipart.js.map +1 -0
  43. package/dist/cjs/internal/path.js +72 -0
  44. package/dist/cjs/internal/path.js.map +1 -0
  45. package/dist/cjs/internal/runtime.js +59 -0
  46. package/dist/cjs/internal/runtime.js.map +1 -0
  47. package/dist/cjs/internal/sink.js +52 -0
  48. package/dist/cjs/internal/sink.js.map +1 -0
  49. package/dist/cjs/internal/stream.js +208 -0
  50. package/dist/cjs/internal/stream.js.map +1 -0
  51. package/dist/cjs/internal/terminal.js +121 -0
  52. package/dist/cjs/internal/terminal.js.map +1 -0
  53. package/dist/dts/Http/Etag.d.ts +16 -0
  54. package/dist/dts/Http/Etag.d.ts.map +1 -0
  55. package/dist/dts/Http/Multipart.d.ts +29 -0
  56. package/dist/dts/Http/Multipart.d.ts.map +1 -0
  57. package/dist/dts/NodeCommandExecutor.d.ts +12 -0
  58. package/dist/dts/NodeCommandExecutor.d.ts.map +1 -0
  59. package/dist/dts/NodeFileSystem.d.ts +11 -0
  60. package/dist/dts/NodeFileSystem.d.ts.map +1 -0
  61. package/dist/dts/NodeKeyValueStore.d.ts +12 -0
  62. package/dist/dts/NodeKeyValueStore.d.ts.map +1 -0
  63. package/dist/dts/NodePath.d.ts +21 -0
  64. package/dist/dts/NodePath.d.ts.map +1 -0
  65. package/dist/dts/NodeRuntime.d.ts +10 -0
  66. package/dist/dts/NodeRuntime.d.ts.map +1 -0
  67. package/dist/dts/NodeSink.d.ts +22 -0
  68. package/dist/dts/NodeSink.d.ts.map +1 -0
  69. package/dist/dts/NodeStream.d.ts +79 -0
  70. package/dist/dts/NodeStream.d.ts.map +1 -0
  71. package/dist/dts/NodeTerminal.d.ts +18 -0
  72. package/dist/dts/NodeTerminal.d.ts.map +1 -0
  73. package/dist/dts/internal/commandExecutor.d.ts +2 -0
  74. package/dist/dts/internal/commandExecutor.d.ts.map +1 -0
  75. package/dist/dts/internal/error.d.ts +2 -0
  76. package/dist/dts/internal/error.d.ts.map +1 -0
  77. package/dist/dts/internal/fileSystem.d.ts +2 -0
  78. package/dist/dts/internal/fileSystem.d.ts.map +1 -0
  79. package/dist/dts/internal/http/etag.d.ts +2 -0
  80. package/dist/dts/internal/http/etag.d.ts.map +1 -0
  81. package/dist/dts/internal/http/multipart.d.ts +2 -0
  82. package/dist/dts/internal/http/multipart.d.ts.map +1 -0
  83. package/dist/dts/internal/path.d.ts +2 -0
  84. package/dist/dts/internal/path.d.ts.map +1 -0
  85. package/dist/dts/internal/runtime.d.ts +2 -0
  86. package/dist/dts/internal/runtime.d.ts.map +1 -0
  87. package/dist/dts/internal/sink.d.ts +2 -0
  88. package/dist/dts/internal/sink.d.ts.map +1 -0
  89. package/dist/dts/internal/stream.d.ts +2 -0
  90. package/dist/dts/internal/stream.d.ts.map +1 -0
  91. package/dist/dts/internal/terminal.d.ts +2 -0
  92. package/dist/dts/internal/terminal.d.ts.map +1 -0
  93. package/dist/esm/Http/Etag.js +12 -0
  94. package/dist/esm/Http/Etag.js.map +1 -0
  95. package/dist/esm/Http/Multipart.js +17 -0
  96. package/dist/esm/Http/Multipart.js.map +1 -0
  97. package/dist/esm/NodeCommandExecutor.js +7 -0
  98. package/dist/esm/NodeCommandExecutor.js.map +1 -0
  99. package/dist/esm/NodeFileSystem.js +10 -0
  100. package/dist/esm/NodeFileSystem.js.map +1 -0
  101. package/dist/esm/NodeKeyValueStore.js +10 -0
  102. package/dist/esm/NodeKeyValueStore.js.map +1 -0
  103. package/dist/esm/NodePath.js +20 -0
  104. package/dist/esm/NodePath.js.map +1 -0
  105. package/dist/esm/NodeRuntime.js +7 -0
  106. package/dist/esm/NodeRuntime.js.map +1 -0
  107. package/dist/esm/NodeSink.js +12 -0
  108. package/dist/esm/NodeSink.js.map +1 -0
  109. package/dist/esm/NodeStream.js +37 -0
  110. package/dist/esm/NodeStream.js.map +1 -0
  111. package/dist/esm/NodeTerminal.js +12 -0
  112. package/dist/esm/NodeTerminal.js.map +1 -0
  113. package/dist/esm/internal/commandExecutor.js +120 -0
  114. package/dist/esm/internal/commandExecutor.js.map +1 -0
  115. package/dist/esm/internal/error.js +37 -0
  116. package/dist/esm/internal/error.js.map +1 -0
  117. package/dist/esm/internal/fileSystem.js +339 -0
  118. package/dist/esm/internal/fileSystem.js.map +1 -0
  119. package/dist/esm/internal/http/etag.js +43 -0
  120. package/dist/esm/internal/http/etag.js.map +1 -0
  121. package/dist/esm/internal/http/multipart.js +85 -0
  122. package/dist/esm/internal/http/multipart.js.map +1 -0
  123. package/dist/esm/internal/path.js +41 -0
  124. package/dist/esm/internal/path.js.map +1 -0
  125. package/dist/esm/internal/runtime.js +27 -0
  126. package/dist/esm/internal/runtime.js.map +1 -0
  127. package/dist/esm/internal/sink.js +19 -0
  128. package/dist/esm/internal/sink.js.map +1 -0
  129. package/dist/esm/internal/stream.js +170 -0
  130. package/dist/esm/internal/stream.js.map +1 -0
  131. package/dist/esm/internal/terminal.js +89 -0
  132. package/dist/esm/internal/terminal.js.map +1 -0
  133. package/dist/esm/package.json +4 -0
  134. package/package.json +105 -0
  135. package/src/Http/Etag.ts +18 -0
  136. package/src/Http/Multipart.ts +40 -0
  137. package/src/NodeCommandExecutor.ts +13 -0
  138. package/src/NodeFileSystem.ts +13 -0
  139. package/src/NodeKeyValueStore.ts +20 -0
  140. package/src/NodePath.ts +25 -0
  141. package/src/NodeRuntime.ts +11 -0
  142. package/src/NodeSink.ts +30 -0
  143. package/src/NodeStream.ts +109 -0
  144. package/src/NodeTerminal.ts +20 -0
  145. package/src/internal/commandExecutor.ts +203 -0
  146. package/src/internal/error.ts +51 -0
  147. package/src/internal/fileSystem.ts +575 -0
  148. package/src/internal/http/etag.ts +44 -0
  149. package/src/internal/http/multipart.ts +107 -0
  150. package/src/internal/path.ts +58 -0
  151. package/src/internal/runtime.ts +36 -0
  152. package/src/internal/sink.ts +57 -0
  153. package/src/internal/stream.ts +325 -0
  154. package/src/internal/terminal.ts +123 -0
@@ -0,0 +1,170 @@
1
+ import { SystemError } from "@effect/platform/Error";
2
+ import * as Channel from "effect/Channel";
3
+ import * as Chunk from "effect/Chunk";
4
+ import * as Effect from "effect/Effect";
5
+ import * as Either from "effect/Either";
6
+ import * as Exit from "effect/Exit";
7
+ import { dual } from "effect/Function";
8
+ import * as Queue from "effect/Queue";
9
+ import * as Stream from "effect/Stream";
10
+ /** @internal */
11
+ export const fromReadable = (evaluate, onError, {
12
+ chunkSize
13
+ } = {}) => Stream.fromChannel(fromReadableChannel(evaluate, onError, chunkSize ? Number(chunkSize) : undefined));
14
+ /** @internal */
15
+ export const toString = (readable, options) => {
16
+ const maxBytesNumber = options.maxBytes ? Number(options.maxBytes) : undefined;
17
+ return Effect.acquireUseRelease(Effect.sync(() => {
18
+ const stream = readable();
19
+ stream.setEncoding(options.encoding ?? "utf8");
20
+ return stream;
21
+ }), stream => Effect.async(resume => {
22
+ let string = "";
23
+ let bytes = 0;
24
+ stream.once("error", err => {
25
+ resume(Effect.fail(options.onFailure(err)));
26
+ });
27
+ stream.once("end", () => {
28
+ resume(Effect.succeed(string));
29
+ });
30
+ stream.on("data", chunk => {
31
+ string += chunk;
32
+ bytes += Buffer.byteLength(chunk);
33
+ if (maxBytesNumber && bytes > maxBytesNumber) {
34
+ resume(Effect.fail(options.onFailure(new Error("maxBytes exceeded"))));
35
+ }
36
+ });
37
+ }), stream => Effect.sync(() => {
38
+ stream.removeAllListeners();
39
+ if ("closed" in stream && !stream.closed) {
40
+ stream.destroy();
41
+ }
42
+ }));
43
+ };
44
+ /** @internal */
45
+ export const toUint8Array = (readable, options) => {
46
+ const maxBytesNumber = options.maxBytes ? Number(options.maxBytes) : undefined;
47
+ return Effect.acquireUseRelease(Effect.sync(readable), stream => Effect.async(resume => {
48
+ let buffer = Buffer.alloc(0);
49
+ let bytes = 0;
50
+ stream.once("error", err => {
51
+ resume(Effect.fail(options.onFailure(err)));
52
+ });
53
+ stream.once("end", () => {
54
+ resume(Effect.succeed(buffer));
55
+ });
56
+ stream.on("data", chunk => {
57
+ buffer = Buffer.concat([buffer, chunk]);
58
+ bytes += chunk.length;
59
+ if (maxBytesNumber && bytes > maxBytesNumber) {
60
+ resume(Effect.fail(options.onFailure(new Error("maxBytes exceeded"))));
61
+ }
62
+ });
63
+ }), stream => Effect.sync(() => {
64
+ stream.removeAllListeners();
65
+ if ("closed" in stream && !stream.closed) {
66
+ stream.destroy();
67
+ }
68
+ }));
69
+ };
70
+ /** @internal */
71
+ export const fromDuplex = (evaluate, onError, options = {}) => Channel.acquireUseRelease(Effect.tap(Effect.zip(Effect.sync(evaluate), Queue.unbounded()), ([duplex, queue]) => readableOffer(duplex, queue, onError)), ([duplex, queue]) => Channel.embedInput(readableTake(duplex, queue, options.chunkSize ? Number(options.chunkSize) : undefined), writeInput(duplex, cause => Queue.offer(queue, Either.left(Exit.failCause(cause))), options)), ([duplex, queue]) => Effect.zipRight(Effect.sync(() => {
72
+ duplex.removeAllListeners();
73
+ if (!duplex.closed) {
74
+ duplex.destroy();
75
+ }
76
+ }), Queue.shutdown(queue)));
77
+ /** @internal */
78
+ export const pipeThroughDuplex = /*#__PURE__*/dual(args => Stream.StreamTypeId in args[0], (self, duplex, onError, options) => Stream.pipeThroughChannelOrFail(self, fromDuplex(duplex, onError, options)));
79
+ /** @internal */
80
+ export const pipeThroughSimple = /*#__PURE__*/dual(2, (self, duplex) => Stream.pipeThroughChannelOrFail(self, fromDuplex(duplex, error => SystemError({
81
+ module: "Stream",
82
+ method: "pipeThroughSimple",
83
+ pathOrDescriptor: "",
84
+ reason: "Unknown",
85
+ message: String(error)
86
+ }))));
87
+ /** @internal */
88
+ export const fromReadableChannel = (evaluate, onError, chunkSize) => Channel.acquireUseRelease(Effect.tap(Effect.zip(Effect.sync(evaluate), Queue.unbounded()), ([readable, queue]) => readableOffer(readable, queue, onError)), ([readable, queue]) => readableTake(readable, queue, chunkSize), ([readable, queue]) => Effect.zipRight(Effect.sync(() => {
89
+ readable.removeAllListeners();
90
+ if ("closed" in readable && !readable.closed) {
91
+ readable.destroy();
92
+ }
93
+ }), Queue.shutdown(queue)));
94
+ /** @internal */
95
+ export const writeInput = (writable, onFailure, {
96
+ encoding,
97
+ endOnDone = true
98
+ } = {}, onDone = Effect.unit) => {
99
+ const write = writeEffect(writable, encoding);
100
+ const close = endOnDone ? Effect.async(resume => {
101
+ if ("closed" in writable && writable.closed) {
102
+ resume(Effect.unit);
103
+ } else {
104
+ writable.once("finish", () => resume(Effect.unit));
105
+ writable.end();
106
+ }
107
+ }) : Effect.unit;
108
+ return {
109
+ awaitRead: () => Effect.unit,
110
+ emit: write,
111
+ error: cause => Effect.zipRight(close, onFailure(cause)),
112
+ done: _ => Effect.zipRight(close, onDone)
113
+ };
114
+ };
115
+ /** @internal */
116
+ export const writeEffect = (writable, encoding) => chunk => chunk.length === 0 ? Effect.unit : Effect.async(resume => {
117
+ const iterator = chunk[Symbol.iterator]();
118
+ let next = iterator.next();
119
+ function loop() {
120
+ const item = next;
121
+ next = iterator.next();
122
+ const success = writable.write(item.value, encoding);
123
+ if (next.done) {
124
+ resume(Effect.unit);
125
+ } else if (success) {
126
+ loop();
127
+ } else {
128
+ writable.once("drain", loop);
129
+ }
130
+ }
131
+ loop();
132
+ });
133
+ const readableOffer = (readable, queue, onError) => Effect.sync(() => {
134
+ readable.on("readable", () => {
135
+ const size = queue.unsafeSize();
136
+ if (size._tag === "Some" && size.value <= 0) {
137
+ queue.unsafeOffer(Either.right(void 0));
138
+ }
139
+ });
140
+ readable.on("error", err => {
141
+ queue.unsafeOffer(Either.left(Exit.fail(onError(err))));
142
+ });
143
+ readable.on("end", () => {
144
+ queue.unsafeOffer(Either.left(Exit.unit));
145
+ });
146
+ if (readable.readable) {
147
+ queue.unsafeOffer(Either.right(void 0));
148
+ }
149
+ });
150
+ const readableTake = (readable, queue, chunkSize) => {
151
+ const read = readChunkChannel(readable, chunkSize);
152
+ const loop = Channel.flatMap(Queue.take(queue), Either.match({
153
+ onLeft: Exit.match({
154
+ onFailure: Channel.failCause,
155
+ onSuccess: _ => Channel.unit
156
+ }),
157
+ onRight: _ => Channel.flatMap(read, () => loop)
158
+ }));
159
+ return loop;
160
+ };
161
+ const readChunkChannel = (readable, chunkSize) => Channel.suspend(() => {
162
+ const arr = [];
163
+ let chunk = readable.read(chunkSize);
164
+ while (chunk !== null) {
165
+ arr.push(chunk);
166
+ chunk = readable.read(chunkSize);
167
+ }
168
+ return Channel.write(Chunk.unsafeFromArray(arr));
169
+ });
170
+ //# sourceMappingURL=stream.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"stream.js","names":["SystemError","Channel","Chunk","Effect","Either","Exit","dual","Queue","Stream","fromReadable","evaluate","onError","chunkSize","fromChannel","fromReadableChannel","Number","undefined","toString","readable","options","maxBytesNumber","maxBytes","acquireUseRelease","sync","stream","setEncoding","encoding","async","resume","string","bytes","once","err","fail","onFailure","succeed","on","chunk","Buffer","byteLength","Error","removeAllListeners","closed","destroy","toUint8Array","buffer","alloc","concat","length","fromDuplex","tap","zip","unbounded","duplex","queue","readableOffer","embedInput","readableTake","writeInput","cause","offer","left","failCause","zipRight","shutdown","pipeThroughDuplex","args","StreamTypeId","self","pipeThroughChannelOrFail","pipeThroughSimple","error","module","method","pathOrDescriptor","reason","message","String","writable","endOnDone","onDone","unit","write","writeEffect","close","end","awaitRead","emit","done","_","iterator","Symbol","next","loop","item","success","value","size","unsafeSize","_tag","unsafeOffer","right","read","readChunkChannel","flatMap","take","match","onLeft","onSuccess","onRight","suspend","arr","push","unsafeFromArray"],"sources":["../../../src/internal/stream.ts"],"sourcesContent":[null],"mappings":"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"}
@@ -0,0 +1,89 @@
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.stdout));
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
+ readline.emitKeypressEvents(input, rl);
20
+ if (input.isTTY) {
21
+ input.setRawMode(true);
22
+ }
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();
31
+ });
32
+ // Handle the `"keypress"` event emitted by `stdin` (forced by readline)
33
+ const handleKeypressEvent = input => Effect.async(resume => {
34
+ const handleKeypress = (input, key) => {
35
+ const userInput = {
36
+ input: Option.fromNullable(input),
37
+ key: {
38
+ name: key.name || "",
39
+ ctrl: key.ctrl || false,
40
+ meta: key.meta || false,
41
+ shift: key.shift || false
42
+ }
43
+ };
44
+ if (shouldQuit(userInput)) {
45
+ resume(Effect.fail(new Terminal.QuitException()));
46
+ } else {
47
+ resume(Effect.succeed(userInput));
48
+ }
49
+ };
50
+ input.once("keypress", handleKeypress);
51
+ return Effect.sync(() => {
52
+ input.removeListener("keypress", handleKeypress);
53
+ });
54
+ });
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
+ });
64
+ });
65
+ const readInput = Effect.acquireUseRelease(acquireReadlineInterface.pipe(Effect.map(emitKeypressEvents)), () => handleKeypressEvent(input), releaseReadlineInterface);
66
+ const readLine = Effect.acquireUseRelease(acquireReadlineInterface, rl => handleLineEvent(rl), releaseReadlineInterface);
67
+ const display = prompt => Effect.uninterruptible(Effect.async(resume => {
68
+ output.write(prompt, err => {
69
+ if (err) {
70
+ resume(Effect.fail(Error.BadArgument({
71
+ module: "Terminal",
72
+ method: "display",
73
+ message: err.message ?? String(err)
74
+ })));
75
+ }
76
+ resume(Effect.unit);
77
+ });
78
+ }));
79
+ return Terminal.Terminal.of({
80
+ // The columns property can be undefined if stdout was redirected
81
+ columns: Effect.sync(() => output.columns || 0),
82
+ readInput,
83
+ readLine,
84
+ display
85
+ });
86
+ });
87
+ /** @internal */
88
+ export const layer = /*#__PURE__*/Layer.scoped(Terminal.Terminal, /*#__PURE__*/make(defaultShouldQuit));
89
+ //# 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","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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"}
@@ -0,0 +1,4 @@
1
+ {
2
+ "type": "module",
3
+ "sideEffects": []
4
+ }
package/package.json ADDED
@@ -0,0 +1,105 @@
1
+ {
2
+ "name": "@effect/platform-node-shared",
3
+ "version": "0.0.0-snapshot-c0ae728e57df2c572ea803e1bb7121088cd67b49",
4
+ "description": "Unified interfaces for common platform-specific services",
5
+ "license": "MIT",
6
+ "repository": {
7
+ "type": "git",
8
+ "url": "https://github.com/effect-ts/effect.git"
9
+ },
10
+ "sideEffects": [],
11
+ "dependencies": {
12
+ "multipasta": "^0.1.21"
13
+ },
14
+ "peerDependencies": {
15
+ "@effect/platform": "^0.0.0-snapshot-c0ae728e57df2c572ea803e1bb7121088cd67b49",
16
+ "effect": "^0.0.0-snapshot-c0ae728e57df2c572ea803e1bb7121088cd67b49"
17
+ },
18
+ "exports": {
19
+ "./package.json": "./package.json",
20
+ "./Http/Etag": {
21
+ "types": "./dist/dts/Http/Etag.d.ts",
22
+ "import": "./dist/esm/Http/Etag.js",
23
+ "default": "./dist/cjs/Http/Etag.js"
24
+ },
25
+ "./Http/Multipart": {
26
+ "types": "./dist/dts/Http/Multipart.d.ts",
27
+ "import": "./dist/esm/Http/Multipart.js",
28
+ "default": "./dist/cjs/Http/Multipart.js"
29
+ },
30
+ "./NodeCommandExecutor": {
31
+ "types": "./dist/dts/NodeCommandExecutor.d.ts",
32
+ "import": "./dist/esm/NodeCommandExecutor.js",
33
+ "default": "./dist/cjs/NodeCommandExecutor.js"
34
+ },
35
+ "./NodeFileSystem": {
36
+ "types": "./dist/dts/NodeFileSystem.d.ts",
37
+ "import": "./dist/esm/NodeFileSystem.js",
38
+ "default": "./dist/cjs/NodeFileSystem.js"
39
+ },
40
+ "./NodeKeyValueStore": {
41
+ "types": "./dist/dts/NodeKeyValueStore.d.ts",
42
+ "import": "./dist/esm/NodeKeyValueStore.js",
43
+ "default": "./dist/cjs/NodeKeyValueStore.js"
44
+ },
45
+ "./NodePath": {
46
+ "types": "./dist/dts/NodePath.d.ts",
47
+ "import": "./dist/esm/NodePath.js",
48
+ "default": "./dist/cjs/NodePath.js"
49
+ },
50
+ "./NodeRuntime": {
51
+ "types": "./dist/dts/NodeRuntime.d.ts",
52
+ "import": "./dist/esm/NodeRuntime.js",
53
+ "default": "./dist/cjs/NodeRuntime.js"
54
+ },
55
+ "./NodeSink": {
56
+ "types": "./dist/dts/NodeSink.d.ts",
57
+ "import": "./dist/esm/NodeSink.js",
58
+ "default": "./dist/cjs/NodeSink.js"
59
+ },
60
+ "./NodeStream": {
61
+ "types": "./dist/dts/NodeStream.d.ts",
62
+ "import": "./dist/esm/NodeStream.js",
63
+ "default": "./dist/cjs/NodeStream.js"
64
+ },
65
+ "./NodeTerminal": {
66
+ "types": "./dist/dts/NodeTerminal.d.ts",
67
+ "import": "./dist/esm/NodeTerminal.js",
68
+ "default": "./dist/cjs/NodeTerminal.js"
69
+ }
70
+ },
71
+ "typesVersions": {
72
+ "*": {
73
+ "Http/Etag": [
74
+ "./dist/dts/Http/Etag.d.ts"
75
+ ],
76
+ "Http/Multipart": [
77
+ "./dist/dts/Http/Multipart.d.ts"
78
+ ],
79
+ "NodeCommandExecutor": [
80
+ "./dist/dts/NodeCommandExecutor.d.ts"
81
+ ],
82
+ "NodeFileSystem": [
83
+ "./dist/dts/NodeFileSystem.d.ts"
84
+ ],
85
+ "NodeKeyValueStore": [
86
+ "./dist/dts/NodeKeyValueStore.d.ts"
87
+ ],
88
+ "NodePath": [
89
+ "./dist/dts/NodePath.d.ts"
90
+ ],
91
+ "NodeRuntime": [
92
+ "./dist/dts/NodeRuntime.d.ts"
93
+ ],
94
+ "NodeSink": [
95
+ "./dist/dts/NodeSink.d.ts"
96
+ ],
97
+ "NodeStream": [
98
+ "./dist/dts/NodeStream.d.ts"
99
+ ],
100
+ "NodeTerminal": [
101
+ "./dist/dts/NodeTerminal.d.ts"
102
+ ]
103
+ }
104
+ }
105
+ }
@@ -0,0 +1,18 @@
1
+ /**
2
+ * @since 1.0.0
3
+ */
4
+ import type * as Etag from "@effect/platform/Http/Etag"
5
+ import type * as Layer from "effect/Layer"
6
+ import * as internal from "../internal/http/etag.js"
7
+
8
+ /**
9
+ * @since 1.0.0
10
+ * @category layers
11
+ */
12
+ export const layer: Layer.Layer<Etag.Generator> = internal.layer
13
+
14
+ /**
15
+ * @since 1.0.0
16
+ * @category layers
17
+ */
18
+ export const layerWeak: Layer.Layer<Etag.Generator> = internal.layerWeak
@@ -0,0 +1,40 @@
1
+ /**
2
+ * @since 1.0.0
3
+ */
4
+ import type * as FileSystem from "@effect/platform/FileSystem"
5
+ import type * as Multipart from "@effect/platform/Http/Multipart"
6
+ import type * as Path from "@effect/platform/Path"
7
+ import type * as Effect from "effect/Effect"
8
+ import type * as Scope from "effect/Scope"
9
+ import type * as Stream from "effect/Stream"
10
+ import type { IncomingHttpHeaders } from "node:http"
11
+ import type { Readable } from "node:stream"
12
+ import * as internal from "../internal/http/multipart.js"
13
+
14
+ /**
15
+ * @since 1.0.0
16
+ * @category constructors
17
+ */
18
+ export const stream: (
19
+ source: Readable,
20
+ headers: IncomingHttpHeaders
21
+ ) => Stream.Stream<Multipart.Part, Multipart.MultipartError> = internal.stream
22
+
23
+ /**
24
+ * @since 1.0.0
25
+ * @category constructors
26
+ */
27
+ export const persisted: (
28
+ source: Readable,
29
+ headers: IncomingHttpHeaders
30
+ ) => Effect.Effect<
31
+ Multipart.Persisted,
32
+ Multipart.MultipartError,
33
+ FileSystem.FileSystem | Path.Path | Scope.Scope
34
+ > = internal.persisted
35
+
36
+ /**
37
+ * @since 1.0.0
38
+ * @category conversions
39
+ */
40
+ export const fileToReadable: (file: Multipart.File) => Readable = internal.fileToReadable
@@ -0,0 +1,13 @@
1
+ /**
2
+ * @since 1.0.0
3
+ */
4
+ import type { CommandExecutor } from "@effect/platform/CommandExecutor"
5
+ import type { FileSystem } from "@effect/platform/FileSystem"
6
+ import type { Layer } from "effect/Layer"
7
+ import * as internal from "./internal/commandExecutor.js"
8
+
9
+ /**
10
+ * @since 1.0.0
11
+ * @category layer
12
+ */
13
+ export const layer: Layer<CommandExecutor, never, FileSystem> = internal.layer
@@ -0,0 +1,13 @@
1
+ /**
2
+ * @since 1.0.0
3
+ */
4
+
5
+ import type { FileSystem } from "@effect/platform/FileSystem"
6
+ import type { Layer } from "effect/Layer"
7
+ import * as internal from "./internal/fileSystem.js"
8
+
9
+ /**
10
+ * @since 1.0.0
11
+ * @category layer
12
+ */
13
+ export const layer: Layer<FileSystem> = internal.layer
@@ -0,0 +1,20 @@
1
+ /**
2
+ * @since 1.0.0
3
+ */
4
+ import type * as PlatformError from "@effect/platform/Error"
5
+ import * as KeyValueStore from "@effect/platform/KeyValueStore"
6
+ import * as Layer from "effect/Layer"
7
+ import * as FileSystem from "./NodeFileSystem.js"
8
+ import * as Path from "./NodePath.js"
9
+
10
+ /**
11
+ * @since 1.0.0
12
+ * @category layers
13
+ */
14
+ export const layerFileSystem: (
15
+ directory: string
16
+ ) => Layer.Layer<KeyValueStore.KeyValueStore, PlatformError.PlatformError> = (directory: string) =>
17
+ Layer.provide(
18
+ KeyValueStore.layerFileSystem(directory),
19
+ Layer.merge(FileSystem.layer, Path.layer)
20
+ )
@@ -0,0 +1,25 @@
1
+ /**
2
+ * @since 1.0.0
3
+ */
4
+
5
+ import type { Path } from "@effect/platform/Path"
6
+ import type { Layer } from "effect/Layer"
7
+ import * as internal from "./internal/path.js"
8
+
9
+ /**
10
+ * @since 1.0.0
11
+ * @category layer
12
+ */
13
+ export const layer: Layer<Path> = internal.layer
14
+
15
+ /**
16
+ * @since 1.0.0
17
+ * @category layer
18
+ */
19
+ export const layerPosix: Layer<Path> = internal.layerPosix
20
+
21
+ /**
22
+ * @since 1.0.0
23
+ * @category layer
24
+ */
25
+ export const layerWin32: Layer<Path> = internal.layerWin32
@@ -0,0 +1,11 @@
1
+ /**
2
+ * @since 1.0.0
3
+ */
4
+ import type { RunMain } from "@effect/platform/Runtime"
5
+ import * as internal from "./internal/runtime.js"
6
+
7
+ /**
8
+ * @since 1.0.0
9
+ * @category runtime
10
+ */
11
+ export const runMain: RunMain = internal.runMain
@@ -0,0 +1,30 @@
1
+ /**
2
+ * @since 1.0.0
3
+ */
4
+ import type { Channel } from "effect/Channel"
5
+ import type { Chunk } from "effect/Chunk"
6
+ import type { LazyArg } from "effect/Function"
7
+ import type { Sink } from "effect/Sink"
8
+ import type { Writable } from "stream"
9
+ import * as internal from "./internal/sink.js"
10
+ import type { FromWritableOptions } from "./NodeStream.js"
11
+
12
+ /**
13
+ * @category constructor
14
+ * @since 1.0.0
15
+ */
16
+ export const fromWritable: <E, A = string | Uint8Array>(
17
+ evaluate: LazyArg<Writable | NodeJS.WritableStream>,
18
+ onError: (error: unknown) => E,
19
+ options?: FromWritableOptions
20
+ ) => Sink<never, E, A, never, void> = internal.fromWritable
21
+
22
+ /**
23
+ * @category constructor
24
+ * @since 1.0.0
25
+ */
26
+ export const fromWritableChannel: <IE, OE, A>(
27
+ writable: LazyArg<Writable | NodeJS.WritableStream>,
28
+ onError: (error: unknown) => OE,
29
+ options?: FromWritableOptions
30
+ ) => Channel<never, IE, Chunk<A>, unknown, IE | OE, Chunk<never>, void> = internal.fromWritableChannel