@clayroach/effect 3.19.14-source-capture.8 → 3.19.14-source-trace.1

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 (452) hide show
  1. package/SourceLocation/package.json +6 -0
  2. package/dist/cjs/Effect.js +2 -28
  3. package/dist/cjs/Effect.js.map +1 -1
  4. package/dist/cjs/FiberRef.js +12 -1
  5. package/dist/cjs/FiberRef.js.map +1 -1
  6. package/dist/cjs/Layer.js +2 -24
  7. package/dist/cjs/Layer.js.map +1 -1
  8. package/dist/cjs/RuntimeFlags.js +1 -29
  9. package/dist/cjs/RuntimeFlags.js.map +1 -1
  10. package/dist/cjs/SourceLocation.js +60 -0
  11. package/dist/cjs/SourceLocation.js.map +1 -0
  12. package/dist/cjs/Tracer.js +1 -15
  13. package/dist/cjs/Tracer.js.map +1 -1
  14. package/dist/cjs/Utils.js +1 -1
  15. package/dist/cjs/Utils.js.map +1 -1
  16. package/dist/cjs/index.js +3 -1
  17. package/dist/cjs/index.js.map +1 -1
  18. package/dist/cjs/internal/clock.js +1 -1
  19. package/dist/cjs/internal/clock.js.map +1 -1
  20. package/dist/cjs/internal/core.js +17 -50
  21. package/dist/cjs/internal/core.js.map +1 -1
  22. package/dist/cjs/internal/effect/circular.js +18 -30
  23. package/dist/cjs/internal/effect/circular.js.map +1 -1
  24. package/dist/cjs/internal/fiberRuntime.js +16 -65
  25. package/dist/cjs/internal/fiberRuntime.js.map +1 -1
  26. package/dist/cjs/internal/layer/circular.js +1 -5
  27. package/dist/cjs/internal/layer/circular.js.map +1 -1
  28. package/dist/cjs/internal/layer.js +1 -3
  29. package/dist/cjs/internal/layer.js.map +1 -1
  30. package/dist/cjs/internal/logger.js +25 -2
  31. package/dist/cjs/internal/logger.js.map +1 -1
  32. package/dist/cjs/internal/runtimeFlags.js +2 -11
  33. package/dist/cjs/internal/runtimeFlags.js.map +1 -1
  34. package/dist/cjs/internal/tracer.js +1 -114
  35. package/dist/cjs/internal/tracer.js.map +1 -1
  36. package/dist/dts/Config.d.ts +2 -2
  37. package/dist/dts/Config.d.ts.map +1 -1
  38. package/dist/dts/Effect.d.ts +8 -29
  39. package/dist/dts/Effect.d.ts.map +1 -1
  40. package/dist/dts/FiberRef.d.ts +12 -0
  41. package/dist/dts/FiberRef.d.ts.map +1 -1
  42. package/dist/dts/Layer.d.ts +0 -22
  43. package/dist/dts/Layer.d.ts.map +1 -1
  44. package/dist/dts/RuntimeFlags.d.ts +0 -28
  45. package/dist/dts/RuntimeFlags.d.ts.map +1 -1
  46. package/dist/dts/SourceLocation.d.ts +88 -0
  47. package/dist/dts/SourceLocation.d.ts.map +1 -0
  48. package/dist/dts/Tracer.d.ts +0 -15
  49. package/dist/dts/Tracer.d.ts.map +1 -1
  50. package/dist/dts/index.d.ts +6 -0
  51. package/dist/dts/index.d.ts.map +1 -1
  52. package/dist/dts/internal/core.d.ts.map +1 -1
  53. package/dist/dts/internal/layer.d.ts.map +1 -1
  54. package/dist/dts/internal/runtimeFlags.d.ts.map +1 -1
  55. package/dist/esm/Effect.js +0 -26
  56. package/dist/esm/Effect.js.map +1 -1
  57. package/dist/esm/FiberRef.js +11 -0
  58. package/dist/esm/FiberRef.js.map +1 -1
  59. package/dist/esm/Layer.js +0 -22
  60. package/dist/esm/Layer.js.map +1 -1
  61. package/dist/esm/RuntimeFlags.js +0 -28
  62. package/dist/esm/RuntimeFlags.js.map +1 -1
  63. package/dist/esm/SourceLocation.js +51 -0
  64. package/dist/esm/SourceLocation.js.map +1 -0
  65. package/dist/esm/Tracer.js +0 -14
  66. package/dist/esm/Tracer.js.map +1 -1
  67. package/dist/esm/Utils.js +1 -1
  68. package/dist/esm/Utils.js.map +1 -1
  69. package/dist/esm/index.js +6 -0
  70. package/dist/esm/index.js.map +1 -1
  71. package/dist/esm/internal/clock.js +1 -1
  72. package/dist/esm/internal/clock.js.map +1 -1
  73. package/dist/esm/internal/core.js +12 -45
  74. package/dist/esm/internal/core.js.map +1 -1
  75. package/dist/esm/internal/effect/circular.js +18 -30
  76. package/dist/esm/internal/effect/circular.js.map +1 -1
  77. package/dist/esm/internal/fiberRuntime.js +13 -60
  78. package/dist/esm/internal/fiberRuntime.js.map +1 -1
  79. package/dist/esm/internal/layer/circular.js +0 -4
  80. package/dist/esm/internal/layer/circular.js.map +1 -1
  81. package/dist/esm/internal/layer.js +0 -2
  82. package/dist/esm/internal/layer.js.map +1 -1
  83. package/dist/esm/internal/logger.js +25 -2
  84. package/dist/esm/internal/logger.js.map +1 -1
  85. package/dist/esm/internal/runtimeFlags.js +1 -9
  86. package/dist/esm/internal/runtimeFlags.js.map +1 -1
  87. package/dist/esm/internal/tracer.js +0 -111
  88. package/dist/esm/internal/tracer.js.map +1 -1
  89. package/package.json +12 -1
  90. package/src/Arbitrary.ts +1101 -0
  91. package/src/Array.ts +3589 -0
  92. package/src/BigDecimal.ts +1349 -0
  93. package/src/BigInt.ts +643 -0
  94. package/src/Boolean.ts +287 -0
  95. package/src/Brand.ts +360 -0
  96. package/src/Cache.ts +281 -0
  97. package/src/Cause.ts +1555 -0
  98. package/src/Channel.ts +2355 -0
  99. package/src/ChildExecutorDecision.ts +146 -0
  100. package/src/Chunk.ts +1495 -0
  101. package/src/Clock.ts +111 -0
  102. package/src/Config.ts +542 -0
  103. package/src/ConfigError.ts +270 -0
  104. package/src/ConfigProvider.ts +333 -0
  105. package/src/ConfigProviderPathPatch.ts +100 -0
  106. package/src/Console.ts +226 -0
  107. package/src/Context.ts +585 -0
  108. package/src/Cron.ts +706 -0
  109. package/src/Data.ts +596 -0
  110. package/src/DateTime.ts +1686 -0
  111. package/src/DefaultServices.ts +34 -0
  112. package/src/Deferred.ts +301 -0
  113. package/src/Differ.ts +450 -0
  114. package/src/Duration.ts +1000 -0
  115. package/src/Effect.ts +14817 -0
  116. package/src/Effectable.ts +107 -0
  117. package/src/Either.ts +1040 -0
  118. package/src/Encoding.ts +195 -0
  119. package/src/Equal.ts +98 -0
  120. package/src/Equivalence.ts +235 -0
  121. package/src/ExecutionPlan.ts +308 -0
  122. package/src/ExecutionStrategy.ts +119 -0
  123. package/src/Exit.ts +467 -0
  124. package/src/FastCheck.ts +9 -0
  125. package/src/Fiber.ts +744 -0
  126. package/src/FiberHandle.ts +540 -0
  127. package/src/FiberId.ts +195 -0
  128. package/src/FiberMap.ts +656 -0
  129. package/src/FiberRef.ts +444 -0
  130. package/src/FiberRefs.ts +204 -0
  131. package/src/FiberRefsPatch.ts +105 -0
  132. package/src/FiberSet.ts +491 -0
  133. package/src/FiberStatus.ts +108 -0
  134. package/src/Function.ts +1222 -0
  135. package/src/GlobalValue.ts +53 -0
  136. package/src/Graph.ts +3732 -0
  137. package/src/GroupBy.ts +103 -0
  138. package/src/HKT.ts +45 -0
  139. package/src/Hash.ts +195 -0
  140. package/src/HashMap.ts +519 -0
  141. package/src/HashRing.ts +317 -0
  142. package/src/HashSet.ts +2346 -0
  143. package/src/Inspectable.ts +287 -0
  144. package/src/Iterable.ts +1119 -0
  145. package/src/JSONSchema.ts +1044 -0
  146. package/src/KeyedPool.ts +167 -0
  147. package/src/Layer.ts +1228 -0
  148. package/src/LayerMap.ts +436 -0
  149. package/src/List.ts +977 -0
  150. package/src/LogLevel.ts +285 -0
  151. package/src/LogSpan.ts +25 -0
  152. package/src/Logger.ts +702 -0
  153. package/src/Mailbox.ts +268 -0
  154. package/src/ManagedRuntime.ts +180 -0
  155. package/src/Match.ts +1477 -0
  156. package/src/MergeDecision.ts +95 -0
  157. package/src/MergeState.ts +172 -0
  158. package/src/MergeStrategy.ts +107 -0
  159. package/src/Metric.ts +780 -0
  160. package/src/MetricBoundaries.ts +69 -0
  161. package/src/MetricHook.ts +151 -0
  162. package/src/MetricKey.ts +224 -0
  163. package/src/MetricKeyType.ts +262 -0
  164. package/src/MetricLabel.ts +47 -0
  165. package/src/MetricPair.ts +71 -0
  166. package/src/MetricPolling.ts +148 -0
  167. package/src/MetricRegistry.ts +48 -0
  168. package/src/MetricState.ts +257 -0
  169. package/src/Micro.ts +4405 -0
  170. package/src/ModuleVersion.ts +18 -0
  171. package/src/MutableHashMap.ts +411 -0
  172. package/src/MutableHashSet.ts +706 -0
  173. package/src/MutableList.ts +297 -0
  174. package/src/MutableQueue.ts +227 -0
  175. package/src/MutableRef.ts +202 -0
  176. package/src/NonEmptyIterable.ts +32 -0
  177. package/src/Number.ts +1071 -0
  178. package/src/Option.ts +2170 -0
  179. package/src/Order.ts +373 -0
  180. package/src/Ordering.ts +111 -0
  181. package/src/ParseResult.ts +2031 -0
  182. package/src/PartitionedSemaphore.ts +200 -0
  183. package/src/Pipeable.ts +566 -0
  184. package/src/Pool.ts +204 -0
  185. package/src/Predicate.ts +1405 -0
  186. package/src/Pretty.ts +205 -0
  187. package/src/PrimaryKey.ts +23 -0
  188. package/src/PubSub.ts +182 -0
  189. package/src/Queue.ts +644 -0
  190. package/src/Random.ts +204 -0
  191. package/src/RateLimiter.ts +138 -0
  192. package/src/RcMap.ts +141 -0
  193. package/src/RcRef.ts +122 -0
  194. package/src/Readable.ts +93 -0
  195. package/src/Record.ts +1274 -0
  196. package/src/RedBlackTree.ts +421 -0
  197. package/src/Redacted.ts +144 -0
  198. package/src/Ref.ts +180 -0
  199. package/src/RegExp.ts +38 -0
  200. package/src/Reloadable.ts +127 -0
  201. package/src/Request.ts +347 -0
  202. package/src/RequestBlock.ts +118 -0
  203. package/src/RequestResolver.ts +366 -0
  204. package/src/Resource.ts +119 -0
  205. package/src/Runtime.ts +383 -0
  206. package/src/RuntimeFlags.ts +336 -0
  207. package/src/RuntimeFlagsPatch.ts +183 -0
  208. package/src/STM.ts +2045 -0
  209. package/src/Schedule.ts +2219 -0
  210. package/src/ScheduleDecision.ts +62 -0
  211. package/src/ScheduleInterval.ts +151 -0
  212. package/src/ScheduleIntervals.ts +122 -0
  213. package/src/Scheduler.ts +353 -0
  214. package/src/Schema.ts +10914 -0
  215. package/src/SchemaAST.ts +3043 -0
  216. package/src/Scope.ts +204 -0
  217. package/src/ScopedCache.ts +151 -0
  218. package/src/ScopedRef.ts +117 -0
  219. package/src/Secret.ts +88 -0
  220. package/src/SingleProducerAsyncInput.ts +67 -0
  221. package/src/Sink.ts +1461 -0
  222. package/src/SortedMap.ts +287 -0
  223. package/src/SortedSet.ts +390 -0
  224. package/src/SourceLocation.ts +108 -0
  225. package/src/Stream.ts +6468 -0
  226. package/src/StreamEmit.ts +136 -0
  227. package/src/StreamHaltStrategy.ts +123 -0
  228. package/src/Streamable.ts +45 -0
  229. package/src/String.ts +778 -0
  230. package/src/Struct.ts +243 -0
  231. package/src/Subscribable.ts +100 -0
  232. package/src/SubscriptionRef.ts +298 -0
  233. package/src/Supervisor.ts +240 -0
  234. package/src/Symbol.ts +29 -0
  235. package/src/SynchronizedRef.ts +270 -0
  236. package/src/TArray.ts +495 -0
  237. package/src/TDeferred.ts +100 -0
  238. package/src/TMap.ts +515 -0
  239. package/src/TPriorityQueue.ts +223 -0
  240. package/src/TPubSub.ts +200 -0
  241. package/src/TQueue.ts +432 -0
  242. package/src/TRandom.ts +129 -0
  243. package/src/TReentrantLock.ts +224 -0
  244. package/src/TRef.ts +178 -0
  245. package/src/TSemaphore.ts +129 -0
  246. package/src/TSet.ts +365 -0
  247. package/src/TSubscriptionRef.ts +192 -0
  248. package/src/Take.ts +258 -0
  249. package/src/TestAnnotation.ts +158 -0
  250. package/src/TestAnnotationMap.ts +119 -0
  251. package/src/TestAnnotations.ts +117 -0
  252. package/src/TestClock.ts +556 -0
  253. package/src/TestConfig.ts +47 -0
  254. package/src/TestContext.ts +36 -0
  255. package/src/TestLive.ts +53 -0
  256. package/src/TestServices.ts +390 -0
  257. package/src/TestSized.ts +55 -0
  258. package/src/Tracer.ts +182 -0
  259. package/src/Trie.ts +840 -0
  260. package/src/Tuple.ts +305 -0
  261. package/src/Types.ts +353 -0
  262. package/src/Unify.ts +113 -0
  263. package/src/UpstreamPullRequest.ts +117 -0
  264. package/src/UpstreamPullStrategy.ts +121 -0
  265. package/src/Utils.ts +809 -0
  266. package/src/index.ts +1568 -0
  267. package/src/internal/array.ts +8 -0
  268. package/src/internal/blockedRequests.ts +520 -0
  269. package/src/internal/cache.ts +733 -0
  270. package/src/internal/cause.ts +1050 -0
  271. package/src/internal/channel/channelExecutor.ts +1200 -0
  272. package/src/internal/channel/channelState.ts +134 -0
  273. package/src/internal/channel/childExecutorDecision.ts +96 -0
  274. package/src/internal/channel/continuation.ts +200 -0
  275. package/src/internal/channel/mergeDecision.ts +113 -0
  276. package/src/internal/channel/mergeState.ts +120 -0
  277. package/src/internal/channel/mergeStrategy.ts +72 -0
  278. package/src/internal/channel/singleProducerAsyncInput.ts +259 -0
  279. package/src/internal/channel/subexecutor.ts +229 -0
  280. package/src/internal/channel/upstreamPullRequest.ts +84 -0
  281. package/src/internal/channel/upstreamPullStrategy.ts +87 -0
  282. package/src/internal/channel.ts +2603 -0
  283. package/src/internal/clock.ts +95 -0
  284. package/src/internal/completedRequestMap.ts +9 -0
  285. package/src/internal/concurrency.ts +54 -0
  286. package/src/internal/config.ts +716 -0
  287. package/src/internal/configError.ts +304 -0
  288. package/src/internal/configProvider/pathPatch.ts +97 -0
  289. package/src/internal/configProvider.ts +799 -0
  290. package/src/internal/console.ts +153 -0
  291. package/src/internal/context.ts +337 -0
  292. package/src/internal/core-effect.ts +2293 -0
  293. package/src/internal/core-stream.ts +998 -0
  294. package/src/internal/core.ts +3189 -0
  295. package/src/internal/data.ts +36 -0
  296. package/src/internal/dataSource.ts +327 -0
  297. package/src/internal/dateTime.ts +1277 -0
  298. package/src/internal/defaultServices/console.ts +100 -0
  299. package/src/internal/defaultServices.ts +163 -0
  300. package/src/internal/deferred.ts +46 -0
  301. package/src/internal/differ/chunkPatch.ts +211 -0
  302. package/src/internal/differ/contextPatch.ts +232 -0
  303. package/src/internal/differ/hashMapPatch.ts +220 -0
  304. package/src/internal/differ/hashSetPatch.ts +176 -0
  305. package/src/internal/differ/orPatch.ts +311 -0
  306. package/src/internal/differ/readonlyArrayPatch.ts +210 -0
  307. package/src/internal/differ.ts +200 -0
  308. package/src/internal/doNotation.ts +80 -0
  309. package/src/internal/effect/circular.ts +895 -0
  310. package/src/internal/effectable.ts +131 -0
  311. package/src/internal/either.ts +110 -0
  312. package/src/internal/encoding/base64.ts +286 -0
  313. package/src/internal/encoding/base64Url.ts +29 -0
  314. package/src/internal/encoding/common.ts +51 -0
  315. package/src/internal/encoding/hex.ts +315 -0
  316. package/src/internal/errors.ts +7 -0
  317. package/src/internal/executionPlan.ts +114 -0
  318. package/src/internal/executionStrategy.ts +74 -0
  319. package/src/internal/fiber.ts +388 -0
  320. package/src/internal/fiberId.ts +267 -0
  321. package/src/internal/fiberMessage.ts +82 -0
  322. package/src/internal/fiberRefs/patch.ts +144 -0
  323. package/src/internal/fiberRefs.ts +297 -0
  324. package/src/internal/fiberRuntime.ts +3842 -0
  325. package/src/internal/fiberScope.ts +71 -0
  326. package/src/internal/fiberStatus.ts +119 -0
  327. package/src/internal/groupBy.ts +530 -0
  328. package/src/internal/hashMap/array.ts +49 -0
  329. package/src/internal/hashMap/bitwise.ts +32 -0
  330. package/src/internal/hashMap/config.ts +14 -0
  331. package/src/internal/hashMap/keySet.ts +8 -0
  332. package/src/internal/hashMap/node.ts +391 -0
  333. package/src/internal/hashMap.ts +586 -0
  334. package/src/internal/hashSet.ts +323 -0
  335. package/src/internal/keyedPool.ts +244 -0
  336. package/src/internal/layer/circular.ts +214 -0
  337. package/src/internal/layer.ts +1483 -0
  338. package/src/internal/logSpan.ts +20 -0
  339. package/src/internal/logger-circular.ts +24 -0
  340. package/src/internal/logger.ts +522 -0
  341. package/src/internal/mailbox.ts +561 -0
  342. package/src/internal/managedRuntime/circular.ts +6 -0
  343. package/src/internal/managedRuntime.ts +134 -0
  344. package/src/internal/matcher.ts +652 -0
  345. package/src/internal/metric/boundaries.ts +75 -0
  346. package/src/internal/metric/hook.ts +483 -0
  347. package/src/internal/metric/key.ts +167 -0
  348. package/src/internal/metric/keyType.ts +238 -0
  349. package/src/internal/metric/label.ts +41 -0
  350. package/src/internal/metric/pair.ts +48 -0
  351. package/src/internal/metric/polling.ts +149 -0
  352. package/src/internal/metric/registry.ts +187 -0
  353. package/src/internal/metric/state.ts +290 -0
  354. package/src/internal/metric.ts +577 -0
  355. package/src/internal/opCodes/cause.ts +35 -0
  356. package/src/internal/opCodes/channel.ts +83 -0
  357. package/src/internal/opCodes/channelChildExecutorDecision.ts +17 -0
  358. package/src/internal/opCodes/channelMergeDecision.ts +11 -0
  359. package/src/internal/opCodes/channelMergeState.ts +17 -0
  360. package/src/internal/opCodes/channelMergeStrategy.ts +11 -0
  361. package/src/internal/opCodes/channelState.ts +23 -0
  362. package/src/internal/opCodes/channelUpstreamPullRequest.ts +11 -0
  363. package/src/internal/opCodes/channelUpstreamPullStrategy.ts +11 -0
  364. package/src/internal/opCodes/config.ts +65 -0
  365. package/src/internal/opCodes/configError.ts +35 -0
  366. package/src/internal/opCodes/continuation.ts +11 -0
  367. package/src/internal/opCodes/deferred.ts +11 -0
  368. package/src/internal/opCodes/effect.ts +89 -0
  369. package/src/internal/opCodes/layer.ts +59 -0
  370. package/src/internal/opCodes/streamHaltStrategy.ts +23 -0
  371. package/src/internal/option.ts +80 -0
  372. package/src/internal/pool.ts +432 -0
  373. package/src/internal/pubsub.ts +1762 -0
  374. package/src/internal/query.ts +204 -0
  375. package/src/internal/queue.ts +766 -0
  376. package/src/internal/random.ts +161 -0
  377. package/src/internal/rateLimiter.ts +93 -0
  378. package/src/internal/rcMap.ts +285 -0
  379. package/src/internal/rcRef.ts +192 -0
  380. package/src/internal/redBlackTree/iterator.ts +200 -0
  381. package/src/internal/redBlackTree/node.ts +68 -0
  382. package/src/internal/redBlackTree.ts +1245 -0
  383. package/src/internal/redacted.ts +73 -0
  384. package/src/internal/ref.ts +171 -0
  385. package/src/internal/reloadable.ts +140 -0
  386. package/src/internal/request.ts +177 -0
  387. package/src/internal/resource.ts +76 -0
  388. package/src/internal/ringBuffer.ts +68 -0
  389. package/src/internal/runtime.ts +558 -0
  390. package/src/internal/runtimeFlags.ts +178 -0
  391. package/src/internal/runtimeFlagsPatch.ts +103 -0
  392. package/src/internal/schedule/decision.ts +47 -0
  393. package/src/internal/schedule/interval.ts +101 -0
  394. package/src/internal/schedule/intervals.ts +180 -0
  395. package/src/internal/schedule.ts +2199 -0
  396. package/src/internal/schema/errors.ts +191 -0
  397. package/src/internal/schema/schemaId.ts +106 -0
  398. package/src/internal/schema/util.ts +50 -0
  399. package/src/internal/scopedCache.ts +644 -0
  400. package/src/internal/scopedRef.ts +118 -0
  401. package/src/internal/secret.ts +89 -0
  402. package/src/internal/singleShotGen.ts +35 -0
  403. package/src/internal/sink.ts +2120 -0
  404. package/src/internal/stack.ts +10 -0
  405. package/src/internal/stm/core.ts +817 -0
  406. package/src/internal/stm/entry.ts +59 -0
  407. package/src/internal/stm/journal.ts +123 -0
  408. package/src/internal/stm/opCodes/stm.ts +71 -0
  409. package/src/internal/stm/opCodes/stmState.ts +17 -0
  410. package/src/internal/stm/opCodes/strategy.ts +17 -0
  411. package/src/internal/stm/opCodes/tExit.ts +29 -0
  412. package/src/internal/stm/opCodes/tryCommit.ts +11 -0
  413. package/src/internal/stm/stm.ts +1453 -0
  414. package/src/internal/stm/stmState.ts +136 -0
  415. package/src/internal/stm/tArray.ts +550 -0
  416. package/src/internal/stm/tDeferred.ts +81 -0
  417. package/src/internal/stm/tExit.ts +190 -0
  418. package/src/internal/stm/tMap.ts +824 -0
  419. package/src/internal/stm/tPriorityQueue.ts +267 -0
  420. package/src/internal/stm/tPubSub.ts +551 -0
  421. package/src/internal/stm/tQueue.ts +393 -0
  422. package/src/internal/stm/tRandom.ts +140 -0
  423. package/src/internal/stm/tReentrantLock.ts +352 -0
  424. package/src/internal/stm/tRef.ts +195 -0
  425. package/src/internal/stm/tSemaphore.ts +113 -0
  426. package/src/internal/stm/tSet.ts +259 -0
  427. package/src/internal/stm/tSubscriptionRef.ts +286 -0
  428. package/src/internal/stm/tryCommit.ts +34 -0
  429. package/src/internal/stm/txnId.ts +14 -0
  430. package/src/internal/stm/versioned.ts +4 -0
  431. package/src/internal/stream/debounceState.ts +57 -0
  432. package/src/internal/stream/emit.ts +123 -0
  433. package/src/internal/stream/haltStrategy.ts +94 -0
  434. package/src/internal/stream/handoff.ts +187 -0
  435. package/src/internal/stream/handoffSignal.ts +59 -0
  436. package/src/internal/stream/pull.ts +34 -0
  437. package/src/internal/stream/sinkEndReason.ts +30 -0
  438. package/src/internal/stream/zipAllState.ts +88 -0
  439. package/src/internal/stream/zipChunksState.ts +56 -0
  440. package/src/internal/stream.ts +8801 -0
  441. package/src/internal/string-utils.ts +107 -0
  442. package/src/internal/subscriptionRef.ts +138 -0
  443. package/src/internal/supervisor/patch.ts +190 -0
  444. package/src/internal/supervisor.ts +303 -0
  445. package/src/internal/synchronizedRef.ts +114 -0
  446. package/src/internal/take.ts +199 -0
  447. package/src/internal/testing/sleep.ts +27 -0
  448. package/src/internal/testing/suspendedWarningData.ts +85 -0
  449. package/src/internal/testing/warningData.ts +94 -0
  450. package/src/internal/tracer.ts +150 -0
  451. package/src/internal/trie.ts +722 -0
  452. package/src/internal/version.ts +7 -0
