effect 3.10.19 → 3.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 (167) hide show
  1. package/dist/cjs/BigDecimal.js +125 -24
  2. package/dist/cjs/BigDecimal.js.map +1 -1
  3. package/dist/cjs/Channel.js +44 -4
  4. package/dist/cjs/Channel.js.map +1 -1
  5. package/dist/cjs/Config.js +8 -1
  6. package/dist/cjs/Config.js.map +1 -1
  7. package/dist/cjs/Context.js +26 -1
  8. package/dist/cjs/Context.js.map +1 -1
  9. package/dist/cjs/Cron.js +75 -67
  10. package/dist/cjs/Cron.js.map +1 -1
  11. package/dist/cjs/DateTime.js +114 -664
  12. package/dist/cjs/DateTime.js.map +1 -1
  13. package/dist/cjs/Effect.js +82 -4
  14. package/dist/cjs/Effect.js.map +1 -1
  15. package/dist/cjs/Inspectable.js +8 -4
  16. package/dist/cjs/Inspectable.js.map +1 -1
  17. package/dist/cjs/JSONSchema.js.map +1 -1
  18. package/dist/cjs/Micro.js +1099 -1072
  19. package/dist/cjs/Micro.js.map +1 -1
  20. package/dist/cjs/STM.js.map +1 -1
  21. package/dist/cjs/Schema.js +57 -8
  22. package/dist/cjs/Schema.js.map +1 -1
  23. package/dist/cjs/Sink.js +9 -1
  24. package/dist/cjs/Sink.js.map +1 -1
  25. package/dist/cjs/Stream.js +25 -7
  26. package/dist/cjs/Stream.js.map +1 -1
  27. package/dist/cjs/Utils.js +7 -1
  28. package/dist/cjs/Utils.js.map +1 -1
  29. package/dist/cjs/internal/channel/channelExecutor.js +5 -9
  30. package/dist/cjs/internal/channel/channelExecutor.js.map +1 -1
  31. package/dist/cjs/internal/channel.js +156 -130
  32. package/dist/cjs/internal/channel.js.map +1 -1
  33. package/dist/cjs/internal/config.js +13 -4
  34. package/dist/cjs/internal/config.js.map +1 -1
  35. package/dist/cjs/internal/context.js +46 -3
  36. package/dist/cjs/internal/context.js.map +1 -1
  37. package/dist/cjs/internal/dateTime.js +747 -0
  38. package/dist/cjs/internal/dateTime.js.map +1 -0
  39. package/dist/cjs/internal/fiberRuntime.js +34 -11
  40. package/dist/cjs/internal/fiberRuntime.js.map +1 -1
  41. package/dist/cjs/internal/groupBy.js +9 -3
  42. package/dist/cjs/internal/groupBy.js.map +1 -1
  43. package/dist/cjs/internal/layer.js +1 -1
  44. package/dist/cjs/internal/layer.js.map +1 -1
  45. package/dist/cjs/internal/mailbox.js +1 -1
  46. package/dist/cjs/internal/mailbox.js.map +1 -1
  47. package/dist/cjs/internal/sink.js +25 -21
  48. package/dist/cjs/internal/sink.js.map +1 -1
  49. package/dist/cjs/internal/stream.js +70 -71
  50. package/dist/cjs/internal/stream.js.map +1 -1
  51. package/dist/cjs/internal/version.js +1 -1
  52. package/dist/cjs/internal/version.js.map +1 -1
  53. package/dist/dts/BigDecimal.d.ts +56 -1
  54. package/dist/dts/BigDecimal.d.ts.map +1 -1
  55. package/dist/dts/Channel.d.ts +66 -5
  56. package/dist/dts/Channel.d.ts.map +1 -1
  57. package/dist/dts/Config.d.ts +23 -1
  58. package/dist/dts/Config.d.ts.map +1 -1
  59. package/dist/dts/Context.d.ts +111 -0
  60. package/dist/dts/Context.d.ts.map +1 -1
  61. package/dist/dts/Cron.d.ts +15 -6
  62. package/dist/dts/Cron.d.ts.map +1 -1
  63. package/dist/dts/DateTime.d.ts +40 -49
  64. package/dist/dts/DateTime.d.ts.map +1 -1
  65. package/dist/dts/Effect.d.ts +88 -1
  66. package/dist/dts/Effect.d.ts.map +1 -1
  67. package/dist/dts/Inspectable.d.ts.map +1 -1
  68. package/dist/dts/JSONSchema.d.ts +1 -0
  69. package/dist/dts/JSONSchema.d.ts.map +1 -1
  70. package/dist/dts/Micro.d.ts +875 -872
  71. package/dist/dts/Micro.d.ts.map +1 -1
  72. package/dist/dts/STM.d.ts +2 -0
  73. package/dist/dts/STM.d.ts.map +1 -1
  74. package/dist/dts/Schema.d.ts +32 -0
  75. package/dist/dts/Schema.d.ts.map +1 -1
  76. package/dist/dts/Sink.d.ts +8 -0
  77. package/dist/dts/Sink.d.ts.map +1 -1
  78. package/dist/dts/Stream.d.ts +50 -32
  79. package/dist/dts/Stream.d.ts.map +1 -1
  80. package/dist/dts/Utils.d.ts +4 -0
  81. package/dist/dts/Utils.d.ts.map +1 -1
  82. package/dist/dts/internal/context.d.ts +1 -1
  83. package/dist/dts/internal/context.d.ts.map +1 -1
  84. package/dist/dts/internal/dateTime.d.ts +2 -0
  85. package/dist/dts/internal/dateTime.d.ts.map +1 -0
  86. package/dist/dts/internal/fiberRuntime.d.ts.map +1 -1
  87. package/dist/dts/internal/stream.d.ts.map +1 -1
  88. package/dist/esm/BigDecimal.js +119 -20
  89. package/dist/esm/BigDecimal.js.map +1 -1
  90. package/dist/esm/Channel.js +42 -2
  91. package/dist/esm/Channel.js.map +1 -1
  92. package/dist/esm/Config.js +7 -0
  93. package/dist/esm/Config.js.map +1 -1
  94. package/dist/esm/Context.js +25 -0
  95. package/dist/esm/Context.js.map +1 -1
  96. package/dist/esm/Cron.js +75 -67
  97. package/dist/esm/Cron.js.map +1 -1
  98. package/dist/esm/DateTime.js +112 -627
  99. package/dist/esm/DateTime.js.map +1 -1
  100. package/dist/esm/Effect.js +77 -0
  101. package/dist/esm/Effect.js.map +1 -1
  102. package/dist/esm/Inspectable.js +8 -4
  103. package/dist/esm/Inspectable.js.map +1 -1
  104. package/dist/esm/JSONSchema.js.map +1 -1
  105. package/dist/esm/Micro.js +1077 -1047
  106. package/dist/esm/Micro.js.map +1 -1
  107. package/dist/esm/STM.js.map +1 -1
  108. package/dist/esm/Schema.js +54 -0
  109. package/dist/esm/Schema.js.map +1 -1
  110. package/dist/esm/Sink.js +8 -0
  111. package/dist/esm/Sink.js.map +1 -1
  112. package/dist/esm/Stream.js +23 -5
  113. package/dist/esm/Stream.js.map +1 -1
  114. package/dist/esm/Utils.js +5 -0
  115. package/dist/esm/Utils.js.map +1 -1
  116. package/dist/esm/internal/channel/channelExecutor.js +5 -7
  117. package/dist/esm/internal/channel/channelExecutor.js.map +1 -1
  118. package/dist/esm/internal/channel.js +152 -129
  119. package/dist/esm/internal/channel.js.map +1 -1
  120. package/dist/esm/internal/config.js +11 -3
  121. package/dist/esm/internal/config.js.map +1 -1
  122. package/dist/esm/internal/context.js +42 -2
  123. package/dist/esm/internal/context.js.map +1 -1
  124. package/dist/esm/internal/dateTime.js +704 -0
  125. package/dist/esm/internal/dateTime.js.map +1 -0
  126. package/dist/esm/internal/fiberRuntime.js +31 -9
  127. package/dist/esm/internal/fiberRuntime.js.map +1 -1
  128. package/dist/esm/internal/groupBy.js +9 -3
  129. package/dist/esm/internal/groupBy.js.map +1 -1
  130. package/dist/esm/internal/layer.js +1 -1
  131. package/dist/esm/internal/layer.js.map +1 -1
  132. package/dist/esm/internal/mailbox.js +1 -1
  133. package/dist/esm/internal/mailbox.js.map +1 -1
  134. package/dist/esm/internal/sink.js +23 -20
  135. package/dist/esm/internal/sink.js.map +1 -1
  136. package/dist/esm/internal/stream.js +66 -69
  137. package/dist/esm/internal/stream.js.map +1 -1
  138. package/dist/esm/internal/version.js +1 -1
  139. package/dist/esm/internal/version.js.map +1 -1
  140. package/package.json +1 -1
  141. package/src/BigDecimal.ts +131 -21
  142. package/src/Channel.ts +81 -5
  143. package/src/Config.ts +24 -1
  144. package/src/Context.ts +119 -0
  145. package/src/Cron.ts +85 -68
  146. package/src/DateTime.ts +155 -757
  147. package/src/Effect.ts +340 -1
  148. package/src/Inspectable.ts +11 -7
  149. package/src/JSONSchema.ts +1 -0
  150. package/src/Micro.ts +2005 -1757
  151. package/src/STM.ts +2 -0
  152. package/src/Schema.ts +60 -0
  153. package/src/Sink.ts +11 -0
  154. package/src/Stream.ts +55 -44
  155. package/src/Utils.ts +8 -0
  156. package/src/internal/channel/channelExecutor.ts +37 -33
  157. package/src/internal/channel.ts +504 -467
  158. package/src/internal/config.ts +18 -6
  159. package/src/internal/context.ts +56 -4
  160. package/src/internal/dateTime.ts +1126 -0
  161. package/src/internal/fiberRuntime.ts +35 -16
  162. package/src/internal/groupBy.ts +13 -22
  163. package/src/internal/layer.ts +5 -8
  164. package/src/internal/mailbox.ts +6 -4
  165. package/src/internal/sink.ts +55 -35
  166. package/src/internal/stream.ts +299 -299
  167. package/src/internal/version.ts +1 -1
