effect 4.0.0-beta.4 → 4.0.0-beta.6

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 (310) hide show
  1. package/dist/Cause.d.ts +1 -1
  2. package/dist/Cause.d.ts.map +1 -1
  3. package/dist/Channel.d.ts.map +1 -1
  4. package/dist/Channel.js +6 -4
  5. package/dist/Channel.js.map +1 -1
  6. package/dist/Config.d.ts +1 -1
  7. package/dist/Data.d.ts +3 -2
  8. package/dist/Data.d.ts.map +1 -1
  9. package/dist/Data.js +9 -8
  10. package/dist/Data.js.map +1 -1
  11. package/dist/Effect.d.ts +0 -226
  12. package/dist/Effect.d.ts.map +1 -1
  13. package/dist/Effect.js +0 -118
  14. package/dist/Effect.js.map +1 -1
  15. package/dist/Encoding.d.ts +194 -0
  16. package/dist/Encoding.d.ts.map +1 -0
  17. package/dist/Encoding.js +352 -0
  18. package/dist/Encoding.js.map +1 -0
  19. package/dist/Equal.js.map +1 -1
  20. package/dist/FileSystem.d.ts +1 -1
  21. package/dist/FileSystem.d.ts.map +1 -1
  22. package/dist/FileSystem.js +5 -5
  23. package/dist/FileSystem.js.map +1 -1
  24. package/dist/Filter.d.ts +30 -1
  25. package/dist/Filter.d.ts.map +1 -1
  26. package/dist/Filter.js +15 -0
  27. package/dist/Filter.js.map +1 -1
  28. package/dist/Formatter.js +1 -1
  29. package/dist/Formatter.js.map +1 -1
  30. package/dist/Graph.d.ts.map +1 -1
  31. package/dist/Graph.js +2 -2
  32. package/dist/Graph.js.map +1 -1
  33. package/dist/Latch.d.ts +109 -0
  34. package/dist/Latch.d.ts.map +1 -0
  35. package/dist/Latch.js +72 -0
  36. package/dist/Latch.js.map +1 -0
  37. package/dist/Pipeable.d.ts +17 -0
  38. package/dist/Pipeable.d.ts.map +1 -1
  39. package/dist/Pipeable.js +19 -1
  40. package/dist/Pipeable.js.map +1 -1
  41. package/dist/PlatformError.d.ts +8 -7
  42. package/dist/PlatformError.d.ts.map +1 -1
  43. package/dist/PlatformError.js +2 -2
  44. package/dist/PlatformError.js.map +1 -1
  45. package/dist/Pool.d.ts +5 -3
  46. package/dist/Pool.d.ts.map +1 -1
  47. package/dist/Pool.js +6 -4
  48. package/dist/Pool.js.map +1 -1
  49. package/dist/PubSub.d.ts +3 -2
  50. package/dist/PubSub.d.ts.map +1 -1
  51. package/dist/PubSub.js +3 -2
  52. package/dist/PubSub.js.map +1 -1
  53. package/dist/Request.d.ts +1 -1
  54. package/dist/Request.d.ts.map +1 -1
  55. package/dist/Request.js +2 -1
  56. package/dist/Request.js.map +1 -1
  57. package/dist/RequestResolver.d.ts +0 -20
  58. package/dist/RequestResolver.d.ts.map +1 -1
  59. package/dist/RequestResolver.js +0 -20
  60. package/dist/RequestResolver.js.map +1 -1
  61. package/dist/Schedule.d.ts +2 -2
  62. package/dist/Schedule.d.ts.map +1 -1
  63. package/dist/Schedule.js +30 -16
  64. package/dist/Schedule.js.map +1 -1
  65. package/dist/Schema.d.ts +192 -42
  66. package/dist/Schema.d.ts.map +1 -1
  67. package/dist/Schema.js +385 -71
  68. package/dist/Schema.js.map +1 -1
  69. package/dist/SchemaGetter.d.ts +2 -2
  70. package/dist/SchemaGetter.d.ts.map +1 -1
  71. package/dist/SchemaGetter.js +12 -14
  72. package/dist/SchemaGetter.js.map +1 -1
  73. package/dist/SchemaRepresentation.d.ts +44 -43
  74. package/dist/SchemaRepresentation.d.ts.map +1 -1
  75. package/dist/SchemaRepresentation.js +5 -2
  76. package/dist/SchemaRepresentation.js.map +1 -1
  77. package/dist/SchemaTransformation.d.ts +37 -0
  78. package/dist/SchemaTransformation.d.ts.map +1 -1
  79. package/dist/SchemaTransformation.js +80 -0
  80. package/dist/SchemaTransformation.js.map +1 -1
  81. package/dist/Semaphore.d.ts +211 -0
  82. package/dist/Semaphore.d.ts.map +1 -0
  83. package/dist/{PartitionedSemaphore.js → Semaphore.js} +97 -13
  84. package/dist/Semaphore.js.map +1 -0
  85. package/dist/Stream.d.ts.map +1 -1
  86. package/dist/Stream.js +9 -8
  87. package/dist/Stream.js.map +1 -1
  88. package/dist/Struct.d.ts +16 -0
  89. package/dist/Struct.d.ts.map +1 -1
  90. package/dist/Struct.js +22 -0
  91. package/dist/Struct.js.map +1 -1
  92. package/dist/SubscriptionRef.d.ts +2 -1
  93. package/dist/SubscriptionRef.d.ts.map +1 -1
  94. package/dist/SubscriptionRef.js +2 -1
  95. package/dist/SubscriptionRef.js.map +1 -1
  96. package/dist/SynchronizedRef.d.ts +2 -1
  97. package/dist/SynchronizedRef.d.ts.map +1 -1
  98. package/dist/SynchronizedRef.js +2 -1
  99. package/dist/SynchronizedRef.js.map +1 -1
  100. package/dist/Types.d.ts +14 -6
  101. package/dist/Types.d.ts.map +1 -1
  102. package/dist/index.d.ts +14 -5
  103. package/dist/index.d.ts.map +1 -1
  104. package/dist/index.js +14 -5
  105. package/dist/index.js.map +1 -1
  106. package/dist/internal/core.js +11 -3
  107. package/dist/internal/core.js.map +1 -1
  108. package/dist/internal/effect.js.map +1 -1
  109. package/dist/internal/rcRef.js +2 -1
  110. package/dist/internal/rcRef.js.map +1 -1
  111. package/dist/testing/TestClock.d.ts +3 -2
  112. package/dist/testing/TestClock.d.ts.map +1 -1
  113. package/dist/testing/TestClock.js +5 -3
  114. package/dist/testing/TestClock.js.map +1 -1
  115. package/dist/unstable/ai/AiError.d.ts +39 -39
  116. package/dist/unstable/ai/Chat.d.ts.map +1 -1
  117. package/dist/unstable/ai/Chat.js +2 -1
  118. package/dist/unstable/ai/Chat.js.map +1 -1
  119. package/dist/unstable/ai/McpSchema.d.ts +51 -51
  120. package/dist/unstable/ai/Prompt.d.ts +20 -20
  121. package/dist/unstable/ai/Response.d.ts +25 -25
  122. package/dist/unstable/cli/CliError.d.ts +5 -5
  123. package/dist/unstable/cluster/ClusterWorkflowEngine.d.ts.map +1 -1
  124. package/dist/unstable/cluster/ClusterWorkflowEngine.js +2 -1
  125. package/dist/unstable/cluster/ClusterWorkflowEngine.js.map +1 -1
  126. package/dist/unstable/cluster/Entity.d.ts +2 -1
  127. package/dist/unstable/cluster/Entity.d.ts.map +1 -1
  128. package/dist/unstable/cluster/Entity.js.map +1 -1
  129. package/dist/unstable/cluster/Envelope.d.ts +1 -1
  130. package/dist/unstable/cluster/K8sHttpClient.d.ts +1 -1
  131. package/dist/unstable/cluster/Message.d.ts +5 -5
  132. package/dist/unstable/cluster/MessageStorage.d.ts.map +1 -1
  133. package/dist/unstable/cluster/MessageStorage.js +2 -1
  134. package/dist/unstable/cluster/MessageStorage.js.map +1 -1
  135. package/dist/unstable/cluster/Reply.d.ts +3 -3
  136. package/dist/unstable/cluster/Runner.d.ts +1 -1
  137. package/dist/unstable/cluster/Runners.d.ts.map +1 -1
  138. package/dist/unstable/cluster/Runners.js +4 -3
  139. package/dist/unstable/cluster/Runners.js.map +1 -1
  140. package/dist/unstable/cluster/Sharding.d.ts.map +1 -1
  141. package/dist/unstable/cluster/Sharding.js +7 -5
  142. package/dist/unstable/cluster/Sharding.js.map +1 -1
  143. package/dist/unstable/cluster/internal/entityManager.js +4 -3
  144. package/dist/unstable/cluster/internal/entityManager.js.map +1 -1
  145. package/dist/unstable/cluster/internal/entityReaper.js +2 -1
  146. package/dist/unstable/cluster/internal/entityReaper.js.map +1 -1
  147. package/dist/unstable/cluster/internal/resourceRef.js +2 -1
  148. package/dist/unstable/cluster/internal/resourceRef.js.map +1 -1
  149. package/dist/unstable/devtools/DevToolsSchema.d.ts +36 -36
  150. package/dist/unstable/encoding/Sse.d.ts +1 -1
  151. package/dist/unstable/eventlog/EventJournal.d.ts +1 -1
  152. package/dist/unstable/eventlog/EventLog.d.ts.map +1 -1
  153. package/dist/unstable/eventlog/EventLog.js +2 -1
  154. package/dist/unstable/eventlog/EventLog.js.map +1 -1
  155. package/dist/unstable/eventlog/EventLogRemote.d.ts +5 -5
  156. package/dist/unstable/http/Cookies.d.ts +1 -1
  157. package/dist/unstable/http/HttpEffect.d.ts.map +1 -1
  158. package/dist/unstable/http/HttpEffect.js +18 -26
  159. package/dist/unstable/http/HttpEffect.js.map +1 -1
  160. package/dist/unstable/http/Multipart.d.ts +2 -2
  161. package/dist/unstable/http/UrlParams.d.ts +1 -1
  162. package/dist/unstable/httpapi/HttpApiBuilder.js +2 -2
  163. package/dist/unstable/httpapi/HttpApiBuilder.js.map +1 -1
  164. package/dist/unstable/httpapi/HttpApiScalar.d.ts +6 -0
  165. package/dist/unstable/httpapi/HttpApiScalar.d.ts.map +1 -1
  166. package/dist/unstable/httpapi/HttpApiScalar.js.map +1 -1
  167. package/dist/unstable/persistence/KeyValueStore.js +6 -6
  168. package/dist/unstable/persistence/KeyValueStore.js.map +1 -1
  169. package/dist/unstable/persistence/PersistedCache.d.ts +6 -5
  170. package/dist/unstable/persistence/PersistedCache.d.ts.map +1 -1
  171. package/dist/unstable/persistence/PersistedCache.js +2 -1
  172. package/dist/unstable/persistence/PersistedCache.js.map +1 -1
  173. package/dist/unstable/persistence/PersistedQueue.d.ts.map +1 -1
  174. package/dist/unstable/persistence/PersistedQueue.js +6 -5
  175. package/dist/unstable/persistence/PersistedQueue.js.map +1 -1
  176. package/dist/unstable/process/ChildProcessSpawner.d.ts +6 -0
  177. package/dist/unstable/process/ChildProcessSpawner.d.ts.map +1 -1
  178. package/dist/unstable/process/ChildProcessSpawner.js.map +1 -1
  179. package/dist/unstable/reactivity/Atom.d.ts.map +1 -1
  180. package/dist/unstable/reactivity/Atom.js +12 -9
  181. package/dist/unstable/reactivity/Atom.js.map +1 -1
  182. package/dist/unstable/reactivity/Hydration.d.ts +39 -0
  183. package/dist/unstable/reactivity/Hydration.d.ts.map +1 -0
  184. package/dist/unstable/reactivity/Hydration.js +76 -0
  185. package/dist/unstable/reactivity/Hydration.js.map +1 -0
  186. package/dist/unstable/reactivity/index.d.ts +4 -0
  187. package/dist/unstable/reactivity/index.d.ts.map +1 -1
  188. package/dist/unstable/reactivity/index.js +4 -0
  189. package/dist/unstable/reactivity/index.js.map +1 -1
  190. package/dist/unstable/rpc/RpcClient.d.ts.map +1 -1
  191. package/dist/unstable/rpc/RpcClient.js +3 -2
  192. package/dist/unstable/rpc/RpcClient.js.map +1 -1
  193. package/dist/unstable/rpc/RpcServer.d.ts.map +1 -1
  194. package/dist/unstable/rpc/RpcServer.js +5 -3
  195. package/dist/unstable/rpc/RpcServer.js.map +1 -1
  196. package/dist/unstable/rpc/Utils.d.ts.map +1 -1
  197. package/dist/unstable/rpc/Utils.js +2 -1
  198. package/dist/unstable/rpc/Utils.js.map +1 -1
  199. package/dist/unstable/socket/Socket.d.ts.map +1 -1
  200. package/dist/unstable/socket/Socket.js +3 -2
  201. package/dist/unstable/socket/Socket.js.map +1 -1
  202. package/dist/unstable/sql/Statement.js +0 -1
  203. package/dist/unstable/sql/Statement.js.map +1 -1
  204. package/dist/unstable/workers/Worker.d.ts.map +1 -1
  205. package/dist/unstable/workers/Worker.js +2 -1
  206. package/dist/unstable/workers/Worker.js.map +1 -1
  207. package/dist/unstable/workflow/DurableDeferred.js +2 -2
  208. package/dist/unstable/workflow/DurableDeferred.js.map +1 -1
  209. package/dist/unstable/workflow/Workflow.d.ts +1 -1
  210. package/dist/unstable/workflow/WorkflowEngine.d.ts +2 -1
  211. package/dist/unstable/workflow/WorkflowEngine.d.ts.map +1 -1
  212. package/dist/unstable/workflow/WorkflowEngine.js +2 -1
  213. package/dist/unstable/workflow/WorkflowEngine.js.map +1 -1
  214. package/package.json +1 -2
  215. package/src/Cause.ts +1 -1
  216. package/src/Channel.ts +6 -4
  217. package/src/Data.ts +10 -9
  218. package/src/Effect.ts +0 -246
  219. package/src/Encoding.ts +879 -0
  220. package/src/Equal.ts +2 -2
  221. package/src/FileSystem.ts +7 -8
  222. package/src/Filter.ts +48 -1
  223. package/src/Formatter.ts +1 -1
  224. package/src/Graph.ts +8 -5
  225. package/src/Latch.ts +112 -0
  226. package/src/Pipeable.ts +32 -1
  227. package/src/PlatformError.ts +5 -5
  228. package/src/Pool.ts +9 -7
  229. package/src/PubSub.ts +10 -9
  230. package/src/Request.ts +3 -2
  231. package/src/RequestResolver.ts +0 -20
  232. package/src/Schedule.ts +217 -115
  233. package/src/Schema.ts +567 -105
  234. package/src/SchemaGetter.ts +12 -14
  235. package/src/SchemaRepresentation.ts +5 -2
  236. package/src/SchemaTransformation.ts +104 -0
  237. package/src/Semaphore.ts +356 -0
  238. package/src/Stream.ts +9 -8
  239. package/src/Struct.ts +26 -0
  240. package/src/SubscriptionRef.ts +3 -2
  241. package/src/SynchronizedRef.ts +3 -2
  242. package/src/Types.ts +12 -2
  243. package/src/index.ts +17 -6
  244. package/src/internal/core.ts +10 -2
  245. package/src/internal/effect.ts +3 -2
  246. package/src/internal/rcRef.ts +2 -1
  247. package/src/testing/TestClock.ts +8 -6
  248. package/src/unstable/ai/AiError.ts +1 -1
  249. package/src/unstable/ai/Chat.ts +2 -1
  250. package/src/unstable/ai/Prompt.ts +20 -20
  251. package/src/unstable/ai/Response.ts +22 -22
  252. package/src/unstable/cluster/ClusterWorkflowEngine.ts +3 -2
  253. package/src/unstable/cluster/Entity.ts +2 -1
  254. package/src/unstable/cluster/Envelope.ts +1 -1
  255. package/src/unstable/cluster/MessageStorage.ts +2 -1
  256. package/src/unstable/cluster/Runners.ts +6 -5
  257. package/src/unstable/cluster/Sharding.ts +8 -6
  258. package/src/unstable/cluster/internal/entityManager.ts +6 -5
  259. package/src/unstable/cluster/internal/entityReaper.ts +2 -1
  260. package/src/unstable/cluster/internal/resourceRef.ts +2 -1
  261. package/src/unstable/eventlog/EventLog.ts +2 -1
  262. package/src/unstable/http/HttpEffect.ts +17 -25
  263. package/src/unstable/http/Multipart.ts +2 -2
  264. package/src/unstable/http/UrlParams.ts +1 -1
  265. package/src/unstable/httpapi/HttpApiBuilder.ts +2 -2
  266. package/src/unstable/httpapi/HttpApiScalar.ts +6 -0
  267. package/src/unstable/persistence/KeyValueStore.ts +6 -6
  268. package/src/unstable/persistence/PersistedCache.ts +20 -9
  269. package/src/unstable/persistence/PersistedQueue.ts +7 -6
  270. package/src/unstable/process/ChildProcessSpawner.ts +6 -0
  271. package/src/unstable/reactivity/Atom.ts +7 -5
  272. package/src/unstable/reactivity/Hydration.ts +112 -0
  273. package/src/unstable/reactivity/index.ts +5 -0
  274. package/src/unstable/rpc/RpcClient.ts +4 -3
  275. package/src/unstable/rpc/RpcServer.ts +6 -4
  276. package/src/unstable/rpc/Utils.ts +2 -1
  277. package/src/unstable/socket/Socket.ts +3 -2
  278. package/src/unstable/sql/Statement.ts +0 -1
  279. package/src/unstable/workers/Worker.ts +2 -1
  280. package/src/unstable/workflow/DurableDeferred.ts +2 -2
  281. package/src/unstable/workflow/WorkflowEngine.ts +3 -2
  282. package/dist/PartitionedSemaphore.d.ts +0 -52
  283. package/dist/PartitionedSemaphore.d.ts.map +0 -1
  284. package/dist/PartitionedSemaphore.js.map +0 -1
  285. package/dist/encoding/Base64.d.ts +0 -67
  286. package/dist/encoding/Base64.d.ts.map +0 -1
  287. package/dist/encoding/Base64.js +0 -146
  288. package/dist/encoding/Base64.js.map +0 -1
  289. package/dist/encoding/Base64Url.d.ts +0 -60
  290. package/dist/encoding/Base64Url.d.ts.map +0 -1
  291. package/dist/encoding/Base64Url.js +0 -89
  292. package/dist/encoding/Base64Url.js.map +0 -1
  293. package/dist/encoding/EncodingError.d.ts +0 -31
  294. package/dist/encoding/EncodingError.d.ts.map +0 -1
  295. package/dist/encoding/EncodingError.js +0 -22
  296. package/dist/encoding/EncodingError.js.map +0 -1
  297. package/dist/encoding/Hex.d.ts +0 -61
  298. package/dist/encoding/Hex.d.ts.map +0 -1
  299. package/dist/encoding/Hex.js +0 -115
  300. package/dist/encoding/Hex.js.map +0 -1
  301. package/dist/encoding/index.d.ts +0 -26
  302. package/dist/encoding/index.d.ts.map +0 -1
  303. package/dist/encoding/index.js +0 -27
  304. package/dist/encoding/index.js.map +0 -1
  305. package/src/PartitionedSemaphore.ts +0 -182
  306. package/src/encoding/Base64.ts +0 -366
  307. package/src/encoding/Base64Url.ts +0 -104
  308. package/src/encoding/EncodingError.ts +0 -35
  309. package/src/encoding/Hex.ts +0 -390
  310. package/src/encoding/index.ts +0 -31