package/src/Tuple.ts ADDED
@@ -0,0 +1,305 @@
1
+ /**
2
+ * This module provides utility functions for working with tuples in TypeScript.
3
+ *
4
+ * @since 2.0.0
5
+ */
6
+ import * as Equivalence from "./Equivalence.js"
7
+ import { dual } from "./Function.js"
8
+ import type { TypeLambda } from "./HKT.js"
9
+ import * as order from "./Order.js"
10
+ import type { TupleOf } from "./Types.js"
11
+
12
+ /**
13
+ * @category type lambdas
14
+ * @since 2.0.0
15
+ */
16
+ export interface TupleTypeLambda extends TypeLambda {
17
+ readonly type: [this["Out1"], this["Target"]]
18
+ }
19
+
20
+ /**
21
+ * Constructs a new tuple from the provided values.
22
+ *
23
+ * @example
24
+ * ```ts
25
+ * import * as assert from "node:assert"
26
+ * import { make } from "effect/Tuple"
27
+ *
28
+ * assert.deepStrictEqual(make(1, 'hello', true), [1, 'hello', true])
29
+ * ```
30
+ *
31
+ * @category constructors
32
+ * @since 2.0.0
33
+ */
34
+ export const make = <A extends ReadonlyArray<any>>(...elements: A): A => elements
35
+
36
+ /**
37
+ * Return the first element from a tuple with two elements.
38
+ *
39
+ * @example
40
+ * ```ts
41
+ * import * as assert from "node:assert"
42
+ * import { getFirst } from "effect/Tuple"
43
+ *
44
+ * assert.deepStrictEqual(getFirst(["hello", 42]), "hello")
45
+ * ```
46
+ *
47
+ * @category getters
48
+ * @since 2.0.0
49
+ */
50
+ export const getFirst = <L, R>(self: readonly [L, R]): L => self[0]
51
+
52
+ /**
53
+ * Return the second element from a tuple with two elements.
54
+ *
55
+ * @example
56
+ * ```ts
57
+ * import * as assert from "node:assert"
58
+ * import { getSecond } from "effect/Tuple"
59
+ *
60
+ * assert.deepStrictEqual(getSecond(["hello", 42]), 42)
61
+ * ```
62
+ *
63
+ * @category getters
64
+ * @since 2.0.0
65
+ */
66
+ export const getSecond = <L, R>(self: readonly [L, R]): R => self[1]
67
+
68
+ /**
69
+ * Transforms each element of tuple using the given function, treating tuple homomorphically
70
+ *
71
+ * @example
72
+ * ```ts
73
+ * import * as assert from "node:assert"
74
+ * import { pipe, Tuple } from "effect"
75
+ *
76
+ * const result = pipe(
77
+ * ["a", 1, false] as const,
78
+ * Tuple.map((el) => el.toString().toUpperCase())
79
+ * )
80
+ * assert.deepStrictEqual(result, ['A', '1', 'FALSE'])
81
+ * ```
82
+ *
83
+ * @category mapping
84
+ * @since 3.9.0
85
+ */
86
+ export const map: {
87
+ <T extends ReadonlyArray<any> | [], B>(
88
+ fn: (element: T[number]) => B
89
+ ): (self: T) => TupleOf<T["length"], B>
90
+ <B, T extends ReadonlyArray<any> | []>(
91
+ self: T,
92
+ fn: (element: T[number]) => B
93
+ ): TupleOf<T["length"], B>
94
+ } = dual(
95
+ 2,
96
+ <N extends number, A, B>(
97
+ self: TupleOf<N, A>,
98
+ fn: (element: A) => B
99
+ ): TupleOf<N, B> => self.map((element) => fn(element)) as TupleOf<N, B>
100
+ )
101
+
102
+ /**
103
+ * Transforms both elements of a tuple with two elements using the given functions.
104
+ *
105
+ * @example
106
+ * ```ts
107
+ * import * as assert from "node:assert"
108
+ * import { mapBoth } from "effect/Tuple"
109
+ *
110
+ * assert.deepStrictEqual(
111
+ * mapBoth(["hello", 42], { onFirst: s => s.toUpperCase(), onSecond: n => n.toString() }),
112
+ * ["HELLO", "42"]
113
+ * )
114
+ * ```
115
+ *
116
+ * @category mapping
117
+ * @since 2.0.0
118
+ */
119
+ export const mapBoth: {
120
+ <L1, L2, R1, R2>(options: {
121
+ readonly onFirst: (e: L1) => L2
122
+ readonly onSecond: (a: R1) => R2
123
+ }): (self: readonly [L1, R1]) => [L2, R2]
124
+ <L1, R1, L2, R2>(self: readonly [L1, R1], options: {
125
+ readonly onFirst: (e: L1) => L2
126
+ readonly onSecond: (a: R1) => R2
127
+ }): [L2, R2]
128
+ } = dual(
129
+ 2,
130
+ <L1, R1, L2, R2>(
131
+ self: readonly [L1, R1],
132
+ { onFirst, onSecond }: {
133
+ readonly onFirst: (e: L1) => L2
134
+ readonly onSecond: (a: R1) => R2
135
+ }
136
+ ): [L2, R2] => [onFirst(self[0]), onSecond(self[1])]
137
+ )
138
+
139
+ /**
140
+ * Transforms the first component of a tuple with two elements using a given function.
141
+ *
142
+ * @example
143
+ * ```ts
144
+ * import * as assert from "node:assert"
145
+ * import { mapFirst } from "effect/Tuple"
146
+ *
147
+ * assert.deepStrictEqual(
148
+ * mapFirst(["hello", 42], s => s.toUpperCase()),
149
+ * ["HELLO", 42]
150
+ * )
151
+ * ```
152
+ *
153
+ * @category mapping
154
+ * @since 2.0.0
155
+ */
156
+ export const mapFirst: {
157
+ <L1, L2>(f: (left: L1) => L2): <R>(self: readonly [L1, R]) => [L2, R]
158
+ <L1, R, L2>(self: readonly [L1, R], f: (left: L1) => L2): [L2, R]
159
+ } = dual(2, <L1, R, L2>(self: readonly [L1, R], f: (left: L1) => L2): [L2, R] => [f(self[0]), self[1]])
160
+
161
+ /**
162
+ * Transforms the second component of a tuple with two elements using a given function.
163
+ *
164
+ * @example
165
+ * ```ts
166
+ * import * as assert from "node:assert"
167
+ * import { mapSecond } from "effect/Tuple"
168
+ *
169
+ * assert.deepStrictEqual(
170
+ * mapSecond(["hello", 42], n => n.toString()),
171
+ * ["hello", "42"]
172
+ * )
173
+ * ```
174
+ *
175
+ * @category mapping
176
+ * @since 2.0.0
177
+ */
178
+ export const mapSecond: {
179
+ <R1, R2>(f: (right: R1) => R2): <L>(self: readonly [L, R1]) => [L, R2]
180
+ <L, R1, R2>(self: readonly [L, R1], f: (right: R1) => R2): [L, R2]
181
+ } = dual(2, <L, R1, R2>(self: readonly [L, R1], f: (right: R1) => R2): [L, R2] => [self[0], f(self[1])])
182
+
183
+ /**
184
+ * Swaps the elements of a tuple with two elements.
185
+ *
186
+ * @example
187
+ * ```ts
188
+ * import * as assert from "node:assert"
189
+ * import { swap } from "effect/Tuple"
190
+ *
191
+ * assert.deepStrictEqual(swap(["hello", 42]), [42, "hello"])
192
+ * ```
193
+ *
194
+ * @since 2.0.0
195
+ */
196
+ export const swap = <L, R>(self: readonly [L, R]): [R, L] => [self[1], self[0]]
197
+
198
+ /**
199
+ * Given a tuple of `Equivalence`s returns a new `Equivalence` that compares values of a tuple
200
+ * by applying each `Equivalence` to the corresponding element of the tuple.
201
+ *
202
+ * @category combinators
203
+ * @since 2.0.0
204
+ */
205
+ export const getEquivalence: <T extends ReadonlyArray<Equivalence.Equivalence<any>>>(
206
+ ...isEquivalents: T
207
+ ) => Equivalence.Equivalence<
208
+ Readonly<{ [I in keyof T]: [T[I]] extends [Equivalence.Equivalence<infer A>] ? A : never }>
209
+ > = Equivalence.tuple
210
+
211
+ /**
212
+ * This function creates and returns a new `Order` for a tuple of values based on the given `Order`s for each element in the tuple.
213
+ * The returned `Order` compares two tuples of the same type by applying the corresponding `Order` to each element in the tuple.
214
+ * It is useful when you need to compare two tuples of the same type and you have a specific way of comparing each element
215
+ * of the tuple.
216
+ *
217
+ * @category combinators
218
+ * @since 2.0.0
219
+ */
220
+ export const getOrder: <T extends ReadonlyArray<order.Order<any>>>(
221
+ ...elements: T
222
+ ) => order.Order<{ [I in keyof T]: [T[I]] extends [order.Order<infer A>] ? A : never }> = order.tuple
223
+
224
+ /**
225
+ * Appends an element to the end of a tuple.
226
+ *
227
+ * @category concatenating
228
+ * @since 2.0.0
229
+ */
230
+ export const appendElement: {
231
+ <B>(that: B): <A extends ReadonlyArray<unknown>>(self: A) => [...A, B]
232
+ <A extends ReadonlyArray<unknown>, B>(self: A, that: B): [...A, B]
233
+ } = dual(2, <A extends ReadonlyArray<unknown>, B>(self: A, that: B): [...A, B] => [...self, that])
234
+
235
+ /**
236
+ * Retrieves the element at a specified index from a tuple.
237
+ *
238
+ * @example
239
+ * ```ts
240
+ * import * as assert from "node:assert"
241
+ * import { Tuple } from "effect"
242
+ *
243
+ * assert.deepStrictEqual(Tuple.at([1, 'hello', true], 1), 'hello')
244
+ * ```
245
+ *
246
+ * @category getters
247
+ * @since 3.4.0
248
+ */
249
+ export const at: {
250
+ <N extends number>(index: N): <A extends ReadonlyArray<unknown>>(self: A) => A[N]
251
+ <A extends ReadonlyArray<unknown>, N extends number>(self: A, index: N): A[N]
252
+ } = dual(2, <A extends ReadonlyArray<unknown>, N extends number>(self: A, index: N): A[N] => self[index])
253
+
254
+ export {
255
+ /**
256
+ * Determine if an `Array` is a tuple with exactly `N` elements, narrowing down the type to `TupleOf`.
257
+ *
258
+ * An `Array` is considered to be a `TupleOf` if its length is exactly `N`.
259
+ *
260
+ * @example
261
+ * ```ts
262
+ * import * as assert from "node:assert"
263
+ * import { isTupleOf } from "effect/Tuple"
264
+ *
265
+ * assert.deepStrictEqual(isTupleOf([1, 2, 3], 3), true);
266
+ * assert.deepStrictEqual(isTupleOf([1, 2, 3], 2), false);
267
+ * assert.deepStrictEqual(isTupleOf([1, 2, 3], 4), false);
268
+ *
269
+ * const arr: number[] = [1, 2, 3];
270
+ * if (isTupleOf(arr, 3)) {
271
+ * console.log(arr);
272
+ * // ^? [number, number, number]
273
+ * }
274
+ *
275
+ * ```
276
+ * @category guards
277
+ * @since 3.3.0
278
+ */
279
+ isTupleOf,
280
+ /**
281
+ * Determine if an `Array` is a tuple with at least `N` elements, narrowing down the type to `TupleOfAtLeast`.
282
+ *
283
+ * An `Array` is considered to be a `TupleOfAtLeast` if its length is at least `N`.
284
+ *
285
+ * @example
286
+ * ```ts
287
+ * import * as assert from "node:assert"
288
+ * import { isTupleOfAtLeast } from "effect/Tuple"
289
+ *
290
+ * assert.deepStrictEqual(isTupleOfAtLeast([1, 2, 3], 3), true);
291
+ * assert.deepStrictEqual(isTupleOfAtLeast([1, 2, 3], 2), true);
292
+ * assert.deepStrictEqual(isTupleOfAtLeast([1, 2, 3], 4), false);
293
+ *
294
+ * const arr: number[] = [1, 2, 3, 4];
295
+ * if (isTupleOfAtLeast(arr, 3)) {
296
+ * console.log(arr);
297
+ * // ^? [number, number, number, ...number[]]
298
+ * }
299
+ *
300
+ * ```
301
+ * @category guards
302
+ * @since 3.3.0
303
+ */
304
+ isTupleOfAtLeast
305
+ } from "./Predicate.js"
package/src/Types.ts ADDED
@@ -0,0 +1,353 @@
1
+ /**
2
+ * A collection of types that are commonly used types.
3
+ *
4
+ * @since 2.0.0
5
+ */
6
+
7
+ type _TupleOf<T, N extends number, R extends Array<unknown>> = `${N}` extends `-${number}` ? never
8
+ : R["length"] extends N ? R
9
+ : _TupleOf<T, N, [T, ...R]>
10
+
11
+ /**
12
+ * Represents a tuple with a fixed number of elements of type `T`.
13
+ *
14
+ * This type constructs a tuple that has exactly `N` elements of type `T`.
15
+ *
16
+ * @typeParam N - The number of elements in the tuple.
17
+ * @typeParam T - The type of elements in the tuple.
18
+ *
19
+ * @example
20
+ * ```ts
21
+ * import { TupleOf } from "effect/Types"
22
+ *
23
+ * // A tuple with exactly 3 numbers
24
+ * const example1: TupleOf<3, number> = [1, 2, 3]; // valid
25
+ * // @ts-expect-error
26
+ * const example2: TupleOf<3, number> = [1, 2]; // invalid
27
+ * // @ts-expect-error
28
+ * const example3: TupleOf<3, number> = [1, 2, 3, 4]; // invalid
29
+ * ```
30
+ *
31
+ * @category tuples
32
+ * @since 3.3.0
33
+ */
34
+ export type TupleOf<N extends number, T> = N extends N ? number extends N ? Array<T> : _TupleOf<T, N, []> : never
35
+
36
+ /**
37
+ * Represents a tuple with at least `N` elements of type `T`.
38
+ *
39
+ * This type constructs a tuple that has a fixed number of elements `N` of type `T` at the start,
40
+ * followed by any number (including zero) of additional elements of the same type `T`.
41
+ *
42
+ * @typeParam N - The minimum number of elements in the tuple.
43
+ * @typeParam T - The type of elements in the tuple.
44
+ *
45
+ * @example
46
+ * ```ts
47
+ * import { TupleOfAtLeast } from "effect/Types"
48
+ *
49
+ * // A tuple with at least 3 numbers
50
+ * const example1: TupleOfAtLeast<3, number> = [1, 2, 3]; // valid
51
+ * const example2: TupleOfAtLeast<3, number> = [1, 2, 3, 4, 5]; // valid
52
+ * // @ts-expect-error
53
+ * const example3: TupleOfAtLeast<3, number> = [1, 2]; // invalid
54
+ * ```
55
+ *
56
+ * @category tuples
57
+ * @since 3.3.0
58
+ */
59
+ export type TupleOfAtLeast<N extends number, T> = [...TupleOf<N, T>, ...Array<T>]
60
+
61
+ /**
62
+ * Returns the tags in a type.
63
+ * @example
64
+ * ```ts
65
+ * import type { Types } from "effect"
66
+ *
67
+ * type Res = Types.Tags<string | { _tag: "a" } | { _tag: "b" } > // "a" | "b"
68
+ * ```
69
+ *
70
+ * @category types
71
+ * @since 2.0.0
72
+ */
73
+ export type Tags<E> = E extends { _tag: string } ? E["_tag"] : never
74
+
75
+ /**
76
+ * Excludes the tagged object from the type.
77
+ * @example
78
+ * ```ts
79
+ * import type { Types } from "effect"
80
+ *
81
+ * type Res = Types.ExcludeTag<string | { _tag: "a" } | { _tag: "b" }, "a"> // string | { _tag: "b" }
82
+ * ```
83
+ *
84
+ * @category types
85
+ * @since 2.0.0
86
+ */
87
+ export type ExcludeTag<E, K extends Tags<E>> = Exclude<E, { _tag: K }>
88
+
89
+ /**
90
+ * Extracts the type of the given tag.
91
+ *
92
+ * @example
93
+ * ```ts
94
+ * import type { Types } from "effect"
95
+ *
96
+ * type Res = Types.ExtractTag<{ _tag: "a", a: number } | { _tag: "b", b: number }, "b"> // { _tag: "b", b: number }
97
+ * ```
98
+ *
99
+ * @category types
100
+ * @since 2.0.0
101
+ */
102
+ export type ExtractTag<E, K extends Tags<E>> = Extract<E, { _tag: K }>
103
+
104
+ /**
105
+ * A utility type that transforms a union type `T` into an intersection type.
106
+ *
107
+ * @since 2.0.0
108
+ * @category types
109
+ */
110
+ export type UnionToIntersection<T> = (T extends any ? (x: T) => any : never) extends (x: infer R) => any ? R
111
+ : never
112
+
113
+ /**
114
+ * Simplifies the type signature of a type.
115
+ *
116
+ * @example
117
+ * ```ts
118
+ * import type { Types } from "effect"
119
+ *
120
+ * type Res = Types.Simplify<{ a: number } & { b: number }> // { a: number; b: number; }
121
+ * ```
122
+ *
123
+ * @since 2.0.0
124
+ * @category types
125
+ */
126
+ export type Simplify<A> = {
127
+ [K in keyof A]: A[K]
128
+ } extends infer B ? B : never
129
+
130
+ /**
131
+ * Determines if two types are equal.
132
+ *
133
+ * @example
134
+ * ```ts
135
+ * import type { Types } from "effect"
136
+ *
137
+ * type Res1 = Types.Equals<{ a: number }, { a: number }> // true
138
+ * type Res2 = Types.Equals<{ a: number }, { b: number }> // false
139
+ * ```
140
+ *
141
+ * @since 2.0.0
142
+ * @category models
143
+ */
144
+ export type Equals<X, Y> = (<T>() => T extends X ? 1 : 2) extends <
145
+ T
146
+ >() => T extends Y ? 1 : 2 ? true
147
+ : false
148
+
149
+ /**
150
+ * Determines if two types are equal, allowing to specify the return types.
151
+ *
152
+ * @since 3.15.0
153
+ * @category models
154
+ */
155
+ export type EqualsWith<A, B, Y, N> = (<T>() => T extends A ? 1 : 2) extends (<T>() => T extends B ? 1 : 2) ? Y : N
156
+
157
+ /**
158
+ * Determines if a record contains any of the given keys.
159
+ *
160
+ * @example
161
+ * ```ts
162
+ * import type { Types } from "effect"
163
+ *
164
+ * type Res1 = Types.Has<{ a: number }, "a" | "b"> // true
165
+ * type Res2 = Types.Has<{ c: number }, "a" | "b"> // false
166
+ * ```
167
+ *
168
+ * @since 2.0.0
169
+ * @category models
170
+ */
171
+ export type Has<A, Key extends string> = (Key extends infer K ? K extends keyof A ? true : never : never) extends never
172
+ ? false
173
+ : true
174
+
175
+ /**
176
+ * Merges two object where the keys of the left object take precedence in the case of a conflict.
177
+ *
178
+ * @example
179
+ * ```ts
180
+ * import type { Types } from "effect"
181
+ * type MergeLeft = Types.MergeLeft<{ a: number, b: number; }, { a: string }> // { a: number; b: number; }
182
+ * ```
183
+ *
184
+ * @since 2.0.0
185
+ * @category models
186
+ */
187
+ export type MergeLeft<Source, Target> = MergeRight<Target, Source>
188
+
189
+ /**
190
+ * Merges two object where the keys of the right object take precedence in the case of a conflict.
191
+ *
192
+ * @example
193
+ * ```ts
194
+ * import type { Types } from "effect"
195
+ * type MergeRight = Types.MergeRight<{ a: number, b: number; }, { a: string }> // { a: string; b: number; }
196
+ * ```
197
+ *
198
+ * @since 2.0.0
199
+ * @category models
200
+ */
201
+ export type MergeRight<Target, Source> = Simplify<
202
+ & Source
203
+ & {
204
+ [Key in keyof Target as Key extends keyof Source ? never : Key]: Target[Key]
205
+ }
206
+ >
207
+
208
+ /**
209
+ * @since 2.0.0
210
+ * @category models
211
+ */
212
+ export type MergeRecord<Source, Target> = MergeLeft<Source, Target>
213
+
214
+ /**
215
+ * Describes the concurrency to use when executing multiple Effect's.
216
+ *
217
+ * @since 2.0.0
218
+ * @category models
219
+ */
220
+ export type Concurrency = number | "unbounded" | "inherit"
221
+
222
+ /**
223
+ * Make all properties in `T` mutable. Supports arrays, tuples, and records as well.
224
+ *
225
+ * @example
226
+ * ```ts
227
+ * import type { Types } from "effect"
228
+ *
229
+ * type MutableStruct = Types.Mutable<{ readonly a: string; readonly b: number }> // { a: string; b: number; }
230
+ *
231
+ * type MutableArray = Types.Mutable<ReadonlyArray<string>> // string[]
232
+ *
233
+ * type MutableTuple = Types.Mutable<readonly [string, number]> // [string, number]
234
+ *
235
+ * type MutableRecord = Types.Mutable<{ readonly [_: string]: number }> // { [x: string]: number; }
236
+ * ```
237
+ *
238
+ * @since 2.0.0
239
+ * @category types
240
+ */
241
+ export type Mutable<T> = {
242
+ -readonly [P in keyof T]: T[P]
243
+ }
244
+
245
+ /**
246
+ * Like `Types.Mutable`, but works recursively.
247
+ *
248
+ * @example
249
+ * ```ts
250
+ * import type { Types } from "effect"
251
+ *
252
+ * type DeepMutableStruct = Types.DeepMutable<{
253
+ * readonly a: string;
254
+ * readonly b: readonly string[]
255
+ * }>
256
+ * // { a: string; b: string[] }
257
+ * ```
258
+ *
259
+ * @since 3.1.0
260
+ * @category types
261
+ */
262
+ export type DeepMutable<T> = T extends ReadonlyMap<infer K, infer V> ? Map<DeepMutable<K>, DeepMutable<V>>
263
+ : T extends ReadonlySet<infer V> ? Set<DeepMutable<V>>
264
+ : T extends string | number | boolean | bigint | symbol | Function ? T
265
+ : { -readonly [K in keyof T]: DeepMutable<T[K]> }
266
+
267
+ /**
268
+ * Avoid inference on a specific parameter
269
+ *
270
+ * @since 2.0.0
271
+ * @category models
272
+ */
273
+ export type NoInfer<A> = [A][A extends any ? 0 : never]
274
+
275
+ /**
276
+ * Invariant helper.
277
+ *
278
+ * @since 2.0.0
279
+ * @category models
280
+ */
281
+ export type Invariant<A> = (_: A) => A
282
+
283
+ /**
284
+ * @since 3.9.0
285
+ * @category models
286
+ */
287
+ export declare namespace Invariant {
288
+ /**
289
+ * @since 3.9.0
290
+ * @category models
291
+ */
292
+ export type Type<A> = A extends Invariant<infer U> ? U : never
293
+ }
294
+
295
+ /**
296
+ * Covariant helper.
297
+ *
298
+ * @since 2.0.0
299
+ * @category models
300
+ */
301
+ export type Covariant<A> = (_: never) => A
302
+
303
+ /**
304
+ * @since 3.9.0
305
+ * @category models
306
+ */
307
+ export declare namespace Covariant {
308
+ /**
309
+ * @since 3.9.0
310
+ * @category models
311
+ */
312
+ export type Type<A> = A extends Covariant<infer U> ? U : never
313
+ }
314
+
315
+ /**
316
+ * Contravariant helper.
317
+ *
318
+ * @since 2.0.0
319
+ * @category models
320
+ */
321
+ export type Contravariant<A> = (_: A) => void
322
+
323
+ /**
324
+ * @since 3.9.0
325
+ * @category models
326
+ */
327
+ export declare namespace Contravariant {
328
+ /**
329
+ * @since 3.9.0
330
+ * @category models
331
+ */
332
+ export type Type<A> = A extends Contravariant<infer U> ? U : never
333
+ }
334
+
335
+ /**
336
+ * @since 2.0.0
337
+ */
338
+ export type MatchRecord<S, onTrue, onFalse> = {} extends S ? onTrue : onFalse
339
+
340
+ /**
341
+ * @since 2.0.0
342
+ */
343
+ export type NotFunction<T> = T extends Function ? never : T
344
+
345
+ /**
346
+ * @since 3.9.0
347
+ */
348
+ export type NoExcessProperties<T, U> = T & { readonly [K in Exclude<keyof U, keyof T>]: never }
349
+
350
+ /**
351
+ * @since 3.15.0
352
+ */
353
+ export type Ctor<T = {}> = new(...args: Array<any>) => T