UNPKG

@riao/dbal

Version:
91 lines 3.78 kB
"use strict"; 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