diff --git a/CODEOWNERS b/client/CODEOWNERS
similarity index 100%
rename from CODEOWNERS
rename to client/CODEOWNERS
diff --git a/README.md b/client/README.md
similarity index 100%
rename from README.md
rename to client/README.md
diff --git a/css/styles.css b/client/css/styles.css
similarity index 100%
rename from css/styles.css
rename to client/css/styles.css
diff --git a/data/restaurants.json b/client/data/restaurants.json
similarity index 100%
rename from data/restaurants.json
rename to client/data/restaurants.json
diff --git a/img/10@1x.jpg b/client/img/10@1x.jpg
similarity index 100%
rename from img/10@1x.jpg
rename to client/img/10@1x.jpg
diff --git a/img/10@2x.jpg b/client/img/10@2x.jpg
similarity index 100%
rename from img/10@2x.jpg
rename to client/img/10@2x.jpg
diff --git a/img/10@3x.jpg b/client/img/10@3x.jpg
similarity index 100%
rename from img/10@3x.jpg
rename to client/img/10@3x.jpg
diff --git a/img/1@1x.jpg b/client/img/1@1x.jpg
similarity index 100%
rename from img/1@1x.jpg
rename to client/img/1@1x.jpg
diff --git a/img/1@2x.jpg b/client/img/1@2x.jpg
similarity index 100%
rename from img/1@2x.jpg
rename to client/img/1@2x.jpg
diff --git a/img/1@3x.jpg b/client/img/1@3x.jpg
similarity index 100%
rename from img/1@3x.jpg
rename to client/img/1@3x.jpg
diff --git a/img/2@1x.jpg b/client/img/2@1x.jpg
similarity index 100%
rename from img/2@1x.jpg
rename to client/img/2@1x.jpg
diff --git a/img/2@2x.jpg b/client/img/2@2x.jpg
similarity index 100%
rename from img/2@2x.jpg
rename to client/img/2@2x.jpg
diff --git a/img/2@3x.jpg b/client/img/2@3x.jpg
similarity index 100%
rename from img/2@3x.jpg
rename to client/img/2@3x.jpg
diff --git a/img/3@1x.jpg b/client/img/3@1x.jpg
similarity index 100%
rename from img/3@1x.jpg
rename to client/img/3@1x.jpg
diff --git a/img/3@2x.jpg b/client/img/3@2x.jpg
similarity index 100%
rename from img/3@2x.jpg
rename to client/img/3@2x.jpg
diff --git a/img/3@3x.jpg b/client/img/3@3x.jpg
similarity index 100%
rename from img/3@3x.jpg
rename to client/img/3@3x.jpg
diff --git a/img/4@1x.jpg b/client/img/4@1x.jpg
similarity index 100%
rename from img/4@1x.jpg
rename to client/img/4@1x.jpg
diff --git a/img/4@2x.jpg b/client/img/4@2x.jpg
similarity index 100%
rename from img/4@2x.jpg
rename to client/img/4@2x.jpg
diff --git a/img/4@3x.jpg b/client/img/4@3x.jpg
similarity index 100%
rename from img/4@3x.jpg
rename to client/img/4@3x.jpg
diff --git a/img/5@1x.jpg b/client/img/5@1x.jpg
similarity index 100%
rename from img/5@1x.jpg
rename to client/img/5@1x.jpg
diff --git a/img/5@2x.jpg b/client/img/5@2x.jpg
similarity index 100%
rename from img/5@2x.jpg
rename to client/img/5@2x.jpg
diff --git a/img/5@3x.jpg b/client/img/5@3x.jpg
similarity index 100%
rename from img/5@3x.jpg
rename to client/img/5@3x.jpg
diff --git a/img/6@1x.jpg b/client/img/6@1x.jpg
similarity index 100%
rename from img/6@1x.jpg
rename to client/img/6@1x.jpg
diff --git a/img/6@2x.jpg b/client/img/6@2x.jpg
similarity index 100%
rename from img/6@2x.jpg
rename to client/img/6@2x.jpg
diff --git a/img/6@3x.jpg b/client/img/6@3x.jpg
similarity index 100%
rename from img/6@3x.jpg
rename to client/img/6@3x.jpg
diff --git a/img/7@1x.jpg b/client/img/7@1x.jpg
similarity index 100%
rename from img/7@1x.jpg
rename to client/img/7@1x.jpg
diff --git a/img/7@2x.jpg b/client/img/7@2x.jpg
similarity index 100%
rename from img/7@2x.jpg
rename to client/img/7@2x.jpg
diff --git a/img/7@3x.jpg b/client/img/7@3x.jpg
similarity index 100%
rename from img/7@3x.jpg
rename to client/img/7@3x.jpg
diff --git a/img/8@1x.jpg b/client/img/8@1x.jpg
similarity index 100%
rename from img/8@1x.jpg
rename to client/img/8@1x.jpg
diff --git a/img/8@2x.jpg b/client/img/8@2x.jpg
similarity index 100%
rename from img/8@2x.jpg
rename to client/img/8@2x.jpg
diff --git a/img/8@3x.jpg b/client/img/8@3x.jpg
similarity index 100%
rename from img/8@3x.jpg
rename to client/img/8@3x.jpg
diff --git a/img/9@1x.jpg b/client/img/9@1x.jpg
similarity index 100%
rename from img/9@1x.jpg
rename to client/img/9@1x.jpg
diff --git a/img/9@2x.jpg b/client/img/9@2x.jpg
similarity index 100%
rename from img/9@2x.jpg
rename to client/img/9@2x.jpg
diff --git a/img/9@3x.jpg b/client/img/9@3x.jpg
similarity index 100%
rename from img/9@3x.jpg
rename to client/img/9@3x.jpg
diff --git a/img/original/1.jpg b/client/img/original/1.jpg
similarity index 100%
rename from img/original/1.jpg
rename to client/img/original/1.jpg
diff --git a/img/original/10.jpg b/client/img/original/10.jpg
similarity index 100%
rename from img/original/10.jpg
rename to client/img/original/10.jpg
diff --git a/img/original/2.jpg b/client/img/original/2.jpg
similarity index 100%
rename from img/original/2.jpg
rename to client/img/original/2.jpg
diff --git a/img/original/3.jpg b/client/img/original/3.jpg
similarity index 100%
rename from img/original/3.jpg
rename to client/img/original/3.jpg
diff --git a/img/original/4.jpg b/client/img/original/4.jpg
similarity index 100%
rename from img/original/4.jpg
rename to client/img/original/4.jpg
diff --git a/img/original/5.jpg b/client/img/original/5.jpg
similarity index 100%
rename from img/original/5.jpg
rename to client/img/original/5.jpg
diff --git a/img/original/6.jpg b/client/img/original/6.jpg
similarity index 100%
rename from img/original/6.jpg
rename to client/img/original/6.jpg
diff --git a/img/original/7.jpg b/client/img/original/7.jpg
similarity index 100%
rename from img/original/7.jpg
rename to client/img/original/7.jpg
diff --git a/img/original/8.jpg b/client/img/original/8.jpg
similarity index 100%
rename from img/original/8.jpg
rename to client/img/original/8.jpg
diff --git a/img/original/9.jpg b/client/img/original/9.jpg
similarity index 100%
rename from img/original/9.jpg
rename to client/img/original/9.jpg
diff --git a/index.html b/client/index.html
similarity index 100%
rename from index.html
rename to client/index.html
diff --git a/js/dbhelper.js b/client/js/dbhelper.js
similarity index 100%
rename from js/dbhelper.js
rename to client/js/dbhelper.js
diff --git a/js/main.js b/client/js/main.js
similarity index 100%
rename from js/main.js
rename to client/js/main.js
diff --git a/js/restaurant_info.js b/client/js/restaurant_info.js
similarity index 100%
rename from js/restaurant_info.js
rename to client/js/restaurant_info.js
diff --git a/js/swregister.js b/client/js/swregister.js
similarity index 100%
rename from js/swregister.js
rename to client/js/swregister.js
diff --git a/restaurant.html b/client/restaurant.html
similarity index 100%
rename from restaurant.html
rename to client/restaurant.html
diff --git a/sw.js b/client/sw.js
similarity index 100%
rename from sw.js
rename to client/sw.js
diff --git a/server/.editorconfig b/server/.editorconfig
new file mode 100755
index 0000000..0f09989
--- /dev/null
+++ b/server/.editorconfig
@@ -0,0 +1,10 @@
+# editorconfig.org
+root = true
+
+[*]
+indent_style = space
+indent_size = 2
+end_of_line = lf
+charset = utf-8
+trim_trailing_whitespace = true
+insert_final_newline = true
diff --git a/server/.gitignore b/server/.gitignore
new file mode 100755
index 0000000..b18c4df
--- /dev/null
+++ b/server/.gitignore
@@ -0,0 +1,118 @@
+################################################
+############### .gitignore ##################
+################################################
+#
+# This file is only relevant if you are using git.
+#
+# Files which match the splat patterns below will
+# be ignored by git. This keeps random crap and
+# sensitive credentials from being uploaded to
+# your repository. It allows you to configure your
+# app for your machine without accidentally
+# committing settings which will smash the local
+# settings of other developers on your team.
+#
+# Some reasonable defaults are included below,
+# but, of course, you should modify/extend/prune
+# to fit your needs!
+################################################
+
+
+
+
+################################################
+# Local Configuration
+#
+# Explicitly ignore files which contain:
+#
+# 1. Sensitive information you'd rather not push to
+# your git repository.
+# e.g., your personal API keys or passwords.
+#
+# 2. Environment-specific configuration
+# Basically, anything that would be annoying
+# to have to change every time you do a
+# `git pull`
+# e.g., your local development database, or
+# the S3 bucket you're using for file uploads
+# development.
+#
+################################################
+
+config/local.js
+
+
+
+
+
+################################################
+# Dependencies
+#
+# When releasing a production app, you may
+# consider including your node_modules and
+# bower_components directory in your git repo,
+# but during development, its best to exclude it,
+# since different developers may be working on
+# different kernels, where dependencies would
+# need to be recompiled anyway.
+#
+# More on that here about node_modules dir:
+# http://www.futurealoof.com/posts/nodemodules-in-git.html
+# (credit Mikeal Rogers, @mikeal)
+#
+# About bower_components dir, you can see this:
+# http://addyosmani.com/blog/checking-in-front-end-dependencies/
+# (credit Addy Osmani, @addyosmani)
+#
+################################################
+
+node_modules
+bower_components
+
+
+
+
+################################################
+# Sails.js / Waterline / Grunt
+#
+# Files generated by Sails and Grunt, or related
+# tasks and adapters.
+################################################
+#.tmp
+dump.rdb
+
+
+
+
+
+################################################
+# Node.js / NPM
+#
+# Common files generated by Node, NPM, and the
+# related ecosystem.
+################################################
+lib-cov
+*.seed
+*.log
+*.out
+*.pid
+npm-debug.log
+
+
+
+
+
+################################################
+# Miscellaneous
+#
+# Common files generated by text editors,
+# operating systems, file systems, etc.
+################################################
+
+*~
+*#
+.DS_STORE
+.netbeans
+nbproject
+.idea
+.node_history
diff --git a/server/.sailsrc b/server/.sailsrc
new file mode 100755
index 0000000..0d2c3d9
--- /dev/null
+++ b/server/.sailsrc
@@ -0,0 +1,8 @@
+{
+ "generators": {
+ "modules": {}
+ },
+ "hooks": {
+ "grunt": false
+ }
+}
\ No newline at end of file
diff --git a/server/.tmp/localDiskDb.db b/server/.tmp/localDiskDb.db
new file mode 100755
index 0000000..8b01fbe
--- /dev/null
+++ b/server/.tmp/localDiskDb.db
@@ -0,0 +1,473 @@
+{
+ "data": {
+ "restaurants": [
+ {
+ "name": "Mission Chinese Food",
+ "neighborhood": "Manhattan",
+ "photograph": "1",
+ "address": "171 E Broadway, New York, NY 10002",
+ "latlng": {
+ "lat": 40.713829,
+ "lng": -73.989667
+ },
+ "cuisine_type": "Asian",
+ "operating_hours": {
+ "Monday": "5:30 pm - 11:00 pm",
+ "Tuesday": "5:30 pm - 11:00 pm",
+ "Wednesday": "5:30 pm - 11:00 pm",
+ "Thursday": "5:30 pm - 11:00 pm",
+ "Friday": "5:30 pm - 11:00 pm",
+ "Saturday": "12:00 pm - 4:00 pm, 5:30 pm - 12:00 am",
+ "Sunday": "12:00 pm - 4:00 pm, 5:30 pm - 11:00 pm"
+ },
+ "reviews": [
+ {
+ "name": "Steve",
+ "date": "October 26, 2016",
+ "rating": 4,
+ "comments": "Mission Chinese Food has grown up from its scrappy Orchard Street days into a big, two story restaurant equipped with a pizza oven, a prime rib cart, and a much broader menu. Yes, it still has all the hits — the kung pao pastrami, the thrice cooked bacon —but chef/proprietor Danny Bowien and executive chef Angela Dimayuga have also added a raw bar, two generous family-style set menus, and showstoppers like duck baked in clay. And you can still get a lot of food without breaking the bank."
+ },
+ {
+ "name": "Morgan",
+ "date": "October 26, 2016",
+ "rating": "4",
+ "comments": "This place is a blast. Must orders: GREEN TEA NOODS, sounds gross (to me at least) but these were incredible!, Kung pao pastrami (but you already knew that), beef tartare was a fun appetizer that we decided to try, the spicy ma po tofu SUPER spicy but delicous, egg rolls and scallion pancake i could have passed on... I wish we would have gone with a larger group, so much more I would have liked to try!"
+ },
+ {
+ "name": "Jason",
+ "date": "October 26, 2016",
+ "rating": "3",
+ "comments": "I was VERY excited to come here after seeing and hearing so many good things about this place. Having read much, I knew going into it that it was not going to be authentic Chinese. The place was edgy, had a punk rock throwback attitude, and generally delivered the desired atmosphere. Things went downhill from there though. The food was okay at best and the best qualities were easily overshadowed by what I believe to be poor decisions by the kitchen staff."
+ }
+ ],
+ "createdAt": "2017-07-25T02:26:54.985Z",
+ "updatedAt": "2017-07-25T02:26:54.985Z",
+ "id": 1
+ },
+ {
+ "name": "Emily",
+ "neighborhood": "Brooklyn",
+ "photograph": "2",
+ "address": "919 Fulton St, Brooklyn, NY 11238",
+ "latlng": {
+ "lat": 40.683555,
+ "lng": -73.966393
+ },
+ "cuisine_type": "Pizza",
+ "operating_hours": {
+ "Monday": "5:30 pm - 11:00 pm",
+ "Tuesday": "5:30 pm - 11:00 pm",
+ "Wednesday": "5:30 pm - 11:00 pm",
+ "Thursday": "5:30 pm - 11:00 pm",
+ "Friday": "5:30 pm - 11:00 pm",
+ "Saturday": "5:00 pm - 11:30 pm",
+ "Sunday": "12:00 pm - 3:00 pm, 5:00 pm - 11:00 pm"
+ },
+ "reviews": [
+ {
+ "name": "Steph",
+ "date": "October 26, 2016",
+ "rating": 4,
+ "comments": "Five star food, two star atmosphere. I would definitely get takeout from this place - but dont think I have the energy to deal with the hipster ridiculousness again. By the time we left the wait was two hours long."
+ },
+ {
+ "name": "Steve",
+ "date": "October 26, 2016",
+ "rating": 4,
+ "comments": "This cozy Clinton Hill restaurant excels at both straightforward and unusual wood-fired pizzas. If you want a taste of the latter, consider ordering the Emily, which is topped with mozzarella, pistachios, truffled sottocenere cheese, and honey. The menu includes salads and a handful of starters, as well as a burger that some meat connoisseurs consider to be among the best in the city."
+ },
+ {
+ "name": "Sam",
+ "date": "October 26, 2016",
+ "rating": 5,
+ "comments": "5 star atmosphere as it is very cozy with great staff. 5 star food as their Emmy burger is outrageously good. and its on a pretzel bun.. Too juicy for its own good and downright addicting. Also try the Colony pizza. Many others looked like worth competitors, but the Colony really found its way to my heart. when you start with a great crust, top it with top notch cheese and sauce, you've got a winner. But, if you go a step further and add the salty from the pepperoni, the sweet from the honey, and the spicy from the chili oil.... your mouth is confused and happy at the same time."
+ }
+ ],
+ "createdAt": "2017-07-25T02:29:58.323Z",
+ "updatedAt": "2017-07-25T02:29:58.323Z",
+ "id": 2
+ },
+ {
+ "name": "Kang Ho Dong Baekjeong",
+ "neighborhood": "Manhattan",
+ "photograph": "3",
+ "address": "1 E 32nd St, New York, NY 10016",
+ "latlng": {
+ "lat": 40.747143,
+ "lng": -73.985414
+ },
+ "cuisine_type": "Asian",
+ "operating_hours": {
+ "Monday": "11:30 am - 2:00 am",
+ "Tuesday": "11:30 am - 2:00 am",
+ "Wednesday": "11:30 am - 2:00 am",
+ "Thursday": "11:30 am - 2:00 am",
+ "Friday": "11:30 am - 6:00 am",
+ "Saturday": "11:30 am - 6:00 am",
+ "Sunday": "11:30 am - 2:00 am"
+ },
+ "reviews": [
+ {
+ "name": "Steve",
+ "date": "October 26, 2016",
+ "rating": 4,
+ "comments": "The tables at this 32nd Street favorite are outfitted with grills for cooking short ribs, brisket, beef tongue, rib eye, and pork jowl. The banchan plates are uniformly good, and Deuki Hong’s menu also includes winning dishes like stir-fried squid noodles, kimchi stew, and seafood pancakes. If it’s available, make sure to order the kimchi and rice “lunchbox.†Baekjeong is a great place for large groups and birthday parties."
+ },
+ {
+ "name": "ZS",
+ "date": "October 26, 2016",
+ "rating": 5,
+ "comments": "I've been to Korea before and many other Korean BBQ places. We had the regular pork belly and a beef (forgot which cut) and a seafood tofu soup. Two meat and a soup was just prefect for the two of us. We could have done one meat and one soup. The portions of the meat are great! The beef was juicy, tender and so good. The sides were excellent. "
+ },
+ {
+ "name": "Emily",
+ "date": "October 26, 2016",
+ "rating": 2,
+ "comments": "MEH. I've tried their Jersey location as well but Kang Ho Dong meat quality is severely decreasing. A Korean bbq place with whatever meat? I think NOT!"
+ }
+ ],
+ "createdAt": "2017-07-25T02:30:26.391Z",
+ "updatedAt": "2017-07-25T02:30:26.391Z",
+ "id": 3
+ },
+ {
+ "name": "Katz's Delicatessen",
+ "neighborhood": "Manhattan",
+ "photograph": "4",
+ "address": "205 E Houston St, New York, NY 10002",
+ "latlng": {
+ "lat": 40.722216,
+ "lng": -73.987501
+ },
+ "cuisine_type": "American",
+ "operating_hours": {
+ "Monday": "8:00 am - 10:30 pm",
+ "Tuesday": "8:00 am - 10:30 pm",
+ "Wednesday": "8:00 am - 10:30 pm",
+ "Thursday": "8:00 am - 2:30 am",
+ "Friday": "8:00 am - Sat",
+ "Saturday": "Open 24 hours",
+ "Sunday": "Sat - 10:30 pm"
+ },
+ "reviews": [
+ {
+ "name": "Steve",
+ "date": "October 26, 2016",
+ "rating": 5,
+ "comments": "In 127 years, little has changed at Katz's. It remains one of New York's — and the country's — essential Jewish delicatessens. Every inch of the massive Lower East Side space smells intensely of pastrami and rye loaves. The sandwiches are massive, so they are best when shared. Order at the counter, and don't forget to tip your slicer — your sandwich will be better for it."
+ },
+ {
+ "name": "Allen",
+ "date": "October 26, 2016",
+ "rating": 5,
+ "comments": "If I lived in NY and got diabetes from eating here every single time I ate, I would do it over and over and over again just for that first bite. These guys know how to make a sandwich. The heart attack comes free of charge! Came by while I was visiting NYC. First pit-stop when I come back :)!"
+ },
+ {
+ "name": "David",
+ "date": "October 26, 2016",
+ "rating": 2,
+ "comments": "Ok so four of us came. One more later who didn't order becauase it's so expensive and simple. Seriously, a bunch of meat albeit you can sample beforehand on rye/white/wheat bread. Cheese extra. Pickles free, you can just ask them at the pickup counter. But seriously 20 bucks gone for an non-flavored half sandwich. And a line that is long, especially if you want seating. I'm down to just take a quick look where Sally and Harry sat and leave to the other delis all around NYC. Oh and they accept Samsung pay."
+ }
+ ],
+ "createdAt": "2017-07-25T02:30:43.429Z",
+ "updatedAt": "2017-07-25T02:30:43.429Z",
+ "id": 4
+ },
+ {
+ "name": "Roberta's Pizza",
+ "neighborhood": "Brooklyn",
+ "photograph": "5",
+ "address": "261 Moore St, Brooklyn, NY 11206",
+ "latlng": {
+ "lat": 40.705089,
+ "lng": -73.933585
+ },
+ "cuisine_type": "Pizza",
+ "operating_hours": {
+ "Monday": "11:00 am - 12:00 am",
+ "Tuesday": "11:00 am - 12:00 am",
+ "Wednesday": "11:00 am - 12:00 am",
+ "Thursday": "11:00 am - 12:00 am",
+ "Friday": "11:00 am - 12:00 am",
+ "Saturday": "10:00 am - 12:00 am",
+ "Sunday": "10:00 am - 12:00 am"
+ },
+ "reviews": [
+ {
+ "name": "Steve",
+ "date": "October 26, 2016",
+ "rating": 4,
+ "comments": "Roberta's is the epicenter of the modern Brooklyn food scene.The pizzas are fantastic, but the restaurant really flexes its muscles with the vegetable dishes. In addition to the pies, consider ordering the radishes, the romaine salad, the roasted beets, and some of the charcuterie."
+ },
+ {
+ "name": "Raymond",
+ "date": "October 26, 2016",
+ "rating": 4,
+ "comments": "Roberta's, one of the better pizzas I have had in my life. Very trendy and hipsterish spot. Came here for lunch on a random weekday afternoon and when we arrived, there was a line forming already. The space is a bit cramped. You'll get to know your neighbors soon enough. The pizza is just delightful and delicious. It's a ncie plus that you get to see them firing up the pizzas in the corner. The major issue with Roberta's is the trek out to the Williamsburg/Bushwick."
+ },
+ {
+ "name": "Laurel",
+ "date": "October 26, 2016",
+ "rating": 4,
+ "comments": "The pizza is fantastic, not THE best I've ever had, but would definitely go back since it has great food and great ambiance. Definitely worth going to. It has A LOT of hype in the New York food scene, and I question if it deserves all of it, but it's still a totally great spot to hit up when in the area!!"
+ }
+ ],
+ "createdAt": "2017-07-25T02:30:55.347Z",
+ "updatedAt": "2017-07-25T02:30:55.347Z",
+ "id": 5
+ },
+ {
+ "name": "Hometown BBQ",
+ "neighborhood": "Brooklyn",
+ "photograph": "6",
+ "address": "454 Van Brunt St, Brooklyn, NY 11231",
+ "latlng": {
+ "lat": 40.674925,
+ "lng": -74.016162
+ },
+ "cuisine_type": "American",
+ "operating_hours": {
+ "Monday": "Closed",
+ "Tuesday": "12:00 pm - 10:00 pm",
+ "Wednesday": "12:00 pm - 10:00 pm",
+ "Thursday": "12:00 pm - 10:00 pm",
+ "Friday": "12:00 pm - 11:00 pm",
+ "Saturday": "12:00 pm - 11:00 pm",
+ "Sunday": "12:00 pm - 9:00 pm"
+ },
+ "reviews": [
+ {
+ "name": "Steve",
+ "date": "October 26, 2016",
+ "rating": 4,
+ "comments": "Barbecue aficionados agree that Billy Durney is cooking up some of the best Texas-style barbecue in the city. Straightforward classics like smoked brisket and baby back ribs are always a strong choice, but there are also options like pork belly tacos and a lamb belly banh mi. The space is sprawling in a way that feels like the real deal, and Durney himself can usually be found working the room, and keeping a watchful eye on the smoking meats. It's counter service only, and there's often a line, but for the scene and certainly for the meat, it's easily worth the trip to Red Hook."
+ },
+ {
+ "name": "Michelle",
+ "date": "October 26, 2016",
+ "rating": 4,
+ "comments": "Overall, a great try of New York BBQ. The restaurant décor is rustic with a good amount of seats to sit and enjoy the meal. I definitely would love to come back and try that monster of a beef rib!"
+ },
+ {
+ "name": "Ai-Mei",
+ "date": "October 26, 2016",
+ "rating": 4,
+ "comments": "mmmmmm, what a gem this is in bklyn! I loveeee how soft their brisket is here. Their pork tacos are to die for, their different variety of ribs and lastly, their lamb is not gamey at all. Super wallet friendly for the amount they give you. I highly recommend this spot- after eating here, you can definitely walk over for Steve's key lime pies."
+ }
+ ],
+ "createdAt": "2017-07-25T02:31:07.169Z",
+ "updatedAt": "2017-07-25T02:31:07.169Z",
+ "id": 6
+ },
+ {
+ "name": "Superiority Burger",
+ "neighborhood": "Manhattan",
+ "photograph": "7",
+ "address": "430 E 9th St, New York, NY 10009",
+ "latlng": {
+ "lat": 40.727397,
+ "lng": -73.983645
+ },
+ "cuisine_type": "American",
+ "operating_hours": {
+ "Monday": "11:30 am - 10:00 pm",
+ "Tuesday": "Closed",
+ "Wednesday": "11:30 am - 10:00 pm",
+ "Thursday": "11:30 am - 10:00 pm",
+ "Friday": "11:30 am - 10:00 pm",
+ "Saturday": "11:30 am - 10:00 pm",
+ "Sunday": "11:30 am - 10:00 pm"
+ },
+ "reviews": [
+ {
+ "name": "Steve",
+ "date": "October 26, 2016",
+ "rating": 4,
+ "comments": "Brooks Headley’s tiny East Village cafe is so much more than a veggie burger spot — it's one of the best bang-for-your-buck restaurants in Lower Manhattan. Headley and his crew turn seasonal vegetables into delectable salads and riffs on American comfort food favorites. The specials menu changes daily, and the rest of the menu is constantly evolving. You can get a lot of food to eat here for under $15 per person."
+ },
+ {
+ "name": "Gabriel",
+ "date": "October 26, 2016",
+ "rating": 5,
+ "comments": "I was turned on to this place following the glowing NYT review. Its near my area of the city so I figured why not go? Man they weren't kidding, Superiority Burger is probably the best vegetarian experience I've ever had!"
+ },
+ {
+ "name": "Shivi",
+ "date": "October 26, 2016",
+ "rating": 4,
+ "comments": "Great flavors and very satisfying. Craving a sandwich, I stopped by on a Friday night with a vegetarian friend. Super small location with just a few seats inside. Ambiance is a bit industrial, good is definitely much more sophisticated than the look of the place! Ordered the superiority burger anda side of potato salad. The potato salad was very light and tasted clean ( less mayo, lots of dill and some cucumber) -- refreshing for a humid summer night! Sandwich was surprisingly delicious - it is very small ( funny allusion to a White Castle burger) but it packs a punch! Not only are there layers of flavors ( amazing sauces) but the party itself had a great texture Ahmed flavor-- well done and so wonderful! Will definitely stop by again for an overall amazing burger/sandwich. Staff was super nice and accommodating but not out of the way friendly."
+ }
+ ],
+ "createdAt": "2017-07-25T02:31:19.824Z",
+ "updatedAt": "2017-07-25T02:31:19.824Z",
+ "id": 7
+ },
+ {
+ "name": "The Dutch",
+ "neighborhood": "Manhattan",
+ "photograph": "8",
+ "address": "131 Sullivan St, New York, NY 10012",
+ "latlng": {
+ "lat": 40.726584,
+ "lng": -74.002082
+ },
+ "cuisine_type": "American",
+ "operating_hours": {
+ "Monday": "11:30 am - 3:00 pm, 5:30 pm - 11:00 pm",
+ "Tuesday": "11:30 am - 3:00 pm, 5:30 pm - 11:00 pm",
+ "Wednesday": "11:30 am - 3:00 pm, 5:30 pm - 11:00 pm",
+ "Thursday": "11:30 am - 3:00 pm, 5:30 pm - 11:00 pm",
+ "Friday": "11:30 am - 3:00 pm, 5:30 pm - 11:30 pm",
+ "Saturday": "10:00 am - 3:00 pm, 5:30 pm - 11:30 pm",
+ "Sunday": "10:00 am - 3:00 pm, 5:30 pm - 11:00 pm"
+ },
+ "reviews": [
+ {
+ "name": "Steve",
+ "date": "October 26, 2016",
+ "rating": 4,
+ "comments": "Over the last five years, The Dutch has turned into the quintessential American restaurant that chef Andrew Carmellini and partners Josh Pickard and Luke Ostrom sought to evoke when it first opened. It’s a great choice when you’re craving a steak, a burger, or oysters, and the menu always includes plentiful seafood options as well as pastas. The Dutch is now an indelible part of the Soho landscape."
+ },
+ {
+ "name": "Loren",
+ "date": "October 26, 2016",
+ "rating": 4,
+ "comments": "I randomly came here on a Saturday night. I was pleasantly surprised with the food and the service. We had the calamari and the ceviche with avocado, and then the catfish. Oh! Then we had the banana soufflé for dessert with ice cream. It was all delicious and well put together. Would love to eat here again."
+ },
+ {
+ "name": "Lori",
+ "date": "October 26, 2016",
+ "rating": 4,
+ "comments": "Aside from the slightly claustrophobic dining area and the fact that you may have difficulty hearing your dining companion, I'd return to The Dutch without hesitation. The food is surprisingly well-executed and conceived, and our dinner service flowed smoothly without a hitch. Just make sure to get a reservation in advance, as I'm sure more than just a few other people will have the same idea."
+ }
+ ],
+ "createdAt": "2017-07-25T02:31:33.052Z",
+ "updatedAt": "2017-07-25T02:31:33.052Z",
+ "id": 8
+ },
+ {
+ "name": "Mu Ramen",
+ "neighborhood": "Queens",
+ "photograph": "9",
+ "address": "1209 Jackson Ave, Queens, NY 11101",
+ "latlng": {
+ "lat": 40.743797,
+ "lng": -73.950652
+ },
+ "cuisine_type": "Asian",
+ "operating_hours": {
+ "Monday": "5:00 pm - 10:00 pm",
+ "Tuesday": "5:00 pm - 10:00 pm",
+ "Wednesday": "5:00 pm - 10:00 pm",
+ "Thursday": "5:00 pm - 10:00 pm",
+ "Friday": "5:00 pm - 11:00 pm",
+ "Saturday": "5:00 pm - 11:00 pm",
+ "Sunday": "5:00 pm - 10:00 pm"
+ },
+ "reviews": [
+ {
+ "name": "Steve",
+ "date": "October 26, 2016",
+ "rating": 4,
+ "comments": "Joshua Smookler’s two-year-old ramen shop serves one of the best tonkotsu broths around. Beyond ramen, Mu also offers some high minded plates, like foie gras-stuffed chicken wings, as well as dry-aged Japanese Wagyu beef specials. Mu is just 10 short minutes away from Midtown via the 7-train."
+ },
+ {
+ "name": "Brittany",
+ "date": "October 26, 2016",
+ "rating": 4,
+ "comments": "Overall, I would definitely recommend this place if you enjoy thick curly noodles with a thick, intense broth. If you don't there are still other options but I can't vouch for those."
+ },
+ {
+ "name": "Sally",
+ "date": "October 26, 2016",
+ "rating": 4,
+ "comments": "One of the tastiest and most unique ramen places I've been to in NYC, but also the priciest. I think overall its worth the try. Not an everyday casual ramen shop though."
+ }
+ ],
+ "createdAt": "2017-07-25T02:31:43.330Z",
+ "updatedAt": "2017-07-25T02:31:43.330Z",
+ "id": 9
+ },
+ {
+ "name": "Casa Enrique",
+ "neighborhood": "Queens",
+ "address": "5-48 49th Ave, Queens, NY 11101",
+ "latlng": {
+ "lat": 40.743394,
+ "lng": -73.954235
+ },
+ "cuisine_type": "Mexican",
+ "operating_hours": {
+ "Monday": "5:00 pm - 12:00 am",
+ "Tuesday": "5:00 pm - 12:00 am",
+ "Wednesday": "5:00 pm - 12:00 am",
+ "Thursday": "5:00 pm - 12:00 am",
+ "Friday": "5:00 pm - 12:00 am",
+ "Saturday": "11:00 am - 12:00 am",
+ "Sunday": "11:00 am - 12:00 am"
+ },
+ "reviews": [
+ {
+ "name": "Steve",
+ "date": "October 26, 2016",
+ "rating": 5,
+ "comments": "Head to this laid-back Long Island City restaurant for beef tongue tacos, chicken smothered in a heady mole sauce, and a monster crab tostada. New York's only Michelin-starred Mexican restaurant is an especially cool choice for lunch during the week or drinks after work. Eater critic Ryan Sutton awarded this restaurant two stars."
+ },
+ {
+ "name": "Rob",
+ "date": "October 26, 2016",
+ "rating": 5,
+ "comments": "The hype was real. Please go. Get the ceviche. And the tres leches. You're welcome"
+ },
+ {
+ "name": "Jason",
+ "date": "October 26, 2016",
+ "rating": 4,
+ "comments": "For a Michelin star restaurant, it's fairly priced and the food is fairly good. Started with a strawberry margarita which was good in flavor but not much alcohol. Had the chicken enchiladas with salsa verde and it was really good. Great balance in flavor and a good portion. Extra tasty with their hot sauces. My wife had the lamb but it was a bit too salty for our taste. Although, it was cooked very well and fell off the bone. The highlight of the night was the tres leches cake. Probably the best I've ever had to be honest. Not too sweet and very milky. Overall, one of my top 3 favorite Mexican in NY."
+ }
+ ],
+ "createdAt": "2017-07-25T02:31:59.276Z",
+ "updatedAt": "2017-07-25T02:31:59.276Z",
+ "id": 10
+ }
+ ]
+ },
+ "schema": {
+ "restaurant": {
+ "id": {
+ "type": "integer",
+ "autoIncrement": true,
+ "primaryKey": true,
+ "unique": true
+ },
+ "createdAt": {
+ "type": "datetime"
+ },
+ "updatedAt": {
+ "type": "datetime"
+ }
+ },
+ "restaurants": {
+ "id": {
+ "type": "integer",
+ "autoIncrement": true,
+ "primaryKey": true,
+ "unique": true
+ },
+ "createdAt": {
+ "type": "datetime"
+ },
+ "updatedAt": {
+ "type": "datetime"
+ }
+ }
+ },
+ "counters": {
+ "restaurant": {
+ "id": 10
+ },
+ "restaurants": {
+ "id": 10
+ }
+ }
+}
diff --git a/server/CODEOWNERS b/server/CODEOWNERS
new file mode 100755
index 0000000..d82d945
--- /dev/null
+++ b/server/CODEOWNERS
@@ -0,0 +1 @@
+* @forbiddenvoid @richardkalehoff @asparr
diff --git a/server/README.md b/server/README.md
new file mode 100755
index 0000000..01bb367
--- /dev/null
+++ b/server/README.md
@@ -0,0 +1,52 @@
+# Local Development API Server
+## Usage
+#### Get Restaurants
+```
+curl "http://localhost:1337/restaurants"
+```
+#### Get Restaurants by id
+````
+curl "http://localhost:1337/restaurants/{3}"
+````
+
+## Architecture
+Local server
+- Node.js
+- Sails.js
+
+## Contributors
+
+- [Brandy Lee Camacho - Technical Project Manager](mailto:brandy.camacho@udacity.com)
+- [David Harris - Web Services Lead](mailto:david.harris@udacity.com)
+- [Omar Albeik - Frontend engineer](mailto:omaralbeik@gmail.com)
+
+## Getting Started
+
+### Development local API Server
+_Location of server = /server_
+Server depends on [node.js LTS Version: v6.11.2 ](https://nodejs.org/en/download/), [npm](https://www.npmjs.com/get-npm), and [sails.js](http://sailsjs.com/)
+Please make sure you have these installed before proceeding forward.
+
+Great, you are ready to proceed forward; awesome!
+
+Let's start with running commands in your terminal, known as command line interface (CLI)
+
+###### Install project dependancies
+```Install project dependancies
+# npm i
+```
+###### Install Sails.js globally
+```Install sails global
+# npm i sails -g
+```
+###### Start the server
+```Start server
+# node server
+```
+### You should now have access to your API server environment
+debug: Environment : development
+debug: Port : 1337
+
+
+If you find a bug in the source code or a mistake in the documentation, you can help us by
+submitting an issue to our [Waffle Dashboard](https://waffle.io/udacity/mwnd-issues). Even better you can submit a Pull Request with a fix :)
diff --git a/server/api/controllers/.gitkeep b/server/api/controllers/.gitkeep
new file mode 100755
index 0000000..e69de29
diff --git a/server/api/controllers/RestaurantsController.js b/server/api/controllers/RestaurantsController.js
new file mode 100755
index 0000000..1831d7e
--- /dev/null
+++ b/server/api/controllers/RestaurantsController.js
@@ -0,0 +1,11 @@
+/**
+ * RestaurantsController
+ *
+ * @description :: Server-side logic for managing restaurants
+ * @help :: See http://sailsjs.org/#!/documentation/concepts/Controllers
+ */
+
+module.exports = {
+
+};
+
diff --git a/server/api/models/.gitkeep b/server/api/models/.gitkeep
new file mode 100755
index 0000000..e69de29
diff --git a/server/api/models/Restaurants.js b/server/api/models/Restaurants.js
new file mode 100755
index 0000000..68c54e2
--- /dev/null
+++ b/server/api/models/Restaurants.js
@@ -0,0 +1,14 @@
+/**
+ * Restaurants.js
+ *
+ * @description :: TODO: You might write a short summary of how this model works and what it represents here.
+ * @docs :: http://sailsjs.org/documentation/concepts/models-and-orm/models
+ */
+
+module.exports = {
+
+ attributes: {
+
+ }
+};
+
diff --git a/server/api/policies/sessionAuth.js b/server/api/policies/sessionAuth.js
new file mode 100755
index 0000000..8f9a264
--- /dev/null
+++ b/server/api/policies/sessionAuth.js
@@ -0,0 +1,21 @@
+/**
+ * sessionAuth
+ *
+ * @module :: Policy
+ * @description :: Simple policy to allow any authenticated user
+ * Assumes that your login action in one of your controllers sets `req.session.authenticated = true;`
+ * @docs :: http://sailsjs.org/#!/documentation/concepts/Policies
+ *
+ */
+module.exports = function(req, res, next) {
+
+ // User is allowed, proceed to the next policy,
+ // or if this is the last policy, the controller
+ if (req.session.authenticated) {
+ return next();
+ }
+
+ // User is not allowed
+ // (default res.forbidden() behavior can be overridden in `config/403.js`)
+ return res.forbidden('You are not permitted to perform this action.');
+};
diff --git a/server/api/responses/badRequest.js b/server/api/responses/badRequest.js
new file mode 100755
index 0000000..0d37825
--- /dev/null
+++ b/server/api/responses/badRequest.js
@@ -0,0 +1,76 @@
+/**
+ * 400 (Bad Request) Handler
+ *
+ * Usage:
+ * return res.badRequest();
+ * return res.badRequest(data);
+ * return res.badRequest(data, 'some/specific/badRequest/view');
+ *
+ * e.g.:
+ * ```
+ * return res.badRequest(
+ * 'Please choose a valid `password` (6-12 characters)',
+ * 'trial/signup'
+ * );
+ * ```
+ */
+
+module.exports = function badRequest(data, options) {
+
+ // Get access to `req`, `res`, & `sails`
+ var req = this.req;
+ var res = this.res;
+ var sails = req._sails;
+
+ // Set status code
+ res.status(400);
+
+ // Log error to console
+ if (data !== undefined) {
+ sails.log.verbose('Sending 400 ("Bad Request") response: \n',data);
+ }
+ else sails.log.verbose('Sending 400 ("Bad Request") response');
+
+ // Only include errors in response if application environment
+ // is not set to 'production'. In production, we shouldn't
+ // send back any identifying information about errors.
+ if (sails.config.environment === 'production' && sails.config.keepResponseErrors !== true) {
+ data = undefined;
+ }
+
+ // If the user-agent wants JSON, always respond with JSON
+ // If views are disabled, revert to json
+ if (req.wantsJSON || sails.config.hooks.views === false) {
+ return res.jsonx(data);
+ }
+
+ // If second argument is a string, we take that to mean it refers to a view.
+ // If it was omitted, use an empty object (`{}`)
+ options = (typeof options === 'string') ? { view: options } : options || {};
+
+ // Attempt to prettify data for views, if it's a non-error object
+ var viewData = data;
+ if (!(viewData instanceof Error) && 'object' == typeof viewData) {
+ try {
+ viewData = require('util').inspect(data, {depth: null});
+ }
+ catch(e) {
+ viewData = undefined;
+ }
+ }
+
+ // If a view was provided in options, serve it.
+ // Otherwise try to guess an appropriate view, or if that doesn't
+ // work, just send JSON.
+ if (options.view) {
+ return res.view(options.view, { data: viewData, title: 'Bad Request' });
+ }
+
+ // If no second argument provided, try to serve the implied view,
+ // but fall back to sending JSON(P) if no view can be inferred.
+ else return res.guessView({ data: viewData, title: 'Bad Request' }, function couldNotGuessView () {
+ return res.jsonx(data);
+ });
+
+};
+
diff --git a/server/api/responses/created.js b/server/api/responses/created.js
new file mode 100755
index 0000000..3140113
--- /dev/null
+++ b/server/api/responses/created.js
@@ -0,0 +1,60 @@
+/**
+ * 201 (CREATED) Response
+ *
+ * Usage:
+ * return res.created();
+ * return res.created(data);
+ * return res.created(data, 'auth/login');
+ *
+ * @param {Object} data
+ * @param {String|Object} options
+ * - pass string to render specified view
+ */
+
+module.exports = function created (data, options) {
+
+ // Get access to `req`, `res`, & `sails`
+ var req = this.req;
+ var res = this.res;
+ var sails = req._sails;
+
+ sails.log.silly('res.created() :: Sending 201 ("CREATED") response');
+
+ // Set status code
+ res.status(201);
+
+ // If appropriate, serve data as JSON(P)
+ // If views are disabled, revert to json
+ if (req.wantsJSON || sails.config.hooks.views === false) {
+ return res.jsonx(data);
+ }
+
+ // If second argument is a string, we take that to mean it refers to a view.
+ // If it was omitted, use an empty object (`{}`)
+ options = (typeof options === 'string') ? { view: options } : options || {};
+
+ // Attempt to prettify data for views, if it's a non-error object
+ var viewData = data;
+ if (!(viewData instanceof Error) && 'object' == typeof viewData) {
+ try {
+ viewData = require('util').inspect(data, {depth: null});
+ }
+ catch(e) {
+ viewData = undefined;
+ }
+ }
+
+ // If a view was provided in options, serve it.
+ // Otherwise try to guess an appropriate view, or if that doesn't
+ // work, just send JSON.
+ if (options.view) {
+ return res.view(options.view, { data: viewData, title: 'Created' });
+ }
+
+ // If no second argument provided, try to serve the implied view,
+ // but fall back to sending JSON(P) if no view can be inferred.
+ else return res.guessView({ data: viewData, title: 'Created' }, function couldNotGuessView () {
+ return res.jsonx(data);
+ });
+
+};
diff --git a/server/api/responses/forbidden.js b/server/api/responses/forbidden.js
new file mode 100755
index 0000000..ca94852
--- /dev/null
+++ b/server/api/responses/forbidden.js
@@ -0,0 +1,89 @@
+/**
+ * 403 (Forbidden) Handler
+ *
+ * Usage:
+ * return res.forbidden();
+ * return res.forbidden(err);
+ * return res.forbidden(err, 'some/specific/forbidden/view');
+ *
+ * e.g.:
+ * ```
+ * return res.forbidden('Access denied.');
+ * ```
+ */
+
+module.exports = function forbidden (data, options) {
+
+ // Get access to `req`, `res`, & `sails`
+ var req = this.req;
+ var res = this.res;
+ var sails = req._sails;
+
+ // Set status code
+ res.status(403);
+
+ // Log error to console
+ if (data !== undefined) {
+ sails.log.verbose('Sending 403 ("Forbidden") response: \n',data);
+ }
+ else sails.log.verbose('Sending 403 ("Forbidden") response');
+
+ // Only include errors in response if application environment
+ // is not set to 'production'. In production, we shouldn't
+ // send back any identifying information about errors.
+ if (sails.config.environment === 'production' && sails.config.keepResponseErrors !== true) {
+ data = undefined;
+ }
+
+ // If the user-agent wants JSON, always respond with JSON
+ // If views are disabled, revert to json
+ if (req.wantsJSON || sails.config.hooks.views === false) {
+ return res.jsonx(data);
+ }
+
+ // If second argument is a string, we take that to mean it refers to a view.
+ // If it was omitted, use an empty object (`{}`)
+ options = (typeof options === 'string') ? { view: options } : options || {};
+
+ // Attempt to prettify data for views, if it's a non-error object
+ var viewData = data;
+ if (!(viewData instanceof Error) && 'object' == typeof viewData) {
+ try {
+ viewData = require('util').inspect(data, {depth: null});
+ }
+ catch(e) {
+ viewData = undefined;
+ }
+ }
+
+ // If a view was provided in options, serve it.
+ // Otherwise try to guess an appropriate view, or if that doesn't
+ // work, just send JSON.
+ if (options.view) {
+ return res.view(options.view, { data: viewData, title: 'Forbidden' });
+ }
+
+ // If no second argument provided, try to serve the default view,
+ // but fall back to sending JSON(P) if any errors occur.
+ else return res.view('403', { data: viewData, title: 'Forbidden' }, function (err, html) {
+
+ // If a view error occured, fall back to JSON(P).
+ if (err) {
+ //
+ // Additionally:
+ // • If the view was missing, ignore the error but provide a verbose log.
+ if (err.code === 'E_VIEW_FAILED') {
+ sails.log.verbose('res.forbidden() :: Could not locate view for error page (sending JSON instead). Details: ',err);
+ }
+ // Otherwise, if this was a more serious error, log to the console with the details.
+ else {
+ sails.log.warn('res.forbidden() :: When attempting to render error page view, an error occured (sending JSON instead). Details: ', err);
+ }
+ return res.jsonx(data);
+ }
+
+ return res.send(html);
+ });
+
+};
+
diff --git a/server/api/responses/notFound.js b/server/api/responses/notFound.js
new file mode 100755
index 0000000..8f0cd03
--- /dev/null
+++ b/server/api/responses/notFound.js
@@ -0,0 +1,94 @@
+/**
+ * 404 (Not Found) Handler
+ *
+ * Usage:
+ * return res.notFound();
+ * return res.notFound(err);
+ * return res.notFound(err, 'some/specific/notfound/view');
+ *
+ * e.g.:
+ * ```
+ * return res.notFound();
+ * ```
+ *
+ * NOTE:
+ * If a request doesn't match any explicit routes (i.e. `config/routes.js`)
+ * or route blueprints (i.e. "shadow routes", Sails will call `res.notFound()`
+ * automatically.
+ */
+
+module.exports = function notFound (data, options) {
+
+ // Get access to `req`, `res`, & `sails`
+ var req = this.req;
+ var res = this.res;
+ var sails = req._sails;
+
+ // Set status code
+ res.status(404);
+
+ // Log error to console
+ if (data !== undefined) {
+ sails.log.verbose('Sending 404 ("Not Found") response: \n',data);
+ }
+ else sails.log.verbose('Sending 404 ("Not Found") response');
+
+ // Only include errors in response if application environment
+ // is not set to 'production'. In production, we shouldn't
+ // send back any identifying information about errors.
+ if (sails.config.environment === 'production' && sails.config.keepResponseErrors !== true) {
+ data = undefined;
+ }
+
+ // If the user-agent wants JSON, always respond with JSON
+ // If views are disabled, revert to json
+ if (req.wantsJSON || sails.config.hooks.views === false) {
+ return res.jsonx(data);
+ }
+
+ // If second argument is a string, we take that to mean it refers to a view.
+ // If it was omitted, use an empty object (`{}`)
+ options = (typeof options === 'string') ? { view: options } : options || {};
+
+ // Attempt to prettify data for views, if it's a non-error object
+ var viewData = data;
+ if (!(viewData instanceof Error) && 'object' == typeof viewData) {
+ try {
+ viewData = require('util').inspect(data, {depth: null});
+ }
+ catch(e) {
+ viewData = undefined;
+ }
+ }
+
+ // If a view was provided in options, serve it.
+ // Otherwise try to guess an appropriate view, or if that doesn't
+ // work, just send JSON.
+ if (options.view) {
+ return res.view(options.view, { data: viewData, title: 'Not Found' });
+ }
+
+ // If no second argument provided, try to serve the default view,
+ // but fall back to sending JSON(P) if any errors occur.
+ else return res.view('404', { data: viewData, title: 'Not Found' }, function (err, html) {
+
+ // If a view error occured, fall back to JSON(P).
+ if (err) {
+ //
+ // Additionally:
+ // • If the view was missing, ignore the error but provide a verbose log.
+ if (err.code === 'E_VIEW_FAILED') {
+ sails.log.verbose('res.notFound() :: Could not locate view for error page (sending JSON instead). Details: ',err);
+ }
+ // Otherwise, if this was a more serious error, log to the console with the details.
+ else {
+ sails.log.warn('res.notFound() :: When attempting to render error page view, an error occured (sending JSON instead). Details: ', err);
+ }
+ return res.jsonx(data);
+ }
+
+ return res.send(html);
+ });
+
+};
+
diff --git a/server/api/responses/ok.js b/server/api/responses/ok.js
new file mode 100755
index 0000000..eb70144
--- /dev/null
+++ b/server/api/responses/ok.js
@@ -0,0 +1,60 @@
+/**
+ * 200 (OK) Response
+ *
+ * Usage:
+ * return res.ok();
+ * return res.ok(data);
+ * return res.ok(data, 'auth/login');
+ *
+ * @param {Object} data
+ * @param {String|Object} options
+ * - pass string to render specified view
+ */
+
+module.exports = function sendOK (data, options) {
+
+ // Get access to `req`, `res`, & `sails`
+ var req = this.req;
+ var res = this.res;
+ var sails = req._sails;
+
+ sails.log.silly('res.ok() :: Sending 200 ("OK") response');
+
+ // Set status code
+ res.status(200);
+
+ // If appropriate, serve data as JSON(P)
+ // If views are disabled, revert to json
+ if (req.wantsJSON || sails.config.hooks.views === false) {
+ return res.jsonx(data);
+ }
+
+ // If second argument is a string, we take that to mean it refers to a view.
+ // If it was omitted, use an empty object (`{}`)
+ options = (typeof options === 'string') ? { view: options } : options || {};
+
+ // Attempt to prettify data for views, if it's a non-error object
+ var viewData = data;
+ if (!(viewData instanceof Error) && 'object' == typeof viewData) {
+ try {
+ viewData = require('util').inspect(data, {depth: null});
+ }
+ catch(e) {
+ viewData = undefined;
+ }
+ }
+
+ // If a view was provided in options, serve it.
+ // Otherwise try to guess an appropriate view, or if that doesn't
+ // work, just send JSON.
+ if (options.view) {
+ return res.view(options.view, { data: viewData, title: 'OK' });
+ }
+
+ // If no second argument provided, try to serve the implied view,
+ // but fall back to sending JSON(P) if no view can be inferred.
+ else return res.guessView({ data: viewData, title: 'OK' }, function couldNotGuessView () {
+ return res.jsonx(data);
+ });
+
+};
diff --git a/server/api/responses/serverError.js b/server/api/responses/serverError.js
new file mode 100755
index 0000000..537c248
--- /dev/null
+++ b/server/api/responses/serverError.js
@@ -0,0 +1,89 @@
+/**
+ * 500 (Server Error) Response
+ *
+ * Usage:
+ * return res.serverError();
+ * return res.serverError(err);
+ * return res.serverError(err, 'some/specific/error/view');
+ *
+ * NOTE:
+ * If something throws in a policy or controller, or an internal
+ * error is encountered, Sails will call `res.serverError()`
+ * automatically.
+ */
+
+module.exports = function serverError (data, options) {
+
+ // Get access to `req`, `res`, & `sails`
+ var req = this.req;
+ var res = this.res;
+ var sails = req._sails;
+
+ // Set status code
+ res.status(500);
+
+ // Log error to console
+ if (data !== undefined) {
+ sails.log.error('Sending 500 ("Server Error") response: \n',data);
+ }
+ else sails.log.error('Sending empty 500 ("Server Error") response');
+
+ // Only include errors in response if application environment
+ // is not set to 'production'. In production, we shouldn't
+ // send back any identifying information about errors.
+ if (sails.config.environment === 'production' && sails.config.keepResponseErrors !== true) {
+ data = undefined;
+ }
+
+ // If the user-agent wants JSON, always respond with JSON
+ // If views are disabled, revert to json
+ if (req.wantsJSON || sails.config.hooks.views === false) {
+ return res.jsonx(data);
+ }
+
+ // If second argument is a string, we take that to mean it refers to a view.
+ // If it was omitted, use an empty object (`{}`)
+ options = (typeof options === 'string') ? { view: options } : options || {};
+
+ // Attempt to prettify data for views, if it's a non-error object
+ var viewData = data;
+ if (!(viewData instanceof Error) && 'object' == typeof viewData) {
+ try {
+ viewData = require('util').inspect(data, {depth: null});
+ }
+ catch(e) {
+ viewData = undefined;
+ }
+ }
+
+ // If a view was provided in options, serve it.
+ // Otherwise try to guess an appropriate view, or if that doesn't
+ // work, just send JSON.
+ if (options.view) {
+ return res.view(options.view, { data: viewData, title: 'Server Error' });
+ }
+
+ // If no second argument provided, try to serve the default view,
+ // but fall back to sending JSON(P) if any errors occur.
+ else return res.view('500', { data: viewData, title: 'Server Error' }, function (err, html) {
+
+ // If a view error occured, fall back to JSON(P).
+ if (err) {
+ //
+ // Additionally:
+ // • If the view was missing, ignore the error but provide a verbose log.
+ if (err.code === 'E_VIEW_FAILED') {
+ sails.log.verbose('res.serverError() :: Could not locate view for error page (sending JSON instead). Details: ',err);
+ }
+ // Otherwise, if this was a more serious error, log to the console with the details.
+ else {
+ sails.log.warn('res.serverError() :: When attempting to render error page view, an error occured (sending JSON instead). Details: ', err);
+ }
+ return res.jsonx(data);
+ }
+
+ return res.send(html);
+ });
+
+};
+
diff --git a/server/api/services/.gitkeep b/server/api/services/.gitkeep
new file mode 100755
index 0000000..e69de29
diff --git a/server/app.js b/server/app.js
new file mode 100755
index 0000000..6b75170
--- /dev/null
+++ b/server/app.js
@@ -0,0 +1,60 @@
+/**
+ * app.js
+ *
+ * Use `app.js` to run your app without `sails lift`.
+ * To start the server, run: `node app.js`.
+ *
+ * This is handy in situations where the sails CLI is not relevant or useful.
+ *
+ * For example:
+ * => `node app.js`
+ * => `forever start app.js`
+ * => `node debug app.js`
+ * => `modulus deploy`
+ * => `heroku scale`
+ *
+ *
+ * The same command-line arguments are supported, e.g.:
+ * `node app.js --silent --port=80 --prod`
+ */
+
+
+// Ensure we're in the project directory, so cwd-relative paths work as expected
+// no matter where we actually lift from.
+// > Note: This is not required in order to lift, but it is a convenient default.
+process.chdir(__dirname);
+
+// Attempt to import `sails`.
+var sails;
+try {
+ sails = require('sails');
+} catch (e) {
+ console.error('To run an app using `node app.js`, you usually need to have a version of `sails` installed in the same directory as your app.');
+ console.error('To do that, run `npm install sails`');
+ console.error('');
+ console.error('Alternatively, if you have sails installed globally (i.e. you did `npm install -g sails`), you can use `sails lift`.');
+ console.error('When you run `sails lift`, your app will still use a local `./node_modules/sails` dependency if it exists,');
+ console.error('but if it doesn\'t, the app will run with the global sails instead!');
+ return;
+}
+
+// --•
+// Try to get `rc` dependency (for loading `.sailsrc` files).
+var rc;
+try {
+ rc = require('rc');
+} catch (e0) {
+ try {
+ rc = require('sails/node_modules/rc');
+ } catch (e1) {
+ console.error('Could not find dependency: `rc`.');
+ console.error('Your `.sailsrc` file(s) will be ignored.');
+ console.error('To resolve this, run:');
+ console.error('npm install rc --save');
+ rc = function () { return {}; };
+ }
+}
+
+
+// Start server
+sails.lift(rc('sails'));
diff --git a/server/config/blueprints.js b/server/config/blueprints.js
new file mode 100755
index 0000000..0bee92f
--- /dev/null
+++ b/server/config/blueprints.js
@@ -0,0 +1,162 @@
+/**
+ * Blueprint API Configuration
+ * (sails.config.blueprints)
+ *
+ * These settings are for the global configuration of blueprint routes and
+ * request options (which impact the behavior of blueprint actions).
+ *
+ * You may also override any of these settings on a per-controller basis
+ * by defining a '_config' key in your controller definition, and assigning it
+ * a configuration object with overrides for the settings in this file.
+ * A lot of the configuration options below affect so-called "CRUD methods",
+ * or your controllers' `find`, `create`, `update`, and `destroy` actions.
+ *
+ * It's important to realize that, even if you haven't defined these yourself, as long as
+ * a model exists with the same name as the controller, Sails will respond with built-in CRUD
+ * logic in the form of a JSON API, including support for sort, pagination, and filtering.
+ *
+ * For more information on the blueprint API, check out:
+ * http://sailsjs.org/#!/documentation/reference/blueprint-api
+ *
+ * For more information on the settings in this file, see:
+ * http://sailsjs.org/#!/documentation/reference/sails.config/sails.config.blueprints.html
+ *
+ */
+
+module.exports.blueprints = {
+
+ /***************************************************************************
+ * *
+ * Action routes speed up the backend development workflow by *
+ * eliminating the need to manually bind routes. When enabled, GET, POST, *
+ * PUT, and DELETE routes will be generated for every one of a controller's *
+ * actions. *
+ * *
+ * If an `index` action exists, additional naked routes will be created for *
+ * it. Finally, all `actions` blueprints support an optional path *
+ * parameter, `id`, for convenience. *
+ * *
+ * `actions` are enabled by default, and can be OK for production-- *
+ * however, if you'd like to continue to use controller/action autorouting *
+ * in a production deployment, you must take great care not to *
+ * inadvertently expose unsafe/unintentional controller logic to GET *
+ * requests. *
+ * *
+ ***************************************************************************/
+
+ // actions: true,
+
+ /***************************************************************************
+ * *
+ * RESTful routes (`sails.config.blueprints.rest`) *
+ * *
+ * REST blueprints are the automatically generated routes Sails uses to *
+ * expose a conventional REST API on top of a controller's `find`, *
+ * `create`, `update`, and `destroy` actions. *
+ * *
+ * For example, a BoatController with `rest` enabled generates the *
+ * following routes: *
+ * ::::::::::::::::::::::::::::::::::::::::::::::::::::::: *
+ * GET /boat -> BoatController.find *
+ * GET /boat/:id -> BoatController.findOne *
+ * POST /boat -> BoatController.create *
+ * PUT /boat/:id -> BoatController.update *
+ * DELETE /boat/:id -> BoatController.destroy *
+ * *
+ * `rest` blueprint routes are enabled by default, and are suitable for use *
+ * in a production scenario, as long you take standard security precautions *
+ * (combine w/ policies, etc.) *
+ * *
+ ***************************************************************************/
+
+ // rest: true,
+
+ /***************************************************************************
+ * *
+ * Shortcut routes are simple helpers to provide access to a *
+ * controller's CRUD methods from your browser's URL bar. When enabled, *
+ * GET, POST, PUT, and DELETE routes will be generated for the *
+ * controller's`find`, `create`, `update`, and `destroy` actions. *
+ * *
+ * `shortcuts` are enabled by default, but should be disabled in *
+ * production. *
+ * *
+ ***************************************************************************/
+
+ // shortcuts: true,
+
+ /***************************************************************************
+ * *
+ * An optional mount path for all blueprint routes on a controller, *
+ * including `rest`, `actions`, and `shortcuts`. This allows you to take *
+ * advantage of blueprint routing, even if you need to namespace your API *
+ * methods. *
+ * *
+ * (NOTE: This only applies to blueprint autoroutes, not manual routes from *
+ * `sails.config.routes`) *
+ * *
+ ***************************************************************************/
+
+ // prefix: '',
+
+ /***************************************************************************
+ * *
+ * An optional mount path for all REST blueprint routes on a controller. *
+ * And it do not include `actions` and `shortcuts` routes. *
+ * This allows you to take advantage of REST blueprint routing, *
+ * even if you need to namespace your RESTful API methods *
+ * *
+ ***************************************************************************/
+
+ // restPrefix: '',
+
+ /***************************************************************************
+ * *
+ * Whether to pluralize controller names in blueprint routes. *
+ * *
+ * (NOTE: This only applies to blueprint autoroutes, not manual routes from *
+ * `sails.config.routes`) *
+ * *
+ * For example, REST blueprints for `FooController` with `pluralize` *
+ * enabled: *
+ * GET /foos/:id? *
+ * POST /foos *
+ * PUT /foos/:id? *
+ * DELETE /foos/:id? *
+ * *
+ ***************************************************************************/
+
+ // pluralize: false,
+
+ /***************************************************************************
+ * *
+ * Whether the blueprint controllers should populate model fetches with *
+ * data from other models which are linked by associations *
+ * *
+ * If you have a lot of data in one-to-many associations, leaving this on *
+ * may result in very heavy api calls *
+ * *
+ ***************************************************************************/
+
+ // populate: true,
+
+ /****************************************************************************
+ * *
+ * Whether to run Model.watch() in the find and findOne blueprint actions. *
+ * Can be overridden on a per-model basis. *
+ * *
+ ****************************************************************************/
+
+ // autoWatch: true,
+
+ /****************************************************************************
+ * *
+ * The default number of records to show in the response from a "find" *
+ * action. Doubles as the default size of populated arrays if populate is *
+ * true. *
+ * *
+ ****************************************************************************/
+
+ // defaultLimit: 30
+
+};
diff --git a/server/config/bootstrap.js b/server/config/bootstrap.js
new file mode 100755
index 0000000..96208a1
--- /dev/null
+++ b/server/config/bootstrap.js
@@ -0,0 +1,17 @@
+/**
+ * Bootstrap
+ * (sails.config.bootstrap)
+ *
+ * An asynchronous bootstrap function that runs before your Sails app gets lifted.
+ * This gives you an opportunity to set up your data model, run jobs, or perform some special logic.
+ *
+ * For more information on bootstrapping your app, check out:
+ * http://sailsjs.org/#!/documentation/reference/sails.config/sails.config.bootstrap.html
+ */
+
+module.exports.bootstrap = function(cb) {
+
+ // It's very important to trigger this callback method when you are finished
+ // with the bootstrap! (otherwise your server will never lift, since it's waiting on the bootstrap)
+ cb();
+};
diff --git a/server/config/connections.js b/server/config/connections.js
new file mode 100755
index 0000000..3eebb7c
--- /dev/null
+++ b/server/config/connections.js
@@ -0,0 +1,92 @@
+/**
+ * Connections
+ * (sails.config.connections)
+ *
+ * `Connections` are like "saved settings" for your adapters. What's the difference between
+ * a connection and an adapter, you might ask? An adapter (e.g. `sails-mysql`) is generic--
+ * it needs some additional information to work (e.g. your database host, password, user, etc.)
+ * A `connection` is that additional information.
+ *
+ * Each model must have a `connection` property (a string) which is references the name of one
+ * of these connections. If it doesn't, the default `connection` configured in `config/models.js`
+ * will be applied. Of course, a connection can (and usually is) shared by multiple models.
+ * .
+ * Note: If you're using version control, you should put your passwords/api keys
+ * in `config/local.js`, environment variables, or use another strategy.
+ * (this is to prevent you inadvertently sensitive credentials up to your repository.)
+ *
+ * For more information on configuration, check out:
+ * http://sailsjs.org/#!/documentation/reference/sails.config/sails.config.connections.html
+ */
+
+module.exports.connections = {
+
+ /***************************************************************************
+ * *
+ * Local disk storage for DEVELOPMENT ONLY *
+ * *
+ * Installed by default. *
+ * *
+ ***************************************************************************/
+ localDiskDb: {
+ adapter: 'sails-disk'
+ },
+
+ /***************************************************************************
+ * *
+ * MySQL is the world's most popular relational database. *
+ * http://en.wikipedia.org/wiki/MySQL *
+ * *
+ * Run: npm install sails-mysql *
+ * *
+ ***************************************************************************/
+ // someMysqlServer: {
+ // adapter: 'sails-mysql',
+ // host: 'YOUR_MYSQL_SERVER_HOSTNAME_OR_IP_ADDRESS',
+ // user: 'YOUR_MYSQL_USER', //optional
+ // password: 'YOUR_MYSQL_PASSWORD', //optional
+ // database: 'YOUR_MYSQL_DB' //optional
+ // },
+
+ /***************************************************************************
+ * *
+ * MongoDB is the leading NoSQL database. *
+ * http://en.wikipedia.org/wiki/MongoDB *
+ * *
+ * Run: npm install sails-mongo *
+ * *
+ ***************************************************************************/
+ // someMongodbServer: {
+ // adapter: 'sails-mongo',
+ // host: 'localhost',
+ // port: 27017,
+ // user: 'username', //optional
+ // password: 'password', //optional
+ // database: 'your_mongo_db_name_here' //optional
+ // },
+
+ /***************************************************************************
+ * *
+ * PostgreSQL is another officially supported relational database. *
+ * http://en.wikipedia.org/wiki/PostgreSQL *
+ * *
+ * Run: npm install sails-postgresql *
+ * *
+ * *
+ ***************************************************************************/
+ // somePostgresqlServer: {
+ // adapter: 'sails-postgresql',
+ // host: 'YOUR_POSTGRES_SERVER_HOSTNAME_OR_IP_ADDRESS',
+ // user: 'YOUR_POSTGRES_USER', // optional
+ // password: 'YOUR_POSTGRES_PASSWORD', // optional
+ // database: 'YOUR_POSTGRES_DB' //optional
+ // }
+
+
+ /***************************************************************************
+ * *
+ * More adapters: https://github.com/balderdashy/sails *
+ * *
+ ***************************************************************************/
+
+};
diff --git a/server/config/cors.js b/server/config/cors.js
new file mode 100755
index 0000000..4a3c85a
--- /dev/null
+++ b/server/config/cors.js
@@ -0,0 +1,78 @@
+/**
+ * Cross-Origin Resource Sharing (CORS) Settings
+ * (sails.config.cors)
+ *
+ * CORS is like a more modern version of JSONP-- it allows your server/API
+ * to successfully respond to requests from client-side JavaScript code
+ * running on some other domain (e.g. google.com)
+ * Unlike JSONP, it works with POST, PUT, and DELETE requests
+ *
+ * For more information on CORS, check out:
+ * http://en.wikipedia.org/wiki/Cross-origin_resource_sharing
+ *
+ * Note that any of these settings (besides 'allRoutes') can be changed on a per-route basis
+ * by adding a "cors" object to the route configuration:
+ *
+ * '/get foo': {
+ * controller: 'foo',
+ * action: 'bar',
+ * cors: {
+ * origin: 'http://foobar.com,https://owlhoot.com'
+ * }
+ * }
+ *
+ * For more information on this configuration file, see:
+ * http://sailsjs.org/#!/documentation/reference/sails.config/sails.config.cors.html
+ *
+ */
+
+module.exports.cors = {
+
+ /***************************************************************************
+ * *
+ * Allow CORS on all routes by default? If not, you must enable CORS on a *
+ * per-route basis by either adding a "cors" configuration object to the *
+ * route config, or setting "cors:true" in the route config to use the *
+ * default settings below. *
+ * *
+ ***************************************************************************/
+
+ allRoutes: true,
+
+ /***************************************************************************
+ * *
+ * Which domains which are allowed CORS access? This can be a *
+ * comma-delimited list of hosts (beginning with http:// or https://) or *
+ * "*" to allow all domains CORS access. *
+ * *
+ ***************************************************************************/
+
+ origin: '*',
+
+ /***************************************************************************
+ * *
+ * Allow cookies to be shared for CORS requests? *
+ * *
+ ***************************************************************************/
+
+ // credentials: true,
+
+ /***************************************************************************
+ * *
+ * Which methods should be allowed for CORS requests? This is only used in *
+ * response to preflight requests (see article linked above for more info) *
+ * *
+ ***************************************************************************/
+
+ // methods: 'GET, POST, PUT, DELETE, OPTIONS, HEAD',
+
+ /***************************************************************************
+ * *
+ * Which headers should be allowed for CORS requests? This is only used in *
+ * response to preflight requests. *
+ * *
+ ***************************************************************************/
+
+ // headers: 'content-type'
+
+};
diff --git a/server/config/csrf.js b/server/config/csrf.js
new file mode 100755
index 0000000..50bdbc2
--- /dev/null
+++ b/server/config/csrf.js
@@ -0,0 +1,64 @@
+/**
+ * Cross-Site Request Forgery Protection Settings
+ * (sails.config.csrf)
+ *
+ * CSRF tokens are like a tracking chip. While a session tells the server that a user
+ * "is who they say they are", a csrf token tells the server "you are where you say you are".
+ *
+ * When enabled, all non-GET requests to the Sails server must be accompanied by
+ * a special token, identified as the '_csrf' parameter.
+ *
+ * This option protects your Sails app against cross-site request forgery (or CSRF) attacks.
+ * A would-be attacker needs not only a user's session cookie, but also this timestamped,
+ * secret CSRF token, which is refreshed/granted when the user visits a URL on your app's domain.
+ *
+ * This allows us to have certainty that our users' requests haven't been hijacked,
+ * and that the requests they're making are intentional and legitimate.
+ *
+ * This token has a short-lived expiration timeline, and must be acquired by either:
+ *
+ * (a) For traditional view-driven web apps:
+ * Fetching it from one of your views, where it may be accessed as
+ * a local variable, e.g.:
+ *
+ *
+ * or (b) For AJAX/Socket-heavy and/or single-page apps:
+ * Sending a GET request to the `/csrfToken` route, where it will be returned
+ * as JSON, e.g.:
+ * { _csrf: 'ajg4JD(JGdajhLJALHDa' }
+ *
+ *
+ * Enabling this option requires managing the token in your front-end app.
+ * For traditional web apps, it's as easy as passing the data from a view into a form action.
+ * In AJAX/Socket-heavy apps, just send a GET request to the /csrfToken route to get a valid token.
+ *
+ * For more information on CSRF, check out:
+ * http://en.wikipedia.org/wiki/Cross-site_request_forgery
+ *
+ * For more information on this configuration file, including info on CSRF + CORS, see:
+ * http://sailsjs.org/#!/documentation/reference/sails.config/sails.config.csrf.html
+ *
+ */
+
+/****************************************************************************
+* *
+* Enabled CSRF protection for your site? *
+* *
+****************************************************************************/
+
+// module.exports.csrf = false;
+
+/****************************************************************************
+* *
+* You may also specify more fine-grained settings for CSRF, including the *
+* domains which are allowed to request the CSRF token via AJAX. These *
+* settings override the general CORS settings in your config/cors.js file. *
+* *
+****************************************************************************/
+
+// module.exports.csrf = {
+// grantTokenViaAjax: true,
+// origin: ''
+// }
diff --git a/server/config/env/development.js b/server/config/env/development.js
new file mode 100755
index 0000000..3716916
--- /dev/null
+++ b/server/config/env/development.js
@@ -0,0 +1,24 @@
+/**
+ * Development environment settings
+ *
+ * This file can include shared settings for a development team,
+ * such as API keys or remote database passwords. If you're using
+ * a version control solution for your Sails app, this file will
+ * be committed to your repository unless you add it to your .gitignore
+ * file. If your repository will be publicly viewable, don't add
+ * any private information to this file!
+ *
+ */
+
+module.exports = {
+
+ /***************************************************************************
+ * Set the default database connection for models in the development *
+ * environment (see config/connections.js and config/models.js ) *
+ ***************************************************************************/
+
+ // models: {
+ // connection: 'someMongodbServer'
+ // }
+
+};
diff --git a/server/config/env/production.js b/server/config/env/production.js
new file mode 100755
index 0000000..60dd602
--- /dev/null
+++ b/server/config/env/production.js
@@ -0,0 +1,38 @@
+/**
+ * Production environment settings
+ *
+ * This file can include shared settings for a production environment,
+ * such as API keys or remote database passwords. If you're using
+ * a version control solution for your Sails app, this file will
+ * be committed to your repository unless you add it to your .gitignore
+ * file. If your repository will be publicly viewable, don't add
+ * any private information to this file!
+ *
+ */
+
+module.exports = {
+
+ /***************************************************************************
+ * Set the default database connection for models in the production *
+ * environment (see config/connections.js and config/models.js ) *
+ ***************************************************************************/
+
+ // models: {
+ // connection: 'someMysqlServer'
+ // },
+
+ /***************************************************************************
+ * Set the port in the production environment to 80 *
+ ***************************************************************************/
+
+ // port: 80,
+
+ /***************************************************************************
+ * Set the log level in production environment to "silent" *
+ ***************************************************************************/
+
+ // log: {
+ // level: "silent"
+ // }
+
+};
diff --git a/server/config/globals.js b/server/config/globals.js
new file mode 100755
index 0000000..c1819c3
--- /dev/null
+++ b/server/config/globals.js
@@ -0,0 +1,63 @@
+/**
+ * Global Variable Configuration
+ * (sails.config.globals)
+ *
+ * Configure which global variables which will be exposed
+ * automatically by Sails.
+ *
+ * For more information on configuration, check out:
+ * http://sailsjs.org/#!/documentation/reference/sails.config/sails.config.globals.html
+ */
+module.exports.globals = {
+
+ /****************************************************************************
+ * *
+ * Expose the lodash installed in Sails core as a global variable. If this *
+ * is disabled, like any other node module you can always run npm install *
+ * lodash --save, then var _ = require('lodash') at the top of any file. *
+ * *
+ ****************************************************************************/
+
+ // _: true,
+
+ /****************************************************************************
+ * *
+ * Expose the async installed in Sails core as a global variable. If this is *
+ * disabled, like any other node module you can always run npm install async *
+ * --save, then var async = require('async') at the top of any file. *
+ * *
+ ****************************************************************************/
+
+ // async: true,
+
+ /****************************************************************************
+ * *
+ * Expose the sails instance representing your app. If this is disabled, you *
+ * can still get access via req._sails. *
+ * *
+ ****************************************************************************/
+
+ // sails: true,
+
+ /****************************************************************************
+ * *
+ * Expose each of your app's services as global variables (using their *
+ * "globalId"). E.g. a service defined in api/models/NaturalLanguage.js *
+ * would have a globalId of NaturalLanguage by default. If this is disabled, *
+ * you can still access your services via sails.services.* *
+ * *
+ ****************************************************************************/
+
+ // services: true,
+
+ /****************************************************************************
+ * *
+ * Expose each of your app's models as global variables (using their *
+ * "globalId"). E.g. a model defined in api/models/User.js would have a *
+ * globalId of User by default. If this is disabled, you can still access *
+ * your models via sails.models.*. *
+ * *
+ ****************************************************************************/
+
+ // models: true
+};
diff --git a/server/config/http.js b/server/config/http.js
new file mode 100755
index 0000000..1d096f4
--- /dev/null
+++ b/server/config/http.js
@@ -0,0 +1,93 @@
+/**
+ * HTTP Server Settings
+ * (sails.config.http)
+ *
+ * Configuration for the underlying HTTP server in Sails.
+ * Only applies to HTTP requests (not WebSockets)
+ *
+ * For more information on configuration, check out:
+ * http://sailsjs.org/#!/documentation/reference/sails.config/sails.config.http.html
+ */
+
+module.exports.http = {
+
+ /****************************************************************************
+ * *
+ * Express middleware to use for every Sails request. To add custom *
+ * middleware to the mix, add a function to the middleware config object and *
+ * add its key to the "order" array. The $custom key is reserved for *
+ * backwards-compatibility with Sails v0.9.x apps that use the *
+ * `customMiddleware` config option. *
+ * *
+ ****************************************************************************/
+
+ middleware: {
+
+ /***************************************************************************
+ * *
+ * The order in which middleware should be run for HTTP request. (the Sails *
+ * router is invoked by the "router" middleware below.) *
+ * *
+ ***************************************************************************/
+
+ // order: [
+ // 'startRequestTimer',
+ // 'cookieParser',
+ // 'session',
+ // 'myRequestLogger',
+ // 'bodyParser',
+ // 'handleBodyParserError',
+ // 'compress',
+ // 'methodOverride',
+ // 'poweredBy',
+ // '$custom',
+ // 'router',
+ // 'www',
+ // 'favicon',
+ // '404',
+ // '500'
+ // ],
+
+ /****************************************************************************
+ * *
+ * Example custom middleware; logs each request to the console. *
+ * *
+ ****************************************************************************/
+
+ // myRequestLogger: function (req, res, next) {
+ // console.log("Requested :: ", req.method, req.url);
+ // return next();
+ // }
+
+
+ /***************************************************************************
+ * *
+ * The body parser that will handle incoming multipart HTTP requests. By *
+ * default as of v0.10, Sails uses *
+ * [skipper](http://github.com/balderdashy/skipper). See *
+ * http://www.senchalabs.org/connect/multipart.html for other options. *
+ * *
+ * Note that Sails uses an internal instance of Skipper by default; to *
+ * override it and specify more options, make sure to "npm install skipper" *
+ * in your project first. You can also specify a different body parser or *
+ * a custom function with req, res and next parameters (just like any other *
+ * middleware function). *
+ * *
+ ***************************************************************************/
+
+ // bodyParser: require('skipper')({strict: true})
+
+ },
+
+ /***************************************************************************
+ * *
+ * The number of seconds to cache flat files on disk being served by *
+ * Express static middleware (by default, these files are in `.tmp/public`) *
+ * *
+ * The HTTP static cache is only active in a 'production' environment, *
+ * since that's the only time Express will cache flat-files. *
+ * *
+ ***************************************************************************/
+
+ // cache: 31557600000
+};
diff --git a/server/config/i18n.js b/server/config/i18n.js
new file mode 100755
index 0000000..facf707
--- /dev/null
+++ b/server/config/i18n.js
@@ -0,0 +1,57 @@
+/**
+ * Internationalization / Localization Settings
+ * (sails.config.i18n)
+ *
+ * If your app will touch people from all over the world, i18n (or internationalization)
+ * may be an important part of your international strategy.
+ *
+ *
+ * For more informationom i18n in Sails, check out:
+ * http://sailsjs.org/#!/documentation/concepts/Internationalization
+ *
+ * For a complete list of i18n options, see:
+ * https://github.com/mashpie/i18n-node#list-of-configuration-options
+ *
+ *
+ */
+
+module.exports.i18n = {
+
+ /***************************************************************************
+ * *
+ * Which locales are supported? *
+ * *
+ ***************************************************************************/
+
+ // locales: ['en', 'es', 'fr', 'de'],
+
+ /****************************************************************************
+ * *
+ * What is the default locale for the site? Note that this setting will be *
+ * overridden for any request that sends an "Accept-Language" header (i.e. *
+ * most browsers), but it's still useful if you need to localize the *
+ * response for requests made by non-browser clients (e.g. cURL). *
+ * *
+ ****************************************************************************/
+
+ // defaultLocale: 'en',
+
+ /****************************************************************************
+ * *
+ * Automatically add new keys to locale (translation) files when they are *
+ * encountered during a request? *
+ * *
+ ****************************************************************************/
+
+ // updateFiles: false,
+
+ /****************************************************************************
+ * *
+ * Path (relative to app root) of directory to store locale (translation) *
+ * files in. *
+ * *
+ ****************************************************************************/
+
+ // localesDirectory: '/config/locales'
+
+};
diff --git a/server/config/locales/_README.md b/server/config/locales/_README.md
new file mode 100755
index 0000000..5f89b15
--- /dev/null
+++ b/server/config/locales/_README.md
@@ -0,0 +1,28 @@
+# Internationalization / Localization Settings
+
+> Also see the official docs on internationalization/localization:
+> http://links.sailsjs.org/docs/config/locales
+
+## Locales
+All locale files live under `config/locales`. Here is where you can add translations
+as JSON key-value pairs. The name of the file should match the language that you are supporting, which allows for automatic language detection based on request headers.
+
+Here is an example locale stringfile for the Spanish language (`config/locales/es.json`):
+```json
+{
+ "Hello!": "Hola!",
+ "Hello %s, how are you today?": "¿Hola %s, como estas?",
+}
+```
+## Usage
+Locales can be accessed in controllers/policies through `res.i18n()`, or in views through the `__(key)` or `i18n(key)` functions.
+Remember that the keys are case sensitive and require exact key matches, e.g.
+
+```ejs
+ <%= __('Welcome to PencilPals!') %>
+ <%= i18n('Hello %s, how are you today?', 'Pencil Maven') %>
+ <%= i18n('That\'s right-- you can use either i18n() or __()') %>
+```
+
+## Configuration
+Localization/internationalization config can be found in `config/i18n.js`, from where you can set your supported locales.
diff --git a/server/config/locales/de.json b/server/config/locales/de.json
new file mode 100755
index 0000000..12f23d9
--- /dev/null
+++ b/server/config/locales/de.json
@@ -0,0 +1,4 @@
+{
+ "Welcome": "Willkommen",
+ "A brand new app.": "Eine neue App."
+}
diff --git a/server/config/locales/en.json b/server/config/locales/en.json
new file mode 100755
index 0000000..6eeeb33
--- /dev/null
+++ b/server/config/locales/en.json
@@ -0,0 +1,4 @@
+{
+ "Welcome": "Welcome",
+ "A brand new app.": "A brand new app."
+}
diff --git a/server/config/locales/es.json b/server/config/locales/es.json
new file mode 100755
index 0000000..bc6edbf
--- /dev/null
+++ b/server/config/locales/es.json
@@ -0,0 +1,4 @@
+{
+ "Welcome": "Bienvenido",
+ "A brand new app.": "Una nueva aplicación."
+}
diff --git a/server/config/locales/fr.json b/server/config/locales/fr.json
new file mode 100755
index 0000000..972935c
--- /dev/null
+++ b/server/config/locales/fr.json
@@ -0,0 +1,4 @@
+{
+ "Welcome": "Bienvenue",
+ "A brand new app.": "Une toute nouvelle application."
+}
diff --git a/server/config/log.js b/server/config/log.js
new file mode 100755
index 0000000..e3d1a97
--- /dev/null
+++ b/server/config/log.js
@@ -0,0 +1,30 @@
+/**
+ * Built-in Log Configuration
+ * (sails.config.log)
+ *
+ * Configure the log level for your app, as well as the transport
+ * (Underneath the covers, Sails uses Winston for logging, which
+ * allows for some pretty neat custom transports/adapters for log messages)
+ *
+ * For more information on the Sails logger, check out:
+ * http://sailsjs.org/#!/documentation/concepts/Logging
+ */
+
+module.exports.log = {
+
+ /***************************************************************************
+ * *
+ * Valid `level` configs: i.e. the minimum log level to capture with *
+ * sails.log.*() *
+ * *
+ * The order of precedence for log levels from lowest to highest is: *
+ * silly, verbose, info, debug, warn, error *
+ * *
+ * You may also set the level to "silent" to suppress all logs. *
+ * *
+ ***************************************************************************/
+
+ // level: 'debug',
+ // noShip: true
+
+};
diff --git a/server/config/models.js b/server/config/models.js
new file mode 100755
index 0000000..b1f08ba
--- /dev/null
+++ b/server/config/models.js
@@ -0,0 +1,32 @@
+/**
+ * Default model configuration
+ * (sails.config.models)
+ *
+ * Unless you override them, the following properties will be included
+ * in each of your models.
+ *
+ * For more info on Sails models, see:
+ * http://sailsjs.org/#!/documentation/concepts/ORM
+ */
+
+module.exports.models = {
+
+ /***************************************************************************
+ * *
+ * Your app's default connection. i.e. the name of one of your app's *
+ * connections (see `config/connections.js`) *
+ * *
+ ***************************************************************************/
+ // connection: 'localDiskDb',
+
+ /***************************************************************************
+ * *
+ * How and whether Sails will attempt to automatically rebuild the *
+ * tables/collections/etc. in your schema. *
+ * *
+ * See http://sailsjs.org/#!/documentation/concepts/ORM/model-settings.html *
+ * *
+ ***************************************************************************/
+ migrate: 'alter'
+
+};
diff --git a/server/config/policies.js b/server/config/policies.js
new file mode 100755
index 0000000..1785d4e
--- /dev/null
+++ b/server/config/policies.js
@@ -0,0 +1,51 @@
+/**
+ * Policy Mappings
+ * (sails.config.policies)
+ *
+ * Policies are simple functions which run **before** your controllers.
+ * You can apply one or more policies to a given controller, or protect
+ * its actions individually.
+ *
+ * Any policy file (e.g. `api/policies/authenticated.js`) can be accessed
+ * below by its filename, minus the extension, (e.g. "authenticated")
+ *
+ * For more information on how policies work, see:
+ * http://sailsjs.org/#!/documentation/concepts/Policies
+ *
+ * For more information on configuring policies, check out:
+ * http://sailsjs.org/#!/documentation/reference/sails.config/sails.config.policies.html
+ */
+
+
+module.exports.policies = {
+
+ /***************************************************************************
+ * *
+ * Default policy for all controllers and actions (`true` allows public *
+ * access) *
+ * *
+ ***************************************************************************/
+
+ // '*': true,
+
+ /***************************************************************************
+ * *
+ * Here's an example of mapping some policies to run before a controller *
+ * and its actions *
+ * *
+ ***************************************************************************/
+ // RabbitController: {
+
+ // Apply the `false` policy as the default for all of RabbitController's actions
+ // (`false` prevents all access, which ensures that nothing bad happens to our rabbits)
+ // '*': false,
+
+ // For the action `nurture`, apply the 'isRabbitMother' policy
+ // (this overrides `false` above)
+ // nurture : 'isRabbitMother',
+
+ // Apply the `isNiceToAnimals` AND `hasRabbitFood` policies
+ // before letting any users feed our rabbits
+ // feed : ['isNiceToAnimals', 'hasRabbitFood']
+ // }
+};
diff --git a/server/config/routes.js b/server/config/routes.js
new file mode 100755
index 0000000..cf1f7ed
--- /dev/null
+++ b/server/config/routes.js
@@ -0,0 +1,49 @@
+/**
+ * Route Mappings
+ * (sails.config.routes)
+ *
+ * Your routes map URLs to views and controllers.
+ *
+ * If Sails receives a URL that doesn't match any of the routes below,
+ * it will check for matching files (images, scripts, stylesheets, etc.)
+ * in your assets directory. e.g. `http://localhost:1337/images/foo.jpg`
+ * might match an image file: `/assets/images/foo.jpg`
+ *
+ * Finally, if those don't match either, the default 404 handler is triggered.
+ * See `api/responses/notFound.js` to adjust your app's 404 logic.
+ *
+ * Note: Sails doesn't ACTUALLY serve stuff from `assets`-- the default Gruntfile in Sails copies
+ * flat files from `assets` to `.tmp/public`. This allows you to do things like compile LESS or
+ * CoffeeScript for the front-end.
+ *
+ * For more information on configuring custom routes, check out:
+ * http://sailsjs.org/#!/documentation/concepts/Routes/RouteTargetSyntax.html
+ */
+
+module.exports.routes = {
+
+ /***************************************************************************
+ * *
+ * Make the view located at `views/homepage.ejs` (or `views/homepage.jade`, *
+ * etc. depending on your default view engine) your home page. *
+ * *
+ * (Alternatively, remove this and add an `index.html` file in your *
+ * `assets` directory) *
+ * *
+ ***************************************************************************/
+
+ // '/': {
+ // view: 'homepage'
+ // }
+
+ /***************************************************************************
+ * *
+ * Custom routes here... *
+ * *
+ * If a request to a URL doesn't match any of the custom routes above, it *
+ * is matched against Sails route blueprints. See `config/blueprints.js` *
+ * for configuration options and examples. *
+ * *
+ ***************************************************************************/
+
+};
diff --git a/server/config/session.js b/server/config/session.js
new file mode 100755
index 0000000..30e2e47
--- /dev/null
+++ b/server/config/session.js
@@ -0,0 +1,100 @@
+/**
+ * Session Configuration
+ * (sails.config.session)
+ *
+ * Sails session integration leans heavily on the great work already done by
+ * Express, but also unifies Socket.io with the Connect session store. It uses
+ * Connect's cookie parser to normalize configuration differences between Express
+ * and Socket.io and hooks into Sails' middleware interpreter to allow you to access
+ * and auto-save to `req.session` with Socket.io the same way you would with Express.
+ *
+ * For more information on configuring the session, check out:
+ * http://sailsjs.org/#!/documentation/reference/sails.config/sails.config.session.html
+ */
+
+module.exports.session = {
+
+ /***************************************************************************
+ * *
+ * Session secret is automatically generated when your new app is created *
+ * Replace at your own risk in production-- you will invalidate the cookies *
+ * of your users, forcing them to log in again. *
+ * *
+ ***************************************************************************/
+ secret: '183ba7cc72e6ca9c8d1c5cc7b6f60af5',
+
+
+ /***************************************************************************
+ * *
+ * Set the session cookie expire time The maxAge is set by milliseconds, *
+ * the example below is for 24 hours *
+ * *
+ ***************************************************************************/
+
+ // cookie: {
+ // maxAge: 24 * 60 * 60 * 1000
+ // },
+
+ /***************************************************************************
+ * *
+ * Uncomment the following lines to set up a Redis session store that can *
+ * be shared across multiple Sails.js servers. *
+ * *
+ * Requires connect-redis (https://www.npmjs.com/package/connect-redis) *
+ * *
+ ***************************************************************************/
+
+ // adapter: 'redis',
+
+ /***************************************************************************
+ * *
+ * The following values are optional, if no options are set a redis *
+ * instance running on localhost is expected. Read more about options at: *
+ * *
+ * https://github.com/visionmedia/connect-redis *
+ * *
+ ***************************************************************************/
+
+ // host: 'localhost',
+ // port: 6379,
+ // ttl: ,
+ // db: 0,
+ // pass: ,
+ // prefix: 'sess:',
+
+
+ /***************************************************************************
+ * *
+ * Uncomment the following lines to set up a MongoDB session store that can *
+ * be shared across multiple Sails.js servers. *
+ * *
+ * Requires connect-mongo (https://www.npmjs.com/package/connect-mongo) *
+ * Use version 0.8.2 with Node version <= 0.12 *
+ * Use the latest version with Node >= 4.0 *
+ * *
+ ***************************************************************************/
+
+ // adapter: 'mongo',
+ // url: 'mongodb://user:password@localhost:27017/dbname', // user, password and port optional
+
+ /***************************************************************************
+ * *
+ * Optional Values: *
+ * *
+ * See https://github.com/kcbanner/connect-mongo for more *
+ * information about connect-mongo options. *
+ * *
+ * See http://bit.ly/mongooptions for more information about options *
+ * available in `mongoOptions` *
+ * *
+ ***************************************************************************/
+
+ // collection: 'sessions',
+ // stringify: true,
+ // mongoOptions: {
+ // server: {
+ // ssl: true
+ // }
+ // }
+
+};
diff --git a/server/config/sockets.js b/server/config/sockets.js
new file mode 100755
index 0000000..5c2e377
--- /dev/null
+++ b/server/config/sockets.js
@@ -0,0 +1,141 @@
+/**
+ * WebSocket Server Settings
+ * (sails.config.sockets)
+ *
+ * These settings provide transparent access to the options for Sails'
+ * encapsulated WebSocket server, as well as some additional Sails-specific
+ * configuration layered on top.
+ *
+ * For more information on sockets configuration, including advanced config options, see:
+ * http://sailsjs.org/#!/documentation/reference/sails.config/sails.config.sockets.html
+ */
+
+module.exports.sockets = {
+
+
+ /***************************************************************************
+ * *
+ * Node.js (and consequently Sails.js) apps scale horizontally. It's a *
+ * powerful, efficient approach, but it involves a tiny bit of planning. At *
+ * scale, you'll want to be able to copy your app onto multiple Sails.js *
+ * servers and throw them behind a load balancer. *
+ * *
+ * One of the big challenges of scaling an application is that these sorts *
+ * of clustered deployments cannot share memory, since they are on *
+ * physically different machines. On top of that, there is no guarantee *
+ * that a user will "stick" with the same server between requests (whether *
+ * HTTP or sockets), since the load balancer will route each request to the *
+ * Sails server with the most available resources. However that means that *
+ * all room/pubsub/socket processing and shared memory has to be offloaded *
+ * to a shared, remote messaging queue (usually Redis) *
+ * *
+ * Luckily, Socket.io (and consequently Sails.js) apps support Redis for *
+ * sockets by default. To enable a remote redis pubsub server, uncomment *
+ * the config below. *
+ * *
+ * Worth mentioning is that, if `adapter` config is `redis`, but host/port *
+ * is left unset, Sails will try to connect to redis running on localhost *
+ * via port 6379 *
+ * *
+ ***************************************************************************/
+ // adapter: 'memory',
+
+ //
+ // -OR-
+ //
+
+ // adapter: 'socket.io-redis',
+ // host: '127.0.0.1',
+ // port: 6379,
+ // db: 0,
+ // pass: '',
+
+
+
+ /***************************************************************************
+ * *
+ * Whether to expose a 'get /__getcookie' route with CORS support that sets *
+ * a cookie (this is used by the sails.io.js socket client to get access to *
+ * a 3rd party cookie and to enable sessions). *
+ * *
+ * Warning: Currently in this scenario, CORS settings apply to interpreted *
+ * requests sent via a socket.io connection that used this cookie to *
+ * connect, even for non-browser clients! (e.g. iOS apps, toasters, node.js *
+ * unit tests) *
+ * *
+ ***************************************************************************/
+
+ // grant3rdPartyCookie: true,
+
+
+
+ /***************************************************************************
+ * *
+ * `beforeConnect` *
+ * *
+ * This custom beforeConnect function will be run each time BEFORE a new *
+ * socket is allowed to connect, when the initial socket.io handshake is *
+ * performed with the server. *
+ * *
+ * By default, when a socket tries to connect, Sails allows it, every time. *
+ * (much in the same way any HTTP request is allowed to reach your routes. *
+ * If no valid cookie was sent, a temporary session will be created for the *
+ * connecting socket. *
+ * *
+ * If the cookie sent as part of the connection request doesn't match any *
+ * known user session, a new user session is created for it. *
+ * *
+ * In most cases, the user would already have a cookie since they loaded *
+ * the socket.io client and the initial HTML page you're building. *
+ * *
+ * However, in the case of cross-domain requests, it is possible to receive *
+ * a connection upgrade request WITHOUT A COOKIE (for certain transports) *
+ * In this case, there is no way to keep track of the requesting user *
+ * between requests, since there is no identifying information to link *
+ * him/her with a session. The sails.io.js client solves this by connecting *
+ * to a CORS/jsonp endpoint first to get a 3rd party cookie(fortunately this*
+ * works, even in Safari), then opening the connection. *
+ * *
+ * You can also pass along a ?cookie query parameter to the upgrade url, *
+ * which Sails will use in the absence of a proper cookie e.g. (when *
+ * connecting from the client): *
+ * io.sails.connect('http://localhost:1337?cookie=smokeybear') *
+ * *
+ * Finally note that the user's cookie is NOT (and will never be) accessible*
+ * from client-side javascript. Using HTTP-only cookies is crucial for your *
+ * app's security. *
+ * *
+ ***************************************************************************/
+ // beforeConnect: function(handshake, cb) {
+ // // `true` allows the connection
+ // return cb(null, true);
+ //
+ // // (`false` would reject the connection)
+ // },
+
+
+ /***************************************************************************
+ * *
+ * `afterDisconnect` *
+ * *
+ * This custom afterDisconnect function will be run each time a socket *
+ * disconnects *
+ * *
+ ***************************************************************************/
+ // afterDisconnect: function(session, socket, cb) {
+ // // By default: do nothing.
+ // return cb();
+ // },
+
+ /***************************************************************************
+ * *
+ * `transports` *
+ * *
+ * A array of allowed transport methods which the clients will try to use. *
+ * On server environments that don't support sticky sessions, the "polling" *
+ * transport should be disabled. *
+ * *
+ ***************************************************************************/
+ // transports: ["polling", "websocket"]
+
+};
diff --git a/server/config/views.js b/server/config/views.js
new file mode 100755
index 0000000..a5addf7
--- /dev/null
+++ b/server/config/views.js
@@ -0,0 +1,95 @@
+/**
+ * View Engine Configuration
+ * (sails.config.views)
+ *
+ * Server-sent views are a classic and effective way to get your app up
+ * and running. Views are normally served from controllers. Below, you can
+ * configure your templating language/framework of choice and configure
+ * Sails' layout support.
+ *
+ * For more information on views and layouts, check out:
+ * http://sailsjs.org/#!/documentation/concepts/Views
+ */
+
+module.exports.views = {
+
+ /****************************************************************************
+ * *
+ * View engine (aka template language) to use for your app's *server-side* *
+ * views *
+ * *
+ * Sails+Express supports all view engines which implement TJ Holowaychuk's *
+ * `consolidate.js`, including, but not limited to: *
+ * *
+ * ejs, jade, handlebars, mustache underscore, hogan, haml, haml-coffee, *
+ * dust atpl, eco, ect, jazz, jqtpl, JUST, liquor, QEJS, swig, templayed, *
+ * toffee, walrus, & whiskers *
+ * *
+ * For more options, check out the docs: *
+ * https://github.com/balderdashy/sails-wiki/blob/0.9/config.views.md#engine *
+ * *
+ ****************************************************************************/
+
+ // engine: 'ejs',
+
+
+ /****************************************************************************
+ * *
+ * Layouts are simply top-level HTML templates you can use as wrappers for *
+ * your server-side views. If you're using ejs or jade, you can take *
+ * advantage of Sails' built-in `layout` support. *
+ * *
+ * When using a layout, when one of your views is served, it is injected *
+ * into the `body` partial defined in the layout. This lets you reuse header *
+ * and footer logic between views. *
+ * *
+ * NOTE: Layout support is only implemented for the `ejs` view engine! *
+ * For most other engines, it is not necessary, since they implement *
+ * partials/layouts themselves. In those cases, this config will be *
+ * silently ignored. *
+ * *
+ * The `layout` setting may be set to one of the following: *
+ * *
+ * If `false`, layouts will be disabled. Otherwise, if a string is *
+ * specified, it will be interpreted as the relative path to your layout *
+ * file from `views/` folder. (the file extension, ".ejs", should be *
+ * omitted) *
+ * *
+ ****************************************************************************/
+
+ /****************************************************************************
+ * *
+ * Using Multiple Layouts *
+ * *
+ * If you're using the default `ejs` or `handlebars` Sails supports the use *
+ * of multiple `layout` files. To take advantage of this, before rendering a *
+ * view, override the `layout` local in your controller by setting *
+ * `res.locals.layout`. (this is handy if you parts of your app's UI look *
+ * completely different from each other) *
+ * *
+ * e.g. your default might be *
+ * layout: 'layouts/public' *
+ * *
+ * But you might override that in some of your controllers with: *
+ * layout: 'layouts/internal' *
+ * *
+ ****************************************************************************/
+
+ //layout: 'layout',
+
+ /****************************************************************************
+ * *
+ * Partials are simply top-level snippets you can leverage to reuse template *
+ * for your server-side views. If you're using handlebars, you can take *
+ * advantage of Sails' built-in `partials` support. *
+ * *
+ * If `false` or empty partials will be located in the same folder as views. *
+ * Otherwise, if a string is specified, it will be interpreted as the *
+ * relative path to your partial files from `views/` folder. *
+ * *
+ ****************************************************************************/
+
+ // partials: false
+
+
+};
diff --git a/server/package-lock.json b/server/package-lock.json
new file mode 100644
index 0000000..3556307
--- /dev/null
+++ b/server/package-lock.json
@@ -0,0 +1,4976 @@
+{
+ "name": "Restaurant-Reviews",
+ "version": "0.0.0",
+ "lockfileVersion": 1,
+ "requires": true,
+ "dependencies": {
+ "@mapbox/geojsonhint": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/@mapbox/geojsonhint/-/geojsonhint-2.0.1.tgz",
+ "integrity": "sha1-MtrHMA8Es+uux0tbqYU9+0JTI1Q=",
+ "requires": {
+ "concat-stream": "~1.5.1",
+ "jsonlint-lines": "1.7.1",
+ "minimist": "1.2.0",
+ "vfile": "2.0.0",
+ "vfile-reporter": "3.0.0"
+ },
+ "dependencies": {
+ "concat-stream": {
+ "version": "1.5.2",
+ "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.5.2.tgz",
+ "integrity": "sha1-cIl4Yk2FavQaWnQd790mHadSwmY=",
+ "requires": {
+ "inherits": "~2.0.1",
+ "readable-stream": "~2.0.0",
+ "typedarray": "~0.0.5"
+ }
+ },
+ "isarray": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
+ "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE="
+ },
+ "minimist": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz",
+ "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ="
+ },
+ "process-nextick-args": {
+ "version": "1.0.7",
+ "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-1.0.7.tgz",
+ "integrity": "sha1-FQ4gt1ZZCtP5EJPyWk8q2L/zC6M="
+ },
+ "readable-stream": {
+ "version": "2.0.6",
+ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.0.6.tgz",
+ "integrity": "sha1-j5A0HmilPMySh4jaz80Rs265t44=",
+ "requires": {
+ "core-util-is": "~1.0.0",
+ "inherits": "~2.0.1",
+ "isarray": "~1.0.0",
+ "process-nextick-args": "~1.0.6",
+ "string_decoder": "~0.10.x",
+ "util-deprecate": "~1.0.1"
+ }
+ }
+ }
+ },
+ "@sailshq/body-parser": {
+ "version": "1.13.4",
+ "resolved": "https://registry.npmjs.org/@sailshq/body-parser/-/body-parser-1.13.4.tgz",
+ "integrity": "sha1-MT5QFhmoYnPf/W0cuRZ0Kl2ejhs=",
+ "requires": {
+ "@sailshq/qs": "^4.0.1",
+ "bytes": "2.1.0",
+ "content-type": "~1.0.1",
+ "debug": "~2.2.0",
+ "depd": "~1.0.1",
+ "http-errors": "~1.3.1",
+ "iconv-lite": "0.4.11",
+ "on-finished": "~2.3.0",
+ "raw-body": "~2.1.2",
+ "type-is": "~1.6.6"
+ }
+ },
+ "@sailshq/connect": {
+ "version": "2.30.3",
+ "resolved": "https://registry.npmjs.org/@sailshq/connect/-/connect-2.30.3.tgz",
+ "integrity": "sha1-v6aEpjdwI5rCgfVxzVq9mHaTfRQ=",
+ "requires": {
+ "@sailshq/body-parser": "^1.13.3",
+ "@sailshq/qs": "^4.0.1",
+ "basic-auth-connect": "1.0.0",
+ "bytes": "2.1.0",
+ "compression": "~1.5.2",
+ "connect-timeout": "~1.6.2",
+ "content-type": "~1.0.1",
+ "cookie": "0.1.3",
+ "cookie-parser": "~1.3.5",
+ "cookie-signature": "1.0.6",
+ "csurf": "~1.8.3",
+ "debug": "~2.2.0",
+ "depd": "~1.0.1",
+ "errorhandler": "~1.4.2",
+ "express-session": "~1.11.3",
+ "finalhandler": "0.4.0",
+ "fresh": "0.3.0",
+ "http-errors": "~1.3.1",
+ "method-override": "~2.3.5",
+ "morgan": "~1.6.1",
+ "multiparty": "3.3.2",
+ "on-headers": "~1.0.0",
+ "parseurl": "~1.3.0",
+ "pause": "0.1.0",
+ "response-time": "~2.3.1",
+ "serve-favicon": "~2.3.0",
+ "serve-index": "~1.7.2",
+ "serve-static": "~1.10.0",
+ "type-is": "~1.6.6",
+ "utils-merge": "1.0.0",
+ "vhost": "~3.0.1"
+ },
+ "dependencies": {
+ "compression": {
+ "version": "1.5.2",
+ "resolved": "https://registry.npmjs.org/compression/-/compression-1.5.2.tgz",
+ "integrity": "sha1-sDuNhub4rSloPLqN+R3cb/x3s5U=",
+ "requires": {
+ "accepts": "~1.2.12",
+ "bytes": "2.1.0",
+ "compressible": "~2.0.5",
+ "debug": "~2.2.0",
+ "on-headers": "~1.0.0",
+ "vary": "~1.0.1"
+ }
+ },
+ "cookie": {
+ "version": "0.1.3",
+ "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.1.3.tgz",
+ "integrity": "sha1-5zSlwUF/zkctWu+Cw4HKu2TRpDU="
+ },
+ "csurf": {
+ "version": "1.8.3",
+ "resolved": "https://registry.npmjs.org/csurf/-/csurf-1.8.3.tgz",
+ "integrity": "sha1-I/KhO/HY/OHQyZZYg5RELLqGpWo=",
+ "requires": {
+ "cookie": "0.1.3",
+ "cookie-signature": "1.0.6",
+ "csrf": "~3.0.0",
+ "http-errors": "~1.3.1"
+ }
+ },
+ "express-session": {
+ "version": "1.11.3",
+ "resolved": "https://registry.npmjs.org/express-session/-/express-session-1.11.3.tgz",
+ "integrity": "sha1-XMmPP1/4Ttg1+Ry/CqvQxxB0AK8=",
+ "requires": {
+ "cookie": "0.1.3",
+ "cookie-signature": "1.0.6",
+ "crc": "3.3.0",
+ "debug": "~2.2.0",
+ "depd": "~1.0.1",
+ "on-headers": "~1.0.0",
+ "parseurl": "~1.3.0",
+ "uid-safe": "~2.0.0",
+ "utils-merge": "1.0.0"
+ }
+ },
+ "uid-safe": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/uid-safe/-/uid-safe-2.0.0.tgz",
+ "integrity": "sha1-p/PGymSh9qXQTsDvPkw9U2cxcTc=",
+ "requires": {
+ "base64-url": "1.2.1"
+ }
+ }
+ }
+ },
+ "@sailshq/express": {
+ "version": "3.21.3",
+ "resolved": "https://registry.npmjs.org/@sailshq/express/-/express-3.21.3.tgz",
+ "integrity": "sha1-7/cdUR1+gS8csts93ImaiTehvgA=",
+ "requires": {
+ "@sailshq/connect": "^2.30.3",
+ "basic-auth": "~1.0.3",
+ "commander": "2.6.0",
+ "content-disposition": "0.5.0",
+ "content-type": "~1.0.1",
+ "cookie": "0.1.3",
+ "cookie-signature": "1.0.6",
+ "debug": "~2.2.0",
+ "depd": "~1.0.1",
+ "escape-html": "1.0.2",
+ "etag": "~1.7.0",
+ "fresh": "0.3.0",
+ "merge-descriptors": "1.0.0",
+ "methods": "~1.1.1",
+ "mkdirp": "0.5.1",
+ "parseurl": "~1.3.0",
+ "proxy-addr": "~1.0.8",
+ "range-parser": "~1.0.2",
+ "send": "0.13.0",
+ "utils-merge": "1.0.0",
+ "vary": "~1.0.1"
+ },
+ "dependencies": {
+ "commander": {
+ "version": "2.6.0",
+ "resolved": "https://registry.npmjs.org/commander/-/commander-2.6.0.tgz",
+ "integrity": "sha1-nfflL7Kgyw+4kFjugMMQQiXzfh0="
+ },
+ "cookie": {
+ "version": "0.1.3",
+ "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.1.3.tgz",
+ "integrity": "sha1-5zSlwUF/zkctWu+Cw4HKu2TRpDU="
+ }
+ }
+ },
+ "@sailshq/lodash": {
+ "version": "3.10.3",
+ "resolved": "https://registry.npmjs.org/@sailshq/lodash/-/lodash-3.10.3.tgz",
+ "integrity": "sha512-XTF5BtsTSiSpTnfqrCGS5Q8FvSHWCywA0oRxFAZo8E1a8k1MMFUvk3VlRk3q/SusEYwy7gvVdyt9vvNlTa2VuA=="
+ },
+ "@sailshq/qs": {
+ "version": "4.0.2",
+ "resolved": "https://registry.npmjs.org/@sailshq/qs/-/qs-4.0.2.tgz",
+ "integrity": "sha1-oAEzIbDf2JiU2f7vLbAtJ9avLwQ="
+ },
+ "JSV": {
+ "version": "4.0.2",
+ "resolved": "https://registry.npmjs.org/JSV/-/JSV-4.0.2.tgz",
+ "integrity": "sha1-0Hf2glVx+CEy+d/67Vh7QCn+/1c="
+ },
+ "abbrev": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz",
+ "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q=="
+ },
+ "accepts": {
+ "version": "1.2.13",
+ "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.2.13.tgz",
+ "integrity": "sha1-5fHzkoxtlf2WVYw27D2dDeSm7Oo=",
+ "requires": {
+ "mime-types": "~2.1.6",
+ "negotiator": "0.5.3"
+ }
+ },
+ "after": {
+ "version": "0.8.2",
+ "resolved": "https://registry.npmjs.org/after/-/after-0.8.2.tgz",
+ "integrity": "sha1-/ts5T58OAqqXaOcCvaI7UF+ufh8="
+ },
+ "ajv": {
+ "version": "5.5.2",
+ "resolved": "https://registry.npmjs.org/ajv/-/ajv-5.5.2.tgz",
+ "integrity": "sha1-c7Xuyj+rZT49P5Qis0GtQiBdyWU=",
+ "optional": true,
+ "requires": {
+ "co": "^4.6.0",
+ "fast-deep-equal": "^1.0.0",
+ "fast-json-stable-stringify": "^2.0.0",
+ "json-schema-traverse": "^0.3.0"
+ }
+ },
+ "align-text": {
+ "version": "0.1.4",
+ "resolved": "https://registry.npmjs.org/align-text/-/align-text-0.1.4.tgz",
+ "integrity": "sha1-DNkKVhCT810KmSVsIrcGlDP60Rc=",
+ "requires": {
+ "kind-of": "^3.0.2",
+ "longest": "^1.0.1",
+ "repeat-string": "^1.5.2"
+ }
+ },
+ "ambi": {
+ "version": "2.5.0",
+ "resolved": "https://registry.npmjs.org/ambi/-/ambi-2.5.0.tgz",
+ "integrity": "sha1-fI43K+SIkRV+fOoBy2+RQ9H3QiA=",
+ "requires": {
+ "editions": "^1.1.1",
+ "typechecker": "^4.3.0"
+ },
+ "dependencies": {
+ "typechecker": {
+ "version": "4.5.0",
+ "resolved": "https://registry.npmjs.org/typechecker/-/typechecker-4.5.0.tgz",
+ "integrity": "sha512-bqPE/ck3bVIaXP7gMKTKSHrypT32lpYTpiqzPYeYzdSQnmaGvaGhy7TnN/M/+5R+2rs/kKcp9ZLPRp/Q9Yj+4w==",
+ "requires": {
+ "editions": "^1.3.4"
+ }
+ }
+ }
+ },
+ "amdefine": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/amdefine/-/amdefine-1.0.1.tgz",
+ "integrity": "sha1-SlKCrBZHKek2Gbz9OtFR+BfOkfU="
+ },
+ "anchor": {
+ "version": "0.10.5",
+ "resolved": "https://registry.npmjs.org/anchor/-/anchor-0.10.5.tgz",
+ "integrity": "sha1-H54EMjowh/q53ufYilEJm35fsLU=",
+ "requires": {
+ "geojsonhint": "^1.1.0",
+ "lodash": "~3.9.3",
+ "validator": "~3.41.2"
+ },
+ "dependencies": {
+ "geojsonhint": {
+ "version": "1.1.0",
+ "bundled": true,
+ "requires": {
+ "colors": "~0.6.0-1",
+ "concat-stream": "~1.4.4",
+ "jsonlint-lines": "~1.6.0",
+ "minimist": "1.1.1",
+ "optimist": "~0.6.0"
+ },
+ "dependencies": {
+ "colors": {
+ "version": "0.6.2",
+ "bundled": true
+ },
+ "concat-stream": {
+ "version": "1.4.10",
+ "bundled": true,
+ "requires": {
+ "inherits": "~2.0.1",
+ "readable-stream": "~1.1.9",
+ "typedarray": "~0.0.5"
+ },
+ "dependencies": {
+ "inherits": {
+ "version": "2.0.1",
+ "bundled": true
+ },
+ "readable-stream": {
+ "version": "1.1.13",
+ "bundled": true,
+ "requires": {
+ "core-util-is": "~1.0.0",
+ "inherits": "~2.0.1",
+ "isarray": "0.0.1",
+ "string_decoder": "~0.10.x"
+ },
+ "dependencies": {
+ "core-util-is": {
+ "version": "1.0.1",
+ "bundled": true
+ },
+ "isarray": {
+ "version": "0.0.1",
+ "bundled": true
+ },
+ "string_decoder": {
+ "version": "0.10.31",
+ "bundled": true
+ }
+ }
+ },
+ "typedarray": {
+ "version": "0.0.6",
+ "bundled": true
+ }
+ }
+ },
+ "jsonlint-lines": {
+ "version": "1.6.0",
+ "bundled": true,
+ "requires": {
+ "JSV": ">= 4.0.x",
+ "nomnom": ">= 1.5.x"
+ },
+ "dependencies": {
+ "JSV": {
+ "version": "4.0.2",
+ "bundled": true
+ },
+ "nomnom": {
+ "version": "1.8.1",
+ "bundled": true,
+ "requires": {
+ "chalk": "~0.4.0",
+ "underscore": "~1.6.0"
+ },
+ "dependencies": {
+ "chalk": {
+ "version": "0.4.0",
+ "bundled": true,
+ "requires": {
+ "ansi-styles": "~1.0.0",
+ "has-color": "~0.1.0",
+ "strip-ansi": "~0.1.0"
+ },
+ "dependencies": {
+ "ansi-styles": {
+ "version": "1.0.0",
+ "bundled": true
+ },
+ "has-color": {
+ "version": "0.1.7",
+ "bundled": true
+ },
+ "strip-ansi": {
+ "version": "0.1.1",
+ "bundled": true
+ }
+ }
+ },
+ "underscore": {
+ "version": "1.6.0",
+ "bundled": true
+ }
+ }
+ }
+ }
+ },
+ "minimist": {
+ "version": "1.1.1",
+ "bundled": true
+ },
+ "optimist": {
+ "version": "0.6.1",
+ "bundled": true,
+ "requires": {
+ "minimist": "~0.0.1",
+ "wordwrap": "~0.0.2"
+ },
+ "dependencies": {
+ "minimist": {
+ "version": "0.0.10",
+ "bundled": true
+ },
+ "wordwrap": {
+ "version": "0.0.3",
+ "bundled": true
+ }
+ }
+ }
+ }
+ },
+ "lodash": {
+ "version": "3.9.3",
+ "bundled": true
+ },
+ "validator": {
+ "version": "3.41.2",
+ "bundled": true
+ }
+ }
+ },
+ "ansi-regex": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz",
+ "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8="
+ },
+ "ansi-styles": {
+ "version": "2.2.1",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz",
+ "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4="
+ },
+ "argparse": {
+ "version": "1.0.10",
+ "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz",
+ "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==",
+ "requires": {
+ "sprintf-js": "~1.0.2"
+ }
+ },
+ "array-find-index": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/array-find-index/-/array-find-index-1.0.2.tgz",
+ "integrity": "sha1-3wEKoSh+Fku9pvlyOwqWoexBh6E="
+ },
+ "arraybuffer.slice": {
+ "version": "0.0.6",
+ "resolved": "https://registry.npmjs.org/arraybuffer.slice/-/arraybuffer.slice-0.0.6.tgz",
+ "integrity": "sha1-8zshWfBTKj8xB6JywMz70a0peco="
+ },
+ "asap": {
+ "version": "2.0.6",
+ "resolved": "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz",
+ "integrity": "sha1-5QNHYR1+aQlDIIu9r+vLwvuGbUY="
+ },
+ "asn1": {
+ "version": "0.2.4",
+ "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.4.tgz",
+ "integrity": "sha512-jxwzQpLQjSmWXgwaCZE9Nz+glAG01yF1QnWgbhGwHI5A6FRIEY6IVqtHhIepHqI7/kyEyQEagBC5mBEFlIYvdg==",
+ "optional": true,
+ "requires": {
+ "safer-buffer": "~2.1.0"
+ }
+ },
+ "assert-plus": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz",
+ "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU="
+ },
+ "async": {
+ "version": "1.5.0",
+ "resolved": "https://registry.npmjs.org/async/-/async-1.5.0.tgz",
+ "integrity": "sha1-J5ZkJyNXOFlWVjP8YnRES+4vjOM="
+ },
+ "asynckit": {
+ "version": "0.4.0",
+ "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz",
+ "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=",
+ "optional": true
+ },
+ "aws-sign2": {
+ "version": "0.7.0",
+ "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz",
+ "integrity": "sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg=",
+ "optional": true
+ },
+ "aws4": {
+ "version": "1.8.0",
+ "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.8.0.tgz",
+ "integrity": "sha512-ReZxvNHIOv88FlT7rxcXIIC0fPt4KZqZbOlivyWtXLt8ESx84zd3kMC6iK5jVeS2qt+g7ftS7ye4fi06X5rtRQ==",
+ "optional": true
+ },
+ "backo2": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/backo2/-/backo2-1.0.2.tgz",
+ "integrity": "sha1-MasayLEpNjRj41s+u2n038+6eUc="
+ },
+ "balanced-match": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz",
+ "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c="
+ },
+ "base64-arraybuffer": {
+ "version": "0.1.5",
+ "resolved": "https://registry.npmjs.org/base64-arraybuffer/-/base64-arraybuffer-0.1.5.tgz",
+ "integrity": "sha1-c5JncZI7Whl0etZmqlzUv5xunOg="
+ },
+ "base64-url": {
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/base64-url/-/base64-url-1.2.1.tgz",
+ "integrity": "sha1-GZ/WYXAqDnt9yubgaYuwicUvbXg="
+ },
+ "base64id": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/base64id/-/base64id-1.0.0.tgz",
+ "integrity": "sha1-R2iMuZu2gE8OBtPnY7HDLlfY5rY="
+ },
+ "basic-auth": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/basic-auth/-/basic-auth-1.0.4.tgz",
+ "integrity": "sha1-Awk1sB3nyblKgksp8/zLdQ06UpA="
+ },
+ "basic-auth-connect": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/basic-auth-connect/-/basic-auth-connect-1.0.0.tgz",
+ "integrity": "sha1-/bC0OWLKe0BFanwrtI/hc9otISI="
+ },
+ "batch": {
+ "version": "0.5.3",
+ "resolved": "https://registry.npmjs.org/batch/-/batch-0.5.3.tgz",
+ "integrity": "sha1-PzQU84AyF0O/wQQvmoP/HVgk1GQ="
+ },
+ "bcrypt-pbkdf": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz",
+ "integrity": "sha1-pDAdOJtqQ/m2f/PKEaP2Y342Dp4=",
+ "optional": true,
+ "requires": {
+ "tweetnacl": "^0.14.3"
+ }
+ },
+ "better-assert": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/better-assert/-/better-assert-1.0.2.tgz",
+ "integrity": "sha1-QIZrnhueC1W0gYlDEeaPr/rrxSI=",
+ "requires": {
+ "callsite": "1.0.0"
+ }
+ },
+ "blob": {
+ "version": "0.0.4",
+ "resolved": "https://registry.npmjs.org/blob/-/blob-0.0.4.tgz",
+ "integrity": "sha1-vPEwUspURj8w+fx+lbmkdjCpSSE="
+ },
+ "bluebird": {
+ "version": "3.5.1",
+ "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.5.1.tgz",
+ "integrity": "sha512-MKiLiV+I1AA596t9w1sQJ8jkiSr5+ZKi0WKrYGUn6d1Fx+Ij4tIj+m2WMQSGczs5jZVxV339chE8iwk6F64wjA=="
+ },
+ "body-parser": {
+ "version": "1.14.2",
+ "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.14.2.tgz",
+ "integrity": "sha1-EBXLH+LEQ4WCWVgdtTMy+NDPUPk=",
+ "requires": {
+ "bytes": "2.2.0",
+ "content-type": "~1.0.1",
+ "debug": "~2.2.0",
+ "depd": "~1.1.0",
+ "http-errors": "~1.3.1",
+ "iconv-lite": "0.4.13",
+ "on-finished": "~2.3.0",
+ "qs": "5.2.0",
+ "raw-body": "~2.1.5",
+ "type-is": "~1.6.10"
+ },
+ "dependencies": {
+ "bytes": {
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/bytes/-/bytes-2.2.0.tgz",
+ "integrity": "sha1-/TVGSkA/b5EXwt42Cez/nK4ABYg="
+ },
+ "depd": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz",
+ "integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak="
+ },
+ "iconv-lite": {
+ "version": "0.4.13",
+ "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.13.tgz",
+ "integrity": "sha1-H4irpKsLFQjoMSrMOTRfNumS4vI="
+ },
+ "qs": {
+ "version": "5.2.0",
+ "resolved": "https://registry.npmjs.org/qs/-/qs-5.2.0.tgz",
+ "integrity": "sha1-qfMRQq9GjLcrJbMBNrokVoNJFr4="
+ }
+ }
+ },
+ "brace-expansion": {
+ "version": "1.1.11",
+ "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
+ "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==",
+ "requires": {
+ "balanced-match": "^1.0.0",
+ "concat-map": "0.0.1"
+ }
+ },
+ "browserify-zlib": {
+ "version": "0.1.4",
+ "resolved": "https://registry.npmjs.org/browserify-zlib/-/browserify-zlib-0.1.4.tgz",
+ "integrity": "sha1-uzX4pRn2AOD6a4SFJByXnQFB+y0=",
+ "requires": {
+ "pako": "~0.2.0"
+ }
+ },
+ "buffer-from": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.1.tgz",
+ "integrity": "sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A=="
+ },
+ "builtin-modules": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-1.1.1.tgz",
+ "integrity": "sha1-Jw8HbFpywC9bZaR9+Uxf46J4iS8="
+ },
+ "bytes": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/bytes/-/bytes-2.1.0.tgz",
+ "integrity": "sha1-rJPEEOL/ycx89LRks4KJBn9eR7Q="
+ },
+ "callsite": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/callsite/-/callsite-1.0.0.tgz",
+ "integrity": "sha1-KAOY5dZkvXQDi28JBRU+borxvCA="
+ },
+ "camelcase": {
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-1.2.1.tgz",
+ "integrity": "sha1-m7UwTS4LVmmLLHWLCKPqqdqlijk="
+ },
+ "camelcase-keys": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/camelcase-keys/-/camelcase-keys-2.1.0.tgz",
+ "integrity": "sha1-MIvur/3ygRkFHvodkyITyRuPkuc=",
+ "requires": {
+ "camelcase": "^2.0.0",
+ "map-obj": "^1.0.0"
+ },
+ "dependencies": {
+ "camelcase": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-2.1.1.tgz",
+ "integrity": "sha1-fB0W1nmhu+WcoCys7PsBHiAfWh8="
+ }
+ }
+ },
+ "captains-log": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/captains-log/-/captains-log-1.0.0.tgz",
+ "integrity": "sha1-o1ol/RMe/YZsjq6gb1gC+pm6ayw=",
+ "requires": {
+ "colors": "0.6.2",
+ "lodash": "3.10.1",
+ "rc": "0.3.5"
+ },
+ "dependencies": {
+ "ini": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/ini/-/ini-1.1.0.tgz",
+ "integrity": "sha1-ToCMLOFExsF4iRjgNNZ5e8bPYoE="
+ },
+ "rc": {
+ "version": "0.3.5",
+ "resolved": "https://registry.npmjs.org/rc/-/rc-0.3.5.tgz",
+ "integrity": "sha1-/OIiBZO+V6oSlmhafjftAD38xyg=",
+ "requires": {
+ "deep-extend": "~0.2.5",
+ "ini": "~1.1.0",
+ "minimist": "~0.0.7"
+ }
+ }
+ }
+ },
+ "caseless": {
+ "version": "0.12.0",
+ "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz",
+ "integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=",
+ "optional": true
+ },
+ "center-align": {
+ "version": "0.1.3",
+ "resolved": "https://registry.npmjs.org/center-align/-/center-align-0.1.3.tgz",
+ "integrity": "sha1-qg0yYptu6XIgBBHL1EYckHvCt60=",
+ "requires": {
+ "align-text": "^0.1.3",
+ "lazy-cache": "^1.0.3"
+ }
+ },
+ "chalk": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz",
+ "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=",
+ "requires": {
+ "ansi-styles": "^2.2.1",
+ "escape-string-regexp": "^1.0.2",
+ "has-ansi": "^2.0.0",
+ "strip-ansi": "^3.0.0",
+ "supports-color": "^2.0.0"
+ }
+ },
+ "clean-css": {
+ "version": "3.4.28",
+ "resolved": "https://registry.npmjs.org/clean-css/-/clean-css-3.4.28.tgz",
+ "integrity": "sha1-vxlF6C/ICPVWlebd6uwBQA79A/8=",
+ "requires": {
+ "commander": "2.8.x",
+ "source-map": "0.4.x"
+ },
+ "dependencies": {
+ "commander": {
+ "version": "2.8.1",
+ "resolved": "https://registry.npmjs.org/commander/-/commander-2.8.1.tgz",
+ "integrity": "sha1-Br42f+v9oMMwqh4qBy09yXYkJdQ=",
+ "requires": {
+ "graceful-readlink": ">= 1.0.0"
+ }
+ }
+ }
+ },
+ "cliui": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/cliui/-/cliui-2.1.0.tgz",
+ "integrity": "sha1-S0dXYP+AJkx2LDoXGQMukcf+oNE=",
+ "requires": {
+ "center-align": "^0.1.1",
+ "right-align": "^0.1.1",
+ "wordwrap": "0.0.2"
+ },
+ "dependencies": {
+ "wordwrap": {
+ "version": "0.0.2",
+ "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-0.0.2.tgz",
+ "integrity": "sha1-t5Zpu0LstAn4PVg8rVLKF+qhZD8="
+ }
+ }
+ },
+ "co": {
+ "version": "4.6.0",
+ "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz",
+ "integrity": "sha1-bqa989hTrlTMuOR7+gvz+QMfsYQ=",
+ "optional": true
+ },
+ "code-point-at": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz",
+ "integrity": "sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c="
+ },
+ "coffee-script": {
+ "version": "1.10.0",
+ "resolved": "https://registry.npmjs.org/coffee-script/-/coffee-script-1.10.0.tgz",
+ "integrity": "sha1-EpOLz5vhlI+gBvkuDEyegXBRCMA="
+ },
+ "colors": {
+ "version": "0.6.2",
+ "resolved": "https://registry.npmjs.org/colors/-/colors-0.6.2.tgz",
+ "integrity": "sha1-JCP+ZnisDF2uiFLl0OW+CMmXq8w="
+ },
+ "combined-stream": {
+ "version": "1.0.6",
+ "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.6.tgz",
+ "integrity": "sha1-cj599ugBrFYTETp+RFqbactjKBg=",
+ "requires": {
+ "delayed-stream": "~1.0.0"
+ }
+ },
+ "commander": {
+ "version": "2.9.0",
+ "resolved": "https://registry.npmjs.org/commander/-/commander-2.9.0.tgz",
+ "integrity": "sha1-nJkJQXbhIkDLItbFFGCYQA/g99Q=",
+ "requires": {
+ "graceful-readlink": ">= 1.0.0"
+ }
+ },
+ "component-bind": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/component-bind/-/component-bind-1.0.0.tgz",
+ "integrity": "sha1-AMYIq33Nk4l8AAllGx06jh5zu9E="
+ },
+ "component-emitter": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.1.2.tgz",
+ "integrity": "sha1-KWWU8nU9qmOZbSrwjRWpURbJrsM="
+ },
+ "component-inherit": {
+ "version": "0.0.3",
+ "resolved": "https://registry.npmjs.org/component-inherit/-/component-inherit-0.0.3.tgz",
+ "integrity": "sha1-ZF/ErfWLcrZJ1crmUTVhnbJv8UM="
+ },
+ "compressible": {
+ "version": "2.0.14",
+ "resolved": "https://registry.npmjs.org/compressible/-/compressible-2.0.14.tgz",
+ "integrity": "sha1-MmxfUH+7BV9UEWeCuWmoG2einac=",
+ "requires": {
+ "mime-db": ">= 1.34.0 < 2"
+ }
+ },
+ "compression": {
+ "version": "1.6.2",
+ "resolved": "https://registry.npmjs.org/compression/-/compression-1.6.2.tgz",
+ "integrity": "sha1-zOsSHsydCcUtetDDNQ6pPd1AK8M=",
+ "requires": {
+ "accepts": "~1.3.3",
+ "bytes": "2.3.0",
+ "compressible": "~2.0.8",
+ "debug": "~2.2.0",
+ "on-headers": "~1.0.1",
+ "vary": "~1.1.0"
+ },
+ "dependencies": {
+ "accepts": {
+ "version": "1.3.5",
+ "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.5.tgz",
+ "integrity": "sha1-63d99gEXI6OxTopywIBcjoZ0a9I=",
+ "requires": {
+ "mime-types": "~2.1.18",
+ "negotiator": "0.6.1"
+ }
+ },
+ "bytes": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/bytes/-/bytes-2.3.0.tgz",
+ "integrity": "sha1-1baAoWW2IBc5rLYRVCqrwtjOsHA="
+ },
+ "negotiator": {
+ "version": "0.6.1",
+ "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.1.tgz",
+ "integrity": "sha1-KzJxhOiZIQEXeyhWP7XnECrNDKk="
+ },
+ "vary": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz",
+ "integrity": "sha1-IpnwLG3tMNSllhsLn3RSShj2NPw="
+ }
+ }
+ },
+ "concat-map": {
+ "version": "0.0.1",
+ "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz",
+ "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s="
+ },
+ "concat-stream": {
+ "version": "1.6.2",
+ "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.2.tgz",
+ "integrity": "sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==",
+ "requires": {
+ "buffer-from": "^1.0.0",
+ "inherits": "^2.0.3",
+ "readable-stream": "^2.2.2",
+ "typedarray": "^0.0.6"
+ },
+ "dependencies": {
+ "isarray": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
+ "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE="
+ },
+ "readable-stream": {
+ "version": "2.3.6",
+ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz",
+ "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==",
+ "requires": {
+ "core-util-is": "~1.0.0",
+ "inherits": "~2.0.3",
+ "isarray": "~1.0.0",
+ "process-nextick-args": "~2.0.0",
+ "safe-buffer": "~5.1.1",
+ "string_decoder": "~1.1.1",
+ "util-deprecate": "~1.0.1"
+ }
+ },
+ "string_decoder": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz",
+ "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==",
+ "requires": {
+ "safe-buffer": "~5.1.0"
+ }
+ }
+ }
+ },
+ "connect": {
+ "version": "3.4.1",
+ "resolved": "https://registry.npmjs.org/connect/-/connect-3.4.1.tgz",
+ "integrity": "sha1-ohNh0/QJnvdhzabcSpc7seuwo00=",
+ "requires": {
+ "debug": "~2.2.0",
+ "finalhandler": "0.4.1",
+ "parseurl": "~1.3.1",
+ "utils-merge": "1.0.0"
+ },
+ "dependencies": {
+ "escape-html": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz",
+ "integrity": "sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg="
+ },
+ "finalhandler": {
+ "version": "0.4.1",
+ "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-0.4.1.tgz",
+ "integrity": "sha1-haF8bFmpRxfSYtYSMNSw6+PUoU0=",
+ "requires": {
+ "debug": "~2.2.0",
+ "escape-html": "~1.0.3",
+ "on-finished": "~2.3.0",
+ "unpipe": "~1.0.0"
+ }
+ }
+ }
+ },
+ "connect-flash": {
+ "version": "0.1.1",
+ "resolved": "https://registry.npmjs.org/connect-flash/-/connect-flash-0.1.1.tgz",
+ "integrity": "sha1-2GMPJtlaf4UfmVax6MxnMvO2qjA="
+ },
+ "connect-timeout": {
+ "version": "1.6.2",
+ "resolved": "https://registry.npmjs.org/connect-timeout/-/connect-timeout-1.6.2.tgz",
+ "integrity": "sha1-3ppexh4zoStu2qt7XwYumMWZuI4=",
+ "requires": {
+ "debug": "~2.2.0",
+ "http-errors": "~1.3.1",
+ "ms": "0.7.1",
+ "on-headers": "~1.0.0"
+ }
+ },
+ "consolidate": {
+ "version": "0.14.1",
+ "resolved": "https://registry.npmjs.org/consolidate/-/consolidate-0.14.1.tgz",
+ "integrity": "sha1-UG1SnvfiEWJNLkpfM334vhNu9yc=",
+ "requires": {
+ "bluebird": "^3.1.1"
+ }
+ },
+ "content-disposition": {
+ "version": "0.5.0",
+ "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.0.tgz",
+ "integrity": "sha1-QoT+auBjCHRjnkToCkGMKTQTXp4="
+ },
+ "content-type": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.4.tgz",
+ "integrity": "sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA=="
+ },
+ "convert-to-ecmascript-compatible-varname": {
+ "version": "0.1.5",
+ "resolved": "https://registry.npmjs.org/convert-to-ecmascript-compatible-varname/-/convert-to-ecmascript-compatible-varname-0.1.5.tgz",
+ "integrity": "sha1-9npJOMUjNENWQlBHnGcBS6yHhJk="
+ },
+ "cookie": {
+ "version": "0.1.2",
+ "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.1.2.tgz",
+ "integrity": "sha1-cv7D0k5Io0Mgc9kMEmQgBQYQBLE="
+ },
+ "cookie-parser": {
+ "version": "1.3.5",
+ "resolved": "https://registry.npmjs.org/cookie-parser/-/cookie-parser-1.3.5.tgz",
+ "integrity": "sha1-nXVVcPtdF4kHcSJ6AjFNm+fPg1Y=",
+ "requires": {
+ "cookie": "0.1.3",
+ "cookie-signature": "1.0.6"
+ },
+ "dependencies": {
+ "cookie": {
+ "version": "0.1.3",
+ "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.1.3.tgz",
+ "integrity": "sha1-5zSlwUF/zkctWu+Cw4HKu2TRpDU="
+ }
+ }
+ },
+ "cookie-signature": {
+ "version": "1.0.6",
+ "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz",
+ "integrity": "sha1-4wOogrNCzD7oylE6eZmXNNqzriw="
+ },
+ "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="
+ },
+ "crc": {
+ "version": "3.3.0",
+ "resolved": "https://registry.npmjs.org/crc/-/crc-3.3.0.tgz",
+ "integrity": "sha1-+mIuG8OIvyVzCQgta2UgDOZwkLo="
+ },
+ "cross-spawn-async": {
+ "version": "2.2.5",
+ "resolved": "https://registry.npmjs.org/cross-spawn-async/-/cross-spawn-async-2.2.5.tgz",
+ "integrity": "sha1-hF/wwINKPe2dFg2sptOQkGuyiMw=",
+ "requires": {
+ "lru-cache": "^4.0.0",
+ "which": "^1.2.8"
+ }
+ },
+ "csextends": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/csextends/-/csextends-1.2.0.tgz",
+ "integrity": "sha512-S/8k1bDTJIwuGgQYmsRoE+8P+ohV32WhQ0l4zqrc0XDdxOhjQQD7/wTZwCzoZX53jSX3V/qwjT+OkPTxWQcmjg=="
+ },
+ "csrf": {
+ "version": "3.0.6",
+ "resolved": "https://registry.npmjs.org/csrf/-/csrf-3.0.6.tgz",
+ "integrity": "sha1-thEg3c7q/JHnbtUxO7XAsmZ7cQo=",
+ "requires": {
+ "rndm": "1.2.0",
+ "tsscmp": "1.0.5",
+ "uid-safe": "2.1.4"
+ },
+ "dependencies": {
+ "uid-safe": {
+ "version": "2.1.4",
+ "resolved": "https://registry.npmjs.org/uid-safe/-/uid-safe-2.1.4.tgz",
+ "integrity": "sha1-Otbzg2jG1MjHXsF2I/t5qh0HHYE=",
+ "requires": {
+ "random-bytes": "~1.0.0"
+ }
+ }
+ }
+ },
+ "csurf": {
+ "version": "1.9.0",
+ "resolved": "https://registry.npmjs.org/csurf/-/csurf-1.9.0.tgz",
+ "integrity": "sha1-SdLGkl/87Ht95VlZfBU/pTM2QTM=",
+ "requires": {
+ "cookie": "0.3.1",
+ "cookie-signature": "1.0.6",
+ "csrf": "~3.0.3",
+ "http-errors": "~1.5.0"
+ },
+ "dependencies": {
+ "cookie": {
+ "version": "0.3.1",
+ "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.3.1.tgz",
+ "integrity": "sha1-5+Ch+e9DtMi6klxcWpboBtFoc7s="
+ },
+ "http-errors": {
+ "version": "1.5.1",
+ "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.5.1.tgz",
+ "integrity": "sha1-eIwNLB3iyBuebowBhDtrl+uSB1A=",
+ "requires": {
+ "inherits": "2.0.3",
+ "setprototypeof": "1.0.2",
+ "statuses": ">= 1.3.1 < 2"
+ }
+ }
+ }
+ },
+ "currently-unhandled": {
+ "version": "0.4.1",
+ "resolved": "https://registry.npmjs.org/currently-unhandled/-/currently-unhandled-0.4.1.tgz",
+ "integrity": "sha1-mI3zP+qxke95mmE2nddsF635V+o=",
+ "requires": {
+ "array-find-index": "^1.0.1"
+ }
+ },
+ "cycle": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/cycle/-/cycle-1.0.3.tgz",
+ "integrity": "sha1-IegLK+hYD5i0aPN5QwZisEbDStI="
+ },
+ "dashdash": {
+ "version": "1.14.1",
+ "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz",
+ "integrity": "sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=",
+ "optional": true,
+ "requires": {
+ "assert-plus": "^1.0.0"
+ }
+ },
+ "dateformat": {
+ "version": "1.0.12",
+ "resolved": "https://registry.npmjs.org/dateformat/-/dateformat-1.0.12.tgz",
+ "integrity": "sha1-nxJLZ1lMk3/3BpMuSmQsyo27/uk=",
+ "requires": {
+ "get-stdin": "^4.0.1",
+ "meow": "^3.3.0"
+ }
+ },
+ "debug": {
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-2.2.0.tgz",
+ "integrity": "sha1-+HBX6ZWxofauaklgZkE3vFbwOdo=",
+ "requires": {
+ "ms": "0.7.1"
+ }
+ },
+ "decamelize": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz",
+ "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA="
+ },
+ "deep-diff": {
+ "version": "0.3.3",
+ "resolved": "https://registry.npmjs.org/deep-diff/-/deep-diff-0.3.3.tgz",
+ "integrity": "sha1-ZJBxAgRh0srDrAwK3Ud0pHO3eZ4="
+ },
+ "deep-equal": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/deep-equal/-/deep-equal-1.0.1.tgz",
+ "integrity": "sha1-9dJgKStmDghO/0zbyfCK0yR0SLU="
+ },
+ "deep-extend": {
+ "version": "0.2.11",
+ "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.2.11.tgz",
+ "integrity": "sha1-eha6aXKRMjQFBhcElLyD9wdv4I8="
+ },
+ "define-properties": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.2.tgz",
+ "integrity": "sha1-g6c/L+pWmJj7c3GTyPhzyvbUXJQ=",
+ "requires": {
+ "foreach": "^2.0.5",
+ "object-keys": "^1.0.8"
+ }
+ },
+ "delayed-stream": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz",
+ "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk="
+ },
+ "depd": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/depd/-/depd-1.0.1.tgz",
+ "integrity": "sha1-gK7GTJ1tl+ZcwqnKqTwKpqv3Oqo="
+ },
+ "destroy": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.0.4.tgz",
+ "integrity": "sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA="
+ },
+ "dot-access": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/dot-access/-/dot-access-1.0.0.tgz",
+ "integrity": "sha1-o2LlolkGtVurSKQtEBU4cmBh+mg="
+ },
+ "eachr": {
+ "version": "2.0.4",
+ "resolved": "https://registry.npmjs.org/eachr/-/eachr-2.0.4.tgz",
+ "integrity": "sha1-Rm98qhBwj2EFCeMsgHqv5X/BIr8=",
+ "requires": {
+ "typechecker": "^2.0.8"
+ }
+ },
+ "ecc-jsbn": {
+ "version": "0.1.2",
+ "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz",
+ "integrity": "sha1-OoOpBOVDUyh4dMVkt1SThoSamMk=",
+ "optional": true,
+ "requires": {
+ "jsbn": "~0.1.0",
+ "safer-buffer": "^2.1.0"
+ }
+ },
+ "editions": {
+ "version": "1.3.4",
+ "resolved": "https://registry.npmjs.org/editions/-/editions-1.3.4.tgz",
+ "integrity": "sha512-gzao+mxnYDzIysXKMQi/+M1mjy/rjestjg6OPoYTtI+3Izp23oiGZitsl9lPDPiTGXbcSIk1iJWhliSaglxnUg=="
+ },
+ "ee-first": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz",
+ "integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0="
+ },
+ "ejs": {
+ "version": "2.3.4",
+ "resolved": "https://registry.npmjs.org/ejs/-/ejs-2.3.4.tgz",
+ "integrity": "sha1-PHbKoJZks1g7ADevncE2557Gi5g="
+ },
+ "ejs-locals": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/ejs-locals/-/ejs-locals-1.0.2.tgz",
+ "integrity": "sha1-ubMg/2kzFUEF+g7taD6mTWeAiM4=",
+ "requires": {
+ "ejs": "0.8.x"
+ },
+ "dependencies": {
+ "ejs": {
+ "version": "0.8.8",
+ "resolved": "https://registry.npmjs.org/ejs/-/ejs-0.8.8.tgz",
+ "integrity": "sha1-/9xW3MNdApJt1QrRNDm7xUBh1Zg="
+ }
+ }
+ },
+ "engine.io": {
+ "version": "1.8.3",
+ "resolved": "https://registry.npmjs.org/engine.io/-/engine.io-1.8.3.tgz",
+ "integrity": "sha1-jef5eJXSDTm4X4ju7nd7K9QrE9Q=",
+ "requires": {
+ "accepts": "1.3.3",
+ "base64id": "1.0.0",
+ "cookie": "0.3.1",
+ "debug": "2.3.3",
+ "engine.io-parser": "1.3.2",
+ "ws": "1.1.2"
+ },
+ "dependencies": {
+ "accepts": {
+ "version": "1.3.3",
+ "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.3.tgz",
+ "integrity": "sha1-w8p0NJOGSMPg2cHjKN1otiLChMo=",
+ "requires": {
+ "mime-types": "~2.1.11",
+ "negotiator": "0.6.1"
+ }
+ },
+ "cookie": {
+ "version": "0.3.1",
+ "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.3.1.tgz",
+ "integrity": "sha1-5+Ch+e9DtMi6klxcWpboBtFoc7s="
+ },
+ "debug": {
+ "version": "2.3.3",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-2.3.3.tgz",
+ "integrity": "sha1-QMRT5n5uE8kB3ewxeviYbNqe/4w=",
+ "requires": {
+ "ms": "0.7.2"
+ }
+ },
+ "ms": {
+ "version": "0.7.2",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-0.7.2.tgz",
+ "integrity": "sha1-riXPJRKziFodldfwN4aNhDESR2U="
+ },
+ "negotiator": {
+ "version": "0.6.1",
+ "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.1.tgz",
+ "integrity": "sha1-KzJxhOiZIQEXeyhWP7XnECrNDKk="
+ }
+ }
+ },
+ "engine.io-client": {
+ "version": "1.8.3",
+ "resolved": "https://registry.npmjs.org/engine.io-client/-/engine.io-client-1.8.3.tgz",
+ "integrity": "sha1-F5jtk0USRkU9TG9jXXogH+lA1as=",
+ "requires": {
+ "component-emitter": "1.2.1",
+ "component-inherit": "0.0.3",
+ "debug": "2.3.3",
+ "engine.io-parser": "1.3.2",
+ "has-cors": "1.1.0",
+ "indexof": "0.0.1",
+ "parsejson": "0.0.3",
+ "parseqs": "0.0.5",
+ "parseuri": "0.0.5",
+ "ws": "1.1.2",
+ "xmlhttprequest-ssl": "1.5.3",
+ "yeast": "0.1.2"
+ },
+ "dependencies": {
+ "component-emitter": {
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.2.1.tgz",
+ "integrity": "sha1-E3kY1teCg/ffemt8WmPhQOaUJeY="
+ },
+ "debug": {
+ "version": "2.3.3",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-2.3.3.tgz",
+ "integrity": "sha1-QMRT5n5uE8kB3ewxeviYbNqe/4w=",
+ "requires": {
+ "ms": "0.7.2"
+ }
+ },
+ "ms": {
+ "version": "0.7.2",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-0.7.2.tgz",
+ "integrity": "sha1-riXPJRKziFodldfwN4aNhDESR2U="
+ }
+ }
+ },
+ "engine.io-parser": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/engine.io-parser/-/engine.io-parser-1.3.2.tgz",
+ "integrity": "sha1-k3sHnwAH0Ik+xW1GyyILjLQ1Igo=",
+ "requires": {
+ "after": "0.8.2",
+ "arraybuffer.slice": "0.0.6",
+ "base64-arraybuffer": "0.1.5",
+ "blob": "0.0.4",
+ "has-binary": "0.1.7",
+ "wtf-8": "1.0.0"
+ }
+ },
+ "errno": {
+ "version": "0.1.7",
+ "resolved": "https://registry.npmjs.org/errno/-/errno-0.1.7.tgz",
+ "integrity": "sha512-MfrRBDWzIWifgq6tJj60gkAwtLNb6sQPlcFrSOflcP1aFmmruKQ2wRnze/8V6kgyz7H3FF8Npzv78mZ7XLLflg==",
+ "optional": true,
+ "requires": {
+ "prr": "~1.0.1"
+ }
+ },
+ "error-ex": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz",
+ "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==",
+ "requires": {
+ "is-arrayish": "^0.2.1"
+ }
+ },
+ "errorhandler": {
+ "version": "1.4.3",
+ "resolved": "https://registry.npmjs.org/errorhandler/-/errorhandler-1.4.3.tgz",
+ "integrity": "sha1-t7cO2PNZ6duICS8tIMD4MUIK2D8=",
+ "requires": {
+ "accepts": "~1.3.0",
+ "escape-html": "~1.0.3"
+ },
+ "dependencies": {
+ "accepts": {
+ "version": "1.3.5",
+ "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.5.tgz",
+ "integrity": "sha1-63d99gEXI6OxTopywIBcjoZ0a9I=",
+ "requires": {
+ "mime-types": "~2.1.18",
+ "negotiator": "0.6.1"
+ }
+ },
+ "escape-html": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz",
+ "integrity": "sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg="
+ },
+ "negotiator": {
+ "version": "0.6.1",
+ "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.1.tgz",
+ "integrity": "sha1-KzJxhOiZIQEXeyhWP7XnECrNDKk="
+ }
+ }
+ },
+ "escape-html": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.2.tgz",
+ "integrity": "sha1-130y+pjjjC9BroXpJ44ODmuhAiw="
+ },
+ "escape-string-regexp": {
+ "version": "1.0.5",
+ "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz",
+ "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ="
+ },
+ "esprima": {
+ "version": "2.7.3",
+ "resolved": "https://registry.npmjs.org/esprima/-/esprima-2.7.3.tgz",
+ "integrity": "sha1-luO3DVd59q1JzQMmc9HDEnZ7pYE="
+ },
+ "etag": {
+ "version": "1.7.0",
+ "resolved": "https://registry.npmjs.org/etag/-/etag-1.7.0.tgz",
+ "integrity": "sha1-A9MLX2fdbmMtKUXTDWZScxo01dg="
+ },
+ "eventemitter2": {
+ "version": "0.4.14",
+ "resolved": "https://registry.npmjs.org/eventemitter2/-/eventemitter2-0.4.14.tgz",
+ "integrity": "sha1-j2G3XN4BKy6esoTUVFWDtWQ7Yas="
+ },
+ "exit": {
+ "version": "0.1.2",
+ "resolved": "https://registry.npmjs.org/exit/-/exit-0.1.2.tgz",
+ "integrity": "sha1-BjJjj42HfMghB9MKD/8aF8uhzQw="
+ },
+ "express-handlebars": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/express-handlebars/-/express-handlebars-3.0.0.tgz",
+ "integrity": "sha1-gKBwu4GbCeSvLKbQeA91zgXnXC8=",
+ "requires": {
+ "glob": "^6.0.4",
+ "graceful-fs": "^4.1.2",
+ "handlebars": "^4.0.5",
+ "object.assign": "^4.0.3",
+ "promise": "^7.0.0"
+ },
+ "dependencies": {
+ "glob": {
+ "version": "6.0.4",
+ "resolved": "https://registry.npmjs.org/glob/-/glob-6.0.4.tgz",
+ "integrity": "sha1-DwiGD2oVUSey+t1PnOJLGqtuTSI=",
+ "requires": {
+ "inflight": "^1.0.4",
+ "inherits": "2",
+ "minimatch": "2 || 3",
+ "once": "^1.3.0",
+ "path-is-absolute": "^1.0.0"
+ }
+ }
+ }
+ },
+ "express-session": {
+ "version": "1.14.2",
+ "resolved": "https://registry.npmjs.org/express-session/-/express-session-1.14.2.tgz",
+ "integrity": "sha1-a89YbtbR3DewJXAId1bJ3nuAsnU=",
+ "requires": {
+ "cookie": "0.3.1",
+ "cookie-signature": "1.0.6",
+ "crc": "3.4.1",
+ "debug": "~2.2.0",
+ "depd": "~1.1.0",
+ "on-headers": "~1.0.1",
+ "parseurl": "~1.3.1",
+ "uid-safe": "~2.1.3",
+ "utils-merge": "1.0.0"
+ },
+ "dependencies": {
+ "cookie": {
+ "version": "0.3.1",
+ "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.3.1.tgz",
+ "integrity": "sha1-5+Ch+e9DtMi6klxcWpboBtFoc7s="
+ },
+ "crc": {
+ "version": "3.4.1",
+ "resolved": "https://registry.npmjs.org/crc/-/crc-3.4.1.tgz",
+ "integrity": "sha1-ZdWDCxolaVV8+zJMDmeZmFIUc+4="
+ },
+ "depd": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz",
+ "integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak="
+ },
+ "uid-safe": {
+ "version": "2.1.5",
+ "resolved": "https://registry.npmjs.org/uid-safe/-/uid-safe-2.1.5.tgz",
+ "integrity": "sha512-KPHm4VL5dDXKz01UuEd88Df+KzynaohSL9fBh096KWAxSKZQDI2uBrVqtvRM4rwrIrRRKsdLNML/lnaaVSRioA==",
+ "requires": {
+ "random-bytes": "~1.0.0"
+ }
+ }
+ }
+ },
+ "extend": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz",
+ "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==",
+ "optional": true
+ },
+ "extendr": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/extendr/-/extendr-2.1.0.tgz",
+ "integrity": "sha1-MBqgu+pWX00tyPVw8qImEahSe1Y=",
+ "requires": {
+ "typechecker": "~2.0.1"
+ },
+ "dependencies": {
+ "typechecker": {
+ "version": "2.0.8",
+ "resolved": "https://registry.npmjs.org/typechecker/-/typechecker-2.0.8.tgz",
+ "integrity": "sha1-6D2oS7ZMWEzLNFg4V2xAsDN9uC4="
+ }
+ }
+ },
+ "extract-opts": {
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/extract-opts/-/extract-opts-2.2.0.tgz",
+ "integrity": "sha1-H6KOunNSxttID4hc63GkaBC+bX0=",
+ "requires": {
+ "typechecker": "~2.0.1"
+ },
+ "dependencies": {
+ "typechecker": {
+ "version": "2.0.8",
+ "resolved": "https://registry.npmjs.org/typechecker/-/typechecker-2.0.8.tgz",
+ "integrity": "sha1-6D2oS7ZMWEzLNFg4V2xAsDN9uC4="
+ }
+ }
+ },
+ "extsprintf": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz",
+ "integrity": "sha1-lpGEQOMEGnpBT4xS48V06zw+HgU="
+ },
+ "eyes": {
+ "version": "0.1.8",
+ "resolved": "https://registry.npmjs.org/eyes/-/eyes-0.1.8.tgz",
+ "integrity": "sha1-Ys8SAjTGg3hdkCNIqADvPgzCC8A="
+ },
+ "fast-deep-equal": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-1.1.0.tgz",
+ "integrity": "sha1-wFNHeBfIa1HaqFPIHgWbcz0CNhQ=",
+ "optional": true
+ },
+ "fast-json-stable-stringify": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.0.0.tgz",
+ "integrity": "sha1-1RQsDK7msRifh9OnYREGT4bIu/I=",
+ "optional": true
+ },
+ "faye-websocket": {
+ "version": "0.10.0",
+ "resolved": "https://registry.npmjs.org/faye-websocket/-/faye-websocket-0.10.0.tgz",
+ "integrity": "sha1-TkkvjQTftviQA1B/btvy1QHnxvQ=",
+ "requires": {
+ "websocket-driver": ">=0.5.1"
+ }
+ },
+ "figures": {
+ "version": "1.7.0",
+ "resolved": "https://registry.npmjs.org/figures/-/figures-1.7.0.tgz",
+ "integrity": "sha1-y+Hjr/zxzUS4DK3+0o3Hk6lwHS4=",
+ "requires": {
+ "escape-string-regexp": "^1.0.5",
+ "object-assign": "^4.1.0"
+ }
+ },
+ "file-sync-cmp": {
+ "version": "0.1.1",
+ "resolved": "https://registry.npmjs.org/file-sync-cmp/-/file-sync-cmp-0.1.1.tgz",
+ "integrity": "sha1-peeo/7+kk7Q7kju9TKiaU7Y7YSs="
+ },
+ "finalhandler": {
+ "version": "0.4.0",
+ "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-0.4.0.tgz",
+ "integrity": "sha1-llpS2ejQXSuFdUhUH7ibU6JJfZs=",
+ "requires": {
+ "debug": "~2.2.0",
+ "escape-html": "1.0.2",
+ "on-finished": "~2.3.0",
+ "unpipe": "~1.0.0"
+ }
+ },
+ "find-up": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/find-up/-/find-up-1.1.2.tgz",
+ "integrity": "sha1-ay6YIrGizgpgq2TWEOzK1TyyTQ8=",
+ "requires": {
+ "path-exists": "^2.0.0",
+ "pinkie-promise": "^2.0.0"
+ }
+ },
+ "findup-sync": {
+ "version": "0.3.0",
+ "resolved": "https://registry.npmjs.org/findup-sync/-/findup-sync-0.3.0.tgz",
+ "integrity": "sha1-N5MKpdgWt3fANEXhlmzGeQpMCxY=",
+ "requires": {
+ "glob": "~5.0.0"
+ }
+ },
+ "flaverr": {
+ "version": "1.9.2",
+ "resolved": "https://registry.npmjs.org/flaverr/-/flaverr-1.9.2.tgz",
+ "integrity": "sha512-14CoGOGUhFkhzDCgGdpFFJE9PrdMPhGmhuS39WxxgTpTKVzfWW3DAVfolUiHwYpaROz7UFrJuaSJtsxhem+i9g==",
+ "requires": {
+ "@sailshq/lodash": "^3.10.2"
+ }
+ },
+ "foreach": {
+ "version": "2.0.5",
+ "resolved": "https://registry.npmjs.org/foreach/-/foreach-2.0.5.tgz",
+ "integrity": "sha1-C+4AUBiusmDQo6865ljdATbsG5k="
+ },
+ "foreachasync": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/foreachasync/-/foreachasync-3.0.0.tgz",
+ "integrity": "sha1-VQKYfchxS+M5IJfzLgBxyd7gfPY="
+ },
+ "forever-agent": {
+ "version": "0.6.1",
+ "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz",
+ "integrity": "sha1-+8cfDEGt6zf5bFd60e1C2P2sypE=",
+ "optional": true
+ },
+ "form-data": {
+ "version": "2.3.2",
+ "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.2.tgz",
+ "integrity": "sha1-SXBJi+YEwgwAXU9cI67NIda0kJk=",
+ "optional": true,
+ "requires": {
+ "asynckit": "^0.4.0",
+ "combined-stream": "1.0.6",
+ "mime-types": "^2.1.12"
+ }
+ },
+ "forwarded": {
+ "version": "0.1.2",
+ "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.1.2.tgz",
+ "integrity": "sha1-mMI9qxF1ZXuMBXPozszZGw/xjIQ="
+ },
+ "fresh": {
+ "version": "0.3.0",
+ "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.3.0.tgz",
+ "integrity": "sha1-ZR+DjiJCTnVm3hYdg1jKoZn4PU8="
+ },
+ "fs-extra": {
+ "version": "0.30.0",
+ "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-0.30.0.tgz",
+ "integrity": "sha1-8jP/zAjU2n1DLapEl3aYnbHfk/A=",
+ "requires": {
+ "graceful-fs": "^4.1.2",
+ "jsonfile": "^2.1.0",
+ "klaw": "^1.0.0",
+ "path-is-absolute": "^1.0.0",
+ "rimraf": "^2.2.8"
+ }
+ },
+ "fs.realpath": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz",
+ "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8="
+ },
+ "function-bind": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz",
+ "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A=="
+ },
+ "gaze": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/gaze/-/gaze-1.1.3.tgz",
+ "integrity": "sha512-BRdNm8hbWzFzWHERTrejLqwHDfS4GibPoq5wjTPIoJHoBtKGPg3xAFfxmM+9ztbXelxcf2hwQcaz1PtmFeue8g==",
+ "requires": {
+ "globule": "^1.0.0"
+ }
+ },
+ "get-stdin": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-4.0.1.tgz",
+ "integrity": "sha1-uWjGsKBDhDJJAui/Gl3zJXmkUP4="
+ },
+ "getobject": {
+ "version": "0.1.0",
+ "resolved": "https://registry.npmjs.org/getobject/-/getobject-0.1.0.tgz",
+ "integrity": "sha1-BHpEl4n6Fg0Bj1SG7ZEyC27HiFw="
+ },
+ "getpass": {
+ "version": "0.1.7",
+ "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz",
+ "integrity": "sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=",
+ "optional": true,
+ "requires": {
+ "assert-plus": "^1.0.0"
+ }
+ },
+ "glob": {
+ "version": "5.0.15",
+ "resolved": "https://registry.npmjs.org/glob/-/glob-5.0.15.tgz",
+ "integrity": "sha1-G8k2ueAvSmA/zCIuz3Yz0wuLk7E=",
+ "requires": {
+ "inflight": "^1.0.4",
+ "inherits": "2",
+ "minimatch": "2 || 3",
+ "once": "^1.3.0",
+ "path-is-absolute": "^1.0.0"
+ }
+ },
+ "globule": {
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/globule/-/globule-1.2.1.tgz",
+ "integrity": "sha512-g7QtgWF4uYSL5/dn71WxubOrS7JVGCnFPEnoeChJmBnyR9Mw8nGoEwOgJL/RC2Te0WhbsEUCejfH8SZNJ+adYQ==",
+ "requires": {
+ "glob": "~7.1.1",
+ "lodash": "~4.17.10",
+ "minimatch": "~3.0.2"
+ },
+ "dependencies": {
+ "glob": {
+ "version": "7.1.2",
+ "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz",
+ "integrity": "sha512-MJTUg1kjuLeQCJ+ccE4Vpa6kKVXkPYJ2mOCQyUuKLcLQsdrMCpBPUi8qVE6+YuaJkozeA9NusTAw3hLr8Xe5EQ==",
+ "requires": {
+ "fs.realpath": "^1.0.0",
+ "inflight": "^1.0.4",
+ "inherits": "2",
+ "minimatch": "^3.0.4",
+ "once": "^1.3.0",
+ "path-is-absolute": "^1.0.0"
+ }
+ },
+ "lodash": {
+ "version": "4.17.10",
+ "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.10.tgz",
+ "integrity": "sha512-UejweD1pDoXu+AD825lWwp4ZGtSwgnpZxb3JDViD7StjQz+Nb/6l093lx4OQ0foGWNRoc19mWy7BzL+UAK2iVg=="
+ }
+ }
+ },
+ "graceful-fs": {
+ "version": "4.1.11",
+ "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.11.tgz",
+ "integrity": "sha1-Dovf5NHduIVNZOBOp8AOKgJuVlg="
+ },
+ "graceful-readlink": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/graceful-readlink/-/graceful-readlink-1.0.1.tgz",
+ "integrity": "sha1-TK+tdrxi8C+gObL5Tpo906ORpyU="
+ },
+ "grunt": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/grunt/-/grunt-1.0.1.tgz",
+ "integrity": "sha1-6HeHZOlEsY8yuw8QuQeEdcnftWs=",
+ "requires": {
+ "coffee-script": "~1.10.0",
+ "dateformat": "~1.0.12",
+ "eventemitter2": "~0.4.13",
+ "exit": "~0.1.1",
+ "findup-sync": "~0.3.0",
+ "glob": "~7.0.0",
+ "grunt-cli": "~1.2.0",
+ "grunt-known-options": "~1.1.0",
+ "grunt-legacy-log": "~1.0.0",
+ "grunt-legacy-util": "~1.0.0",
+ "iconv-lite": "~0.4.13",
+ "js-yaml": "~3.5.2",
+ "minimatch": "~3.0.0",
+ "nopt": "~3.0.6",
+ "path-is-absolute": "~1.0.0",
+ "rimraf": "~2.2.8"
+ },
+ "dependencies": {
+ "glob": {
+ "version": "7.0.6",
+ "resolved": "https://registry.npmjs.org/glob/-/glob-7.0.6.tgz",
+ "integrity": "sha1-IRuvr0nlJbjNkyYNFKsTYVKz9Xo=",
+ "requires": {
+ "fs.realpath": "^1.0.0",
+ "inflight": "^1.0.4",
+ "inherits": "2",
+ "minimatch": "^3.0.2",
+ "once": "^1.3.0",
+ "path-is-absolute": "^1.0.0"
+ }
+ },
+ "grunt-cli": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/grunt-cli/-/grunt-cli-1.2.0.tgz",
+ "integrity": "sha1-VisRnrsGndtGSs4oRVAb6Xs1tqg=",
+ "requires": {
+ "findup-sync": "~0.3.0",
+ "grunt-known-options": "~1.1.0",
+ "nopt": "~3.0.6",
+ "resolve": "~1.1.0"
+ }
+ },
+ "iconv-lite": {
+ "version": "0.4.23",
+ "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.23.tgz",
+ "integrity": "sha512-neyTUVFtahjf0mB3dZT77u+8O0QB89jFdnBkd5P1JgYPbPaia3gXXOVL2fq8VyU2gMMD7SaN7QukTB/pmXYvDA==",
+ "requires": {
+ "safer-buffer": ">= 2.1.2 < 3"
+ }
+ }
+ }
+ },
+ "grunt-contrib-clean": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/grunt-contrib-clean/-/grunt-contrib-clean-1.0.0.tgz",
+ "integrity": "sha1-ay7ZQRfix//jLuBFeMlv5GJam20=",
+ "requires": {
+ "async": "^1.5.2",
+ "rimraf": "^2.5.1"
+ },
+ "dependencies": {
+ "async": {
+ "version": "1.5.2",
+ "resolved": "https://registry.npmjs.org/async/-/async-1.5.2.tgz",
+ "integrity": "sha1-7GphrlZIDAw8skHJVhjiCJL5Zyo="
+ },
+ "glob": {
+ "version": "7.1.2",
+ "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz",
+ "integrity": "sha512-MJTUg1kjuLeQCJ+ccE4Vpa6kKVXkPYJ2mOCQyUuKLcLQsdrMCpBPUi8qVE6+YuaJkozeA9NusTAw3hLr8Xe5EQ==",
+ "requires": {
+ "fs.realpath": "^1.0.0",
+ "inflight": "^1.0.4",
+ "inherits": "2",
+ "minimatch": "^3.0.4",
+ "once": "^1.3.0",
+ "path-is-absolute": "^1.0.0"
+ }
+ },
+ "rimraf": {
+ "version": "2.6.2",
+ "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.2.tgz",
+ "integrity": "sha512-lreewLK/BlghmxtfH36YYVg1i8IAce4TI7oao75I1g245+6BctqTVQiBP3YUJ9C6DQOXJmkYR9X9fCLtCOJc5w==",
+ "requires": {
+ "glob": "^7.0.5"
+ }
+ }
+ }
+ },
+ "grunt-contrib-coffee": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/grunt-contrib-coffee/-/grunt-contrib-coffee-1.0.0.tgz",
+ "integrity": "sha1-2u6wSVTxTihovMm6bq+RBf3C2kw=",
+ "requires": {
+ "chalk": "~1.0.0",
+ "coffee-script": "~1.10.0",
+ "lodash": "~4.3.0",
+ "uri-path": "~1.0.0"
+ },
+ "dependencies": {
+ "ansi-regex": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-1.1.1.tgz",
+ "integrity": "sha1-QchHGUZGN15qGl0Qw8oFTvn8mA0="
+ },
+ "chalk": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.0.0.tgz",
+ "integrity": "sha1-s89O0P9Tl8mcdbj2edsvUoMfltw=",
+ "requires": {
+ "ansi-styles": "^2.0.1",
+ "escape-string-regexp": "^1.0.2",
+ "has-ansi": "^1.0.3",
+ "strip-ansi": "^2.0.1",
+ "supports-color": "^1.3.0"
+ }
+ },
+ "has-ansi": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-1.0.3.tgz",
+ "integrity": "sha1-wLWxYV2eOCsP9nFp2We0JeSMpTg=",
+ "requires": {
+ "ansi-regex": "^1.1.0",
+ "get-stdin": "^4.0.1"
+ }
+ },
+ "lodash": {
+ "version": "4.3.0",
+ "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.3.0.tgz",
+ "integrity": "sha1-79nEpuxT87BUEkKZFcPkgk5NJaQ="
+ },
+ "strip-ansi": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-2.0.1.tgz",
+ "integrity": "sha1-32LBqpTtLxFOHQ8h/R1QSCt5pg4=",
+ "requires": {
+ "ansi-regex": "^1.0.0"
+ }
+ },
+ "supports-color": {
+ "version": "1.3.1",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-1.3.1.tgz",
+ "integrity": "sha1-FXWN8J2P87SswwdTn6vicJXhBC0="
+ }
+ }
+ },
+ "grunt-contrib-concat": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/grunt-contrib-concat/-/grunt-contrib-concat-1.0.1.tgz",
+ "integrity": "sha1-YVCYYwhOhx1+ht5IwBUlntl3Rb0=",
+ "requires": {
+ "chalk": "^1.0.0",
+ "source-map": "^0.5.3"
+ },
+ "dependencies": {
+ "source-map": {
+ "version": "0.5.7",
+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz",
+ "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w="
+ }
+ }
+ },
+ "grunt-contrib-copy": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/grunt-contrib-copy/-/grunt-contrib-copy-1.0.0.tgz",
+ "integrity": "sha1-cGDGWB6QS4qw0A8HbgqPbj58NXM=",
+ "requires": {
+ "chalk": "^1.1.1",
+ "file-sync-cmp": "^0.1.0"
+ }
+ },
+ "grunt-contrib-cssmin": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/grunt-contrib-cssmin/-/grunt-contrib-cssmin-1.0.1.tgz",
+ "integrity": "sha1-9tRSRMyH79zFIfaRjq/ZIe/YyNo=",
+ "requires": {
+ "chalk": "^1.0.0",
+ "clean-css": "~3.4.2",
+ "maxmin": "^1.1.0"
+ }
+ },
+ "grunt-contrib-jst": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/grunt-contrib-jst/-/grunt-contrib-jst-1.0.0.tgz",
+ "integrity": "sha1-uOcDWuO2JYdYC9bYPI8MSEEGOHQ=",
+ "requires": {
+ "chalk": "^1.0.0",
+ "lodash": "^2.4.1"
+ },
+ "dependencies": {
+ "lodash": {
+ "version": "2.4.2",
+ "resolved": "https://registry.npmjs.org/lodash/-/lodash-2.4.2.tgz",
+ "integrity": "sha1-+t2DS5aDBz2hebPq5tnA0VBT9z4="
+ }
+ }
+ },
+ "grunt-contrib-less": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/grunt-contrib-less/-/grunt-contrib-less-1.3.0.tgz",
+ "integrity": "sha1-UY73yG3GDhWeZRCKp125OpyP9dQ=",
+ "requires": {
+ "async": "^1.5.2",
+ "chalk": "^1.0.0",
+ "less": "~2.6.0",
+ "lodash": "^4.8.2"
+ },
+ "dependencies": {
+ "async": {
+ "version": "1.5.2",
+ "resolved": "https://registry.npmjs.org/async/-/async-1.5.2.tgz",
+ "integrity": "sha1-7GphrlZIDAw8skHJVhjiCJL5Zyo="
+ },
+ "lodash": {
+ "version": "4.17.10",
+ "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.10.tgz",
+ "integrity": "sha512-UejweD1pDoXu+AD825lWwp4ZGtSwgnpZxb3JDViD7StjQz+Nb/6l093lx4OQ0foGWNRoc19mWy7BzL+UAK2iVg=="
+ }
+ }
+ },
+ "grunt-contrib-uglify": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/grunt-contrib-uglify/-/grunt-contrib-uglify-1.0.1.tgz",
+ "integrity": "sha1-rWhBG5Y7mWYSEfdvRmve3tT7B6w=",
+ "requires": {
+ "chalk": "^1.0.0",
+ "lodash": "^4.0.1",
+ "maxmin": "^1.1.0",
+ "uglify-js": "~2.6.2",
+ "uri-path": "^1.0.0"
+ },
+ "dependencies": {
+ "async": {
+ "version": "0.2.10",
+ "resolved": "https://registry.npmjs.org/async/-/async-0.2.10.tgz",
+ "integrity": "sha1-trvgsGdLnXGXCMo43owjfLUmw9E="
+ },
+ "lodash": {
+ "version": "4.17.10",
+ "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.10.tgz",
+ "integrity": "sha512-UejweD1pDoXu+AD825lWwp4ZGtSwgnpZxb3JDViD7StjQz+Nb/6l093lx4OQ0foGWNRoc19mWy7BzL+UAK2iVg=="
+ },
+ "source-map": {
+ "version": "0.5.7",
+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz",
+ "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w="
+ },
+ "uglify-js": {
+ "version": "2.6.4",
+ "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-2.6.4.tgz",
+ "integrity": "sha1-ZeovswWck5RpLxX+2HwrNsFrmt8=",
+ "requires": {
+ "async": "~0.2.6",
+ "source-map": "~0.5.1",
+ "uglify-to-browserify": "~1.0.0",
+ "yargs": "~3.10.0"
+ }
+ }
+ }
+ },
+ "grunt-contrib-watch": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/grunt-contrib-watch/-/grunt-contrib-watch-1.0.0.tgz",
+ "integrity": "sha1-hKGnodar0m7VaEE0lscxM+mQAY8=",
+ "requires": {
+ "async": "^1.5.0",
+ "gaze": "^1.0.0",
+ "lodash": "^3.10.1",
+ "tiny-lr": "^0.2.1"
+ }
+ },
+ "grunt-known-options": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/grunt-known-options/-/grunt-known-options-1.1.0.tgz",
+ "integrity": "sha1-pCdO6zL6dl2lp6OxcSYXzjsUQUk="
+ },
+ "grunt-legacy-log": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/grunt-legacy-log/-/grunt-legacy-log-1.0.2.tgz",
+ "integrity": "sha512-WdedTJ/6zCXnI/coaouzqvkI19uwqbcPkdsXiDRKJyB5rOUlOxnCnTVbpeUdEckKVir2uHF3rDBYppj2p6N3+g==",
+ "requires": {
+ "colors": "~1.1.2",
+ "grunt-legacy-log-utils": "~1.0.0",
+ "hooker": "~0.2.3",
+ "lodash": "~4.17.5"
+ },
+ "dependencies": {
+ "colors": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/colors/-/colors-1.1.2.tgz",
+ "integrity": "sha1-FopHAXVran9RoSzgyXv6KMCE7WM="
+ },
+ "lodash": {
+ "version": "4.17.10",
+ "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.10.tgz",
+ "integrity": "sha512-UejweD1pDoXu+AD825lWwp4ZGtSwgnpZxb3JDViD7StjQz+Nb/6l093lx4OQ0foGWNRoc19mWy7BzL+UAK2iVg=="
+ }
+ }
+ },
+ "grunt-legacy-log-utils": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/grunt-legacy-log-utils/-/grunt-legacy-log-utils-1.0.0.tgz",
+ "integrity": "sha1-p7ji0Ps1taUPSvmG/BEnSevJbz0=",
+ "requires": {
+ "chalk": "~1.1.1",
+ "lodash": "~4.3.0"
+ },
+ "dependencies": {
+ "lodash": {
+ "version": "4.3.0",
+ "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.3.0.tgz",
+ "integrity": "sha1-79nEpuxT87BUEkKZFcPkgk5NJaQ="
+ }
+ }
+ },
+ "grunt-legacy-util": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/grunt-legacy-util/-/grunt-legacy-util-1.0.0.tgz",
+ "integrity": "sha1-OGqnjcbtUJhsKxiVcmWxtIq7m4Y=",
+ "requires": {
+ "async": "~1.5.2",
+ "exit": "~0.1.1",
+ "getobject": "~0.1.0",
+ "hooker": "~0.2.3",
+ "lodash": "~4.3.0",
+ "underscore.string": "~3.2.3",
+ "which": "~1.2.1"
+ },
+ "dependencies": {
+ "async": {
+ "version": "1.5.2",
+ "resolved": "https://registry.npmjs.org/async/-/async-1.5.2.tgz",
+ "integrity": "sha1-7GphrlZIDAw8skHJVhjiCJL5Zyo="
+ },
+ "lodash": {
+ "version": "4.3.0",
+ "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.3.0.tgz",
+ "integrity": "sha1-79nEpuxT87BUEkKZFcPkgk5NJaQ="
+ }
+ }
+ },
+ "grunt-sails-linker": {
+ "version": "0.10.1",
+ "resolved": "https://registry.npmjs.org/grunt-sails-linker/-/grunt-sails-linker-0.10.1.tgz",
+ "integrity": "sha1-DSz1RzwDuuu2zmwd4eWBY9OsjQY="
+ },
+ "grunt-sync": {
+ "version": "0.5.2",
+ "resolved": "https://registry.npmjs.org/grunt-sync/-/grunt-sync-0.5.2.tgz",
+ "integrity": "sha1-YWLEj0LhualvX5MEM+HzqIDYpuw=",
+ "requires": {
+ "glob": "^4.0.5",
+ "lodash": "^3.10.1",
+ "md5-file": "^2.0.3",
+ "promised-io": "0.3.3"
+ },
+ "dependencies": {
+ "glob": {
+ "version": "4.5.3",
+ "resolved": "https://registry.npmjs.org/glob/-/glob-4.5.3.tgz",
+ "integrity": "sha1-xstz0yJsHv7wTePFbQEvAzd+4V8=",
+ "requires": {
+ "inflight": "^1.0.4",
+ "inherits": "2",
+ "minimatch": "^2.0.1",
+ "once": "^1.3.0"
+ }
+ },
+ "minimatch": {
+ "version": "2.0.10",
+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-2.0.10.tgz",
+ "integrity": "sha1-jQh8OcazjAAbl/ynzm0OHoCvusc=",
+ "requires": {
+ "brace-expansion": "^1.0.0"
+ }
+ }
+ }
+ },
+ "gzip-size": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/gzip-size/-/gzip-size-1.0.0.tgz",
+ "integrity": "sha1-Zs+LEBBHInuVus5uodoMF37Vwi8=",
+ "requires": {
+ "browserify-zlib": "^0.1.4",
+ "concat-stream": "^1.4.1"
+ }
+ },
+ "handlebars": {
+ "version": "4.0.11",
+ "resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.0.11.tgz",
+ "integrity": "sha1-Ywo13+ApS8KB7a5v/F0yn8eYLcw=",
+ "requires": {
+ "async": "^1.4.0",
+ "optimist": "^0.6.1",
+ "source-map": "^0.4.4",
+ "uglify-js": "^2.6"
+ }
+ },
+ "har-schema": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz",
+ "integrity": "sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI=",
+ "optional": true
+ },
+ "har-validator": {
+ "version": "5.1.0",
+ "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.1.0.tgz",
+ "integrity": "sha512-+qnmNjI4OfH2ipQ9VQOw23bBd/ibtfbVdK2fYbY4acTDqKTW/YDp9McimZdDbG8iV9fZizUqQMD5xvriB146TA==",
+ "optional": true,
+ "requires": {
+ "ajv": "^5.3.0",
+ "har-schema": "^2.0.0"
+ }
+ },
+ "has": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz",
+ "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==",
+ "requires": {
+ "function-bind": "^1.1.1"
+ }
+ },
+ "has-ansi": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz",
+ "integrity": "sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE=",
+ "requires": {
+ "ansi-regex": "^2.0.0"
+ }
+ },
+ "has-binary": {
+ "version": "0.1.7",
+ "resolved": "https://registry.npmjs.org/has-binary/-/has-binary-0.1.7.tgz",
+ "integrity": "sha1-aOYesWIQyVRaClzOBqhzkS/h5ow=",
+ "requires": {
+ "isarray": "0.0.1"
+ }
+ },
+ "has-color": {
+ "version": "0.1.7",
+ "resolved": "https://registry.npmjs.org/has-color/-/has-color-0.1.7.tgz",
+ "integrity": "sha1-ZxRKUmDDT8PMpnfQQdr1L+e3iy8="
+ },
+ "has-cors": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/has-cors/-/has-cors-1.1.0.tgz",
+ "integrity": "sha1-XkdHk/fqmEPRu5nCPu9J/xJv/zk="
+ },
+ "has-symbols": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.0.tgz",
+ "integrity": "sha1-uhqPGvKg/DllD1yFA2dwQSIGO0Q="
+ },
+ "hooker": {
+ "version": "0.2.3",
+ "resolved": "https://registry.npmjs.org/hooker/-/hooker-0.2.3.tgz",
+ "integrity": "sha1-uDT3I8xKJCqmWWNFnfbZhMXT2Vk="
+ },
+ "hosted-git-info": {
+ "version": "2.7.1",
+ "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.7.1.tgz",
+ "integrity": "sha512-7T/BxH19zbcCTa8XkMlbK5lTo1WtgkFi3GvdWEyNuc4Vex7/9Dqbnpsf4JMydcfj9HCg4zUWFTL3Za6lapg5/w=="
+ },
+ "http-errors": {
+ "version": "1.3.1",
+ "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.3.1.tgz",
+ "integrity": "sha1-GX4izevUGYWF6GlO9nhhl7ke2UI=",
+ "requires": {
+ "inherits": "~2.0.1",
+ "statuses": "1"
+ }
+ },
+ "http-parser-js": {
+ "version": "0.4.13",
+ "resolved": "https://registry.npmjs.org/http-parser-js/-/http-parser-js-0.4.13.tgz",
+ "integrity": "sha1-O9bW/ebjFyyTNMOzO2wZPYD+ETc="
+ },
+ "http-signature": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz",
+ "integrity": "sha1-muzZJRFHcvPZW2WmCruPfBj7rOE=",
+ "optional": true,
+ "requires": {
+ "assert-plus": "^1.0.0",
+ "jsprim": "^1.2.2",
+ "sshpk": "^1.7.0"
+ }
+ },
+ "i": {
+ "version": "0.3.6",
+ "resolved": "https://registry.npmjs.org/i/-/i-0.3.6.tgz",
+ "integrity": "sha1-2WyScyB28HJxG2sQ/X1PZa2O4j0="
+ },
+ "i18n": {
+ "version": "0.8.1",
+ "resolved": "https://registry.npmjs.org/i18n/-/i18n-0.8.1.tgz",
+ "integrity": "sha1-mTi0IBCovrrpkMaYY7KvXyvqNic=",
+ "requires": {
+ "debug": "*",
+ "make-plural": "^3.0.3",
+ "math-interval-parser": "^1.1.0",
+ "messageformat": "^0.3.1",
+ "mustache": "*",
+ "sprintf-js": ">=1.0.3"
+ }
+ },
+ "iconv-lite": {
+ "version": "0.4.11",
+ "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.11.tgz",
+ "integrity": "sha1-LstC/SlHRJIiCaLnxATayHk9it4="
+ },
+ "ignorefs": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/ignorefs/-/ignorefs-1.2.0.tgz",
+ "integrity": "sha1-2ln7hYl25KXkNwLM0fKC/byeV1Y=",
+ "requires": {
+ "editions": "^1.3.3",
+ "ignorepatterns": "^1.1.0"
+ }
+ },
+ "ignorepatterns": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/ignorepatterns/-/ignorepatterns-1.1.0.tgz",
+ "integrity": "sha1-rI9DbyI5td+2bV8NOpBKh6xnzF4="
+ },
+ "image-size": {
+ "version": "0.4.0",
+ "resolved": "https://registry.npmjs.org/image-size/-/image-size-0.4.0.tgz",
+ "integrity": "sha1-1LTh9hlS5MvBzqmmsMkV/stwdRA=",
+ "optional": true
+ },
+ "include-all": {
+ "version": "1.0.8",
+ "resolved": "https://registry.npmjs.org/include-all/-/include-all-1.0.8.tgz",
+ "integrity": "sha1-6LuEsFcniiLPlEMZA32XAMGKQ3k=",
+ "requires": {
+ "lodash": "3.10.1"
+ }
+ },
+ "indent-string": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-2.1.0.tgz",
+ "integrity": "sha1-ji1INIdCEhtKghi3oTfppSBJ3IA=",
+ "requires": {
+ "repeating": "^2.0.0"
+ }
+ },
+ "indexof": {
+ "version": "0.0.1",
+ "resolved": "https://registry.npmjs.org/indexof/-/indexof-0.0.1.tgz",
+ "integrity": "sha1-gtwzbSMrkGIXnQWrMpOmYFn9Q10="
+ },
+ "inflight": {
+ "version": "1.0.6",
+ "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz",
+ "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=",
+ "requires": {
+ "once": "^1.3.0",
+ "wrappy": "1"
+ }
+ },
+ "inherits": {
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz",
+ "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4="
+ },
+ "ini": {
+ "version": "1.3.5",
+ "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.5.tgz",
+ "integrity": "sha512-RZY5huIKCMRWDUqZlEi72f/lmXKMvuszcMBduliQ3nnWbx9X/ZBQO7DijMEYS9EhHBb2qacRUMtC7svLwe0lcw=="
+ },
+ "ipaddr.js": {
+ "version": "1.0.5",
+ "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.0.5.tgz",
+ "integrity": "sha1-X6eM8wG4JceKvDBC2BJyMEnqI8c="
+ },
+ "irregular-plurals": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/irregular-plurals/-/irregular-plurals-1.4.0.tgz",
+ "integrity": "sha1-LKmwM2UREYVUEvFr5dd8YqRYp2Y="
+ },
+ "is-arrayish": {
+ "version": "0.2.1",
+ "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz",
+ "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0="
+ },
+ "is-buffer": {
+ "version": "1.1.6",
+ "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz",
+ "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w=="
+ },
+ "is-builtin-module": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-builtin-module/-/is-builtin-module-1.0.0.tgz",
+ "integrity": "sha1-VAVy0096wxGfj3bDDLwbHgN6/74=",
+ "requires": {
+ "builtin-modules": "^1.0.0"
+ }
+ },
+ "is-finite": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/is-finite/-/is-finite-1.0.2.tgz",
+ "integrity": "sha1-zGZ3aVYCvlUO8R6LSqYwU0K20Ko=",
+ "requires": {
+ "number-is-nan": "^1.0.0"
+ }
+ },
+ "is-fullwidth-code-point": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz",
+ "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=",
+ "requires": {
+ "number-is-nan": "^1.0.0"
+ }
+ },
+ "is-typedarray": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz",
+ "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=",
+ "optional": true
+ },
+ "is-utf8": {
+ "version": "0.2.1",
+ "resolved": "https://registry.npmjs.org/is-utf8/-/is-utf8-0.2.1.tgz",
+ "integrity": "sha1-Sw2hRCEE0bM2NA6AeX6GXPOffXI="
+ },
+ "isarray": {
+ "version": "0.0.1",
+ "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz",
+ "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8="
+ },
+ "isexe": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz",
+ "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA="
+ },
+ "isstream": {
+ "version": "0.1.2",
+ "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz",
+ "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo="
+ },
+ "js-yaml": {
+ "version": "3.5.5",
+ "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.5.5.tgz",
+ "integrity": "sha1-A3fDgBfKvHMisNH7zSWkkWQfL74=",
+ "requires": {
+ "argparse": "^1.0.2",
+ "esprima": "^2.6.0"
+ }
+ },
+ "jsbn": {
+ "version": "0.1.1",
+ "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz",
+ "integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM=",
+ "optional": true
+ },
+ "json-schema": {
+ "version": "0.2.3",
+ "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.2.3.tgz",
+ "integrity": "sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM=",
+ "optional": true
+ },
+ "json-schema-traverse": {
+ "version": "0.3.1",
+ "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.3.1.tgz",
+ "integrity": "sha1-NJptRMU6Ud6JtAgFxdXlm0F9M0A=",
+ "optional": true
+ },
+ "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="
+ },
+ "json3": {
+ "version": "3.3.2",
+ "resolved": "https://registry.npmjs.org/json3/-/json3-3.3.2.tgz",
+ "integrity": "sha1-PAQ0dD35Pi9cQq7nsZvLSDV19OE="
+ },
+ "jsonfile": {
+ "version": "2.4.0",
+ "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-2.4.0.tgz",
+ "integrity": "sha1-NzaitCi4e72gzIO1P6PWM6NcKug=",
+ "requires": {
+ "graceful-fs": "^4.1.6"
+ }
+ },
+ "jsonlint-lines": {
+ "version": "1.7.1",
+ "resolved": "https://registry.npmjs.org/jsonlint-lines/-/jsonlint-lines-1.7.1.tgz",
+ "integrity": "sha1-UH3mgNP7jEvhZBzFfW9nnynxeP8=",
+ "requires": {
+ "JSV": ">= 4.0.x",
+ "nomnom": ">= 1.5.x"
+ }
+ },
+ "jsprim": {
+ "version": "1.4.1",
+ "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.1.tgz",
+ "integrity": "sha1-MT5mvB5cwG5Di8G3SZwuXFastqI=",
+ "optional": true,
+ "requires": {
+ "assert-plus": "1.0.0",
+ "extsprintf": "1.3.0",
+ "json-schema": "0.2.3",
+ "verror": "1.10.0"
+ }
+ },
+ "kind-of": {
+ "version": "3.2.2",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
+ "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
+ "requires": {
+ "is-buffer": "^1.1.5"
+ }
+ },
+ "klaw": {
+ "version": "1.3.1",
+ "resolved": "https://registry.npmjs.org/klaw/-/klaw-1.3.1.tgz",
+ "integrity": "sha1-QIhDO0azsbolnXh4XY6W9zugJDk=",
+ "requires": {
+ "graceful-fs": "^4.1.9"
+ }
+ },
+ "lazy-cache": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/lazy-cache/-/lazy-cache-1.0.4.tgz",
+ "integrity": "sha1-odePw6UEdMuAhF07O24dpJpEbo4="
+ },
+ "less": {
+ "version": "2.6.1",
+ "resolved": "https://registry.npmjs.org/less/-/less-2.6.1.tgz",
+ "integrity": "sha1-ZY4B7JrDFJlZxrbfvPvAoXCv2no=",
+ "requires": {
+ "errno": "^0.1.1",
+ "graceful-fs": "^4.1.2",
+ "image-size": "~0.4.0",
+ "mime": "^1.2.11",
+ "mkdirp": "^0.5.0",
+ "promise": "^7.1.1",
+ "request": "^2.51.0",
+ "source-map": "^0.5.3"
+ },
+ "dependencies": {
+ "source-map": {
+ "version": "0.5.7",
+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz",
+ "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=",
+ "optional": true
+ }
+ }
+ },
+ "livereload-js": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/livereload-js/-/livereload-js-2.3.0.tgz",
+ "integrity": "sha512-j1R0/FeGa64Y+NmqfZhyoVRzcFlOZ8sNlKzHjh4VvLULFACZhn68XrX5DFg2FhMvSMJmROuFxRSa560ECWKBMg=="
+ },
+ "load-json-file": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-1.1.0.tgz",
+ "integrity": "sha1-lWkFcI1YtLq0wiYbBPWfMcmTdMA=",
+ "requires": {
+ "graceful-fs": "^4.1.2",
+ "parse-json": "^2.2.0",
+ "pify": "^2.0.0",
+ "pinkie-promise": "^2.0.0",
+ "strip-bom": "^2.0.0"
+ }
+ },
+ "lodash": {
+ "version": "3.10.1",
+ "resolved": "https://registry.npmjs.org/lodash/-/lodash-3.10.1.tgz",
+ "integrity": "sha1-W/Rejkm6QYnhfUgnid/RW9FAt7Y="
+ },
+ "log-symbols": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-1.0.2.tgz",
+ "integrity": "sha1-N2/3tY6jCGoPCfrMdGF+ylAeGhg=",
+ "requires": {
+ "chalk": "^1.0.0"
+ }
+ },
+ "longest": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/longest/-/longest-1.0.1.tgz",
+ "integrity": "sha1-MKCy2jj3N3DoKUoNIuZiXtd9AJc="
+ },
+ "loud-rejection": {
+ "version": "1.6.0",
+ "resolved": "https://registry.npmjs.org/loud-rejection/-/loud-rejection-1.6.0.tgz",
+ "integrity": "sha1-W0b4AUft7leIcPCG0Eghz5mOVR8=",
+ "requires": {
+ "currently-unhandled": "^0.4.1",
+ "signal-exit": "^3.0.0"
+ }
+ },
+ "lru-cache": {
+ "version": "4.1.3",
+ "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.3.tgz",
+ "integrity": "sha512-fFEhvcgzuIoJVUF8fYr5KR0YqxD238zgObTps31YdADwPPAp82a4M8TrckkWyx7ekNlf9aBcVn81cFwwXngrJA==",
+ "requires": {
+ "pseudomap": "^1.0.2",
+ "yallist": "^2.1.2"
+ }
+ },
+ "machine": {
+ "version": "4.1.1",
+ "resolved": "https://registry.npmjs.org/machine/-/machine-4.1.1.tgz",
+ "integrity": "sha1-7y7KudSqwtvDl4UCl4o25x/ln9c=",
+ "requires": {
+ "convert-to-ecmascript-compatible-varname": "^0.1.0",
+ "debug": "^2.1.1",
+ "lodash": "~2.4.1",
+ "object-hash": "~0.3.0",
+ "rttc": "^1.0.2",
+ "switchback": "^1.1.3"
+ },
+ "dependencies": {
+ "lodash": {
+ "version": "2.4.2",
+ "resolved": "https://registry.npmjs.org/lodash/-/lodash-2.4.2.tgz",
+ "integrity": "sha1-+t2DS5aDBz2hebPq5tnA0VBT9z4="
+ },
+ "rttc": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/rttc/-/rttc-1.0.2.tgz",
+ "integrity": "sha1-TTZCjpUoQrJ0P6cC5PVhoi9kje8=",
+ "requires": {
+ "lodash": "~2.4.1"
+ }
+ }
+ }
+ },
+ "machinepack-urls": {
+ "version": "3.1.1",
+ "resolved": "https://registry.npmjs.org/machinepack-urls/-/machinepack-urls-3.1.1.tgz",
+ "integrity": "sha1-1fswMs9KATXicoU1Bvawxm3plqo=",
+ "requires": {
+ "machine": "^4.0.0"
+ }
+ },
+ "make-plural": {
+ "version": "3.0.6",
+ "resolved": "https://registry.npmjs.org/make-plural/-/make-plural-3.0.6.tgz",
+ "integrity": "sha1-IDOgO6wpC487uRJY9lud9+iwHKc=",
+ "requires": {
+ "minimist": "^1.2.0"
+ },
+ "dependencies": {
+ "minimist": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz",
+ "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=",
+ "optional": true
+ }
+ }
+ },
+ "map-obj": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-1.0.1.tgz",
+ "integrity": "sha1-2TPOuSBdgr3PSIb2dCvcK03qFG0="
+ },
+ "math-interval-parser": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/math-interval-parser/-/math-interval-parser-1.1.0.tgz",
+ "integrity": "sha1-2+2lsGsySZc8bfYXD94jhvCv2JM=",
+ "requires": {
+ "xregexp": "^2.0.0"
+ }
+ },
+ "maxmin": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/maxmin/-/maxmin-1.1.0.tgz",
+ "integrity": "sha1-cTZehKmd2Piz99X94vANHn9zvmE=",
+ "requires": {
+ "chalk": "^1.0.0",
+ "figures": "^1.0.1",
+ "gzip-size": "^1.0.0",
+ "pretty-bytes": "^1.0.0"
+ }
+ },
+ "md5-file": {
+ "version": "2.0.7",
+ "resolved": "https://registry.npmjs.org/md5-file/-/md5-file-2.0.7.tgz",
+ "integrity": "sha1-MH94vQTMsFTkZ+xmHPpamv3J8hA="
+ },
+ "media-typer": {
+ "version": "0.3.0",
+ "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz",
+ "integrity": "sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g="
+ },
+ "meow": {
+ "version": "3.7.0",
+ "resolved": "https://registry.npmjs.org/meow/-/meow-3.7.0.tgz",
+ "integrity": "sha1-cstmi0JSKCkKu/qFaJJYcwioAfs=",
+ "requires": {
+ "camelcase-keys": "^2.0.0",
+ "decamelize": "^1.1.2",
+ "loud-rejection": "^1.0.0",
+ "map-obj": "^1.0.1",
+ "minimist": "^1.1.3",
+ "normalize-package-data": "^2.3.4",
+ "object-assign": "^4.0.1",
+ "read-pkg-up": "^1.0.1",
+ "redent": "^1.0.0",
+ "trim-newlines": "^1.0.0"
+ },
+ "dependencies": {
+ "minimist": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz",
+ "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ="
+ }
+ }
+ },
+ "merge-defaults": {
+ "version": "0.2.1",
+ "resolved": "https://registry.npmjs.org/merge-defaults/-/merge-defaults-0.2.1.tgz",
+ "integrity": "sha1-3UIkjrlrtqUVIXJDIccv+Vg93oA=",
+ "requires": {
+ "lodash": "~2.4.1"
+ },
+ "dependencies": {
+ "lodash": {
+ "version": "2.4.2",
+ "resolved": "https://registry.npmjs.org/lodash/-/lodash-2.4.2.tgz",
+ "integrity": "sha1-+t2DS5aDBz2hebPq5tnA0VBT9z4="
+ }
+ }
+ },
+ "merge-descriptors": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.0.tgz",
+ "integrity": "sha1-IWnPdTjhsMyH+4jhUC2EdLv3mGQ="
+ },
+ "messageformat": {
+ "version": "0.3.1",
+ "resolved": "https://registry.npmjs.org/messageformat/-/messageformat-0.3.1.tgz",
+ "integrity": "sha1-5Y//gkXps5cXmeW0PbWLPpQX9aI=",
+ "requires": {
+ "async": "~1.5.2",
+ "glob": "~6.0.4",
+ "make-plural": "~3.0.3",
+ "nopt": "~3.0.6",
+ "watchr": "~2.4.13"
+ },
+ "dependencies": {
+ "async": {
+ "version": "1.5.2",
+ "resolved": "https://registry.npmjs.org/async/-/async-1.5.2.tgz",
+ "integrity": "sha1-7GphrlZIDAw8skHJVhjiCJL5Zyo="
+ },
+ "glob": {
+ "version": "6.0.4",
+ "resolved": "https://registry.npmjs.org/glob/-/glob-6.0.4.tgz",
+ "integrity": "sha1-DwiGD2oVUSey+t1PnOJLGqtuTSI=",
+ "requires": {
+ "inflight": "^1.0.4",
+ "inherits": "2",
+ "minimatch": "2 || 3",
+ "once": "^1.3.0",
+ "path-is-absolute": "^1.0.0"
+ }
+ }
+ }
+ },
+ "method-override": {
+ "version": "2.3.5",
+ "resolved": "https://registry.npmjs.org/method-override/-/method-override-2.3.5.tgz",
+ "integrity": "sha1-LNXNv/AMNnPXrjRRGagSpdlbjI4=",
+ "requires": {
+ "debug": "~2.2.0",
+ "methods": "~1.1.1",
+ "parseurl": "~1.3.0",
+ "vary": "~1.0.1"
+ }
+ },
+ "methods": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz",
+ "integrity": "sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4="
+ },
+ "mime": {
+ "version": "1.3.4",
+ "resolved": "https://registry.npmjs.org/mime/-/mime-1.3.4.tgz",
+ "integrity": "sha1-EV+eO2s9rylZmDyzjxSaLUDrXVM="
+ },
+ "mime-db": {
+ "version": "1.35.0",
+ "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.35.0.tgz",
+ "integrity": "sha512-JWT/IcCTsB0Io3AhWUMjRqucrHSPsSf2xKLaRldJVULioggvkJvggZ3VXNNSRkCddE6D+BUI4HEIZIA2OjwIvg=="
+ },
+ "mime-types": {
+ "version": "2.1.19",
+ "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.19.tgz",
+ "integrity": "sha512-P1tKYHVSZ6uFo26mtnve4HQFE3koh1UWVkp8YUC+ESBHe945xWSoXuHHiGarDqcEZ+whpCDnlNw5LON0kLo+sw==",
+ "requires": {
+ "mime-db": "~1.35.0"
+ }
+ },
+ "minimatch": {
+ "version": "3.0.4",
+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz",
+ "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==",
+ "requires": {
+ "brace-expansion": "^1.1.7"
+ }
+ },
+ "minimist": {
+ "version": "0.0.10",
+ "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.10.tgz",
+ "integrity": "sha1-3j+YVD2/lggr5IrRoMfNqDYwHc8="
+ },
+ "mkdirp": {
+ "version": "0.5.1",
+ "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz",
+ "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=",
+ "requires": {
+ "minimist": "0.0.8"
+ },
+ "dependencies": {
+ "minimist": {
+ "version": "0.0.8",
+ "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz",
+ "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0="
+ }
+ }
+ },
+ "mock-req": {
+ "version": "0.2.0",
+ "resolved": "https://registry.npmjs.org/mock-req/-/mock-req-0.2.0.tgz",
+ "integrity": "sha1-dJRGgE0sAGFpNC7nvmu6HP/VNMI="
+ },
+ "mock-res": {
+ "version": "0.3.0",
+ "resolved": "https://registry.npmjs.org/mock-res/-/mock-res-0.3.0.tgz",
+ "integrity": "sha1-DCA0zGM20FlaOvEJ90SCg+6cR/U="
+ },
+ "morgan": {
+ "version": "1.6.1",
+ "resolved": "https://registry.npmjs.org/morgan/-/morgan-1.6.1.tgz",
+ "integrity": "sha1-X9gYOYxoGcuiinzWZk8pL+HAu/I=",
+ "requires": {
+ "basic-auth": "~1.0.3",
+ "debug": "~2.2.0",
+ "depd": "~1.0.1",
+ "on-finished": "~2.3.0",
+ "on-headers": "~1.0.0"
+ }
+ },
+ "ms": {
+ "version": "0.7.1",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-0.7.1.tgz",
+ "integrity": "sha1-nNE8A62/8ltl7/3nzoZO6VIBcJg="
+ },
+ "multiparty": {
+ "version": "3.3.2",
+ "resolved": "https://registry.npmjs.org/multiparty/-/multiparty-3.3.2.tgz",
+ "integrity": "sha1-Nd5oBNwZZD5SSfPT473GyM4wHT8=",
+ "requires": {
+ "readable-stream": "~1.1.9",
+ "stream-counter": "~0.2.0"
+ }
+ },
+ "mustache": {
+ "version": "2.3.1",
+ "resolved": "https://registry.npmjs.org/mustache/-/mustache-2.3.1.tgz",
+ "integrity": "sha512-20dW38oeiTzauvbxs1YxQbr3gbu/Lfo15J4V0EqbspYnn/GwSeTSDNtESy2nak28BW0k8qp7dnrFhrsejLPUtw=="
+ },
+ "mute-stream": {
+ "version": "0.0.7",
+ "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.7.tgz",
+ "integrity": "sha1-MHXOk7whuPq0PhvE2n6BFe0ee6s="
+ },
+ "native-or-bluebird": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/native-or-bluebird/-/native-or-bluebird-1.1.2.tgz",
+ "integrity": "sha1-OSHhECMtHreQ89rGG7NwUxx9NW4="
+ },
+ "ncp": {
+ "version": "0.4.2",
+ "resolved": "https://registry.npmjs.org/ncp/-/ncp-0.4.2.tgz",
+ "integrity": "sha1-q8xsvT7C7Spyn/bnwfqPAXhKhXQ="
+ },
+ "negotiator": {
+ "version": "0.5.3",
+ "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.5.3.tgz",
+ "integrity": "sha1-Jp1cR2gQ7JLtvntsLygxY4T5p+g="
+ },
+ "nomnom": {
+ "version": "1.8.1",
+ "resolved": "https://registry.npmjs.org/nomnom/-/nomnom-1.8.1.tgz",
+ "integrity": "sha1-IVH3Ikcrp55Qp2/BJbuMjy5Nwqc=",
+ "requires": {
+ "chalk": "~0.4.0",
+ "underscore": "~1.6.0"
+ },
+ "dependencies": {
+ "ansi-styles": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-1.0.0.tgz",
+ "integrity": "sha1-yxAt8cVvUSPquLZ817mAJ6AnkXg="
+ },
+ "chalk": {
+ "version": "0.4.0",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-0.4.0.tgz",
+ "integrity": "sha1-UZmj3c0MHv4jvAjBsCewYXbgxk8=",
+ "requires": {
+ "ansi-styles": "~1.0.0",
+ "has-color": "~0.1.0",
+ "strip-ansi": "~0.1.0"
+ }
+ },
+ "strip-ansi": {
+ "version": "0.1.1",
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-0.1.1.tgz",
+ "integrity": "sha1-OeipjQRNFQZgq+SmgIrPcLt7yZE="
+ }
+ }
+ },
+ "nopt": {
+ "version": "3.0.6",
+ "resolved": "https://registry.npmjs.org/nopt/-/nopt-3.0.6.tgz",
+ "integrity": "sha1-xkZdvwirzU2zWTF/eaxopkayj/k=",
+ "requires": {
+ "abbrev": "1"
+ }
+ },
+ "normalize-package-data": {
+ "version": "2.4.0",
+ "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.4.0.tgz",
+ "integrity": "sha512-9jjUFbTPfEy3R/ad/2oNbKtW9Hgovl5O1FvFWKkKblNXoN/Oou6+9+KKohPK13Yc3/TyunyWhJp6gvRNR/PPAw==",
+ "requires": {
+ "hosted-git-info": "^2.1.4",
+ "is-builtin-module": "^1.0.0",
+ "semver": "2 || 3 || 4 || 5",
+ "validate-npm-package-license": "^3.0.1"
+ }
+ },
+ "number-is-nan": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz",
+ "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0="
+ },
+ "oauth-sign": {
+ "version": "0.9.0",
+ "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.9.0.tgz",
+ "integrity": "sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ==",
+ "optional": true
+ },
+ "object-assign": {
+ "version": "4.1.1",
+ "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz",
+ "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM="
+ },
+ "object-component": {
+ "version": "0.0.3",
+ "resolved": "https://registry.npmjs.org/object-component/-/object-component-0.0.3.tgz",
+ "integrity": "sha1-8MaapQ78lbhmwYb0AKM3acsvEpE="
+ },
+ "object-hash": {
+ "version": "0.3.0",
+ "resolved": "https://registry.npmjs.org/object-hash/-/object-hash-0.3.0.tgz",
+ "integrity": "sha1-VIII5Ds2pE5NowutbFasU7iF50Q="
+ },
+ "object-keys": {
+ "version": "1.0.12",
+ "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.0.12.tgz",
+ "integrity": "sha512-FTMyFUm2wBcGHnH2eXmz7tC6IwlqQZ6mVZ+6dm6vZ4IQIHjs6FdNsQBuKGPuUUUY6NfJw2PshC08Tn6LzLDOag=="
+ },
+ "object.assign": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.0.tgz",
+ "integrity": "sha512-exHJeq6kBKj58mqGyTQ9DFvrZC/eR6OwxzoM9YRoGBqrXYonaFyGiFMuc9VZrXf7DarreEwMpurG3dd+CNyW5w==",
+ "requires": {
+ "define-properties": "^1.1.2",
+ "function-bind": "^1.1.1",
+ "has-symbols": "^1.0.0",
+ "object-keys": "^1.0.11"
+ }
+ },
+ "on-finished": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz",
+ "integrity": "sha1-IPEzZIGwg811M3mSoWlxqi2QaUc=",
+ "requires": {
+ "ee-first": "1.1.1"
+ }
+ },
+ "on-headers": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/on-headers/-/on-headers-1.0.1.tgz",
+ "integrity": "sha1-ko9dD0cNSTQmUepnlLCFfBAGk/c="
+ },
+ "once": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz",
+ "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=",
+ "requires": {
+ "wrappy": "1"
+ }
+ },
+ "optimist": {
+ "version": "0.6.1",
+ "resolved": "https://registry.npmjs.org/optimist/-/optimist-0.6.1.tgz",
+ "integrity": "sha1-2j6nRob6IaGaERwybpDrFaAZZoY=",
+ "requires": {
+ "minimist": "~0.0.1",
+ "wordwrap": "~0.0.2"
+ }
+ },
+ "options": {
+ "version": "0.0.6",
+ "resolved": "https://registry.npmjs.org/options/-/options-0.0.6.tgz",
+ "integrity": "sha1-7CLTEoBrtT5zF3Pnza788cZDEo8="
+ },
+ "pako": {
+ "version": "0.2.9",
+ "resolved": "https://registry.npmjs.org/pako/-/pako-0.2.9.tgz",
+ "integrity": "sha1-8/dSL073gjSNqBYbrZ7P1Rv4OnU="
+ },
+ "parse-json": {
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-2.2.0.tgz",
+ "integrity": "sha1-9ID0BDTvgHQfhGkJn43qGPVaTck=",
+ "requires": {
+ "error-ex": "^1.2.0"
+ }
+ },
+ "parsejson": {
+ "version": "0.0.3",
+ "resolved": "https://registry.npmjs.org/parsejson/-/parsejson-0.0.3.tgz",
+ "integrity": "sha1-q343WfIJ7OmUN5c/fQ8fZK4OZKs=",
+ "requires": {
+ "better-assert": "~1.0.0"
+ }
+ },
+ "parseqs": {
+ "version": "0.0.5",
+ "resolved": "https://registry.npmjs.org/parseqs/-/parseqs-0.0.5.tgz",
+ "integrity": "sha1-1SCKNzjkZ2bikbouoXNoSSGouJ0=",
+ "requires": {
+ "better-assert": "~1.0.0"
+ }
+ },
+ "parseuri": {
+ "version": "0.0.5",
+ "resolved": "https://registry.npmjs.org/parseuri/-/parseuri-0.0.5.tgz",
+ "integrity": "sha1-gCBKUNTbt3m/3G6+J3jZDkvOMgo=",
+ "requires": {
+ "better-assert": "~1.0.0"
+ }
+ },
+ "parseurl": {
+ "version": "1.3.1",
+ "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.1.tgz",
+ "integrity": "sha1-yKuMkiO6NIiKpkopeyiFO+wY2lY="
+ },
+ "path-exists": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-2.1.0.tgz",
+ "integrity": "sha1-D+tsZPD8UY2adU3V77YscCJ2H0s=",
+ "requires": {
+ "pinkie-promise": "^2.0.0"
+ }
+ },
+ "path-is-absolute": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz",
+ "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18="
+ },
+ "path-to-regexp": {
+ "version": "1.5.3",
+ "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-1.5.3.tgz",
+ "integrity": "sha1-ciHd1CSDU4vd+f6tlCp5/zFk9Xo=",
+ "requires": {
+ "isarray": "0.0.1"
+ }
+ },
+ "path-type": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/path-type/-/path-type-1.1.0.tgz",
+ "integrity": "sha1-WcRPfuSR2nBNpBXaWkBwuk+P5EE=",
+ "requires": {
+ "graceful-fs": "^4.1.2",
+ "pify": "^2.0.0",
+ "pinkie-promise": "^2.0.0"
+ }
+ },
+ "pause": {
+ "version": "0.1.0",
+ "resolved": "https://registry.npmjs.org/pause/-/pause-0.1.0.tgz",
+ "integrity": "sha1-68ikqGGf8LioGsFRPDQ0/0af23Q="
+ },
+ "performance-now": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz",
+ "integrity": "sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns=",
+ "optional": true
+ },
+ "pify": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz",
+ "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw="
+ },
+ "pinkie": {
+ "version": "2.0.4",
+ "resolved": "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz",
+ "integrity": "sha1-clVrgM+g1IqXToDnckjoDtT3+HA="
+ },
+ "pinkie-promise": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz",
+ "integrity": "sha1-ITXW36ejWMBprJsXh3YogihFD/o=",
+ "requires": {
+ "pinkie": "^2.0.0"
+ }
+ },
+ "pkginfo": {
+ "version": "0.4.1",
+ "resolved": "https://registry.npmjs.org/pkginfo/-/pkginfo-0.4.1.tgz",
+ "integrity": "sha1-tUGO8EOd5UJfxJlQQtztFPsqhP8="
+ },
+ "plur": {
+ "version": "2.1.2",
+ "resolved": "https://registry.npmjs.org/plur/-/plur-2.1.2.tgz",
+ "integrity": "sha1-dIJFLBoPUI4+NE6uwxLJHCncZVo=",
+ "requires": {
+ "irregular-plurals": "^1.0.0"
+ }
+ },
+ "pluralize": {
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/pluralize/-/pluralize-1.2.1.tgz",
+ "integrity": "sha1-0aIUg/0iu0HlihL6NCGCMUCJfEU="
+ },
+ "pretty-bytes": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/pretty-bytes/-/pretty-bytes-1.0.4.tgz",
+ "integrity": "sha1-CiLoIQYJrTVUL4yNXSFZr/B1HIQ=",
+ "requires": {
+ "get-stdin": "^4.0.1",
+ "meow": "^3.1.0"
+ }
+ },
+ "process-nextick-args": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.0.tgz",
+ "integrity": "sha512-MtEC1TqN0EU5nephaJ4rAtThHtC86dNN9qCuEhtshvpVBkAW5ZO7BASN9REnF9eoXGcRub+pFuKEpOHE+HbEMw=="
+ },
+ "promise": {
+ "version": "7.3.1",
+ "resolved": "https://registry.npmjs.org/promise/-/promise-7.3.1.tgz",
+ "integrity": "sha512-nolQXZ/4L+bP/UGlkfaIujX9BKxGwmQ9OT4mOt5yvy8iK1h3wqTEJCijzGANTCCl9nWjY41juyAn2K3Q1hLLTg==",
+ "requires": {
+ "asap": "~2.0.3"
+ }
+ },
+ "promised-io": {
+ "version": "0.3.3",
+ "resolved": "https://registry.npmjs.org/promised-io/-/promised-io-0.3.3.tgz",
+ "integrity": "sha1-DqVWIYD/mJaW82r1tGIITKQWYEg="
+ },
+ "prompt": {
+ "version": "0.2.14",
+ "resolved": "https://registry.npmjs.org/prompt/-/prompt-0.2.14.tgz",
+ "integrity": "sha1-V3VPZPVD/XsIRXB8gY7OYY8F/9w=",
+ "requires": {
+ "pkginfo": "0.x.x",
+ "read": "1.0.x",
+ "revalidator": "0.1.x",
+ "utile": "0.2.x",
+ "winston": "0.8.x"
+ }
+ },
+ "proxy-addr": {
+ "version": "1.0.10",
+ "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-1.0.10.tgz",
+ "integrity": "sha1-DUCoL4Afw1VWfS7LZe/j8HfxIcU=",
+ "requires": {
+ "forwarded": "~0.1.0",
+ "ipaddr.js": "1.0.5"
+ }
+ },
+ "prr": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/prr/-/prr-1.0.1.tgz",
+ "integrity": "sha1-0/wRS6BplaRexok/SEzrHXj19HY=",
+ "optional": true
+ },
+ "pseudomap": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/pseudomap/-/pseudomap-1.0.2.tgz",
+ "integrity": "sha1-8FKijacOYYkX7wqKw0wa5aaChrM="
+ },
+ "psl": {
+ "version": "1.1.29",
+ "resolved": "https://registry.npmjs.org/psl/-/psl-1.1.29.tgz",
+ "integrity": "sha512-AeUmQ0oLN02flVHXWh9sSJF7mcdFq0ppid/JkErufc3hGIV/AMa8Fo9VgDo/cT2jFdOWoFvHp90qqBH54W+gjQ==",
+ "optional": true
+ },
+ "punycode": {
+ "version": "1.4.1",
+ "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz",
+ "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4=",
+ "optional": true
+ },
+ "qs": {
+ "version": "6.5.2",
+ "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.2.tgz",
+ "integrity": "sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA==",
+ "optional": true
+ },
+ "random-bytes": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/random-bytes/-/random-bytes-1.0.0.tgz",
+ "integrity": "sha1-T2ih3Arli9P7lYSMMDJNt11kNgs="
+ },
+ "range-parser": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.0.3.tgz",
+ "integrity": "sha1-aHKCNTXGkuLCoBA4Jq/YLC4P8XU="
+ },
+ "raw-body": {
+ "version": "2.1.7",
+ "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.1.7.tgz",
+ "integrity": "sha1-rf6s4uT7MJgFgBTQjActzFl1h3Q=",
+ "requires": {
+ "bytes": "2.4.0",
+ "iconv-lite": "0.4.13",
+ "unpipe": "1.0.0"
+ },
+ "dependencies": {
+ "bytes": {
+ "version": "2.4.0",
+ "resolved": "https://registry.npmjs.org/bytes/-/bytes-2.4.0.tgz",
+ "integrity": "sha1-fZcZb51br39pNeJZhVSe3SpsIzk="
+ },
+ "iconv-lite": {
+ "version": "0.4.13",
+ "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.13.tgz",
+ "integrity": "sha1-H4irpKsLFQjoMSrMOTRfNumS4vI="
+ }
+ }
+ },
+ "rc": {
+ "version": "1.2.8",
+ "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz",
+ "integrity": "sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==",
+ "requires": {
+ "deep-extend": "^0.6.0",
+ "ini": "~1.3.0",
+ "minimist": "^1.2.0",
+ "strip-json-comments": "~2.0.1"
+ },
+ "dependencies": {
+ "deep-extend": {
+ "version": "0.6.0",
+ "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz",
+ "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA=="
+ },
+ "minimist": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz",
+ "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ="
+ }
+ }
+ },
+ "read": {
+ "version": "1.0.7",
+ "resolved": "https://registry.npmjs.org/read/-/read-1.0.7.tgz",
+ "integrity": "sha1-s9oZvQUkMal2cdRKQmNK33ELQMQ=",
+ "requires": {
+ "mute-stream": "~0.0.4"
+ }
+ },
+ "read-pkg": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-1.1.0.tgz",
+ "integrity": "sha1-9f+qXs0pyzHAR0vKfXVra7KePyg=",
+ "requires": {
+ "load-json-file": "^1.0.0",
+ "normalize-package-data": "^2.3.2",
+ "path-type": "^1.0.0"
+ }
+ },
+ "read-pkg-up": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-1.0.1.tgz",
+ "integrity": "sha1-nWPBMnbAZZGNV/ACpX9AobZD+wI=",
+ "requires": {
+ "find-up": "^1.0.0",
+ "read-pkg": "^1.0.0"
+ }
+ },
+ "readable-stream": {
+ "version": "1.1.14",
+ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.1.14.tgz",
+ "integrity": "sha1-fPTFTvZI44EwhMY23SB54WbAgdk=",
+ "requires": {
+ "core-util-is": "~1.0.0",
+ "inherits": "~2.0.1",
+ "isarray": "0.0.1",
+ "string_decoder": "~0.10.x"
+ }
+ },
+ "redent": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/redent/-/redent-1.0.0.tgz",
+ "integrity": "sha1-z5Fqsf1fHxbfsggi3W7H9zDCr94=",
+ "requires": {
+ "indent-string": "^2.1.0",
+ "strip-indent": "^1.0.1"
+ }
+ },
+ "repeat-string": {
+ "version": "1.6.1",
+ "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz",
+ "integrity": "sha1-jcrkcOHIirwtYA//Sndihtp15jc="
+ },
+ "repeating": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/repeating/-/repeating-2.0.1.tgz",
+ "integrity": "sha1-UhTFOpJtNVJwdSf7q0FdvAjQbdo=",
+ "requires": {
+ "is-finite": "^1.0.0"
+ }
+ },
+ "replace-ext": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/replace-ext/-/replace-ext-1.0.0.tgz",
+ "integrity": "sha1-3mMSg3P8v3w8z6TeWkgMRaZ5WOs="
+ },
+ "reportback": {
+ "version": "0.1.9",
+ "resolved": "https://registry.npmjs.org/reportback/-/reportback-0.1.9.tgz",
+ "integrity": "sha1-Yh9BMIvB1W0FXtAGNtwBdeEyz08=",
+ "requires": {
+ "captains-log": "~0.11.5",
+ "lodash": "~2.4.1",
+ "merge-defaults": "~0.1.0",
+ "switchback": "~1.1.1"
+ },
+ "dependencies": {
+ "captains-log": {
+ "version": "0.11.11",
+ "resolved": "https://registry.npmjs.org/captains-log/-/captains-log-0.11.11.tgz",
+ "integrity": "sha1-live/UQ1HDBrAMRabalhSsNYU4w=",
+ "requires": {
+ "colors": "~0.6.2",
+ "lodash": "2.4.1",
+ "merge-defaults": "~0.1.0",
+ "rc": "~0.3.2"
+ },
+ "dependencies": {
+ "lodash": {
+ "version": "2.4.1",
+ "resolved": "https://registry.npmjs.org/lodash/-/lodash-2.4.1.tgz",
+ "integrity": "sha1-W3cjA03aTSYuWkb7LFjXzCL3FCA="
+ }
+ }
+ },
+ "ini": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/ini/-/ini-1.1.0.tgz",
+ "integrity": "sha1-ToCMLOFExsF4iRjgNNZ5e8bPYoE="
+ },
+ "lodash": {
+ "version": "2.4.2",
+ "resolved": "https://registry.npmjs.org/lodash/-/lodash-2.4.2.tgz",
+ "integrity": "sha1-+t2DS5aDBz2hebPq5tnA0VBT9z4="
+ },
+ "merge-defaults": {
+ "version": "0.1.4",
+ "resolved": "https://registry.npmjs.org/merge-defaults/-/merge-defaults-0.1.4.tgz",
+ "integrity": "sha1-kkDUlaPxUC0608oEGwMfAFmb8Xg=",
+ "requires": {
+ "lodash": "~2.4.1"
+ }
+ },
+ "rc": {
+ "version": "0.3.5",
+ "resolved": "https://registry.npmjs.org/rc/-/rc-0.3.5.tgz",
+ "integrity": "sha1-/OIiBZO+V6oSlmhafjftAD38xyg=",
+ "requires": {
+ "deep-extend": "~0.2.5",
+ "ini": "~1.1.0",
+ "minimist": "~0.0.7"
+ }
+ }
+ }
+ },
+ "request": {
+ "version": "2.88.0",
+ "resolved": "https://registry.npmjs.org/request/-/request-2.88.0.tgz",
+ "integrity": "sha512-NAqBSrijGLZdM0WZNsInLJpkJokL72XYjUpnB0iwsRgxh7dB6COrHnTBNwN0E+lHDAJzu7kLAkDeY08z2/A0hg==",
+ "optional": true,
+ "requires": {
+ "aws-sign2": "~0.7.0",
+ "aws4": "^1.8.0",
+ "caseless": "~0.12.0",
+ "combined-stream": "~1.0.6",
+ "extend": "~3.0.2",
+ "forever-agent": "~0.6.1",
+ "form-data": "~2.3.2",
+ "har-validator": "~5.1.0",
+ "http-signature": "~1.2.0",
+ "is-typedarray": "~1.0.0",
+ "isstream": "~0.1.2",
+ "json-stringify-safe": "~5.0.1",
+ "mime-types": "~2.1.19",
+ "oauth-sign": "~0.9.0",
+ "performance-now": "^2.1.0",
+ "qs": "~6.5.2",
+ "safe-buffer": "^5.1.2",
+ "tough-cookie": "~2.4.3",
+ "tunnel-agent": "^0.6.0",
+ "uuid": "^3.3.2"
+ }
+ },
+ "resolve": {
+ "version": "1.1.7",
+ "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.1.7.tgz",
+ "integrity": "sha1-IDEU2CrSxe2ejgQRs5ModeiJ6Xs="
+ },
+ "response-time": {
+ "version": "2.3.2",
+ "resolved": "https://registry.npmjs.org/response-time/-/response-time-2.3.2.tgz",
+ "integrity": "sha1-/6cbq5UtYvfB1Jt0NDVfvGjf/Fo=",
+ "requires": {
+ "depd": "~1.1.0",
+ "on-headers": "~1.0.1"
+ },
+ "dependencies": {
+ "depd": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz",
+ "integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak="
+ }
+ }
+ },
+ "revalidator": {
+ "version": "0.1.8",
+ "resolved": "https://registry.npmjs.org/revalidator/-/revalidator-0.1.8.tgz",
+ "integrity": "sha1-/s5hv6DBtSoga9axgZgYS91SOjs="
+ },
+ "right-align": {
+ "version": "0.1.3",
+ "resolved": "https://registry.npmjs.org/right-align/-/right-align-0.1.3.tgz",
+ "integrity": "sha1-YTObci/mo1FWiSENJOFMlhSGE+8=",
+ "requires": {
+ "align-text": "^0.1.1"
+ }
+ },
+ "rimraf": {
+ "version": "2.2.8",
+ "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.2.8.tgz",
+ "integrity": "sha1-5Dm+Kq7jJzIZUnMPmaiSnk/FBYI="
+ },
+ "rndm": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/rndm/-/rndm-1.2.0.tgz",
+ "integrity": "sha1-8z/pz7Urv9UgqhgyO8ZdsRCht2w="
+ },
+ "rttc": {
+ "version": "9.3.3",
+ "resolved": "https://registry.npmjs.org/rttc/-/rttc-9.3.3.tgz",
+ "integrity": "sha1-YL25KXLPRnNIjwrFaAf2l7EEEig=",
+ "requires": {
+ "lodash": "^3.8.0"
+ }
+ },
+ "safe-buffer": {
+ "version": "5.1.2",
+ "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
+ "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g=="
+ },
+ "safefs": {
+ "version": "3.2.2",
+ "resolved": "https://registry.npmjs.org/safefs/-/safefs-3.2.2.tgz",
+ "integrity": "sha1-gXDBRE1wOOCMrqBaN0+uL6NJ4Vw=",
+ "requires": {
+ "graceful-fs": "*"
+ }
+ },
+ "safer-buffer": {
+ "version": "2.1.2",
+ "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz",
+ "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg=="
+ },
+ "sails": {
+ "version": "0.12.14",
+ "resolved": "https://registry.npmjs.org/sails/-/sails-0.12.14.tgz",
+ "integrity": "sha1-Sti+mM/PRW59HIX253MfMa8zI5c=",
+ "requires": {
+ "@sailshq/express": "^3.21.3",
+ "@sailshq/lodash": "^3.10.2",
+ "anchor": "~0.10.5",
+ "async": "1.5.0",
+ "captains-log": "1.0.0",
+ "chalk": "1.1.3",
+ "commander": "2.9.0",
+ "compression": "1.6.2",
+ "connect": "3.4.1",
+ "connect-flash": "0.1.1",
+ "consolidate": "0.14.1",
+ "cookie": "0.1.2",
+ "cookie-parser": "1.3.5",
+ "cookie-signature": "1.0.6",
+ "csurf": "1.9.0",
+ "ejs": "2.3.4",
+ "ejs-locals": "1.0.2",
+ "express-handlebars": "3.0.0",
+ "express-session": "1.14.2",
+ "flaverr": "^1.0.0",
+ "glob": "5.0.15",
+ "grunt": "1.0.1",
+ "grunt-cli": "1.2.0",
+ "grunt-contrib-clean": "1.0.0",
+ "grunt-contrib-coffee": "1.0.0",
+ "grunt-contrib-concat": "1.0.1",
+ "grunt-contrib-copy": "1.0.0",
+ "grunt-contrib-cssmin": "1.0.1",
+ "grunt-contrib-jst": "1.0.0",
+ "grunt-contrib-less": "1.3.0",
+ "grunt-contrib-uglify": "1.0.1",
+ "grunt-contrib-watch": "1.0.0",
+ "grunt-sails-linker": "~0.10.1",
+ "grunt-sync": "0.5.2",
+ "i18n": "0.8.1",
+ "include-all": "^1.0.0",
+ "merge-defaults": "~0.2.1",
+ "method-override": "2.3.5",
+ "mock-req": "0.2.0",
+ "mock-res": "0.3.0",
+ "parseurl": "1.3.1",
+ "path-to-regexp": "1.5.3",
+ "pluralize": "1.2.1",
+ "prompt": "0.2.14",
+ "rc": "1.0.1",
+ "reportback": "~0.1.9",
+ "rttc": "9.3.3",
+ "sails-disk": "~0.10.9",
+ "sails-generate": "~0.13.0",
+ "sails-hook-orm": "~1.0.9",
+ "sails-hook-sockets": "^0.13.9",
+ "sails-stringfile": "~0.3.2",
+ "sails-util": "~0.11.0",
+ "semver": "5.1.0",
+ "serve-favicon": "2.3.0",
+ "serve-static": "1.10.2",
+ "skipper": "~0.7.0",
+ "uid-safe": "1.1.0",
+ "walk": "2.3.9"
+ },
+ "dependencies": {
+ "grunt-cli": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/grunt-cli/-/grunt-cli-1.2.0.tgz",
+ "integrity": "sha1-VisRnrsGndtGSs4oRVAb6Xs1tqg=",
+ "requires": {
+ "findup-sync": "~0.3.0",
+ "grunt-known-options": "~1.1.0",
+ "nopt": "~3.0.6",
+ "resolve": "~1.1.0"
+ }
+ },
+ "rc": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/rc/-/rc-1.0.1.tgz",
+ "integrity": "sha1-+RnCXoBMsKpg9v2S2Sn8hrRQE+g=",
+ "requires": {
+ "deep-extend": "~0.2.5",
+ "ini": "~1.3.0",
+ "minimist": "~0.0.7",
+ "strip-json-comments": "0.1.x"
+ }
+ },
+ "strip-json-comments": {
+ "version": "0.1.3",
+ "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-0.1.3.tgz",
+ "integrity": "sha1-Fkxk43Coo8wAyeAbU55WmCPw7lQ="
+ }
+ }
+ },
+ "sails-disk": {
+ "version": "0.10.10",
+ "resolved": "https://registry.npmjs.org/sails-disk/-/sails-disk-0.10.10.tgz",
+ "integrity": "sha1-asXeoAlQz2VopT/hP9C4060yYP8=",
+ "requires": {
+ "async": "~0.2.9",
+ "fs-extra": "0.30.0",
+ "lodash": "3.10.1",
+ "waterline-criteria": "~1.0.1",
+ "waterline-cursor": "~0.0.6",
+ "waterline-errors": "~0.10.1"
+ },
+ "dependencies": {
+ "async": {
+ "version": "0.2.10",
+ "resolved": "https://registry.npmjs.org/async/-/async-0.2.10.tgz",
+ "integrity": "sha1-trvgsGdLnXGXCMo43owjfLUmw9E="
+ }
+ }
+ },
+ "sails-generate": {
+ "version": "0.13.0",
+ "resolved": "https://registry.npmjs.org/sails-generate/-/sails-generate-0.13.0.tgz",
+ "integrity": "sha1-n2UeZ7qW7xn6GE0NeJjk0+oJdJI=",
+ "requires": {
+ "async": "~0.2.9",
+ "fs-extra": "~0.8.1",
+ "lodash": "~2.4.1",
+ "merge-defaults": "~0.1.0",
+ "reportback": "~0.1.8",
+ "sails-generate-adapter": "~0.10.5",
+ "sails-generate-api": "~0.10.0",
+ "sails-generate-backend": "~0.12.2",
+ "sails-generate-controller": "~0.10.7",
+ "sails-generate-frontend": "^0.12.0",
+ "sails-generate-generator": "~0.10.0",
+ "sails-generate-gruntfile": "~0.10.10",
+ "sails-generate-model": "~0.10.10",
+ "sails-generate-new": "~0.10.19",
+ "sails-generate-sails.io.js": "^0.13.0",
+ "sails-generate-views": "~0.10.5",
+ "sails-generate-views-jade": "~0.10.3"
+ },
+ "dependencies": {
+ "async": {
+ "version": "0.2.10",
+ "resolved": "https://registry.npmjs.org/async/-/async-0.2.10.tgz",
+ "integrity": "sha1-trvgsGdLnXGXCMo43owjfLUmw9E="
+ },
+ "fs-extra": {
+ "version": "0.8.1",
+ "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-0.8.1.tgz",
+ "integrity": "sha1-Dld5/7/t9RG8dVWVx/A8BtS0Po0=",
+ "requires": {
+ "jsonfile": "~1.1.0",
+ "mkdirp": "0.3.x",
+ "ncp": "~0.4.2",
+ "rimraf": "~2.2.0"
+ }
+ },
+ "jsonfile": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-1.1.1.tgz",
+ "integrity": "sha1-2k/WrXfxolUgPqY8e8Mtwx72RDM="
+ },
+ "lodash": {
+ "version": "2.4.2",
+ "resolved": "https://registry.npmjs.org/lodash/-/lodash-2.4.2.tgz",
+ "integrity": "sha1-+t2DS5aDBz2hebPq5tnA0VBT9z4="
+ },
+ "merge-defaults": {
+ "version": "0.1.4",
+ "resolved": "https://registry.npmjs.org/merge-defaults/-/merge-defaults-0.1.4.tgz",
+ "integrity": "sha1-kkDUlaPxUC0608oEGwMfAFmb8Xg=",
+ "requires": {
+ "lodash": "~2.4.1"
+ }
+ },
+ "mkdirp": {
+ "version": "0.3.5",
+ "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.3.5.tgz",
+ "integrity": "sha1-3j5fiWHIjHh+4TaN+EmsRBPsqNc="
+ }
+ }
+ },
+ "sails-generate-adapter": {
+ "version": "0.10.7",
+ "resolved": "https://registry.npmjs.org/sails-generate-adapter/-/sails-generate-adapter-0.10.7.tgz",
+ "integrity": "sha1-/9U0BMwvY27NAyghwLmByFsFzVU=",
+ "requires": {
+ "lodash": "~2.4.1",
+ "merge-defaults": ">=0.1.0"
+ },
+ "dependencies": {
+ "lodash": {
+ "version": "2.4.2",
+ "resolved": "https://registry.npmjs.org/lodash/-/lodash-2.4.2.tgz",
+ "integrity": "sha1-+t2DS5aDBz2hebPq5tnA0VBT9z4="
+ }
+ }
+ },
+ "sails-generate-api": {
+ "version": "0.10.1",
+ "resolved": "https://registry.npmjs.org/sails-generate-api/-/sails-generate-api-0.10.1.tgz",
+ "integrity": "sha1-FVCVe2DU8Dpjerb1nE9j2jom9As=",
+ "requires": {
+ "async": "~0.2.9",
+ "lodash": "~2.4.1",
+ "merge-defaults": "~0.1.0"
+ },
+ "dependencies": {
+ "async": {
+ "version": "0.2.10",
+ "resolved": "https://registry.npmjs.org/async/-/async-0.2.10.tgz",
+ "integrity": "sha1-trvgsGdLnXGXCMo43owjfLUmw9E="
+ },
+ "lodash": {
+ "version": "2.4.2",
+ "resolved": "https://registry.npmjs.org/lodash/-/lodash-2.4.2.tgz",
+ "integrity": "sha1-+t2DS5aDBz2hebPq5tnA0VBT9z4="
+ },
+ "merge-defaults": {
+ "version": "0.1.4",
+ "resolved": "https://registry.npmjs.org/merge-defaults/-/merge-defaults-0.1.4.tgz",
+ "integrity": "sha1-kkDUlaPxUC0608oEGwMfAFmb8Xg=",
+ "requires": {
+ "lodash": "~2.4.1"
+ }
+ }
+ }
+ },
+ "sails-generate-backend": {
+ "version": "0.12.8",
+ "resolved": "https://registry.npmjs.org/sails-generate-backend/-/sails-generate-backend-0.12.8.tgz",
+ "integrity": "sha512-PmGOnUZeF0cDgE61qAq1l1fLzahvkf2V1McMm1T3YGMaMuw/zbr6Scr5wo9JBHDV+6WS3GOJR8IDQoBhCngHIA==",
+ "requires": {
+ "lodash": "~2.4.1",
+ "merge-defaults": ">=0.1.0"
+ },
+ "dependencies": {
+ "lodash": {
+ "version": "2.4.2",
+ "resolved": "https://registry.npmjs.org/lodash/-/lodash-2.4.2.tgz",
+ "integrity": "sha1-+t2DS5aDBz2hebPq5tnA0VBT9z4="
+ }
+ }
+ },
+ "sails-generate-controller": {
+ "version": "0.10.9",
+ "resolved": "https://registry.npmjs.org/sails-generate-controller/-/sails-generate-controller-0.10.9.tgz",
+ "integrity": "sha1-GRtjX23KnjJx1eIVQZnlLVA0a+E=",
+ "requires": {
+ "lodash": "~2.4.1",
+ "merge-defaults": ">=0.1.0",
+ "pluralize": "0.0.9",
+ "underscore.string": "~2.3.3"
+ },
+ "dependencies": {
+ "lodash": {
+ "version": "2.4.2",
+ "resolved": "https://registry.npmjs.org/lodash/-/lodash-2.4.2.tgz",
+ "integrity": "sha1-+t2DS5aDBz2hebPq5tnA0VBT9z4="
+ },
+ "pluralize": {
+ "version": "0.0.9",
+ "resolved": "https://registry.npmjs.org/pluralize/-/pluralize-0.0.9.tgz",
+ "integrity": "sha1-zA2ivWdrRq8P2Wf6jTnaKdFRGUI="
+ },
+ "underscore.string": {
+ "version": "2.3.3",
+ "resolved": "https://registry.npmjs.org/underscore.string/-/underscore.string-2.3.3.tgz",
+ "integrity": "sha1-ccCL9rQosRM/N+ePo6Icgvcymw0="
+ }
+ }
+ },
+ "sails-generate-frontend": {
+ "version": "0.12.3",
+ "resolved": "https://registry.npmjs.org/sails-generate-frontend/-/sails-generate-frontend-0.12.3.tgz",
+ "integrity": "sha1-XgKdir3C9gB7VtCYkr5EATrkV9w=",
+ "requires": {
+ "lodash": "2.4.1",
+ "merge-defaults": "0.1.0",
+ "sails-generate-sails.io.js": "^0.14.0"
+ },
+ "dependencies": {
+ "lodash": {
+ "version": "2.4.1",
+ "resolved": "https://registry.npmjs.org/lodash/-/lodash-2.4.1.tgz",
+ "integrity": "sha1-W3cjA03aTSYuWkb7LFjXzCL3FCA="
+ },
+ "merge-defaults": {
+ "version": "0.1.0",
+ "resolved": "https://registry.npmjs.org/merge-defaults/-/merge-defaults-0.1.0.tgz",
+ "integrity": "sha1-2ky3qSPbg5VZkFvj3b31vV+aK7g=",
+ "requires": {
+ "lodash": "~2.4.1"
+ }
+ },
+ "sails-generate-sails.io.js": {
+ "version": "0.14.0",
+ "resolved": "https://registry.npmjs.org/sails-generate-sails.io.js/-/sails-generate-sails.io.js-0.14.0.tgz",
+ "integrity": "sha1-i1UQitjkIX+vGKG472hBned81eA=",
+ "requires": {
+ "lodash": "~2.4.1",
+ "sails.io.js-dist": "^0.14.0"
+ }
+ }
+ }
+ },
+ "sails-generate-generator": {
+ "version": "0.10.11",
+ "resolved": "https://registry.npmjs.org/sails-generate-generator/-/sails-generate-generator-0.10.11.tgz",
+ "integrity": "sha1-+z2Pd10k63uZ809562YPXWY/Qcs=",
+ "requires": {
+ "lodash": ">=2.4.x",
+ "merge-defaults": ">=0.1.0"
+ }
+ },
+ "sails-generate-gruntfile": {
+ "version": "0.10.11",
+ "resolved": "https://registry.npmjs.org/sails-generate-gruntfile/-/sails-generate-gruntfile-0.10.11.tgz",
+ "integrity": "sha1-zUOadw8TraPLbj2kFpLqmF1oaVs=",
+ "requires": {
+ "lodash": "~2.4.1",
+ "merge-defaults": ">=0.1.0"
+ },
+ "dependencies": {
+ "lodash": {
+ "version": "2.4.2",
+ "resolved": "https://registry.npmjs.org/lodash/-/lodash-2.4.2.tgz",
+ "integrity": "sha1-+t2DS5aDBz2hebPq5tnA0VBT9z4="
+ }
+ }
+ },
+ "sails-generate-model": {
+ "version": "0.10.12",
+ "resolved": "https://registry.npmjs.org/sails-generate-model/-/sails-generate-model-0.10.12.tgz",
+ "integrity": "sha1-O8k6xzx2p7SJFUeSEPJ2c3xHH7k=",
+ "requires": {
+ "lodash": "~2.4.0",
+ "merge-defaults": ">=0.1.0",
+ "underscore.string": "~2.3.3"
+ },
+ "dependencies": {
+ "lodash": {
+ "version": "2.4.2",
+ "resolved": "https://registry.npmjs.org/lodash/-/lodash-2.4.2.tgz",
+ "integrity": "sha1-+t2DS5aDBz2hebPq5tnA0VBT9z4="
+ },
+ "underscore.string": {
+ "version": "2.3.3",
+ "resolved": "https://registry.npmjs.org/underscore.string/-/underscore.string-2.3.3.tgz",
+ "integrity": "sha1-ccCL9rQosRM/N+ePo6Icgvcymw0="
+ }
+ }
+ },
+ "sails-generate-new": {
+ "version": "0.10.29",
+ "resolved": "https://registry.npmjs.org/sails-generate-new/-/sails-generate-new-0.10.29.tgz",
+ "integrity": "sha1-eL0B70gULDZ2nRrGvxbqcjqQOC8=",
+ "requires": {
+ "async": "~1.2.0",
+ "cross-spawn-async": "^2.1.6",
+ "fs-extra": "*",
+ "lodash": "~3.9.0",
+ "merge-defaults": ">=0.2.x"
+ },
+ "dependencies": {
+ "async": {
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/async/-/async-1.2.1.tgz",
+ "integrity": "sha1-pIFqF81f9RbfosdpikUzabl5DeA="
+ },
+ "lodash": {
+ "version": "3.9.3",
+ "resolved": "https://registry.npmjs.org/lodash/-/lodash-3.9.3.tgz",
+ "integrity": "sha1-AVnoaDL+/8bWHYUrEqlTuZSWvTI="
+ }
+ }
+ },
+ "sails-generate-sails.io.js": {
+ "version": "0.13.4",
+ "resolved": "https://registry.npmjs.org/sails-generate-sails.io.js/-/sails-generate-sails.io.js-0.13.4.tgz",
+ "integrity": "sha1-zdKJOViqqPpysH5RefoJgIULSI4=",
+ "requires": {
+ "lodash": "~2.4.1",
+ "sails.io.js-dist": "^0.13.3"
+ },
+ "dependencies": {
+ "lodash": {
+ "version": "2.4.2",
+ "resolved": "https://registry.npmjs.org/lodash/-/lodash-2.4.2.tgz",
+ "integrity": "sha1-+t2DS5aDBz2hebPq5tnA0VBT9z4="
+ },
+ "sails.io.js-dist": {
+ "version": "0.13.8",
+ "resolved": "https://registry.npmjs.org/sails.io.js-dist/-/sails.io.js-dist-0.13.8.tgz",
+ "integrity": "sha1-QR/X6iAFZK6Sl/8OLwiNhXK7JzQ="
+ }
+ }
+ },
+ "sails-generate-views": {
+ "version": "0.10.8",
+ "resolved": "https://registry.npmjs.org/sails-generate-views/-/sails-generate-views-0.10.8.tgz",
+ "integrity": "sha1-fVFes83mMx7e/8sq8+h2JtPgHZs=",
+ "requires": {
+ "lodash": "~2.4.1",
+ "merge-defaults": ">=0.1.0"
+ },
+ "dependencies": {
+ "lodash": {
+ "version": "2.4.2",
+ "resolved": "https://registry.npmjs.org/lodash/-/lodash-2.4.2.tgz",
+ "integrity": "sha1-+t2DS5aDBz2hebPq5tnA0VBT9z4="
+ }
+ }
+ },
+ "sails-generate-views-jade": {
+ "version": "0.10.4",
+ "resolved": "https://registry.npmjs.org/sails-generate-views-jade/-/sails-generate-views-jade-0.10.4.tgz",
+ "integrity": "sha1-7YF9wcIvRJQ/uUFoxXac3w9VhQk=",
+ "requires": {
+ "lodash": "~2.4.1",
+ "merge-defaults": ">=0.1.0"
+ },
+ "dependencies": {
+ "lodash": {
+ "version": "2.4.2",
+ "resolved": "https://registry.npmjs.org/lodash/-/lodash-2.4.2.tgz",
+ "integrity": "sha1-+t2DS5aDBz2hebPq5tnA0VBT9z4="
+ }
+ }
+ },
+ "sails-hook-orm": {
+ "version": "1.0.9",
+ "resolved": "https://registry.npmjs.org/sails-hook-orm/-/sails-hook-orm-1.0.9.tgz",
+ "integrity": "sha1-RhaYoMsVQnU0ORP15iQv4nYtvsg=",
+ "requires": {
+ "async": "1.5.2",
+ "lodash": "3.10.1",
+ "prompt": "0.2.14",
+ "rttc": "~9.3.0",
+ "waterline": "~0.11.0"
+ },
+ "dependencies": {
+ "async": {
+ "version": "1.5.2",
+ "resolved": "https://registry.npmjs.org/async/-/async-1.5.2.tgz",
+ "integrity": "sha1-7GphrlZIDAw8skHJVhjiCJL5Zyo="
+ }
+ }
+ },
+ "sails-hook-sockets": {
+ "version": "0.13.14",
+ "resolved": "https://registry.npmjs.org/sails-hook-sockets/-/sails-hook-sockets-0.13.14.tgz",
+ "integrity": "sha512-O9O+OObrsOtsc1lmTneyTuBkUIuP1iBCL3ZCzJgXZVlolbwSrRxOuQxPT0BdehyElgdgxaD8Ls+fBY77QFC1HA==",
+ "requires": {
+ "async": "1.5.0",
+ "lodash": "3.10.1",
+ "machinepack-urls": "^3.1.1",
+ "semver": "^4.3.4",
+ "socket.io": "1.7.3",
+ "uid2": "0.0.3"
+ },
+ "dependencies": {
+ "semver": {
+ "version": "4.3.6",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-4.3.6.tgz",
+ "integrity": "sha1-MAvG4OhjdPe6YQaLWx7NV/xlMto="
+ }
+ }
+ },
+ "sails-stringfile": {
+ "version": "0.3.2",
+ "resolved": "https://registry.npmjs.org/sails-stringfile/-/sails-stringfile-0.3.2.tgz",
+ "integrity": "sha1-2k42Zqj5z9Ph80a/uBFqMD4cML0=",
+ "requires": {
+ "colors": "*",
+ "lodash": "~2.4.1"
+ },
+ "dependencies": {
+ "lodash": {
+ "version": "2.4.2",
+ "resolved": "https://registry.npmjs.org/lodash/-/lodash-2.4.2.tgz",
+ "integrity": "sha1-+t2DS5aDBz2hebPq5tnA0VBT9z4="
+ }
+ }
+ },
+ "sails-util": {
+ "version": "0.11.0",
+ "resolved": "https://registry.npmjs.org/sails-util/-/sails-util-0.11.0.tgz",
+ "integrity": "sha1-eqwpW0KWrJ11Z+Q2+QSvCarKPWM=",
+ "requires": {
+ "fs-extra": "~0.8.1",
+ "json-stringify-safe": "~5.0.0",
+ "lodash": "3.10.1",
+ "optimist": "~0.6.0",
+ "switchback": "~1.1.1",
+ "underscore.string": "~2.3.3"
+ },
+ "dependencies": {
+ "fs-extra": {
+ "version": "0.8.1",
+ "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-0.8.1.tgz",
+ "integrity": "sha1-Dld5/7/t9RG8dVWVx/A8BtS0Po0=",
+ "requires": {
+ "jsonfile": "~1.1.0",
+ "mkdirp": "0.3.x",
+ "ncp": "~0.4.2",
+ "rimraf": "~2.2.0"
+ }
+ },
+ "jsonfile": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-1.1.1.tgz",
+ "integrity": "sha1-2k/WrXfxolUgPqY8e8Mtwx72RDM="
+ },
+ "mkdirp": {
+ "version": "0.3.5",
+ "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.3.5.tgz",
+ "integrity": "sha1-3j5fiWHIjHh+4TaN+EmsRBPsqNc="
+ },
+ "underscore.string": {
+ "version": "2.3.3",
+ "resolved": "https://registry.npmjs.org/underscore.string/-/underscore.string-2.3.3.tgz",
+ "integrity": "sha1-ccCL9rQosRM/N+ePo6Icgvcymw0="
+ }
+ }
+ },
+ "sails.io.js-dist": {
+ "version": "0.14.0",
+ "resolved": "https://registry.npmjs.org/sails.io.js-dist/-/sails.io.js-dist-0.14.0.tgz",
+ "integrity": "sha1-0CbT7hS1Sdc/bsIarYpvAhADcBE="
+ },
+ "scandirectory": {
+ "version": "2.5.0",
+ "resolved": "https://registry.npmjs.org/scandirectory/-/scandirectory-2.5.0.tgz",
+ "integrity": "sha1-bOA/VKCQtmjjy+2/IO354xBZPnI=",
+ "requires": {
+ "ignorefs": "^1.0.0",
+ "safefs": "^3.1.2",
+ "taskgroup": "^4.0.5"
+ }
+ },
+ "semver": {
+ "version": "5.1.0",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-5.1.0.tgz",
+ "integrity": "sha1-hfLPhVBGXE3wAM99hvawVBBqueU="
+ },
+ "send": {
+ "version": "0.13.0",
+ "resolved": "https://registry.npmjs.org/send/-/send-0.13.0.tgz",
+ "integrity": "sha1-UY+SGusFYK7H3KspkLFM9vPM5d4=",
+ "requires": {
+ "debug": "~2.2.0",
+ "depd": "~1.0.1",
+ "destroy": "1.0.3",
+ "escape-html": "1.0.2",
+ "etag": "~1.7.0",
+ "fresh": "0.3.0",
+ "http-errors": "~1.3.1",
+ "mime": "1.3.4",
+ "ms": "0.7.1",
+ "on-finished": "~2.3.0",
+ "range-parser": "~1.0.2",
+ "statuses": "~1.2.1"
+ },
+ "dependencies": {
+ "destroy": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.0.3.tgz",
+ "integrity": "sha1-tDO0ck5x/YVR2YhRdIUcX8N34sk="
+ },
+ "statuses": {
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.2.1.tgz",
+ "integrity": "sha1-3e1FzBglbVHtQK7BQkidXGECbSg="
+ }
+ }
+ },
+ "serve-favicon": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/serve-favicon/-/serve-favicon-2.3.0.tgz",
+ "integrity": "sha1-rtNsxoNAaabxicxyIsahqBHcWzk=",
+ "requires": {
+ "etag": "~1.7.0",
+ "fresh": "0.3.0",
+ "ms": "0.7.1",
+ "parseurl": "~1.3.0"
+ }
+ },
+ "serve-index": {
+ "version": "1.7.3",
+ "resolved": "https://registry.npmjs.org/serve-index/-/serve-index-1.7.3.tgz",
+ "integrity": "sha1-egV/xu4o3GP2RWbl+lexEahq7NI=",
+ "requires": {
+ "accepts": "~1.2.13",
+ "batch": "0.5.3",
+ "debug": "~2.2.0",
+ "escape-html": "~1.0.3",
+ "http-errors": "~1.3.1",
+ "mime-types": "~2.1.9",
+ "parseurl": "~1.3.1"
+ },
+ "dependencies": {
+ "escape-html": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz",
+ "integrity": "sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg="
+ }
+ }
+ },
+ "serve-static": {
+ "version": "1.10.2",
+ "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.10.2.tgz",
+ "integrity": "sha1-/rgA0OciEk3QsAMzFgwW6cqovLM=",
+ "requires": {
+ "escape-html": "~1.0.3",
+ "parseurl": "~1.3.1",
+ "send": "0.13.1"
+ },
+ "dependencies": {
+ "depd": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz",
+ "integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak="
+ },
+ "escape-html": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz",
+ "integrity": "sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg="
+ },
+ "send": {
+ "version": "0.13.1",
+ "resolved": "https://registry.npmjs.org/send/-/send-0.13.1.tgz",
+ "integrity": "sha1-ow1fTILIqbrprQCh2bG9vm8Zntc=",
+ "requires": {
+ "debug": "~2.2.0",
+ "depd": "~1.1.0",
+ "destroy": "~1.0.4",
+ "escape-html": "~1.0.3",
+ "etag": "~1.7.0",
+ "fresh": "0.3.0",
+ "http-errors": "~1.3.1",
+ "mime": "1.3.4",
+ "ms": "0.7.1",
+ "on-finished": "~2.3.0",
+ "range-parser": "~1.0.3",
+ "statuses": "~1.2.1"
+ }
+ },
+ "statuses": {
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.2.1.tgz",
+ "integrity": "sha1-3e1FzBglbVHtQK7BQkidXGECbSg="
+ }
+ }
+ },
+ "setprototypeof": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.0.2.tgz",
+ "integrity": "sha1-gaVSFB7BBLiOic44MQOtXGZWTQg="
+ },
+ "signal-exit": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.2.tgz",
+ "integrity": "sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0="
+ },
+ "skipper": {
+ "version": "0.7.6",
+ "resolved": "https://registry.npmjs.org/skipper/-/skipper-0.7.6.tgz",
+ "integrity": "sha1-drcRnMVTsOuEOJ3opHLR7hyYC8o=",
+ "requires": {
+ "async": "2.0.1",
+ "body-parser": "1.17.1",
+ "colors": "1.1.2",
+ "debug": "2.2.0",
+ "dot-access": "1.0.0",
+ "lodash": "3.10.1",
+ "multiparty": "3.2.10",
+ "semver": "4.3.6",
+ "skipper-disk": "~0.5.6",
+ "string_decoder": "0.10.31",
+ "uuid": "3.0.1"
+ },
+ "dependencies": {
+ "async": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/async/-/async-2.0.1.tgz",
+ "integrity": "sha1-twnMAoCpw28J9FNr6CPIOKkEniU=",
+ "requires": {
+ "lodash": "^4.8.0"
+ },
+ "dependencies": {
+ "lodash": {
+ "version": "4.17.10",
+ "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.10.tgz",
+ "integrity": "sha512-UejweD1pDoXu+AD825lWwp4ZGtSwgnpZxb3JDViD7StjQz+Nb/6l093lx4OQ0foGWNRoc19mWy7BzL+UAK2iVg=="
+ }
+ }
+ },
+ "body-parser": {
+ "version": "1.17.1",
+ "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.17.1.tgz",
+ "integrity": "sha1-dbO8mN3W5+DY/+dQ36ylxmmT+kc=",
+ "requires": {
+ "bytes": "2.4.0",
+ "content-type": "~1.0.2",
+ "debug": "2.6.1",
+ "depd": "~1.1.0",
+ "http-errors": "~1.6.1",
+ "iconv-lite": "0.4.15",
+ "on-finished": "~2.3.0",
+ "qs": "6.4.0",
+ "raw-body": "~2.2.0",
+ "type-is": "~1.6.14"
+ },
+ "dependencies": {
+ "debug": {
+ "version": "2.6.1",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.1.tgz",
+ "integrity": "sha1-eYVQkLosTjEVzH2HaUkdWPBJE1E=",
+ "requires": {
+ "ms": "0.7.2"
+ }
+ }
+ }
+ },
+ "bytes": {
+ "version": "2.4.0",
+ "resolved": "https://registry.npmjs.org/bytes/-/bytes-2.4.0.tgz",
+ "integrity": "sha1-fZcZb51br39pNeJZhVSe3SpsIzk="
+ },
+ "colors": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/colors/-/colors-1.1.2.tgz",
+ "integrity": "sha1-FopHAXVran9RoSzgyXv6KMCE7WM="
+ },
+ "depd": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz",
+ "integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak="
+ },
+ "http-errors": {
+ "version": "1.6.3",
+ "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.6.3.tgz",
+ "integrity": "sha1-i1VoC7S+KDoLW/TqLjhYC+HZMg0=",
+ "requires": {
+ "depd": "~1.1.2",
+ "inherits": "2.0.3",
+ "setprototypeof": "1.1.0",
+ "statuses": ">= 1.4.0 < 2"
+ }
+ },
+ "iconv-lite": {
+ "version": "0.4.15",
+ "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.15.tgz",
+ "integrity": "sha1-/iZaIYrGpXz+hUkn6dBMGYJe3es="
+ },
+ "ms": {
+ "version": "0.7.2",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-0.7.2.tgz",
+ "integrity": "sha1-riXPJRKziFodldfwN4aNhDESR2U="
+ },
+ "multiparty": {
+ "version": "3.2.10",
+ "resolved": "https://registry.npmjs.org/multiparty/-/multiparty-3.2.10.tgz",
+ "integrity": "sha1-+JghtveRKb8R/5v5NPSRHew9KcM=",
+ "requires": {
+ "readable-stream": "~1.1.9",
+ "stream-counter": "~0.2.0"
+ }
+ },
+ "qs": {
+ "version": "6.4.0",
+ "resolved": "https://registry.npmjs.org/qs/-/qs-6.4.0.tgz",
+ "integrity": "sha1-E+JtKK1rD/qpExLNO/cI7TUecjM="
+ },
+ "raw-body": {
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.2.0.tgz",
+ "integrity": "sha1-mUl2z2pQlqQRYoQEkvC9xdbn+5Y=",
+ "requires": {
+ "bytes": "2.4.0",
+ "iconv-lite": "0.4.15",
+ "unpipe": "1.0.0"
+ }
+ },
+ "semver": {
+ "version": "4.3.6",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-4.3.6.tgz",
+ "integrity": "sha1-MAvG4OhjdPe6YQaLWx7NV/xlMto="
+ },
+ "setprototypeof": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.0.tgz",
+ "integrity": "sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ=="
+ },
+ "uuid": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.0.1.tgz",
+ "integrity": "sha1-ZUS7ot/ajBzxfmKaOjBeK7H+5sE="
+ }
+ }
+ },
+ "skipper-disk": {
+ "version": "0.5.11",
+ "resolved": "https://registry.npmjs.org/skipper-disk/-/skipper-disk-0.5.11.tgz",
+ "integrity": "sha512-uyTPr5im+dZPycIpyA+YgogpQgUXHn4a8vMc6xf4STKFypIzQ2/lwjIu9GLR5mTboeDebgQQWQFSFmZuaxtuvA==",
+ "requires": {
+ "@sailshq/lodash": "^3.10.2",
+ "debug": "3.1.0",
+ "fs-extra": "0.30.0"
+ },
+ "dependencies": {
+ "debug": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz",
+ "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==",
+ "requires": {
+ "ms": "2.0.0"
+ }
+ },
+ "ms": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
+ "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g="
+ }
+ }
+ },
+ "socket.io": {
+ "version": "1.7.3",
+ "resolved": "https://registry.npmjs.org/socket.io/-/socket.io-1.7.3.tgz",
+ "integrity": "sha1-uK+cq6AJSeVo42nxMn6pvp6iRhs=",
+ "requires": {
+ "debug": "2.3.3",
+ "engine.io": "1.8.3",
+ "has-binary": "0.1.7",
+ "object-assign": "4.1.0",
+ "socket.io-adapter": "0.5.0",
+ "socket.io-client": "1.7.3",
+ "socket.io-parser": "2.3.1"
+ },
+ "dependencies": {
+ "debug": {
+ "version": "2.3.3",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-2.3.3.tgz",
+ "integrity": "sha1-QMRT5n5uE8kB3ewxeviYbNqe/4w=",
+ "requires": {
+ "ms": "0.7.2"
+ }
+ },
+ "ms": {
+ "version": "0.7.2",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-0.7.2.tgz",
+ "integrity": "sha1-riXPJRKziFodldfwN4aNhDESR2U="
+ },
+ "object-assign": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.0.tgz",
+ "integrity": "sha1-ejs9DpgGPUP0wD8uiubNUahog6A="
+ }
+ }
+ },
+ "socket.io-adapter": {
+ "version": "0.5.0",
+ "resolved": "https://registry.npmjs.org/socket.io-adapter/-/socket.io-adapter-0.5.0.tgz",
+ "integrity": "sha1-y21LuL7IHhB4uZZ3+c7QBGBmu4s=",
+ "requires": {
+ "debug": "2.3.3",
+ "socket.io-parser": "2.3.1"
+ },
+ "dependencies": {
+ "debug": {
+ "version": "2.3.3",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-2.3.3.tgz",
+ "integrity": "sha1-QMRT5n5uE8kB3ewxeviYbNqe/4w=",
+ "requires": {
+ "ms": "0.7.2"
+ }
+ },
+ "ms": {
+ "version": "0.7.2",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-0.7.2.tgz",
+ "integrity": "sha1-riXPJRKziFodldfwN4aNhDESR2U="
+ }
+ }
+ },
+ "socket.io-client": {
+ "version": "1.7.3",
+ "resolved": "https://registry.npmjs.org/socket.io-client/-/socket.io-client-1.7.3.tgz",
+ "integrity": "sha1-sw6GqhDV7zVGYBwJzeR2Xjgdo3c=",
+ "requires": {
+ "backo2": "1.0.2",
+ "component-bind": "1.0.0",
+ "component-emitter": "1.2.1",
+ "debug": "2.3.3",
+ "engine.io-client": "1.8.3",
+ "has-binary": "0.1.7",
+ "indexof": "0.0.1",
+ "object-component": "0.0.3",
+ "parseuri": "0.0.5",
+ "socket.io-parser": "2.3.1",
+ "to-array": "0.1.4"
+ },
+ "dependencies": {
+ "component-emitter": {
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.2.1.tgz",
+ "integrity": "sha1-E3kY1teCg/ffemt8WmPhQOaUJeY="
+ },
+ "debug": {
+ "version": "2.3.3",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-2.3.3.tgz",
+ "integrity": "sha1-QMRT5n5uE8kB3ewxeviYbNqe/4w=",
+ "requires": {
+ "ms": "0.7.2"
+ }
+ },
+ "ms": {
+ "version": "0.7.2",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-0.7.2.tgz",
+ "integrity": "sha1-riXPJRKziFodldfwN4aNhDESR2U="
+ }
+ }
+ },
+ "socket.io-parser": {
+ "version": "2.3.1",
+ "resolved": "https://registry.npmjs.org/socket.io-parser/-/socket.io-parser-2.3.1.tgz",
+ "integrity": "sha1-3VMgJRA85Clpcya+/WQAX8/ltKA=",
+ "requires": {
+ "component-emitter": "1.1.2",
+ "debug": "2.2.0",
+ "isarray": "0.0.1",
+ "json3": "3.3.2"
+ }
+ },
+ "source-map": {
+ "version": "0.4.4",
+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.4.4.tgz",
+ "integrity": "sha1-66T12pwNyZneaAMti092FzZSA2s=",
+ "requires": {
+ "amdefine": ">=0.0.4"
+ }
+ },
+ "spdx-correct": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.0.0.tgz",
+ "integrity": "sha512-N19o9z5cEyc8yQQPukRCZ9EUmb4HUpnrmaL/fxS2pBo2jbfcFRVuFZ/oFC+vZz0MNNk0h80iMn5/S6qGZOL5+g==",
+ "requires": {
+ "spdx-expression-parse": "^3.0.0",
+ "spdx-license-ids": "^3.0.0"
+ }
+ },
+ "spdx-exceptions": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.1.0.tgz",
+ "integrity": "sha512-4K1NsmrlCU1JJgUrtgEeTVyfx8VaYea9J9LvARxhbHtVtohPs/gFGG5yy49beySjlIMhhXZ4QqujIZEfS4l6Cg=="
+ },
+ "spdx-expression-parse": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.0.tgz",
+ "integrity": "sha512-Yg6D3XpRD4kkOmTpdgbUiEJFKghJH03fiC1OPll5h/0sO6neh2jqRDVHOQ4o/LMea0tgCkbMgea5ip/e+MkWyg==",
+ "requires": {
+ "spdx-exceptions": "^2.1.0",
+ "spdx-license-ids": "^3.0.0"
+ }
+ },
+ "spdx-license-ids": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.0.tgz",
+ "integrity": "sha512-2+EPwgbnmOIl8HjGBXXMd9NAu02vLjOO1nWw4kmeRDFyHn+M/ETfHxQUK0oXg8ctgVnl9t3rosNVsZ1jG61nDA=="
+ },
+ "sprintf-js": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz",
+ "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw="
+ },
+ "sshpk": {
+ "version": "1.14.2",
+ "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.14.2.tgz",
+ "integrity": "sha1-xvxhZIo9nE52T9P8306hBeSSupg=",
+ "optional": true,
+ "requires": {
+ "asn1": "~0.2.3",
+ "assert-plus": "^1.0.0",
+ "bcrypt-pbkdf": "^1.0.0",
+ "dashdash": "^1.12.0",
+ "ecc-jsbn": "~0.1.1",
+ "getpass": "^0.1.1",
+ "jsbn": "~0.1.0",
+ "safer-buffer": "^2.0.2",
+ "tweetnacl": "~0.14.0"
+ }
+ },
+ "stack-trace": {
+ "version": "0.0.10",
+ "resolved": "https://registry.npmjs.org/stack-trace/-/stack-trace-0.0.10.tgz",
+ "integrity": "sha1-VHxws0fo0ytOEI6hoqFZ5f3eGcA="
+ },
+ "statuses": {
+ "version": "1.5.0",
+ "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz",
+ "integrity": "sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow="
+ },
+ "stream-counter": {
+ "version": "0.2.0",
+ "resolved": "https://registry.npmjs.org/stream-counter/-/stream-counter-0.2.0.tgz",
+ "integrity": "sha1-3tJmVWMZyLDiIoErnPOyb6fZR94=",
+ "requires": {
+ "readable-stream": "~1.1.8"
+ }
+ },
+ "string-width": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz",
+ "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=",
+ "requires": {
+ "code-point-at": "^1.0.0",
+ "is-fullwidth-code-point": "^1.0.0",
+ "strip-ansi": "^3.0.0"
+ }
+ },
+ "string_decoder": {
+ "version": "0.10.31",
+ "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz",
+ "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ="
+ },
+ "strip-ansi": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz",
+ "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=",
+ "requires": {
+ "ansi-regex": "^2.0.0"
+ }
+ },
+ "strip-bom": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-2.0.0.tgz",
+ "integrity": "sha1-YhmoVhZSBJHzV4i9vxRHqZx+aw4=",
+ "requires": {
+ "is-utf8": "^0.2.0"
+ }
+ },
+ "strip-indent": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-1.0.1.tgz",
+ "integrity": "sha1-DHlipq3vp7vUrDZkYKY4VSrhoKI=",
+ "requires": {
+ "get-stdin": "^4.0.1"
+ }
+ },
+ "strip-json-comments": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz",
+ "integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo="
+ },
+ "supports-color": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz",
+ "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc="
+ },
+ "switchback": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/switchback/-/switchback-1.1.3.tgz",
+ "integrity": "sha1-EscBCTSNailvc5upEO64U/i25jE=",
+ "requires": {
+ "lodash": "~2.4.1"
+ },
+ "dependencies": {
+ "lodash": {
+ "version": "2.4.2",
+ "resolved": "https://registry.npmjs.org/lodash/-/lodash-2.4.2.tgz",
+ "integrity": "sha1-+t2DS5aDBz2hebPq5tnA0VBT9z4="
+ }
+ }
+ },
+ "taskgroup": {
+ "version": "4.3.1",
+ "resolved": "https://registry.npmjs.org/taskgroup/-/taskgroup-4.3.1.tgz",
+ "integrity": "sha1-feGT/r12gnPEV3MElwJNUSwnkVo=",
+ "requires": {
+ "ambi": "^2.2.0",
+ "csextends": "^1.0.3"
+ }
+ },
+ "tiny-lr": {
+ "version": "0.2.1",
+ "resolved": "https://registry.npmjs.org/tiny-lr/-/tiny-lr-0.2.1.tgz",
+ "integrity": "sha1-s/26gC5dVqM8L28QeUsy5Hescp0=",
+ "requires": {
+ "body-parser": "~1.14.0",
+ "debug": "~2.2.0",
+ "faye-websocket": "~0.10.0",
+ "livereload-js": "^2.2.0",
+ "parseurl": "~1.3.0",
+ "qs": "~5.1.0"
+ },
+ "dependencies": {
+ "qs": {
+ "version": "5.1.0",
+ "resolved": "https://registry.npmjs.org/qs/-/qs-5.1.0.tgz",
+ "integrity": "sha1-TZMuXH6kEcynajEtOaYGIA/VDNk="
+ }
+ }
+ },
+ "to-array": {
+ "version": "0.1.4",
+ "resolved": "https://registry.npmjs.org/to-array/-/to-array-0.1.4.tgz",
+ "integrity": "sha1-F+bBH3PdTz10zaek/zI46a2b+JA="
+ },
+ "tough-cookie": {
+ "version": "2.4.3",
+ "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.4.3.tgz",
+ "integrity": "sha512-Q5srk/4vDM54WJsJio3XNn6K2sCG+CQ8G5Wz6bZhRZoAe/+TxjWB/GlFAnYEbkYVlON9FMk/fE3h2RLpPXo4lQ==",
+ "optional": true,
+ "requires": {
+ "psl": "^1.1.24",
+ "punycode": "^1.4.1"
+ }
+ },
+ "trim": {
+ "version": "0.0.1",
+ "resolved": "https://registry.npmjs.org/trim/-/trim-0.0.1.tgz",
+ "integrity": "sha1-WFhUf2spB1fulczMZm+1AITEYN0="
+ },
+ "trim-newlines": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/trim-newlines/-/trim-newlines-1.0.0.tgz",
+ "integrity": "sha1-WIeWa7WCpFA6QetST301ARgVphM="
+ },
+ "tsscmp": {
+ "version": "1.0.5",
+ "resolved": "https://registry.npmjs.org/tsscmp/-/tsscmp-1.0.5.tgz",
+ "integrity": "sha1-fcSjOvcVgatDN9qR2FylQn69mpc="
+ },
+ "tunnel-agent": {
+ "version": "0.6.0",
+ "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz",
+ "integrity": "sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=",
+ "optional": true,
+ "requires": {
+ "safe-buffer": "^5.0.1"
+ }
+ },
+ "tweetnacl": {
+ "version": "0.14.5",
+ "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz",
+ "integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=",
+ "optional": true
+ },
+ "type-is": {
+ "version": "1.6.16",
+ "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.16.tgz",
+ "integrity": "sha512-HRkVv/5qY2G6I8iab9cI7v1bOIdhm94dVjQCPFElW9W+3GeDOSHmy2EBYe4VTApuzolPcmgFTN3ftVJRKR2J9Q==",
+ "requires": {
+ "media-typer": "0.3.0",
+ "mime-types": "~2.1.18"
+ }
+ },
+ "typechecker": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/typechecker/-/typechecker-2.1.0.tgz",
+ "integrity": "sha1-0cIJOlT/ihn1jP+HfuqlTyJC04M="
+ },
+ "typedarray": {
+ "version": "0.0.6",
+ "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz",
+ "integrity": "sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c="
+ },
+ "uglify-js": {
+ "version": "2.8.29",
+ "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-2.8.29.tgz",
+ "integrity": "sha1-KcVzMUgFe7Th913zW3qcty5qWd0=",
+ "optional": true,
+ "requires": {
+ "source-map": "~0.5.1",
+ "uglify-to-browserify": "~1.0.0",
+ "yargs": "~3.10.0"
+ },
+ "dependencies": {
+ "source-map": {
+ "version": "0.5.7",
+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz",
+ "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=",
+ "optional": true
+ }
+ }
+ },
+ "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="
+ },
+ "uid-safe": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/uid-safe/-/uid-safe-1.1.0.tgz",
+ "integrity": "sha1-WNbF2r+N+9jVKDSDmAbAP9YUMjI=",
+ "requires": {
+ "base64-url": "1.2.1",
+ "native-or-bluebird": "~1.1.2"
+ }
+ },
+ "uid2": {
+ "version": "0.0.3",
+ "resolved": "https://registry.npmjs.org/uid2/-/uid2-0.0.3.tgz",
+ "integrity": "sha1-SDEm4Rd03y9xuLY53NeZw3YWK4I="
+ },
+ "ultron": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/ultron/-/ultron-1.0.2.tgz",
+ "integrity": "sha1-rOEWq1V80Zc4ak6I9GhTeMiy5Po="
+ },
+ "underscore": {
+ "version": "1.6.0",
+ "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.6.0.tgz",
+ "integrity": "sha1-izixDKze9jM3uLJOT/htRa6lKag="
+ },
+ "underscore.string": {
+ "version": "3.2.3",
+ "resolved": "https://registry.npmjs.org/underscore.string/-/underscore.string-3.2.3.tgz",
+ "integrity": "sha1-gGmSYzZl1eX8tNsfs6hi62jp5to="
+ },
+ "unist-util-stringify-position": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-1.1.2.tgz",
+ "integrity": "sha512-pNCVrk64LZv1kElr0N1wPiHEUoXNVFERp+mlTg/s9R5Lwg87f9bM/3sQB99w+N9D/qnM9ar3+AKDBwo/gm/iQQ=="
+ },
+ "unpipe": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz",
+ "integrity": "sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw="
+ },
+ "uri-path": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/uri-path/-/uri-path-1.0.0.tgz",
+ "integrity": "sha1-l0fwGDWJM8Md4PzP2C0TjmcmLjI="
+ },
+ "util-deprecate": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz",
+ "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8="
+ },
+ "utile": {
+ "version": "0.2.1",
+ "resolved": "https://registry.npmjs.org/utile/-/utile-0.2.1.tgz",
+ "integrity": "sha1-kwyI6ZCY1iIINMNWy9mncFItkNc=",
+ "requires": {
+ "async": "~0.2.9",
+ "deep-equal": "*",
+ "i": "0.3.x",
+ "mkdirp": "0.x.x",
+ "ncp": "0.4.x",
+ "rimraf": "2.x.x"
+ },
+ "dependencies": {
+ "async": {
+ "version": "0.2.10",
+ "resolved": "https://registry.npmjs.org/async/-/async-0.2.10.tgz",
+ "integrity": "sha1-trvgsGdLnXGXCMo43owjfLUmw9E="
+ }
+ }
+ },
+ "utils-merge": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.0.tgz",
+ "integrity": "sha1-ApT7kiu5N1FTVBxPcJYjHyh8ivg="
+ },
+ "uuid": {
+ "version": "3.3.2",
+ "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.3.2.tgz",
+ "integrity": "sha512-yXJmeNaw3DnnKAOKJE51sL/ZaYfWJRl1pK9dr19YFCu0ObS231AB1/LbqTKRAQ5kw8A90rA6fr4riOUpTZvQZA==",
+ "optional": true
+ },
+ "validate-npm-package-license": {
+ "version": "3.0.4",
+ "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz",
+ "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==",
+ "requires": {
+ "spdx-correct": "^3.0.0",
+ "spdx-expression-parse": "^3.0.0"
+ }
+ },
+ "validator": {
+ "version": "4.4.0",
+ "resolved": "https://registry.npmjs.org/validator/-/validator-4.4.0.tgz",
+ "integrity": "sha1-NeKVVd1feCb5cKTq7P+ebfbfPaY="
+ },
+ "vary": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/vary/-/vary-1.0.1.tgz",
+ "integrity": "sha1-meSYFWaihhGN+yuBc1ffeZM3bRA="
+ },
+ "verror": {
+ "version": "1.10.0",
+ "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz",
+ "integrity": "sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA=",
+ "optional": true,
+ "requires": {
+ "assert-plus": "^1.0.0",
+ "core-util-is": "1.0.2",
+ "extsprintf": "^1.2.0"
+ }
+ },
+ "vfile": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/vfile/-/vfile-2.0.0.tgz",
+ "integrity": "sha1-iGIFAONrrQJaCwHMJRBtvLMJBUg=",
+ "requires": {
+ "has": "^1.0.1",
+ "is-buffer": "^1.1.4",
+ "replace-ext": "1.0.0",
+ "unist-util-stringify-position": "^1.0.0",
+ "x-is-string": "^0.1.0"
+ }
+ },
+ "vfile-reporter": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/vfile-reporter/-/vfile-reporter-3.0.0.tgz",
+ "integrity": "sha1-/lBxTjc+DSlAUQA4qZvWCb3IIJ8=",
+ "requires": {
+ "chalk": "^1.1.0",
+ "log-symbols": "^1.0.2",
+ "plur": "^2.0.0",
+ "repeat-string": "^1.5.0",
+ "string-width": "^1.0.0",
+ "strip-ansi": "^3.0.1",
+ "trim": "0.0.1",
+ "unist-util-stringify-position": "^1.0.0"
+ }
+ },
+ "vhost": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/vhost/-/vhost-3.0.2.tgz",
+ "integrity": "sha1-L7HezUxGaqiLD5NBrzPcGv8keNU="
+ },
+ "walk": {
+ "version": "2.3.9",
+ "resolved": "https://registry.npmjs.org/walk/-/walk-2.3.9.tgz",
+ "integrity": "sha1-MbTbZnjyrgHDnqn7hyWpAx5Vins=",
+ "requires": {
+ "foreachasync": "^3.0.0"
+ }
+ },
+ "watchr": {
+ "version": "2.4.13",
+ "resolved": "https://registry.npmjs.org/watchr/-/watchr-2.4.13.tgz",
+ "integrity": "sha1-10hHu01vkPYf4sdPn2hmKqDgdgE=",
+ "requires": {
+ "eachr": "^2.0.2",
+ "extendr": "^2.1.0",
+ "extract-opts": "^2.2.0",
+ "ignorefs": "^1.0.0",
+ "safefs": "^3.1.2",
+ "scandirectory": "^2.5.0",
+ "taskgroup": "^4.2.0",
+ "typechecker": "^2.0.8"
+ }
+ },
+ "waterline": {
+ "version": "0.11.12",
+ "resolved": "https://registry.npmjs.org/waterline/-/waterline-0.11.12.tgz",
+ "integrity": "sha1-MyVk5sC0KuPKXNrPuIKEbrQObx4=",
+ "requires": {
+ "anchor": "~0.11.0",
+ "async": "1.5.2",
+ "bluebird": "3.2.1",
+ "deep-diff": "0.3.3",
+ "lodash": "3.10.1",
+ "prompt": "0.2.14",
+ "switchback": "2.0.0",
+ "waterline-criteria": "~0.11.2",
+ "waterline-schema": "~0.2.1"
+ },
+ "dependencies": {
+ "anchor": {
+ "version": "0.11.6",
+ "resolved": "https://registry.npmjs.org/anchor/-/anchor-0.11.6.tgz",
+ "integrity": "sha1-4Ir+9pRxvHE7YcDY7d8jmoV7sQw=",
+ "requires": {
+ "@mapbox/geojsonhint": "2.0.1",
+ "@sailshq/lodash": "^3.10.2",
+ "validator": "4.4.0"
+ }
+ },
+ "async": {
+ "version": "1.5.2",
+ "resolved": "https://registry.npmjs.org/async/-/async-1.5.2.tgz",
+ "integrity": "sha1-7GphrlZIDAw8skHJVhjiCJL5Zyo="
+ },
+ "bluebird": {
+ "version": "3.2.1",
+ "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.2.1.tgz",
+ "integrity": "sha1-POzzUEkEwwzj55wXCHfok6EZEP0="
+ },
+ "switchback": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/switchback/-/switchback-2.0.0.tgz",
+ "integrity": "sha1-KifZAzPe8wWnUh3MHjL2qOOtcgU=",
+ "requires": {
+ "lodash": "~2.4.1"
+ },
+ "dependencies": {
+ "lodash": {
+ "version": "2.4.2",
+ "resolved": "https://registry.npmjs.org/lodash/-/lodash-2.4.2.tgz",
+ "integrity": "sha1-+t2DS5aDBz2hebPq5tnA0VBT9z4="
+ }
+ }
+ },
+ "waterline-criteria": {
+ "version": "0.11.2",
+ "resolved": "https://registry.npmjs.org/waterline-criteria/-/waterline-criteria-0.11.2.tgz",
+ "integrity": "sha1-apEVVjd47531TEbF0Wh8unmoTqE=",
+ "requires": {
+ "lodash": "~2.4.1"
+ },
+ "dependencies": {
+ "lodash": {
+ "version": "2.4.2",
+ "resolved": "https://registry.npmjs.org/lodash/-/lodash-2.4.2.tgz",
+ "integrity": "sha1-+t2DS5aDBz2hebPq5tnA0VBT9z4="
+ }
+ }
+ }
+ }
+ },
+ "waterline-criteria": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/waterline-criteria/-/waterline-criteria-1.0.1.tgz",
+ "integrity": "sha1-iHcFfsfWRyEAAXo6V/zJS2Kh/ak=",
+ "requires": {
+ "lodash": "3.10.1"
+ }
+ },
+ "waterline-cursor": {
+ "version": "0.0.7",
+ "resolved": "https://registry.npmjs.org/waterline-cursor/-/waterline-cursor-0.0.7.tgz",
+ "integrity": "sha1-zNnP7WYdlK9gJ0lZQrX6J61l/rM=",
+ "requires": {
+ "async": "1.5.2",
+ "lodash": "3.10.1"
+ },
+ "dependencies": {
+ "async": {
+ "version": "1.5.2",
+ "resolved": "https://registry.npmjs.org/async/-/async-1.5.2.tgz",
+ "integrity": "sha1-7GphrlZIDAw8skHJVhjiCJL5Zyo="
+ }
+ }
+ },
+ "waterline-errors": {
+ "version": "0.10.1",
+ "resolved": "https://registry.npmjs.org/waterline-errors/-/waterline-errors-0.10.1.tgz",
+ "integrity": "sha1-7mNjKq3emTJxt1FLfKmNn9W4ai4="
+ },
+ "waterline-schema": {
+ "version": "0.2.2",
+ "resolved": "https://registry.npmjs.org/waterline-schema/-/waterline-schema-0.2.2.tgz",
+ "integrity": "sha1-Olrw15XlwjsID7sLmfnQCl5Aekw=",
+ "requires": {
+ "lodash": "3.10.1"
+ }
+ },
+ "websocket-driver": {
+ "version": "0.7.0",
+ "resolved": "https://registry.npmjs.org/websocket-driver/-/websocket-driver-0.7.0.tgz",
+ "integrity": "sha1-DK+dLXVdk67gSdS90NP+LMoqJOs=",
+ "requires": {
+ "http-parser-js": ">=0.4.0",
+ "websocket-extensions": ">=0.1.1"
+ }
+ },
+ "websocket-extensions": {
+ "version": "0.1.3",
+ "resolved": "https://registry.npmjs.org/websocket-extensions/-/websocket-extensions-0.1.3.tgz",
+ "integrity": "sha512-nqHUnMXmBzT0w570r2JpJxfiSD1IzoI+HGVdd3aZ0yNi3ngvQ4jv1dtHt5VGxfI2yj5yqImPhOK4vmIh2xMbGg=="
+ },
+ "which": {
+ "version": "1.2.14",
+ "resolved": "https://registry.npmjs.org/which/-/which-1.2.14.tgz",
+ "integrity": "sha1-mofEN48D6CfOyvGs31bHNsAcFOU=",
+ "requires": {
+ "isexe": "^2.0.0"
+ }
+ },
+ "window-size": {
+ "version": "0.1.0",
+ "resolved": "https://registry.npmjs.org/window-size/-/window-size-0.1.0.tgz",
+ "integrity": "sha1-VDjNLqk7IC76Ohn+iIeu58lPnJ0="
+ },
+ "winston": {
+ "version": "0.8.3",
+ "resolved": "https://registry.npmjs.org/winston/-/winston-0.8.3.tgz",
+ "integrity": "sha1-ZLar9M0Brcrv1QCTk7HY6L7BnbA=",
+ "requires": {
+ "async": "0.2.x",
+ "colors": "0.6.x",
+ "cycle": "1.0.x",
+ "eyes": "0.1.x",
+ "isstream": "0.1.x",
+ "pkginfo": "0.3.x",
+ "stack-trace": "0.0.x"
+ },
+ "dependencies": {
+ "async": {
+ "version": "0.2.10",
+ "resolved": "https://registry.npmjs.org/async/-/async-0.2.10.tgz",
+ "integrity": "sha1-trvgsGdLnXGXCMo43owjfLUmw9E="
+ },
+ "pkginfo": {
+ "version": "0.3.1",
+ "resolved": "https://registry.npmjs.org/pkginfo/-/pkginfo-0.3.1.tgz",
+ "integrity": "sha1-Wyn2qB9wcXFC4J52W76rl7T4HiE="
+ }
+ }
+ },
+ "wordwrap": {
+ "version": "0.0.3",
+ "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-0.0.3.tgz",
+ "integrity": "sha1-o9XabNXAvAAI03I0u68b7WMFkQc="
+ },
+ "wrappy": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz",
+ "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8="
+ },
+ "ws": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/ws/-/ws-1.1.2.tgz",
+ "integrity": "sha1-iiRPoFJAHgjJiGz0SoUYnh/UBn8=",
+ "requires": {
+ "options": ">=0.0.5",
+ "ultron": "1.0.x"
+ }
+ },
+ "wtf-8": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/wtf-8/-/wtf-8-1.0.0.tgz",
+ "integrity": "sha1-OS2LotDxw00e4tYw8V0O+2jhBIo="
+ },
+ "x-is-string": {
+ "version": "0.1.0",
+ "resolved": "https://registry.npmjs.org/x-is-string/-/x-is-string-0.1.0.tgz",
+ "integrity": "sha1-R0tQhlrzpJqcRlfwWs0UVFj3fYI="
+ },
+ "xmlhttprequest-ssl": {
+ "version": "1.5.3",
+ "resolved": "https://registry.npmjs.org/xmlhttprequest-ssl/-/xmlhttprequest-ssl-1.5.3.tgz",
+ "integrity": "sha1-GFqIjATspGw+QHDZn3tJ3jUomS0="
+ },
+ "xregexp": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/xregexp/-/xregexp-2.0.0.tgz",
+ "integrity": "sha1-UqY+VsoLhKfzpfPWGHLxJq16WUM="
+ },
+ "yallist": {
+ "version": "2.1.2",
+ "resolved": "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz",
+ "integrity": "sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI="
+ },
+ "yargs": {
+ "version": "3.10.0",
+ "resolved": "https://registry.npmjs.org/yargs/-/yargs-3.10.0.tgz",
+ "integrity": "sha1-9+572FfdfB0tOMDnTvvWgdFDH9E=",
+ "requires": {
+ "camelcase": "^1.0.2",
+ "cliui": "^2.1.0",
+ "decamelize": "^1.0.0",
+ "window-size": "0.1.0"
+ }
+ },
+ "yeast": {
+ "version": "0.1.2",
+ "resolved": "https://registry.npmjs.org/yeast/-/yeast-0.1.2.tgz",
+ "integrity": "sha1-AI4G2AlDIMNy28L47XagymyKxBk="
+ }
+ }
+}
diff --git a/server/package.json b/server/package.json
new file mode 100755
index 0000000..557dcc0
--- /dev/null
+++ b/server/package.json
@@ -0,0 +1,25 @@
+{
+ "name": "Restaurant-Reviews",
+ "private": true,
+ "version": "0.0.0",
+ "description": "a Sails application",
+ "keywords": [],
+ "dependencies": {
+ "include-all": "^1.0.0",
+ "rc": "^1.2.8",
+ "sails": "^0.12.13",
+ "sails-disk": "~0.10.9"
+ },
+ "scripts": {
+ "debug": "node debug app.js",
+ "start": "node app.js"
+ },
+ "main": "app.js",
+ "repository": {
+ "type": "git",
+ "url": "git://github.com/brandy/Restaurant-Reviews.git"
+ },
+ "author": "Brandy Lee Camacho",
+ "linkedIn": "https://www.linkedin.com/in/brandycamacho/",
+ "email": "brandy@udacity.com"
+}
diff --git a/server/server.js b/server/server.js
new file mode 100755
index 0000000..6b75170
--- /dev/null
+++ b/server/server.js
@@ -0,0 +1,60 @@
+/**
+ * app.js
+ *
+ * Use `app.js` to run your app without `sails lift`.
+ * To start the server, run: `node app.js`.
+ *
+ * This is handy in situations where the sails CLI is not relevant or useful.
+ *
+ * For example:
+ * => `node app.js`
+ * => `forever start app.js`
+ * => `node debug app.js`
+ * => `modulus deploy`
+ * => `heroku scale`
+ *
+ *
+ * The same command-line arguments are supported, e.g.:
+ * `node app.js --silent --port=80 --prod`
+ */
+
+
+// Ensure we're in the project directory, so cwd-relative paths work as expected
+// no matter where we actually lift from.
+// > Note: This is not required in order to lift, but it is a convenient default.
+process.chdir(__dirname);
+
+// Attempt to import `sails`.
+var sails;
+try {
+ sails = require('sails');
+} catch (e) {
+ console.error('To run an app using `node app.js`, you usually need to have a version of `sails` installed in the same directory as your app.');
+ console.error('To do that, run `npm install sails`');
+ console.error('');
+ console.error('Alternatively, if you have sails installed globally (i.e. you did `npm install -g sails`), you can use `sails lift`.');
+ console.error('When you run `sails lift`, your app will still use a local `./node_modules/sails` dependency if it exists,');
+ console.error('but if it doesn\'t, the app will run with the global sails instead!');
+ return;
+}
+
+// --•
+// Try to get `rc` dependency (for loading `.sailsrc` files).
+var rc;
+try {
+ rc = require('rc');
+} catch (e0) {
+ try {
+ rc = require('sails/node_modules/rc');
+ } catch (e1) {
+ console.error('Could not find dependency: `rc`.');
+ console.error('Your `.sailsrc` file(s) will be ignored.');
+ console.error('To resolve this, run:');
+ console.error('npm install rc --save');
+ rc = function () { return {}; };
+ }
+}
+
+
+// Start server
+sails.lift(rc('sails'));