package/src/Data.ts CHANGED
@@ -13,6 +13,7 @@
13
13
  */
14
14
  import type * as Cause from "./Cause.ts"
15
15
  import * as core from "./internal/core.ts"
16
+ import * as Pipeable from "./Pipeable.ts"
16
17
  import * as Predicate from "./Predicate.ts"
17
18
  import type * as Types from "./Types.ts"
18
19
  import type { Unify } from "./Unify.ts"
@@ -43,9 +44,12 @@ import type { Unify } from "./Unify.ts"
43
44
  export const Class: new<A extends Record<string, any> = {}>(
44
45
  args: Types.Equals<A, {}> extends true ? void
45
46
  : { readonly [P in keyof A]: A[P] }
46
- ) => Readonly<A> = function(this: any, props: any) {
47
- if (props) {
48
- Object.assign(this, props)
47
+ ) => Readonly<A> & Pipeable.Pipeable = class extends Pipeable.Class {
48
+ constructor(props: any) {
49
+ super()
50
+ if (props) {
51
+ Object.assign(this, props)
52
+ }
49
53
  }
50
54
  } as any
51
55
 
@@ -79,12 +83,9 @@ export const TaggedClass = <Tag extends string>(
79
83
  ): new<A extends Record<string, any> = {}>(
80
84
  args: Types.Equals<A, {}> extends true ? void
81
85
  : { readonly [P in keyof A as P extends "_tag" ? never : P]: A[P] }
82
- ) => Readonly<A> & { readonly _tag: Tag } =>
83
- function(this: any, props: any) {
84
- this._tag = tag
85
- if (props) {
86
- Object.assign(this, props)
87
- }
86
+ ) => Readonly<A> & { readonly _tag: Tag } & Pipeable.Pipeable =>
87
+ class extends Class {
88
+ readonly _tag = tag
88
89
  } as any
89
90
 
90
91
  /**
package/src/Effect.ts CHANGED
@@ -12777,252 +12777,6 @@ export const interruptibleMask: <A, E, R>(
12777
12777
  ) => Effect<A, E, R>
12778
12778
  ) => Effect<A, E, R> = internal.interruptibleMask
12779
12779
 
12780
- // -----------------------------------------------------------------------------
12781
- // Semaphore
12782
- // -----------------------------------------------------------------------------
12783
-
12784
- /**
12785
- * @category Semaphore
12786
- * @since 2.0.0
12787
- * @example
12788
- * ```ts
12789
- * import { Effect } from "effect"
12790
- *
12791
- * // Create and use a semaphore for controlling concurrent access
12792
- * const program = Effect.gen(function*() {
12793
- * const semaphore = yield* Effect.makeSemaphore(2)
12794
- *
12795
- * return yield* semaphore.withPermits(1)(
12796
- * Effect.succeed("Resource accessed")
12797
- * )
12798
- * })
12799
- * ```
12800
- */
12801
- export interface Semaphore {
12802
- /**
12803
- * Adjusts the number of permits available in the semaphore.
12804
- */
12805
- resize(permits: number): Effect<void>
12806
-
12807
- /**
12808
- * Runs an effect with the given number of permits and releases the permits
12809
- * when the effect completes.
12810
- *
12811
- * **Details**
12812
- *
12813
- * This function acquires the specified number of permits before executing
12814
- * the provided effect. Once the effect finishes, the permits are released.
12815
- * If insufficient permits are available, the function will wait until they
12816
- * are released by other tasks.
12817
- */
12818
- withPermits(permits: number): <A, E, R>(self: Effect<A, E, R>) => Effect<A, E, R>
12819
-
12820
- /**
12821
- * Runs an effect with the given number of permits and releases the permits
12822
- * when the effect completes.
12823
- *
12824
- * **Details**
12825
- *
12826
- * This function acquires the specified number of permits before executing
12827
- * the provided effect. Once the effect finishes, the permits are released.
12828
- * If insufficient permits are available, the function will wait until they
12829
- * are released by other tasks.
12830
- */
12831
- withPermit<A, E, R>(self: Effect<A, E, R>): Effect<A, E, R>
12832
-
12833
- /**
12834
- * Runs an effect only if the specified number of permits are immediately
12835
- * available.
12836
- *
12837
- * **Details**
12838
- *
12839
- * This function attempts to acquire the specified number of permits. If they
12840
- * are available, it runs the effect and releases the permits after the effect
12841
- * completes. If permits are not available, the effect does not execute, and
12842
- * the result is `Option.none`.
12843
- */
12844
- withPermitsIfAvailable(permits: number): <A, E, R>(self: Effect<A, E, R>) => Effect<Option<A>, E, R>
12845
-
12846
- /**
12847
- * Acquires the specified number of permits and returns the resulting
12848
- * available permits, suspending the task if they are not yet available.
12849
- * Concurrent pending `take` calls are processed in a first-in, first-out manner.
12850
- */
12851
- take(permits: number): Effect<number>
12852
-
12853
- /**
12854
- * Releases the specified number of permits and returns the resulting
12855
- * available permits.
12856
- */
12857
- release(permits: number): Effect<number>
12858
-
12859
- /**
12860
- * Releases all permits held by this semaphore and returns the resulting available permits.
12861
- */
12862
- releaseAll: Effect<number>
12863
- }
12864
-
12865
- /**
12866
- * Unsafely creates a new Semaphore.
12867
- *
12868
- * @example
12869
- * ```ts
12870
- * import { Effect } from "effect"
12871
- *
12872
- * const semaphore = Effect.makeSemaphoreUnsafe(3)
12873
- *
12874
- * const task = (id: number) =>
12875
- * semaphore.withPermits(1)(
12876
- * Effect.gen(function*() {
12877
- * yield* Effect.log(`Task ${id} started`)
12878
- * yield* Effect.sleep("1 second")
12879
- * yield* Effect.log(`Task ${id} completed`)
12880
- * })
12881
- * )
12882
- *
12883
- * // Only 3 tasks can run concurrently
12884
- * const program = Effect.all([
12885
- * task(1),
12886
- * task(2),
12887
- * task(3),
12888
- * task(4),
12889
- * task(5)
12890
- * ], { concurrency: "unbounded" })
12891
- * ```
12892
- *
12893
- * @since 2.0.0
12894
- * @category Semaphore
12895
- */
12896
- export const makeSemaphoreUnsafe: (permits: number) => Semaphore = internal.makeSemaphoreUnsafe
12897
-
12898
- /**
12899
- * Creates a new Semaphore.
12900
- *
12901
- * @example
12902
- * ```ts
12903
- * import { Effect } from "effect"
12904
- *
12905
- * const program = Effect.gen(function*() {
12906
- * const semaphore = yield* Effect.makeSemaphore(2)
12907
- *
12908
- * const task = (id: number) =>
12909
- * semaphore.withPermits(1)(
12910
- * Effect.gen(function*() {
12911
- * yield* Effect.log(`Task ${id} acquired permit`)
12912
- * yield* Effect.sleep("1 second")
12913
- * yield* Effect.log(`Task ${id} releasing permit`)
12914
- * })
12915
- * )
12916
- *
12917
- * // Run 4 tasks, but only 2 can run concurrently
12918
- * yield* Effect.all([task(1), task(2), task(3), task(4)])
12919
- * })
12920
- * ```
12921
- *
12922
- * @since 2.0.0
12923
- * @category Semaphore
12924
- */
12925
- export const makeSemaphore: (permits: number) => Effect<Semaphore> = internal.makeSemaphore
12926
-
12927
- // -----------------------------------------------------------------------------
12928
- // Latch
12929
- // -----------------------------------------------------------------------------
12930
-
12931
- /**
12932
- * @category Latch
12933
- * @since 3.8.0
12934
- * @example
12935
- * ```ts
12936
- * import { Effect } from "effect"
12937
- *
12938
- * // Create and use a latch for coordination between fibers
12939
- * const program = Effect.gen(function*() {
12940
- * const latch = yield* Effect.makeLatch()
12941
- *
12942
- * // Wait for the latch to be opened
12943
- * yield* latch.await
12944
- *
12945
- * return "Latch was opened!"
12946
- * })
12947
- * ```
12948
- */
12949
- export interface Latch {
12950
- /** open the latch, releasing all fibers waiting on it */
12951
- readonly open: Effect<boolean>
12952
- /** open the latch, releasing all fibers waiting on it */
12953
- readonly openUnsafe: () => boolean
12954
- /** release all fibers waiting on the latch, without opening it */
12955
- readonly release: Effect<boolean>
12956
- /** wait for the latch to be opened */
12957
- readonly await: Effect<void>
12958
- /** close the latch */
12959
- readonly close: Effect<boolean>
12960
- /** close the latch */
12961
- readonly closeUnsafe: () => boolean
12962
- /** only run the given effect when the latch is open */
12963
- readonly whenOpen: <A, E, R>(self: Effect<A, E, R>) => Effect<A, E, R>
12964
- }
12965
-
12966
- /**
12967
- * Creates a new Latch.
12968
- *
12969
- * @example
12970
- * ```ts
12971
- * import { Effect } from "effect"
12972
- *
12973
- * const latch = Effect.makeLatchUnsafe(false)
12974
- *
12975
- * const waiter = Effect.gen(function*() {
12976
- * yield* Effect.log("Waiting for latch to open...")
12977
- * yield* latch.await
12978
- * yield* Effect.log("Latch opened! Continuing...")
12979
- * })
12980
- *
12981
- * const opener = Effect.gen(function*() {
12982
- * yield* Effect.sleep("2 seconds")
12983
- * yield* Effect.log("Opening latch...")
12984
- * yield* latch.open
12985
- * })
12986
- *
12987
- * const program = Effect.all([waiter, opener])
12988
- * ```
12989
- *
12990
- * @category Latch
12991
- * @since 3.8.0
12992
- */
12993
- export const makeLatchUnsafe: (open?: boolean | undefined) => Latch = internal.makeLatchUnsafe
12994
-
12995
- /**
12996
- * Creates a new Latch.
12997
- *
12998
- * @example
12999
- * ```ts
13000
- * import { Effect } from "effect"
13001
- *
13002
- * const program = Effect.gen(function*() {
13003
- * const latch = yield* Effect.makeLatch(false)
13004
- *
13005
- * const waiter = Effect.gen(function*() {
13006
- * yield* Effect.log("Waiting for latch to open...")
13007
- * yield* latch.await
13008
- * yield* Effect.log("Latch opened! Continuing...")
13009
- * })
13010
- *
13011
- * const opener = Effect.gen(function*() {
13012
- * yield* Effect.sleep("2 seconds")
13013
- * yield* Effect.log("Opening latch...")
13014
- * yield* latch.open
13015
- * })
13016
- *
13017
- * yield* Effect.all([waiter, opener])
13018
- * })
13019
- * ```
13020
- *
13021
- * @category Latch
13022
- * @since 3.8.0
13023
- */
13024
- export const makeLatch: (open?: boolean | undefined) => Effect<Latch> = internal.makeLatch
13025
-
13026
12780
  // -----------------------------------------------------------------------------
13027
12781
  // Repetition & Recursion
13028
12782
  // -----------------------------------------------------------------------------