1
0
mirror of https://github.com/Unleash/unleash.git synced 2025-02-19 00:15:43 +01:00

fix: convert event-store to typescript (#768)

This commit is contained in:
Ivar Conradi Østhus 2021-03-23 08:46:01 +01:00 committed by GitHub
parent 9bd23dc735
commit 7e7554c0ae
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
4 changed files with 78 additions and 36 deletions

View File

@ -1,15 +1,22 @@
const test = require('ava'); import test from 'ava';
const EventStore = require('./event-store'); import knex from 'knex';
const getLogger = require('../../test/fixtures/no-logger'); 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 => { 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(); const events = await store.getEvents();
t.is(events.length, 0); t.is(events.length, 0);
}); });
test('Trying to get events by name if db fails should yield empty list', async t => { 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'); const events = await store.getEventsFilterByName('application-created');
t.truthy(events); t.truthy(events);
t.is(events.length, 0); t.is(events.length, 0);

View File

@ -1,7 +1,7 @@
'use strict'; import { EventEmitter } from 'events';
import Knex from 'knex';
const { EventEmitter } = require('events'); import { DROP_FEATURES } from '../event-type';
const { DROP_FEATURES } = require('../event-type'); import { LogProvider, Logger } from '../logger';
const EVENT_COLUMNS = [ const EVENT_COLUMNS = [
'id', 'id',
@ -12,16 +12,41 @@ const EVENT_COLUMNS = [
'tags', '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'; const TABLE = 'events';
class EventStore extends EventEmitter { class EventStore extends EventEmitter {
constructor(db, getLogger) { private db: Knex;
private logger: Logger;
constructor(db: Knex, getLogger: LogProvider) {
super(); super();
this.db = db; this.db = db;
this.logger = getLogger('lib/db/event-store.js'); this.logger = getLogger('lib/db/event-store.js');
} }
async store(event) { async store(event: ICreateEvent): Promise<void> {
try { try {
const rows = await this.db(TABLE) const rows = await this.db(TABLE)
.insert(this.eventToDbRow(event)) .insert(this.eventToDbRow(event))
@ -33,7 +58,7 @@ class EventStore extends EventEmitter {
} }
} }
async batchStore(events) { async batchStore(events: ICreateEvent[]): Promise<void> {
try { try {
const savedRows = await this.db(TABLE) const savedRows = await this.db(TABLE)
.insert(events.map(this.eventToDbRow)) .insert(events.map(this.eventToDbRow))
@ -47,7 +72,7 @@ class EventStore extends EventEmitter {
} }
} }
async getEvents() { async getEvents(): Promise<IEvent[]> {
try { try {
const rows = await this.db const rows = await this.db
.select(EVENT_COLUMNS) .select(EVENT_COLUMNS)
@ -61,7 +86,7 @@ class EventStore extends EventEmitter {
} }
} }
async getEventsFilterByName(name) { async getEventsFilterByName(name: string): Promise<IEvent[]> {
try { try {
const rows = await this.db const rows = await this.db
.select(EVENT_COLUMNS) .select(EVENT_COLUMNS)
@ -83,7 +108,7 @@ class EventStore extends EventEmitter {
} }
} }
rowToEvent(row) { rowToEvent(row: IEventTable): IEvent {
return { return {
id: row.id, id: row.id,
type: row.type, type: row.type,
@ -94,7 +119,7 @@ class EventStore extends EventEmitter {
}; };
} }
eventToDbRow(e) { eventToDbRow(e: ICreateEvent): any {
return { return {
type: e.type, type: e.type,
created_by: e.createdBy, created_by: e.createdBy,
@ -105,3 +130,4 @@ class EventStore extends EventEmitter {
} }
module.exports = EventStore; module.exports = EventStore;
export default EventStore;

View File

@ -1,18 +1,26 @@
'use strict'; import { configure, getLogger, levels } from 'log4js';
const log4js = require('log4js'); export type LogProvider = (category?: string) => Logger;
function getDefaultLogProvider() { export interface Logger {
let level; debug(message: any, ...args: any[]): void;
if (process.env.NODE_ENV === 'production') { info(message: any, ...args: any[]): void;
level = log4js.levels.ERROR.levelStr; warn(message: any, ...args: any[]): void;
} else if (process.env.NODE_ENV === 'test') { error(message: any, ...args: any[]): void;
level = log4js.levels.FATAL.levelStr; fatal(message: any, ...args: any[]): void;
} else {
level = log4js.levels.DEBUG.levelStr;
} }
log4js.configure({ function getDefaultLogProvider(): LogProvider {
let level: string;
if (process.env.NODE_ENV === 'production') {
level = levels.ERROR.levelStr;
} else if (process.env.NODE_ENV === 'test') {
level = levels.FATAL.levelStr;
} else {
level = levels.DEBUG.levelStr;
}
configure({
appenders: { appenders: {
console: { type: 'console' }, console: { type: 'console' },
}, },
@ -21,20 +29,16 @@ function getDefaultLogProvider() {
}, },
}); });
return log4js.getLogger; return getLogger;
} }
let loggerProvider = getDefaultLogProvider(); function validate(isValid: boolean, msg: string) {
function validate(isValid, msg) {
if (!isValid) { if (!isValid) {
throw new TypeError(msg); throw new TypeError(msg);
} }
} }
module.exports.defaultLogProvider = loggerProvider; export function validateLogProvider(provider: LogProvider): void {
function validateLogProvider(provider) {
validate(typeof provider === 'function', 'Provider needs to be a function'); validate(typeof provider === 'function', 'Provider needs to be a function');
const logger = provider('unleash:logger'); const logger = provider('unleash:logger');
@ -44,14 +48,15 @@ function validateLogProvider(provider) {
validate(typeof logger.error === 'function', 'Logger must implement error'); 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 export function setLoggerProvider(provider: LogProvider): void {
exports.setLoggerProvider = function setLoggerProvider(provider) {
validateLogProvider(provider); validateLogProvider(provider);
loggerProvider = provider; loggerProvider = provider;
const logger = provider('unleash:logger'); const logger = provider('unleash:logger');
logger.info(`Your way of configuring a logProvider is deprecated. logger.info(`Your way of configuring a logProvider is deprecated.
See https://docs.getunleash.io/docs/deploy/configuring_unleash for details`); See https://docs.getunleash.io/docs/deploy/configuring_unleash for details`);
}; }

View File

@ -1,14 +1,17 @@
/* eslint-disable no-console */ /* eslint-disable no-console */
import { Logger } from '../../lib/logger';
let muteError = false; let muteError = false;
function noLoggerProvider() { function noLoggerProvider(): Logger {
// do something with the name // do something with the name
return { return {
debug: () => {}, debug: () => {},
info: () => {}, info: () => {},
warn: () => {}, warn: () => {},
error: muteError ? () => {} : console.error, error: muteError ? () => {} : console.error,
fatal: console.error,
}; };
} }
@ -17,3 +20,4 @@ noLoggerProvider.setMuteError = mute => {
}; };
module.exports = noLoggerProvider; module.exports = noLoggerProvider;
export default noLoggerProvider;