Repository URL to install this package:
|
Version:
0.7.0 ▾
|
// (c) Copyright 2023 Supertenant Ltd. - all rights reserved.
// See LICENSE file in project root for license terms.
"use strict";const EventEmitter=require("events");class DataSource extends EventEmitter{constructor(refreshDelay){super(),this.refreshDelay=null==refreshDelay?1e3:refreshDelay,this.refreshTimeoutHandle=null,this.reset(),this.active=!1}activate(){this.refreshTimeoutHandle||this._refresh(),this.active=!0}deactivate(){this.active=!1,this.refreshTimeoutHandle&&clearTimeout(this.refreshTimeoutHandle),this.refreshTimeoutHandle=null}_refresh(){this.doRefresh((err,data)=>{err?6e4<this.refreshDelay&&(clearTimeout(this.refreshTimeoutHandle),this.refreshTimeoutHandle=setTimeout(()=>this._refresh(),6e4),this.refreshTimeoutHandle.unref()):(this.rawData=data,null==this.refreshTimestamp?(this.refreshTimestamp=Date.now(),this.emit("firstRefresh",this.rawData)):this.refreshTimestamp=Date.now())}),clearTimeout(this.refreshTimeoutHandle),this.refreshTimeoutHandle=setTimeout(()=>this._refresh(),this.refreshDelay),this.refreshTimeoutHandle.unref()}doRefresh(){throw new Error("DataSource needs to override doRefresh.")}getRawData(){return this.rawData}reset(){this.rawData={},this.refreshTimestamp=null}hasRefreshedAtLeastOnce(){return null!=this.refreshTimestamp}getLastRefreshTimestamp(){return this.refreshTimestamp}}module.exports=exports=DataSource;