mirror of
https://github.com/knex/knex.git
synced 2025-07-04 07:26:21 +00:00
66 lines
1.8 KiB
JavaScript
66 lines
1.8 KiB
JavaScript
const path = require('path');
|
|
const flatten = require('lodash/flatten');
|
|
const includes = require('lodash/includes');
|
|
const { AbstractMigrationsLoader } = require('../../common/MigrationsLoader');
|
|
const { getFilepathsInFolder } = require('../../util/fs');
|
|
|
|
const filterByLoadExtensions = (extensions) => (value) => {
|
|
const extension = path.extname(value);
|
|
return includes(extensions, extension);
|
|
};
|
|
|
|
class FsSeeds extends AbstractMigrationsLoader {
|
|
_getConfigDirectories(logger) {
|
|
const directories = this.migrationsPaths;
|
|
return directories.map((directory) => {
|
|
if (!directory) {
|
|
logger.warn(
|
|
'Empty value passed as a directory for Seeder, this is not supported.'
|
|
);
|
|
}
|
|
return path.resolve(process.cwd(), directory);
|
|
});
|
|
}
|
|
|
|
async getSeeds(config) {
|
|
const { loadExtensions, recursive, specific } = config;
|
|
|
|
const seeds = flatten(
|
|
await Promise.all(
|
|
this._getConfigDirectories(config.logger).map((d) =>
|
|
getFilepathsInFolder(d, recursive)
|
|
)
|
|
)
|
|
);
|
|
|
|
// if true, each dir are already sorted
|
|
// (getFilepathsInFolderRecursively does this)
|
|
// if false, we need to sort all the seeds
|
|
let files = seeds.filter(filterByLoadExtensions(loadExtensions));
|
|
if (!this.sortDirsSeparately) {
|
|
files.sort();
|
|
}
|
|
|
|
if (specific) {
|
|
files = files.filter((file) => path.basename(file) === specific);
|
|
if (files.length === 0) {
|
|
throw new Error(
|
|
`Invalid argument provided: the specific seed "${specific}" does not exist.`
|
|
);
|
|
}
|
|
}
|
|
|
|
return files;
|
|
}
|
|
|
|
async getSeed(filepath) {
|
|
const importFile = require('../../util/import-file'); // late import
|
|
const seed = await importFile(filepath);
|
|
return seed;
|
|
}
|
|
}
|
|
|
|
module.exports = {
|
|
FsSeeds,
|
|
};
|