'use strict'; var Raw = require('./raw'); var warn = require('./helpers').warn; var Client = require('./client'); var makeClient = require('./util/make-client'); var makeKnex = require('./util/make-knex'); var parseConnection = require('./util/parse-connection'); var assign = require('lodash/object/assign'); function Knex(config) { if (typeof config === 'string') { return new Knex(assign(parseConnection(config), arguments[2])); } var Dialect; if (arguments.length === 0 || !config.client && !config.dialect) { Dialect = makeClient(Client); } else { var clientName = config.client || config.dialect; Dialect = makeClient(require('./dialects/' + (aliases[clientName] || clientName) + '/index.js')); } if (typeof config.connection === 'string') { config = assign({}, config, { connection: parseConnection(config.connection).connection }); } return makeKnex(new Dialect(config)); } // Expose Client on the main Knex namespace. Knex.Client = Client; // Run a "raw" query, though we can't do anything with it other than put // it in a query statement. Knex.raw = function (sql, bindings) { return new Raw({}).set(sql, bindings); }; // Create a new "knex" instance with the appropriate configured client. Knex.initialize = function (config) { warn('knex.initialize is deprecated, pass your config object directly to the knex module'); return new Knex(config); }; // Bluebird Knex.Promise = require('./promise'); // The client names we'll allow in the `{name: lib}` pairing. var aliases = { 'mariadb': 'maria', 'mariasql': 'maria', 'pg': 'postgres', 'postgresql': 'postgres', 'sqlite': 'sqlite3' }; // Doing this ensures Browserify works. Still need to figure out // the best way to do some of this. if (process.browser) { require('./dialects/websql/index.js'); } module.exports = Knex;