@@ -179,6 +179,19 @@ export const boolean = (name?: string): Config.Config<boolean> => {
179
179
  return name === undefined ? config : nested(config, name)
180
180
  }
181
181
 
182
+ /** @internal */
183
+ export const url = (name?: string): Config.Config<URL> => {
184
+ const config = primitive(
185
+ "an URL property",
186
+ (text) =>
187
+ Either.try({
188
+ try: () => new URL(text),
189
+ catch: (_) => configError.InvalidData([], `Expected an URL value but received ${text}`)
190
+ })
191
+ )
192
+ return name === undefined ? config : nested(config, name)
193
+ }
194
+
182
195
  /** @internal */
183
196
  export const array = <A>(config: Config.Config<A>, name?: string): Config.Config<Array<A>> => {
184
197
  return pipe(chunk(config, name), map(Chunk.toArray))
@@ -424,12 +437,11 @@ export const secret = (name?: string): Config.Config<Secret.Secret> => {
424
437
  }
425
438
 
426
439
  /** @internal */
427
- export const redacted = (name?: string): Config.Config<Redacted.Redacted> => {
428
- const config = primitive(
429
- "a redacted property",
430
- (text) => Either.right(redacted_.make(text))
431
- )
432
- return name === undefined ? config : nested(config, name)
440
+ export const redacted = <A>(
441
+ nameOrConfig?: string | Config.Config<A>
442
+ ): Config.Config<Redacted.Redacted<A | string>> => {
443
+ const config: Config.Config<A | string> = isConfig(nameOrConfig) ? nameOrConfig : string(nameOrConfig)
444
+ return map(config, redacted_.make)
433
445
  }
434
446
 
435
447
  /** @internal */
@@ -2,6 +2,7 @@ import type * as C from "../Context.js"
2
2
  import * as Equal from "../Equal.js"
3
3
  import type { LazyArg } from "../Function.js"
4
4
  import { dual } from "../Function.js"
5
+ import { globalValue } from "../GlobalValue.js"
5
6
  import * as Hash from "../Hash.js"
6
7
  import { format, NodeInspectSymbol, toJSON } from "../Inspectable.js"
7
8
  import type * as O from "../Option.js"
@@ -14,6 +15,9 @@ import * as option from "./option.js"
14
15
  /** @internal */
15
16
  export const TagTypeId: C.TagTypeId = Symbol.for("effect/Context/Tag") as C.TagTypeId
16
17
 
18
+ /** @internal */
19
+ export const ReferenceTypeId: C.ReferenceTypeId = Symbol.for("effect/Context/Reference") as C.ReferenceTypeId
20
+
17
21
  /** @internal */
18
22
  const STMSymbolKey = "effect/STM"
19
23
 
@@ -55,6 +59,11 @@ export const TagProto: any = {
55
59
  }
56
60
  }
57
61
 
62
+ export const ReferenceProto: any = {
63
+ ...TagProto,
64
+ [ReferenceTypeId]: ReferenceTypeId
65
+ }
66
+
58
67
  /** @internal */
59
68
  export const makeGenericTag = <Identifier, Service = Identifier>(key: string): C.Tag<Identifier, Service> => {
60
69
  const limit = Error.stackTraceLimit
@@ -89,6 +98,28 @@ export const Tag = <const Id extends string>(id: Id) => <Self, Shape>(): C.TagCl
89
98
  return TagClass as any
90
99
  }
91
100
 
101
+ /** @internal */
102
+ export const Reference = <Self>() =>
103
+ <const Id extends string, Service>(id: Id, options: {
104
+ readonly defaultValue: () => Service
105
+ }): C.ReferenceClass<Self, Id, Service> => {
106
+ const limit = Error.stackTraceLimit
107
+ Error.stackTraceLimit = 2
108
+ const creationError = new Error()
109
+ Error.stackTraceLimit = limit
110
+
111
+ function ReferenceClass() {}
112
+ Object.setPrototypeOf(ReferenceClass, ReferenceProto)
113
+ ReferenceClass.key = id
114
+ ReferenceClass.defaultValue = options.defaultValue
115
+ Object.defineProperty(ReferenceClass, "stack", {
116
+ get() {
117
+ return creationError.stack
118
+ }
119
+ })
120
+ return ReferenceClass as any
121
+ }
122
+
92
123
  /** @internal */
93
124
  export const TypeId: C.TypeId = Symbol.for("effect/Context") as C.TypeId
94
125
 
@@ -162,6 +193,9 @@ export const isContext = (u: unknown): u is C.Context<never> => hasProperty(u, T
162
193
  /** @internal */
163
194
  export const isTag = (u: unknown): u is C.Tag<any, any> => hasProperty(u, TagTypeId)
164
195
 
196
+ /** @internal */
197
+ export const isReference = (u: unknown): u is C.Reference<any, any> => hasProperty(u, ReferenceTypeId)
198
+
165
199
  const _empty = makeContext(new Map())
166
200
 
167
201
  /** @internal */
@@ -192,22 +226,40 @@ export const add = dual<
192
226
  return makeContext(map)
193
227
  })
