UNPKG

kns-floppy

Version:
89 lines (73 loc) 2.63 kB
var Hoek = require("hoek"); var Sequelize = require("sequelize"); var Path = require("path"); var Plumber = require("kns-plumber"); var internals = {}; internals.defaults = { host: "localhost", logging: false, port: "3306", pass: "", appRoot: ".", migrationRoot: "/config/migrations/", seedRoot: "/config/seeds/" }; exports.register = function (plugin, options, next) { options = Hoek.applyToDefaults(internals.defaults, options); var sequelize = new Sequelize(options.env.database.name, options.env.database.user, options.env.database.pass, { host: options.env.database.host, port: options.env.database.port, logging: options.env.database.logging }); var migrator = sequelize.getMigrator({ path: options.migrationRoot }); var disk = { Sequelize: Sequelize, sequelize: sequelize, models: {} }; /** * FindModelFiles * * 1. Recursively search app plugin's for 'model' folder. * 2. Every 'model' folder, it graps model files recursively * in that directory. */ Plumber.pipeModels(options.appRoot).then(function (modelFiles) { // Import all model files into sequelize modelFiles.forEach(function (modelFile) { var model = sequelize.import(modelFile.path); disk.models[model.name] = model; }); Object.keys(disk.models).forEach(function (modelName) { if ( "associate" in disk.models[modelName] ) { disk.models[modelName].associate(disk.models); } }); var isFirstTime = false; sequelize.sync({force: false}).then(function () { plugin.expose("disk", disk); if ( isFirstTime ) { isFirstTime = false; console.log("*** First time run, executing seed files ***"); var seed_path = Path.join(options.seedRoot); Plumber.pipeSeeds(seed_path).map(function (seedFile) { return require(seedFile.path).seed(disk); }).then(function () { console.log("*** Seed file execution completed. ***"); next(); }).catch(function (e) { console.log("*** Error: " + e + " ***"); process.exit(1); }); } else { next(); } }); }); }; exports.register.attributes = { pkg: require('./package.json') };