seedgoose
Version:
Mongoose data seeding with smart id references tracking.
103 lines (102 loc) • 4.39 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 });
const find_dominant_file_1 = require("find-dominant-file");
const load_any_file_1 = require("load-any-file");
const path = require("path");
const collectionsFromArgs_1 = require("./collectionsFromArgs");
const displayHelp_1 = require("./displayHelp");
const displayVersion_1 = require("./displayVersion");
const getInitialOptions_1 = require("./getInitialOptions");
const getModelFiles_1 = require("./getModelFiles");
const idMap_1 = require("./idMap");
const loadConfig_1 = require("./loadConfig");
const reporters = require("./reporters");
const reseed_1 = require("./reseed");
const seed_1 = require("./seed");
const unseed_1 = require("./unseed");
function startup(cwd = process.cwd(), argv = process.argv) {
return __awaiter(this, void 0, void 0, function* () {
const initialOptions = getInitialOptions_1.default();
// Show help and exit
if (initialOptions.help) {
displayHelp_1.default(process.stdout);
return;
}
// Show version and exit
if (initialOptions.version) {
displayVersion_1.default(process.stdout);
return;
}
// Find project root directory
const projRoot = find_dominant_file_1.default(cwd, 'package.json', true);
if (!projRoot) {
throw new Error("Please run `seedgoose' inside your project directory.");
}
const [command, args, options] = loadConfig_1.default(projRoot, argv);
// Check command availability
if (!['seed', 'reseed', 'unseed'].includes(command)) {
throw new Error(`Unknown seedgoose command \`${command}'.`);
}
// Requires data directory
if (!options.data) {
throw new Error('Please provide data directory.');
}
// Load model files
const modelFileList = getModelFiles_1.default(projRoot, options.models, options.modelBaseDirectory);
modelFileList.forEach((filename) => {
load_any_file_1.default(filename);
});
// Connect mongoose
const nodeModules = find_dominant_file_1.default(cwd, 'node_modules', false);
if (nodeModules) {
module.paths.push(nodeModules);
}
const mongoose = require('mongoose');
const connection = yield mongoose.connect(options.db, {
useNewUrlParser: true
});
idMap_1.idMapSetMongoose(mongoose);
idMap_1.idMapSetMappingTable(options.mappingTable);
const dataDir = path.join(projRoot, options.data);
const reporter = options.silent ? reporters.silent : reporters.default;
const collections = collectionsFromArgs_1.default(dataDir, args, mongoose);
try {
// Execute command
for (const collection of collections) {
const records = load_any_file_1.default(path.join(dataDir, collection));
switch (command) {
case 'seed':
yield seed_1.default(collection, records, mongoose, reporter);
break;
case 'reseed':
yield reseed_1.default(collection, records, mongoose, reporter);
break;
case 'unseed':
yield unseed_1.default(collection, records, mongoose, reporter);
break;
}
}
}
catch (e) {
throw e;
}
finally {
// Close connection and exit
yield connection.disconnect();
}
});
}
;
if (require.main === module) {
startup(process.cwd(), process.argv);
}
module.exports = startup;