🌲 Timber - JS lib tools
New to Timber? Here's a low-down on logging in Javascript.
@timberio/tools
This library provides helper tools used by the Javascript logger.
Tools
Queue<T>
Generic FIFO queue. Used by makeThrottle
to store pipeline functions to be executed as concurrent 'slots' become available. Provides fast retrieval for any primitive or object that needs ordered, first-in, first-out retrieval.
Used to store .log()
Promises that are being batched/throttled.
Usage example
import { Queue } from "@timberio/tools";
interface IPerson {
name: string;
age: number;
}
const q = new Queue<IPerson>();
q.push({ name: "Jeff", age: 50 });
q.push({ name: "Sally", age: 39 });
while (q.length) {
console.log(q.shift().name);
}
makeThrottle<T>(max: number)
Returns a throttle
higher-order function, which wraps an async
function, and limits the number of active Promises to max: number
The throttle
function has this signature:
throttle(fn: T): (...args: InferArgs<T>[]) => Promise<InferArgs<T>>
Usage example
import Timber from "@timberio/logger";
import { makeThrottle } from "@timberio/tools";
const timber = new Timber("apiKey");
const throttle = makeThrottle(2);
const pipeline = async log =>
new Promise(resolve => {
setTimeout(() => resolve(log), 2000);
});
timber.addPipeline(throttle(pipeline));
const promises = [];
for (let i = 0; i < 10; i++) {
promises.push(timber.log({ message: `Hello ${i}` }));
}
void (async () => {
void (await promises);
})();
makeBatch(size: number, flushTimeout: number)
Creates a higher-order batch function aggregates Timber logs and resolves when either size
# of logs have been collected, or when flushTimeout
(in ms) has elapsed -- whichever occurs first.
This is used alongside the throttler to provide an array of ITimberLog
to the function set in the .setSync()
method, to be synced with Timber.io
Used internally by the @timberio/core Base class
to implicitly batch logs:
const throttle = makeThrottle(this._options.syncMax);
const throttler = throttle((logs: any) => {
return this._sync!(logs);
});
const batcher = makeBatch(this._options.batchSize, this._options.batchInterval);
this._batch = batcher((logs: any) => {
return throttler(logs);
});
LICENSE
ISC