typeorm-plus-fixtures-cli
Version:
This is a fork of [typeorm-fixtures](https://github.com/RobinCK/typeorm-fixtures)
115 lines • 4.76 kB
JavaScript
;
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
return new (P || (P = Promise))(function (resolve, reject) {
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
function step(result) { result.done ? resolve(result.value) : new P(function (resolve) { resolve(result.value); }).then(fulfilled, rejected); }
step((generator = generator.apply(thisArg, _arguments || [])).next());
});
};
Object.defineProperty(exports, "__esModule", { value: true });
require("reflect-metadata");
const path = require("path");
const fs = require("fs");
const cliProgress = require("cli-progress");
const commander = require("commander");
const resolveFrom = require("resolve-from");
const yargsParser = require("yargs-parser");
const chalk_1 = require("chalk");
const Loader_1 = require("./Loader");
const util_1 = require("./util");
const Resolver_1 = require("./Resolver");
const typeorm_plus_1 = require("typeorm-plus");
const Builder_1 = require("./Builder");
const Parser_1 = require("./Parser");
commander
.version(require('../package.json').version, '-v, --version')
.usage('[options] <path> Fixtures folder/file path')
.arguments('<path> [otherPaths...]')
.action((fixturesPath, otherPaths, options) => {
options.paths = [fixturesPath, ...otherPaths];
})
.option('--require <package>', 'A list of additional modules. e.g. ts-node/register')
.option('-c, --config <path>', 'TypeORM config path', 'ormconfig.yml')
.option('-cn, --connection [value]', 'TypeORM connection name', 'default')
.option('-s --sync', 'Database schema sync')
.option('-d --debug', 'Enable debug')
.option('--no-color', 'Disable color');
commander.parse(process.argv);
const argv = yargsParser(process.argv.slice(2));
if (argv.require) {
const requires = Array.isArray(argv.require) ? argv.require : [argv.require];
for (const req of requires) {
require(resolveFrom.silent(process.cwd(), req) || req);
}
}
if (!commander.paths) {
console.error('Path to fixtureConfigs folder is not passed.\n');
commander.outputHelp();
process.exit(1);
}
const debug = (message) => {
if (commander.debug) {
console.log(chalk_1.default.grey(message)); // tslint:disable-line
}
};
const error = (message) => {
console.log(chalk_1.default.red(message)); // tslint:disable-line
};
const typeOrmConfigPath = path.resolve(commander.config);
if (!fs.existsSync(typeOrmConfigPath)) {
throw new Error(`TypeOrm config ${typeOrmConfigPath} not found`);
}
debug('Connection to database...');
util_1.createConnection({
root: path.dirname(typeOrmConfigPath),
configName: path.basename(typeOrmConfigPath, path.extname(typeOrmConfigPath)),
}, commander.connection)
.then((connection) => __awaiter(this, void 0, void 0, function* () {
debug('Database is connected');
if (commander.sync) {
debug('Synchronize database schema');
yield connection.synchronize(true);
}
debug('Loading fixtureConfigs');
const loader = new Loader_1.Loader();
commander.paths.forEach((fixturePath) => {
loader.load(path.resolve(fixturePath));
});
debug('Resolving fixtureConfigs');
const resolver = new Resolver_1.Resolver();
const fixtures = resolver.resolve(loader.fixtureConfigs);
const builder = new Builder_1.Builder(connection, new Parser_1.Parser());
const bar = new cliProgress.Bar({
format: `${chalk_1.default.yellow('Progress')} ${chalk_1.default.green('[{bar}]')} ${chalk_1.default.yellow('{percentage}% | ETA: {eta}s | {value}/{total} {name}')} `,
barCompleteChar: '\u2588',
barIncompleteChar: '\u2591',
fps: 5,
stream: process.stdout,
barsize: 50,
});
bar.start(fixtures.length, 0, { name: '' });
for (const fixture of util_1.fixturesIterator(fixtures)) {
const entity = yield builder.build(fixture);
try {
bar.increment(1, { name: fixture.name });
yield connection.getRepository(entity.constructor.name).save(entity);
}
catch (e) {
bar.stop();
throw e;
}
}
bar.update(fixtures.length, { name: '' });
bar.stop();
debug('\nDatabase disconnect');
yield connection.close();
}))
.catch((e) => __awaiter(this, void 0, void 0, function* () {
error('Fail fixture loading: ' + e.message);
yield typeorm_plus_1.getConnection().close();
console.log(e); // tslint:disable-line
process.exit(1);
}));
//# sourceMappingURL=cli.js.map