Browse Source

Add register page, not error check

Valentin 2 years ago
parent
commit
2e21f34331
100 changed files with 9707 additions and 160 deletions
  1. 154 148
      .idea/workspace.xml
  2. 2 0
      Application.js
  3. 2 0
      Application.ts
  4. 2 1
      form/FormUser.js
  5. 2 1
      form/FormUser.ts
  6. 9 0
      manager/UserManager.js
  7. 10 0
      manager/UserManager.ts
  8. 4 1
      modules/DbCrafty/BaseEntityManager.js
  9. 3 1
      modules/DbCrafty/BaseEntityManager.ts
  10. 5 4
      modules/FormCrafty/FormBuilder.js
  11. 5 4
      modules/FormCrafty/FormBuilder.ts
  12. 15 0
      node_modules/.bin/handlebars
  13. 7 0
      node_modules/.bin/handlebars.cmd
  14. 15 0
      node_modules/.bin/uglifyjs
  15. 7 0
      node_modules/.bin/uglifyjs.cmd
  16. 21 0
      node_modules/align-text/LICENSE
  17. 236 0
      node_modules/align-text/README.md
  18. 52 0
      node_modules/align-text/index.js
  19. 78 0
      node_modules/align-text/package.json
  20. 58 0
      node_modules/amdefine/LICENSE
  21. 171 0
      node_modules/amdefine/README.md
  22. 301 0
      node_modules/amdefine/amdefine.js
  23. 36 0
      node_modules/amdefine/intercept.js
  24. 48 0
      node_modules/amdefine/package.json
  25. 27 0
      node_modules/camelcase/index.js
  26. 21 0
      node_modules/camelcase/license
  27. 70 0
      node_modules/camelcase/package.json
  28. 56 0
      node_modules/camelcase/readme.md
  29. 21 0
      node_modules/center-align/LICENSE
  30. 74 0
      node_modules/center-align/README.md
  31. 16 0
      node_modules/center-align/index.js
  32. 82 0
      node_modules/center-align/package.json
  33. 40 0
      node_modules/center-align/utils.js
  34. 1 0
      node_modules/cliui/.coveralls.yml
  35. 2 0
      node_modules/cliui/.npmignore
  36. 7 0
      node_modules/cliui/.travis.yml
  37. 14 0
      node_modules/cliui/LICENSE.txt
  38. 104 0
      node_modules/cliui/README.md
  39. 273 0
      node_modules/cliui/index.js
  40. 1 0
      node_modules/cliui/node_modules/wordwrap/.npmignore
  41. 70 0
      node_modules/cliui/node_modules/wordwrap/README.markdown
  42. 10 0
      node_modules/cliui/node_modules/wordwrap/example/center.js
  43. 3 0
      node_modules/cliui/node_modules/wordwrap/example/meat.js
  44. 76 0
      node_modules/cliui/node_modules/wordwrap/index.js
  45. 66 0
      node_modules/cliui/node_modules/wordwrap/package.json
  46. 30 0
      node_modules/cliui/node_modules/wordwrap/test/break.js
  47. 63 0
      node_modules/cliui/node_modules/wordwrap/test/idleness.txt
  48. 31 0
      node_modules/cliui/node_modules/wordwrap/test/wrap.js
  49. 91 0
      node_modules/cliui/package.json
  50. 349 0
      node_modules/cliui/test/cliui.js
  51. 13 0
      node_modules/decamelize/index.js
  52. 21 0
      node_modules/decamelize/license
  53. 70 0
      node_modules/decamelize/package.json
  54. 48 0
      node_modules/decamelize/readme.md
  55. 18 0
      node_modules/handlebar/index.html
  56. 5 0
      node_modules/handlebar/main.js
  57. 47 0
      node_modules/handlebar/package.json
  58. 6 0
      node_modules/handlebars/.gitattributes
  59. 3 0
      node_modules/handlebars/.gitmodules
  60. 22 0
      node_modules/handlebars/.idea/compiler.xml
  61. 3 0
      node_modules/handlebars/.idea/copyright/profiles_settings.xml
  62. 16 0
      node_modules/handlebars/.idea/handlebars.js.iml
  63. 6 0
      node_modules/handlebars/.idea/jsLibraryMappings.xml
  64. 22 0
      node_modules/handlebars/.idea/misc.xml
  65. 8 0
      node_modules/handlebars/.idea/modules.xml
  66. 6 0
      node_modules/handlebars/.idea/vcs.xml
  67. 4 0
      node_modules/handlebars/.idea/watcherTasks.xml
  68. 2064 0
      node_modules/handlebars/.idea/workspace.xml
  69. 2 0
      node_modules/handlebars/.istanbul.yml
  70. 25 0
      node_modules/handlebars/.npmignore
  71. 99 0
      node_modules/handlebars/CONTRIBUTING.md
  72. 60 0
      node_modules/handlebars/FAQ.md
  73. 19 0
      node_modules/handlebars/LICENSE
  74. 167 0
      node_modules/handlebars/README.markdown
  75. 128 0
      node_modules/handlebars/bin/handlebars
  76. 51 0
      node_modules/handlebars/dist/amd/handlebars.js
  77. 44 0
      node_modules/handlebars/dist/amd/handlebars.runtime.js
  78. 96 0
      node_modules/handlebars/dist/amd/handlebars/base.js
  79. 31 0
      node_modules/handlebars/dist/amd/handlebars/compiler/ast.js
  80. 36 0
      node_modules/handlebars/dist/amd/handlebars/compiler/base.js
  81. 163 0
      node_modules/handlebars/dist/amd/handlebars/compiler/code-gen.js
  82. 569 0
      node_modules/handlebars/dist/amd/handlebars/compiler/compiler.js
  83. 230 0
      node_modules/handlebars/dist/amd/handlebars/compiler/helpers.js
  84. 1120 0
      node_modules/handlebars/dist/amd/handlebars/compiler/javascript-compiler.js
  85. 739 0
      node_modules/handlebars/dist/amd/handlebars/compiler/parser.js
  86. 186 0
      node_modules/handlebars/dist/amd/handlebars/compiler/printer.js
  87. 138 0
      node_modules/handlebars/dist/amd/handlebars/compiler/visitor.js
  88. 219 0
      node_modules/handlebars/dist/amd/handlebars/compiler/whitespace-control.js
  89. 16 0
      node_modules/handlebars/dist/amd/handlebars/decorators.js
  90. 25 0
      node_modules/handlebars/dist/amd/handlebars/decorators/inline.js
  91. 53 0
      node_modules/handlebars/dist/amd/handlebars/exception.js
  92. 34 0
      node_modules/handlebars/dist/amd/handlebars/helpers.js
  93. 35 0
      node_modules/handlebars/dist/amd/handlebars/helpers/block-helper-missing.js
  94. 89 0
      node_modules/handlebars/dist/amd/handlebars/helpers/each.js
  95. 22 0
      node_modules/handlebars/dist/amd/handlebars/helpers/helper-missing.js
  96. 25 0
      node_modules/handlebars/dist/amd/handlebars/helpers/if.js
  97. 24 0
      node_modules/handlebars/dist/amd/handlebars/helpers/log.js
  98. 10 0
      node_modules/handlebars/dist/amd/handlebars/helpers/lookup.js
  99. 29 0
      node_modules/handlebars/dist/amd/handlebars/helpers/with.js
  100. 0 0
      node_modules/handlebars/dist/amd/handlebars/logger.js

+ 154 - 148
.idea/workspace.xml

@@ -11,80 +11,28 @@
   </component>
   <component name="FileEditorManager">
     <leaf SIDE_TABS_SIZE_LIMIT_KEY="300">
-      <file leaf-file-name="Application.ts" pinned="false" current-in-tab="false">
-        <entry file="file://$PROJECT_DIR$/Application.ts">
+      <file leaf-file-name="UserController.ts" pinned="false" current-in-tab="true">
+        <entry file="file://$PROJECT_DIR$/routes/UserController.ts">
           <provider selected="true" editor-type-id="text-editor">
-            <state relative-caret-position="396">
-              <caret line="67" column="11" lean-forward="true" selection-start-line="67" selection-start-column="11" selection-end-line="67" selection-end-column="11" />
+            <state relative-caret-position="198">
+              <caret line="9" column="59" lean-forward="true" selection-start-line="9" selection-start-column="59" selection-end-line="9" selection-end-column="59" />
               <folding />
             </state>
           </provider>
         </entry>
       </file>
-      <file leaf-file-name="error.twig" pinned="false" current-in-tab="false">
-        <entry file="file://$PROJECT_DIR$/views/error.twig">
+      <file leaf-file-name="UserManager.ts" pinned="false" current-in-tab="false">
+        <entry file="file://$PROJECT_DIR$/manager/UserManager.ts">
           <provider selected="true" editor-type-id="text-editor">
-            <state relative-caret-position="88">
-              <caret line="4" column="27" lean-forward="true" selection-start-line="4" selection-start-column="27" selection-end-line="4" selection-end-column="27" />
-              <folding />
-            </state>
-          </provider>
-        </entry>
-      </file>
-      <file leaf-file-name="ConfiguratorDB.ts" pinned="false" current-in-tab="false">
-        <entry file="file://$PROJECT_DIR$/modules/DbCrafty/ConfiguratorDB.ts">
-          <provider selected="true" editor-type-id="text-editor">
-            <state relative-caret-position="572">
-              <caret line="26" column="1" lean-forward="true" selection-start-line="26" selection-start-column="1" selection-end-line="26" selection-end-column="1" />
-              <folding />
-            </state>
-          </provider>
-        </entry>
-      </file>
-      <file leaf-file-name="IndexController.ts" pinned="false" current-in-tab="false">
-        <entry file="file://$PROJECT_DIR$/routes/IndexController.ts">
-          <provider selected="true" editor-type-id="text-editor">
-            <state relative-caret-position="308">
-              <caret line="14" column="66" lean-forward="true" selection-start-line="14" selection-start-column="66" selection-end-line="14" selection-end-column="66" />
-              <folding />
-            </state>
-          </provider>
-        </entry>
-      </file>
-      <file leaf-file-name="FormUser.ts" pinned="false" current-in-tab="false">
-        <entry file="file://$PROJECT_DIR$/form/FormUser.ts">
-          <provider selected="true" editor-type-id="text-editor">
-            <state relative-caret-position="242">
-              <caret line="11" column="17" lean-forward="false" selection-start-line="11" selection-start-column="17" selection-end-line="11" selection-end-column="17" />
+            <state relative-caret-position="132">
+              <caret line="6" column="56" lean-forward="true" selection-start-line="6" selection-start-column="56" selection-end-line="6" selection-end-column="56" />
               <folding>
-                <element signature="e#0#56#0" expanded="true" />
+                <element signature="e#0#72#0" expanded="true" />
               </folding>
             </state>
           </provider>
         </entry>
       </file>
-      <file leaf-file-name="FormBuilder.ts" pinned="false" current-in-tab="false">
-        <entry file="file://$PROJECT_DIR$/modules/FormCrafty/FormBuilder.ts">
-          <provider selected="true" editor-type-id="text-editor">
-            <state relative-caret-position="1885">
-              <caret line="87" column="14" lean-forward="false" selection-start-line="87" selection-start-column="14" selection-end-line="87" selection-end-column="14" />
-              <folding>
-                <element signature="e#0#36#0" expanded="true" />
-              </folding>
-            </state>
-          </provider>
-        </entry>
-      </file>
-      <file leaf-file-name="Builder.ts" pinned="false" current-in-tab="true">
-        <entry file="file://$PROJECT_DIR$/modules/FormCrafty/Builder.ts">
-          <provider selected="true" editor-type-id="text-editor">
-            <state relative-caret-position="176">
-              <caret line="8" column="19" lean-forward="true" selection-start-line="8" selection-start-column="19" selection-end-line="8" selection-end-column="19" />
-              <folding />
-            </state>
-          </provider>
-        </entry>
-      </file>
     </leaf>
   </component>
   <component name="FileTemplateManagerImpl">
@@ -128,20 +76,28 @@
         <option value="$PROJECT_DIR$/modules/DbCrafty/BaseModel.ts" />
         <option value="$PROJECT_DIR$/model/User.ts" />
         <option value="$PROJECT_DIR$/modules/DbCrafty/BaseManager.ts" />
