@nicolastoulemont/std 0.9.0 → 0.11.0

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 (217) hide show
  1. package/README.md +406 -69
  2. package/dist/brand/index.d.mts +1 -1
  3. package/dist/brand/index.mjs +1 -1
  4. package/dist/{brand-DZgGDrAe.mjs → brand-DP-C92GS.mjs} +2 -2
  5. package/dist/{brand-DZgGDrAe.mjs.map → brand-DP-C92GS.mjs.map} +1 -1
  6. package/dist/{brand.types-B3NDX1vo.d.mts → brand.types-Cqkibdlt.d.mts} +1 -1
  7. package/dist/{brand.types-B3NDX1vo.d.mts.map → brand.types-Cqkibdlt.d.mts.map} +1 -1
  8. package/dist/context/index.d.mts +1 -1
  9. package/dist/context/index.mjs +1 -1
  10. package/dist/{context-0xDbwtpx.mjs → context-7oKePrBY.mjs} +2 -2
  11. package/dist/{context-0xDbwtpx.mjs.map → context-7oKePrBY.mjs.map} +1 -1
  12. package/dist/{context-B2dWloPl.d.mts → context-C9UX6GJo.d.mts} +2 -2
  13. package/dist/{context-B2dWloPl.d.mts.map → context-C9UX6GJo.d.mts.map} +1 -1
  14. package/dist/data/index.d.mts +1 -1
  15. package/dist/data/index.mjs +1 -1
  16. package/dist/data-W10ldR5l.mjs +2 -0
  17. package/dist/data-W10ldR5l.mjs.map +1 -0
  18. package/dist/{dual-fN6OUwN_.mjs → dual-CZhzZslG.mjs} +1 -1
  19. package/dist/{dual-fN6OUwN_.mjs.map → dual-CZhzZslG.mjs.map} +1 -1
  20. package/dist/duration/index.d.mts +1 -1
  21. package/dist/duration/index.mjs +1 -1
  22. package/dist/{duration-Bas3mi1N.mjs → duration-Dwtjy95Z.mjs} +2 -2
  23. package/dist/{duration-Bas3mi1N.mjs.map → duration-Dwtjy95Z.mjs.map} +1 -1
  24. package/dist/either/index.d.mts +1 -1
  25. package/dist/either/index.mjs +1 -1
  26. package/dist/{either-G7uOu4Ar.mjs → either-B2TvVY_j.mjs} +2 -2
  27. package/dist/{either-G7uOu4Ar.mjs.map → either-B2TvVY_j.mjs.map} +1 -1
  28. package/dist/exit-D5zZVlCn.d.mts +67 -0
  29. package/dist/exit-D5zZVlCn.d.mts.map +1 -0
  30. package/dist/fiber/index.d.mts +2 -0
  31. package/dist/fiber/index.mjs +1 -0
  32. package/dist/fiber-CZsyrDdd.mjs +2 -0
  33. package/dist/fiber-CZsyrDdd.mjs.map +1 -0
  34. package/dist/{flow-CNyLsPGb.mjs → flow-D8_tllWl.mjs} +1 -1
  35. package/dist/{flow-CNyLsPGb.mjs.map → flow-D8_tllWl.mjs.map} +1 -1
  36. package/dist/functions/index.d.mts +1 -1
  37. package/dist/functions/index.mjs +1 -1
  38. package/dist/functions-DmOZ7O4j.mjs +2 -0
  39. package/dist/{functions-ByAk682_.mjs.map → functions-DmOZ7O4j.mjs.map} +1 -1
  40. package/dist/fx/index.d.mts +1 -1
  41. package/dist/fx/index.mjs +1 -1
  42. package/dist/fx-DXBw4iYX.mjs +2 -0
  43. package/dist/fx-DXBw4iYX.mjs.map +1 -0
  44. package/dist/fx.runtime-B2_rL7h_.mjs +2 -0
  45. package/dist/fx.runtime-B2_rL7h_.mjs.map +1 -0
  46. package/dist/fx.runtime-q661ckFI.d.mts +16 -0
  47. package/dist/fx.runtime-q661ckFI.d.mts.map +1 -0
  48. package/dist/{fx.types-DyQVgTS8.mjs → fx.types-Bg-Mmdm5.mjs} +1 -1
  49. package/dist/{fx.types-DyQVgTS8.mjs.map → fx.types-Bg-Mmdm5.mjs.map} +1 -1
  50. package/dist/{fx.types-BdN1EWxr.d.mts → fx.types-CpFKa-Jj.d.mts} +1 -1
  51. package/dist/{fx.types-BdN1EWxr.d.mts.map → fx.types-CpFKa-Jj.d.mts.map} +1 -1
  52. package/dist/{index-DfAqfnY0.d.mts → index-BJiD1-T_.d.mts} +4 -4
  53. package/dist/{index-DfAqfnY0.d.mts.map → index-BJiD1-T_.d.mts.map} +1 -1
  54. package/dist/{index-DR7hzXU4.d.mts → index-BR6lwlNv.d.mts} +137 -29
  55. package/dist/index-BR6lwlNv.d.mts.map +1 -0
  56. package/dist/index-BfQSp6pV.d.mts +226 -0
  57. package/dist/index-BfQSp6pV.d.mts.map +1 -0
  58. package/dist/{index-uE3S3Krx.d.mts → index-Bo6pkkVO.d.mts} +5 -5
  59. package/dist/{index-uE3S3Krx.d.mts.map → index-Bo6pkkVO.d.mts.map} +1 -1
  60. package/dist/{index-D8rDE60Y.d.mts → index-BsCrdweM.d.mts} +1 -1
  61. package/dist/index-BsCrdweM.d.mts.map +1 -0
  62. package/dist/{index-D7mFNjot.d.mts → index-BtPFPfja.d.mts} +1 -1
  63. package/dist/{index-D7mFNjot.d.mts.map → index-BtPFPfja.d.mts.map} +1 -1
  64. package/dist/{index-BA0EsFxS.d.mts → index-C7uSldLA.d.mts} +3 -3
  65. package/dist/{index-BA0EsFxS.d.mts.map → index-C7uSldLA.d.mts.map} +1 -1
  66. package/dist/{index-CVmgBpDt.d.mts → index-CBtUJ94I.d.mts} +3 -3
  67. package/dist/{index-CVmgBpDt.d.mts.map → index-CBtUJ94I.d.mts.map} +1 -1
  68. package/dist/{index-BD-els5J.d.mts → index-CIEdspey.d.mts} +83 -59
  69. package/dist/index-CIEdspey.d.mts.map +1 -0
  70. package/dist/{index-dCRymj_g.d.mts → index-CXz5Z5MP.d.mts} +5 -5
  71. package/dist/{index-dCRymj_g.d.mts.map → index-CXz5Z5MP.d.mts.map} +1 -1
  72. package/dist/{index-D8gcYvR9.d.mts → index-DDdSA1Rs.d.mts} +5 -5
  73. package/dist/{index-D8gcYvR9.d.mts.map → index-DDdSA1Rs.d.mts.map} +1 -1
  74. package/dist/{index-BqJ1GWAF.d.mts → index-D_JbOTtg.d.mts} +2 -2
  75. package/dist/index-D_JbOTtg.d.mts.map +1 -0
  76. package/dist/index-DzGXoCV1.d.mts +433 -0
  77. package/dist/index-DzGXoCV1.d.mts.map +1 -0
  78. package/dist/{index-CNTYbcY9.d.mts → index-Pma2THAy.d.mts} +10 -3
  79. package/dist/index-Pma2THAy.d.mts.map +1 -0
  80. package/dist/{index-CIvNgjsx.d.mts → index-hrn4s4Vn.d.mts} +2 -2
  81. package/dist/{index-CIvNgjsx.d.mts.map → index-hrn4s4Vn.d.mts.map} +1 -1
  82. package/dist/{index-D6pjHqlK.d.mts → index-lYxaV6H7.d.mts} +49 -70
  83. package/dist/index-lYxaV6H7.d.mts.map +1 -0
  84. package/dist/index-xY9km50k.d.mts +59 -0
  85. package/dist/index-xY9km50k.d.mts.map +1 -0
  86. package/dist/index.d.mts +24 -21
  87. package/dist/index.mjs +1 -1
  88. package/dist/layer/index.d.mts +1 -1
  89. package/dist/layer/index.mjs +1 -1
  90. package/dist/layer-BmrPWBkT.mjs +2 -0
  91. package/dist/layer-BmrPWBkT.mjs.map +1 -0
  92. package/dist/{layer.types-BB0MrvLg.d.mts → layer.types-smjitsoN.d.mts} +4 -4
  93. package/dist/{layer.types-BB0MrvLg.d.mts.map → layer.types-smjitsoN.d.mts.map} +1 -1
  94. package/dist/log/index.d.mts +2 -0
  95. package/dist/log/index.mjs +1 -0
  96. package/dist/log-Bh8G5umo.mjs +2 -0
  97. package/dist/log-Bh8G5umo.mjs.map +1 -0
  98. package/dist/multithread/index.d.mts +1 -1
  99. package/dist/multithread/index.mjs +1 -1
  100. package/dist/multithread-CovZ2ioL.mjs +21 -0
  101. package/dist/multithread-CovZ2ioL.mjs.map +1 -0
  102. package/dist/option/index.d.mts +1 -1
  103. package/dist/option/index.mjs +1 -1
  104. package/dist/{option-C2iCxAuJ.mjs → option-BlyP5LA2.mjs} +2 -2
  105. package/dist/{option-C2iCxAuJ.mjs.map → option-BlyP5LA2.mjs.map} +1 -1
  106. package/dist/{option.types-D9hrKcfa.d.mts → option.types-Po1qwxiW.d.mts} +3 -3
  107. package/dist/{option.types-D9hrKcfa.d.mts.map → option.types-Po1qwxiW.d.mts.map} +1 -1
  108. package/dist/{option.types-CbY_swma.mjs → option.types-bFFSErJ-.mjs} +1 -1
  109. package/dist/{option.types-CbY_swma.mjs.map → option.types-bFFSErJ-.mjs.map} +1 -1
  110. package/dist/order/index.d.mts +1 -1
  111. package/dist/order/index.mjs +1 -1
  112. package/dist/{order-BXOBEKvB.mjs → order-VTXpppmI.mjs} +2 -2
  113. package/dist/{order-BXOBEKvB.mjs.map → order-VTXpppmI.mjs.map} +1 -1
  114. package/dist/{pipeable-BIrevC0D.d.mts → pipeable-BY9yPsNK.d.mts} +1 -1
  115. package/dist/{pipeable-BIrevC0D.d.mts.map → pipeable-BY9yPsNK.d.mts.map} +1 -1
  116. package/dist/pipeable-COGyGMUV.mjs +2 -0
  117. package/dist/{pipeable-Dp1_23zH.mjs.map → pipeable-COGyGMUV.mjs.map} +1 -1
  118. package/dist/predicate/index.d.mts +1 -1
  119. package/dist/predicate/index.mjs +1 -1
  120. package/dist/predicate-CvH7cY_J.mjs +2 -0
  121. package/dist/predicate-CvH7cY_J.mjs.map +1 -0
  122. package/dist/provide/index.d.mts +1 -1
  123. package/dist/provide/index.mjs +1 -1
  124. package/dist/provide-K-6oXtLm.mjs +2 -0
  125. package/dist/provide-K-6oXtLm.mjs.map +1 -0
  126. package/dist/queue/index.d.mts +1 -1
  127. package/dist/queue/index.mjs +1 -1
  128. package/dist/{queue-GYVrD39q.mjs → queue-CeEIUHcY.mjs} +2 -2
  129. package/dist/{queue-GYVrD39q.mjs.map → queue-CeEIUHcY.mjs.map} +1 -1
  130. package/dist/{queue.types-B-l5XYbU.d.mts → queue.types-Bj63N2ab.d.mts} +1 -1
  131. package/dist/{queue.types-B-l5XYbU.d.mts.map → queue.types-Bj63N2ab.d.mts.map} +1 -1
  132. package/dist/result/index.d.mts +1 -1
  133. package/dist/result/index.mjs +1 -1
  134. package/dist/{result-D3VY0qBG.mjs → result-C74pRN2x.mjs} +2 -2
  135. package/dist/{result-D3VY0qBG.mjs.map → result-C74pRN2x.mjs.map} +1 -1
  136. package/dist/{result.types-BKzChyWY.d.mts → result.types-JEcowzYH.d.mts} +6 -27
  137. package/dist/result.types-JEcowzYH.d.mts.map +1 -0
  138. package/dist/schedule/index.d.mts +1 -1
  139. package/dist/schedule/index.mjs +1 -1
  140. package/dist/{schedule-B7qV60tO.mjs → schedule-ChcIgvd5.mjs} +2 -2
  141. package/dist/{schedule-B7qV60tO.mjs.map → schedule-ChcIgvd5.mjs.map} +1 -1
  142. package/dist/{schedule-BzPjvMXc.d.mts → schedule-ap6y014J.d.mts} +3 -3
  143. package/dist/{schedule-BzPjvMXc.d.mts.map → schedule-ap6y014J.d.mts.map} +1 -1
  144. package/dist/schema/index.d.mts +1 -1
  145. package/dist/schema/index.mjs +1 -1
  146. package/dist/schema-CjON86AZ.mjs +2 -0
  147. package/dist/schema-CjON86AZ.mjs.map +1 -0
  148. package/dist/scope/index.d.mts +1 -1
  149. package/dist/scope/index.mjs +1 -1
  150. package/dist/{scope-CuM3CzwG.d.mts → scope-BQEFiS_2.d.mts} +4 -4
  151. package/dist/scope-BQEFiS_2.d.mts.map +1 -0
  152. package/dist/scope-D2AqJy7j.mjs +2 -0
  153. package/dist/scope-D2AqJy7j.mjs.map +1 -0
  154. package/dist/service/index.d.mts +1 -1
  155. package/dist/service/index.mjs +1 -1
  156. package/dist/{service-CWAIEH46.mjs → service-DHkeorS3.mjs} +2 -2
  157. package/dist/{service-CWAIEH46.mjs.map → service-DHkeorS3.mjs.map} +1 -1
  158. package/dist/{service-D8mr0wwg.d.mts → service-DIKUYHda.d.mts} +2 -2
  159. package/dist/{service-D8mr0wwg.d.mts.map → service-DIKUYHda.d.mts.map} +1 -1
  160. package/dist/trace/index.d.mts +2 -0
  161. package/dist/trace/index.mjs +1 -0
  162. package/dist/trace-ByjppUes.mjs +2 -0
  163. package/dist/trace-ByjppUes.mjs.map +1 -0
  164. package/dist/trace-NETIRDfA.d.mts +375 -0
  165. package/dist/trace-NETIRDfA.d.mts.map +1 -0
  166. package/dist/type-utils.types-CnPpsvt5.d.mts +30 -0
  167. package/dist/type-utils.types-CnPpsvt5.d.mts.map +1 -0
  168. package/package.json +15 -5
  169. package/dist/adt/index.d.mts +0 -2
  170. package/dist/adt/index.mjs +0 -1
  171. package/dist/adt-CY8wLJJI.mjs +0 -2
  172. package/dist/adt-CY8wLJJI.mjs.map +0 -1
  173. package/dist/data-DqACNS_g.mjs +0 -2
  174. package/dist/data-DqACNS_g.mjs.map +0 -1
  175. package/dist/discriminator.types-C-ygT2S1.d.mts +0 -7
  176. package/dist/discriminator.types-C-ygT2S1.d.mts.map +0 -1
  177. package/dist/functions-ByAk682_.mjs +0 -2
  178. package/dist/fx-C_RTDEpv.mjs +0 -2
  179. package/dist/fx-C_RTDEpv.mjs.map +0 -1
  180. package/dist/fx.runtime-jQxh77s3.mjs +0 -2
  181. package/dist/fx.runtime-jQxh77s3.mjs.map +0 -1
  182. package/dist/index-BD-els5J.d.mts.map +0 -1
  183. package/dist/index-BaRJVkLo.d.mts +0 -458
  184. package/dist/index-BaRJVkLo.d.mts.map +0 -1
  185. package/dist/index-BipW0MC3.d.mts +0 -64
  186. package/dist/index-BipW0MC3.d.mts.map +0 -1
  187. package/dist/index-BqJ1GWAF.d.mts.map +0 -1
  188. package/dist/index-CNTYbcY9.d.mts.map +0 -1
  189. package/dist/index-D6pjHqlK.d.mts.map +0 -1
  190. package/dist/index-D8rDE60Y.d.mts.map +0 -1
  191. package/dist/index-DR7hzXU4.d.mts.map +0 -1
  192. package/dist/is-plain-object-BoFjRafL.mjs +0 -2
  193. package/dist/is-plain-object-BoFjRafL.mjs.map +0 -1
  194. package/dist/layer-C5A-EM0h.mjs +0 -2
  195. package/dist/layer-C5A-EM0h.mjs.map +0 -1
  196. package/dist/multithread-Cyc8Bz45.mjs +0 -19
  197. package/dist/multithread-Cyc8Bz45.mjs.map +0 -1
  198. package/dist/pipeable-Dp1_23zH.mjs +0 -2
  199. package/dist/predicate-D_1SsIi4.mjs +0 -2
  200. package/dist/predicate-D_1SsIi4.mjs.map +0 -1
  201. package/dist/provide-CuccogWx.mjs +0 -2
  202. package/dist/provide-CuccogWx.mjs.map +0 -1
  203. package/dist/result.types-BKzChyWY.d.mts.map +0 -1
  204. package/dist/schema-DstB1_VK.mjs +0 -2
  205. package/dist/schema-DstB1_VK.mjs.map +0 -1
  206. package/dist/schema.shared-Bjyroa6b.mjs +0 -2
  207. package/dist/schema.shared-Bjyroa6b.mjs.map +0 -1
  208. package/dist/schema.types-w1WK4kGS.d.mts +0 -62
  209. package/dist/schema.types-w1WK4kGS.d.mts.map +0 -1
  210. package/dist/scope-CuM3CzwG.d.mts.map +0 -1
  211. package/dist/scope-gVt4PESc.mjs +0 -2
  212. package/dist/scope-gVt4PESc.mjs.map +0 -1
  213. package/dist/service-resolution-BefYr4nR.mjs +0 -2
  214. package/dist/service-resolution-BefYr4nR.mjs.map +0 -1
  215. /package/dist/{chunk-oQKkju2G.mjs → chunk-6rpU2rUb.mjs} +0 -0
  216. /package/dist/{option-CXXiA1w-.mjs → option-BqAUkJ8e.mjs} +0 -0
  217. /package/dist/{result-xFLfwriM.mjs → result-B5WbPg8C.mjs} +0 -0
@@ -1,8 +1,10 @@
1
- import { i as Fx } from "./fx.types-BdN1EWxr.mjs";
2
- import { t as Result } from "./result.types-BKzChyWY.mjs";
3
- import { c as ValidationError, n as Input, r as Output, s as SyncSchema } from "./schema.types-w1WK4kGS.mjs";
4
- import { t as Discriminator } from "./discriminator.types-C-ygT2S1.mjs";
1
+ import { i as Fx } from "./fx.types-CpFKa-Jj.mjs";
5
2
 
3
+ //#region src/shared/discriminator.types.d.ts
4
+ type Discriminator<Tag extends string = string> = {
5
+ readonly _tag: Tag;
6
+ };
7
+ //#endregion
6
8
  //#region src/data/data.types.d.ts
7
9
  /**
8
10
  * A tagged value object created by tagged().
@@ -94,7 +96,7 @@ type ArrayValue<out T> = {
94
96
  * @returns A frozen array with equals(), hash(), map(), and filter()
95
97
  *
96
98
  * @see {@link tuple} for fixed-length typed tuples
97
- * @see {@link struct} for object value types
99
+ * @see {@link struct} for struct value types
98
100
  *
99
101
  * @example
100
102
  * ```ts
@@ -118,67 +120,46 @@ type ArrayValue<out T> = {
118
120
  */
119
121
  declare function array$1<T>(items: readonly T[]): ArrayValue<T>;
120
122
  //#endregion
121
- //#region src/data/data.entity.d.ts
122
- type EntitySchema<TInput = unknown, TOutput extends Record<string, unknown> = Record<string, unknown>> = SyncSchema<TInput, TOutput>;
123
- type EntityConstructor<S extends EntitySchema> = (input: Input<S>) => Result<StructValue<Output<S>>, ValidationError>;
123
+ //#region src/data/data.match.d.ts
124
124
  /**
125
- * Create a sync schema-backed constructor for untagged entity objects.
125
+ * Handler functions for each variant in a discriminated union.
126
+ * Each key maps to a function that receives the variant value and returns TResult.
126
127
  *
127
- * The constructor validates through the provided schema, then wraps the
128
- * validated object with `Data.struct()` so the result is frozen and gains
129
- * structural `equals()` and `hash()` behavior.
130
- *
131
- * Defaults and output shaping should be defined at the schema level.
128
+ * @template T - The discriminated union type (must have readonly _tag)
129
+ * @template TResult - The return type of all handlers
130
+ */
131
+ type MatchHandlers<T extends {
132
+ readonly _tag: string;
133
+ }, TResult> = { [K in T["_tag"]]: (value: Extract<T, {
134
+ readonly _tag: K;
135
+ }>) => TResult };
136
+ /**
137
+ * Exhaustive pattern matching for discriminated unions.
132
138
  *
133
- * @example
134
- * ```ts
135
- * import { Data } from "@nicolastoulemont/std"
136
- * import { z } from "zod"
139
+ * TypeScript will error if any variant is missing from handlers,
140
+ * ensuring exhaustive handling of all cases.
137
141
  *
138
- * const User = Data.entity(
139
- * z.object({
140
- * id: z.string(),
141
- * role: z.string().default("member"),
142
- * }),
143
- * )
142
+ * @template T - The discriminated union type (must have readonly _tag)
143
+ * @template TResult - The return type of all handlers
144
+ * @template Handlers - The handler object type (inferred)
145
+ * @param value - A discriminated union value with _tag
146
+ * @param handlers - An object with a handler function for each variant
147
+ * @returns The result of calling the matching handler
144
148
  *
145
- * const user = User({ id: "u1" })
146
- * // => { _tag: "Ok", value: { id: "u1", role: "member" } }
147
- * ```
148
149
  */
149
- declare function entity$1<S extends EntitySchema>(schema: S): EntityConstructor<S>;
150
+ declare function match$1<T extends {
151
+ readonly _tag: string;
152
+ }, TResult, Handlers extends MatchHandlers<T, TResult> = MatchHandlers<T, TResult>>(value: T, handlers: Handlers): TResult;
150
153
  //#endregion
151
154
  //#region src/data/data.struct.d.ts
152
155
  /**
153
- * Create a frozen value object with structural equality.
156
+ * Create a frozen struct value with structural equality.
154
157
  *
155
158
  * Unlike tagged(), struct() does not add a _tag discriminator.
156
159
  * Use this for simple value objects that don't need discrimination.
157
160
  *
158
161
  * The returned object is frozen (immutable) and has non-enumerable
159
162
  * equals() and hash() methods for structural comparison.
160
- *
161
- * @template T - The object shape type
162
- * @param input - The object to wrap
163
- * @returns A frozen object with equals() and hash() methods
164
- *
165
- * @see {@link tagged} for discriminated value objects with _tag
166
- * @see {@link array} for array value types
167
- *
168
- * @example
169
- * ```ts
170
- * const point = struct({ x: 10, y: 20 })
171
- * const point2 = struct({ x: 10, y: 20 })
172
- *
173
- * point.equals(point2) // true
174
- * point.hash() // number
175
- *
176
- * // Object is frozen
177
- * point.x = 5 // TypeError
178
- *
179
- * // equals/hash are non-enumerable
180
- * Object.keys(point) // ["x", "y"]
181
- * ```
182
163
  */
183
164
  declare function struct$1<T extends Record<string, unknown>>(input: T): StructValue<T>;
184
165
  //#endregion
@@ -186,7 +167,7 @@ declare function struct$1<T extends Record<string, unknown>>(input: T): StructVa
186
167
  /**
187
168
  * Create a tagged value constructor without schema validation.
188
169
  *
189
- * Unlike variant(), this creates values directly without validation.
170
+ * Unlike tagged(), this creates values directly without validation.
190
171
  * Values are frozen and have structural equality via equals() and hash() methods.
191
172
  *
192
173
  * @template T - The data shape type (excluding _tag)
@@ -194,7 +175,7 @@ declare function struct$1<T extends Record<string, unknown>>(input: T): StructVa
194
175
  * @returns A constructor function with is(), equals(), and hash() methods
195
176
  *
196
177
  * @see {@link variant} for validated variant with schema support
197
- * @see {@link struct} for untagged value objects
178
+ * @see {@link struct} for struct value objects
198
179
  *
199
180
  * @example
200
181
  * ```ts
@@ -300,7 +281,7 @@ declare function TaggedError$1<Tag extends string>(tag: Tag): TaggedErrorFactory
300
281
  * @returns A frozen tuple-like array with equals() and hash() methods
301
282
  *
302
283
  * @see {@link array} for variable-length arrays with equality
303
- * @see {@link struct} for object value types
284
+ * @see {@link struct} for struct value types
304
285
  *
305
286
  * @example
306
287
  * ```ts
@@ -321,7 +302,7 @@ declare function TaggedError$1<Tag extends string>(tag: Tag): TaggedErrorFactory
321
302
  */
322
303
  declare function tuple$1<T extends readonly unknown[]>(...args: T): TupleValue<T>;
323
304
  declare namespace data_d_exports {
324
- export { ArrayValue, StructValue, TaggedConstructor, TaggedError, TaggedErrorClass, TaggedErrorCore, TaggedErrorFactory, TaggedErrorInstance, TaggedValue, TupleValue, array, entity, struct, tagged, tuple };
305
+ export { ArrayValue, StructValue, TaggedConstructor, TaggedError, TaggedErrorClass, TaggedErrorCore, TaggedErrorFactory, TaggedErrorInstance, TaggedValue, TupleValue, array, match, struct, tagged, tuple };
325
306
  }
326
307
  /**
327
308
  * Construct tagged data objects.
@@ -350,32 +331,30 @@ declare const tagged: typeof tagged$1;
350
331
  */
351
332
  declare const TaggedError: typeof TaggedError$1;
352
333
  /**
353
- * Construct sync schema-backed entities with structural value semantics.
334
+ * Construct immutable-like structs with stable structural behavior.
354
335
  *
355
336
  * @example
356
337
  * ```ts
357
- * import { Data } from "@nicolastoulemont/std"
358
- * import { z } from "zod"
359
- *
360
- * const User = Data.entity(z.object({ id: z.string() }))
361
- * const result = User({ id: "u1" })
362
- * // => { _tag: "Ok", value: { id: "u1" } }
338
+ * const point = Data.struct({ x: 1, y: 2 })
339
+ * const same = point.equals({ x: 1, y: 2 })
340
+ * // => true
363
341
  * ```
364
342
  */
365
- declare const entity: typeof entity$1;
343
+ declare const struct: typeof struct$1;
366
344
  /**
367
- * Construct immutable-like structs with stable structural behavior.
345
+ * Match over tagged data by discriminator tag.
368
346
  *
369
347
  * @example
370
348
  * ```ts
371
349
  * import { Data } from "@nicolastoulemont/std"
372
350
  *
373
- * const point = Data.struct({ x: 1, y: 2 })
374
- * const same = point.equals({ x: 1, y: 2 })
375
- * // => true
351
+ * const label = Data.match({ _tag: "Circle", radius: 2 } as const, {
352
+ * Circle: (circle) => `r=${circle.radius}` ,
353
+ * })
354
+ * // => "r=2"
376
355
  * ```
377
356
  */
378
- declare const struct: typeof struct$1;
357
+ declare const match: typeof match$1;
379
358
  /**
380
359
  * Construct immutable-like tuples with stable structural behavior.
381
360
  *
@@ -403,5 +382,5 @@ declare const tuple: typeof tuple$1;
403
382
  */
404
383
  declare const array: typeof array$1;
405
384
  //#endregion
406
- export { TaggedErrorFactory as n, data_d_exports as t };
407
- //# sourceMappingURL=index-D6pjHqlK.d.mts.map
385
+ export { Discriminator as i, TaggedErrorFactory as n, StructValue as r, data_d_exports as t };
386
+ //# sourceMappingURL=index-lYxaV6H7.d.mts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index-lYxaV6H7.d.mts","names":[],"sources":["../src/shared/discriminator.types.ts","../src/data/data.types.ts","../src/data/data.array.ts","../src/data/data.match.ts","../src/data/data.struct.ts","../src/data/data.tagged.ts","../src/data/data.tagged-error.types.ts","../src/data/data.tagged-error.ts","../src/data/data.tuple.ts","../src/data/data.ts"],"sourcesContent":[],"mappings":"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"}
@@ -0,0 +1,59 @@
1
+ import { m as SyncFx, t as AsyncFx } from "./fx.types-CpFKa-Jj.mjs";
2
+ import { t as Exit } from "./exit-D5zZVlCn.mjs";
3
+ import { n as RuntimeFiber, t as FiberStatus } from "./fx.runtime-q661ckFI.mjs";
4
+
5
+ //#region src/fiber/fiber.d.ts
6
+ declare namespace fiber_d_exports {
7
+ export { Fiber, Status, await_ as await, await_, interrupt, join, status };
8
+ }
9
+ /**
10
+ * Public handle for a running Fx fiber.
11
+ */
12
+ type Fiber<A, E> = RuntimeFiber<A, E>;
13
+ /**
14
+ * Fiber lifecycle status.
15
+ */
16
+ type Status = FiberStatus;
17
+ /**
18
+ * Await a fiber and return its full Exit.
19
+ *
20
+ * @example
21
+ * ```ts
22
+ * const exit = yield* Fiber.await(fiber)
23
+ * // => Fx.Exit<A, E>
24
+ * ```
25
+ */
26
+ declare const await_: <A, E>(fiber: Fiber<A, E>) => AsyncFx<Exit<A, E>>;
27
+ /**
28
+ * Join a fiber and resume with its success value.
29
+ *
30
+ * @example
31
+ * ```ts
32
+ * const value = yield* Fiber.join(fiber)
33
+ * // => A
34
+ * ```
35
+ */
36
+ declare const join: <A, E>(fiber: Fiber<A, E>) => AsyncFx<A, E>;
37
+ /**
38
+ * Request cooperative interruption and wait for fiber completion.
39
+ *
40
+ * @example
41
+ * ```ts
42
+ * const exit = yield* Fiber.interrupt(fiber)
43
+ * // => Fx.Exit<A, E>
44
+ * ```
45
+ */
46
+ declare const interrupt: <A, E>(fiber: Fiber<A, E>) => AsyncFx<Exit<A, E>>;
47
+ /**
48
+ * Read the current fiber status.
49
+ *
50
+ * @example
51
+ * ```ts
52
+ * const status = yield* Fiber.status(fiber)
53
+ * // => "Running" | "Done" | "Interrupted"
54
+ * ```
55
+ */
56
+ declare const status: (fiber: Fiber<unknown, unknown>) => SyncFx<Status>;
57
+ //#endregion
58
+ export { fiber_d_exports as t };
59
+ //# sourceMappingURL=index-xY9km50k.d.mts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index-xY9km50k.d.mts","names":[],"sources":["../src/fiber/fiber.ts"],"sourcesContent":[],"mappings":";;;;;;;;;;;KAQY,cAAc,aAAa,GAAG;;;;KAK9B,MAAA,GAAS;;;;;AALrB;;;;;AAKY,cAWC,MAXQ,EAAA,CAAA,CAAA,EAAA,CAAA,CAAA,CAAA,KAAW,EAWI,KAXJ,CAWU,CAXV,EAWa,CAXb,CAAA,EAAA,GAWkB,OAXlB,CAW0B,IAX1B,CAW+B,CAX/B,EAWkC,CAXlC,CAAA,CAAA;AAWhC;;;;;;;;;AAWa,cAAA,IAAoE,EAAA,CAAA,CAAA,EAAA,CAAA,CAAA,CAAA,KAAA,EAA/C,KAA+C,CAAzC,CAAyC,EAAtC,CAAsC,CAAA,EAAA,GAAjC,OAAiC,CAAzB,CAAyB,EAAtB,CAAsB,CAAA;;;;;;;;AAWjF;;AAAgD,cAAnC,SAAmC,EAAA,CAAA,CAAA,EAAA,CAAA,CAAA,CAAA,KAAA,EAAT,KAAS,CAAH,CAAG,EAAA,CAAA,CAAA,EAAA,GAAK,OAAL,CAAa,IAAb,CAAkB,CAAlB,EAAqB,CAArB,CAAA,CAAA;;;;;;;AAWhD;;;AAAwD,cAA3C,MAA2C,EAAA,CAAA,KAAA,EAA1B,KAA0B,CAAA,OAAA,EAAA,OAAA,CAAA,EAAA,GAAA,MAAA,CAAO,MAAP,CAAA"}
package/dist/index.d.mts CHANGED
@@ -1,25 +1,28 @@
1
- import { t as adt_d_exports } from "./index-BaRJVkLo.mjs";
2
- import { t as brand_d_exports } from "./index-BA0EsFxS.mjs";
3
- import { n as service_d_exports } from "./service-D8mr0wwg.mjs";
4
- import { n as context_d_exports } from "./context-B2dWloPl.mjs";
1
+ import { t as brand_d_exports } from "./index-C7uSldLA.mjs";
2
+ import { n as service_d_exports } from "./service-DIKUYHda.mjs";
3
+ import { n as context_d_exports } from "./context-C9UX6GJo.mjs";
5
4
  import "./context/index.mjs";
6
- import { t as data_d_exports } from "./index-D6pjHqlK.mjs";
7
- import { n as result_d_exports } from "./index-CIvNgjsx.mjs";
8
- import { r as duration_d_exports } from "./index-DfAqfnY0.mjs";
9
- import { t as either_d_exports } from "./index-dCRymj_g.mjs";
10
- import { n as flow, t as pipe } from "./index-D7mFNjot.mjs";
11
- import { r as schedule_d_exports } from "./schedule-BzPjvMXc.mjs";
12
- import { t as fx_d_exports } from "./index-BD-els5J.mjs";
13
- import { r as scope_d_exports } from "./scope-CuM3CzwG.mjs";
14
- import { t as layer_d_exports } from "./index-uE3S3Krx.mjs";
15
- import { t as multithread_d_exports } from "./index-DR7hzXU4.mjs";
16
- import { t as option_d_exports } from "./index-BqJ1GWAF.mjs";
17
- import { t as order_d_exports } from "./index-D8rDE60Y.mjs";
18
- import { t as predicate_d_exports } from "./index-CNTYbcY9.mjs";
19
- import { t as provide_d_exports } from "./index-D8gcYvR9.mjs";
20
- import { t as queue_d_exports } from "./index-CVmgBpDt.mjs";
5
+ import { t as data_d_exports } from "./index-lYxaV6H7.mjs";
6
+ import { n as result_d_exports } from "./index-hrn4s4Vn.mjs";
7
+ import { r as duration_d_exports } from "./index-BJiD1-T_.mjs";
8
+ import { t as either_d_exports } from "./index-CXz5Z5MP.mjs";
9
+ import { t as fiber_d_exports } from "./index-xY9km50k.mjs";
10
+ import { n as flow, t as pipe } from "./index-BtPFPfja.mjs";
11
+ import { r as schedule_d_exports } from "./schedule-ap6y014J.mjs";
12
+ import { r as scope_d_exports } from "./scope-BQEFiS_2.mjs";
13
+ import { n as trace_d_exports } from "./trace-NETIRDfA.mjs";
14
+ import { t as fx_d_exports } from "./index-CIEdspey.mjs";
15
+ import { t as layer_d_exports } from "./index-Bo6pkkVO.mjs";
16
+ import { t as log_d_exports } from "./index-BfQSp6pV.mjs";
17
+ import { t as multithread_d_exports } from "./index-BR6lwlNv.mjs";
18
+ import { t as option_d_exports } from "./index-D_JbOTtg.mjs";
19
+ import { t as order_d_exports } from "./index-BsCrdweM.mjs";
20
+ import { t as predicate_d_exports } from "./index-Pma2THAy.mjs";
21
+ import { t as provide_d_exports } from "./index-DDdSA1Rs.mjs";
22
+ import { t as queue_d_exports } from "./index-CBtUJ94I.mjs";
21
23
  import "./schedule/index.mjs";
22
- import { t as schema_d_exports } from "./index-BipW0MC3.mjs";
24
+ import { t as schema_d_exports } from "./index-DzGXoCV1.mjs";
23
25
  import "./scope/index.mjs";
24
26
  import "./service/index.mjs";
25
- export { adt_d_exports as Adt, brand_d_exports as Brand, context_d_exports as Context, data_d_exports as Data, duration_d_exports as Duration, either_d_exports as Either, fx_d_exports as Fx, layer_d_exports as Layer, multithread_d_exports as Multithread, option_d_exports as Option, order_d_exports as Order, predicate_d_exports as Predicate, provide_d_exports as Provide, queue_d_exports as Queue, result_d_exports as Result, schedule_d_exports as Schedule, schema_d_exports as Schema, scope_d_exports as Scope, service_d_exports as Service, flow, pipe };
27
+ import "./trace/index.mjs";
28
+ export { brand_d_exports as Brand, context_d_exports as Context, data_d_exports as Data, duration_d_exports as Duration, either_d_exports as Either, fiber_d_exports as Fiber, fx_d_exports as Fx, layer_d_exports as Layer, log_d_exports as Log, multithread_d_exports as Multithread, option_d_exports as Option, order_d_exports as Order, predicate_d_exports as Predicate, provide_d_exports as Provide, queue_d_exports as Queue, result_d_exports as Result, schedule_d_exports as Schedule, schema_d_exports as Schema, scope_d_exports as Scope, service_d_exports as Service, trace_d_exports as Trace, flow, pipe };
package/dist/index.mjs CHANGED
@@ -1 +1 @@
1
- import{t as e}from"./adt-CY8wLJJI.mjs";import{t}from"./flow-CNyLsPGb.mjs";import{a as n}from"./result-D3VY0qBG.mjs";import{t as r}from"./brand-DZgGDrAe.mjs";import{t as i}from"./context-0xDbwtpx.mjs";import"./context/index.mjs";import{n as a}from"./data-DqACNS_g.mjs";import{t as o}from"./duration-Bas3mi1N.mjs";import{r as s}from"./option-C2iCxAuJ.mjs";import{t as c}from"./either-G7uOu4Ar.mjs";import{t as l}from"./functions-ByAk682_.mjs";import{a as u}from"./queue-GYVrD39q.mjs";import{t as d}from"./fx-C_RTDEpv.mjs";import{t as f}from"./layer-C5A-EM0h.mjs";import"./layer/index.mjs";import{t as p}from"./multithread-Cyc8Bz45.mjs";import{t as m}from"./order-BXOBEKvB.mjs";import{t as h}from"./predicate-D_1SsIi4.mjs";import{n as g}from"./scope-gVt4PESc.mjs";import{t as _}from"./provide-CuccogWx.mjs";import"./queue/index.mjs";import{t as v}from"./schedule-B7qV60tO.mjs";import{t as y}from"./schema-DstB1_VK.mjs";import"./scope/index.mjs";import{t as b}from"./service-CWAIEH46.mjs";export{e as Adt,r as Brand,i as Context,a as Data,o as Duration,c as Either,d as Fx,f as Layer,p as Multithread,s as Option,m as Order,h as Predicate,_ as Provide,u as Queue,n as Result,v as Schedule,y as Schema,g as Scope,b as Service,t as flow,l as pipe};
1
+ import{t as e}from"./flow-D8_tllWl.mjs";import{a as t}from"./result-C74pRN2x.mjs";import{t as n}from"./brand-DP-C92GS.mjs";import{t as r}from"./context-7oKePrBY.mjs";import"./context/index.mjs";import{n as i}from"./data-W10ldR5l.mjs";import{t as a}from"./duration-Dwtjy95Z.mjs";import{r as o}from"./option-BlyP5LA2.mjs";import{t as s}from"./either-B2TvVY_j.mjs";import{t as c}from"./fiber-CZsyrDdd.mjs";import{t as l}from"./functions-DmOZ7O4j.mjs";import{r as u}from"./trace-ByjppUes.mjs";import{a as d}from"./queue-CeEIUHcY.mjs";import{t as f}from"./fx-DXBw4iYX.mjs";import{t as p}from"./layer-BmrPWBkT.mjs";import"./layer/index.mjs";import{t as m}from"./log-Bh8G5umo.mjs";import{t as h}from"./multithread-CovZ2ioL.mjs";import{t as g}from"./order-VTXpppmI.mjs";import{t as _}from"./predicate-CvH7cY_J.mjs";import{n as v}from"./scope-D2AqJy7j.mjs";import{t as y}from"./provide-K-6oXtLm.mjs";import"./queue/index.mjs";import{t as b}from"./schedule-ChcIgvd5.mjs";import{t as x}from"./schema-CjON86AZ.mjs";import"./scope/index.mjs";import{t as S}from"./service-DHkeorS3.mjs";import"./trace/index.mjs";export{n as Brand,r as Context,i as Data,a as Duration,s as Either,c as Fiber,f as Fx,p as Layer,m as Log,h as Multithread,o as Option,g as Order,_ as Predicate,y as Provide,d as Queue,t as Result,b as Schedule,x as Schema,v as Scope,S as Service,u as Trace,e as flow,l as pipe};
@@ -1,2 +1,2 @@
1
- import { t as layer_d_exports } from "../index-uE3S3Krx.mjs";
1
+ import { t as layer_d_exports } from "../index-Bo6pkkVO.mjs";
2
2
  export { layer_d_exports as Layer };
