diff --git a/code/collections.cs b/code/collections.cs index ce2f1d4..5da8428 100644 --- a/code/collections.cs +++ b/code/collections.cs @@ -1,4 +1,4 @@ -var datas = new List<SensorData> +var data = new List<SensorData> { new SensorData { Id = 1, Location = "A", Value = 2.89 }, new SensorData { Id = 2, Location = "B", Value = 12.01 }, @@ -7,7 +7,7 @@ new SensorData { Id = 5, Location = "A", Value = -456.0 } }; -var avgs = datas +var avgs = data .Where(e => e.Value > -50.0) .GroupBy(e => e.Location) .Select(g => new { diff --git a/code/collections.kt b/code/collections.kt index 68b1c44..b982cd7 100644 --- a/code/collections.kt +++ b/code/collections.kt @@ -1,4 +1,4 @@ -val datas = listOf( +val data = listOf( SensorData(1, "A", 2.89), SensorData(2, "B", 12.01), SensorData(3, "B", 11.89), @@ -6,7 +6,7 @@ val datas = listOf( SensorData(5, "A", -456.0) ) -val avgs = datas +val avgs = data .filter { it.value > -50.0 } .groupBy(SensorData::location) .map { Location(it.key, it.value.map(SensorData::value).average()) } diff --git a/code/coroutines-tasks.kt b/code/coroutines-tasks.kt index 8121bc4..520c405 100644 --- a/code/coroutines-tasks.kt +++ b/code/coroutines-tasks.kt @@ -9,7 +9,7 @@ val asyncRequests = repos.map { repo -> val body = Fuel.get("https://api.github.com/repos/$repo") .responseString() .third.component1() // Fuel Result & Body - body?.let { mapper.readValue(it) } ?: Stats(repo) + body?.let { mapper.readValue<Stats>(it) } ?: Stats(repo) } } diff --git a/code/if-statement.cs b/code/if-statement.cs index 7bcb45a..18a6414 100644 --- a/code/if-statement.cs +++ b/code/if-statement.cs @@ -1,10 +1,10 @@ var age = 42; -if (age < 10) +if (age < 10) { Console.WriteLine("You're too young to watch this movie"); } -else if (age < 13) +else if (age < 13) { Console.WriteLine("You can watch this movie with a parent"); } diff --git a/code/if-statement.kt b/code/if-statement.kt index 62ded87..2e25c31 100644 --- a/code/if-statement.kt +++ b/code/if-statement.kt @@ -1,8 +1,8 @@ val age = 42 -if (age < 10) { +if (age < 10) { println("You're too young to watch this movie") -} else if (age < 13) { +} else if (age < 13) { println("You can watch this movie with a parent") } else { println("You can watch this movie") diff --git a/code/pattern-matching-2.cs b/code/pattern-matching-2.cs index 57ed4c1..bcfed1c 100644 --- a/code/pattern-matching-2.cs +++ b/code/pattern-matching-2.cs @@ -1,7 +1,7 @@ var result = item switch { Square s => Handle(s), - Circle { Radius: < 10 } c => HandleUnder10(c), + Circle { Radius: < 10 } c => HandleUnder10(c), Circle { Radius: 20 } c => Handle20(c), Circle c => Handle(c), _ => throw new Exception("Unknown shape") @@ -10,7 +10,7 @@ // Same with if statements if (item is Square s) { } -else if (item is Circle { Radius: < 10 }) +else if (item is Circle { Radius: < 10 }) { } else if (item is Circle { Radius: 20 }) { } diff --git a/code/pattern-matching.cs b/code/pattern-matching.cs index 95676fd..fc09a2e 100644 --- a/code/pattern-matching.cs +++ b/code/pattern-matching.cs @@ -2,10 +2,10 @@ var nb = 42; var text = nb switch { - int i when i < 10 => "single digit", + int i when i < 10 => "single digit", 10 => "double digits", - int i when i < 100 => "double digits", - int i when i < 1000 => "triple digits", + int i when i < 100 => "double digits", + int i when i < 1000 => "triple digits", _ => "four or more digits" }; @@ -13,9 +13,9 @@ var nb = 42; var text = nb switch { - < 10 => "single digit", - 10 or (>= 11 and < 100) => "double digits", - < 1000 => "triple digits", + < 10 => "single digit", + 10 or (>= 11 and < 100) => "double digits", + < 1000 => "triple digits", _ => "for or more digits", }; // double digits \ No newline at end of file diff --git a/code/range-and-index.kt b/code/range-and-index.kt index 3814e32..7529453 100644 --- a/code/range-and-index.kt +++ b/code/range-and-index.kt @@ -1,7 +1,7 @@ val names = arrayOf("Anna", "Alex", "Brian", "Jill", "Jack") val count = names.count() -for (name in names.slice(1.. { 1, 2, 3, 4 } +var query = new List<int> { 1, 2, 3, 4 } .Where(i => { Console.WriteLine($"Filter {i}, "); diff --git a/index.cirru b/index.cirru index 7bbeee1..159a9ae 100644 --- a/index.cirru +++ b/index.cirru @@ -25,7 +25,7 @@ html = "Kotlin is like C#" .disclaimer "Compare the syntax of Kotlin vs C#. Don't take language likeness comparison too seriously." - .disclaimer "Fixes, improvents and additions are welcome. Open an issue or a pull request." + .disclaimer "Fixes, improvements and additions are welcome. Open an issue or a pull request." .section .title BASICS .case (.name "Hello World") $ .pair diff --git a/index.html b/index.html index 255fdba..e753de9 100644 --- a/index.html +++ b/index.html @@ -98,7 +98,7 @@ font-weight: 300; letter-spacing: 0.05em; } -
Kotlin is like C#
Compare the syntax of Kotlin vs C#. Don't take language likeness comparison too seriously.
Fixes, improvents and additions are welcome. Open an issue or a pull request.
BASICS
Hello World
Kotlin
println("Hello, world!")
+
Kotlin is like C#
Compare the syntax of Kotlin vs C#. Don't take language likeness comparison too seriously.
Fixes, improvements and additions are welcome. Open an issue or a pull request.
BASICS
Hello World
Kotlin
println("Hello, world!")
 
C#
public void Main() 
 {
     Console.WriteLine("Hello, world!");
@@ -131,19 +131,19 @@
                    "pieces of fruit.";
 
If Expression / Statement
Kotlin
val age = 42
 
-if (age < 10) {
+if (age < 10) {
     println("You're too young to watch this movie")
-} else if (age < 13) {
+} else if (age < 13) {
     println("You can watch this movie with a parent")
 } else {
     println("You can watch this movie")
 }
C#
var age = 42;
 
-if (age < 10) 
+if (age < 10) 
 {
     Console.WriteLine("You're too young to watch this movie");
 } 
-else if (age < 13) 
+else if (age < 13) 
 {
     Console.WriteLine("You can watch this movie with a parent");
 } 
@@ -339,7 +339,7 @@
 // Person is called Jack
Range Operator
Kotlin
val names = arrayOf("Anna", "Alex", "Brian", "Jack")
 val count = names.count()
 
-for (i in 0..
Collection Range and Index
Kotlin
val names = arrayOf("Anna", "Alex", "Brian", "Jill", "Jack")
 val count = names.count()
 
-for (name in names.slice(1.. 3 * e);
 // [ 60, 57, 21, 36 ]
Sort
Kotlin
val ordered = listOf(1, 5, 3, 12, 2).sorted()
 // [ 1, 2, 3, 5, 12 ]
C#
var ordered = new[] { 1, 5, 3, 12, 2 }.OrderBy(i => i);
-// [ 1, 2, 3, 5, 12 ]
Filter / GroupBy / Average
Kotlin
val datas = listOf(
+// [ 1, 2, 3, 5, 12 ]
Filter / GroupBy / Average
Kotlin
val data = listOf(
     SensorData(1, "A", 2.89),
     SensorData(2, "B", 12.01),
     SensorData(3, "B", 11.89),
@@ -406,13 +406,13 @@
     SensorData(5, "A", -456.0)
 )
 
-val avgs = datas
+val avgs = data
     .filter { it.value > -50.0 }
     .groupBy(SensorData::location)
     .map { Location(it.key, it.value.map(SensorData::value).average()) }
-
+    
 // (location=A, value=3.0)
-// (location=B, value=11.95)
C#
var datas = new List<SensorData> 
+// (location=B, value=11.95)
C#
var data = new List<SensorData> 
 {
     new SensorData { Id = 1, Location = "A", Value = 2.89 },
     new SensorData { Id = 2, Location = "B", Value = 12.01 },
@@ -421,7 +421,7 @@
     new SensorData { Id = 5, Location = "A", Value = -456.0 }
 };
 
-var avgs = datas
+var avgs = data
             .Where(e => e.Value > -50.0)
             .GroupBy(e => e.Location)
             .Select(g => new { 
@@ -455,7 +455,7 @@
 // Filter 4,
 // Map 1,
 // Map 3,
C#
// LINQ is lazy, so no need to use other collection types
-var query = new List { 1, 2, 3, 4 }
+var query = new List<int> { 1, 2, 3, 4 }
         .Where(i =>
         {
             Console.WriteLine($"Filter {i}, ");
@@ -746,10 +746,10 @@
 var nb = 42;
 var text = nb switch
 {
-    int i when i < 10 => "single digit",
+    int i when i < 10 => "single digit",
     10 => "double digits",
-    int i when i < 100 => "double digits",
-    int i when i < 1000 => "triple digits",
+    int i when i < 100 => "double digits",
+    int i when i < 1000 => "triple digits",
     _ => "four or more digits"
 };
 
@@ -757,9 +757,9 @@
 var nb = 42;
 var text = nb switch
 {
-    < 10 => "single digit",
-    10 or (>= 11 and < 100) => "double digits",
-    < 1000 => "triple digits",
+    < 10 => "single digit",
+    10 or (>= 11 and < 100) => "double digits",
+    < 1000 => "triple digits",
     _ => "for or more digits",
 };
 // double digits
Is Expression / When Clause / Property Pattern
Kotlin
// Not supported yet
@@ -767,7 +767,7 @@
 // http://openjdk.java.net/jeps/305
C#
var result = item switch
 {
     Square s => Handle(s),
-    Circle { Radius: < 10 } c => HandleUnder10(c),
+    Circle { Radius: < 10 } c => HandleUnder10(c),
     Circle { Radius: 20 } c => Handle20(c),
     Circle c => Handle(c),
     _ => throw new Exception("Unknown shape")
@@ -776,7 +776,7 @@
 // Same with if statements
 if (item is Square s)
 { }
-else if (item is Circle { Radius: < 10 })
+else if (item is Circle { Radius: < 10 })
 { }
 else if (item is Circle { Radius: 20 })
 { }
@@ -949,7 +949,7 @@
         val body = Fuel.get("https://api.github.com/repos/$repo")
             .responseString()
             .third.component1() // Fuel Result & Body
-        body?.let { mapper.readValue(it) } ?: Stats(repo)
+        body?.let { mapper.readValue<Stats>(it) } ?: Stats(repo)
     }
 }
 
diff --git a/package-lock.json b/package-lock.json
index ef5b758..e12725a 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -1,375 +1,474 @@
 {
   "name": "kotlin-is-like-csharp",
   "version": "0.0.1",
-  "lockfileVersion": 1,
+  "lockfileVersion": 3,
   "requires": true,
-  "dependencies": {
-    "amdefine": {
+  "packages": {
+    "": {
+      "name": "kotlin-is-like-csharp",
+      "version": "0.0.1",
+      "license": "MIT",
+      "devDependencies": {
+        "coffeescript": "^2.4.1",
+        "mission": "0.0.7",
+        "shelljs": "^0.3.0"
+      }
+    },
+    "node_modules/amdefine": {
       "version": "1.0.1",
       "resolved": "https://registry.npmjs.org/amdefine/-/amdefine-1.0.1.tgz",
       "integrity": "sha1-SlKCrBZHKek2Gbz9OtFR+BfOkfU=",
-      "dev": true
+      "dev": true,
+      "engines": {
+        "node": ">=0.4.2"
+      }
     },
-    "asn1": {
+    "node_modules/asn1": {
       "version": "0.1.11",
       "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.1.11.tgz",
       "integrity": "sha1-VZvhg3bQik7E2+gId9J4GGObLfc=",
       "dev": true,
-      "optional": true
+      "optional": true,
+      "engines": {
+        "node": ">=0.4.9"
+      }
     },
-    "assert-plus": {
+    "node_modules/assert-plus": {
       "version": "0.1.5",
       "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-0.1.5.tgz",
       "integrity": "sha1-7nQAlBMALYTOxyGcasgRgS5yMWA=",
       "dev": true,
-      "optional": true
+      "optional": true,
+      "engines": {
+        "node": ">=0.8"
+      }
     },
-    "async": {
+    "node_modules/async": {
       "version": "0.2.10",
       "resolved": "https://registry.npmjs.org/async/-/async-0.2.10.tgz",
       "integrity": "sha1-trvgsGdLnXGXCMo43owjfLUmw9E=",
       "dev": true
     },
-    "aws-sign2": {
+    "node_modules/aws-sign2": {
       "version": "0.5.0",
       "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.5.0.tgz",
       "integrity": "sha1-xXED96F/wDfwLXwuZLYC6iI/fWM=",
       "dev": true,
-      "optional": true
+      "optional": true,
+      "engines": {
+        "node": "*"
+      }
     },
-    "balanced-match": {
+    "node_modules/balanced-match": {
       "version": "1.0.0",
       "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz",
       "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=",
       "dev": true
     },
-    "boom": {
+    "node_modules/boom": {
       "version": "0.4.2",
       "resolved": "https://registry.npmjs.org/boom/-/boom-0.4.2.tgz",
       "integrity": "sha1-emNune1O/O+xnO9JR6PGffrukRs=",
+      "deprecated": "This version has been deprecated in accordance with the hapi support policy (hapi.im/support). Please upgrade to the latest version to get the best features, bug fixes, and security patches. If you are unable to upgrade at this time, paid support is available for older versions (hapi.im/commercial).",
       "dev": true,
       "optional": true,
-      "requires": {
+      "dependencies": {
         "hoek": "0.9.x"
+      },
+      "engines": {
+        "node": ">=0.8.0"
       }
     },
-    "brace-expansion": {
+    "node_modules/brace-expansion": {
       "version": "1.1.11",
       "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
       "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==",
       "dev": true,
-      "requires": {
+      "dependencies": {
         "balanced-match": "^1.0.0",
         "concat-map": "0.0.1"
       }
     },
-    "camelcase": {
+    "node_modules/camelcase": {
       "version": "1.2.1",
       "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-1.2.1.tgz",
       "integrity": "sha1-m7UwTS4LVmmLLHWLCKPqqdqlijk=",
-      "dev": true
+      "dev": true,
+      "engines": {
+        "node": ">=0.10.0"
+      }
     },
-    "character-parser": {
+    "node_modules/character-parser": {
       "version": "1.2.0",
       "resolved": "https://registry.npmjs.org/character-parser/-/character-parser-1.2.0.tgz",
       "integrity": "sha1-lBNNbl2HCjm+NZ99IkYJNRhN3vY=",
       "dev": true
     },
-    "chokidar": {
+    "node_modules/chokidar": {
       "version": "0.8.4",
       "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-0.8.4.tgz",
       "integrity": "sha1-OytQZoFwhlNLqBoJK9z0viW4vuA=",
+      "deprecated": "Chokidar 2 will break on node v14+. Upgrade to chokidar 3 with 15x less dependencies.",
       "dev": true,
-      "requires": {
-        "fsevents": "github:pipobscure/fsevents#7dcdf9fa3f8956610fd6f69f72c67bace2de7138",
+      "optionalDependencies": {
+        "fsevents": "pipobscure/fsevents#7dcdf9fa3f8956610fd6f69f72c67bace2de7138",
         "recursive-readdir": "0.0.2"
       }
     },
-    "cirru-html": {
+    "node_modules/cirru-html": {
       "version": "0.2.2",
       "resolved": "https://registry.npmjs.org/cirru-html/-/cirru-html-0.2.2.tgz",
       "integrity": "sha1-pfAxBX9awJ8ED4H/bUnrAPGTAZk=",
       "dev": true,
-      "requires": {
+      "dependencies": {
         "cirru-parser": "^0.9.0-1"
       }
     },
-    "cirru-html-js": {
+    "node_modules/cirru-html-js": {
       "version": "0.0.3",
       "resolved": "https://registry.npmjs.org/cirru-html-js/-/cirru-html-js-0.0.3.tgz",
       "integrity": "sha1-G5Ae9BrOedih6xOrnodyIjlv3+g=",
       "dev": true,
-      "requires": {
+      "dependencies": {
         "cirru-parser": "^0.9.0-1"
       }
     },
-    "cirru-parser": {
+    "node_modules/cirru-parser": {
       "version": "0.9.1",
       "resolved": "https://registry.npmjs.org/cirru-parser/-/cirru-parser-0.9.1.tgz",
       "integrity": "sha1-i0J+JQoaOrS7Ri/sXYFVjlf8C64=",
       "dev": true
     },
-    "clean-css": {
+    "node_modules/clean-css": {
       "version": "2.1.8",
       "resolved": "https://registry.npmjs.org/clean-css/-/clean-css-2.1.8.tgz",
       "integrity": "sha1-K0sv1g8yRBCWIWriWiH6p0WA3IM=",
       "dev": true,
-      "requires": {
+      "dependencies": {
         "commander": "2.1.x"
+      },
+      "bin": {
+        "cleancss": "bin/cleancss"
+      },
+      "engines": {
+        "node": ">=0.8.0"
       }
     },
-    "coffee-script": {
+    "node_modules/coffee-script": {
       "version": "1.12.7",
       "resolved": "https://registry.npmjs.org/coffee-script/-/coffee-script-1.12.7.tgz",
       "integrity": "sha512-fLeEhqwymYat/MpTPUjSKHVYYl0ec2mOyALEMLmzr5i1isuG+6jfI2j2d5oBO3VIzgUXgBVIcOT9uH1TFxBckw==",
-      "dev": true
+      "deprecated": "CoffeeScript on NPM has moved to \"coffeescript\" (no hyphen)",
+      "dev": true,
+      "bin": {
+        "cake": "bin/cake",
+        "coffee": "bin/coffee"
+      },
+      "engines": {
+        "node": ">=0.8.0"
+      }
     },
-    "coffeescript": {
+    "node_modules/coffeescript": {
       "version": "2.4.1",
       "resolved": "https://registry.npmjs.org/coffeescript/-/coffeescript-2.4.1.tgz",
       "integrity": "sha512-34GV1aHrsMpTaO3KfMJL40ZNuvKDR/g98THHnE9bQj8HjMaZvSrLik99WWqyMhRtbe8V5hpx5iLgdcSvM/S2wg==",
-      "dev": true
+      "dev": true,
+      "bin": {
+        "cake": "bin/cake",
+        "coffee": "bin/coffee"
+      },
+      "engines": {
+        "node": ">=6"
+      }
     },
-    "combined-stream": {
+    "node_modules/combined-stream": {
       "version": "0.0.7",
       "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-0.0.7.tgz",
       "integrity": "sha1-ATfmV7qlp1QcV6w3rF/AfXO03B8=",
       "dev": true,
       "optional": true,
-      "requires": {
+      "dependencies": {
         "delayed-stream": "0.0.5"
+      },
+      "engines": {
+        "node": ">= 0.8"
       }
     },
-    "commander": {
+    "node_modules/commander": {
       "version": "2.1.0",
       "resolved": "https://registry.npmjs.org/commander/-/commander-2.1.0.tgz",
       "integrity": "sha1-0SG7roYNmZKj1Re6lvVliOR8Z4E=",
-      "dev": true
+      "dev": true,
+      "engines": {
+        "node": ">= 0.6.x"
+      }
     },
-    "concat-map": {
+    "node_modules/concat-map": {
       "version": "0.0.1",
       "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz",
       "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=",
       "dev": true
     },
-    "constantinople": {
+    "node_modules/constantinople": {
       "version": "2.0.1",
       "resolved": "https://registry.npmjs.org/constantinople/-/constantinople-2.0.1.tgz",
       "integrity": "sha1-WCn4VvMBqb2xB9k1932OuMzsTHk=",
+      "deprecated": "Please update to at least constantinople 3.1.1",
       "dev": true,
-      "requires": {
+      "dependencies": {
         "uglify-js": "~2.4.0"
       }
     },
-    "convert-source-map": {
+    "node_modules/convert-source-map": {
       "version": "0.3.5",
       "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-0.3.5.tgz",
       "integrity": "sha1-8dgClQr33SYxof6+BZZVDIarMZA=",
       "dev": true
     },
-    "core-util-is": {
+    "node_modules/core-util-is": {
       "version": "1.0.2",
       "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz",
       "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=",
       "dev": true
     },
-    "cryptiles": {
+    "node_modules/cryptiles": {
       "version": "0.2.2",
       "resolved": "https://registry.npmjs.org/cryptiles/-/cryptiles-0.2.2.tgz",
       "integrity": "sha1-7ZH/HxetE9N0gohZT4pIoNJvMlw=",
+      "deprecated": "This version has been deprecated in accordance with the hapi support policy (hapi.im/support). Please upgrade to the latest version to get the best features, bug fixes, and security patches. If you are unable to upgrade at this time, paid support is available for older versions (hapi.im/commercial).",
       "dev": true,
       "optional": true,
-      "requires": {
+      "dependencies": {
         "boom": "0.4.x"
+      },
+      "engines": {
+        "node": ">=0.8.0"
       }
     },
-    "css": {
+    "node_modules/css": {
       "version": "1.0.8",
       "resolved": "https://registry.npmjs.org/css/-/css-1.0.8.tgz",
       "integrity": "sha1-k4aBHKgrzMnuf7WnMrHioxfIo+c=",
       "dev": true,
-      "requires": {
+      "dependencies": {
         "css-parse": "1.0.4",
         "css-stringify": "1.0.5"
       }
     },
-    "css-parse": {
+    "node_modules/css-parse": {
       "version": "1.0.4",
       "resolved": "https://registry.npmjs.org/css-parse/-/css-parse-1.0.4.tgz",
       "integrity": "sha1-OLBQP7+dqfVOnB29pg4UXHcRe90=",
       "dev": true
     },
-    "css-stringify": {
+    "node_modules/css-stringify": {
       "version": "1.0.5",
       "resolved": "https://registry.npmjs.org/css-stringify/-/css-stringify-1.0.5.tgz",
       "integrity": "sha1-sNBClG2ylTu50pKQCmy19tASIDE=",
       "dev": true
     },
-    "ctype": {
+    "node_modules/ctype": {
       "version": "0.5.3",
       "resolved": "https://registry.npmjs.org/ctype/-/ctype-0.5.3.tgz",
       "integrity": "sha1-gsGMJGH3QRTvFsE1IkrQuRRMoS8=",
       "dev": true,
-      "optional": true
+      "optional": true,
+      "engines": {
+        "node": ">= 0.4"
+      }
     },
-    "decamelize": {
+    "node_modules/decamelize": {
       "version": "1.2.0",
       "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz",
       "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=",
-      "dev": true
+      "dev": true,
+      "engines": {
+        "node": ">=0.10.0"
+      }
     },
-    "delayed-stream": {
+    "node_modules/delayed-stream": {
       "version": "0.0.5",
       "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-0.0.5.tgz",
       "integrity": "sha1-1LH0OpPoKW3+AmlPRoC8N6MTxz8=",
       "dev": true,
-      "optional": true
+      "optional": true,
+      "engines": {
+        "node": ">=0.4.0"
+      }
     },
-    "devtools-reloader-station": {
+    "node_modules/devtools-reloader-station": {
       "version": "0.0.4",
       "resolved": "https://registry.npmjs.org/devtools-reloader-station/-/devtools-reloader-station-0.0.4.tgz",
       "integrity": "sha1-7LNzPyz1GWYWRFY8s+xS5a+7SNY=",
       "dev": true,
-      "requires": {
+      "dependencies": {
         "ws": "~0.4.31"
       }
     },
-    "dot": {
+    "node_modules/dot": {
       "version": "1.0.3",
       "resolved": "https://registry.npmjs.org/dot/-/dot-1.0.3.tgz",
       "integrity": "sha1-+HUL+2sDx2ZOsObLHrTGZBmvlCc=",
-      "dev": true
+      "dev": true,
+      "engines": [
+        "node >=0.2.6"
+      ],
+      "bin": {
+        "dottojs": "bin/dot-packer"
+      }
     },
-    "exorcist": {
+    "node_modules/exorcist": {
       "version": "0.1.6",
       "resolved": "https://registry.npmjs.org/exorcist/-/exorcist-0.1.6.tgz",
       "integrity": "sha1-FqTEg39ITQuDlPtjgKE/1rQq+O4=",
       "dev": true,
-      "requires": {
+      "dependencies": {
         "convert-source-map": "~0.3.3",
         "minimist": "0.0.5",
         "through2": "~0.4.0"
+      },
+      "bin": {
+        "exorcist": "bin/exorcist.js"
       }
     },
-    "forever-agent": {
+    "node_modules/forever-agent": {
       "version": "0.5.2",
       "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.5.2.tgz",
       "integrity": "sha1-bQ4JxJIflKJ/Y9O0nF/v8epMUTA=",
       "dev": true,
-      "optional": true
+      "optional": true,
+      "engines": {
+        "node": "*"
+      }
     },
-    "form-data": {
+    "node_modules/form-data": {
       "version": "0.1.4",
       "resolved": "https://registry.npmjs.org/form-data/-/form-data-0.1.4.tgz",
       "integrity": "sha1-kavXiKupcCsaq/qLwBAxoqyeOxI=",
       "dev": true,
       "optional": true,
-      "requires": {
+      "dependencies": {
         "async": "~0.9.0",
         "combined-stream": "~0.0.4",
         "mime": "~1.2.11"
       },
-      "dependencies": {
-        "async": {
-          "version": "0.9.2",
-          "resolved": "https://registry.npmjs.org/async/-/async-0.9.2.tgz",
-          "integrity": "sha1-rqdNXmHB+JlhO/ZL2mbUx48v0X0=",
-          "dev": true,
-          "optional": true
-        }
+      "engines": {
+        "node": ">= 0.8"
       }
     },
-    "fsevents": {
-      "version": "github:pipobscure/fsevents#7dcdf9fa3f8956610fd6f69f72c67bace2de7138",
-      "from": "github:pipobscure/fsevents#7dcdf9fa3f8956610fd6f69f72c67bace2de7138",
+    "node_modules/form-data/node_modules/async": {
+      "version": "0.9.2",
+      "resolved": "https://registry.npmjs.org/async/-/async-0.9.2.tgz",
+      "integrity": "sha1-rqdNXmHB+JlhO/ZL2mbUx48v0X0=",
+      "dev": true,
+      "optional": true
+    },
+    "node_modules/fsevents": {
+      "resolved": "git+ssh://git@github.com/pipobscure/fsevents.git#7dcdf9fa3f8956610fd6f69f72c67bace2de7138",
       "dev": true,
       "optional": true,
-      "requires": {
-        "nan": "~0.8.0"
-      },
       "dependencies": {
-        "nan": {
-          "version": "0.8.0",
-          "resolved": "https://registry.npmjs.org/nan/-/nan-0.8.0.tgz",
-          "integrity": "sha1-AiqPpen+hCCWSsH7PclOF/RJ9f0=",
-          "dev": true,
-          "optional": true
-        }
+        "nan": "~0.8.0"
       }
     },
-    "graceful-fs": {
+    "node_modules/fsevents/node_modules/nan": {
+      "version": "0.8.0",
+      "resolved": "https://registry.npmjs.org/nan/-/nan-0.8.0.tgz",
+      "integrity": "sha1-AiqPpen+hCCWSsH7PclOF/RJ9f0=",
+      "dev": true,
+      "optional": true
+    },
+    "node_modules/graceful-fs": {
       "version": "3.0.12",
       "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-3.0.12.tgz",
       "integrity": "sha512-J55gaCS4iTTJfTXIxSVw3EMQckcqkpdRv3IR7gu6sq0+tbC363Zx6KH/SEwXASK9JRbhyZmVjJEVJIOxYsB3Qg==",
       "dev": true,
       "optional": true,
-      "requires": {
+      "dependencies": {
         "natives": "^1.1.3"
+      },
+      "engines": {
+        "node": ">=0.4.0"
       }
     },
-    "hawk": {
+    "node_modules/hawk": {
       "version": "1.1.1",
       "resolved": "https://registry.npmjs.org/hawk/-/hawk-1.1.1.tgz",
       "integrity": "sha1-h81JH5tG5OKurKM1QWdmiF0tHtk=",
+      "deprecated": "This module moved to @hapi/hawk. Please make sure to switch over as this distribution is no longer supported and may contain bugs and critical security issues.",
       "dev": true,
       "optional": true,
-      "requires": {
+      "dependencies": {
         "boom": "0.4.x",
         "cryptiles": "0.2.x",
         "hoek": "0.9.x",
         "sntp": "0.2.x"
+      },
+      "engines": {
+        "node": ">=0.8.0"
       }
     },
-    "hoek": {
+    "node_modules/hoek": {
       "version": "0.9.1",
       "resolved": "https://registry.npmjs.org/hoek/-/hoek-0.9.1.tgz",
       "integrity": "sha1-PTIkYrrfB3Fup+uFuviAec3c5QU=",
+      "deprecated": "This version has been deprecated in accordance with the hapi support policy (hapi.im/support). Please upgrade to the latest version to get the best features, bug fixes, and security patches. If you are unable to upgrade at this time, paid support is available for older versions (hapi.im/commercial).",
       "dev": true,
-      "optional": true
+      "optional": true,
+      "engines": {
+        "node": ">=0.8.0"
+      }
     },
-    "http-signature": {
+    "node_modules/http-signature": {
       "version": "0.10.1",
       "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-0.10.1.tgz",
       "integrity": "sha1-T72sEyVZqoMjEh5UB3nAoBKyfmY=",
       "dev": true,
       "optional": true,
-      "requires": {
+      "dependencies": {
         "asn1": "0.1.11",
         "assert-plus": "^0.1.5",
         "ctype": "0.5.3"
+      },
+      "engines": {
+        "node": ">=0.8"
       }
     },
-    "inherits": {
+    "node_modules/inherits": {
       "version": "2.0.4",
       "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz",
       "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==",
       "dev": true
     },
-    "ip-regex": {
+    "node_modules/ip-regex": {
       "version": "2.1.0",
       "resolved": "https://registry.npmjs.org/ip-regex/-/ip-regex-2.1.0.tgz",
       "integrity": "sha1-+ni/XS5pE8kRzp+BnuUUa7bYROk=",
       "dev": true,
-      "optional": true
+      "optional": true,
+      "engines": {
+        "node": ">=4"
+      }
     },
-    "is-promise": {
+    "node_modules/is-promise": {
       "version": "1.0.1",
       "resolved": "https://registry.npmjs.org/is-promise/-/is-promise-1.0.1.tgz",
       "integrity": "sha1-MVc3YcBX4zwukaq56W2gjO++duU=",
       "dev": true
     },
-    "isarray": {
+    "node_modules/isarray": {
       "version": "0.0.1",
       "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz",
       "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=",
       "dev": true
     },
-    "jade": {
+    "node_modules/jade": {
       "version": "1.3.1",
       "resolved": "https://registry.npmjs.org/jade/-/jade-1.3.1.tgz",
       "integrity": "sha1-dIPYSLhxTcUKQNqYsECXkLN0IWs=",
+      "deprecated": "Jade has been renamed to pug, please install the latest version of pug instead of jade",
       "dev": true,
-      "requires": {
+      "dependencies": {
         "character-parser": "1.2.0",
         "commander": "2.1.0",
         "constantinople": "~2.0.0",
@@ -377,106 +476,136 @@
         "monocle": "1.1.51",
         "transformers": "2.1.0",
         "with": "~3.0.0"
+      },
+      "bin": {
+        "jade": "bin/jade.js"
       }
     },
-    "json-stringify-safe": {
+    "node_modules/json-stringify-safe": {
       "version": "5.0.1",
       "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz",
       "integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=",
       "dev": true,
       "optional": true
     },
-    "less": {
+    "node_modules/less": {
       "version": "1.7.5",
       "resolved": "https://registry.npmjs.org/less/-/less-1.7.5.tgz",
       "integrity": "sha1-TyIM9yiKJ+rKc5325ICKLUwNV1Y=",
       "dev": true,
-      "requires": {
+      "bin": {
+        "lessc": "bin/lessc"
+      },
+      "engines": {
+        "node": ">=0.8.0"
+      },
+      "optionalDependencies": {
         "clean-css": "2.2.x",
         "graceful-fs": "~3.0.2",
         "mime": "~1.2.11",
         "mkdirp": "~0.5.0",
         "request": "~2.40.0",
         "source-map": "0.1.x"
+      }
+    },
+    "node_modules/less/node_modules/clean-css": {
+      "version": "2.2.23",
+      "resolved": "https://registry.npmjs.org/clean-css/-/clean-css-2.2.23.tgz",
+      "integrity": "sha1-BZC1R4tRbEkD7cLYm9P9vdKGMow=",
+      "dev": true,
+      "optional": true,
+      "dependencies": {
+        "commander": "2.2.x"
+      },
+      "bin": {
+        "cleancss": "bin/cleancss"
       },
+      "engines": {
+        "node": ">=0.8.0"
+      }
+    },
+    "node_modules/less/node_modules/commander": {
+      "version": "2.2.0",
+      "resolved": "https://registry.npmjs.org/commander/-/commander-2.2.0.tgz",
+      "integrity": "sha1-F1rUuTF/P/YV8gHB5XIk9Vo+kd8=",
+      "dev": true,
+      "optional": true,
+      "engines": {
+        "node": ">= 0.6.x"
+      }
+    },
+    "node_modules/less/node_modules/minimist": {
+      "version": "0.0.8",
+      "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz",
+      "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=",
+      "dev": true,
+      "optional": true
+    },
+    "node_modules/less/node_modules/mkdirp": {
+      "version": "0.5.1",
+      "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz",
+      "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=",
+      "deprecated": "Legacy versions of mkdirp are no longer supported. Please update to mkdirp 1.x. (Note that the API surface has changed to use Promises in 1.x.)",
+      "dev": true,
+      "optional": true,
       "dependencies": {
-        "clean-css": {
-          "version": "2.2.23",
-          "resolved": "https://registry.npmjs.org/clean-css/-/clean-css-2.2.23.tgz",
-          "integrity": "sha1-BZC1R4tRbEkD7cLYm9P9vdKGMow=",
-          "dev": true,
-          "optional": true,
-          "requires": {
-            "commander": "2.2.x"
-          }
-        },
-        "commander": {
-          "version": "2.2.0",
-          "resolved": "https://registry.npmjs.org/commander/-/commander-2.2.0.tgz",
-          "integrity": "sha1-F1rUuTF/P/YV8gHB5XIk9Vo+kd8=",
-          "dev": true,
-          "optional": true
-        },
-        "minimist": {
-          "version": "0.0.8",
-          "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz",
-          "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=",
-          "dev": true,
-          "optional": true
-        },
-        "mkdirp": {
-          "version": "0.5.1",
-          "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz",
-          "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=",
-          "dev": true,
-          "optional": true,
-          "requires": {
-            "minimist": "0.0.8"
-          }
-        }
-      }
-    },
-    "lodash": {
+        "minimist": "0.0.8"
+      },
+      "bin": {
+        "mkdirp": "bin/cmd.js"
+      }
+    },
+    "node_modules/lodash": {
       "version": "2.4.2",
       "resolved": "https://registry.npmjs.org/lodash/-/lodash-2.4.2.tgz",
       "integrity": "sha1-+t2DS5aDBz2hebPq5tnA0VBT9z4=",
-      "dev": true
+      "dev": true,
+      "engines": [
+        "node",
+        "rhino"
+      ]
     },
-    "mime": {
+    "node_modules/mime": {
       "version": "1.2.11",
       "resolved": "https://registry.npmjs.org/mime/-/mime-1.2.11.tgz",
       "integrity": "sha1-WCA+7Ybjpe8XrtK32evUfwpg3RA=",
       "dev": true,
       "optional": true
     },
-    "mime-types": {
+    "node_modules/mime-types": {
       "version": "1.0.2",
       "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-1.0.2.tgz",
       "integrity": "sha1-mVrhOSq4r/y/yyZB3QVOlDwNXc4=",
       "dev": true,
-      "optional": true
+      "optional": true,
+      "engines": {
+        "node": ">= 0.8.0"
+      }
     },
-    "minimatch": {
+    "node_modules/minimatch": {
       "version": "3.0.4",
       "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz",
       "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==",
       "dev": true,
-      "requires": {
+      "dependencies": {
         "brace-expansion": "^1.1.7"
+      },
+      "engines": {
+        "node": "*"
       }
     },
-    "minimist": {
+    "node_modules/minimist": {
       "version": "0.0.5",
       "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.5.tgz",
       "integrity": "sha1-16oye87PUY+RBqxrjwA/o7zqhWY=",
       "dev": true
     },
-    "mission": {
+    "node_modules/mission": {
       "version": "0.0.7",
       "resolved": "https://registry.npmjs.org/mission/-/mission-0.0.7.tgz",
       "integrity": "sha1-n2AYcVUfZ3bX0TQXwGmFTHLb62w=",
       "dev": true,
-      "requires": {
+      "dependencies": {
         "chokidar": "~0.8.2",
         "cirru-html": "~0.2.2",
         "cirru-html-js": "0.0.3",
@@ -491,336 +620,422 @@
         "semver": "~2.3.0",
         "shelljs": "~0.2.6",
         "uglify-js": "~2.4.13"
+      }
+    },
+    "node_modules/mission/node_modules/shelljs": {
+      "version": "0.2.6",
+      "resolved": "https://registry.npmjs.org/shelljs/-/shelljs-0.2.6.tgz",
+      "integrity": "sha1-kEktcv/MgVmXa6umL7D2iE8MM3g=",
+      "dev": true,
+      "bin": {
+        "shjs": "bin/shjs"
       },
-      "dependencies": {
-        "shelljs": {
-          "version": "0.2.6",
-          "resolved": "https://registry.npmjs.org/shelljs/-/shelljs-0.2.6.tgz",
-          "integrity": "sha1-kEktcv/MgVmXa6umL7D2iE8MM3g=",
-          "dev": true
-        }
+      "engines": {
+        "node": ">=0.8.0"
       }
     },
-    "mkdirp": {
+    "node_modules/mkdirp": {
       "version": "0.3.5",
       "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.3.5.tgz",
       "integrity": "sha1-3j5fiWHIjHh+4TaN+EmsRBPsqNc=",
+      "deprecated": "Legacy versions of mkdirp are no longer supported. Please update to mkdirp 1.x. (Note that the API surface has changed to use Promises in 1.x.)",
       "dev": true
     },
-    "monocle": {
+    "node_modules/monocle": {
       "version": "1.1.51",
       "resolved": "https://registry.npmjs.org/monocle/-/monocle-1.1.51.tgz",
       "integrity": "sha1-Iu0W4RLpsFZ2nFzKySDjdSSdicA=",
       "dev": true,
-      "requires": {
+      "dependencies": {
         "readdirp": "~0.2.3"
       }
     },
-    "nan": {
+    "node_modules/nan": {
       "version": "1.0.0",
       "resolved": "https://registry.npmjs.org/nan/-/nan-1.0.0.tgz",
       "integrity": "sha1-riT4hQgY1mL8q1rPfzuVv6oszzg=",
       "dev": true
     },
-    "natives": {
+    "node_modules/natives": {
       "version": "1.1.6",
       "resolved": "https://registry.npmjs.org/natives/-/natives-1.1.6.tgz",
       "integrity": "sha512-6+TDFewD4yxY14ptjKaS63GVdtKiES1pTPyxn9Jb0rBqPMZ7VcCiooEhPNsr+mqHtMGxa/5c/HhcC4uPEUw/nA==",
+      "deprecated": "This module relies on Node.js's internals and will break at some point. Do not use it, and update to graceful-fs@4.x.",
       "dev": true,
       "optional": true
     },
-    "node-uuid": {
+    "node_modules/node-uuid": {
       "version": "1.4.8",
       "resolved": "https://registry.npmjs.org/node-uuid/-/node-uuid-1.4.8.tgz",
       "integrity": "sha1-sEDrCSOWivq/jTL7HxfxFn/auQc=",
+      "deprecated": "Use uuid module instead",
       "dev": true,
-      "optional": true
+      "optional": true,
+      "bin": {
+        "uuid": "bin/uuid"
+      }
     },
-    "oauth-sign": {
+    "node_modules/oauth-sign": {
       "version": "0.3.0",
       "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.3.0.tgz",
       "integrity": "sha1-y1QPk7srIqfVlBaRoojWDo6pOG4=",
       "dev": true,
-      "optional": true
+      "optional": true,
+      "engines": {
+        "node": "*"
+      }
     },
-    "object-keys": {
+    "node_modules/object-keys": {
       "version": "0.4.0",
       "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-0.4.0.tgz",
       "integrity": "sha1-KKaq50KN0sOpLz2V8hM13SBOAzY=",
       "dev": true
     },
-    "optimist": {
+    "node_modules/optimist": {
       "version": "0.3.7",
       "resolved": "https://registry.npmjs.org/optimist/-/optimist-0.3.7.tgz",
       "integrity": "sha1-yQlBrVnkJzMokjB00s8ufLxuwNk=",
       "dev": true,
-      "requires": {
+      "dependencies": {
         "wordwrap": "~0.0.2"
       }
     },
-    "options": {
+    "node_modules/options": {
       "version": "0.0.6",
       "resolved": "https://registry.npmjs.org/options/-/options-0.0.6.tgz",
       "integrity": "sha1-7CLTEoBrtT5zF3Pnza788cZDEo8=",
-      "dev": true
+      "dev": true,
+      "engines": {
+        "node": ">=0.4.0"
+      }
     },
-    "promise": {
+    "node_modules/promise": {
       "version": "2.0.0",
       "resolved": "https://registry.npmjs.org/promise/-/promise-2.0.0.tgz",
       "integrity": "sha1-RmSKqdYFr10ucMMCS/WUNtoCuA4=",
       "dev": true,
-      "requires": {
+      "dependencies": {
         "is-promise": "~1"
       }
     },
-    "psl": {
+    "node_modules/psl": {
       "version": "1.4.0",
       "resolved": "https://registry.npmjs.org/psl/-/psl-1.4.0.tgz",
       "integrity": "sha512-HZzqCGPecFLyoRj5HLfuDSKYTJkAfB5thKBIkRHtGjWwY7p1dAyveIbXIq4tO0KYfDF2tHqPUgY9SDnGm00uFw==",
       "dev": true,
       "optional": true
     },
-    "punycode": {
+    "node_modules/punycode": {
       "version": "2.1.1",
       "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz",
       "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==",
       "dev": true,
-      "optional": true
+      "optional": true,
+      "engines": {
+        "node": ">=6"
+      }
     },
-    "qs": {
+    "node_modules/qs": {
       "version": "1.0.2",
       "resolved": "https://registry.npmjs.org/qs/-/qs-1.0.2.tgz",
       "integrity": "sha1-UKk+K1r2aRwxvOpdrnjubqGQN2g=",
       "dev": true,
       "optional": true
     },
-    "readable-stream": {
+    "node_modules/readable-stream": {
       "version": "1.0.34",
       "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.0.34.tgz",
       "integrity": "sha1-Elgg40vIQtLyqq+v5MKRbuMsFXw=",
       "dev": true,
-      "requires": {
+      "dependencies": {
         "core-util-is": "~1.0.0",
         "inherits": "~2.0.1",
         "isarray": "0.0.1",
         "string_decoder": "~0.10.x"
       }
     },
-    "readdirp": {
+    "node_modules/readdirp": {
       "version": "0.2.5",
       "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-0.2.5.tgz",
       "integrity": "sha1-xMJ25Sl3riXbUZH+UdAIVQ8V2bs=",
       "dev": true,
-      "requires": {
+      "dependencies": {
         "minimatch": ">=0.2.4"
+      },
+      "engines": {
+        "node": ">=0.4"
       }
     },
-    "recursive-readdir": {
+    "node_modules/recursive-readdir": {
       "version": "0.0.2",
       "resolved": "https://registry.npmjs.org/recursive-readdir/-/recursive-readdir-0.0.2.tgz",
       "integrity": "sha1-C8R9xIOOZG3M+6BQe15X/7/zX3w=",
       "dev": true,
-      "optional": true
+      "optional": true,
+      "engines": {
+        "node": ">=0.6.6"
+      }
     },
-    "request": {
+    "node_modules/request": {
       "version": "2.40.0",
       "resolved": "https://registry.npmjs.org/request/-/request-2.40.0.tgz",
       "integrity": "sha1-TdZw9pbx5uhC5mtLXoOTAaub62c=",
+      "deprecated": "request has been deprecated, see https://github.com/request/request/issues/3142",
       "dev": true,
+      "engines": [
+        "node >= 0.8.0"
+      ],
       "optional": true,
-      "requires": {
-        "aws-sign2": "~0.5.0",
+      "dependencies": {
         "forever-agent": "~0.5.0",
-        "form-data": "~0.1.0",
-        "hawk": "1.1.1",
-        "http-signature": "~0.10.0",
         "json-stringify-safe": "~5.0.0",
         "mime-types": "~1.0.1",
         "node-uuid": "~1.4.0",
+        "qs": "~1.0.0"
+      },
+      "optionalDependencies": {
+        "aws-sign2": "~0.5.0",
+        "form-data": "~0.1.0",
+        "hawk": "1.1.1",
+        "http-signature": "~0.10.0",
         "oauth-sign": "~0.3.0",
-        "qs": "~1.0.0",
         "stringstream": "~0.0.4",
         "tough-cookie": ">=0.12.0",
         "tunnel-agent": "~0.4.0"
       }
     },
-    "rsyncwrapper": {
+    "node_modules/rsyncwrapper": {
       "version": "0.3.0",
       "resolved": "https://registry.npmjs.org/rsyncwrapper/-/rsyncwrapper-0.3.0.tgz",
       "integrity": "sha1-bc2b2R9W21k7/daTAkmMXOTomFY=",
       "dev": true,
-      "requires": {
+      "dependencies": {
         "lodash": "~2.4.1"
+      },
+      "engines": {
+        "node": ">=0.10.25"
       }
     },
-    "semver": {
+    "node_modules/semver": {
       "version": "2.3.2",
       "resolved": "https://registry.npmjs.org/semver/-/semver-2.3.2.tgz",
       "integrity": "sha1-uYSPJdbPNjMwc+ye+IVtQvEjPlI=",
-      "dev": true
+      "dev": true,
+      "bin": {
+        "semver": "bin/semver"
+      }
     },
-    "shelljs": {
+    "node_modules/shelljs": {
       "version": "0.3.0",
       "resolved": "https://registry.npmjs.org/shelljs/-/shelljs-0.3.0.tgz",
       "integrity": "sha1-NZbmMHp4FUT1kfN9phg2DzHbV7E=",
-      "dev": true
+      "dev": true,
+      "bin": {
+        "shjs": "bin/shjs"
+      },
+      "engines": {
+        "node": ">=0.8.0"
+      }
     },
-    "sntp": {
+    "node_modules/sntp": {
       "version": "0.2.4",
       "resolved": "https://registry.npmjs.org/sntp/-/sntp-0.2.4.tgz",
       "integrity": "sha1-+4hfGLDzqtGJ+CSGJTa87ux1CQA=",
+      "deprecated": "This module moved to @hapi/sntp. Please make sure to switch over as this distribution is no longer supported and may contain bugs and critical security issues.",
       "dev": true,
       "optional": true,
-      "requires": {
+      "dependencies": {
         "hoek": "0.9.x"
+      },
+      "engines": {
+        "node": ">=0.8.0"
       }
     },
-    "source-map": {
+    "node_modules/source-map": {
       "version": "0.1.34",
       "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.1.34.tgz",
       "integrity": "sha1-p8/omux7FoLDsZjQrPtH19CQVms=",
       "dev": true,
-      "requires": {
+      "dependencies": {
         "amdefine": ">=0.0.4"
+      },
+      "engines": {
+        "node": ">=0.8.0"
       }
     },
-    "string_decoder": {
+    "node_modules/string_decoder": {
       "version": "0.10.31",
       "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz",
       "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=",
       "dev": true
     },
-    "stringstream": {
+    "node_modules/stringstream": {
       "version": "0.0.6",
       "resolved": "https://registry.npmjs.org/stringstream/-/stringstream-0.0.6.tgz",
       "integrity": "sha512-87GEBAkegbBcweToUrdzf3eLhWNg06FJTebl4BVJz/JgWy8CvEr9dRtX5qWphiynMSQlxxi+QqN0z5T32SLlhA==",
       "dev": true,
       "optional": true
     },
-    "through2": {
+    "node_modules/through2": {
       "version": "0.4.2",
       "resolved": "https://registry.npmjs.org/through2/-/through2-0.4.2.tgz",
       "integrity": "sha1-2/WGYDEVHsg1K7bE22SiKSqEC5s=",
       "dev": true,
-      "requires": {
+      "dependencies": {
         "readable-stream": "~1.0.17",
         "xtend": "~2.1.1"
       }
     },
-    "tinycolor": {
+    "node_modules/tinycolor": {
       "version": "0.0.1",
       "resolved": "https://registry.npmjs.org/tinycolor/-/tinycolor-0.0.1.tgz",
       "integrity": "sha1-MgtaUtg6u1l42Bo+iH1K77FaYWQ=",
-      "dev": true
+      "dev": true,
+      "engines": {
+        "node": ">=0.4.0"
+      }
     },
-    "tough-cookie": {
+    "node_modules/tough-cookie": {
       "version": "3.0.1",
       "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-3.0.1.tgz",
       "integrity": "sha512-yQyJ0u4pZsv9D4clxO69OEjLWYw+jbgspjTue4lTQZLfV0c5l1VmK2y1JK8E9ahdpltPOaAThPcp5nKPUgSnsg==",
       "dev": true,
       "optional": true,
-      "requires": {
+      "dependencies": {
         "ip-regex": "^2.1.0",
         "psl": "^1.1.28",
         "punycode": "^2.1.1"
+      },
+      "engines": {
+        "node": ">=6"
       }
     },
-    "transformers": {
+    "node_modules/transformers": {
       "version": "2.1.0",
       "resolved": "https://registry.npmjs.org/transformers/-/transformers-2.1.0.tgz",
       "integrity": "sha1-XSPLNVYd2F3Gf7hIIwm0fVPM6ac=",
+      "deprecated": "Deprecated, use jstransformer",
       "dev": true,
-      "requires": {
+      "dependencies": {
         "css": "~1.0.8",
         "promise": "~2.0",
         "uglify-js": "~2.2.5"
-      },
+      }
+    },
+    "node_modules/transformers/node_modules/uglify-js": {
+      "version": "2.2.5",
+      "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-2.2.5.tgz",
+      "integrity": "sha1-puAqcNg5eSuXgEiLe4sYTAlcmcc=",
+      "dev": true,
       "dependencies": {
-        "uglify-js": {
-          "version": "2.2.5",
-          "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-2.2.5.tgz",
-          "integrity": "sha1-puAqcNg5eSuXgEiLe4sYTAlcmcc=",
-          "dev": true,
-          "requires": {
-            "optimist": "~0.3.5",
-            "source-map": "~0.1.7"
-          }
-        }
+        "optimist": "~0.3.5",
+        "source-map": "~0.1.7"
+      },
+      "bin": {
+        "uglifyjs": "bin/uglifyjs"
+      },
+      "engines": {
+        "node": ">=0.4.0"
       }
     },
-    "tunnel-agent": {
+    "node_modules/tunnel-agent": {
       "version": "0.4.3",
       "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.4.3.tgz",
       "integrity": "sha1-Y3PbdpCf5XDgjXNYM2Xtgop07us=",
       "dev": true,
-      "optional": true
+      "optional": true,
+      "engines": {
+        "node": "*"
+      }
     },
-    "uglify-js": {
+    "node_modules/uglify-js": {
       "version": "2.4.24",
       "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-2.4.24.tgz",
       "integrity": "sha1-+tV1XB4Vd2WLsG/5q25UjJW+vW4=",
       "dev": true,
-      "requires": {
+      "dependencies": {
         "async": "~0.2.6",
         "source-map": "0.1.34",
         "uglify-to-browserify": "~1.0.0",
         "yargs": "~3.5.4"
+      },
+      "bin": {
+        "uglifyjs": "bin/uglifyjs"
+      },
+      "engines": {
+        "node": ">=0.4.0"
       }
     },
-    "uglify-to-browserify": {
+    "node_modules/uglify-to-browserify": {
       "version": "1.0.2",
       "resolved": "https://registry.npmjs.org/uglify-to-browserify/-/uglify-to-browserify-1.0.2.tgz",
       "integrity": "sha1-bgkk1r2mta/jSeOabWMoUKD4grc=",
       "dev": true
     },
-    "window-size": {
+    "node_modules/window-size": {
       "version": "0.1.0",
       "resolved": "https://registry.npmjs.org/window-size/-/window-size-0.1.0.tgz",
       "integrity": "sha1-VDjNLqk7IC76Ohn+iIeu58lPnJ0=",
-      "dev": true
+      "dev": true,
+      "engines": {
+        "node": ">= 0.8.0"
+      }
     },
-    "with": {
+    "node_modules/with": {
       "version": "3.0.1",
       "resolved": "https://registry.npmjs.org/with/-/with-3.0.1.tgz",
       "integrity": "sha1-CDVNpBAkPPYXP7FCuwTmxm+W+FQ=",
       "dev": true,
-      "requires": {
+      "dependencies": {
         "uglify-js": "~2.4.12"
       }
     },
-    "wordwrap": {
+    "node_modules/wordwrap": {
       "version": "0.0.2",
       "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-0.0.2.tgz",
       "integrity": "sha1-t5Zpu0LstAn4PVg8rVLKF+qhZD8=",
-      "dev": true
+      "dev": true,
+      "engines": {
+        "node": ">=0.4.0"
+      }
     },
-    "ws": {
+    "node_modules/ws": {
       "version": "0.4.32",
       "resolved": "https://registry.npmjs.org/ws/-/ws-0.4.32.tgz",
       "integrity": "sha1-eHphVEFPPJntg8V3IVOyD+sM7DI=",
       "dev": true,
-      "requires": {
+      "hasInstallScript": true,
+      "dependencies": {
         "commander": "~2.1.0",
         "nan": "~1.0.0",
         "options": ">=0.0.5",
         "tinycolor": "0.x"
+      },
+      "bin": {
+        "wscat": "bin/wscat"
+      },
+      "engines": {
+        "node": ">=0.4.0"
       }
     },
-    "xtend": {
+    "node_modules/xtend": {
       "version": "2.1.2",
       "resolved": "https://registry.npmjs.org/xtend/-/xtend-2.1.2.tgz",
       "integrity": "sha1-bv7MKk2tjmlixJAbM3znuoe10os=",
       "dev": true,
-      "requires": {
+      "dependencies": {
         "object-keys": "~0.4.0"
+      },
+      "engines": {
+        "node": ">=0.4"
       }
     },
-    "yargs": {
+    "node_modules/yargs": {
       "version": "3.5.4",
       "resolved": "https://registry.npmjs.org/yargs/-/yargs-3.5.4.tgz",
       "integrity": "sha1-2K/49mXpTDS9JZvevRv68N3TU2E=",
       "dev": true,
-      "requires": {
+      "dependencies": {
         "camelcase": "^1.0.2",
         "decamelize": "^1.0.0",
         "window-size": "0.1.0",