-        <option value="$PROJECT_DIR$/manager/UserManager.ts" />
         <option value="$PROJECT_DIR$/modules/DbCrafty/config/entity.yml" />
         <option value="$PROJECT_DIR$/modules/DbCrafty/MondoDB.ts" />
         <option value="$PROJECT_DIR$/modules/FormCrafty/FormContext.ts" />
-        <option value="$PROJECT_DIR$/modules/DbCrafty/BaseEntityManager.ts" />
         <option value="$PROJECT_DIR$/modules/DbCrafty/ConfiguratorDB.ts" />
-        <option value="$PROJECT_DIR$/Application.ts" />
         <option value="$PROJECT_DIR$/modules/DbCrafty/BaseEntityManager.js" />
         <option value="$PROJECT_DIR$/modules/FormCrafty/FormType.ts" />
         <option value="$PROJECT_DIR$/modules/FormCrafty/Builder.ts" />
-        <option value="$PROJECT_DIR$/form/FormUser.ts" />
-        <option value="$PROJECT_DIR$/views/index.twig" />
+        <option value="$PROJECT_DIR$/views/testForm.hbs" />
+        <option value="$PROJECT_DIR$/views/formTest.html.twig" />
+        <option value="$PROJECT_DIR$/views/error.html.twig" />
         <option value="$PROJECT_DIR$/routes/IndexController.ts" />
+        <option value="$PROJECT_DIR$/views/formTest.twig" />
+        <option value="$PROJECT_DIR$/views/index.twig" />
+        <option value="$PROJECT_DIR$/Application.ts" />
+        <option value="$PROJECT_DIR$/views/layout.twig" />
+        <option value="$PROJECT_DIR$/views/User/login.twig" />
+        <option value="$PROJECT_DIR$/views/User/register.twig" />
+        <option value="$PROJECT_DIR$/modules/DbCrafty/BaseEntityManager.ts" />
+        <option value="$PROJECT_DIR$/form/FormUser.ts" />
         <option value="$PROJECT_DIR$/modules/FormCrafty/FormBuilder.ts" />
+        <option value="$PROJECT_DIR$/manager/UserManager.ts" />
+        <option value="$PROJECT_DIR$/routes/UserController.ts" />
       </list>
     </option>
   </component>
@@ -185,6 +141,7 @@
       <foldersAlwaysOnTop value="true" />
     </navigator>
     <panes>
+      <pane id="Scratches" />
       <pane id="ProjectPane">
         <subPane>
           <expand>
@@ -195,7 +152,23 @@
             <path>
               <item name="Server0" type="b2602c69:ProjectViewProjectNode" />
               <item name="Server0" type="2a2b976b:PhpTreeStructureProvider$1" />
+              <item name="form" type="2a2b976b:PhpTreeStructureProvider$1" />
+            </path>
+            <path>
+              <item name="Server0" type="b2602c69:ProjectViewProjectNode" />
+              <item name="Server0" type="2a2b976b:PhpTreeStructureProvider$1" />
+              <item name="manager" type="2a2b976b:PhpTreeStructureProvider$1" />
+            </path>
+            <path>
+              <item name="Server0" type="b2602c69:ProjectViewProjectNode" />
+              <item name="Server0" type="2a2b976b:PhpTreeStructureProvider$1" />
+              <item name="modules" type="2a2b976b:PhpTreeStructureProvider$1" />
+            </path>
+            <path>
+              <item name="Server0" type="b2602c69:ProjectViewProjectNode" />
+              <item name="Server0" type="2a2b976b:PhpTreeStructureProvider$1" />
               <item name="modules" type="2a2b976b:PhpTreeStructureProvider$1" />
+              <item name="DbCrafty" type="2a2b976b:PhpTreeStructureProvider$1" />
             </path>
             <path>
               <item name="Server0" type="b2602c69:ProjectViewProjectNode" />
@@ -213,12 +186,17 @@
               <item name="Server0" type="2a2b976b:PhpTreeStructureProvider$1" />
               <item name="views" type="2a2b976b:PhpTreeStructureProvider$1" />
             </path>
+            <path>
+              <item name="Server0" type="b2602c69:ProjectViewProjectNode" />
+              <item name="Server0" type="2a2b976b:PhpTreeStructureProvider$1" />
+              <item name="views" type="2a2b976b:PhpTreeStructureProvider$1" />
+              <item name="User" type="2a2b976b:PhpTreeStructureProvider$1" />
+            </path>
           </expand>
           <select />
         </subPane>
       </pane>
       <pane id="Scope" />
-      <pane id="Scratches" />
     </panes>
   </component>
   <component name="PropertiesComponent">
@@ -227,12 +205,16 @@
     <property name="javascript.nodejs.core.library.configured.version" value="8.4.0" />
     <property name="HbShouldOpenHtmlAsHb" value="" />
     <property name="settings.editor.selected.configurable" value="vcs.Git" />
-    <property name="last_opened_file_path" value="$PROJECT_DIR$" />
+    <property name="last_opened_file_path" value="$PROJECT_DIR$/../untitled" />
   </component>
   <component name="RecentsManager">
     <key name="MoveFile.RECENT_KEYS">
       <recent name="C:\Users\Valentin\Desktop\node\Server0\modules\DbCrafty\config" />
     </key>
+    <key name="CopyFile.RECENT_KEYS">
+      <recent name="C:\Users\Valentin\Desktop\node\Server0\public" />
+      <recent name="C:\Users\Valentin\Desktop\node\Server0\views" />
+    </key>
   </component>
   <component name="RunDashboard">
     <option name="ruleStates">
@@ -262,27 +244,28 @@
       <workItem from="1503512388796" duration="7207000" />
       <workItem from="1503600330446" duration="5216000" />
       <workItem from="1503829045218" duration="11479000" />
+      <workItem from="1503862915599" duration="2281000" />
+      <workItem from="1503947921596" duration="4791000" />
     </task>
     <servers />
   </component>
   <component name="TimeTrackingManager">
-    <option name="totallyTimeSpent" value="32165000" />
+    <option name="totallyTimeSpent" value="39237000" />
   </component>
   <component name="ToolWindowManager">
     <frame x="-8" y="-8" width="1936" height="1056" extended-state="6" />
     <editor active="true" />
     <layout>
+      <window_info id="TypeScript" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.33" sideWeight="0.5" order="10" side_tool="false" content_ui="tabs" />
+      <window_info id="Project" active="false" anchor="left" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="true" show_stripe_button="true" weight="0.21302083" sideWeight="0.5" order="0" side_tool="false" content_ui="combo" />
       <window_info id="TODO" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.33" sideWeight="0.5" order="6" side_tool="false" content_ui="tabs" />
       <window_info id="Event Log" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.32979852" sideWeight="0.5" order="7" side_tool="true" content_ui="tabs" />
+      <window_info id="Database" active="false" anchor="right" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.33" sideWeight="0.5" order="3" side_tool="false" content_ui="tabs" />
       <window_info id="Version Control" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.33" sideWeight="0.5" order="8" side_tool="false" content_ui="tabs" />
       <window_info id="npm" active="false" anchor="left" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.33" sideWeight="0.5" order="2" side_tool="true" content_ui="tabs" />
       <window_info id="Run" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.33" sideWeight="0.5" order="2" side_tool="false" content_ui="tabs" />
-      <window_info id="Terminal" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.33" sideWeight="0.5" order="9" side_tool="false" content_ui="tabs" />
-      <window_info id="TypeScript" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.33" sideWeight="0.5" order="10" side_tool="false" content_ui="tabs" />
-      <window_info id="Project" active="false" anchor="left" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="true" show_stripe_button="true" weight="0.21302083" sideWeight="0.5" order="0" side_tool="false" content_ui="combo" />
-      <window_info id="Database" active="false" anchor="right" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.33" sideWeight="0.5" order="3" side_tool="false" content_ui="tabs" />
-      <window_info id="Find" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.32979852" sideWeight="0.5" order="1" side_tool="false" content_ui="tabs" />
       <window_info id="Structure" active="false" anchor="left" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.25" sideWeight="0.5" order="1" side_tool="false" content_ui="tabs" />
+      <window_info id="Terminal" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.33" sideWeight="0.5" order="9" side_tool="false" content_ui="tabs" />
       <window_info id="Favorites" active="false" anchor="left" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.33" sideWeight="0.5" order="3" side_tool="true" content_ui="tabs" />
       <window_info id="Debug" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.4" sideWeight="0.5" order="3" side_tool="false" content_ui="tabs" />
       <window_info id="Cvs" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.25" sideWeight="0.5" order="4" side_tool="false" content_ui="tabs" />
@@ -290,6 +273,7 @@
       <window_info id="Commander" active="false" anchor="right" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.4" sideWeight="0.5" order="0" side_tool="false" content_ui="tabs" />
       <window_info id="Inspection" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.4" sideWeight="0.5" order="5" side_tool="false" content_ui="tabs" />
       <window_info id="Hierarchy" active="false" anchor="right" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.25" sideWeight="0.5" order="2" side_tool="false" content_ui="combo" />
+      <window_info id="Find" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.32979852" sideWeight="0.5" order="1" side_tool="false" content_ui="tabs" />
       <window_info id="Ant Build" active="false" anchor="right" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.25" sideWeight="0.5" order="1" side_tool="false" content_ui="tabs" />
     </layout>
   </component>
@@ -303,6 +287,7 @@
         <option value="$PROJECT_DIR$/modules/FormCrafty/FormBuilder.js" />
         <option value="$PROJECT_DIR$/modules/FormCrafty/Builder.js" />
         <option value="$PROJECT_DIR$/form/FormUser.js" />
+        <option value="$PROJECT_DIR$/routes/UserController.js" />
       </list>
     </option>
   </component>
@@ -316,19 +301,10 @@
     <watches-manager />
   </component>
   <component name="editorHistoryManager">
-    <entry file="file://$PROJECT_DIR$/Application.ts">
-      <provider selected="true" editor-type-id="text-editor">
-        <state relative-caret-position="1342">
-          <caret line="61" column="73" lean-forward="false" selection-start-line="61" selection-start-column="73" selection-end-line="61" selection-end-column="73" />
-          <folding />
-        </state>
-      </provider>
-    </entry>
     <entry file="file://$PROJECT_DIR$/manager/UserManager.ts">
       <provider selected="true" editor-type-id="text-editor">
         <state relative-caret-position="88">
           <caret line="4" column="0" lean-forward="true" selection-start-line="4" selection-start-column="0" selection-end-line="4" selection-end-column="0" />
-          <folding />
         </state>
       </provider>
     </entry>
@@ -344,7 +320,6 @@
       <provider selected="true" editor-type-id="text-editor">
         <state relative-caret-position="154">
           <caret line="7" column="0" lean-forward="true" selection-start-line="7" selection-start-column="0" selection-end-line="7" selection-end-column="0" />
-          <folding />
         </state>
       </provider>
     </entry>
@@ -368,7 +343,6 @@
       <provider selected="true" editor-type-id="text-editor">
         <state relative-caret-position="0">
           <caret line="0" column="25" lean-forward="false" selection-start-line="0" selection-start-column="25" selection-end-line="0" selection-end-column="25" />
-          <folding />
         </state>
       </provider>
     </entry>
@@ -445,13 +419,6 @@
         </state>
       </provider>
     </entry>
-    <entry file="file://$PROJECT_DIR$/views/layout.twig">
-      <provider selected="true" editor-type-id="text-editor">
-        <state relative-caret-position="176">
-          <caret line="8" column="9" lean-forward="false" selection-start-line="8" selection-start-column="9" selection-end-line="8" selection-end-column="9" />
-        </state>
-      </provider>
-    </entry>
     <entry file="file://$PROJECT_DIR$/routes/ControllerInterface.js" />
     <entry file="file://$PROJECT_DIR$/routes/ControllerInterface.ts" />
     <entry file="file://$PROJECT_DIR$/entity/User.ts" />
@@ -459,7 +426,6 @@
       <provider selected="true" editor-type-id="text-editor">
         <state relative-caret-position="22">
           <caret line="1" column="14" lean-forward="true" selection-start-line="1" selection-start-column="14" selection-end-line="1" selection-end-column="14" />
-          <folding />
         </state>
       </provider>
     </entry>
@@ -467,23 +433,6 @@
       <provider selected="true" editor-type-id="text-editor">
         <state relative-caret-position="154">
           <caret line="7" column="0" lean-forward="false" selection-start-line="7" selection-start-column="0" selection-end-line="7" selection-end-column="0" />
