File: /var/dev/nowruzgan/rest/node_modules/knex/lib/seed/index.js
'use strict';
exports.__esModule = true;
var _extend2 = require('lodash/extend');
var _extend3 = _interopRequireDefault(_extend2);
var _each2 = require('lodash/each');
var _each3 = _interopRequireDefault(_each2);
var _template2 = require('lodash/template');
var _template3 = _interopRequireDefault(_template2);
var _bind2 = require('lodash/bind');
var _bind3 = _interopRequireDefault(_bind2);
var _map2 = require('lodash/map');
var _map3 = _interopRequireDefault(_map2);
var _includes2 = require('lodash/includes');
var _includes3 = _interopRequireDefault(_includes2);
var _filter2 = require('lodash/filter');
var _filter3 = _interopRequireDefault(_filter2);
var _fs = require('fs');
var _fs2 = _interopRequireDefault(_fs);
var _path = require('path');
var _path2 = _interopRequireDefault(_path);
var _mkdirp = require('mkdirp');
var _mkdirp2 = _interopRequireDefault(_mkdirp);
var _bluebird = require('bluebird');
var _bluebird2 = _interopRequireDefault(_bluebird);
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
// The new seeds we're performing, typically called from the `knex.seed`
// interface on the main `knex` object. Passes the `knex` instance performing
// the seeds.
// Seeder
// -------
function Seeder(knex) {
this.knex = knex;
this.config = this.setConfig(knex.client.config.seeds);
}
// Runs all seed files for the given environment.
Seeder.prototype.run = _bluebird2.default.method(function (config) {
this.config = this.setConfig(config);
return this._seedData().bind(this).spread(function (all) {
return this._runSeeds(all);
});
});
// Creates a new seed file, with a given name.
Seeder.prototype.make = function (name, config) {
this.config = this.setConfig(config);
if (!name) _bluebird2.default.rejected(new Error('A name must be specified for the generated seed'));
return this._ensureFolder(config).bind(this).then(this._generateStubTemplate).then(this._writeNewSeed(name));
};
// Lists all available seed files as a sorted array.
Seeder.prototype._listAll = _bluebird2.default.method(function (config) {
this.config = this.setConfig(config);
return _bluebird2.default.promisify(_fs2.default.readdir, { context: _fs2.default })(this._absoluteConfigDir()).bind(this).then(function (seeds) {
return (0, _filter3.default)(seeds, function (value) {
var extension = _path2.default.extname(value);
return (0, _includes3.default)(['.co', '.coffee', '.eg', '.iced', '.js', '.litcoffee', '.ls', '.ts'], extension);
}).sort();
});
});
// Gets the seed file list from the specified seed directory.
Seeder.prototype._seedData = function () {
return _bluebird2.default.join(this._listAll());
};
// Ensures a folder for the seeds exist, dependent on the
// seed config settings.
Seeder.prototype._ensureFolder = function () {
var dir = this._absoluteConfigDir();
return _bluebird2.default.promisify(_fs2.default.stat, { context: _fs2.default })(dir).catch(function () {
return _bluebird2.default.promisify(_mkdirp2.default)(dir);
});
};
// Run seed files, in sequence.
Seeder.prototype._runSeeds = function (seeds) {
return _bluebird2.default.all((0, _map3.default)(seeds, (0, _bind3.default)(this._validateSeedStructure, this))).bind(this).then(function (seeds) {
return _bluebird2.default.bind(this).then(function () {
return this._waterfallBatch(seeds);
});
});
};
// Validates seed files by requiring and checking for a `seed` function.
Seeder.prototype._validateSeedStructure = function (name) {
var seed = require(_path2.default.join(this._absoluteConfigDir(), name));
if (typeof seed.seed !== 'function') {
throw new Error('Invalid seed file: ' + name + ' must have a seed function');
}
return name;
};
// Generates the stub template for the current seed file, returning a compiled template.
Seeder.prototype._generateStubTemplate = function () {
var stubPath = this.config.stub || _path2.default.join(__dirname, 'stub', this.config.extension + '.stub');
return _bluebird2.default.promisify(_fs2.default.readFile, { context: _fs2.default })(stubPath).then(function (stub) {
return (0, _template3.default)(stub.toString(), { variable: 'd' });
});
};
// Write a new seed to disk, using the config and generated filename,
// passing any `variables` given in the config to the template.
Seeder.prototype._writeNewSeed = function (name) {
var config = this.config;
var dir = this._absoluteConfigDir();
return function (tmpl) {
if (name[0] === '-') name = name.slice(1);
var filename = name + '.' + config.extension;
return _bluebird2.default.promisify(_fs2.default.writeFile, { context: _fs2.default })(_path2.default.join(dir, filename), tmpl(config.variables || {})).return(_path2.default.join(dir, filename));
};
};
// Runs a batch of seed files.
Seeder.prototype._waterfallBatch = function (seeds) {
var knex = this.knex;
var seedDirectory = this._absoluteConfigDir();
var current = _bluebird2.default.bind({ failed: false, failedOn: 0 });
var log = [];
(0, _each3.default)(seeds, function (seed) {
var name = _path2.default.join(seedDirectory, seed);
seed = require(name);
// Run each seed file.
current = current.then(function () {
return seed.seed(knex, _bluebird2.default);
}).then(function () {
log.push(name);
});
});
return current.thenReturn([log]);
};
Seeder.prototype._absoluteConfigDir = function () {
return _path2.default.resolve(process.cwd(), this.config.directory);
};
Seeder.prototype.setConfig = function (config) {
return (0, _extend3.default)({
extension: 'js',
directory: './seeds'
}, this.config || {}, config);
};
exports.default = Seeder;
module.exports = exports['default'];