effect 3.6.3 → 3.6.5

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 (76) hide show
  1. package/dist/cjs/Cache.js +6 -1
  2. package/dist/cjs/Cache.js.map +1 -1
  3. package/dist/cjs/DateTime.js +1 -1
  4. package/dist/cjs/DateTime.js.map +1 -1
  5. package/dist/cjs/Metric.js +12 -3
  6. package/dist/cjs/Metric.js.map +1 -1
  7. package/dist/cjs/MetricHook.js +6 -1
  8. package/dist/cjs/MetricHook.js.map +1 -1
  9. package/dist/cjs/Pipeable.js +2 -0
  10. package/dist/cjs/Pipeable.js.map +1 -1
  11. package/dist/cjs/Scheduler.js +7 -12
  12. package/dist/cjs/Scheduler.js.map +1 -1
  13. package/dist/cjs/internal/cache.js +14 -1
  14. package/dist/cjs/internal/cache.js.map +1 -1
  15. package/dist/cjs/internal/core-effect.js +15 -7
  16. package/dist/cjs/internal/core-effect.js.map +1 -1
  17. package/dist/cjs/internal/metric/hook.js +32 -10
  18. package/dist/cjs/internal/metric/hook.js.map +1 -1
  19. package/dist/cjs/internal/metric/keyType.js +12 -48
  20. package/dist/cjs/internal/metric/keyType.js.map +1 -1
  21. package/dist/cjs/internal/metric/polling.js +7 -1
  22. package/dist/cjs/internal/metric/polling.js.map +1 -1
  23. package/dist/cjs/internal/metric.js +21 -13
  24. package/dist/cjs/internal/metric.js.map +1 -1
  25. package/dist/cjs/internal/version.js +1 -1
  26. package/dist/dts/Cache.d.ts +24 -3
  27. package/dist/dts/Cache.d.ts.map +1 -1
  28. package/dist/dts/Metric.d.ts +21 -8
  29. package/dist/dts/Metric.d.ts.map +1 -1
  30. package/dist/dts/MetricHook.d.ts +10 -0
  31. package/dist/dts/MetricHook.d.ts.map +1 -1
  32. package/dist/dts/Pipeable.d.ts +1 -0
  33. package/dist/dts/Pipeable.d.ts.map +1 -1
  34. package/dist/dts/Scheduler.d.ts.map +1 -1
  35. package/dist/dts/internal/core-effect.d.ts.map +1 -1
  36. package/dist/dts/internal/metric/keyType.d.ts +1 -89
  37. package/dist/dts/internal/metric/keyType.d.ts.map +1 -1
  38. package/dist/esm/Cache.js +5 -0
  39. package/dist/esm/Cache.js.map +1 -1
  40. package/dist/esm/DateTime.js +1 -1
  41. package/dist/esm/DateTime.js.map +1 -1
  42. package/dist/esm/Metric.js +11 -2
  43. package/dist/esm/Metric.js.map +1 -1
  44. package/dist/esm/MetricHook.js +5 -0
  45. package/dist/esm/MetricHook.js.map +1 -1
  46. package/dist/esm/Pipeable.js +2 -0
  47. package/dist/esm/Pipeable.js.map +1 -1
  48. package/dist/esm/Scheduler.js +7 -12
  49. package/dist/esm/Scheduler.js.map +1 -1
  50. package/dist/esm/internal/cache.js +13 -0
  51. package/dist/esm/internal/cache.js.map +1 -1
  52. package/dist/esm/internal/core-effect.js +15 -7
  53. package/dist/esm/internal/core-effect.js.map +1 -1
  54. package/dist/esm/internal/metric/hook.js +31 -9
  55. package/dist/esm/internal/metric/hook.js.map +1 -1
  56. package/dist/esm/internal/metric/keyType.js +12 -48
  57. package/dist/esm/internal/metric/keyType.js.map +1 -1
  58. package/dist/esm/internal/metric/polling.js +7 -1
  59. package/dist/esm/internal/metric/polling.js.map +1 -1
  60. package/dist/esm/internal/metric.js +20 -12
  61. package/dist/esm/internal/metric.js.map +1 -1
  62. package/dist/esm/internal/version.js +1 -1
  63. package/package.json +1 -1
  64. package/src/Cache.ts +30 -3
  65. package/src/DateTime.ts +1 -1
  66. package/src/Metric.ts +25 -9
  67. package/src/MetricHook.ts +11 -0
  68. package/src/Pipeable.ts +3 -0
  69. package/src/Scheduler.ts +7 -12
  70. package/src/internal/cache.ts +18 -0
  71. package/src/internal/core-effect.ts +22 -18
  72. package/src/internal/metric/hook.ts +36 -9
  73. package/src/internal/metric/keyType.ts +12 -48
  74. package/src/internal/metric/polling.ts +8 -1
  75. package/src/internal/metric.ts +61 -17
  76. package/src/internal/version.ts +1 -1
