effect 2.3.6 → 2.3.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.
- package/ModuleVersion/package.json +6 -0
- package/dist/cjs/BigDecimal.js +1 -1
- package/dist/cjs/BigDecimal.js.map +1 -1
- package/dist/cjs/Chunk.js +1 -1
- package/dist/cjs/Chunk.js.map +1 -1
- package/dist/cjs/Cron.js +1 -1
- package/dist/cjs/Cron.js.map +1 -1
- package/dist/cjs/Duration.js +1 -1
- package/dist/cjs/Duration.js.map +1 -1
- package/dist/cjs/FiberMap.js.map +1 -1
- package/dist/cjs/GlobalValue.js +27 -2
- package/dist/cjs/GlobalValue.js.map +1 -1
- package/dist/cjs/Hash.js +29 -1
- package/dist/cjs/Hash.js.map +1 -1
- package/dist/cjs/List.js +3 -2
- package/dist/cjs/List.js.map +1 -1
- package/dist/cjs/ModuleVersion.js +49 -0
- package/dist/cjs/ModuleVersion.js.map +1 -0
- package/dist/cjs/SortedMap.js +1 -1
- package/dist/cjs/SortedMap.js.map +1 -1
- package/dist/cjs/SortedSet.js +1 -1
- package/dist/cjs/SortedSet.js.map +1 -1
- package/dist/cjs/TestAnnotation.js +1 -1
- package/dist/cjs/TestAnnotation.js.map +1 -1
- package/dist/cjs/index.js +4 -2
- package/dist/cjs/index.js.map +1 -1
- package/dist/cjs/internal/cache.js +2 -2
- package/dist/cjs/internal/cache.js.map +1 -1
- package/dist/cjs/internal/cause.js +1 -1
- package/dist/cjs/internal/cause.js.map +1 -1
- package/dist/cjs/internal/context.js +1 -1
- package/dist/cjs/internal/context.js.map +1 -1
- package/dist/cjs/internal/core.js +4 -4
- package/dist/cjs/internal/core.js.map +1 -1
- package/dist/cjs/internal/data.js +1 -1
- package/dist/cjs/internal/data.js.map +1 -1
- package/dist/cjs/internal/effect/circular.js +1 -1
- package/dist/cjs/internal/effect/circular.js.map +1 -1
- package/dist/cjs/internal/effectable.js +4 -4
- package/dist/cjs/internal/effectable.js.map +1 -1
- package/dist/cjs/internal/either.js +2 -2
- package/dist/cjs/internal/either.js.map +1 -1
- package/dist/cjs/internal/fiberId.js +2 -9
- package/dist/cjs/internal/fiberId.js.map +1 -1
- package/dist/cjs/internal/fiberRuntime.js +3 -3
- package/dist/cjs/internal/fiberRuntime.js.map +1 -1
- package/dist/cjs/internal/fiberStatus.js +4 -3
- package/dist/cjs/internal/fiberStatus.js.map +1 -1
- package/dist/cjs/internal/hashMap.js +1 -1
- package/dist/cjs/internal/hashMap.js.map +1 -1
- package/dist/cjs/internal/hashSet.js +1 -1
- package/dist/cjs/internal/hashSet.js.map +1 -1
- package/dist/cjs/internal/keyedPool.js +2 -2
- package/dist/cjs/internal/keyedPool.js.map +1 -1
- package/dist/cjs/internal/metric/keyType.js +4 -4
- package/dist/cjs/internal/metric/keyType.js.map +1 -1
- package/dist/cjs/internal/metric/state.js +5 -9
- package/dist/cjs/internal/metric/state.js.map +1 -1
- package/dist/cjs/internal/option.js +3 -2
- package/dist/cjs/internal/option.js.map +1 -1
- package/dist/cjs/internal/pool.js +1 -1
- package/dist/cjs/internal/pool.js.map +1 -1
- package/dist/cjs/internal/redBlackTree.js +1 -1
- package/dist/cjs/internal/redBlackTree.js.map +1 -1
- package/dist/cjs/internal/secret.js +1 -1
- package/dist/cjs/internal/secret.js.map +1 -1
- package/dist/cjs/internal/stm/core.js +1 -1
- package/dist/cjs/internal/stm/core.js.map +1 -1
- package/dist/cjs/internal/stm/stm/stmState.js +6 -4
- package/dist/cjs/internal/stm/stm/stmState.js.map +1 -1
- package/dist/cjs/internal/stm/stm/tExit.js +7 -6
- package/dist/cjs/internal/stm/stm/tExit.js.map +1 -1
- package/dist/cjs/internal/trie.js +1 -1
- package/dist/cjs/internal/trie.js.map +1 -1
- package/dist/cjs/internal/version.js +8 -2
- package/dist/cjs/internal/version.js.map +1 -1
- package/dist/dts/BigDecimal.d.ts.map +1 -1
- package/dist/dts/Cron.d.ts.map +1 -1
- package/dist/dts/FiberMap.d.ts +4 -5
- package/dist/dts/FiberMap.d.ts.map +1 -1
- package/dist/dts/Hash.d.ts +8 -0
- package/dist/dts/Hash.d.ts.map +1 -1
- package/dist/dts/List.d.ts.map +1 -1
- package/dist/dts/ModuleVersion.d.ts +11 -0
- package/dist/dts/ModuleVersion.d.ts.map +1 -0
- package/dist/dts/SortedMap.d.ts.map +1 -1
- package/dist/dts/SortedSet.d.ts.map +1 -1
- package/dist/dts/TestAnnotation.d.ts.map +1 -1
- package/dist/dts/index.d.ts +6 -0
- package/dist/dts/index.d.ts.map +1 -1
- package/dist/dts/internal/metric/keyType.d.ts.map +1 -1
- package/dist/dts/internal/metric/state.d.ts.map +1 -1
- package/dist/dts/internal/version.d.ts +2 -1
- package/dist/dts/internal/version.d.ts.map +1 -1
- package/dist/esm/BigDecimal.js +1 -1
- package/dist/esm/BigDecimal.js.map +1 -1
- package/dist/esm/Chunk.js +1 -1
- package/dist/esm/Chunk.js.map +1 -1
- package/dist/esm/Cron.js +1 -1
- package/dist/esm/Cron.js.map +1 -1
- package/dist/esm/Duration.js +1 -1
- package/dist/esm/Duration.js.map +1 -1
- package/dist/esm/FiberMap.js.map +1 -1
- package/dist/esm/GlobalValue.js +2 -2
- package/dist/esm/GlobalValue.js.map +1 -1
- package/dist/esm/Hash.js +27 -0
- package/dist/esm/Hash.js.map +1 -1
- package/dist/esm/List.js +3 -2
- package/dist/esm/List.js.map +1 -1
- package/dist/esm/ModuleVersion.js +17 -0
- package/dist/esm/ModuleVersion.js.map +1 -0
- package/dist/esm/SortedMap.js +1 -1
- package/dist/esm/SortedMap.js.map +1 -1
- package/dist/esm/SortedSet.js +1 -1
- package/dist/esm/SortedSet.js.map +1 -1
- package/dist/esm/TestAnnotation.js +1 -1
- package/dist/esm/TestAnnotation.js.map +1 -1
- package/dist/esm/index.js +6 -0
- package/dist/esm/index.js.map +1 -1
- package/dist/esm/internal/cache.js +2 -2
- package/dist/esm/internal/cache.js.map +1 -1
- package/dist/esm/internal/cause.js +1 -1
- package/dist/esm/internal/cause.js.map +1 -1
- package/dist/esm/internal/context.js +1 -1
- package/dist/esm/internal/context.js.map +1 -1
- package/dist/esm/internal/core.js +4 -4
- package/dist/esm/internal/core.js.map +1 -1
- package/dist/esm/internal/data.js +1 -1
- package/dist/esm/internal/data.js.map +1 -1
- package/dist/esm/internal/effect/circular.js +1 -1
- package/dist/esm/internal/effect/circular.js.map +1 -1
- package/dist/esm/internal/effectable.js +4 -4
- package/dist/esm/internal/effectable.js.map +1 -1
- package/dist/esm/internal/either.js +2 -2
- package/dist/esm/internal/either.js.map +1 -1
- package/dist/esm/internal/fiberId.js +2 -9
- package/dist/esm/internal/fiberId.js.map +1 -1
- package/dist/esm/internal/fiberRuntime.js +3 -3
- package/dist/esm/internal/fiberRuntime.js.map +1 -1
- package/dist/esm/internal/fiberStatus.js +4 -3
- package/dist/esm/internal/fiberStatus.js.map +1 -1
- package/dist/esm/internal/hashMap.js +1 -1
- package/dist/esm/internal/hashMap.js.map +1 -1
- package/dist/esm/internal/hashSet.js +1 -1
- package/dist/esm/internal/hashSet.js.map +1 -1
- package/dist/esm/internal/keyedPool.js +2 -2
- package/dist/esm/internal/keyedPool.js.map +1 -1
- package/dist/esm/internal/metric/keyType.js +4 -4
- package/dist/esm/internal/metric/keyType.js.map +1 -1
- package/dist/esm/internal/metric/state.js +5 -9
- package/dist/esm/internal/metric/state.js.map +1 -1
- package/dist/esm/internal/option.js +3 -2
- package/dist/esm/internal/option.js.map +1 -1
- package/dist/esm/internal/pool.js +1 -1
- package/dist/esm/internal/pool.js.map +1 -1
- package/dist/esm/internal/redBlackTree.js +1 -1
- package/dist/esm/internal/redBlackTree.js.map +1 -1
- package/dist/esm/internal/secret.js +1 -1
- package/dist/esm/internal/secret.js.map +1 -1
- package/dist/esm/internal/stm/core.js +1 -1
- package/dist/esm/internal/stm/core.js.map +1 -1
- package/dist/esm/internal/stm/stm/stmState.js +5 -3
- package/dist/esm/internal/stm/stm/stmState.js.map +1 -1
- package/dist/esm/internal/stm/stm/tExit.js +6 -5
- package/dist/esm/internal/stm/stm/tExit.js.map +1 -1
- package/dist/esm/internal/trie.js +1 -1
- package/dist/esm/internal/trie.js.map +1 -1
- package/dist/esm/internal/version.js +5 -1
- package/dist/esm/internal/version.js.map +1 -1
- package/package.json +11 -2
- package/src/BigDecimal.ts +2 -1
- package/src/Chunk.ts +1 -1
- package/src/Cron.ts +2 -1
- package/src/Duration.ts +2 -2
- package/src/FiberMap.ts +0 -1
- package/src/GlobalValue.ts +2 -2
- package/src/Hash.ts +31 -0
- package/src/List.ts +3 -2
- package/src/ModuleVersion.ts +18 -0
- package/src/SortedMap.ts +5 -1
- package/src/SortedSet.ts +5 -1
- package/src/TestAnnotation.ts +2 -1
- package/src/index.ts +7 -0
- package/src/internal/cache.ts +3 -2
- package/src/internal/cause.ts +2 -1
- package/src/internal/context.ts +1 -1
- package/src/internal/core.ts +4 -4
- package/src/internal/data.ts +1 -1
- package/src/internal/effect/circular.ts +1 -1
- package/src/internal/effectable.ts +5 -5
- package/src/internal/either.ts +2 -2
- package/src/internal/fiberId.ts +7 -13
- package/src/internal/fiberRuntime.ts +3 -3
- package/src/internal/fiberStatus.ts +7 -6
- package/src/internal/hashMap.ts +2 -2
- package/src/internal/hashSet.ts +4 -1
- package/src/internal/keyedPool.ts +4 -2
- package/src/internal/metric/keyType.ts +7 -5
- package/src/internal/metric/state.ts +11 -10
- package/src/internal/option.ts +3 -2
- package/src/internal/pool.ts +2 -1
- package/src/internal/redBlackTree.ts +2 -2
- package/src/internal/secret.ts +2 -1
- package/src/internal/stm/core.ts +1 -1
- package/src/internal/stm/stm/stmState.ts +16 -11
- package/src/internal/stm/stm/tExit.ts +15 -9
- package/src/internal/trie.ts +2 -2
- package/src/internal/version.ts +7 -1
package/package.json
CHANGED
|
@@ -1,11 +1,12 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "effect",
|
|
3
|
-
"version": "2.3.
|
|
3
|
+
"version": "2.3.8",
|
|
4
4
|
"description": "Functional programming in TypeScript",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"repository": {
|
|
7
7
|
"type": "git",
|
|
8
|
-
"url": "https://github.com/effect-ts/effect.git"
|
|
8
|
+
"url": "https://github.com/effect-ts/effect.git",
|
|
9
|
+
"directory": "packages/effect"
|
|
9
10
|
},
|
|
10
11
|
"sideEffects": [],
|
|
11
12
|
"main": "./dist/cjs/index.js",
|
|
@@ -348,6 +349,11 @@
|
|
|
348
349
|
"import": "./dist/esm/MetricState.js",
|
|
349
350
|
"default": "./dist/cjs/MetricState.js"
|
|
350
351
|
},
|
|
352
|
+
"./ModuleVersion": {
|
|
353
|
+
"types": "./dist/dts/ModuleVersion.d.ts",
|
|
354
|
+
"import": "./dist/esm/ModuleVersion.js",
|
|
355
|
+
"default": "./dist/cjs/ModuleVersion.js"
|
|
356
|
+
},
|
|
351
357
|
"./MutableHashMap": {
|
|
352
358
|
"types": "./dist/dts/MutableHashMap.d.ts",
|
|
353
359
|
"import": "./dist/esm/MutableHashMap.js",
|
|
@@ -964,6 +970,9 @@
|
|
|
964
970
|
"MetricState": [
|
|
965
971
|
"./dist/dts/MetricState.d.ts"
|
|
966
972
|
],
|
|
973
|
+
"ModuleVersion": [
|
|
974
|
+
"./dist/dts/ModuleVersion.d.ts"
|
|
975
|
+
],
|
|
967
976
|
"MutableHashMap": [
|
|
968
977
|
"./dist/dts/MutableHashMap.d.ts"
|
|
969
978
|
],
|
package/src/BigDecimal.ts
CHANGED
|
@@ -57,7 +57,8 @@ const BigDecimalProto: Omit<BigDecimal, "value" | "scale" | "normalized"> = {
|
|
|
57
57
|
const normalized = normalize(this)
|
|
58
58
|
return pipe(
|
|
59
59
|
Hash.hash(normalized.value),
|
|
60
|
-
Hash.combine(Hash.number(normalized.scale))
|
|
60
|
+
Hash.combine(Hash.number(normalized.scale)),
|
|
61
|
+
Hash.cached(this)
|
|
61
62
|
)
|
|
62
63
|
},
|
|
63
64
|
[Equal.symbol](this: BigDecimal, that: unknown): boolean {
|
package/src/Chunk.ts
CHANGED
|
@@ -142,7 +142,7 @@ const ChunkProto: Omit<Chunk<unknown>, "backing" | "depth" | "left" | "length" |
|
|
|
142
142
|
return isChunk(that) && _equivalence(this, that)
|
|
143
143
|
},
|
|
144
144
|
[Hash.symbol]<A>(this: Chunk<A>): number {
|
|
145
|
-
return Hash.array(toReadonlyArray(this))
|
|
145
|
+
return Hash.cached(this, Hash.array(toReadonlyArray(this)))
|
|
146
146
|
},
|
|
147
147
|
[Symbol.iterator]<A>(this: Chunk<A>): Iterator<A> {
|
|
148
148
|
switch (this.backing._tag) {
|
package/src/Cron.ts
CHANGED
|
@@ -50,7 +50,8 @@ const CronProto: Omit<Cron, "minutes" | "hours" | "days" | "months" | "weekdays"
|
|
|
50
50
|
Hash.combine(Hash.array(ReadonlyArray.fromIterable(this.hours))),
|
|
51
51
|
Hash.combine(Hash.array(ReadonlyArray.fromIterable(this.days))),
|
|
52
52
|
Hash.combine(Hash.array(ReadonlyArray.fromIterable(this.months))),
|
|
53
|
-
Hash.combine(Hash.array(ReadonlyArray.fromIterable(this.weekdays)))
|
|
53
|
+
Hash.combine(Hash.array(ReadonlyArray.fromIterable(this.weekdays))),
|
|
54
|
+
Hash.cached(this)
|
|
54
55
|
)
|
|
55
56
|
},
|
|
56
57
|
toString(this: Cron) {
|
package/src/Duration.ts
CHANGED
|
@@ -116,8 +116,8 @@ const infinityValue: DurationValue = { _tag: "Infinity" }
|
|
|
116
116
|
|
|
117
117
|
const DurationProto: Omit<Duration, "value"> = {
|
|
118
118
|
[TypeId]: TypeId,
|
|
119
|
-
[Hash.symbol](this: Duration)
|
|
120
|
-
return Hash.structure(this.value)
|
|
119
|
+
[Hash.symbol](this: Duration) {
|
|
120
|
+
return Hash.cached(this, Hash.structure(this.value))
|
|
121
121
|
},
|
|
122
122
|
[Equal.symbol](this: Duration, that: unknown): boolean {
|
|
123
123
|
return isDuration(that) && equals(this, that)
|
package/src/FiberMap.ts
CHANGED
|
@@ -7,7 +7,6 @@ import type { NoSuchElementException } from "./Cause.js"
|
|
|
7
7
|
import * as Fiber from "./Fiber.js"
|
|
8
8
|
import * as FiberId from "./FiberId.js"
|
|
9
9
|
import { dual } from "./Function.js"
|
|
10
|
-
import type { FiberMap } from "./index.js"
|
|
11
10
|
import * as Inspectable from "./Inspectable.js"
|
|
12
11
|
import * as MutableHashMap from "./MutableHashMap.js"
|
|
13
12
|
import * as Option from "./Option.js"
|
package/src/GlobalValue.ts
CHANGED
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* @since 2.0.0
|
|
3
3
|
*/
|
|
4
|
-
import
|
|
4
|
+
import * as version from "./internal/version.js"
|
|
5
5
|
|
|
6
|
-
const globalStoreId = Symbol.for(`effect/GlobalValue/globalStoreId/${
|
|
6
|
+
const globalStoreId = Symbol.for(`effect/GlobalValue/globalStoreId/${version.getCurrentVersion()}`)
|
|
7
7
|
|
|
8
8
|
if (!(globalStoreId in globalThis)) {
|
|
9
9
|
;(globalThis as any)[globalStoreId] = new Map()
|
package/src/Hash.ts
CHANGED
|
@@ -156,3 +156,34 @@ export const array = <A>(arr: ReadonlyArray<A>) => {
|
|
|
156
156
|
}
|
|
157
157
|
return optimize(h)
|
|
158
158
|
}
|
|
159
|
+
|
|
160
|
+
/**
|
|
161
|
+
* @since 2.0.0
|
|
162
|
+
* @category hashing
|
|
163
|
+
*/
|
|
164
|
+
export const cached: {
|
|
165
|
+
(self: object): (hash: number) => number
|
|
166
|
+
(self: object, hash: number): number
|
|
167
|
+
} = function() {
|
|
168
|
+
if (arguments.length === 1) {
|
|
169
|
+
const self = arguments[0] as object
|
|
170
|
+
return function(hash: number) {
|
|
171
|
+
Object.defineProperty(self, symbol, {
|
|
172
|
+
value() {
|
|
173
|
+
return hash
|
|
174
|
+
},
|
|
175
|
+
enumerable: false
|
|
176
|
+
})
|
|
177
|
+
return hash
|
|
178
|
+
} as any
|
|
179
|
+
}
|
|
180
|
+
const self = arguments[0] as object
|
|
181
|
+
const hash = arguments[1] as number
|
|
182
|
+
Object.defineProperty(self, symbol, {
|
|
183
|
+
value() {
|
|
184
|
+
return hash
|
|
185
|
+
},
|
|
186
|
+
enumerable: false
|
|
187
|
+
})
|
|
188
|
+
return hash
|
|
189
|
+
}
|
package/src/List.ts
CHANGED
|
@@ -118,7 +118,7 @@ const ConsProto: Omit<Cons<unknown>, "head" | "tail"> = {
|
|
|
118
118
|
_equivalence(this, that)
|
|
119
119
|
},
|
|
120
120
|
[Hash.symbol](this: Cons<unknown>): number {
|
|
121
|
-
return Hash.array(toArray(this))
|
|
121
|
+
return Hash.cached(this, Hash.array(toArray(this)))
|
|
122
122
|
},
|
|
123
123
|
[Symbol.iterator](this: Cons<unknown>): Iterator<unknown> {
|
|
124
124
|
let done = false
|
|
@@ -162,6 +162,7 @@ const makeCons = <A>(head: A, tail: List<A>): MutableCons<A> => {
|
|
|
162
162
|
return cons
|
|
163
163
|
}
|
|
164
164
|
|
|
165
|
+
const NilHash = Hash.string("Nil")
|
|
165
166
|
const NilProto: Nil<unknown> = {
|
|
166
167
|
[TypeId]: TypeId,
|
|
167
168
|
_tag: "Nil",
|
|
@@ -178,7 +179,7 @@ const NilProto: Nil<unknown> = {
|
|
|
178
179
|
return this.toJSON()
|
|
179
180
|
},
|
|
180
181
|
[Hash.symbol](): number {
|
|
181
|
-
return
|
|
182
|
+
return NilHash
|
|
182
183
|
},
|
|
183
184
|
[Equal.symbol](that: unknown): boolean {
|
|
184
185
|
return isList(that) && this._tag === that._tag
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @since 2.0.0
|
|
3
|
+
*
|
|
4
|
+
* Enables low level framework authors to run on their own isolated effect version
|
|
5
|
+
*/
|
|
6
|
+
import * as internal from "./internal/version.js"
|
|
7
|
+
|
|
8
|
+
/**
|
|
9
|
+
* @since 2.0.0
|
|
10
|
+
* @category version
|
|
11
|
+
*/
|
|
12
|
+
export const getCurrentVersion: () => string = internal.getCurrentVersion
|
|
13
|
+
|
|
14
|
+
/**
|
|
15
|
+
* @since 2.0.0
|
|
16
|
+
* @category version
|
|
17
|
+
*/
|
|
18
|
+
export const setCurrentVersion: (version: string) => void = internal.setCurrentVersion
|
package/src/SortedMap.ts
CHANGED
|
@@ -41,7 +41,11 @@ const SortedMapProto: Omit<SortedMap<unknown, unknown>, "tree"> = {
|
|
|
41
41
|
_V: (_: never) => _
|
|
42
42
|
},
|
|
43
43
|
[Hash.symbol]<K, V>(this: SortedMap<K, V>): number {
|
|
44
|
-
return pipe(
|
|
44
|
+
return pipe(
|
|
45
|
+
Hash.hash(this.tree),
|
|
46
|
+
Hash.combine(Hash.hash("effect/SortedMap")),
|
|
47
|
+
Hash.cached(this)
|
|
48
|
+
)
|
|
45
49
|
},
|
|
46
50
|
[Equal.symbol]<K, V>(this: SortedMap<K, V>, that: unknown): boolean {
|
|
47
51
|
return isSortedMap(that) && Equal.equals(this.tree, that.tree)
|
package/src/SortedSet.ts
CHANGED
|
@@ -40,7 +40,11 @@ const SortedSetProto: Omit<SortedSet<unknown>, "keyTree"> = {
|
|
|
40
40
|
_A: (_: any) => _
|
|
41
41
|
},
|
|
42
42
|
[Hash.symbol]<A>(this: SortedSet<A>): number {
|
|
43
|
-
return pipe(
|
|
43
|
+
return pipe(
|
|
44
|
+
Hash.hash(this.keyTree),
|
|
45
|
+
Hash.combine(Hash.hash(TypeId)),
|
|
46
|
+
Hash.cached(this)
|
|
47
|
+
)
|
|
44
48
|
},
|
|
45
49
|
[Equal.symbol]<A>(this: SortedSet<A>, that: unknown): boolean {
|
|
46
50
|
return isSortedSet(that) && Equal.equals(this.keyTree, that.keyTree)
|
package/src/TestAnnotation.ts
CHANGED
|
@@ -51,7 +51,8 @@ class TestAnnotationImpl<A> implements Equal.Equal {
|
|
|
51
51
|
[Hash.symbol](): number {
|
|
52
52
|
return pipe(
|
|
53
53
|
Hash.hash(TestAnnotationSymbolKey),
|
|
54
|
-
Hash.combine(Hash.hash(this.identifier))
|
|
54
|
+
Hash.combine(Hash.hash(this.identifier)),
|
|
55
|
+
Hash.cached(this)
|
|
55
56
|
)
|
|
56
57
|
}
|
|
57
58
|
[Equal.symbol](that: unknown): boolean {
|
package/src/index.ts
CHANGED
|
@@ -455,6 +455,13 @@ export * as MetricRegistry from "./MetricRegistry.js"
|
|
|
455
455
|
*/
|
|
456
456
|
export * as MetricState from "./MetricState.js"
|
|
457
457
|
|
|
458
|
+
/**
|
|
459
|
+
* @since 2.0.0
|
|
460
|
+
*
|
|
461
|
+
* Enables low level framework authors to run on their own isolated effect version
|
|
462
|
+
*/
|
|
463
|
+
export * as ModuleVersion from "./ModuleVersion.js"
|
|
464
|
+
|
|
458
465
|
/**
|
|
459
466
|
* @since 2.0.0
|
|
460
467
|
*/
|
package/src/internal/cache.ts
CHANGED
|
@@ -123,7 +123,8 @@ class MapKeyImpl<out K> implements MapKey<K> {
|
|
|
123
123
|
return pipe(
|
|
124
124
|
Hash.hash(this.current),
|
|
125
125
|
Hash.combine(Hash.hash(this.previous)),
|
|
126
|
-
Hash.combine(Hash.hash(this.next))
|
|
126
|
+
Hash.combine(Hash.hash(this.next)),
|
|
127
|
+
Hash.cached(this)
|
|
127
128
|
)
|
|
128
129
|
}
|
|
129
130
|
[Equal.symbol](that: unknown): boolean {
|
|
@@ -551,11 +552,11 @@ class CacheImpl<in out Key, in out Error, in out Value> implements Cache.Cache<K
|
|
|
551
552
|
switch (value._tag) {
|
|
552
553
|
case "Complete": {
|
|
553
554
|
this.trackAccess(value.key)
|
|
554
|
-
this.trackHit()
|
|
555
555
|
if (this.hasExpired(clock, value.timeToLiveMillis)) {
|
|
556
556
|
MutableHashMap.remove(this.cacheState.map, value.key.current)
|
|
557
557
|
return core.succeed(Option.none<Value>())
|
|
558
558
|
}
|
|
559
|
+
this.trackHit()
|
|
559
560
|
return core.map(value.exit, Option.some)
|
|
560
561
|
}
|
|
561
562
|
case "Pending": {
|
package/src/internal/cause.ts
CHANGED
|
@@ -39,7 +39,8 @@ const proto = {
|
|
|
39
39
|
[Hash.symbol](this: Cause.Cause<any>): number {
|
|
40
40
|
return pipe(
|
|
41
41
|
Hash.hash(CauseSymbolKey),
|
|
42
|
-
Hash.combine(Hash.hash(flattenCause(this)))
|
|
42
|
+
Hash.combine(Hash.hash(flattenCause(this))),
|
|
43
|
+
Hash.cached(this)
|
|
43
44
|
)
|
|
44
45
|
},
|
|
45
46
|
[Equal.symbol](this: Cause.Cause<any>, that: unknown): boolean {
|
package/src/internal/context.ts
CHANGED
|
@@ -111,7 +111,7 @@ export const ContextProto: Omit<C.Context<unknown>, "unsafeMap"> = {
|
|
|
111
111
|
return false
|
|
112
112
|
},
|
|
113
113
|
[Hash.symbol]<A>(this: C.Context<A>): number {
|
|
114
|
-
return Hash.number(this.unsafeMap.size)
|
|
114
|
+
return Hash.cached(this, Hash.number(this.unsafeMap.size))
|
|
115
115
|
},
|
|
116
116
|
pipe<A>(this: C.Context<A>) {
|
|
117
117
|
return pipeArguments(this, arguments)
|
package/src/internal/core.ts
CHANGED
|
@@ -158,7 +158,7 @@ class EffectPrimitive {
|
|
|
158
158
|
return this === that
|
|
159
159
|
}
|
|
160
160
|
[Hash.symbol](this: {}) {
|
|
161
|
-
return Hash.random(this)
|
|
161
|
+
return Hash.cached(this, Hash.random(this))
|
|
162
162
|
}
|
|
163
163
|
pipe() {
|
|
164
164
|
return pipeArguments(this, arguments)
|
|
@@ -195,7 +195,7 @@ class EffectPrimitiveFailure {
|
|
|
195
195
|
return this === that
|
|
196
196
|
}
|
|
197
197
|
[Hash.symbol](this: {}) {
|
|
198
|
-
return Hash.random(this)
|
|
198
|
+
return Hash.cached(this, Hash.random(this))
|
|
199
199
|
}
|
|
200
200
|
get cause() {
|
|
201
201
|
return this.i0
|
|
@@ -233,7 +233,7 @@ class EffectPrimitiveSuccess {
|
|
|
233
233
|
return this === that
|
|
234
234
|
}
|
|
235
235
|
[Hash.symbol](this: {}) {
|
|
236
|
-
return Hash.random(this)
|
|
236
|
+
return Hash.cached(this, Hash.random(this))
|
|
237
237
|
}
|
|
238
238
|
get value() {
|
|
239
239
|
return this.i0
|
|
@@ -1734,7 +1734,7 @@ export class RequestResolverImpl<out R, in A> implements RequestResolver.Request
|
|
|
1734
1734
|
this.runAll = runAll as any
|
|
1735
1735
|
}
|
|
1736
1736
|
[Hash.symbol](): number {
|
|
1737
|
-
return this.target ? Hash.hash(this.target) : Hash.random(this)
|
|
1737
|
+
return Hash.cached(this, this.target ? Hash.hash(this.target) : Hash.random(this))
|
|
1738
1738
|
}
|
|
1739
1739
|
[Equal.symbol](that: unknown): boolean {
|
|
1740
1740
|
return this.target ?
|
package/src/internal/data.ts
CHANGED
|
@@ -6,7 +6,7 @@ import { StructuralPrototype } from "./effectable.js"
|
|
|
6
6
|
/** @internal */
|
|
7
7
|
export const ArrayProto: Equal.Equal = Object.assign(Object.create(Array.prototype), {
|
|
8
8
|
[Hash.symbol](this: Array<any>) {
|
|
9
|
-
return Hash.array(this)
|
|
9
|
+
return Hash.cached(this, Hash.array(this))
|
|
10
10
|
},
|
|
11
11
|
[Equal.symbol](this: Array<any>, that: Equal.Equal) {
|
|
12
12
|
if (Array.isArray(that) && this.length === that.length) {
|
|
@@ -7,7 +7,7 @@ import { pipeArguments } from "../Pipeable.js"
|
|
|
7
7
|
import type * as Sink from "../Sink.js"
|
|
8
8
|
import type * as Stream from "../Stream.js"
|
|
9
9
|
import * as OpCodes from "./opCodes/effect.js"
|
|
10
|
-
import
|
|
10
|
+
import * as version from "./version.js"
|
|
11
11
|
|
|
12
12
|
/** @internal */
|
|
13
13
|
export const EffectTypeId: Effect.EffectTypeId = Symbol.for("effect/Effect") as Effect.EffectTypeId
|
|
@@ -30,7 +30,7 @@ export const effectVariance = {
|
|
|
30
30
|
/* c8 ignore next */
|
|
31
31
|
_A: (_: never) => _,
|
|
32
32
|
|
|
33
|
-
_V:
|
|
33
|
+
_V: version.getCurrentVersion()
|
|
34
34
|
}
|
|
35
35
|
|
|
36
36
|
const sinkVariance = {
|
|
@@ -73,7 +73,7 @@ export const EffectPrototype: Effect.Effect<never> & Equal.Equal = {
|
|
|
73
73
|
return this === that
|
|
74
74
|
},
|
|
75
75
|
[Hash.symbol]() {
|
|
76
|
-
return Hash.random(this)
|
|
76
|
+
return Hash.cached(this, Hash.random(this))
|
|
77
77
|
},
|
|
78
78
|
pipe() {
|
|
79
79
|
return pipeArguments(this, arguments)
|
|
@@ -82,8 +82,8 @@ export const EffectPrototype: Effect.Effect<never> & Equal.Equal = {
|
|
|
82
82
|
|
|
83
83
|
/** @internal */
|
|
84
84
|
export const StructuralPrototype: Equal.Equal = {
|
|
85
|
-
[Hash.symbol](
|
|
86
|
-
return Hash.structure(this)
|
|
85
|
+
[Hash.symbol]() {
|
|
86
|
+
return Hash.cached(this, Hash.structure(this))
|
|
87
87
|
},
|
|
88
88
|
[Equal.symbol](this: Equal.Equal, that: Equal.Equal) {
|
|
89
89
|
const selfKeys = Object.keys(this)
|
package/src/internal/either.ts
CHANGED
|
@@ -37,7 +37,7 @@ const RightProto = Object.assign(Object.create(CommonProto), {
|
|
|
37
37
|
return isEither(that) && isRight(that) && Equal.equals(that.right, this.right)
|
|
38
38
|
},
|
|
39
39
|
[Hash.symbol]<E, A>(this: Either.Right<E, A>) {
|
|
40
|
-
return Hash.combine(Hash.hash(this._tag))(Hash.hash(this.right))
|
|
40
|
+
return Hash.cached(this, Hash.combine(Hash.hash(this._tag))(Hash.hash(this.right)))
|
|
41
41
|
},
|
|
42
42
|
toJSON<E, A>(this: Either.Right<E, A>) {
|
|
43
43
|
return {
|
|
@@ -55,7 +55,7 @@ const LeftProto = Object.assign(Object.create(CommonProto), {
|
|
|
55
55
|
return isEither(that) && isLeft(that) && Equal.equals(that.left, this.left)
|
|
56
56
|
},
|
|
57
57
|
[Hash.symbol]<E, A>(this: Either.Left<E, A>) {
|
|
58
|
-
return Hash.combine(Hash.hash(this._tag))(Hash.hash(this.left))
|
|
58
|
+
return Hash.cached(this, Hash.combine(Hash.hash(this._tag))(Hash.hash(this.left)))
|
|
59
59
|
},
|
|
60
60
|
toJSON<E, A>(this: Either.Left<E, A>) {
|
|
61
61
|
return {
|
package/src/internal/fiberId.ts
CHANGED
|
@@ -71,12 +71,8 @@ class Runtime implements FiberId.Runtime {
|
|
|
71
71
|
readonly id: number,
|
|
72
72
|
readonly startTimeMillis: number
|
|
73
73
|
) {}
|
|
74
|
-
_hash: number | undefined;
|
|
75
74
|
[Hash.symbol](): number {
|
|
76
|
-
|
|
77
|
-
this._hash = Hash.string(`${FiberIdSymbolKey}-${this._tag}-${this.id}-${this.startTimeMillis}`)
|
|
78
|
-
}
|
|
79
|
-
return this._hash
|
|
75
|
+
return Hash.cached(this, Hash.string(`${FiberIdSymbolKey}-${this._tag}-${this.id}-${this.startTimeMillis}`))
|
|
80
76
|
}
|
|
81
77
|
[Equal.symbol](that: unknown): boolean {
|
|
82
78
|
return isFiberId(that) &&
|
|
@@ -111,14 +107,12 @@ class Composite implements FiberId.Composite {
|
|
|
111
107
|
}
|
|
112
108
|
_hash: number | undefined;
|
|
113
109
|
[Hash.symbol](): number {
|
|
114
|
-
|
|
115
|
-
this.
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
}
|
|
121
|
-
return this._hash
|
|
110
|
+
return pipe(
|
|
111
|
+
Hash.string(`${FiberIdSymbolKey}-${this._tag}`),
|
|
112
|
+
Hash.combine(Hash.hash(this.left)),
|
|
113
|
+
Hash.combine(Hash.hash(this.right)),
|
|
114
|
+
Hash.cached(this)
|
|
115
|
+
)
|
|
122
116
|
}
|
|
123
117
|
[Equal.symbol](that: unknown): boolean {
|
|
124
118
|
return isFiberId(that) &&
|
|
@@ -67,7 +67,7 @@ import { OpSupervision } from "./runtimeFlags.js"
|
|
|
67
67
|
import * as supervisor from "./supervisor.js"
|
|
68
68
|
import * as SupervisorPatch from "./supervisor/patch.js"
|
|
69
69
|
import * as tracer from "./tracer.js"
|
|
70
|
-
import
|
|
70
|
+
import * as version from "./version.js"
|
|
71
71
|
|
|
72
72
|
/** @internal */
|
|
73
73
|
export const fiberStarted = metric.counter("effect_fiber_started")
|
|
@@ -1287,11 +1287,11 @@ export class FiberRuntime<in out A, in out E = never> implements Fiber.RuntimeFi
|
|
|
1287
1287
|
// @ts-expect-error
|
|
1288
1288
|
cur = this._tracer.context(
|
|
1289
1289
|
() => {
|
|
1290
|
-
if (
|
|
1290
|
+
if (version.getCurrentVersion() !== (cur as core.Primitive)[EffectTypeId]._V) {
|
|
1291
1291
|
return core.dieMessage(
|
|
1292
1292
|
`Cannot execute an Effect versioned ${
|
|
1293
1293
|
(cur as core.Primitive)[EffectTypeId]._V
|
|
1294
|
-
} with a Runtime of version ${
|
|
1294
|
+
} with a Runtime of version ${version.getCurrentVersion()}`
|
|
1295
1295
|
)
|
|
1296
1296
|
}
|
|
1297
1297
|
// @ts-expect-error
|
|
@@ -31,15 +31,14 @@ export const OP_SUSPENDED = "Suspended" as const
|
|
|
31
31
|
/** @internal */
|
|
32
32
|
export type OP_SUSPENDED = typeof OP_SUSPENDED
|
|
33
33
|
|
|
34
|
+
const DoneHash = Hash.string(`${FiberStatusSymbolKey}-${OP_DONE}`)
|
|
35
|
+
|
|
34
36
|
/** @internal */
|
|
35
37
|
class Done implements FiberStatus.Done {
|
|
36
38
|
readonly [FiberStatusTypeId]: FiberStatus.FiberStatusTypeId = FiberStatusTypeId
|
|
37
39
|
readonly _tag = OP_DONE;
|
|
38
40
|
[Hash.symbol](): number {
|
|
39
|
-
return
|
|
40
|
-
Hash.hash(FiberStatusSymbolKey),
|
|
41
|
-
Hash.combine(Hash.hash(this._tag))
|
|
42
|
-
)
|
|
41
|
+
return DoneHash
|
|
43
42
|
}
|
|
44
43
|
[Equal.symbol](that: unknown): boolean {
|
|
45
44
|
return isFiberStatus(that) && that._tag === OP_DONE
|
|
@@ -55,7 +54,8 @@ class Running implements FiberStatus.Running {
|
|
|
55
54
|
return pipe(
|
|
56
55
|
Hash.hash(FiberStatusSymbolKey),
|
|
57
56
|
Hash.combine(Hash.hash(this._tag)),
|
|
58
|
-
Hash.combine(Hash.hash(this.runtimeFlags))
|
|
57
|
+
Hash.combine(Hash.hash(this.runtimeFlags)),
|
|
58
|
+
Hash.cached(this)
|
|
59
59
|
)
|
|
60
60
|
}
|
|
61
61
|
[Equal.symbol](that: unknown): boolean {
|
|
@@ -80,7 +80,8 @@ class Suspended implements FiberStatus.Suspended {
|
|
|
80
80
|
Hash.hash(FiberStatusSymbolKey),
|
|
81
81
|
Hash.combine(Hash.hash(this._tag)),
|
|
82
82
|
Hash.combine(Hash.hash(this.runtimeFlags)),
|
|
83
|
-
Hash.combine(Hash.hash(this.blockingOn))
|
|
83
|
+
Hash.combine(Hash.hash(this.blockingOn)),
|
|
84
|
+
Hash.cached(this)
|
|
84
85
|
)
|
|
85
86
|
}
|
|
86
87
|
[Equal.symbol](that: unknown): boolean {
|
package/src/internal/hashMap.ts
CHANGED
|
@@ -47,12 +47,12 @@ const HashMapProto: HM.HashMap<unknown, unknown> = {
|
|
|
47
47
|
[Symbol.iterator]<K, V>(this: HashMapImpl<K, V>): Iterator<[K, V]> {
|
|
48
48
|
return new HashMapIterator(this, (k, v) => [k, v])
|
|
49
49
|
},
|
|
50
|
-
[Hash.symbol](): number {
|
|
50
|
+
[Hash.symbol](this: HM.HashMap<unknown, unknown>): number {
|
|
51
51
|
let hash = Hash.hash(HashMapSymbolKey)
|
|
52
52
|
for (const item of this) {
|
|
53
53
|
hash ^= pipe(Hash.hash(item[0]), Hash.combine(Hash.hash(item[1])))
|
|
54
54
|
}
|
|
55
|
-
return hash
|
|
55
|
+
return Hash.cached(this, hash)
|
|
56
56
|
},
|
|
57
57
|
[Equal.symbol]<K, V>(this: HashMapImpl<K, V>, that: unknown): boolean {
|
|
58
58
|
if (isHashMap(that)) {
|
package/src/internal/hashSet.ts
CHANGED
|
@@ -26,7 +26,10 @@ const HashSetProto: Omit<HashSetImpl<unknown>, "_keyMap"> = {
|
|
|
26
26
|
return HM.keys(this._keyMap)
|
|
27
27
|
},
|
|
28
28
|
[Hash.symbol]<A>(this: HashSetImpl<A>): number {
|
|
29
|
-
return Hash.
|
|
29
|
+
return Hash.cached(
|
|
30
|
+
this,
|
|
31
|
+
Hash.combine(Hash.hash(this._keyMap))(Hash.hash(HashSetSymbolKey))
|
|
32
|
+
)
|
|
30
33
|
},
|
|
31
34
|
[Equal.symbol]<A>(this: HashSetImpl<A>, that: unknown): boolean {
|
|
32
35
|
if (isHashSet(that)) {
|
|
@@ -62,7 +62,8 @@ class Complete<in out A, out E> implements Equal.Equal {
|
|
|
62
62
|
[Hash.symbol](): number {
|
|
63
63
|
return pipe(
|
|
64
64
|
Hash.string("effect/KeyedPool/Complete"),
|
|
65
|
-
Hash.combine(Hash.hash(this.pool))
|
|
65
|
+
Hash.combine(Hash.hash(this.pool)),
|
|
66
|
+
Hash.cached(this)
|
|
66
67
|
)
|
|
67
68
|
}
|
|
68
69
|
[Equal.symbol](u: unknown): boolean {
|
|
@@ -80,7 +81,8 @@ class Pending<in out A, in out E> implements Equal.Equal {
|
|
|
80
81
|
[Hash.symbol](): number {
|
|
81
82
|
return pipe(
|
|
82
83
|
Hash.string("effect/KeyedPool/Pending"),
|
|
83
|
-
Hash.combine(Hash.hash(this.deferred))
|
|
84
|
+
Hash.combine(Hash.hash(this.deferred)),
|
|
85
|
+
Hash.cached(this)
|
|
84
86
|
)
|
|
85
87
|
}
|
|
86
88
|
[Equal.symbol](u: unknown): boolean {
|
|
@@ -81,13 +81,14 @@ class CounterKeyType<A extends (number | bigint)> implements MetricKeyType.Metri
|
|
|
81
81
|
}
|
|
82
82
|
}
|
|
83
83
|
|
|
84
|
+
const FrequencyKeyTypeHash = Hash.string(FrequencyKeyTypeSymbolKey)
|
|
85
|
+
|
|
84
86
|
/** @internal */
|
|
85
87
|
class FrequencyKeyType implements MetricKeyType.MetricKeyType.Frequency {
|
|
86
88
|
readonly [MetricKeyTypeTypeId] = metricKeyTypeVariance
|
|
87
|
-
readonly [FrequencyKeyTypeTypeId]: MetricKeyType.FrequencyKeyTypeTypeId = FrequencyKeyTypeTypeId
|
|
88
|
-
readonly _hash = Hash.string(FrequencyKeyTypeSymbolKey);
|
|
89
|
+
readonly [FrequencyKeyTypeTypeId]: MetricKeyType.FrequencyKeyTypeTypeId = FrequencyKeyTypeTypeId;
|
|
89
90
|
[Hash.symbol](): number {
|
|
90
|
-
return
|
|
91
|
+
return FrequencyKeyTypeHash
|
|
91
92
|
}
|
|
92
93
|
[Equal.symbol](that: unknown): boolean {
|
|
93
94
|
return isFrequencyKey(that)
|
|
@@ -97,14 +98,15 @@ class FrequencyKeyType implements MetricKeyType.MetricKeyType.Frequency {
|
|
|
97
98
|
}
|
|
98
99
|
}
|
|
99
100
|
|
|
101
|
+
const GaugeKeyTypeHash = Hash.string(GaugeKeyTypeSymbolKey)
|
|
102
|
+
|
|
100
103
|
/** @internal */
|
|
101
104
|
class GaugeKeyType<A extends (number | bigint)> implements MetricKeyType.MetricKeyType.Gauge<A> {
|
|
102
105
|
readonly [MetricKeyTypeTypeId] = metricKeyTypeVariance
|
|
103
106
|
readonly [GaugeKeyTypeTypeId]: MetricKeyType.GaugeKeyTypeTypeId = GaugeKeyTypeTypeId
|
|
104
107
|
constructor(readonly bigint: boolean) {}
|
|
105
|
-
readonly _hash = Hash.string(GaugeKeyTypeSymbolKey);
|
|
106
108
|
[Hash.symbol](): number {
|
|
107
|
-
return
|
|
109
|
+
return GaugeKeyTypeHash
|
|
108
110
|
}
|
|
109
111
|
[Equal.symbol](that: unknown): boolean {
|
|
110
112
|
return isGaugeKey(that)
|
|
@@ -68,7 +68,8 @@ class CounterState<A extends (number | bigint)> implements MetricState.MetricSta
|
|
|
68
68
|
[Hash.symbol](): number {
|
|
69
69
|
return pipe(
|
|
70
70
|
Hash.hash(CounterStateSymbolKey),
|
|
71
|
-
Hash.combine(Hash.hash(this.count))
|
|
71
|
+
Hash.combine(Hash.hash(this.count)),
|
|
72
|
+
Hash.cached(this)
|
|
72
73
|
)
|
|
73
74
|
}
|
|
74
75
|
[Equal.symbol](that: unknown): boolean {
|
|
@@ -88,14 +89,11 @@ class FrequencyState implements MetricState.MetricState.Frequency {
|
|
|
88
89
|
constructor(readonly occurrences: ReadonlyMap<string, number>) {}
|
|
89
90
|
_hash: number | undefined;
|
|
90
91
|
[Hash.symbol](): number {
|
|
91
|
-
|
|
92
|
-
return this._hash
|
|
93
|
-
}
|
|
94
|
-
this._hash = pipe(
|
|
92
|
+
return pipe(
|
|
95
93
|
Hash.string(FrequencyStateSymbolKey),
|
|
96
|
-
Hash.combine(Hash.array(ReadonlyArray.fromIterable(this.occurrences.entries())))
|
|
94
|
+
Hash.combine(Hash.array(ReadonlyArray.fromIterable(this.occurrences.entries()))),
|
|
95
|
+
Hash.cached(this)
|
|
97
96
|
)
|
|
98
|
-
return this._hash
|
|
99
97
|
}
|
|
100
98
|
[Equal.symbol](that: unknown): boolean {
|
|
101
99
|
return isFrequencyState(that) && arrayEquals(
|
|
@@ -116,7 +114,8 @@ class GaugeState<A extends (number | bigint)> implements MetricState.MetricState
|
|
|
116
114
|
[Hash.symbol](): number {
|
|
117
115
|
return pipe(
|
|
118
116
|
Hash.hash(GaugeStateSymbolKey),
|
|
119
|
-
Hash.combine(Hash.hash(this.value))
|
|
117
|
+
Hash.combine(Hash.hash(this.value)),
|
|
118
|
+
Hash.cached(this)
|
|
120
119
|
)
|
|
121
120
|
}
|
|
122
121
|
[Equal.symbol](u: unknown): boolean {
|
|
@@ -145,7 +144,8 @@ export class HistogramState implements MetricState.MetricState.Histogram {
|
|
|
145
144
|
Hash.combine(Hash.hash(this.count)),
|
|
146
145
|
Hash.combine(Hash.hash(this.min)),
|
|
147
146
|
Hash.combine(Hash.hash(this.max)),
|
|
148
|
-
Hash.combine(Hash.hash(this.sum))
|
|
147
|
+
Hash.combine(Hash.hash(this.sum)),
|
|
148
|
+
Hash.cached(this)
|
|
149
149
|
)
|
|
150
150
|
}
|
|
151
151
|
[Equal.symbol](that: unknown): boolean {
|
|
@@ -181,7 +181,8 @@ export class SummaryState implements MetricState.MetricState.Summary {
|
|
|
181
181
|
Hash.combine(Hash.hash(this.count)),
|
|
182
182
|
Hash.combine(Hash.hash(this.min)),
|
|
183
183
|
Hash.combine(Hash.hash(this.max)),
|
|
184
|
-
Hash.combine(Hash.hash(this.sum))
|
|
184
|
+
Hash.combine(Hash.hash(this.sum)),
|
|
185
|
+
Hash.cached(this)
|
|
185
186
|
)
|
|
186
187
|
}
|
|
187
188
|
[Equal.symbol](that: unknown): boolean {
|