effect 3.17.13 → 3.18.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.
- package/Graph/package.json +6 -0
- package/dist/cjs/Context.js +11 -3
- package/dist/cjs/Context.js.map +1 -1
- package/dist/cjs/Effect.js.map +1 -1
- package/dist/cjs/ExecutionPlan.js +4 -4
- package/dist/cjs/Graph.js +2964 -0
- package/dist/cjs/Graph.js.map +1 -0
- package/dist/cjs/Predicate.js +2 -3
- package/dist/cjs/Predicate.js.map +1 -1
- package/dist/cjs/Tracer.js.map +1 -1
- package/dist/cjs/index.js +4 -2
- package/dist/cjs/index.js.map +1 -1
- package/dist/cjs/internal/core-effect.js +1 -1
- package/dist/cjs/internal/core-effect.js.map +1 -1
- package/dist/cjs/internal/effect/circular.js +12 -2
- package/dist/cjs/internal/effect/circular.js.map +1 -1
- package/dist/cjs/internal/metric/hook.js +6 -1
- package/dist/cjs/internal/metric/hook.js.map +1 -1
- package/dist/cjs/internal/version.js +1 -1
- package/dist/cjs/internal/version.js.map +1 -1
- package/dist/dts/Context.d.ts +27 -3
- package/dist/dts/Context.d.ts.map +1 -1
- package/dist/dts/Effect.d.ts +4 -0
- package/dist/dts/Effect.d.ts.map +1 -1
- package/dist/dts/ExecutionPlan.d.ts +8 -8
- package/dist/dts/Graph.d.ts +1652 -0
- package/dist/dts/Graph.d.ts.map +1 -0
- package/dist/dts/Predicate.d.ts +2 -3
- package/dist/dts/Predicate.d.ts.map +1 -1
- package/dist/dts/Tracer.d.ts +1 -1
- package/dist/dts/Tracer.d.ts.map +1 -1
- package/dist/dts/index.d.ts +5 -0
- package/dist/dts/index.d.ts.map +1 -1
- package/dist/dts/internal/core-effect.d.ts.map +1 -1
- package/dist/esm/Context.js +10 -2
- package/dist/esm/Context.js.map +1 -1
- package/dist/esm/Effect.js.map +1 -1
- package/dist/esm/ExecutionPlan.js +4 -4
- package/dist/esm/Graph.js +2905 -0
- package/dist/esm/Graph.js.map +1 -0
- package/dist/esm/Predicate.js +2 -3
- package/dist/esm/Predicate.js.map +1 -1
- package/dist/esm/Tracer.js.map +1 -1
- package/dist/esm/index.js +5 -0
- package/dist/esm/index.js.map +1 -1
- package/dist/esm/internal/core-effect.js +1 -1
- package/dist/esm/internal/core-effect.js.map +1 -1
- package/dist/esm/internal/effect/circular.js +12 -2
- package/dist/esm/internal/effect/circular.js.map +1 -1
- package/dist/esm/internal/metric/hook.js +6 -1
- package/dist/esm/internal/metric/hook.js.map +1 -1
- package/dist/esm/internal/version.js +1 -1
- package/dist/esm/internal/version.js.map +1 -1
- package/package.json +9 -1
- package/src/Context.ts +28 -3
- package/src/Effect.ts +5 -0
- package/src/ExecutionPlan.ts +8 -8
- package/src/Graph.ts +3564 -0
- package/src/Predicate.ts +2 -3
- package/src/Tracer.ts +2 -1
- package/src/index.ts +6 -0
- package/src/internal/core-effect.ts +2 -1
- package/src/internal/effect/circular.ts +31 -17
- package/src/internal/metric/hook.ts +6 -1
- package/src/internal/version.ts +1 -1
package/src/Predicate.ts
CHANGED
|
@@ -488,8 +488,7 @@ export const isMap = (input: unknown): input is Map<unknown, unknown> => input i
|
|
|
488
488
|
export const isString = (input: unknown): input is string => typeof input === "string"
|
|
489
489
|
|
|
490
490
|
/**
|
|
491
|
-
* A refinement that checks if a value is a `number`.
|
|
492
|
-
* check returns `false` for `NaN`.
|
|
491
|
+
* A refinement that checks if a value is a `number`.
|
|
493
492
|
*
|
|
494
493
|
* @example
|
|
495
494
|
* ```ts
|
|
@@ -499,9 +498,9 @@ export const isString = (input: unknown): input is string => typeof input === "s
|
|
|
499
498
|
* assert.strictEqual(isNumber(123), true)
|
|
500
499
|
* assert.strictEqual(isNumber(0), true)
|
|
501
500
|
* assert.strictEqual(isNumber(-1.5), true)
|
|
501
|
+
* assert.strictEqual(isNumber(NaN), true)
|
|
502
502
|
*
|
|
503
503
|
* assert.strictEqual(isNumber("123"), false)
|
|
504
|
-
* assert.strictEqual(isNumber(NaN), false) // Special case: NaN is a number type but returns false
|
|
505
504
|
* ```
|
|
506
505
|
*
|
|
507
506
|
* @category guards
|
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
|
@@ -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(
|
|
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
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
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))
|
|
@@ -140,7 +140,12 @@ export const histogram = (key: MetricKey.MetricKey.Histogram): MetricHook.Metric
|
|
|
140
140
|
const bounds = key.keyType.boundaries.values
|
|
141
141
|
const size = bounds.length
|
|
142
142
|
const values = new Uint32Array(size + 1)
|
|
143
|
-
|
|
143
|
+
// NOTE: while 64-bit floating point precision shoule be enough for any
|
|
144
|
+
// practical histogram boundary values, there is still a small chance that
|
|
145
|
+
// precision will be lost with very large / very small numbers. If we find
|
|
146
|
+
// that is the case, a more complex approach storing the histogram boundary
|
|
147
|
+
// values as a tuple of `[original: string, numeric: number]` may be warranted
|
|
148
|
+
const boundaries = new Float64Array(size)
|
|
144
149
|
let count = 0
|
|
145
150
|
let sum = 0
|
|
146
151
|
let min = Number.MAX_VALUE
|
package/src/internal/version.ts
CHANGED