aboutsummaryrefslogtreecommitdiff
path: root/node_modules/upath
diff options
context:
space:
mode:
authorDimitri Staessens <dimitri@ouroboros.rocks>2019-10-06 21:37:45 +0200
committerDimitri Staessens <dimitri@ouroboros.rocks>2019-10-06 21:37:45 +0200
commit3c51c3be85bb0d1bdb87ea0d6632f1c256912f27 (patch)
treec7ccc8279b12c4f7bdbbb4270d617e48f51722e4 /node_modules/upath
parent412c104bebc507bea9c94fd53b5bdc4b64cbfe31 (diff)
downloadwebsite-3c51c3be85bb0d1bdb87ea0d6632f1c256912f27.tar.gz
website-3c51c3be85bb0d1bdb87ea0d6632f1c256912f27.zip
build: Add some required modules for node
Diffstat (limited to 'node_modules/upath')
-rwxr-xr-xnode_modules/upath/LICENSE22
-rw-r--r--node_modules/upath/build/code/upath.js171
-rw-r--r--node_modules/upath/package.json88
-rw-r--r--node_modules/upath/readme.md335
-rw-r--r--node_modules/upath/upath.d.ts239
5 files changed, 855 insertions, 0 deletions
diff --git a/node_modules/upath/LICENSE b/node_modules/upath/LICENSE
new file mode 100755
index 0000000..1ce5a29
--- /dev/null
+++ b/node_modules/upath/LICENSE
@@ -0,0 +1,22 @@
+Copyright(c) 2014-2017 Angelos Pikoulas (agelos.pikoulas@gmail.com)
+
+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.
diff --git a/node_modules/upath/build/code/upath.js b/node_modules/upath/build/code/upath.js
new file mode 100644
index 0000000..2105409
--- /dev/null
+++ b/node_modules/upath/build/code/upath.js
@@ -0,0 +1,171 @@
+/**
+* upath http://github.com/anodynos/upath/
+*
+* A proxy to `path`, replacing `\` with `/` for all results & new methods to normalize & join keeping leading `./` and add, change, default, trim file extensions.
+* Version 1.1.0 - Compiled on 2018-05-15 22:18:40
+* Repository git://github.com/anodynos/upath
+* Copyright(c) 2018 Angelos Pikoulas <agelos.pikoulas@gmail.com>
+* License MIT
+*/
+
+// Generated by uRequire v0.7.0-beta.33 target: 'lib' template: 'nodejs'
+
+
+var VERSION = '1.1.0'; // injected by urequire-rc-inject-version
+
+var extraFn, extraFunctions, isFunction, isString, isValidExt, name, path, propName, propValue, toUnix, upath, slice = [].slice, indexOf = [].indexOf || function (item) {
+ for (var i = 0, l = this.length; i < l; i++) {
+ if (i in this && this[i] === item)
+ return i;
+ }
+ return -1;
+ }, hasProp = {}.hasOwnProperty;
+path = require("path");
+isFunction = function (val) {
+ return val instanceof Function;
+};
+isString = function (val) {
+ return typeof val === "string" || !!val && typeof val === "object" && Object.prototype.toString.call(val) === "[object String]";
+};
+upath = exports;
+upath.VERSION = typeof VERSION !== "undefined" && VERSION !== null ? VERSION : "NO-VERSION";
+toUnix = function (p) {
+ var double;
+ p = p.replace(/\\/g, "/");
+ double = /\/\//;
+ while (p.match(double)) {
+ p = p.replace(double, "/");
+ }
+ return p;
+};
+for (propName in path) {
+ propValue = path[propName];
+ if (isFunction(propValue)) {
+ upath[propName] = function (propName) {
+ return function () {
+ var args, result;
+ args = 1 <= arguments.length ? slice.call(arguments, 0) : [];
+ args = args.map(function (p) {
+ if (isString(p)) {
+ return toUnix(p);
+ } else {
+ return p;
+ }
+ });
+ result = path[propName].apply(path, args);
+ if (isString(result)) {
+ return toUnix(result);
+ } else {
+ return result;
+ }
+ };
+ }(propName);
+ } else {
+ upath[propName] = propValue;
+ }
+}
+upath.sep = "/";
+extraFunctions = {
+ toUnix: toUnix,
+ normalizeSafe: function (p) {
+ p = toUnix(p);
+ if (p.startsWith("./")) {
+ if (p.startsWith("./..") || p === "./") {
+ return upath.normalize(p);
+ } else {
+ return "./" + upath.normalize(p);
+ }
+ } else {
+ return upath.normalize(p);
+ }
+ },
+ normalizeTrim: function (p) {
+ p = upath.normalizeSafe(p);
+ if (p.endsWith("/")) {
+ return p.slice(0, +(p.length - 2) + 1 || 9000000000);
+ } else {
+ return p;
+ }
+ },
+ joinSafe: function () {
+ var p, result;
+ p = 1 <= arguments.length ? slice.call(arguments, 0) : [];
+ result = upath.join.apply(null, p);
+ if (p[0].startsWith("./") && !result.startsWith("./")) {
+ result = "./" + result;
+ }
+ return result;
+ },
+ addExt: function (file, ext) {
+ if (!ext) {
+ return file;
+ } else {
+ if (ext[0] !== ".") {
+ ext = "." + ext;
+ }
+ return file + (file.endsWith(ext) ? "" : ext);
+ }
+ },
+ trimExt: function (filename, ignoreExts, maxSize) {
+ var oldExt;
+ if (maxSize == null) {
+ maxSize = 7;
+ }
+ oldExt = upath.extname(filename);
+ if (isValidExt(oldExt, ignoreExts, maxSize)) {
+ return filename.slice(0, +(filename.length - oldExt.length - 1) + 1 || 9000000000);
+ } else {
+ return filename;
+ }
+ },
+ removeExt: function (filename, ext) {
+ if (!ext) {
+ return filename;
+ } else {
+ ext = ext[0] === "." ? ext : "." + ext;
+ if (upath.extname(filename) === ext) {
+ return upath.trimExt(filename);
+ } else {
+ return filename;
+ }
+ }
+ },
+ changeExt: function (filename, ext, ignoreExts, maxSize) {
+ if (maxSize == null) {
+ maxSize = 7;
+ }
+ return upath.trimExt(filename, ignoreExts, maxSize) + (!ext ? "" : ext[0] === "." ? ext : "." + ext);
+ },
+ defaultExt: function (filename, ext, ignoreExts, maxSize) {
+ var oldExt;
+ if (maxSize == null) {
+ maxSize = 7;
+ }
+ oldExt = upath.extname(filename);
+ if (isValidExt(oldExt, ignoreExts, maxSize)) {
+ return filename;
+ } else {
+ return upath.addExt(filename, ext);
+ }
+ }
+};
+isValidExt = function (ext, ignoreExts, maxSize) {
+ if (ignoreExts == null) {
+ ignoreExts = [];
+ }
+ return ext && ext.length <= maxSize && indexOf.call(ignoreExts.map(function (e) {
+ return (e && e[0] !== "." ? "." : "") + e;
+ }), ext) < 0;
+};
+for (name in extraFunctions) {
+ if (!hasProp.call(extraFunctions, name))
+ continue;
+ extraFn = extraFunctions[name];
+ if (upath[name] !== void 0) {
+ throw new Error("path." + name + " already exists.");
+ } else {
+ upath[name] = extraFn;
+ }
+}
+
+; \ No newline at end of file
diff --git a/node_modules/upath/package.json b/node_modules/upath/package.json
new file mode 100644
index 0000000..646fb2c
--- /dev/null
+++ b/node_modules/upath/package.json
@@ -0,0 +1,88 @@
+{
+ "_args": [
+ [
+ "upath@1.1.0",
+ "/home/dstaesse/git/website"
+ ]
+ ],
+ "_development": true,
+ "_from": "upath@1.1.0",
+ "_id": "upath@1.1.0",
+ "_inBundle": false,
+ "_integrity": "sha512-bzpH/oBhoS/QI/YtbkqCg6VEiPYjSZtrHQM6/QnJS6OL9pKUFLqb3aFh4Scvwm45+7iAgiMkLhSbaZxUqmrprw==",
+ "_location": "/upath",
+ "_phantomChildren": {},
+ "_requested": {
+ "type": "version",
+ "registry": true,
+ "raw": "upath@1.1.0",
+ "name": "upath",
+ "escapedName": "upath",
+ "rawSpec": "1.1.0",
+ "saveSpec": null,
+ "fetchSpec": "1.1.0"
+ },
+ "_requiredBy": [
+ "/chokidar"
+ ],
+ "_resolved": "https://registry.npmjs.org/upath/-/upath-1.1.0.tgz",
+ "_spec": "1.1.0",
+ "_where": "/home/dstaesse/git/website",
+ "author": {
+ "name": "Angelos Pikoulas",
+ "email": "agelos.pikoulas@gmail.com"
+ },
+ "bugs": {
+ "url": "http://github.com/anodynos/upath/issues",
+ "email": "agelos.pikoulas@gmail.com"
+ },
+ "description": "A proxy to `path`, replacing `\\` with `/` for all results & new methods to normalize & join keeping leading `./` and add, change, default, trim file extensions.",
+ "devDependencies": {
+ "chai": "~4.0.2",
+ "coffee-script": "1.12.6",
+ "grunt": "0.4.5",
+ "grunt-contrib-watch": "~1.0.0",
+ "grunt-urequire": "0.7.x",
+ "lodash": "^4.17.4",
+ "mocha": "~3.4.2",
+ "uberscore": "0.0.19",
+ "underscore.string": "~3.3.4",
+ "urequire": "0.7.0-beta.33",
+ "urequire-ab-specrunner": "^0.2.5",
+ "urequire-rc-inject-version": "^0.1.6"
+ },
+ "directories": {
+ "doc": "./doc",
+ "dist": "./build"
+ },
+ "engines": {
+ "node": ">=4"
+ },
+ "homepage": "http://github.com/anodynos/upath/",
+ "keywords": [
+ "path",
+ "unix",
+ "windows",
+ "extension",
+ "file extension",
+ "replace extension",
+ "change extension",
+ "trim extension",
+ "add extension",
+ "default extension"
+ ],
+ "license": "MIT",
+ "main": "./build/code/upath.js",
+ "name": "upath",
+ "preferGlobal": false,
+ "repository": {
+ "type": "git",
+ "url": "git://github.com/anodynos/upath.git"
+ },
+ "scripts": {
+ "build": "grunt lib",
+ "test": "grunt"
+ },
+ "types": "./upath.d.ts",
+ "version": "1.1.0"
+}
diff --git a/node_modules/upath/readme.md b/node_modules/upath/readme.md
new file mode 100644
index 0000000..ed9539c
--- /dev/null
+++ b/node_modules/upath/readme.md
@@ -0,0 +1,335 @@
+# upath v1.1.0
+
+[![Build Status](https://travis-ci.org/anodynos/upath.svg?branch=master)](https://travis-ci.org/anodynos/upath)
+[![Up to date Status](https://david-dm.org/anodynos/upath.png)](https://david-dm.org/anodynos/upath)
+
+A drop-in replacement / proxy to nodejs's `path` that:
+
+ * Replaces the windows `\` with the unix `/` in all string params & results. This has significant positives - see below.
+
+ * Adds **filename extensions** functions `addExt`, `trimExt`, `removeExt`, `changeExt`, and `defaultExt`.
+
+ * Add a `normalizeSafe` function to preserve any meaningful leading `./` & a `normalizeTrim` which additionally trims any useless ending `/`.
+
+ * Plus a helper `toUnix` that simply converts `\` to `/` and consolidates duplicates.
+
+**Useful note: these docs are actually auto generated from [specs](https://github.com/anodynos/upath/blob/master/source/spec/upath-spec.coffee), running on Linux.**
+
+Notes:
+
+ * `upath.sep` is set to `'/'` for seamless replacement (as of 1.0.3).
+
+ * upath has no runtime dependencies, except built-in `path` (as of 1.0.4)
+
+ * travis-ci tested in node versions 4 to 10
+
+## Why ?
+
+Normal `path` doesn't convert paths to a unified format (ie `/`) before calculating paths (`normalize`, `join`), which can lead to numerous problems.
+Also path joining, normalization etc on the two formats is not consistent, depending on where it runs. Running `path` on Windows yields different results than when it runs on Linux / Mac.
+
+In general, if you code your paths logic while developing on Unix/Mac and it runs on Windows, you may run into problems when using `path`.
+
+Note that using **Unix `/` on Windows** works perfectly inside nodejs (and other languages), so there's no reason to stick to the Windows legacy at all.
+
+##### Examples / specs
+
+
+Check out the different (improved) behavior to vanilla `path`:
+
+ `upath.normalize(path)` --returns-->
+
+ ✓ `'c:/windows/nodejs/path'` ---> `'c:/windows/nodejs/path'` // equal to `path.normalize()`
+ ✓ `'c:/windows/../nodejs/path'` ---> `'c:/nodejs/path'` // equal to `path.normalize()`
+ ✓ `'c:\\windows\\nodejs\\path'` ---> `'c:/windows/nodejs/path'` // `path.normalize()` gives `'c:\windows\nodejs\path'`
+ ✓ `'c:\\windows\\..\\nodejs\\path'` ---> `'c:/nodejs/path'` // `path.normalize()` gives `'c:\windows\..\nodejs\path'`
+ ✓ `'//windows\\unix/mixed'` ---> `'/windows/unix/mixed'` // `path.normalize()` gives `'/windows\unix/mixed'`
+ ✓ `'\\windows//unix/mixed'` ---> `'/windows/unix/mixed'` // `path.normalize()` gives `'\windows/unix/mixed'`
+ ✓ `'////\\windows\\..\\unix/mixed/'` ---> `'/unix/mixed/'` // `path.normalize()` gives `'/\windows\..\unix/mixed/'`
+
+
+Joining paths can also be a problem:
+
+ `upath.join(paths...)` --returns-->
+
+ ✓ `'some/nodejs/deep', '../path'` ---> `'some/nodejs/path'` // equal to `path.join()`
+ ✓ `'some/nodejs\\windows', '../path'` ---> `'some/nodejs/path'` // `path.join()` gives `'some/path'`
+ ✓ `'some\\windows\\only', '..\\path'` ---> `'some/windows/path'` // `path.join()` gives `'some\windows\only/..\path'`
+
+
+Parsing with `path.parse()` should also be consistent across OSes:
+
+ `upath.parse(path)` --returns-->
+
+ ✓ `'c:\Windows\Directory\somefile.ext'` ---> `{ root: '', dir: 'c:/Windows/Directory', base: 'somefile.ext', ext: '.ext', name: 'somefile' }`
+ // `path.parse()` gives `'{ root: '', dir: '', base: 'c:\\Windows\\Directory\\somefile.ext', ext: '.ext', name: 'c:\\Windows\\Directory\\somefile' }'`
+ ✓ `'/root/of/unix/somefile.ext'` ---> `{ root: '/', dir: '/root/of/unix', base: 'somefile.ext', ext: '.ext', name: 'somefile' }` // equal to `path.parse()`
+
+
+## Added functions
+
+
+#### `upath.toUnix(path)`
+
+Just converts all `` to `/` and consolidates duplicates, without performing any normalization.
+
+##### Examples / specs
+
+ `upath.toUnix(path)` --returns-->
+
+ ✓ `'.//windows\//unix//mixed////'` ---> `'./windows/unix/mixed/'`
+ ✓ `'..///windows\..\\unix/mixed'` ---> `'../windows/../unix/mixed'`
+
+
+#### `upath.normalizeSafe(path)`
+
+Exactly like `path.normalize(path)`, but it keeps the first meaningful `./`.
+
+Note that the unix `/` is returned everywhere, so windows `\` is always converted to unix `/`.
+
+##### Examples / specs & how it differs from vanilla `path`
+
+ `upath.normalizeSafe(path)` --returns-->
+
+ ✓ `''` ---> `'.'` // equal to `path.normalize()`
+ ✓ `'.'` ---> `'.'` // equal to `path.normalize()`
+ ✓ `'./'` ---> `'./'` // equal to `path.normalize()`
+ ✓ `'.//'` ---> `'./'` // equal to `path.normalize()`
+ ✓ `'.\\'` ---> `'./'` // `path.normalize()` gives `'.\'`
+ ✓ `'.\\//'` ---> `'./'` // `path.normalize()` gives `'.\/'`
+ ✓ `'./..'` ---> `'..'` // equal to `path.normalize()`
+ ✓ `'.//..'` ---> `'..'` // equal to `path.normalize()`
+ ✓ `'./../'` ---> `'../'` // equal to `path.normalize()`
+ ✓ `'.\\..\\'` ---> `'../'` // `path.normalize()` gives `'.\..\'`
+ ✓ `'./../dep'` ---> `'../dep'` // equal to `path.normalize()`
+ ✓ `'../dep'` ---> `'../dep'` // equal to `path.normalize()`
+ ✓ `'../path/dep'` ---> `'../path/dep'` // equal to `path.normalize()`
+ ✓ `'../path/../dep'` ---> `'../dep'` // equal to `path.normalize()`
+ ✓ `'dep'` ---> `'dep'` // equal to `path.normalize()`
+ ✓ `'path//dep'` ---> `'path/dep'` // equal to `path.normalize()`
+ ✓ `'./dep'` ---> `'./dep'` // `path.normalize()` gives `'dep'`
+ ✓ `'./path/dep'` ---> `'./path/dep'` // `path.normalize()` gives `'path/dep'`
+ ✓ `'./path/../dep'` ---> `'./dep'` // `path.normalize()` gives `'dep'`
+ ✓ `'.//windows\\unix/mixed/'` ---> `'./windows/unix/mixed/'` // `path.normalize()` gives `'windows\unix/mixed/'`
+ ✓ `'..//windows\\unix/mixed'` ---> `'../windows/unix/mixed'` // `path.normalize()` gives `'../windows\unix/mixed'`
+ ✓ `'windows\\unix/mixed/'` ---> `'windows/unix/mixed/'` // `path.normalize()` gives `'windows\unix/mixed/'`
+ ✓ `'..//windows\\..\\unix/mixed'` ---> `'../unix/mixed'` // `path.normalize()` gives `'../windows\..\unix/mixed'`
+
+
+#### `upath.normalizeTrim(path)`
+
+Exactly like `path.normalizeSafe(path)`, but it trims any useless ending `/`.
+
+##### Examples / specs
+
+ `upath.normalizeTrim(path)` --returns-->
+
+ ✓ `'./'` ---> `'.'` // `upath.normalizeSafe()` gives `'./'`
+ ✓ `'./../'` ---> `'..'` // `upath.normalizeSafe()` gives `'../'`
+ ✓ `'./../dep/'` ---> `'../dep'` // `upath.normalizeSafe()` gives `'../dep/'`
+ ✓ `'path//dep\\'` ---> `'path/dep'` // `upath.normalizeSafe()` gives `'path/dep/'`
+ ✓ `'.//windows\\unix/mixed/'` ---> `'./windows/unix/mixed'` // `upath.normalizeSafe()` gives `'./windows/unix/mixed/'`
+
+
+#### `upath.joinSafe([path1][, path2][, ...])`
+
+Exactly like `path.join()`, but it keeps the first meaningful `./`.
+
+Note that the unix `/` is returned everywhere, so windows `\` is always converted to unix `/`.
+
+##### Examples / specs & how it differs from vanilla `path`
+
+ `upath.joinSafe(path)` --returns-->
+
+ ✓ `'some/nodejs/deep', '../path'` ---> `'some/nodejs/path'` // equal to `path.join()`
+ ✓ `'./some/local/unix/', '../path'` ---> `'./some/local/path'` // `path.join()` gives `'some/local/path'`
+ ✓ `'./some\\current\\mixed', '..\\path'` ---> `'./some/current/path'` // `path.join()` gives `'some\current\mixed/..\path'`
+ ✓ `'../some/relative/destination', '..\\path'` ---> `'../some/relative/path'` // `path.join()` gives `'../some/relative/destination/..\path'`
+
+
+## Added functions for *filename extension* manipulation.
+
+**Happy notes:**
+
+ In all functions you can:
+
+ * use both `.ext` & `ext` - the dot `.` on the extension is always adjusted correctly.
+
+ * omit the `ext` param (pass null/undefined/empty string) and the common sense thing will happen.
+
+ * ignore specific extensions from being considered as valid ones (eg `.min`, `.dev` `.aLongExtIsNotAnExt` etc), hence no trimming or replacement takes place on them.
+
+
+
+#### `upath.addExt(filename, [ext])`
+
+Adds `.ext` to `filename`, but only if it doesn't already have the exact extension.
+
+##### Examples / specs
+
+ `upath.addExt(filename, 'js')` --returns-->
+
+ ✓ `'myfile/addExt'` ---> `'myfile/addExt.js'`
+ ✓ `'myfile/addExt.txt'` ---> `'myfile/addExt.txt.js'`
+ ✓ `'myfile/addExt.js'` ---> `'myfile/addExt.js'`
+ ✓ `'myfile/addExt.min.'` ---> `'myfile/addExt.min..js'`
+
+
+It adds nothing if no `ext` param is passed.
+
+ `upath.addExt(filename)` --returns-->
+
+ ✓ `'myfile/addExt'` ---> `'myfile/addExt'`
+ ✓ `'myfile/addExt.txt'` ---> `'myfile/addExt.txt'`
+ ✓ `'myfile/addExt.js'` ---> `'myfile/addExt.js'`
+ ✓ `'myfile/addExt.min.'` ---> `'myfile/addExt.min.'`
+
+
+#### `upath.trimExt(filename, [ignoreExts], [maxSize=7])`
+
+Trims a filename's extension.
+
+ * Extensions are considered to be up to `maxSize` chars long, counting the dot (defaults to 7).
+
+ * An `Array` of `ignoreExts` (eg `['.min']`) prevents these from being considered as extension, thus are not trimmed.
+
+##### Examples / specs
+
+ `upath.trimExt(filename)` --returns-->
+
+ ✓ `'my/trimedExt.txt'` ---> `'my/trimedExt'`
+ ✓ `'my/trimedExt'` ---> `'my/trimedExt'`
+ ✓ `'my/trimedExt.min'` ---> `'my/trimedExt'`
+ ✓ `'my/trimedExt.min.js'` ---> `'my/trimedExt.min'`
+ ✓ `'../my/trimedExt.longExt'` ---> `'../my/trimedExt.longExt'`
+
+
+It is ignoring `.min` & `.dev` as extensions, and considers exts with up to 8 chars.
+
+ `upath.removeExt(filename, ['min', '.dev'], 8)` --returns-->
+
+ ✓ `'my/trimedExt.txt'` ---> `'my/trimedExt'`
+ ✓ `'my/trimedExt.min'` ---> `'my/trimedExt.min'`
+ ✓ `'my/trimedExt.dev'` ---> `'my/trimedExt.dev'`
+ ✓ `'../my/trimedExt.longExt'` ---> `'../my/trimedExt'`
+ ✓ `'../my/trimedExt.longRExt'` ---> `'../my/trimedExt.longRExt'`
+
+
+#### `upath.removeExt(filename, ext)`
+
+Removes the specific `ext` extension from filename, if it has it. Otherwise it leaves it as is.
+As in all upath functions, it be `.ext` or `ext`.
+
+##### Examples / specs
+
+ `upath.removeExt(filename, '.js')` --returns-->
+
+ ✓ `'removedExt.js'` ---> `'removedExt'`
+ ✓ `'removedExt.txt.js'` ---> `'removedExt.txt'`
+ ✓ `'notRemoved.txt'` ---> `'notRemoved.txt'`
+
+
+#### `upath.changeExt(filename, [ext], [ignoreExts], [maxSize=7])`
+
+Changes a filename's extension to `ext`. If it has no (valid) extension, it adds it.
+
+ * Valid extensions are considered to be up to `maxSize` chars long, counting the dot (defaults to 7).
+
+ * An `Array` of `ignoreExts` (eg `['.min']`) prevents these from being considered as extension, thus are not changed - the new extension is added instead.
+
+##### Examples / specs
+
+ `upath.changeExt(filename, '.js')` --returns-->
+
+ ✓ `'my/module.min'` ---> `'my/module.js'`
+ ✓ `'my/module.coffee'` ---> `'my/module.js'`
+ ✓ `'my/module'` ---> `'my/module.js'`
+ ✓ `'file/withDot.'` ---> `'file/withDot.js'`
+ ✓ `'file/change.longExt'` ---> `'file/change.longExt.js'`
+
+
+If no `ext` param is given, it trims the current extension (if any).
+
+ `upath.changeExt(filename)` --returns-->
+
+ ✓ `'my/module.min'` ---> `'my/module'`
+ ✓ `'my/module.coffee'` ---> `'my/module'`
+ ✓ `'my/module'` ---> `'my/module'`
+ ✓ `'file/withDot.'` ---> `'file/withDot'`
+ ✓ `'file/change.longExt'` ---> `'file/change.longExt'`
+
+
+It is ignoring `.min` & `.dev` as extensions, and considers exts with up to 8 chars.
+
+ `upath.changeExt(filename, 'js', ['min', '.dev'], 8)` --returns-->
+
+ ✓ `'my/module.coffee'` ---> `'my/module.js'`
+ ✓ `'file/notValidExt.min'` ---> `'file/notValidExt.min.js'`
+ ✓ `'file/notValidExt.dev'` ---> `'file/notValidExt.dev.js'`
+ ✓ `'file/change.longExt'` ---> `'file/change.js'`
+ ✓ `'file/change.longRExt'` ---> `'file/change.longRExt.js'`
+
+
+#### `upath.defaultExt(filename, [ext], [ignoreExts], [maxSize=7])`
+
+Adds `.ext` to `filename`, only if it doesn't already have _any_ *old* extension.
+
+ * (Old) extensions are considered to be up to `maxSize` chars long, counting the dot (defaults to 7).
+
+ * An `Array` of `ignoreExts` (eg `['.min']`) will force adding default `.ext` even if one of these is present.
+
+##### Examples / specs
+
+ `upath.defaultExt(filename, 'js')` --returns-->
+
+ ✓ `'fileWith/defaultExt'` ---> `'fileWith/defaultExt.js'`
+ ✓ `'fileWith/defaultExt.js'` ---> `'fileWith/defaultExt.js'`
+ ✓ `'fileWith/defaultExt.min'` ---> `'fileWith/defaultExt.min'`
+ ✓ `'fileWith/defaultExt.longExt'` ---> `'fileWith/defaultExt.longExt.js'`
+
+
+If no `ext` param is passed, it leaves filename intact.
+
+ `upath.defaultExt(filename)` --returns-->
+
+ ✓ `'fileWith/defaultExt'` ---> `'fileWith/defaultExt'`
+ ✓ `'fileWith/defaultExt.js'` ---> `'fileWith/defaultExt.js'`
+ ✓ `'fileWith/defaultExt.min'` ---> `'fileWith/defaultExt.min'`
+ ✓ `'fileWith/defaultExt.longExt'` ---> `'fileWith/defaultExt.longExt'`
+
+
+It is ignoring `.min` & `.dev` as extensions, and considers exts with up to 8 chars.
+
+ `upath.defaultExt(filename, 'js', ['min', '.dev'], 8)` --returns-->
+
+ ✓ `'fileWith/defaultExt'` ---> `'fileWith/defaultExt.js'`
+ ✓ `'fileWith/defaultExt.min'` ---> `'fileWith/defaultExt.min.js'`
+ ✓ `'fileWith/defaultExt.dev'` ---> `'fileWith/defaultExt.dev.js'`
+ ✓ `'fileWith/defaultExt.longExt'` ---> `'fileWith/defaultExt.longExt'`
+ ✓ `'fileWith/defaultExt.longRext'` ---> `'fileWith/defaultExt.longRext.js'`
+
+
+Copyright(c) 2014-2017 Angelos Pikoulas (agelos.pikoulas@gmail.com)
+
+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.
+
+97 passing (33ms)
diff --git a/node_modules/upath/upath.d.ts b/node_modules/upath/upath.d.ts
new file mode 100644
index 0000000..98b7c5f
--- /dev/null
+++ b/node_modules/upath/upath.d.ts
@@ -0,0 +1,239 @@
+declare module "upath" {
+
+ /**
+ * A parsed path object generated by path.parse() or consumed by path.format().
+ */
+ export interface ParsedPath {
+ /**
+ * The root of the path such as '/' or 'c:\'
+ */
+ root: string;
+ /**
+ * The full directory path such as '/home/user/dir' or 'c:\path\dir'
+ */
+ dir: string;
+ /**
+ * The file name including extension (if any) such as 'index.html'
+ */
+ base: string;
+ /**
+ * The file extension (if any) such as '.html'
+ */
+ ext: string;
+ /**
+ * The file name without extension (if any) such as 'index'
+ */
+ name: string;
+ }
+
+ /**
+ * Version of the library
+ */
+ export var VERSION: string;
+
+ /**
+ * Just converts all `to/` and consolidates duplicates, without performing any normalization.
+ *
+ * @param p string path to convert to unix.
+ */
+ export function toUnix(p: string): string;
+
+ /**
+ * Exactly like path.normalize(path), but it keeps the first meaningful ./.
+ *
+ * Note that the unix / is returned everywhere, so windows \ is always converted to unix /.
+ *
+ * @param p string path to normalize.
+ */
+ export function normalizeSafe(p: string): string;
+
+ /**
+ * Exactly like path.normalizeSafe(path), but it trims any useless ending /.
+ *
+ * @param p string path to normalize
+ */
+ export function normalizeTrim(p: string): string;
+
+ /**
+ * Exactly like path.join(), but it keeps the first meaningful ./.
+ *
+ * Note that the unix / is returned everywhere, so windows \ is always converted to unix /.
+ *
+ * @param paths string paths to join
+ */
+ export function joinSafe(...p: any[]): string;
+
+ /**
+ * Adds .ext to filename, but only if it doesn't already have the exact extension.
+ *
+ * @param file string filename to add extension to
+ * @param ext string extension to add
+ */
+ export function addExt(file: string, ext: string): string;
+
+ /**
+ * Trims a filename's extension.
+ *
+ * Extensions are considered to be up to maxSize chars long, counting the dot (defaults to 7).
+ *
+ * An Array of ignoreExts (eg ['.min']) prevents these from being considered as extension, thus are not trimmed.
+ *
+ * @param filename string filename to trim it's extension
+ * @param ignoreExts array extensions to ignore
+ * @param maxSize number max length of the extension
+ */
+ export function trimExt(filename: string, ignoreExts?: string[], maxSize?: number): string;
+
+ /**
+ * Removes the specific ext extension from filename, if it has it. Otherwise it leaves it as is. As in all upath functions, it be .ext or ext.
+ *
+ * @param file string filename to remove extension to
+ * @param ext string extension to remove
+ */
+ export function removeExt(filename: string, ext: string): string;
+
+ /**
+ * Changes a filename's extension to ext. If it has no (valid) extension, it adds it.
+ *
+ * Valid extensions are considered to be up to maxSize chars long, counting the dot (defaults to 7).
+ *
+ * An Array of ignoreExts (eg ['.min']) prevents these from being considered as extension, thus are not changed - the new extension is added instead.
+ *
+ * @param filename string filename to change it's extension
+ * @param ext string extension to change to
+ * @param ignoreExts array extensions to ignore
+ * @param maxSize number max length of the extension
+ */
+ export function changeExt(filename: string, ext: string, ignoreExts?: string[], maxSize?: number): string;
+
+ /**
+ * Adds .ext to filename, only if it doesn't already have any old extension.
+ *
+ * (Old) extensions are considered to be up to maxSize chars long, counting the dot (defaults to 7).
+ *
+ * An Array of ignoreExts (eg ['.min']) will force adding default .ext even if one of these is present.
+ *
+ * @param filename string filename to default to it's extension
+ * @param ext string extension to default to
+ * @param ignoreExts array extensions to ignore
+ * @param maxSize number max length of the extension
+ */
+ export function defaultExt(filename: string, ext: string, ignoreExts?: string[], maxSize?: number): string;
+
+ /**
+ * Normalize a string path, reducing '..' and '.' parts.
+ * When multiple slashes are found, they're replaced by a single one; when the path contains a trailing slash, it is preserved. On Windows backslashes are used.
+ *
+ * @param p string path to normalize.
+ */
+ export function normalize(p: string): string;
+ /**
+ * Join all arguments together and normalize the resulting path.
+ * Arguments must be strings. In v0.8, non-string arguments were silently ignored. In v0.10 and up, an exception is thrown.
+ *
+ * @param paths string paths to join.
+ */
+ export function join(...paths: any[]): string;
+ /**
+ * Join all arguments together and normalize the resulting path.
+ * Arguments must be strings. In v0.8, non-string arguments were silently ignored. In v0.10 and up, an exception is thrown.
+ *
+ * @param paths string paths to join.
+ */
+ export function join(...paths: string[]): string;
+ /**
+ * The right-most parameter is considered {to}. Other parameters are considered an array of {from}.
+ *
+ * Starting from leftmost {from} paramter, resolves {to} to an absolute path.
+ *
+ * If {to} isn't already absolute, {from} arguments are prepended in right to left order, until an absolute path is found. If after using all {from} paths still no absolute path is found, the current working directory is used as well. The resulting path is normalized, and trailing slashes are removed unless the path gets resolved to the root directory.
+ *
+ * @param pathSegments string paths to join. Non-string arguments are ignored.
+ */
+ export function resolve(...pathSegments: any[]): string;
+ /**
+ * Determines whether {path} is an absolute path. An absolute path will always resolve to the same location, regardless of the working directory.
+ *
+ * @param path path to test.
+ */
+ export function isAbsolute(path: string): boolean;
+ /**
+ * Solve the relative path from {from} to {to}.
+ * At times we have two absolute paths, and we need to derive the relative path from one to the other. This is actually the reverse transform of path.resolve.
+ *
+ * @param from
+ * @param to
+ */
+ export function relative(from: string, to: string): string;
+ /**
+ * Return the directory name of a path. Similar to the Unix dirname command.
+ *
+ * @param p the path to evaluate.
+ */
+ export function dirname(p: string): string;
+ /**
+ * Return the last portion of a path. Similar to the Unix basename command.
+ * Often used to extract the file name from a fully qualified path.
+ *
+ * @param p the path to evaluate.
+ * @param ext optionally, an extension to remove from the result.
+ */
+ export function basename(p: string, ext?: string): string;
+ /**
+ * Return the extension of the path, from the last '.' to end of string in the last portion of the path.
+ * If there is no '.' in the last portion of the path or the first character of it is '.', then it returns an empty string
+ *
+ * @param p the path to evaluate.
+ */
+ export function extname(p: string): string;
+ /**
+ * The platform-specific file separator. '\\' or '/'.
+ */
+ export var sep: string;
+ /**
+ * The platform-specific file delimiter. ';' or ':'.
+ */
+ export var delimiter: string;
+ /**
+ * Returns an object from a path string - the opposite of format().
+ *
+ * @param pathString path to evaluate.
+ */
+ export function parse(pathString: string): ParsedPath;
+ /**
+ * Returns a path string from an object - the opposite of parse().
+ *
+ * @param pathString path to evaluate.
+ */
+ export function format(pathObject: ParsedPath): string;
+
+ export module posix {
+ export function normalize(p: string): string;
+ export function join(...paths: any[]): string;
+ export function resolve(...pathSegments: any[]): string;
+ export function isAbsolute(p: string): boolean;
+ export function relative(from: string, to: string): string;
+ export function dirname(p: string): string;
+ export function basename(p: string, ext?: string): string;
+ export function extname(p: string): string;
+ export var sep: string;
+ export var delimiter: string;
+ export function parse(p: string): ParsedPath;
+ export function format(pP: ParsedPath): string;
+ }
+
+ export module win32 {
+ export function normalize(p: string): string;
+ export function join(...paths: any[]): string;
+ export function resolve(...pathSegments: any[]): string;
+ export function isAbsolute(p: string): boolean;
+ export function relative(from: string, to: string): string;
+ export function dirname(p: string): string;
+ export function basename(p: string, ext?: string): string;
+ export function extname(p: string): string;
+ export var sep: string;
+ export var delimiter: string;
+ export function parse(p: string): ParsedPath;
+ export function format(pP: ParsedPath): string;
+ }
+}