@jalvin/runtime 1.0.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/dist/bibi.d.ts +56 -0
- package/dist/bibi.d.ts.map +1 -0
- package/dist/bibi.js +199 -0
- package/dist/bibi.js.map +1 -0
- package/dist/coroutines.d.ts +184 -0
- package/dist/coroutines.d.ts.map +1 -0
- package/dist/coroutines.js +560 -0
- package/dist/coroutines.js.map +1 -0
- package/dist/index.d.ts +11 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +230 -0
- package/dist/index.js.map +1 -0
- package/dist/stateflow.d.ts +42 -0
- package/dist/stateflow.d.ts.map +1 -0
- package/dist/stateflow.js +171 -0
- package/dist/stateflow.js.map +1 -0
- package/dist/ui.d.ts +49 -0
- package/dist/ui.d.ts.map +1 -0
- package/dist/ui.js +162 -0
- package/dist/ui.js.map +1 -0
- package/dist/utils.d.ts +375 -0
- package/dist/utils.d.ts.map +1 -0
- package/dist/utils.js +1180 -0
- package/dist/utils.js.map +1 -0
- package/package.json +40 -0
|
@@ -0,0 +1,560 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
// ─────────────────────────────────────────────────────────────────────────────
|
|
3
|
+
// Jalvin Coroutine runtime
|
|
4
|
+
//
|
|
5
|
+
// Provides primitives on top of the JS event loop:
|
|
6
|
+
// • launch { } — fire-and-forget, returns a Job
|
|
7
|
+
// • async { } — returns a Deferred<T> (a typed Promise)
|
|
8
|
+
// • Dispatchers — Main, IO, Default (all map to appropriate JS queues)
|
|
9
|
+
// • withContext — switch dispatcher mid-coroutine
|
|
10
|
+
// • delay — suspendable sleep
|
|
11
|
+
// • CoroutineScope — structured concurrency scope
|
|
12
|
+
// • cancelAll — cancel all children of a scope
|
|
13
|
+
// ─────────────────────────────────────────────────────────────────────────────
|
|
14
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
15
|
+
exports.Flow = exports.Channel = exports.ChannelClosedException = exports.TimeoutCancellationException = exports.CoroutineScope = exports.Deferred = exports.JobCancellationException = exports.Job = void 0;
|
|
16
|
+
exports.yield_ = yield_;
|
|
17
|
+
exports.launch = launch;
|
|
18
|
+
exports.async_ = async_;
|
|
19
|
+
exports.delay = delay;
|
|
20
|
+
exports.withContext = withContext;
|
|
21
|
+
exports.repeat = repeat;
|
|
22
|
+
exports.runBlocking = runBlocking;
|
|
23
|
+
exports.withTimeout = withTimeout;
|
|
24
|
+
exports.withTimeoutOrNull = withTimeoutOrNull;
|
|
25
|
+
exports.flow = flow;
|
|
26
|
+
exports.flowOf = flowOf;
|
|
27
|
+
exports.asFlow = asFlow;
|
|
28
|
+
exports.coroutineScope = coroutineScope;
|
|
29
|
+
exports.supervisorScope = supervisorScope;
|
|
30
|
+
class Job {
|
|
31
|
+
_state = "active";
|
|
32
|
+
_children = new Set();
|
|
33
|
+
_promise;
|
|
34
|
+
_resolve;
|
|
35
|
+
_reject;
|
|
36
|
+
constructor() {
|
|
37
|
+
this._promise = new Promise((res, rej) => {
|
|
38
|
+
this._resolve = res;
|
|
39
|
+
this._reject = rej;
|
|
40
|
+
});
|
|
41
|
+
}
|
|
42
|
+
get isActive() { return this._state === "active"; }
|
|
43
|
+
get isCancelled() { return this._state === "cancelled" || this._state === "cancelling"; }
|
|
44
|
+
get isCompleted() { return this._state === "completed"; }
|
|
45
|
+
async join() {
|
|
46
|
+
return this._promise;
|
|
47
|
+
}
|
|
48
|
+
cancel(reason) {
|
|
49
|
+
if (this._state !== "active")
|
|
50
|
+
return;
|
|
51
|
+
this._state = "cancelling";
|
|
52
|
+
for (const child of this._children)
|
|
53
|
+
child.cancel(reason);
|
|
54
|
+
this._state = "cancelled";
|
|
55
|
+
this._reject(new JobCancellationException(reason ?? "Job was cancelled"));
|
|
56
|
+
}
|
|
57
|
+
/** @internal */
|
|
58
|
+
_complete() {
|
|
59
|
+
if (this._state === "active") {
|
|
60
|
+
this._state = "completed";
|
|
61
|
+
this._resolve();
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
/** @internal */
|
|
65
|
+
_fail(reason) {
|
|
66
|
+
if (this._state === "active") {
|
|
67
|
+
this._state = "cancelled";
|
|
68
|
+
this._reject(reason);
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
/** @internal */
|
|
72
|
+
_addChild(job) {
|
|
73
|
+
this._children.add(job);
|
|
74
|
+
job._promise.finally(() => this._children.delete(job));
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
exports.Job = Job;
|
|
78
|
+
class JobCancellationException extends Error {
|
|
79
|
+
constructor(message) {
|
|
80
|
+
super(message);
|
|
81
|
+
this.name = "JobCancellationException";
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
exports.JobCancellationException = JobCancellationException;
|
|
85
|
+
// ---------------------------------------------------------------------------
|
|
86
|
+
// Deferred<T>
|
|
87
|
+
// ---------------------------------------------------------------------------
|
|
88
|
+
class Deferred {
|
|
89
|
+
_promise;
|
|
90
|
+
_resolve;
|
|
91
|
+
_reject;
|
|
92
|
+
_completed = false;
|
|
93
|
+
constructor() {
|
|
94
|
+
this._promise = new Promise((res, rej) => {
|
|
95
|
+
this._resolve = res;
|
|
96
|
+
this._reject = rej;
|
|
97
|
+
});
|
|
98
|
+
}
|
|
99
|
+
complete(value) {
|
|
100
|
+
if (!this._completed) {
|
|
101
|
+
this._completed = true;
|
|
102
|
+
this._resolve(value);
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
completeExceptionally(reason) {
|
|
106
|
+
if (!this._completed) {
|
|
107
|
+
this._completed = true;
|
|
108
|
+
this._reject(reason);
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
async await() {
|
|
112
|
+
return this._promise;
|
|
113
|
+
}
|
|
114
|
+
/** @internal */
|
|
115
|
+
toPromise() {
|
|
116
|
+
return this._promise;
|
|
117
|
+
}
|
|
118
|
+
}
|
|
119
|
+
exports.Deferred = Deferred;
|
|
120
|
+
/** Yield to the next microtask */
|
|
121
|
+
async function yield_() {
|
|
122
|
+
return new Promise((res) => setTimeout(res, 0));
|
|
123
|
+
}
|
|
124
|
+
// ---------------------------------------------------------------------------
|
|
125
|
+
// CoroutineScope
|
|
126
|
+
// ---------------------------------------------------------------------------
|
|
127
|
+
class CoroutineScope {
|
|
128
|
+
_jobs = new Set();
|
|
129
|
+
_cancelled = false;
|
|
130
|
+
get isCancelled() { return this._cancelled; }
|
|
131
|
+
/**
|
|
132
|
+
* Launch a fire-and-forget coroutine in this scope.
|
|
133
|
+
*/
|
|
134
|
+
launch(fn) {
|
|
135
|
+
if (this._cancelled) {
|
|
136
|
+
const j = new Job();
|
|
137
|
+
j.cancel("Scope is cancelled");
|
|
138
|
+
return j;
|
|
139
|
+
}
|
|
140
|
+
const job = new Job();
|
|
141
|
+
this._jobs.add(job);
|
|
142
|
+
fn()
|
|
143
|
+
.then(() => job._complete())
|
|
144
|
+
.catch((e) => {
|
|
145
|
+
if (e instanceof JobCancellationException) {
|
|
146
|
+
job.cancel(e.message);
|
|
147
|
+
}
|
|
148
|
+
else {
|
|
149
|
+
job._fail(e);
|
|
150
|
+
}
|
|
151
|
+
})
|
|
152
|
+
.finally(() => this._jobs.delete(job));
|
|
153
|
+
return job;
|
|
154
|
+
}
|
|
155
|
+
/**
|
|
156
|
+
* Launch an async coroutine that returns a value.
|
|
157
|
+
*/
|
|
158
|
+
async_(fn) {
|
|
159
|
+
const deferred = new Deferred();
|
|
160
|
+
fn()
|
|
161
|
+
.then((v) => deferred.complete(v))
|
|
162
|
+
.catch((e) => deferred.completeExceptionally(e));
|
|
163
|
+
return deferred;
|
|
164
|
+
}
|
|
165
|
+
/** Cancel all running jobs in this scope */
|
|
166
|
+
cancel(reason) {
|
|
167
|
+
this._cancelled = true;
|
|
168
|
+
for (const job of this._jobs) {
|
|
169
|
+
job.cancel(reason);
|
|
170
|
+
}
|
|
171
|
+
}
|
|
172
|
+
/** Wait for all running jobs to complete */
|
|
173
|
+
async joinAll() {
|
|
174
|
+
await Promise.all([...this._jobs].map((j) => j.join().catch(() => void 0)));
|
|
175
|
+
}
|
|
176
|
+
}
|
|
177
|
+
exports.CoroutineScope = CoroutineScope;
|
|
178
|
+
// ---------------------------------------------------------------------------
|
|
179
|
+
// Top-level launch / async helpers (global scope)
|
|
180
|
+
// ---------------------------------------------------------------------------
|
|
181
|
+
const _globalScope = new CoroutineScope();
|
|
182
|
+
/**
|
|
183
|
+
* Fire-and-forget coroutine at global scope.
|
|
184
|
+
*
|
|
185
|
+
* launch {
|
|
186
|
+
* val data = Bibi("https://api.example.com").get<User>("/me")
|
|
187
|
+
* println(data.body())
|
|
188
|
+
* }
|
|
189
|
+
*/
|
|
190
|
+
function launch(fn) {
|
|
191
|
+
return _globalScope.launch(fn);
|
|
192
|
+
}
|
|
193
|
+
/**
|
|
194
|
+
* Async block that returns a Deferred<T>.
|
|
195
|
+
*
|
|
196
|
+
* val job = async { expensiveCompute() }
|
|
197
|
+
* val result = job.await()
|
|
198
|
+
*/
|
|
199
|
+
function async_(fn) {
|
|
200
|
+
return _globalScope.async_(fn);
|
|
201
|
+
}
|
|
202
|
+
// ---------------------------------------------------------------------------
|
|
203
|
+
// delay — suspendable sleep
|
|
204
|
+
// ---------------------------------------------------------------------------
|
|
205
|
+
function delay(ms) {
|
|
206
|
+
return new Promise((res) => setTimeout(res, ms));
|
|
207
|
+
}
|
|
208
|
+
// ---------------------------------------------------------------------------
|
|
209
|
+
// withContext — switch dispatcher context
|
|
210
|
+
// In JS all dispatchers are the same event loop; we yield for fairness.
|
|
211
|
+
// ---------------------------------------------------------------------------
|
|
212
|
+
async function withContext(_dispatcher, fn) {
|
|
213
|
+
await yield_();
|
|
214
|
+
return fn();
|
|
215
|
+
}
|
|
216
|
+
// ---------------------------------------------------------------------------
|
|
217
|
+
// repeat — repeat a suspend block N times
|
|
218
|
+
// ---------------------------------------------------------------------------
|
|
219
|
+
async function repeat(times, fn) {
|
|
220
|
+
for (let i = 0; i < times; i++) {
|
|
221
|
+
await fn(i);
|
|
222
|
+
}
|
|
223
|
+
}
|
|
224
|
+
// ---------------------------------------------------------------------------
|
|
225
|
+
// runBlocking — bridges suspend world into sync (test helper, not for UI)
|
|
226
|
+
// ---------------------------------------------------------------------------
|
|
227
|
+
function runBlocking(fn) {
|
|
228
|
+
let result;
|
|
229
|
+
let error;
|
|
230
|
+
let done = false;
|
|
231
|
+
fn().then((v) => { result = v; done = true; }).catch((e) => { error = e; done = true; });
|
|
232
|
+
// Spin — only safe in Node.js test environments
|
|
233
|
+
const start = Date.now();
|
|
234
|
+
while (!done) {
|
|
235
|
+
if (Date.now() - start > 10_000)
|
|
236
|
+
throw new Error("runBlocking timeout");
|
|
237
|
+
// No synchronous spin possible in pure JS — callers should use await
|
|
238
|
+
}
|
|
239
|
+
if (error !== undefined)
|
|
240
|
+
throw error;
|
|
241
|
+
return result;
|
|
242
|
+
}
|
|
243
|
+
// ---------------------------------------------------------------------------
|
|
244
|
+
// withTimeout / withTimeoutOrNull
|
|
245
|
+
// ---------------------------------------------------------------------------
|
|
246
|
+
class TimeoutCancellationException extends Error {
|
|
247
|
+
constructor(ms) {
|
|
248
|
+
super(`Timed out waiting for ${ms} ms`);
|
|
249
|
+
this.name = "TimeoutCancellationException";
|
|
250
|
+
}
|
|
251
|
+
}
|
|
252
|
+
exports.TimeoutCancellationException = TimeoutCancellationException;
|
|
253
|
+
/**
|
|
254
|
+
* Run `fn` and throw `TimeoutCancellationException` if it doesn't complete
|
|
255
|
+
* within `timeoutMs` milliseconds.
|
|
256
|
+
*/
|
|
257
|
+
async function withTimeout(timeoutMs, fn) {
|
|
258
|
+
let timer = null;
|
|
259
|
+
const timeoutPromise = new Promise((_, reject) => {
|
|
260
|
+
timer = setTimeout(() => reject(new TimeoutCancellationException(timeoutMs)), timeoutMs);
|
|
261
|
+
});
|
|
262
|
+
try {
|
|
263
|
+
const result = await Promise.race([fn(), timeoutPromise]);
|
|
264
|
+
return result;
|
|
265
|
+
}
|
|
266
|
+
finally {
|
|
267
|
+
if (timer !== null)
|
|
268
|
+
clearTimeout(timer);
|
|
269
|
+
}
|
|
270
|
+
}
|
|
271
|
+
/**
|
|
272
|
+
* Like `withTimeout` but returns `null` on timeout instead of throwing.
|
|
273
|
+
*/
|
|
274
|
+
async function withTimeoutOrNull(timeoutMs, fn) {
|
|
275
|
+
try {
|
|
276
|
+
return await withTimeout(timeoutMs, fn);
|
|
277
|
+
}
|
|
278
|
+
catch (e) {
|
|
279
|
+
if (e instanceof TimeoutCancellationException)
|
|
280
|
+
return null;
|
|
281
|
+
throw e;
|
|
282
|
+
}
|
|
283
|
+
}
|
|
284
|
+
// ---------------------------------------------------------------------------
|
|
285
|
+
// Channel<T>
|
|
286
|
+
// A basic rendezvous channel. Senders await receivers and vice versa.
|
|
287
|
+
// ---------------------------------------------------------------------------
|
|
288
|
+
class ChannelClosedException extends Error {
|
|
289
|
+
constructor() {
|
|
290
|
+
super("Channel is closed");
|
|
291
|
+
this.name = "ChannelClosedException";
|
|
292
|
+
}
|
|
293
|
+
}
|
|
294
|
+
exports.ChannelClosedException = ChannelClosedException;
|
|
295
|
+
/**
|
|
296
|
+
* An unbuffered (rendezvous) channel`.
|
|
297
|
+
*
|
|
298
|
+
* ```
|
|
299
|
+
* val ch = Channel<Int>()
|
|
300
|
+
* launch { ch.send(42) }
|
|
301
|
+
* val v = ch.receive()
|
|
302
|
+
* ```
|
|
303
|
+
*/
|
|
304
|
+
class Channel {
|
|
305
|
+
_buffer = [];
|
|
306
|
+
_capacity;
|
|
307
|
+
_closed = false;
|
|
308
|
+
_sendWaiters = [];
|
|
309
|
+
_recvWaiters = [];
|
|
310
|
+
constructor(capacity = 0) {
|
|
311
|
+
this._capacity = capacity;
|
|
312
|
+
}
|
|
313
|
+
/** Send a value to the channel. Suspends if the buffer is full. */
|
|
314
|
+
async send(value) {
|
|
315
|
+
if (this._closed)
|
|
316
|
+
throw new ChannelClosedException();
|
|
317
|
+
// If there's a waiting receiver, hand off directly
|
|
318
|
+
const receiver = this._recvWaiters.shift();
|
|
319
|
+
if (receiver) {
|
|
320
|
+
receiver.resolve(value);
|
|
321
|
+
return;
|
|
322
|
+
}
|
|
323
|
+
// If buffered capacity allows, enqueue
|
|
324
|
+
if (this._buffer.length < this._capacity) {
|
|
325
|
+
this._buffer.push(value);
|
|
326
|
+
return;
|
|
327
|
+
}
|
|
328
|
+
// Otherwise, suspend until a receiver is ready
|
|
329
|
+
return new Promise((resolve, reject) => {
|
|
330
|
+
this._sendWaiters.push({ value, resolve, reject });
|
|
331
|
+
});
|
|
332
|
+
}
|
|
333
|
+
/** Receive a value from the channel. Suspends if no value is available. */
|
|
334
|
+
async receive() {
|
|
335
|
+
// If there's a buffered value, return it and wake a pending sender
|
|
336
|
+
if (this._buffer.length > 0) {
|
|
337
|
+
const value = this._buffer.shift();
|
|
338
|
+
const sender = this._sendWaiters.shift();
|
|
339
|
+
if (sender) {
|
|
340
|
+
this._buffer.push(sender.value);
|
|
341
|
+
sender.resolve();
|
|
342
|
+
}
|
|
343
|
+
return value;
|
|
344
|
+
}
|
|
345
|
+
if (this._closed)
|
|
346
|
+
throw new ChannelClosedException();
|
|
347
|
+
// If there's a pending sender, receive directly
|
|
348
|
+
const sender = this._sendWaiters.shift();
|
|
349
|
+
if (sender) {
|
|
350
|
+
sender.resolve();
|
|
351
|
+
return sender.value;
|
|
352
|
+
}
|
|
353
|
+
// Suspend until a value arrives
|
|
354
|
+
return new Promise((resolve, reject) => {
|
|
355
|
+
this._recvWaiters.push({ resolve, reject });
|
|
356
|
+
});
|
|
357
|
+
}
|
|
358
|
+
/** Try to receive without suspending. Returns undefined if empty. */
|
|
359
|
+
tryReceive() {
|
|
360
|
+
if (this._buffer.length > 0)
|
|
361
|
+
return this._buffer.shift();
|
|
362
|
+
const sender = this._sendWaiters.shift();
|
|
363
|
+
if (sender) {
|
|
364
|
+
sender.resolve();
|
|
365
|
+
return sender.value;
|
|
366
|
+
}
|
|
367
|
+
return undefined;
|
|
368
|
+
}
|
|
369
|
+
/** Close the channel — subsequent sends throw; pending receives get ChannelClosedException. */
|
|
370
|
+
close() {
|
|
371
|
+
this._closed = true;
|
|
372
|
+
for (const waiter of this._recvWaiters) {
|
|
373
|
+
waiter.reject(new ChannelClosedException());
|
|
374
|
+
}
|
|
375
|
+
this._recvWaiters = [];
|
|
376
|
+
}
|
|
377
|
+
get isClosed() { return this._closed; }
|
|
378
|
+
get isEmpty() { return this._buffer.length === 0 && this._sendWaiters.length === 0; }
|
|
379
|
+
/** Consume all values as an async iterable */
|
|
380
|
+
async *[Symbol.asyncIterator]() {
|
|
381
|
+
while (!this._closed || !this.isEmpty) {
|
|
382
|
+
try {
|
|
383
|
+
yield await this.receive();
|
|
384
|
+
}
|
|
385
|
+
catch (e) {
|
|
386
|
+
if (e instanceof ChannelClosedException)
|
|
387
|
+
return;
|
|
388
|
+
throw e;
|
|
389
|
+
}
|
|
390
|
+
}
|
|
391
|
+
}
|
|
392
|
+
}
|
|
393
|
+
exports.Channel = Channel;
|
|
394
|
+
/**
|
|
395
|
+
* A cold asynchronous stream. The producer block only runs when `.collect()`
|
|
396
|
+
* is called — each collector gets its own independent execution.
|
|
397
|
+
*
|
|
398
|
+
* ```jalvin
|
|
399
|
+
* val flow = flow<Int> {
|
|
400
|
+
* emit(1)
|
|
401
|
+
* emit(2)
|
|
402
|
+
* emit(3)
|
|
403
|
+
* }
|
|
404
|
+
* flow.collect { println(it) }
|
|
405
|
+
* ```
|
|
406
|
+
*/
|
|
407
|
+
class Flow {
|
|
408
|
+
producer;
|
|
409
|
+
constructor(producer) {
|
|
410
|
+
this.producer = producer;
|
|
411
|
+
}
|
|
412
|
+
async collect(collector) {
|
|
413
|
+
await this.producer(async (v) => { await collector(v); });
|
|
414
|
+
}
|
|
415
|
+
map(transform) {
|
|
416
|
+
return new Flow(async (emit) => {
|
|
417
|
+
await this.collect(async (v) => emit(await transform(v)));
|
|
418
|
+
});
|
|
419
|
+
}
|
|
420
|
+
filter(predicate) {
|
|
421
|
+
return new Flow(async (emit) => {
|
|
422
|
+
await this.collect(async (v) => { if (await predicate(v))
|
|
423
|
+
await emit(v); });
|
|
424
|
+
});
|
|
425
|
+
}
|
|
426
|
+
take(count) {
|
|
427
|
+
return new Flow(async (emit) => {
|
|
428
|
+
let n = 0;
|
|
429
|
+
await this.collect(async (v) => {
|
|
430
|
+
if (n++ < count)
|
|
431
|
+
await emit(v);
|
|
432
|
+
});
|
|
433
|
+
});
|
|
434
|
+
}
|
|
435
|
+
drop(count) {
|
|
436
|
+
return new Flow(async (emit) => {
|
|
437
|
+
let n = 0;
|
|
438
|
+
await this.collect(async (v) => { if (n++ >= count)
|
|
439
|
+
await emit(v); });
|
|
440
|
+
});
|
|
441
|
+
}
|
|
442
|
+
distinct() {
|
|
443
|
+
return new Flow(async (emit) => {
|
|
444
|
+
const seen = new Set();
|
|
445
|
+
await this.collect(async (v) => { if (!seen.has(v)) {
|
|
446
|
+
seen.add(v);
|
|
447
|
+
await emit(v);
|
|
448
|
+
} });
|
|
449
|
+
});
|
|
450
|
+
}
|
|
451
|
+
onEach(action) {
|
|
452
|
+
return new Flow(async (emit) => {
|
|
453
|
+
await this.collect(async (v) => { await action(v); await emit(v); });
|
|
454
|
+
});
|
|
455
|
+
}
|
|
456
|
+
async toList() {
|
|
457
|
+
const result = [];
|
|
458
|
+
await this.collect((v) => { result.push(v); });
|
|
459
|
+
return result;
|
|
460
|
+
}
|
|
461
|
+
async first() {
|
|
462
|
+
return new Promise((resolve, reject) => {
|
|
463
|
+
let found = false;
|
|
464
|
+
this.collect((v) => {
|
|
465
|
+
if (!found) {
|
|
466
|
+
found = true;
|
|
467
|
+
resolve(v);
|
|
468
|
+
}
|
|
469
|
+
}).catch(reject);
|
|
470
|
+
});
|
|
471
|
+
}
|
|
472
|
+
async firstOrNull() {
|
|
473
|
+
return new Promise((resolve) => {
|
|
474
|
+
let found = false;
|
|
475
|
+
this.collect((v) => {
|
|
476
|
+
if (!found) {
|
|
477
|
+
found = true;
|
|
478
|
+
resolve(v);
|
|
479
|
+
}
|
|
480
|
+
}).then(() => { if (!found)
|
|
481
|
+
resolve(null); }).catch(() => resolve(null));
|
|
482
|
+
});
|
|
483
|
+
}
|
|
484
|
+
/** Combine two flows, emitting pairs whenever either emits */
|
|
485
|
+
static combine(a, b) {
|
|
486
|
+
return new Flow(async (emit) => {
|
|
487
|
+
let latestA;
|
|
488
|
+
let latestB;
|
|
489
|
+
let hasA = false;
|
|
490
|
+
let hasB = false;
|
|
491
|
+
const pa = a.collect(async (v) => { latestA = v; hasA = true; if (hasB)
|
|
492
|
+
await emit([latestA, latestB]); });
|
|
493
|
+
const pb = b.collect(async (v) => { latestB = v; hasB = true; if (hasA)
|
|
494
|
+
await emit([latestA, latestB]); });
|
|
495
|
+
await Promise.all([pa, pb]);
|
|
496
|
+
});
|
|
497
|
+
}
|
|
498
|
+
/** Merge multiple flows into one */
|
|
499
|
+
static merge(...flows) {
|
|
500
|
+
return new Flow(async (emit) => {
|
|
501
|
+
await Promise.all(flows.map((f) => f.collect(emit)));
|
|
502
|
+
});
|
|
503
|
+
}
|
|
504
|
+
}
|
|
505
|
+
exports.Flow = Flow;
|
|
506
|
+
/**
|
|
507
|
+
* Build a cold Flow from a producer block.
|
|
508
|
+
*
|
|
509
|
+
* ```jalvin
|
|
510
|
+
* val numbers = flow<Int> {
|
|
511
|
+
* for (i in 1..5) {
|
|
512
|
+
* emit(i)
|
|
513
|
+
* delay(100)
|
|
514
|
+
* }
|
|
515
|
+
* }
|
|
516
|
+
* ```
|
|
517
|
+
*/
|
|
518
|
+
function flow(producer) {
|
|
519
|
+
return new Flow(producer);
|
|
520
|
+
}
|
|
521
|
+
/**
|
|
522
|
+
* Build a Flow from a fixed collection.
|
|
523
|
+
*/
|
|
524
|
+
function flowOf(...values) {
|
|
525
|
+
return new Flow(async (emit) => {
|
|
526
|
+
for (const v of values)
|
|
527
|
+
await emit(v);
|
|
528
|
+
});
|
|
529
|
+
}
|
|
530
|
+
/**
|
|
531
|
+
* Build a Flow from an async iterable (e.g. a Channel).
|
|
532
|
+
*/
|
|
533
|
+
function asFlow(source) {
|
|
534
|
+
return new Flow(async (emit) => {
|
|
535
|
+
for await (const v of source)
|
|
536
|
+
await emit(v);
|
|
537
|
+
});
|
|
538
|
+
}
|
|
539
|
+
// ---------------------------------------------------------------------------
|
|
540
|
+
// Structured-concurrency builders
|
|
541
|
+
// ---------------------------------------------------------------------------
|
|
542
|
+
/**
|
|
543
|
+
* Creates a new coroutine scope, executes the given block, and returns once
|
|
544
|
+
* all launched child jobs complete.
|
|
545
|
+
*/
|
|
546
|
+
async function coroutineScope(fn) {
|
|
547
|
+
const scope = new CoroutineScope();
|
|
548
|
+
const result = await Promise.resolve(fn(scope));
|
|
549
|
+
await scope.joinAll();
|
|
550
|
+
return result;
|
|
551
|
+
}
|
|
552
|
+
/**
|
|
553
|
+
* Like `coroutineScope` but child failures do not cancel siblings.
|
|
554
|
+
* In a JS environment all unhandled promise rejections are already independent,
|
|
555
|
+
* so this is equivalent to `coroutineScope`.
|
|
556
|
+
*/
|
|
557
|
+
async function supervisorScope(fn) {
|
|
558
|
+
return coroutineScope(fn);
|
|
559
|
+
}
|
|
560
|
+
//# sourceMappingURL=coroutines.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"coroutines.js","sourceRoot":"","sources":["../src/coroutines.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
export { Bibi, BibiRequestBuilder, BibiError } from "./bibi.js";
|
|
2
|
+
export type { BibiMethod, BibiRequestOptions, BibiResponse, BibiInterceptor } from "./bibi.js";
|
|
3
|
+
export { Job, JobCancellationException, Deferred, CoroutineScope, launch, async_ as async, delay, withContext, repeat, runBlocking, yield_, withTimeout, withTimeoutOrNull, TimeoutCancellationException, Channel, ChannelClosedException, Flow, flow, flowOf, asFlow, coroutineScope, supervisorScope, } from "./coroutines.js";
|
|
4
|
+
export type { Dispatcher, FlowCollector } from "./coroutines.js";
|
|
5
|
+
export { MutableStateFlow, mapFlow, filterFlow, debounceFlow, ViewModel, viewModel, clearViewModel, clearAllViewModels, } from "./stateflow.js";
|
|
6
|
+
export type { StateFlow, Subscriber, Unsubscribe } from "./stateflow.js";
|
|
7
|
+
export { mutableStateOf, remember, rememberMutableStateOf, collectAsState, useViewModel, LaunchedEffect, DisposableEffect, SideEffect, } from "./ui.js";
|
|
8
|
+
export type { MutableState } from "./ui.js";
|
|
9
|
+
export { notNull, NullPointerException, safeCast, range, delegate, lazy, Delegates, LazyDelegate, ObservableDelegate, println, print, listOf, mutableListOf, setOf, mutableSetOf, mapOf, mutableMapOf, pairOf, tripleOf, checkNotNull, requireNotNull, requireCondition, check, error, IllegalArgumentException, IllegalStateException, UnsupportedOperationException, IndexOutOfBoundsException, NoSuchElementException, let_, run_, apply, also, with_, takeIf, takeUnless, map, filter, filterNotNull, forEach, fold, reduce, sumOf, any, all, none, count, first, firstOrNull, last, lastOrNull, find, findLast, flatMap, flatten, groupBy, associate, zip, distinct, distinctBy, sortedBy, sortedByDescending, reversed, chunked, windowed, partition, withIndex, minOf, maxOf, minOrNull, maxOrNull, joinToString, take, takeWhile, drop, dropWhile, coerceAtLeast, coerceAtMost, coerceIn, Int, Long, trimIndent, repeat_ as repeatString, isBlank, isNotBlank, isNullOrBlank, toIntOrNull, toDoubleOrNull, toBooleanOrNull, padStart, padEnd, capitalize, decapitalize, substringBefore, substringAfter, substringBeforeLast, substringAfterLast, removePrefix, removeSuffix, lines, lineSequence, ifEmpty, ifBlank, toInt, toLong, toFloat, toDouble, toChar, charCodeOf, toString, abs, ceil, floor, round, sqrt, pow, exp, ln, log2, log10, sin, cos, tan, asin, acos, atan, atan2, sign, hypot, truncate, clamp, truncDiv, PI, E, IntRange, downTo, step, StringBuilder, buildString, buildList, buildSet, buildMap, Result, runCatching, runCatchingAsync, Regex, RegexResult, measureTimeMillis, measureTimeMillisAsync, measureTimedValue, Random, Default as DefaultRandom, randomUUID, jalvinEquals, Pair, Triple, } from "./utils.js";
|
|
10
|
+
export type { PropertyDelegate, TimedValue } from "./utils.js";
|
|
11
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|