@kithinji/orca 1.0.16 → 1.0.17

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.
@@ -30,6 +30,7 @@ var kithinjiorca = (() => {
30
30
  __export(index_browser_exports, {
31
31
  BOOTSTRAP: () => BOOTSTRAP,
32
32
  BOOTSTRAP_VNODE: () => BOOTSTRAP_VNODE,
33
+ BehaviorSubject: () => BehaviorSubject,
33
34
  Body: () => Body,
34
35
  BrowserFactory: () => BrowserFactory,
35
36
  COMPONENT: () => COMPONENT,
@@ -76,18 +77,27 @@ var kithinjiorca = (() => {
76
77
  Param: () => Param,
77
78
  Post: () => Post,
78
79
  ProviderNormalizer: () => ProviderNormalizer,
80
+ Query: () => Query,
79
81
  RouterModule: () => RouterModule,
80
82
  RouterOutlet: () => RouterOutlet,
81
83
  SIGNATURE_METADATA_KEY: () => SIGNATURE_METADATA_KEY,
84
+ SSE_ROUTE: () => SSE_ROUTE,
82
85
  Signature: () => Signature,
86
+ Sse: () => Sse,
87
+ Subject: () => Subject,
83
88
  assert$: () => assert$,
84
89
  batch: () => batch,
85
90
  browser: () => browser_exports,
91
+ catchError: () => catchError,
86
92
  collectAllProvidersFromNode: () => collectAllProvidersFromNode,
87
93
  computed: () => computed,
94
+ concatMap: () => concatMap,
88
95
  createComponent: () => createComponent,
89
96
  createRoot: () => createRoot,
97
+ debounceTime: () => debounceTime,
98
+ distinctUntilChanged: () => distinctUntilChanged,
90
99
  effect: () => effect,
100
+ filter: () => filter,
91
101
  from: () => from,
92
102
  getCurrentInjector: () => getCurrentInjector,
93
103
  getSignatureMetadata: () => getSignatureMetadata,
@@ -101,16 +111,26 @@ var kithinjiorca = (() => {
101
111
  isSignal: () => isSignal,
102
112
  jsx: () => jsx,
103
113
  jsxs: () => jsxs,
114
+ map: () => map,
115
+ mergeMap: () => mergeMap,
104
116
  observable: () => observable,
105
117
  of: () => of,
106
118
  parseSignatureSchemas: () => parseSignatureSchemas,
119
+ reduce: () => reduce,
120
+ scan: () => scan,
107
121
  setCurrentInjector: () => setCurrentInjector,
108
122
  shared: () => shared_exports,
109
123
  signal: () => signal,
124
+ skip: () => skip,
110
125
  spread: () => spread,
126
+ startWith: () => startWith,
111
127
  style: () => style,
128
+ switchMap: () => switchMap,
112
129
  symbolValueReplacer: () => symbolValueReplacer,
113
130
  symbolValueReviver: () => symbolValueReviver,
131
+ take: () => take,
132
+ tap: () => tap,
133
+ throttleTime: () => throttleTime,
114
134
  toSignal: () => toSignal,
115
135
  untracked: () => untracked
116
136
  });
@@ -121,6 +141,7 @@ var kithinjiorca = (() => {
121
141
  __export(shared_exports, {
122
142
  BOOTSTRAP: () => BOOTSTRAP,
123
143
  BOOTSTRAP_VNODE: () => BOOTSTRAP_VNODE,
144
+ BehaviorSubject: () => BehaviorSubject,
124
145
  Body: () => Body,
125
146
  COMPONENT: () => COMPONENT,
126
147
  COMPONENT_DEPS: () => COMPONENT_DEPS,
@@ -166,19 +187,28 @@ var kithinjiorca = (() => {
166
187
  Param: () => Param,
167
188
  Post: () => Post,
168
189
  ProviderNormalizer: () => ProviderNormalizer,
190
+ Query: () => Query,
169
191
  RouterModule: () => RouterModule,
170
192
  RouterOutlet: () => RouterOutlet,
171
193
  SIGNATURE_METADATA_KEY: () => SIGNATURE_METADATA_KEY,
194
+ SSE_ROUTE: () => SSE_ROUTE,
172
195
  Signature: () => Signature,
196
+ Sse: () => Sse,
173
197
  StreamRenderer: () => StreamRenderer,
174
198
  StringRenderer: () => StringRenderer,
199
+ Subject: () => Subject,
175
200
  VNode: () => VNode,
176
201
  assert$: () => assert$,
177
202
  batch: () => batch,
203
+ catchError: () => catchError,
178
204
  collectAllProvidersFromNode: () => collectAllProvidersFromNode,
179
205
  computed: () => computed,
206
+ concatMap: () => concatMap,
180
207
  createRoot: () => createRoot,
208
+ debounceTime: () => debounceTime,
209
+ distinctUntilChanged: () => distinctUntilChanged,
181
210
  effect: () => effect,
211
+ filter: () => filter,
182
212
  from: () => from,
183
213
  getCurrentInjector: () => getCurrentInjector,
184
214
  getSignatureMetadata: () => getSignatureMetadata,
@@ -191,14 +221,24 @@ var kithinjiorca = (() => {
191
221
  isSignal: () => isSignal,
192
222
  jsx: () => jsx,
193
223
  jsxs: () => jsxs,
224
+ map: () => map,
225
+ mergeMap: () => mergeMap,
194
226
  observable: () => observable,
195
227
  of: () => of,
196
228
  parseSignatureSchemas: () => parseSignatureSchemas,
229
+ reduce: () => reduce,
230
+ scan: () => scan,
197
231
  setCurrentInjector: () => setCurrentInjector,
198
232
  signal: () => signal,
233
+ skip: () => skip,
234
+ startWith: () => startWith,
199
235
  store: () => store,
236
+ switchMap: () => switchMap,
200
237
  symbolValueReplacer: () => symbolValueReplacer,
201
238
  symbolValueReviver: () => symbolValueReviver,
239
+ take: () => take,
240
+ tap: () => tap,
241
+ throttleTime: () => throttleTime,
202
242
  toSignal: () => toSignal,
203
243
  untracked: () => untracked
204
244
  });
@@ -244,6 +284,7 @@ var kithinjiorca = (() => {
244
284
  var PATH_KEY = Symbol("orca:path");
245
285
  var EXPRESS_ADAPTER_HOST = Symbol("orca:express");
246
286
  var SIGNATURE_METADATA_KEY = Symbol("orca:signature:schemas");
287
+ var SSE_ROUTE = Symbol("orca:sse:route");
247
288
  var ERROR_ELEMENT = Symbol.for("orca:error");
248
289
  var ORCA_ELEMENT_TYPE = Symbol.for("orca:element");
249
290
  var ORCA_FRAGMENT_TYPE = Symbol.for("orca:fragment");
@@ -254,6 +295,10 @@ var kithinjiorca = (() => {
254
295
  var HandlerParamType = /* @__PURE__ */ ((HandlerParamType2) => {
255
296
  HandlerParamType2["ROUTE_PARAM"] = "ROUTE_PARAM";
256
297
  HandlerParamType2["BODY"] = "BODY";
298
+ HandlerParamType2["QUERY"] = "QUERY";
299
+ HandlerParamType2["HEADERS"] = "HEADERS";
300
+ HandlerParamType2["REQUEST"] = "REQUEST";
301
+ HandlerParamType2["RESPONSE"] = "RESPONSE";
257
302
  return HandlerParamType2;
258
303
  })(HandlerParamType || {});
259
304
  var HttpMethod = /* @__PURE__ */ ((HttpMethod2) => {
@@ -329,6 +374,9 @@ var kithinjiorca = (() => {
329
374
  function Body(key) {
330
375
  return getHandlerParamDecorator("BODY" /* BODY */, key);
331
376
  }
377
+ function Query(key) {
378
+ return getHandlerParamDecorator("QUERY" /* QUERY */, key);
379
+ }
332
380
  function getRouteDecorator(httpMethod, path) {
333
381
  return function(target, key, descriptor) {
334
382
  Reflect.defineMetadata(HTTP_METHOD_KEY, httpMethod, target, key);
@@ -341,6 +389,13 @@ var kithinjiorca = (() => {
341
389
  function Post(path) {
342
390
  return getRouteDecorator("post" /* POST */, path ?? "");
343
391
  }
392
+ function Sse(path) {
393
+ return function(target, propertyKey, descriptor) {
394
+ Reflect.defineMetadata(SSE_ROUTE, true, target, propertyKey);
395
+ Reflect.defineMetadata(PATH_KEY, path, target, propertyKey);
396
+ Reflect.defineMetadata(HTTP_METHOD_KEY, "get" /* GET */, target, propertyKey);
397
+ };
398
+ }
344
399
  function Signature(...schemas) {
345
400
  return function(target, propertyKey, descriptor) {
346
401
  Reflect.defineMetadata(SIGNATURE_METADATA_KEY, schemas, target, propertyKey);
@@ -877,14 +932,14 @@ var kithinjiorca = (() => {
877
932
  return "";
878
933
  }
879
934
  escapeHtml(text) {
880
- const map = {
935
+ const map2 = {
881
936
  "&": "&",
882
937
  "<": "&lt;",
883
938
  ">": "&gt;",
884
939
  '"': "&quot;",
885
940
  "'": "&#039;"
886
941
  };
887
- return text.replace(/[&<>"']/g, (m) => map[m]);
942
+ return text.replace(/[&<>"']/g, (m) => map2[m]);
888
943
  }
889
944
  };
890
945
 
@@ -1232,10 +1287,11 @@ var kithinjiorca = (() => {
1232
1287
  let value = initialValue;
1233
1288
  const subscribers = /* @__PURE__ */ new Set();
1234
1289
  const notify = () => {
1235
- if (batchDepth > 0) {
1236
- subscribers.forEach((sub) => pendingEffects.add(sub));
1237
- } else {
1238
- subscribers.forEach((sub) => sub.execute());
1290
+ subscribers.forEach((sub) => pendingEffects.add(sub));
1291
+ if (batchDepth === 0) {
1292
+ const effects = Array.from(pendingEffects);
1293
+ pendingEffects.clear();
1294
+ effects.forEach((effect2) => effect2.execute());
1239
1295
  }
1240
1296
  };
1241
1297
  return {
@@ -1355,67 +1411,40 @@ var kithinjiorca = (() => {
1355
1411
  constructor(producer) {
1356
1412
  this.producer = producer;
1357
1413
  this.__isObservable = true;
1358
- this.subscribers = /* @__PURE__ */ new Set();
1359
- }
1360
- get $value() {
1361
- return this._value;
1362
- }
1363
- setValue(newValue) {
1364
- this._value = newValue;
1365
1414
  }
1366
1415
  subscribe(observerOrNext, error, complete) {
1367
1416
  const observer = typeof observerOrNext === "function" ? { next: observerOrNext, error, complete } : observerOrNext;
1368
- this.subscribers.add(observer);
1369
1417
  let cleanup;
1418
+ let isUnsubscribed = false;
1370
1419
  if (this.producer) {
1371
1420
  try {
1372
1421
  cleanup = this.producer(observer);
1373
1422
  } catch (err) {
1374
1423
  if (observer.error) {
1375
- observer.error(err);
1424
+ try {
1425
+ observer.error(err);
1426
+ } catch (e) {
1427
+ console.error("Error in error handler during subscription:", e);
1428
+ }
1429
+ } else {
1430
+ throw err;
1376
1431
  }
1377
1432
  }
1378
1433
  }
1379
1434
  return {
1380
1435
  unsubscribe: () => {
1381
- this.subscribers.delete(observer);
1382
- if (cleanup)
1383
- cleanup();
1384
- }
1385
- };
1386
- }
1387
- next(value) {
1388
- this.setValue(value);
1389
- this.subscribers.forEach((observer) => {
1390
- try {
1391
- observer.next(value);
1392
- } catch (err) {
1393
- console.error("Error in observer:", err);
1394
- }
1395
- });
1396
- }
1397
- error(err) {
1398
- this.subscribers.forEach((observer) => {
1399
- if (observer.error) {
1400
- try {
1401
- observer.error(err);
1402
- } catch (e) {
1403
- console.error("Error in error handler:", e);
1404
- }
1405
- }
1406
- });
1407
- }
1408
- complete() {
1409
- this.subscribers.forEach((observer) => {
1410
- if (observer.complete) {
1411
- try {
1412
- observer.complete();
1413
- } catch (err) {
1414
- console.error("Error in complete handler:", err);
1436
+ if (isUnsubscribed)
1437
+ return;
1438
+ isUnsubscribed = true;
1439
+ if (cleanup) {
1440
+ try {
1441
+ cleanup();
1442
+ } catch (err) {
1443
+ console.error("Error during cleanup:", err);
1444
+ }
1415
1445
  }
1416
1446
  }
1417
- });
1418
- this.subscribers.clear();
1447
+ };
1419
1448
  }
1420
1449
  pipe(...operations) {
1421
1450
  if (operations.length === 0) {
@@ -1426,10 +1455,14 @@ var kithinjiorca = (() => {
1426
1455
  };
1427
1456
  function from(iterable) {
1428
1457
  return new Observable((observer) => {
1429
- for (const value of iterable) {
1430
- observer.next(value);
1458
+ try {
1459
+ for (const value of iterable) {
1460
+ observer.next(value);
1461
+ }
1462
+ observer.complete?.();
1463
+ } catch (err) {
1464
+ observer.error?.(err);
1431
1465
  }
1432
- observer.complete?.();
1433
1466
  });
1434
1467
  }
1435
1468
  function interval(ms) {
@@ -1443,8 +1476,12 @@ var kithinjiorca = (() => {
1443
1476
  }
1444
1477
  function of(...values) {
1445
1478
  return new Observable((observer) => {
1446
- values.forEach((value) => observer.next(value));
1447
- observer.complete?.();
1479
+ try {
1480
+ values.forEach((value) => observer.next(value));
1481
+ observer.complete?.();
1482
+ } catch (err) {
1483
+ observer.error?.(err);
1484
+ }
1448
1485
  });
1449
1486
  }
1450
1487
  function observable(producer) {
@@ -1455,12 +1492,484 @@ var kithinjiorca = (() => {
1455
1492
  const subst = obs.subscribe((val) => {
1456
1493
  sig.value = val;
1457
1494
  });
1458
- instance.__cleanup = [...instance.__cleanup ?? [], () => subst.unsubscribe()];
1495
+ instance.__cleanup = [
1496
+ ...instance.__cleanup || [],
1497
+ () => subst.unsubscribe()
1498
+ ];
1459
1499
  return sig;
1460
1500
  }
1461
1501
  function isObservable(value) {
1462
1502
  return value && value.__isObservable === true;
1463
1503
  }
1504
+ function map(fn) {
1505
+ return (source) => {
1506
+ return new Observable((observer) => {
1507
+ const subscription = source.subscribe(
1508
+ (value) => {
1509
+ try {
1510
+ observer.next(fn(value));
1511
+ } catch (err) {
1512
+ observer.error?.(err);
1513
+ }
1514
+ },
1515
+ (err) => observer.error?.(err),
1516
+ () => observer.complete?.()
1517
+ );
1518
+ return () => subscription.unsubscribe();
1519
+ });
1520
+ };
1521
+ }
1522
+ function filter(predicate) {
1523
+ return (source) => {
1524
+ return new Observable((observer) => {
1525
+ const subscription = source.subscribe(
1526
+ (value) => {
1527
+ try {
1528
+ if (predicate(value)) {
1529
+ observer.next(value);
1530
+ }
1531
+ } catch (err) {
1532
+ observer.error?.(err);
1533
+ }
1534
+ },
1535
+ (err) => observer.error?.(err),
1536
+ () => observer.complete?.()
1537
+ );
1538
+ return () => subscription.unsubscribe();
1539
+ });
1540
+ };
1541
+ }
1542
+ function tap(fn) {
1543
+ return (source) => {
1544
+ return new Observable((observer) => {
1545
+ const subscription = source.subscribe(
1546
+ (value) => {
1547
+ try {
1548
+ fn(value);
1549
+ observer.next(value);
1550
+ } catch (err) {
1551
+ observer.error?.(err);
1552
+ }
1553
+ },
1554
+ (err) => observer.error?.(err),
1555
+ () => observer.complete?.()
1556
+ );
1557
+ return () => subscription.unsubscribe();
1558
+ });
1559
+ };
1560
+ }
1561
+ function take(count) {
1562
+ return (source) => {
1563
+ return new Observable((observer) => {
1564
+ let taken = 0;
1565
+ const subscription = source.subscribe(
1566
+ (value) => {
1567
+ if (taken < count) {
1568
+ observer.next(value);
1569
+ taken++;
1570
+ if (taken === count) {
1571
+ observer.complete?.();
1572
+ subscription.unsubscribe();
1573
+ }
1574
+ }
1575
+ },
1576
+ (err) => observer.error?.(err),
1577
+ () => observer.complete?.()
1578
+ );
1579
+ return () => subscription.unsubscribe();
1580
+ });
1581
+ };
1582
+ }
1583
+ function skip(count) {
1584
+ return (source) => {
1585
+ return new Observable((observer) => {
1586
+ let skipped = 0;
1587
+ const subscription = source.subscribe(
1588
+ (value) => {
1589
+ if (skipped < count) {
1590
+ skipped++;
1591
+ } else {
1592
+ observer.next(value);
1593
+ }
1594
+ },
1595
+ (err) => observer.error?.(err),
1596
+ () => observer.complete?.()
1597
+ );
1598
+ return () => subscription.unsubscribe();
1599
+ });
1600
+ };
1601
+ }
1602
+ function debounceTime(ms) {
1603
+ return (source) => {
1604
+ return new Observable((observer) => {
1605
+ let timeoutId;
1606
+ const subscription = source.subscribe(
1607
+ (value) => {
1608
+ clearTimeout(timeoutId);
1609
+ timeoutId = setTimeout(() => {
1610
+ observer.next(value);
1611
+ }, ms);
1612
+ },
1613
+ (err) => observer.error?.(err),
1614
+ () => observer.complete?.()
1615
+ );
1616
+ return () => {
1617
+ clearTimeout(timeoutId);
1618
+ subscription.unsubscribe();
1619
+ };
1620
+ });
1621
+ };
1622
+ }
1623
+ function throttleTime(ms) {
1624
+ return (source) => {
1625
+ return new Observable((observer) => {
1626
+ let lastEmit = 0;
1627
+ const subscription = source.subscribe(
1628
+ (value) => {
1629
+ const now = Date.now();
1630
+ if (now - lastEmit >= ms) {
1631
+ lastEmit = now;
1632
+ observer.next(value);
1633
+ }
1634
+ },
1635
+ (err) => observer.error?.(err),
1636
+ () => observer.complete?.()
1637
+ );
1638
+ return () => subscription.unsubscribe();
1639
+ });
1640
+ };
1641
+ }
1642
+ function distinctUntilChanged(compare) {
1643
+ return (source) => {
1644
+ return new Observable((observer) => {
1645
+ let hasLast = false;
1646
+ let last;
1647
+ const subscription = source.subscribe(
1648
+ (value) => {
1649
+ const isDistinct = !hasLast || (compare ? !compare(last, value) : last !== value);
1650
+ if (isDistinct) {
1651
+ hasLast = true;
1652
+ last = value;
1653
+ observer.next(value);
1654
+ }
1655
+ },
1656
+ (err) => observer.error?.(err),
1657
+ () => observer.complete?.()
1658
+ );
1659
+ return () => subscription.unsubscribe();
1660
+ });
1661
+ };
1662
+ }
1663
+ function switchMap(fn) {
1664
+ return (source) => {
1665
+ return new Observable((observer) => {
1666
+ let innerSubscription = null;
1667
+ const outerSubscription = source.subscribe(
1668
+ (value) => {
1669
+ if (innerSubscription) {
1670
+ innerSubscription.unsubscribe();
1671
+ }
1672
+ try {
1673
+ const innerObservable = fn(value);
1674
+ innerSubscription = innerObservable.subscribe(
1675
+ (innerValue) => observer.next(innerValue),
1676
+ (err) => observer.error?.(err)
1677
+ );
1678
+ } catch (err) {
1679
+ observer.error?.(err);
1680
+ }
1681
+ },
1682
+ (err) => observer.error?.(err),
1683
+ () => observer.complete?.()
1684
+ );
1685
+ return () => {
1686
+ if (innerSubscription) {
1687
+ innerSubscription.unsubscribe();
1688
+ }
1689
+ outerSubscription.unsubscribe();
1690
+ };
1691
+ });
1692
+ };
1693
+ }
1694
+ function mergeMap(fn) {
1695
+ return (source) => {
1696
+ return new Observable((observer) => {
1697
+ const innerSubscriptions = [];
1698
+ let outerComplete = false;
1699
+ let activeCount = 0;
1700
+ const checkComplete = () => {
1701
+ if (outerComplete && activeCount === 0) {
1702
+ observer.complete?.();
1703
+ }
1704
+ };
1705
+ const outerSubscription = source.subscribe(
1706
+ (value) => {
1707
+ try {
1708
+ const innerObservable = fn(value);
1709
+ activeCount++;
1710
+ const innerSub = innerObservable.subscribe(
1711
+ (innerValue) => observer.next(innerValue),
1712
+ (err) => observer.error?.(err),
1713
+ () => {
1714
+ activeCount--;
1715
+ checkComplete();
1716
+ }
1717
+ );
1718
+ innerSubscriptions.push(innerSub);
1719
+ } catch (err) {
1720
+ observer.error?.(err);
1721
+ }
1722
+ },
1723
+ (err) => observer.error?.(err),
1724
+ () => {
1725
+ outerComplete = true;
1726
+ checkComplete();
1727
+ }
1728
+ );
1729
+ return () => {
1730
+ innerSubscriptions.forEach((sub) => sub.unsubscribe());
1731
+ outerSubscription.unsubscribe();
1732
+ };
1733
+ });
1734
+ };
1735
+ }
1736
+ function concatMap(fn) {
1737
+ return (source) => {
1738
+ return new Observable((observer) => {
1739
+ const queue = [];
1740
+ let innerSubscription = null;
1741
+ let outerComplete = false;
1742
+ let isProcessing = false;
1743
+ const processNext = () => {
1744
+ if (isProcessing || queue.length === 0) {
1745
+ if (outerComplete && queue.length === 0) {
1746
+ observer.complete?.();
1747
+ }
1748
+ return;
1749
+ }
1750
+ isProcessing = true;
1751
+ const value = queue.shift();
1752
+ try {
1753
+ const innerObservable = fn(value);
1754
+ innerSubscription = innerObservable.subscribe(
1755
+ (innerValue) => observer.next(innerValue),
1756
+ (err) => observer.error?.(err),
1757
+ () => {
1758
+ isProcessing = false;
1759
+ processNext();
1760
+ }
1761
+ );
1762
+ } catch (err) {
1763
+ observer.error?.(err);
1764
+ }
1765
+ };
1766
+ const outerSubscription = source.subscribe(
1767
+ (value) => {
1768
+ queue.push(value);
1769
+ processNext();
1770
+ },
1771
+ (err) => observer.error?.(err),
1772
+ () => {
1773
+ outerComplete = true;
1774
+ if (queue.length === 0 && !isProcessing) {
1775
+ observer.complete?.();
1776
+ }
1777
+ }
1778
+ );
1779
+ return () => {
1780
+ if (innerSubscription) {
1781
+ innerSubscription.unsubscribe();
1782
+ }
1783
+ outerSubscription.unsubscribe();
1784
+ };
1785
+ });
1786
+ };
1787
+ }
1788
+ function catchError(handler) {
1789
+ return (source) => {
1790
+ return new Observable((observer) => {
1791
+ const subscription = source.subscribe(
1792
+ (value) => observer.next(value),
1793
+ (err) => {
1794
+ try {
1795
+ const fallback = handler(err);
1796
+ const fallbackSub = fallback.subscribe(
1797
+ (value) => observer.next(value),
1798
+ (e) => observer.error?.(e),
1799
+ () => observer.complete?.()
1800
+ );
1801
+ subscription.__fallback = fallbackSub;
1802
+ } catch (e) {
1803
+ observer.error?.(e);
1804
+ }
1805
+ },
1806
+ () => observer.complete?.()
1807
+ );
1808
+ return () => {
1809
+ if (subscription.__fallback) {
1810
+ subscription.__fallback.unsubscribe();
1811
+ }
1812
+ subscription.unsubscribe();
1813
+ };
1814
+ });
1815
+ };
1816
+ }
1817
+ function startWith(...values) {
1818
+ return (source) => {
1819
+ return new Observable((observer) => {
1820
+ values.forEach((value) => observer.next(value));
1821
+ const subscription = source.subscribe(
1822
+ (value) => observer.next(value),
1823
+ (err) => observer.error?.(err),
1824
+ () => observer.complete?.()
1825
+ );
1826
+ return () => subscription.unsubscribe();
1827
+ });
1828
+ };
1829
+ }
1830
+ function scan(accumulator, seed) {
1831
+ return (source) => {
1832
+ return new Observable((observer) => {
1833
+ let acc = seed;
1834
+ const subscription = source.subscribe(
1835
+ (value) => {
1836
+ try {
1837
+ acc = accumulator(acc, value);
1838
+ observer.next(acc);
1839
+ } catch (err) {
1840
+ observer.error?.(err);
1841
+ }
1842
+ },
1843
+ (err) => observer.error?.(err),
1844
+ () => observer.complete?.()
1845
+ );
1846
+ return () => subscription.unsubscribe();
1847
+ });
1848
+ };
1849
+ }
1850
+ function reduce(accumulator, seed) {
1851
+ return (source) => {
1852
+ return new Observable((observer) => {
1853
+ let acc = seed;
1854
+ const subscription = source.subscribe(
1855
+ (value) => {
1856
+ try {
1857
+ acc = accumulator(acc, value);
1858
+ } catch (err) {
1859
+ observer.error?.(err);
1860
+ }
1861
+ },
1862
+ (err) => observer.error?.(err),
1863
+ () => {
1864
+ observer.next(acc);
1865
+ observer.complete?.();
1866
+ }
1867
+ );
1868
+ return () => subscription.unsubscribe();
1869
+ });
1870
+ };
1871
+ }
1872
+
1873
+ // src/shared/observable/subject.ts
1874
+ var Subject = class extends Observable {
1875
+ constructor() {
1876
+ super();
1877
+ this.subscribers = /* @__PURE__ */ new Set();
1878
+ this._isCompleted = false;
1879
+ this._hasError = false;
1880
+ }
1881
+ subscribe(observerOrNext, error, complete) {
1882
+ if (this._isCompleted) {
1883
+ const obs = typeof observerOrNext === "function" ? { complete } : observerOrNext;
1884
+ obs.complete?.();
1885
+ return { unsubscribe: () => {
1886
+ } };
1887
+ }
1888
+ if (this._hasError) {
1889
+ return { unsubscribe: () => {
1890
+ } };
1891
+ }
1892
+ const observer = typeof observerOrNext === "function" ? { next: observerOrNext, error, complete } : observerOrNext;
1893
+ this.subscribers.add(observer);
1894
+ return {
1895
+ unsubscribe: () => {
1896
+ this.subscribers.delete(observer);
1897
+ }
1898
+ };
1899
+ }
1900
+ next(value) {
1901
+ if (this._isCompleted || this._hasError)
1902
+ return;
1903
+ const currentSubscribers = Array.from(this.subscribers);
1904
+ currentSubscribers.forEach((observer) => {
1905
+ if (this.subscribers.has(observer)) {
1906
+ try {
1907
+ observer.next(value);
1908
+ } catch (err) {
1909
+ console.error("Error in observer:", err);
1910
+ }
1911
+ }
1912
+ });
1913
+ }
1914
+ error(err) {
1915
+ if (this._isCompleted || this._hasError)
1916
+ return;
1917
+ this._hasError = true;
1918
+ const currentSubscribers = Array.from(this.subscribers);
1919
+ currentSubscribers.forEach((observer) => {
1920
+ if (observer.error) {
1921
+ try {
1922
+ observer.error(err);
1923
+ } catch (e) {
1924
+ console.error("Error in error handler:", e);
1925
+ }
1926
+ }
1927
+ });
1928
+ this.subscribers.clear();
1929
+ }
1930
+ complete() {
1931
+ if (this._isCompleted || this._hasError)
1932
+ return;
1933
+ this._isCompleted = true;
1934
+ const currentSubscribers = Array.from(this.subscribers);
1935
+ currentSubscribers.forEach((observer) => {
1936
+ if (observer.complete) {
1937
+ try {
1938
+ observer.complete();
1939
+ } catch (err) {
1940
+ console.error("Error in complete handler:", err);
1941
+ }
1942
+ }
1943
+ });
1944
+ this.subscribers.clear();
1945
+ }
1946
+ };
1947
+
1948
+ // src/shared/observable/bsubject.ts
1949
+ var BehaviorSubject = class extends Subject {
1950
+ constructor(initialValue) {
1951
+ super();
1952
+ this._value = initialValue;
1953
+ }
1954
+ get $value() {
1955
+ return this._value;
1956
+ }
1957
+ next(value) {
1958
+ this._value = value;
1959
+ super.next(value);
1960
+ }
1961
+ subscribe(observerOrNext, error, complete) {
1962
+ const observer = typeof observerOrNext === "function" ? { next: observerOrNext, error, complete } : observerOrNext;
1963
+ try {
1964
+ observer.next(this._value);
1965
+ } catch (err) {
1966
+ if (observer.error) {
1967
+ observer.error(err);
1968
+ }
1969
+ }
1970
+ return super.subscribe(observer);
1971
+ }
1972
+ };
1464
1973
 
1465
1974
  // src/shared/component.ts
1466
1975
  var OrcaComponent = class {
@@ -1508,7 +2017,6 @@ var kithinjiorca = (() => {
1508
2017
  window.addEventListener("popstate", (e) => {
1509
2018
  const newIndex = e.state?.cursor ?? 0;
1510
2019
  this.cursor = newIndex;
1511
- this.pages.next([...this.pages.$value || []]);
1512
2020
  });
1513
2021
  }
1514
2022
  getHome() {
@@ -1519,18 +2027,20 @@ var kithinjiorca = (() => {
1519
2027
  });
1520
2028
  }
1521
2029
  push(component) {
1522
- const currentPages = this.pages.$value || [];
2030
+ const currentPages = (
2031
+ /*this.pages.$value ||*/
2032
+ []
2033
+ );
1523
2034
  const newPages = currentPages.slice(0, this.cursor + 1);
1524
2035
  this.cursor++;
1525
2036
  newPages.push(component);
1526
2037
  history.pushState({ cursor: this.cursor }, "");
1527
- this.pages.next(newPages);
1528
2038
  }
1529
2039
  replace(component) {
1530
- const currentPages = [...this.pages.$value || []];
2040
+ const currentPages = [.../*this.pages.$value ||*/
2041
+ []];
1531
2042
  currentPages[this.cursor] = component;
1532
2043
  history.replaceState({ cursor: this.cursor }, "");
1533
- this.pages.next(currentPages);
1534
2044
  }
1535
2045
  goBack() {
1536
2046
  if (this.cursor > 0) {
@@ -1538,7 +2048,10 @@ var kithinjiorca = (() => {
1538
2048
  }
1539
2049
  }
1540
2050
  goForward() {
1541
- const currentPages = this.pages.$value || [];
2051
+ const currentPages = (
2052
+ /*this.pages.$value ||*/
2053
+ []
2054
+ );
1542
2055
  if (this.cursor < currentPages.length - 1) {
1543
2056
  history.forward();
1544
2057
  }
@@ -1547,16 +2060,21 @@ var kithinjiorca = (() => {
1547
2060
  return this.cursor > 0;
1548
2061
  }
1549
2062
  canGoForward() {
1550
- const currentPages = this.pages.$value || [];
2063
+ const currentPages = (
2064
+ /*this.pages.$value ||*/
2065
+ []
2066
+ );
1551
2067
  return this.cursor < currentPages.length - 1;
1552
2068
  }
1553
2069
  getCurrentPage() {
1554
- const currentPages = this.pages.$value || [];
2070
+ const currentPages = (
2071
+ /*this.pages.$value ||*/
2072
+ []
2073
+ );
1555
2074
  return currentPages[this.cursor];
1556
2075
  }
1557
2076
  clear() {
1558
2077
  this.cursor = 0;
1559
- this.pages.next([]);
1560
2078
  history.replaceState({ cursor: 0 }, "");
1561
2079
  }
1562
2080
  };
@@ -1603,7 +2121,6 @@ var kithinjiorca = (() => {
1603
2121
  }
1604
2122
  }, () => {
1605
2123
  }, () => {
1606
- this.navigate.pages.setValue([osc.tree.dom]);
1607
2124
  });
1608
2125
  const subscription = this.navigate.pages.subscribe((pages) => {
1609
2126
  const top = pages[this.navigate.cursor];
@@ -2165,12 +2682,6 @@ var kithinjiorca = (() => {
2165
2682
  attach(value.value);
2166
2683
  });
2167
2684
  registerEffect(parent, cleanup);
2168
- } else if (isObservable(value)) {
2169
- const obs = value;
2170
- const subst = obs.subscribe((val) => {
2171
- attach(val);
2172
- });
2173
- registerEffect(parent, () => subst.unsubscribe());
2174
2685
  } else if (typeof value == "function") {
2175
2686
  const cleanup = effect(() => {
2176
2687
  attach(value());