<spanclass="kd">var</span><spanclass="nx">Promise</span><spanclass="o">=</span><spanclass="nx">require</span><spanclass="p">(</span><spanclass="s1">'./promise'</span><spanclass="p">).</span><spanclass="nx">Promise</span><spanclass="p">;</span></div></div></div><divclass="segment"><divclass="comments"><divclass="wrapper"><p>The new migration we're performing, typically called from the <code>knex.migrate</code>
interface on the main <code>knex</code> object. Passes the <code>knex</code> instance performing
the migration.</p></div></div><divclass="code"><divclass="wrapper"><spanclass="kd">var</span><spanclass="nx">Migrate</span><spanclass="o">=</span><spanclass="kd">function</span><spanclass="p">(</span><spanclass="nx">instance</span><spanclass="p">)</span><spanclass="p">{</span>
<spanclass="nx">Migrate</span><spanclass="p">.</span><spanclass="nx">prototype</span><spanclass="o">=</span><spanclass="p">{</span></div></div></div><divclass="segment"><divclass="comments"><divclass="wrapper"><p>Initializes the migration, taking an optional <code>config</code> object,
for things like the <code>tableName</code>.</p></div></div><divclass="code"><divclass="wrapper"><spanclass="nx">init</span><spanclass="o">:</span><spanclass="kd">function</span><spanclass="p">(</span><spanclass="nx">config</span><spanclass="p">)</span><spanclass="p">{</span>
<spanclass="p">},</span></div></div></div><divclass="segment"><divclass="comments"><divclass="wrapper"><p>Ensures that the proper table has been created,
dependent on the migration config settings.</p></div></div><divclass="code"><divclass="wrapper"><spanclass="nx">ensureTable</span><spanclass="o">:</span><spanclass="kd">function</span><spanclass="p">(</span><spanclass="nx">config</span><spanclass="p">)</span><spanclass="p">{</span>
<spanclass="p">},</span></div></div></div><divclass="segment"><divclass="comments"><divclass="wrapper"><p>Ensures a folder for the migrations exist, dependent on the
<spanclass="p">},</span></div></div></div><divclass="segment"><divclass="comments"><divclass="wrapper"><p>Create the migration table, if it doesn't already exist.</p></div></div><divclass="code"><divclass="wrapper"><spanclass="nx">createMigrationTable</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>Migrates to the latest configuration.</p></div></div><divclass="code"><divclass="wrapper"><spanclass="nx">latest</span><spanclass="o">:</span><spanclass="kd">function</span><spanclass="p">(</span><spanclass="nx">config</span><spanclass="p">)</span><spanclass="p">{</span>
<spanclass="p">},</span></div></div></div><divclass="segment"><divclass="comments"><divclass="wrapper"><p>Rollback the last "batch" of migrations that were run.</p></div></div><divclass="code"><divclass="wrapper"><spanclass="nx">rollback</span><spanclass="o">:</span><spanclass="kd">function</span><spanclass="p">(</span><spanclass="nx">config</span><spanclass="p">)</span><spanclass="p">{</span>
<spanclass="p">},</span></div></div></div><divclass="segment"><divclass="comments"><divclass="wrapper"><p>Run a batch of current migrations, in sequence.</p></div></div><divclass="code"><divclass="wrapper"><spanclass="nx">runBatch</span><spanclass="o">:</span><spanclass="kd">function</span><spanclass="p">(</span><spanclass="nx">migrations</span><spanclass="p">,</span><spanclass="nx">direction</span><spanclass="p">)</span><spanclass="p">{</span>
<spanclass="p">},</span></div></div></div><divclass="segment"><divclass="comments"><divclass="wrapper"><p>Retrieves and returns the current migration version
we're on, as a promise. If there aren't any migrations run yet,
return "none" as the value for the <code>currentVersion</code>.</p></div></div><divclass="code"><divclass="wrapper"><spanclass="nx">currentVersion</span><spanclass="o">:</span><spanclass="kd">function</span><spanclass="p">(</span><spanclass="nx">config</span><spanclass="p">)</span><spanclass="p">{</span>
<spanclass="p">},</span></div></div></div><divclass="segment"><divclass="comments"><divclass="wrapper"><p>Creates a new migration, with a given name.</p></div></div><divclass="code"><divclass="wrapper"><spanclass="nx">make</span><spanclass="o">:</span><spanclass="kd">function</span><spanclass="p">(</span><spanclass="nx">name</span><spanclass="p">,</span><spanclass="nx">config</span><spanclass="p">)</span><spanclass="p">{</span>
<spanclass="k">if</span><spanclass="p">(</span><spanclass="o">!</span><spanclass="nx">name</span><spanclass="p">)</span><spanclass="nx">Promise</span><spanclass="p">.</span><spanclass="nx">rejected</span><spanclass="p">(</span><spanclass="k">new</span><spanclass="nb">Error</span><spanclass="p">(</span><spanclass="s1">'A name must be specified for the generated migration'</span><spanclass="p">));</span>
<spanclass="p">},</span></div></div></div><divclass="segment"><divclass="comments"><divclass="wrapper"><p>Lists all available migration versions, as a sorted array.</p></div></div><divclass="code"><divclass="wrapper"><spanclass="nx">listAll</span><spanclass="o">:</span><spanclass="kd">function</span><spanclass="p">(</span><spanclass="nx">config</span><spanclass="p">)</span><spanclass="p">{</span>
<spanclass="p">},</span></div></div></div><divclass="segment"><divclass="comments"><divclass="wrapper"><p>Lists all migrations that have been completed for the current db, as an array.</p></div></div><divclass="code"><divclass="wrapper"><spanclass="nx">listCompleted</span><spanclass="o">:</span><spanclass="kd">function</span><spanclass="p">(</span><spanclass="nx">config</span><spanclass="p">)</span><spanclass="p">{</span>
<spanclass="p">},</span></div></div></div><divclass="segment"><divclass="comments"><divclass="wrapper"><p>Gets the migration list from the specified migration directory,
as well as the list of completed migrations to check what
should be run.</p></div></div><divclass="code"><divclass="wrapper"><spanclass="nx">migrationData</span><spanclass="o">:</span><spanclass="kd">function</span><spanclass="p">()</span><spanclass="p">{</span>
<spanclass="p">},</span></div></div></div><divclass="segment"><divclass="comments"><divclass="wrapper"><p>Generates the stub template for the current migration, returning a compiled template.</p></div></div><divclass="code"><divclass="wrapper"><spanclass="nx">generateStubTemplate</span><spanclass="o">:</span><spanclass="kd">function</span><spanclass="p">()</span><spanclass="p">{</span>
<spanclass="p">},</span></div></div></div><divclass="segment"><divclass="comments"><divclass="wrapper"><p>Write a new migration to disk, using the config and generated filename,
passing any <code>variables</code> given in the config to the template.</p></div></div><divclass="code"><divclass="wrapper"><spanclass="nx">writeNewMigration</span><spanclass="o">:</span><spanclass="kd">function</span><spanclass="p">(</span><spanclass="nx">name</span><spanclass="p">)</span><spanclass="p">{</span>
<spanclass="p">},</span></div></div></div><divclass="segment"><divclass="comments"><divclass="wrapper"><p>Get the last batch of migrations, by name, ordered by insert id
in reverse order.</p></div></div><divclass="code"><divclass="wrapper"><spanclass="nx">getLastBatch</span><spanclass="o">:</span><spanclass="kd">function</span><spanclass="p">()</span><spanclass="p">{</span>
<spanclass="p">},</span></div></div></div><divclass="segment"><divclass="comments"><divclass="wrapper"><p>Returns the latest batch number.</p></div></div><divclass="code"><divclass="wrapper"><spanclass="nx">latestBatchNumber</span><spanclass="o">:</span><spanclass="kd">function</span><spanclass="p">()</span><spanclass="p">{</span>
<spanclass="p">.</span><spanclass="nx">max</span><spanclass="p">(</span><spanclass="s1">'batch as batchNo'</span><spanclass="p">).</span><spanclass="nx">then</span><spanclass="p">(</span><spanclass="kd">function</span><spanclass="p">(</span><spanclass="nx">obj</span><spanclass="p">)</span><spanclass="p">{</span>
<spanclass="p">},</span></div></div></div><divclass="segment"><divclass="comments"><divclass="wrapper"><p>Runs a batch of <code>migrations</code> in a specified <code>direction</code>,
saving the appropriate database information as the migrations are run.</p></div></div><divclass="code"><divclass="wrapper"><spanclass="nx">waterfallBatch</span><spanclass="o">:</span><spanclass="kd">function</span><spanclass="p">(</span><spanclass="nx">migrations</span><spanclass="p">,</span><spanclass="nx">direction</span><spanclass="p">)</span><spanclass="p">{</span>
<spanclass="nx">migration</span><spanclass="o">=</span><spanclass="nx">migration</span><spanclass="p">[</span><spanclass="mi">1</span><spanclass="p">];</span></div></div></div><divclass="segment"><divclass="comments"><divclass="wrapper"><p>We're going to run each of the migrations in the current "up"</p></div></div><divclass="code"><divclass="wrapper"><spanclass="nx">current</span><spanclass="o">=</span><spanclass="nx">current</span><spanclass="p">.</span><spanclass="nx">then</span><spanclass="p">(</span><spanclass="kd">function</span><spanclass="p">()</span><spanclass="p">{</span>
<spanclass="p">};</span></div></div></div><divclass="segment"><divclass="comments"><divclass="wrapper"><p>Validates some migrations by requiring and checking for an <code>up</code> and <code>down</code> function,
returning an array with the <code>item</code> and <code>migration</code> require.</p></div></div><divclass="code"><divclass="wrapper"><spanclass="kd">function</span><spanclass="nx">validateMigrationStructure</span><spanclass="p">(</span><spanclass="nx">migrator</span><spanclass="p">)</span><spanclass="p">{</span>
<spanclass="k">throw</span><spanclass="k">new</span><spanclass="nb">Error</span><spanclass="p">(</span><spanclass="s1">'Invalid migration: '</span><spanclass="o">+</span><spanclass="nx">item</span><spanclass="o">+</span><spanclass="s1">' must have both an up and down function'</span><spanclass="p">);</span>
<spanclass="p">}</span></div></div></div><divclass="segment"><divclass="comments"><divclass="wrapper"><p>Validates that migrations are present in the appropriate directories.</p></div></div><divclass="code"><divclass="wrapper"><spanclass="kd">function</span><spanclass="nx">validateMigrationList</span><spanclass="p">(</span><spanclass="nx">all</span><spanclass="p">,</span><spanclass="nx">completed</span><spanclass="p">)</span><spanclass="p">{</span>
<spanclass="s1">'The migration directory is corrupt, the following files are missing: '</span><spanclass="o">+</span><spanclass="nx">diff</span><spanclass="p">.</span><spanclass="nx">join</span><spanclass="p">(</span><spanclass="s1">', '</span><spanclass="p">)</span>
<spanclass="p">}</span></div></div></div><divclass="segment"><divclass="comments"><divclass="wrapper"><p>Gets the current migration.</p></div></div><divclass="code"><divclass="wrapper"><spanclass="kd">var</span><spanclass="nx">getMigration</span><spanclass="o">=</span><spanclass="kd">function</span><spanclass="p">(</span><spanclass="nx">all</span><spanclass="p">,</span><spanclass="nx">version</span><spanclass="p">,</span><spanclass="nx">config</span><spanclass="p">)</span><spanclass="p">{</span>
<spanclass="k">if</span><spanclass="p">(</span><spanclass="o">!</span><spanclass="nx">found</span><spanclass="p">)</span><spanclass="k">throw</span><spanclass="k">new</span><spanclass="nb">Error</span><spanclass="p">(</span><spanclass="s1">'Unable to locate the specified migration '</span><spanclass="o">+</span><spanclass="nx">version</span><spanclass="p">);</span>
<spanclass="p">};</span></div></div></div><divclass="segment"><divclass="comments"><divclass="wrapper"><p>Parse the version, which really only needs to be the
timestamp of the migration we wish to migrate to.</p></div></div><divclass="code"><divclass="wrapper"><spanclass="kd">var</span><spanclass="nx">parseVersion</span><spanclass="o">=</span><spanclass="kd">function</span><spanclass="p">(</span><spanclass="nx">version</span><spanclass="p">)</span><spanclass="p">{</span>
<spanclass="p">};</span></div></div></div><divclass="segment"><divclass="comments"><divclass="wrapper"><p>Get a date object in the correct format, without requiring
a full out library like "moment.js".</p></div></div><divclass="code"><divclass="wrapper"><spanclass="kd">var</span><spanclass="nx">yyyymmddhhmmss</span><spanclass="o">=</span><spanclass="kd">function</span><spanclass="p">()</span><spanclass="p">{</span>
<spanclass="p">};</span></div></div></div><divclass="segment"><divclass="comments"><divclass="wrapper"><p>Ensure that we have 2 places for each of the date segments</p></div></div><divclass="code"><divclass="wrapper"><spanclass="kd">var</span><spanclass="nx">padDate</span><spanclass="o">=</span><spanclass="kd">function</span><spanclass="p">(</span><spanclass="nx">segment</span><spanclass="p">)</span><spanclass="p">{</span>
<spanclass="p">};</span></div></div></div><divclass="segment"><divclass="comments"><divclass="wrapper"><p>Dasherize the string.</p></div></div><divclass="code"><divclass="wrapper"><spanclass="kd">var</span><spanclass="nx">dasherize</span><spanclass="o">=</span><spanclass="kd">function</span><spanclass="p">(</span><spanclass="nx">str</span><spanclass="p">)</span><spanclass="p">{</span>