effect 3.10.6 → 3.10.8

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 (47) hide show
  1. package/dist/cjs/Context.js +10 -0
  2. package/dist/cjs/Context.js.map +1 -1
  3. package/dist/cjs/Effect.js +31 -0
  4. package/dist/cjs/Effect.js.map +1 -1
  5. package/dist/cjs/Schema.js +42 -0
  6. package/dist/cjs/Schema.js.map +1 -1
  7. package/dist/cjs/internal/channel.js +2 -2
  8. package/dist/cjs/internal/channel.js.map +1 -1
  9. package/dist/cjs/internal/config.js +3 -3
  10. package/dist/cjs/internal/config.js.map +1 -1
  11. package/dist/cjs/internal/fiberRuntime.js +3 -5
  12. package/dist/cjs/internal/fiberRuntime.js.map +1 -1
  13. package/dist/cjs/internal/stream.js +6 -6
  14. package/dist/cjs/internal/stream.js.map +1 -1
  15. package/dist/cjs/internal/version.js +1 -1
  16. package/dist/dts/Context.d.ts +10 -0
  17. package/dist/dts/Context.d.ts.map +1 -1
  18. package/dist/dts/Effect.d.ts +34 -1
  19. package/dist/dts/Effect.d.ts.map +1 -1
  20. package/dist/dts/Schema.d.ts +116 -0
  21. package/dist/dts/Schema.d.ts.map +1 -1
  22. package/dist/dts/internal/fiberRuntime.d.ts.map +1 -1
  23. package/dist/dts/internal/stream.d.ts.map +1 -1
  24. package/dist/esm/Context.js +10 -0
  25. package/dist/esm/Context.js.map +1 -1
  26. package/dist/esm/Effect.js +31 -0
  27. package/dist/esm/Effect.js.map +1 -1
  28. package/dist/esm/Schema.js +42 -0
  29. package/dist/esm/Schema.js.map +1 -1
  30. package/dist/esm/internal/channel.js +2 -2
  31. package/dist/esm/internal/channel.js.map +1 -1
  32. package/dist/esm/internal/config.js +3 -3
  33. package/dist/esm/internal/config.js.map +1 -1
  34. package/dist/esm/internal/fiberRuntime.js +3 -5
  35. package/dist/esm/internal/fiberRuntime.js.map +1 -1
  36. package/dist/esm/internal/stream.js +6 -6
  37. package/dist/esm/internal/stream.js.map +1 -1
  38. package/dist/esm/internal/version.js +1 -1
  39. package/package.json +1 -1
  40. package/src/Context.ts +10 -0
  41. package/src/Effect.ts +32 -0
  42. package/src/Schema.ts +116 -0
  43. package/src/internal/channel.ts +3 -3
  44. package/src/internal/config.ts +3 -3
  45. package/src/internal/fiberRuntime.ts +3 -6
  46. package/src/internal/stream.ts +25 -10
  47. package/src/internal/version.ts +1 -1
@@ -1,4 +1,4 @@
1
- let moduleVersion = "3.10.6";
1
+ let moduleVersion = "3.10.8";
2
2
  export const getCurrentVersion = () => moduleVersion;
