@riao/dbal
Version:
91 lines • 3.78 kB
JavaScript
;
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
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) : adopt(result.value).then(fulfilled, rejected); }
step((generator = generator.apply(thisArg, _arguments || [])).next());
});
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.SeedRunner = void 0;
const fs = require("fs");
const path_1 = require("path");
const ts_import_ts_1 = require("ts-import-ts");
const create_seed_table_1 = require("./create-seed-table");
/**
* Runs seeds
*/
class SeedRunner {
constructor(db) {
this.db = db;
}
/**
* Run seeds
*
* @param seeds (Optional) Folder to find seeds in. Default is
* db.getSeedsDirectory()
* @param log (Optional) Log function. Defaults to console.log
* @param direction (Optional) Run seeds up or down?
* @param steps (Optional) Run a certain number of steps?
* @param seed (Optional) Seed file to run
*/
run(seeds,
/* eslint-disable-next-line no-console */
log = console.log, direction = 'up', steps, seed) {
return __awaiter(this, void 0, void 0, function* () {
if (!seeds) {
seeds = this.db.getSeedsDirectory();
}
if (steps === -1) {
steps = undefined;
}
if (steps !== undefined && steps < 0) {
throw new Error('Steps must be a positive integer, or -1 for all.');
}
// Create seed table, if not existing
const createSeedTable = new create_seed_table_1.CreateSeedTable(this.db);
yield createSeedTable.up();
// Get seed files in folder
let seedsInPath = fs
.readdirSync(seeds)
.filter((fname) => /\.ts$/.test(fname));
if (!seedsInPath.length) {
log('No seeds found!');
return;
}
log(`Discovered ${seedsInPath.length} seeds.`);
if (seed) {
if (!seedsInPath.includes(seed)) {
throw new Error(`Seed ${seed} not found in seeds folder`);
}
seedsInPath = [seed];
}
if (direction === 'down') {
seedsInPath.reverse();
}
if (steps !== undefined) {
seedsInPath = seedsInPath.slice(0, steps);
}
log(`Running ${seedsInPath.length} seeds...`);
// Run each seed
for (const seedFile of seedsInPath) {
// Get the seed path & name
const path = (0, path_1.join)(seeds, seedFile);
const name = this.getSeedName(path);
// Run the seed
log(direction.toLocaleUpperCase() + ' | ', name);
const seedType = (0, ts_import_ts_1.tsimport)(path);
const seed = new seedType(this.db);
yield seed[direction]();
}
log('Seeds complete');
});
}
getSeedName(filename) {
return (0, path_1.basename)(filename.toLowerCase(), (0, path_1.extname)(filename));
}
}
exports.SeedRunner = SeedRunner;
//# sourceMappingURL=seed-runner.js.map