Index: frontend/node_modules/commondir/LICENSE
===================================================================
--- frontend/node_modules/commondir/LICENSE	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/commondir/LICENSE	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,24 @@
+The MIT License
+
+Copyright (c) 2013 James Halliday (mail@substack.net)
+
+Permission is hereby granted, free of charge, 
+to any person obtaining a copy of this software and 
+associated documentation files (the "Software"), to 
+deal in the Software without restriction, including 
+without limitation the rights to use, copy, modify, 
+merge, publish, distribute, sublicense, and/or sell 
+copies of the Software, and to permit persons to whom 
+the Software is furnished to do so, 
+subject to the following conditions:
+
+The above copyright notice and this permission notice 
+shall be included in all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, 
+EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES 
+OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. 
+IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR 
+ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, 
+TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE 
+SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
Index: frontend/node_modules/commondir/example/dir.js
===================================================================
--- frontend/node_modules/commondir/example/dir.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/commondir/example/dir.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,3 @@
+var commondir = require('../');
+var dir = commondir(process.argv.slice(2));
+console.log(dir);
Index: frontend/node_modules/commondir/index.js
===================================================================
--- frontend/node_modules/commondir/index.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/commondir/index.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,29 @@
+var path = require('path');
+
+module.exports = function (basedir, relfiles) {
+    if (relfiles) {
+        var files = relfiles.map(function (r) {
+            return path.resolve(basedir, r);
+        });
+    }
+    else {
+        var files = basedir;
+    }
+    
+    var res = files.slice(1).reduce(function (ps, file) {
+        if (!file.match(/^([A-Za-z]:)?\/|\\/)) {
+            throw new Error('relative path without a basedir');
+        }
+        
+        var xs = file.split(/\/+|\\+/);
+        for (
+            var i = 0;
+            ps[i] === xs[i] && i < Math.min(ps.length, xs.length);
+            i++
+        );
+        return ps.slice(0, i);
+    }, files[0].split(/\/+|\\+/));
+    
+    // Windows correctly handles paths with forward-slashes
+    return res.length > 1 ? res.join('/') : '/'
+};
Index: frontend/node_modules/commondir/package.json
===================================================================
--- frontend/node_modules/commondir/package.json	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/commondir/package.json	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,34 @@
+{
+  "name": "commondir",
+  "version": "1.0.1",
+  "description": "compute the closest common parent for file paths",
+  "main": "index.js",
+  "dependencies": {},
+  "devDependencies": {
+    "tape": "^3.5.0"
+  },
+  "scripts": {
+    "test": "tape test/*.js"
+  },
+  "repository": {
+    "type": "git",
+    "url": "http://github.com/substack/node-commondir.git"
+  },
+  "keywords": [
+    "common",
+    "path",
+    "directory",
+    "file",
+    "parent",
+    "root"
+  ],
+  "author": {
+    "name": "James Halliday",
+    "email": "mail@substack.net",
+    "url": "http://substack.net"
+  },
+  "license": "MIT",
+  "engine": {
+    "node": ">=0.4"
+  }
+}
Index: frontend/node_modules/commondir/readme.markdown
===================================================================
--- frontend/node_modules/commondir/readme.markdown	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/commondir/readme.markdown	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,48 @@
+# commondir
+
+compute the closest common parent directory among an array of directories
+
+# example
+
+``` js
+var commondir = require('commondir');
+var dir = commondir(process.argv.slice(2))
+console.log(dir);
+```
+
+output:
+
+```
+$ node dir.js /x/y/z /x/y /x/y/w/q
+/x/y
+$ node ../baz ../../foo/quux ./bizzy
+/foo
+```
+
+# methods
+
+``` js
+var commondir = require('commondir');
+```
+
+## commondir(absolutePaths)
+
+Compute the closest common parent directory for an array `absolutePaths`.
+
+## commondir(basedir, relativePaths)
+
+Compute the closest common parent directory for an array `relativePaths` which
+will be resolved for each `dir` in `relativePaths` according to:
+`path.resolve(basedir, dir)`.
+
+# install
+
+With [npm](https://npmjs.org) do:
+
+```
+npm install commondir
+```
+
+# license
+
+MIT
Index: frontend/node_modules/commondir/test/dirs.js
===================================================================
--- frontend/node_modules/commondir/test/dirs.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/commondir/test/dirs.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,55 @@
+var test = require('tape');
+var commondir = require('../');
+
+test('common', function (t) {
+    t.equal(
+        commondir([ '/foo', '//foo/bar', '/foo//bar/baz' ]),
+        '/foo'
+    );
+    t.equal(
+        commondir([ '/a/b/c', '/a/b', '/a/b/c/d/e' ]),
+        '/a/b'
+    );
+    t.equal(
+        commondir([ '/x/y/z/w', '/xy/z', '/x/y/z' ]),
+        '/'
+    );
+    t.equal(
+        commondir([ 'X:\\foo', 'X:\\\\foo\\bar', 'X://foo/bar/baz' ]),
+        'X:/foo'
+    );
+    t.equal(
+        commondir([ 'X:\\a\\b\\c', 'X:\\a\\b', 'X:\\a\\b\\c\\d\\e' ]),
+        'X:/a/b'
+    );
+    t.equal(
+        commondir([ 'X:\\x\\y\\z\\w', '\\\\xy\\z', '\\x\\y\\z' ]),
+        '/'
+    );
+    t.throws(function () {
+        commondir([ '/x/y/z/w', 'qrs', '/x/y/z' ]);
+    });
+    t.end();
+});
+
+test('base', function (t) {
+    t.equal(
+        commondir('/foo/bar', [ 'baz', './quux', '../bar/bazzy' ]),
+        '/foo/bar'
+    );
+    t.equal(
+        commondir('/a/b', [ 'c', '../b/.', '../../a/b/e' ]),
+        '/a/b'
+    );
+    t.equal(
+        commondir('/a/b/c', [ '..', '../d', '../../a/z/e' ]),
+        '/a'
+    );
+    t.equal(
+        commondir('/foo/bar', [ 'baz', '.\\quux', '..\\bar\\bazzy' ]),
+        '/foo/bar'
+    );
+    // Tests including X:\ basedirs must wait until path.resolve supports
+    // Windows-style paths, starting in Node.js v0.5.X
+    t.end();
+});
