Commit 3f0e93d4 authored by nano's avatar nano

fix lint

parent 24bbadbe
# http://editorconfig.org
root = true
[*]
charset = utf-8
indent_style = space
indent_size = 2
insert_final_newline = true
trim_trailing_whitespace = true
[*.md]
max_line_length = 0
trim_trailing_whitespace = false
# Indentation override
#[lib/**.js]
#[{package.json,.travis.yml}]
#[**/**.js]
\ No newline at end of file
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="ProjectCodeStyleSettingsManager">
<option name="PER_PROJECT_SETTINGS">
<value>
<DBN-PSQL>
<case-options enabled="false">
<option name="KEYWORD_CASE" value="lower" />
<option name="FUNCTION_CASE" value="lower" />
<option name="PARAMETER_CASE" value="lower" />
<option name="DATATYPE_CASE" value="lower" />
<option name="OBJECT_CASE" value="preserve" />
</case-options>
<formatting-settings enabled="false" />
</DBN-PSQL>
<DBN-SQL>
<case-options enabled="false">
<option name="KEYWORD_CASE" value="lower" />
<option name="FUNCTION_CASE" value="lower" />
<option name="PARAMETER_CASE" value="lower" />
<option name="DATATYPE_CASE" value="lower" />
<option name="OBJECT_CASE" value="preserve" />
</case-options>
<formatting-settings enabled="false">
<option name="STATEMENT_SPACING" value="one_line" />
<option name="CLAUSE_CHOP_DOWN" value="chop_down_if_statement_long" />
<option name="ITERATION_ELEMENTS_WRAPPING" value="chop_down_if_not_single" />
</formatting-settings>
</DBN-SQL>
<TypeScriptCodeStyleSettings>
<option name="FORCE_SEMICOLON_STYLE" value="true" />
<option name="USE_DOUBLE_QUOTES" value="false" />
<option name="FORCE_QUOTE_STYlE" value="true" />
</TypeScriptCodeStyleSettings>
<codeStyleSettings language="JavaScript">
<indentOptions>
<option name="INDENT_SIZE" value="2" />
<option name="CONTINUATION_INDENT_SIZE" value="2" />
<option name="TAB_SIZE" value="2" />
</indentOptions>
</codeStyleSettings>
<codeStyleSettings language="TypeScript">
<option name="RIGHT_MARGIN" value="100" />
<indentOptions>
<option name="INDENT_SIZE" value="2" />
<option name="CONTINUATION_INDENT_SIZE" value="2" />
<option name="TAB_SIZE" value="2" />
</indentOptions>
</codeStyleSettings>
</value>
</option>
<option name="USE_PER_PROJECT_SETTINGS" value="true" />
</component>
</project>
\ No newline at end of file
<component name="InspectionProjectProfileManager">
<profile version="1.0">
<option name="myName" value="Project Default" />
<inspection_tool class="TsLint" enabled="true" level="ERROR" enabled_by_default="true" />
</profile>
</component>
\ No newline at end of file
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="ProjectTasksOptions" suppressed-tasks="Babel" />
</project>
\ No newline at end of file
...@@ -2,13 +2,27 @@ ...@@ -2,13 +2,27 @@
<project version="4"> <project version="4">
<component name="ChangeListManager"> <component name="ChangeListManager">
<list default="true" id="f0cbce64-0ebc-4f60-8c2d-2fe9e214a8c0" name="Default" comment=""> <list default="true" id="f0cbce64-0ebc-4f60-8c2d-2fe9e214a8c0" name="Default" comment="">
<change type="NEW" beforePath="" afterPath="$PROJECT_DIR$/.editorconfig" />
<change type="NEW" beforePath="" afterPath="$PROJECT_DIR$/.idea/codeStyleSettings.xml" />
<change type="NEW" beforePath="" afterPath="$PROJECT_DIR$/.idea/inspectionProfiles/Project_Default.xml" />
<change type="NEW" beforePath="" afterPath="$PROJECT_DIR$/.idea/watcherTasks.xml" />
<change type="NEW" beforePath="" afterPath="$PROJECT_DIR$/tslint.json" />
<change type="DELETED" beforePath="$PROJECT_DIR$/src/checksum.ts" afterPath="" />
<change type="MODIFICATION" beforePath="$PROJECT_DIR$/.idea/workspace.xml" afterPath="$PROJECT_DIR$/.idea/workspace.xml" /> <change type="MODIFICATION" beforePath="$PROJECT_DIR$/.idea/workspace.xml" afterPath="$PROJECT_DIR$/.idea/workspace.xml" />
<change type="MODIFICATION" beforePath="$PROJECT_DIR$/Dockerfile" afterPath="$PROJECT_DIR$/Dockerfile" /> <change type="MODIFICATION" beforePath="$PROJECT_DIR$/package.json" afterPath="$PROJECT_DIR$/package.json" />
<change type="MODIFICATION" beforePath="$PROJECT_DIR$/package/main.ts" afterPath="$PROJECT_DIR$/package/main.ts" /> <change type="MODIFICATION" beforePath="$PROJECT_DIR$/package/main.ts" afterPath="$PROJECT_DIR$/package/main.ts" />
<change type="MODIFICATION" beforePath="$PROJECT_DIR$/package/utils.ts" afterPath="$PROJECT_DIR$/package/utils.ts" />
<change type="MODIFICATION" beforePath="$PROJECT_DIR$/server.ts" afterPath="$PROJECT_DIR$/server.ts" />
<change type="MODIFICATION" beforePath="$PROJECT_DIR$/src/inversify.config.ts" afterPath="$PROJECT_DIR$/src/inversify.config.ts" />
<change type="MODIFICATION" beforePath="$PROJECT_DIR$/src/models/App.ts" afterPath="$PROJECT_DIR$/src/models/App.ts" />
<change type="MODIFICATION" beforePath="$PROJECT_DIR$/src/models/Iridium.ts" afterPath="$PROJECT_DIR$/src/models/Iridium.ts" />
<change type="MODIFICATION" beforePath="$PROJECT_DIR$/src/models/Package.ts" afterPath="$PROJECT_DIR$/src/models/Package.ts" /> <change type="MODIFICATION" beforePath="$PROJECT_DIR$/src/models/Package.ts" afterPath="$PROJECT_DIR$/src/models/Package.ts" />
<change type="MODIFICATION" beforePath="$PROJECT_DIR$/src/routes/app.ts" afterPath="$PROJECT_DIR$/src/routes/app.ts" />
<change type="MODIFICATION" beforePath="$PROJECT_DIR$/src/routes/package.ts" afterPath="$PROJECT_DIR$/src/routes/package.ts" /> <change type="MODIFICATION" beforePath="$PROJECT_DIR$/src/routes/package.ts" afterPath="$PROJECT_DIR$/src/routes/package.ts" />
<change type="MODIFICATION" beforePath="$PROJECT_DIR$/src/routes/upload.ts" afterPath="$PROJECT_DIR$/src/routes/upload.ts" /> <change type="MODIFICATION" beforePath="$PROJECT_DIR$/src/routes/upload.ts" afterPath="$PROJECT_DIR$/src/routes/upload.ts" />
<change type="MODIFICATION" beforePath="$PROJECT_DIR$/src/types.ts" afterPath="$PROJECT_DIR$/src/types.ts" />
<change type="MODIFICATION" beforePath="$PROJECT_DIR$/src/utils.ts" afterPath="$PROJECT_DIR$/src/utils.ts" /> <change type="MODIFICATION" beforePath="$PROJECT_DIR$/src/utils.ts" afterPath="$PROJECT_DIR$/src/utils.ts" />
<change type="MODIFICATION" beforePath="$PROJECT_DIR$/yarn.lock" afterPath="$PROJECT_DIR$/yarn.lock" />
</list> </list>
<ignored path="mycard-console-backend.iws" /> <ignored path="mycard-console-backend.iws" />
<ignored path=".idea/workspace.xml" /> <ignored path=".idea/workspace.xml" />
...@@ -31,13 +45,47 @@ ...@@ -31,13 +45,47 @@
</component> </component>
<component name="FileEditorManager"> <component name="FileEditorManager">
<leaf> <leaf>
<file leaf-file-name="Package.ts" pinned="false" current-in-tab="false">
<entry file="file://$PROJECT_DIR$/src/models/Package.ts">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="-939">
<caret line="3" column="45" lean-forward="false" selection-start-line="3" selection-start-column="45" selection-end-line="3" selection-end-column="45" />
<folding />
</state>
</provider>
</entry>
</file>
<file leaf-file-name="Iridium.ts" pinned="false" current-in-tab="false">
<entry file="file://$PROJECT_DIR$/src/models/Iridium.ts">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="198">
<caret line="11" column="0" lean-forward="true" selection-start-line="11" selection-start-column="0" selection-end-line="11" selection-end-column="0" />
<folding>
<element signature="e#0#36#0" expanded="true" />
</folding>
</state>
</provider>
</entry>
</file>
<file leaf-file-name="app.ts" pinned="false" current-in-tab="false"> <file leaf-file-name="app.ts" pinned="false" current-in-tab="false">
<entry file="file://$PROJECT_DIR$/src/routes/app.ts"> <entry file="file://$PROJECT_DIR$/src/routes/app.ts">
<provider selected="true" editor-type-id="text-editor"> <provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="187"> <state relative-caret-position="936">
<caret line="23" column="20" lean-forward="false" selection-start-line="23" selection-start-column="20" selection-end-line="23" selection-end-column="20" /> <caret line="52" column="41" lean-forward="false" selection-start-line="52" selection-start-column="41" selection-end-line="52" selection-end-column="41" />
<folding>
<element signature="e#39#81#0" expanded="true" />
</folding>
</state>
</provider>
</entry>
</file>
<file leaf-file-name="package.ts" pinned="false" current-in-tab="false">
<entry file="file://$PROJECT_DIR$/src/routes/package.ts">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="-848">
<caret line="43" column="5" lean-forward="true" selection-start-line="43" selection-start-column="5" selection-end-line="43" selection-end-column="5" />
<folding> <folding>
<element signature="e#39#80#0" expanded="true" /> <element signature="e#39#74#0" expanded="true" />
</folding> </folding>
</state> </state>
</provider> </provider>
...@@ -46,8 +94,8 @@ ...@@ -46,8 +94,8 @@
<file leaf-file-name="upload.ts" pinned="false" current-in-tab="false"> <file leaf-file-name="upload.ts" pinned="false" current-in-tab="false">
<entry file="file://$PROJECT_DIR$/src/routes/upload.ts"> <entry file="file://$PROJECT_DIR$/src/routes/upload.ts">
<provider selected="true" editor-type-id="text-editor"> <provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="1454"> <state relative-caret-position="414">
<caret line="106" column="36" lean-forward="false" selection-start-line="106" selection-start-column="36" selection-end-line="106" selection-end-column="36" /> <caret line="23" column="43" lean-forward="false" selection-start-line="23" selection-start-column="43" selection-end-line="23" selection-end-column="43" />
<folding> <folding>
<element signature="e#0#28#0" expanded="true" /> <element signature="e#0#28#0" expanded="true" />
</folding> </folding>
...@@ -55,25 +103,44 @@ ...@@ -55,25 +103,44 @@
</provider> </provider>
</entry> </entry>
</file> </file>
<file leaf-file-name="package.ts" pinned="false" current-in-tab="true"> <file leaf-file-name="inversify.config.ts" pinned="false" current-in-tab="false">
<entry file="file://$PROJECT_DIR$/src/routes/package.ts"> <entry file="file://$PROJECT_DIR$/src/inversify.config.ts">
<provider selected="true" editor-type-id="text-editor"> <provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="178"> <state relative-caret-position="90">
<caret line="27" column="0" lean-forward="true" selection-start-line="27" selection-start-column="0" selection-end-line="27" selection-end-column="0" /> <caret line="5" column="0" lean-forward="true" selection-start-line="5" selection-start-column="0" selection-end-line="5" selection-end-column="0" />
<folding> <folding />
<element signature="e#39#73#0" expanded="true" />
</folding>
</state> </state>
</provider> </provider>
</entry> </entry>
</file> </file>
<file leaf-file-name="main.ts" pinned="false" current-in-tab="false"> <file leaf-file-name="types.ts" pinned="false" current-in-tab="false">
<entry file="file://$PROJECT_DIR$/package/main.ts"> <entry file="file://$PROJECT_DIR$/src/types.ts">
<provider selected="true" editor-type-id="text-editor"> <provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="513"> <state relative-caret-position="54">
<caret line="65" column="44" lean-forward="false" selection-start-line="65" selection-start-column="44" selection-end-line="65" selection-end-column="44" /> <caret line="3" column="0" lean-forward="true" selection-start-line="3" selection-start-column="0" selection-end-line="3" selection-end-column="0" />
<folding />
</state>
</provider>
</entry>
</file>
<file leaf-file-name="utils.ts" pinned="false" current-in-tab="false">
<entry file="file://$PROJECT_DIR$/src/utils.ts">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="180">
<caret line="10" column="26" lean-forward="false" selection-start-line="10" selection-start-column="26" selection-end-line="10" selection-end-column="26" />
<folding />
</state>
</provider>
</entry>
</file>
<file leaf-file-name="server.ts" pinned="false" current-in-tab="true">
<entry file="file://$PROJECT_DIR$/server.ts">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="-867">
<caret line="12" column="36" lean-forward="true" selection-start-line="12" selection-start-column="36" selection-end-line="12" selection-end-column="36" />
<folding> <folding>
<element signature="e#0#25#0" expanded="true" /> <element signature="e#77#104#0" expanded="true" />
<element signature="e#387#427#0" expanded="true" />
</folding> </folding>
</state> </state>
</provider> </provider>
...@@ -110,9 +177,10 @@ ...@@ -110,9 +177,10 @@
<find>update</find> <find>update</find>
<find>!</find> <find>!</find>
<find>dep</find> <find>dep</find>
<find>full</find>
<find>fullPath</find> <find>fullPath</find>
<find>onFile</find> <find>onFile</find>
<find>full</find>
<find>up</find>
</findStrings> </findStrings>
</component> </component>
<component name="Git.Settings"> <component name="Git.Settings">
...@@ -125,30 +193,33 @@ ...@@ -125,30 +193,33 @@
<option value="$PROJECT_DIR$/docker-compose.yml" /> <option value="$PROJECT_DIR$/docker-compose.yml" />
<option value="$PROJECT_DIR$/src/models/app.ts" /> <option value="$PROJECT_DIR$/src/models/app.ts" />
<option value="$PROJECT_DIR$/src/models/mongodb.js" /> <option value="$PROJECT_DIR$/src/models/mongodb.js" />
<option value="$PROJECT_DIR$/package.json" />
<option value="$PROJECT_DIR$/.gitignore" /> <option value="$PROJECT_DIR$/.gitignore" />
<option value="$PROJECT_DIR$/src/models/mongodb.ts" /> <option value="$PROJECT_DIR$/src/models/mongodb.ts" />
<option value="$PROJECT_DIR$/src/types.ts" />
<option value="$PROJECT_DIR$/src/models/inversify.config.ts" /> <option value="$PROJECT_DIR$/src/models/inversify.config.ts" />
<option value="$PROJECT_DIR$/src/inversify.config.ts" />
<option value="$PROJECT_DIR$/src/models/User.ts" /> <option value="$PROJECT_DIR$/src/models/User.ts" />
<option value="$PROJECT_DIR$/tsconfig.json" /> <option value="$PROJECT_DIR$/tsconfig.json" />
<option value="$PROJECT_DIR$/src/models/Iridium.ts" />
<option value="$PROJECT_DIR$/bin/run" /> <option value="$PROJECT_DIR$/bin/run" />
<option value="$PROJECT_DIR$/src/models/App.ts" />
<option value="$PROJECT_DIR$/.env" /> <option value="$PROJECT_DIR$/.env" />
<option value="$PROJECT_DIR$/src/routes/config.ts" /> <option value="$PROJECT_DIR$/src/routes/config.ts" />
<option value="$PROJECT_DIR$/src/routes/package.json" /> <option value="$PROJECT_DIR$/src/routes/package.json" />
<option value="$PROJECT_DIR$/config.ts" /> <option value="$PROJECT_DIR$/config.ts" />
<option value="$PROJECT_DIR$/views/update.hbs" /> <option value="$PROJECT_DIR$/views/update.hbs" />
<option value="$PROJECT_DIR$/server.ts" /> <option value="$PROJECT_DIR$/package.json" />
<option value="$PROJECT_DIR$/.tslint" />
<option value="$PROJECT_DIR$/package/main.ts" />
<option value="$PROJECT_DIR$/package/utils.ts" />
<option value="$PROJECT_DIR$/.editorconfig" />
<option value="$PROJECT_DIR$/src/routes/package.ts" />
<option value="$PROJECT_DIR$/tslint.json" />
<option value="$PROJECT_DIR$/src/routes/app.ts" /> <option value="$PROJECT_DIR$/src/routes/app.ts" />
<option value="$PROJECT_DIR$/src/routes/upload.ts" /> <option value="$PROJECT_DIR$/src/models/Iridium.ts" />
<option value="$PROJECT_DIR$/src/models/Package.ts" /> <option value="$PROJECT_DIR$/src/models/Package.ts" />
<option value="$PROJECT_DIR$/src/routes/upload.ts" />
<option value="$PROJECT_DIR$/src/models/App.ts" />
<option value="$PROJECT_DIR$/src/inversify.config.ts" />
<option value="$PROJECT_DIR$/src/types.ts" />
<option value="$PROJECT_DIR$/src/utils.ts" /> <option value="$PROJECT_DIR$/src/utils.ts" />
<option value="$PROJECT_DIR$/package/utils.ts" /> <option value="$PROJECT_DIR$/server.ts" />
<option value="$PROJECT_DIR$/package/main.ts" />
<option value="$PROJECT_DIR$/src/routes/package.ts" />
</list> </list>
</option> </option>
</component> </component>
...@@ -168,10 +239,10 @@ ...@@ -168,10 +239,10 @@
<handled-path value="$PROJECT_DIR$/node_modules" /> <handled-path value="$PROJECT_DIR$/node_modules" />
</component> </component>
<component name="ProjectFrameBounds"> <component name="ProjectFrameBounds">
<option name="x" value="413" /> <option name="x" value="173" />
<option name="y" value="95" /> <option name="y" value="46" />
<option name="width" value="1474" /> <option name="width" value="1474" />
<option name="height" value="777" /> <option name="height" value="849" />
</component> </component>
<component name="ProjectLevelVcsManager"> <component name="ProjectLevelVcsManager">
<ConfirmationsSetting value="2" id="Add" /> <ConfirmationsSetting value="2" id="Add" />
...@@ -205,38 +276,6 @@ ...@@ -205,38 +276,6 @@
<option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" /> <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
</PATH_ELEMENT> </PATH_ELEMENT>
</PATH> </PATH>
<PATH>
<PATH_ELEMENT>
<option name="myItemId" value="moecube-console" />
<option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.ProjectViewProjectNode" />
</PATH_ELEMENT>
<PATH_ELEMENT>
<option name="myItemId" value="moecube-console" />
<option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
</PATH_ELEMENT>
<PATH_ELEMENT>
<option name="myItemId" value="test" />
<option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
</PATH_ELEMENT>
<PATH_ELEMENT>
<option name="myItemId" value="upload" />
<option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
</PATH_ELEMENT>
</PATH>
<PATH>
<PATH_ELEMENT>
<option name="myItemId" value="moecube-console" />
<option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.ProjectViewProjectNode" />
</PATH_ELEMENT>
<PATH_ELEMENT>
<option name="myItemId" value="moecube-console" />
<option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
</PATH_ELEMENT>
<PATH_ELEMENT>
<option name="myItemId" value="test" />
<option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
</PATH_ELEMENT>
</PATH>
<PATH> <PATH>
<PATH_ELEMENT> <PATH_ELEMENT>
<option name="myItemId" value="moecube-console" /> <option name="myItemId" value="moecube-console" />
...@@ -265,7 +304,7 @@ ...@@ -265,7 +304,7 @@
<option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" /> <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
</PATH_ELEMENT> </PATH_ELEMENT>
<PATH_ELEMENT> <PATH_ELEMENT>
<option name="myItemId" value="routes" /> <option name="myItemId" value="models" />
<option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" /> <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
</PATH_ELEMENT> </PATH_ELEMENT>
</PATH> </PATH>
...@@ -279,7 +318,7 @@ ...@@ -279,7 +318,7 @@
<option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" /> <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
</PATH_ELEMENT> </PATH_ELEMENT>
<PATH_ELEMENT> <PATH_ELEMENT>
<option name="myItemId" value="package" /> <option name="myItemId" value="bin" />
<option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" /> <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
</PATH_ELEMENT> </PATH_ELEMENT>
</PATH> </PATH>
...@@ -293,10 +332,12 @@ ...@@ -293,10 +332,12 @@
<property name="js.eslint.eslintPackage" value="" /> <property name="js.eslint.eslintPackage" value="" />
<property name="js-jscs-nodeInterpreter" value="/usr/local/bin/node" /> <property name="js-jscs-nodeInterpreter" value="/usr/local/bin/node" />
<property name="HbShouldOpenHtmlAsHb" value="" /> <property name="HbShouldOpenHtmlAsHb" value="" />
<property name="settings.editor.selected.configurable" value="Settings.JavaScript" /> <property name="settings.editor.selected.configurable" value="preferences.sourceCode.TypeScript" />
<property name="JavaScriptPreferStrict" value="true" /> <property name="JavaScriptPreferStrict" value="true" />
<property name="JavaScriptWeakerCompletionTypeGuess" value="false" /> <property name="JavaScriptWeakerCompletionTypeGuess" value="false" />
<property name="SearchEverywhereHistoryKey" value="&#9;FILE&#9;file:///Users/vai/fun/moecube-console/src/routes/app.ts" /> <property name="SearchEverywhereHistoryKey" value="&#9;FILE&#9;file:///Users/vai/fun/moecube-console/src/routes/app.ts" />
<property name="node.js.path.for.package.tslint" value="project" />
<property name="node.js.selected.package.tslint" value="$PROJECT_DIR$/node_modules/tslint" />
</component> </component>
<component name="RecentsManager"> <component name="RecentsManager">
<key name="MoveFile.RECENT_KEYS"> <key name="MoveFile.RECENT_KEYS">
...@@ -434,12 +475,12 @@ ...@@ -434,12 +475,12 @@
<workItem from="1492482951965" duration="50292000" /> <workItem from="1492482951965" duration="50292000" />
<workItem from="1492655792313" duration="22867000" /> <workItem from="1492655792313" duration="22867000" />
<workItem from="1492741754173" duration="2869000" /> <workItem from="1492741754173" duration="2869000" />
<workItem from="1492753774887" duration="5690000" /> <workItem from="1492753774887" duration="8972000" />
</task> </task>
<servers /> <servers />
</component> </component>
<component name="TimeTrackingManager"> <component name="TimeTrackingManager">
<option name="totallyTimeSpent" value="114320000" /> <option name="totallyTimeSpent" value="117602000" />
</component> </component>
<component name="TodoView"> <component name="TodoView">
<todo-panel id="selected-file"> <todo-panel id="selected-file">
...@@ -451,19 +492,20 @@ ...@@ -451,19 +492,20 @@
</todo-panel> </todo-panel>
</component> </component>
<component name="ToolWindowManager"> <component name="ToolWindowManager">
<frame x="413" y="95" width="1474" height="777" extended-state="0" /> <frame x="173" y="46" width="1474" height="849" extended-state="0" />
<editor active="true" /> <editor active="true" />
<layout> <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.32990867" sideWeight="0.5" order="7" 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.24019271" sideWeight="0.49384886" 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="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="DB Browser" 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="false" content_ui="tabs" /> <window_info id="DB Browser" 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="false" content_ui="tabs" />
<window_info id="DB Execution Console" 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="DB Execution Console" 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="Event Log" 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="7" side_tool="true" 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.33" sideWeight="0.5" order="7" side_tool="true" 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.32990867" sideWeight="0.5" order="7" 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.32990867" sideWeight="0.5" order="7" side_tool="false" 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.32975295" sideWeight="0.5" order="2" side_tool="false" 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.32975295" 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.41215324" sideWeight="0.5" order="7" side_tool="false" content_ui="tabs" />
<window_info id="TypeScript" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="true" show_stripe_button="true" weight="0.32893" sideWeight="0.5" order="7" 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.24019271" sideWeight="0.49384886" order="0" 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.32876712" 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="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="true" show_stripe_button="true" weight="0.3591241" sideWeight="0.5" order="7" 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.23725356" sideWeight="0.50615114" order="2" side_tool="true" 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.23725356" sideWeight="0.50615114" order="2" 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="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" /> <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" />
...@@ -472,7 +514,6 @@ ...@@ -472,7 +514,6 @@
<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="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="Thumbnails" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.32990867" sideWeight="0.5" order="9" side_tool="false" content_ui="tabs" /> <window_info id="Thumbnails" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.32990867" sideWeight="0.5" order="9" side_tool="false" content_ui="tabs" />
<window_info id="Hierarchy" active="false" anchor="right" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="true" show_stripe_button="true" weight="0.091216214" sideWeight="0.5" order="2" side_tool="false" content_ui="combo" /> <window_info id="Hierarchy" active="false" anchor="right" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="true" show_stripe_button="true" weight="0.091216214" 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.32876712" 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" /> <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> </layout>
</component> </component>
...@@ -519,41 +560,6 @@ ...@@ -519,41 +560,6 @@
<watches-manager /> <watches-manager />
</component> </component>
<component name="editorHistoryManager"> <component name="editorHistoryManager">
<entry file="file://$PROJECT_DIR$/src/routes/app.ts">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="234">
<caret line="15" column="6" lean-forward="true" selection-start-line="15" selection-start-column="6" selection-end-line="15" selection-end-column="6" />
<folding>
<element signature="e#39#80#0" expanded="true" />
</folding>
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/src/models/Package.ts">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="414">
<caret line="23" column="20" lean-forward="true" selection-start-line="23" selection-start-column="20" selection-end-line="23" selection-end-column="20" />
<folding />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/src/routes/app.ts">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="198">
<caret line="13" column="3" lean-forward="true" selection-start-line="13" selection-start-column="3" selection-end-line="13" selection-end-column="3" />
<folding>
<element signature="e#39#80#0" expanded="true" />
</folding>
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/node_modules/iridium/dist/lib/Decorators.d.ts">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="720">
<caret line="45" column="24" lean-forward="false" selection-start-line="45" selection-start-column="24" selection-end-line="45" selection-end-column="24" />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/src/models/Iridium.ts"> <entry file="file://$PROJECT_DIR$/src/models/Iridium.ts">
<provider selected="true" editor-type-id="text-editor"> <provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="108"> <state relative-caret-position="108">
...@@ -573,9 +579,7 @@ ...@@ -573,9 +579,7 @@
<provider selected="true" editor-type-id="text-editor"> <provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="840"> <state relative-caret-position="840">
<caret line="44" column="29" lean-forward="false" selection-start-line="44" selection-start-column="29" selection-end-line="44" selection-end-column="29" /> <caret line="44" column="29" lean-forward="false" selection-start-line="44" selection-start-column="29" selection-end-line="44" selection-end-column="29" />
<folding> <folding />
<element signature="e#39#80#0" expanded="true" />
</folding>
</state> </state>
</provider> </provider>
</entry> </entry>
...@@ -592,9 +596,7 @@ ...@@ -592,9 +596,7 @@
<provider selected="true" editor-type-id="text-editor"> <provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="80"> <state relative-caret-position="80">
<caret line="6" column="0" lean-forward="false" selection-start-line="6" selection-start-column="0" selection-end-line="6" selection-end-column="0" /> <caret line="6" column="0" lean-forward="false" selection-start-line="6" selection-start-column="0" selection-end-line="6" selection-end-column="0" />
<folding> <folding />
<element signature="e#39#80#0" expanded="true" />
</folding>
</state> </state>
</provider> </provider>
</entry> </entry>
...@@ -629,13 +631,6 @@ ...@@ -629,13 +631,6 @@
</state> </state>
</provider> </provider>
</entry> </entry>
<entry file="file://$PROJECT_DIR$/src/types.ts">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="72">
<caret line="4" column="20" lean-forward="true" selection-start-line="4" selection-start-column="20" selection-end-line="4" selection-end-column="20" />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/src/models/mongodb.ts" /> <entry file="file://$PROJECT_DIR$/src/models/mongodb.ts" />
<entry file="file://$PROJECT_DIR$/node_modules/@types/koa/index.d.ts"> <entry file="file://$PROJECT_DIR$/node_modules/@types/koa/index.d.ts">
<provider selected="true" editor-type-id="text-editor"> <provider selected="true" editor-type-id="text-editor">
...@@ -665,13 +660,6 @@ ...@@ -665,13 +660,6 @@
</state> </state>
</provider> </provider>
</entry> </entry>
<entry file="file://$PROJECT_DIR$/bin/run">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="90">
<caret line="5" column="0" lean-forward="true" selection-start-line="5" selection-start-column="0" selection-end-line="5" selection-end-column="0" />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/node_modules/@types/fs-extra-promise/index.d.ts"> <entry file="file://$PROJECT_DIR$/node_modules/@types/fs-extra-promise/index.d.ts">
<provider selected="true" editor-type-id="text-editor"> <provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="172"> <state relative-caret-position="172">
...@@ -679,13 +667,6 @@ ...@@ -679,13 +667,6 @@
</state> </state>
</provider> </provider>
</entry> </entry>
<entry file="file://$PROJECT_DIR$/package.json">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="126">
<caret line="7" column="19" lean-forward="true" selection-start-line="7" selection-start-column="19" selection-end-line="7" selection-end-column="19" />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/node_modules/iridium/dist/test/Utilities.js"> <entry file="file://$PROJECT_DIR$/node_modules/iridium/dist/test/Utilities.js">
<provider selected="true" editor-type-id="text-editor"> <provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="324"> <state relative-caret-position="324">
...@@ -723,28 +704,6 @@ ...@@ -723,28 +704,6 @@
</provider> </provider>
</entry> </entry>
<entry file="file://$PROJECT_DIR$/src/routes/package.json" /> <entry file="file://$PROJECT_DIR$/src/routes/package.json" />
<entry file="file://$PROJECT_DIR$/src/models/Iridium.ts">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="0">
<caret line="0" column="7" lean-forward="false" selection-start-line="0" selection-start-column="7" selection-end-line="0" selection-end-column="7" />
<folding />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/src/inversify.config.ts">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="54">
<caret line="4" column="0" lean-forward="true" selection-start-line="4" selection-start-column="0" selection-end-line="4" selection-end-column="0" />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/server.ts">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="414">
<caret line="23" column="4" lean-forward="true" selection-start-line="23" selection-start-column="4" selection-end-line="23" selection-end-column="4" />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/tsconfig.json"> <entry file="file://$PROJECT_DIR$/tsconfig.json">
<provider selected="true" editor-type-id="text-editor"> <provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="144"> <state relative-caret-position="144">
...@@ -760,14 +719,6 @@ ...@@ -760,14 +719,6 @@
</state> </state>
</provider> </provider>
</entry> </entry>
<entry file="file://$PROJECT_DIR$/src/models/App.ts">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="25">
<caret line="37" column="10" lean-forward="false" selection-start-line="37" selection-start-column="10" selection-end-line="37" selection-end-column="10" />
<folding />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/config.ts"> <entry file="file://$PROJECT_DIR$/config.ts">
<provider selected="true" editor-type-id="text-editor"> <provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="90"> <state relative-caret-position="90">
...@@ -794,76 +745,171 @@ ...@@ -794,76 +745,171 @@
</state> </state>
</provider> </provider>
</entry> </entry>
<entry file="file://$PROJECT_DIR$/src/models/Package.ts"> <entry file="file://$PROJECT_DIR$/.env">
<provider selected="true" editor-type-id="text-editor"> <provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="174"> <state relative-caret-position="90">
<caret line="14" column="16" lean-forward="true" selection-start-line="14" selection-start-column="16" selection-end-line="14" selection-end-column="16" /> <caret line="5" column="0" lean-forward="false" selection-start-line="5" selection-start-column="0" selection-end-line="5" selection-end-column="0" />
<folding /> <folding />
</state> </state>
</provider> </provider>
</entry> </entry>
<entry file="file://$PROJECT_DIR$/.env"> <entry file="file://$PROJECT_DIR$/package.json">
<provider selected="true" editor-type-id="text-editor"> <provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="90"> <state relative-caret-position="225">
<caret line="5" column="0" lean-forward="false" selection-start-line="5" selection-start-column="0" selection-end-line="5" selection-end-column="0" /> <caret line="44" column="21" lean-forward="false" selection-start-line="44" selection-start-column="21" selection-end-line="44" selection-end-column="21" />
<folding /> <folding />
</state> </state>
</provider> </provider>
</entry> </entry>
<entry file="file://$PROJECT_DIR$/src/utils.ts"> <entry file="file://$PROJECT_DIR$/node_modules/@types/node/index.d.ts">
<provider selected="true" editor-type-id="text-editor"> <provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="324"> <state relative-caret-position="107">
<caret line="18" column="1" lean-forward="true" selection-start-line="18" selection-start-column="1" selection-end-line="18" selection-end-column="1" /> <caret line="1831" column="15" lean-forward="false" selection-start-line="1831" selection-start-column="15" selection-end-line="1831" selection-end-column="15" />
<folding /> <folding />
</state> </state>
</provider> </provider>
</entry> </entry>
<entry file="file://$PROJECT_DIR$/src/routes/upload.ts"> <entry file="file://$PROJECT_DIR$/bin/run">
<provider selected="true" editor-type-id="text-editor"> <provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="1454"> <state relative-caret-position="72">
<caret line="106" column="36" lean-forward="false" selection-start-line="106" selection-start-column="36" selection-end-line="106" selection-end-column="36" /> <caret line="4" column="40" lean-forward="true" selection-start-line="4" selection-start-column="40" selection-end-line="4" selection-end-column="40" />
<folding />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/package/main.ts">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="231">
<caret line="61" column="44" lean-forward="true" selection-start-line="61" selection-start-column="44" selection-end-line="61" selection-end-column="44" />
<folding> <folding>
<element signature="e#0#28#0" expanded="true" /> <element signature="e#0#29#0" expanded="true" />
</folding> </folding>
</state> </state>
</provider> </provider>
</entry> </entry>
<entry file="file://$PROJECT_DIR$/package/utils.ts"> <entry file="file://$PROJECT_DIR$/package/utils.ts">
<provider selected="true" editor-type-id="text-editor"> <provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="150"> <state relative-caret-position="72">
<caret line="15" column="43" lean-forward="false" selection-start-line="15" selection-start-column="43" selection-end-line="15" selection-end-column="43" /> <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> <folding>
<element signature="e#0#38#0" expanded="true" /> <element signature="e#0#39#0" expanded="true" />
</folding> </folding>
</state> </state>
</provider> </provider>
</entry> </entry>
<entry file="file://$PROJECT_DIR$/package/main.ts"> <entry file="file://$PROJECT_DIR$/src/checksum.ts">
<provider selected="true" editor-type-id="text-editor"> <provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="513"> <state relative-caret-position="306">
<caret line="65" column="44" lean-forward="false" selection-start-line="65" selection-start-column="44" selection-end-line="65" selection-end-column="44" /> <caret line="17" column="0" lean-forward="true" selection-start-line="17" selection-start-column="0" selection-end-line="17" selection-end-column="0" />
<folding> <folding />
<element signature="e#0#25#0" expanded="true" /> </state>
</folding> </provider>
</entry>
<entry file="file://$PROJECT_DIR$/tslint.json">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="126">
<caret line="7" column="19" lean-forward="true" selection-start-line="7" selection-start-column="19" selection-end-line="7" selection-end-column="19" />
<folding />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/.editorconfig">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="108">
<caret line="6" column="15" lean-forward="true" selection-start-line="6" selection-start-column="15" selection-end-line="6" selection-end-column="15" />
<folding />
</state> </state>
</provider> </provider>
</entry> </entry>
<entry file="file://$PROJECT_DIR$/src/routes/app.ts"> <entry file="file://$PROJECT_DIR$/src/routes/app.ts">
<provider selected="true" editor-type-id="text-editor"> <provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="187"> <state relative-caret-position="936">
<caret line="23" column="20" lean-forward="false" selection-start-line="23" selection-start-column="20" selection-end-line="23" selection-end-column="20" /> <caret line="52" column="41" lean-forward="false" selection-start-line="52" selection-start-column="41" selection-end-line="52" selection-end-column="41" />
<folding> <folding>
<element signature="e#39#80#0" expanded="true" /> <element signature="e#39#81#0" expanded="true" />
</folding> </folding>
</state> </state>
</provider> </provider>
</entry> </entry>
<entry file="file://$PROJECT_DIR$/src/routes/package.ts"> <entry file="file://$PROJECT_DIR$/src/routes/package.ts">
<provider selected="true" editor-type-id="text-editor"> <provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="178"> <state relative-caret-position="-848">
<caret line="27" column="0" lean-forward="true" selection-start-line="27" selection-start-column="0" selection-end-line="27" selection-end-column="0" /> <caret line="43" column="5" lean-forward="true" selection-start-line="43" selection-start-column="5" selection-end-line="43" selection-end-column="5" />
<folding>
<element signature="e#39#74#0" expanded="true" />
</folding>
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/src/routes/upload.ts">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="414">
<caret line="23" column="43" lean-forward="false" selection-start-line="23" selection-start-column="43" selection-end-line="23" selection-end-column="43" />
<folding>
<element signature="e#0#28#0" expanded="true" />
</folding>
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/src/models/App.ts">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="291">
<caret line="115" column="29" lean-forward="true" selection-start-line="115" selection-start-column="29" selection-end-line="115" selection-end-column="29" />
<folding>
<element signature="e#0#62#0" expanded="true" />
</folding>
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/src/models/Package.ts">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="-939">
<caret line="3" column="45" lean-forward="false" selection-start-line="3" selection-start-column="45" selection-end-line="3" selection-end-column="45" />
<folding />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/src/models/Iridium.ts">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="198">
<caret line="11" column="0" lean-forward="true" selection-start-line="11" selection-start-column="0" selection-end-line="11" selection-end-column="0" />
<folding>
<element signature="e#0#36#0" expanded="true" />
</folding>
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/src/inversify.config.ts">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="90">
<caret line="5" column="0" lean-forward="true" selection-start-line="5" selection-start-column="0" selection-end-line="5" selection-end-column="0" />
<folding />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/src/types.ts">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="54">
<caret line="3" column="0" lean-forward="true" selection-start-line="3" selection-start-column="0" selection-end-line="3" selection-end-column="0" />
<folding />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/src/utils.ts">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="180">
<caret line="10" column="26" lean-forward="false" selection-start-line="10" selection-start-column="26" selection-end-line="10" selection-end-column="26" />
<folding />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/server.ts">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="-867">
<caret line="12" column="36" lean-forward="true" selection-start-line="12" selection-start-column="36" selection-end-line="12" selection-end-column="36" />
<folding> <folding>
<element signature="e#39#73#0" expanded="true" /> <element signature="e#77#104#0" expanded="true" />
<element signature="e#387#427#0" expanded="true" />
</folding> </folding>
</state> </state>
</provider> </provider>
......
import * as _fs from 'fs' import * as path from 'path';
import * as path from 'path' import * as fs from 'fs-extra-promise';
import * as fs from 'fs-extra-promise' import {archive, archiveSingle, caculateSHA256, crawlPath, untar} from './utils';
import {mongodb} from '../src/models/iridium' import {Archive, File} from '../src/models/Package';
import {crawlPath, caculateSHA256, archive, archiveSingle, untar} from "./utils";
import {Archive, File} from "../src/models/Package";
import {file} from "tmp";
const upload_path = path.join(__dirname, '../test/upload') const upload_path = path.join(__dirname, '../test/upload');
const release_path = path.join(__dirname, '../test/release') const release_path = path.join(__dirname, '../test/release');
const app_path = path.join(__dirname, '../test/apps') const app_path = path.join(__dirname, '../test/apps');
export async function bundle(...args) { export async function bundle(...args) {
const [package_id] = args const [package_id] = args;
console.log(`package ${package_id}`); console.log(`package ${package_id}`);
await fs.ensureDirAsync(release_path) await fs.ensureDirAsync(release_path);
await fs.ensureDirAsync(app_path) await fs.ensureDirAsync(app_path);
await fs.ensureDirAsync(upload_path) await fs.ensureDirAsync(upload_path);
const archive_path = path.join(release_path, 'downloads', package_id) const archive_path = path.join(release_path, 'downloads', package_id);
const package_path = path.join(app_path, package_id); const package_path = path.join(app_path, package_id);
const uploadFile_path = path.join(upload_path, package_id) const uploadFile_path = path.join(upload_path, package_id);
const full_path = path.join(archive_path, 'full') const full_path = path.join(archive_path, 'full');
const sand_path = path.join(archive_path, 'sand') const sand_path = path.join(archive_path, 'sand');
await fs.ensureDirAsync(archive_path) await fs.ensureDirAsync(archive_path);
await fs.ensureDirAsync(package_path) await fs.ensureDirAsync(package_path);
await fs.ensureDirAsync(full_path) await fs.ensureDirAsync(full_path);
await fs.ensureDirAsync(sand_path) await fs.ensureDirAsync(sand_path);
// untar upload package // untar upload package
await untar(uploadFile_path, package_path) await untar(uploadFile_path, package_path);
let files = new Map<string, File>(); let files = new Map<string, File>();
let archives = new Map<string, Archive>(); let archives = new Map<string, Archive>();
...@@ -39,52 +36,51 @@ export async function bundle(...args) { ...@@ -39,52 +36,51 @@ export async function bundle(...args) {
await crawlPath(package_path, { await crawlPath(package_path, {
relative: true,
onFile: async (file) => { onFile: async (file) => {
let file_hash = await caculateSHA256(file) let file_hash = await caculateSHA256(file);
files.set(file, { files.set(file, {
path: path.relative(package_path,file), path: path.relative(package_path, file),
hash: file_hash, hash: file_hash,
size: (await fs.statAsync(file)).size size: (await fs.statAsync(file)).size
}) });
let sand_file = path.join(sand_path, `${file_hash}.tar.gz`) let sand_file = path.join(sand_path, `${file_hash}.tar.gz`);
await archiveSingle(sand_file, [file], package_path) await archiveSingle(sand_file, [file], package_path);
let sand_hash = await caculateSHA256(sand_file) let sand_hash = await caculateSHA256(sand_file);
archives.set(sand_file, { archives.set(sand_file, {
path: path.relative(sand_path, sand_file), path: path.relative(sand_path, sand_file),
hash: sand_hash, hash: sand_hash,
size: (await fs.statAsync(sand_file)).size size: (await fs.statAsync(sand_file)).size
}) });
await fs.renameAsync(sand_file, path.join(path.dirname(sand_file), `${sand_hash}.tar.gz`)) await fs.renameAsync(sand_file, path.join(path.dirname(sand_file), `${sand_hash}.tar.gz`));
}, },
onDir: async (_files, _path, depth) => { onDir: async (_files, _path, depth) => {
files.set(_path, { files.set(_path, {
path: path.relative(package_path, _path), path: path.relative(package_path, _path),
}) });
}, },
}) });
let filePath = path.join(full_path, `${package_id}.tar.gz`) let filePath = path.join(full_path, `${package_id}.tar.gz`);
await fs.removeAsync(filePath) await fs.removeAsync(filePath);
await archive(filePath, await fs.readdirAsync(package_path), package_path) await archive(filePath, await fs.readdirAsync(package_path), package_path);
const fullHash = await caculateSHA256(filePath) const fullHash = await caculateSHA256(filePath);
const fullSize = (await fs.statAsync(filePath)).size const fullSize = (await fs.statAsync(filePath)).size;
let fullPath = path.join(path.dirname(filePath), `${fullHash}.tar.gz`) let fullPath = path.join(path.dirname(filePath), `${fullHash}.tar.gz`);
await fs.renameAsync(filePath, fullPath) await fs.renameAsync(filePath, fullPath);
return { return {
files: Array.from(files.values()), files: Array.from(files.values()),
archives: Array.from(archives.values()), archives: Array.from(archives.values()),
fullSize, fullSize,
fullHash fullHash
} };
} }
import * as fs from 'fs-extra-promise' import * as fs from 'fs-extra-promise';
import * as _fs from 'fs' import * as _fs from 'fs';
import * as crypto from 'crypto' import * as crypto from 'crypto';
import * as child_process from 'child_process' import * as child_process from 'child_process';
// import * as tar from 'tar-stream'
// import * as fstream from 'fstream'
interface crawOptions { interface crawOptions {
onDir: (files: string | string[], _path: string, depth: number) => Promise<void>; onDir: (files: string | string[], _path: string, depth: number) => Promise<void>;
...@@ -12,32 +11,32 @@ interface crawOptions { ...@@ -12,32 +11,32 @@ interface crawOptions {
export async function crawlPath(_path, options: crawOptions, depth = 0) { export async function crawlPath(_path, options: crawOptions, depth = 0) {
if (await isDir(_path)) { if (await isDir(_path)) {
depth += 1 depth += 1;
const files = await fs.readdirAsync(_path) const files = await fs.readdirAsync(_path);
await options.onDir(files, _path, depth) await options.onDir(files, _path, depth);
if (files) { if (files) {
for (let fileName of files) { for (let fileName of files) {
const file = `${_path}/${fileName}` const file = `${_path}/${fileName}`;
if (await isDir(file)) { if (await isDir(file)) {
await crawlPath(file, options, depth) await crawlPath(file, options, depth);
} else if (await isFile(file)) { } else if (await isFile(file)) {
await options.onFile(file) await options.onFile(file);
} }
} }
} }
} else if (await isFile(_path)) { } else if (await isFile(_path)) {
await options.onFile(_path) await options.onFile(_path);
} }
} }
export async function isDir(path) { export async function isDir(path) {
return (await fs.lstatAsync(path)).isDirectory() return (await fs.lstatAsync(path)).isDirectory();
} }
export async function isFile(path) { export async function isFile(path) {
return (await fs.lstatAsync(path)).isFile() return (await fs.lstatAsync(path)).isFile();
} }
...@@ -54,14 +53,14 @@ export function archiveSingle(archive: string, files: string[], directory: strin ...@@ -54,14 +53,14 @@ export function archiveSingle(archive: string, files: string[], directory: strin
let child = child_process.spawn("tar", ["-czf", archive, '-P', '-C', directory].concat(files), {stdio: 'inherit'}); let child = child_process.spawn("tar", ["-czf", archive, '-P', '-C', directory].concat(files), {stdio: 'inherit'});
child.on('exit', (code) => { child.on('exit', (code) => {
if (code == 0) { if (code == 0) {
resolve() resolve();
} else { } else {
reject(code); reject(code);
} }
}); });
child.on('error', (error) => { child.on('error', (error) => {
reject(error); reject(error);
}) });
}); });
} }
...@@ -70,14 +69,14 @@ export function archive(archive: string, files: string[], directory: string): Pr ...@@ -70,14 +69,14 @@ export function archive(archive: string, files: string[], directory: string): Pr
let child = child_process.spawn("tar", ["-vczf", archive, '-C', directory].concat(files), {stdio: 'inherit'}); let child = child_process.spawn("tar", ["-vczf", archive, '-C', directory].concat(files), {stdio: 'inherit'});
child.on('exit', (code) => { child.on('exit', (code) => {
if (code == 0) { if (code == 0) {
resolve() resolve();
} else { } else {
reject(code); reject(code);
} }
}); });
child.on('error', (error) => { child.on('error', (error) => {
reject(error); reject(error);
}) });
}); });
} }
...@@ -86,14 +85,14 @@ export function untar(archive: string, directory: string): Promise<void> { ...@@ -86,14 +85,14 @@ export function untar(archive: string, directory: string): Promise<void> {
let child = child_process.spawn("tar", ["-xvf", archive, '-C', directory], {stdio: 'inherit'}); let child = child_process.spawn("tar", ["-xvf", archive, '-C', directory], {stdio: 'inherit'});
child.on('exit', (code) => { child.on('exit', (code) => {
if (code == 0) { if (code == 0) {
resolve() resolve();
} else { } else {
reject(code); reject(code);
} }
}); });
child.on('error', (error) => { child.on('error', (error) => {
reject(error); reject(error);
}) });
}); });
} }
...@@ -102,7 +101,7 @@ export function caculateSHA256(file: string): Promise<string> { ...@@ -102,7 +101,7 @@ export function caculateSHA256(file: string): Promise<string> {
let input = _fs.createReadStream(file); let input = _fs.createReadStream(file);
const hash = crypto.createHash("sha256"); const hash = crypto.createHash("sha256");
hash.on("error", (error: Error) => { hash.on("error", (error: Error) => {
reject(error) reject(error);
}); });
input.on("error", (error: Error) => { input.on("error", (error: Error) => {
reject(error); reject(error);
......
if(process.env.NODE_ENV !== 'production') { if (process.env.NODE_ENV !== 'production') {
require('dotenv').config() require('dotenv').config();
} }
import * as Koa from 'koa' import * as Koa from 'koa';
import * as log4js from 'log4js' import * as log4js from 'log4js';
import * as bodyParser from 'koa-bodyparser' import * as bodyParser from 'koa-bodyparser';
import * as hbs from 'koa-hbs' import * as hbs from 'koa-hbs';
import { mongodb } from './src/models/iridium' import {mongodb} from './src/models/iridium';
// import index from './routes/index'; // import index from './routes/index';
import upload from './src/routes/upload'; import upload from './src/routes/upload';
// import users from './src/routes/users'; // import users from './src/routes/users';
import package from './src/routes/package' import pack from './src/routes/package';
import apps from './src/routes/app'; import apps from './src/routes/app';
// import packages from './routes/packages'; // import packages from './routes/packages';
...@@ -20,48 +19,48 @@ const logger = log4js.getLogger(); ...@@ -20,48 +19,48 @@ const logger = log4js.getLogger();
const app = new Koa(); const app = new Koa();
app.use(hbs.middleware({ app.use(hbs.middleware({
viewPath: __dirname + '/views', viewPath: __dirname + '/views',
})); }));
app.use(async(ctx, next) => { app.use(async (ctx, next) => {
const start = new Date(); const start = new Date();
await next(); await next();
const ms = Date.now() - start.getTime(); const ms = Date.now() - start.getTime();
ctx.set('X-Response-Time', `${ms}ms`); ctx.set('X-Response-Time', `${ms}ms`);
}); });
// 错误处理 // 错误处理
app.use(async(ctx, next) => { app.use(async (ctx, next) => {
try { try {
await next(); await next();
} catch (err) { } catch (err) {
// will only respond with JSON // will only respond with JSON
console.log(err); console.log(err);
ctx.status = err.status || 500; ctx.status = err.status || 500;
ctx.body = { ctx.body = {
message: err.message, message: err.message,
}; };
if (err.errCode) { if (err.errCode) {
ctx.body['errCode'] = err.errCode; ctx.body['errCode'] = err.errCode;
} }
if (ctx.response.status >= 500) { if (ctx.response.status >= 500) {
logger.error(err); logger.error(err);
} else if (ctx.response.status >= 400) { } else if (ctx.response.status >= 400) {
logger.warn(err); logger.warn(err);
}
} }
}
}); });
// 跨域 // 跨域
app.use(async(ctx, next) => { app.use(async (ctx, next) => {
ctx.set('Access-Control-Allow-Origin', '*'); ctx.set('Access-Control-Allow-Origin', '*');
ctx.set('Access-Control-Allow-Methods', 'GET, POST, PUT, DELETE, PATCH'); ctx.set('Access-Control-Allow-Methods', 'GET, POST, PUT, DELETE, PATCH');
ctx.set('Access-Control-Allow-Headers', 'Content-Type, X-Requested-With',); ctx.set('Access-Control-Allow-Headers', 'Content-Type, X-Requested-With',);
if (ctx.method === 'OPTIONS') { if (ctx.method === 'OPTIONS') {
ctx.status = 204; ctx.status = 204;
} else { } else {
await next(); await next();
} }
}); });
...@@ -70,13 +69,13 @@ app.use(bodyParser()); ...@@ -70,13 +69,13 @@ app.use(bodyParser());
// app.use(users.routes()); // app.use(users.routes());
app.use(apps.routes()); app.use(apps.routes());
app.use(upload.routes()); app.use(upload.routes());
app.use(package.routes()); app.use(pack.routes());
// app.use(packages.routes()); // app.use(packages.routes());
mongodb.connect().then(() => { mongodb.connect().then(() => {
app.listen(8001, () => { app.listen(8001, () => {
console.log("app listening port 8001") console.log('app listening port 8001');
}); });
}) });
/**
* Created by zh99998 on 2017/4/21.
*/
export function renderChecksum(files: { path: string, hash?: string }[]) {
return files.map(({ path, hash }) => `${hash || ''} ${path}`).join('\n');
}
// 用法示例
// const example = [
// { path: 'README', hash: '11111111111111111111111111111111', size: 1 },
// { path: 'main.exe', hash: '22222222222222222222222222222222', size: 2 },
// { path: 'assets' }, // 对于目录,置 hash 为空 (undefiend 或 不存在)
// { path: 'assets/1.png', hash: '33333333333333333333333333333333', size: 3 }
// ];
//
// console.log(renderChecksum(example));
import { Container } from 'inversify' import {Container} from 'inversify';
import TYPES from './types'
const container = new Container() const container = new Container();
export default container export default container;
\ No newline at end of file
import {Core, Model, Instance, Collection, Index, Property, ObjectID} from 'iridium' import {Collection, Index, Instance, Property} from 'iridium';
import {handleImg} from '../utils' import {handleImg} from '../utils';
interface I18n<T> { interface I18n<T> {
[locale: string]: T; [locale: string]: T;
...@@ -9,7 +9,7 @@ interface Platform<T> { ...@@ -9,7 +9,7 @@ interface Platform<T> {
[platform: string]: T; [platform: string]: T;
} }
interface Package{ interface Package {
id: string; id: string;
name: string; name: string;
platforms: Platform<string[]>; platforms: Platform<string[]>;
...@@ -27,21 +27,21 @@ interface File { ...@@ -27,21 +27,21 @@ interface File {
export interface App { export interface App {
id: string; id: string;
name?: I18n<string>; name?: I18n<string>;
description?: I18n<string> description?: I18n<string>;
developers?: I18n<[{ name: string, url: string }]> developers?: I18n<[{ name: string, url: string }]>;
publishers?: I18n<[{ name: string, url: string }]> publishers?: I18n<[{ name: string, url: string }]>;
released_at?: string; released_at?: string;
category?: string; category?: string;
parent?: string; parent?: string;
tag?: string[]; tag?: string[];
dependencies?: Platform<string[]>; dependencies?: Platform<string[]>;
references?: Platform<string[]>; references?: Platform<string[]>;
homepage?: string; homepage?: string;
locales?: string[]; locales?: string[];
actions?: Platform<{[key: string]: {execuate: string, args: string[], env: {[key: string]: string}}}>; actions?: Platform<{ [key: string]: { execuate: string, args: string[], env: { [key: string]: string } } }>;
files?: {[key: string]: { sync: boolean}} files?: { [key: string]: { sync: boolean } };
version?: Platform<string>; version?: Platform<string>;
news?: I18n<{title: string, url: string, image: string}[]>; news?: I18n<{ title: string, url: string, image: string }[]>;
conference?: string; conference?: string;
data?: any; data?: any;
icon?: string; icon?: string;
...@@ -52,18 +52,18 @@ export interface App { ...@@ -52,18 +52,18 @@ export interface App {
} }
@Collection('apps') @Collection('apps')
@Index({id: 1}, { unique: true }) @Index({id: 1}, {unique: true})
export class AppSchema extends Instance<App, AppSchema> implements App { export class AppSchema extends Instance<App, AppSchema> implements App {
@Property(String, true) @Property(String, true)
id: string; id: string;
@Property(Object, false) @Property(Object, false)
name?: I18n<string>; name?: I18n<string>;
@Property(Object, false) @Property(Object, false)
description?: I18n<string> description?: I18n<string>;
@Property(Object, false) @Property(Object, false)
developers?: I18n<[{ name: string, url: string }]> developers?: I18n<[{ name: string, url: string }]>;
@Property(Object, false) @Property(Object, false)
publishers?: I18n<[{ name: string, url: string }]> publishers?: I18n<[{ name: string, url: string }]>;
@Property(String, false) @Property(String, false)
released_at?: string; released_at?: string;
@Property(String, false) @Property(String, false)
...@@ -71,7 +71,7 @@ export class AppSchema extends Instance<App, AppSchema> implements App { ...@@ -71,7 +71,7 @@ export class AppSchema extends Instance<App, AppSchema> implements App {
@Property(String, false) @Property(String, false)
parent?: string; parent?: string;
@Property(Array, false) @Property(Array, false)
tag?: string[]; tag?: string[];
@Property(Object, false) @Property(Object, false)
dependencies?: Platform<string[]>; dependencies?: Platform<string[]>;
@Property(Object, false) @Property(Object, false)
...@@ -81,13 +81,13 @@ export class AppSchema extends Instance<App, AppSchema> implements App { ...@@ -81,13 +81,13 @@ export class AppSchema extends Instance<App, AppSchema> implements App {
@Property(Array, false) @Property(Array, false)
locales?: string[]; locales?: string[];
@Property(Object, false) @Property(Object, false)
actions?: Platform<{[key: string]: {execuate: string, args: string[], env: {[key: string]: string}}}>; actions?: Platform<{ [key: string]: { execuate: string, args: string[], env: { [key: string]: string } } }>;
@Property(Object, false) @Property(Object, false)
files?: {[key: string]: { sync: boolean}} files?: { [key: string]: { sync: boolean } };
@Property(Object, false) @Property(Object, false)
version?: Platform<string>; version?: Platform<string>;
@Property(Object, false) @Property(Object, false)
news?: I18n<{title: string, url: string, image: string}[]>; news?: I18n<{ title: string, url: string, image: string }[]>;
@Property(String, false) @Property(String, false)
conference?: string; conference?: string;
@Property(Object, false) @Property(Object, false)
...@@ -103,23 +103,23 @@ export class AppSchema extends Instance<App, AppSchema> implements App { ...@@ -103,23 +103,23 @@ export class AppSchema extends Instance<App, AppSchema> implements App {
@Property(Date, false) @Property(Date, false)
created_at: Date; created_at: Date;
static onCreating(app: App){ static onCreating(app: App) {
app.created_at = new Date() app.created_at = new Date();
} }
handleUpdate(data: App) { handleUpdate(data: App) {
Object.assign(this, data) Object.assign(this, data);
} }
toJSON() { toJSON() {
this.Convert() this.Convert();
return JSON.parse(this) return {...<Object>this};
} }
Convert() { Convert() {
this.icon = handleImg(this.icon), this.icon = handleImg(this.icon),
this.cover = handleImg(this.cover), this.cover = handleImg(this.cover),
this.background = handleImg(this.background) this.background = handleImg(this.background);
} }
} }
import {Core, Model} from "iridium"; import {Core, Model} from 'iridium';
import {App, AppSchema} from "./App"; import {App, AppSchema} from './App';
import {Package, PackageSchema} from "./Package"; import {Package, PackageSchema} from './Package';
export class MongoDB extends Core { export class MongoDB extends Core {
Apps = new Model<App, AppSchema>(this, AppSchema) Apps = new Model<App, AppSchema>(this, AppSchema);
Packages = new Model<Package, PackageSchema>(this,PackageSchema) Packages = new Model<Package, PackageSchema>(this, PackageSchema);
} }
export const mongodb = new MongoDB(process.env["MONGODB"]) export const mongodb = new MongoDB(process.env['MONGODB']);
import {Core, Model, Instance, Collection, Index, Property, ObjectID} from 'iridium' import {Collection, Index, Instance, Property} from 'iridium';
type Locale = 'zh-CN' | 'en-US' | 'ja-JP' type Locale = 'zh-CN' | 'en-US' | 'ja-JP';
type Platform = 'win32' | 'linux' | 'darwin' type Platform = 'win32' | 'linux' | 'darwin';
export interface Action { export interface Action {
execute: string; execute: string;
...@@ -26,8 +26,8 @@ export interface Package { ...@@ -26,8 +26,8 @@ export interface Package {
id: string; id: string;
name: string; name: string;
appId: string; appId: string;
fullSize: number; fullSize?: number;
fullHash: string; fullHash?: string;
version: string; version: string;
status: string; status: string;
type: string; type: string;
...@@ -38,8 +38,8 @@ export interface Package { ...@@ -38,8 +38,8 @@ export interface Package {
} }
@Collection("packages") @Collection('packages')
@Index({id: 1}, { unique: true }) @Index({id: 1}, {unique: true})
export class PackageSchema extends Instance<Package, PackageSchema> implements Package { export class PackageSchema extends Instance<Package, PackageSchema> implements Package {
@Property(String, true) @Property(String, true)
id: string; id: string;
...@@ -66,11 +66,11 @@ export class PackageSchema extends Instance<Package, PackageSchema> implements P ...@@ -66,11 +66,11 @@ export class PackageSchema extends Instance<Package, PackageSchema> implements P
@Property(Array, false) @Property(Array, false)
archives: Archive[]; archives: Archive[];
static onCreating(pack: Package){ static onCreating(pack: Package) {
pack.status = pack.status || 'init' pack.status = pack.status || 'init';
} }
handleUpdate(data: Package) { handleUpdate(data: Package) {
Object.assign(this, data) Object.assign(this, data);
} }
} }
\ No newline at end of file
import Router = require('koa-router'); import Router = require('koa-router');
import {mongodb} from '../models/iridium' import {mongodb} from '../models/iridium';
import {App, AppSchema} from "../models/App"; import {App, AppSchema} from '../models/App';
import {Context} from "koa"; import {Context} from 'koa';
const router = new Router(); const router = new Router();
// router.get('/apps', async (ctx: Context, next) => { router.get('/v2/apps', async (ctx: Context, next) => {
// ctx.body = await mongodb.Apps.find({}) ctx.body = await mongodb.Apps.find({}).toArray();
// .map(async app => { });
// if(Array.isArray(app.packages) && app.packages.length > 0){
// app.packages = await Promise.all(app.packages.map(async p => {
// try {
// return await mongodb.Packages.findOne({_id: toObjectID(p)})
// } catch (e) {
// console.log(p)
// }
// }))
// }
// return app
// })
// });
router.get('/v2/apps', async(ctx: Context, next) => {
ctx.body = await mongodb.Apps.find({}).toArray()
})
router.get('/v1/apps', async (ctx: Context, next) => { router.get('/v1/apps', async (ctx: Context, next) => {
let payload = ctx.request.query let payload = ctx.request.query;
if((!payload.author && !payload.admin)) { if ((!payload.author && !payload.admin)) {
ctx.throw(400, 'params error') ctx.throw(400, 'params error');
} }
let apps = {} let apps = {};
if(payload.admin == 'true') { if (payload.admin == 'true') {
apps = await mongodb.Apps.find({}).toArray() apps = await mongodb.Apps.find({}).toArray();
} else { } else {
apps = await mongodb.Apps.find({author: payload.author}).toArray() apps = await mongodb.Apps.find({author: payload.author}).toArray();
} }
ctx.body = apps ctx.body = apps;
}) });
router.post('/v1/app/:id', async (ctx: Context, next) => { router.post('/v1/app/:id', async (ctx: Context, next) => {
let payload = ctx.request.body let payload = ctx.request.body;
if(!payload.id) { if (!payload.id) {
ctx.throw(400, 'params error') ctx.throw(400, 'params error');
} }
if (ctx.params.id !== payload.id) { if (ctx.params.id !== payload.id) {
ctx.throw(400, "App is not same") ctx.throw(400, 'App is not same');
} }
let exists = await mongodb.Apps.findOne({id: payload.id}); let exists = await mongodb.Apps.findOne({id: payload.id});
if (exists) { if (exists) {
ctx.throw(400, "App is exists") ctx.throw(400, 'App is exists');
} }
try { try {
ctx.body = await mongodb.Apps.insert(payload) ctx.body = await mongodb.Apps.insert(payload);
} catch (e) { } catch (e) {
ctx.throw(400, e) ctx.throw(400, e);
} }
}) });
router.patch('/v1/app/:id', async (ctx: Context, next) => { router.patch('/v1/app/:id', async (ctx: Context, next) => {
let _app: App = ctx.request.body let _app: App = ctx.request.body;
let app: AppSchema | null = await mongodb.Apps.findOne({id: ctx.params.id}); let app: AppSchema | null = await mongodb.Apps.findOne({id: ctx.params.id});
if (!app) { if (!app) {
ctx.throw(400, `App ${ctx.params.id} Not Found `); ctx.throw(400, `App ${ctx.params.id} Not Found `);
} }
if (!ctx.request.body.id || ctx.request.body.id !== app!.id) { if (!ctx.request.body.id || ctx.request.body.id !== app!.id) {
ctx.throw(400, `Can not change AppID`) ctx.throw(400, `Can not change AppID`);
} }
app!.handleUpdate(_app) app!.handleUpdate(_app);
ctx.body = await app!.save() ctx.body = await app!.save();
}) });
export default router export default router;
\ No newline at end of file
import Router = require('koa-router'); import Router = require('koa-router');
import {toObjectID} from 'iridium' import {toObjectID} from 'iridium';
import {mongodb} from '../models/iridium' import {mongodb} from '../models/iridium';
import {Context} from "koa"; import {Context} from 'koa';
import config from '../../config' import config from '../../config';
import {Archive, Package} from "../models/Package"; import {Archive, Package} from '../models/Package';
import {renderChecksum} from "../utils"; import {renderChecksum} from '../utils';
const router = new Router(); const router = new Router();
router.get('/v2/packages', async (ctx: Context, next) => { router.get('/v2/packages', async (ctx: Context, next) => {
if (!ctx.request.query.appId) { if (!ctx.request.query.appId) {
ctx.throw(400, "appId must be required!") ctx.throw(400, 'appId must be required!');
} }
let packs = await mongodb.Packages.find({appId: ctx.request.query.appId, status: 'uploaded'}).toArray() let packs = await mongodb.Packages.find({
appId: ctx.request.query.appId,
status: 'uploaded'
}).toArray();
ctx.body = { ctx.body = {
[ctx.request.query.appId]: packs [ctx.request.query.appId]: packs
} };
}) });
router.get('/v2/package/:id/checksum', async(ctx: Context, next) => { router.get('/v2/package/:id/checksum', async (ctx: Context, next) => {
let pack = await mongodb.Packages.findOne({id: ctx.params.id, status: 'uploaded'}) let pack = await mongodb.Packages.findOne({id: ctx.params.id, status: 'uploaded'});
if(!pack) { if (!pack) {
return ctx.throw(400, 'pack error') return ctx.throw(400, 'pack error');
} }
ctx.body = renderChecksum(pack.files) ctx.body = renderChecksum(pack.files);
}) });
router.get('/v2/package/:id/meta', async(ctx: Context, next) => { router.get('/v2/package/:id/meta', async (ctx: Context, next) => {
let pack = await mongodb.Packages.findOne({id: ctx.params.id, status: 'uploaded'}) let pack = await mongodb.Packages.findOne({id: ctx.params.id, status: 'uploaded'});
if(!pack) { if (!pack) {
return ctx.throw(400, 'pack error') return ctx.throw(400, 'pack error');
} }
await ctx['render']('update', {files: { await ctx['render']('update', {
name: pack.id, files: {
size: pack.fullSize, name: pack.id,
hash: pack.fullHash size: pack.fullSize,
}}) hash: pack.fullHash
}) }
});
});
router.post('/v2/package/:id/update', async (ctx: Context, next) => { router.post('/v2/package/:id/update', async (ctx: Context, next) => {
const package_id = ctx.params.id const package_id = ctx.params.id;
const download_path = config.download_path const request_overhead = 1024 * 1024;
const request_overhead = 1024 * 1024 let sandSize = ctx.request.body.length * request_overhead;
let sandSize = ctx.request.body.length * request_overhead
let pack = await mongodb.Packages.findOne({id: package_id, status: 'uploaded'}) let pack = await mongodb.Packages.findOne({id: package_id, status: 'uploaded'});
let {fullSize, fullPath} = pack! if (!pack) {
return ctx.throw(400, 'pack not exists');
}
let {fullSize} = pack;
let files let files;
let fullFiles = new Map<string, Archive>() let fullFiles = new Map<string, Archive>();
pack!.archives.map((f) => { pack.archives.map((f) => {
fullFiles.set(f.path, f) fullFiles.set(f.path, f);
}) });
if(fullSize > sandSize) { if (fullSize > sandSize) {
files = ctx.request.body.map((_file) => { files = ctx.request.body.map((_file) => {
const file: Archive|undefined = fullFiles.get(_file) const file: Archive | undefined = fullFiles.get(_file);
if(!file) { if (!file) {
// return ctx.throw(400, '');
} }
sandSize += file.size sandSize += file.size;
return { return {
path: file.path, path: file.path,
size: file.size, size: file.size,
hash: file.hash hash: file.hash
} };
}) });
} }
if( sandSize <= fullSize ) { if (sandSize <= fullSize) {
files = [{ files = [{
path: pack.id, path: pack.id,
size: pack.fullSize, size: pack.fullSize,
hash: pack.fullHash hash: pack.fullHash
}] }];
} }
await ctx['render']('update', {files}) await ctx['render']('update', {files});
}) });
router.get('/v1/packages', async (ctx: Context, next) => { router.get('/v1/packages', async (ctx: Context, next) => {
if (!ctx.request.query.appId) { if (!ctx.request.query.appId) {
ctx.throw(400, "appId must be required!") ctx.throw(400, 'appId must be required!');
} }
let packs = await mongodb.Packages.find({appId: ctx.request.query.appId, type: 'editing'}).toArray() let packs = await mongodb.Packages.find({
appId: ctx.request.query.appId,
type: 'editing'
}).toArray();
ctx.body = { ctx.body = {
[ctx.request.query.appId]: packs [ctx.request.query.appId]: packs
} };
}) });
router.post('/v1/package', async (ctx: Context, next) => { router.post('/v1/package', async (ctx: Context, next) => {
const _p: Package = ctx.request.body const _p: Package = ctx.request.body;
if (!_p.id) { if (!_p.id) {
ctx.throw(400, `id 参数缺失:${_p.id}`) ctx.throw(400, `id 参数缺失:${_p.id}`);
} }
if (!_p.platforms || _p.platforms.length == 0) { if (!_p.platforms || _p.platforms.length == 0) {
ctx.throw(400, `请填写支持的平台:${_p.id}`) ctx.throw(400, `请填写支持的平台:${_p.id}`);
} } else if (!_p.locales || _p.locales.length == 0) {
else if (!_p.locales || _p.locales.length == 0) { ctx.throw(400, `请填写支持的语言:${_p.id}`);
ctx.throw(400, `请填写支持的语言:${_p.id}`) } else if (!_p.version) {
} ctx.throw(400, `请填写版本号:${_p.id}`);
else if (!_p.version) {
ctx.throw(400, `请填写版本号:${_p.id}`)
} }
let exists_platform = await mongodb.Packages.find({ id: {$ne: _p.id}, appId: _p.appId, platforms: { $in: _p.platforms }, type: 'editing' }).count() let existsPlatform = await mongodb.Packages.find({
if(exists_platform) { id: {$ne: _p.id},
console.log(exists_platform) appId: _p.appId,
ctx.throw(400, '平台已存在') platforms: {$in: _p.platforms},
type: 'editing'
}).count();
if (existsPlatform) {
console.log(existsPlatform);
ctx.throw(400, '平台已存在');
} }
let exists_locales = await mongodb.Packages.find({ id: {$ne: _p.id}, appId: _p.appId, locales: { $in: _p.locales }, type: 'editing' }).count() let existsLocales = await mongodb.Packages.find({
if(exists_locales) { id: {$ne: _p.id},
console.log(exists_locales) appId: _p.appId,
ctx.throw(400, '语言已存在') locales: {$in: _p.locales},
type: 'editing'
}).count();
if (existsLocales) {
console.log(existsLocales);
ctx.throw(400, '语言已存在');
} }
await mongodb.Packages.update({id: _p.id}, {$set: { type: 'edited' }}, {multi: true}) await mongodb.Packages.update({id: _p.id}, {$set: {type: 'edited'}}, {multi: true});
let _pack: Package = { let _pack: Package = {
id: _p.id, id: _p.id,
...@@ -134,59 +152,73 @@ router.post('/v1/package', async (ctx: Context, next) => { ...@@ -134,59 +152,73 @@ router.post('/v1/package', async (ctx: Context, next) => {
platforms: _p.platforms, platforms: _p.platforms,
status: 'init', status: 'init',
type: 'editing' type: 'editing'
} };
ctx.body = await mongodb.Packages.insert(_pack) ctx.body = await mongodb.Packages.insert(_pack);
}) });
router.patch('/v1/package', async (ctx: Context, next) => { router.patch('/v1/package', async (ctx: Context, next) => {
const _p: Package = ctx.request.body const _p = ctx.request.body;
const p = await mongodb.Packages.findOne({_id: toObjectID(_p._id)}) const p = await mongodb.Packages.findOne({_id: toObjectID(_p._id)});
if (!p) {
return ctx.throw(400, 'pack not exists');
}
if (!_p.id) { if (!_p.id) {
ctx.throw(400, `id 参数缺失:${_p.id}`) ctx.throw(400, `id 参数缺失:${_p.id}`);
} }
if (!_p.platforms || _p.platforms.length == 0) { if (!_p.platforms || _p.platforms.length == 0) {
ctx.throw(400, `请填写支持的平台:${_p.id}`) ctx.throw(400, `请填写支持的平台:${_p.id}`);
} } else if (!_p.locales || _p.locales.length == 0) {
else if (!_p.locales || _p.locales.length == 0) { ctx.throw(400, `请填写支持的语言:${_p.id}`);
ctx.throw(400, `请填写支持的语言:${_p.id}`) } else if (!_p.version) {
} ctx.throw(400, `请填写版本号:${_p.id}`);
else if (!_p.version) {
ctx.throw(400, `请填写版本号:${_p.id}`)
} }
let exists_platform = await mongodb.Packages.find({ id: {$ne: _p.id}, appId: _p.appId, platforms: { $in: _p.platforms }, type: 'editing' }).count() let existsPlatform = await mongodb.Packages.find({
if(exists_platform) { id: {$ne: _p.id},
console.log(exists_platform) appId: _p.appId,
ctx.throw(400, '平台已存在') platforms: {$in: _p.platforms},
type: 'editing'
}).count();
if (existsPlatform) {
console.log(existsPlatform);
ctx.throw(400, '平台已存在');
} }
let exists_locales = await mongodb.Packages.find({ id: {$ne: _p.id}, appId: _p.appId, locales: { $in: _p.locales }, type: 'editing' }).count() let existsLocales = await mongodb.Packages.find({
if(exists_locales) { id: {$ne: _p.id},
console.log(exists_locales) appId: _p.appId,
ctx.throw(400, '语言已存在') locales: {$in: _p.locales},
type: 'editing'
}).count();
if (existsLocales) {
console.log(existsLocales);
ctx.throw(400, '语言已存在');
} }
if (p.status == 'init') { if (p.status == 'init') {
p.handleUpdate(_p) p.handleUpdate(_p);
ctx.body = await p.save() ctx.body = await p.save();
} else { } else {
ctx.throw(400, `非法操作:${_p.id}`) ctx.throw(400, `非法操作:${_p.id}`);
} }
}) });
router.delete('/v1/package', async(ctx: Context, next) => { router.delete('/v1/package', async (ctx: Context, next) => {
const _p: Package = ctx.request.body const _p = ctx.request.body;
const p = await mongodb.Packages.findOne({_id: toObjectID(_p._id)}) const p = await mongodb.Packages.findOne({_id: toObjectID(_p._id)});
if (!p) {
return ctx.throw(400, 'pack not exists');
}
p.type = 'edited' p.type = 'edited';
p.status = 'delete' p.status = 'delete';
await p.save() await p.save();
ctx.body = { ctx.body = {
message: 'delete successful' message: 'delete successful'
} };
}) });
export default router export default router;
\ No newline at end of file
...@@ -4,13 +4,13 @@ import * as busboy from 'async-busboy'; ...@@ -4,13 +4,13 @@ import * as busboy from 'async-busboy';
import * as mime from 'mime'; import * as mime from 'mime';
import * as uuid from 'uuid'; import * as uuid from 'uuid';
import * as Client from 'aliyun-oss-upload-stream'; import * as Client from 'aliyun-oss-upload-stream';
import * as fs from 'fs-extra-promise' import * as fs from 'fs-extra-promise';
import * as path from 'path' import * as path from 'path';
import * as Aria2 from 'aria2' import * as Aria2 from 'aria2';
import {bundle} from '../../package/main' import {bundle} from '../../package/main';
import {mongodb} from '../models/iridium' import {mongodb} from '../models/iridium';
import {toObjectID} from 'iridium' import {toObjectID} from 'iridium';
import config from '../../config' import config from '../../config';
// const Aria2Options = { // const Aria2Options = {
// host: 'localhost', // host: 'localhost',
...@@ -21,29 +21,28 @@ import config from '../../config' ...@@ -21,29 +21,28 @@ import config from '../../config'
// } // }
const checkPackage = async (file) => { const checkPackage = async (file) => {
// const ext = mime.extension(file.mime);
if (['zip', 'gz', 'rar', '7z', 'application/x-gzip'].indexOf(file.mime) === -1) { if (['zip', 'gz', 'rar', '7z', 'application/x-gzip'].indexOf(file.mime) === -1) {
throw new Error('Unsupported file type'); throw new Error('Unsupported file type');
} }
} };
const checkImage = async (file) => { const checkImage = async (file) => {
const ext = mime.extension(file.mime); const ext = mime.extension(file.mime);
if (['png', 'jpg', 'jpeg', 'gif', 'webp'].indexOf(ext) === -1) { if (['png', 'jpg', 'jpeg', 'gif', 'webp'].indexOf(ext) === -1) {
throw new Error('Unsupported file type'); throw new Error('Unsupported file type');
} }
} };
import Router = require('koa-router'); import Router = require('koa-router');
const ossStream = Client(new OSS({ const ossStream = Client(new OSS({
accessKeyId: process.env["OSS_ACCESS_ID"], accessKeyId: process.env['OSS_ACCESS_ID'],
secretAccessKey: process.env["OSS_ACCESS_KEY"], secretAccessKey: process.env['OSS_ACCESS_KEY'],
endpoint: process.env["OSS_ENDPOINT"], endpoint: process.env['OSS_ENDPOINT'],
apiVersion: '2013-10-15' apiVersion: '2013-10-15'
})); }));
const router = new Router() const router = new Router();
const UploadImage = async (ctx: Context) => { const UploadImage = async (ctx: Context) => {
...@@ -51,12 +50,12 @@ const UploadImage = async (ctx: Context) => { ...@@ -51,12 +50,12 @@ const UploadImage = async (ctx: Context) => {
const {files} = await busboy(ctx.req); const {files} = await busboy(ctx.req);
ctx.body = await Promise.all(files.map(async file => { ctx.body = await Promise.all(files.map(async file => {
await checkImage(file) await checkImage(file);
const filename = `test/${uuid.v1()}`; const filename = `test/${uuid.v1()}`;
const upload = ossStream.upload({ const upload = ossStream.upload({
Bucket: process.env["OSS_BUCKET"], Bucket: process.env['OSS_BUCKET'],
Key: filename, Key: filename,
ContentType: file.mimeType ContentType: file.mimeType
}); });
...@@ -78,130 +77,136 @@ export const UploadPackage = async (ctx: Context) => { ...@@ -78,130 +77,136 @@ export const UploadPackage = async (ctx: Context) => {
const {files} = await busboy(ctx.req); const {files} = await busboy(ctx.req);
ctx.body = await Promise.all(files.map(async file => { ctx.body = await Promise.all(files.map(async file => {
await checkPackage(file) await checkPackage(file);
const filename = uuid.v1() const filename = uuid.v1();
const archive_path = path.join(__dirname, '../../test/upload') const archive_path = path.join(__dirname, '../../test/upload');
await fs.ensureDirAsync(archive_path) await fs.ensureDirAsync(archive_path);
const archive = fs.createWriteStream(path.join(archive_path, filename)) const archive = fs.createWriteStream(path.join(archive_path, filename));
let pack = await mongodb.Packages.findOne({_id: toObjectID(ctx.params.id)}) let pack = await mongodb.Packages.findOne({_id: toObjectID(ctx.params.id)});
if (!pack) {
return ctx.throw(400, 'pack not exists');
}
return await new Promise((resolve, reject) => { return await new Promise((resolve, reject) => {
file.pipe(archive) file.pipe(archive);
file.on('close', async() => { file.on('close', async () => {
try { try {
pack.status = 'uploading' pack!.status = 'uploading';
await pack.save() await pack!.save();
resolve(pack) resolve(pack!);
// 上传完, 打包 // 上传完, 打包
const bundled = await bundle(filename) const bundled = await bundle(filename);
Object.assign(pack, bundled) Object.assign(pack, bundled);
pack.status = 'uploaded' pack!.status = 'uploaded';
await mongodb.Packages.update({id: pack.id}, {$set: { status: 'deprecated' }}, {multi: true}) await mongodb.Packages.update({id: pack!.id}, {$set: {status: 'deprecated'}}, {multi: true});
await pack.save() await pack!.save();
// 打包完,上传阿里云 // 打包完,上传阿里云
} catch (e) { } catch (e) {
pack.status = 'failed' pack!.status = 'failed';
await pack.save() await pack!.save();
console.log(e) console.log(e);
} }
}) });
file.on('error', async (error) => { file.on('error', async (error) => {
pack.status = 'failed' pack!.status = 'failed';
await pack.save() await pack!.save();
reject(error) reject(error);
}) });
}) });
})); }));
} catch (err) { } catch (err) {
ctx.throw(403, err); ctx.throw(403, err);
} }
} };
const uploadPackageUrl = async (ctx: Context) => { const uploadPackageUrl = async (ctx: Context) => {
if(!ctx.request.body.url) { if (!ctx.request.body.url) {
ctx.throw(400, "params error") ctx.throw(400, 'params error');
} }
//testUrl: https://r.my-card.in/release/dist/0c16a3ecb115fd7cf575ccdd64f62a8f3edc635b087950e4ed4f3f781972bbfd.tar.gz // testUrl: https://r.my-card.in/release/dist/0c16a3ecb115fd7cf575ccdd64f62a8f3edc635b087950e4ed4f3f781972bbfd.tar.gz
const downloader = new Aria2 const downloader = new Aria2;
let pack = await mongodb.Packages.findOne({_id: toObjectID(ctx.request.body._id)}) let pack = await mongodb.Packages.findOne({_id: toObjectID(ctx.request.body._id)});
if (!pack) {
return ctx.throw(400, 'pack not exists');
}
await downloader.open() await downloader.open();
downloader.onDownloadStart = async() => { downloader.onDownloadStart = async () => {
pack.status = 'uploading' pack!.status = 'uploading';
await pack.save() await pack!.save();
} };
downloader.onDownloadComplete = async(m) => { downloader.onDownloadComplete = async (m) => {
const { files } = await downloader.send('tellStatus', m.gid) const {files} = await downloader.send('tellStatus', m.gid);
const [file] = files const [file] = files;
try { try {
await checkPackage(file) await checkPackage(file);
// 打包 // 打包
const bundled = await bundle(path.basename(file.path)) const bundled = await bundle(path.basename(file.path));
// 打包完, 上传阿里云 // 打包完, 上传阿里云
Object.assign(pack, bundled) Object.assign(pack, bundled);
pack.status = 'uploaded' pack!.status = 'uploaded';
await mongodb.Packages.update({id: pack.id}, {$set: { status: 'deprecated' }}, {multi: true}) await mongodb.Packages.update({id: pack!.id}, {$set: {status: 'deprecated'}}, {multi: true});
await pack.save() await pack!.save();
} catch (e) { } catch (e) {
pack.status = 'failed' pack!.status = 'failed';
await pack.save() await pack!.save();
} }
} };
downloader.onDownloadError = async(err) => { downloader.onDownloadError = async (err) => {
// console.log(await downloader.send('tellStatus', err.gid)) // console.log(await downloader.send('tellStatus', err.gid))
pack.status = 'failed' pack!.status = 'failed';
await pack.save() await pack!.save();
console.log(err) console.log(err);
} };
ctx.body = await new Promise((resolve, reject) => { ctx.body = await new Promise((resolve, reject) => {
downloader.onmessage = m => { downloader.onmessage = m => {
if(m["error"]) { if (m['error']) {
reject(m["error"]) reject(m['error']);
} else { } else {
resolve(m) resolve(m);
} }
} };
downloader.send('addUri', [ctx.request.body.url], {dir: config.upload_path}) downloader.send('addUri', [ctx.request.body.url], {dir: config.upload_path});
}) });
} };
router.post('/v1/upload/image', UploadImage) router.post('/v1/upload/image', UploadImage);
router.post('/v1/upload/package/:id', UploadPackage) router.post('/v1/upload/package/:id', UploadPackage);
router.post('/v1/upload/packageUrl', uploadPackageUrl) router.post('/v1/upload/packageUrl', uploadPackageUrl);
export default router export default router;
const TYPES = { const TYPES = {};
} export default TYPES;
export default TYPES
\ No newline at end of file
import { URL } from 'url'; import {URL} from 'url';
export const handleImg = (img) => { export const handleImg = (img) => {
if (img) { if (img) {
...@@ -12,8 +12,8 @@ export const handleImg = (img) => { ...@@ -12,8 +12,8 @@ export const handleImg = (img) => {
} else { } else {
return 'https://cdn01.moecube.com/accounts/default_avatar.jpg'; return 'https://cdn01.moecube.com/accounts/default_avatar.jpg';
} }
} };
export function renderChecksum(files: { path: string, hash?: string }[]) { export function renderChecksum(files: { path: string, hash?: string }[]) {
return files.map(({ path, hash }) => `${hash || ''} ${path}`).join('\n'); return files.map(({path, hash}) => `${hash || ''} ${path}`).join('\n');
} }
\ No newline at end of file
{
"rules": {
"max-line-length": [true, 140],
"no-inferrable-types": true,
"class-name": true,
"comment-format": [
true,
"check-space"
],
"indent": [
true,
"spaces"
],
"eofline": true,
"no-duplicate-variable": true,
"no-eval": true,
"no-arg": true,
"no-internal-module": true,
"no-trailing-whitespace": true,
"no-bitwise": true,
"no-unused-expression": true,
"no-var-keyword": true,
"one-line": [
true,
"check-catch",
"check-else",
"check-open-brace",
"check-whitespace"
],
"quotemark": [
true,
"single",
"avoid-escape"
],
"semicolon": [true, "always"],
"typedef-whitespace": [
true,
{
"call-signature": "nospace",
"index-signature": "nospace",
"parameter": "nospace",
"property-declaration": "nospace",
"variable-declaration": "nospace"
}
],
"curly": true,
"whitespace": [
true,
"check-branch",
"check-decl",
"check-operator",
"check-separator",
"check-type"
]
}
}
...@@ -3,16 +3,18 @@ ...@@ -3,16 +3,18 @@
"@types/accepts@*": "@types/accepts@*":
version "1.3.1" version "1.3.2"
resolved "https://registry.yarnpkg.com/@types/accepts/-/accepts-1.3.1.tgz#e5959c500fde65e4bd18a78d8b7f9392ccb9aab4" resolved "https://registry.yarnpkg.com/@types/accepts/-/accepts-1.3.2.tgz#52897ad5a51f05ea2f57f8e8136085c7d1c385a5"
"@types/bluebird@*", "@types/bluebird@^3.5.2": "@types/bluebird@*", "@types/bluebird@^3.5.0", "@types/bluebird@^3.5.2":
version "3.5.2" version "3.5.2"
resolved "https://registry.yarnpkg.com/@types/bluebird/-/bluebird-3.5.2.tgz#ecf1104217495e50fe0b588d538146cd6f733b89" resolved "https://registry.yarnpkg.com/@types/bluebird/-/bluebird-3.5.2.tgz#ecf1104217495e50fe0b588d538146cd6f733b89"
"@types/bluebird@^3.5.0": "@types/bson@*":
version "3.5.0" version "1.0.3"
resolved "https://registry.yarnpkg.com/@types/bluebird/-/bluebird-3.5.0.tgz#2633470a4eabe9a47cd9a45fdb20ed5f93407bca" resolved "https://registry.yarnpkg.com/@types/bson/-/bson-1.0.3.tgz#6c26f0876bf9d8cbb06edd4019e29354bf3a03e0"
dependencies:
"@types/node" "*"
"@types/busboy@^0.2.3": "@types/busboy@^0.2.3":
version "0.2.3" version "0.2.3"
...@@ -21,19 +23,19 @@ ...@@ -21,19 +23,19 @@
"@types/node" "*" "@types/node" "*"
"@types/chai@^3.4.35": "@types/chai@^3.4.35":
version "3.5.0" version "3.5.1"
resolved "https://registry.yarnpkg.com/@types/chai/-/chai-3.5.0.tgz#45e2dc2af9a5727be846af6e61d08ffc45d5b2ca" resolved "https://registry.yarnpkg.com/@types/chai/-/chai-3.5.1.tgz#9bd77fe12503ae00648b0945b38eab666adffe2e"
"@types/cookies@*": "@types/cookies@*":
version "0.6.0" version "0.6.1"
resolved "https://registry.yarnpkg.com/@types/cookies/-/cookies-0.6.0.tgz#f5e8df2357502a895d5627e2fb8b174b3b269461" resolved "https://registry.yarnpkg.com/@types/cookies/-/cookies-0.6.1.tgz#d12cbd0f8aa6b9f0d3bfb613b958897a0b348731"
dependencies: dependencies:
"@types/keygrip" "*" "@types/keygrip" "*"
"@types/node" "*" "@types/node" "*"
"@types/express-serve-static-core@*": "@types/express-serve-static-core@*":
version "4.0.41" version "4.0.44"
resolved "https://registry.yarnpkg.com/@types/express-serve-static-core/-/express-serve-static-core-4.0.41.tgz#05df354cbbe5069b4c089320065870033f41e670" resolved "https://registry.yarnpkg.com/@types/express-serve-static-core/-/express-serve-static-core-4.0.44.tgz#a1c3bd5d80e93c72fba91a03f5412c47f21d4ae7"
dependencies: dependencies:
"@types/node" "*" "@types/node" "*"
...@@ -63,8 +65,8 @@ ...@@ -63,8 +65,8 @@
resolved "https://registry.yarnpkg.com/@types/http-assert/-/http-assert-1.2.0.tgz#0b82993036e86c6ff2944e033b73b57e85ccdcab" resolved "https://registry.yarnpkg.com/@types/http-assert/-/http-assert-1.2.0.tgz#0b82993036e86c6ff2944e033b73b57e85ccdcab"
"@types/keygrip@*": "@types/keygrip@*":
version "1.0.0" version "1.0.1"
resolved "https://registry.yarnpkg.com/@types/keygrip/-/keygrip-1.0.0.tgz#20bcf84e8962aeca5d1789802b93644262870d28" resolved "https://registry.yarnpkg.com/@types/keygrip/-/keygrip-1.0.1.tgz#ff540462d2fb4d0a88441ceaf27d287b01c3d878"
"@types/koa-bodyparser@^3.0.22": "@types/koa-bodyparser@^3.0.22":
version "3.0.23" version "3.0.23"
...@@ -73,8 +75,8 @@ ...@@ -73,8 +75,8 @@
"@types/koa" "*" "@types/koa" "*"
"@types/koa-compose@*": "@types/koa-compose@*":
version "3.2.0" version "3.2.2"
resolved "https://registry.yarnpkg.com/@types/koa-compose/-/koa-compose-3.2.0.tgz#9cb907923f33da1b14c564eaa7e63d8ea38b65ff" resolved "https://registry.yarnpkg.com/@types/koa-compose/-/koa-compose-3.2.2.tgz#dc106e000bbf92a3ac900f756df47344887ee847"
"@types/koa-router@^7.0.22": "@types/koa-router@^7.0.22":
version "7.0.22" version "7.0.22"
...@@ -108,21 +110,26 @@ ...@@ -108,21 +110,26 @@
resolved "https://registry.yarnpkg.com/@types/mime/-/mime-0.0.29.tgz#fbcfd330573b912ef59eeee14602bface630754b" resolved "https://registry.yarnpkg.com/@types/mime/-/mime-0.0.29.tgz#fbcfd330573b912ef59eeee14602bface630754b"
"@types/mongodb@*", "@types/mongodb@^2.1.36", "@types/mongodb@^2.1.41": "@types/mongodb@*", "@types/mongodb@^2.1.36", "@types/mongodb@^2.1.41":
version "2.1.41" version "2.1.43"
resolved "https://registry.yarnpkg.com/@types/mongodb/-/mongodb-2.1.41.tgz#92ea0f832b9e0269c7826fb7f899cf86fe5c4df5" resolved "https://registry.yarnpkg.com/@types/mongodb/-/mongodb-2.1.43.tgz#6fbd60c0ae0f2e8f5776ed1d73f5c718cc2625ee"
dependencies: dependencies:
"@types/bson" "*"
"@types/node" "*" "@types/node" "*"
"@types/mongoose@^4.7.8": "@types/mongoose@^4.7.8":
version "4.7.8" version "4.7.11"
resolved "https://registry.yarnpkg.com/@types/mongoose/-/mongoose-4.7.8.tgz#9dd829635c75198b3ba60b1626fd65ad5698ac8c" resolved "https://registry.yarnpkg.com/@types/mongoose/-/mongoose-4.7.11.tgz#a3f971dce3974f56a2486f0965e55519cd66c953"
dependencies: dependencies:
"@types/mongodb" "*" "@types/mongodb" "*"
"@types/node" "*" "@types/node" "*"
"@types/node@*", "@types/node@^6.0.55": "@types/node@*":
version "6.0.65" version "6.0.70"
resolved "https://registry.yarnpkg.com/@types/node/-/node-6.0.65.tgz#c00faa7ffcfc9842b5dd7bf650872562504d5670" resolved "https://registry.yarnpkg.com/@types/node/-/node-6.0.70.tgz#f6e04b859205ee3611849921f09819701dbfa5e8"
"@types/node@^7.0.13":
version "7.0.13"
resolved "https://registry.yarnpkg.com/@types/node/-/node-7.0.13.tgz#1b0a53fe9ef9c3a5d061b126cc9b915bca43a3f5"
"@types/pluralize@0.0.27": "@types/pluralize@0.0.27":
version "0.0.27" version "0.0.27"
...@@ -177,8 +184,8 @@ after@0.8.1: ...@@ -177,8 +184,8 @@ after@0.8.1:
resolved "https://registry.yarnpkg.com/after/-/after-0.8.1.tgz#ab5d4fb883f596816d3515f8f791c0af486dd627" resolved "https://registry.yarnpkg.com/after/-/after-0.8.1.tgz#ab5d4fb883f596816d3515f8f791c0af486dd627"
ajv@^4.9.1: ajv@^4.9.1:
version "4.11.5" version "4.11.7"
resolved "https://registry.yarnpkg.com/ajv/-/ajv-4.11.5.tgz#b6ee74657b993a01dce44b7944d56f485828d5bd" resolved "https://registry.yarnpkg.com/ajv/-/ajv-4.11.7.tgz#8655a5d86d0824985cc471a1d913fb6729a0ec48"
dependencies: dependencies:
co "^4.6.0" co "^4.6.0"
json-stable-stringify "^1.0.1" json-stable-stringify "^1.0.1"
...@@ -241,11 +248,11 @@ aproba@^1.0.3: ...@@ -241,11 +248,11 @@ aproba@^1.0.3:
resolved "https://registry.yarnpkg.com/aproba/-/aproba-1.1.1.tgz#95d3600f07710aa0e9298c726ad5ecf2eacbabab" resolved "https://registry.yarnpkg.com/aproba/-/aproba-1.1.1.tgz#95d3600f07710aa0e9298c726ad5ecf2eacbabab"
are-we-there-yet@~1.1.2: are-we-there-yet@~1.1.2:
version "1.1.2" version "1.1.3"
resolved "https://registry.yarnpkg.com/are-we-there-yet/-/are-we-there-yet-1.1.2.tgz#80e470e95a084794fe1899262c5667c6e88de1b3" resolved "https://registry.yarnpkg.com/are-we-there-yet/-/are-we-there-yet-1.1.3.tgz#ee86447bf1a06feb4dd3aac46e023b87d7f8e2ef"
dependencies: dependencies:
delegates "^1.0.0" delegates "^1.0.0"
readable-stream "^2.0.0 || ^1.1.13" readable-stream "^2.0.6"
aria2@^3.0.0: aria2@^3.0.0:
version "3.0.0" version "3.0.0"
...@@ -263,8 +270,8 @@ arr-diff@^2.0.0: ...@@ -263,8 +270,8 @@ arr-diff@^2.0.0:
arr-flatten "^1.0.1" arr-flatten "^1.0.1"
arr-flatten@^1.0.1: arr-flatten@^1.0.1:
version "1.0.1" version "1.0.3"
resolved "https://registry.yarnpkg.com/arr-flatten/-/arr-flatten-1.0.1.tgz#e5ffe54d45e19f32f216e91eb99c8ce892bb604b" resolved "https://registry.yarnpkg.com/arr-flatten/-/arr-flatten-1.0.3.tgz#a274ed85ac08849b6bd7847c4580745dc51adfb1"
array-unique@^0.2.1: array-unique@^0.2.1:
version "0.2.1" version "0.2.1"
...@@ -301,9 +308,9 @@ assertion-error@1.0.0: ...@@ -301,9 +308,9 @@ assertion-error@1.0.0:
version "1.0.0" version "1.0.0"
resolved "https://registry.yarnpkg.com/assertion-error/-/assertion-error-1.0.0.tgz#c7f85438fdd466bc7ca16ab90c81513797a5d23b" resolved "https://registry.yarnpkg.com/assertion-error/-/assertion-error-1.0.0.tgz#c7f85438fdd466bc7ca16ab90c81513797a5d23b"
async-busboy@^0.3.4: async-busboy@^0.4.0:
version "0.3.4" version "0.4.0"
resolved "https://registry.yarnpkg.com/async-busboy/-/async-busboy-0.3.4.tgz#1311af58c32b07440d626b7acc6e38b751580e7d" resolved "https://registry.yarnpkg.com/async-busboy/-/async-busboy-0.4.0.tgz#55d6cf2041d8571f07085bfe00a7df39d48b7182"
dependencies: dependencies:
busboy "^0.2.12" busboy "^0.2.12"
...@@ -337,6 +344,14 @@ aws4@^1.2.1: ...@@ -337,6 +344,14 @@ aws4@^1.2.1:
version "1.6.0" version "1.6.0"
resolved "https://registry.yarnpkg.com/aws4/-/aws4-1.6.0.tgz#83ef5ca860b2b32e4a0deedee8c771b9db57471e" resolved "https://registry.yarnpkg.com/aws4/-/aws4-1.6.0.tgz#83ef5ca860b2b32e4a0deedee8c771b9db57471e"
babel-code-frame@^6.22.0:
version "6.22.0"
resolved "https://registry.yarnpkg.com/babel-code-frame/-/babel-code-frame-6.22.0.tgz#027620bee567a88c32561574e7fd0801d33118e4"
dependencies:
chalk "^1.1.0"
esutils "^2.0.2"
js-tokens "^3.0.0"
backo2@1.0.2: backo2@1.0.2:
version "1.0.2" version "1.0.2"
resolved "https://registry.yarnpkg.com/backo2/-/backo2-1.0.2.tgz#31ab1ac8b129363463e35b3ebb69f4dfcfba7947" resolved "https://registry.yarnpkg.com/backo2/-/backo2-1.0.2.tgz#31ab1ac8b129363463e35b3ebb69f4dfcfba7947"
...@@ -398,8 +413,8 @@ boom@2.x.x: ...@@ -398,8 +413,8 @@ boom@2.x.x:
hoek "2.x.x" hoek "2.x.x"
brace-expansion@^1.0.0: brace-expansion@^1.0.0:
version "1.1.6" version "1.1.7"
resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.6.tgz#7197d7eaa9b87e648390ea61fc66c84427420df9" resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.7.tgz#3effc3c50e000531fb720eaff80f0ae8ef23cf59"
dependencies: dependencies:
balanced-match "^0.4.1" balanced-match "^0.4.1"
concat-map "0.0.1" concat-map "0.0.1"
...@@ -526,6 +541,10 @@ camelcase@^1.0.2, camelcase@^1.2.1: ...@@ -526,6 +541,10 @@ camelcase@^1.0.2, camelcase@^1.2.1:
version "1.2.1" version "1.2.1"
resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-1.2.1.tgz#9bb5304d2e0b56698b2c758b08a3eaa9daa58a39" resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-1.2.1.tgz#9bb5304d2e0b56698b2c758b08a3eaa9daa58a39"
camelcase@^2.0.1:
version "2.1.1"
resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-2.1.1.tgz#7c1d16d679a1bbe59ca02cacecfb011e201f5a1f"
camelcase@^3.0.0: camelcase@^3.0.0:
version "3.0.0" version "3.0.0"
resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-3.0.0.tgz#32fc4b9fcdaf845fcdf7e73bb97cac2261f0ab0a" resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-3.0.0.tgz#32fc4b9fcdaf845fcdf7e73bb97cac2261f0ab0a"
...@@ -562,7 +581,7 @@ chalk@0.5.1: ...@@ -562,7 +581,7 @@ chalk@0.5.1:
strip-ansi "^0.3.0" strip-ansi "^0.3.0"
supports-color "^0.2.0" supports-color "^0.2.0"
chalk@^1.0.0, chalk@^1.1.1, chalk@^1.1.3: chalk@^1.0.0, chalk@^1.1.0, chalk@^1.1.1, chalk@^1.1.3:
version "1.1.3" version "1.1.3"
resolved "https://registry.yarnpkg.com/chalk/-/chalk-1.1.3.tgz#a8115c55e4a702fe4d150abd3872822a7e09fc98" resolved "https://registry.yarnpkg.com/chalk/-/chalk-1.1.3.tgz#a8115c55e4a702fe4d150abd3872822a7e09fc98"
dependencies: dependencies:
...@@ -607,14 +626,14 @@ clone@^1.0.2: ...@@ -607,14 +626,14 @@ clone@^1.0.2:
version "1.0.2" version "1.0.2"
resolved "https://registry.yarnpkg.com/clone/-/clone-1.0.2.tgz#260b7a99ebb1edfe247538175f783243cb19d149" resolved "https://registry.yarnpkg.com/clone/-/clone-1.0.2.tgz#260b7a99ebb1edfe247538175f783243cb19d149"
co-body@^4.2.0: co-body@^5.1.0:
version "4.2.0" version "5.1.1"
resolved "https://registry.yarnpkg.com/co-body/-/co-body-4.2.0.tgz#74df20fa73262125dc45482af04e342ea8db3515" resolved "https://registry.yarnpkg.com/co-body/-/co-body-5.1.1.tgz#d97781d1e3344ba4a820fd1806bddf8341505236"
dependencies: dependencies:
inflation "~2.0.0" inflation "^2.0.0"
qs "~4.0.0" qs "^6.4.0"
raw-body "~2.1.2" raw-body "^2.2.0"
type-is "~1.6.6" type-is "^1.6.14"
co@^4.6.0: co@^4.6.0:
version "4.6.0" version "4.6.0"
...@@ -744,6 +763,10 @@ cookies@~0.7.0: ...@@ -744,6 +763,10 @@ cookies@~0.7.0:
depd "~1.1.0" depd "~1.1.0"
keygrip "~1.0.1" keygrip "~1.0.1"
copy-to@^2.0.1:
version "2.0.1"
resolved "https://registry.yarnpkg.com/copy-to/-/copy-to-2.0.1.tgz#2680fbb8068a48d08656b6098092bdafc906f4a5"
core-util-is@~1.0.0: core-util-is@~1.0.0:
version "1.0.2" version "1.0.2"
resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.2.tgz#b5fd54220aa2bc5ab57aab7140c940754503c1a7" resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.2.tgz#b5fd54220aa2bc5ab57aab7140c940754503c1a7"
...@@ -761,14 +784,14 @@ dashdash@^1.12.0: ...@@ -761,14 +784,14 @@ dashdash@^1.12.0:
assert-plus "^1.0.0" assert-plus "^1.0.0"
date-fns@^1.23.0: date-fns@^1.23.0:
version "1.28.1" version "1.28.3"
resolved "https://registry.yarnpkg.com/date-fns/-/date-fns-1.28.1.tgz#9e2325c77b1cb7da3a9fd9822ba52c188a4ce91b" resolved "https://registry.yarnpkg.com/date-fns/-/date-fns-1.28.3.tgz#145d87adc3f5a82c6bda668de97eee1132c97ea1"
debug@*, debug@^2.1.0, debug@^2.2.0: debug@*, debug@^2.1.0, debug@^2.2.0:
version "2.6.3" version "2.6.4"
resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.3.tgz#0f7eb8c30965ec08c72accfa0130c8b79984141d" resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.4.tgz#7586a9b3c39741c0282ae33445c4e8ac74734fe0"
dependencies: dependencies:
ms "0.7.2" ms "0.7.3"
debug@2.2.0, debug@~2.2.0: debug@2.2.0, debug@~2.2.0:
version "2.2.0" version "2.2.0"
...@@ -833,9 +856,9 @@ dicer@0.2.5: ...@@ -833,9 +856,9 @@ dicer@0.2.5:
readable-stream "1.1.x" readable-stream "1.1.x"
streamsearch "0.1.2" streamsearch "0.1.2"
diff@^2.2.1: diff@^3.2.0:
version "2.2.3" version "3.2.0"
resolved "https://registry.yarnpkg.com/diff/-/diff-2.2.3.tgz#60eafd0d28ee906e4e8ff0a52c1229521033bf99" resolved "https://registry.yarnpkg.com/diff/-/diff-3.2.0.tgz#c9ce393a4b7cbd0b058a725c93df299027868ff9"
dot-env@^0.0.1: dot-env@^0.0.1:
version "0.0.1" version "0.0.1"
...@@ -965,6 +988,10 @@ escape-string-regexp@^1.0.0, escape-string-regexp@^1.0.2: ...@@ -965,6 +988,10 @@ escape-string-regexp@^1.0.0, escape-string-regexp@^1.0.2:
version "1.0.5" version "1.0.5"
resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4" resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4"
esutils@^2.0.2:
version "2.0.2"
resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.2.tgz#0abf4f1caa5bcb1f7a9d8acc6dea4faaa04bac9b"
etag@^1.7.0: etag@^1.7.0:
version "1.8.0" version "1.8.0"
resolved "https://registry.yarnpkg.com/etag/-/etag-1.8.0.tgz#6f631aef336d6c46362b51764044ce216be3c051" resolved "https://registry.yarnpkg.com/etag/-/etag-1.8.0.tgz#6f631aef336d6c46362b51764044ce216be3c051"
...@@ -1076,8 +1103,8 @@ forever-agent@~0.6.1: ...@@ -1076,8 +1103,8 @@ forever-agent@~0.6.1:
resolved "https://registry.yarnpkg.com/forever-agent/-/forever-agent-0.6.1.tgz#fbc71f0c41adeb37f96c577ad1ed42d8fdacca91" resolved "https://registry.yarnpkg.com/forever-agent/-/forever-agent-0.6.1.tgz#fbc71f0c41adeb37f96c577ad1ed42d8fdacca91"
form-data@~2.1.1: form-data@~2.1.1:
version "2.1.2" version "2.1.4"
resolved "https://registry.yarnpkg.com/form-data/-/form-data-2.1.2.tgz#89c3534008b97eada4cbb157d58f6f5df025eae4" resolved "https://registry.yarnpkg.com/form-data/-/form-data-2.1.4.tgz#33c183acf193276ecaa98143a69e94bfee1750d1"
dependencies: dependencies:
asynckit "^0.4.0" asynckit "^0.4.0"
combined-stream "^1.0.5" combined-stream "^1.0.5"
...@@ -1132,7 +1159,7 @@ fsevents@^1.0.0: ...@@ -1132,7 +1159,7 @@ fsevents@^1.0.0:
nan "^2.3.0" nan "^2.3.0"
node-pre-gyp "^0.6.29" node-pre-gyp "^0.6.29"
fstream-ignore@~1.0.5: fstream-ignore@^1.0.5:
version "1.0.5" version "1.0.5"
resolved "https://registry.yarnpkg.com/fstream-ignore/-/fstream-ignore-1.0.5.tgz#9c31dae34767018fe1d249b24dada67d092da105" resolved "https://registry.yarnpkg.com/fstream-ignore/-/fstream-ignore-1.0.5.tgz#9c31dae34767018fe1d249b24dada67d092da105"
dependencies: dependencies:
...@@ -1140,7 +1167,7 @@ fstream-ignore@~1.0.5: ...@@ -1140,7 +1167,7 @@ fstream-ignore@~1.0.5:
inherits "2" inherits "2"
minimatch "^3.0.0" minimatch "^3.0.0"
fstream@^1.0.0, fstream@^1.0.2, fstream@~1.0.10: fstream@^1.0.0, fstream@^1.0.10, fstream@^1.0.2:
version "1.0.11" version "1.0.11"
resolved "https://registry.yarnpkg.com/fstream/-/fstream-1.0.11.tgz#5c1fb1f117477114f0632a0eb4b71b3cb0fd3171" resolved "https://registry.yarnpkg.com/fstream/-/fstream-1.0.11.tgz#5c1fb1f117477114f0632a0eb4b71b3cb0fd3171"
dependencies: dependencies:
...@@ -1205,7 +1232,7 @@ glob@^5.0.10, glob@~5.0.0: ...@@ -1205,7 +1232,7 @@ glob@^5.0.10, glob@~5.0.0:
once "^1.3.0" once "^1.3.0"
path-is-absolute "^1.0.0" path-is-absolute "^1.0.0"
glob@^7.0.3, glob@^7.0.5: glob@^7.0.5, glob@^7.1.1:
version "7.1.1" version "7.1.1"
resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.1.tgz#805211df04faaf1c63a3600306cdf5ade50b2ec8" resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.1.tgz#805211df04faaf1c63a3600306cdf5ade50b2ec8"
dependencies: dependencies:
...@@ -1323,8 +1350,8 @@ hooks-fixed@2.0.0: ...@@ -1323,8 +1350,8 @@ hooks-fixed@2.0.0:
resolved "https://registry.yarnpkg.com/hooks-fixed/-/hooks-fixed-2.0.0.tgz#a01d894d52ac7f6599bbb1f63dfc9c411df70cba" resolved "https://registry.yarnpkg.com/hooks-fixed/-/hooks-fixed-2.0.0.tgz#a01d894d52ac7f6599bbb1f63dfc9c411df70cba"
hosted-git-info@^2.1.4: hosted-git-info@^2.1.4:
version "2.3.1" version "2.4.2"
resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-2.3.1.tgz#ac439421605f0beb0ea1349de7d8bb28e50be1dd" resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-2.4.2.tgz#0076b9f46a270506ddbaaea56496897460612a67"
http-assert@^1.1.0: http-assert@^1.1.0:
version "1.2.0" version "1.2.0"
...@@ -1372,9 +1399,9 @@ http-signature@~1.1.0: ...@@ -1372,9 +1399,9 @@ http-signature@~1.1.0:
jsprim "^1.2.2" jsprim "^1.2.2"
sshpk "^1.7.0" sshpk "^1.7.0"
iconv-lite@0.4.13, iconv-lite@~0.4.13: iconv-lite@0.4.15, iconv-lite@~0.4.13:
version "0.4.13" version "0.4.15"
resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.13.tgz#1f88aba4ab0b1508e8312acc39345f36e992e2f2" resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.15.tgz#fe265a218ac6a57cfe854927e9d04c19825eddeb"
ignore-by-default@^1.0.0: ignore-by-default@^1.0.0:
version "1.0.1" version "1.0.1"
...@@ -1396,7 +1423,7 @@ infinity-agent@^2.0.0: ...@@ -1396,7 +1423,7 @@ infinity-agent@^2.0.0:
version "2.0.3" version "2.0.3"
resolved "https://registry.yarnpkg.com/infinity-agent/-/infinity-agent-2.0.3.tgz#45e0e2ff7a9eb030b27d62b74b3744b7a7ac4216" resolved "https://registry.yarnpkg.com/infinity-agent/-/infinity-agent-2.0.3.tgz#45e0e2ff7a9eb030b27d62b74b3744b7a7ac4216"
inflation@~2.0.0: inflation@^2.0.0:
version "2.0.0" version "2.0.0"
resolved "https://registry.yarnpkg.com/inflation/-/inflation-2.0.0.tgz#8b417e47c28f925a45133d914ca1fd389107f30f" resolved "https://registry.yarnpkg.com/inflation/-/inflation-2.0.0.tgz#8b417e47c28f925a45133d914ca1fd389107f30f"
...@@ -1582,6 +1609,10 @@ jodid25519@^1.0.0: ...@@ -1582,6 +1609,10 @@ jodid25519@^1.0.0:
dependencies: dependencies:
jsbn "~0.1.0" jsbn "~0.1.0"
js-tokens@^3.0.0:
version "3.0.1"
resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-3.0.1.tgz#08e9f132484a2c45a30907e9dc4d5567b7f114d7"
jsbn@~0.1.0: jsbn@~0.1.0:
version "0.1.1" version "0.1.1"
resolved "https://registry.yarnpkg.com/jsbn/-/jsbn-0.1.1.tgz#a5e654c2e5a2deb5f201d96cefbca80c0ef2f513" resolved "https://registry.yarnpkg.com/jsbn/-/jsbn-0.1.1.tgz#a5e654c2e5a2deb5f201d96cefbca80c0ef2f513"
...@@ -1647,11 +1678,12 @@ klaw@^1.0.0: ...@@ -1647,11 +1678,12 @@ klaw@^1.0.0:
optionalDependencies: optionalDependencies:
graceful-fs "^4.1.9" graceful-fs "^4.1.9"
koa-bodyparser@^3.2.0: koa-bodyparser@^4.2.0:
version "3.2.0" version "4.2.0"
resolved "https://registry.yarnpkg.com/koa-bodyparser/-/koa-bodyparser-3.2.0.tgz#b916de17e2039fe82650481973d7c294f10b5719" resolved "https://registry.yarnpkg.com/koa-bodyparser/-/koa-bodyparser-4.2.0.tgz#bce6e08bc65f8709b6d1faa9411c7f0d8938aa54"
dependencies: dependencies:
co-body "^4.2.0" co-body "^5.1.0"
copy-to "^2.0.1"
koa-compose@^3.0.0: koa-compose@^3.0.0:
version "3.2.1" version "3.2.1"
...@@ -1666,9 +1698,9 @@ koa-convert@^1.2.0: ...@@ -1666,9 +1698,9 @@ koa-convert@^1.2.0:
co "^4.6.0" co "^4.6.0"
koa-compose "^3.0.0" koa-compose "^3.0.0"
koa-hbs@^0.9.0: koa-hbs@next:
version "0.9.0" version "1.0.0-alpha.1"
resolved "https://registry.yarnpkg.com/koa-hbs/-/koa-hbs-0.9.0.tgz#c8a2af2933a49acaa47a197e2c279f8b2ecdb76e" resolved "https://registry.yarnpkg.com/koa-hbs/-/koa-hbs-1.0.0-alpha.1.tgz#a060497f3d764f0bd299f069c1556e05d443781e"
dependencies: dependencies:
glob "^7.0.5" glob "^7.0.5"
handlebars "^4.0.5" handlebars "^4.0.5"
...@@ -1678,14 +1710,14 @@ koa-is-json@^1.0.0: ...@@ -1678,14 +1710,14 @@ koa-is-json@^1.0.0:
resolved "https://registry.yarnpkg.com/koa-is-json/-/koa-is-json-1.0.0.tgz#273c07edcdcb8df6a2c1ab7d59ee76491451ec14" resolved "https://registry.yarnpkg.com/koa-is-json/-/koa-is-json-1.0.0.tgz#273c07edcdcb8df6a2c1ab7d59ee76491451ec14"
koa-log4@^2.1.0: koa-log4@^2.1.0:
version "2.2.0" version "2.2.1"
resolved "https://registry.yarnpkg.com/koa-log4/-/koa-log4-2.2.0.tgz#faef69f9176b0dd982f113bb40615b0c7f2905f0" resolved "https://registry.yarnpkg.com/koa-log4/-/koa-log4-2.2.1.tgz#7be52fc23ef8137fec4be7ee7c9a9bdf7e898f73"
dependencies: dependencies:
log4js "^0.6.35" log4js "^0.6.35"
koa-router@^7.0.1: koa-router@^7.0.1:
version "7.1.0" version "7.1.1"
resolved "https://registry.yarnpkg.com/koa-router/-/koa-router-7.1.0.tgz#2fe6d7e6da7e3c46d8781953835c70513a6871f5" resolved "https://registry.yarnpkg.com/koa-router/-/koa-router-7.1.1.tgz#38cce6b1381fada18cfa47a3b3323e995ca231cf"
dependencies: dependencies:
debug "^2.2.0" debug "^2.2.0"
http-errors "^1.3.1" http-errors "^1.3.1"
...@@ -1912,15 +1944,15 @@ micromatch@2.3.11, micromatch@^2.1.5: ...@@ -1912,15 +1944,15 @@ micromatch@2.3.11, micromatch@^2.1.5:
parse-glob "^3.0.4" parse-glob "^3.0.4"
regex-cache "^0.4.2" regex-cache "^0.4.2"
mime-db@~1.26.0: mime-db@~1.27.0:
version "1.26.0" version "1.27.0"
resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.26.0.tgz#eaffcd0e4fc6935cf8134da246e2e6c35305adff" resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.27.0.tgz#820f572296bbd20ec25ed55e5b5de869e5436eb1"
mime-types@^2.0.7, mime-types@^2.1.12, mime-types@~2.1.11, mime-types@~2.1.13, mime-types@~2.1.7: mime-types@^2.0.7, mime-types@^2.1.12, mime-types@~2.1.11, mime-types@~2.1.15, mime-types@~2.1.7:
version "2.1.14" version "2.1.15"
resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.14.tgz#f7ef7d97583fcaf3b7d282b6f8b5679dab1e94ee" resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.15.tgz#a4ebf5064094569237b8cf70046776d09fc92aed"
dependencies: dependencies:
mime-db "~1.26.0" mime-db "~1.27.0"
mime@1.2.4: mime@1.2.4:
version "1.2.4" version "1.2.4"
...@@ -1952,15 +1984,15 @@ mkdirp@0.3.0: ...@@ -1952,15 +1984,15 @@ mkdirp@0.3.0:
version "0.3.0" version "0.3.0"
resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.3.0.tgz#1bbf5ab1ba827af23575143490426455f481fe1e" resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.3.0.tgz#1bbf5ab1ba827af23575143490426455f481fe1e"
"mkdirp@>=0.5 0", mkdirp@^0.5.0, mkdirp@~0.5.1: "mkdirp@>=0.5 0", mkdirp@^0.5.0, mkdirp@^0.5.1:
version "0.5.1" version "0.5.1"
resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.1.tgz#30057438eac6cf7f8c4767f38648d6697d75c903" resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.1.tgz#30057438eac6cf7f8c4767f38648d6697d75c903"
dependencies: dependencies:
minimist "0.0.8" minimist "0.0.8"
moment@*: moment@*:
version "2.18.0" version "2.18.1"
resolved "https://registry.yarnpkg.com/moment/-/moment-2.18.0.tgz#6cfec6a495eca915d02600a67020ed994937252c" resolved "https://registry.yarnpkg.com/moment/-/moment-2.18.1.tgz#c36193dd3ce1c2eed2adb7c802dbbc77a81b1c0f"
mongodb-core@2.1.9: mongodb-core@2.1.9:
version "2.1.9" version "2.1.9"
...@@ -1984,15 +2016,15 @@ mongoose-timestamp@^0.6.0: ...@@ -1984,15 +2016,15 @@ mongoose-timestamp@^0.6.0:
defaults "^1.0.3" defaults "^1.0.3"
mongoose-unique-validator@^1.0.4: mongoose-unique-validator@^1.0.4:
version "1.0.4" version "1.0.5"
resolved "https://registry.yarnpkg.com/mongoose-unique-validator/-/mongoose-unique-validator-1.0.4.tgz#dc1a7c80bfd5968cdfba75237056c4656b146cea" resolved "https://registry.yarnpkg.com/mongoose-unique-validator/-/mongoose-unique-validator-1.0.5.tgz#591872fafe0830939f0b756b6554243c93163aa0"
dependencies: dependencies:
lodash.foreach "^4.1.0" lodash.foreach "^4.1.0"
lodash.get "^4.0.2" lodash.get "^4.0.2"
mongoose@^4.9.4: mongoose@^4.9.4:
version "4.9.4" version "4.9.5"
resolved "https://registry.yarnpkg.com/mongoose/-/mongoose-4.9.4.tgz#212be4597e2db57b05286cc53ee894f30f3d8fad" resolved "https://registry.yarnpkg.com/mongoose/-/mongoose-4.9.5.tgz#856b856700032748dd68122cb0371f8980442975"
dependencies: dependencies:
async "2.1.4" async "2.1.4"
bson "~1.0.4" bson "~1.0.4"
...@@ -2032,13 +2064,17 @@ ms@0.7.2: ...@@ -2032,13 +2064,17 @@ ms@0.7.2:
version "0.7.2" version "0.7.2"
resolved "https://registry.yarnpkg.com/ms/-/ms-0.7.2.tgz#ae25cf2512b3885a1d95d7f037868d8431124765" resolved "https://registry.yarnpkg.com/ms/-/ms-0.7.2.tgz#ae25cf2512b3885a1d95d7f037868d8431124765"
ms@0.7.3:
version "0.7.3"
resolved "https://registry.yarnpkg.com/ms/-/ms-0.7.3.tgz#708155a5e44e33f5fd0fc53e81d0d40a91be1fff"
muri@1.2.1: muri@1.2.1:
version "1.2.1" version "1.2.1"
resolved "https://registry.yarnpkg.com/muri/-/muri-1.2.1.tgz#ec7ea5ce6ca6a523eb1ab35bacda5fa816c9aa3c" resolved "https://registry.yarnpkg.com/muri/-/muri-1.2.1.tgz#ec7ea5ce6ca6a523eb1ab35bacda5fa816c9aa3c"
nan@^2.3.0: nan@^2.3.0:
version "2.5.1" version "2.6.2"
resolved "https://registry.yarnpkg.com/nan/-/nan-2.5.1.tgz#d5b01691253326a97a2bbee9e61c55d8d60351e2" resolved "https://registry.yarnpkg.com/nan/-/nan-2.6.2.tgz#e4ff34e6c95fdfb5aecc08de6596f43605a7db45"
negotiator@0.6.1: negotiator@0.6.1:
version "0.6.1" version "0.6.1"
...@@ -2058,22 +2094,22 @@ node-fetch@^1.6.3: ...@@ -2058,22 +2094,22 @@ node-fetch@^1.6.3:
is-stream "^1.0.1" is-stream "^1.0.1"
node-pre-gyp@^0.6.29: node-pre-gyp@^0.6.29:
version "0.6.33" version "0.6.34"
resolved "https://registry.yarnpkg.com/node-pre-gyp/-/node-pre-gyp-0.6.33.tgz#640ac55198f6a925972e0c16c4ac26a034d5ecc9" resolved "https://registry.yarnpkg.com/node-pre-gyp/-/node-pre-gyp-0.6.34.tgz#94ad1c798a11d7fc67381b50d47f8cc18d9799f7"
dependencies: dependencies:
mkdirp "~0.5.1" mkdirp "^0.5.1"
nopt "~3.0.6" nopt "^4.0.1"
npmlog "^4.0.1" npmlog "^4.0.2"
rc "~1.1.6" rc "^1.1.7"
request "^2.79.0" request "^2.81.0"
rimraf "~2.5.4" rimraf "^2.6.1"
semver "~5.3.0" semver "^5.3.0"
tar "~2.2.1" tar "^2.2.1"
tar-pack "~3.3.0" tar-pack "^3.4.0"
node-uuid@~1.4.7: node-uuid@~1.4.7:
version "1.4.7" version "1.4.8"
resolved "https://registry.yarnpkg.com/node-uuid/-/node-uuid-1.4.7.tgz#6da5a17668c4b3dd59623bda11cf7fa4c1f60a6f" resolved "https://registry.yarnpkg.com/node-uuid/-/node-uuid-1.4.8.tgz#b040eb0923968afabf8d32fb1f17f1167fdab907"
node_memcached@1.1.3: node_memcached@1.1.3:
version "1.1.3" version "1.1.3"
...@@ -2096,12 +2132,19 @@ nodemon@^1.11.0: ...@@ -2096,12 +2132,19 @@ nodemon@^1.11.0:
undefsafe "0.0.3" undefsafe "0.0.3"
update-notifier "0.5.0" update-notifier "0.5.0"
nopt@3.0.x, nopt@~3.0.6: nopt@3.0.x:
version "3.0.6" version "3.0.6"
resolved "https://registry.yarnpkg.com/nopt/-/nopt-3.0.6.tgz#c6465dbf08abcd4db359317f79ac68a646b28ff9" resolved "https://registry.yarnpkg.com/nopt/-/nopt-3.0.6.tgz#c6465dbf08abcd4db359317f79ac68a646b28ff9"
dependencies: dependencies:
abbrev "1" abbrev "1"
nopt@^4.0.1:
version "4.0.1"
resolved "https://registry.yarnpkg.com/nopt/-/nopt-4.0.1.tgz#d0d4685afd5415193c8c7505602d0d17cd64474d"
dependencies:
abbrev "1"
osenv "^0.1.4"
nopt@~1.0.10: nopt@~1.0.10:
version "1.0.10" version "1.0.10"
resolved "https://registry.yarnpkg.com/nopt/-/nopt-1.0.10.tgz#6ddd21bd2a31417b92727dd585f8a6f37608ebee" resolved "https://registry.yarnpkg.com/nopt/-/nopt-1.0.10.tgz#6ddd21bd2a31417b92727dd585f8a6f37608ebee"
...@@ -2109,8 +2152,8 @@ nopt@~1.0.10: ...@@ -2109,8 +2152,8 @@ nopt@~1.0.10:
abbrev "1" abbrev "1"
normalize-package-data@^2.3.2: normalize-package-data@^2.3.2:
version "2.3.6" version "2.3.8"
resolved "https://registry.yarnpkg.com/normalize-package-data/-/normalize-package-data-2.3.6.tgz#498fa420c96401f787402ba21e600def9f981fff" resolved "https://registry.yarnpkg.com/normalize-package-data/-/normalize-package-data-2.3.8.tgz#d819eda2a9dedbd1ffa563ea4071d936782295bb"
dependencies: dependencies:
hosted-git-info "^2.1.4" hosted-git-info "^2.1.4"
is-builtin-module "^1.0.0" is-builtin-module "^1.0.0"
...@@ -2118,10 +2161,12 @@ normalize-package-data@^2.3.2: ...@@ -2118,10 +2161,12 @@ normalize-package-data@^2.3.2:
validate-npm-package-license "^3.0.1" validate-npm-package-license "^3.0.1"
normalize-path@^2.0.1: normalize-path@^2.0.1:
version "2.0.1" version "2.1.1"
resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-2.0.1.tgz#47886ac1662760d4261b7d979d241709d3ce3f7a" resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-2.1.1.tgz#1ab28b556e198363a8c1a6f7e6fa20137fe6aed9"
dependencies:
remove-trailing-separator "^1.0.1"
npmlog@^4.0.1: npmlog@^4.0.2:
version "4.0.2" version "4.0.2"
resolved "https://registry.yarnpkg.com/npmlog/-/npmlog-4.0.2.tgz#d03950e0e78ce1527ba26d2a7592e9348ac3e75f" resolved "https://registry.yarnpkg.com/npmlog/-/npmlog-4.0.2.tgz#d03950e0e78ce1527ba26d2a7592e9348ac3e75f"
dependencies: dependencies:
...@@ -2171,13 +2216,13 @@ on-finished@^2.1.0, on-finished@~2.3.0: ...@@ -2171,13 +2216,13 @@ on-finished@^2.1.0, on-finished@~2.3.0:
dependencies: dependencies:
ee-first "1.1.1" ee-first "1.1.1"
once@^1.3.0: once@^1.3.0, once@^1.3.3:
version "1.4.0" version "1.4.0"
resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1"
dependencies: dependencies:
wrappy "1" wrappy "1"
once@~1.3.0, once@~1.3.3: once@~1.3.0:
version "1.3.3" version "1.3.3"
resolved "https://registry.yarnpkg.com/once/-/once-1.3.3.tgz#b2e261557ce4c314ec8304f3fa82663e4297ca20" resolved "https://registry.yarnpkg.com/once/-/once-1.3.3.tgz#b2e261557ce4c314ec8304f3fa82663e4297ca20"
dependencies: dependencies:
...@@ -2227,7 +2272,7 @@ os-tmpdir@^1.0.0, os-tmpdir@~1.0.1: ...@@ -2227,7 +2272,7 @@ os-tmpdir@^1.0.0, os-tmpdir@~1.0.1:
version "1.0.2" version "1.0.2"
resolved "https://registry.yarnpkg.com/os-tmpdir/-/os-tmpdir-1.0.2.tgz#bbe67406c79aa85c5cfec766fe5734555dfa1274" resolved "https://registry.yarnpkg.com/os-tmpdir/-/os-tmpdir-1.0.2.tgz#bbe67406c79aa85c5cfec766fe5734555dfa1274"
osenv@^0.1.0: osenv@^0.1.0, osenv@^0.1.4:
version "0.1.4" version "0.1.4"
resolved "https://registry.yarnpkg.com/osenv/-/osenv-0.1.4.tgz#42fe6d5953df06c8064be6f176c3d05aaaa34644" resolved "https://registry.yarnpkg.com/osenv/-/osenv-0.1.4.tgz#42fe6d5953df06c8064be6f176c3d05aaaa34644"
dependencies: dependencies:
...@@ -2384,14 +2429,10 @@ qs@6.2.1: ...@@ -2384,14 +2429,10 @@ qs@6.2.1:
version "6.2.1" version "6.2.1"
resolved "https://registry.yarnpkg.com/qs/-/qs-6.2.1.tgz#ce03c5ff0935bc1d9d69a9f14cbd18e568d67625" resolved "https://registry.yarnpkg.com/qs/-/qs-6.2.1.tgz#ce03c5ff0935bc1d9d69a9f14cbd18e568d67625"
"qs@>= 0.4.0", qs@~6.4.0: "qs@>= 0.4.0", qs@^6.4.0, qs@~6.4.0:
version "6.4.0" version "6.4.0"
resolved "https://registry.yarnpkg.com/qs/-/qs-6.4.0.tgz#13e26d28ad6b0ffaa91312cd3bf708ed351e7233" resolved "https://registry.yarnpkg.com/qs/-/qs-6.4.0.tgz#13e26d28ad6b0ffaa91312cd3bf708ed351e7233"
qs@~4.0.0:
version "4.0.0"
resolved "https://registry.yarnpkg.com/qs/-/qs-4.0.0.tgz#c31d9b74ec27df75e543a86c78728ed8d4623607"
qs@~6.3.0: qs@~6.3.0:
version "6.3.2" version "6.3.2"
resolved "https://registry.yarnpkg.com/qs/-/qs-6.3.2.tgz#e75bd5f6e268122a2a0e0bda630b2550c166502c" resolved "https://registry.yarnpkg.com/qs/-/qs-6.3.2.tgz#e75bd5f6e268122a2a0e0bda630b2550c166502c"
...@@ -2407,17 +2448,17 @@ range-parser@~1.2.0: ...@@ -2407,17 +2448,17 @@ range-parser@~1.2.0:
version "1.2.0" version "1.2.0"
resolved "https://registry.yarnpkg.com/range-parser/-/range-parser-1.2.0.tgz#f49be6b487894ddc40dcc94a322f611092e00d5e" resolved "https://registry.yarnpkg.com/range-parser/-/range-parser-1.2.0.tgz#f49be6b487894ddc40dcc94a322f611092e00d5e"
raw-body@~2.1.2: raw-body@^2.2.0:
version "2.1.7" version "2.2.0"
resolved "https://registry.yarnpkg.com/raw-body/-/raw-body-2.1.7.tgz#adfeace2e4fb3098058014d08c072dcc59758774" resolved "https://registry.yarnpkg.com/raw-body/-/raw-body-2.2.0.tgz#994976cf6a5096a41162840492f0bdc5d6e7fb96"
dependencies: dependencies:
bytes "2.4.0" bytes "2.4.0"
iconv-lite "0.4.13" iconv-lite "0.4.15"
unpipe "1.0.0" unpipe "1.0.0"
rc@^1.0.1, rc@~1.1.6: rc@^1.0.1, rc@^1.1.7:
version "1.1.7" version "1.2.1"
resolved "https://registry.yarnpkg.com/rc/-/rc-1.1.7.tgz#c5ea564bb07aff9fd3a5b32e906c1d3a65940fea" resolved "https://registry.yarnpkg.com/rc/-/rc-1.2.1.tgz#2e03e8e42ee450b8cb3dce65be1bf8974e1dfd95"
dependencies: dependencies:
deep-extend "~0.4.0" deep-extend "~0.4.0"
ini "~1.3.0" ini "~1.3.0"
...@@ -2455,7 +2496,7 @@ readable-stream@1.1.x: ...@@ -2455,7 +2496,7 @@ readable-stream@1.1.x:
isarray "0.0.1" isarray "0.0.1"
string_decoder "~0.10.x" string_decoder "~0.10.x"
readable-stream@2.1.5, readable-stream@^2.0.0, "readable-stream@^2.0.0 || ^1.1.13", readable-stream@^2.0.2, readable-stream@~2.1.4: readable-stream@2.1.5, readable-stream@^2.0.0, readable-stream@^2.0.2, readable-stream@^2.0.6, readable-stream@^2.1.4:
version "2.1.5" version "2.1.5"
resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.1.5.tgz#66fa8b720e1438b364681f2ad1a63c618448c9d0" resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.1.5.tgz#66fa8b720e1438b364681f2ad1a63c618448c9d0"
dependencies: dependencies:
...@@ -2502,6 +2543,10 @@ registry-url@^3.0.0: ...@@ -2502,6 +2543,10 @@ registry-url@^3.0.0:
dependencies: dependencies:
rc "^1.0.1" rc "^1.0.1"
remove-trailing-separator@^1.0.1:
version "1.0.1"
resolved "https://registry.yarnpkg.com/remove-trailing-separator/-/remove-trailing-separator-1.0.1.tgz#615ebb96af559552d4bf4057c8436d486ab63cc4"
repeat-element@^1.1.2: repeat-element@^1.1.2:
version "1.1.2" version "1.1.2"
resolved "https://registry.yarnpkg.com/repeat-element/-/repeat-element-1.1.2.tgz#ef089a178d1483baae4d93eb98b4f9e4e11d990a" resolved "https://registry.yarnpkg.com/repeat-element/-/repeat-element-1.1.2.tgz#ef089a178d1483baae4d93eb98b4f9e4e11d990a"
...@@ -2541,7 +2586,7 @@ request@2.78.0: ...@@ -2541,7 +2586,7 @@ request@2.78.0:
tough-cookie "~2.3.0" tough-cookie "~2.3.0"
tunnel-agent "~0.4.1" tunnel-agent "~0.4.1"
request@^2.79.0: request@^2.81.0:
version "2.81.0" version "2.81.0"
resolved "https://registry.yarnpkg.com/request/-/request-2.81.0.tgz#c6928946a0e06c5f8d6f8a9333469ffda46298a0" resolved "https://registry.yarnpkg.com/request/-/request-2.81.0.tgz#c6928946a0e06c5f8d6f8a9333469ffda46298a0"
dependencies: dependencies:
...@@ -2591,9 +2636,9 @@ resolve-from@^2.0.0: ...@@ -2591,9 +2636,9 @@ resolve-from@^2.0.0:
version "2.0.0" version "2.0.0"
resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-2.0.0.tgz#9480ab20e94ffa1d9e80a804c7ea147611966b57" resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-2.0.0.tgz#9480ab20e94ffa1d9e80a804c7ea147611966b57"
resolve@^1.1.7: resolve@^1.3.2:
version "1.3.2" version "1.3.3"
resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.3.2.tgz#1f0442c9e0cbb8136e87b9305f932f46c7f28235" resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.3.3.tgz#655907c3469a8680dc2de3a275a8fdd69691f0e5"
dependencies: dependencies:
path-parse "^1.0.5" path-parse "^1.0.5"
...@@ -2610,9 +2655,9 @@ right-align@^0.1.1: ...@@ -2610,9 +2655,9 @@ right-align@^0.1.1:
dependencies: dependencies:
align-text "^0.1.1" align-text "^0.1.1"
rimraf@2, rimraf@~2.5.1, rimraf@~2.5.4: rimraf@2, rimraf@^2.5.1, rimraf@^2.6.1:
version "2.5.4" version "2.6.1"
resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.5.4.tgz#96800093cbf1a0c86bd95b4625467535c29dfa04" resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.6.1.tgz#c2338ec643df7a1b7fe5c54fa86f57428a55f33d"
dependencies: dependencies:
glob "^7.0.5" glob "^7.0.5"
...@@ -2638,7 +2683,7 @@ semver-diff@^2.0.0: ...@@ -2638,7 +2683,7 @@ semver-diff@^2.0.0:
dependencies: dependencies:
semver "^5.0.3" semver "^5.0.3"
"semver@2 || 3 || 4 || 5", semver@^5.0.3, semver@^5.1.0, semver@~5.3.0: "semver@2 || 3 || 4 || 5", semver@^5.0.3, semver@^5.1.0, semver@^5.3.0:
version "5.3.0" version "5.3.0"
resolved "https://registry.yarnpkg.com/semver/-/semver-5.3.0.tgz#9b2ce5d3de02d17c6012ad326aa6b4d0cf54f94f" resolved "https://registry.yarnpkg.com/semver/-/semver-5.3.0.tgz#9b2ce5d3de02d17c6012ad326aa6b4d0cf54f94f"
...@@ -2811,13 +2856,9 @@ split@0.3: ...@@ -2811,13 +2856,9 @@ split@0.3:
dependencies: dependencies:
through "2" through "2"
sprintf-js@^1.0.3:
version "1.0.3"
resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.0.3.tgz#04e6926f662895354f3dd015203633b857297e2c"
sshpk@^1.7.0: sshpk@^1.7.0:
version "1.11.0" version "1.13.0"
resolved "https://registry.yarnpkg.com/sshpk/-/sshpk-1.11.0.tgz#2d8d5ebb4a6fab28ffba37fa62a90f4a3ea59d77" resolved "https://registry.yarnpkg.com/sshpk/-/sshpk-1.13.0.tgz#ff2a3e4fd04497555fed97b39a0fd82fafb3a33c"
dependencies: dependencies:
asn1 "~0.2.3" asn1 "~0.2.3"
assert-plus "^1.0.0" assert-plus "^1.0.0"
...@@ -2913,20 +2954,20 @@ supports-color@^3.2.3: ...@@ -2913,20 +2954,20 @@ supports-color@^3.2.3:
dependencies: dependencies:
has-flag "^1.0.0" has-flag "^1.0.0"
tar-pack@~3.3.0: tar-pack@^3.4.0:
version "3.3.0" version "3.4.0"
resolved "https://registry.yarnpkg.com/tar-pack/-/tar-pack-3.3.0.tgz#30931816418f55afc4d21775afdd6720cee45dae" resolved "https://registry.yarnpkg.com/tar-pack/-/tar-pack-3.4.0.tgz#23be2d7f671a8339376cbdb0b8fe3fdebf317984"
dependencies: dependencies:
debug "~2.2.0" debug "^2.2.0"
fstream "~1.0.10" fstream "^1.0.10"
fstream-ignore "~1.0.5" fstream-ignore "^1.0.5"
once "~1.3.3" once "^1.3.3"
readable-stream "~2.1.4" readable-stream "^2.1.4"
rimraf "~2.5.1" rimraf "^2.5.1"
tar "~2.2.1" tar "^2.2.1"
uid-number "~0.0.6" uid-number "^0.0.6"
tar@~2.2.1: tar@^2.2.1:
version "2.2.1" version "2.2.1"
resolved "https://registry.yarnpkg.com/tar/-/tar-2.2.1.tgz#8e4d2a256c0e2185c6b18ad694aec968b83cb1d1" resolved "https://registry.yarnpkg.com/tar/-/tar-2.2.1.tgz#8e4d2a256c0e2185c6b18ad694aec968b83cb1d1"
dependencies: dependencies:
...@@ -2975,17 +3016,23 @@ tree-kill@^1.1.0: ...@@ -2975,17 +3016,23 @@ tree-kill@^1.1.0:
version "1.1.0" version "1.1.0"
resolved "https://registry.yarnpkg.com/tree-kill/-/tree-kill-1.1.0.tgz#c963dcf03722892ec59cba569e940b71954d1729" resolved "https://registry.yarnpkg.com/tree-kill/-/tree-kill-1.1.0.tgz#c963dcf03722892ec59cba569e940b71954d1729"
tslint@^3.15.1: tslint@^5.1.0:
version "3.15.1" version "5.1.0"
resolved "https://registry.yarnpkg.com/tslint/-/tslint-3.15.1.tgz#da165ca93d8fdc2c086b51165ee1bacb48c98ea5" resolved "https://registry.yarnpkg.com/tslint/-/tslint-5.1.0.tgz#51a47baeeb58956fcd617bd2cf00e2ef0eea2ed9"
dependencies: dependencies:
babel-code-frame "^6.22.0"
colors "^1.1.2" colors "^1.1.2"
diff "^2.2.1" diff "^3.2.0"
findup-sync "~0.3.0" findup-sync "~0.3.0"
glob "^7.0.3" glob "^7.1.1"
optimist "~0.6.0" optimist "~0.6.0"
resolve "^1.1.7" resolve "^1.3.2"
underscore.string "^3.3.4" semver "^5.3.0"
tsutils "^1.4.0"
tsutils@^1.4.0:
version "1.7.0"
resolved "https://registry.yarnpkg.com/tsutils/-/tsutils-1.7.0.tgz#2e63ccc2d6912bb095f7e363ff4100721dc86f50"
tunnel-agent@^0.6.0: tunnel-agent@^0.6.0:
version "0.6.0" version "0.6.0"
...@@ -3005,16 +3052,16 @@ type-detect@0.1.1: ...@@ -3005,16 +3052,16 @@ type-detect@0.1.1:
version "0.1.1" version "0.1.1"
resolved "https://registry.yarnpkg.com/type-detect/-/type-detect-0.1.1.tgz#0ba5ec2a885640e470ea4e8505971900dac58822" resolved "https://registry.yarnpkg.com/type-detect/-/type-detect-0.1.1.tgz#0ba5ec2a885640e470ea4e8505971900dac58822"
type-is@^1.5.5, type-is@~1.6.6: type-is@^1.5.5, type-is@^1.6.14:
version "1.6.14" version "1.6.15"
resolved "https://registry.yarnpkg.com/type-is/-/type-is-1.6.14.tgz#e219639c17ded1ca0789092dd54a03826b817cb2" resolved "https://registry.yarnpkg.com/type-is/-/type-is-1.6.15.tgz#cab10fb4909e441c82842eafe1ad646c81804410"
dependencies: dependencies:
media-typer "0.3.0" media-typer "0.3.0"
mime-types "~2.1.13" mime-types "~2.1.15"
typescript@^2.1.4: typescript@^2.1.4:
version "2.2.1" version "2.3.0"
resolved "https://registry.yarnpkg.com/typescript/-/typescript-2.2.1.tgz#4862b662b988a4c8ff691cc7969622d24db76ae9" resolved "https://registry.yarnpkg.com/typescript/-/typescript-2.3.0.tgz#2e63e09284392bc8158a2444c33e2093795c0418"
ua-parser-js@0.7.12: ua-parser-js@0.7.12:
version "0.7.12" version "0.7.12"
...@@ -3033,7 +3080,7 @@ uglify-to-browserify@~1.0.0: ...@@ -3033,7 +3080,7 @@ uglify-to-browserify@~1.0.0:
version "1.0.2" version "1.0.2"
resolved "https://registry.yarnpkg.com/uglify-to-browserify/-/uglify-to-browserify-1.0.2.tgz#6e0924d6bda6b5afe349e39a6d632850a0f882b7" resolved "https://registry.yarnpkg.com/uglify-to-browserify/-/uglify-to-browserify-1.0.2.tgz#6e0924d6bda6b5afe349e39a6d632850a0f882b7"
uid-number@~0.0.6: uid-number@^0.0.6:
version "0.0.6" version "0.0.6"
resolved "https://registry.yarnpkg.com/uid-number/-/uid-number-0.0.6.tgz#0ea10e8035e8eb5b8e4449f06da1c730663baa81" resolved "https://registry.yarnpkg.com/uid-number/-/uid-number-0.0.6.tgz#0ea10e8035e8eb5b8e4449f06da1c730663baa81"
...@@ -3045,13 +3092,6 @@ undefsafe@0.0.3: ...@@ -3045,13 +3092,6 @@ undefsafe@0.0.3:
version "0.0.3" version "0.0.3"
resolved "https://registry.yarnpkg.com/undefsafe/-/undefsafe-0.0.3.tgz#ecca3a03e56b9af17385baac812ac83b994a962f" resolved "https://registry.yarnpkg.com/undefsafe/-/undefsafe-0.0.3.tgz#ecca3a03e56b9af17385baac812ac83b994a962f"
underscore.string@^3.3.4:
version "3.3.4"
resolved "https://registry.yarnpkg.com/underscore.string/-/underscore.string-3.3.4.tgz#2c2a3f9f83e64762fdc45e6ceac65142864213db"
dependencies:
sprintf-js "^1.0.3"
util-deprecate "^1.0.2"
underscore@1.7.x: underscore@1.7.x:
version "1.7.0" version "1.7.0"
resolved "https://registry.yarnpkg.com/underscore/-/underscore-1.7.0.tgz#6bbaf0877500d36be34ecaa584e0db9fef035209" resolved "https://registry.yarnpkg.com/underscore/-/underscore-1.7.0.tgz#6bbaf0877500d36be34ecaa584e0db9fef035209"
...@@ -3072,7 +3112,7 @@ update-notifier@0.5.0: ...@@ -3072,7 +3112,7 @@ update-notifier@0.5.0:
semver-diff "^2.0.0" semver-diff "^2.0.0"
string-length "^1.0.0" string-length "^1.0.0"
util-deprecate@^1.0.2, util-deprecate@~1.0.1: util-deprecate@~1.0.1:
version "1.0.2" version "1.0.2"
resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf"
...@@ -3096,8 +3136,8 @@ validate-npm-package-license@^3.0.1: ...@@ -3096,8 +3136,8 @@ validate-npm-package-license@^3.0.1:
spdx-expression-parse "~1.0.0" spdx-expression-parse "~1.0.0"
vary@^1.0.0: vary@^1.0.0:
version "1.1.0" version "1.1.1"
resolved "https://registry.yarnpkg.com/vary/-/vary-1.1.0.tgz#e1e5affbbd16ae768dd2674394b9ad3022653140" resolved "https://registry.yarnpkg.com/vary/-/vary-1.1.1.tgz#67535ebb694c1d52257457984665323f587e8d37"
vercomp@^1.0.2: vercomp@^1.0.2:
version "1.0.2" version "1.0.2"
...@@ -3112,8 +3152,8 @@ verror@1.3.6: ...@@ -3112,8 +3152,8 @@ verror@1.3.6:
extsprintf "1.0.2" extsprintf "1.0.2"
vlq@^0.2.1: vlq@^0.2.1:
version "0.2.1" version "0.2.2"
resolved "https://registry.yarnpkg.com/vlq/-/vlq-0.2.1.tgz#14439d711891e682535467f8587c5630e4222a6c" resolved "https://registry.yarnpkg.com/vlq/-/vlq-0.2.2.tgz#e316d5257b40b86bb43cb8d5fea5d7f54d6b0ca1"
weinre@^2.0.0-pre-I0Z7U9OV: weinre@^2.0.0-pre-I0Z7U9OV:
version "2.0.0-pre-I0Z7U9OV" version "2.0.0-pre-I0Z7U9OV"
...@@ -3137,7 +3177,7 @@ window-size@0.1.0: ...@@ -3137,7 +3177,7 @@ window-size@0.1.0:
version "0.1.0" version "0.1.0"
resolved "https://registry.yarnpkg.com/window-size/-/window-size-0.1.0.tgz#5438cd2ea93b202efa3a19fe8887aee7c94f9c9d" resolved "https://registry.yarnpkg.com/window-size/-/window-size-0.1.0.tgz#5438cd2ea93b202efa3a19fe8887aee7c94f9c9d"
window-size@^0.1.2: window-size@^0.1.2, window-size@^0.1.4:
version "0.1.4" version "0.1.4"
resolved "https://registry.yarnpkg.com/window-size/-/window-size-0.1.4.tgz#f8e1aa1ee5a53ec5bf151ffa09742a6ad7697876" resolved "https://registry.yarnpkg.com/window-size/-/window-size-0.1.4.tgz#f8e1aa1ee5a53ec5bf151ffa09742a6ad7697876"
...@@ -3165,20 +3205,27 @@ wrappy@1: ...@@ -3165,20 +3205,27 @@ wrappy@1:
resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f"
write-file-atomic@^1.1.2: write-file-atomic@^1.1.2:
version "1.3.1" version "1.3.2"
resolved "https://registry.yarnpkg.com/write-file-atomic/-/write-file-atomic-1.3.1.tgz#7d45ba32316328dd1ec7d90f60ebc0d845bb759a" resolved "https://registry.yarnpkg.com/write-file-atomic/-/write-file-atomic-1.3.2.tgz#f80ac5e06d3a38996ab51b5d310db57102deb902"
dependencies: dependencies:
graceful-fs "^4.1.11" graceful-fs "^4.1.11"
imurmurhash "^0.1.4" imurmurhash "^0.1.4"
slide "^1.1.5" slide "^1.1.5"
ws@1.1.1, ws@^1.1.1: ws@1.1.1:
version "1.1.1" version "1.1.1"
resolved "https://registry.yarnpkg.com/ws/-/ws-1.1.1.tgz#082ddb6c641e85d4bb451f03d52f06eabdb1f018" resolved "https://registry.yarnpkg.com/ws/-/ws-1.1.1.tgz#082ddb6c641e85d4bb451f03d52f06eabdb1f018"
dependencies: dependencies:
options ">=0.0.5" options ">=0.0.5"
ultron "1.0.x" ultron "1.0.x"
ws@^1.1.1:
version "1.1.4"
resolved "https://registry.yarnpkg.com/ws/-/ws-1.1.4.tgz#57f40d036832e5f5055662a397c4de76ed66bf61"
dependencies:
options ">=0.0.5"
ultron "1.0.x"
wtf-8@1.0.0: wtf-8@1.0.0:
version "1.0.0" version "1.0.0"
resolved "https://registry.yarnpkg.com/wtf-8/-/wtf-8-1.0.0.tgz#392d8ba2d0f1c34d1ee2d630f15d0efb68e1048a" resolved "https://registry.yarnpkg.com/wtf-8/-/wtf-8-1.0.0.tgz#392d8ba2d0f1c34d1ee2d630f15d0efb68e1048a"
...@@ -3220,7 +3267,7 @@ yargs-parser@^4.1.0: ...@@ -3220,7 +3267,7 @@ yargs-parser@^4.1.0:
dependencies: dependencies:
camelcase "^3.0.0" camelcase "^3.0.0"
yargs@3.29.0, yargs@^3.10.0: yargs@3.29.0:
version "3.29.0" version "3.29.0"
resolved "https://registry.yarnpkg.com/yargs/-/yargs-3.29.0.tgz#1aab9660eae79d8b8f675bcaeeab6ee34c2cf69c" resolved "https://registry.yarnpkg.com/yargs/-/yargs-3.29.0.tgz#1aab9660eae79d8b8f675bcaeeab6ee34c2cf69c"
dependencies: dependencies:
...@@ -3250,6 +3297,18 @@ yargs@6.4.0: ...@@ -3250,6 +3297,18 @@ yargs@6.4.0:
y18n "^3.2.1" y18n "^3.2.1"
yargs-parser "^4.1.0" yargs-parser "^4.1.0"
yargs@^3.10.0:
version "3.32.0"
resolved "https://registry.yarnpkg.com/yargs/-/yargs-3.32.0.tgz#03088e9ebf9e756b69751611d2a5ef591482c995"
dependencies:
camelcase "^2.0.1"
cliui "^3.0.3"
decamelize "^1.1.1"
os-locale "^1.4.0"
string-width "^1.0.1"
window-size "^0.1.4"
y18n "^3.2.0"
yargs@~3.10.0: yargs@~3.10.0:
version "3.10.0" version "3.10.0"
resolved "https://registry.yarnpkg.com/yargs/-/yargs-3.10.0.tgz#f7ee7bd857dd7c1d2d38c0e74efbd681d1431fd1" resolved "https://registry.yarnpkg.com/yargs/-/yargs-3.10.0.tgz#f7ee7bd857dd7c1d2d38c0e74efbd681d1431fd1"
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment