effect 3.13.2 → 3.13.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (184) hide show
  1. package/dist/cjs/FiberHandle.js +5 -3
  2. package/dist/cjs/FiberHandle.js.map +1 -1
  3. package/dist/cjs/FiberMap.js +5 -3
  4. package/dist/cjs/FiberMap.js.map +1 -1
  5. package/dist/cjs/FiberSet.js +6 -3
  6. package/dist/cjs/FiberSet.js.map +1 -1
  7. package/dist/cjs/JSONSchema.js +7 -7
  8. package/dist/cjs/JSONSchema.js.map +1 -1
  9. package/dist/cjs/Option.js +3 -15
  10. package/dist/cjs/Option.js.map +1 -1
  11. package/dist/cjs/ParseResult.js +1 -1
  12. package/dist/cjs/ParseResult.js.map +1 -1
  13. package/dist/cjs/Schema.js +593 -522
  14. package/dist/cjs/Schema.js.map +1 -1
  15. package/dist/cjs/TRef.js.map +1 -1
  16. package/dist/cjs/internal/fiberRuntime.js +4 -5
  17. package/dist/cjs/internal/fiberRuntime.js.map +1 -1
  18. package/dist/cjs/internal/stm/core.js +5 -5
  19. package/dist/cjs/internal/stm/core.js.map +1 -1
  20. package/dist/cjs/internal/stm/entry.js.map +1 -0
  21. package/dist/cjs/internal/stm/journal.js.map +1 -0
  22. package/dist/cjs/internal/stm/stm.js +2 -2
  23. package/dist/cjs/internal/stm/stm.js.map +1 -1
  24. package/dist/cjs/internal/stm/{stm/stmState.js → stmState.js} +7 -7
  25. package/dist/cjs/internal/stm/stmState.js.map +1 -0
  26. package/dist/cjs/internal/stm/{stm/tExit.js → tExit.js} +5 -5
  27. package/dist/cjs/internal/stm/tExit.js.map +1 -0
  28. package/dist/cjs/internal/stm/tMap.js.map +1 -1
  29. package/dist/cjs/internal/stm/tRef.js +2 -2
  30. package/dist/cjs/internal/stm/tRef.js.map +1 -1
  31. package/dist/cjs/internal/stm/{stm/tryCommit.js → tryCommit.js} +1 -1
  32. package/dist/cjs/internal/stm/tryCommit.js.map +1 -0
  33. package/dist/cjs/internal/stm/txnId.js.map +1 -0
  34. package/dist/cjs/internal/stm/versioned.js.map +1 -0
  35. package/dist/cjs/internal/version.js +1 -1
  36. package/dist/dts/Array.d.ts +6 -6
  37. package/dist/dts/Array.d.ts.map +1 -1
  38. package/dist/dts/Context.d.ts +1 -1
  39. package/dist/dts/Context.d.ts.map +1 -1
  40. package/dist/dts/FiberHandle.d.ts.map +1 -1
  41. package/dist/dts/FiberMap.d.ts.map +1 -1
  42. package/dist/dts/FiberSet.d.ts.map +1 -1
  43. package/dist/dts/Option.d.ts +3 -42
  44. package/dist/dts/Option.d.ts.map +1 -1
  45. package/dist/dts/ParseResult.d.ts.map +1 -1
  46. package/dist/dts/Schema.d.ts +394 -271
  47. package/dist/dts/Schema.d.ts.map +1 -1
  48. package/dist/dts/internal/stm/entry.d.ts.map +1 -0
  49. package/dist/dts/internal/stm/journal.d.ts.map +1 -0
  50. package/dist/dts/internal/stm/stmState.d.ts.map +1 -0
  51. package/dist/dts/internal/stm/tExit.d.ts.map +1 -0
  52. package/dist/dts/internal/stm/tryCommit.d.ts.map +1 -0
  53. package/dist/dts/internal/stm/txnId.d.ts.map +1 -0
  54. package/dist/dts/internal/stm/versioned.d.ts.map +1 -0
  55. package/dist/esm/FiberHandle.js +5 -3
  56. package/dist/esm/FiberHandle.js.map +1 -1
  57. package/dist/esm/FiberMap.js +5 -3
  58. package/dist/esm/FiberMap.js.map +1 -1
  59. package/dist/esm/FiberSet.js +6 -3
  60. package/dist/esm/FiberSet.js.map +1 -1
  61. package/dist/esm/JSONSchema.js +7 -7
  62. package/dist/esm/JSONSchema.js.map +1 -1
  63. package/dist/esm/Option.js +3 -15
  64. package/dist/esm/Option.js.map +1 -1
  65. package/dist/esm/ParseResult.js +1 -1
  66. package/dist/esm/ParseResult.js.map +1 -1
  67. package/dist/esm/Schema.js +538 -490
  68. package/dist/esm/Schema.js.map +1 -1
  69. package/dist/esm/TRef.js.map +1 -1
  70. package/dist/esm/internal/fiberRuntime.js +4 -5
  71. package/dist/esm/internal/fiberRuntime.js.map +1 -1
  72. package/dist/esm/internal/stm/core.js +5 -5
  73. package/dist/esm/internal/stm/core.js.map +1 -1
  74. package/dist/esm/internal/stm/entry.js.map +1 -0
  75. package/dist/esm/internal/stm/journal.js.map +1 -0
  76. package/dist/esm/internal/stm/stm.js +2 -2
  77. package/dist/esm/internal/stm/stm.js.map +1 -1
  78. package/dist/esm/internal/stm/{stm/stmState.js → stmState.js} +7 -7
  79. package/dist/esm/internal/stm/stmState.js.map +1 -0
  80. package/dist/esm/internal/stm/{stm/tExit.js → tExit.js} +5 -5
  81. package/dist/esm/internal/stm/tExit.js.map +1 -0
  82. package/dist/esm/internal/stm/tMap.js.map +1 -1
  83. package/dist/esm/internal/stm/tRef.js +2 -2
  84. package/dist/esm/internal/stm/tRef.js.map +1 -1
  85. package/dist/esm/internal/stm/{stm/tryCommit.js → tryCommit.js} +1 -1
  86. package/dist/esm/internal/stm/tryCommit.js.map +1 -0
  87. package/dist/esm/internal/stm/txnId.js.map +1 -0
  88. package/dist/esm/internal/stm/versioned.js.map +1 -0
  89. package/dist/esm/internal/version.js +1 -1
  90. package/package.json +1 -1
  91. package/src/Array.ts +6 -6
  92. package/src/Context.ts +1 -1
  93. package/src/FiberHandle.ts +11 -7
  94. package/src/FiberMap.ts +11 -7
  95. package/src/FiberSet.ts +9 -7
  96. package/src/JSONSchema.ts +7 -7
  97. package/src/Option.ts +7 -46
  98. package/src/ParseResult.ts +1 -3
  99. package/src/Schema.ts +1333 -1136
  100. package/src/TRef.ts +3 -3
  101. package/src/internal/fiberRuntime.ts +5 -4
  102. package/src/internal/stm/core.ts +5 -5
  103. package/src/internal/stm/{stm/entry.ts → entry.ts} +1 -1
  104. package/src/internal/stm/{stm/journal.ts → journal.ts} +1 -1
  105. package/src/internal/stm/stm.ts +2 -2
  106. package/src/internal/stm/{stm/stmState.ts → stmState.ts} +7 -7
  107. package/src/internal/stm/{stm/tExit.ts → tExit.ts} +7 -7
  108. package/src/internal/stm/tMap.ts +1 -1
  109. package/src/internal/stm/tRef.ts +4 -4
  110. package/src/internal/stm/{stm/tryCommit.ts → tryCommit.ts} +2 -2
  111. package/src/internal/version.ts +1 -1
  112. package/dist/cjs/internal/stm/stm/entry.js.map +0 -1
  113. package/dist/cjs/internal/stm/stm/journal.js.map +0 -1
  114. package/dist/cjs/internal/stm/stm/opCodes/stm.js +0 -31
  115. package/dist/cjs/internal/stm/stm/opCodes/stm.js.map +0 -1
  116. package/dist/cjs/internal/stm/stm/opCodes/stmState.js +0 -13
  117. package/dist/cjs/internal/stm/stm/opCodes/stmState.js.map +0 -1
  118. package/dist/cjs/internal/stm/stm/opCodes/strategy.js +0 -13
  119. package/dist/cjs/internal/stm/stm/opCodes/strategy.js.map +0 -1
  120. package/dist/cjs/internal/stm/stm/opCodes/tExit.js +0 -17
  121. package/dist/cjs/internal/stm/stm/opCodes/tExit.js.map +0 -1
  122. package/dist/cjs/internal/stm/stm/opCodes/tryCommit.js +0 -11
  123. package/dist/cjs/internal/stm/stm/opCodes/tryCommit.js.map +0 -1
  124. package/dist/cjs/internal/stm/stm/stmState.js.map +0 -1
  125. package/dist/cjs/internal/stm/stm/tExit.js.map +0 -1
  126. package/dist/cjs/internal/stm/stm/tryCommit.js.map +0 -1
  127. package/dist/cjs/internal/stm/stm/txnId.js.map +0 -1
  128. package/dist/cjs/internal/stm/stm/versioned.js.map +0 -1
  129. package/dist/dts/internal/stm/stm/entry.d.ts.map +0 -1
  130. package/dist/dts/internal/stm/stm/journal.d.ts.map +0 -1
  131. package/dist/dts/internal/stm/stm/opCodes/stm.d.ts +0 -2
  132. package/dist/dts/internal/stm/stm/opCodes/stm.d.ts.map +0 -1
  133. package/dist/dts/internal/stm/stm/opCodes/stmState.d.ts.map +0 -1
  134. package/dist/dts/internal/stm/stm/opCodes/strategy.d.ts +0 -2
  135. package/dist/dts/internal/stm/stm/opCodes/strategy.d.ts.map +0 -1
  136. package/dist/dts/internal/stm/stm/opCodes/tExit.d.ts +0 -2
  137. package/dist/dts/internal/stm/stm/opCodes/tExit.d.ts.map +0 -1
  138. package/dist/dts/internal/stm/stm/opCodes/tryCommit.d.ts.map +0 -1
  139. package/dist/dts/internal/stm/stm/stmState.d.ts +0 -2
  140. package/dist/dts/internal/stm/stm/stmState.d.ts.map +0 -1
  141. package/dist/dts/internal/stm/stm/tExit.d.ts.map +0 -1
  142. package/dist/dts/internal/stm/stm/tryCommit.d.ts +0 -2
  143. package/dist/dts/internal/stm/stm/tryCommit.d.ts.map +0 -1
  144. package/dist/dts/internal/stm/stm/txnId.d.ts.map +0 -1
  145. package/dist/dts/internal/stm/stm/versioned.d.ts.map +0 -1
  146. package/dist/esm/internal/stm/stm/entry.js.map +0 -1
  147. package/dist/esm/internal/stm/stm/journal.js.map +0 -1
  148. package/dist/esm/internal/stm/stm/opCodes/stm.js +0 -25
  149. package/dist/esm/internal/stm/stm/opCodes/stm.js.map +0 -1
  150. package/dist/esm/internal/stm/stm/opCodes/stmState.js +0 -7
  151. package/dist/esm/internal/stm/stm/opCodes/stmState.js.map +0 -1
  152. package/dist/esm/internal/stm/stm/opCodes/strategy.js +0 -7
  153. package/dist/esm/internal/stm/stm/opCodes/strategy.js.map +0 -1
  154. package/dist/esm/internal/stm/stm/opCodes/tExit.js +0 -11
  155. package/dist/esm/internal/stm/stm/opCodes/tExit.js.map +0 -1
  156. package/dist/esm/internal/stm/stm/opCodes/tryCommit.js +0 -5
  157. package/dist/esm/internal/stm/stm/opCodes/tryCommit.js.map +0 -1
  158. package/dist/esm/internal/stm/stm/stmState.js.map +0 -1
  159. package/dist/esm/internal/stm/stm/tExit.js.map +0 -1
  160. package/dist/esm/internal/stm/stm/tryCommit.js.map +0 -1
  161. package/dist/esm/internal/stm/stm/txnId.js.map +0 -1
  162. package/dist/esm/internal/stm/stm/versioned.js.map +0 -1
  163. package/src/internal/stm/stm/opCodes/stm.ts +0 -71
  164. package/src/internal/stm/stm/opCodes/stmState.ts +0 -17
  165. package/src/internal/stm/stm/opCodes/strategy.ts +0 -17
  166. package/src/internal/stm/stm/opCodes/tExit.ts +0 -29
  167. package/src/internal/stm/stm/opCodes/tryCommit.ts +0 -11
  168. /package/dist/cjs/internal/stm/{stm/entry.js → entry.js} +0 -0
  169. /package/dist/cjs/internal/stm/{stm/journal.js → journal.js} +0 -0
  170. /package/dist/cjs/internal/stm/{stm/txnId.js → txnId.js} +0 -0
  171. /package/dist/cjs/internal/stm/{stm/versioned.js → versioned.js} +0 -0
  172. /package/dist/dts/internal/stm/{stm/entry.d.ts → entry.d.ts} +0 -0
  173. /package/dist/dts/internal/stm/{stm/journal.d.ts → journal.d.ts} +0 -0
  174. /package/dist/dts/internal/stm/{stm/opCodes/stmState.d.ts → stmState.d.ts} +0 -0
  175. /package/dist/dts/internal/stm/{stm/tExit.d.ts → tExit.d.ts} +0 -0
  176. /package/dist/dts/internal/stm/{stm/opCodes/tryCommit.d.ts → tryCommit.d.ts} +0 -0
  177. /package/dist/dts/internal/stm/{stm/txnId.d.ts → txnId.d.ts} +0 -0
  178. /package/dist/dts/internal/stm/{stm/versioned.d.ts → versioned.d.ts} +0 -0
  179. /package/dist/esm/internal/stm/{stm/entry.js → entry.js} +0 -0
  180. /package/dist/esm/internal/stm/{stm/journal.js → journal.js} +0 -0
  181. /package/dist/esm/internal/stm/{stm/txnId.js → txnId.js} +0 -0
  182. /package/dist/esm/internal/stm/{stm/versioned.js → versioned.js} +0 -0
  183. /package/src/internal/stm/{stm/txnId.ts → txnId.ts} +0 -0
  184. /package/src/internal/stm/{stm/versioned.ts → versioned.ts} +0 -0
package/src/Array.ts CHANGED
@@ -2446,7 +2446,7 @@ export const remove: {
2446
2446
  * @category elements
2447
2447
  * @since 2.0.0
2448
2448
  */
2449
- export const reverse = <S extends Iterable<any> | NonEmptyReadonlyArray<any>>(
2449
+ export const reverse = <S extends Iterable<any>>(
2450
2450
  self: S
2451
2451
  ): S extends NonEmptyReadonlyArray<infer A> ? NonEmptyArray<A> : S extends Iterable<infer A> ? Array<A> : never =>
2452
2452
  Array.from(self).reverse() as any
@@ -2466,7 +2466,7 @@ export const sort: {
2466
2466
  * @category sorting
2467
2467
  * @since 2.0.0
2468
2468
  */
2469
- <B>(O: Order.Order<B>): <A extends B, S extends ReadonlyArray<A> | Iterable<A>>(self: S) => ReadonlyArray.With<S, ReadonlyArray.Infer<S>>
2469
+ <B>(O: Order.Order<B>): <A extends B, S extends Iterable<A>>(self: S) => ReadonlyArray.With<S, ReadonlyArray.Infer<S>>
2470
2470
  /**
2471
2471
  * Create a new array with elements sorted in increasing order based on the specified comparator.
2472
2472
  * If the input is a `NonEmptyReadonlyArray`, the output will also be a `NonEmptyReadonlyArray`.
@@ -2534,7 +2534,7 @@ export const sortWith: {
2534
2534
  * @since 2.0.0
2535
2535
  * @category elements
2536
2536
  */
2537
- <S extends Iterable<any> | NonEmptyReadonlyArray<any>, B>(f: (a: ReadonlyArray.Infer<S>) => B, order: Order.Order<B>): (self: S) => ReadonlyArray.With<S, ReadonlyArray.Infer<S>>
2537
+ <S extends Iterable<any>, B>(f: (a: ReadonlyArray.Infer<S>) => B, order: Order.Order<B>): (self: S) => ReadonlyArray.With<S, ReadonlyArray.Infer<S>>
2538
2538
  /**
2539
2539
  * Sorts an array based on a provided mapping function and order. The mapping
2540
2540
  * function transforms the elements into a value that can be compared, and the
@@ -2621,7 +2621,7 @@ export const sortWith: {
2621
2621
  * @category sorting
2622
2622
  * @since 2.0.0
2623
2623
  */
2624
- export const sortBy = <S extends Iterable<any> | NonEmptyReadonlyArray<any>>(
2624
+ export const sortBy = <S extends Iterable<any>>(
2625
2625
  ...orders: ReadonlyArray<Order.Order<ReadonlyArray.Infer<S>>>
2626
2626
  ) => {
2627
2627
  const sortByAll = sort(Order.combineAll(orders))
@@ -2857,7 +2857,7 @@ export const zipWith: {
2857
2857
  *
2858
2858
  * @since 2.0.0
2859
2859
  */
2860
- export const unzip: <S extends Iterable<readonly [any, any]> | NonEmptyReadonlyArray<readonly [any, any]>>(
2860
+ export const unzip: <S extends Iterable<readonly [any, any]>>(
2861
2861
  self: S
2862
2862
  ) => S extends NonEmptyReadonlyArray<readonly [infer A, infer B]> ? [NonEmptyArray<A>, NonEmptyArray<B>]
2863
2863
  : S extends Iterable<readonly [infer A, infer B]> ? [Array<A>, Array<B>]
@@ -5735,7 +5735,7 @@ export const dedupeWith: {
5735
5735
  *
5736
5736
  * @since 2.0.0
5737
5737
  */
5738
- export const dedupe = <S extends Iterable<any> | NonEmptyReadonlyArray<any>>(
5738
+ export const dedupe = <S extends Iterable<any>>(
5739
5739
  self: S
5740
5740
  ): S extends NonEmptyReadonlyArray<infer A> ? NonEmptyArray<A> : S extends Iterable<infer A> ? Array<A> : never =>
5741
5741
  dedupeWith(self, Equal.equivalence()) as any
package/src/Context.ts CHANGED
@@ -112,7 +112,7 @@ export interface ReferenceClass<Self, Id extends string, Type> extends Reference
112
112
  * @since 2.0.0
113
113
  */
114
114
  export interface TagUnify<A extends { [Unify.typeSymbol]?: any }> {
115
- Tag?: () => A[Unify.typeSymbol] extends Tag<infer I0, infer S0> | infer _ ? Tag<I0, S0> : never
115
+ Tag?: () => Extract<A[Unify.typeSymbol], Tag<any, any>>
116
116
  }
117
117
 
118
118
  /**
@@ -111,13 +111,17 @@ export const make = <A = unknown, E = unknown>(): Effect.Effect<FiberHandle<A, E
111
111
  Effect.acquireRelease(
112
112
  Effect.map(Deferred.make<void, E>(), (deferred) => unsafeMake<A, E>(deferred)),
113
113
  (handle) =>
114
- Effect.zipRight(
115
- clear(handle),
116
- Effect.suspend(() => {
117
- handle.state = { _tag: "Closed" }
118
- return Deferred.done(handle.deferred, Exit.void)
119
- })
120
- )
114
+ Effect.withFiberRuntime((parent) => {
115
+ const state = handle.state
116
+ if (state._tag === "Closed") return Effect.void
117
+ handle.state = { _tag: "Closed" }
118
+ return state.fiber ?
119
+ Effect.intoDeferred(
120
+ Effect.asVoid(Fiber.interruptAs(state.fiber, FiberId.combine(parent.id(), internalFiberId))),
121
+ handle.deferred
122
+ ) :
123
+ Deferred.done(handle.deferred, Exit.void)
124
+ })
121
125
  )
122
126
 
123
127
  /**
package/src/FiberMap.ts CHANGED
@@ -125,13 +125,17 @@ export const make = <K, A = unknown, E = unknown>(): Effect.Effect<FiberMap<K, A
125
125
  deferred
126
126
  )),
127
127
  (map) =>
128
- Effect.zipRight(
129
- clear(map),
130
- Effect.suspend(() => {
131
- map.state = { _tag: "Closed" }
132
- return Deferred.done(map.deferred, Exit.void)
133
- })
134
- )
128
+ Effect.withFiberRuntime((parent) => {
129
+ const state = map.state
130
+ if (state._tag === "Closed") return Effect.void
131
+ map.state = { _tag: "Closed" }
132
+ return Fiber.interruptAllAs(
133
+ Iterable.map(state.backing, ([, fiber]) => fiber),
134
+ FiberId.combine(parent.id(), internalFiberId)
135
+ ).pipe(
136
+ Effect.intoDeferred(map.deferred)
137
+ )
138
+ })
135
139
  )
136
140
 
137
141
  /**
package/src/FiberSet.ts CHANGED
@@ -118,13 +118,15 @@ export const make = <A = unknown, E = unknown>(): Effect.Effect<FiberSet<A, E>,
118
118
  Effect.acquireRelease(
119
119
  Effect.map(Deferred.make<void, unknown>(), (deferred) => unsafeMake(new Set(), deferred)),
120
120
  (set) =>
121
- Effect.zipRight(
122
- clear(set),
123
- Effect.suspend(() => {
124
- set.state = { _tag: "Closed" }
125
- return Deferred.done(set.deferred, Exit.void)
126
- })
127
- )
121
+ Effect.withFiberRuntime((parent) => {
122
+ const state = set.state
123
+ if (state._tag === "Closed") return Effect.void
124
+ set.state = { _tag: "Closed" }
125
+ const fibers = state.backing
126
+ return Fiber.interruptAllAs(fibers, FiberId.combine(parent.id(), internalFiberId)).pipe(
127
+ Effect.intoDeferred(set.deferred)
128
+ )
129
+ })
128
130
  )
129
131
 
130
132
  /**
package/src/JSONSchema.ts CHANGED
@@ -635,13 +635,19 @@ const go = (
635
635
  if (ast.propertySignatures.length === 0 && ast.indexSignatures.length === 0) {
636
636
  return { ...constEmpty, ...getJsonSchemaAnnotations(ast) }
637
637
  }
638
+ const output: JsonSchema7Object = {
639
+ type: "object",
640
+ required: [],
641
+ properties: {},
642
+ additionalProperties: false
643
+ }
638
644
  let patternProperties: JsonSchema7 | undefined = undefined
639
645
  let propertyNames: JsonSchema7 | undefined = undefined
640
646
  for (const is of ast.indexSignatures) {
641
647
  const parameter = is.parameter
642
648
  switch (parameter._tag) {
643
649
  case "StringKeyword": {
644
- patternProperties = go(is.type, $defs, true, path, options)
650
+ output.additionalProperties = go(is.type, $defs, true, path, options)
645
651
  break
646
652
  }
647
653
  case "TemplateLiteral": {
@@ -661,12 +667,6 @@ const go = (
661
667
  throw new Error(errors_.getJSONSchemaUnsupportedParameterErrorMessage(path, parameter))
662
668
  }
663
669
  }
664
- const output: JsonSchema7Object = {
665
- type: "object",
666
- required: [],
667
- properties: {},
668
- additionalProperties: false
669
- }
670
670
  // ---------------------------------------------
671
671
  // handle property signatures
672
672
  // ---------------------------------------------
package/src/Option.ts CHANGED
@@ -2867,21 +2867,9 @@ export const partitionMap: {
2867
2867
  return either.isLeft(e) ? [some(e.left), none()] : [none(), some(e.right)]
2868
2868
  })
2869
2869
 
2870
+ // TODO(4.0): remove?
2870
2871
  /**
2871
- * Maps over the value of an `Option` with a function that may return `None`,
2872
- * effectively filtering and transforming the value.
2873
- *
2874
- * **Details**
2875
- *
2876
- * This function allows you to both transform the value of a `Some` and filter
2877
- * it at the same time. The mapping function `f` can either return a new
2878
- * `Option` (to transform the value) or return `None` to filter it out. If the
2879
- * input `Option` is `None`, the function is not applied, and the result remains
2880
- * `None`.
2881
- *
2882
- * This utility is particularly useful when you want to apply a transformation
2883
- * to the value of an `Option` while conditionally removing invalid or unwanted
2884
- * results.
2872
+ * Alias of {@link flatMap}.
2885
2873
  *
2886
2874
  * @example
2887
2875
  * ```ts
@@ -2905,21 +2893,9 @@ export const partitionMap: {
2905
2893
  * @since 2.0.0
2906
2894
  */
2907
2895
  export const filterMap: {
2896
+ // TODO(4.0): remove?
2908
2897
  /**
2909
- * Maps over the value of an `Option` with a function that may return `None`,
2910
- * effectively filtering and transforming the value.
2911
- *
2912
- * **Details**
2913
- *
2914
- * This function allows you to both transform the value of a `Some` and filter
2915
- * it at the same time. The mapping function `f` can either return a new
2916
- * `Option` (to transform the value) or return `None` to filter it out. If the
2917
- * input `Option` is `None`, the function is not applied, and the result remains
2918
- * `None`.
2919
- *
2920
- * This utility is particularly useful when you want to apply a transformation
2921
- * to the value of an `Option` while conditionally removing invalid or unwanted
2922
- * results.
2898
+ * Alias of {@link flatMap}.
2923
2899
  *
2924
2900
  * @example
2925
2901
  * ```ts
@@ -2943,21 +2919,9 @@ export const filterMap: {
2943
2919
  * @since 2.0.0
2944
2920
  */
2945
2921
  <A, B>(f: (a: A) => Option<B>): (self: Option<A>) => Option<B>
2922
+ // TODO(4.0): remove?
2946
2923
  /**
2947
- * Maps over the value of an `Option` with a function that may return `None`,
2948
- * effectively filtering and transforming the value.
2949
- *
2950
- * **Details**
2951
- *
2952
- * This function allows you to both transform the value of a `Some` and filter
2953
- * it at the same time. The mapping function `f` can either return a new
2954
- * `Option` (to transform the value) or return `None` to filter it out. If the
2955
- * input `Option` is `None`, the function is not applied, and the result remains
2956
- * `None`.
2957
- *
2958
- * This utility is particularly useful when you want to apply a transformation
2959
- * to the value of an `Option` while conditionally removing invalid or unwanted
2960
- * results.
2924
+ * Alias of {@link flatMap}.
2961
2925
  *
2962
2926
  * @example
2963
2927
  * ```ts
@@ -2981,10 +2945,7 @@ export const filterMap: {
2981
2945
  * @since 2.0.0
2982
2946
  */
2983
2947
  <A, B>(self: Option<A>, f: (a: A) => Option<B>): Option<B>
2984
- } = dual(
2985
- 2,
2986
- <A, B>(self: Option<A>, f: (a: A) => Option<B>): Option<B> => isNone(self) ? none() : f(self.value)
2987
- )
2948
+ } = flatMap
2988
2949
 
2989
2950
  /**
2990
2951
  * Filters an `Option` using a predicate. If the predicate is not satisfied or the `Option` is `None` returns `None`.
@@ -1891,9 +1891,7 @@ const getMessage = (issue: ParseIssue): Effect.Effect<string | undefined> =>
1891
1891
  const getParseIssueTitleAnnotation = (issue: ParseIssue): string | undefined =>
1892
1892
  getAnnotated(issue).pipe(
1893
1893
  Option.flatMap(AST.getParseIssueTitleAnnotation),
1894
- Option.filterMap(
1895
- (annotation) => Option.fromNullable(annotation(issue))
1896
- ),
1894
+ Option.flatMapNullable((annotation) => annotation(issue)),
1897
1895
  Option.getOrUndefined
1898
1896
  )
1899
1897