effect 3.17.14 → 3.18.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (54) hide show
  1. package/Graph/package.json +6 -0
  2. package/dist/cjs/Context.js +11 -3
  3. package/dist/cjs/Context.js.map +1 -1
  4. package/dist/cjs/Effect.js.map +1 -1
  5. package/dist/cjs/Graph.js +2964 -0
  6. package/dist/cjs/Graph.js.map +1 -0
  7. package/dist/cjs/Tracer.js.map +1 -1
  8. package/dist/cjs/index.js +4 -2
  9. package/dist/cjs/index.js.map +1 -1
  10. package/dist/cjs/internal/core-effect.js +1 -1
  11. package/dist/cjs/internal/core-effect.js.map +1 -1
  12. package/dist/cjs/internal/effect/circular.js +12 -2
  13. package/dist/cjs/internal/effect/circular.js.map +1 -1
  14. package/dist/cjs/internal/logger.js +2 -3
  15. package/dist/cjs/internal/logger.js.map +1 -1
  16. package/dist/cjs/internal/version.js +1 -1
  17. package/dist/cjs/internal/version.js.map +1 -1
  18. package/dist/dts/Context.d.ts +27 -3
  19. package/dist/dts/Context.d.ts.map +1 -1
  20. package/dist/dts/Effect.d.ts +4 -0
  21. package/dist/dts/Effect.d.ts.map +1 -1
  22. package/dist/dts/Graph.d.ts +1652 -0
  23. package/dist/dts/Graph.d.ts.map +1 -0
  24. package/dist/dts/Tracer.d.ts +1 -1
  25. package/dist/dts/Tracer.d.ts.map +1 -1
  26. package/dist/dts/index.d.ts +5 -0
  27. package/dist/dts/index.d.ts.map +1 -1
  28. package/dist/dts/internal/core-effect.d.ts.map +1 -1
  29. package/dist/esm/Context.js +10 -2
  30. package/dist/esm/Context.js.map +1 -1
  31. package/dist/esm/Effect.js.map +1 -1
  32. package/dist/esm/Graph.js +2905 -0
  33. package/dist/esm/Graph.js.map +1 -0
  34. package/dist/esm/Tracer.js.map +1 -1
  35. package/dist/esm/index.js +5 -0
  36. package/dist/esm/index.js.map +1 -1
  37. package/dist/esm/internal/core-effect.js +1 -1
  38. package/dist/esm/internal/core-effect.js.map +1 -1
  39. package/dist/esm/internal/effect/circular.js +12 -2
  40. package/dist/esm/internal/effect/circular.js.map +1 -1
  41. package/dist/esm/internal/logger.js +2 -3
  42. package/dist/esm/internal/logger.js.map +1 -1
  43. package/dist/esm/internal/version.js +1 -1
  44. package/dist/esm/internal/version.js.map +1 -1
  45. package/package.json +9 -1
  46. package/src/Context.ts +28 -3
  47. package/src/Effect.ts +5 -0
  48. package/src/Graph.ts +3564 -0
  49. package/src/Tracer.ts +2 -1
  50. package/src/index.ts +6 -0
  51. package/src/internal/core-effect.ts +2 -1
  52. package/src/internal/effect/circular.ts +31 -17
  53. package/src/internal/logger.ts +2 -3
  54. package/src/internal/version.ts +1 -1
package/src/Tracer.ts CHANGED
@@ -31,7 +31,8 @@ export interface Tracer {
31
31
  context: Context.Context<never>,
32
32
  links: ReadonlyArray<SpanLink>,
33
33
  startTime: bigint,
34
- kind: SpanKind
34
+ kind: SpanKind,
35
+ options?: SpanOptions
35
36
  ): Span
36
37
  context<X>(f: () => X, fiber: Fiber.RuntimeFiber<any, any>): X
37
38
  }
package/src/index.ts CHANGED
@@ -350,6 +350,12 @@ export * as Function from "./Function.js"
350
350
  */
351
351
  export * as GlobalValue from "./GlobalValue.js"
352
352
 
353
+ /**
354
+ * @experimental
355
+ * @since 3.18.0
356
+ */
357
+ export * as Graph from "./Graph.js"
358
+
353
359
  /**
354
360
  * @since 2.0.0
355
361
  */
@@ -2126,7 +2126,8 @@ export const unsafeMakeSpan = <XA, XE>(
2126
2126
  options.context ?? Context.empty(),
2127
2127
  links,
2128
2128
  timingEnabled ? clock.unsafeCurrentTimeNanos() : bigint0,
2129
- options.kind ?? "internal"
2129
+ options.kind ?? "internal",
2130
+ options
2130
2131
  )
