<spanclass="nx">define</span><spanclass="p">(</span><spanclass="kd">function</span><spanclass="p">(</span><spanclass="nx">require</span><spanclass="p">,</span><spanclass="nx">exports</span><spanclass="p">,</span><spanclass="nx">module</span><spanclass="p">)</span><spanclass="p">{</span></div></div></div><divclass="segment"><divclass="comments"><divclass="wrapper"><p>Base library dependencies of the app.</p></div></div><divclass="code"><divclass="wrapper"><spanclass="kd">var</span><spanclass="nx">_</span><spanclass="o">=</span><spanclass="nx">require</span><spanclass="p">(</span><spanclass="s1">'lodash'</span><spanclass="p">);</span></div></div></div><divclass="segment"><divclass="comments"><divclass="wrapper"><p>Require the main constructors necessary for a <code>Knex</code> instance,
each of which are injected with the current instance, so they maintain
the correct client reference & grammar.</p></div></div><divclass="code"><divclass="wrapper"><spanclass="kd">var</span><spanclass="nx">Raw</span><spanclass="o">=</span><spanclass="nx">require</span><spanclass="p">(</span><spanclass="s1">'./lib/raw'</span><spanclass="p">).</span><spanclass="nx">Raw</span><spanclass="p">;</span>
<spanclass="kd">var</span><spanclass="nx">SchemaInterface</span><spanclass="o">=</span><spanclass="nx">require</span><spanclass="p">(</span><spanclass="s1">'./lib/schemainterface'</span><spanclass="p">).</span><spanclass="nx">SchemaInterface</span><spanclass="p">;</span></div></div></div><divclass="segment"><divclass="comments"><divclass="wrapper"><p>The <code>Knex</code> module, taking either a fully initialized
database client, or a configuration to initialize one. This is something
you'll typically only want to call once per application cycle.</p></div></div><divclass="code"><divclass="wrapper"><spanclass="kd">var</span><spanclass="nx">Knex</span><spanclass="o">=</span><spanclass="kd">function</span><spanclass="p">(</span><spanclass="nx">config</span><spanclass="p">)</span><spanclass="p">{</span>
<spanclass="kd">var</span><spanclass="nx">Dialect</span><spanclass="p">,</span><spanclass="nx">client</span><spanclass="p">;</span></div></div></div><divclass="segment"><divclass="comments"><divclass="wrapper"><p>If the client isn't actually a client, we need to configure it into one.
On the client, this isn't acceptable, since we need to return immediately
rather than wait on an async load of a client library.</p></div></div><divclass="code"><divclass="wrapper"><spanclass="k">if</span><spanclass="p">(</span><spanclass="nx">config</span><spanclass="k">instanceof</span><spanclass="nx">ClientBase</span><spanclass="p">)</span><spanclass="p">{</span>
<spanclass="k">throw</span><spanclass="k">new</span><spanclass="nb">Error</span><spanclass="p">(</span><spanclass="s1">'A valid `Knex` client must be passed into the Knex constructor.'</span><spanclass="p">);</span>
<spanclass="k">throw</span><spanclass="k">new</span><spanclass="nb">Error</span><spanclass="p">(</span><spanclass="nx">clientName</span><spanclass="o">+</span><spanclass="s1">' is not a valid Knex client, did you misspell it?'</span><spanclass="p">);</span>
<spanclass="p">}</span></div></div></div><divclass="segment"><divclass="comments"><divclass="wrapper"><p>Enables the <code>knex('tableName')</code> shorthand syntax.</p></div></div><divclass="code"><divclass="wrapper"><spanclass="kd">var</span><spanclass="nx">knex</span><spanclass="o">=</span><spanclass="kd">function</span><spanclass="p">(</span><spanclass="nx">tableName</span><spanclass="p">)</span><spanclass="p">{</span>
<spanclass="nx">knex</span><spanclass="p">.</span><spanclass="nx">migrate</span><spanclass="o">=</span><spanclass="p">{};</span></div></div></div><divclass="segment"><divclass="comments"><divclass="wrapper"><p>Enable the <code>Builder('tableName')</code> syntax, as is used in the main <code>knex('tableName')</code>.</p></div></div><divclass="code"><divclass="wrapper"><spanclass="nx">knex</span><spanclass="p">.</span><spanclass="nx">builder</span><spanclass="o">=</span><spanclass="kd">function</span><spanclass="p">(</span><spanclass="nx">tableName</span><spanclass="p">)</span><spanclass="p">{</span>
<spanclass="p">};</span></div></div></div><divclass="segment"><divclass="comments"><divclass="wrapper"><p>Attach each of the <code>Schema</code> "interface" methods directly onto to <code>knex.schema</code> namespace, e.g.:
<spanclass="k">return</span><spanclass="nx">Promise</span><spanclass="p">.</span><spanclass="nx">reject</span><spanclass="p">(</span><spanclass="k">new</span><spanclass="nb">Error</span><spanclass="p">(</span><spanclass="s1">'The table must be defined for the '</span><spanclass="o">+</span><spanclass="nx">key</span><spanclass="o">+</span><spanclass="s1">' method.'</span><spanclass="p">));</span>
<spanclass="p">});</span></div></div></div><divclass="segment"><divclass="comments"><divclass="wrapper"><p>Method to run a new <code>Raw</code> query on the current client.</p></div></div><divclass="code"><divclass="wrapper"><spanclass="nx">knex</span><spanclass="p">.</span><spanclass="nx">raw</span><spanclass="o">=</span><spanclass="kd">function</span><spanclass="p">(</span><spanclass="nx">sql</span><spanclass="p">,</span><spanclass="nx">bindings</span><spanclass="p">)</span><spanclass="p">{</span>
<spanclass="p">};</span></div></div></div><divclass="segment"><divclass="comments"><divclass="wrapper"><p>Keep a reference to the current client.</p></div></div><divclass="code"><divclass="wrapper"><spanclass="nx">knex</span><spanclass="p">.</span><spanclass="nx">client</span><spanclass="o">=</span><spanclass="nx">client</span><spanclass="p">;</span></div></div></div><divclass="segment"><divclass="comments"><divclass="wrapper"><p>Keep in sync with package.json</p></div></div><divclass="code"><divclass="wrapper"><spanclass="nx">knex</span><spanclass="p">.</span><spanclass="nx">VERSION</span><spanclass="o">=</span><spanclass="s1">'0.5.0'</span><spanclass="p">;</span></div></div></div><divclass="segment"><divclass="comments"><divclass="wrapper"><p>Runs a new transaction, taking a container and returning a promise
for when the transaction is resolved.</p></div></div><divclass="code"><divclass="wrapper"><spanclass="nx">knex</span><spanclass="p">.</span><spanclass="nx">transaction</span><spanclass="o">=</span><spanclass="kd">function</span><spanclass="p">(</span><spanclass="nx">container</span><spanclass="p">)</span><spanclass="p">{</span>
<spanclass="p">};</span></div></div></div><divclass="segment"><divclass="comments"><divclass="wrapper"><p>Attach each of the <code>Migrate</code> "interface" methods directly onto to <code>knex.migrate</code> namespace, e.g.:
<spanclass="p">});</span></div></div></div><divclass="segment"><divclass="comments"><divclass="wrapper"><p>Return the new <code>Knex</code> instance.</p></div></div><divclass="code"><divclass="wrapper"><spanclass="k">return</span><spanclass="nx">knex</span><spanclass="p">;</span>
<spanclass="p">};</span></div></div></div><divclass="segment"><divclass="comments"><divclass="wrapper"><p>The client names we'll allow in the <code>{name: lib}</code> pairing.</p></div></div><divclass="code"><divclass="wrapper"><spanclass="kd">var</span><spanclass="nx">Clients</span><spanclass="o">=</span><spanclass="nx">Knex</span><spanclass="p">.</span><spanclass="nx">Clients</span><spanclass="o">=</span><spanclass="p">{</span>
<spanclass="p">};</span></div></div></div><divclass="segment"><divclass="comments"><divclass="wrapper"><p>Used primarily to type-check a potential <code>Knex</code> client in <code>Bookshelf.js</code>,
by examining whether the object's <code>client</code> is an <code>instanceof Knex.ClientBase</code>.</p></div></div><divclass="code"><divclass="wrapper"><spanclass="nx">Knex</span><spanclass="p">.</span><spanclass="nx">ClientBase</span><spanclass="o">=</span><spanclass="nx">ClientBase</span><spanclass="p">;</span></div></div></div><divclass="segment"><divclass="comments"><divclass="wrapper"><p>finally, export the <code>Knex</code> object for node and the browser.</p></div></div><divclass="code"><divclass="wrapper"><spanclass="nx">module</span><spanclass="p">.</span><spanclass="nx">exports</span><spanclass="o">=</span><spanclass="nx">Knex</span><spanclass="p">;</span>