1.0.1 • Published 5 years ago
king-crimson
A library that provides classes for managing sequential data.
Installation
npm install king-crimson
Usage
The following two management classes are provided.
DateTimeDataManager
: Manage data with datetime information.IntervalDataManager
: Manages data with interval information.
DateTimeDataManager
import { DateTimeDataManager } from "king-crimson";
import { DateTime, Duration, Interval } from "luxon";
import queryString from "query-string";
// Event data to manage
interface MyEventData {
timestamp: number;
event: string;
}
// Create an async function to call API
const fetchData = async (since: number, until: number, signal: AbortSignal) => {
const query = queryString.stringify({ since, until });
const url = `https://example.com/api/data?${query}`;
const res = await fetch(uri, { signal });
const data = await res.json();
return data;
};
// Create instance
const ddm = new DateTimeDataManager<MyEventData>({
fetchFn(period: Interval) {
const controller = new AbortController();
const signal = controller.signal;
const since = period.start.toMillis();
const until = period.end.toMillis();
return {
promise: fetchData(since, until, signal),
cancel() {
controller.abort();
}
};
},
itemKey(item: MyEventData) {
return item.timestamp;
}
});
// Execute fetch
const datetime = DateTime.local();
ddm.fetch(datetime);
// Cancel fetch
ddm.cansel();
// Search data
const interval = datetime.before(Duration.fromObject({ hour: 1 }));
const data = ddm.searchBetween(interval);
Config
Property | Type | Description |
---|
fetchFn | (period: Interval) => { promise: Promise<T[]>, cancel: () => void } | Methods that request data and methods that cancel requests. |
itemKey | (item: T) => any | Key value of AVL tree. |
Options
Property | Type | Default | Description |
---|
fetchDuration | Duration | Duration.fromObject({ hour: 24 }) | Duration for making data requests in batch. |
requestDurationLimit | Duration | Duration.fromObject({ minute: 180 }) | Duration limit for one data request. |
updateInterceptor | ((payload: { items: T[], period: Interval }) => { items: T[], period: Interval }) | null | null | Interceptor that transforms the payload before handling the update event. |
IntervalDataManager
import { IntervalDataManager } from "king-crimson";
import { DateTime, Duration, Interval } from "luxon";
import queryString from "query-string";
// Event data to manage
interface MyEventData {
timestamp: number;
duration: number;
event: string;
}
// Create an async function to call API
const fetchData = async (since: number, until: number, signal: AbortSignal) => {
const query = queryString.stringify({ since, until });
const url = `https://example.com/api/data?${query}`;
const res = await fetch(uri, { signal });
const data = await res.json();
return data;
};
// Create instance
const idm = new IntervalDataManager<MyEventData>({
fetchFn(period: Interval) {
const controller = new AbortController();
const signal = controller.signal;
const since = period.start.toMillis();
const until = period.end.toMillis();
return {
promise: fetchData(since, until, signal),
cancel() {
controller.abort();
}
};
},
itemKey(item: MyEventData) {
return item.timestamp;
},
itemTimestamp(item: MyEventData) {
return item.timestamp;
},
itemDuration(item: MyEventData) {
return item.duration;
}
});
// Execute fetch
const datetime = DateTime.local();
idm.fetch(datetime);
// Cancel fetch
idm.cansel();
// Search data
const interval = datetime.before(Duration.fromObject({ hour: 1 }));
let data = idm.searchBetween(interval);
// Search for data that includes a specified datetime
data = searchOn(datetime);
Config
Property | Type | Description |
---|
fetchFn | (period: Interval) => { promise: Promise<T[]>, cancel: () => void } | Methods that request data and methods that cancel requests. |
itemKey | (item: T) => any | Key value of AVL tree. |
itemTimestamp | (item: T) => number | Method that returns the timestamp of data in Unixtime in milliseconds. |
itemDuration | (item: T) => number | Method that returns duration of data in milliseconds. |
Options
Property | Type | Default | Description |
---|
fetchDuration | Duration | Duration.fromObject({ hour: 24 }) | Duration for making data requests in batch. |
requestDurationLimit | Duration | Duration.fromObject({ minute: 180 }) | Duration limit for one data request. |
updateInterceptor | ((payload: { items: T[], period: Interval }) => { items: T[], period: Interval }) | null | null | Interceptor that transforms the payload before handling the update event. |
Event
Both classes emit the following events:
Event | Payload | Description |
---|
update | { items: T[], period: Interval } | When each data fetch is completed, the acquired data and the acquisition period are notified. |