@graphrefly/graphrefly 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.
Files changed (73) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +234 -0
  3. package/dist/chunk-5X3LAO3B.js +1571 -0
  4. package/dist/chunk-5X3LAO3B.js.map +1 -0
  5. package/dist/chunk-6W5SGIGB.js +1793 -0
  6. package/dist/chunk-6W5SGIGB.js.map +1 -0
  7. package/dist/chunk-CP6MNKAA.js +97 -0
  8. package/dist/chunk-CP6MNKAA.js.map +1 -0
  9. package/dist/chunk-HP7OKEOE.js +107 -0
  10. package/dist/chunk-HP7OKEOE.js.map +1 -0
  11. package/dist/chunk-KWXPDASV.js +781 -0
  12. package/dist/chunk-KWXPDASV.js.map +1 -0
  13. package/dist/chunk-O3PI7W45.js +68 -0
  14. package/dist/chunk-O3PI7W45.js.map +1 -0
  15. package/dist/chunk-QW7H3ICI.js +1372 -0
  16. package/dist/chunk-QW7H3ICI.js.map +1 -0
  17. package/dist/chunk-VPS7L64N.js +4785 -0
  18. package/dist/chunk-VPS7L64N.js.map +1 -0
  19. package/dist/chunk-Z4Y4FMQN.js +1097 -0
  20. package/dist/chunk-Z4Y4FMQN.js.map +1 -0
  21. package/dist/compat/nestjs/index.cjs +4883 -0
  22. package/dist/compat/nestjs/index.cjs.map +1 -0
  23. package/dist/compat/nestjs/index.d.cts +7 -0
  24. package/dist/compat/nestjs/index.d.ts +7 -0
  25. package/dist/compat/nestjs/index.js +84 -0
  26. package/dist/compat/nestjs/index.js.map +1 -0
  27. package/dist/core/index.cjs +1632 -0
  28. package/dist/core/index.cjs.map +1 -0
  29. package/dist/core/index.d.cts +2 -0
  30. package/dist/core/index.d.ts +2 -0
  31. package/dist/core/index.js +90 -0
  32. package/dist/core/index.js.map +1 -0
  33. package/dist/extra/index.cjs +6885 -0
  34. package/dist/extra/index.cjs.map +1 -0
  35. package/dist/extra/index.d.cts +5 -0
  36. package/dist/extra/index.d.ts +5 -0
  37. package/dist/extra/index.js +290 -0
  38. package/dist/extra/index.js.map +1 -0
  39. package/dist/graph/index.cjs +3225 -0
  40. package/dist/graph/index.cjs.map +1 -0
  41. package/dist/graph/index.d.cts +3 -0
  42. package/dist/graph/index.d.ts +3 -0
  43. package/dist/graph/index.js +25 -0
  44. package/dist/graph/index.js.map +1 -0
  45. package/dist/graph-CL_ZDAj9.d.cts +605 -0
  46. package/dist/graph-D18qmsNm.d.ts +605 -0
  47. package/dist/index-B6SsZs2h.d.cts +3463 -0
  48. package/dist/index-B7eOdgEx.d.ts +449 -0
  49. package/dist/index-BHUvlQ3v.d.ts +3463 -0
  50. package/dist/index-BtK55IE2.d.ts +231 -0
  51. package/dist/index-BvhgZRHK.d.cts +231 -0
  52. package/dist/index-Bvy_6CaN.d.ts +452 -0
  53. package/dist/index-C3BMRmmp.d.cts +449 -0
  54. package/dist/index-C5mqLhMX.d.cts +452 -0
  55. package/dist/index-CP_QvbWu.d.ts +940 -0
  56. package/dist/index-D_geH2Bm.d.cts +940 -0
  57. package/dist/index.cjs +14843 -0
  58. package/dist/index.cjs.map +1 -0
  59. package/dist/index.d.cts +1517 -0
  60. package/dist/index.d.ts +1517 -0
  61. package/dist/index.js +3649 -0
  62. package/dist/index.js.map +1 -0
  63. package/dist/meta-BsF6Sag9.d.cts +607 -0
  64. package/dist/meta-BsF6Sag9.d.ts +607 -0
  65. package/dist/patterns/reactive-layout/index.cjs +4143 -0
  66. package/dist/patterns/reactive-layout/index.cjs.map +1 -0
  67. package/dist/patterns/reactive-layout/index.d.cts +3 -0
  68. package/dist/patterns/reactive-layout/index.d.ts +3 -0
  69. package/dist/patterns/reactive-layout/index.js +38 -0
  70. package/dist/patterns/reactive-layout/index.js.map +1 -0
  71. package/dist/reactive-log-BfvfNWQh.d.cts +137 -0
  72. package/dist/reactive-log-ohLmTXoZ.d.ts +137 -0
  73. package/package.json +256 -0