2131
2132
 
2132
2133
  if (annotationsFromEnv._tag === "Some") {
@@ -37,7 +37,7 @@ class Semaphore {
37
37
  public waiters = new Set<() => void>()
38
38
  public taken = 0
39
39
 
40
- constructor(readonly permits: number) {}
40
+ constructor(public permits: number) {}
41
41
 
42
42
  get free() {
43
43
  return this.permits - this.taken
@@ -63,21 +63,35 @@ class Semaphore {
63
63
  return resume(core.succeed(n))
64
64
  })
65
65
 
66
- readonly updateTaken = (f: (n: number) => number): Effect.Effect<number> =>
67
- core.withFiberRuntime((fiber) => {
68
- this.taken = f(this.taken)
69
- if (this.waiters.size > 0) {
70
- fiber.getFiberRef(currentScheduler).scheduleTask(() => {
71
- const iter = this.waiters.values()
72
- let item = iter.next()
73
- while (item.done === false && this.free > 0) {
74
- item.value()
75
- item = iter.next()
76
- }
77
- }, fiber.getFiberRef(core.currentSchedulingPriority))
78
- }
79
- return core.succeed(this.free)
80
- })
66
+ updateTakenUnsafe(fiber: Fiber.RuntimeFiber<any, any>, f: (n: number) => number): Effect.Effect<number> {
67
+ this.taken = f(this.taken)
68
+ if (this.waiters.size > 0) {
69
+ fiber.getFiberRef(currentScheduler).scheduleTask(() => {
70
+ const iter = this.waiters.values()
71
+ let item = iter.next()
72
+ while (item.done === false && this.free > 0) {
73
+ item.value()
74
+ item = iter.next()
75
+ }
76
+ }, fiber.getFiberRef(core.currentSchedulingPriority))
77
+ }
78
+ return core.succeed(this.free)
79
+ }
80
+
81
+ updateTaken(f: (n: number) => number): Effect.Effect<number> {
82
+ return core.withFiberRuntime((fiber) => this.updateTakenUnsafe(fiber, f))
83
+ }
84
+
85
+ readonly resize = (permits: number) =>
86
+ core.asVoid(
87
+ core.withFiberRuntime((fiber) => {
88
+ this.permits = permits
89
+ if (this.free < 0) {
90
+ return core.void
91
+ }
92
+ return this.updateTakenUnsafe(fiber, (taken) => taken)
93
+ })
94
+ )
81
95
 
82
96
  readonly release = (n: number): Effect.Effect<number> => this.updateTaken((taken) => taken - n)
83
97
 
@@ -104,7 +118,7 @@ class Semaphore {
104
118
  }
105
119
 
106
120
  /** @internal */
107
- export const unsafeMakeSemaphore = (permits: number): Semaphore => new Semaphore(permits)
121
+ export const unsafeMakeSemaphore = (permits: number): Effect.Semaphore => new Semaphore(permits)
108
122
 
109
123
  /** @internal */
110
124
  export const makeSemaphore = (permits: number) => core.sync(() => unsafeMakeSemaphore(permits))
@@ -356,7 +356,6 @@ const prettyLoggerTty = (options: {
356
356
  readonly stderr: boolean
357
357
  readonly formatDate: (date: Date) => string
358
358
  }) => {
359
- const processIsBun = typeof process === "object" && "isBun" in process && process.isBun === true
360
359
  const color = options.colors ? withColor : withColorNoop
361
360
  return makeLogger<unknown, void>(
362
361
  ({ annotations, cause, context, date, fiberId, logLevel, message: message_, spans }) => {
@@ -389,7 +388,7 @@ const prettyLoggerTty = (options: {
389
388
  }
390
389
 
391
390
  log(firstLine)
392
- if (!processIsBun) console.group()
391
+ console.group()
393
392
 
394
393
  if (!Cause.isEmpty(cause)) {
395
394
  log(Cause.pretty(cause, { renderErrorCause: true }))
@@ -407,7 +406,7 @@ const prettyLoggerTty = (options: {
407
406
  }
408
407
  }
409
408
 
410
- if (!processIsBun) console.groupEnd()
409
+ console.groupEnd()
411
410
  }
412
411
  )
413
412
  }
@@ -1,4 +1,4 @@
1
- let moduleVersion = "3.17.14"
1
+ let moduleVersion = "3.18.1"
2
2
 
3
3
  export const getCurrentVersion = () => moduleVersion
4
4