arrow-resilience-kit 0.9.3 → 0.10.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2025 Sorin Albu-Irimies
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
package/README.md ADDED
@@ -0,0 +1,240 @@
1
+ # arrow-resilience-kit
2
+
3
+ Resilience patterns for JavaScript and TypeScript: **retry with backoff** (honoring `Retry-After`), **circuit breakers**, **bulkheads**, **rate limiters**, **time limits**, **hedged requests**, **failover**, **retry budgets**, **adaptive concurrency** and a **TTL/LRU cache**.
4
+
5
+ It is the JS build of the Kotlin Multiplatform library [arrow-resilience-kit](https://github.com/sorinirimies/arrow-resilience-kit), built on [Arrow](https://arrow-kt.io): the same, well-tested implementation that runs on the JVM, Android, iOS and native, exposed through a Promise-based API with generated TypeScript types.
6
+
7
+ - **Promise-based**: every operation takes an `async` function and returns a `Promise`.
8
+ - **Typed**: ships its own `.d.ts`; no `@types` package needed.
9
+ - **ES modules and CommonJS**: `import` and `require()` both work, with named exports.
10
+ - **No runtime dependencies**.
11
+ - **Cancellable**: operations that wait take an `AbortSignal`, like `fetch`.
12
+ - **Your errors, unchanged**: a rejection carries the exact error your function threw.
13
+ - **Silent**: logs nothing unless you ask it to.
14
+
15
+ ```bash
16
+ npm install arrow-resilience-kit
17
+ ```
18
+
19
+ ## Quick start
20
+
21
+ ```ts
22
+ import { CircuitBreaker, Retry } from "arrow-resilience-kit";
23
+
24
+ // Retry transient failures, waiting what the server asks for on 429.
25
+ const user = await Retry.withBackoff(() => fetchJson("https://api.example.com/user"), {
26
+ retries: 3,
27
+ shouldRetry: (e) => e.status === 429 || e.status >= 500,
28
+ delayMillis: (e) => e.retryAfterMillis, // undefined = exponential backoff
29
+ });
30
+
31
+ // Stop calling a service that keeps failing; try again after 30 s.
32
+ const breaker = await CircuitBreaker.create(5, 30_000);
33
+ const orders = await breaker.execute(() => fetchJson("https://orders.example.com/latest"));
34
+ ```
35
+
36
+ Every `create(...)` is `async` and takes positional arguments, all optional (see the signatures below). Durations are plain milliseconds.
37
+
38
+ ## Patterns
39
+
40
+ ### Retry
41
+
42
+ `Retry.withBackoff(block, options?)` is the general-purpose retry for network calls:
43
+
44
+ ```ts
45
+ import { Retry } from "arrow-resilience-kit";
46
+
47
+ const controller = new AbortController();
48
+ const data = await Retry.withBackoff(() => fetchJson(url), {
49
+ retries: 5, // retries after the first attempt (default 3)
50
+ baseMillis: 200, // first backoff (default 100), multiplied by `factor` (default 2)
51
+ maxDelayMillis: 10_000, // cap for the computed backoff
52
+ jitter: 0.1, // ±10 % randomization of the computed backoff
53
+ shouldRetry: (e, retry) => e.status === 429 || e.status >= 500,
54
+ delayMillis: (e, retry) => e.retryAfterMillis, // exact wait for this error, no jitter or cap
55
+ onRetry: (e, retry, delayMillis) => console.debug(`retry ${retry} in ${delayMillis} ms`),
56
+ signal: controller.signal, // abort to stop waiting and reject with signal.reason
57
+ });
58
+ ```
59
+
60
+ Simpler variants: `Retry.withExponentialBackoff(block, retries?, baseMillis?, factor?, signal?)`, `Retry.withConstantDelay(block, retries?, delayMillis?, signal?)`, `Retry.orDefault(block, fallback, retries?, baseMillis?, factor?)` and `Retry.ifMatches(block, shouldRetry, retries?, delayMillis?)`.
61
+
62
+ ### Circuit breaker
63
+
64
+ Fails fast while a dependency is down instead of piling up slow, failing calls.
65
+
66
+ ```ts
67
+ import { CircuitBreaker, SlidingWindowCircuitBreaker } from "arrow-resilience-kit";
68
+
69
+ // Opens after 5 consecutive failures; after 30 s lets 1 trial call through.
70
+ const breaker = await CircuitBreaker.create(5, 30_000, 1, 1);
71
+ breaker.onStateChange((from, to) => console.info(`circuit ${from} -> ${to}`));
72
+
73
+ const result = await breaker.executeOrFallback(
74
+ async () => cachedValue, // used while the circuit is open
75
+ () => fetchJson(url),
76
+ );
77
+
78
+ // Opens when 50 % of the last 20 calls failed (once at least 10 were made).
79
+ const windowed = await SlidingWindowCircuitBreaker.create(20, 10, 0.5, 30_000);
80
+ await windowed.execute(() => fetchJson(url));
81
+ ```
82
+
83
+ ### Bulkhead
84
+
85
+ Limits how many calls run at once, so one slow dependency can't take every connection.
86
+
87
+ ```ts
88
+ import { Bulkhead } from "arrow-resilience-kit";
89
+
90
+ // 10 concurrent calls, 50 waiting, wait at most 2 s for a slot.
91
+ const bulkhead = await Bulkhead.create(10, 50, 2_000);
92
+ const report = await bulkhead.execute(() => fetchJson(url));
93
+ ```
94
+
95
+ ### Rate limiter
96
+
97
+ ```ts
98
+ import { RateLimiter, SlidingWindowRateLimiter } from "arrow-resilience-kit";
99
+
100
+ // Token bucket: 5 calls per second, bursts of up to 10.
101
+ const limiter = await RateLimiter.create(5, 10);
102
+ await limiter.execute(() => fetchJson(url)); // waits for a token
103
+
104
+ // At most 100 calls in any 60 s window.
105
+ const window = await SlidingWindowRateLimiter.create(100, 60_000);
106
+ const maybe = await window.tryExecute(() => fetchJson(url)); // null when over the limit
107
+ ```
108
+
109
+ ### Time limiter
110
+
111
+ ```ts
112
+ import { TimeLimiter } from "arrow-resilience-kit";
113
+
114
+ const limiter = await TimeLimiter.create(5_000); // default timeout
115
+ const fast = await limiter.execute(1_000, () => fetchJson(url)); // per-call timeout
116
+ const orNull = await limiter.executeOrNull(undefined, () => fetchJson(url));
117
+ ```
118
+
119
+ ### Hedged requests
120
+
121
+ Starts a backup request when the first one is slow, and takes whichever answers first.
122
+
123
+ ```ts
124
+ import { hedge } from "arrow-resilience-kit";
125
+
126
+ // A second attempt after 200 ms, at most 2 extra attempts.
127
+ const fastest = await hedge(() => fetchJson(url), 200, 2);
128
+ ```
129
+
130
+ ### Failover
131
+
132
+ Tries providers in order, skipping one that keeps failing.
133
+
134
+ ```ts
135
+ import { Failover, FailoverProviderSpec } from "arrow-resilience-kit";
136
+
137
+ const source = await Failover.create([
138
+ new FailoverProviderSpec("primary", () => fetchJson("https://primary.example.com/data")),
139
+ new FailoverProviderSpec("replica", () => fetchJson("https://replica.example.com/data")),
140
+ ]);
141
+ const value = await source.execute();
142
+ ```
143
+
144
+ ### Retry budget
145
+
146
+ Caps retries across all calls to a dependency (a ratio of successful calls), so retries can't amplify an outage.
147
+
148
+ ```ts
149
+ import { RetryBudget } from "arrow-resilience-kit";
150
+
151
+ const budget = await RetryBudget.create(10, 0.2); // up to 10 tokens, +0.2 per success
152
+ const reply = await budget.retry(() => fetchJson(url), 3, 100, 2_000);
153
+ ```
154
+
155
+ ### Adaptive limiter
156
+
157
+ Adjusts its concurrency limit to observed latency: grows while calls are fast, shrinks when they slow down.
158
+
159
+ ```ts
160
+ import { AdaptiveLimiter } from "arrow-resilience-kit";
161
+
162
+ const adaptive = await AdaptiveLimiter.create(10, 1, 100, 1, 0.5, 250);
163
+ await adaptive.execute(() => fetchJson(url));
164
+ ```
165
+
166
+ ### Cache
167
+
168
+ String-keyed cache with LRU (or LFU/FIFO) eviction and an optional TTL.
169
+
170
+ ```ts
171
+ import { Cache } from "arrow-resilience-kit";
172
+
173
+ const cache = await Cache.create<User>(1_000, 60_000, "LRU");
174
+ const cached = await cache.getOrPut("user:42", () => fetchJson("https://api.example.com/users/42"));
175
+ ```
176
+
177
+ ## Errors
178
+
179
+ A rejected promise carries **exactly the error your function rejected with**, so `instanceof` and custom fields keep working:
180
+
181
+ ```ts
182
+ try {
183
+ await breaker.execute(() => fetchJson(url));
184
+ } catch (e) {
185
+ if (e instanceof HttpError && e.status === 404) {
186
+ // not found, as thrown by fetchJson
187
+ }
188
+ }
189
+ ```
190
+
191
+ Errors raised by the library itself (circuit open, bulkhead full, timeout, retry budget exhausted, ...) are `Error`s with a descriptive message.
192
+
193
+ ## Cancellation
194
+
195
+ `execute(...)` on the circuit breakers, bulkhead, rate limiters, adaptive limiter, time limiter and failover, plus `RetryBudget.retry(...)`, `hedge(...)` and the `Retry` functions accept an `AbortSignal` (the last argument, or the `signal` option of `Retry.withBackoff`). Aborting cancels whatever the library is waiting for (a retry delay, a permit, a timeout) and rejects with `signal.reason`, the same contract as `fetch(url, { signal })`. To also stop the work inside your function, pass the signal into it:
196
+
197
+ ```ts
198
+ const controller = new AbortController();
199
+ const pending = breaker.execute(() => fetch(url, { signal: controller.signal }), controller.signal);
200
+ controller.abort();
201
+ ```
202
+
203
+ ## Async context
204
+
205
+ On Node.js 20.16+ and Bun, your callbacks run in the async context of the call that passed them, so `AsyncLocalStorage` values (request ids, tracing spans) belong to the right caller even when many calls run concurrently.
206
+
207
+ ## Logging
208
+
209
+ Nothing is logged by default. Turn logging on, or route it into your own logger:
210
+
211
+ ```ts
212
+ import { Logging } from "arrow-resilience-kit";
213
+
214
+ Logging.setLevel("WARN"); // OFF (default), ERROR, WARN, INFO, DEBUG, TRACE
215
+ Logging.setHandler((level, message, error) => console.log(`[${level}] ${message}`, error ?? ""));
216
+ Logging.setHandler(null); // back to the console
217
+ ```
218
+
219
+ ## Statistics
220
+
221
+ Most patterns report what they did, for metrics and dashboards:
222
+
223
+ ```ts
224
+ const stats = await bulkhead.statistics();
225
+ console.log(stats.totalCalls, stats.rejectedCalls);
226
+ ```
227
+
228
+ ## Size
229
+
230
+ About 1.3 MB of JavaScript before bundling (the Kotlin standard library and coroutines are compiled in), plus source maps; no dependencies. Declared free of side effects, so bundlers can drop it when unused.
231
+
232
+ ## Links
233
+
234
+ - [Source, Kotlin/JVM/iOS documentation and design notes](https://github.com/sorinirimies/arrow-resilience-kit)
235
+ - [Changelog](https://github.com/sorinirimies/arrow-resilience-kit/blob/main/CHANGELOG.md)
236
+ - [Issues](https://github.com/sorinirimies/arrow-resilience-kit/issues)
237
+
238
+ ## License
239
+
240
+ MIT
@@ -13,32 +13,32 @@
13
13
  'use strict';
14
14
  //region block: imports
15
15
  var AtomicReference = kotlin_kotlin.$_$.j3;
16
- var protoOf = kotlin_kotlin.$_$.r5;
17
- var initMetadataForClass = kotlin_kotlin.$_$.f5;
16
+ var protoOf = kotlin_kotlin.$_$.s5;
17
+ var initMetadataForClass = kotlin_kotlin.$_$.g5;
18
18
  //endregion
19
19
  //region block: pre-declaration
20
20
  initMetadataForClass(Atomic, 'Atomic');
21
21
  //endregion
22
22
  function set_value(_this__u8e3s4, value) {
23
- _this__u8e3s4.set_inogor_k$(value);
23
+ _this__u8e3s4.df(value);
24
24
  }
25
25
  function get_value(_this__u8e3s4) {
26
- return _this__u8e3s4.get_26vq_k$();
26
+ return _this__u8e3s4.ef();
27
27
  }
28
28
  function Atomic(initialValue) {
29
- this.inner_1 = new AtomicReference(initialValue);
29
+ this.cf_1 = new AtomicReference(initialValue);
30
30
  }
31
- protoOf(Atomic).get_26vq_k$ = function () {
32
- return this.inner_1.load_1zbae_k$();
31
+ protoOf(Atomic).ef = function () {
32
+ return this.cf_1.c6();
33
33
  };
34
- protoOf(Atomic).set_inogor_k$ = function (value) {
35
- this.inner_1.store_2l8a0y_k$(value);
34
+ protoOf(Atomic).df = function (value) {
35
+ this.cf_1.d6(value);
36
36
  };
37
- protoOf(Atomic).getAndSet_6mmyt0_k$ = function (value) {
38
- return this.inner_1.exchange_fma250_k$(value);
37
+ protoOf(Atomic).ff = function (value) {
38
+ return this.cf_1.e6(value);
39
39
  };
40
- protoOf(Atomic).compareAndSet_10iwom_k$ = function (expected, new_0) {
41
- return this.inner_1.compareAndSet_l3595a_k$(expected, new_0);
40
+ protoOf(Atomic).gf = function (expected, new_0) {
41
+ return this.cf_1.f6(expected, new_0);
42
42
  };
43
43
  //region block: exports
44
44
  _.$_$ = _.$_$ || {};
@@ -1 +1 @@
1
- {"version":3,"sourceRoot":"../../../../../../../../../../../Users/runner/work/arrow/arrow/arrow-libs/core/arrow-atomic/src/","sources":["NATIVE_IMPLEMENTATIONS.kt","commonMain/kotlin/arrow/atomic/Atomic.kt","nonJvmMain/kotlin/arrow/atomic/Atomic.kt"],"sourcesContent":[null,null,null],"ignoreList":[0],"x_google_ignoreList":[0],"names":["<set-value>","<this>","value","<get-value>","<init>","initialValue","get","set","getAndSet","compareAndSet","expected","new"],"mappings":";;;;;;;;;;;;;;;;;;;;;EC6CEA,mBAFaC,a,EAETC,KAAJF,EAAW;A,IACT,4BAAI,KAAJ,C;EACF,C;EAHAG,mBADaF,aACbE,EAAQ;A,IAAK,OAAL,2B;EAAI,C;ECrCuBC,gBAAYC,YAAZD,EAAA;A,IACf,mCAAkB,YAAlB,C;EADe,C;gCAGrBE,UAAAA,EAAe;A,IAAY,OAAZ,IAAM,CAAN,OAAM,gB;EAAK,C;kCAC1BC,UAAQL,KAARK,EAAkB;A,IAAE,IAAM,CAAN,OAAM,iBAAM,KAAN,C;EAAa,C;wCACvCC,UAAcN,KAAdM,EAA6B;A,IAAqB,OAArB,IAAM,CAAN,OAAM,oBAAS,KAAT,C;EAAc,C;4CAMjDC,UAAkBC,Q,EAAaC,KAA/BF,EAAkD;A,IAAkC,OAAlC,IAAM,CAAN,OAAM,yBAAc,QAAd,EAAwB,KAAxB,C;EAA2B,C;;;;;;;;;"}
1
+ {"version":3,"sourceRoot":"../../../../../../../../../../../Users/runner/work/arrow/arrow/arrow-libs/core/arrow-atomic/src/","sources":["NATIVE_IMPLEMENTATIONS.kt","commonMain/kotlin/arrow/atomic/Atomic.kt","nonJvmMain/kotlin/arrow/atomic/Atomic.kt"],"sourcesContent":[null,null,null],"ignoreList":[0],"x_google_ignoreList":[0],"names":["<set-value>","<this>","value","<get-value>","<init>","initialValue","get","set","getAndSet","compareAndSet","expected","new"],"mappings":";;;;;;;;;;;;;;;;;;;;;EC6CEA,mBAFaC,a,EAETC,KAAJF,EAAW;A,IACT,iBAAI,KAAJ,C;EACF,C;EAHAG,mBADaF,aACbE,EAAQ;A,IAAK,OAAL,kB;EAAI,C;ECrCuBC,gBAAYC,YAAZD,EAAA;A,IACf,gCAAkB,YAAlB,C;EADe,C;uBAGrBE,UAAAA,EAAe;A,IAAY,OAAZ,IAAM,CAAN,IAAM,K;EAAK,C;uBAC1BC,UAAQL,KAARK,EAAkB;A,IAAE,IAAM,CAAN,IAAM,IAAM,KAAN,C;EAAa,C;uBACvCC,UAAcN,KAAdM,EAA6B;A,IAAqB,OAArB,IAAM,CAAN,IAAM,IAAS,KAAT,C;EAAc,C;uBAMjDC,UAAkBC,Q,EAAaC,KAA/BF,EAAkD;A,IAAkC,OAAlC,IAAM,CAAN,IAAM,IAAc,QAAd,EAAwB,KAAxB,C;EAA2B,C;;;;;;;;;"}
@@ -12,14 +12,14 @@
12
12
  }(function (_, kotlin_kotlin) {
13
13
  'use strict';
14
14
  //region block: imports
15
- var noWhenBranchMatchedException = kotlin_kotlin.$_$.b7;
16
- var protoOf = kotlin_kotlin.$_$.r5;
17
- var initMetadataForCompanion = kotlin_kotlin.$_$.g5;
15
+ var noWhenBranchMatchedException = kotlin_kotlin.$_$.d7;
16
+ var protoOf = kotlin_kotlin.$_$.s5;
17
+ var initMetadataForCompanion = kotlin_kotlin.$_$.h5;
18
18
  var Unit_instance = kotlin_kotlin.$_$.b1;
19
- var toString = kotlin_kotlin.$_$.e7;
20
- var hashCode = kotlin_kotlin.$_$.e5;
21
- var equals = kotlin_kotlin.$_$.z4;
22
- var initMetadataForClass = kotlin_kotlin.$_$.f5;
19
+ var toString = kotlin_kotlin.$_$.g7;
20
+ var hashCode = kotlin_kotlin.$_$.f5;
21
+ var equals = kotlin_kotlin.$_$.a5;
22
+ var initMetadataForClass = kotlin_kotlin.$_$.g5;
23
23
  var VOID = kotlin_kotlin.$_$.a;
24
24
  //endregion
25
25
  //region block: pre-declaration
@@ -35,11 +35,11 @@
35
35
  var tmp;
36
36
  if (_this__u8e3s4 instanceof Right) {
37
37
  // Inline function 'arrow.core.identity' call
38
- tmp = _this__u8e3s4.value_1;
38
+ tmp = _this__u8e3s4.if_1;
39
39
  } else {
40
40
  if (_this__u8e3s4 instanceof Left) {
41
41
  // Inline function 'arrow.core.identity' call
42
- tmp = _this__u8e3s4.value_1;
42
+ tmp = _this__u8e3s4.hf_1;
43
43
  } else {
44
44
  noWhenBranchMatchedException();
45
45
  }
@@ -54,7 +54,7 @@
54
54
  }
55
55
  function Companion_0() {
56
56
  Companion_instance_0 = this;
57
- this.unit_1 = new Right(Unit_instance);
57
+ this.jf_1 = new Right(Unit_instance);
58
58
  }
59
59
  var Companion_instance_0;
60
60
  function Companion_getInstance_0() {
@@ -66,40 +66,40 @@
66
66
  }
67
67
  function Left(value) {
68
68
  Either.call(this);
69
- this.value_1 = value;
69
+ this.hf_1 = value;
70
70
  }
71
71
  protoOf(Left).toString = function () {
72
- return 'Either.Left(' + toString(this.value_1) + ')';
72
+ return 'Either.Left(' + toString(this.hf_1) + ')';
73
73
  };
74
74
  protoOf(Left).hashCode = function () {
75
- return this.value_1 == null ? 0 : hashCode(this.value_1);
75
+ return this.hf_1 == null ? 0 : hashCode(this.hf_1);
76
76
  };
77
77
  protoOf(Left).equals = function (other) {
78
78
  if (this === other)
79
79
  return true;
80
80
  if (!(other instanceof Left))
81
81
  return false;
82
- if (!equals(this.value_1, other.value_1))
82
+ if (!equals(this.hf_1, other.hf_1))
83
83
  return false;
84
84
  return true;
85
85
  };
86
86
  function Right(value) {
87
87
  Companion_getInstance_0();
88
88
  Either.call(this);
89
- this.value_1 = value;
89
+ this.if_1 = value;
90
90
  }
91
91
  protoOf(Right).toString = function () {
92
- return 'Either.Right(' + toString(this.value_1) + ')';
92
+ return 'Either.Right(' + toString(this.if_1) + ')';
93
93
  };
94
94
  protoOf(Right).hashCode = function () {
95
- return this.value_1 == null ? 0 : hashCode(this.value_1);
95
+ return this.if_1 == null ? 0 : hashCode(this.if_1);
96
96
  };
97
97
  protoOf(Right).equals = function (other) {
98
98
  if (this === other)
99
99
  return true;
100
100
  if (!(other instanceof Right))
101
101
  return false;
102
- if (!equals(this.value_1, other.value_1))
102
+ if (!equals(this.if_1, other.if_1))
103
103
  return false;
104
104
  return true;
105
105
  };
@@ -115,11 +115,11 @@
115
115
  // Inline function 'arrow.core.Either.fold' call
116
116
  var tmp;
117
117
  if (this instanceof Right) {
118
- var it = this.value_1;
118
+ var it = this.if_1;
119
119
  tmp = 'Either.Right(' + toString(it) + ')';
120
120
  } else {
121
121
  if (this instanceof Left) {
122
- var it_0 = this.value_1;
122
+ var it_0 = this.hf_1;
123
123
  tmp = 'Either.Left(' + toString(it_0) + ')';
124
124
  } else {
125
125
  noWhenBranchMatchedException();
@@ -1 +1 @@
1
- {"version":3,"sources":["NATIVE_IMPLEMENTATIONS.kt","../../../../../../../../../../../Users/runner/work/arrow/arrow/arrow-libs/core/arrow-core/src/commonMain/kotlin/arrow/core/Either.kt"],"sourcesContent":[null,null],"ignoreList":[0],"x_google_ignoreList":[0],"names":["merge","<this>","<init>","toString"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EC88COA,eAAQC,aAARD,EACL;A;QD/8CF,G;IC2lBM,IAo3BJ,aAp3BI,kB;;YAo3BJ,a,CAp3BwB,O;;MACpB,IAm3BJ,aAn3BI,iB;;cAm3BJ,a,CAn3BsB,O;;QAFb,8B;;;IAq3BmB,OAr3BnB,G;EAq3BkB,C;EA1pBzBE,mBAAAA,EAAA;A,EAAA,C;;EDrzBJ,+BAAA,EAAA;AAAA;AAAA,GAAA;A,EC8zBIA,qBAAAA,EAAA;A;IAE6C,sC;EAF7C,C;;ED9zBJ,iCAAA,EAAA;AAAA,sCAAA;AAAA;;AAAA;AAAA;AAAA,GAAA;A,ECkzBgCA,cAAY,KAAZA,EAAA;A,IAA9B,iB;IAA0C,oB;EAAZ,C;2BACnBC,UAAAA,EAAyB;A,IAAqB,OAApB,cAAoB,YAAP,IAAO,CAAP,OAAO,IAAF,G;EAAC,C;2BDnzB1D,UAAA,EAAA;AAAA,IAAA,OAAA,IAAA,CAAA,OAAA,IAAA,IAAA,GAAA,CAAA,GAAA,SAAA,IAAA,CAAA,OAAA,CAAA;AAAA,EAAA,CAAA;yBAAA,UAAA,KAAA,EAAA;AAAA,IAAA,IAAA,IAAA,KAAA,KAAA,CAAA;AAAA,MAAA,OAAA,IAAA;IAAA,MAAA,KAAA,kBAAA;AAAA,MAAA,OAAA,KAAA;IAAA,IAAA,CAAA,OAAA,IAAA,CAAA,OAAA,EAAA,KAAA,CAAA,OAAA,CAAA,CAAA;AAAA,MAAA,OAAA,KAAA;IAAA,OAAA,IAAA;AAAA,EAAA,CAAA;A,EC2zBiCD,eAAY,KAAZA,EAAA;A,IAA/B,yB;IAAA,iB;IAA2C,oB;EAAZ,C;4BACpBC,UAAAA,EAAyB;A,IAAsB,OAArB,eAAqB,YAAP,IAAO,CAAP,OAAO,IAAF,G;EAAC,C;4BD5zB3D,UAAA,EAAA;AAAA,IAAA,OAAA,IAAA,CAAA,OAAA,IAAA,IAAA,GAAA,CAAA,GAAA,SAAA,IAAA,CAAA,OAAA,CAAA;AAAA,EAAA,CAAA;0BAAA,UAAA,KAAA,EAAA;AAAA,IAAA,IAAA,IAAA,KAAA,KAAA,CAAA;AAAA,MAAA,OAAA,IAAA;IAAA,MAAA,KAAA,mBAAA;AAAA,MAAA,OAAA,KAAA;IAAA,IAAA,CAAA,OAAA,IAAA,CAAA,OAAA,EAAA,KAAA,CAAA,OAAA,CAAA,CAAA;AAAA,MAAA,OAAA,KAAA;IAAA,OAAA,IAAA;AAAA,EAAA,CAAA;A,EC40BED,qBAAAA,EAAA;A,EAAA,C;;ED50BF,iCAAA,EAAA;AAAA;AAAA,GAAA;A,ECueAA,gBAAAA,EAAA;A,EAAA,C;6BA6VWC,UAAAA,EAAyB;A;QDp0BpC,G;IC2lBM,IAyO8B,IAzO9B,kB;UD3lBN,KCo0BoC,IDp0BpC,CC2lB0B,O;YA2OnB,eAAD,YAAe,EAAf,IAAiB,G;;MA1OjB,IAwO8B,IAxO9B,iB;YD5lBN,OCo0BoC,IDp0BpC,CC4lBwB,O;cAyOjB,cAAD,YAAc,IAAd,IAAgB,G;;QA3OX,8B;;;IA6OR,OA7OQ,G;EA6OT,C;;;;;;;;;;;;;"}
1
+ {"version":3,"sources":["NATIVE_IMPLEMENTATIONS.kt","../../../../../../../../../../../Users/runner/work/arrow/arrow/arrow-libs/core/arrow-core/src/commonMain/kotlin/arrow/core/Either.kt"],"sourcesContent":[null,null],"ignoreList":[0],"x_google_ignoreList":[0],"names":["merge","<this>","<init>","toString"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EC88COA,eAAQC,aAARD,EACL;A;QD/8CF,G;IC2lBM,IAo3BJ,aAp3BI,kB;;YAo3BJ,a,CAp3BwB,I;;MACpB,IAm3BJ,aAn3BI,iB;;cAm3BJ,a,CAn3BsB,I;;QAFb,8B;;;IAq3BmB,OAr3BnB,G;EAq3BkB,C;EA1pBzBE,mBAAAA,EAAA;A,EAAA,C;;EDrzBJ,+BAAA,EAAA;AAAA;AAAA,GAAA;A,EC8zBIA,qBAAAA,EAAA;A;IAE6C,oC;EAF7C,C;;ED9zBJ,iCAAA,EAAA;AAAA,sCAAA;AAAA;;AAAA;AAAA;AAAA,GAAA;A,ECkzBgCA,cAAY,KAAZA,EAAA;A,IAA9B,iB;IAA0C,iB;EAAZ,C;2BACnBC,UAAAA,EAAyB;A,IAAqB,OAApB,cAAoB,YAAP,IAAO,CAAP,IAAO,IAAF,G;EAAC,C;2BDnzB1D,UAAA,EAAA;AAAA,IAAA,OAAA,IAAA,CAAA,IAAA,IAAA,IAAA,GAAA,CAAA,GAAA,SAAA,IAAA,CAAA,IAAA,CAAA;AAAA,EAAA,CAAA;yBAAA,UAAA,KAAA,EAAA;AAAA,IAAA,IAAA,IAAA,KAAA,KAAA,CAAA;AAAA,MAAA,OAAA,IAAA;IAAA,MAAA,KAAA,kBAAA;AAAA,MAAA,OAAA,KAAA;IAAA,IAAA,CAAA,OAAA,IAAA,CAAA,IAAA,EAAA,KAAA,CAAA,IAAA,CAAA,CAAA;AAAA,MAAA,OAAA,KAAA;IAAA,OAAA,IAAA;AAAA,EAAA,CAAA;A,EC2zBiCD,eAAY,KAAZA,EAAA;A,IAA/B,yB;IAAA,iB;IAA2C,iB;EAAZ,C;4BACpBC,UAAAA,EAAyB;A,IAAsB,OAArB,eAAqB,YAAP,IAAO,CAAP,IAAO,IAAF,G;EAAC,C;4BD5zB3D,UAAA,EAAA;AAAA,IAAA,OAAA,IAAA,CAAA,IAAA,IAAA,IAAA,GAAA,CAAA,GAAA,SAAA,IAAA,CAAA,IAAA,CAAA;AAAA,EAAA,CAAA;0BAAA,UAAA,KAAA,EAAA;AAAA,IAAA,IAAA,IAAA,KAAA,KAAA,CAAA;AAAA,MAAA,OAAA,IAAA;IAAA,MAAA,KAAA,mBAAA;AAAA,MAAA,OAAA,KAAA;IAAA,IAAA,CAAA,OAAA,IAAA,CAAA,IAAA,EAAA,KAAA,CAAA,IAAA,CAAA,CAAA;AAAA,MAAA,OAAA,KAAA;IAAA,OAAA,IAAA;AAAA,EAAA,CAAA;A,EC40BED,qBAAAA,EAAA;A,EAAA,C;;ED50BF,iCAAA,EAAA;AAAA;AAAA,GAAA;A,ECueAA,gBAAAA,EAAA;A,EAAA,C;6BA6VWC,UAAAA,EAAyB;A;QDp0BpC,G;IC2lBM,IAyO8B,IAzO9B,kB;UD3lBN,KCo0BoC,IDp0BpC,CC2lB0B,I;YA2OnB,eAAD,YAAe,EAAf,IAAiB,G;;MA1OjB,IAwO8B,IAxO9B,iB;YD5lBN,OCo0BoC,IDp0BpC,CC4lBwB,I;cAyOjB,cAAD,YAAc,IAAd,IAAgB,G;;QA3OX,8B;;;IA6OR,OA7OQ,G;EA6OT,C;;;;;;;;;;;;;"}