@@ -0,0 +1,781 @@
1
+ import {
2
+ COMPLETE,
3
+ DATA,
4
+ DIRTY,
5
+ ERROR,
6
+ PAUSE,
7
+ RESUME,
8
+ batch,
9
+ derived,
10
+ node,
11
+ producer,
12
+ state,
13
+ wallClockNs
14
+ } from "./chunk-5X3LAO3B.js";
15
+
16
+ // src/extra/observable.ts
17
+ import { Observable } from "rxjs";
18
+ function toObservable(node2) {
19
+ return new Observable((subscriber) => {
20
+ const unsub = node2.subscribe((msgs) => {
21
+ for (const m of msgs) {
22
+ if (subscriber.closed) return;
23
+ if (m[0] === DATA) {
24
+ subscriber.next(m[1]);
25
+ } else if (m[0] === ERROR) {
26
+ subscriber.error(m[1]);
27
+ return;
28
+ } else if (m[0] === COMPLETE) {
29
+ subscriber.complete();
30
+ return;
31
+ }
32
+ }
33
+ });
34
+ return unsub;
35
+ });
36
+ }
37
+ function toMessages$(node2) {
38
+ return new Observable((subscriber) => {
39
+ const unsub = node2.subscribe((msgs) => {
40
+ if (subscriber.closed) return;
41
+ subscriber.next(msgs);
42
+ for (const m of msgs) {
43
+ if (m[0] === ERROR) {
44
+ subscriber.error(m[1]);
45
+ return;
46
+ }
47
+ if (m[0] === COMPLETE) {
48
+ subscriber.complete();
49
+ return;
50
+ }
51
+ }
52
+ });
53
+ return unsub;
54
+ });
55
+ }
56
+ function observeNode$(graph, path, options) {
57
+ return new Observable((subscriber) => {
58
+ const handle = graph.observe(path, options);
59
+ const unsub = handle.subscribe((msgs) => {
60
+ for (const m of msgs) {
61
+ if (subscriber.closed) return;
62
+ if (m[0] === DATA) {
63
+ subscriber.next(m[1]);
64
+ } else if (m[0] === ERROR) {
65
+ subscriber.error(m[1]);
66
+ return;
67
+ } else if (m[0] === COMPLETE) {
68
+ subscriber.complete();
69
+ return;
70
+ }
71
+ }
72
+ });
73
+ return unsub;
74
+ });
75
+ }
76
+ function observeGraph$(graph, options) {
77
+ return new Observable((subscriber) => {
78
+ const handle = graph.observe(options);
79
+ const unsub = handle.subscribe((nodePath, messages) => {
80
+ if (subscriber.closed) return;
81
+ subscriber.next({ path: nodePath, messages });
82
+ });
83
+ return unsub;
84
+ });
85
+ }
86
+
87
+ // src/extra/cron.ts
88
+ function parseField(field, min, max) {
89
+ const result = /* @__PURE__ */ new Set();
90
+ for (const part of field.split(",")) {
91
+ const [range, stepStr] = part.split("/");
92
+ const step = stepStr ? Number.parseInt(stepStr, 10) : 1;
93
+ if (Number.isNaN(step) || step < 1) throw new Error(`Invalid cron step: ${part}`);
94
+ let start;
95
+ let end;
96
+ if (range === "*") {
97
+ start = min;
98
+ end = max;
99
+ } else if (range.includes("-")) {
100
+ const [a, b] = range.split("-");
101
+ start = Number.parseInt(a, 10);
102
+ end = Number.parseInt(b, 10);
103
+ } else {
104
+ start = Number.parseInt(range, 10);
105
+ end = start;
106
+ }
107
+ if (Number.isNaN(start) || Number.isNaN(end)) throw new Error(`Invalid cron field: ${field}`);
108
+ if (start < min || end > max)
109
+ throw new Error(`Cron field out of range: ${field} (${min}-${max})`);
110
+ if (start > end) throw new Error(`Invalid cron range: ${start}-${end} in ${field}`);
111
+ for (let i = start; i <= end; i += step) result.add(i);
112
+ }
113
+ return result;
114
+ }
115
+ function parseCron(expr) {
116
+ const parts = expr.trim().split(/\s+/);
117
+ if (parts.length !== 5) throw new Error(`Invalid cron: expected 5 fields, got ${parts.length}`);
118
+ return {
119
+ minutes: parseField(parts[0], 0, 59),
120
+ hours: parseField(parts[1], 0, 23),
121
+ daysOfMonth: parseField(parts[2], 1, 31),
122
+ months: parseField(parts[3], 1, 12),
123
+ daysOfWeek: parseField(parts[4], 0, 6)
124
+ };
125
+ }
126
+ function matchesCron(schedule, date) {
127
+ return schedule.minutes.has(date.getMinutes()) && schedule.hours.has(date.getHours()) && schedule.daysOfMonth.has(date.getDate()) && schedule.months.has(date.getMonth() + 1) && schedule.daysOfWeek.has(date.getDay());
128
+ }
129
+
130
+ // src/extra/sources.ts
131
+ import { existsSync, watch } from "fs";
132
+ import { resolve as resolvePath } from "path";
133
+ function sourceOpts(opts) {
134
+ return { describeKind: "producer", ...opts };
135
+ }
136
+ function operatorOpts(opts) {
137
+ return { describeKind: "operator", ...opts };
138
+ }
139
+ function escapeRegexChar(ch) {
140
+ return /[\\^$+?.()|[\]{}]/.test(ch) ? `\\${ch}` : ch;
141
+ }
142
+ function globToRegExp(glob) {
143
+ let out = "^";
144
+ for (let i = 0; i < glob.length; i += 1) {
145
+ const ch = glob[i];
146
+ if (ch === "*") {
147
+ const next = glob[i + 1];
148
+ if (next === "*") {
149
+ out += ".*";
150
+ i += 1;
151
+ } else {
152
+ out += "[^/]*";
153
+ }
154
+ continue;
155
+ }
156
+ out += escapeRegexChar(ch);
157
+ }
158
+ out += "$";
159
+ return new RegExp(out);
160
+ }
161
+ function matchesAnyPattern(path, patterns) {
162
+ for (const pattern of patterns) {
163
+ if (pattern.test(path)) return true;
164
+ }
165
+ return false;
166
+ }
167
+ function wrapSubscribeHook(inner, before) {
168
+ const wrapper = node([inner], ([val]) => val, {
169
+ describeKind: "operator",
170
+ initial: inner.get()
171
+ });
172
+ const origSubscribe = wrapper.subscribe.bind(wrapper);
173
+ wrapper.subscribe = (sink, hints) => {
174
+ before(sink);
175
+ return origSubscribe(sink, hints);
176
+ };
177
+ return wrapper;
178
+ }
179
+ function fromTimer(ms, opts) {
180
+ const { signal, period, ...rest } = opts ?? {};
181
+ return producer((_d, a) => {
182
+ let done = false;
183
+ let count = 0;
184
+ let t;
185
+ let iv;
186
+ const cleanup = () => {
187
+ done = true;
188
+ if (t !== void 0) clearTimeout(t);
189
+ if (iv !== void 0) clearInterval(iv);
190
+ signal?.removeEventListener("abort", onAbort);
191
+ };
192
+ const finish = () => {
193
+ if (done) return;
194
+ a.emit(count++);
195
+ if (period != null) {
196
+ iv = setInterval(() => {
197
+ if (done) return;
198
+ a.emit(count++);
199
+ }, period);
200
+ } else {
201
+ done = true;
202
+ signal?.removeEventListener("abort", onAbort);
203
+ queueMicrotask(() => a.down([[COMPLETE]]));
204
+ }
205
+ };
206
+ const onAbort = () => {
207
+ if (done) return;
208
+ cleanup();
209
+ a.down([[ERROR, signal.reason]]);
210
+ };
211
+ if (signal?.aborted) {
212
+ onAbort();
213
+ return;
214
+ }
215
+ t = setTimeout(finish, ms);
216
+ signal?.addEventListener("abort", onAbort, { once: true });
217
+ return cleanup;
218
+ }, sourceOpts(rest));
219
+ }
220
+ function fromCron(expr, opts) {
221
+ const schedule = parseCron(expr);
222
+ const { tickMs: tickOpt, output, ...rest } = opts ?? {};
223
+ const tickMs = tickOpt ?? 6e4;
224
+ const emitDate = output === "date";
225
+ return producer(
226
+ (_d, a) => {
227
+ let lastFiredKey = -1;
228
+ const check = () => {
229
+ const now = /* @__PURE__ */ new Date();
230
+ const key = now.getFullYear() * 1e8 + (now.getMonth() + 1) * 1e6 + now.getDate() * 1e4 + now.getHours() * 100 + now.getMinutes();
231
+ if (key !== lastFiredKey && matchesCron(schedule, now)) {
232
+ lastFiredKey = key;
233
+ a.emit(emitDate ? now : wallClockNs());
234
+ }
235
+ };
236
+ check();
237
+ const id = setInterval(check, tickMs);
238
+ return () => clearInterval(id);
239
+ },
240
+ { ...sourceOpts(rest), name: rest.name ?? `cron:${expr}` }
241
+ );
242
+ }
243
+ function fromEvent(target, type, opts) {
244
+ const { capture, passive, once, ...rest } = opts ?? {};
245
+ return producer((_d, a) => {
246
+ const handler = (e) => {
247
+ a.emit(e);
248
+ };
249
+ const options = { capture, passive, once };
250
+ target.addEventListener(type, handler, options);
251
+ return () => target.removeEventListener(type, handler, options);
252
+ }, sourceOpts(rest));
253
+ }
254
+ function fromFSWatch(paths, opts) {
255
+ const list = Array.isArray(paths) ? paths : [paths];
256
+ if (list.length === 0) {
257
+ throw new RangeError("fromFSWatch expects at least one path");
258
+ }
259
+ const { recursive = true, debounce = 100, include, exclude, ...rest } = opts ?? {};
260
+ const includePatterns = include?.map(globToRegExp) ?? [];
261
+ const excludePatterns = (exclude ?? ["**/node_modules/**", "**/.git/**", "**/dist/**"]).map(
262
+ globToRegExp
263
+ );
264
+ return producer((_d, a) => {
265
+ const pending = /* @__PURE__ */ new Map();
266
+ const watchers = [];
267
+ let stopped = false;
268
+ let terminalEmitted = false;
269
+ let generation = 0;
270
+ const closeWatchers = () => {
271
+ for (const watcher of watchers.splice(0)) watcher.close();
272
+ };
273
+ const emitError = (err) => {
274
+ if (terminalEmitted) return;
275
+ terminalEmitted = true;
276
+ stopped = true;
277
+ if (timer !== void 0) clearTimeout(timer);
278
+ timer = void 0;
279
+ pending.clear();
280
+ closeWatchers();
281
+ a.down([[ERROR, err]]);
282
+ };
283
+ let timer;
284
+ const flush = (token) => {
285
+ timer = void 0;
286
+ if (stopped || terminalEmitted) return;
287
+ if (pending.size === 0) return;
288
+ const batchMessages = [];
289
+ for (const evt of pending.values()) batchMessages.push([DATA, evt]);
290
+ pending.clear();
291
+ if (stopped || terminalEmitted || token !== generation) return;
292
+ a.down(batchMessages);
293
+ };
294
+ try {
295
+ for (const basePath of list) {
296
+ const watcher = watch(
297
+ basePath,
298
+ { recursive },
299
+ (eventType, fileName) => {
300
+ if (stopped || terminalEmitted) return;
301
+ if (fileName == null) return;
302
+ const rel = String(fileName).replaceAll("\\", "/");
303
+ const abs = resolvePath(basePath, String(fileName));
304
+ const normalized = abs.replaceAll("\\", "/");
305
+ const root = resolvePath(basePath).replaceAll("\\", "/");
306
+ const relForMatch = rel.startsWith("./") ? rel.slice(2) : rel;
307
+ const included = includePatterns.length === 0 || matchesAnyPattern(normalized, includePatterns) || matchesAnyPattern(relForMatch, includePatterns);
308
+ if (!included) return;
309
+ const excluded = matchesAnyPattern(normalized, excludePatterns) || matchesAnyPattern(relForMatch, excludePatterns);
310
+ if (excluded) return;
311
+ let kind = "change";
312
+ if (eventType === "rename") {
313
+ try {
314
+ kind = existsSync(normalized) ? "create" : "delete";
315
+ } catch {
316
+ kind = "rename";
317
+ }
318
+ }
319
+ pending.set(normalized, {
320
+ type: kind,
321
+ path: normalized,
322
+ root,
323
+ relative_path: relForMatch,
324
+ timestamp_ns: wallClockNs()
325
+ });
326
+ if (timer !== void 0) clearTimeout(timer);
327
+ const token = generation;
328
+ timer = setTimeout(() => flush(token), debounce);
329
+ }
330
+ );
331
+ watcher.on("error", (err) => emitError(err));
332
+ watchers.push(watcher);
333
+ }
334
+ } catch (err) {
335
+ emitError(err);
336
+ }
337
+ return () => {
338
+ stopped = true;
339
+ generation += 1;
340
+ if (timer !== void 0) clearTimeout(timer);
341
+ timer = void 0;
342
+ closeWatchers();
343
+ pending.clear();
344
+ };
345
+ }, sourceOpts(rest));
346
+ }
347
+ function fromIter(iterable, opts) {
348
+ return producer((_d, a) => {
349
+ let cancelled = false;
350
+ try {
351
+ for (const x of iterable) {
352
+ if (cancelled) return;
353
+ a.emit(x);
354
+ }
355
+ if (!cancelled) a.down([[COMPLETE]]);
356
+ } catch (e) {
357
+ if (!cancelled) a.down([[ERROR, e]]);
358
+ }
359
+ return () => {
360
+ cancelled = true;
361
+ };
362
+ }, sourceOpts(opts));
363
+ }
364
+ function isThenable(x) {
365
+ return x != null && typeof x.then === "function";
366
+ }
367
+ function fromPromise(p, opts) {
368
+ const { signal, ...rest } = opts ?? {};
369
+ return producer((_d, a) => {
370
+ let settled = false;
371
+ const onAbort = () => {
372
+ if (settled) return;
373
+ settled = true;
374
+ a.down([[ERROR, signal.reason]]);
375
+ };
376
+ if (signal?.aborted) {
377
+ onAbort();
378
+ return;
379
+ }
380
+ signal?.addEventListener("abort", onAbort, { once: true });
381
+ void Promise.resolve(p).then(
382
+ (v) => {
383
+ if (settled) return;
384
+ settled = true;
385
+ signal?.removeEventListener("abort", onAbort);
386
+ a.emit(v);
387
+ a.down([[COMPLETE]]);
388
+ },
389
+ (e) => {
390
+ if (settled) return;
391
+ settled = true;
392
+ signal?.removeEventListener("abort", onAbort);
393
+ a.down([[ERROR, e]]);
394
+ }
395
+ );
396
+ return () => {
397
+ settled = true;
398
+ signal?.removeEventListener("abort", onAbort);
399
+ };
400
+ }, sourceOpts(rest));
401
+ }
402
+ function fromAsyncIter(iterable, opts) {
403
+ const { signal: outerSignal, ...rest } = opts ?? {};
404
+ return producer((_d, a) => {
405
+ const ac = new AbortController();
406
+ const onOuterAbort = () => ac.abort(outerSignal?.reason);
407
+ if (outerSignal?.aborted) {
408
+ ac.abort(outerSignal.reason);
409
+ } else {
410
+ outerSignal?.addEventListener("abort", onOuterAbort, { once: true });
411
+ }
412
+ const signal = outerSignal ?? ac.signal;
413
+ let cancelled = false;
414
+ const it = iterable[Symbol.asyncIterator]();
415
+ const pump = () => {
416
+ if (cancelled || signal.aborted) return;
417
+ void Promise.resolve(it.next()).then(
418
+ (step) => {
419
+ if (cancelled || signal.aborted) return;
420
+ if (step.done) {
421
+ queueMicrotask(() => a.down([[COMPLETE]]));
422
+ return;
423
+ }
424
+ a.emit(step.value);
425
+ queueMicrotask(pump);
426
+ },
427
+ (e) => {
428
+ if (!cancelled && !signal.aborted) a.down([[ERROR, e]]);
429
+ }
430
+ );
431
+ };
432
+ queueMicrotask(pump);
433
+ return () => {
434
+ cancelled = true;
435
+ outerSignal?.removeEventListener("abort", onOuterAbort);
436
+ ac.abort();
437
+ void Promise.resolve(it.return?.()).catch(() => void 0);
438
+ };
439
+ }, sourceOpts(rest));
440
+ }
441
+ function isNode(x) {
442
+ return x != null && typeof x.subscribe === "function" && typeof x.get === "function";
443
+ }
444
+ function fromAny(input, opts) {
445
+ if (isNode(input)) {
446
+ return input;
447
+ }
448
+ if (isThenable(input)) {
449
+ return fromPromise(input, opts);
450
+ }
451
+ if (input !== null && input !== void 0) {
452
+ const candidate = input;
453
+ if (typeof candidate[Symbol.asyncIterator] === "function") {
454
+ return fromAsyncIter(input, opts);
455
+ }
456
+ if (typeof candidate[Symbol.iterator] === "function") {
457
+ return fromIter(input, opts);
458
+ }
459
+ }
460
+ return of(input);
461
+ }
462
+ function of(...values) {
463
+ return fromIter(values, void 0);
464
+ }
465
+ function empty(opts) {
466
+ return producer((_d, a) => {
467
+ a.down([[COMPLETE]]);
468
+ return void 0;
469
+ }, sourceOpts(opts));
470
+ }
471
+ function never(opts) {
472
+ return producer(() => void 0, sourceOpts(opts));
473
+ }
474
+ function throwError(err, opts) {
475
+ return producer((_d, a) => {
476
+ a.down([[ERROR, err]]);
477
+ return void 0;
478
+ }, sourceOpts(opts));
479
+ }
480
+ function forEach(source, fn, opts) {
481
+ const inner = node([source], () => void 0, {
482
+ describeKind: "effect",
483
+ ...opts,
484
+ onMessage(msg, _i, _a) {
485
+ if (msg[0] === DATA) {
486
+ fn(msg[1]);
487
+ return true;
488
+ }
489
+ return false;
490
+ }
491
+ });
492
+ return inner.subscribe(() => {
493
+ });
494
+ }
495
+ function toArray(source, opts) {
496
+ const acc = [];
497
+ return node([source], () => void 0, {
498
+ ...operatorOpts(opts),
499
+ completeWhenDepsComplete: false,
500
+ onMessage(msg, _i, a) {
501
+ if (msg[0] === DATA) {
502
+ acc.push(msg[1]);
503
+ return true;
504
+ }
505
+ if (msg[0] === COMPLETE) {
506
+ a.emit([...acc]);
507
+ a.down([[COMPLETE]]);
508
+ return true;
509
+ }
510
+ return false;
511
+ }
512
+ });
513
+ }
514
+ function share(source, opts) {
515
+ return producer(
516
+ (_d, a) => source.subscribe((msgs) => {
517
+ a.down(msgs);
518
+ }),
519
+ { ...sourceOpts(opts), initial: source.get() }
520
+ );
521
+ }
522
+ function replay(source, bufferSize, opts) {
523
+ if (bufferSize < 1) throw new RangeError("replay expects bufferSize >= 1");
524
+ const buf = [];
525
+ const inner = producer(
526
+ (_d, a) => source.subscribe((msgs) => {
527
+ for (const m of msgs) {
528
+ if (m[0] === DATA) {
529
+ buf.push(m[1]);
530
+ if (buf.length > bufferSize) buf.shift();
531
+ }
532
+ }
533
+ a.down(msgs);
534
+ }),
535
+ { ...sourceOpts(opts), initial: source.get() }
536
+ );
537
+ return wrapSubscribeHook(inner, (sink) => {
538
+ for (const v of buf) {
539
+ sink([[DATA, v]]);
540
+ }
541
+ });
542
+ }
543
+ function cached(source, opts) {
544
+ return replay(source, 1, opts);
545
+ }
546
+ function firstValueFrom(source) {
547
+ return new Promise((resolve, reject) => {
548
+ let settled = false;
549
+ const unsub = source.subscribe((msgs) => {
550
+ for (const m of msgs) {
551
+ if (settled) return;
552
+ if (m[0] === DATA) {
553
+ settled = true;
554
+ resolve(m[1]);
555
+ queueMicrotask(() => unsub());
556
+ return;
557
+ }
558
+ if (m[0] === ERROR) {
559
+ settled = true;
560
+ reject(m[1]);
561
+ queueMicrotask(() => unsub());
562
+ return;
563
+ }
564
+ if (m[0] === COMPLETE) {
565
+ settled = true;
566
+ reject(new Error("completed without DATA"));
567
+ queueMicrotask(() => unsub());
568
+ return;
569
+ }
570
+ }
571
+ });
572
+ });
573
+ }
574
+ var shareReplay = replay;
575
+
576
+ // src/extra/backpressure.ts
577
+ var nextLockId = 0;
578
+ function createWatermarkController(sendUp, opts) {
579
+ if (opts.highWaterMark < 1) throw new RangeError("highWaterMark must be >= 1");
580
+ if (opts.lowWaterMark < 0) throw new RangeError("lowWaterMark must be >= 0");
581
+ if (opts.lowWaterMark >= opts.highWaterMark)
582
+ throw new RangeError("lowWaterMark must be < highWaterMark");
583
+ const lockId = /* @__PURE__ */ Symbol(`bp-${++nextLockId}`);
584
+ let pending = 0;
585
+ let paused = false;
586
+ return {
587
+ onEnqueue() {
588
+ pending += 1;
589
+ if (!paused && pending >= opts.highWaterMark) {
590
+ paused = true;
591
+ sendUp([[PAUSE, lockId]]);
592
+ return true;
593
+ }
594
+ return false;
595
+ },
596
+ onDequeue() {
597
+ if (pending > 0) pending -= 1;
598
+ if (paused && pending <= opts.lowWaterMark) {
599
+ paused = false;
600
+ sendUp([[RESUME, lockId]]);
601
+ return true;
602
+ }
603
+ return false;
604
+ },
605
+ get pending() {
606
+ return pending;
607
+ },
608
+ get paused() {
609
+ return paused;
610
+ },
611
+ dispose() {
612
+ if (paused) {
613
+ paused = false;
614
+ sendUp([[RESUME, lockId]]);
615
+ }
616
+ }
617
+ };
618
+ }
619
+
620
+ // src/extra/reactive-base.ts
621
+ function snapshotEqualsVersion(a, b) {
622
+ if (typeof a !== "object" || a == null || typeof b !== "object" || b == null) {
623
+ return Object.is(a, b);
624
+ }
625
+ if (!("version" in a) || !("version" in b)) return Object.is(a, b);
626
+ return a.version === b.version;
627
+ }
628
+ function bumpVersion(current, nextValue, v0) {
629
+ if (v0 != null) {
630
+ return { version: current.version + 1, value: nextValue, v0 };
631
+ }
632
+ return { version: current.version + 1, value: nextValue };
633
+ }
634
+
635
+ // src/extra/reactive-log.ts
636
+ function emptySnapshot() {
637
+ return { version: 0, value: { entries: [] } };
638
+ }
639
+ function keepaliveDerived(n) {
640
+ return n.subscribe(() => {
641
+ });
642
+ }
643
+ function reactiveLog(initial, options = {}) {
644
+ const { name, maxSize } = options;
645
+ if (maxSize !== void 0 && maxSize < 1) {
646
+ throw new RangeError("maxSize must be >= 1");
647
+ }
648
+ const buf = initial ? [...initial] : [];
649
+ if (maxSize !== void 0 && buf.length > maxSize) {
650
+ buf.splice(0, buf.length - maxSize);
651
+ }
652
+ let current = buf.length > 0 ? { version: 1, value: { entries: [...buf] } } : emptySnapshot();
653
+ const entries = state(current, {
654
+ name,
655
+ describeKind: "state",
656
+ equals: snapshotEqualsVersion
657
+ });
658
+ function pushSnapshot() {
659
+ const ev = entries.v;
660
+ current = bumpVersion(
661
+ current,
662
+ { entries: [...buf] },
663
+ ev ? { id: ev.id, version: ev.version } : void 0
664
+ );
665
+ batch(() => {
666
+ entries.down([[DIRTY]]);
667
+ entries.down([[DATA, current]]);
668
+ });
669
+ }
670
+ function trimBuf() {
671
+ if (maxSize !== void 0 && buf.length > maxSize) {
672
+ buf.splice(0, buf.length - maxSize);
673
+ }
674
+ }
675
+ const bundle = {
676
+ entries,
677
+ append(value) {
678
+ buf.push(value);
679
+ trimBuf();
680
+ pushSnapshot();
681
+ },
682
+ appendMany(values) {
683
+ if (values.length === 0) return;
684
+ buf.push(...values);
685
+ trimBuf();
686
+ pushSnapshot();
687
+ },
688
+ clear() {
689
+ if (buf.length === 0) return;
690
+ buf.length = 0;
691
+ pushSnapshot();
692
+ },
693
+ trimHead(n) {
694
+ if (n < 0) {
695
+ throw new RangeError("n must be >= 0");
696
+ }
697
+ if (n === 0) return;
698
+ if (n >= buf.length) {
699
+ if (buf.length === 0) return;
700
+ buf.length = 0;
701
+ } else {
702
+ buf.splice(0, n);
703
+ }
704
+ pushSnapshot();
705
+ },
706
+ tail(n) {
707
+ if (n < 0) {
708
+ throw new RangeError("n must be >= 0");
709
+ }
710
+ const snap = entries.get();
711
+ const e = snap.value.entries;
712
+ const init = n === 0 ? [] : e.slice(Math.max(0, e.length - n));
713
+ const out = derived(
714
+ [entries],
715
+ ([s]) => {
716
+ const list = s.value.entries;
717
+ return n === 0 ? [] : list.slice(Math.max(0, list.length - n));
718
+ },
719
+ { initial: init, describeKind: "derived" }
720
+ );
721
+ keepaliveDerived(out);
722
+ return out;
723
+ }
724
+ };
725
+ return bundle;
726
+ }
727
+ function logSlice(log, start, stop) {
728
+ if (start < 0) {
729
+ throw new RangeError("start must be >= 0");
730
+ }
731
+ const snap = log.entries.get();
732
+ const e = snap.value.entries;
733
+ const init = stop === void 0 ? e.slice(start) : e.slice(start, stop);
734
+ const out = derived(
735
+ [log.entries],
736
+ ([s]) => {
737
+ const list = s.value.entries;
738
+ return stop === void 0 ? list.slice(start) : list.slice(start, stop);
739
+ },
740
+ { initial: init, describeKind: "derived" }
741
+ );
742
+ keepaliveDerived(out);
743
+ return out;
744
+ }
745
+
746
+ export {
747
+ toObservable,
748
+ toMessages$,
749
+ observeNode$,
750
+ observeGraph$,
751
+ parseCron,
752
+ matchesCron,
753
+ escapeRegexChar,
754
+ globToRegExp,
755
+ matchesAnyPattern,
756
+ fromTimer,
757
+ fromCron,
758
+ fromEvent,
759
+ fromFSWatch,
760
+ fromIter,
761
+ fromPromise,
762
+ fromAsyncIter,
763
+ fromAny,
764
+ of,
765
+ empty,
766
+ never,
767
+ throwError,
768
+ forEach,
769
+ toArray,
770
+ share,
771
+ replay,
772
+ cached,
773
+ firstValueFrom,
774
+ shareReplay,
775
+ createWatermarkController,
776
+ snapshotEqualsVersion,
777
+ bumpVersion,
778
+ reactiveLog,
779
+ logSlice
780
+ };
781
+ //# sourceMappingURL=chunk-KWXPDASV.js.map