194
228
 
229
+ const defaultValueCache = globalValue("effect/Context/defaultValueCache", () => new Map<string, any>())
230
+ const getDefaultValue = (tag: C.Reference<any, any>) => {
231
+ if (defaultValueCache.has(tag.key)) {
232
+ return defaultValueCache.get(tag.key)
233
+ }
234
+ const value = tag.defaultValue()
235
+ defaultValueCache.set(tag.key, value)
236
+ return value
237
+ }
238
+
239
+ /** @internal */
240
+ export const unsafeGetReference = <Services, I, S>(self: C.Context<Services>, tag: C.Reference<I, S>): S => {
241
+ return self.unsafeMap.has(tag.key) ? self.unsafeMap.get(tag.key) : getDefaultValue(tag)
242
+ }
243
+
195
244
  /** @internal */
196
245
  export const unsafeGet = dual<
197
246
  <S, I>(tag: C.Tag<I, S>) => <Services>(self: C.Context<Services>) => S,
198
247
  <Services, S, I>(self: C.Context<Services>, tag: C.Tag<I, S>) => S
199
248
  >(2, (self, tag) => {
200
249
  if (!self.unsafeMap.has(tag.key)) {
201
- throw serviceNotFoundError(tag as any)
250
+ if (ReferenceTypeId in tag) return getDefaultValue(tag as any)
251
+ throw serviceNotFoundError(tag)
202
252
  }
203
253
  return self.unsafeMap.get(tag.key)! as any
204
254
  })
