import fs from 'fs-extra'; import path from 'path'; import toml from 'toml'; import debug from 'debug'; import { DataSource, DeepPartial, EntityTarget, ObjectLiteral } from 'typeorm'; const log = debug('snowball:utils'); export const getConfig = async ( configFile: string ): Promise => { const configFilePath = path.resolve(configFile); const fileExists = await fs.pathExists(configFilePath); if (!fileExists) { throw new Error(`Config file not found: ${configFilePath}`); } const config = toml.parse(await fs.readFile(configFilePath, 'utf8')); log('config', JSON.stringify(config, null, 2)); return config; }; export const checkFileExists = async (filePath: string): Promise => { try { await fs.access(filePath, fs.constants.F_OK); return true; } catch (err) { log(err); return false; } }; export const getEntities = async (filePath: string): Promise => { const entitiesData = await fs.readFile(filePath, 'utf-8'); const entities = JSON.parse(entitiesData); return entities; }; export const loadAndSaveData = async ( entityType: EntityTarget, dataSource: DataSource, entities: any, relations?: any | undefined ): Promise => { const entityRepository = dataSource.getRepository(entityType); const savedEntity: Entity[] = []; for (const entityData of entities) { let entity = entityRepository.create(entityData as DeepPartial); if (relations) { for (const field in relations) { const valueIndex = String(field + 'Index'); entity = { ...entity, [field]: relations[field][entityData[valueIndex]] }; } } const dbEntity = await entityRepository.save(entity); savedEntity.push(dbEntity); } return savedEntity; }; export const sleep = async (ms: number): Promise => new Promise(resolve => setTimeout(resolve, ms));