@forgecharts/sdk 1.5.54 → 1.5.56

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.
@@ -1 +1 @@
1
- {"version":3,"file":"TimeScale.d.ts","sourceRoot":"","sources":["../../src/core/TimeScale.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,WAAW,EAAE,gBAAgB,EAAE,SAAS,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AAC9G,OAAO,EAAY,YAAY,EAAyB,MAAM,oBAAoB,CAAC;AAEnF,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAIjD;;;;;;;;GAQG;AACH,qBAAa,SAAS;IACpB,OAAO,CAAC,aAAa,CAAY;IACjC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAc;IACrC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAc;IACtC,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAA6B;IACtD,OAAO,CAAC,gBAAgB,CAAmB;IAC3C,mEAAmE;IACnE,QAAQ,EAAE,MAAM,GAAG,SAAS,CAAa;IACzC,uFAAuF;IACvF,gBAAgB,EAAE,MAAM,GAAG,IAAI,CAAQ;IACvC,0FAA0F;IAC1F,gBAAgB,EAAE,cAAc,EAAE,CAAM;IACxC,yEAAyE;IACzE,gBAAgB,SAAM;IAGtB,4EAA4E;IAC5E,OAAO,CAAC,SAAS,CAAgB;IACjC;kFAC8E;IAC9E,OAAO,CAAC,YAAY,CAAK;gBAEb,KAAK,EAAE,WAAW,EAAE,MAAM,EAAE,WAAW,EAAE,OAAO,GAAE,gBAAqB;IAenF,IAAI,YAAY,IAAI,SAAS,CAE5B;IAED,IAAI,MAAM,IAAI,MAAM,CAEnB;IAED,IAAI,eAAe,IAAI,SAAS,CAE/B;IAED,qFAAqF;IACrF,IAAI,QAAQ,IAAI,SAAS,MAAM,EAAE,CAEhC;IAED,eAAe,CAAC,KAAK,EAAE,SAAS,GAAG,IAAI;IAIvC,YAAY,CAAC,EAAE,EAAE,SAAS,GAAG,IAAI;IAIjC;;;OAGG;IACH,gBAAgB,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,IAAI;IAkBvC;;;;OAIG;IACH,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM;IA4BjC;;;;OAIG;IACH,WAAW,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM;IAiBhC,sEAAsE;IACtE,IAAI,YAAY,IAAI,OAAO,CAE1B;IAID;;;;OAIG;IACH,OAAO,CAAC,IAAI,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,GAAG,MAAM;IAYlD;;;OAGG;IACH,OAAO,CAAC,CAAC,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,GAAG,MAAM;IAY/C;;;OAGG;IACH,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,WAAW,GAAE,MAA0B,GAAG,IAAI;IA0BnF;;OAEG;IACH,MAAM,CAAC,YAAY,EAAE,MAAM,GAAG,IAAI;IAOlC;;;OAGG;IACH,aAAa,CAAC,UAAU,EAAE,MAAM,GAAG,IAAI;IASvC,MAAM,CAAC,GAAG,EAAE,wBAAwB,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,IAAI;IA8K1E;;;OAGG;IACH,qBAAqB,CAAC,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,GAAG,MAAM;IAoBhG,OAAO,CAAC,gBAAgB;IAIxB,OAAO,CAAC,aAAa;CAsBtB;AAGD,OAAO,EAAE,YAAY,EAAE,CAAC"}
1
+ {"version":3,"file":"TimeScale.d.ts","sourceRoot":"","sources":["../../src/core/TimeScale.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,WAAW,EAAE,gBAAgB,EAAE,SAAS,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AAC9G,OAAO,EAAY,YAAY,EAAyB,MAAM,oBAAoB,CAAC;AAEnF,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAIjD;;;;;;;;GAQG;AACH,qBAAa,SAAS;IACpB,OAAO,CAAC,aAAa,CAAY;IACjC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAc;IACrC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAc;IACtC,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAA6B;IACtD,OAAO,CAAC,gBAAgB,CAAmB;IAC3C,mEAAmE;IACnE,QAAQ,EAAE,MAAM,GAAG,SAAS,CAAa;IACzC,uFAAuF;IACvF,gBAAgB,EAAE,MAAM,GAAG,IAAI,CAAQ;IACvC,0FAA0F;IAC1F,gBAAgB,EAAE,cAAc,EAAE,CAAM;IACxC,yEAAyE;IACzE,gBAAgB,SAAM;IAGtB,4EAA4E;IAC5E,OAAO,CAAC,SAAS,CAAgB;IACjC;kFAC8E;IAC9E,OAAO,CAAC,YAAY,CAAK;gBAEb,KAAK,EAAE,WAAW,EAAE,MAAM,EAAE,WAAW,EAAE,OAAO,GAAE,gBAAqB;IAenF,IAAI,YAAY,IAAI,SAAS,CAE5B;IAED,IAAI,MAAM,IAAI,MAAM,CAEnB;IAED,IAAI,eAAe,IAAI,SAAS,CAE/B;IAED,qFAAqF;IACrF,IAAI,QAAQ,IAAI,SAAS,MAAM,EAAE,CAEhC;IAED,eAAe,CAAC,KAAK,EAAE,SAAS,GAAG,IAAI;IAIvC,YAAY,CAAC,EAAE,EAAE,SAAS,GAAG,IAAI;IAIjC;;;OAGG;IACH,gBAAgB,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,IAAI;IAkBvC;;;;OAIG;IACH,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM;IA4BjC;;;;OAIG;IACH,WAAW,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM;IAiBhC,sEAAsE;IACtE,IAAI,YAAY,IAAI,OAAO,CAE1B;IAID;;;;OAIG;IACH,OAAO,CAAC,IAAI,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,GAAG,MAAM;IAYlD;;;OAGG;IACH,OAAO,CAAC,CAAC,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,GAAG,MAAM;IAY/C;;;OAGG;IACH,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,WAAW,GAAE,MAA0B,GAAG,IAAI;IA0BnF;;OAEG;IACH,MAAM,CAAC,YAAY,EAAE,MAAM,GAAG,IAAI;IAOlC;;;OAGG;IACH,aAAa,CAAC,UAAU,EAAE,MAAM,GAAG,IAAI;IASvC,MAAM,CAAC,GAAG,EAAE,wBAAwB,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,IAAI;IAuM1E;;;OAGG;IACH,qBAAqB,CAAC,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,GAAG,MAAM;IAoBhG,OAAO,CAAC,gBAAgB;IAIxB,OAAO,CAAC,aAAa;CAsBtB;AAGD,OAAO,EAAE,YAAY,EAAE,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"DatafeedConnector.d.ts","sourceRoot":"","sources":["../../src/datafeed/DatafeedConnector.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,KAAK,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AACtE,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,kBAAkB,CAAC;AA0DhD;;;GAGG;AACH,MAAM,MAAM,kBAAkB,GAAG;IAC/B,SAAS,CAAC,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,SAAS,GAAG,IAAI,CAAC;IACrD,QAAQ,CAAC,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,SAAS,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IACnE,OAAO,CAAC,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,SAAS,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IAClE,4EAA4E;IAC5E,QAAQ,CAAC,EAAE,CAAC,GAAG,EAAE,KAAK,KAAK,IAAI,CAAC;IAChC,iFAAiF;IACjF,eAAe,CAAC,EAAE,CAAC,UAAU,EAAE,MAAM,KAAK,IAAI,CAAC;CAChD,CAAC;AAIF;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AACH,qBAAa,iBAAiB;IAC5B,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAY;IACtC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAU;IAClC,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAqB;IACzC,wFAAwF;IACxF,OAAO,CAAC,QAAQ,CAAC,cAAc,CAA0B;IAEzD;;;OAGG;IACH,OAAO,CAAC,UAAU,CAAuB;IACzC,OAAO,CAAC,aAAa,CAA6B;IAClD,OAAO,CAAC,UAAU,CAAS;IAE3B,oEAAoE;IACpE,OAAO,CAAC,cAAc,CAAS;IAC/B,6FAA6F;IAC7F,OAAO,CAAC,cAAc,CAAS;IAC/B,gFAAgF;IAChF,OAAO,CAAC,eAAe,CAAK;IAC5B;;;;OAIG;IACH,OAAO,CAAC,eAAe,CAAuB;IAC9C;;;OAGG;IACH,OAAO,CAAC,gBAAgB,CAAa;IAErC;;;;OAIG;IACH,OAAO,CAAC,iBAAiB,CAA8C;gBAE3D,QAAQ,EAAE,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,SAAS,EAAE,kBAAkB;IAQ/E;;;;OAIG;IACH,OAAO,CAAC,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,SAAS,GAAG,IAAI;IA2KnD;;;;OAIG;IACH,UAAU,IAAI,IAAI;IAIlB;;;OAGG;IACH,SAAS,CAAC,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,SAAS,GAAG,IAAI;IAKrD;;;;OAIG;IACH,OAAO,IAAI,IAAI;IAOf;;;;;;;;;;;OAWG;IACH,eAAe,CAAC,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,SAAS,GAAG,IAAI;IA0G3D,OAAO,CAAC,gBAAgB;IAOxB,OAAO,CAAC,aAAa;CAoBtB"}
1
+ {"version":3,"file":"DatafeedConnector.d.ts","sourceRoot":"","sources":["../../src/datafeed/DatafeedConnector.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,KAAK,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AACtE,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,kBAAkB,CAAC;AAwFhD;;;GAGG;AACH,MAAM,MAAM,kBAAkB,GAAG;IAC/B,SAAS,CAAC,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,SAAS,GAAG,IAAI,CAAC;IACrD,QAAQ,CAAC,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,SAAS,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IACnE,OAAO,CAAC,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,SAAS,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IAClE,4EAA4E;IAC5E,QAAQ,CAAC,EAAE,CAAC,GAAG,EAAE,KAAK,KAAK,IAAI,CAAC;IAChC,iFAAiF;IACjF,eAAe,CAAC,EAAE,CAAC,UAAU,EAAE,MAAM,KAAK,IAAI,CAAC;CAChD,CAAC;AAIF;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AACH,qBAAa,iBAAiB;IAC5B,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAY;IACtC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAU;IAClC,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAqB;IACzC,wFAAwF;IACxF,OAAO,CAAC,QAAQ,CAAC,cAAc,CAA0B;IAEzD;;;OAGG;IACH,OAAO,CAAC,UAAU,CAAuB;IACzC,OAAO,CAAC,aAAa,CAA6B;IAClD,OAAO,CAAC,UAAU,CAAS;IAE3B,oEAAoE;IACpE,OAAO,CAAC,cAAc,CAAS;IAC/B,6FAA6F;IAC7F,OAAO,CAAC,cAAc,CAAS;IAC/B,gFAAgF;IAChF,OAAO,CAAC,eAAe,CAAK;IAC5B;;;;OAIG;IACH,OAAO,CAAC,eAAe,CAAuB;IAC9C;;;OAGG;IACH,OAAO,CAAC,gBAAgB,CAAa;IAErC;;;;OAIG;IACH,OAAO,CAAC,iBAAiB,CAA8C;gBAE3D,QAAQ,EAAE,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,SAAS,EAAE,kBAAkB;IAQ/E;;;;OAIG;IACH,OAAO,CAAC,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,SAAS,GAAG,IAAI;IAuNnD;;;;OAIG;IACH,UAAU,IAAI,IAAI;IAIlB;;;OAGG;IACH,SAAS,CAAC,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,SAAS,GAAG,IAAI;IAKrD;;;;OAIG;IACH,OAAO,IAAI,IAAI;IAOf;;;;;;;;;;;OAWG;IACH,eAAe,CAAC,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,SAAS,GAAG,IAAI;IA0G3D,OAAO,CAAC,gBAAgB;IAOxB,OAAO,CAAC,aAAa;CAoBtB"}
package/dist/index.js CHANGED
@@ -483,9 +483,17 @@ var TimeScale = class {
483
483
  const toIdx = this.timeToIndex(this._visibleRange.to);
484
484
  const idxSpan = toIdx - fromIdx;
485
485
  const idxStep = Math.max(1, Math.round(idxSpan / approxTicks));
486
- const span = this._visibleRange.to - this._visibleRange.from;
487
- const step = this._niceTimeStep(span / approxTicks);
488
486
  const startIdx = Math.ceil(fromIdx / idxStep) * idxStep;
487
+ const _tickDeltas = [];
488
+ for (let i = Math.max(0, startIdx); i + idxStep <= Math.min(toIdx, this._barTimes.length - 1); i += idxStep) {
489
+ const a = this._barTimes[Math.round(i)];
490
+ const b = this._barTimes[Math.round(i + idxStep)];
491
+ if (a != null && b != null && b > a) _tickDeltas.push(b - a);
492
+ if (_tickDeltas.length >= 12) break;
493
+ }
494
+ _tickDeltas.sort((p, q) => p - q);
495
+ const _perTick = _tickDeltas.length > 0 ? _tickDeltas[Math.floor(_tickDeltas.length / 2)] : (this._visibleRange.to - this._visibleRange.from) / approxTicks;
496
+ const step = this._niceTimeStep(_perTick);
489
497
  for (let i = startIdx; i <= toIdx; i += idxStep) {
490
498
  const bIdx = Math.round(i);
491
499
  if (bIdx < 0) continue;
@@ -5785,8 +5793,16 @@ var PixiGridRenderer = class {
5785
5793
  const idxStep = Math.max(1, Math.round(rawIdxStep));
5786
5794
  const barTimes = this._timeScale.barTimes;
5787
5795
  const startIdx = Math.ceil(fromIdx / idxStep) * idxStep;
5788
- const span = timeTo - timeFrom;
5789
- const step = this._niceTimeStep(span / approxTicks);
5796
+ const _tickDeltas = [];
5797
+ for (let i = Math.max(0, startIdx); i + idxStep <= Math.min(toIdx, barTimes.length - 1); i += idxStep) {
5798
+ const a = barTimes[Math.round(i)];
5799
+ const b = barTimes[Math.round(i + idxStep)];
5800
+ if (a != null && b != null && b > a) _tickDeltas.push(b - a);
5801
+ if (_tickDeltas.length >= 12) break;
5802
+ }
5803
+ _tickDeltas.sort((p, q) => p - q);
5804
+ const _perTick = _tickDeltas.length > 0 ? _tickDeltas[Math.floor(_tickDeltas.length / 2)] : (timeTo - timeFrom) / approxTicks;
5805
+ const step = this._niceTimeStep(_perTick);
5790
5806
  for (let i = startIdx; i <= toIdx; i += idxStep) {
5791
5807
  const bIdx = Math.round(i);
5792
5808
  if (bIdx < 0) continue;
@@ -10344,6 +10360,13 @@ function _historyWindow(tf) {
10344
10360
  return 500 * (parseTfSeconds(tf) ?? 3600);
10345
10361
  }
10346
10362
  var BATCH_SUPPRESSION_MS = 1e4;
10363
+ function tfSeconds(tf) {
10364
+ const m = /^(\d+)\s*(s|m|h|D|W|M)$/.exec(tf);
10365
+ if (!m) return 0;
10366
+ const mult = { s: 1, m: 60, h: 3600, D: 86400, W: 604800, M: 2592e3 }[m[2]];
10367
+ return parseInt(m[1], 10) * mult;
10368
+ }
10369
+ var LIVE_GAP_REPAIR_DELAY_MS = 3e3;
10347
10370
  function _pageSize(tf) {
10348
10371
  return 500 * (parseTfSeconds(tf) ?? 3600);
10349
10372
  }
@@ -10471,15 +10494,36 @@ var DatafeedConnector = class {
10471
10494
  this._batchSafetyTimer = null;
10472
10495
  }, BATCH_SUPPRESSION_MS);
10473
10496
  }
10497
+ const tfSec = tfSeconds(timeframe);
10498
+ let lastSeenBarTime = lastBarTime ?? 0;
10499
+ let repairTimer = null;
10500
+ const repairGap = (fromTime, toTime) => {
10501
+ if (repairTimer) clearTimeout(repairTimer);
10502
+ repairTimer = setTimeout(() => {
10503
+ repairTimer = null;
10504
+ if (this._activeUID !== uid || this._destroyed) return;
10505
+ void this._datafeed.getHistoricalBars(symbol, timeframe, fromTime, toTime).then(({ bars: filled }) => {
10506
+ if (this._activeUID !== uid || filled.length === 0) return;
10507
+ engine.backfillGap(filled);
10508
+ }).catch(() => {
10509
+ });
10510
+ }, LIVE_GAP_REPAIR_DELAY_MS);
10511
+ };
10474
10512
  this._datafeed.subscribeBars(symbol, timeframe, (bar) => {
10475
- if (this._activeUID === uid) {
10476
- engine.applyLiveUpdate(bar);
10513
+ if (this._activeUID !== uid) return;
10514
+ const t = bar.time;
10515
+ if (tfSec > 0 && lastSeenBarTime > 0 && t > lastSeenBarTime + tfSec) {
10516
+ repairGap(lastSeenBarTime, t);
10477
10517
  }
10518
+ if (t > lastSeenBarTime) lastSeenBarTime = t;
10519
+ engine.applyLiveUpdate(bar);
10478
10520
  }, uid, lastBarTime, (bars) => {
10479
10521
  this._clearBatchTimer();
10480
10522
  batchPending = false;
10481
10523
  if (this._activeUID === uid) {
10482
10524
  engine.backfillGap(bars);
10525
+ const newest = bars.length > 0 ? bars[bars.length - 1].time : 0;
10526
+ if (newest > lastSeenBarTime) lastSeenBarTime = newest;
10483
10527
  }
10484
10528
  fireLoaded();
10485
10529
  });
@@ -25516,7 +25560,7 @@ var demonstrationTool = {
25516
25560
  };
25517
25561
 
25518
25562
  // src/version.ts
25519
- var FORGECHARTS_VERSION = "1.5.54" ;
25563
+ var FORGECHARTS_VERSION = "1.5.56" ;
25520
25564
 
25521
25565
  // src/compatibility.ts
25522
25566
  var MIN_KIT_API = 1;