🔨 Infer typings for config schema (#2656)

* 🚚 Move schema to standalone file

*  Add assertions to string literal arrays

*  Infer typings for convict schema

* 🔥 Remove unneeded assertions

* 🔨 Fix errors surfaced by typings

*  Type nodes.include/exclude per docs

*  Account for types for exception paths

*  Set method alias to flag incorrect paths

*  Replace original with alias

*  Make allowance for nodes.include

*  Adjust leftover calls

* 🔀 Fix conflicts

* 🔥 Remove unneeded castings

* 📘 Simplify exception path type

* 📦 Update package-lock.json

* 🔥 Remove unneeded imports

* 🔥 Remove unrelated file

*  Update schema

*  Update interface

* 📦 Update package-lock.json

* 📦 Update package-lock.json

* 🔥 Remove leftover assertions

Co-authored-by: Jan Oberhauser <jan.oberhauser@gmail.com>
This commit is contained in:
Iván Ovejero
2022-04-08 19:37:27 +02:00
committed by GitHub
parent 23f0501f4c
commit 37a6e329af
82 changed files with 1393 additions and 1256 deletions

View File

@@ -81,7 +81,7 @@ test('POST /owner should create owner and enable isInstanceOwnerSetUp', async ()
expect(storedOwner.firstName).toBe(newOwnerData.firstName);
expect(storedOwner.lastName).toBe(newOwnerData.lastName);
const isInstanceOwnerSetUpConfig = config.get('userManagement.isInstanceOwnerSetUp');
const isInstanceOwnerSetUpConfig = config.getEnv('userManagement.isInstanceOwnerSetUp');
expect(isInstanceOwnerSetUpConfig).toBe(true);
const isInstanceOwnerSetUpSetting = await utils.isInstanceOwnerSetUp();
@@ -108,7 +108,7 @@ test('POST /owner/skip-setup should persist skipping setup to the DB', async ()
expect(response.statusCode).toBe(200);
const skipConfig = config.get('userManagement.skipInstanceOwnerSetup');
const skipConfig = config.getEnv('userManagement.skipInstanceOwnerSetup');
expect(skipConfig).toBe(true);
const { value } = await Db.collections.Settings!.findOneOrFail({

View File

@@ -1,13 +1,13 @@
import config = require('../../../config');
export const REST_PATH_SEGMENT = config.get('endpoints.rest') as Readonly<string>;
export const REST_PATH_SEGMENT = config.getEnv('endpoints.rest') as Readonly<string>;
export const AUTHLESS_ENDPOINTS: Readonly<string[]> = [
'healthz',
'metrics',
config.get('endpoints.webhook') as string,
config.get('endpoints.webhookWaiting') as string,
config.get('endpoints.webhookTest') as string,
config.getEnv('endpoints.webhook'),
config.getEnv('endpoints.webhookWaiting'),
config.getEnv('endpoints.webhookTest'),
];
export const SUCCESS_RESPONSE_BODY = {

View File

@@ -22,7 +22,7 @@ import type { CollectionName, CredentialPayload } from './types';
* Initialize one test DB per suite run, with bootstrap connection if needed.
*/
export async function init() {
const dbType = config.get('database.type') as DatabaseType;
const dbType = config.getEnv('database.type');
if (dbType === 'sqlite') {
// no bootstrap connection required
@@ -73,7 +73,7 @@ export async function init() {
* Drop test DB, closing bootstrap connection if existing.
*/
export async function terminate(testDbName: string) {
const dbType = config.get('database.type') as DatabaseType;
const dbType = config.getEnv('database.type');
if (dbType === 'sqlite') {
await getConnection(testDbName).close();
@@ -103,7 +103,7 @@ export async function terminate(testDbName: string) {
* @param testDbName Name of the test DB to truncate tables in.
*/
export async function truncate(collections: CollectionName[], testDbName: string) {
const dbType = config.get('database.type');
const dbType = config.getEnv('database.type');
const testDb = getConnection(testDbName);
@@ -295,11 +295,11 @@ export const getSqliteOptions = ({ name }: { name: string }): ConnectionOptions
* to create and drop test Postgres databases.
*/
export const getBootstrapPostgresOptions = () => {
const username = config.get('database.postgresdb.user');
const password = config.get('database.postgresdb.password');
const host = config.get('database.postgresdb.host');
const port = config.get('database.postgresdb.port');
const schema = config.get('database.postgresdb.schema');
const username = config.getEnv('database.postgresdb.user');
const password = config.getEnv('database.postgresdb.password');
const host = config.getEnv('database.postgresdb.host');
const port = config.getEnv('database.postgresdb.port');
const schema = config.getEnv('database.postgresdb.schema');
return {
name: BOOTSTRAP_POSTGRES_CONNECTION_NAME,
@@ -314,11 +314,11 @@ export const getBootstrapPostgresOptions = () => {
};
export const getPostgresOptions = ({ name }: { name: string }): ConnectionOptions => {
const username = config.get('database.postgresdb.user');
const password = config.get('database.postgresdb.password');
const host = config.get('database.postgresdb.host');
const port = config.get('database.postgresdb.port');
const schema = config.get('database.postgresdb.schema');
const username = config.getEnv('database.postgresdb.user');
const password = config.getEnv('database.postgresdb.password');
const host = config.getEnv('database.postgresdb.host');
const port = config.getEnv('database.postgresdb.port');
const schema = config.getEnv('database.postgresdb.schema');
return {
name,
@@ -345,10 +345,10 @@ export const getPostgresOptions = ({ name }: { name: string }): ConnectionOption
* to create and drop test MySQL databases.
*/
export const getBootstrapMySqlOptions = (): ConnectionOptions => {
const username = config.get('database.mysqldb.user');
const password = config.get('database.mysqldb.password');
const host = config.get('database.mysqldb.host');
const port = config.get('database.mysqldb.port');
const username = config.getEnv('database.mysqldb.user');
const password = config.getEnv('database.mysqldb.password');
const host = config.getEnv('database.mysqldb.host');
const port = config.getEnv('database.mysqldb.port');
return {
name: BOOTSTRAP_MYSQL_CONNECTION_NAME,
@@ -366,10 +366,10 @@ export const getBootstrapMySqlOptions = (): ConnectionOptions => {
* one per test suite run.
*/
export const getMySqlOptions = ({ name }: { name: string }): ConnectionOptions => {
const username = config.get('database.mysqldb.user');
const password = config.get('database.mysqldb.password');
const host = config.get('database.mysqldb.host');
const port = config.get('database.mysqldb.port');
const username = config.getEnv('database.mysqldb.user');
const password = config.getEnv('database.mysqldb.password');
const host = config.getEnv('database.mysqldb.host');
const port = config.getEnv('database.mysqldb.port');
return {
name,

View File

@@ -3,16 +3,15 @@ import { promisify } from 'util';
import config = require('../config');
import { BOOTSTRAP_MYSQL_CONNECTION_NAME } from './integration/shared/constants';
import { DatabaseType } from '../src';
const exec = promisify(callbackExec);
const dbType = config.get('database.type') as DatabaseType;
const dbType = config.getEnv('database.type');
if (dbType === 'mysqldb') {
const username = config.get('database.mysqldb.user');
const password = config.get('database.mysqldb.password');
const host = config.get('database.mysqldb.host');
const username = config.getEnv('database.mysqldb.user');
const password = config.getEnv('database.mysqldb.password');
const host = config.getEnv('database.mysqldb.host');
const passwordSegment = password ? `-p${password}` : '';

View File

@@ -1,12 +1,11 @@
import { createConnection } from 'typeorm';
import config = require('../config');
import { exec } from 'child_process';
import { DatabaseType } from '../src';
import { getBootstrapMySqlOptions, getBootstrapPostgresOptions } from './integration/shared/testDb';
import { BOOTSTRAP_MYSQL_CONNECTION_NAME } from './integration/shared/constants';
export default async () => {
const dbType = config.get('database.type') as DatabaseType;
const dbType = config.getEnv('database.type');
if (dbType === 'postgresdb') {
const bootstrapPostgres = await createConnection(getBootstrapPostgresOptions());
@@ -25,9 +24,9 @@ export default async () => {
}
if (dbType === 'mysqldb') {
const user = config.get('database.mysqldb.user');
const password = config.get('database.mysqldb.password');
const host = config.get('database.mysqldb.host');
const user = config.getEnv('database.mysqldb.user');
const password = config.getEnv('database.mysqldb.password');
const host = config.getEnv('database.mysqldb.host');
const bootstrapMySql = await createConnection(getBootstrapMySqlOptions());