@timescaledb/typeorm
Version:
This is the official TimescaleDB plugin for TypeORM.
53 lines • 2.13 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.getCandlesticks = getCandlesticks;
const core_1 = require("@timescaledb/core");
const Hypertable_1 = require("../decorators/Hypertable");
const TimeColumn_1 = require("../decorators/TimeColumn");
const debug_1 = require("../debug");
const debug = (0, debug_1.debugTypeOrm)('getCandlesticks');
async function getCandlesticks(options) {
const target = this.target;
debug(`Getting candlesticks for ${target.name}`);
const hypertableOptions = Reflect.getMetadata(Hypertable_1.HYPERTABLE_METADATA_KEY, target);
if (!hypertableOptions?.by_range?.column_name) {
const error = 'Entity is not a hypertable';
debug(error);
throw new Error('Entity is not a hypertable');
}
const timeColumnMetadata = Reflect.getMetadata(TimeColumn_1.TIME_COLUMN_METADATA_KEY, target);
if (!timeColumnMetadata) {
const error = 'Entity must have a column decorated with @TimeColumn';
debug(error);
throw new Error('Entity must have a column decorated with @TimeColumn');
}
const candlestick = core_1.TimescaleDB.createCandlestickAggregate(this.metadata.tableName, {
...options.config,
time_column: timeColumnMetadata.columnName,
});
const { sql, params } = candlestick.build({
range: options.timeRange,
where: options.where,
});
const results = await this.query(sql, params);
const result = results.map((row) => ({
bucket_time: new Date(row.bucket_time),
open: Number(row.open),
high: Number(row.high),
low: Number(row.low),
close: Number(row.close),
open_time: new Date(row.open_time),
high_time: new Date(row.high_time),
low_time: new Date(row.low_time),
close_time: new Date(row.close_time),
...(row.volume
? {
volume: Number(row.volume),
vwap: Number(row.vwap),
}
: {}),
}));
debug('Candlesticks retrieved');
return result;
}
//# sourceMappingURL=get-candlesticks.js.map