@@ -1 +1 @@
1
- import{t as e}from"../layer-C5A-EM0h.mjs";export{e as Layer};
1
+ import{t as e}from"../layer-BmrPWBkT.mjs";export{e as Layer};
@@ -0,0 +1,2 @@
1
+ import{t as e}from"./chunk-6rpU2rUb.mjs";import{t}from"./fx.types-Bg-Mmdm5.mjs";import{i as n,n as r,r as i}from"./context-7oKePrBY.mjs";import{_ as a,b as o,l as s}from"./fx.runtime-B2_rL7h_.mjs";var c=e({err:()=>g,fx:()=>_,merge:()=>b,ok:()=>h,provide:()=>y,scoped:()=>v});const l=(e,n)=>({_tag:`Layer`,_ROut:void 0,_E:void 0,_RIn:void 0,_Sync:void 0,build:()=>({_tag:`SyncFx`,[t]:{_A:()=>void 0,_E:()=>void 0,_R:()=>void 0},*[Symbol.iterator](){return i(e,n)}})}),u=e=>({_tag:`Layer`,_ROut:void 0,_E:void 0,_RIn:void 0,_Sync:void 0,build:()=>({_tag:`SyncFx`,[t]:{_A:()=>void 0,_E:()=>e,_R:()=>void 0},*[Symbol.iterator](){throw yield e,Error(`Unreachable`)}})});function d(e){return n=>({_tag:`Layer`,_ROut:void 0,_E:void 0,_RIn:void 0,_Sync:void 0,build:()=>n._tag===`AsyncFx`?{_tag:`AsyncFx`,[t]:{_A:()=>void 0,_E:()=>void 0,_R:()=>void 0},async*[Symbol.asyncIterator](){let t=n[Symbol.asyncIterator](),r=await t.next();for(;r.done!==!0;){let e=yield r.value;r=await t.next(e)}return i(e,r.value)}}:{_tag:`SyncFx`,[t]:{_A:()=>void 0,_E:()=>void 0,_R:()=>void 0},*[Symbol.iterator](){let t=n[Symbol.iterator](),r=t.next();for(;r.done!==!0;){let e=yield r.value;r=t.next(e)}return i(e,r.value)}}})}function f(e){return n=>({_tag:`Layer`,_ROut:void 0,_E:void 0,_RIn:void 0,_Sync:void 0,build:(r,a)=>n._tag===`AsyncFx`?{_tag:`AsyncFx`,[t]:{_A:()=>void 0,_E:()=>void 0,_R:()=>void 0},async*[Symbol.asyncIterator](){let t=n[Symbol.asyncIterator](),r=await t.next();for(;r.done!==!0;){let e=r.value;if(o(e)?.key===`@std/Scope`)r=await t.next(a);else{let n=yield e;r=await t.next(n)}}return i(e,r.value)}}:{_tag:`SyncFx`,[t]:{_A:()=>void 0,_E:()=>void 0,_R:()=>void 0},*[Symbol.iterator](){let t=n[Symbol.iterator](),r=t.next();for(;r.done!==!0;){let e=r.value;if(o(e)?.key===`@std/Scope`)r=t.next(a);else{let n=yield e;r=t.next(n)}}return i(e,r.value)}}})}function p(e){return r=>({_tag:`Layer`,_ROut:void 0,_E:void 0,_RIn:void 0,_Sync:void 0,build:(i,o)=>{let c=e.build(i,o);return c._tag===`AsyncFx`?{_tag:`AsyncFx`,[t]:{_A:()=>void 0,_E:()=>void 0,_R:()=>void 0},async*[Symbol.asyncIterator](){let e=c[Symbol.asyncIterator](),t=await e.next();for(;t.done!==!0;){let n=yield t.value;t=await e.next(n)}let l=t.value;return n(l,yield*a(r.build(i,o),s(l)))}}:{_tag:`SyncFx`,[t]:{_A:()=>void 0,_E:()=>void 0,_R:()=>void 0},*[Symbol.iterator](){let e=c[Symbol.iterator](),t=e.next();for(;t.done!==!0;){let n=yield t.value;t=e.next(n)}let l=t.value,u=r.build(i,o);if(u._tag===`SyncFx`)return n(l,yield*a(u,s(l)));throw Error(`Cannot use async layer in sync context`)}}}})}function m(...e){return{_tag:`Layer`,_ROut:void 0,_E:void 0,_RIn:void 0,_Sync:void 0,build:(i,o)=>e.some(e=>e.build(i,o)._tag===`AsyncFx`)?{_tag:`AsyncFx`,[t]:{_A:()=>void 0,_E:()=>void 0,_R:()=>void 0},async*[Symbol.asyncIterator](){let t=r();for(let r of e){let e=yield*a(r.build(i,o),s(t));t=n(t,e)}return t}}:{_tag:`SyncFx`,[t]:{_A:()=>void 0,_E:()=>void 0,_R:()=>void 0},*[Symbol.iterator](){let t=r();for(let r of e){let e=r.build(i,o);if(e._tag!==`SyncFx`)throw Error(`Expected sync layer in sync context`);let c=yield*a(e,s(t));t=n(t,c)}return t}}}}const h=l,g=u,_=d,v=f,y=p,b=m;export{b as n,c as t};
2
+ //# sourceMappingURL=layer-BmrPWBkT.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"layer-BmrPWBkT.mjs","names":["Context.make","fx","Context.merge","Context.empty"],"sources":["../src/layer/layer.ts"],"sourcesContent":["/**\n * Layer construction and composition for service dependency graphs.\n *\n * **Mental model**\n * - A `Layer` builds one or more services, potentially requiring other services.\n * - Compose layers and provide dependencies before running `Fx`.\n *\n * **Common tasks**\n * - Build from values with `Layer.ok`.\n * - Build from effects with `Layer.fx` or `Layer.scoped`.\n * - Compose with `Layer.provide` and `Layer.merge`.\n *\n * **Gotchas**\n * - Async layers force async execution paths.\n * - Scoped layers require scope finalization.\n *\n * **Quickstart**\n *\n * @example\n * ```ts\n * import { Fx, Layer, Provide, Service } from \"@nicolastoulemont/std\"\n *\n * const Port = Service.tag<number>(\"Port\")\n * const program = Fx.gen(function* () {\n * return yield* Port\n * })\n * const exit = Fx.run(Provide.layer(Layer.ok(Port, 3000))(program))\n * // => { _tag: \"Ok\", value: 3000 }\n * ```\n *\n * @module\n */\nimport * as Context from \"../context/context\"\nimport type { Context as ContextType } from \"../context/context\"\nimport { mergeRuntimeServices, withRuntimeStateCommit } from \"../fx/fx.runtime\"\nimport { FxTypeId } from \"../fx/fx.types\"\nimport type { RunnableFx, SyncFx, AsyncFx, FxYield } from \"../fx/fx.types\"\nimport type { ScopeService, ExcludeScope } from \"../scope/scope\"\nimport type { ServiceClass } from \"../service/service\"\nimport { asServiceRequest } from \"../service/service-resolution\"\nimport type { Layer as LayerType, MergeROut, MergeError, UnprovidedDeps, AllSync } from \"./layer.types\"\n\n/* oxlint-disable no-unsafe-type-assertion -- Layer composition carries erased generic channels and phantom type slots that require assertion-based reconstruction. */\n\n/**\n * Create a layer from a synchronous value (no dependencies).\n */\nconst layerOk = <S>(service: ServiceClass<S>, impl: S): LayerType<S, never, never, true> => ({\n _tag: \"Layer\",\n _ROut: undefined as unknown as S,\n _E: undefined as never,\n _RIn: undefined as never,\n _Sync: undefined as unknown as true,\n build: (): SyncFx<ContextType<S>> => ({\n _tag: \"SyncFx\",\n [FxTypeId]: {\n _A: () => undefined as unknown as ContextType<S>,\n _E: () => undefined as never,\n _R: () => undefined as never,\n },\n // oxlint-disable-next-line require-yield\n *[Symbol.iterator](): Generator<never, ContextType<S>, unknown> {\n return Context.make(service, impl)\n },\n }),\n})\n\n/**\n * Create a layer that always fails with an error.\n */\nconst layerErr = <E>(error: E): LayerType<never, E, never, true> => ({\n _tag: \"Layer\",\n _ROut: undefined as never,\n _E: undefined as unknown as E,\n _RIn: undefined as never,\n _Sync: undefined as unknown as true,\n build: (): SyncFx<ContextType, E> => ({\n _tag: \"SyncFx\",\n [FxTypeId]: {\n _A: () => undefined as never,\n _E: () => error,\n _R: () => undefined as never,\n },\n *[Symbol.iterator](): Generator<E, never, unknown> {\n yield error\n throw new Error(\"Unreachable\")\n },\n }),\n})\n\n/**\n * Create a layer from an Fx computation (can have dependencies).\n * The Sync type parameter is inferred from the input fx:\n * - SyncFx input → Layer with Sync=true\n * - AsyncFx input → Layer with Sync=false\n *\n * @example\n * ```ts\n * import { Fx, Layer, Provide, Service } from \"@nicolastoulemont/std\"\n *\n * const Port = Service.tag<number>(\"Port\")\n * const portLayer = Layer.fx(Port)(Fx.gen(function* () {\n * return 3000\n * }))\n * const program = Fx.gen(function* () {\n * return yield* Port\n * })\n * const exit = Fx.run(Provide.layer(portLayer)(program))\n * // => { _tag: \"Ok\", value: 3000 }\n * ```\n */\nfunction layerFx<S>(service: ServiceClass<S>): {\n <E, R>(fx: SyncFx<S, E, R>): LayerType<S, E, R, true>\n <E, R>(fx: AsyncFx<S, E, R>): LayerType<S, E, R, false>\n <E, R>(fx: RunnableFx<S, E, R>): LayerType<S, E, R>\n}\nfunction layerFx<S>(service: ServiceClass<S>) {\n return <E, R>(fx: RunnableFx<S, E, R>): LayerType<S, E, R> => ({\n _tag: \"Layer\",\n _ROut: undefined as unknown as S,\n _E: undefined as unknown as E,\n _RIn: undefined as unknown as R,\n _Sync: undefined as unknown as boolean,\n build: (): RunnableFx<ContextType<S>, E, R> => {\n if (fx._tag === \"AsyncFx\") {\n return {\n _tag: \"AsyncFx\",\n [FxTypeId]: {\n _A: () => undefined as unknown as ContextType<S>,\n _E: () => undefined as unknown as E,\n _R: () => undefined as unknown as R,\n },\n async *[Symbol.asyncIterator](): AsyncGenerator<FxYield<E, R>, ContextType<S>, unknown> {\n const gen = fx[Symbol.asyncIterator]()\n let result = await gen.next()\n while (result.done !== true) {\n const value = yield result.value\n // oxlint-disable-next-line no-await-in-loop\n result = await gen.next(value)\n }\n return Context.make(service, result.value)\n },\n } as AsyncFx<ContextType<S>, E, R>\n }\n\n return {\n _tag: \"SyncFx\",\n [FxTypeId]: {\n _A: () => undefined as unknown as ContextType<S>,\n _E: () => undefined as unknown as E,\n _R: () => undefined as unknown as R,\n },\n *[Symbol.iterator](): Generator<FxYield<E, R>, ContextType<S>, unknown> {\n const gen = fx[Symbol.iterator]()\n let result = gen.next()\n while (result.done !== true) {\n const value = yield result.value\n result = gen.next(value)\n }\n return Context.make(service, result.value)\n },\n } as SyncFx<ContextType<S>, E, R>\n },\n })\n}\n\n/**\n * Create a scoped layer (with resource cleanup).\n * The Sync type parameter is inferred from the input fx.\n *\n * @example\n * ```ts\n * import { Fx, Layer, Provide, Scope, Service } from \"@nicolastoulemont/std\"\n *\n * const Resource = Service.tag<{ readonly id: number }>(\"Resource\")\n * const ScopeTag = Service.tag<Scope.ScopeService>(\"@std/Scope\")\n * let finalized = 0\n *\n * const resourceLayer = Layer.scoped(Resource)(Fx.gen(function* () {\n * const scope = yield* ScopeTag\n * yield* scope.addFinalizer(() =>\n * Fx.gen(function* () {\n * finalized += 1\n * }),\n * )\n * return { id: 1 }\n * }))\n * const program = Fx.gen(function* () {\n * return (yield* Resource).id\n * })\n * const exit = Fx.run(Provide.layer(resourceLayer)(program))\n * // => { _tag: \"Ok\", value: 1 }\n * ```\n */\nfunction layerScoped<S>(service: ServiceClass<S>): {\n <E, R>(fx: SyncFx<S, E, R | ScopeService>): LayerType<S, E, ExcludeScope<R>, true>\n <E, R>(fx: AsyncFx<S, E, R | ScopeService>): LayerType<S, E, ExcludeScope<R>, false>\n <E, R>(fx: RunnableFx<S, E, R | ScopeService>): LayerType<S, E, ExcludeScope<R>>\n}\nfunction layerScoped<S>(service: ServiceClass<S>) {\n return <E, R>(fx: RunnableFx<S, E, R | ScopeService>): LayerType<S, E, ExcludeScope<R>> => ({\n _tag: \"Layer\",\n _ROut: undefined as unknown as S,\n _E: undefined as unknown as E,\n _RIn: undefined as unknown as ExcludeScope<R>,\n _Sync: undefined as unknown as boolean,\n build: (_memoMap, scope): RunnableFx<ContextType<S>, E, ExcludeScope<R>> => {\n if (fx._tag === \"AsyncFx\") {\n return {\n _tag: \"AsyncFx\",\n [FxTypeId]: {\n _A: () => undefined as unknown as ContextType<S>,\n _E: () => undefined as unknown as E,\n _R: () => undefined as unknown as ExcludeScope<R>,\n },\n async *[Symbol.asyncIterator](): AsyncGenerator<FxYield<E, ExcludeScope<R>>, ContextType<S>, unknown> {\n const gen = fx[Symbol.asyncIterator]()\n let result = await gen.next()\n while (result.done !== true) {\n const yielded = result.value\n const serviceRequest = asServiceRequest(yielded)\n if (serviceRequest?.key === \"@std/Scope\") {\n // oxlint-disable-next-line no-await-in-loop\n result = await gen.next(scope)\n } else {\n const value = yield yielded as FxYield<E, ExcludeScope<R>>\n // oxlint-disable-next-line no-await-in-loop\n result = await gen.next(value)\n }\n }\n return Context.make(service, result.value)\n },\n } as AsyncFx<ContextType<S>, E, ExcludeScope<R>>\n }\n\n return {\n _tag: \"SyncFx\",\n [FxTypeId]: {\n _A: () => undefined as unknown as ContextType<S>,\n _E: () => undefined as unknown as E,\n _R: () => undefined as unknown as ExcludeScope<R>,\n },\n *[Symbol.iterator](): Generator<FxYield<E, ExcludeScope<R>>, ContextType<S>, unknown> {\n const gen = fx[Symbol.iterator]()\n let result = gen.next()\n while (result.done !== true) {\n const yielded = result.value\n const serviceRequest = asServiceRequest(yielded)\n if (serviceRequest?.key === \"@std/Scope\") {\n result = gen.next(scope)\n } else {\n const value = yield yielded as FxYield<E, ExcludeScope<R>>\n result = gen.next(value)\n }\n }\n return Context.make(service, result.value)\n },\n } as SyncFx<ContextType<S>, E, ExcludeScope<R>>\n },\n })\n}\n\n// ============================================================================\n// Layer Composition\n// ============================================================================\n\n/**\n * Provide dependencies to a layer and merge outputs.\n * Sync is preserved only if both the deps layer and the consuming layer are sync.\n *\n * @example\n * ```ts\n * import { Fx, Layer, Provide, Service } from \"@nicolastoulemont/std\"\n *\n * const Port = Service.tag<number>(\"Port\")\n * const Server = Service.tag<{ readonly port: number }>(\"Server\")\n * const portLayer = Layer.ok(Port, 3000)\n * const serverLayer = Layer.fx(Server)(Fx.gen(function* () {\n * const port = yield* Port\n * return { port }\n * }))\n * const provided = Layer.provide(portLayer)(serverLayer)\n * const program = Fx.gen(function* () {\n * return (yield* Server).port\n * })\n * const exit = Fx.run(Provide.layer(provided)(program))\n * // => { _tag: \"Ok\", value: 3000 }\n * ```\n */\nfunction layerProvide<DepsROut, DepsE, DepsRIn, DepsSync extends boolean>(\n deps: LayerType<DepsROut, DepsE, DepsRIn, DepsSync>,\n): {\n <ROut, E, RIn extends DepsROut, LayerSync extends boolean>(\n layer: LayerType<ROut, E, RIn, LayerSync>,\n ): LayerType<ROut | DepsROut, E | DepsE, DepsRIn, LayerSync extends true ? DepsSync : false>\n}\nfunction layerProvide<DepsROut, DepsE, DepsRIn>(deps: LayerType<DepsROut, DepsE, DepsRIn>) {\n return <ROut, E, RIn extends DepsROut>(\n layer: LayerType<ROut, E, RIn>,\n ): LayerType<ROut | DepsROut, E | DepsE, DepsRIn> => ({\n _tag: \"Layer\",\n _ROut: undefined as unknown as ROut | DepsROut,\n _E: undefined as unknown as E | DepsE,\n _RIn: undefined as unknown as DepsRIn,\n _Sync: undefined as unknown as boolean,\n build: (memoMap, scope): RunnableFx<ContextType<ROut | DepsROut>, E | DepsE, DepsRIn> => {\n const depsBuildFx = deps.build(memoMap, scope)\n\n if (depsBuildFx._tag === \"AsyncFx\") {\n return {\n _tag: \"AsyncFx\",\n [FxTypeId]: {\n _A: () => undefined as unknown as ContextType<ROut | DepsROut>,\n _E: () => undefined as unknown as E | DepsE,\n _R: () => undefined as unknown as DepsRIn,\n },\n async *[Symbol.asyncIterator](): AsyncGenerator<\n FxYield<E | DepsE, DepsRIn>,\n ContextType<ROut | DepsROut>,\n unknown\n > {\n const depsGen = depsBuildFx[Symbol.asyncIterator]()\n let depsResult = await depsGen.next()\n while (depsResult.done !== true) {\n const value = yield depsResult.value\n // oxlint-disable-next-line no-await-in-loop\n depsResult = await depsGen.next(value)\n }\n const depsCtx = depsResult.value\n\n const layerBuildFx = layer.build(memoMap, scope)\n const layerCtx = yield* withRuntimeStateCommit(layerBuildFx, mergeRuntimeServices(depsCtx)) as RunnableFx<\n ContextType<ROut>,\n E,\n DepsRIn\n >\n return Context.merge(depsCtx, layerCtx)\n },\n } as AsyncFx<ContextType<ROut | DepsROut>, E | DepsE, DepsRIn>\n }\n\n return {\n _tag: \"SyncFx\",\n [FxTypeId]: {\n _A: () => undefined as unknown as ContextType<ROut | DepsROut>,\n _E: () => undefined as unknown as E | DepsE,\n _R: () => undefined as unknown as DepsRIn,\n },\n *[Symbol.iterator](): Generator<FxYield<E | DepsE, DepsRIn>, ContextType<ROut | DepsROut>, unknown> {\n const depsGen = depsBuildFx[Symbol.iterator]()\n let depsResult = depsGen.next()\n while (depsResult.done !== true) {\n const value = yield depsResult.value\n depsResult = depsGen.next(value)\n }\n const depsCtx = depsResult.value\n\n const layerBuildFx = layer.build(memoMap, scope)\n if (layerBuildFx._tag === \"SyncFx\") {\n const layerCtx = yield* withRuntimeStateCommit(layerBuildFx, mergeRuntimeServices(depsCtx)) as SyncFx<\n ContextType<ROut>,\n E,\n DepsRIn\n >\n return Context.merge(depsCtx, layerCtx)\n }\n throw new Error(\"Cannot use async layer in sync context\")\n },\n } as SyncFx<ContextType<ROut | DepsROut>, E | DepsE, DepsRIn>\n },\n })\n}\n\n/**\n * Merge multiple layers with automatic dependency resolution.\n * The merged layer is sync only if ALL input layers are sync.\n *\n * @example\n * ```ts\n * import { Fx, Layer, Provide, Service } from \"@nicolastoulemont/std\"\n *\n * const Logger = Service.tag<{ readonly prefix: string }>(\"Logger\")\n * const Clock = Service.tag<{ readonly now: () => number }>(\"Clock\")\n * const merged = Layer.merge(\n * Layer.ok(Logger, { prefix: \"dev\" }),\n * Layer.ok(Clock, { now: () => 123 }),\n * )\n * const program = Fx.gen(function* () {\n * const logger = yield* Logger\n * const clock = yield* Clock\n * return `${logger.prefix}:${clock.now()}`\n * })\n * const exit = Fx.run(Provide.layer(merged)(program))\n * // => { _tag: \"Ok\", value: \"dev:123\" }\n * ```\n */\nfunction layerMerge<L extends LayerType<unknown, unknown, unknown>[]>(\n ...layers: L\n): LayerType<MergeROut<L>, MergeError<L>, UnprovidedDeps<L>, AllSync<L>>\nfunction layerMerge<L extends LayerType<unknown, unknown, unknown>[]>(\n ...layers: L\n): LayerType<MergeROut<L>, MergeError<L>, UnprovidedDeps<L>> {\n return {\n _tag: \"Layer\",\n _ROut: undefined as unknown as MergeROut<L>,\n _E: undefined as unknown as MergeError<L>,\n _RIn: undefined as unknown as UnprovidedDeps<L>,\n _Sync: undefined as unknown as boolean,\n build: (memoMap, scope): RunnableFx<ContextType<MergeROut<L>>, MergeError<L>, UnprovidedDeps<L>> => {\n const hasAsync = layers.some((l) => l.build(memoMap, scope)._tag === \"AsyncFx\")\n\n if (hasAsync) {\n return {\n _tag: \"AsyncFx\",\n [FxTypeId]: {\n _A: () => undefined as unknown as ContextType<MergeROut<L>>,\n _E: () => undefined as unknown as MergeError<L>,\n _R: () => undefined as unknown as UnprovidedDeps<L>,\n },\n async *[Symbol.asyncIterator](): AsyncGenerator<\n FxYield<MergeError<L>, UnprovidedDeps<L>>,\n ContextType<MergeROut<L>>,\n unknown\n > {\n let ctx = Context.empty() as ContextType<unknown>\n for (const layer of layers) {\n const buildFx = layer.build(memoMap, scope)\n const layerCtx = yield* withRuntimeStateCommit(buildFx, mergeRuntimeServices(ctx)) as RunnableFx<\n ContextType<unknown>,\n MergeError<L>,\n UnprovidedDeps<L>\n >\n ctx = Context.merge(ctx, layerCtx)\n }\n return ctx as ContextType<MergeROut<L>>\n },\n } as AsyncFx<ContextType<MergeROut<L>>, MergeError<L>, UnprovidedDeps<L>>\n }\n\n return {\n _tag: \"SyncFx\",\n [FxTypeId]: {\n _A: () => undefined as unknown as ContextType<MergeROut<L>>,\n _E: () => undefined as unknown as MergeError<L>,\n _R: () => undefined as unknown as UnprovidedDeps<L>,\n },\n *[Symbol.iterator](): Generator<FxYield<MergeError<L>, UnprovidedDeps<L>>, ContextType<MergeROut<L>>, unknown> {\n let ctx = Context.empty() as ContextType<unknown>\n for (const layer of layers) {\n const buildFx = layer.build(memoMap, scope)\n if (buildFx._tag !== \"SyncFx\") {\n throw new Error(\"Expected sync layer in sync context\")\n }\n const layerCtx = yield* withRuntimeStateCommit(buildFx, mergeRuntimeServices(ctx)) as SyncFx<\n ContextType<unknown>,\n MergeError<L>,\n UnprovidedDeps<L>\n >\n ctx = Context.merge(ctx, layerCtx)\n }\n return ctx as ContextType<MergeROut<L>>\n },\n } as SyncFx<ContextType<MergeROut<L>>, MergeError<L>, UnprovidedDeps<L>>\n },\n }\n}\n\n/**\n * Create a successful no-dependency layer from a plain service value.\n *\n * @example\n * ```ts\n * import { Fx, Layer, Provide, Service } from \"@nicolastoulemont/std\"\n *\n * const Port = Service.tag<number>(\"Port\")\n * const program = Fx.gen(function* () {\n * return yield* Port\n * })\n * const exit = Fx.run(Provide.layer(Layer.ok(Port, 3000))(program))\n * // => { _tag: \"Ok\", value: 3000 }\n * ```\n */\nexport const ok = layerOk\n\n/**\n * Create a layer that always fails with an error.\n *\n * @example\n * ```ts\n * import { Fx, Layer, Provide } from \"@nicolastoulemont/std\"\n *\n * const program = Fx.gen(function* () {\n * return 1\n * })\n * const exit = Fx.run(Provide.layer(Layer.err(\"missing-config\"))(program))\n * // => { _tag: \"Err\", error: \"missing-config\" }\n * ```\n */\nexport const err = layerErr\n\n/**\n * Create a layer from an effectful service builder.\n *\n * @example\n * ```ts\n * import { Fx, Layer, Provide, Service } from \"@nicolastoulemont/std\"\n *\n * const Port = Service.tag<number>(\"Port\")\n * const portLayer = Layer.fx(Port)(Fx.gen(function* () {\n * return 3000\n * }))\n * const program = Fx.gen(function* () {\n * return yield* Port\n * })\n * const exit = Fx.run(Provide.layer(portLayer)(program))\n * // => { _tag: \"Ok\", value: 3000 }\n * ```\n */\nexport const fx = layerFx\n\n/**\n * Create a scoped layer that registers resource finalizers.\n *\n * @example\n * ```ts\n * import { Fx, Layer, Provide, Scope, Service } from \"@nicolastoulemont/std\"\n *\n * const Resource = Service.tag<{ readonly id: number }>(\"Resource\")\n * const ScopeTag = Service.tag<Scope.ScopeService>(\"@std/Scope\")\n * let finalized = 0\n *\n * const resourceLayer = Layer.scoped(Resource)(Fx.gen(function* () {\n * const scope = yield* ScopeTag\n * yield* scope.addFinalizer(() =>\n * Fx.gen(function* () {\n * finalized += 1\n * }),\n * )\n * return { id: 1 }\n * }))\n * const program = Fx.gen(function* () {\n * return (yield* Resource).id\n * })\n * const exit = Fx.run(Provide.layer(resourceLayer)(program))\n * // => { _tag: \"Ok\", value: 1 }\n * ```\n */\nexport const scoped = layerScoped\n\n/**\n * Provide one layer to another, satisfying dependencies.\n *\n * @example\n * ```ts\n * import { Fx, Layer, Provide, Service } from \"@nicolastoulemont/std\"\n *\n * const Port = Service.tag<number>(\"Port\")\n * const Server = Service.tag<{ readonly port: number }>(\"Server\")\n * const portLayer = Layer.ok(Port, 3000)\n * const serverLayer = Layer.fx(Server)(Fx.gen(function* () {\n * const port = yield* Port\n * return { port }\n * }))\n * const provided = Layer.provide(portLayer)(serverLayer)\n * const program = Fx.gen(function* () {\n * return (yield* Server).port\n * })\n * const exit = Fx.run(Provide.layer(provided)(program))\n * // => { _tag: \"Ok\", value: 3000 }\n * ```\n */\nexport const provide = layerProvide\n\n/**\n * Merge multiple layers into a single composite layer.\n *\n * @example\n * ```ts\n * import { Fx, Layer, Provide, Service } from \"@nicolastoulemont/std\"\n *\n * const Logger = Service.tag<{ readonly prefix: string }>(\"Logger\")\n * const Clock = Service.tag<{ readonly now: () => number }>(\"Clock\")\n * const merged = Layer.merge(\n * Layer.ok(Logger, { prefix: \"dev\" }),\n * Layer.ok(Clock, { now: () => 123 }),\n * )\n * const program = Fx.gen(function* () {\n * const logger = yield* Logger\n * const clock = yield* Clock\n * return `${logger.prefix}:${clock.now()}`\n * })\n * const exit = Fx.run(Provide.layer(merged)(program))\n * // => { _tag: \"Ok\", value: \"dev:123\" }\n * ```\n */\nexport const merge = layerMerge\n\n/* oxlint-enable no-unsafe-type-assertion */\n"],"mappings":"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"}
@@ -1,6 +1,6 @@
1
- import { f as RunnableFx, m as SyncFx } from "./fx.types-BdN1EWxr.mjs";
2
- import { t as Context } from "./context-B2dWloPl.mjs";
3
- import { n as ScopeService } from "./scope-CuM3CzwG.mjs";
1
+ import { f as RunnableFx, m as SyncFx } from "./fx.types-CpFKa-Jj.mjs";
2
+ import { t as Context } from "./context-C9UX6GJo.mjs";
3
+ import { n as ScopeService } from "./scope-BQEFiS_2.mjs";
4
4
 
