mirror of
https://github.com/Unleash/unleash.git
synced 2025-02-14 00:19:16 +01:00
fix: convert event-store to typescript (#768)
This commit is contained in:
parent
9bd23dc735
commit
7e7554c0ae
@ -1,15 +1,22 @@
|
||||
const test = require('ava');
|
||||
const EventStore = require('./event-store');
|
||||
const getLogger = require('../../test/fixtures/no-logger');
|
||||
import test from 'ava';
|
||||
import knex from 'knex';
|
||||
import EventStore from './event-store';
|
||||
import getLogger from '../../test/fixtures/no-logger';
|
||||
|
||||
test('Trying to get events if db fails should yield empty list', async t => {
|
||||
const store = new EventStore({}, getLogger);
|
||||
const db = knex({
|
||||
client: 'pg',
|
||||
});
|
||||
const store = new EventStore(db, getLogger);
|
||||
const events = await store.getEvents();
|
||||
t.is(events.length, 0);
|
||||
});
|
||||
|
||||
test('Trying to get events by name if db fails should yield empty list', async t => {
|
||||
const store = new EventStore({}, getLogger);
|
||||
const db = knex({
|
||||
client: 'pg',
|
||||
});
|
||||
const store = new EventStore(db, getLogger);
|
||||
const events = await store.getEventsFilterByName('application-created');
|
||||
t.truthy(events);
|
||||
t.is(events.length, 0);
|
@ -1,7 +1,7 @@
|
||||
'use strict';
|
||||
|
||||
const { EventEmitter } = require('events');
|
||||
const { DROP_FEATURES } = require('../event-type');
|
||||
import { EventEmitter } from 'events';
|
||||
import Knex from 'knex';
|
||||
import { DROP_FEATURES } from '../event-type';
|
||||
import { LogProvider, Logger } from '../logger';
|
||||
|
||||
const EVENT_COLUMNS = [
|
||||
'id',
|
||||
@ -12,16 +12,41 @@ const EVENT_COLUMNS = [
|
||||
'tags',
|
||||
];
|
||||
|
||||
interface IEventTable {
|
||||
id: number;
|
||||
type: string;
|
||||
created_by: string;
|
||||
created_at: Date;
|
||||
data: any;
|
||||
tags: [];
|
||||
}
|
||||
|
||||
interface ICreateEvent {
|
||||
type: string;
|
||||
createdBy: string;
|
||||
data?: any;
|
||||
tags?: Array<string>;
|
||||
}
|
||||
|
||||
interface IEvent extends ICreateEvent {
|
||||
id: number;
|
||||
createdAt: Date;
|
||||
}
|
||||
|
||||
const TABLE = 'events';
|
||||
|
||||
class EventStore extends EventEmitter {
|
||||
constructor(db, getLogger) {
|
||||
private db: Knex;
|
||||
|
||||
private logger: Logger;
|
||||
|
||||
constructor(db: Knex, getLogger: LogProvider) {
|
||||
super();
|
||||
this.db = db;
|
||||
this.logger = getLogger('lib/db/event-store.js');
|
||||
}
|
||||
|
||||
async store(event) {
|
||||
async store(event: ICreateEvent): Promise<void> {
|
||||
try {
|
||||
const rows = await this.db(TABLE)
|
||||
.insert(this.eventToDbRow(event))
|
||||
@ -33,7 +58,7 @@ class EventStore extends EventEmitter {
|
||||
}
|
||||
}
|
||||
|
||||
async batchStore(events) {
|
||||
async batchStore(events: ICreateEvent[]): Promise<void> {
|
||||
try {
|
||||
const savedRows = await this.db(TABLE)
|
||||
.insert(events.map(this.eventToDbRow))
|
||||
@ -47,7 +72,7 @@ class EventStore extends EventEmitter {
|
||||
}
|
||||
}
|
||||
|
||||
async getEvents() {
|
||||
async getEvents(): Promise<IEvent[]> {
|
||||
try {
|
||||
const rows = await this.db
|
||||
.select(EVENT_COLUMNS)
|
||||
@ -61,7 +86,7 @@ class EventStore extends EventEmitter {
|
||||
}
|
||||
}
|
||||
|
||||
async getEventsFilterByName(name) {
|
||||
async getEventsFilterByName(name: string): Promise<IEvent[]> {
|
||||
try {
|
||||
const rows = await this.db
|
||||
.select(EVENT_COLUMNS)
|
||||
@ -83,7 +108,7 @@ class EventStore extends EventEmitter {
|
||||
}
|
||||
}
|
||||
|
||||
rowToEvent(row) {
|
||||
rowToEvent(row: IEventTable): IEvent {
|
||||
return {
|
||||
id: row.id,
|
||||
type: row.type,
|
||||
@ -94,7 +119,7 @@ class EventStore extends EventEmitter {
|
||||
};
|
||||
}
|
||||
|
||||
eventToDbRow(e) {
|
||||
eventToDbRow(e: ICreateEvent): any {
|
||||
return {
|
||||
type: e.type,
|
||||
created_by: e.createdBy,
|
||||
@ -105,3 +130,4 @@ class EventStore extends EventEmitter {
|
||||
}
|
||||
|
||||
module.exports = EventStore;
|
||||
export default EventStore;
|
@ -1,18 +1,26 @@
|
||||
'use strict';
|
||||
import { configure, getLogger, levels } from 'log4js';
|
||||
|
||||
const log4js = require('log4js');
|
||||
export type LogProvider = (category?: string) => Logger;
|
||||
|
||||
function getDefaultLogProvider() {
|
||||
let level;
|
||||
export interface Logger {
|
||||
debug(message: any, ...args: any[]): void;
|
||||
info(message: any, ...args: any[]): void;
|
||||
warn(message: any, ...args: any[]): void;
|
||||
error(message: any, ...args: any[]): void;
|
||||
fatal(message: any, ...args: any[]): void;
|
||||
}
|
||||
|
||||
function getDefaultLogProvider(): LogProvider {
|
||||
let level: string;
|
||||
if (process.env.NODE_ENV === 'production') {
|
||||
level = log4js.levels.ERROR.levelStr;
|
||||
level = levels.ERROR.levelStr;
|
||||
} else if (process.env.NODE_ENV === 'test') {
|
||||
level = log4js.levels.FATAL.levelStr;
|
||||
level = levels.FATAL.levelStr;
|
||||
} else {
|
||||
level = log4js.levels.DEBUG.levelStr;
|
||||
level = levels.DEBUG.levelStr;
|
||||
}
|
||||
|
||||
log4js.configure({
|
||||
configure({
|
||||
appenders: {
|
||||
console: { type: 'console' },
|
||||
},
|
||||
@ -21,20 +29,16 @@ function getDefaultLogProvider() {
|
||||
},
|
||||
});
|
||||
|
||||
return log4js.getLogger;
|
||||
return getLogger;
|
||||
}
|
||||
|
||||
let loggerProvider = getDefaultLogProvider();
|
||||
|
||||
function validate(isValid, msg) {
|
||||
function validate(isValid: boolean, msg: string) {
|
||||
if (!isValid) {
|
||||
throw new TypeError(msg);
|
||||
}
|
||||
}
|
||||
|
||||
module.exports.defaultLogProvider = loggerProvider;
|
||||
|
||||
function validateLogProvider(provider) {
|
||||
export function validateLogProvider(provider: LogProvider): void {
|
||||
validate(typeof provider === 'function', 'Provider needs to be a function');
|
||||
|
||||
const logger = provider('unleash:logger');
|
||||
@ -44,14 +48,15 @@ function validateLogProvider(provider) {
|
||||
validate(typeof logger.error === 'function', 'Logger must implement error');
|
||||
}
|
||||
|
||||
exports.validateLogProvider = validateLogProvider;
|
||||
// Deprecated (TODO: remove this in v4)
|
||||
let loggerProvider = getDefaultLogProvider();
|
||||
export const defaultLogProvider = loggerProvider;
|
||||
|
||||
// Deprecated
|
||||
exports.setLoggerProvider = function setLoggerProvider(provider) {
|
||||
export function setLoggerProvider(provider: LogProvider): void {
|
||||
validateLogProvider(provider);
|
||||
|
||||
loggerProvider = provider;
|
||||
const logger = provider('unleash:logger');
|
||||
logger.info(`Your way of configuring a logProvider is deprecated.
|
||||
See https://docs.getunleash.io/docs/deploy/configuring_unleash for details`);
|
||||
};
|
||||
}
|
@ -1,14 +1,17 @@
|
||||
/* eslint-disable no-console */
|
||||
|
||||
import { Logger } from '../../lib/logger';
|
||||
|
||||
let muteError = false;
|
||||
|
||||
function noLoggerProvider() {
|
||||
function noLoggerProvider(): Logger {
|
||||
// do something with the name
|
||||
return {
|
||||
debug: () => {},
|
||||
info: () => {},
|
||||
warn: () => {},
|
||||
error: muteError ? () => {} : console.error,
|
||||
fatal: console.error,
|
||||
};
|
||||
}
|
||||
|
||||
@ -17,3 +20,4 @@ noLoggerProvider.setMuteError = mute => {
|
||||
};
|
||||
|
||||
module.exports = noLoggerProvider;
|
||||
export default noLoggerProvider;
|
Loading…
Reference in New Issue
Block a user