@@ -117,10 +117,7 @@ class GaugeKeyType<A extends (number | bigint)> implements MetricKeyType.MetricK
117
117
  }
118
118
  }
119
119
 
120
- /**
121
- * @category model
122
- * @since 2.0.0
123
- */
120
+ /** @internal */
124
121
  export class HistogramKeyType implements MetricKeyType.MetricKeyType.Histogram {
125
122
  readonly [MetricKeyTypeTypeId] = metricKeyTypeVariance
126
123
  readonly [HistogramKeyTypeTypeId]: MetricKeyType.HistogramKeyTypeTypeId = HistogramKeyTypeTypeId
@@ -176,10 +173,7 @@ class SummaryKeyType implements MetricKeyType.MetricKeyType.Summary {
176
173
  }
177
174
  }
178
175
 
179
- /**
180
- * @since 2.0.0
181
- * @category constructors
182
- */
176
+ /** @internal */
183
177
  export const counter: <A extends number | bigint>(options?: {
184
178
  readonly bigint: boolean
185
179
  readonly incremental: boolean
@@ -189,18 +183,12 @@ export const counter: <A extends number | bigint>(options?: {
189
183
  options?.bigint ?? false
190
184
  )
191
185
 
192
- /**
193
- * @since 2.0.0
194
- * @category constructors
195
- */
186
+ /** @internal */
196
187
  export const frequency = (options?: {
197
188
  readonly preregisteredWords?: ReadonlyArray<string> | undefined
198
189
  }): MetricKeyType.MetricKeyType.Frequency => new FrequencyKeyType(options?.preregisteredWords ?? [])
199
190
 
200
- /**
201
- * @since 2.0.0
202
- * @category constructors
203
- */
191
+ /** @internal */
204
192
  export const gauge: <A extends number | bigint>(options?: {
205
193
  readonly bigint: boolean
206
194
  }) => GaugeKeyType<A> = (options) =>
@@ -208,18 +196,12 @@ export const gauge: <A extends number | bigint>(options?: {
208
196
  options?.bigint ?? false
209
197
  )
210
198
 
211
- /**
212
- * @since 2.0.0
213
- * @category constructors
214
- */
199
+ /** @internal */
215
200
  export const histogram = (boundaries: MetricBoundaries.MetricBoundaries): MetricKeyType.MetricKeyType.Histogram => {
216
201
  return new HistogramKeyType(boundaries)
217
202
  }
218
203
 
219
- /**
220
- * @since 2.0.0
221
- * @category constructors
222
- */
204
+ /** @internal */
223
205
  export const summary = (
224
206
  options: {
225
207
  readonly maxAge: Duration.DurationInput
@@ -231,44 +213,26 @@ export const summary = (
231
213
  return new SummaryKeyType(Duration.decode(options.maxAge), options.maxSize, options.error, options.quantiles)
232
214
  }
233
215
 
234
- /**
235
- * @since 2.0.0
236
- * @category refinements
237
- */
216
+ /** @internal */
238
217
  export const isMetricKeyType = (u: unknown): u is MetricKeyType.MetricKeyType<unknown, unknown> =>
239
218
  hasProperty(u, MetricKeyTypeTypeId)
240
219
 
241
- /**
242
- * @since 2.0.0
243
- * @category refinements
244
- */
220
+ /** @internal */
245
221
  export const isCounterKey = (u: unknown): u is MetricKeyType.MetricKeyType.Counter<number | bigint> =>
246
222
  hasProperty(u, CounterKeyTypeTypeId)
247
223
 
248
- /**
249
- * @since 2.0.0
250
- * @category refinements
251
- */
224
+ /** @internal */
252
225
  export const isFrequencyKey = (u: unknown): u is MetricKeyType.MetricKeyType.Frequency =>
253
226
  hasProperty(u, FrequencyKeyTypeTypeId)
254
227
 
255
- /**
256
- * @since 2.0.0
257
- * @category refinements
258
- */
228
+ /** @internal */
259
229
  export const isGaugeKey = (u: unknown): u is MetricKeyType.MetricKeyType.Gauge<number | bigint> =>
260
230
  hasProperty(u, GaugeKeyTypeTypeId)
261
231
 
262
- /**
263
- * @since 2.0.0
264
- * @category refinements
265
- */
232
+ /** @internal */
266
233
  export const isHistogramKey = (u: unknown): u is MetricKeyType.MetricKeyType.Histogram =>
267
234
  hasProperty(u, HistogramKeyTypeTypeId)
268
235
 
269
- /**
270
- * @since 2.0.0
271
- * @category refinements
272
- */
236
+ /** @internal */
273
237
  export const isSummaryKey = (u: unknown): u is MetricKeyType.MetricKeyType.Summary =>
274
238
  hasProperty(u, SummaryKeyTypeTypeId)
@@ -56,7 +56,14 @@ export const collectAll = <R, E, Out>(
56
56
  (extraTags) =>
57
57
  Array.from(
58
58
  metrics.map((pollingMetric) => pollingMetric.metric.unsafeValue(extraTags))
59
- )
59
+ ),
60
+ (inputs: Array<any>, extraTags) => {
61
+ for (let i = 0; i < inputs.length; i++) {
62
+ const pollingMetric = metrics[i]!
63
+ const input = pipe(inputs, (x) => x[i])
64
+ pollingMetric.metric.unsafeModify(input, extraTags)
65
+ }
66
+ }
60
67
  ),
61
68
  poll: core.forEachSequential(metrics, (metric) => metric.poll)
62
69
  }
@@ -20,6 +20,7 @@ import * as _effect from "./core-effect.js"
20
20
  import * as core from "./core.js"
21
21
  import * as metricBoundaries from "./metric/boundaries.js"
22
22
  import * as metricKey from "./metric/key.js"
23
+ import * as metricKeyType from "./metric/keyType.js"
23
24
  import * as metricLabel from "./metric/label.js"
24
25
  import * as metricRegistry from "./metric/registry.js"
25
26
 
@@ -50,7 +51,8 @@ export const globalMetricRegistry: MetricRegistry.MetricRegistry = globalValue(
50
51
  export const make: Metric.MetricApply = function<Type, In, Out>(
51
52
  keyType: Type,
52
53
  unsafeUpdate: (input: In, extraTags: ReadonlyArray<MetricLabel.MetricLabel>) => void,
53
- unsafeValue: (extraTags: ReadonlyArray<MetricLabel.MetricLabel>) => Out
54
+ unsafeValue: (extraTags: ReadonlyArray<MetricLabel.MetricLabel>) => Out,
55
+ unsafeModify: (input: In, extraTags: ReadonlyArray<MetricLabel.MetricLabel>) => void
54
56
  ): Metric.Metric<Type, In, Out> {
55
57
  const metric: Metric.Metric<Type, In, Out> = Object.assign(
56
58
  <A extends In, E, R>(effect: Effect.Effect<A, E, R>): Effect.Effect<A, E, R> =>
@@ -60,6 +62,7 @@ export const make: Metric.MetricApply = function<Type, In, Out>(
60
62
  keyType,
61
63
  unsafeUpdate,
62
64
  unsafeValue,
65
+ unsafeModify,
63
66
  register() {
64
67
  this.unsafeValue([])
65
68
  return this as any
@@ -80,7 +83,8 @@ export const mapInput = dual<
80
83
  make(
81
84
  self.keyType,
82
85
  (input, extraTags) => self.unsafeUpdate(f(input), extraTags),
83
- self.unsafeValue
86
+ self.unsafeValue,
87
+ (input, extraTags) => self.unsafeModify(f(input), extraTags)
84
88
  ))
85
89
 
86
90
  /** @internal */
@@ -149,7 +153,8 @@ export const fromMetricKey = <Type extends MetricKeyType.MetricKeyType<any, any>
149
153
  return make(
150
154
  key.keyType,
151
155
  (input, extraTags) => hook(extraTags).update(input),
152
- (extraTags) => hook(extraTags).get()
156
+ (extraTags) => hook(extraTags).get(),
157
+ (input, extraTags) => hook(extraTags).modify(input)
153
158
  )
154
159
  }
155
160
 
@@ -171,20 +176,30 @@ export const histogram = (name: string, boundaries: MetricBoundaries.MetricBound
171
176
 
172
177
  /* @internal */
173
178
  export const increment = (
174
- self: Metric.Metric.Counter<number> | Metric.Metric.Counter<bigint>
175
- ): Effect.Effect<void> => update(self as Metric.Metric.Counter<number>, self.keyType.bigint ? BigInt(1) as any : 1)
179
+ self:
180
+ | Metric.Metric.Counter<number>
181
+ | Metric.Metric.Counter<bigint>
182
+ | Metric.Metric.Gauge<number>
183
+ | Metric.Metric.Gauge<bigint>
184
+ ): Effect.Effect<void> =>
185
+ metricKeyType.isCounterKey(self.keyType)
186
+ ? update(self as Metric.Metric.Counter<number>, self.keyType.bigint ? BigInt(1) as any : 1)
187
+ : modify(self as Metric.Metric.Gauge<number>, self.keyType.bigint ? BigInt(1) as any : 1)
176
188
 
177
189
  /* @internal */
178
190
  export const incrementBy = dual<
179
191
  {
180
- (amount: number): (self: Metric.Metric.Counter<number>) => Effect.Effect<void>
181
- (amount: bigint): (self: Metric.Metric.Counter<bigint>) => Effect.Effect<void>
192
+ (amount: number): (self: Metric.Metric.Counter<number> | Metric.Metric.Counter<number>) => Effect.Effect<void>
193
+ (amount: bigint): (self: Metric.Metric.Counter<bigint> | Metric.Metric.Gauge<bigint>) => Effect.Effect<void>
182
194
  },
183
195
  {
184
- (self: Metric.Metric.Counter<number>, amount: number): Effect.Effect<void>
185
- (self: Metric.Metric.Counter<bigint>, amount: bigint): Effect.Effect<void>
196
+ (self: Metric.Metric.Counter<number> | Metric.Metric.Gauge<number>, amount: number): Effect.Effect<void>
197
+ (self: Metric.Metric.Counter<bigint> | Metric.Metric.Gauge<bigint>, amount: bigint): Effect.Effect<void>
186
198
  }
187
- >(2, (self, amount) => update(self as any, amount))
199
+ >(2, (self, amount) =>
200
+ metricKeyType.isCounterKey(self.keyType)
201
+ ? update(self as any, amount)
202
+ : modify(self as any, amount))
188
203
 
189
204
  /** @internal */
190
205
  export const map = dual<
@@ -194,7 +209,8 @@ export const map = dual<
194
209
  make(
195
210
  self.keyType,
196
211
  self.unsafeUpdate,
197
- (extraTags) => f(self.unsafeValue(extraTags))
212
+ (extraTags) => f(self.unsafeValue(extraTags)),
213
+ self.unsafeModify
198
214
  ))
199
215
 
200
216
  /** @internal */
@@ -208,7 +224,23 @@ export const mapType = dual<
208
224
  self: Metric.Metric<Type, In, Out>,
209
225
  f: (type: Type) => Type2
210
226
  ) => Metric.Metric<Type2, In, Out>
211
- >(2, (self, f) => make(f(self.keyType), self.unsafeUpdate, self.unsafeValue))
227
+ >(2, (self, f) =>
228
+ make(
229
+ f(self.keyType),
230
+ self.unsafeUpdate,
231
+ self.unsafeValue,
232
+ self.unsafeModify
233
+ ))
234
+
235
+ /** @internal */
236
+ export const modify = dual<
237
+ <In>(input: In) => <Type, Out>(self: Metric.Metric<Type, In, Out>) => Effect.Effect<void>,
238
+ <Type, In, Out>(self: Metric.Metric<Type, In, Out>, input: In) => Effect.Effect<void>
239
+ >(2, (self, input) =>
240
+ core.fiberRefGetWith(
241
+ core.currentMetricLabels,
242
+ (tags) => core.sync(() => self.unsafeModify(input, tags))
243
+ ))
212
244
 
213
245
  /* @internal */
214
246
  export const set = dual<
@@ -223,11 +255,12 @@ export const set = dual<
223
255
  >(2, (self, value) => update(self as any, value))
224
256
 
225
257
  /** @internal */
226
- export const succeed = <Out>(out: Out): Metric.Metric<void, unknown, Out> => make(void 0 as void, constVoid, () => out)
258
+ export const succeed = <Out>(out: Out): Metric.Metric<void, unknown, Out> =>
259
+ make(void 0 as void, constVoid, () => out, constVoid)
227
260
 
228
261
  /** @internal */
229
262
  export const sync = <Out>(evaluate: LazyArg<Out>): Metric.Metric<void, unknown, Out> =>
230
- make(void 0 as void, constVoid, evaluate)
263
+ make(void 0 as void, constVoid, evaluate, constVoid)
231
264
 
232
265
  /** @internal */
233
266
  export const summary = (
@@ -277,7 +310,12 @@ export const taggedWithLabelsInput = dual<
277
310
  input,
278
311
  Arr.union(f(input), extraTags)
279
312
  ),
280
- self.unsafeValue
313
+ self.unsafeValue,
314
+ (input, extraTags) =>
315
+ self.unsafeModify(
316
+ input,
317
+ Arr.union(f(input), extraTags)
318
+ )
281
319
  ),
282
320
  constVoid
283
321
  ))
@@ -295,7 +333,8 @@ export const taggedWithLabels = dual<
295
333
  return make(
296
334
  self.keyType,
297
335
  (input, extraTags1) => self.unsafeUpdate(input, Arr.union(extraTags, extraTags1)),
298
- (extraTags1) => self.unsafeValue(Arr.union(extraTags, extraTags1))
336
+ (extraTags1) => self.unsafeValue(Arr.union(extraTags, extraTags1)),
337
+ (input, extraTags1) => self.unsafeModify(input, Arr.union(extraTags, extraTags1))
299
338
  )
300
339
  })
301
340
 
@@ -520,7 +559,12 @@ export const zip = dual<
520
559
  self.unsafeUpdate(l, extraTags)
521
560
  that.unsafeUpdate(r, extraTags)
522
561
  },
523
- (extraTags) => [self.unsafeValue(extraTags), that.unsafeValue(extraTags)]
562
+ (extraTags) => [self.unsafeValue(extraTags), that.unsafeValue(extraTags)],
563
+ (input: readonly [In, In2], extraTags) => {
564
+ const [l, r] = input
565
+ self.unsafeModify(l, extraTags)
566
+ that.unsafeModify(r, extraTags)
567
+ }
524
568
  )
525
569
  )
526
570
 
@@ -1,4 +1,4 @@
1
- let moduleVersion = "3.6.3"
1
+ let moduleVersion = "3.6.5"
2
2
 
3
3
  export const getCurrentVersion = () => moduleVersion
4
4