mirror of
https://github.com/knex/knex.git
synced 2025-11-02 18:59:38 +00:00
110 lines
26 KiB
HTML
110 lines
26 KiB
HTML
<!DOCTYPE html><html lang="en"><head><title>knex</title></head><meta http-equiv="Content-Type" content="text/html; charset=utf-8"><meta name="viewport" content="width=device-width, initial-scale=1.0, minimum-scale=1.0, maximum-scale=1.0"><meta name="groc-relative-root" content=""><meta name="groc-document-path" content="knex"><meta name="groc-project-path" content="knex.js"><link rel="stylesheet" type="text/css" media="all" href="assets/style.css"><script type="text/javascript" src="assets/behavior.js"></script><body><div id="meta"><div class="file-path">knex.js</div></div><div id="document"><div class="segment"><div class="comments "><div class="wrapper"><h2 id="knexjs-060">Knex.js 0.6.0</h2></div></div></div><div class="segment"><div class="comments "><div class="wrapper"><pre><code>(c) 2014 Tim Griesser
|
|
Knex may be freely distributed under the MIT license.
|
|
For details and documentation:
|
|
http://knexjs.org
|
|
</code></pre></div></div></div><div class="segment"><div class="comments "><div class="wrapper"><p>The "Knex" object we're exporting is just a passthrough to <code>Knex.initialize</code>.</p></div></div><div class="code"><div class="wrapper"><span class="kd">function</span> <span class="nx">Knex</span><span class="p">()</span> <span class="p">{</span>
|
|
<span class="k">return</span> <span class="nx">Knex</span><span class="p">.</span><span class="nx">initialize</span><span class="p">.</span><span class="nx">apply</span><span class="p">(</span><span class="kc">null</span><span class="p">,</span> <span class="nx">arguments</span><span class="p">);</span>
|
|
<span class="p">}</span></div></div></div><div class="segment"><div class="comments "><div class="wrapper"><p>Run a "raw" query, though we can't do anything with it other than put
|
|
it in a query statement.</p></div></div><div class="code"><div class="wrapper"><span class="nx">Knex</span><span class="p">.</span><span class="nx">raw</span> <span class="o">=</span> <span class="kd">function</span><span class="p">(</span><span class="nx">sql</span><span class="p">,</span> <span class="nx">bindings</span><span class="p">)</span> <span class="p">{</span>
|
|
<span class="k">return</span> <span class="k">new</span> <span class="nx">Raw</span><span class="p">(</span><span class="nx">sql</span><span class="p">,</span> <span class="nx">bindings</span><span class="p">);</span>
|
|
<span class="p">};</span></div></div></div><div class="segment"><div class="comments "><div class="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><div class="code"><div class="wrapper"><span class="kd">var</span> <span class="nx">Raw</span> <span class="o">=</span> <span class="nx">require</span><span class="p">(</span><span class="s1">'./lib/raw'</span><span class="p">);</span></div></div></div><div class="segment"><div class="comments "><div class="wrapper"><p>Doing it this way makes it easier to build for browserify.</p></div></div><div class="code"><div class="wrapper"><span class="kd">var</span> <span class="nx">mysql</span> <span class="o">=</span> <span class="kd">function</span><span class="p">()</span> <span class="p">{</span> <span class="k">return</span> <span class="nx">require</span><span class="p">(</span><span class="s1">'./lib/dialects/mysql'</span><span class="p">);</span> <span class="p">};</span>
|
|
<span class="kd">var</span> <span class="nx">pg</span> <span class="o">=</span> <span class="kd">function</span><span class="p">()</span> <span class="p">{</span> <span class="k">return</span> <span class="nx">require</span><span class="p">(</span><span class="s1">'./lib/dialects/postgres'</span><span class="p">);</span> <span class="p">};</span>
|
|
<span class="kd">var</span> <span class="nx">sqlite3</span> <span class="o">=</span> <span class="kd">function</span><span class="p">()</span> <span class="p">{</span> <span class="k">return</span> <span class="nx">require</span><span class="p">(</span><span class="s1">'./lib/dialects/sqlite3'</span><span class="p">);</span> <span class="p">};</span>
|
|
<span class="kd">var</span> <span class="nx">websql</span> <span class="o">=</span> <span class="kd">function</span><span class="p">()</span> <span class="p">{</span> <span class="k">return</span> <span class="nx">require</span><span class="p">(</span><span class="s1">'./lib/dialects/websql'</span><span class="p">);</span> <span class="p">};</span></div></div></div><div class="segment"><div class="comments "><div class="wrapper"><p>The client names we'll allow in the <code>{name: lib}</code> pairing.</p></div></div><div class="code"><div class="wrapper"><span class="kd">var</span> <span class="nx">Clients</span> <span class="o">=</span> <span class="nx">Knex</span><span class="p">.</span><span class="nx">Clients</span> <span class="o">=</span> <span class="p">{</span>
|
|
<span class="s1">'mysql'</span> <span class="o">:</span> <span class="nx">mysql</span><span class="p">,</span>
|
|
<span class="s1">'pg'</span> <span class="o">:</span> <span class="nx">pg</span><span class="p">,</span>
|
|
<span class="s1">'postgres'</span> <span class="o">:</span> <span class="nx">pg</span><span class="p">,</span>
|
|
<span class="s1">'postgresql'</span> <span class="o">:</span> <span class="nx">pg</span><span class="p">,</span>
|
|
<span class="s1">'sqlite'</span> <span class="o">:</span> <span class="nx">sqlite3</span><span class="p">,</span>
|
|
<span class="s1">'sqlite3'</span> <span class="o">:</span> <span class="nx">sqlite3</span><span class="p">,</span>
|
|
<span class="s1">'websql'</span> <span class="o">:</span> <span class="nx">websql</span>
|
|
<span class="p">};</span></div></div></div><div class="segment"><div class="comments "><div class="wrapper"><p>Require lodash.</p></div></div><div class="code"><div class="wrapper"><span class="kd">var</span> <span class="nx">_</span> <span class="o">=</span> <span class="nx">require</span><span class="p">(</span><span class="s1">'lodash'</span><span class="p">);</span></div></div></div><div class="segment"><div class="comments "><div class="wrapper"><p>Each of the methods which may be statically chained from knex.</p></div></div><div class="code"><div class="wrapper"><span class="kd">var</span> <span class="nx">QueryInterface</span> <span class="o">=</span> <span class="nx">require</span><span class="p">(</span><span class="s1">'./lib/query/methods'</span><span class="p">);</span>
|
|
<span class="kd">var</span> <span class="nx">SchemaInterface</span> <span class="o">=</span> <span class="nx">require</span><span class="p">(</span><span class="s1">'./lib/schema/methods'</span><span class="p">);</span>
|
|
<span class="kd">var</span> <span class="nx">MigrateInterface</span> <span class="o">=</span> <span class="nx">require</span><span class="p">(</span><span class="s1">'./lib/migrate/methods'</span><span class="p">);</span></div></div></div><div class="segment"><div class="comments "><div class="wrapper"><p>Create a new "knex" instance with the appropriate configured client.</p></div></div><div class="code"><div class="wrapper"><span class="nx">Knex</span><span class="p">.</span><span class="nx">initialize</span> <span class="o">=</span> <span class="kd">function</span><span class="p">(</span><span class="nx">config</span><span class="p">)</span> <span class="p">{</span>
|
|
<span class="kd">var</span> <span class="nx">Dialect</span><span class="p">,</span> <span class="nx">client</span><span class="p">;</span>
|
|
<span class="kd">var</span> <span class="nx">EventEmitter</span> <span class="o">=</span> <span class="nx">require</span><span class="p">(</span><span class="s1">'events'</span><span class="p">).</span><span class="nx">EventEmitter</span><span class="p">;</span></div></div></div><div class="segment"><div class="comments "><div class="wrapper"><p>The object we're potentially using to kick off an
|
|
initial chain. It is assumed that <code>knex</code> isn't a
|
|
constructor, so we have no reference to 'this' just
|
|
in case it's called with <code>new</code>.</p></div></div><div class="code"><div class="wrapper"> <span class="kd">function</span> <span class="nx">knex</span><span class="p">(</span><span class="nx">tableName</span><span class="p">)</span> <span class="p">{</span>
|
|
<span class="kd">var</span> <span class="nx">qb</span> <span class="o">=</span> <span class="k">new</span> <span class="nx">client</span><span class="p">.</span><span class="nx">QueryBuilder</span><span class="p">;</span>
|
|
<span class="k">if</span> <span class="p">(</span><span class="nx">config</span><span class="p">.</span><span class="nx">__transactor__</span><span class="p">)</span> <span class="nx">qb</span><span class="p">.</span><span class="nx">transacting</span><span class="p">(</span><span class="nx">config</span><span class="p">.</span><span class="nx">__transactor__</span><span class="p">);</span></div></div></div><div class="segment"><div class="comments "><div class="wrapper"><p>Passthrough all "query" events to the knex object.</p></div></div><div class="code"><div class="wrapper"> <span class="nx">qb</span><span class="p">.</span><span class="nx">on</span><span class="p">(</span><span class="s1">'query'</span><span class="p">,</span> <span class="kd">function</span><span class="p">(</span><span class="nx">data</span><span class="p">)</span> <span class="p">{</span>
|
|
<span class="nx">knex</span><span class="p">.</span><span class="nx">emit</span><span class="p">(</span><span class="s1">'query'</span><span class="p">,</span> <span class="nx">data</span><span class="p">);</span>
|
|
<span class="p">});</span>
|
|
<span class="k">return</span> <span class="nx">tableName</span> <span class="o">?</span> <span class="nx">qb</span><span class="p">.</span><span class="nx">table</span><span class="p">(</span><span class="nx">tableName</span><span class="p">)</span> <span class="o">:</span> <span class="nx">qb</span><span class="p">;</span>
|
|
<span class="p">}</span></div></div></div><div class="segment"><div class="comments "><div class="wrapper"><p>Hook up the "knex" object as an EventEmitter.</p></div></div><div class="code"><div class="wrapper"> <span class="kd">var</span> <span class="nx">ee</span> <span class="o">=</span> <span class="k">new</span> <span class="nx">EventEmitter</span><span class="p">();</span>
|
|
<span class="k">for</span> <span class="p">(</span><span class="kd">var</span> <span class="nx">key</span> <span class="k">in</span> <span class="nx">ee</span><span class="p">)</span> <span class="p">{</span>
|
|
<span class="nx">knex</span><span class="p">[</span><span class="nx">key</span><span class="p">]</span> <span class="o">=</span> <span class="nx">ee</span><span class="p">[</span><span class="nx">key</span><span class="p">];</span>
|
|
<span class="p">}</span></div></div></div><div class="segment"><div class="comments "><div class="wrapper"><p>The <code>__knex__</code> is used if you need to duck-type check whether this
|
|
is a knex builder, without a full on <code>instanceof</code> check.</p></div></div><div class="code"><div class="wrapper"> <span class="nx">knex</span><span class="p">.</span><span class="nx">VERSION</span> <span class="o">=</span> <span class="nx">knex</span><span class="p">.</span><span class="nx">__knex__</span> <span class="o">=</span> <span class="s1">'0.6.0'</span><span class="p">;</span>
|
|
<span class="nx">knex</span><span class="p">.</span><span class="nx">raw</span> <span class="o">=</span> <span class="kd">function</span><span class="p">(</span><span class="nx">sql</span><span class="p">,</span> <span class="nx">bindings</span><span class="p">)</span> <span class="p">{</span>
|
|
<span class="kd">var</span> <span class="nx">raw</span> <span class="o">=</span> <span class="k">new</span> <span class="nx">client</span><span class="p">.</span><span class="nx">Raw</span><span class="p">(</span><span class="nx">sql</span><span class="p">,</span> <span class="nx">bindings</span><span class="p">);</span>
|
|
<span class="nx">raw</span><span class="p">.</span><span class="nx">on</span><span class="p">(</span><span class="s1">'query'</span><span class="p">,</span> <span class="kd">function</span><span class="p">(</span><span class="nx">data</span><span class="p">)</span> <span class="p">{</span>
|
|
<span class="nx">knex</span><span class="p">.</span><span class="nx">emit</span><span class="p">(</span><span class="s1">'query'</span><span class="p">,</span> <span class="nx">data</span><span class="p">);</span>
|
|
<span class="p">});</span>
|
|
<span class="k">return</span> <span class="nx">raw</span><span class="p">;</span>
|
|
<span class="p">};</span></div></div></div><div class="segment"><div class="comments "><div class="wrapper"><p>Runs a new transaction, taking a container and returning a promise
|
|
for when the transaction is resolved.</p></div></div><div class="code"><div class="wrapper"> <span class="nx">knex</span><span class="p">.</span><span class="nx">transaction</span> <span class="o">=</span> <span class="kd">function</span><span class="p">(</span><span class="nx">container</span><span class="p">)</span> <span class="p">{</span>
|
|
<span class="kd">var</span> <span class="nx">trx</span> <span class="o">=</span> <span class="k">new</span> <span class="nx">client</span><span class="p">.</span><span class="nx">Transaction</span><span class="p">(</span><span class="nx">container</span><span class="p">);</span>
|
|
<span class="nx">trx</span><span class="p">.</span><span class="nx">on</span><span class="p">(</span><span class="s1">'query'</span><span class="p">,</span> <span class="kd">function</span><span class="p">(</span><span class="nx">data</span><span class="p">)</span> <span class="p">{</span>
|
|
<span class="nx">knex</span><span class="p">.</span><span class="nx">emit</span><span class="p">(</span><span class="s1">'query'</span><span class="p">,</span> <span class="nx">data</span><span class="p">);</span>
|
|
<span class="p">});</span>
|
|
<span class="k">return</span> <span class="nx">trx</span><span class="p">;</span>
|
|
<span class="p">};</span></div></div></div><div class="segment"><div class="comments "><div class="wrapper"><p>Convenience method for tearing down the pool.</p></div></div><div class="code"><div class="wrapper"> <span class="nx">knex</span><span class="p">.</span><span class="nx">destroy</span> <span class="o">=</span> <span class="kd">function</span> <span class="p">(</span><span class="nx">callback</span><span class="p">)</span> <span class="p">{</span>
|
|
<span class="kd">var</span> <span class="nx">pool</span> <span class="o">=</span> <span class="k">this</span><span class="p">.</span><span class="nx">client</span><span class="p">.</span><span class="nx">pool</span><span class="p">;</span>
|
|
<span class="kd">var</span> <span class="nx">promise</span> <span class="o">=</span> <span class="k">new</span> <span class="nx">Promise</span><span class="p">(</span><span class="kd">function</span><span class="p">(</span><span class="nx">resolver</span><span class="p">,</span> <span class="nx">rejecter</span><span class="p">)</span> <span class="p">{</span>
|
|
<span class="k">if</span> <span class="p">(</span><span class="o">!</span><span class="nx">pool</span><span class="p">)</span> <span class="nx">resolver</span><span class="p">();</span>
|
|
<span class="nx">pool</span><span class="p">.</span><span class="nx">destroy</span><span class="p">(</span><span class="kd">function</span><span class="p">(</span><span class="nx">err</span><span class="p">)</span> <span class="p">{</span>
|
|
<span class="k">if</span> <span class="p">(</span><span class="nx">err</span><span class="p">)</span> <span class="k">return</span> <span class="nx">rejecter</span><span class="p">(</span><span class="nx">err</span><span class="p">);</span>
|
|
<span class="nx">resolver</span><span class="p">();</span>
|
|
<span class="p">});</span>
|
|
<span class="p">});</span></div></div></div><div class="segment"><div class="comments "><div class="wrapper"><p>Allow either a callback or promise interface for destruction.</p></div></div><div class="code"><div class="wrapper"> <span class="k">if</span> <span class="p">(</span><span class="nx">_</span><span class="p">.</span><span class="nx">isFunction</span><span class="p">(</span><span class="nx">callback</span><span class="p">))</span> <span class="p">{</span>
|
|
<span class="nx">promise</span><span class="p">.</span><span class="nx">exec</span><span class="p">(</span><span class="nx">callback</span><span class="p">);</span>
|
|
<span class="p">}</span> <span class="k">else</span> <span class="p">{</span>
|
|
<span class="k">return</span> <span class="nx">promise</span><span class="p">;</span>
|
|
<span class="p">}</span>
|
|
<span class="p">};</span>
|
|
|
|
<span class="k">if</span> <span class="p">(</span><span class="nx">config</span><span class="p">.</span><span class="nx">__client__</span><span class="p">)</span> <span class="p">{</span>
|
|
<span class="nx">client</span> <span class="o">=</span> <span class="nx">config</span><span class="p">.</span><span class="nx">__client__</span><span class="p">;</span>
|
|
<span class="p">}</span> <span class="k">else</span> <span class="p">{</span></div></div></div><div class="segment"><div class="comments "><div class="wrapper"><p>Build the "client"</p></div></div><div class="code"><div class="wrapper"> <span class="kd">var</span> <span class="nx">clientName</span> <span class="o">=</span> <span class="nx">config</span><span class="p">.</span><span class="nx">client</span><span class="p">;</span>
|
|
<span class="k">if</span> <span class="p">(</span><span class="o">!</span><span class="nx">Clients</span><span class="p">[</span><span class="nx">clientName</span><span class="p">])</span> <span class="p">{</span>
|
|
<span class="k">throw</span> <span class="k">new</span> <span class="nb">Error</span><span class="p">(</span><span class="nx">clientName</span> <span class="o">+</span> <span class="s1">' is not a valid Knex client, did you misspell it?'</span><span class="p">);</span>
|
|
<span class="p">}</span>
|
|
<span class="nx">Dialect</span> <span class="o">=</span> <span class="nx">Clients</span><span class="p">[</span><span class="nx">clientName</span><span class="p">]();</span>
|
|
<span class="nx">client</span> <span class="o">=</span> <span class="k">new</span> <span class="nx">Dialect</span><span class="p">(</span><span class="nx">config</span><span class="p">);</span>
|
|
<span class="p">}</span></div></div></div><div class="segment"><div class="comments "><div class="wrapper"><p>Allow chaining methods from the root object, before
|
|
any other information is specified.</p></div></div><div class="code"><div class="wrapper"> <span class="nx">_</span><span class="p">.</span><span class="nx">each</span><span class="p">(</span><span class="nx">QueryInterface</span><span class="p">,</span> <span class="kd">function</span><span class="p">(</span><span class="nx">method</span><span class="p">)</span> <span class="p">{</span>
|
|
<span class="nx">knex</span><span class="p">[</span><span class="nx">method</span><span class="p">]</span> <span class="o">=</span> <span class="kd">function</span><span class="p">()</span> <span class="p">{</span>
|
|
<span class="kd">var</span> <span class="nx">builder</span> <span class="o">=</span> <span class="nx">knex</span><span class="p">();</span>
|
|
<span class="k">return</span> <span class="nx">builder</span><span class="p">[</span><span class="nx">method</span><span class="p">].</span><span class="nx">apply</span><span class="p">(</span><span class="nx">builder</span><span class="p">,</span> <span class="nx">arguments</span><span class="p">);</span>
|
|
<span class="p">};</span>
|
|
<span class="p">});</span>
|
|
<span class="nx">knex</span><span class="p">.</span><span class="nx">client</span> <span class="o">=</span> <span class="nx">client</span><span class="p">;</span></div></div></div><div class="segment"><div class="comments "><div class="wrapper"><p>Namespaces for additional library components.</p></div></div><div class="code"><div class="wrapper"> <span class="kd">var</span> <span class="nx">schema</span> <span class="o">=</span> <span class="nx">knex</span><span class="p">.</span><span class="nx">schema</span> <span class="o">=</span> <span class="p">{};</span>
|
|
<span class="kd">var</span> <span class="nx">migrate</span> <span class="o">=</span> <span class="nx">knex</span><span class="p">.</span><span class="nx">migrate</span> <span class="o">=</span> <span class="p">{};</span></div></div></div><div class="segment"><div class="comments "><div class="wrapper"><p>Attach each of the <code>Schema</code> "interface" methods directly onto to <code>knex.schema</code> namespace, e.g.:
|
|
<code>knex.schema.table('tableName', function() {...</code>
|
|
<code>knex.schema.createTable('tableName', function() {...</code>
|
|
<code>knex.schema.dropTableIfExists('tableName');</code></p></div></div><div class="code"><div class="wrapper"> <span class="nx">_</span><span class="p">.</span><span class="nx">each</span><span class="p">(</span><span class="nx">SchemaInterface</span><span class="p">,</span> <span class="kd">function</span><span class="p">(</span><span class="nx">key</span><span class="p">)</span> <span class="p">{</span>
|
|
<span class="nx">schema</span><span class="p">[</span><span class="nx">key</span><span class="p">]</span> <span class="o">=</span> <span class="kd">function</span><span class="p">()</span> <span class="p">{</span>
|
|
<span class="k">if</span> <span class="p">(</span><span class="o">!</span><span class="nx">client</span><span class="p">.</span><span class="nx">SchemaBuilder</span><span class="p">)</span> <span class="nx">client</span><span class="p">.</span><span class="nx">initSchema</span><span class="p">();</span>
|
|
<span class="kd">var</span> <span class="nx">builder</span> <span class="o">=</span> <span class="k">new</span> <span class="nx">client</span><span class="p">.</span><span class="nx">SchemaBuilder</span><span class="p">();</span></div></div></div><div class="segment"><div class="comments "><div class="wrapper"><p>Passthrough all "query" events to the knex object.</p></div></div><div class="code"><div class="wrapper"> <span class="nx">builder</span><span class="p">.</span><span class="nx">on</span><span class="p">(</span><span class="s1">'query'</span><span class="p">,</span> <span class="kd">function</span><span class="p">(</span><span class="nx">data</span><span class="p">)</span> <span class="p">{</span>
|
|
<span class="nx">knex</span><span class="p">.</span><span class="nx">emit</span><span class="p">(</span><span class="s1">'query'</span><span class="p">,</span> <span class="nx">data</span><span class="p">);</span>
|
|
<span class="p">});</span>
|
|
<span class="k">return</span> <span class="nx">builder</span><span class="p">[</span><span class="nx">key</span><span class="p">].</span><span class="nx">apply</span><span class="p">(</span><span class="nx">builder</span><span class="p">,</span> <span class="nx">arguments</span><span class="p">);</span>
|
|
<span class="p">};</span>
|
|
<span class="p">});</span></div></div></div><div class="segment"><div class="comments "><div class="wrapper"><p>Attach each of the <code>Migrator</code> "interface" methods directly onto to <code>knex.migrate</code> namespace, e.g.:
|
|
knex.migrate.latest().then(...
|
|
knex.migrate.currentVersion(...</p></div></div><div class="code"><div class="wrapper"> <span class="nx">_</span><span class="p">.</span><span class="nx">each</span><span class="p">(</span><span class="nx">MigrateInterface</span><span class="p">,</span> <span class="kd">function</span><span class="p">(</span><span class="nx">method</span><span class="p">)</span> <span class="p">{</span>
|
|
<span class="nx">migrate</span><span class="p">[</span><span class="nx">method</span><span class="p">]</span> <span class="o">=</span> <span class="kd">function</span><span class="p">(</span><span class="nx">config</span><span class="p">)</span> <span class="p">{</span>
|
|
<span class="k">if</span> <span class="p">(</span><span class="o">!</span><span class="nx">client</span><span class="p">.</span><span class="nx">Migrator</span><span class="p">)</span> <span class="nx">client</span><span class="p">.</span><span class="nx">initMigrator</span><span class="p">();</span>
|
|
<span class="nx">config</span><span class="p">.</span><span class="nx">knex</span> <span class="o">=</span> <span class="nx">knex</span><span class="p">;</span>
|
|
<span class="kd">var</span> <span class="nx">migrator</span> <span class="o">=</span> <span class="k">new</span> <span class="nx">client</span><span class="p">.</span><span class="nx">Migrator</span><span class="p">(</span><span class="nx">config</span><span class="p">);</span>
|
|
<span class="k">return</span> <span class="nx">migrator</span><span class="p">[</span><span class="nx">method</span><span class="p">].</span><span class="nx">apply</span><span class="p">(</span><span class="nx">migrator</span><span class="p">,</span> <span class="nx">arguments</span><span class="p">);</span>
|
|
<span class="p">};</span>
|
|
<span class="p">});</span></div></div></div><div class="segment"><div class="comments "><div class="wrapper"><p>Add a few additional misc utils.</p></div></div><div class="code"><div class="wrapper"> <span class="nx">knex</span><span class="p">.</span><span class="nx">utils</span> <span class="o">=</span> <span class="nx">_</span><span class="p">.</span><span class="nx">extend</span><span class="p">({},</span> <span class="nx">require</span><span class="p">(</span><span class="s1">'./lib/utils'</span><span class="p">));</span>
|
|
|
|
<span class="k">return</span> <span class="nx">knex</span><span class="p">;</span>
|
|
<span class="p">};</span>
|
|
|
|
<span class="nx">module</span><span class="p">.</span><span class="nx">exports</span> <span class="o">=</span> <span class="nx">Knex</span><span class="p">;</span></div></div></div></div></body></html> |