var mkdirp = require('mkdirp');</p></div></div><divclass="code"><divclass="wrapper"><spanclass="kd">var</span><spanclass="nx">when</span><spanclass="o">=</span><spanclass="nx">require</span><spanclass="p">(</span><spanclass="s1">'when'</span><spanclass="p">);</span>
<spanclass="kd">var</span><spanclass="nx">sequence</span><spanclass="o">=</span><spanclass="nx">require</span><spanclass="p">(</span><spanclass="s1">'when/sequence'</span><spanclass="p">);</span></div></div></div><divclass="segment"><divclass="comments"><divclass="wrapper"><p>The new migration we're performing.
Takes a <code>config</code> object, which has the name
of the current migration (<code>main</code> if not otherwise specified)</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, by creating the proper migration
file or database table, depending on the migration config settings.</p></div></div><divclass="code"><divclass="wrapper"><spanclass="nx">initialize</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>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>Runs a specific migration, based on the migration version number.</p></div></div><divclass="code"><divclass="wrapper"><spanclass="nx">run</span><spanclass="o">:</span><spanclass="kd">function</span><spanclass="p">(</span><spanclass="nx">version</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>Migrate "up" to a specific migration id
otherwise, migrates all migrations which have
not been run yet.</p></div></div><divclass="code"><divclass="wrapper"><spanclass="nx">up</span><spanclass="o">:</span><spanclass="kd">function</span><spanclass="p">(</span><spanclass="nx">version</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>Migrate "down" to a specific migration id,
otherwise rolls back the last migration "batch".</p></div></div><divclass="code"><divclass="wrapper"><spanclass="nx">down</span><spanclass="o">:</span><spanclass="kd">function</span><spanclass="p">(</span><spanclass="nx">version</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="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>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">create</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="p">},</span></div></div></div><divclass="segment"><divclass="comments"><divclass="wrapper"><p>Lists all available migration versions, as an 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, and 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="nx">config</span><spanclass="p">)</span><spanclass="p">{</span>
<spanclass="p">},</span></div></div></div><divclass="segment"><divclass="comments"><divclass="wrapper"><p>Shared between the <code>up</code> and <code>down</code> migrations, this
helps to create the batch of migrations that need to be run.</p></div></div><divclass="code"><divclass="wrapper"><spanclass="nx">_direction</span><spanclass="o">:</span><spanclass="kd">function</span><spanclass="p">(</span><spanclass="nx">direction</span><spanclass="p">,</span><spanclass="nx">version</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 current migration.</p></div></div><divclass="code"><divclass="wrapper"><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>Get all of the migrations that need to be run in the current batch.</p></div></div><divclass="code"><divclass="wrapper"><spanclass="nx">getMigrations</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">direction</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>Check if the current version of the query has run.</p></div></div><divclass="code"><divclass="wrapper"><spanclass="nx">hasRun</span><spanclass="o">:</span><spanclass="kd">function</span><spanclass="p">(</span><spanclass="nx">versions</span><spanclass="p">,</span><spanclass="nx">check</span><spanclass="p">)</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="nx">parseVersion</span><spanclass="o">:</span><spanclass="kd">function</span><spanclass="p">(</span><spanclass="nx">version</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 version number provided'</span><spanclass="p">);</span>
<spanclass="p">};</span></div></div></div><divclass="segment"><divclass="comments"><divclass="wrapper"><p>Get a date object in this form</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>