-          <folding />
-        </state>
-      </provider>
-    </entry>
-    <entry file="file://$PROJECT_DIR$/manager/UserManager.ts">
-      <provider selected="true" editor-type-id="text-editor">
-        <state relative-caret-position="88">
-          <caret line="4" column="0" lean-forward="false" selection-start-line="4" selection-start-column="0" selection-end-line="4" selection-end-column="0" />
-          <folding />
-        </state>
-      </provider>
-    </entry>
-    <entry file="file://$PROJECT_DIR$/modules/DbCrafty/config/entity.yml">
-      <provider selected="true" editor-type-id="text-editor">
-        <state relative-caret-position="0">
-          <caret line="0" column="5" lean-forward="true" selection-start-line="0" selection-start-column="5" selection-end-line="0" selection-end-column="5" />
-          <folding />
         </state>
       </provider>
     </entry>
@@ -491,9 +440,6 @@
       <provider selected="true" editor-type-id="text-editor">
         <state relative-caret-position="317">
           <caret line="110" column="17" lean-forward="false" selection-start-line="110" selection-start-column="7" selection-end-line="110" selection-end-column="17" />
-          <folding>
-            <element signature="n#!!doc" expanded="true" />
-          </folding>
         </state>
       </provider>
     </entry>
@@ -501,9 +447,6 @@
       <provider selected="true" editor-type-id="text-editor">
         <state relative-caret-position="0">
           <caret line="0" column="0" lean-forward="false" selection-start-line="0" selection-start-column="0" selection-end-line="0" selection-end-column="0" />
-          <folding>
-            <element signature="n#!!doc" expanded="false" />
-          </folding>
         </state>
       </provider>
     </entry>
@@ -512,7 +455,6 @@
         <state split_layout="SPLIT">
           <first_editor relative-caret-position="297">
             <caret line="3432" column="41" lean-forward="false" selection-start-line="3432" selection-start-column="41" selection-end-line="3432" selection-end-column="41" />
-            <folding />
           </first_editor>
           <second_editor />
         </state>
@@ -530,7 +472,6 @@
       <provider selected="true" editor-type-id="text-editor">
         <state relative-caret-position="44">
           <caret line="2" column="27" lean-forward="true" selection-start-line="2" selection-start-column="27" selection-end-line="2" selection-end-column="27" />
-          <folding />
         </state>
       </provider>
     </entry>
@@ -538,82 +479,147 @@
       <provider selected="true" editor-type-id="text-editor">
         <state relative-caret-position="-359">
           <caret line="0" column="0" lean-forward="false" selection-start-line="0" selection-start-column="0" selection-end-line="0" selection-end-column="0" />
-          <folding />
         </state>
       </provider>
     </entry>
-    <entry file="file://$PROJECT_DIR$/modules/DbCrafty/BaseEntityManager.ts">
+    <entry file="file://$PROJECT_DIR$/modules/FormCrafty/Builder.ts">
       <provider selected="true" editor-type-id="text-editor">
-        <state relative-caret-position="218">
-          <caret line="33" column="20" lean-forward="false" selection-start-line="33" selection-start-column="20" selection-end-line="33" selection-end-column="20" />
+        <state relative-caret-position="308">
+          <caret line="14" column="5" lean-forward="true" selection-start-line="14" selection-start-column="5" selection-end-line="14" selection-end-column="5" />
           <folding />
         </state>
       </provider>
     </entry>
-    <entry file="file://$PROJECT_DIR$/views/index.twig">
+    <entry file="file://$PROJECT_DIR$/views/error.twig">
       <provider selected="true" editor-type-id="text-editor">
         <state relative-caret-position="88">
-          <caret line="4" column="16" lean-forward="false" selection-start-line="4" selection-start-column="16" selection-end-line="4" selection-end-column="16" />
-          <folding />
+          <caret line="4" column="27" lean-forward="false" selection-start-line="4" selection-start-column="27" selection-end-line="4" selection-end-column="27" />
+        </state>
+      </provider>
+    </entry>
+    <entry file="file://$PROJECT_DIR$/views/layout.hbs" />
+    <entry file="file://$PROJECT_DIR$/views/error.hbs" />
+    <entry file="file://$PROJECT_DIR$/views/index.hbs" />
+    <entry file="file://$PROJECT_DIR$/views/testForm.hbs" />
+    <entry file="file://$PROJECT_DIR$/views/error.twig">
+      <provider selected="true" editor-type-id="text-editor">
+        <state relative-caret-position="0">
+          <caret line="0" column="20" lean-forward="false" selection-start-line="0" selection-start-column="20" selection-end-line="0" selection-end-column="20" />
         </state>
       </provider>
     </entry>
     <entry file="file://$PROJECT_DIR$/modules/DbCrafty/ConfiguratorDB.ts">
       <provider selected="true" editor-type-id="text-editor">
         <state relative-caret-position="572">
-          <caret line="26" column="1" lean-forward="true" selection-start-line="26" selection-start-column="1" selection-end-line="26" selection-end-column="1" />
+          <caret line="26" column="1" lean-forward="false" selection-start-line="26" selection-start-column="1" selection-end-line="26" selection-end-column="1" />
           <folding />
         </state>
       </provider>
     </entry>
-    <entry file="file://$PROJECT_DIR$/Application.ts">
+    <entry file="file://$PROJECT_DIR$/views/index.twig">
       <provider selected="true" editor-type-id="text-editor">
-        <state relative-caret-position="396">
-          <caret line="67" column="11" lean-forward="true" selection-start-line="67" selection-start-column="11" selection-end-line="67" selection-end-column="11" />
+        <state relative-caret-position="44">
+          <caret line="2" column="25" lean-forward="false" selection-start-line="2" selection-start-column="25" selection-end-line="2" selection-end-column="25" />
           <folding />
         </state>
       </provider>
     </entry>
-    <entry file="file://$PROJECT_DIR$/form/FormUser.ts">
+    <entry file="file://$PROJECT_DIR$/routes/IndexController.ts">
       <provider selected="true" editor-type-id="text-editor">
         <state relative-caret-position="242">
-          <caret line="11" column="17" lean-forward="false" selection-start-line="11" selection-start-column="17" selection-end-line="11" selection-end-column="17" />
-          <folding>
-            <element signature="e#0#56#0" expanded="true" />
-          </folding>
+          <caret line="11" column="0" lean-forward="false" selection-start-line="0" selection-start-column="0" selection-end-line="27" selection-end-column="0" />
+          <folding />
         </state>
       </provider>
     </entry>
-    <entry file="file://$PROJECT_DIR$/modules/FormCrafty/FormBuilder.ts">
+    <entry file="file://$PROJECT_DIR$/Application.ts">
       <provider selected="true" editor-type-id="text-editor">
-        <state relative-caret-position="1885">
-          <caret line="87" column="14" lean-forward="false" selection-start-line="87" selection-start-column="14" selection-end-line="87" selection-end-column="14" />
+        <state relative-caret-position="364">
+          <caret line="91" column="0" lean-forward="true" selection-start-line="91" selection-start-column="0" selection-end-line="91" selection-end-column="0" />
+          <folding />
+        </state>
+      </provider>
+    </entry>
+    <entry file="file://$PROJECT_DIR$/modules/DbCrafty/config/entity.yml">
+      <provider selected="true" editor-type-id="text-editor">
+        <state relative-caret-position="66">
+          <caret line="3" column="20" lean-forward="true" selection-start-line="3" selection-start-column="20" selection-end-line="3" selection-end-column="20" />
+          <folding />
+        </state>
+      </provider>
+    </entry>
+    <entry file="file://$PROJECT_DIR$/views/User/login.twig">
+      <provider selected="true" editor-type-id="text-editor">
+        <state relative-caret-position="499">
+          <caret line="23" column="34" lean-forward="true" selection-start-line="23" selection-start-column="34" selection-end-line="23" selection-end-column="34" />
+          <folding />
+        </state>
+      </provider>
+    </entry>
+    <entry file="file://$PROJECT_DIR$/views/layout.twig">
+      <provider selected="true" editor-type-id="text-editor">
+        <state relative-caret-position="374">
+          <caret line="17" column="20" lean-forward="false" selection-start-line="17" selection-start-column="20" selection-end-line="17" selection-end-column="20" />
+          <folding />
+        </state>
+      </provider>
+    </entry>
+    <entry file="file://$PROJECT_DIR$/views/User/register.twig">
+      <provider selected="true" editor-type-id="text-editor">
+        <state relative-caret-position="660">
+          <caret line="30" column="31" lean-forward="false" selection-start-line="30" selection-start-column="31" selection-end-line="30" selection-end-column="31" />
+          <folding />
+        </state>
+      </provider>
+    </entry>
+    <entry file="file://$PROJECT_DIR$/modules/DbCrafty/BaseEntityManager.ts">
+      <provider selected="true" editor-type-id="text-editor">
+        <state relative-caret-position="328">
+          <caret line="18" column="7" lean-forward="false" selection-start-line="18" selection-start-column="7" selection-end-line="18" selection-end-column="7" />
+          <folding />
+        </state>
+      </provider>
+    </entry>
+    <entry file="file://$PROJECT_DIR$/views/formTest.twig">
+      <provider selected="true" editor-type-id="text-editor">
+        <state relative-caret-position="154">
+          <caret line="7" column="18" lean-forward="false" selection-start-line="7" selection-start-column="18" selection-end-line="7" selection-end-column="18" />
+          <folding />
+        </state>
+      </provider>
+    </entry>
+    <entry file="file://$PROJECT_DIR$/form/FormUser.ts">
+      <provider selected="true" editor-type-id="text-editor">
+        <state relative-caret-position="330">
+          <caret line="15" column="38" lean-forward="false" selection-start-line="15" selection-start-column="38" selection-end-line="15" selection-end-column="38" />
           <folding>
-            <element signature="e#0#36#0" expanded="true" />
+            <element signature="e#0#56#0" expanded="true" />
           </folding>
         </state>
       </provider>
     </entry>
-    <entry file="file://$PROJECT_DIR$/routes/IndexController.ts">
+    <entry file="file://$PROJECT_DIR$/modules/FormCrafty/FormBuilder.ts">
       <provider selected="true" editor-type-id="text-editor">
-        <state relative-caret-position="308">
-          <caret line="14" column="66" lean-forward="true" selection-start-line="14" selection-start-column="66" selection-end-line="14" selection-end-column="66" />
+        <state relative-caret-position="484">
+          <caret line="30" column="43" lean-forward="true" selection-start-line="30" selection-start-column="43" selection-end-line="30" selection-end-column="43" />
           <folding />
         </state>
       </provider>
     </entry>
-    <entry file="file://$PROJECT_DIR$/views/error.twig">
+    <entry file="file://$PROJECT_DIR$/manager/UserManager.ts">
       <provider selected="true" editor-type-id="text-editor">
-        <state relative-caret-position="88">
-          <caret line="4" column="27" lean-forward="true" selection-start-line="4" selection-start-column="27" selection-end-line="4" selection-end-column="27" />
-          <folding />
+        <state relative-caret-position="132">
+          <caret line="6" column="56" lean-forward="true" selection-start-line="6" selection-start-column="56" selection-end-line="6" selection-end-column="56" />
+          <folding>
+            <element signature="e#0#72#0" expanded="true" />
+          </folding>
         </state>
       </provider>
     </entry>
-    <entry file="file://$PROJECT_DIR$/modules/FormCrafty/Builder.ts">
+    <entry file="file://$PROJECT_DIR$/routes/UserController.ts">
       <provider selected="true" editor-type-id="text-editor">
-        <state relative-caret-position="176">
-          <caret line="8" column="19" lean-forward="true" selection-start-line="8" selection-start-column="19" selection-end-line="8" selection-end-column="19" />
+        <state relative-caret-position="198">
+          <caret line="9" column="59" lean-forward="true" selection-start-line="9" selection-start-column="59" selection-end-line="9" selection-end-column="59" />
           <folding />
         </state>
       </provider>

+ 2 - 0
Application.js

@@ -8,6 +8,7 @@ var bodyParser = require("body-parser");
 var http = require("http");
 var IndexController_1 = require("./routes/IndexController");
 var ConfiguratorDB_1 = require("./modules/DbCrafty/ConfiguratorDB");