5
5
  //#region src/provide/memo-map.d.ts
6
6
 
@@ -97,4 +97,4 @@ type MergeRIn<L extends readonly Layer<unknown, unknown, unknown>[]> = L[number]
97
97
  type AllSync<L extends readonly Layer<unknown, unknown, unknown>[]> = L extends readonly [] ? true : L extends readonly [Layer<unknown, unknown, unknown, infer S>, ...infer Rest] ? S extends true ? Rest extends readonly Layer<unknown, unknown, unknown>[] ? AllSync<Rest> : false : false : false;
98
98
  //#endregion
99
99
  export { UnprovidedDeps as a, MergeROut as i, Layer as n, MergeError as r, AllSync as t };
100
- //# sourceMappingURL=layer.types-BB0MrvLg.d.mts.map
100
+ //# sourceMappingURL=layer.types-smjitsoN.d.mts.map
@@ -1 +1 @@
1
- {"version":3,"file":"layer.types-BB0MrvLg.d.mts","names":[],"sources":["../src/provide/memo-map.ts","../src/layer/layer.types.ts"],"sourcesContent":[],"mappings":";;;;;;;AAmCA;;;;;;;;;;;;;;;;ACnBA;;AAKe,cDcF,OAAA,CCdE;EAEE,QAAA,KAAA;EAEC;;;;;;;;EAaO,UAAA,CAAA,IAAA,EAAA,CAAA,EAAA,GAAA,CAAA,CAAA,KAAA,EDgBd,KChBc,CDgBR,IChBQ,EDgBF,CChBE,EDgBC,GChBD,CAAA,EAAA,KAAA,EDiBd,YCjBc,EAAA,IAAA,EDkBf,OClBe,CDkBP,GClBO,CAAA,CAAA,EDmBpB,UCnBoB,CDmBT,OCnBS,CDmBD,ICnBC,CAAA,EDmBM,CCnBN,CAAA;EAAmD;;;;EAAnB,KAAA,CAAA,CAAA,EAAA,IAAA;EAAU;AAUnE;;EACE,IAAA,IAAA,CAAA,CAAA,EAAA,MAAA;;;;;ADdF;;;;;;AAqBkB,KCxCN,KDwCM,CAAA,IAAA,EAAA,IAAA,KAAA,EAAA,MAAA,KAAA,EAAA,aAAA,OAAA,GAAA,OAAA,CAAA,GAAA;EAAR,SAAA,IAAA,EAAA,OAAA;EACc;EAAR,SAAA,KAAA,ECtCE,IDsCF;EAAe;EAA1B,SAAA,EAAA,ECpCU,CDoCV;EAAU;iBClCE;;kBAEC;EATN;;;;;;;;EAsB4B,KAAA,CAAA,OAAA,EAF3B,OAE2B,EAAA,KAAA,EAD7B,YAC6B,CAAA,EAAnC,IAAmC,SAAA,IAAA,GAAf,MAAe,CAAR,OAAQ,CAAA,IAAA,CAAA,EAAO,CAAP,EAAU,GAAV,CAAA,GAAiB,UAAjB,CAA4B,OAA5B,CAAoC,IAApC,CAAA,EAA2C,CAA3C,EAA8C,GAA9C,CAAA;CAAR;;;;AAA4C,KAUhE,SAVgE,CAAA,UAAA,SAUnC,KAVmC,CAAA,OAAA,EAAA,OAAA,EAAA,OAAA,CAAA,EAAA,CAAA,GAW1E,CAX0E,CAAA,MAAA,CAAA,SAWxD,KAXwD,CAAA,KAAA,KAAA,EAAA,OAAA,EAAA,OAAA,CAAA,GAAA,IAAA,GAAA,KAAA;;;;AAAnB,KAgB7C,UAhB6C,CAAA,UAAA,SAgBf,KAhBe,CAAA,OAAA,EAAA,OAAA,EAAA,OAAA,CAAA,EAAA,CAAA,GAiBvD,CAjBuD,CAAA,MAAA,CAAA,SAiBrC,KAjBqC,CAAA,OAAA,EAAA,KAAA,EAAA,EAAA,OAAA,CAAA,GAAA,CAAA,GAAA,KAAA;;AAUzD;;;AACoB,KAYR,cAZQ,CAAA,UAAA,SAY0B,KAZ1B,CAAA,OAAA,EAAA,OAAA,EAAA,OAAA,CAAA,EAAA,CAAA,GAYgE,OAZhE,CAYwE,QAZxE,CAYiF,CAZjF,CAAA,EAYqF,SAZrF,CAY+F,CAZ/F,CAAA,CAAA;;AAKpB;;KAYK,QAXH,CAAA,UAAA,SAW+B,KAX/B,CAAA,OAAA,EAAA,OAAA,EAAA,OAAA,CAAA,EAAA,CAAA,GAYA,CAZA,CAAA,MAAA,CAAA,SAYkB,KAZlB,CAAA,OAAA,EAAA,OAAA,EAAA,KAAA,IAAA,CAAA,GAAA,GAAA,GAAA,KAAA;;;AAMF;;AAAqG,KAYzF,OAZyF,CAAA,UAAA,SAY9D,KAZ8D,CAAA,OAAA,EAAA,OAAA,EAAA,OAAA,CAAA,EAAA,CAAA,GAYxB,CAZwB,SAAA,SAAA,EAAA,GAAA,IAAA,GAcjG,CAdiG,SAAA,SAAA,CAc7E,KAd6E,CAAA,OAAA,EAAA,OAAA,EAAA,OAAA,EAAA,KAAA,EAAA,CAAA,EAAA,GAAA,KAAA,KAAA,CAAA,GAAA,CAAA,SAAA,IAAA,GAAA,IAAA,SAAA,SAgBvE,KAhBuE,CAAA,OAAA,EAAA,OAAA,EAAA,OAAA,CAAA,EAAA,GAiB3F,OAjB2F,CAiBnF,IAjBmF,CAAA,GAAA,KAAA,GAAA,KAAA,GAAA,KAAA"}
1
+ {"version":3,"file":"layer.types-smjitsoN.d.mts","names":[],"sources":["../src/provide/memo-map.ts","../src/layer/layer.types.ts"],"sourcesContent":[],"mappings":";;;;;;;AAmCA;;;;;;;;;;;;;;;;ACnBA;;AAKe,cDcF,OAAA,CCdE;EAEE,QAAA,KAAA;EAEC;;;;;;;;EAaO,UAAA,CAAA,IAAA,EAAA,CAAA,EAAA,GAAA,CAAA,CAAA,KAAA,EDgBd,KChBc,CDgBR,IChBQ,EDgBF,CChBE,EDgBC,GChBD,CAAA,EAAA,KAAA,EDiBd,YCjBc,EAAA,IAAA,EDkBf,OClBe,CDkBP,GClBO,CAAA,CAAA,EDmBpB,UCnBoB,CDmBT,OCnBS,CDmBD,ICnBC,CAAA,EDmBM,CCnBN,CAAA;EAAmD;;;;EAAnB,KAAA,CAAA,CAAA,EAAA,IAAA;EAAU;AAUnE;;EACE,IAAA,IAAA,CAAA,CAAA,EAAA,MAAA;;;;;ADdF;;;;;;AAqBkB,KCxCN,KDwCM,CAAA,IAAA,EAAA,IAAA,KAAA,EAAA,MAAA,KAAA,EAAA,aAAA,OAAA,GAAA,OAAA,CAAA,GAAA;EAAR,SAAA,IAAA,EAAA,OAAA;EACc;EAAR,SAAA,KAAA,ECtCE,IDsCF;EAAe;EAA1B,SAAA,EAAA,ECpCU,CDoCV;EAAU;iBClCE;;kBAEC;EATN;;;;;;;;EAsB4B,KAAA,CAAA,OAAA,EAF3B,OAE2B,EAAA,KAAA,EAD7B,YAC6B,CAAA,EAAnC,IAAmC,SAAA,IAAA,GAAf,MAAe,CAAR,OAAQ,CAAA,IAAA,CAAA,EAAO,CAAP,EAAU,GAAV,CAAA,GAAiB,UAAjB,CAA4B,OAA5B,CAAoC,IAApC,CAAA,EAA2C,CAA3C,EAA8C,GAA9C,CAAA;CAAR;;;;AAA4C,KAUhE,SAVgE,CAAA,UAAA,SAUnC,KAVmC,CAAA,OAAA,EAAA,OAAA,EAAA,OAAA,CAAA,EAAA,CAAA,GAW1E,CAX0E,CAAA,MAAA,CAAA,SAWxD,KAXwD,CAAA,KAAA,KAAA,EAAA,OAAA,EAAA,OAAA,CAAA,GAAA,IAAA,GAAA,KAAA;;;;AAAnB,KAgB7C,UAhB6C,CAAA,UAAA,SAgBf,KAhBe,CAAA,OAAA,EAAA,OAAA,EAAA,OAAA,CAAA,EAAA,CAAA,GAiBvD,CAjBuD,CAAA,MAAA,CAAA,SAiBrC,KAjBqC,CAAA,OAAA,EAAA,KAAA,EAAA,EAAA,OAAA,CAAA,GAAA,CAAA,GAAA,KAAA;;AAUzD;;;AACoB,KAYR,cAZQ,CAAA,UAAA,SAY0B,KAZ1B,CAAA,OAAA,EAAA,OAAA,EAAA,OAAA,CAAA,EAAA,CAAA,GAYgE,OAZhE,CAYwE,QAZxE,CAYiF,CAZjF,CAAA,EAYqF,SAZrF,CAY+F,CAZ/F,CAAA,CAAA;;AAKpB;;KAYK,QAXH,CAAA,UAAA,SAW+B,KAX/B,CAAA,OAAA,EAAA,OAAA,EAAA,OAAA,CAAA,EAAA,CAAA,GAYA,CAZA,CAAA,MAAA,CAAA,SAYkB,KAZlB,CAAA,OAAA,EAAA,OAAA,EAAA,KAAA,IAAA,CAAA,GAAA,GAAA,GAAA,KAAA;;;AAMF;;AAAqG,KAYzF,OAZyF,CAAA,UAAA,SAY9D,KAZ8D,CAAA,OAAA,EAAA,OAAA,EAAA,OAAA,CAAA,EAAA,CAAA,GAYxB,CAZwB,SAAA,SAAA,EAAA,GAAA,IAAA,GAcjG,CAdiG,SAAA,SAAA,CAc7E,KAd6E,CAAA,OAAA,EAAA,OAAA,EAAA,OAAA,EAAA,KAAA,EAAA,CAAA,EAAA,GAAA,KAAA,KAAA,CAAA,GAAA,CAAA,SAAA,IAAA,GAAA,IAAA,SAAA,SAgBvE,KAhBuE,CAAA,OAAA,EAAA,OAAA,EAAA,OAAA,CAAA,EAAA,GAiB3F,OAjB2F,CAiBnF,IAjBmF,CAAA,GAAA,KAAA,GAAA,KAAA,GAAA,KAAA"}
@@ -0,0 +1,2 @@
1
+ import { t as log_d_exports } from "../index-BfQSp6pV.mjs";
2
+ export { log_d_exports as Log };
@@ -0,0 +1 @@
1
+ import{t as e}from"../log-Bh8G5umo.mjs";export{e as Log};
@@ -0,0 +1,2 @@
1
+ import{t as e}from"./chunk-6rpU2rUb.mjs";import{t}from"./fx.types-Bg-Mmdm5.mjs";import{n}from"./context-7oKePrBY.mjs";import{h as r,i,m as a}from"./fx.runtime-B2_rL7h_.mjs";var o=e({console:()=>g,context:()=>p,emit:()=>d,json:()=>_,layer:()=>v,withFields:()=>m,withSpan:()=>h});const s=e=>typeof e==`object`&&!!e&&`log`in e&&typeof e.log==`function`,c=e=>typeof e==`object`&&!!e&&`context`in e&&`event`in e,l=e=>e.filter(s),u=e=>{if(c(e))return{traceId:e.context.traceId,spanId:e.context.spanId,spanName:e.name}},d=(e,n,r)=>({_tag:`SyncFx`,[t]:{_A:()=>void 0,_E:()=>void 0,_R:()=>void 0},*[Symbol.iterator](){let t=yield*i(),a=Date.now(),o={timestamp:new Date(a),level:e,message:n,fields:{...t.logFields,...r},logSpans:t.logSpans.map(e=>({label:e.label,elapsedMs:a-e.startedAt})),trace:u(t.currentSpan),fiberId:t.fiberId};c(t.currentSpan)&&t.currentSpan.event(`log.${e}`,{message:n,...o.fields});for(let e of l(t.loggers))try{e.log(o)}catch{}}}),f=e=>({debug:(t,n)=>d(`debug`,t,{...e,...n}),info:(t,n)=>d(`info`,t,{...e,...n}),warn:(t,n)=>d(`warn`,t,{...e,...n}),error:(t,n)=>d(`error`,t,{...e,...n})}),p=(e,n)=>({_tag:`SyncFx`,[t]:{_A:()=>void 0,_E:()=>void 0,_R:()=>void 0},*[Symbol.iterator](){return yield*a(t=>({...t,logFields:{...t.logFields,...e},logSpans:n?.logSpan===void 0?t.logSpans:[...t.logSpans,{label:n.logSpan,startedAt:Date.now()}]})),f(e)}}),m=e=>t=>r(t,t=>({...t,logFields:{...t.logFields,...e}})),h=e=>t=>r(t,t=>({...t,logSpans:[...t.logSpans,{label:e,startedAt:Date.now()}]})),g=()=>({log:e=>{globalThis.console[e.level](e.message,e.fields)}}),_=()=>({log:e=>{globalThis.console.log(JSON.stringify(e))}}),v=e=>({_tag:`Layer`,_ROut:void 0,_E:void 0,_RIn:void 0,_Sync:void 0,build:()=>({_tag:`SyncFx`,[t]:{_A:()=>void 0,_E:()=>void 0,_R:()=>void 0},*[Symbol.iterator](){let t=Array.isArray(e)?e:[e];return yield*a(e=>({...e,loggers:[...e.loggers,...t]})),n()}})});export{o as t};
2
+ //# sourceMappingURL=log-Bh8G5umo.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"log-Bh8G5umo.mjs","names":["Context.empty"],"sources":["../src/log/log.ts"],"sourcesContent":["/**\n * Runtime-local logging helpers for `Fx` programs.\n *\n * Log context is execution state, not a service requirement. Install logger\n * backends with `Log.layer`, add contextual fields with `Log.context` or\n * `Log.withFields`, and emit events with `Log.emit` or the contextual logger.\n *\n * @example\n * ```ts\n * import { Fx, Log, Provide } from \"@nicolastoulemont/std\"\n *\n * const events: Log.Event[] = []\n * const program = Provide.layer(Log.layer({ log: (event) => events.push(event) }))(\n * Fx.gen(function* () {\n * const log = yield* Log.context({ requestId: \"req_1\" })\n * yield* log.info(\"request received\")\n * return \"ok\"\n * }),\n * )\n *\n * const exit = Fx.run(program)\n * // => { _tag: \"Ok\", value: \"ok\" }\n * ```\n *\n * @module\n */\nimport * as Context from \"../context/context\"\nimport { getRuntimeState, updateRuntimeState, withRuntimeState } from \"../fx/fx.runtime\"\nimport { FxTypeId } from \"../fx/fx.types\"\nimport type { FxYield, RunnableFx, SyncFx } from \"../fx/fx.types\"\nimport type { Layer } from \"../layer/layer.types\"\nimport type { Span } from \"../trace/trace\"\n\n/* oxlint-disable no-unsafe-type-assertion -- Log reads typed values out of internal runtime state slots. */\n\n/**\n * Supported log event levels.\n *\n * @example\n * ```ts\n * import type { Log } from \"@nicolastoulemont/std\"\n *\n * const level: Log.Level = \"info\"\n * ```\n */\nexport type Level = \"debug\" | \"info\" | \"warn\" | \"error\"\n\n/**\n * Structured fields attached to log events.\n *\n * @example\n * ```ts\n * import type { Log } from \"@nicolastoulemont/std\"\n *\n * const fields: Log.Fields = { requestId: \"req_1\" }\n * ```\n */\nexport type Fields = Record<string, unknown>\n\n/**\n * Concrete event delivered to installed logger backends.\n *\n * Events include merged contextual fields, active log spans, trace correlation\n * when a current span exists, and the current fiber id.\n *\n * @example\n * ```ts\n * import type { Log } from \"@nicolastoulemont/std\"\n *\n * const logger: Log.Logger = {\n * log: (event) => {\n * globalThis.console.log(event.level, event.message, event.fields)\n * },\n * }\n * ```\n */\nexport type Event = {\n readonly timestamp: Date\n readonly level: Level\n readonly message: string\n readonly fields: Fields\n readonly logSpans: ReadonlyArray<{\n readonly label: string\n readonly elapsedMs: number\n }>\n readonly trace:\n | {\n readonly traceId: string\n readonly spanId: string\n readonly spanName: string\n }\n | undefined\n readonly fiberId: number | undefined\n}\n\n/**\n * Logger backend installed through `Log.layer`.\n *\n * @example\n * ```ts\n * import type { Log } from \"@nicolastoulemont/std\"\n *\n * const events: Log.Event[] = []\n * const logger: Log.Logger = { log: (event) => events.push(event) }\n * ```\n */\nexport type Logger = {\n readonly log: (event: Event) => void\n}\n\n/**\n * Logger returned by `Log.context`.\n *\n * @example\n * ```ts\n * import { Fx, Log } from \"@nicolastoulemont/std\"\n *\n * const program = Fx.gen(function* () {\n * const log = yield* Log.context({ requestId: \"req_1\" })\n * yield* log.info(\"request received\")\n * })\n * ```\n */\nexport type ContextualLogger = {\n readonly debug: (message: string, fields?: Fields) => SyncFx<void>\n readonly info: (message: string, fields?: Fields) => SyncFx<void>\n readonly warn: (message: string, fields?: Fields) => SyncFx<void>\n readonly error: (message: string, fields?: Fields) => SyncFx<void>\n}\n\ntype LogContextOptions = {\n readonly logSpan?: string\n}\n\nconst isLogger = (value: unknown): value is Logger =>\n typeof value === \"object\" && value !== null && \"log\" in value && typeof value.log === \"function\"\n\nconst isSpan = (value: unknown): value is Span =>\n typeof value === \"object\" && value !== null && \"context\" in value && \"event\" in value\n\nconst runtimeLoggers = (loggers: ReadonlyArray<unknown>): ReadonlyArray<Logger> => loggers.filter(isLogger)\n\nconst runtimeTrace = (span: unknown): Event[\"trace\"] => {\n if (!isSpan(span)) {\n return undefined\n }\n\n return {\n traceId: span.context.traceId,\n spanId: span.context.spanId,\n spanName: span.name,\n }\n}\n\n/**\n * Emit one log event at the given level.\n *\n * The event is delivered to every logger installed in the current runtime state.\n * Logger failures are swallowed so logging cannot fail the user program.\n *\n * @example\n * ```ts\n * import { Fx, Log, Provide } from \"@nicolastoulemont/std\"\n *\n * const program = Provide.layer(Log.layer(Log.console()))(\n * Fx.gen(function* () {\n * yield* Log.emit(\"info\", \"request received\", { route: \"/orders\" })\n * return \"ok\"\n * }),\n * )\n *\n * const exit = Fx.run(program)\n * // => { _tag: \"Ok\", value: \"ok\" }\n * ```\n */\nexport const emit = (level: Level, message: string, fields?: Fields): SyncFx<void> => ({\n _tag: \"SyncFx\",\n [FxTypeId]: {\n _A: () => undefined,\n _E: () => undefined as never,\n _R: () => undefined as never,\n },\n *[Symbol.iterator](): Generator<FxYield<never, never>, void, unknown> {\n const state = yield* getRuntimeState()\n const now = Date.now()\n const event: Event = {\n timestamp: new Date(now),\n level,\n message,\n fields: {\n ...state.logFields,\n ...fields,\n },\n logSpans: state.logSpans.map((span) => ({\n label: span.label,\n elapsedMs: now - span.startedAt,\n })),\n trace: runtimeTrace(state.currentSpan),\n fiberId: state.fiberId,\n }\n\n if (isSpan(state.currentSpan)) {\n state.currentSpan.event(`log.${level}`, {\n message,\n ...event.fields,\n })\n }\n\n for (const logger of runtimeLoggers(state.loggers)) {\n try {\n logger.log(event)\n } catch {\n // Logging is best-effort and must not affect the user program.\n }\n }\n },\n})\n\nconst makeContextualLogger = (fields: Fields): ContextualLogger => ({\n debug: (message, callFields) => emit(\"debug\", message, { ...fields, ...callFields }),\n info: (message, callFields) => emit(\"info\", message, { ...fields, ...callFields }),\n warn: (message, callFields) => emit(\"warn\", message, { ...fields, ...callFields }),\n error: (message, callFields) => emit(\"error\", message, { ...fields, ...callFields }),\n})\n\n/**\n * Add log fields to the current runtime state and return a contextual logger.\n *\n * Fields are inherited by nested effects and merged into later log events.\n * Passing `logSpan` also adds elapsed-time decoration to later log events.\n *\n * @example\n * ```ts\n * import { Fx, Log } from \"@nicolastoulemont/std\"\n *\n * const program = Fx.gen(function* () {\n * const log = yield* Log.context({ requestId: \"req_1\" }, { logSpan: \"request\" })\n * yield* log.info(\"loaded user\", { userId: \"user_1\" })\n * return \"ok\"\n * })\n * ```\n */\nexport const context = (fields: Fields, options?: LogContextOptions): SyncFx<ContextualLogger> => ({\n _tag: \"SyncFx\",\n [FxTypeId]: {\n _A: () => undefined as unknown as ContextualLogger,\n _E: () => undefined as never,\n _R: () => undefined as never,\n },\n *[Symbol.iterator](): Generator<FxYield<never, never>, ContextualLogger, unknown> {\n yield* updateRuntimeState((state) => ({\n ...state,\n logFields: {\n ...state.logFields,\n ...fields,\n },\n logSpans:\n options?.logSpan === undefined\n ? state.logSpans\n : [\n ...state.logSpans,\n {\n label: options.logSpan,\n startedAt: Date.now(),\n },\n ],\n }))\n\n return makeContextualLogger(fields)\n },\n})\n\n/**\n * Run an effect with additional log fields.\n *\n * @example\n * ```ts\n * import { Fx, Log } from \"@nicolastoulemont/std\"\n *\n * const program = Log.withFields({ service: \"checkout\" })(\n * Fx.gen(function* () {\n * yield* Log.emit(\"info\", \"started\")\n * return \"ok\"\n * }),\n * )\n * ```\n */\nexport const withFields =\n (fields: Fields) =>\n <A, E, R>(fx: RunnableFx<A, E, R>): RunnableFx<A, E, R> =>\n withRuntimeState(fx, (state) => ({\n ...state,\n logFields: {\n ...state.logFields,\n ...fields,\n },\n })) as RunnableFx<A, E, R>\n\n/**\n * Run an effect with an active log span.\n *\n * Log spans decorate log events with elapsed time. Use `Trace.span` when you\n * need a real tracing span.\n *\n * @example\n * ```ts\n * import { Fx, Log } from \"@nicolastoulemont/std\"\n *\n * const program = Log.withSpan(\"load-user\")(\n * Fx.gen(function* () {\n * yield* Log.emit(\"info\", \"loaded user\")\n * return \"user_1\"\n * }),\n * )\n * ```\n */\nexport const withSpan =\n (label: string) =>\n <A, E, R>(fx: RunnableFx<A, E, R>): RunnableFx<A, E, R> =>\n withRuntimeState(fx, (state) => ({\n ...state,\n logSpans: [\n ...state.logSpans,\n {\n label,\n startedAt: Date.now(),\n },\n ],\n })) as RunnableFx<A, E, R>\n\n/**\n * Create a logger backend that writes events to `globalThis.console`.\n *\n * @example\n * ```ts\n * import { Fx, Log, Provide } from \"@nicolastoulemont/std\"\n *\n * const program = Provide.layer(Log.layer(Log.console()))(\n * Fx.gen(function* () {\n * yield* Log.emit(\"info\", \"hello\")\n * }),\n * )\n * ```\n */\nexport const console = (): Logger => ({\n log: (event) => {\n globalThis.console[event.level](event.message, event.fields)\n },\n})\n\n/**\n * Create a logger backend that writes JSON events to `globalThis.console.log`.\n *\n * @example\n * ```ts\n * import { Fx, Log, Provide } from \"@nicolastoulemont/std\"\n *\n * const program = Provide.layer(Log.layer(Log.json()))(\n * Fx.gen(function* () {\n * yield* Log.emit(\"info\", \"hello\")\n * }),\n * )\n * ```\n */\nexport const json = (): Logger => ({\n log: (event) => {\n globalThis.console.log(JSON.stringify(event))\n },\n})\n\n/**\n * Install one or more logger backends in the current Fx runtime.\n *\n * @example\n * ```ts\n * import { Fx, Log, Provide } from \"@nicolastoulemont/std\"\n *\n * const events: Log.Event[] = []\n * const program = Provide.layer(Log.layer({ log: (event) => events.push(event) }))(\n * Fx.gen(function* () {\n * yield* Log.emit(\"info\", \"stored\")\n * return events.length\n * }),\n * )\n *\n * const exit = Fx.run(program)\n * // => { _tag: \"Ok\", value: 1 }\n * ```\n */\nexport const layer = (loggers: Logger | ReadonlyArray<Logger>): Layer<never, never, never, true> => ({\n _tag: \"Layer\",\n _ROut: undefined as never,\n _E: undefined as never,\n _RIn: undefined as never,\n _Sync: undefined as unknown as true,\n build: (): SyncFx<Context.Context> => ({\n _tag: \"SyncFx\",\n [FxTypeId]: {\n _A: () => undefined as unknown as Context.Context,\n _E: () => undefined as never,\n _R: () => undefined as never,\n },\n *[Symbol.iterator](): Generator<FxYield<never, never>, Context.Context, unknown> {\n const installed: ReadonlyArray<Logger> = Array.isArray(loggers) ? loggers : [loggers]\n yield* updateRuntimeState((state) => ({\n ...state,\n loggers: [...state.loggers, ...installed],\n }))\n return Context.empty()\n },\n }),\n})\n\n/* oxlint-enable no-unsafe-type-assertion */\n"],"mappings":"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"}
@@ -1,2 +1,2 @@
1
- import { t as multithread_d_exports } from "../index-DR7hzXU4.mjs";
1
+ import { t as multithread_d_exports } from "../index-BR6lwlNv.mjs";
2
2
  export { multithread_d_exports as Multithread };
