@effect-bench/core 0.0.1 → 0.1.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/README.md CHANGED
@@ -5,20 +5,25 @@ Benchmarks for [Effect](https://effect.website) code, with JSON output and basel
5
5
  Community project, not affiliated with the Effect team.
6
6
 
7
7
  ```ts
8
- // bench/schema.bench.ts
8
+ // bench/user.bench.ts
9
9
  import { Bench } from '@effect-bench/core'
10
- import { Effect } from 'effect'
10
+ import { Effect, Schema } from 'effect'
11
11
 
12
- export default Bench.suite('workflowCompiler', { layer: NodeRegistry.layer })(
13
- Bench.params('compile', { nodes: [10, 100, 1000] }, {
14
- prepare: ({ nodes }) => Effect.succeed(makeDraft(nodes)), // untimed
15
- run: draft => compile(draft), // timed
16
- }),
12
+ const User = Schema.Struct({ id: Schema.Number, email: Schema.String, tags: Schema.Array(Schema.String) })
13
+ const user = { id: 1, email: 'ada@example.com', tags: ['admin'] }
14
+ const decodeSync = Schema.decodeUnknownSync(User)
15
+ const decodeEffect = Schema.decodeUnknownEffect(User)
16
+
17
+ export default Bench.suite('userSchema')(
17
18
  Bench.group('decode', { baseline: 'sync' })(
18
- Bench.sync('sync', () => decodeSync(lead)),
19
- Bench.make('effect', () => decodeEffect(lead)),
19
+ Bench.sync('sync', () => decodeSync(user)),
20
+ Bench.make('effect', () => decodeEffect(user)),
20
21
  ),
21
- Bench.sync('encode', () => encode(payload), { budget: { p99: '5 millis' } }),
22
+ Bench.params('stringify', { rows: [10, 1000] }, {
23
+ prepare: ({ rows }) => Effect.succeed(Array.from({ length: rows }, () => user)), // untimed
24
+ sync: users => JSON.stringify(users), // timed
25
+ budget: { p99: '5 millis' },
26
+ }),
22
27
  )
23
28
  ```
24
29
 
@@ -37,20 +42,39 @@ effect-bench run --rigorous --forks 8 # more processes for a tighter interval
37
42
  | `Bench.make(name, effect)` | re-runs one Effect value |
38
43
  | `Bench.make(name, ctx => effect)` | builds and runs a fresh Effect per operation |
39
44
  | `Bench.sync(name, ctx => value)` | a plain function |
40
- | `Bench.params(name, matrix, { prepare?, run \| sync })` | one bench per combination, ids like `compile[nodes=100]` |
45
+ | `Bench.params(name, matrix, { prepare?, run \| sync })` | one bench per combination, ids like `stringify[rows=1000]` |
41
46
  | `Bench.group(name, { baseline })(...)` | alternatives, reported as a ratio to the baseline |
47
+ | `Bench.make(name, { prepare?, before?, run })` | `before` builds a fresh input for every operation, untimed |
48
+ | `Bench.throughput(name, { ops, concurrency, prepare?, run })` | `ops` operations at that many fibers, per operation; an array of concurrencies gives ids like `offer[concurrency=16]` |
49
+ | `Bench.stream(name, { prepare?, stream })` | a stream run to the end, per item; metrics `firstItem`, `items` and `peakRss` |
50
+ | `Bench.scenario(name, { prepare?, before?, run, verify? })` | a longer flow, timed once per run; `verify` checks every run |
51
+ | `Bench.phase(name, effect)` | times part of a scenario, reported as `phase:name` (nested as `outer/inner`) |
42
52
 
43
53
  `Bench.suite(name, { layer, setup, ...options })` builds `layer` once per suite and runs `setup` in the suite's scope; its result is the `ctx` each bench receives. Benches can only use services the layer provides — anything else is a type error.
44
54
 
45
- Options (suite or bench): `samples`, `minTime`, `warmup`, `memory` (GC + heap delta per sample), `budget: { p50, p99 }`, `tags`, and `check` (validates one result before timing).
55
+ Options (suite or bench): `samples`, `minTime`, `warmup`, `memory` (GC + heap delta per sample), `budget: { p50, p99, heapDelta }`, `tags`, and `check` (validates one result before timing). A `heapDelta` budget such as `'2 MiB'` turns on `memory`. Scenarios default to 10 samples with no warmup time, streams to 10 samples.
56
+
57
+ ```ts
58
+ Bench.scenario('import', {
59
+ before: () => writeFixture(rows), // untimed, every run
60
+ run: file =>
61
+ Effect.gen(function* () {
62
+ const parsed = yield* Bench.phase('parse', parseCsv(file))
63
+ return yield* Bench.phase('insert', insertRows(parsed))
64
+ }),
65
+ verify: inserted => inserted === rows.length,
66
+ })
67
+ ```
68
+
69
+ Streams and scenarios add a `metrics` record to each result; the key suffix gives the unit (`firstItemNs`, `peakRssBytes`, `phase:parseNs`). `peakRss` is the whole process's resident memory, so earlier benches in the same process count toward it.
46
70
 
47
71
  ## Output
48
72
 
49
73
  `--json` prints one record per line on stdout: a `result` per bench and a final `summary`. Logs go to stderr.
50
74
 
51
75
  ```json
52
- {"type":"result","schemaVersion":1,"status":"ok","id":"leadSchema/decode/effect","stats":{"medianNs":858,"p99Ns":943,"opsPerSec":1165161,...},"comparison":{"baseline":"before","change":0.051,"ci":[0.039,0.058],"verdict":"slower","stale":false},"relative":{"baselineId":"leadSchema/decode/sync","ratio":5.1}}
53
- {"type":"summary","schemaVersion":1,"total":4,"failed":0,"regressions":1,"budgetsExceeded":0,"stale":0,"exitCode":1}
76
+ {"type":"result","schemaVersion":3,"status":"ok","id":"userSchema/decode/effect","stats":{"medianNs":858,"p99Ns":943,"opsPerSec":1165161,...},"comparison":{"baseline":"before","change":0.051,"ci":[0.039,0.058],"verdict":"slower","stale":false},"relative":{"baselineId":"userSchema/decode/sync","ratio":5.1}}
77
+ {"type":"summary","schemaVersion":3,"total":4,"failed":0,"regressions":1,"budgetsExceeded":0,"stale":0,"exitCode":1}
54
78
  ```
55
79
 
56
80
  ## How verdicts work
@@ -1,10 +1,13 @@
1
1
  import type { Duration, Scope } from 'effect';
2
- import { Effect, Layer } from 'effect';
2
+ import { Effect, Layer, Stream } from 'effect';
3
3
  export type ParamValue = string | number | boolean;
4
4
  export type Params = Readonly<Record<string, ParamValue>>;
5
+ export type Size = number | `${number} ${'B' | 'KB' | 'KiB' | 'MB' | 'MiB' | 'GB' | 'GiB'}`;
5
6
  export interface Budget {
6
7
  readonly p50?: Duration.Input;
7
8
  readonly p99?: Duration.Input;
9
+ /** Heap growth per operation. Setting it turns on `memory`. */
10
+ readonly heapDelta?: Size;
8
11
  }
9
12
  export interface Options {
10
13
  /** Minimum number of samples to collect. */
@@ -23,6 +26,22 @@ export type Operation = {
23
26
  } | {
24
27
  readonly _tag: 'Effect';
25
28
  readonly run: Effect.Effect<unknown, unknown>;
29
+ /** Operations one run performs; stats are reported per operation. */
30
+ readonly units?: number;
31
+ /** A single operation, for `check`, when `run` performs several. */
32
+ readonly single?: Effect.Effect<unknown, unknown>;
33
+ } | {
34
+ readonly _tag: 'PerOp';
35
+ readonly before: Effect.Effect<unknown, unknown>;
36
+ readonly run: (input: unknown) => Effect.Effect<unknown, unknown>;
37
+ } | {
38
+ readonly _tag: 'Stream';
39
+ readonly stream: () => Stream.Stream<unknown, unknown>;
40
+ } | {
41
+ readonly _tag: 'Scenario';
42
+ readonly before: Effect.Effect<unknown, unknown> | undefined;
43
+ readonly run: (input: unknown) => Effect.Effect<unknown, unknown>;
44
+ readonly verify: ((value: unknown) => boolean) | undefined;
26
45
  };
27
46
  export interface Bench<in Ctx = any, out R = any> {
28
47
  readonly _tag: 'Bench';
@@ -33,6 +52,8 @@ export interface Bench<in Ctx = any, out R = any> {
33
52
  readonly baseline: string;
34
53
  } | undefined;
35
54
  readonly options: Options;
55
+ /** Defaults for this kind of bench; mode, suite and bench options override them. */
56
+ readonly defaults: Options;
36
57
  readonly check: ((value: unknown) => boolean) | undefined;
37
58
  readonly prepare: (ctx: Ctx) => Effect.Effect<Operation, unknown, R>;
38
59
  }
@@ -54,10 +75,20 @@ export declare const suite: <Ctx = undefined, ROut = never>(name: string, option
54
75
  type BenchOptions<A> = Options & {
55
76
  readonly check?: (value: A) => boolean;
56
77
  };
78
+ export interface Spec<Ctx, I, B, A, E, R> extends BenchOptions<A> {
79
+ /** Runs once, untimed. */
80
+ readonly prepare?: (ctx: Ctx) => Effect.Effect<I, unknown, R>;
81
+ /** Runs before every operation, untimed; `run` receives its value. */
82
+ readonly before?: (input: I, ctx: Ctx) => Effect.Effect<B, unknown, R>;
83
+ readonly run: (input: B, ctx: Ctx) => Effect.Effect<A, E, R>;
84
+ }
57
85
  /**
58
86
  * An Effect value is re-run as is; a function is called for every operation, so building the Effect is measured too.
59
87
  */
60
- export declare const make: <Ctx = unknown, A = unknown, E = never, R = never>(name: string, run: Effect.Effect<A, E, R> | ((ctx: Ctx) => Effect.Effect<A, E, R>), options?: BenchOptions<A>) => Bench<Ctx, R>;
88
+ export declare const make: {
89
+ <Ctx = unknown, A = unknown, E = never, R = never>(name: string, run: Effect.Effect<A, E, R> | ((ctx: Ctx) => Effect.Effect<A, E, R>), options?: BenchOptions<A>): Bench<Ctx, R>;
90
+ <Ctx = unknown, I = undefined, B = I, A = unknown, E = never, R = never>(name: string, spec: Spec<Ctx, I, B, A, E, R>): Bench<Ctx, R>;
91
+ };
61
92
  export declare const sync: <Ctx = unknown, A = unknown>(name: string, run: (ctx: Ctx) => A, options?: BenchOptions<A>) => Bench<Ctx, never>;
62
93
  type Matrix = Readonly<Record<string, ReadonlyArray<ParamValue>>>;
63
94
  export type ParamsOf<M extends Matrix> = {
@@ -74,6 +105,36 @@ export declare const params: {
74
105
  readonly sync: (input: I, ctx: Ctx) => A;
75
106
  }): ReadonlyArray<Bench<Ctx, R>>;
76
107
  };
108
+ export interface ThroughputSpec<Ctx, I, A, E, R> extends BenchOptions<A> {
109
+ /** Operations per run; stats are reported per operation. */
110
+ readonly ops: number;
111
+ /** Fibers running operations at once. An array makes one bench per value. */
112
+ readonly concurrency: number | ReadonlyArray<number>;
113
+ readonly prepare?: (ctx: Ctx) => Effect.Effect<I, unknown, R>;
114
+ readonly run: (index: number, input: I, ctx: Ctx) => Effect.Effect<A, E, R>;
115
+ }
116
+ /** Runs `ops` operations with the given concurrency; ids carry it, e.g. `enqueue[concurrency=50]`. */
117
+ export declare const throughput: <Ctx = unknown, I = undefined, A = unknown, E = never, R = never>(name: string, { ops, concurrency, prepare, run, ...options }: ThroughputSpec<Ctx, I, A, E, R>) => ReadonlyArray<Bench<Ctx, R>>;
118
+ export interface StreamSpec<Ctx, I, A, E, R> extends Options {
119
+ readonly prepare?: (ctx: Ctx) => Effect.Effect<I, unknown, R>;
120
+ /** Built fresh for every run. */
121
+ readonly stream: (input: I, ctx: Ctx) => Stream.Stream<A, E, R>;
122
+ }
123
+ /** Runs the stream to the end; stats are per item, with time to first item and peak RSS as metrics. */
124
+ export declare const stream: <Ctx = unknown, I = undefined, A = unknown, E = never, R = never>(name: string, { prepare, stream: build, ...options }: StreamSpec<Ctx, I, A, E, R>) => Bench<Ctx, R>;
125
+ export interface ScenarioSpec<Ctx, I, B, A, E, R> extends Options {
126
+ /** Runs once, untimed. */
127
+ readonly prepare?: (ctx: Ctx) => Effect.Effect<I, unknown, R>;
128
+ /** Runs before every run, untimed; `run` receives its value. */
129
+ readonly before?: (input: I, ctx: Ctx) => Effect.Effect<B, unknown, R>;
130
+ readonly run: (input: B, ctx: Ctx) => Effect.Effect<A, E, R>;
131
+ /** Checked after every run, untimed. */
132
+ readonly verify?: (value: A) => boolean;
133
+ }
134
+ /** A longer flow timed once per sample, with `Bench.phase` timings as metrics. */
135
+ export declare const scenario: <Ctx = unknown, I = undefined, B = I, A = unknown, E = never, R = never>(name: string, { prepare, before, run, verify, ...options }: ScenarioSpec<Ctx, I, B, A, E, R>) => Bench<Ctx, R>;
136
+ /** Times part of a scenario. Nested phases are reported as `outer/inner`; outside a scenario it just runs the effect. */
137
+ export declare const phase: <A, E, R>(name: string, effect: Effect.Effect<A, E, R>) => Effect.Effect<A, E, R>;
77
138
  export declare const group: (name: string, options: {
78
139
  readonly baseline: string;
79
140
  }) => <Ctx, R>(...entries: ReadonlyArray<Entry<Ctx, R>>) => ReadonlyArray<Bench<Ctx, R>>;
@@ -1 +1 @@
1
- {"version":3,"file":"Bench.d.ts","sourceRoot":"","sources":["../../src/Bench.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,QAAQ,CAAA;AAC7C,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,QAAQ,CAAA;AAEtC,MAAM,MAAM,UAAU,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,CAAA;AAElD,MAAM,MAAM,MAAM,GAAG,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC,CAAA;AAEzD,MAAM,WAAW,MAAM;IACrB,QAAQ,CAAC,GAAG,CAAC,EAAE,QAAQ,CAAC,KAAK,CAAA;IAC7B,QAAQ,CAAC,GAAG,CAAC,EAAE,QAAQ,CAAC,KAAK,CAAA;CAC9B;AAED,MAAM,WAAW,OAAO;IACtB,4CAA4C;IAC5C,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAA;IACzB,8DAA8D;IAC9D,QAAQ,CAAC,OAAO,CAAC,EAAE,QAAQ,CAAC,KAAK,CAAA;IACjC,QAAQ,CAAC,MAAM,CAAC,EAAE,QAAQ,CAAC,KAAK,CAAA;IAChC,qFAAqF;IACrF,QAAQ,CAAC,MAAM,CAAC,EAAE,OAAO,CAAA;IACzB,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAA;IACxB,QAAQ,CAAC,IAAI,CAAC,EAAE,aAAa,CAAC,MAAM,CAAC,CAAA;CACtC;AAED,MAAM,MAAM,SAAS,GACjB;IAAE,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,GAAG,EAAE,MAAM,OAAO,CAAA;CAAE,GACtD;IAAE,QAAQ,CAAC,IAAI,EAAE,QAAQ,CAAC;IAAC,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC,MAAM,CAAC,OAAO,EAAE,OAAO,CAAC,CAAA;CAAE,CAAA;AAE9E,MAAM,WAAW,KAAK,CAAC,EAAE,CAAC,GAAG,GAAG,GAAG,EAAE,GAAG,CAAC,CAAC,GAAG,GAAG;IAC9C,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAA;IACtB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;IACrB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAA;IACvB,QAAQ,CAAC,KAAK,EAAE;QAAE,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAA;KAAE,GAAG,SAAS,CAAA;IAChF,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAA;IACzB,QAAQ,CAAC,KAAK,EAAE,CAAC,CAAC,KAAK,EAAE,OAAO,KAAK,OAAO,CAAC,GAAG,SAAS,CAAA;IACzD,QAAQ,CAAC,OAAO,EAAE,CAAC,GAAG,EAAE,GAAG,KAAK,MAAM,CAAC,MAAM,CAAC,SAAS,EAAE,OAAO,EAAE,CAAC,CAAC,CAAA;CACrE;AAED,uHAAuH;AACvH,MAAM,WAAW,KAAK;IACpB,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAA;IACtB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;IACrB,QAAQ,CAAC,KAAK,EAAE,KAAK,CAAC,KAAK,CAAC,KAAK,EAAE,OAAO,CAAC,CAAA;IAC3C,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,CAAC,OAAO,EAAE,OAAO,EAAE,GAAG,CAAC,CAAA;IACpD,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAA;IACzB,QAAQ,CAAC,OAAO,EAAE,aAAa,CAAC,KAAK,CAAC,CAAA;CACvC;AAED,MAAM,WAAW,YAAY,CAAC,GAAG,EAAE,IAAI,CAAE,SAAQ,OAAO;IACtD,QAAQ,CAAC,KAAK,CAAC,EAAE,KAAK,CAAC,KAAK,CAAC,IAAI,EAAE,OAAO,CAAC,CAAA;IAC3C,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,CAAC,GAAG,EAAE,OAAO,EAAE,IAAI,GAAG,KAAK,CAAC,KAAK,CAAC,CAAA;CACjE;AAED,KAAK,KAAK,CAAC,GAAG,EAAE,CAAC,IAAI,KAAK,CAAC,GAAG,EAAE,CAAC,CAAC,GAAG,aAAa,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,CAAA;AAEjE,eAAO,MAAM,KAAK,GACf,GAAG,GAAG,SAAS,EAAE,IAAI,GAAG,KAAK,QAAQ,MAAM,YAAW,YAAY,CAAC,GAAG,EAAE,IAAI,CAAC,kBACjE,aAAa,CAAC,KAAK,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC,KAAG,KAU9C,CAAA;AAEH,KAAK,YAAY,CAAC,CAAC,IAAI,OAAO,GAAG;IAAE,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC,KAAK,EAAE,CAAC,KAAK,OAAO,CAAA;CAAE,CAAA;AAS3E;;GAEG;AACH,eAAO,MAAM,IAAI,GAAI,GAAG,GAAG,OAAO,EAAE,CAAC,GAAG,OAAO,EAAE,CAAC,GAAG,KAAK,EAAE,CAAC,GAAG,KAAK,QAC7D,MAAM,OACP,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,GAAG,KAAK,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,YAC3D,YAAY,CAAC,CAAC,CAAC,KACvB,KAAK,CAAC,GAAG,EAAE,CAAC,CASZ,CAAA;AAEH,eAAO,MAAM,IAAI,GAAI,GAAG,GAAG,OAAO,EAAE,CAAC,GAAG,OAAO,QACvC,MAAM,OACP,CAAC,GAAG,EAAE,GAAG,KAAK,CAAC,YACX,YAAY,CAAC,CAAC,CAAC,KACvB,KAAK,CAAC,GAAG,EAAE,KAAK,CAA2F,CAAA;AAE9G,KAAK,MAAM,GAAG,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,aAAa,CAAC,UAAU,CAAC,CAAC,CAAC,CAAA;AAEjE,MAAM,MAAM,QAAQ,CAAC,CAAC,SAAS,MAAM,IAAI;IAAE,QAAQ,EAAE,CAAC,IAAI,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC;CAAE,CAAA;AAQlF,UAAU,aAAa,CAAC,CAAC,SAAS,MAAM,EAAE,GAAG,EAAE,CAAC,EAAE,CAAC;IACjD,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,GAAG,KAAK,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,CAAC,CAAA;CACnF;AAED,eAAO,MAAM,MAAM,EAAE;IACnB,CAAC,KAAK,CAAC,CAAC,SAAS,MAAM,EAAE,GAAG,GAAG,OAAO,EAAE,CAAC,GAAG,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,OAAO,EAAE,CAAC,GAAG,KAAK,EAAE,CAAC,GAAG,KAAK,EACxF,IAAI,EAAE,MAAM,EACZ,MAAM,EAAE,CAAC,EACT,IAAI,EAAE,aAAa,CAAC,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,CAAC,CAAC,GAC/B,YAAY,CAAC,CAAC,CAAC,GAAG;QAAE,QAAQ,CAAC,GAAG,EAAE,CAAC,KAAK,EAAE,CAAC,EAAE,GAAG,EAAE,GAAG,KAAK,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAA;KAAE,GACnF,aAAa,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,CAAA;IAC/B,CAAC,KAAK,CAAC,CAAC,SAAS,MAAM,EAAE,GAAG,GAAG,OAAO,EAAE,CAAC,GAAG,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,OAAO,EAAE,CAAC,GAAG,KAAK,EAC7E,IAAI,EAAE,MAAM,EACZ,MAAM,EAAE,CAAC,EACT,IAAI,EAAE,aAAa,CAAC,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,CAAC,CAAC,GAAG,YAAY,CAAC,CAAC,CAAC,GAAG;QAAE,QAAQ,CAAC,IAAI,EAAE,CAAC,KAAK,EAAE,CAAC,EAAE,GAAG,EAAE,GAAG,KAAK,CAAC,CAAA;KAAE,GACjG,aAAa,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,CAAA;CA4B9B,CAAA;AAEH,eAAO,MAAM,KAAK,SACT,MAAM,WAAW;IAAE,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAA;CAAE,MACpD,GAAG,EAAE,CAAC,cAAc,aAAa,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,KAAG,aAAa,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,CAAC,CACW,CAAA;AAO5F,eAAO,MAAM,OAAO,cAAe,MAAM,SAAS,IAAI,CAAC,KAAK,EAAE,MAAM,GAAG,QAAQ,GAAG,OAAO,CAAC,KAAG,MACW,CAAA"}
1
+ {"version":3,"file":"Bench.d.ts","sourceRoot":"","sources":["../../src/Bench.ts"],"names":[],"mappings":"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"}
package/dist/src/Bench.js CHANGED
@@ -1,4 +1,5 @@
1
- import { Effect, Layer } from 'effect';
1
+ import { Effect, Layer, Stream } from 'effect';
2
+ import { BenchClock, BenchPhases } from './Services.js';
2
3
  export const suite = (name, options = {}) => (...entries) => {
3
4
  const { layer, setup, ...defaults } = options;
4
5
  return {
@@ -10,14 +11,34 @@ export const suite = (name, options = {}) => (...entries) => {
10
11
  benches: entries.flat(),
11
12
  };
12
13
  };
13
- const makeBench = (name, prepare, { check, ...options }, params = {}) => ({ _tag: 'Bench', name, params, group: undefined, options, check, prepare });
14
+ const makeBench = (name, prepare, { check, ...options }, { params = {}, defaults = {} } = {}) => ({ _tag: 'Bench', name, params, group: undefined, options, defaults, check, prepare });
14
15
  /**
15
16
  * An Effect value is re-run as is; a function is called for every operation, so building the Effect is measured too.
16
17
  */
17
- export const make = (name, run, options = {}) => makeBench(name, ctx => Effect.map(Effect.context(), context => ({
18
- _tag: 'Effect',
19
- run: Effect.provideContext(Effect.isEffect(run) ? run : Effect.suspend(() => run(ctx)), context),
20
- })), options);
18
+ export const make = (name, run, options = {}) => {
19
+ if (Effect.isEffect(run) || typeof run === 'function') {
20
+ return makeBench(name, ctx => Effect.map(Effect.context(), context => ({
21
+ _tag: 'Effect',
22
+ run: Effect.provideContext(Effect.isEffect(run) ? run : Effect.suspend(() => run(ctx)), context),
23
+ })), options);
24
+ }
25
+ const { prepare, before, run: runOne, ...specOptions } = run;
26
+ return makeBench(name, ctx => Effect.gen(function* () {
27
+ const input = prepare === undefined ? undefined : yield* prepare(ctx);
28
+ const context = yield* Effect.context();
29
+ if (before === undefined) {
30
+ return {
31
+ _tag: 'Effect',
32
+ run: Effect.provideContext(Effect.suspend(() => runOne(input, ctx)), context),
33
+ };
34
+ }
35
+ return {
36
+ _tag: 'PerOp',
37
+ before: Effect.provideContext(Effect.suspend(() => before(input, ctx)), context),
38
+ run: (value) => Effect.provideContext(runOne(value, ctx), context),
39
+ };
40
+ }), specOptions);
41
+ };
21
42
  export const sync = (name, run, options = {}) => makeBench(name, ctx => Effect.succeed({ _tag: 'Sync', run: () => run(ctx) }), options);
22
43
  const combinations = (matrix) => Object.entries(matrix).reduce((acc, [key, values]) => acc.flatMap(combo => values.map(value => ({ ...combo, [key]: value }))), [{}]);
23
44
  export const params = (name, matrix, { prepare, run, sync: runSync, ...options }) => combinations(matrix).map(combo => makeBench(name, ctx => Effect.gen(function* () {
@@ -26,7 +47,48 @@ export const params = (name, matrix, { prepare, run, sync: runSync, ...options }
26
47
  return { _tag: 'Sync', run: () => runSync(input, ctx) };
27
48
  const context = yield* Effect.context();
28
49
  return { _tag: 'Effect', run: Effect.provideContext(run(input, ctx), context) };
29
- }), options, combo));
50
+ }), options, { params: combo }));
51
+ /** Runs `ops` operations with the given concurrency; ids carry it, e.g. `enqueue[concurrency=50]`. */
52
+ export const throughput = (name, { ops, concurrency, prepare, run, ...options }) => {
53
+ const indexes = Array.from({ length: ops }, (_, index) => index);
54
+ return (typeof concurrency === 'number' ? [concurrency] : concurrency).map(fibers => makeBench(name, (ctx) => Effect.gen(function* () {
55
+ const input = (prepare === undefined ? undefined : yield* prepare(ctx));
56
+ const context = yield* Effect.context();
57
+ return {
58
+ _tag: 'Effect',
59
+ units: ops,
60
+ single: Effect.provideContext(Effect.suspend(() => run(0, input, ctx)), context),
61
+ run: Effect.provideContext(Effect.forEach(indexes, index => run(index, input, ctx), { concurrency: fibers, discard: true }), context),
62
+ };
63
+ }), options, { params: { concurrency: fibers } }));
64
+ };
65
+ /** Runs the stream to the end; stats are per item, with time to first item and peak RSS as metrics. */
66
+ export const stream = (name, { prepare, stream: build, ...options }) => makeBench(name, (ctx) => Effect.gen(function* () {
67
+ const input = (prepare === undefined ? undefined : yield* prepare(ctx));
68
+ const context = yield* Effect.context();
69
+ return { _tag: 'Stream', stream: () => Stream.provideContext(build(input, ctx), context) };
70
+ }), options, { defaults: { samples: 10 } });
71
+ /** A longer flow timed once per sample, with `Bench.phase` timings as metrics. */
72
+ export const scenario = (name, { prepare, before, run, verify, ...options }) => makeBench(name, (ctx) => Effect.gen(function* () {
73
+ const input = (prepare === undefined ? undefined : yield* prepare(ctx));
74
+ const context = yield* Effect.context();
75
+ return {
76
+ _tag: 'Scenario',
77
+ before: before === undefined
78
+ ? undefined
79
+ : Effect.provideContext(Effect.suspend(() => before(input, ctx)), context),
80
+ run: (value) => Effect.provideContext(Effect.suspend(() => run((before === undefined ? input : value), ctx)), context),
81
+ verify: verify,
82
+ };
83
+ }), options, { defaults: { samples: 10, minTime: 0, warmup: 0 } });
84
+ /** Times part of a scenario. Nested phases are reported as `outer/inner`; outside a scenario it just runs the effect. */
85
+ export const phase = (name, effect) => Effect.gen(function* () {
86
+ const recorder = yield* BenchPhases;
87
+ const clock = yield* BenchClock;
88
+ const path = recorder.path === '' ? name : `${recorder.path}/${name}`;
89
+ const startedAt = clock.nowNs();
90
+ return yield* effect.pipe(Effect.provideService(BenchPhases, { ...recorder, path }), Effect.ensuring(Effect.sync(() => recorder.record(path, clock.nowNs() - startedAt))));
91
+ });
30
92
  export const group = (name, options) => (...entries) => entries.flat().map(bench => ({ ...bench, group: { name, baseline: options.baseline } }));
31
93
  const paramsSuffix = (params) => {
32
94
  const entries = Object.entries(params);
@@ -1 +1 @@
1
- {"version":3,"file":"Bench.js","sourceRoot":"","sources":["../../src/Bench.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"Bench.js","sourceRoot":"","sources":["../../src/Bench.ts"],"names":[],"mappings":"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"}
@@ -1,5 +1,5 @@
1
1
  import { Schema } from 'effect';
2
- export declare const schemaVersion = 2;
2
+ export declare const schemaVersion = 3;
3
3
  export declare const Stats: Schema.Struct<{
4
4
  readonly samples: Schema.Number;
5
5
  readonly outliers: Schema.Number;
@@ -48,6 +48,8 @@ export declare const Relative: Schema.Struct<{
48
48
  readonly ratio: Schema.Number;
49
49
  }>;
50
50
  export type Relative = typeof Relative.Type;
51
+ /** Extra numbers per bench, such as stream time to first item or scenario phases; the key suffix gives the unit. */
52
+ export declare const Metrics: Schema.NullOr<Schema.$Record<Schema.String, Schema.Number>>;
51
53
  export declare const OkResult: Schema.Struct<{
52
54
  readonly id: Schema.String;
53
55
  readonly suite: Schema.String;
@@ -75,6 +77,7 @@ export declare const OkResult: Schema.Struct<{
75
77
  readonly batchSize: Schema.Number;
76
78
  readonly overheadNs: Schema.Number;
77
79
  readonly heapDeltaBytes: Schema.NullOr<Schema.Number>;
80
+ readonly metrics: Schema.NullOr<Schema.$Record<Schema.String, Schema.Number>>;
78
81
  readonly budget: Schema.NullOr<Schema.Struct<{
79
82
  readonly status: Schema.Literals<readonly ["ok", "exceeded"]>;
80
83
  readonly violations: Schema.$Array<Schema.String>;
@@ -133,6 +136,7 @@ export declare const BenchResult: Schema.Union<readonly [Schema.Struct<{
133
136
  readonly batchSize: Schema.Number;
134
137
  readonly overheadNs: Schema.Number;
135
138
  readonly heapDeltaBytes: Schema.NullOr<Schema.Number>;
139
+ readonly metrics: Schema.NullOr<Schema.$Record<Schema.String, Schema.Number>>;
136
140
  readonly budget: Schema.NullOr<Schema.Struct<{
137
141
  readonly status: Schema.Literals<readonly ["ok", "exceeded"]>;
138
142
  readonly violations: Schema.$Array<Schema.String>;
@@ -176,9 +180,11 @@ export declare const RawOk: Schema.Struct<{
176
180
  readonly batchSize: Schema.Number;
177
181
  readonly overheadNs: Schema.Number;
178
182
  readonly heapDeltaBytes: Schema.NullOr<Schema.Number>;
179
- readonly budgetNs: Schema.NullOr<Schema.Struct<{
180
- readonly p50: Schema.NullOr<Schema.Number>;
181
- readonly p99: Schema.NullOr<Schema.Number>;
183
+ readonly metrics: Schema.NullOr<Schema.$Record<Schema.String, Schema.Number>>;
184
+ readonly limits: Schema.NullOr<Schema.Struct<{
185
+ readonly p50Ns: Schema.NullOr<Schema.Number>;
186
+ readonly p99Ns: Schema.NullOr<Schema.Number>;
187
+ readonly heapDeltaBytes: Schema.NullOr<Schema.Number>;
182
188
  }>>;
183
189
  }>;
184
190
  export type RawOk = typeof RawOk.Type;
@@ -196,9 +202,11 @@ export declare const RawResult: Schema.Union<readonly [Schema.Struct<{
196
202
  readonly batchSize: Schema.Number;
197
203
  readonly overheadNs: Schema.Number;
198
204
  readonly heapDeltaBytes: Schema.NullOr<Schema.Number>;
199
- readonly budgetNs: Schema.NullOr<Schema.Struct<{
200
- readonly p50: Schema.NullOr<Schema.Number>;
201
- readonly p99: Schema.NullOr<Schema.Number>;
205
+ readonly metrics: Schema.NullOr<Schema.$Record<Schema.String, Schema.Number>>;
206
+ readonly limits: Schema.NullOr<Schema.Struct<{
207
+ readonly p50Ns: Schema.NullOr<Schema.Number>;
208
+ readonly p99Ns: Schema.NullOr<Schema.Number>;
209
+ readonly heapDeltaBytes: Schema.NullOr<Schema.Number>;
202
210
  }>>;
203
211
  }>, Schema.Struct<{
204
212
  readonly id: Schema.String;
@@ -1 +1 @@
1
- {"version":3,"file":"BenchResult.d.ts","sourceRoot":"","sources":["../../src/BenchResult.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAA;AAE/B,eAAO,MAAM,aAAa,IAAI,CAAA;AAE9B,eAAO,MAAM,KAAK;;;;;;;;;;;IAWhB,gEAAgE;;EAEhE,CAAA;AACF,MAAM,MAAM,KAAK,GAAG,OAAO,KAAK,CAAC,IAAI,CAAA;AAErC,eAAO,MAAM,WAAW;;;;;;;;;EAStB,CAAA;AACF,MAAM,MAAM,WAAW,GAAG,OAAO,WAAW,CAAC,IAAI,CAAA;AAEjD,eAAO,MAAM,OAAO,wEAAgE,CAAA;AACpF,MAAM,MAAM,OAAO,GAAG,OAAO,OAAO,CAAC,IAAI,CAAA;AAEzC,eAAO,MAAM,UAAU;;;;;;IAMrB,mEAAmE;;EAEnE,CAAA;AACF,MAAM,MAAM,UAAU,GAAG,OAAO,UAAU,CAAC,IAAI,CAAA;AAE/C,eAAO,MAAM,WAAW;;;EAGtB,CAAA;AACF,MAAM,MAAM,WAAW,GAAG,OAAO,WAAW,CAAC,IAAI,CAAA;AAEjD,eAAO,MAAM,QAAQ;;;EAGnB,CAAA;AACF,MAAM,MAAM,QAAQ,GAAG,OAAO,QAAQ,CAAC,IAAI,CAAA;AAW3C,eAAO,MAAM,QAAQ;;;;;;;;;;;;;;;;;;;QApDnB,gEAAgE;;;IAwDhE,+EAA+E;;;;;;;;;;;;;;;QA9B/E,mEAAmE;;;;;;;EAsCnE,CAAA;AACF,MAAM,MAAM,QAAQ,GAAG,OAAO,QAAQ,CAAC,IAAI,CAAA;AAE3C,eAAO,MAAM,YAAY;;;;;;;;;;EAKvB,CAAA;AACF,MAAM,MAAM,YAAY,GAAG,OAAO,YAAY,CAAC,IAAI,CAAA;AAEnD,eAAO,MAAM,WAAW;;;;;;;;;;;;;;;;;;;QA3EtB,gEAAgE;;;IAwDhE,+EAA+E;;;;;;;;;;;;;;;QA9B/E,mEAAmE;;;;;;;;;;;;;;;;;IAiDJ,CAAA;AAEjE,uEAAuE;AACvE,eAAO,MAAM,KAAK;;;;;;;;IAGhB,+DAA+D;;;;;;;;;;EAO/D,CAAA;AACF,MAAM,MAAM,KAAK,GAAG,OAAO,KAAK,CAAC,IAAI,CAAA;AAErC,eAAO,MAAM,SAAS;;;;;;;;IAVpB,+DAA+D;;;;;;;;;;;;;;;;;;;;IAUL,CAAA;AAC5D,MAAM,MAAM,SAAS,GAAG,OAAO,SAAS,CAAC,IAAI,CAAA;AAC7C,MAAM,MAAM,WAAW,GAAG,OAAO,WAAW,CAAC,IAAI,CAAA;AAEjD,eAAO,MAAM,OAAO;;;;;;;EAOlB,CAAA;AACF,MAAM,MAAM,OAAO,GAAG,OAAO,OAAO,CAAC,IAAI,CAAA;AAEzC,eAAO,MAAM,aAAa;;IAExB,wBAAwB;;;;;;;;;;;;;QA3GxB,gEAAgE;;;EA8GhE,CAAA;AACF,MAAM,MAAM,aAAa,GAAG,OAAO,aAAa,CAAC,IAAI,CAAA;AAErD,eAAO,MAAM,QAAQ;;;;;;;;;;;;;;;;QANnB,wBAAwB;;;;;;;;;;;;;YA3GxB,gEAAgE;;;;EAuHhE,CAAA;AACF,MAAM,MAAM,QAAQ,GAAG,OAAO,QAAQ,CAAC,IAAI,CAAA"}
1
+ {"version":3,"file":"BenchResult.d.ts","sourceRoot":"","sources":["../../src/BenchResult.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAA;AAE/B,eAAO,MAAM,aAAa,IAAI,CAAA;AAE9B,eAAO,MAAM,KAAK;;;;;;;;;;;IAWhB,gEAAgE;;EAEhE,CAAA;AACF,MAAM,MAAM,KAAK,GAAG,OAAO,KAAK,CAAC,IAAI,CAAA;AAErC,eAAO,MAAM,WAAW;;;;;;;;;EAStB,CAAA;AACF,MAAM,MAAM,WAAW,GAAG,OAAO,WAAW,CAAC,IAAI,CAAA;AAEjD,eAAO,MAAM,OAAO,wEAAgE,CAAA;AACpF,MAAM,MAAM,OAAO,GAAG,OAAO,OAAO,CAAC,IAAI,CAAA;AAEzC,eAAO,MAAM,UAAU;;;;;;IAMrB,mEAAmE;;EAEnE,CAAA;AACF,MAAM,MAAM,UAAU,GAAG,OAAO,UAAU,CAAC,IAAI,CAAA;AAE/C,eAAO,MAAM,WAAW;;;EAGtB,CAAA;AACF,MAAM,MAAM,WAAW,GAAG,OAAO,WAAW,CAAC,IAAI,CAAA;AAEjD,eAAO,MAAM,QAAQ;;;EAGnB,CAAA;AACF,MAAM,MAAM,QAAQ,GAAG,OAAO,QAAQ,CAAC,IAAI,CAAA;AAE3C,oHAAoH;AACpH,eAAO,MAAM,OAAO,6DAA6D,CAAA;AAWjF,eAAO,MAAM,QAAQ;;;;;;;;;;;;;;;;;;;QAvDnB,gEAAgE;;;IA2DhE,+EAA+E;;;;;;;;;;;;;;;;QAjC/E,mEAAmE;;;;;;;EA0CnE,CAAA;AACF,MAAM,MAAM,QAAQ,GAAG,OAAO,QAAQ,CAAC,IAAI,CAAA;AAE3C,eAAO,MAAM,YAAY;;;;;;;;;;EAKvB,CAAA;AACF,MAAM,MAAM,YAAY,GAAG,OAAO,YAAY,CAAC,IAAI,CAAA;AAEnD,eAAO,MAAM,WAAW;;;;;;;;;;;;;;;;;;;QA/EtB,gEAAgE;;;IA2DhE,+EAA+E;;;;;;;;;;;;;;;;QAjC/E,mEAAmE;;;;;;;;;;;;;;;;;IAqDJ,CAAA;AAEjE,uEAAuE;AACvE,eAAO,MAAM,KAAK;;;;;;;;IAGhB,+DAA+D;;;;;;;;;;;;EAc/D,CAAA;AACF,MAAM,MAAM,KAAK,GAAG,OAAO,KAAK,CAAC,IAAI,CAAA;AAErC,eAAO,MAAM,SAAS;;;;;;;;IAjBpB,+DAA+D;;;;;;;;;;;;;;;;;;;;;;IAiBL,CAAA;AAC5D,MAAM,MAAM,SAAS,GAAG,OAAO,SAAS,CAAC,IAAI,CAAA;AAC7C,MAAM,MAAM,WAAW,GAAG,OAAO,WAAW,CAAC,IAAI,CAAA;AAEjD,eAAO,MAAM,OAAO;;;;;;;EAOlB,CAAA;AACF,MAAM,MAAM,OAAO,GAAG,OAAO,OAAO,CAAC,IAAI,CAAA;AAEzC,eAAO,MAAM,aAAa;;IAExB,wBAAwB;;;;;;;;;;;;;QAtHxB,gEAAgE;;;EAyHhE,CAAA;AACF,MAAM,MAAM,aAAa,GAAG,OAAO,aAAa,CAAC,IAAI,CAAA;AAErD,eAAO,MAAM,QAAQ;;;;;;;;;;;;;;;;QANnB,wBAAwB;;;;;;;;;;;;;YAtHxB,gEAAgE;;;;EAkIhE,CAAA;AACF,MAAM,MAAM,QAAQ,GAAG,OAAO,QAAQ,CAAC,IAAI,CAAA"}
@@ -1,5 +1,5 @@
1
1
  import { Schema } from 'effect';
2
- export const schemaVersion = 2;
2
+ export const schemaVersion = 3;
3
3
  export const Stats = Schema.Struct({
4
4
  samples: Schema.Number,
5
5
  outliers: Schema.Number,
@@ -42,6 +42,8 @@ export const Relative = Schema.Struct({
42
42
  baselineId: Schema.String,
43
43
  ratio: Schema.Number,
44
44
  });
45
+ /** Extra numbers per bench, such as stream time to first item or scenario phases; the key suffix gives the unit. */
46
+ export const Metrics = Schema.NullOr(Schema.Record(Schema.String, Schema.Number));
45
47
  const identity = {
46
48
  id: Schema.String,
47
49
  suite: Schema.String,
@@ -59,6 +61,7 @@ export const OkResult = Schema.Struct({
59
61
  batchSize: Schema.Number,
60
62
  overheadNs: Schema.Number,
61
63
  heapDeltaBytes: Schema.NullOr(Schema.Number),
64
+ metrics: Metrics,
62
65
  budget: Schema.NullOr(BudgetCheck),
63
66
  comparison: Schema.NullOr(Comparison),
64
67
  relative: Schema.NullOr(Relative),
@@ -80,7 +83,12 @@ export const RawOk = Schema.Struct({
80
83
  batchSize: Schema.Number,
81
84
  overheadNs: Schema.Number,
82
85
  heapDeltaBytes: Schema.NullOr(Schema.Number),
83
- budgetNs: Schema.NullOr(Schema.Struct({ p50: Schema.NullOr(Schema.Number), p99: Schema.NullOr(Schema.Number) })),
86
+ metrics: Metrics,
87
+ limits: Schema.NullOr(Schema.Struct({
88
+ p50Ns: Schema.NullOr(Schema.Number),
89
+ p99Ns: Schema.NullOr(Schema.Number),
90
+ heapDeltaBytes: Schema.NullOr(Schema.Number),
91
+ })),
84
92
  });
85
93
  export const RawResult = Schema.Union([RawOk, FailedResult]);
86
94
  export const Summary = Schema.Struct({
@@ -1 +1 @@
1
- {"version":3,"file":"BenchResult.js","sourceRoot":"","sources":["../../src/BenchResult.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"BenchResult.js","sourceRoot":"","sources":["../../src/BenchResult.ts"],"names":[],"mappings":"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"}
@@ -15,13 +15,18 @@ export interface Measurement {
15
15
  readonly batchSize: number;
16
16
  readonly overheadNs: number;
17
17
  readonly heapDeltaBytes: number | null;
18
+ readonly metrics: Readonly<Record<string, number>> | null;
19
+ }
20
+ declare const CheckFailed_base: new <A extends Record<string, any> = {}>(args: import("effect/Types").VoidIfEmpty<{ readonly [P in keyof A as P extends "_tag" ? never : P]: A[P]; }>) => import("effect/Cause").YieldableError & {
21
+ readonly _tag: "CheckFailed";
22
+ } & Readonly<A>;
23
+ /** A scenario's `verify` rejected a run's result. */
24
+ export declare class CheckFailed extends CheckFailed_base<{
25
+ readonly message: string;
26
+ }> {
18
27
  }
19
28
  /** Keeps return values reachable so the JIT cannot drop the measured work. */
20
29
  export declare let blackhole: unknown;
21
- export declare const measure: (operation: Operation, options: MeasureOptions) => Effect.Effect<{
22
- samplesNs: number[];
23
- batchSize: number;
24
- overheadNs: number;
25
- heapDeltaBytes: number | null;
26
- }, unknown, never>;
30
+ export declare const measure: (operation: Operation, options: MeasureOptions) => Effect.Effect<Measurement, unknown>;
31
+ export {};
27
32
  //# sourceMappingURL=Measure.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"Measure.d.ts","sourceRoot":"","sources":["../../src/Measure.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAA;AAC/B,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,YAAY,CAAA;AAI3C,MAAM,WAAW,cAAc;IAC7B,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAA;IACxB,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAA;IAC1B,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAA;IACzB,QAAQ,CAAC,MAAM,EAAE,OAAO,CAAA;IACxB,4GAA4G;IAC5G,QAAQ,CAAC,cAAc,CAAC,EAAE,MAAM,CAAA;IAChC,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAA;CAC7B;AAED,MAAM,WAAW,WAAW;IAC1B,yEAAyE;IACzE,QAAQ,CAAC,SAAS,EAAE,aAAa,CAAC,MAAM,CAAC,CAAA;IACzC,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAA;IAC1B,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAA;IAC3B,QAAQ,CAAC,cAAc,EAAE,MAAM,GAAG,IAAI,CAAA;CACvC;AAED,8EAA8E;AAC9E,eAAO,IAAI,SAAS,EAAE,OAAO,CAAA;AAoB7B,eAAO,MAAM,OAAO;;;;;kBAmDlB,CAAA"}
1
+ {"version":3,"file":"Measure.d.ts","sourceRoot":"","sources":["../../src/Measure.ts"],"names":[],"mappings":"AAAA,OAAO,EAAQ,MAAM,EAAU,MAAM,QAAQ,CAAA;AAC7C,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,YAAY,CAAA;AAI3C,MAAM,WAAW,cAAc;IAC7B,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAA;IACxB,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAA;IAC1B,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAA;IACzB,QAAQ,CAAC,MAAM,EAAE,OAAO,CAAA;IACxB,4GAA4G;IAC5G,QAAQ,CAAC,cAAc,CAAC,EAAE,MAAM,CAAA;IAChC,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAA;CAC7B;AAED,MAAM,WAAW,WAAW;IAC1B,yEAAyE;IACzE,QAAQ,CAAC,SAAS,EAAE,aAAa,CAAC,MAAM,CAAC,CAAA;IACzC,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAA;IAC1B,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAA;IAC3B,QAAQ,CAAC,cAAc,EAAE,MAAM,GAAG,IAAI,CAAA;IACtC,QAAQ,CAAC,OAAO,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,GAAG,IAAI,CAAA;CAC1D;;;;AAED,qDAAqD;AACrD,qBAAa,WAAY,SAAQ,iBAAgC;IAAE,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAA;CAAE,CAAC;CAAG;AAEjG,8EAA8E;AAC9E,eAAO,IAAI,SAAS,EAAE,OAAO,CAAA;AAgN7B,eAAO,MAAM,OAAO,cAAe,SAAS,WAAW,cAAc,KAAG,MAAM,CAAC,MAAM,CAAC,WAAW,EAAE,OAAO,CAGlE,CAAA"}