+var UserController_1 = require("./routes/UserController");
 var Application = (function () {
     function Application() {
     }
@@ -78,6 +79,7 @@ var Application = (function () {
         router = express.Router();
         //define route here
         IndexController_1.IndexController.createRoute(router);
+        UserController_1.UserController.createRoute(router);
         app.use(router);
     };
     /**

+ 2 - 0
Application.ts

@@ -10,6 +10,7 @@ import bodyParser = require('body-parser');
 import http = require("http");
 import {IndexController} from "./routes/IndexController";
 import {ConfiguratorDB} from "./modules/DbCrafty/ConfiguratorDB";
+import {UserController} from "./routes/UserController";
 
 export class Application {
     private static app;
@@ -91,6 +92,7 @@ export class Application {
 
         //define route here
         IndexController.createRoute(router);
+        UserController.createRoute(router);
 
         app.use(router);
     }

+ 2 - 1
form/FormUser.js

@@ -18,7 +18,8 @@ var FormUser = (function () {
     };
     FormUser.prototype.getAttrForm = function (model) {
         return {
-            "class": "form-control"
+            "action": "/register",
+            "class": "form-horizontal"
         };
     };
     return FormUser;

+ 2 - 1
form/FormUser.ts

@@ -18,7 +18,8 @@ export class FormUser implements FormType {
 
     public getAttrForm(model) {
         return {
-            "class" : "form-control"
+            "action": "/register",
+            "class" : "form-horizontal"
         };
     }
 }

+ 9 - 0
manager/UserManager.js

@@ -11,11 +11,20 @@ var __extends = (this && this.__extends) || (function () {
 })();
 Object.defineProperty(exports, "__esModule", { value: true });
 var BaseEntityManager_1 = require("../modules/DbCrafty/BaseEntityManager");
+var crypto = require("crypto");
 var UserManager = (function (_super) {
     __extends(UserManager, _super);
     function UserManager() {
         return _super !== null && _super.apply(this, arguments) || this;
     }
+    UserManager.prototype.insertNewUser = function (user) {
+        user.password = UserManager.hash(user.password);
+        this.saveEntity(user);
+    };
+    UserManager.hash = function (pass) {
+        var passHash = crypto.pbkdf2Sync('coucou', 'monSel', 5000, 512, 'sha512');
+        return passHash.toString('hex');
+    };
     return UserManager;
 }(BaseEntityManager_1.BaseEntityManager));
 exports.UserManager = UserManager;

+ 10 - 0
manager/UserManager.ts

@@ -1,6 +1,16 @@
 import {BaseEntityManager} from "../modules/DbCrafty/BaseEntityManager";
+import crypto = require('crypto');
 
 export class UserManager extends BaseEntityManager {
 
+    public insertNewUser(user) {
+        user.password = UserManager.hash(user.password);
+        this.saveEntity(user);
+    }
+
+    private static hash(pass) {
+        let passHash = crypto.pbkdf2Sync('coucou', 'monSel', 5000, 512, 'sha512');
+        return passHash.toString('hex');
+    }
 
 }

+ 4 - 1
modules/DbCrafty/BaseEntityManager.js

@@ -12,10 +12,13 @@ var BaseEntityManager = (function () {
     BaseEntityManager.prototype.createNewModel = function () {
         return new this.model();
     };
-    BaseEntityManager.prototype.saveEntity = function (entity) {
+    BaseEntityManager.prototype.saveEntity = function (entity, fc) {
+        if (fc === void 0) { fc = null; }
         entity.save(function (err) {
             if (err)
                 return console.error(err);
+            if (fc != null)
+                fc();
         });
     };
     BaseEntityManager.prototype.find = function (condition, fc) {

+ 3 - 1
modules/DbCrafty/BaseEntityManager.ts

@@ -15,9 +15,11 @@ export abstract class BaseEntityManager {
         return new this.model();
     }
 
-    public saveEntity(entity) {
+    public saveEntity(entity, fc = null) {
         entity.save(function (err) {
             if (err) return console.error(err);
+            if (fc != null)
+                fc();
         });
     }
 

+ 5 - 4
modules/FormCrafty/FormBuilder.js

@@ -1,6 +1,7 @@
 "use strict";
 Object.defineProperty(exports, "__esModule", { value: true });
 var Builder_1 = require("./Builder");
+var util_1 = require("util");
 var FormBuilder = (function () {
     function FormBuilder(formType, model) {
         this.valueField = {};
@@ -18,8 +19,8 @@ var FormBuilder = (function () {
             valueField = req.body;
         for (var key in valueField) {
             var newKey = key.split("_")[1];
-            if (key.split("_")[0] == this.model._id)
-                this.valueField[newKey] = valueField[key];
+            this.valueField[newKey] = valueField[key];
+            this.model[newKey] = valueField[key];
         }
     };
     FormBuilder.prototype.isSubmit = function () {
@@ -38,7 +39,7 @@ var FormBuilder = (function () {
         var method = "post";
         if (this.options.method != null)
             method = this.options.method;
-        formView["start"] = "<form id='" + uid + "' " + attrs + " action='.' method='" + method + "' >";
+        formView["start"] = "<form id='" + uid + "' " + attrs + " method='" + method + "' >";
         formView["end"] = "</form>";
         //create field form
         formView["field"] = {};
@@ -51,7 +52,7 @@ var FormBuilder = (function () {
                 field += "<input ";
             field += "id='" + uid + "_" + oneField.field + "' name='" + uid + "_" + oneField.field + "' ";
             //add value if possible
-            if (oneField.field != Builder_1.Builder.FORM_TYPE_SUBMIT && oneField.field != Builder_1.Builder.FORM_TYPE_PASSWORD) {
+            if (oneField.field != Builder_1.Builder.FORM_TYPE_SUBMIT && oneField.field != Builder_1.Builder.FORM_TYPE_PASSWORD && !util_1.isUndefined(this.model[oneField.field])) {
                 //if handle request is hydrate this form
                 if (this.valueField[oneField.field] == null)
                     field += "value='" + this.model[oneField.field] + "' ";

+ 5 - 4
modules/FormCrafty/FormBuilder.ts

@@ -1,5 +1,6 @@
 import {FormType} from "./FormType";
 import {Builder} from "./Builder";
+import {isUndefined} from "util";
 
 export class FormBuilder {
 
@@ -28,8 +29,8 @@ export class FormBuilder {
 
         for (let key in valueField) {
             let newKey = key.split("_")[1];
-            if (key.split("_")[0] == this.model._id)
-                this.valueField[newKey] = valueField[key];
+            this.valueField[newKey] = valueField[key];
+            this.model[newKey] = valueField[key];
         }
     }
 
@@ -52,7 +53,7 @@ export class FormBuilder {
         if (this.options.method != null)
             method = this.options.method;
 
-        formView["start"] = "<form id='"+uid+"' "+attrs+" action='.' method='"+method+"' >";
+        formView["start"] = "<form id='"+uid+"' "+attrs+" method='"+method+"' >";
         formView["end"] = "</form>";
 
         //create field form
@@ -69,7 +70,7 @@ export class FormBuilder {
             field += "id='"+uid+"_"+oneField.field+"' name='"+uid+"_"+oneField.field+"' ";
 
             //add value if possible
-            if (oneField.field != Builder.FORM_TYPE_SUBMIT && oneField.field != Builder.FORM_TYPE_PASSWORD) {
+            if (oneField.field != Builder.FORM_TYPE_SUBMIT && oneField.field != Builder.FORM_TYPE_PASSWORD && !isUndefined(this.model[oneField.field])) {
                 //if handle request is hydrate this form
                 if (this.valueField[oneField.field] == null)
                     field += "value='"+this.model[oneField.field]+"' ";

+ 15 - 0
node_modules/.bin/handlebars

@@ -0,0 +1,15 @@
+#!/bin/sh
+basedir=$(dirname "$(echo "$0" | sed -e 's,\\,/,g')")
+
+case `uname` in
+    *CYGWIN*) basedir=`cygpath -w "$basedir"`;;
+esac
+
+if [ -x "$basedir/node" ]; then
+  "$basedir/node"  "$basedir/../handlebars/bin/handlebars" "$@"
+  ret=$?
+else 
+  node  "$basedir/../handlebars/bin/handlebars" "$@"
+  ret=$?
+fi
+exit $ret

+ 7 - 0
node_modules/.bin/handlebars.cmd

@@ -0,0 +1,7 @@
+@IF EXIST "%~dp0\node.exe" (
+  "%~dp0\node.exe"  "%~dp0\..\handlebars\bin\handlebars" %*
+) ELSE (
+  @SETLOCAL
+  @SET PATHEXT=%PATHEXT:;.JS;=;%
+  node  "%~dp0\..\handlebars\bin\handlebars" %*
+)

+ 15 - 0
node_modules/.bin/uglifyjs

@@ -0,0 +1,15 @@
+#!/bin/sh
+basedir=$(dirname "$(echo "$0" | sed -e 's,\\,/,g')")
+
+case `uname` in
+    *CYGWIN*) basedir=`cygpath -w "$basedir"`;;
+esac
+
+if [ -x "$basedir/node" ]; then
+  "$basedir/node"  "$basedir/../uglify-js/bin/uglifyjs" "$@"
+  ret=$?
+else 
+  node  "$basedir/../uglify-js/bin/uglifyjs" "$@"
+  ret=$?
+fi
+exit $ret

+ 7 - 0
node_modules/.bin/uglifyjs.cmd

@@ -0,0 +1,7 @@
+@IF EXIST "%~dp0\node.exe" (
+  "%~dp0\node.exe"  "%~dp0\..\uglify-js\bin\uglifyjs" %*
+) ELSE (
+  @SETLOCAL
+  @SET PATHEXT=%PATHEXT:;.JS;=;%
+  node  "%~dp0\..\uglify-js\bin\uglifyjs" %*
+)

+ 21 - 0
node_modules/align-text/LICENSE

@@ -0,0 +1,21 @@
+The MIT License (MIT)
+
+Copyright (c) 2015, Jon Schlinkert.
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.

+ 236 - 0
node_modules/align-text/README.md

@@ -0,0 +1,236 @@
+# align-text [![NPM version](https://badge.fury.io/js/align-text.svg)](http://badge.fury.io/js/align-text)  [![Build Status](https://travis-ci.org/jonschlinkert/align-text.svg)](https://travis-ci.org/jonschlinkert/align-text)
+
+> Align the text in a string.
+
+**Examples**
+
+Align text values in an array:
+
+```js
+align([1, 2, 3, 100]);
+//=> ['  1', '  2', '  3', '100']
+```
+
+Or [do stuff like this](./example.js):
+
+[![screen shot 2015-06-09 at 2 08 34 am](https://cloud.githubusercontent.com/assets/383994/8051597/7b716fbc-0e4c-11e5-9aef-4493fd22db58.png)](./example.js)
+
+Visit [the example](./example.js) to see how this works.
+
+## Install
+
+Install with [npm](https://www.npmjs.com/)
+
+```sh
+$ npm i align-text --save
+```
+
+## Usage
+
+```js
+var align = require('align-text');
+align(text, callback_function_or_integer);
+```
+
+**Params**
+
+* `text` can be a **string or array**. If a string is passed, a string will be returned. If an array is passed, an array will be returned.
+* `callback|integer`: if an integer, the text will be indented by that amount. If a function, it must return an integer representing the amount of leading indentation to use as `align` loops over each line.
+
+**Example**
+
+```js
+align(text, 4);
+```
+
+Would align:
+
+```
+abc
+abc
+abc
+```
+
+To:
+
+```
+    abc
+    abc
+    abc
+```
+
+## callback
+
+### params
+
+The callback is used to determine the indentation of each line and gets the following params:
+
+* `len` the length of the "current" line
+* `longest` the length of the longest line
+* `line` the current line (string) being aligned
+* `lines` the array of all lines
+
+### return
+
+The callback may return:
+
+* an integer that represents the number of spaces to use for padding,
+* or an object with the following properties:
+  - `indent`: **{Number}** the amount of indentation to use. Default is `0` when an object is returned.
+  - `character`: **{String}** the character to use for indentation. Default is `''` (empty string) when an object is returned.
+  - `prefix`: **{String}** leading characters to use at the beginning of each line. `''` (empty string) when an object is returned.
+
+**Integer example:**
+
+```js
+// calculate half the difference between the length
+// of the current line and the longest line
+function centerAlign(len, longest, line, lines) {
+  return Math.floor((longest - len) / 2);
+}
+```
+
+**Object example:**
+
+```js
+function centerAlign(len, longest, line, lines) {
+  return {
+    character: '\t',
+    indent: Math.floor((longest - len) / 2),
+    prefix: '~ ',
+  }
+}
+```
+
+## Usage examples
+
+### Center align
+
+Using the `centerAlign` function from above:
+
+```js
+align(text, centerAlign);
+```
+
+Would align this text:
+
+```js
+Lorem ipsum dolor sit amet
+consectetur adipiscin
+elit, sed do eiusmod tempor incididun
+ut labore et dolor
+magna aliqua. Ut enim ad mini
+veniam, quis
+```
+
+Resulting in this:
+
+```
+     Lorem ipsum dolor sit amet,
+        consectetur adipiscing
+elit, sed do eiusmod tempor incididunt
+         ut labore et dolore
+    magna aliqua. Ut enim ad minim
+             veniam, quis
+```
+
+**Customize**
+
+If you wanted to add more padding on the left, just pass the number in the callback.
+
+For example, to add 4 spaces before every line:
+
+```js
+function centerAlign(len, longest, line, lines) {
+  return 4 + Math.floor((longest - len) / 2);
+}
+```
+
+Would result in:
+
+```
+         Lorem ipsum dolor sit amet,
+            consectetur adipiscing
+    elit, sed do eiusmod tempor incididunt
+             ut labore et dolore
+        magna aliqua. Ut enim ad minim
+                 veniam, quis
+```
+
+### Bullets
+
+```js
+align(text, function (len, max, line, lines) {
+  return {prefix: ' - '};
+});
+```
+
+Would return:
+
+```
+- Lorem ipsum dolor sit amet,
+- consectetur adipiscing
+- elit, sed do eiusmod tempor incididunt
+- ut labore et dolore
+- magna aliqua. Ut enim ad minim
+- veniam, quis
+```
+
+### Different indent character
+
+```js
+align(text, function (len, max, line, lines) {
+  return { 
+    indent: Math.floor((max - len) / 2), 
+    character: '~', 
+  };
+});
+```
+
+Would return
+
+```
+~~~~~Lorem ipsum dolor sit amet,
+~~~~~~~~consectetur adipiscing
+elit, sed do eiusmod tempor incididunt
+~~~~~~~~~ut labore et dolore
+~~~~magna aliqua. Ut enim ad minim
+~~~~~~~~~~~~~veniam, quis
+```
+
+## Related projects
+
+* [center-align](https://github.com/jonschlinkert/center-align): Center-align the text in a string.
+* [justify](https://github.com/bahamas10/node-justify): Left or right (or both) justify text using a custom width and character
+* [longest](https://github.com/jonschlinkert/longest): Get the longest item in an array.
+* [right-align](https://github.com/jonschlinkert/right-align): Right-align the text in a string.
+* [repeat-string](https://github.com/jonschlinkert/repeat-string): Repeat the given string n times. Fastest implementation for repeating a string.
+* [word-wrap](https://github.com/jonschlinkert/word-wrap): Wrap words to a specified length.
+
+## Running tests
+
+Install dev dependencies:
+
+```sh
+$ npm i -d && npm test
+```
+
+## Contributing
+
+Pull requests and stars are always welcome. For bugs and feature requests, [please create an issue](https://github.com/jonschlinkert/align-text/issues/new)
+
+## Author
+
+**Jon Schlinkert**
+
++ [github/jonschlinkert](https://github.com/jonschlinkert)
++ [twitter/jonschlinkert](http://twitter.com/jonschlinkert)
+
+## License
+
+Copyright © 2015 [Jon Schlinkert](https://github.com/jonschlinkert)
+Released under the MIT license.
+
+***
+
+_This file was generated by [verb-cli](https://github.com/assemble/verb-cli) on June 09, 2015._

+ 52 - 0
node_modules/align-text/index.js

@@ -0,0 +1,52 @@
+/*!
+ * align-text <https://github.com/jonschlinkert/align-text>
+ *
+ * Copyright (c) 2015, Jon Schlinkert.
+ * Licensed under the MIT License.
+ */
+
+'use strict';
+
+var typeOf = require('kind-of');
+var repeat = require('repeat-string');
+var longest = require('longest');
+
+module.exports = function alignText(val, fn) {
+  var lines, type = typeOf(val);
+
+  if (type === 'array') {
+    lines = val;
+  } else if (type === 'string') {
+    lines = val.split(/(?:\r\n|\n)/);
+  } else {
+    throw new TypeError('align-text expects a string or array.');
+  }
+
+  var fnType = typeOf(fn);
+  var len = lines.length;
+  var max = longest(lines);
+  var res = [], i = 0;
+
+  while (len--) {
+    var line = String(lines[i++]);
+    var diff;
+
+    if (fnType === 'function') {
+      diff = fn(line.length, max.length, line, lines, i);
+    } else if (fnType === 'number') {
+      diff = fn;
+    } else {
+      diff = max.length - line.length;
+    }
+
+    if (typeOf(diff) === 'number') {
+      res.push(repeat(' ', diff) + line);
+    } else if (typeOf(diff) === 'object') {
+      var result = repeat(diff.character || ' ', diff.indent || 0);
+      res.push((diff.prefix || '') + result + line);
+    }
+  }
+
+  if (type === 'array') return res;
+  return res.join('\n');
+};

+ 78 - 0
node_modules/align-text/package.json

@@ -0,0 +1,78 @@
+{
+  "_from": "align-text@^0.1.3",
+  "_id": "align-text@0.1.4",
+  "_inBundle": false,
+  "_integrity": "sha1-DNkKVhCT810KmSVsIrcGlDP60Rc=",
+  "_location": "/align-text",
+  "_phantomChildren": {},
+  "_requested": {
+    "type": "range",
+    "registry": true,
+    "raw": "align-text@^0.1.3",
+    "name": "align-text",
+    "escapedName": "align-text",
+    "rawSpec": "^0.1.3",
+    "saveSpec": null,
+    "fetchSpec": "^0.1.3"
+  },
+  "_requiredBy": [
+    "/center-align",
+    "/right-align"
+  ],
+  "_resolved": "https://registry.npmjs.org/align-text/-/align-text-0.1.4.tgz",
+  "_shasum": "0cd90a561093f35d0a99256c22b7069433fad117",
+  "_spec": "align-text@^0.1.3",
+  "_where": "C:\\Users\\Valentin\\Desktop\\node\\Server0\\node_modules\\center-align",
+  "author": {
+    "name": "Jon Schlinkert",
+    "url": "https://github.com/jonschlinkert"
+  },
+  "bugs": {
+    "url": "https://github.com/jonschlinkert/align-text/issues"
+  },
+  "bundleDependencies": false,
+  "dependencies": {
+    "kind-of": "^3.0.2",
+    "longest": "^1.0.1",
+    "repeat-string": "^1.5.2"
+  },
+  "deprecated": false,
+  "description": "Align the text in a string.",
+  "devDependencies": {
+    "mocha": "*",
+    "should": "*",
+    "word-wrap": "^1.0.3"
+  },
+  "engines": {
+    "node": ">=0.10.0"
+  },
+  "files": [
+    "index.js"
+  ],
+  "homepage": "https://github.com/jonschlinkert/align-text",
+  "keywords": [
+    "align",
+    "align-center",
+    "alignment",
+    "center",
+    "center-align",
+    "indent",
+    "pad",
+    "padding",
+    "right",
+    "right-align",
+    "text",
+    "typography"
+  ],
+  "license": "MIT",
+  "main": "index.js",
+  "name": "align-text",
+  "repository": {
+    "type": "git",
+    "url": "git://github.com/jonschlinkert/align-text.git"
+  },
+  "scripts": {
+    "test": "mocha"
+  },
+  "version": "0.1.4"
+}

+ 58 - 0
node_modules/amdefine/LICENSE

@@ -0,0 +1,58 @@
+amdefine is released under two licenses: new BSD, and MIT. You may pick the
+license that best suits your development needs. The text of both licenses are
+provided below.
+
+
+The "New" BSD License:
+----------------------
+
+Copyright (c) 2011-2016, The Dojo Foundation
+All rights reserved.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are met:
+
+  * Redistributions of source code must retain the above copyright notice, this
+    list of conditions and the following disclaimer.
+  * Redistributions in binary form must reproduce the above copyright notice,
+    this list of conditions and the following disclaimer in the documentation
+    and/or other materials provided with the distribution.
+  * Neither the name of the Dojo Foundation nor the names of its contributors
+    may be used to endorse or promote products derived from this software
+    without specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
+ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE
+FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+
+
+MIT License
+-----------
+
+Copyright (c) 2011-2016, The Dojo Foundation
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.

+ 171 - 0
node_modules/amdefine/README.md

@@ -0,0 +1,171 @@
+# amdefine
+
+A module that can be used to implement AMD's define() in Node. This allows you
+to code to the AMD API and have the module work in node programs without
+requiring those other programs to use AMD.
+
+## Usage
+
+**1)** Update your package.json to indicate amdefine as a dependency:
+
+```javascript
+    "dependencies": {
+        "amdefine": ">=0.1.0"
+    }
+```
+
+Then run `npm install` to get amdefine into your project.
+
+**2)** At the top of each module that uses define(), place this code:
+
+```javascript
+if (typeof define !== 'function') { var define = require('amdefine')(module) }
+```
+
+**Only use these snippets** when loading amdefine. If you preserve the basic structure,
+with the braces, it will be stripped out when using the [RequireJS optimizer](#optimizer).
+
+You can add spaces, line breaks and even require amdefine with a local path, but
+keep the rest of the structure to get the stripping behavior.
+
+As you may know, because `if` statements in JavaScript don't have their own scope, the var
+declaration in the above snippet is made whether the `if` expression is truthy or not. If
+RequireJS is loaded then the declaration is superfluous because `define` is already already
+declared in the same scope in RequireJS. Fortunately JavaScript handles multiple `var`
+declarations of the same variable in the same scope gracefully.
+
+If you want to deliver amdefine.js with your code rather than specifying it as a dependency
+with npm, then just download the latest release and refer to it using a relative path:
+
+[Latest Version](https://github.com/jrburke/amdefine/raw/latest/amdefine.js)
+
+### amdefine/intercept
+
+Consider this very experimental.
+
+Instead of pasting the piece of text for the amdefine setup of a `define`
+variable in each module you create or consume, you can use `amdefine/intercept`
+instead. It will automatically insert the above snippet in each .js file loaded
+by Node.
+
+**Warning**: you should only use this if you are creating an application that
+is consuming AMD style defined()'d modules that are distributed via npm and want
+to run that code in Node.
+
+For library code where you are not sure if it will be used by others in Node or
+in the browser, then explicitly depending on amdefine and placing the code
+snippet above is suggested path, instead of using `amdefine/intercept`. The
+intercept module affects all .js files loaded in the Node app, and it is
+inconsiderate to modify global state like that unless you are also controlling
+the top level app.
+
+#### Why distribute AMD-style modules via npm?
+
+npm has a lot of weaknesses for front-end use (installed layout is not great,
+should have better support for the `baseUrl + moduleID + '.js' style of loading,
+single file JS installs), but some people want a JS package manager and are
+willing to live with those constraints. If that is you, but still want to author
+in AMD style modules to get dynamic require([]), better direct source usage and
+powerful loader plugin support in the browser, then this tool can help.
+
+#### amdefine/intercept usage
+
+Just require it in your top level app module (for example index.js, server.js):
+
+```javascript
+require('amdefine/intercept');
+```
+
+The module does not return a value, so no need to assign the result to a local
+variable.
+
+Then just require() code as you normally would with Node's require(). Any .js
+loaded after the intercept require will have the amdefine check injected in
+the .js source as it is loaded. It does not modify the source on disk, just
+prepends some content to the text of the module as it is loaded by Node.
+
+#### How amdefine/intercept works
+
+It overrides the `Module._extensions['.js']` in Node to automatically prepend
+the amdefine snippet above. So, it will affect any .js file loaded by your
+app.
+
+## define() usage
+
+It is best if you use the anonymous forms of define() in your module:
+
+```javascript
+define(function (require) {
+    var dependency = require('dependency');
+});
+```
+
+or
+
+```javascript
+define(['dependency'], function (dependency) {
+
+});
+```
+
+## RequireJS optimizer integration. <a name="optimizer"></name>
+
+Version 1.0.3 of the [RequireJS optimizer](http://requirejs.org/docs/optimization.html)
+will have support for stripping the `if (typeof define !== 'function')` check
+mentioned above, so you can include this snippet for code that runs in the
+browser, but avoid taking the cost of the if() statement once the code is
+optimized for deployment.
+
+## Node 0.4 Support
+
+If you want to support Node 0.4, then add `require` as the second parameter to amdefine:
+
+```javascript
+//Only if you want Node 0.4. If using 0.5 or later, use the above snippet.
+if (typeof define !== 'function') { var define = require('amdefine')(module, require) }
+```
+
+## Limitations
+
+### Synchronous vs Asynchronous
+
+amdefine creates a define() function that is callable by your code. It will
+execute and trace dependencies and call the factory function *synchronously*,
+to keep the behavior in line with Node's synchronous dependency tracing.
+
+The exception: calling AMD's callback-style require() from inside a factory
+function. The require callback is called on process.nextTick():
+
+```javascript
+define(function (require) {
+    require(['a'], function(a) {
+        //'a' is loaded synchronously, but
+        //this callback is called on process.nextTick().
+    });
+});
+```
+
+### Loader Plugins
+
+Loader plugins are supported as long as they call their load() callbacks
+synchronously. So ones that do network requests will not work. However plugins
+like [text](http://requirejs.org/docs/api.html#text) can load text files locally.
+
+The plugin API's `load.fromText()` is **not supported** in amdefine, so this means
+transpiler plugins like the [CoffeeScript loader plugin](https://github.com/jrburke/require-cs)
+will not work. This may be fixable, but it is a bit complex, and I do not have
+enough node-fu to figure it out yet. See the source for amdefine.js if you want
+to get an idea of the issues involved.
+
+## Tests
+
+To run the tests, cd to **tests** and run:
+
+```
+node all.js
+node all-intercept.js
+```
+
+## License
+
+New BSD and MIT. Check the LICENSE file for all the details.

+ 301 - 0
node_modules/amdefine/amdefine.js

@@ -0,0 +1,301 @@
+/** vim: et:ts=4:sw=4:sts=4
+ * @license amdefine 1.0.1 Copyright (c) 2011-2016, The Dojo Foundation All Rights Reserved.
+ * Available via the MIT or new BSD license.
+ * see: http://github.com/jrburke/amdefine for details
+ */
+
+/*jslint node: true */
+/*global module, process */
+'use strict';
+
+/**
+ * Creates a define for node.
+ * @param {Object} module the "module" object that is defined by Node for the
+ * current module.
+ * @param {Function} [requireFn]. Node's require function for the current module.
+ * It only needs to be passed in Node versions before 0.5, when module.require
+ * did not exist.
+ * @returns {Function} a define function that is usable for the current node
+ * module.
+ */
+function amdefine(module, requireFn) {
+    'use strict';
+    var defineCache = {},
+        loaderCache = {},
+        alreadyCalled = false,
+        path = require('path'),
+        makeRequire, stringRequire;
+
+    /**
+     * Trims the . and .. from an array of path segments.
+     * It will keep a leading path segment if a .. will become
+     * the first path segment, to help with module name lookups,
+     * which act like paths, but can be remapped. But the end result,
+     * all paths that use this function should look normalized.
+     * NOTE: this method MODIFIES the input array.
+     * @param {Array} ary the array of path segments.
+     */
+    function trimDots(ary) {
+        var i, part;
+        for (i = 0; ary[i]; i+= 1) {
+            part = ary[i];
+            if (part === '.') {
+                ary.splice(i, 1);
+                i -= 1;
+            } else if (part === '..') {
+                if (i === 1 && (ary[2] === '..' || ary[0] === '..')) {
+                    //End of the line. Keep at least one non-dot
+                    //path segment at the front so it can be mapped
+                    //correctly to disk. Otherwise, there is likely
+                    //no path mapping for a path starting with '..'.
+                    //This can still fail, but catches the most reasonable
+                    //uses of ..
+                    break;
+                } else if (i > 0) {
+                    ary.splice(i - 1, 2);
+                    i -= 2;
+                }
+            }
+        }
+    }
+
+    function normalize(name, baseName) {
+        var baseParts;
+
+        //Adjust any relative paths.
+        if (name && name.charAt(0) === '.') {
+            //If have a base name, try to normalize against it,
+            //otherwise, assume it is a top-level require that will
+            //be relative to baseUrl in the end.
+            if (baseName) {
+                baseParts = baseName.split('/');
+                baseParts = baseParts.slice(0, baseParts.length - 1);
+                baseParts = baseParts.concat(name.split('/'));
+                trimDots(baseParts);
+                name = baseParts.join('/');
+            }
+        }
+
+        return name;
+    }
+
+    /**
+     * Create the normalize() function passed to a loader plugin's
+     * normalize method.
+     */
+    function makeNormalize(relName) {
+        return function (name) {
+            return normalize(name, relName);
+        };
+    }
+
+    function makeLoad(id) {
+        function load(value) {
+            loaderCache[id] = value;
+        }
+
+        load.fromText = function (id, text) {
+            //This one is difficult because the text can/probably uses
+            //define, and any relative paths and requires should be relative
+            //to that id was it would be found on disk. But this would require
+            //bootstrapping a module/require fairly deeply from node core.
+            //Not sure how best to go about that yet.
+            throw new Error('amdefine does not implement load.fromText');
+        };
+
+        return load;
+    }
+
+    makeRequire = function (systemRequire, exports, module, relId) {
+        function amdRequire(deps, callback) {
+            if (typeof deps === 'string') {
+                //Synchronous, single module require('')
+                return stringRequire(systemRequire, exports, module, deps, relId);
+            } else {
+                //Array of dependencies with a callback.
+
+                //Convert the dependencies to modules.
+                deps = deps.map(function (depName) {
+                    return stringRequire(systemRequire, exports, module, depName, relId);
+                });
+
+                //Wait for next tick to call back the require call.
+                if (callback) {
+                    process.nextTick(function () {
+                        callback.apply(null, deps);
+                    });
+                }
+            }
+        }
+
+        amdRequire.toUrl = function (filePath) {
+            if (filePath.indexOf('.') === 0) {
+                return normalize(filePath, path.dirname(module.filename));
+            } else {
+                return filePath;
+            }
+        };
+
+        return amdRequire;
+    };
+
+    //Favor explicit value, passed in if the module wants to support Node 0.4.
+    requireFn = requireFn || function req() {
+        return module.require.apply(module, arguments);
+    };
+
+    function runFactory(id, deps, factory) {
+        var r, e, m, result;
+
+        if (id) {
+            e = loaderCache[id] = {};
+            m = {
+                id: id,
+                uri: __filename,
+                exports: e
+            };
+            r = makeRequire(requireFn, e, m, id);
+        } else {
+            //Only support one define call per file
+            if (alreadyCalled) {
+                throw new Error('amdefine with no module ID cannot be called more than once per file.');
+            }
+            alreadyCalled = true;
+
+            //Use the real variables from node
+            //Use module.exports for exports, since
+            //the exports in here is amdefine exports.
+            e = module.exports;
+            m = module;
+            r = makeRequire(requireFn, e, m, module.id);
+        }
+
+        //If there are dependencies, they are strings, so need
+        //to convert them to dependency values.
+        if (deps) {
+            deps = deps.map(function (depName) {
+                return r(depName);
+            });
+        }
+
+        //Call the factory with the right dependencies.
+        if (typeof factory === 'function') {
+            result = factory.apply(m.exports, deps);
+        } else {
+            result = factory;
+        }
+
+        if (result !== undefined) {
+            m.exports = result;
+            if (id) {
+                loaderCache[id] = m.exports;
+            }
+        }
+    }
+
+    stringRequire = function (systemRequire, exports, module, id, relId) {
+        //Split the ID by a ! so that
+        var index = id.indexOf('!'),
+            originalId = id,
+            prefix, plugin;
+
+        if (index === -1) {
+            id = normalize(id, relId);
+
+            //Straight module lookup. If it is one of the special dependencies,
+            //deal with it, otherwise, delegate to node.
+            if (id === 'require') {
+                return makeRequire(systemRequire, exports, module, relId);
+            } else if (id === 'exports') {
+                return exports;
+            } else if (id === 'module') {
+                return module;
+            } else if (loaderCache.hasOwnProperty(id)) {
+                return loaderCache[id];
+            } else if (defineCache[id]) {
+                runFactory.apply(null, defineCache[id]);
+                return loaderCache[id];
+            } else {
+                if(systemRequire) {
+                    return systemRequire(originalId);
+                } else {
+                    throw new Error('No module with ID: ' + id);
+                }
+            }
+        } else {
+            //There is a plugin in play.
+            prefix = id.substring(0, index);
+            id = id.substring(index + 1, id.length);
+
+            plugin = stringRequire(systemRequire, exports, module, prefix, relId);
+
+            if (plugin.normalize) {
+                id = plugin.normalize(id, makeNormalize(relId));
+            } else {
+                //Normalize the ID normally.
+                id = normalize(id, relId);
+            }
+
+            if (loaderCache[id]) {
+                return loaderCache[id];
+            } else {
+                plugin.load(id, makeRequire(systemRequire, exports, module, relId), makeLoad(id), {});
+
+                return loaderCache[id];
+            }
+        }
+    };
+
+    //Create a define function specific to the module asking for amdefine.
+    function define(id, deps, factory) {
+        if (Array.isArray(id)) {
+            factory = deps;
+            deps = id;
+            id = undefined;
+        } else if (typeof id !== 'string') {
+            factory = id;
+            id = deps = undefined;
+        }
+
+        if (deps && !Array.isArray(deps)) {
+            factory = deps;
+            deps = undefined;
+        }
+
+        if (!deps) {
+            deps = ['require', 'exports', 'module'];
+        }
+
+        //Set up properties for this module. If an ID, then use
+        //internal cache. If no ID, then use the external variables
+        //for this node module.
+        if (id) {
+            //Put the module in deep freeze until there is a
+            //require call for it.
+            defineCache[id] = [id, deps, factory];
+        } else {
+            runFactory(id, deps, factory);
+        }
+    }
+
+    //define.require, which has access to all the values in the
+    //cache. Useful for AMD modules that all have IDs in the file,
+    //but need to finally export a value to node based on one of those
+    //IDs.
+    define.require = function (id) {
+        if (loaderCache[id]) {
+            return loaderCache[id];
+        }
+
+        if (defineCache[id]) {
+            runFactory.apply(null, defineCache[id]);
+            return loaderCache[id];
+        }
+    };
+
+    define.amd = {};
+
+    return define;
+}
+
+module.exports = amdefine;

+ 36 - 0
node_modules/amdefine/intercept.js

@@ -0,0 +1,36 @@
+/*jshint node: true */
+var inserted,
+    Module = require('module'),
+    fs = require('fs'),
+    existingExtFn = Module._extensions['.js'],
+    amdefineRegExp = /amdefine\.js/;
+
+inserted  = "if (typeof define !== 'function') {var define = require('amdefine')(module)}";
+
+//From the node/lib/module.js source:
+function stripBOM(content) {
+    // Remove byte order marker. This catches EF BB BF (the UTF-8 BOM)
+    // because the buffer-to-string conversion in `fs.readFileSync()`
+    // translates it to FEFF, the UTF-16 BOM.
+    if (content.charCodeAt(0) === 0xFEFF) {
+        content = content.slice(1);
+    }
+    return content;
+}
+
+//Also adapted from the node/lib/module.js source:
+function intercept(module, filename) {
+    var content = stripBOM(fs.readFileSync(filename, 'utf8'));
+
+    if (!amdefineRegExp.test(module.id)) {
+        content = inserted + content;
+    }
+
+    module._compile(content, filename);
+}
+
+intercept._id = 'amdefine/intercept';
+
+if (!existingExtFn._id || existingExtFn._id !== intercept._id) {
+    Module._extensions['.js'] = intercept;
+}

+ 48 - 0
node_modules/amdefine/package.json

@@ -0,0 +1,48 @@
+{
+  "_from": "amdefine@>=0.0.4",
+  "_id": "amdefine@1.0.1",
+  "_inBundle": false,
+  "_integrity": "sha1-SlKCrBZHKek2Gbz9OtFR+BfOkfU=",
+  "_location": "/amdefine",
+  "_phantomChildren": {},
+  "_requested": {
+    "type": "range",
+    "registry": true,
+    "raw": "amdefine@>=0.0.4",
+    "name": "amdefine",
+    "escapedName": "amdefine",
+    "rawSpec": ">=0.0.4",
+    "saveSpec": null,
+    "fetchSpec": ">=0.0.4"
+  },
+  "_requiredBy": [
+    "/source-map"
+  ],
+  "_resolved": "https://registry.npmjs.org/amdefine/-/amdefine-1.0.1.tgz",
+  "_shasum": "4a5282ac164729e93619bcfd3ad151f817ce91f5",
+  "_spec": "amdefine@>=0.0.4",
+  "_where": "C:\\Users\\Valentin\\Desktop\\node\\Server0\\node_modules\\source-map",
+  "author": {
+    "name": "James Burke",
+    "email": "jrburke@gmail.com",
+    "url": "http://github.com/jrburke"
+  },
+  "bugs": {
+    "url": "https://github.com/jrburke/amdefine/issues"
+  },
+  "bundleDependencies": false,
+  "deprecated": false,
+  "description": "Provide AMD's define() API for declaring modules in the AMD format",
+  "engines": {
+    "node": ">=0.4.2"
+  },
+  "homepage": "http://github.com/jrburke/amdefine",
+  "license": "BSD-3-Clause OR MIT",
+  "main": "./amdefine.js",
+  "name": "amdefine",
+  "repository": {
+    "type": "git",
+    "url": "git+https://github.com/jrburke/amdefine.git"
+  },
+  "version": "1.0.1"
+}

+ 27 - 0
node_modules/camelcase/index.js

@@ -0,0 +1,27 @@
+'use strict';
+module.exports = function () {
+	var str = [].map.call(arguments, function (str) {
+		return str.trim();
+	}).filter(function (str) {
+		return str.length;
+	}).join('-');
+
+	if (!str.length) {
+		return '';
+	}
+
+	if (str.length === 1 || !(/[_.\- ]+/).test(str) ) {
+		if (str[0] === str[0].toLowerCase() && str.slice(1) !== str.slice(1).toLowerCase()) {
+			return str;
+		}
+
+		return str.toLowerCase();
+	}
+
+	return str
+	.replace(/^[_.\- ]+/, '')
+	.toLowerCase()
+	.replace(/[_.\- ]+(\w|$)/g, function (m, p1) {
+		return p1.toUpperCase();
+	});
+};

+ 21 - 0
node_modules/camelcase/license

@@ -0,0 +1,21 @@
+The MIT License (MIT)
+
+Copyright (c) Sindre Sorhus <sindresorhus@gmail.com> (sindresorhus.com)
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.

+ 70 - 0
node_modules/camelcase/package.json

@@ -0,0 +1,70 @@
+{
+  "_from": "camelcase@^1.0.2",
+  "_id": "camelcase@1.2.1",
+  "_inBundle": false,
+  "_integrity": "sha1-m7UwTS4LVmmLLHWLCKPqqdqlijk=",
+  "_location": "/camelcase",
+  "_phantomChildren": {},
+  "_requested": {
+    "type": "range",
+    "registry": true,
+    "raw": "camelcase@^1.0.2",
+    "name": "camelcase",
+    "escapedName": "camelcase",
+    "rawSpec": "^1.0.2",
+    "saveSpec": null,
+    "fetchSpec": "^1.0.2"
+  },
+  "_requiredBy": [
+    "/yargs"
+  ],
+  "_resolved": "https://registry.npmjs.org/camelcase/-/camelcase-1.2.1.tgz",
+  "_shasum": "9bb5304d2e0b56698b2c758b08a3eaa9daa58a39",
+  "_spec": "camelcase@^1.0.2",
+  "_where": "C:\\Users\\Valentin\\Desktop\\node\\Server0\\node_modules\\yargs",
+  "author": {
+    "name": "Sindre Sorhus",
+    "email": "sindresorhus@gmail.com",
+    "url": "http://sindresorhus.com"
+  },
+  "bugs": {
+    "url": "https://github.com/sindresorhus/camelcase/issues"
+  },
+  "bundleDependencies": false,
+  "deprecated": false,
+  "description": "Convert a dash/dot/underscore/space separated string to camelCase: foo-bar → fooBar",
+  "devDependencies": {
+    "ava": "0.0.4"
+  },
+  "engines": {
+    "node": ">=0.10.0"
+  },
+  "files": [
+    "index.js"
+  ],
+  "homepage": "https://github.com/sindresorhus/camelcase#readme",
+  "keywords": [
+    "camelcase",
+    "camel-case",
+    "camel",
+    "case",
+    "dash",
+    "hyphen",
+    "dot",
+    "underscore",
+    "separator",
+    "string",
+    "text",
+    "convert"
+  ],
+  "license": "MIT",
+  "name": "camelcase",
+  "repository": {
+    "type": "git",
+    "url": "git+https://github.com/sindresorhus/camelcase.git"
+  },
+  "scripts": {
+    "test": "node test.js"
+  },
+  "version": "1.2.1"
+}

+ 56 - 0
node_modules/camelcase/readme.md

@@ -0,0 +1,56 @@
+# camelcase [![Build Status](https://travis-ci.org/sindresorhus/camelcase.svg?branch=master)](https://travis-ci.org/sindresorhus/camelcase)
+
+> Convert a dash/dot/underscore/space separated string to camelCase: `foo-bar` → `fooBar`
+
+
+## Install
+
+```sh
+$ npm install --save camelcase
+```
+
+
+## Usage
+
+```js
+var camelCase = require('camelcase');
+
+camelCase('foo-bar');
+//=> fooBar
+
+camelCase('foo_bar');
+//=> fooBar
+
+camelCase('Foo-Bar');
+//=> fooBar
+
+camelCase('--foo.bar');
+//=> fooBar
+
+camelCase('__foo__bar__');
+//=> fooBar
+
+camelCase('foo bar');
+//=> fooBar
+
+console.log(process.argv[3]);
+//=> --foo-bar
+camelCase(process.argv[3]);
+//=> fooBar
+
+camelCase('foo', 'bar');
+//=> fooBar
+
+camelCase('__foo__', '--bar');
+//=> fooBar
+```
+
+
+## Related
+
+See [`decamelize`](https://github.com/sindresorhus/decamelize) for the inverse.
+
+
+## License
+
+MIT © [Sindre Sorhus](http://sindresorhus.com)

+ 21 - 0
node_modules/center-align/LICENSE

@@ -0,0 +1,21 @@
+The MIT License (MIT)
+
+Copyright (c) 2015, Jon Schlinkert.
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.

+ 74 - 0
node_modules/center-align/README.md

@@ -0,0 +1,74 @@
+# center-align [![NPM version](https://badge.fury.io/js/center-align.svg)](http://badge.fury.io/js/center-align)
+
+> Center-align the text in a string.
+
+Install with [npm](https://www.npmjs.com/)
+
+```sh
+$ npm i center-align --save
+```
+
+## Usage
+
+```js
+var centerAlign = require('center-align');
+```
+
+**Example**
+
+If used on the following:
+
+```
+Lorem ipsum dolor sit amet,
+consectetur adipiscing
+elit, sed do eiusmod tempor incididunt
+ut labore et dolore
+magna aliqua. Ut enim ad minim
+veniam, quis
+```
+
+The result would be:
+
+```
+     Lorem ipsum dolor sit amet,
+        consectetur adipiscing
+elit, sed do eiusmod tempor incididunt
+         ut labore et dolore
+    magna aliqua. Ut enim ad minim
+             veniam, quis
+```
+
+## Related projects
+
+* [align-text](https://www.npmjs.com/package/align-text): Align the text in a string. | [homepage](https://github.com/jonschlinkert/align-text)
+* [justified](https://www.npmjs.com/package/justified): Wrap words to a specified length and justified the text. | [homepage](https://github.com/jonschlinkert/justified)
+* [right-align](https://www.npmjs.com/package/right-align): Right-align the text in a string. | [homepage](https://github.com/jonschlinkert/right-align)
+* [word-wrap](https://www.npmjs.com/package/word-wrap): Wrap words to a specified length. | [homepage](https://github.com/jonschlinkert/word-wrap)
+
+## Running tests
+
+Install dev dependencies:
+
+```sh
+$ npm i -d && npm test
+```
+
+## Contributing
+
+Pull requests and stars are always welcome. For bugs and feature requests, [please create an issue](https://github.com/jonschlinkert/center-align/issues/new).
+
+## Author
+
+**Jon Schlinkert**
+
++ [github/jonschlinkert](https://github.com/jonschlinkert)
++ [twitter/jonschlinkert](http://twitter.com/jonschlinkert)
+
+## License
+
+Copyright © 2015 Jon Schlinkert
+Released under the MIT license.
+
+***
+
+_This file was generated by [verb-cli](https://github.com/assemble/verb-cli) on October 27, 2015._

+ 16 - 0
node_modules/center-align/index.js

@@ -0,0 +1,16 @@
+/*!
+ * center-align <https://github.com/jonschlinkert/center-align>
+ *
+ * Copycenter (c) 2015, Jon Schlinkert.
+ * Licensed under the MIT License.
+ */
+
+'use strict';
+
+var utils = require('./utils');
+
+module.exports = function centerAlign(val) {
+  return utils.align(val, function (len, longest) {
+    return Math.floor((longest - len) / 2);
+  });
+};

+ 82 - 0
node_modules/center-align/package.json

@@ -0,0 +1,82 @@
+{
+  "_from": "center-align@^0.1.1",
+  "_id": "center-align@0.1.3",
+  "_inBundle": false,
+  "_integrity": "sha1-qg0yYptu6XIgBBHL1EYckHvCt60=",
+  "_location": "/center-align",
+  "_phantomChildren": {},
+  "_requested": {
+    "type": "range",
+    "registry": true,
+    "raw": "center-align@^0.1.1",
+    "name": "center-align",
+    "escapedName": "center-align",
+    "rawSpec": "^0.1.1",
+    "saveSpec": null,
+    "fetchSpec": "^0.1.1"
+  },
+  "_requiredBy": [
+    "/cliui"
+  ],
+  "_resolved": "https://registry.npmjs.org/center-align/-/center-align-0.1.3.tgz",
+  "_shasum": "aa0d32629b6ee972200411cbd4461c907bc2b7ad",
+  "_spec": "center-align@^0.1.1",
+  "_where": "C:\\Users\\Valentin\\Desktop\\node\\Server0\\node_modules\\cliui",
+  "author": {
+    "name": "Jon Schlinkert",
+    "url": "https://github.com/jonschlinkert"
+  },
+  "bugs": {
+    "url": "https://github.com/jonschlinkert/center-align/issues"
+  },
+  "bundleDependencies": false,
+  "dependencies": {
+    "align-text": "^0.1.3",
+    "lazy-cache": "^1.0.3"
+  },
+  "deprecated": false,
+  "description": "Center-align the text in a string.",
+  "devDependencies": {
+    "mocha": "^2.2.0"
+  },
+  "engines": {
+    "node": ">=0.10.0"
+  },
+  "files": [
+    "index.js",
+    "utils.js"
+  ],
+  "homepage": "https://github.com/jonschlinkert/center-align",
+  "keywords": [
+    "align",
+    "align-center",
+    "center",
+    "center-align",
+    "right",
+    "right-align",
+    "text",
+    "typography"
+  ],
+  "license": "MIT",
+  "main": "index.js",
+  "name": "center-align",
+  "repository": {
+    "type": "git",
+    "url": "git+https://github.com/jonschlinkert/center-align.git"
+  },
+  "scripts": {
+    "test": "mocha"
+  },
+  "verb": {
+    "related": {
+      "description": "",
+      "list": [
+        "align-text",
+        "right-align",
+        "justified",
+        "word-wrap"
+      ]
+    }
+  },
+  "version": "0.1.3"
+}

+ 40 - 0
node_modules/center-align/utils.js

@@ -0,0 +1,40 @@
+'use strict';
+
+/**
+ * Lazily-required module dependencies (makes the application
+ * faster)
+ */
+
+var utils = require('lazy-cache')(require);
+
+/**
+ * Temporarily re-assign `require` to trick browserify and
+ * webpack into reconizing lazy dependencies.
+ *
+ * This tiny bit of ugliness has the huge dual advantage of
+ * only loading modules that are actually called at some
+ * point in the lifecycle of the application, whilst also
+ * allowing browserify and webpack to find modules that
+ * are depended on but never actually called.
+ */
+
+var fn = require;
+require = utils;
+
+/**
+ * Lazily required module dependencies
+ */
+
+require('align-text', 'align');
+
+/**
+ * Restore `require`
+ */
+
+require = fn;
+
+/**
+ * Expose `utils` modules
+ */
+
+module.exports = utils;

+ 1 - 0
node_modules/cliui/.coveralls.yml

@@ -0,0 +1 @@
+repo_token: NiRhyj91Z2vtgob6XdEAqs83rzNnbMZUu

+ 2 - 0
node_modules/cliui/.npmignore

@@ -0,0 +1,2 @@
+.DS_Store
+node_modules

+ 7 - 0
node_modules/cliui/.travis.yml

@@ -0,0 +1,7 @@
+language: node_js
+node_js:
+  - "0.10"
+  - "0.11"
+  - "0.12"
+  - "iojs"
+after_script: "NODE_ENV=test YOURPACKAGE_COVERAGE=1 ./node_modules/.bin/mocha --require patched-blanket --reporter mocha-lcov-reporter | ./node_modules/coveralls/bin/coveralls.js"

+ 14 - 0
node_modules/cliui/LICENSE.txt

@@ -0,0 +1,14 @@
+Copyright (c) 2015, Contributors
+
+Permission to use, copy, modify, and/or distribute this software
+for any purpose with or without fee is hereby granted, provided
+that the above copyright notice and this permission notice
+appear in all copies.
+
+THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES
+OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE
+LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES
+OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS,
+WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION,
+ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.

+ 104 - 0
node_modules/cliui/README.md

@@ -0,0 +1,104 @@
+# cliui
+
+[![Build Status](https://travis-ci.org/bcoe/cliui.png)](https://travis-ci.org/bcoe/cliui)
+[![Coverage Status](https://coveralls.io/repos/bcoe/cliui/badge.svg?branch=)](https://coveralls.io/r/bcoe/cliui?branch=)
+[![NPM version](https://img.shields.io/npm/v/cliui.svg)](https://www.npmjs.com/package/cliui)
+
+easily create complex multi-column command-line-interfaces.
+
+## Example
+
+```js
+var ui = require('cliui')({
+  width: 80
+})
+
+ui.div('Usage: $0 [command] [options]')
+
+ui.div({
+  text: 'Options:',
+  padding: [2, 0, 2, 0]
+})
+
+ui.div(
+  {
+    text: "-f, --file",
+    width: 40,
+    padding: [0, 4, 0, 4]
+  },
+  {
+    text: "the file to load",
+    width: 25
+  },
+  {
+    text: "[required]",
+    align: 'right'
+  }
+)
+
+console.log(ui.toString())
+```
+
+## Layout DSL
+
+cliui exposes a simple layout DSL:
+
+If you create a single `ui.row`, passing a string rather than an
+object:
+
+* `\n`: characters will be interpreted as new rows.
+* `\t`: characters will be interpreted as new columns.
+* ` `: characters will be interpreted as padding.
+
+**as an example...**
+
+```js
+var ui = require('./')({
+  width: 60
+})
+
+ui.div(
+  'Usage: node ./bin/foo.js\n' +
+  '  <regex>\t  provide a regex\n' +
+  '  <glob>\t  provide a glob\t [required]'
+)
+
+console.log(ui.toString())
+```
+
+**will output:**
+
+```shell
+Usage: node ./bin/foo.js
+  <regex>  provide a regex
+  <glob>   provide a glob          [required]
+```
+
+## Methods
+
+```js
+cliui = require('cliui')
+```
+
+### cliui({width: integer})
+
+Specify the maximum width of the UI being generated.
+
+### cliui({wrap: boolean})
+
+Enable or disable the wrapping of text in a column.
+
+### cliui.div(column, column, column)
+
+Create a row with any number of columns, a column
+can either be a string, or an object with the following
+options:
+
+* **width:** the width of a column.
+* **align:** alignment, `right` or `center`.
+* **padding:** `[top, right, bottom, left]`.
+
+### cliui.span(column, column, column)
+
+Similar to `div`, except the next row will be appended without
+a new line being created.

+ 273 - 0
node_modules/cliui/index.js

@@ -0,0 +1,273 @@
+var wrap = require('wordwrap'),
+  align = {
+    right: require('right-align'),
+    center: require('center-align')
+  },
+  top = 0,
+  right = 1,
+  bottom = 2,
+  left = 3
+
+function UI (opts) {
+  this.width = opts.width
+  this.wrap = opts.wrap
+  this.rows = []
+}
+
+UI.prototype.span = function () {
+  var cols = this.div.apply(this, arguments)
+  cols.span = true
+}
+
+UI.prototype.div = function () {
+  if (arguments.length === 0) this.div('')
+  if (this.wrap && this._shouldApplyLayoutDSL.apply(this, arguments)) {
+    return this._applyLayoutDSL(arguments[0])
+  }
+
+  var cols = []
+
+  for (var i = 0, arg; (arg = arguments[i]) !== undefined; i++) {
+    if (typeof arg === 'string') cols.push(this._colFromString(arg))
+    else cols.push(arg)
+  }
+
+  this.rows.push(cols)
+  return cols
+}
+
+UI.prototype._shouldApplyLayoutDSL = function () {
+  return arguments.length === 1 && typeof arguments[0] === 'string' &&
+    /[\t\n]/.test(arguments[0])
+}
+
+UI.prototype._applyLayoutDSL = function (str) {
+  var _this = this,
+    rows = str.split('\n'),
+    leftColumnWidth = 0
+
+  // simple heuristic for layout, make sure the
+  // second column lines up along the left-hand.
+  // don't allow the first column to take up more
+  // than 50% of the screen.
+  rows.forEach(function (row) {
+    var columns = row.split('\t')
+    if (columns.length > 1 && columns[0].length > leftColumnWidth) {
+      leftColumnWidth = Math.min(
+        Math.floor(_this.width * 0.5),
+        columns[0].length
+      )
+    }
+  })
+
+  // generate a table:
+  //  replacing ' ' with padding calculations.
+  //  using the algorithmically generated width.
+  rows.forEach(function (row) {
+    var columns = row.split('\t')
+    _this.div.apply(_this, columns.map(function (r, i) {
+      return {
+        text: r.trim(),
+        padding: [0, r.match(/\s*$/)[0].length, 0, r.match(/^\s*/)[0].length],
+        width: (i === 0 && columns.length > 1) ? leftColumnWidth : undefined
+      }
+    }))
+  })
+
+  return this.rows[this.rows.length - 1]
+}
+
+UI.prototype._colFromString = function (str) {
+  return {
+    text: str
+  }
+}
+
+UI.prototype.toString = function () {
+  var _this = this,
+    lines = []
+
+  _this.rows.forEach(function (row, i) {
+    _this.rowToString(row, lines)
+  })
+
+  // don't display any lines with the
+  // hidden flag set.
+  lines = lines.filter(function (line) {
+    return !line.hidden
+  })
+
+  return lines.map(function (line) {
+    return line.text
+  }).join('\n')
+}
+
+UI.prototype.rowToString = function (row, lines) {
+  var _this = this,
+    paddingLeft,
+    rrows = this._rasterize(row),
+    str = '',
+    ts,
+    width,
+    wrapWidth
+
+  rrows.forEach(function (rrow, r) {
+    str = ''
+    rrow.forEach(function (col, c) {
+      ts = '' // temporary string used during alignment/padding.
+      width = row[c].width // the width with padding.
+      wrapWidth = _this._negatePadding(row[c]) // the width without padding.
+
+      for (var i = 0; i < Math.max(wrapWidth, col.length); i++) {
+        ts += col.charAt(i) || ' '
+      }
+
+      // align the string within its column.
+      if (row[c].align && row[c].align !== 'left' && _this.wrap) {
+        ts = align[row[c].align](ts.trim() + '\n' + new Array(wrapWidth + 1).join(' '))
+          .split('\n')[0]
+        if (ts.length < wrapWidth) ts += new Array(width - ts.length).join(' ')
+      }
+
+      // add left/right padding and print string.
+      paddingLeft = (row[c].padding || [0, 0, 0, 0])[left]
+      if (paddingLeft) str += new Array(row[c].padding[left] + 1).join(' ')
+      str += ts
+      if (row[c].padding && row[c].padding[right]) str += new Array(row[c].padding[right] + 1).join(' ')
+
+      // if prior row is span, try to render the
+      // current row on the prior line.
+      if (r === 0 && lines.length > 0) {
+        str = _this._renderInline(str, lines[lines.length - 1], paddingLeft)
+      }
+    })
+
+    // remove trailing whitespace.
+    lines.push({
+      text: str.replace(/ +$/, ''),
+      span: row.span
+    })
+  })
+
+  return lines
+}
+
+// if the full 'source' can render in
+// the target line, do so.
+UI.prototype._renderInline = function (source, previousLine, paddingLeft) {
+  var target = previousLine.text,
+    str = ''
+
+  if (!previousLine.span) return source
+
+  // if we're not applying wrapping logic,
+  // just always append to the span.
+  if (!this.wrap) {
+    previousLine.hidden = true
+    return target + source
+  }
+
+  for (var i = 0, tc, sc; i < Math.max(source.length, target.length); i++) {
+    tc = target.charAt(i) || ' '
+    sc = source.charAt(i) || ' '
+    // we tried to overwrite a character in the other string.
+    if (tc !== ' ' && sc !== ' ') return source
+    // there is not enough whitespace to maintain padding.
+    if (sc !== ' ' && i < paddingLeft + target.length) return source
+    // :thumbsup:
+    if (tc === ' ') str += sc
+    else str += tc
+  }
+
+  previousLine.hidden = true
+
+  return str
+}
+
+UI.prototype._rasterize = function (row) {
+  var _this = this,
+    i,
+    rrow,
+    rrows = [],
+    widths = this._columnWidths(row),
+    wrapped
+
+  // word wrap all columns, and create
+  // a data-structure that is easy to rasterize.
+  row.forEach(function (col, c) {
+    // leave room for left and right padding.
+    col.width = widths[c]
+    if (_this.wrap) wrapped = wrap.hard(_this._negatePadding(col))(col.text).split('\n')
+    else wrapped = col.text.split('\n')
+
+    // add top and bottom padding.
+    if (col.padding) {
+      for (i = 0; i < (col.padding[top] || 0); i++) wrapped.unshift('')
+      for (i = 0; i < (col.padding[bottom] || 0); i++) wrapped.push('')
+    }
+
+    wrapped.forEach(function (str, r) {
+      if (!rrows[r]) rrows.push([])
+
+      rrow = rrows[r]
+
+      for (var i = 0; i < c; i++) {
+        if (rrow[i] === undefined) rrow.push('')
+      }
+      rrow.push(str)
+    })
+  })
+
+  return rrows
+}
+
+UI.prototype._negatePadding = function (col) {
+  var wrapWidth = col.width
+  if (col.padding) wrapWidth -= (col.padding[left] || 0) + (col.padding[right] || 0)
+  return wrapWidth
+}
+
+UI.prototype._columnWidths = function (row) {
+  var _this = this,
+    widths = [],
+    unset = row.length,
+    unsetWidth,
+    remainingWidth = this.width
+
+  // column widths can be set in config.
+  row.forEach(function (col, i) {
+    if (col.width) {
+      unset--
+      widths[i] = col.width
+      remainingWidth -= col.width
+    } else {
+      widths[i] = undefined
+    }
+  })
+
+  // any unset widths should be calculated.
+  if (unset) unsetWidth = Math.floor(remainingWidth / unset)
+  widths.forEach(function (w, i) {
+    if (!_this.wrap) widths[i] = row[i].width || row[i].text.length
+    else if (w === undefined) widths[i] = Math.max(unsetWidth, _minWidth(row[i]))
+  })
+
+  return widths
+}
+
+// calculates the minimum width of
+// a column, based on padding preferences.
+function _minWidth (col) {
+  var padding = col.padding || []
+
+  return 1 + (padding[left] || 0) + (padding[right] || 0)
+}
+
+module.exports = function (opts) {
+  opts = opts || {}
+
+  return new UI({
+    width: (opts || {}).width || 80,
+    wrap: typeof opts.wrap === 'boolean' ? opts.wrap : true
+  })
+}

+ 1 - 0
node_modules/cliui/node_modules/wordwrap/.npmignore

@@ -0,0 +1 @@
+node_modules

+ 70 - 0
node_modules/cliui/node_modules/wordwrap/README.markdown

@@ -0,0 +1,70 @@
+wordwrap
+========
+
+Wrap your words.
+