@@ -1 +1 @@
1
- import{t as e}from"../multithread-Cyc8Bz45.mjs";export{e as Multithread};
1
+ import{t as e}from"../multithread-CovZ2ioL.mjs";export{e as Multithread};
@@ -0,0 +1,21 @@
1
+ import{t as e}from"./chunk-6rpU2rUb.mjs";import{t}from"./fx.types-Bg-Mmdm5.mjs";import{i as n,t as r}from"./result-C74pRN2x.mjs";import{n as i}from"./context-7oKePrBY.mjs";import{o as a}from"./fx.runtime-B2_rL7h_.mjs";var o=e({configure:()=>Q,filter:()=>se,firstSuccess:()=>me,flatMap:()=>le,forEach:()=>ae,fx:()=>H,layer:()=>ge,map:()=>K,race:()=>fe,run:()=>R,shutdown:()=>$,task:()=>B});const s=`@nicolastoulemont/std/multithread/cancelled`;let c,l=!1,u;const d=new WeakMap,f=()=>({fiberId:void 0,logFields:{},trace:void 0}),p=e=>typeof e==`object`&&!!e&&`traceId`in e&&typeof e.traceId==`string`&&`spanId`in e&&typeof e.spanId==`string`,m=e=>{if(!(typeof e!=`object`||!e)){if(`context`in e&&p(e.context))return{traceId:e.context.traceId,spanId:e.context.spanId,...e.context.traceFlags===void 0?{}:{traceFlags:e.context.traceFlags}};if(p(e))return{traceId:e.traceId,spanId:e.spanId,...e.traceFlags===void 0?{}:{traceFlags:e.traceFlags}}}},h=e=>({fiberId:e.fiberId,logFields:{...e.logFields},trace:m(e.currentSpan)}),ee=(e,t=`Optional peer dependency "multithreading" is unavailable. Install it to use Multithread APIs.`)=>({_tag:`MultithreadRuntimeUnavailableError`,message:t,cause:e}),te=(e=`Multithread runtime is already initialized and can no longer be configured.`)=>({_tag:`MultithreadRuntimeAlreadyInitializedError`,message:e}),g=(e,t)=>({_tag:`MultithreadWorkerExecutionError`,message:e,cause:t}),_=(e=`Multithread operation was cancelled before completion.`)=>({_tag:`MultithreadCancelledError`,message:e}),v=(e,t)=>({_tag:`MultithreadAllFailedError`,message:e,errors:t}),y=e=>e instanceof Error?e.message:typeof e==`string`?e:void 0,b=e=>{let t=y(e);return t===s||t===`Task aborted`},x=e=>{let t=y(e);return typeof t==`string`&&t.startsWith(`Could not parse coordinates from:`)},S=e=>{if(typeof e!=`object`||!e||!(`_tag`in e))return!1;let t=Reflect.get(e,`_tag`);return t===`Ok`?`value`in e:t===`Err`?`error`in e:!1},C=e=>n(e),w=e=>r(e),T=e=>S(e)?e:C(e),E=(e,t)=>S(e)?e._tag===`Err`?Promise.resolve(w(e.error)):t(e.value).result():t(e),D=(e,t)=>{if(typeof e!=`number`||!Number.isFinite(e))return t;let n=Math.floor(e);return n>0?n:t},O=e=>typeof e==`function`,ne=e=>typeof e==`object`&&!!e,k=e=>ne(e)?e:void 0,A=()=>c===void 0?typeof navigator<`u`&&typeof navigator.hardwareConcurrency==`number`?D(navigator.hardwareConcurrency,4):4:c.maxWorkers,j=()=>typeof SharedArrayBuffer==`function`?new Int32Array(new SharedArrayBuffer(Int32Array.BYTES_PER_ELEMENT)):null,M=()=>{let e=j(),t=new Set,n=!1;return{signal:e,isCancelled:()=>n||e!==null&&Atomics.load(e,0)===1,cancel:()=>{if(n)return;n=!0,e!==null&&(Atomics.store(e,0,1),Atomics.notify(e,0));let r=Array.from(t);t.clear();for(let e of r)try{e()}catch{}},onCancel:e=>{if(n){e();return}t.add(e)}}},N=async()=>{try{return u??=import(`multithreading`),C(await u)}catch(e){return w(ee(e))}},P=async()=>{let e=await N();if(e._tag===`Err`)return e;let t=e.value;if(!l)try{c!==void 0&&t.initRuntime(c),l=!0}catch(e){return w(g(`Failed to initialize multithreading runtime.`,e))}return C(t)},re=e=>{let t=d.get(e);if(t!==void 0)return t;let n=e.toString(),r=Function(`
2
+ return async function (...__args) {
3
+ const __runtime = __args.pop()
4
+ const __signal = __args.pop()
5
+ const __isCancelled = () => __signal !== null && Atomics.load(__signal, 0) === 1
6
+ const __throwIfCancelled = () => {
7
+ if (__isCancelled()) {
8
+ throw new Error(${JSON.stringify(s)})
9
+ }
10
+ }
11
+ const __ctx = {
12
+ signal: __signal,
13
+ runtime: __runtime,
14
+ isCancelled: __isCancelled,
15
+ throwIfCancelled: __throwIfCancelled,
16
+ }
17
+ const __worker = (${n})
18
+ return await __worker(...__args, __ctx)
19
+ }
20
+ `)();return d.set(e,r),r},F=e=>{let n=M(),r,i=(t=f())=>r===void 0?n.isCancelled()?(r=Promise.resolve(w(_())),r):(r=e(n,t).catch(e=>w(g(`Multithread operation failed.`,e))).then(e=>n.isCancelled()?w(_()):e),r):r,o=(e,t)=>i().then(e,t);return{_tag:`MultithreadOp`,[t]:{_A:()=>void 0,_E:()=>void 0,_R:()=>void 0},result:i,abort:()=>{n.cancel()},then:o,async*[Symbol.asyncIterator](){return yield*a(e=>i(h(e)),()=>{n.cancel()})}}},ie=async(e,t,n,r)=>{if(n.isCancelled())return w(_());let i={signal:n.signal,runtime:r,isCancelled:()=>n.isCancelled(),throwIfCancelled:()=>{if(n.isCancelled())throw Error(s)}};try{let r=await e(...t,i);if(n.isCancelled())return w(_());let a=T(r);return a._tag===`Err`?w(a.error):C(a.value)}catch(e){return n.isCancelled()||b(e)?w(_()):w(g(`Multithread worker failed during execution.`,e))}},I=(e,t)=>F(async(n,r)=>{if(n.isCancelled())return w(_());let i=await P();if(i._tag===`Err`)return w(i.error);let a=i.value,o=re(e),s;try{let e=a.move(...t,n.signal,r);s=a.spawn(e,o),n.onCancel(()=>{s?.abort()})}catch(i){return x(i)?ie(e,t,n,r):n.isCancelled()||b(i)?w(_()):w(g(`Failed to start multithread worker.`,i))}try{let e=await s.join();if(n.isCancelled())return w(_());if(!e.ok){let t=e.error??Error(`Multithread worker returned an unknown error.`);return b(t)?w(_()):w(g(`Multithread worker failed during execution.`,t))}let t=T(e.value);return t._tag===`Err`?w(t.error):C(t.value)}catch(e){return n.isCancelled()||b(e)?w(_()):w(g(`Failed to join multithread worker.`,e))}});function L(e,...t){if(!O(e))throw TypeError(`Multithread.run expects a worker function as first argument.`);return I(e,t)}const R=L;function z(e){if(!O(e))throw TypeError(`Multithread.task expects a worker function.`);return(...t)=>I(e,t)}const B=z;function V(e,...n){if(!O(e))throw TypeError(`Multithread.fx expects a worker function as first argument.`);return{_tag:`AsyncFx`,[t]:{_A:()=>void 0,_E:()=>void 0,_R:()=>void 0},async*[Symbol.asyncIterator](){return yield*I(e,n)}}}const H=V,U=(e,t,n,r)=>e.length===0?Promise.resolve(C([])):new Promise(i=>{let a=new Map,o=[],s=0,c=0,l=0,u=!1,d=()=>{for(let e of a.values())e.abort();a.clear()},f=e=>{u||(u=!0,d(),i(e))};r.onCancel(()=>{f(w(_()))});let p=(t,n)=>{(async()=>{try{let r=await n.result();if(--s,a.delete(t),u)return;if(r._tag===`Err`){f(w(r.error));return}if(o[t]=r.value,l+=1,l===e.length){u=!0,i(C(o));return}m()}catch(e){if(--s,a.delete(t),u)return;if(r.isCancelled()||b(e)){f(w(_()));return}f(w(g(`Failed while executing multithread batch.`,e)))}})()},m=()=>{for(;!u&&s<n&&c<e.length;){let n=c;c+=1;let r=t(e[n],n);a.set(n,r),s+=1,p(n,r)}};m()}),W=(e,t,n)=>F(r=>U(e,(e,n)=>I(t,[e,n]),D(n?.parallelism,A()),r));function G(e,t,n){if(typeof e==`function`){let n=k(t);return(t=>E(t,t=>W(t,e,n)))}if(typeof t!=`function`)throw TypeError(`Multithread.map(values, worker, options) requires a worker function.`);return E(e,e=>W(e,t,n))}const K=G,q=(e,t,n)=>F(async r=>{let i=await U(e,(e,n)=>I(t,[e,n]),D(n?.parallelism,A()),r);return i._tag===`Err`?w(i.error):C(void 0)});function J(e,t,n){if(typeof e==`function`){let n=k(t);return(t=>E(t,t=>q(t,e,n)))}if(typeof t!=`function`)throw TypeError(`Multithread.forEach(values, worker, options) requires a worker function.`);return E(e,e=>q(e,t,n))}const ae=J,Y=(e,t,n)=>F(async r=>{let i=await U(e,(e,n)=>I(t,[e,n]),D(n?.parallelism,A()),r);if(i._tag===`Err`)return w(i.error);let a=[];for(let t=0;t<e.length;t+=1)i.value[t]===!0&&a.push(e[t]);return C(a)});function oe(e,t,n){if(typeof e==`function`){let n=k(t);return(t=>E(t,t=>Y(t,e,n)))}if(typeof t!=`function`)throw TypeError(`Multithread.filter(values, worker, options) requires a worker function.`);return E(e,e=>Y(e,t,n))}const se=oe,X=(e,t,n)=>F(async r=>{let i=await U(e,(e,n)=>I(t,[e,n]),D(n?.parallelism,A()),r);if(i._tag===`Err`)return w(i.error);let a=[];for(let e of i.value)a.push(...e);return C(a)});function ce(e,t,n){if(typeof e==`function`){let n=k(t);return(t=>E(t,t=>X(t,e,n)))}if(typeof t!=`function`)throw TypeError(`Multithread.flatMap(values, worker, options) requires a worker function.`);return E(e,e=>X(e,t,n))}const le=ce,ue=e=>F(t=>e.length===0?Promise.resolve(w(v(`Cannot race an empty list of operations.`,[]))):new Promise(n=>{let r=!1,i=()=>{for(let t of e)t.abort()},a=e=>{r||(r=!0,i(),n(e))};t.onCancel(()=>{a(w(_()))});let o=e=>{(async()=>{try{a(await e.result())}catch(e){if(t.isCancelled()||b(e)){a(w(_()));return}a(w(g(`Multithread race failed.`,e)))}})()};for(let t of e)o(t)}));function de(e){return E(e,e=>ue(e))}const fe=de,Z=e=>F(t=>e.length===0?Promise.resolve(w(v(`Cannot select a first success from an empty list of operations.`,[]))):new Promise(n=>{let r=Array.from({length:e.length}),i=e.length,a=!1,o=()=>{for(let t of e)t.abort()},s=e=>{a||(a=!0,o(),n(e))};t.onCancel(()=>{s(w(_()))});let c=(e,n)=>{(async()=>{try{let t=await e.result();if(a)return;if(t._tag===`Ok`){s(C(t.value));return}r[n]=t.error,--i,i===0&&s(w(v(`All multithread operations failed before any success was produced.`,r.filter(e=>e!==void 0))))}catch(e){if(a)return;if(t.isCancelled()||b(e)){s(w(_()));return}r[n]=g(`Multithread operation rejected unexpectedly.`,e),--i,i===0&&s(w(v(`All multithread operations failed before any success was produced.`,r.filter(e=>e!==void 0))))}})()};e.forEach((e,t)=>{c(e,t)})}));function pe(e){return E(e,e=>Z(e))}const me=pe,Q=e=>l?w(te()):(c={maxWorkers:D(e.maxWorkers,1)},C(void 0)),he=e=>{let t=Error(`Failed to shutdown multithread runtime while closing scope.`);return t.cause=e,t},ge=e=>({_tag:`Layer`,_ROut:void 0,_E:void 0,_RIn:void 0,_Sync:void 0,build:(n,r)=>({_tag:`AsyncFx`,[t]:{_A:()=>void 0,_E:()=>void 0,_R:()=>void 0},async*[Symbol.asyncIterator](){let n=Q(e);if(n._tag===`Err`)throw yield n.error,Error(`Unreachable: Fx runtime should short-circuit on yielded Multithread layer errors.`);let a=await P();if(a._tag===`Err`)throw yield a.error,Error(`Unreachable: Fx runtime should short-circuit on yielded Multithread layer errors.`);return yield*r.addFinalizer(()=>({_tag:`AsyncFx`,[t]:{_A:()=>void 0,_E:()=>void 0,_R:()=>void 0},async*[Symbol.asyncIterator](){let e=await $();if(e._tag===`Err`)throw he(e.error)}})),i()}})}),$=async()=>{if(!l)return C(void 0);let e=await N();if(e._tag===`Err`)return l=!1,w(e.error);try{return e.value.shutdown(),C(void 0)}catch(e){return w(g(`Failed to shutdown multithreading runtime.`,e))}finally{l=!1}};export{o as t};
21
+ //# sourceMappingURL=multithread-CovZ2ioL.mjs.map