3
3
  export const setCurrentVersion = version => {
4
4
  moduleVersion = version;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "effect",
3
- "version": "3.10.6",
3
+ "version": "3.10.8",
4
4
  "description": "The missing standard library for TypeScript, for writing production-grade software.",
5
5
  "license": "MIT",
6
6
  "repository": {
package/src/Context.ts CHANGED
@@ -625,6 +625,16 @@ export const omit: <Services, S extends Array<ValidTagsById<Services>>>(
625
625
  internal.omit
626
626
 
627
627
  /**
628
+ * @example
629
+ * import { Context, Layer } from "effect"
630
+ *
631
+ * class MyTag extends Context.Tag("MyTag")<
632
+ * MyTag,
633
+ * { readonly myNum: number }
634
+ * >() {
635
+ * static Live = Layer.succeed(this, { myNum: 108 })
636
+ * }
637
+ *
628
638
  * @since 2.0.0
629
639
  * @category constructors
630
640
  */
package/src/Effect.ts CHANGED
@@ -10768,6 +10768,16 @@ const makeTagProxy = (TagClass: Context.Tag<any, any> & Record<PropertyKey, any>
10768
10768
  }
10769
10769
 
10770
10770
  /**
10771
+ * @example
10772
+ * import { Effect, Layer } from "effect"
10773
+ *
10774
+ * class MapTag extends Effect.Tag("MapTag")<MapTag, Map<string, string>>() {
10775
+ * static Live = Layer.effect(
10776
+ * this,
10777
+ * Effect.sync(() => new Map())
10778
+ * )
10779
+ * }
10780
+ *
10771
10781
  * @since 2.0.0
10772
10782
  * @category context
10773
10783
  */
@@ -10803,6 +10813,27 @@ export const Tag: <const Id extends string>(id: Id) => <
10803
10813
  }
10804
10814
 
10805
10815
  /**
10816
+ * @example
10817
+ * import { Effect } from 'effect';
10818
+ *
10819
+ * class Prefix extends Effect.Service<Prefix>()("Prefix", {
10820
+ * sync: () => ({ prefix: "PRE" })
10821
+ * }) {}
10822
+ *
10823
+ * class Logger extends Effect.Service<Logger>()("Logger", {
10824
+ * accessors: true,
10825
+ * effect: Effect.gen(function* () {
10826
+ * const { prefix } = yield* Prefix
10827
+ * return {
10828
+ * info: (message: string) =>
10829
+ * Effect.sync(() => {
10830
+ * console.log(`[${prefix}][${message}]`)
10831
+ * })
10832
+ * }
10833
+ * }),
10834
+ * dependencies: [Prefix.Default]
10835
+ * }) {}
10836
+ *
10806
10837
  * @since 3.9.0
10807
10838
  * @category context
10808
10839
  * @experimental might be up for breaking changes
@@ -11037,6 +11068,7 @@ export declare namespace Service {
11037
11068
  readonly make: (_: MakeService<Make>) => Self
11038
11069
  }
11039
11070
  & Context.Tag<Self, Self>
11071
+ & { key: Key }
11040
11072
  & (MakeAccessors<Make> extends true ? Tag.Proxy<Self, MakeService<Make>> : {})
11041
11073
  & (MakeDeps<Make> extends never ? {
11042
11074
  readonly Default: Layer.Layer<Self, MakeError<Make>, MakeContext<Make>>
package/src/Schema.ts CHANGED
@@ -8240,6 +8240,26 @@ export interface Class<Self, Fields extends Struct.Fields, I, R, C, Inherited, P
8240
8240
 
8241
8241
  readonly identifier: string
8242
8242
 
8243
+ /**
8244
+ * @example
8245
+ * import { Schema } from "effect"
8246
+ *
8247
+ * class MyClass extends Schema.Class<MyClass>("MyClass")({
8248
+ * myField: Schema.String
8249
+ * }) {
8250
+ * myMethod() {
8251
+ * return this.myField + "my"
8252
+ * }
8253
+ * }
8254
+ *
8255
+ * class NextClass extends MyClass.extend<NextClass>("NextClass")({
8256
+ * nextField: Schema.Number
8257
+ * }) {
8258
+ * nextMethod() {
8259
+ * return this.myMethod() + this.myField + this.nextField
8260
+ * }
8261
+ * }
8262
+ */
8243
8263
  extend<Extended = never>(identifier: string): <newFields extends Struct.Fields>(
8244
8264
  fields: newFields | HasFields<newFields>,
8245
8265
  annotations?: Annotations.Schema<Extended>
@@ -8254,6 +8274,33 @@ export interface Class<Self, Fields extends Struct.Fields, I, R, C, Inherited, P
8254
8274
  Proto
8255
8275
  >
8256
8276
 
8277
+ /**
8278
+ * @example
8279
+ * import { Effect, Schema } from "effect"
8280
+ *
8281
+ * class MyClass extends Schema.Class<MyClass>("MyClass")({
8282
+ * myField: Schema.String
8283
+ * }) {
8284
+ * myMethod() {
8285
+ * return this.myField + "my"
8286
+ * }
8287
+ * }
8288
+ *
8289
+ * class NextClass extends MyClass.transformOrFail<NextClass>("NextClass")({
8290
+ * nextField: Schema.Number
8291
+ * }, {
8292
+ * decode: (i) =>
8293
+ * Effect.succeed({
8294
+ * myField: i.myField,
8295
+ * nextField: i.myField.length
8296
+ * }),
8297
+ * encode: (a) => Effect.succeed({ myField: a.myField })
8298
+ * }) {
8299
+ * nextMethod() {
8300
+ * return this.myMethod() + this.myField + this.nextField
8301
+ * }
8302
+ * }
8303
+ */
8257
8304
  transformOrFail<Transformed = never>(identifier: string): <
8258
8305
  newFields extends Struct.Fields,
8259
8306
  R2,
@@ -8284,6 +8331,33 @@ export interface Class<Self, Fields extends Struct.Fields, I, R, C, Inherited, P
8284
8331
  Proto
8285
8332
  >
8286
8333
 
8334
+ /**
8335
+ * @example
8336
+ * import { Effect, Schema } from "effect"
8337
+ *
8338
+ * class MyClass extends Schema.Class<MyClass>("MyClass")({
8339
+ * myField: Schema.String
8340
+ * }) {
8341
+ * myMethod() {
8342
+ * return this.myField + "my"
8343
+ * }
8344
+ * }
8345
+ *
8346
+ * class NextClass extends MyClass.transformOrFailFrom<NextClass>("NextClass")({
8347
+ * nextField: Schema.Number
8348
+ * }, {
8349
+ * decode: (i) =>
8350
+ * Effect.succeed({
8351
+ * myField: i.myField,
8352
+ * nextField: i.myField.length
8353
+ * }),
8354
+ * encode: (a) => Effect.succeed({ myField: a.myField })
8355
+ * }) {
8356
+ * nextMethod() {
8357
+ * return this.myMethod() + this.myField + this.nextField
8358
+ * }
8359
+ * }
8360
+ */
8287
8361
  transformOrFailFrom<Transformed = never>(identifier: string): <
8288
8362
  newFields extends Struct.Fields,
8289
8363
  R2,
@@ -8334,6 +8408,17 @@ const getFieldsFromFieldsOr = <Fields extends Struct.Fields>(fieldsOr: Fields |
8334
8408
  isFields(fieldsOr) ? fieldsOr : getFields(fieldsOr)
8335
8409
 
8336
8410
  /**
8411
+ * @example
8412
+ * import { Schema } from "effect"
8413
+ *
8414
+ * class MyClass extends Schema.Class<MyClass>("MyClass")({
8415
+ * someField: Schema.String
8416
+ * }) {
8417
+ * someMethod() {
8418
+ * return this.someField + "bar"
8419
+ * }
8420
+ * }
8421
+ *
8337
8422
  * @category classes
8338
8423
  * @since 3.10.0
8339
8424
  */
@@ -8383,6 +8468,13 @@ export interface TaggedClass<Self, Tag extends string, Fields extends Struct.Fie
8383
8468
  }
8384
8469
 
8385
8470
  /**
8471
+ * @example
8472
+ * import { Schema } from "effect"
8473
+ *
8474
+ * class MyClass extends Schema.TaggedClass<MyClass>("MyClass")("MyClass", {
8475
+ * a: Schema.String
8476
+ * }) {}
8477
+ *
8386
8478
  * @category classes
8387
8479
  * @since 3.10.0
8388
8480
  */
@@ -8429,6 +8521,21 @@ export interface TaggedErrorClass<Self, Tag extends string, Fields extends Struc
8429
8521
  }
8430
8522
 
8431
8523
  /**
8524
+ * @example
8525
+ * import { Schema } from "effect"
8526
+ *
8527
+ * class MyError extends Schema.TaggedError<MyError>("MyError")(
8528
+ * "MyError",
8529
+ * {
8530
+ * module: Schema.String,
8531
+ * method: Schema.String,
8532
+ * description: Schema.String
8533
+ * }
8534
+ * ) {
8535
+ * get message(): string {
8536
+ * return `${this.module}.${this.method}: ${this.description}`
8537
+ * }
8538
+ * }
8432
8539
  * @category classes
8433
8540
  * @since 3.10.0
8434
8541
  */
@@ -10153,6 +10260,15 @@ export interface TaggedRequestClass<
10153
10260
  }
10154
10261
 
10155
10262
  /**
10263
+ * @example
10264
+ * import { Schema } from "effect"
10265
+ *
10266
+ * class MyRequest extends Schema.TaggedRequest<MyRequest>("MyRequest")("MyRequest", {
10267
+ * failure: Schema.String,
10268
+ * success: Schema.Number,
10269
+ * payload: { id: Schema.String }
10270
+ * }) {}
10271
+ *
10156
10272
  * @category classes
10157
10273
  * @since 3.10.0
10158
10274
  */
@@ -1711,7 +1711,7 @@ export const mergeWith = dual<
1711
1711
  Effect.succeed(
1712
1712
  core.flatMap(core.write(elem), () =>
1713
1713
  core.flatMap(
1714
- core.fromEffect(Effect.forkDaemon(pull)),
1714
+ core.fromEffect(Effect.forkIn(Effect.interruptible(pull), scope)),
1715
1715
  (leftFiber) => go(both(leftFiber, fiber))
1716
1716
  ))
1717
1717
  )
@@ -1807,8 +1807,8 @@ export const mergeWith = dual<
1807
1807
  return pipe(
1808
1808
  core.fromEffect(
1809
1809
  Effect.zipWith(
1810
- Effect.forkIn(pullL, scope),
1811
- Effect.forkIn(pullR, scope),
1810
+ Effect.forkIn(Effect.interruptible(pullL), scope),
1811
+ Effect.forkIn(Effect.interruptible(pullR), scope),
1812
1812
  (left, right): State =>
1813
1813
  mergeState.BothRunning<
1814
1814
  Env | Env1,
@@ -223,7 +223,7 @@ export const number = (name?: string): Config.Config<number> => {
223
223
  const config = primitive(
224
224
  "a number property",
225
225
  (text) => {
226
- const result = Number.parseFloat(text)
226
+ const result = Number(text)
227
227
  if (Number.isNaN(result)) {
228
228
  return Either.left(
229
229
  configError.InvalidData(
@@ -243,8 +243,8 @@ export const integer = (name?: string): Config.Config<number> => {
243
243
  const config = primitive(
244
244
  "an integer property",
245
245
  (text) => {
246
- const result = Number.parseInt(text, 10)
247
- if (Number.isNaN(result)) {
246
+ const result = Number(text)
247
+ if (!Number.isInteger(result)) {
248
248
  return Either.left(
249
249
  configError.InvalidData(
250
250
  [],
@@ -1330,11 +1330,6 @@ export class FiberRuntime<in out A, in out E = never> extends Effectable.Class<A
1330
1330
  }
1331
1331
  }
1332
1332
  try {
1333
- if (!("_op" in cur) || !((cur as core.Primitive)._op in this)) {
1334
- // @ts-expect-error
1335
- absurd(cur)
1336
- }
1337
-
1338
1333
  // @ts-expect-error
1339
1334
  cur = this.currentTracer.context(
1340
1335
  () => {
@@ -1369,7 +1364,9 @@ export class FiberRuntime<in out A, in out E = never> extends Effectable.Class<A
1369
1364
  core.exitFailCause(internalCause.die(op))
1370
1365
  }
1371
1366
  } catch (e) {
1372
- if (core.isEffectError(e)) {
1367
+ if (cur !== YieldedOp && !Predicate.hasProperty(cur, "_op") || !((cur as core.Primitive)._op in this)) {
1368
+ cur = core.dieMessage(`Not a valid effect: ${Inspectable.toStringUnknown(cur)}`)
1369
+ } else if (core.isEffectError(e)) {
1373
1370
  cur = core.exitFailCause(e.cause)
1374
1371
  } else if (core.isInterruptedException(e)) {
1375
1372
  cur = core.exitFailCause(
@@ -5475,17 +5475,32 @@ export const retry = dual<
5475
5475
  self: Stream.Stream<A, E, R>,
5476
5476
  schedule: Schedule.Schedule<X, E0, R2>
5477
5477
  ): Stream.Stream<A, E, R | R2> =>
5478
- unwrap(
5479
- Effect.map(Schedule.driver(schedule), (driver) => {
5480
- const loop: Stream.Stream<A, E, R | R2> = catchAll(self, (error) =>
5481
- unwrap(
5482
- Effect.matchEffect(driver.next(error as E0), {
5483
- onFailure: () => Effect.fail(error),
5484
- onSuccess: () => Effect.succeed(pipe(loop, tap(() => driver.reset)))
5485
- })
5486
- ))
5478
+ Schedule.driver(schedule).pipe(
5479
+ Effect.map((driver) => {
5480
+ const loop: Channel.Channel<
5481
+ Chunk.Chunk<A>,
5482
+ unknown,
5483
+ E,
5484
+ unknown,
5485
+ unknown,
5486
+ unknown,
5487
+ R | R2
5488
+ > = toChannel(self).pipe(
5489
+ channel.mapOutEffect((out) => Effect.as(driver.reset, out)),
5490
+ channel.catchAll((error) =>
5491
+ driver.next(error as E0).pipe(
5492
+ Effect.match({
5493
+ onFailure: () => core.fail(error),
5494
+ onSuccess: () => loop
5495
+ }),
5496
+ channel.unwrap
5497
+ )
5498
+ )
5499
+ )
5487
5500
  return loop
5488
- })
5501
+ }),
5502
+ channel.unwrap,
5503
+ fromChannel
5489
5504
  )
5490
5505
  )
5491
5506
 
@@ -1,4 +1,4 @@
1
- let moduleVersion = "3.10.6"
1
+ let moduleVersion = "3.10.8"
2
2
 
3
3
  export const getCurrentVersion = () => moduleVersion
4
4