From 635114f4fa6335b2a2a55a46bd10ca62a0c0ec7c Mon Sep 17 00:00:00 2001 From: tekhit Date: Fri, 21 Dec 2018 19:03:08 -0600 Subject: [PATCH 1/3] refactor: Export core-database typedefs --- .circleci/config.yml | 24 ++++++------ .../__tests__/__fixtures__/dummy-class.ts | 11 +++++- packages/core-database/package.json | 3 +- packages/core-database/src/index.ts | 38 +++---------------- packages/core-database/src/interface.ts | 38 ++++++++----------- packages/core-database/src/manager.ts | 8 ++-- packages/core-database/src/plugin.ts | 15 ++++++++ 7 files changed, 64 insertions(+), 73 deletions(-) create mode 100644 packages/core-database/src/plugin.ts diff --git a/.circleci/config.yml b/.circleci/config.yml index 64c4bcaed7..5ab0d714ee 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -73,8 +73,8 @@ jobs: name: core-logger-winston command: 'cd ~/ark-core/packages/core-logger-winston && yarn test:coverage' - run: - name: core-graphql - command: 'cd ~/ark-core/packages/core-graphql && yarn test:coverage' + name: core-api + command: 'cd ~/ark-core/packages/core-api && yarn test:coverage' - run: name: core-debugger-cli command: 'cd ~/ark-core/packages/core-debugger-cli && yarn test:coverage' @@ -82,8 +82,8 @@ jobs: name: core-container command: 'cd ~/ark-core/packages/core-container && yarn test:coverage' - run: - name: core - command: 'cd ~/ark-core/packages/core && yarn test:coverage' + name: core-graphql + command: 'cd ~/ark-core/packages/core-graphql && yarn test:coverage' - run: name: Last 1000 lines of test output when: on_fail @@ -164,8 +164,8 @@ jobs: name: core-logger-winston command: 'cd ~/ark-core/packages/core-logger-winston && yarn test:coverage' - run: - name: core-graphql - command: 'cd ~/ark-core/packages/core-graphql && yarn test:coverage' + name: core-api + command: 'cd ~/ark-core/packages/core-api && yarn test:coverage' - run: name: core-debugger-cli command: 'cd ~/ark-core/packages/core-debugger-cli && yarn test:coverage' @@ -173,8 +173,8 @@ jobs: name: core-container command: 'cd ~/ark-core/packages/core-container && yarn test:coverage' - run: - name: core - command: 'cd ~/ark-core/packages/core && yarn test:coverage' + name: core-graphql + command: 'cd ~/ark-core/packages/core-graphql && yarn test:coverage' - run: name: Last 1000 lines of test output when: on_fail @@ -343,8 +343,8 @@ jobs: name: core-database command: 'cd ~/ark-core/packages/core-database && yarn test:coverage' - run: - name: core-api - command: 'cd ~/ark-core/packages/core-api && yarn test:coverage' + name: core + command: 'cd ~/ark-core/packages/core && yarn test:coverage' - run: name: Last 1000 lines of test output when: on_fail @@ -601,8 +601,8 @@ jobs: name: core-database command: 'cd ~/ark-core/packages/core-database && yarn test:coverage' - run: - name: core-api - command: 'cd ~/ark-core/packages/core-api && yarn test:coverage' + name: core + command: 'cd ~/ark-core/packages/core && yarn test:coverage' - run: name: Last 1000 lines of test output when: on_fail diff --git a/packages/core-database/__tests__/__fixtures__/dummy-class.ts b/packages/core-database/__tests__/__fixtures__/dummy-class.ts index 271e500e21..442384ecc1 100644 --- a/packages/core-database/__tests__/__fixtures__/dummy-class.ts +++ b/packages/core-database/__tests__/__fixtures__/dummy-class.ts @@ -1,8 +1,13 @@ // tslint:disable:no-empty -import { ConnectionInterface } from "../../src/interface"; +import { ConnectionInterface } from "../../src"; export class DummyConnection extends ConnectionInterface { + + constructor(options: any) { + super(options); + } + public async connect(): Promise {} public async disconnect(): Promise {} @@ -60,4 +65,8 @@ export class DummyConnection extends ConnectionInterface { public async getTransaction(id): Promise { return true; } + + public async make(): Promise { + return this; + } } diff --git a/packages/core-database/package.json b/packages/core-database/package.json index 93566f7855..0c5800e49c 100644 --- a/packages/core-database/package.json +++ b/packages/core-database/package.json @@ -8,7 +8,8 @@ "Brian Faust " ], "license": "MIT", - "main": "dist/index.js", + "main": "dist/index", + "types": "dist/index", "files": [ "dist" ], diff --git a/packages/core-database/src/index.ts b/packages/core-database/src/index.ts index 6220e04f13..9f89918c3e 100644 --- a/packages/core-database/src/index.ts +++ b/packages/core-database/src/index.ts @@ -1,33 +1,5 @@ -import { Container } from "@arkecosystem/core-container"; -import { AbstractLogger } from "@arkecosystem/core-logger"; -import { defaults } from "./defaults"; -import { DatabaseManager } from "./manager"; - -/** - * The interface used by concrete implementations. - * @type {ConnectionInterface} - */ -import { ConnectionInterface } from "./interface"; - -/** - * The Wallet Manager. - * @type {WalletManager} - */ -import { WalletManager } from "./wallet-manager"; - -/** - * The struct used by the plugin container. - * @type {Object} - */ -export const plugin = { - pkg: require("../package.json"), - defaults, - alias: "databaseManager", - async register(container: Container, options) { - container.resolvePlugin("logger").info("Starting Database Manager"); - - return new DatabaseManager(); - }, -}; - -export { ConnectionInterface, WalletManager }; +export * from "./manager"; +export * from "./interface"; +export * from "./wallet-manager"; +export * from "./repositories/delegates"; +export * from "./repositories/wallets"; diff --git a/packages/core-database/src/interface.ts b/packages/core-database/src/interface.ts index 20e154b8e2..847c3e4380 100644 --- a/packages/core-database/src/interface.ts +++ b/packages/core-database/src/interface.ts @@ -14,41 +14,33 @@ const { Block } = models; const { TransactionTypes } = constants; export abstract class ConnectionInterface { - public config: any; - public logger: AbstractLogger; - public emitter: any; - - public connection: any; - public blocksInCurrentRound: any[]; - public stateStarted: boolean; - public restoredDatabaseIntegrity: boolean; - public walletManager: WalletManager; - public forgingDelegates: any[]; - public wallets: WalletsRepository; - public delegates: DelegatesRepository; - protected queuedQueries: any[]; + protected config: any; + protected logger: AbstractLogger; + protected emitter: any; + protected connection: any = null; + protected blocksInCurrentRound: any[] = null; + protected stateStarted: boolean = false; + protected restoredDatabaseIntegrity: boolean = false; + protected walletManager: WalletManager = null; + protected forgingDelegates: any[] = null; + protected wallets: WalletsRepository = null; + protected delegates: DelegatesRepository = null; + protected queuedQueries: any[] = null; /** * @constructor * @param {Object} options */ - public constructor(public readonly options) { + protected constructor(public readonly options: any) { this.config = app.getConfig(); this.logger = app.resolvePlugin("logger"); this.emitter = app.resolvePlugin("event-emitter"); - this.connection = null; - this.blocksInCurrentRound = null; - this.stateStarted = false; - this.restoredDatabaseIntegrity = false; - this.walletManager = null; - this.wallets = null; - this.delegates = null; - this.queuedQueries = null; - this.__registerListeners(); } + public abstract async make(): Promise; + /** * Get the current connection. * @return {ConnectionInterface} diff --git a/packages/core-database/src/manager.ts b/packages/core-database/src/manager.ts index b8fdde7f4d..8e9eb70e4e 100644 --- a/packages/core-database/src/manager.ts +++ b/packages/core-database/src/manager.ts @@ -1,5 +1,7 @@ +import { ConnectionInterface } from "./interface"; + export class DatabaseManager { - public connections: { [key: string]: any }; + public connections: { [key: string]: ConnectionInterface }; /** * Create a new database manager instance. @@ -14,7 +16,7 @@ export class DatabaseManager { * @param {String} name * @return {ConnectionInterface} */ - public connection(name = "default") { + public connection(name = "default"): ConnectionInterface { return this.connections[name]; } @@ -24,7 +26,7 @@ export class DatabaseManager { * @param {String} name * @return {void} */ - public async makeConnection(connection, name = "default") { + public async makeConnection(connection: ConnectionInterface, name = "default") { this.connections[name] = await connection.make(); } } diff --git a/packages/core-database/src/plugin.ts b/packages/core-database/src/plugin.ts new file mode 100644 index 0000000000..aa0c40d5ed --- /dev/null +++ b/packages/core-database/src/plugin.ts @@ -0,0 +1,15 @@ +import { Container } from "@arkecosystem/core-container"; +import { AbstractLogger } from "@arkecosystem/core-logger"; +import { defaults } from "./defaults"; +import { DatabaseManager } from "./manager"; + +export const plugin = { + pkg: require("../package.json"), + defaults, + alias: "databaseManager", + async register(container: Container, options) { + container.resolvePlugin("logger").info("Starting Database Manager"); + + return new DatabaseManager(); + }, +}; From 9f849c3a358ebebd526b3e47ca5720148774994d Mon Sep 17 00:00:00 2001 From: tekhit Date: Fri, 21 Dec 2018 19:56:34 -0600 Subject: [PATCH 2/3] refactor: Use core-database typdefs in core-database-postgres --- .../core-database-postgres/src/connection.ts | 8 ++++-- packages/core-database-postgres/src/index.ts | 3 ++- packages/core-database-postgres/src/spv.ts | 16 +++++------- packages/core-database/src/interface.ts | 25 ++++++++++--------- 4 files changed, 27 insertions(+), 25 deletions(-) diff --git a/packages/core-database-postgres/src/connection.ts b/packages/core-database-postgres/src/connection.ts index 6af5a7140e..c0ce238ecf 100644 --- a/packages/core-database-postgres/src/connection.ts +++ b/packages/core-database-postgres/src/connection.ts @@ -22,13 +22,17 @@ import { camelizeColumns } from "./utils"; const { Block, Transaction } = models; export class PostgresConnection extends ConnectionInterface { + public models: {}; + public query: QueryExecutor; private db: any; private cache: Map; - private models: {}; - private query: QueryExecutor; private pgp: any; private spvFinished: boolean; + public constructor(readonly options: any) { + super(options); + } + /** * Make the database connection instance. * @return {PostgresConnection} diff --git a/packages/core-database-postgres/src/index.ts b/packages/core-database-postgres/src/index.ts index 44c2e9493f..310560b92e 100644 --- a/packages/core-database-postgres/src/index.ts +++ b/packages/core-database-postgres/src/index.ts @@ -1,4 +1,5 @@ import { Container } from "@arkecosystem/core-container"; +import { DatabaseManager } from "@arkecosystem/core-database"; import { AbstractLogger } from "@arkecosystem/core-logger"; import { PostgresConnection } from "./connection"; import { defaults } from "./defaults"; @@ -18,7 +19,7 @@ export const plugin = { const postgres = new PostgresConnection(options); - const databaseManager = container.resolvePlugin("databaseManager"); + const databaseManager = container.resolvePlugin("databaseManager"); await databaseManager.makeConnection(postgres); return databaseManager.connection(); diff --git a/packages/core-database-postgres/src/spv.ts b/packages/core-database-postgres/src/spv.ts index bcaacb6cc1..8294e129bd 100644 --- a/packages/core-database-postgres/src/spv.ts +++ b/packages/core-database-postgres/src/spv.ts @@ -3,6 +3,7 @@ const { Transaction } = models; import { app } from "@arkecosystem/core-container"; import { AbstractLogger } from "@arkecosystem/core-logger"; +import {PostgresConnection} from "./connection"; import { queries } from "./queries"; const logger = app.resolvePlugin("logger"); @@ -17,16 +18,11 @@ export class SPV { private query: any; private activeDelegates: []; - /** - * Create a new wallet builder instance. - * @param {SequelizeConnection} database - * @return {void} - */ - constructor(database) { - this.connection = database.connection; - this.models = database.models; - this.walletManager = database.walletManager; - this.query = database.query; + constructor(connectionInterface : PostgresConnection) { + this.connection = connectionInterface.connection; + this.models = connectionInterface.models; + this.walletManager = connectionInterface.walletManager; + this.query = connectionInterface.query; } /** diff --git a/packages/core-database/src/interface.ts b/packages/core-database/src/interface.ts index 847c3e4380..07d313415f 100644 --- a/packages/core-database/src/interface.ts +++ b/packages/core-database/src/interface.ts @@ -14,18 +14,19 @@ const { Block } = models; const { TransactionTypes } = constants; export abstract class ConnectionInterface { - protected config: any; - protected logger: AbstractLogger; - protected emitter: any; - protected connection: any = null; - protected blocksInCurrentRound: any[] = null; - protected stateStarted: boolean = false; - protected restoredDatabaseIntegrity: boolean = false; - protected walletManager: WalletManager = null; - protected forgingDelegates: any[] = null; - protected wallets: WalletsRepository = null; - protected delegates: DelegatesRepository = null; - protected queuedQueries: any[] = null; + // TODO: Convert these to protected/private and provide the appropriate get/setters + public config: any; + public logger: AbstractLogger; + public emitter: any; + public connection: any = null; + public blocksInCurrentRound: any[] = null; + public stateStarted: boolean = false; + public restoredDatabaseIntegrity: boolean = false; + public walletManager: WalletManager = null; + public forgingDelegates: any[] = null; + public wallets: WalletsRepository = null; + public delegates: DelegatesRepository = null; + public queuedQueries: any[] = null; /** * @constructor From e5658c8e7ccfca52d8a5d5a3571cfe6f4c73ca09 Mon Sep 17 00:00:00 2001 From: tekhit Date: Sat, 22 Dec 2018 17:19:49 -0600 Subject: [PATCH 3/3] fix: failing tests --- packages/core-database/src/index.ts | 1 + 1 file changed, 1 insertion(+) diff --git a/packages/core-database/src/index.ts b/packages/core-database/src/index.ts index 9f89918c3e..cdce672996 100644 --- a/packages/core-database/src/index.ts +++ b/packages/core-database/src/index.ts @@ -3,3 +3,4 @@ export * from "./interface"; export * from "./wallet-manager"; export * from "./repositories/delegates"; export * from "./repositories/wallets"; +export * from "./plugin";