205
255
 
206
256
  /** @internal */
207
257
  export const get: {
258
+ <I, S>(tag: C.Reference<I, S>): <Services>(self: C.Context<Services>) => S
208
259
  <Services, T extends C.ValidTagsById<Services>>(tag: T): (self: C.Context<Services>) => C.Tag.Service<T>
260
+ <Services, I, S>(self: C.Context<Services>, tag: C.Reference<I, S>): S
209
261
  <Services, T extends C.ValidTagsById<Services>>(self: C.Context<Services>, tag: T): C.Tag.Service<T>
210
- } = unsafeGet
262
+ } = unsafeGet as any
211
263
 
212
264
  /** @internal */
213
265
  export const getOrElse = dual<
@@ -215,7 +267,7 @@ export const getOrElse = dual<
215
267
  <Services, S, I, B>(self: C.Context<Services>, tag: C.Tag<I, S>, orElse: LazyArg<B>) => S | B
216
268
  >(3, (self, tag, orElse) => {
217
269
  if (!self.unsafeMap.has(tag.key)) {
218
- return orElse()
270
+ return isReference(tag) ? getDefaultValue(tag) : orElse()
219
271
  }
220
272
  return self.unsafeMap.get(tag.key)! as any
221
273
  })
@@ -226,7 +278,7 @@ export const getOption = dual<
226
278
  <Services, S, I>(self: C.Context<Services>, tag: C.Tag<I, S>) => O.Option<S>
227
279
  >(2, (self, tag) => {
228
280
  if (!self.unsafeMap.has(tag.key)) {
229
- return option.none
281
+ return isReference(tag) ? option.some(getDefaultValue(tag)) : option.none
230
282
  }
231
283
  return option.some(self.unsafeMap.get(tag.key)! as any)
232
284
  })