Commit f64e6e2b authored by nano's avatar nano

init

parent af2efa57
# Created by .ignore support plugin (hsz.mobi)
.env
node_modules/
/.idea/
*.js
*.js.map
node-debug.log
/mongodb_config.json
.DS_Store
/npm-debug.log
*.js
*.map
\ No newline at end of file
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="DBNavigator.Project.DataEditorManager">
<record-view-column-sorting-type value="BY_INDEX" />
<value-preview-text-wrapping value="true" />
<value-preview-pinned value="false" />
</component>
<component name="DBNavigator.Project.DataExportManager">
<export-instructions>
<create-header value="true" />
<quote-values-containing-separator value="true" />
<quote-all-values value="false" />
<value-separator value="" />
<file-name value="" />
<file-location value="" />
<scope value="GLOBAL" />
<destination value="FILE" />
<format value="EXCEL" />
<charset value="UTF-8" />
</export-instructions>
</component>
<component name="DBNavigator.Project.DatabaseBrowserManager">
<autoscroll-to-editor value="false" />
<autoscroll-from-editor value="true" />
<show-object-properties value="true" />
<loaded-nodes />
</component>
<component name="DBNavigator.Project.EditorStateManager">
<last-used-providers />
</component>
<component name="DBNavigator.Project.MethodExecutionManager">
<method-browser />
<execution-history>
<group-entries value="true" />
<execution-inputs />
</execution-history>
<argument-values-cache />
</component>
<component name="DBNavigator.Project.ObjectDependencyManager">
<last-used-dependency-type value="INCOMING" />
</component>
<component name="DBNavigator.Project.ObjectQuickFilterManager">
<last-used-operator value="EQUAL" />
<filters />
</component>
<component name="DBNavigator.Project.ScriptExecutionManager" clear-outputs="true">
<recently-used-interfaces />
</component>
<component name="DBNavigator.Project.Settings">
<connections />
<browser-settings>
<general>
<display-mode value="TABBED" />
<navigation-history-size value="100" />
<show-object-details value="false" />
</general>
<filters>
<object-type-filter>
<object-type name="SCHEMA" enabled="true" />
<object-type name="USER" enabled="true" />
<object-type name="ROLE" enabled="true" />
<object-type name="PRIVILEGE" enabled="true" />
<object-type name="CHARSET" enabled="true" />
<object-type name="TABLE" enabled="true" />
<object-type name="VIEW" enabled="true" />
<object-type name="MATERIALIZED_VIEW" enabled="true" />
<object-type name="NESTED_TABLE" enabled="true" />
<object-type name="COLUMN" enabled="true" />
<object-type name="INDEX" enabled="true" />
<object-type name="CONSTRAINT" enabled="true" />
<object-type name="DATASET_TRIGGER" enabled="true" />
<object-type name="DATABASE_TRIGGER" enabled="true" />
<object-type name="SYNONYM" enabled="true" />
<object-type name="SEQUENCE" enabled="true" />
<object-type name="PROCEDURE" enabled="true" />
<object-type name="FUNCTION" enabled="true" />
<object-type name="PACKAGE" enabled="true" />
<object-type name="TYPE" enabled="true" />
<object-type name="TYPE_ATTRIBUTE" enabled="true" />
<object-type name="ARGUMENT" enabled="true" />
<object-type name="DIMENSION" enabled="true" />
<object-type name="CLUSTER" enabled="true" />
<object-type name="DBLINK" enabled="true" />
</object-type-filter>
</filters>
<sorting>
<object-type name="COLUMN" sorting-type="NAME" />
<object-type name="FUNCTION" sorting-type="NAME" />
<object-type name="PROCEDURE" sorting-type="NAME" />
<object-type name="ARGUMENT" sorting-type="POSITION" />
</sorting>
<default-editors>
<object-type name="VIEW" editor-type="SELECTION" />
<object-type name="PACKAGE" editor-type="SELECTION" />
<object-type name="TYPE" editor-type="SELECTION" />
</default-editors>
</browser-settings>
<navigation-settings>
<lookup-filters>
<lookup-objects>
<object-type name="SCHEMA" enabled="true" />
<object-type name="USER" enabled="false" />
<object-type name="ROLE" enabled="false" />
<object-type name="PRIVILEGE" enabled="false" />
<object-type name="CHARSET" enabled="false" />
<object-type name="TABLE" enabled="true" />
<object-type name="VIEW" enabled="true" />
<object-type name="MATERIALIZED VIEW" enabled="true" />
<object-type name="NESTED TABLE" enabled="false" />
<object-type name="COLUMN" enabled="false" />
<object-type name="INDEX" enabled="true" />
<object-type name="CONSTRAINT" enabled="true" />
<object-type name="DATASET TRIGGER" enabled="true" />
<object-type name="DATABASE TRIGGER" enabled="true" />
<object-type name="SYNONYM" enabled="false" />
<object-type name="SEQUENCE" enabled="true" />
<object-type name="PROCEDURE" enabled="true" />
<object-type name="FUNCTION" enabled="true" />
<object-type name="PACKAGE" enabled="true" />
<object-type name="TYPE" enabled="true" />
<object-type name="TYPE ATTRIBUTE" enabled="false" />
<object-type name="ARGUMENT" enabled="false" />
<object-type name="DIMENSION" enabled="false" />
<object-type name="CLUSTER" enabled="false" />
<object-type name="DBLINK" enabled="true" />
</lookup-objects>
<force-database-load value="false" />
<prompt-connection-selection value="true" />
<prompt-schema-selection value="true" />
</lookup-filters>
</navigation-settings>
<dataset-grid-settings>
<general>
<enable-zooming value="true" />
</general>
<sorting>
<nulls-first value="true" />
<max-sorting-columns value="4" />
</sorting>
<tracking-columns>
<columnNames value="" />
<visible value="true" />
<editable value="false" />
</tracking-columns>
</dataset-grid-settings>
<dataset-editor-settings>
<text-editor-popup>
<active value="false" />
<active-if-empty value="false" />
<data-length-threshold value="100" />
<popup-delay value="1000" />
</text-editor-popup>
<values-list-popup>
<show-popup-button value="true" />
<element-count-threshold value="1000" />
<data-length-threshold value="250" />
</values-list-popup>
<general>
<fetch-block-size value="100" />
<fetch-timeout value="30" />
<trim-whitespaces value="true" />
<convert-empty-strings-to-null value="true" />
<select-content-on-cell-edit value="true" />
<large-value-preview-active value="true" />
</general>
<filters>
<prompt-filter-dialog value="true" />
<default-filter-type value="BASIC" />
</filters>
<qualified-text-editor text-length-threshold="300">
<content-types>
<content-type name="Text" enabled="true" />
<content-type name="XML" enabled="true" />
<content-type name="DTD" enabled="true" />
<content-type name="HTML" enabled="true" />
<content-type name="XHTML" enabled="true" />
<content-type name="CSS" enabled="true" />
<content-type name="SQL" enabled="true" />
<content-type name="PL/SQL" enabled="true" />
<content-type name="JavaScript" enabled="true" />
<content-type name="JSP" enabled="true" />
<content-type name="JSPx" enabled="true" />
<content-type name="ASP" enabled="true" />
<content-type name="YAML" enabled="true" />
</content-types>
</qualified-text-editor>
<record-navigation>
<navigation-target value="VIEWER" />
</record-navigation>
</dataset-editor-settings>
<code-editor-settings>
<general>
<show-object-navigation-gutter value="false" />
<show-spec-declaration-navigation-gutter value="true" />
</general>
<confirmations>
<save-changes value="false" />
<revert-changes value="true" />
</confirmations>
</code-editor-settings>
<code-completion-settings>
<filters>
<basic-filter>
<filter-element type="RESERVED_WORD" id="keyword" selected="true" />
<filter-element type="RESERVED_WORD" id="function" selected="true" />
<filter-element type="RESERVED_WORD" id="parameter" selected="true" />
<filter-element type="RESERVED_WORD" id="datatype" selected="true" />
<filter-element type="RESERVED_WORD" id="exception" selected="true" />
<filter-element type="OBJECT" id="schema" selected="true" />
<filter-element type="OBJECT" id="role" selected="true" />
<filter-element type="OBJECT" id="user" selected="true" />
<filter-element type="OBJECT" id="privilege" selected="true" />
<user-schema>
<filter-element type="OBJECT" id="table" selected="true" />
<filter-element type="OBJECT" id="view" selected="true" />
<filter-element type="OBJECT" id="materialized view" selected="true" />
<filter-element type="OBJECT" id="index" selected="true" />
<filter-element type="OBJECT" id="constraint" selected="true" />
<filter-element type="OBJECT" id="trigger" selected="true" />
<filter-element type="OBJECT" id="synonym" selected="false" />
<filter-element type="OBJECT" id="sequence" selected="true" />
<filter-element type="OBJECT" id="procedure" selected="true" />
<filter-element type="OBJECT" id="function" selected="true" />
<filter-element type="OBJECT" id="package" selected="true" />
<filter-element type="OBJECT" id="type" selected="true" />
<filter-element type="OBJECT" id="dimension" selected="true" />
<filter-element type="OBJECT" id="cluster" selected="true" />
<filter-element type="OBJECT" id="dblink" selected="true" />
</user-schema>
<public-schema>
<filter-element type="OBJECT" id="table" selected="false" />
<filter-element type="OBJECT" id="view" selected="false" />
<filter-element type="OBJECT" id="materialized view" selected="false" />
<filter-element type="OBJECT" id="index" selected="false" />
<filter-element type="OBJECT" id="constraint" selected="false" />
<filter-element type="OBJECT" id="trigger" selected="false" />
<filter-element type="OBJECT" id="synonym" selected="false" />
<filter-element type="OBJECT" id="sequence" selected="false" />
<filter-element type="OBJECT" id="procedure" selected="false" />
<filter-element type="OBJECT" id="function" selected="false" />
<filter-element type="OBJECT" id="package" selected="false" />
<filter-element type="OBJECT" id="type" selected="false" />
<filter-element type="OBJECT" id="dimension" selected="false" />
<filter-element type="OBJECT" id="cluster" selected="false" />
<filter-element type="OBJECT" id="dblink" selected="false" />
</public-schema>
<any-schema>
<filter-element type="OBJECT" id="table" selected="true" />
<filter-element type="OBJECT" id="view" selected="true" />
<filter-element type="OBJECT" id="materialized view" selected="true" />
<filter-element type="OBJECT" id="index" selected="true" />
<filter-element type="OBJECT" id="constraint" selected="true" />
<filter-element type="OBJECT" id="trigger" selected="true" />
<filter-element type="OBJECT" id="synonym" selected="true" />
<filter-element type="OBJECT" id="sequence" selected="true" />
<filter-element type="OBJECT" id="procedure" selected="true" />
<filter-element type="OBJECT" id="function" selected="true" />
<filter-element type="OBJECT" id="package" selected="true" />
<filter-element type="OBJECT" id="type" selected="true" />
<filter-element type="OBJECT" id="dimension" selected="true" />
<filter-element type="OBJECT" id="cluster" selected="true" />
<filter-element type="OBJECT" id="dblink" selected="true" />
</any-schema>
</basic-filter>
<extended-filter>
<filter-element type="RESERVED_WORD" id="keyword" selected="true" />
<filter-element type="RESERVED_WORD" id="function" selected="true" />
<filter-element type="RESERVED_WORD" id="parameter" selected="true" />
<filter-element type="RESERVED_WORD" id="datatype" selected="true" />
<filter-element type="RESERVED_WORD" id="exception" selected="true" />
<filter-element type="OBJECT" id="schema" selected="true" />
<filter-element type="OBJECT" id="user" selected="true" />
<filter-element type="OBJECT" id="role" selected="true" />
<filter-element type="OBJECT" id="privilege" selected="true" />
<user-schema>
<filter-element type="OBJECT" id="table" selected="true" />
<filter-element type="OBJECT" id="view" selected="true" />
<filter-element type="OBJECT" id="materialized view" selected="true" />
<filter-element type="OBJECT" id="index" selected="true" />
<filter-element type="OBJECT" id="constraint" selected="true" />
<filter-element type="OBJECT" id="trigger" selected="true" />
<filter-element type="OBJECT" id="synonym" selected="true" />
<filter-element type="OBJECT" id="sequence" selected="true" />
<filter-element type="OBJECT" id="procedure" selected="true" />
<filter-element type="OBJECT" id="function" selected="true" />
<filter-element type="OBJECT" id="package" selected="true" />
<filter-element type="OBJECT" id="type" selected="true" />
<filter-element type="OBJECT" id="dimension" selected="true" />
<filter-element type="OBJECT" id="cluster" selected="true" />
<filter-element type="OBJECT" id="dblink" selected="true" />
</user-schema>
<public-schema>
<filter-element type="OBJECT" id="table" selected="true" />
<filter-element type="OBJECT" id="view" selected="true" />
<filter-element type="OBJECT" id="materialized view" selected="true" />
<filter-element type="OBJECT" id="index" selected="true" />
<filter-element type="OBJECT" id="constraint" selected="true" />
<filter-element type="OBJECT" id="trigger" selected="true" />
<filter-element type="OBJECT" id="synonym" selected="true" />
<filter-element type="OBJECT" id="sequence" selected="true" />
<filter-element type="OBJECT" id="procedure" selected="true" />
<filter-element type="OBJECT" id="function" selected="true" />
<filter-element type="OBJECT" id="package" selected="true" />
<filter-element type="OBJECT" id="type" selected="true" />
<filter-element type="OBJECT" id="dimension" selected="true" />
<filter-element type="OBJECT" id="cluster" selected="true" />
<filter-element type="OBJECT" id="dblink" selected="true" />
</public-schema>
<any-schema>
<filter-element type="OBJECT" id="table" selected="true" />
<filter-element type="OBJECT" id="view" selected="true" />
<filter-element type="OBJECT" id="materialized view" selected="true" />
<filter-element type="OBJECT" id="index" selected="true" />
<filter-element type="OBJECT" id="constraint" selected="true" />
<filter-element type="OBJECT" id="trigger" selected="true" />
<filter-element type="OBJECT" id="synonym" selected="true" />
<filter-element type="OBJECT" id="sequence" selected="true" />
<filter-element type="OBJECT" id="procedure" selected="true" />
<filter-element type="OBJECT" id="function" selected="true" />
<filter-element type="OBJECT" id="package" selected="true" />
<filter-element type="OBJECT" id="type" selected="true" />
<filter-element type="OBJECT" id="dimension" selected="true" />
<filter-element type="OBJECT" id="cluster" selected="true" />
<filter-element type="OBJECT" id="dblink" selected="true" />
</any-schema>
</extended-filter>
</filters>
<sorting enabled="true">
<sorting-element type="RESERVED_WORD" id="keyword" />
<sorting-element type="RESERVED_WORD" id="datatype" />
<sorting-element type="OBJECT" id="column" />
<sorting-element type="OBJECT" id="table" />
<sorting-element type="OBJECT" id="view" />
<sorting-element type="OBJECT" id="materialized view" />
<sorting-element type="OBJECT" id="index" />
<sorting-element type="OBJECT" id="constraint" />
<sorting-element type="OBJECT" id="trigger" />
<sorting-element type="OBJECT" id="synonym" />
<sorting-element type="OBJECT" id="sequence" />
<sorting-element type="OBJECT" id="procedure" />
<sorting-element type="OBJECT" id="function" />
<sorting-element type="OBJECT" id="package" />
<sorting-element type="OBJECT" id="type" />
<sorting-element type="OBJECT" id="dimension" />
<sorting-element type="OBJECT" id="cluster" />
<sorting-element type="OBJECT" id="dblink" />
<sorting-element type="OBJECT" id="schema" />
<sorting-element type="OBJECT" id="role" />
<sorting-element type="OBJECT" id="user" />
<sorting-element type="RESERVED_WORD" id="function" />
<sorting-element type="RESERVED_WORD" id="parameter" />
</sorting>
<format>
<enforce-code-style-case value="true" />
</format>
</code-completion-settings>
<execution-engine-settings>
<statement-execution>
<fetch-block-size value="100" />
<execution-timeout value="20" />
<debug-execution-timeout value="600" />
<focus-result value="false" />
<prompt-execution value="false" />
</statement-execution>
<script-execution>
<command-line-interfaces />
<execution-timeout value="300" />
</script-execution>
<method-execution>
<execution-timeout value="30" />
<debug-execution-timeout value="600" />
<parameter-history-size value="10" />
</method-execution>
</execution-engine-settings>
<operation-settings>
<transactions>
<uncommitted-changes>
<on-project-close value="ASK" />
<on-disconnect value="ASK" />
<on-autocommit-toggle value="ASK" />
</uncommitted-changes>
<multiple-uncommitted-changes>
<on-commit value="ASK" />
<on-rollback value="ASK" />
</multiple-uncommitted-changes>
</transactions>
<session-browser>
<disconnect-session value="ASK" />
<kill-session value="ASK" />
<reload-on-filter-change value="false" />
</session-browser>
<compiler>
<compile-type value="KEEP" />
<compile-dependencies value="ASK" />
<always-show-controls value="false" />
</compiler>
<debugger>
<debugger-type value="JDBC" />
<use-generic-runners value="true" />
</debugger>
</operation-settings>
<ddl-file-settings>
<extensions>
<mapping file-type-id="VIEW" extensions="vw" />
<mapping file-type-id="TRIGGER" extensions="trg" />
<mapping file-type-id="PROCEDURE" extensions="prc" />
<mapping file-type-id="FUNCTION" extensions="fnc" />
<mapping file-type-id="PACKAGE" extensions="pkg" />
<mapping file-type-id="PACKAGE_SPEC" extensions="pks" />
<mapping file-type-id="PACKAGE_BODY" extensions="pkb" />
<mapping file-type-id="TYPE" extensions="tpe" />
<mapping file-type-id="TYPE_SPEC" extensions="tps" />
<mapping file-type-id="TYPE_BODY" extensions="tpb" />
</extensions>
<general>
<lookup-ddl-files value="true" />
<create-ddl-files value="false" />
<synchronize-ddl-files value="true" />
<use-qualified-names value="false" />
<make-scripts-rerunnable value="true" />
</general>
</ddl-file-settings>
<general-settings>
<regional-settings>
<date-format value="MEDIUM" />
<number-format value="UNGROUPED" />
<locale value="SYSTEM_DEFAULT" />
<use-custom-formats value="false" />
</regional-settings>
<environment>
<environment-types>
<environment-type id="development" name="Development" description="Development environment" color="-2430209/-12296320" readonly-code="false" readonly-data="false" />
<environment-type id="integration" name="Integration" description="Integration environment" color="-2621494/-12163514" readonly-code="true" readonly-data="false" />
<environment-type id="production" name="Production" description="Productive environment" color="-11574/-10271420" readonly-code="true" readonly-data="true" />
<environment-type id="other" name="Other" description="" color="-1576/-10724543" readonly-code="false" readonly-data="false" />
</environment-types>
<visibility-settings>
<connection-tabs value="true" />
<dialog-headers value="true" />
<object-editor-tabs value="true" />
<script-editor-tabs value="false" />
<execution-result-tabs value="true" />
</visibility-settings>
</environment>
</general-settings>
</component>
<component name="DBNavigator.Project.StatementExecutionManager">
<execution-variables />
</component>
</project>
\ No newline at end of file
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="Encoding">
<file url="PROJECT" charset="UTF-8" />
</component>
</project>
\ No newline at end of file
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="JavaScriptLibraryMappings">
<includedPredefinedLibrary name="ECMAScript 6" />
</component>
</project>
\ No newline at end of file
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="JavaScriptSettings">
<option name="languageLevel" value="ES6" />
</component>
</project>
\ No newline at end of file
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="ProjectModuleManager">
<modules>
<module fileurl="file://$PROJECT_DIR$/.idea/mycard-console-backend.iml" filepath="$PROJECT_DIR$/.idea/mycard-console-backend.iml" />
</modules>
</component>
</project>
\ No newline at end of file
<?xml version="1.0" encoding="UTF-8"?>
<module type="WEB_MODULE" version="4">
<component name="NewModuleRootManager">
<content url="file://$MODULE_DIR$">
<excludeFolder url="file://$MODULE_DIR$/.tmp" />
<excludeFolder url="file://$MODULE_DIR$/temp" />
<excludeFolder url="file://$MODULE_DIR$/tmp" />
</content>
<orderEntry type="inheritedJdk" />
<orderEntry type="sourceFolder" forTests="false" />
</component>
</module>
\ No newline at end of file
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="TypeScriptCompiler">
<option name="isCompilerEnabled" value="true" />
<option name="useConfig" value="true" />
</component>
</project>
\ No newline at end of file
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="VcsDirectoryMappings">
<mapping directory="$PROJECT_DIR$" vcs="Git" />
</component>
</project>
\ No newline at end of file
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="ChangeListManager">
<list default="true" id="f0cbce64-0ebc-4f60-8c2d-2fe9e214a8c0" name="Default" comment="">
<change type="NEW" beforePath="" afterPath="$PROJECT_DIR$/.idea/dbnavigator.xml" />
<change type="NEW" beforePath="" afterPath="$PROJECT_DIR$/.idea/vcs.xml" />
<change type="NEW" beforePath="" afterPath="$PROJECT_DIR$/src/inversify.config.ts" />
<change type="NEW" beforePath="" afterPath="$PROJECT_DIR$/src/models/App.ts" />
<change type="NEW" beforePath="" afterPath="$PROJECT_DIR$/src/models/Iridium.ts" />
<change type="NEW" beforePath="" afterPath="$PROJECT_DIR$/src/models/Package.ts" />
<change type="NEW" beforePath="" afterPath="$PROJECT_DIR$/src/routes/upload.ts" />
<change type="NEW" beforePath="" afterPath="$PROJECT_DIR$/src/types.ts" />
<change type="NEW" beforePath="" afterPath="$PROJECT_DIR$/src/utils.ts" />
</list>
<ignored path="mycard-console-backend.iws" />
<ignored path=".idea/workspace.xml" />
<ignored path="$PROJECT_DIR$/.tmp/" />
<ignored path="$PROJECT_DIR$/temp/" />
<ignored path="$PROJECT_DIR$/tmp/" />
<option name="EXCLUDED_CONVERTED_TO_IGNORED" value="true" />
<option name="TRACKING_ENABLED" value="true" />
<option name="SHOW_DIALOG" value="false" />
<option name="HIGHLIGHT_CONFLICTS" value="true" />
<option name="HIGHLIGHT_NON_ACTIVE_CHANGELIST" value="false" />
<option name="LAST_RESOLUTION" value="IGNORE" />
</component>
<component name="CreatePatchCommitExecutor">
<option name="PATCH_PATH" value="" />
</component>
<component name="ExecutionTargetManager" SELECTED_TARGET="default_target" />
<component name="FavoritesManager">
<favorites_list name="mycard-console-backend" />
</component>
<component name="FileEditorManager">
<leaf SIDE_TABS_SIZE_LIMIT_KEY="300">
<file leaf-file-name="app.ts" pinned="false" current-in-tab="false">
<entry file="file://$PROJECT_DIR$/src/routes/app.ts">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="270">
<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>
</file>
<file leaf-file-name="Package.ts" pinned="false" current-in-tab="true">
<entry file="file://$PROJECT_DIR$/src/models/Package.ts">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="128">
<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>
</file>
</leaf>
</component>
<component name="FileTemplateManagerImpl">
<option name="RECENT_TEMPLATES">
<list>
<option value="tsconfig.json" />
<option value="package_json" />
<option value="TypeScript File" />
</list>
</option>
</component>
<component name="FindInProjectRecents">
<findStrings>
<find>@field</find>
<find>params</find>
<find>req</find>
<find>Array</find>
<find>news</find>
</findStrings>
</component>
<component name="Git.Settings">
<option name="RECENT_GIT_ROOT_PATH" value="$PROJECT_DIR$" />
</component>
<component name="IdeDocumentHistory">
<option name="CHANGED_PATHS">
<list>
<option value="$PROJECT_DIR$/Dockerfile" />
<option value="$PROJECT_DIR$/docker-compose.yml" />
<option value="$PROJECT_DIR$/src/models/app.ts" />
<option value="$PROJECT_DIR$/src/models/mongodb.js" />
<option value="$PROJECT_DIR$/package.json" />
<option value="$PROJECT_DIR$/.gitignore" />
<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/inversify.config.ts" />
<option value="$PROJECT_DIR$/src/models/User.ts" />
<option value="$PROJECT_DIR$/server.ts" />
<option value="$PROJECT_DIR$/tsconfig.json" />
<option value="$PROJECT_DIR$/.env" />
<option value="$PROJECT_DIR$/src/routes/upload.ts" />
<option value="$PROJECT_DIR$/src/routes/app.ts" />
<option value="$PROJECT_DIR$/src/models/Iridium.ts" />
<option value="$PROJECT_DIR$/src/utils.ts" />
<option value="$PROJECT_DIR$/src/models/App.ts" />
<option value="$PROJECT_DIR$/src/models/Package.ts" />
</list>
</option>
</component>
<component name="JsBuildToolGruntFileManager" detection-done="true" sorting="DEFINITION_ORDER" />
<component name="JsBuildToolPackageJson" detection-done="true" sorting="DEFINITION_ORDER" />
<component name="JsFlowSettings">
<service-enabled>false</service-enabled>
<exe-path />
<annotation-enable>false</annotation-enable>
<other-services-enabled>false</other-services-enabled>
</component>
<component name="JsGulpfileManager">
<detection-done>true</detection-done>
<sorting>DEFINITION_ORDER</sorting>
</component>
<component name="NodeModulesDirectoryManager">
<handled-path value="$PROJECT_DIR$/node_modules" />
</component>
<component name="ProjectFrameBounds">
<option name="x" value="515" />
<option name="y" value="27" />
<option name="width" value="1383" />
<option name="height" value="968" />
</component>
<component name="ProjectLevelVcsManager">
<ConfirmationsSetting value="2" id="Add" />
</component>
<component name="ProjectView">
<navigator currentView="ProjectPane" proportions="" version="1">
<flattenPackages />
<showMembers />
<showModules />
<showLibraryContents />
<hideEmptyPackages />
<abbreviatePackageNames />
<autoscrollToSource />
<autoscrollFromSource />
<sortByType />
<manualOrder />
<foldersAlwaysOnTop value="true" />
</navigator>
<panes>
<pane id="ProjectPane">
<subPane>
<PATH>
<PATH_ELEMENT>
<option name="myItemId" value="moecube-console-backend" />
<option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.ProjectViewProjectNode" />
</PATH_ELEMENT>
<PATH_ELEMENT>
<option name="myItemId" value="moecube-console-backend" />
<option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
</PATH_ELEMENT>
</PATH>
<PATH>
<PATH_ELEMENT>
<option name="myItemId" value="moecube-console-backend" />
<option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.ProjectViewProjectNode" />
</PATH_ELEMENT>
<PATH_ELEMENT>
<option name="myItemId" value="moecube-console-backend" />
<option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
</PATH_ELEMENT>
<PATH_ELEMENT>
<option name="myItemId" value="src" />
<option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
</PATH_ELEMENT>
</PATH>
<PATH>
<PATH_ELEMENT>
<option name="myItemId" value="moecube-console-backend" />
<option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.ProjectViewProjectNode" />
</PATH_ELEMENT>
<PATH_ELEMENT>
<option name="myItemId" value="moecube-console-backend" />
<option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
</PATH_ELEMENT>
<PATH_ELEMENT>
<option name="myItemId" value="src" />
<option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
</PATH_ELEMENT>
<PATH_ELEMENT>
<option name="myItemId" value="models" />
<option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
</PATH_ELEMENT>
</PATH>
</subPane>
</pane>
<pane id="Scope" />
<pane id="Scratches" />
</panes>
</component>
<component name="PropertiesComponent">
<property name="WebServerToolWindowFactoryState" value="false" />
<property name="nodejs_interpreter_path" value="/usr/local/bin/node" />
<property name="js.eslint.eslintPackage" value="" />
<property name="js-jscs-nodeInterpreter" value="/usr/local/bin/node" />
<property name="HbShouldOpenHtmlAsHb" value="" />
<property name="settings.editor.selected.configurable" value="Settings.JavaScript" />
<property name="JavaScriptPreferStrict" value="true" />
<property name="JavaScriptWeakerCompletionTypeGuess" value="false" />
</component>
<component name="RecentsManager">
<key name="MoveFile.RECENT_KEYS">
<recent name="$PROJECT_DIR$/src" />
</key>
</component>
<component name="RunDashboard">
<option name="ruleStates">
<list>
<RuleState>
<option name="name" value="ConfigurationTypeDashboardGroupingRule" />
</RuleState>
<RuleState>
<option name="name" value="StatusDashboardGroupingRule" />
</RuleState>
</list>
</option>
</component>
<component name="RunManager" selected="Node.js.Unnamed">
<configuration default="true" type="DartCommandLineRunConfigurationType" factoryName="Dart Command Line Application">
<method />
</configuration>
<configuration default="true" type="DartTestRunConfigurationType" factoryName="Dart Test">
<method />
</configuration>
<configuration default="true" type="JavaScriptTestRunnerJest" factoryName="Jest">
<node-interpreter value="project" />
<working-dir value="" />
<envs />
<scope-kind value="ALL" />
<method />
</configuration>
<configuration default="true" type="JavaScriptTestRunnerKarma" factoryName="Karma">
<config-file value="" />
<node-interpreter value="project" />
<envs />
<method />
</configuration>
<configuration default="true" type="JavaScriptTestRunnerProtractor" factoryName="Protractor">
<config-file value="" />
<node-interpreter value="project" />
<envs />
<method />
</configuration>
<configuration default="true" type="JavascriptDebugType" factoryName="JavaScript Debug">
<method />
</configuration>
<configuration default="true" type="NodeJSConfigurationType" factoryName="Node.js" path-to-node="project" working-dir="">
<method />
</configuration>
<configuration default="true" type="cucumber.js" factoryName="Cucumber.js">
<option name="cucumberJsArguments" value="" />
<option name="executablePath" />
<option name="filePath" />
<method />
</configuration>
<configuration default="true" type="js.build_tools.gulp" factoryName="Gulp.js">
<node-interpreter>project</node-interpreter>
<node-options />
<gulpfile />
<tasks />
<arguments />
<envs />
<method />
</configuration>
<configuration default="true" type="js.build_tools.npm" factoryName="npm">
<command value="run" />
<scripts />
<node-interpreter value="project" />
<envs />
<method />
</configuration>
<configuration default="true" type="mocha-javascript-test-runner" factoryName="Mocha">
<node-interpreter>project</node-interpreter>
<node-options />
<working-directory />
<pass-parent-env>true</pass-parent-env>
<envs />
<ui />
<extra-mocha-options />
<test-kind>DIRECTORY</test-kind>
<test-directory />
<recursive>false</recursive>
<method />
</configuration>
<configuration default="false" name="Unnamed" type="NodeJSConfigurationType" factoryName="Node.js" path-to-node="project" working-dir="$PROJECT_DIR$">
<envs>
<env name="DATABASE" value="mongodb://wudizhanche.mycard.moe:27017/mycard" />
</envs>
<EXTENSION ID="com.jetbrains.nodejs.remote.docker.NodeJSDockerRunConfigurationExtension">
<option name="envVars">
<list />
</option>
<option name="extraHosts">
<list />
</option>
<option name="links">
<list />
</option>
<option name="networkDisabled" value="false" />
<option name="networkMode" value="bridge" />
<option name="portBindings">
<list />
</option>
<option name="publishAllPorts" value="false" />
<option name="version" value="1" />
<option name="volumeBindings">
<list />
</option>
</EXTENSION>
<method />
</configuration>
<list size="1">
<item index="0" class="java.lang.String" itemvalue="Node.js.Unnamed" />
</list>
</component>
<component name="ShelveChangesManager" show_recycled="false">
<option name="remove_strategy" value="false" />
</component>
<component name="TaskManager">
<task active="true" id="Default" summary="Default task">
<changelist id="f0cbce64-0ebc-4f60-8c2d-2fe9e214a8c0" name="Default" comment="" />
<created>1489993717444</created>
<option name="number" value="Default" />
<option name="presentableId" value="Default" />
<updated>1489993717444</updated>
<workItem from="1489993718655" duration="3000" />
<workItem from="1489993773284" duration="15000" />
<workItem from="1489994319766" duration="11421000" />
<workItem from="1490063627839" duration="296000" />
<workItem from="1492397500450" duration="9337000" />
<workItem from="1492407479780" duration="11530000" />
</task>
<servers />
</component>
<component name="TimeTrackingManager">
<option name="totallyTimeSpent" value="32602000" />
</component>
<component name="TodoView">
<todo-panel id="selected-file">
<is-autoscroll-to-source value="true" />
</todo-panel>
<todo-panel id="all">
<are-packages-shown value="true" />
<is-autoscroll-to-source value="true" />
</todo-panel>
</component>
<component name="ToolWindowManager">
<frame x="515" y="27" width="1383" height="968" extended-state="0" />
<editor active="true" />
<layout>
<window_info id="TypeScript" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.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.25624081" sideWeight="0.5" order="0" side_tool="false" content_ui="combo" />
<window_info id="TODO" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.33" sideWeight="0.5" order="6" side_tool="false" content_ui="tabs" />
<window_info id="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="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="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="Version Control" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.33" sideWeight="0.5" order="7" 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.35045663" sideWeight="0.5" order="7" 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="Favorites" active="false" anchor="left" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.33" sideWeight="0.5" order="2" side_tool="true" 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="Message" 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="0" side_tool="false" content_ui="tabs" />
<window_info id="Commander" active="false" anchor="right" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.4" sideWeight="0.5" order="0" side_tool="false" content_ui="tabs" />
<window_info id="Inspection" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.4" sideWeight="0.5" order="5" side_tool="false" content_ui="tabs" />
<window_info id="Hierarchy" active="false" anchor="right" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="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.32975295" sideWeight="0.5" order="1" side_tool="false" content_ui="tabs" />
<window_info id="Ant Build" active="false" anchor="right" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.25" sideWeight="0.5" order="1" side_tool="false" content_ui="tabs" />
</layout>
</component>
<component name="TypeScriptGeneratedFilesManager">
<option name="processedProjectFiles" value="true" />
<option name="exactExcludedFiles">
<list>
<option value="$PROJECT_DIR$/server.js.map" />
<option value="$PROJECT_DIR$/server.js" />
<option value="$PROJECT_DIR$/src/routes/app.js.map" />
<option value="$PROJECT_DIR$/src/routes/app.js" />
<option value="$PROJECT_DIR$/src/types.js" />
<option value="$PROJECT_DIR$/src/types.js.map" />
<option value="$PROJECT_DIR$/src/models/Iridium.js.map" />
<option value="$PROJECT_DIR$/src/models/Iridium.js" />
<option value="$PROJECT_DIR$/src/models/Package.js" />
<option value="$PROJECT_DIR$/src/models/Package.js.map" />
<option value="$PROJECT_DIR$/src/routes/upload.js.map" />
<option value="$PROJECT_DIR$/src/routes/upload.js" />
<option value="$PROJECT_DIR$/src/utils.js.map" />
<option value="$PROJECT_DIR$/src/utils.js" />
</list>
</option>
</component>
<component name="Vcs.Log.UiProperties">
<option name="RECENTLY_FILTERED_USER_GROUPS">
<collection />
</option>
<option name="RECENTLY_FILTERED_BRANCH_GROUPS">
<collection />
</option>
</component>
<component name="VcsContentAnnotationSettings">
<option name="myLimit" value="2678400000" />
</component>
<component name="XDebuggerManager">
<breakpoint-manager />
<watches-manager />
</component>
<component name="editorHistoryManager">
<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" />
<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="108">
<caret line="7" column="58" lean-forward="true" selection-start-line="7" selection-start-column="58" selection-end-line="7" selection-end-column="58" />
<folding>
<element signature="e#0#37#0" expanded="true" />
</folding>
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/server.ts">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="918">
<caret line="54" column="25" lean-forward="false" selection-start-line="54" selection-start-column="25" selection-end-line="54" selection-end-column="25" />
<folding>
<element signature="e#75#101#0" expanded="false" />
<element signature="e#881#926#0" expanded="false" />
</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="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" />
<folding>
<element signature="e#39#80#0" expanded="true" />
</folding>
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/src/models/mongodb.ts" />
<entry file="file://$PROJECT_DIR$/server.ts">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="1200">
<caret line="62" column="27" lean-forward="false" selection-start-line="62" selection-start-column="27" selection-end-line="62" selection-end-column="27" />
<folding>
<element signature="e#75#101#0" expanded="false" />
<element signature="e#881#926#0" expanded="false" />
</folding>
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/src/models/mongodb.ts" />
<entry file="file://$PROJECT_DIR$/src/routes/app.ts">
<provider selected="true" editor-type-id="text-editor">
<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" />
<folding>
<element signature="e#39#80#0" expanded="true" />
</folding>
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/yarn.lock">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="0">
<caret line="0" column="0" lean-forward="false" selection-start-line="0" selection-start-column="0" selection-end-line="0" selection-end-column="0" />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/src/router.ts" />
<entry file="file://$PROJECT_DIR$/docker-compose.yml">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="160">
<caret line="8" column="12" lean-forward="false" selection-start-line="8" selection-start-column="12" selection-end-line="8" selection-end-column="12" />
<folding />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/Dockerfile">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="80">
<caret line="4" column="25" lean-forward="true" selection-start-line="4" selection-start-column="25" selection-end-line="4" selection-end-column="25" />
<folding />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/.gitignore">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="20">
<caret line="1" column="12" lean-forward="true" selection-start-line="1" selection-start-column="12" selection-end-line="1" selection-end-column="12" />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/src/models/mongodb.js" />
<entry file="file://$PROJECT_DIR$/server.js">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="0">
<caret line="0" column="0" lean-forward="false" selection-start-line="0" selection-start-column="0" selection-end-line="0" selection-end-column="0" />
</state>
</provider>
</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/inversify.config.ts">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="90">
<caret line="5" column="24" lean-forward="true" selection-start-line="5" selection-start-column="24" selection-end-line="5" selection-end-column="24" />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/package.json">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="54">
<caret line="3" column="14" lean-forward="true" selection-start-line="3" selection-start-column="14" selection-end-line="3" selection-end-column="14" />
<folding />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/src/models/mongodb.ts" />
<entry file="file://$PROJECT_DIR$/node_modules/iridium/dist/lib/Model.d.ts">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="-362">
<caret line="221" column="4" lean-forward="false" selection-start-line="221" selection-start-column="4" selection-end-line="221" selection-end-column="4" />
<folding />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/node_modules/@types/koa/index.d.ts">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="-5396">
<caret line="337" column="12" lean-forward="false" selection-start-line="337" selection-start-column="12" selection-end-line="337" selection-end-column="12" />
<folding />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/node_modules/iridium/dist/lib/Instance.d.ts">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="62">
<caret line="27" column="3" lean-forward="false" selection-start-line="27" selection-start-column="3" selection-end-line="27" selection-end-column="3" />
<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="192">
<caret line="45" column="24" lean-forward="false" selection-start-line="45" selection-start-column="24" selection-end-line="45" selection-end-column="24" />
<folding />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/node_modules/@types/serve-static/index.d.ts">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="181">
<caret line="25" column="23" lean-forward="true" selection-start-line="25" selection-start-column="23" selection-end-line="25" selection-end-column="23" />
<folding />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/server.ts">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="288">
<caret line="19" column="29" lean-forward="true" selection-start-line="19" selection-start-column="29" selection-end-line="19" selection-end-column="29" />
<folding>
<element signature="e#881#926#0" expanded="false" />
</folding>
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/tsconfig.json">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="144">
<caret line="8" column="31" lean-forward="true" selection-start-line="8" selection-start-column="31" selection-end-line="8" selection-end-column="31" />
<folding />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/.env">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="72">
<caret line="4" column="17" lean-forward="true" selection-start-line="4" selection-start-column="17" selection-end-line="4" selection-end-column="17" />
<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="348">
<caret line="20" column="0" lean-forward="true" selection-start-line="20" selection-start-column="0" selection-end-line="20" selection-end-column="0" />
<folding>
<element signature="e#0#30#0" expanded="true" />
</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="126">
<caret line="7" column="66" lean-forward="true" selection-start-line="7" selection-start-column="66" selection-end-line="7" selection-end-column="66" />
<folding>
<element signature="e#0#37#0" expanded="true" />
</folding>
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/src/utils.ts">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="252">
<caret line="14" column="1" lean-forward="true" selection-start-line="14" selection-start-column="1" selection-end-line="14" selection-end-column="1" />
<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="346">
<caret line="116" column="27" lean-forward="true" selection-start-line="116" selection-start-column="27" selection-end-line="116" selection-end-column="27" />
<folding>
<element signature="e#0#84#0" expanded="true" />
</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="270">
<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="128">
<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>
</component>
</project>
\ No newline at end of file
FROM node
FROM node:alpine
RUN apt-get update
RUN apt-get install -y gdebi-core
RUN wget https://repo.varnish-cache.org/pkg/5.0.0/varnish_5.0.0-1_amd64.deb
RUN gdebi -n varnish_5.0.0-1_amd64.deb
RUN rm varnish_5.0.0-1_amd64.deb
MAINTAINER nanoo
RUN mkdir -p /usr/src/app
WORKDIR /usr/src/app
COPY package.json /usr/src/app/
COPY npm-shrinkwrap.json /usr/src/app/
RUN npm install
COPY . /usr/src/app
CMD [ "./entrypoint.sh" ]
#COPY package.json /usr/src/app
#RUN npm install
#COPY . /usr/src/app
EXPOSE 8080
CMD ["npm","start"]
\ No newline at end of file
[
{
"id": "th06",
"name": {
"zh-CN": "东方红魔乡",
"en-US": "The Embodiment of Scarlet Devil"
},
"description": {
"zh-CN": " 「东方红魔乡」是20世纪延长型完全2D射击游戏(STG)。<br/> 是以表现STG里最有意思的避弹和模式化为主的游戏。<br/> 看起来很可怕的弹幕也都被调整到了可以避开的程度,所以请不要气馁,多多挑战吧。<br/> 全6(+1)面,难度设置地稍微偏低。"
},
"developers": {
"zh-CN": [
{
"name": "上海爱丽丝幻乐团",
"url": "http://www16.big.or.jp/~zun/"
}
]
},
"publishers": {
"zh-CN": [
{
"name": "",
"url": ""
}
]
},
"released_at": "2002-08-11" ,
"category": "game",
"tags": [
"touhou"
],
"dependencies": {
"win32": [],
"darwin": [
"wine"
]
},
"references": {
"win32": [
"th06-lang-zh-TW"
],
"darwin": [
"th06-lang-zh-TW"
]
},
"author": "ZUN",
"homepage": "http://www.myacg.cc",
"locales": [
"ja-JP"
],
"actions": {
"win32": {
"main": {
"execute": "東方紅魔郷.exe",
"args": [],
"env": {}
},
"custom": {
"execute": "custom.exe",
"args": [],
"env": {}
}
},
"darwin": {
"main": {
"execute": "東方紅魔郷.exe",
"args": [],
"open": "wine",
"env": {
"LANG": "ja_JP.UTF-8"
}
},
"custom": {
"execute": "custom.exe",
"args": [],
"open": "wine",
"env": {
"LANG": "ja_JP.UTF-8"
}
}
}
},
"version": {
"win32": "1.02h-1",
"darwin": "1.02h-1"
},
"news": [],
"conference": "touhou",
"icon": "https://r.my-card.in/downloads/assets/th6-图标/th06_105.ico",
"cover": "https://r.my-card.in/downloads/assets/th6-图标/1024px-东方红魔乡cover1.jpg",
"background": "https://r.my-card.in/downloads/assets/th6-图标/1024px-东方红魔乡cover4.jpg"
},
{
"id": "th06-lang-zh-TW",
"category": "module",
"parent": "th06",
"tags": [
"language"
],
"dependencies": {
"win32": [
"th06"
],
"darwin": [
"th06",
"wine"
]
},
"references": {
"win32": [],
"darwin": []
},
"author": "ZUN",
"homepage": "http://www.myacg.cc",
"locales": [
"zh-TW"
],
"actions": {
"win32": {
"main": {
"execute": "th06.exe",
"args": [],
"env": {}
},
"custom": {
"execute": "custom.exe",
"args": [],
"env": {}
}
},
"darwin": {
"main": {
"execute": "th06.exe",
"args": [],
"open": "wine",
"env": {
"LANG": "zh_CN.UTF-8"
}
},
"custom": {
"execute": "custom.exe",
"args": [],
"open": "wine",
"env": {
"LANG": "zh_CN.UTF-8"
}
}
}
},
"version": {
"win32": "1.06",
"darwin": "1.06"
},
"news": []
},
{
"id": "th07",
"name": {
"zh-CN": "东方妖妖梦",
"en-US": "Perfect Cherry Blossom"
},
"description": {
"zh-CN": " 「东方妖妖梦 ~ Perfect Cherry Blossom.」为少女弹幕射击游戏。<br/> 请享受提炼出的仅由弹幕与避弹组成的究极的形状美吧。<br/><br/> *本游戏包含过激的弹幕场景<br/>  请小孩子,或者弹幕过敏症患者与医生联系。"
},
"developers": {
"zh-CN": [
{
"name": "上海爱丽丝幻乐团",
"url": "http://www16.big.or.jp/~zun/"
}
]
},
"publishers": {
"zh-CN": [
{
"name": "",
"url": ""
}
]
},
"released_at": "2003-08-17" ,
"category": "game",
"tags": [
"touhou"
],
"dependencies": {
"win32": [],
"darwin": [
"wine"
]
},
"references": {
"win32": [
"th07-lang-zh-TW"
],
"darwin": [
"th07-lang-zh-TW"
]
},
"author": "ZUN",
"homepage": "http://www.myacg.cc",
"locales": [
"ja-JP"
],
"actions": {
"win32": {
"main": {
"execute": "th07.exe",
"args": [],
"env": {}
},
"custom": {
"execute": "custom.exe",
"args": [],
"env": {}
}
},
"darwin": {
"main": {
"execute": "th07.exe",
"args": [],
"open": "wine",
"env": {
"LANG": "ja_JP.UTF-8"
}
},
"custom": {
"execute": "custom.exe",
"args": [],
"open": "wine",
"env": {
"LANG": "ja_JP.UTF-8"
}
}
}
},
"version": {
"win32": "1.06",
"darwin": "1.06"
},
"news": [],
"conference": "touhou",
"icon": "https://r.my-card.in/downloads/assets/th7-图标/th07_105.ico",
"cover": "https://r.my-card.in/downloads/assets/th7-图标/800px-东方妖妖梦cover1.jpg",
"background": "https://r.my-card.in/downloads/assets/th7-图标/1024px-东方妖妖梦cover4.jpg"
},
{
"id": "th07-lang-zh-TW",
"category": "module",
"parent": "th07",
"tags": [
"language"
],
"dependencies": {
"win32": [
"th07"
],
"darwin": [
"wine",
"th07"
]
},
"references": {
"win32": [],
"darwin": []
},
"author": "ZUN",
"homepage": "http://www.myacg.cc",
"locales": [
"zh-TW"
],
"actions": {
"win32": {
"main": {
"execute": "th07.exe",
"args": [],
"env": {}
},
"custom": {
"execute": "custom.exe",
"args": [],
"env": {}
}
},
"darwin": {
"main": {
"execute": "th07.exe",
"args": [],
"open": "wine",
"env": {
"LANG": "zh_CN.UTF-8"
}
},
"custom": {
"execute": "custom.exe",
"args": [],
"open": "wine",
"env": {
"LANG": "zh_CN.UTF-8"
}
}
}
},
"version": {
"win32": "1.06",
"darwin": "1.06"
},
"news": []
},
{
"id": "th075",
"name": {
"zh-CN": "东方萃梦想",
"en-US": "Immaterial and Missing Power"
},
"description": {
"zh-CN": "東方萃夢想 ~ Immaterial and Missing Power.(とうほうすいむそう,Touhou Suimusou)本作是 东方Project官方游戏 系列的 第七点五作(Th7.5) ,也是发布在Windows平台上的 (新作)第一个小数点作。"
},
"developers": {
"zh-CN": [
{
"name": "上海爱丽丝幻乐团",
"url": "http://www16.big.or.jp/~zun/"
},
{
"name": "黄昏边境",
"url": "http://www.tasofro.net/"
}
]
},
"publishers": {
"zh-CN": [
{
"name": "",
"url": ""
}
]
},
"released_at": "2004-12-30" ,
"category": "game",
"tags": [
"touhou"
],
"dependencies": {
"win32": [],
"darwin": [
"wine"
]
},
"references": {
"win32": [
"th075-lang-zh-TW"
],
"darwin": [
"th075-lang-zh-TW"
]
},
"author": "ZUN",
"homepage": "http://www.myacg.cc",
"locales": [
"ja-JP"
],
"actions": {
"win32": {
"main": {
"execute": "th075.exe",
"args": [],
"env": {}
},
"custom": {
"execute": "config.exe",
"args": [],
"env": {}
}
},
"darwin": {
"main": {
"execute": "th075.exe",
"args": [],
"open": "wine",
"env": {
"LANG": "ja_JP.UTF-8"
}
},
"custom": {
"execute": "config.exe",
"args": [],
"open": "wine",
"env": {
"LANG": "ja_JP.UTF-8"
}
}
}
},
"version": {
"win32": "1.06",
"darwin": "1.06"
},
"news": [],
"conference": "touhou",
"icon": "https://r.my-card.in/downloads/assets/th75-图标/th075_ICON1.ico",
"cover": "https://r.my-card.in/downloads/assets/th75-图标/800px-东方萃梦想booklet1.jpg",
"background": "https://r.my-card.in/downloads/assets/th75-图标/1024px-东方萃梦想cover4.jpg"
},
{
"id": "th075-lang-zh-TW",
"category": "module",
"parent": "th075",
"tags": [
"language"
],
"dependencies": {
"win32": [
"th075"
],
"darwin": [
"wine",
"th075"
]
},
"references": {
"win32": [],
"darwin": []
},
"author": "ZUN",
"homepage": "http://www.myacg.cc",
"locales": [
"zh-TW"
],
"actions": {
"win32": {
"main": {
"execute": "th075c.exe",
"args": [],
"env": {}
},
"custom": {
"execute": "configCN.exe",
"args": [],
"env": {}
}
},
"darwin": {
"main": {
"execute": "th075c.exe",
"args": [],
"open": "wine",
"env": {
"LANG": "zh_CN.UTF-8"
}
},
"custom": {
"execute": "configCN.exe",
"args": [],
"open": "wine",
"env": {
"LANG": "zh_CN.UTF-8"
}
}
}
},
"version": {
"win32": "1.06",
"darwin": "1.06"
},
"news": []
},
{
"id": "th08",
"name": {
"zh-CN": "东方永夜抄",
"en-US": "Imperishable Night"
},
"description": {
"zh-CN": " 「东方永夜抄 ~ Imperishable Night.」为少女弹幕射击游戏(STG)。<br/> 因为现在的作品总是含有某些使人厌倦的弹幕,所以本作以发现崭新的存在价值为目的。(稍微有些假)<br/><br/> *本游戏包含过激的弹幕场景<br/>  请小孩子,或者弹幕过敏症患者与医生联系。"
},
"developers": {
"zh-CN": [
{
"name": "上海爱丽丝幻乐团",
"url": "http://www16.big.or.jp/~zun/"
}
]
},
"publishers": {
"zh-CN": [
{
"name": "",
"url": ""
}
]
},
"released_at": "2004-08-15" ,
"category": "game",
"tags": [
"touhou"
],
"dependencies": {
"win32": [],
"darwin": [
"wine"
]
},
"references": {
"win32": [
"th08-lang-zh-CN"
],
"darwin": [
"th08-lang-zh-CN"
]
},
"author": "ZUN",
"homepage": "http://www.myacg.cc",
"locales": [
"ja-JP"
],
"actions": {
"win32": {
"main": {
"execute": "th08.exe",
"args": [],
"env": {}
},
"custom": {
"execute": "custom.exe",
"args": [],
"env": {}
}
},
"darwin": {
"main": {
"execute": "th08.exe",
"args": [],
"open": "wine",
"env": {
"LANG": "ja_JP.UTF-8"
}
},
"custom": {
"execute": "custom.exe",
"args": [],
"open": "wine",
"env": {
"LANG": "ja_JP.UTF-8"
}
}
}
},
"version": {
"win32": "1.06",
"darwin": "1.06"
},
"news": [],
"conference": "touhou",
"icon": "https://r.my-card.in/downloads/assets/th8-图标/th08_105.ico",
"cover": "https://r.my-card.in/downloads/assets/th8-图标/800px-东方永夜抄cover1.jpg",
"background": "https://r.my-card.in/downloads/assets/th8-图标/1024px-东方永夜抄cover4.jpg"
},
{
"id": "th08-lang-zh-CN",
"category": "module",
"parent": "th08",
"tags": [
"language"
],
"dependencies": {
"win32": [
"th08"
],
"darwin": [
"wine",
"th08"
]
},
"references": {
"win32": [],
"darwin": []
},
"author": "ZUN",
"homepage": "http://www.myacg.cc",
"locales": [
"zh-CN"
],
"actions": {
"win32": {
"main": {
"execute": "th08.exe",
"args": [],
"env": {}
},
"custom": {
"execute": "custom.exe",
"args": [],
"env": {}
}
},
"darwin": {
"main": {
"execute": "th08.exe",
"args": [],
"open": "wine",
"env": {
"LANG": "zh_CN.UTF-8"
}
},
"custom": {
"execute": "custom.exe",
"args": [],
"open": "wine",
"env": {
"LANG": "zh_CN.UTF-8"
}
}
}
},
"version": {
"win32": "1.06",
"darwin": "1.06"
},
"news": []
},
{
"id": "th09",
"name": {
"zh-CN": "东方花映冢",
"en-US": "Phantasmagoria of Flower View"
},
"description": {
"zh-CN": "「东方花映塚 ~ Phantasmagoria of Flower View.」为装作对战的弹幕射击游戏。<br/>披着Twinkle Star Sprites[1]的奇怪的弹幕游戏。为了被那样想而出手,以获得附带的了不起的瞩目<br/><br/>妖精们蠢蠢欲动的幻想乡中,最悠闲的人类与最沉醉于花中的妖怪们的弹幕开花宣言。<br/>打倒敌人之前不要倒下! 攻击过来的话就躲避!!<br/>对于能够见到幻想的人,比起尖锐的攻击还是绅士地回避更适合。那个已经很消极了<br/><br/>*本游戏含有过激的弹幕场景<br/><br/> 小孩子,或者对弹幕过敏的人请做那个。"
},
"developers": {
"zh-CN": [
{
"name": "上海爱丽丝幻乐团",
"url": "http://www16.big.or.jp/~zun/"
}
]
},
"publishers": {
"zh-CN": [
{
"name": "",
"url": ""
}
]
},
"released_at": "2005-08-14" ,
"category": "game",
"tags": [
"touhou"
],
"dependencies": {
"win32": [],
"darwin": [
"wine"
]
},
"references": {
"win32": [
"th09-lang-zh-TW"
],
"darwin": [
"th09-lang-zh-TW"
]
},
"author": "ZUN",
"homepage": "http://www.myacg.cc",
"locales": [
"ja-JP"
],
"actions": {
"win32": {
"main": {
"execute": "th09.exe",
"args": [],
"env": {}
},
"custom": {
"execute": "custom.exe",
"args": [],
"env": {}
}
},
"darwin": {
"main": {
"execute": "th09.exe",
"args": [],
"open": "wine",
"env": {
"LANG": "ja_JP.UTF-8"
}
},
"custom": {
"execute": "custom.exe",
"args": [],
"open": "wine",
"env": {
"LANG": "ja_JP.UTF-8"
}
}
}
},
"version": {
"win32": "1.06",
"darwin": "1.06"
},
"news": [],
"conference": "touhou",
"icon": "https://r.my-card.in/downloads/assets/th9-图标/th09_105.ico",
"cover": "https://r.my-card.in/downloads/assets/th9-图标/800px-东方花映塚cover1.jpg",
"background": "https://r.my-card.in/downloads/assets/th9-图标/1024px-东方花映塚cover4.jpg"
},
{
"id": "th09-lang-zh-TW",
"category": "module",
"parent": "th09",
"tags": [
"language"
],
"dependencies": {
"win32": [
"th09"
],
"darwin": [
"wine",
"th09"
]
},
"references": {
"win32": [],
"darwin": []
},
"author": "ZUN",
"homepage": "http://www.myacg.cc",
"locales": [
"zh-TW"
],
"actions": {
"win32": {
"main": {
"execute": "th09c.exe",
"args": [],
"env": {}
},
"custom": {
"execute": "custom_cn.exe",
"args": [],
"env": {}
}
},
"darwin": {
"main": {
"execute": "th09c.exe",
"args": [],
"open": "wine",
"env": {
"LANG": "zh_CN.UTF-8"
}
},
"custom": {
"execute": "custom_cn.exe",
"args": [],
"open": "wine",
"env": {
"LANG": "zh_CN.UTF-8"
}
}
}
},
"version": {
"win32": "1.06",
"darwin": "1.06"
},
"news": []
},
{
"id": "th095",
"name": {
"zh-CN": "东方文花帖",
"en-US": "Shoot the Bullet"
},
"description": {
"zh-CN": "本款游戏是一款较为特殊的弹幕摄影游戏,也是第一款弹幕射击类的小数点作。"
},
"developers": {
"zh-CN": [
{
"name": "上海爱丽丝幻乐团",
"url": "http://www16.big.or.jp/~zun/"
}
]
},
"publishers": {
"zh-CN": [
{
"name": "",
"url": ""
}
]
},
"released_at": "2005-12-30" ,
"category": "game",
"tags": [
"touhou"
],
"dependencies": {
"win32": [],
"darwin": [
"wine"
]
},
"references": {
"win32": [
"th095-lang-zh-TW"
],
"darwin": [
"th095-lang-zh-TW"
]
},
"author": "ZUN",
"homepage": "http://www.myacg.cc",
"locales": [
"ja-JP"
],
"actions": {
"win32": {
"main": {
"execute": "th095.exe",
"args": [],
"env": {}
},
"custom": {
"execute": "custom.exe",
"args": [],
"env": {}
}
},
"darwin": {
"main": {
"execute": "th095.exe",
"args": [],
"open": "wine",
"env": {
"LANG": "ja_JP.UTF-8"
}
},
"custom": {
"execute": "custom.exe",
"args": [],
"open": "wine",
"env": {
"LANG": "ja_JP.UTF-8"
}
}
}
},
"version": {
"win32": "1.06",
"darwin": "1.06"
},
"news": [],
"conference": "touhou",
"icon": "https://r.my-card.in/downloads/assets/th95-图标/th095_105.ico",
"cover": "https://r.my-card.in/downloads/assets/th95-图标/800px-东方文花帖cover1.jpg",
"background": "https://r.my-card.in/downloads/assets/th95-图标/1024px-东方文花帖cover4.jpg"
},
{
"id": "th095-lang-zh-TW",
"category": "module",
"parent": "th095",
"tags": [
"language"
],
"dependencies": {
"win32": [
"th095"
],
"darwin": [
"wine",
"th095"
]
},
"references": {
"win32": [],
"darwin": []
},
"author": "ZUN",
"homepage": "http://www.myacg.cc",
"locales": [
"zh-TW"
],
"actions": {
"win32": {
"main": {
"execute": "th095c.exe",
"args": [],
"env": {}
},
"custom": {
"execute": "custom_cn.exe",
"args": [],
"env": {}
}
},
"darwin": {
"main": {
"execute": "th095c.exe",
"args": [],
"open": "wine",
"env": {
"LANG": "zh_CN.UTF-8"
}
},
"custom": {
"execute": "custom_cn.exe",
"args": [],
"open": "wine",
"env": {
"LANG": "zh_CN.UTF-8"
}
}
}
},
"version": {
"win32": "1.06",
"darwin": "1.06"
},
"news": []
},
{
"id": "th10",
"name": {
"zh-CN": "东方风神录",
"en-US": "Mountain of Faith"
},
"description": {
"zh-CN": " 「东方风神录 ~ Mountain of Faith.」为少女弹幕射击游戏(STG)。<br/> 本作品是使顽固僵化了的游戏创作大脑变得灵活起来的,训练作者大脑这种类型的游戏(多半是假的)"
},
"developers": {
"zh-CN": [
{
"name": "上海爱丽丝幻乐团",
"url": "http://www16.big.or.jp/~zun/"
}
]
},
"publishers": {
"zh-CN": [
{
"name": "",
"url": ""
}
]
},
"released_at": "2007-08-17" ,
"category": "game",
"tags": [
"touhou"
],
"dependencies": {
"win32": [
"directx"
],
"darwin": [
"wine"
]
},
"references": {
"win32": [
"th10-lang-zh-CN-zh-TW"
],
"darwin": [
"th10-lang-zh-CN-zh-TW"
]
},
"author": "ZUN",
"homepage": "http://www.myacg.cc",
"locales": [
"ja-JP"
],
"actions": {
"win32": {
"main": {
"execute": "th10.exe",
"args": [],
"env": {}
},
"custom": {
"execute": "custom.exe",
"args": [],
"env": {}
}
},
"darwin": {
"main": {
"execute": "th10.exe",
"args": [],
"open": "wine",
"env": {
"LANG": "ja_JP.UTF-8"
}
},
"custom": {
"execute": "custom.exe",
"args": [],
"open": "wine",
"env": {
"LANG": "ja_JP.UTF-8"
}
}
}
},
"version": {
"win32": "1.06",
"darwin": "1.06"
},
"news": [],
"conference": "touhou",
"icon": "https://r.my-card.in/downloads/assets/th10-图标/th10_IDI_ICON3.ico",
"cover": "https://r.my-card.in/downloads/assets/th10-图标/800px-东方风神录cover1.jpg",
"background": "https://r.my-card.in/downloads/assets/th10-图标/1024px-东方风神录cover4.jpg"
},
{
"id": "th10-lang-zh-CN-zh-TW",
"category": "module",
"parent": "th10",
"tags": [
"language"
],
"dependencies": {
"win32": [
"th10"
],
"darwin": [
"wine",
"th10"
]
},
"references": {
"win32": [],
"darwin": []
},
"author": "ZUN",
"homepage": "http://www.myacg.cc",
"locales": [
"zh-CN",
"zh-TW"
],
"actions": {
"win32": {
"main": {
"execute": "th10chs.exe",
"args": [],
"env": {}
},
"custom": {
"execute": "custom_chs.exe",
"args": [],
"env": {}
}
},
"darwin": {
"main": {
"execute": "th10chs.exe",
"args": [],
"open": "wine",
"env": {
"LANG": "zh_CN.UTF-8"
}
},
"custom": {
"execute": "custom_chs.exe",
"args": [],
"open": "wine",
"env": {
"LANG": "zh_CN.UTF-8"
}
}
}
},
"version": {
"win32": "1.06",
"darwin": "1.06"
},
"news": []
},
{
"id": "th105",
"name": {
"zh-CN": "东方绯想天",
"en-US": "Scarlet Weather Rhapsody"
},
"description": {
"zh-CN": "这是ZUN与黄昏边境合作制作的第二款游戏,也是东方Project的第二款格斗游戏。本作剧情模式有15个可用角色(一开始只有3个可用角色,其他角色需解锁),每个角色都有各自的剧情、对手与结局。对战模式则有15个可用角色(一开始只有13个可用角色,其他角色需解锁),在对战不同的角色的时候也分别有不同的对话。"
},
"developers": {
"zh-CN": [
{
"name": "上海爱丽丝幻乐团",
"url": "http://www16.big.or.jp/~zun/"
},
{
"name": "黄昏边境",
"url": "http://www.tasofro.net/"
}
]
},
"publishers": {
"zh-CN": [
{
"name": "",
"url": ""
}
]
},
"released_at": "2008-05-25" ,
"category": "game",
"tags": [
"touhou"
],
"dependencies": {
"win32": [
"directx"
],
"darwin": [
"wine"
]
},
"references": {
"win32": [
"th105-lang-zh-CN"
],
"darwin": [
"th105-lang-zh-CN"
]
},
"author": "ZUN",
"homepage": "http://www.myacg.cc",
"locales": [
"ja-JP"
],
"actions": {
"win32": {
"main": {
"execute": "th105.exe",
"args": [],
"env": {}
}
},
"darwin": {
"main": {
"execute": "th105.exe",
"args": [],
"open": "wine",
"env": {
"LANG": "ja_JP.UTF-8"
}
}
}
},
"version": {
"win32": "1.06",
"darwin": "1.06"
},
"news": [],
"network": {
"protocol": "maotama",
"port": 10800,
"servers": [
{
"id": "Hangzhou",
"url": "wss://wudizhanche.mycard.moe:10800/"
},
{
"id": "Beijing",
"url": "wss://lx7.mycard.moe:10801/"
}
]
},
"conference": "th123",
"icon": "https://r.my-card.in/downloads/assets/th105-图标/th105_112.ico",
"cover": "https://r.my-card.in/downloads/assets/th105-图标/800px-东方绯想天booklet1.jpg",
"background": "https://r.my-card.in/downloads/assets/th105-图标/1024px-东方绯想天cover4.jpg"
},
{
"id": "th105-lang-zh-CN",
"category": "module",
"parent": "th105",
"tags": [
"language"
],
"dependencies": {
"win32": [
"th105"
],
"darwin": [
"wine",
"th105"
]
},
"references": {
"win32": [],
"darwin": []
},
"author": "ZUN",
"homepage": "http://www.myacg.cc",
"locales": [
"zh-CN"
],
"actions": {
"win32": {
"main": {
"execute": "th105.exe",
"args": [],
"env": {}
}
},
"darwin": {
"main": {
"execute": "th105.exe",
"args": [],
"open": "wine",
"env": {
"LANG": "zh_CN.UTF-8"
}
}
}
},
"version": {
"win32": "1.06",
"darwin": "1.06"
},
"news": []
},
{
"id": "th11",
"name": {
"zh-CN": "东方地灵殿",
"en-US": "Subterranean Animism"
},
"description": {
"zh-CN": " 「东方地灵殿 ~ Subterranean Animism.」为少女弹幕射击游戏(STG)。<br/> 本次作品是由于作者无比地喜爱地下与温泉而制作的游戏。"
},
"developers": {
"zh-CN": [
{
"name": "上海爱丽丝幻乐团",
"url": "http://www16.big.or.jp/~zun/"
}
]
},
"publishers": {
"zh-CN": [
{
"name": "",
"url": ""
}
]
},
"released_at": "2008-08-16" ,
"category": "game",
"tags": [
"touhou"
],
"dependencies": {
"win32": [
"directx"
],
"darwin": [
"wine"
]
},
"references": {
"win32": [
"th11-lang-zh-TW"
],
"darwin": [
"th11-lang-zh-TW"
]
},
"author": "ZUN",
"homepage": "http://www.myacg.cc",
"locales": [
"ja-JP"
],
"actions": {
"win32": {
"main": {
"execute": "th11.exe",
"args": [],
"env": {}
},
"custom": {
"execute": "custom.exe",
"args": [],
"env": {}
}
},
"darwin": {
"main": {
"execute": "th11.exe",
"args": [],
"open": "wine",
"env": {
"LANG": "ja_JP.UTF-8"
}
},
"custom": {
"execute": "custom.exe",
"args": [],
"open": "wine",
"env": {
"LANG": "ja_JP.UTF-8"
}
}
}
},
"version": {
"win32": "1.06",
"darwin": "1.06"
},
"news": [],
"conference": "touhou",
"icon": "https://r.my-card.in/downloads/assets/th11-图标/th11_IDI_ICON3.ico",
"cover": "https://r.my-card.in/downloads/assets/th11-图标/800px-东方地灵殿cover1.jpg",
"background": "https://r.my-card.in/downloads/assets/th11-图标/1024px-东方地灵殿cover4.jpg"
},
{
"id": "th11-lang-zh-TW",
"category": "module",
"parent": "th11",
"tags": [
"language"
],
"dependencies": {
"win32": [
"th11"
],
"darwin": [
"wine",
"th11"
]
},
"references": {
"win32": [],
"darwin": []
},
"author": "ZUN",
"homepage": "http://www.myacg.cc",
"locales": [
"zh-TW"
],
"actions": {
"win32": {
"main": {
"execute": "th11c.exe",
"args": [],
"env": {}
},
"custom": {
"execute": "custom_c.exe",
"args": [],
"env": {}
}
},
"darwin": {
"main": {
"execute": "th11c.exe",
"args": [],
"open": "wine",
"env": {
"LANG": "zh_CN.UTF-8"
}
},
"custom": {
"execute": "custom_c.exe",
"args": [],
"open": "wine",
"env": {
"LANG": "zh_CN.UTF-8"
}
}
}
},
"version": {
"win32": "1.06",
"darwin": "1.06"
},
"news": []
},
{
"id": "th12",
"name": {
"zh-CN": "东方星莲船",
"en-US": "Undefined Fantastic Object"
},
"description": {
"zh-CN": " 「东方星莲船 ~ Undefined Fantastic Object.」为少女弹幕射击游戏(STG),<br/> 本次作品是适合沉浸于开放自由的心情中进行游玩的游戏。"
},
"developers": {
"zh-CN": [
{
"name": "上海爱丽丝幻乐团",
"url": "http://www16.big.or.jp/~zun/"
}
]
},
"publishers": {
"zh-CN": [
{
"name": "",
"url": ""
}
]
},
"released_at": "2009-08-15" ,
"category": "game",
"tags": [
"touhou"
],
"dependencies": {
"win32": [
"directx"
],
"darwin": [
"wine"
]
},
"references": {
"win32": [
"th12-lang-zh-TW"
],
"darwin": [
"th12-lang-zh-TW"
]
},
"author": "ZUN",
"homepage": "http://www.myacg.cc",
"locales": [
"ja-JP"
],
"actions": {
"win32": {
"main": {
"execute": "th12.exe",
"args": [],
"env": {}
},
"custom": {
"execute": "custom.exe",
"args": [],
"env": {}
}
},
"darwin": {
"main": {
"execute": "th12.exe",
"args": [],
"open": "wine",
"env": {
"LANG": "ja_JP.UTF-8"
}
},
"custom": {
"execute": "custom.exe",
"args": [],
"open": "wine",
"env": {
"LANG": "ja_JP.UTF-8"
}
}
}
},
"version": {
"win32": "1.06",
"darwin": "1.06"
},
"news": [],
"conference": "touhou",
"icon": "https://r.my-card.in/downloads/assets/th12-图标/th12_IDI_ICON3.ico",
"cover": "https://r.my-card.in/downloads/assets/th12-图标/800px-东方星莲船cover1.jpg",
"background": "https://r.my-card.in/downloads/assets/th12-图标/1024px-东方星莲船cover4.jpg"
},
{
"id": "th12-lang-zh-TW",
"category": "module",
"parent": "th12",
"tags": [
"language"
],
"dependencies": {
"win32": [
"th12"
],
"darwin": [
"wine",
"th12"
]
},
"references": {
"win32": [],
"darwin": []
},
"author": "ZUN",
"homepage": "http://www.myacg.cc",
"locales": [
"zh-TW"
],
"actions": {
"win32": {
"main": {
"execute": "th12c.exe",
"args": [],
"env": {}
},
"custom": {
"execute": "custom_cn.exe",
"args": [],
"env": {}
}
},
"darwin": {
"main": {
"execute": "th12c.exe",
"args": [],
"open": "wine",
"env": {
"LANG": "zh_CN.UTF-8"
}
},
"custom": {
"execute": "custom_cn.exe",
"args": [],
"open": "wine",
"env": {
"LANG": "zh_CN.UTF-8"
}
}
}
},
"version": {
"win32": "1.06",
"darwin": "1.06"
},
"news": []
},
{
"id": "th123",
"name": {
"zh-CN": "东方非想天则",
"en-US": "Touhou Hisōtensoku"
},
"description": {
"zh-CN": "《东方非想天则 ~ 追寻特大型人偶之谜》由上海爱丽丝幻乐团与黄昏边境共同制作的格斗游戏,为东方 Project 的 12.3 作。<br><br>* 安装说明<br>- 平台会自动安装依赖项 Directx、东方绯想天 并自动设置关联。<br><br>* 联机说明<br>- 点 [开始] 运行游戏,并在 10800 端口建立主机<br>- 点 [联机] 获取 IP 地址和端口<br>- 把那个地址通过 QQ 等即时通讯工具告诉你的对手,对方可以直接加入,不需要有平台。<br>- 如果联机失败,请尝试关闭 Windows 防火墙及其他安全软件"
},
"developers": {
"zh-CN": [
{
"name": "上海爱丽丝幻乐团",
"url": "http://www16.big.or.jp/~zun/"
},
{
"name": "黄昏边境",
"url": "http://www.tasofro.net/"
}
]
},
"publishers": {
"zh-CN": [
{
"name": "",
"url": ""
}
]
},
"released_at": "2009-08-15" ,
"category": "game",
"tags": [
"touhou"
],
"dependencies": {
"win32": [
"directx"
],
"darwin": [
"wine"
]
},
"references": {
"win32": [
"th105",
"th123-lang-zh-CN"
],
"darwin": [
"th105",
"th123-lang-zh-CN"
]
},
"author": "ZUN",
"homepage": "http://www.myacg.cc",
"locales": [
"ja-JP"
],
"actions": {
"win32": {
"main": {
"execute": "th123.exe",
"args": [],
"env": {}
}
},
"darwin": {
"main": {
"execute": "th123.exe",
"args": [],
"open": "wine",
"env": {
"LANG": "ja_JP.UTF-8"
}
}
}
},
"version": {
"win32": "1.06",
"darwin": "1.06"
},
"news": [],
"network": {
"protocol": "maotama",
"port": 10800,
"servers": [
{
"id": "杭州",
"url": "wss://wudizhanche.mycard.moe:10800/"
},
{
"id": "北京",
"url": "wss://lx7.mycard.moe:10801/"
}
]
},
"conference": "th123",
"icon": "https://r.my-card.in/downloads/assets/th123-图标/th123_112.ico",
"cover": "https://r.my-card.in/downloads/assets/th123-图标/800px-东方非想天则booklet1.jpg",
"background": "https://r.my-card.in/downloads/assets/th123-图标/1024px-东方非想天则cover4.jpg"
},
{
"id": "th123-lang-zh-CN",
"category": "module",
"parent": "th123",
"tags": [
"language"
],
"dependencies": {
"win32": [
"th123"
],
"darwin": [
"wine",
"th123"
]
},
"references": {
"win32": [],
"darwin": []
},
"author": "ZUN",
"homepage": "http://www.myacg.cc",
"locales": [
"zh-CN"
],
"actions": {
"win32": {
"main": {
"execute": "th123_beta.exe",
"args": [],
"env": {}
}
},
"darwin": {
"main": {
"execute": "th123_beta.exe",
"args": [],
"open": "wine",
"env": {
"LANG": "zh_CN.UTF-8"
}
}
}
},
"version": {
"win32": "1.06",
"darwin": "1.06"
},
"news": []
},
{
"id": "th13",
"name": {
"zh-CN": "东方神灵庙",
"en-US": "Ten Desires"
},
"description": {
"zh-CN": " 「东方神灵庙  ~ Ten Desires.」为少女弹幕射击游戏(STG),<br/> 本次作品以悠闲地打倒敌人躲避子弹为内容。"
},
"developers": {
"zh-CN": [
{
"name": "上海爱丽丝幻乐团",
"url": "http://www16.big.or.jp/~zun/"
}
]
},
"publishers": {
"zh-CN": [
{
"name": "",
"url": ""
}
]
},
"released_at": "2011-08-13" ,
"category": "game",
"tags": [
"touhou"
],
"dependencies": {
"win32": [],
"darwin": [
"wine"
]
},
"references": {
"win32": [
"th13-lang-zh-CN"
],
"darwin": [
"th13-lang-zh-CN"
]
},
"author": "ZUN",
"homepage": "http://www.myacg.cc",
"locales": [
"ja-JP"
],
"actions": {
"win32": {
"main": {
"execute": "th13.exe",
"args": [],
"env": {}
}
},
"darwin": {
"main": {
"execute": "th13.exe",
"args": [],
"open": "wine",
"env": {
"LANG": "ja_JP.UTF-8"
}
}
}
},
"version": {
"win32": "1.09",
"darwin": "1.06"
},
"news": [],
"conference": "touhou",
"icon": "https://r.my-card.in/downloads/assets/th13-图标/th13_IDI_ICON3.ico",
"cover": "https://r.my-card.in/downloads/assets/th13-图标/1024px-东方神灵庙cover1.jpg",
"background": "https://r.my-card.in/downloads/assets/th13-图标/1280px-东方神灵庙cover4.jpg"
},
{
"id": "th13-lang-zh-CN",
"category": "module",
"parent": "th13",
"tags": [
"language"
],
"dependencies": {
"win32": [
"th13"
],
"darwin": [
"th13",
"wine"
]
},
"references": {
"win32": [],
"darwin": []
},
"author": "ZUN",
"homepage": "http://www.myacg.cc",
"locales": [
"zh-CN"
],
"actions": {
"win32": {
"main": {
"execute": "th13c.exe",
"args": [],
"env": {}
}
},
"darwin": {
"main": {
"execute": "th13c.exe",
"args": [],
"open": "wine",
"env": {
"LANG": "zh_CN.UTF-8"
}
}
}
},
"version": {
"win32": "1.06",
"darwin": "1.06"
},
"news": []
},
{
"id": "th14",
"name": {
"zh-CN": "东方辉针城",
"en-US": "Double Dealing Character"
},
"description": {
"zh-CN": " 「东方辉针城 ~ Double Dealing Character.」为少女弹幕射击游戏(STG),<br/> 本次作品以悠闲地打倒敌人躲避子弹为内容。"
},
"developers": {
"zh-CN": [
{
"name": "上海爱丽丝幻乐团",
"url": "http://www16.big.or.jp/~zun/"
}
]
},
"publishers": {
"zh-CN": [
{
"name": "",
"url": ""
}
]
},
"released_at": "2013-08-12" ,
"category": "game",
"tags": [
"touhou"
],
"dependencies": {
"win32": [],
"darwin": [
"wine"
]
},
"references": {
"win32": [
"th14-lang-zh-CN"
],
"darwin": [
"th14-lang-zh-CN"
]
},
"author": "ZUN",
"homepage": "http://www.myacg.cc",
"locales": [
"ja-JP"
],
"actions": {
"win32": {
"main": {
"execute": "th14.exe",
"args": [],
"env": {}
},
"custom": {
"execute": "custom.exe",
"args": [],
"env": {}
}
},
"darwin": {
"main": {
"execute": "th14.exe",
"args": [],
"open": "wine",
"env": {
"LANG": "ja_JP.UTF-8"
}
},
"custom": {
"execute": "custom.exe",
"args": [],
"open": "wine",
"env": {
"LANG": "ja_JP.UTF-8"
}
}
}
},
"version": {
"win32": "1.09",
"darwin": "1.06"
},
"news": [],
"conference": "touhou",
"icon": "https://r.my-card.in/downloads/assets/th14-图标/th14_IDI_ICON3.ico",
"cover": "https://r.my-card.in/downloads/assets/th14-图标/1024px-东方辉针城cover1.jpg",
"background": "https://r.my-card.in/downloads/assets/th14-图标/1280px-东方辉针城cover4.jpg"
},
{
"id": "th14-lang-zh-CN",
"category": "module",
"parent": "th14",
"tags": [
"language"
],
"dependencies": {
"win32": [
"th14"
],
"darwin": [
"th14",
"wine"
]
},
"references": {
"win32": [],
"darwin": []
},
"author": "ZUN",
"homepage": "http://www.myacg.cc",
"locales": [
"zh-CN"
],
"actions": {
"win32": {
"main": {
"execute": "th14c.exe",
"args": [],
"env": {}
},
"custom": {
"execute": "custom_cn.exe",
"args": [],
"env": {}
}
},
"darwin": {
"main": {
"execute": "th14c.exe",
"args": [],
"open": "wine",
"env": {
"LANG": "zh_CN.UTF-8"
}
},
"custom": {
"execute": "custom_cn.exe",
"args": [],
"open": "wine",
"env": {
"LANG": "zh_CN.UTF-8"
}
}
}
},
"version": {
"win32": "1.06",
"darwin": "1.06"
},
"news": []
},
{
"id": "th15",
"name": {
"zh-CN": "东方绀珠传",
"en-US": "Legacy of Lunatic Kingdom"
},
"description": {
"zh-CN": "「东方绀珠传 ~ Legacy of Lunatic Kingdom.」为,为了拯救人类而使用犯规的道具进行挑战的射击游戏。"
},
"developers": {
"zh-CN": [
{
"name": "上海爱丽丝幻乐团",
"url": "http://www16.big.or.jp/~zun/"
}
]
},
"publishers": {
"zh-CN": [
{
"name": "",
"url": ""
}
]
},
"released_at": "2015-08-14" ,
"category": "game",
"tags": [
"touhou"
],
"dependencies": {
"win32": [],
"darwin": [
"wine"
]
},
"references": {
"win32": [],
"darwin": []
},
"author": "ZUN",
"homepage": "http://www.myacg.cc",
"locales": [
"ja-JP"
],
"actions": {
"win32": {
"main": {
"execute": "th15.exe",
"args": [],
"env": {}
},
"custom": {
"execute": "custom.exe",
"args": [],
"env": {}
}
},
"darwin": {
"main": {
"execute": "th15.exe",
"args": [],
"open": "wine",
"env": {
"LANG": "ja_JP.UTF-8"
}
},
"custom": {
"execute": "custom.exe",
"args": [],
"open": "wine",
"env": {
"LANG": "ja_JP.UTF-8"
}
}
}
},
"version": {
"win32": "1.09",
"darwin": "1.06"
},
"news": [],
"conference": "touhou",
"icon": "https://r.my-card.in/downloads/assets/th15-图标/th15_IDI_ICON3.ico",
"cover": "https://r.my-card.in/downloads/assets/th15-图标/1024px-东方绀珠传cover1.jpg",
"background": "https://r.my-card.in/downloads/assets/th15-图标/1280px-东方绀珠传cover4.jpg"
},
{
"id": "th125",
"name": {
"zh-CN": "东方文花帖DS",
"en-US": "Double Spoiler"
},
"description": {
"zh-CN": "• 游戏的目的<br/> 这是一款操作天狗族新闻记者「射命丸文」、<br/> 抓拍住在幻想乡的人类和妖怪、给予他们精神打击的游戏。<br/><br/>• 规则<br/> 在不接触敌弹和拍摄对象身体的前提下操作文给BOSS拍照<br/><br/> 为BOSS拍到规定数量的照片即可过关。<br/> 没有过关就不能保存最高分。"
},
"developers": {
"zh-CN": [
{
"name": "上海爱丽丝幻乐团",
"url": "http://www16.big.or.jp/~zun/"
}
]
},
"publishers": {
"zh-CN": [
{
"name": "",
"url": ""
}
]
},
"released_at": "2010-03-14" ,
"category": "game",
"tags": [
"touhou"
],
"dependencies": {
"win32": [],
"darwin": [
"wine"
]
},
"references": {
"win32": [
"th125-lang-zh-CN"
],
"darwin": [
"th125-lang-zh-CN"
]
},
"author": "ZUN",
"homepage": "http://www.myacg.cc",
"locales": [
"ja-JP"
],
"actions": {
"win32": {
"main": {
"execute": "th125.exe",
"args": [],
"env": {}
},
"custom": {
"execute": "custom.exe",
"args": [],
"env": {}
}
},
"darwin": {
"main": {
"execute": "th125.exe",
"args": [],
"open": "wine",
"env": {
"LANG": "ja_JP.UTF-8"
}
},
"custom": {
"execute": "custom.exe",
"args": [],
"open": "wine",
"env": {
"LANG": "ja_JP.UTF-8"
}
}
}
},
"version": {
"win32": "1.09",
"darwin": "1.06"
},
"news": [],
"conference": "touhou",
"icon": "https://r.my-card.in/downloads/assets/th125-图标/th125_IDI_ICON3.ico",
"cover": "https://r.my-card.in/downloads/assets/th125-图标/1024px-东方文花帖DScover1.jpg",
"background": "https://r.my-card.in/downloads/assets/th125-图标/1280px-东方文花帖DScover4.jpg"
},
{
"id": "th125-lang-zh-CN",
"category": "module",
"parent": "th125",
"tags": [
"language"
],
"dependencies": {
"win32": [
"th125"
],
"darwin": [
"th125",
"wine"
]
},
"references": {
"win32": [],
"darwin": []
},
"author": "ZUN",
"homepage": "http://www.myacg.cc",
"locales": [
"zh-CN"
],
"actions": {
"win32": {
"main": {
"execute": "th125c.exe",
"args": [],
"env": {}
},
"custom": {
"execute": "custom_c.exe",
"args": [],
"env": {}
}
},
"darwin": {
"main": {
"execute": "th125c.exe",
"args": [],
"open": "wine",
"env": {
"LANG": "zh_CN.UTF-8"
}
},
"custom": {
"execute": "custom_c.exe",
"args": [],
"open": "wine",
"env": {
"LANG": "zh_CN.UTF-8"
}
}
}
},
"version": {
"win32": "1.06",
"darwin": "1.06"
},
"news": []
},
{
"id": "th128",
"name": {
"zh-CN": "妖精大战争 ~ 东方三月精",
"en-US": "Yōsei Daisensō ~ Tōhō Sangetsusei"
},
"description": {
"zh-CN": "本作的游戏系统很特殊,像是常规东方STG、东方文花帖、东方花映塚这几种游戏的结合。主角琪露诺可以像其他STG的自机一样连续发射子弹,也可以像花映塚一样进行蓄力,而蓄力的结果则是像文花帖中的相机一样有区域消弹效果。当然也是可以释放Bomb进行全屏幕攻击与消弹。"
},
"developers": {
"zh-CN": [
{
"name": "上海爱丽丝幻乐团",
"url": "http://www16.big.or.jp/~zun/"
},
{
"name": "比良坂真琴"
}
]
},
"publishers": {
"zh-CN": [
{
"name": "",
"url": ""
}
]
},
"released_at": "2010-08-14" ,
"category": "game",
"tags": [
"touhou"
],
"dependencies": {
"win32": [],
"darwin": [
"wine"
]
},
"references": {
"win32": [
"th128-lang-zh-CN"
],
"darwin": [
"th128-lang-zh-CN"
]
},
"author": "ZUN",
"homepage": "http://www.myacg.cc",
"locales": [
"ja-JP"
],
"actions": {
"win32": {
"main": {
"execute": "th128.exe",
"args": [],
"env": {}
}
},
"darwin": {
"main": {
"execute": "th128.exe",
"args": [],
"open": "wine",
"env": {
"LANG": "ja_JP.UTF-8"
}
}
}
},
"version": {
"win32": "1.09",
"darwin": "1.06"
},
"news": [],
"conference": "touhou",
"icon": "https://r.my-card.in/downloads/assets/th128-图标/th128_IDI_ICON3.ico",
"cover": "https://r.my-card.in/downloads/assets/th128-图标/1024px-妖精大战争cover1.jpg",
"background": "https://r.my-card.in/downloads/assets/th128-图标/1280px-妖精大战争cover4.jpg"
},
{
"id": "th128-lang-zh-CN",
"category": "module",
"parent": "th128",
"tags": [
"language"
],
"dependencies": {
"win32": [
"th128"
],
"darwin": [
"th128",
"wine"
]
},
"references": {
"win32": [],
"darwin": []
},
"author": "ZUN",
"homepage": "http://www.myacg.cc",
"locales": [
"zh-CN"
],
"actions": {
"win32": {
"main": {
"execute": "th128c.exe",
"args": [],
"env": {}
}
},
"darwin": {
"main": {
"execute": "th128c.exe",
"args": [],
"open": "wine",
"env": {
"LANG": "zh_CN.UTF-8"
}
}
}
},
"version": {
"win32": "1.06",
"darwin": "1.06"
},
"news": []
},
{
"id": "th135",
"name": {
"zh-CN": "东方心绮楼",
"en-US": "Hopeless Masquerade"
},
"description": {
"zh-CN": "这是ZUN与黄昏边境合作制作的第四款游戏,也是东方Project的第四款格斗游戏。<br/>游戏本体由黄昏边境制作,ZUN负责设定、对话和部分音乐与图像设计。"
},
"developers": {
"zh-CN": [
{
"name": "上海爱丽丝幻乐团",
"url": "http://www16.big.or.jp/~zun/"
},
{
"name": "黄昏边境",
"url": "http://www.tasofro.net/"
}
]
},
"publishers": {
"zh-CN": [
{
"name": "",
"url": ""
}
]
},
"released_at": "2012-05-26" ,
"category": "game",
"tags": [
"touhou"
],
"dependencies": {
"win32": [],
"darwin": [
"wine"
]
},
"references": {
"win32": [
"th135-lang-zh-CN"
],
"darwin": [
"th135-lang-zh-CN"
]
},
"author": "ZUN",
"homepage": "http://www.myacg.cc",
"locales": [
"ja-JP"
],
"actions": {
"win32": {
"main": {
"execute": "th135.exe",
"args": [],
"env": {}
}
},
"darwin": {
"main": {
"execute": "th135.exe",
"args": [],
"open": "wine",
"env": {
"LANG": "ja_JP.UTF-8"
}
}
}
},
"version": {
"win32": "1.09",
"darwin": "1.06"
},
"news": [],
"conference": "touhou",
"icon": "https://r.my-card.in/downloads/assets/th135-图标/icon.ico",
"cover": "https://r.my-card.in/downloads/assets/th135-图标/1024px-东方心绮楼booklet1.jpg",
"background": "https://r.my-card.in/downloads/assets/th135-图标/1280px-东方心绮楼cover4.jpg"
},
{
"id": "th135-lang-zh-CN",
"category": "module",
"parent": "th135",
"tags": [
"language"
],
"dependencies": {
"win32": [
"th135"
],
"darwin": [
"th135",
"wine"
]
},
"references": {
"win32": [],
"darwin": []
},
"author": "ZUN",
"homepage": "http://www.myacg.cc",
"locales": [
"zh-CN"
],
"actions": {
"win32": {
"main": {
"execute": "th135c.exe",
"args": [],
"env": {}
}
},
"darwin": {
"main": {
"execute": "th135c.exe",
"args": [],
"open": "wine",
"env": {
"LANG": "zh_CN.UTF-8"
}
}
}
},
"version": {
"win32": "1.06",
"darwin": "1.06"
},
"news": []
},
{
"id": "th143",
"name": {
"zh-CN": "弹幕天邪鬼",
"en-US": "Impossible Spell Card"
},
"description": {
"zh-CN": "本作是第一个标题完全不含东方的官方游戏。<br/>剧情是游戏东方辉针城的后日谈,主角鬼人正邪使用九种道具来逃避众人的追击。<br/>游戏一共分为十个关卡,总共有七十五个场景。"
},
"developers": {
"zh-CN": [
{
"name": "上海爱丽丝幻乐团",
"url": "http://www16.big.or.jp/~zun/"
}
]
},
"publishers": {
"zh-CN": [
{
"name": "",
"url": ""
}
]
},
"released_at": "2014-05-11" ,
"category": "game",
"tags": [
"touhou"
],
"dependencies": {
"win32": [],
"darwin": [
"wine"
]
},
"references": {
"win32": [
"th143-lang-zh-CN"
],
"darwin": [
"th143-lang-zh-CN"
]
},
"author": "ZUN",
"homepage": "http://www.myacg.cc",
"locales": [
"ja-JP"
],
"actions": {
"win32": {
"main": {
"execute": "th143.exe",
"args": [],
"env": {}
},
"custom": {
"execute": "custom.exe",
"args": [],
"env": {}
}
},
"darwin": {
"main": {
"execute": "th143.exe",
"args": [],
"open": "wine",
"env": {
"LANG": "ja_JP.UTF-8"
}
},
"custom": {
"execute": "custom.exe",
"args": [],
"open": "wine",
"env": {
"LANG": "ja_JP.UTF-8"
}
}
}
},
"version": {
"win32": "1.09",
"darwin": "1.06"
},
"news": [],
"conference": "touhou",
"icon": "https://r.my-card.in/downloads/assets/th143-图标/th143_IDI_ICON3.ico",
"cover": "https://r.my-card.in/downloads/assets/th143-图标/1024px-弹幕天邪鬼cover1.jpg",
"background": "https://r.my-card.in/downloads/assets/th143-图标/1280px-弹幕天邪鬼cover4.jpg"
},
{
"id": "th143-lang-zh-CN",
"category": "module",
"parent": "th143",
"tags": [
"language"
],
"dependencies": {
"win32": [
"th143"
],
"darwin": [
"th143",
"wine"
]
},
"references": {
"win32": [],
"darwin": []
},
"author": "ZUN",
"homepage": "http://www.myacg.cc",
"locales": [
"zh-CN"
],
"actions": {
"win32": {
"main": {
"execute": "th143c.exe",
"args": [],
"env": {}
},
"custom": {
"execute": "custom_CN.exe",
"args": [],
"env": {}
}
},
"darwin": {
"main": {
"execute": "th143c.exe",
"args": [],
"open": "wine",
"env": {
"LANG": "zh_CN.UTF-8"
}
},
"custom": {
"execute": "custom_CN.exe",
"args": [],
"open": "wine",
"env": {
"LANG": "zh_CN.UTF-8"
}
}
}
},
"version": {
"win32": "1.06",
"darwin": "1.06"
},
"news": []
},
{
"id": "th145",
"name": {
"zh-CN": "东方深秘录",
"en-US": "Urban Legend in Limbo"
},
"description": {
"zh-CN": "本作PC版剧情模式有14个可用角色(一开始只有1个可用角色,其他角色需解锁),每个角色都有各自的剧情、对手与结局。<br/>对战模式也有14个可用角色(一开始只有13个可用角色,其他角色需解锁),在对战不同的角色的时候也分别有不同的对话。 <br/>PS4版剧情模式和对战模式追加1个可用角色。"
},
"developers": {
"zh-CN": [
{
"name": "上海爱丽丝幻乐团",
"url": "http://www16.big.or.jp/~zun/"
},
{
"name": "黄昏边境",
"url": "http://www.tasofro.net/"
}
]
},
"publishers": {
"zh-CN": [
{
"name": "",
"url": ""
}
]
},
"released_at": "2015-05-10" ,
"category": "game",
"tags": [
"touhou"
],
"dependencies": {
"win32": [],
"darwin": [
"wine"
]
},
"references": {
"win32": [
"th145-lang-zh-CN"
],
"darwin": [
"th145-lang-zh-CN"
]
},
"author": "ZUN",
"homepage": "http://www.myacg.cc",
"locales": [
"ja-JP"
],
"actions": {
"win32": {
"main": {
"execute": "th145.exe",
"args": [],
"env": {}
}
},
"darwin": {
"main": {
"execute": "th145.exe",
"args": [],
"open": "wine",
"env": {
"LANG": "ja_JP.UTF-8"
}
}
}
},
"version": {
"win32": "1.09",
"darwin": "1.06"
},
"news": [],
"conference": "touhou",
"icon": "https://r.my-card.in/downloads/assets/th145-图标/th145_101.ico",
"cover": "https://r.my-card.in/downloads/assets/th145-图标/1024px-东方深秘录booklet1.jpg",
"background": "https://r.my-card.in/downloads/assets/th145-图标/1280px-东方深秘录cover4.jpg"
},
{
"id": "th145-lang-zh-CN",
"category": "module",
"parent": "th145",
"tags": [
"language"
],
"dependencies": {
"win32": [
"th145"
],
"darwin": [
"th145",
"wine"
]
},
"references": {
"win32": [],
"darwin": []
},
"author": "ZUN",
"homepage": "http://www.myacg.cc",
"locales": [
"zh-CN"
],
"actions": {
"win32": {
"main": {
"execute": "th145c.exe",
"args": [],
"env": {}
}
},
"darwin": {
"main": {
"execute": "th145c.exe",
"args": [],
"open": "wine",
"env": {
"LANG": "zh_CN.UTF-8"
}
}
}
},
"version": {
"win32": "1.06",
"darwin": "1.06"
},
"news": []
},
{
"id": "th1",
"name": {
"zh-CN": "东方灵异传",
"en-US": "Highly Responsive to Prayers"
},
"description": {
"zh-CN": " 本作是东方Project官方游戏系列的第一作(Th1),也是发布在PC-98平台上的(旧作)第一个作品。<br> 本作与之后的所有游戏均不同,并非弹幕射击类游戏,而是一款打砖块游戏或者说是一款动作类游戏。对于没有掌握游戏玩法的人来说会很难。"
},
"developers": {
"zh-CN": [
{
"name": "ZUNSoft"
}
]
},
"publishers": {
"zh-CN": [
{
"name": "Amusement Makers",
"url": "http://www.kt.rim.or.jp/~aotaka/am/index.htm"
}
]
},
"released_at": "1997-08-15" ,
"category": "game",
"tags": [
"touhou_pc98"
],
"dependencies": {
"win32": [
"np2fmgen"
],
"darwin": [
"np2fmgen"
]
},
"references": {
"win32": [],
"darwin": []
},
"author": "ZUN",
"homepage": "http://www.myacg.cc",
"locales": [
"ja-JP"
],
"actions": {
"win32": {
"main": {
"execute": "th1.hdi",
"args": [],
"env": {},
"open": "np2fmgen"
}
},
"darwin": {
"main": {
"execute": "th1.hdi",
"args": [],
"env": {},
"open": "np2fmgen"
}
}
},
"version": {
"win32": "1.06",
"darwin": "1.06"
},
"news": [],
"conference": "touhou-pc98",
"icon": "https://r.my-card.in/downloads/assets/th1-图标/16px-Icon_th01.png",
"cover": "https://r.my-card.in/downloads/assets/th1-图标/东方灵异传封面.jpg",
"background": "https://r.my-card.in/downloads/assets/th1-图标/Highly_Responsive_to_Prayers.png"
},
{
"id": "th2",
"name": {
"zh-CN": "东方封魔录",
"en-US": "Story of Eastern Wonderland"
},
"description": {
"zh-CN": " 本作是东方Project官方游戏系列的第二作(Th2),也是发布在PC-98平台上的(旧作)第二个作品。<br/> 本作是东方系列的第一款弹幕射击类游戏,奠定了东方系列主要游戏的型态。"
},
"developers": {
"zh-CN": [
{
"name": "ZUNSoft"
}
]
},
"publishers": {
"zh-CN": [
{
"name": "Amusement Makers",
"url": "http://www.kt.rim.or.jp/~aotaka/am/index.htm"
}
]
},
"released_at": "1997-08-15" ,
"category": "game",
"tags": [
"touhou_pc98"
],
"dependencies": {
"win32": [
"np2fmgen"
],
"darwin": [
"np2fmgen"
]
},
"references": {
"win32": [
"th2-lang-zh-TW"
],
"darwin": [
"th2-lang-zh-TW"
]
},
"author": "ZUN",
"homepage": "http://www.myacg.cc",
"locales": [
"ja-JP"
],
"actions": {
"win32": {
"main": {
"execute": "th2.hdi",
"args": [],
"open": "np2fmgen",
"env": {}
}
},
"darwin": {
"main": {
"execute": "np2fmgen",
"args": [],
"open": "np2fmgen",
"env": {}
}
}
},
"version": {
"win32": "1.06",
"darwin": "1.06"
},
"news": [],
"conference": "touhou-pc98",
"icon": "https://r.my-card.in/downloads/assets/th2-图标/16px-Icon_th02.png",
"cover": "https://r.my-card.in/downloads/assets/th2-图标/东方封魔录封面.jpg",
"background": "https://r.my-card.in/downloads/assets/th2-图标/The_Story_of_Eastern_Wonderland.png"
},
{
"id": "th2-lang-zh-TW",
"category": "module",
"parent": "th2",
"tags": [
"language"
],
"dependencies": {
"win32": [
"th2"
],
"darwin": [
"th2"
]
},
"references": {
"win32": [],
"darwin": []
},
"author": "ZUN",
"homepage": "http://www.myacg.cc",
"locales": [
"zh-TW"
],
"actions": {
"win32": {
"main": {
"execute": "th2_cn.hdi",
"args": [],
"open": "np2fmgen",
"env": {}
}
},
"darwin": {
"main": {
"execute": "th2_cn.hdi",
"args": [],
"open": "np2fmgen",
"env": {}
}
}
},
"version": {
"win32": "1.06",
"darwin": "1.06"
},
"news": []
},
{
"id": "th3",
"name": {
"zh-CN": "东方梦时空",
"en-US": "Phantasmagoria of Dim. Dream"
},
"description": {
"zh-CN": " 本作是 东方Project官方游戏 系列的 第三作(Th3) ,也是发布在PC-98平台上的 (旧作)第三个作品。<br/> 本作是东方系列的第一款弹幕射击对战类游戏,是一个允许双人对战的独特游戏,后作Th09东方花映塚与本作模式相似。"
},
"developers": {
"zh-CN": [
{
"name": "ZUNSoft"
}
]
},
"publishers": {
"zh-CN": [
{
"name": "Amusement Makers",
"url": "http://www.kt.rim.or.jp/~aotaka/am/index.htm"
}
]
},
"released_at": "1997-12-29" ,
"category": "game",
"tags": [
"touhou_pc98"
],
"dependencies": {
"win32": [
"np2fmgen"
],
"darwin": [
"np2fmgen"
]
},
"references": {
"win32": [
"th3-lang-zh-TW"
],
"darwin": [
"th3-lang-zh-TW"
]
},
"author": "ZUN",
"homepage": "http://www.myacg.cc",
"locales": [
"ja-JP"
],
"actions": {
"win32": {
"main": {
"execute": "th3.hdi",
"args": [],
"open": "np2fmgen",
"env": {}
}
},
"darwin": {
"main": {
"execute": "th3.hdi",
"args": [],
"open": "np2fmgen",
"env": {}
}
}
},
"version": {
"win32": "1.06",
"darwin": "1.06"
},
"news": [],
"conference": "touhou-pc98",
"icon": "https://r.my-card.in/downloads/assets/th3-图标/16px-Icon_th03.png",
"cover": "https://r.my-card.in/downloads/assets/th3-图标/东方梦时空封面.jpg",
"background": "https://r.my-card.in/downloads/assets/th3-图标/Phantasmagoria_of_Dim.Dream.png"
},
{
"id": "th3-lang-zh-TW",
"category": "module",
"parent": "th3",
"tags": [
"language"
],
"dependencies": {
"win32": [
"th3"
],
"darwin": [
"th3"
]
},
"references": {
"win32": [],
"darwin": []
},
"author": "ZUN",
"homepage": "http://www.myacg.cc",
"locales": [
"zh-TW"
],
"actions": {
"win32": {
"main": {
"execute": "th3_cn.hdi",
"args": [],
"open": "np2fmgen",
"env": {}
}
},
"darwin": {
"main": {
"execute": "th3_cn.hdi",
"args": [],
"open": "np2fmgen",
"env": {}
}
}
},
"version": {
"win32": "1.06",
"darwin": "1.06"
},
"news": []
},
{
"id": "th4",
"name": {
"zh-CN": "东方幻想乡",
"en-US": "Lotus Land Story"
},
"description": {
"zh-CN": " 本作是东方Project官方游戏系列的第四作(Th4),也是发布在PC-98平台上的(旧作)第四个作品。<br/> 加入“低速模式”系统,可选择不同的自机,日后系列作的特征已大致具备。"
},
"developers": {
"zh-CN": [
{
"name": "ZUNSoft"
}
]
},
"publishers": {
"zh-CN": [
{
"name": "Amusement Makers",
"url": "http://www.kt.rim.or.jp/~aotaka/am/index.htm"
}
]
},
"released_at": "1998-08-14" ,
"category": "game",
"tags": [
"touhou_pc98"
],
"dependencies": {
"win32": [
"np2fmgen"
],
"darwin": [
"np2fmgen"
]
},
"references": {
"win32": [
"th4-lang-zh-TW"
],
"darwin": [
"th4-lang-zh-TW"
]
},
"author": "ZUN",
"homepage": "http://www.myacg.cc",
"locales": [
"ja-JP"
],
"actions": {
"win32": {
"main": {
"execute": "th4.hdi",
"args": [],
"open": "np2fmgen",
"env": {}
}
},
"darwin": {
"main": {
"execute": "th4.hdi",
"args": [],
"open": "np2fmgen",
"env": {}
}
}
},
"version": {
"win32": "1.06",
"darwin": "1.06"
},
"news": [],
"conference": "touhou-pc98",
"icon": "https://r.my-card.in/downloads/assets/th4-图标/16px-Icon_th04.png",
"cover": "https://r.my-card.in/downloads/assets/th4-图标/1280px-东方幻想乡cover.jpg",
"background": "https://r.my-card.in/downloads/assets/th4-图标/Lotus_Land_Story.png"
},
{
"id": "th4-lang-zh-TW",
"category": "module",
"parent": "th4",
"tags": [
"language"
],
"dependencies": {
"win32": [
"th4"
],
"darwin": [
"th4"
]
},
"references": {
"win32": [],
"darwin": []
},
"author": "ZUN",
"homepage": "http://www.myacg.cc",
"locales": [
"zh-TW"
],
"actions": {
"win32": {
"main": {
"execute": "th4_cn.hdi",
"args": [],
"open": "np2fmgen",
"env": {}
}
},
"darwin": {
"main": {
"execute": "th4_cn.hdi",
"args": [],
"open": "np2fmgen",
"env": {}
}
}
},
"version": {
"win32": "1.06",
"darwin": "1.06"
},
"news": []
},
{
"id": "th5",
"name": {
"zh-CN": "东方怪绮谈",
"en-US": "Mystic Square"
},
"description": {
"zh-CN": " 本作是东方Project官方游戏系列的第五作(Th5),也是发布在PC-98平台上的(旧作)第五个作品。<br/> 旧作的最后一作。"
},
"developers": {
"zh-CN": [
{
"name": "ZUNSoft"
}
]
},
"publishers": {
"zh-CN": [
{
"name": "Amusement Makers",
"url": "http://www.kt.rim.or.jp/~aotaka/am/index.htm"
}
]
},
"released_at": "1998-12-30" ,
"category": "game",
"tags": [
"touhou_pc98"
],
"dependencies": {
"win32": [
"np2fmgen"
],
"darwin": [
"np2fmgen"
]
},
"references": {
"win32": [
"th5-lang-zh-TW"
],
"darwin": [
"th5-lang-zh-TW"
]
},
"author": "ZUN",
"homepage": "http://www.myacg.cc",
"locales": [
"ja-JP"
],
"actions": {
"win32": {
"main": {
"execute": "th5.hdi",
"args": [],
"open": "np2fmgen",
"env": {}
}
},
"darwin": {
"main": {
"execute": "th5.hdi",
"args": [],
"open": "np2fmgen",
"env": {}
}
}
},
"version": {
"win32": "1.06",
"darwin": "1.06"
},
"news": [],
"conference": "touhou-pc98",
"icon": "https://r.my-card.in/downloads/assets/th5-图标/16px-Icon_th05.png",
"cover": "https://r.my-card.in/downloads/assets/th5-图标/东方怪绮谈封面.jpg",
"background": "https://r.my-card.in/downloads/assets/th5-图标/Mystic_Square.png"
},
{
"id": "th5-lang-zh-TW",
"category": "module",
"parent": "th5",
"tags": [
"language"
],
"dependencies": {
"win32": [
"th5"
],
"darwin": [
"th5"
]
},
"references": {
"win32": [],
"darwin": []
},
"author": "ZUN",
"homepage": "http://www.myacg.cc",
"locales": [
"zh-TW"
],
"actions": {
"win32": {
"main": {
"execute": "th5_cn.hdi",
"args": [],
"open": "np2fmgen",
"env": {}
}
},
"darwin": {
"main": {
"execute": "th5_cn.hdi",
"args": [],
"open": "np2fmgen",
"env": {}
}
}
},
"version": {
"win32": "1.06",
"darwin": "1.06"
},
"news": []
},
{
"id": "ygopro",
"name": {
"zh-CN": "YGOPro"
},
"description": {
"zh-CN": "YGOPro,是一款在Github上免费开源的《游戏王》决斗软件。原作者为Fluorohydride。YGOPro为全卡环境的游戏王,是最能提供完整游戏王体验的软件。在MyCard上,随时都有上百名在线玩家与你进行天梯匹配、双打、自定义游戏。不仅如此,YGOPro专属决斗数据库更会提供玩家排行榜、卡片统计等定制化服务。YGOPro的社区十分活跃,欢迎好的建议或需求去社区找管理员反馈,也可以发邮件到474078233@qq.com联系管理员。",
"en-US": "YGOPro is a fully automated Yugioh online dueling system with a complete collection of Yugioh card. It is open source at Github and free of charge. YGOPro is also highly customizeable, where you can change your card sleeves and backgrounds whenever you like. In addtion, MyCard provides essential YGOPro services such as Elo, player ranking, AI battle, and meta statistics that are meant to improve your playing experience. Install now to begin your duelist career!"
},
"developers": {
"zh-CN": [
{
"name": "Fluorohydride",
"url": "https://github.com/Fluorohydride/ygopro"
}
]
},
"publishers": {
"zh-CN": [
{
"name": "",
"url": ""
}
]
},
"released_at": "2011-06-03" ,
"category": "game",
"tags": [
"recommend"
],
"dependencies": {
"win32": [],
"darwin": []
},
"references": {
"win32": [],
"darwin": []
},
"author": "Fluorohydride",
"homepage": "https://github.com/Fluorohydride/ygopro",
"locales": [
"zh-CN",
"en-US",
"ja-JP"
],
"actions": {
"win32": {
"main": {
"execute": "ygopro.exe",
"args": [],
"env": {}
}
},
"darwin": {
"main": {
"execute": "ygopro.app/Contents/MacOS/ygopro",
"args": [],
"env": {}
}
}
},
"version": {
"win32": "1.033.D-9",
"darwin": "1.033.D-9"
},
"files": {
"deck/*.ydk": {
"sync": true
},
"single/*.lua": {
"sync": true
},
"replay/*.yrp": {
"sync": true
}
},
"news": {
"zh-CN": [
{
"url": "https://bbs.ygobbs.com/t/【哲夫老板】关于某炼装上位卡组的一点点思考/83085/10",
"image": "http://pic.4j4j.cn/upload/pic/20140327/af650cf463.jpg",
"title": "关于某炼装上位卡组的一点点思考",
"text": "作者:哲夫老板。本文分析了一个最新炼装上位的构筑,同时讨论了炼装作为竞技卡组应该以及不应该投入的卡片。作者战队招新:EZ战队考试群号263911568。",
"updated_at": "2017-03-12"
},
{
"url": "https://bbs.ygobbs.com/t/YGOPro-竞技匹配积分长期活动详解/83049",
"image": "http://pic.4j4j.cn/upload/pic/20140327/af650cf463.jpg",
"title": "YGOPro-竞技匹配积分长期活动详解 ",
"text": "竞技匹配长期以及季度性活动出炉,奖励丰富!你想了解的竞技匹配的相关信息都在里面哦!",
"updated_at": "2017-03-12"
},
{
"url": "https://bbs.ygobbs.com/t/82917/",
"image": "http://image.tianjimedia.com/uploadImages/2012/159/1EF112986273.jpg",
"title": "还不快来加入我们?MC团队招人!",
"text": "为了创造更好的游戏环境,MyCard YGOPro团队需要有热情的玩家加入!有大厅管理/社区运营/QA测试员/C++技术人等职位!加入团队后还可以领取专属徽章哦!d",
"updated_at": "2017-02-19"
}
],
"en-US": [
{
"url": "https://ygobbs.com/t/MyCard-V3-User-Guide/82335",
"image": "http://pic.4j4j.cn/upload/pic/20140327/af650cf463.jpg",
"title": "MyCard V3 User Guide",
"text": "This guide helps you to know MyCard better.",
"updated_at": "2017-02-19"
}
]
},
"conference": "ygopro_china_north",
"data": {
"windbot": {
"zh-CN": [
"琪露诺",
"谜之剑士LV4",
"复制植物",
"尼亚",
"永远之魂"
],
"en-US": [
"琪露诺",
"谜之剑士LV4",
"复制植物",
"尼亚",
"永远之魂"
]
}
},
"icon": "https://r.my-card.in/downloads/assets/ygopro/ygopro.ico",
"cover": "https://r.my-card.in/downloads/assets/ygopro/ygopro.ico",
"background": "https://r.my-card.in/downloads/assets/ygopro/bg.jpg"
},
{
"id": "desmume",
"name": {
"zh-CN": "DeSmuME"
},
"description": {
"zh-CN": "A script engine for \"yu-gi-oh!\" and sample gui."
},
"category": "emulator",
"tags": [],
"dependencies": {
"win32": [],
"darwin": []
},
"references": {
"win32": [],
"darwin": []
},
"author": "Fluorohydride",
"homepage": "https://github.com/Fluorohydride/ygopro",
"actions": {
"win32": {
"main": {
"execute": "DeSmuME_0.9.11_x86.exe",
"args": [],
"env": {}
}
},
"darwin": {
"main": {
"execute": "DeSmuME.app/Contents/MacOS/DeSmuME",
"args": [],
"env": {}
}
}
},
"version": {
"win32": "1.06",
"darwin": "1.06"
},
"news": []
},
{
"id": "ghost_trick",
"name": {
"zh-CN": "幽灵诡计",
"en-US": "Ghost Trick"
},
"category": "game",
"tags": [
"mysterious"
],
"dependencies": {
"win32": [
"desmume"
],
"darwin": [
"desmume"
]
},
"references": {
"win32": [
"ghost_trick-lang-zh-CN"
],
"darwin": [
"ghost_trick-lang-zh-CN"
]
},
"author": "Fluorohydride",
"homepage": "https://github.com/Fluorohydride/ygopro",
"locales": [
"ja-JP"
],
"actions": {
"win32": {
"main": {
"execute": "5017 - Ghost Trick (J).nds",
"args": [],
"env": {},
"open": "desmume"
}
},
"darwin": {
"main": {
"execute": "5017 - Ghost Trick (J).nds",
"args": [],
"env": {},
"open": "desmume"
}
}
},
"version": {
"win32": "1.06",
"darwin": "1.06"
},
"news": [],
"conference": "ds"
},
{
"id": "ghost_trick-lang-zh-CN",
"category": "module",
"tags": [
"language"
],
"dependencies": {
"win32": [
"desmume",
"ghost_trick"
],
"darwin": [
"desmume",
"ghost_trick"
]
},
"references": {
"win32": [],
"darwin": []
},
"parent": "ghost_trick",
"author": "Fluorohydride",
"homepage": "https://github.com/Fluorohydride/ygopro",
"locales": [
"zh-CN"
],
"actions": {
"win32": {
"main": {
"execute": "5017 - Ghost Trick (J).nds",
"args": [],
"env": {},
"open": "desmume"
}
},
"darwin": {
"main": {
"execute": "5017 - Ghost Trick (J).nds",
"args": [],
"env": {},
"open": "desmume"
}
}
},
"version": {
"win32": "1.06",
"darwin": "1.06"
},
"news": []
},
{
"id": "directx",
"name": {
"zh-CN": "DirectX 最终用户运行时",
"en-US": "DirectX End-User Runtime"
},
"description": {
"zh-CN": "A script engine for \"yu-gi-oh!\" and sample gui."
},
"category": "runtime",
"tags": [],
"dependencies": {
"win32": [],
"darwin": [
"wine"
]
},
"references": {
"win32": [],
"darwin": []
},
"author": "Fluorohydride",
"homepage": "https://github.com/Fluorohydride/ygopro",
"actions": {
"win32": {
"install": {
"execute": "DXSETUP.exe",
"args": [
"/silent"
]
}
},
"darwin": {
"install": {
"execute": "DXSETUP.exe",
"args": [
"/silent"
],
"open": "wine"
}
}
},
"version": {
"win32": "1.06",
"darwin": "1.06"
},
"news": []
},
{
"id": "np2fmgen",
"name": {
"zh-CN": "Neko Project II"
},
"dependencies": {
"win32": [],
"darwin": [
"wine"
]
},
"description": {
"zh-CN": "np2fmgen"
},
"version": {
"win32": "1.06",
"darwin": "1.06"
},
"category": "emulator",
"actions": {
"win32": {
"main": {
"execute": "np21nt.exe",
"args": [],
"env": {}
}
},
"darwin": {
"main": {
"execute": "np21nt.exe",
"args": [],
"env": {},
"open": "wine"
}
}
}
},
{
"id": "wine",
"name": {
"zh-CN": "Wine"
},
"description": {
"zh-CN": "wine"
},
"version": {
"win32": "1.06",
"darwin": "1.06"
},
"category": "emulator",
"actions": {
"win32": {},
"darwin": {
"main": {
"execute": "bin/wine.bin",
"args": [],
"env": {
"WINEDEBUG": "-all"
}
}
}
}
},
{
"id": "test",
"name": {
"zh-CN": "测试"
},
"description": {
"zh-CN": "wine"
},
"version": {
"win32": "1.06",
"darwin": "1.06"
},
"category": "test",
"actions": {
"win32": {},
"darwin": {
"main": {
"execute": "bin/wine.bin",
"args": [],
"env": {
"WINEDEBUG": "-all"
}
}
}
},
"dependencies": {
"win32": [],
"darwin": []
},
"references": {
"win32": [],
"darwin": []
},
"price":{
"cny":6,
"usd":1
},
"conference": "test",
"icon": "https://r.my-card.in/downloads/assets/th135-图标/icon.ico",
"cover": "https://r.my-card.in/downloads/assets/th135-图标/1024px-东方心绮楼booklet1.jpg",
"background": "https://r.my-card.in/downloads/assets/th135-图标/1280px-东方心绮楼cover4.jpg"
},
{
"id": "oz",
"name": {
"zh-CN": "OZ大乱斗"
},
"description": {
"zh-CN": " 本作早在2007年开始制作,基本可以算是黑历史的作品,讲的是几个熊孩子打酱油的奇幻故事。相比续作略显简陋,如果你有兴趣的玩,也可以下来玩一玩。"
},
"developers": {
"zh-CN": [
{
"name": "谢拉卡姗娜",
"url": "http://fuckoz.com"
}
]
},
"publishers": {
"zh-CN": [
{
"name": "",
"url": ""
}
]
},
"released_at": "2012-01-15" ,
"category": "game",
"tags": [
"recommend"
],
"dependencies": {
"win32": [],
"darwin": [
"wine"
]
},
"references": {
"win32": [
],
"darwin": [
]
},
"author": "ZUN",
"homepage": "http://www.myacg.cc",
"locales": [
"zh-CN"
],
"actions": {
"win32": {
"main": {
"execute": "OZ大乱斗.exe",
"args": [],
"env": {}
}
},
"darwin": {
"main": {
"execute": "OZ大乱斗.exe",
"args": [],
"open": "wine",
"env": {
"LANG": "zh_CN.UTF-8"
}
}
}
},
"version": {
"win32": "v2.00e",
"darwin": "v2.00e"
},
"news": [],
"conference": "oz",
"icon": "https://r.my-card.in/downloads/assets/oz/Icon%2016x16.png",
"cover": "https://r.my-card.in/downloads/assets/oz/MyCard%20logo%20OZ.jpg",
"background": "https://r.my-card.in/downloads/assets/oz/MyCard%20Background%20OZ.jpg"
},
{
"id": "ozns",
"name": {
"zh-CN": "OZ大乱斗NS"
},
"description": {
"zh-CN": " 这是一个小众向的同人RPG游戏,讲述的是几个女大学生的奇幻之旅;<br/> 本来只不过供几个小伙伴之间自娱自乐,素材来源也是杂七杂八,如果你真的热爱传统RPG,这个游戏还是值得一玩的。"
},
"developers": {
"zh-CN": [
{
"name": "谢拉卡姗娜",
"url": "http://fuckoz.com"
}
]
},
"publishers": {
"zh-CN": [
{
"name": "",
"url": ""
}
]
},
"released_at": "2017-02-20" ,
"category": "game",
"tags": [
"recommend"
],
"dependencies": {
"win32": [],
"darwin": [
"wine"
]
},
"references": {
"win32": [
],
"darwin": [
]
},
"author": "ZUN",
"homepage": "http://www.myacg.cc",
"locales": [
"zh-CN"
],
"actions": {
"win32": {
"main": {
"execute": "Game.exe",
"args": [],
"env": {}
}
},
"darwin": {
"main": {
"execute": "Game.exe",
"args": [],
"open": "wine",
"env": {
"LANG": "zh_CN.UTF-8"
}
}
}
},
"version": {
"win32": "1.54e-1",
"darwin": "1.54e-1"
},
"news": [],
"conference": "oz",
"icon": "https://r.my-card.in/downloads/assets/ozns/Icon%2016x16.png",
"cover": "https://r.my-card.in/downloads/assets/ozns/MyCard%20logo%20NS.png",
"background": "https://r.my-card.in/downloads/assets/ozns/MyCard%20Background%20NS.jpg"
}
]
/**
* Created by weijian on 2016/12/30.
*/
export function field(target: any, propertyKey: string): any {
return {
get (): any {
return this.get(propertyKey);
},
set (value: any): void {
this.set(propertyKey, value);
}
};
}
/**
* Created by weijian on 2016/12/29.
*/
import {MongoClient, Collection, InsertOneWriteOpResult, DeleteWriteOpResultObject} from 'mongodb';
import pluralize = require('pluralize');
interface Config {
dbSettings: {
connectionString: string;
};
}
const config: Config = require('./../mongodb_config.json');
const promise = MongoClient.connect(config.dbSettings.connectionString);
export class Model {
static get dbName(): string {
return pluralize(this.name.toLowerCase());
}
static async getCollection(): Promise<Collection> {
let db = await promise;
return db.collection(this.dbName);
}
static async deleteOne(filter: Object): Promise<DeleteWriteOpResultObject> {
let collection = await this.getCollection();
return await collection.deleteOne(filter);
}
static async findOne(query: Object): Promise<any|null> {
let collection = await this.getCollection();
let result = await collection.find(query).limit(1).next();
console.log(result, query,this.dbName);
if (result) {
return new this(result);
} else {
return null;
}
}
constructor(o: any) {
for (let [key, value] of Object.entries(o)) {
this[key] = value;
}
}
async save(): Promise<InsertOneWriteOpResult> {
let db = await promise;
return db.collection(Model.dbName).insertOne(this);
}
}
import {STATUS_CODES} from 'http';
/**
* Created by weijian on 2016/12/29.
*/
export class KoaError extends Error {
constructor(msg: string, public status: number) {
super(msg);
}
}
export class NotFound extends KoaError {
constructor(msg = STATUS_CODES[404]) {
super(msg, 404);
}
}
export class BadRequest extends KoaError {
constructor(msg = STATUS_CODES[400]) {
super(msg, 400);
}
}
export class InternalError extends KoaError {
constructor(public error: Error) {
super(STATUS_CODES[500], 500);
}
}
import {Db} from 'mongodb';
export async function up(db: Db, next: Function) {
await db.collection('apps').createIndex('id', {unique: true});
next();
}
export async function down(db: Db, next: Function) {
await db.dropCollection('apps');
next();
}
import 'reflect-metadata';
import * as Mongorito from 'mongorito';
import Model = Mongorito.Model;
import {field} from '../db/decorators';
import {ModelExistsError} from './errors';
import {File} from './package'
/**
* Created by weijian on 2016/12/28.
*/
interface I18n<T> {
[locale: string]: T;
}
interface Platform<T> {
[platform: string]: T;
}
interface Package{
id: string;
name: string;
platforms: Platform<string[]>;
locales: I18n<string[]>;
files: File[];
}
export class App extends Model {
@field
id: string;
@field
name?: I18n<string>;
@field
description?: I18n<string>
@field
developers?: I18n<[{ name: string, url: string }]>
@field
publishers?: I18n<[{ name: string, url: string }]>
@field
released_at?: string;
@field
category?: string;
@field
parent?: string;
@field
tag?: string[];
@field
dependencies?: Platform<string[]>;
@field
references?: Platform<string[]>;
@field
homepage?: string;
@field
locales?: string[];
@field
actions?: Platform<{[key: string]: {execuate: string, args: string[], env: {[key: string]: string}}}>;
@field
files?: {[key: string]: { sync: boolean}}
@field
version?: Platform<string>;
@field
news?: I18n<{title: string, url: string, image: string}[]>;
@field
conference?: string;
@field
data?: any;
@field
icon?: string;
@field
cover?: string;
@field
background?: string;
@field
packages?: Package[];
async checkExists() {
let app = await App.findOne({id: this.id});
if (app) {
throw new ModelExistsError(`App ${this.id} exists`);
}
}
configure() {
this.before('create', this.checkExists);
}
}
/**
* Created by zh99998 on 2017/1/4.
*/
export interface I18n<T> {
[locale: string]: T;
}
class App {
id: string;
name: I18n<string>;
description: I18n<string> = {};
parent?: string;
locales: string[] = [];
news: I18n<{title: string, url: string, image: string}[]> = {};
conference?: string;
data: any;
icon = 'http://www.immersion-3d.com/wp-content/uploads/2015/12/image-placeholder-500x500.jpg';
created_at: Date;
status = '已发布';
// TODO: 实现进 Model 里
constructor(o: any) {
for (let [key, value] of Object.entries(o)) {
this[key] = value;
}
this.created_at = new Date(o.created_at);
}
}
export default App;
import {KoaError} from '../koa/errors';
/**
* Created by weijian on 2017/1/4.
*/
export abstract class ModelError extends KoaError {
abstract errCode: string;
constructor(msg: string, status: number) {
super(msg, status);
}
}
export class ModelExistsError extends ModelError {
errCode: string = 'ERROR_MODULE_EXISTS';
constructor(msg: string) {
super(msg, 400);
}
}
export class ModelInvalidError extends ModelError {
errCode: string = 'ERROR_MODEL_INVALID';
constructor(msg: string) {
super(msg, 400);
}
}
/**
* Created by weijian on 2016/12/29.
*/
import {Model} from 'mongorito';
import {field} from '../db/decorators';
type Locale = 'zh-CN' | 'en-US' | 'ja-JP'
type Platform = 'win32' | 'linux' | 'darwin'
export interface Action {
execute: string;
args: string[];
env: {};
open?: string;
}
export interface File {
path: string;
size: number;
hash: string;
}
export class Package extends Model {
@field
id: string;
@field
name: string;
@field
appId: string;
@field
version: string;
@field
locales: Locale[];
@field
platforms: Platform[];
@field
files: File[];
static async findAllByApp(appId: string) {
return await Package.find({appId: appId});
}
}
{
"dbSettings": {
"connectionString": "mongodb://wudizhanche.mycard.moe:27017/mycard"
}
}
\ No newline at end of file
{
"name": "mycard-console",
"version": "1.0.0",
"private": true,
"name": "application-name",
"version": "0.0.1",
"scripts": {
"prestart": "tsc",
"start": "node server.js",
"server": "node server.js",
"tsc": "tsc",
"lint": "tslint -e ./node_modules/** ./**/*.ts -t verbose",
"migrate": "tsc && mongo-migrate --runMongoMigrate --config mongodb_config.json --dbPropName dbSettings"
"server": "node server.js"
},
"dependencies": {
"@types/bluebird": "^3.5.0",
"@types/uuid": "^2.0.29",
"aliyun-oss-upload-stream": "^1.3.0",
"aliyun-sdk": "^1.9.22",
"async-busboy": "^0.3.4",
"bluebird": "^3.5.0",
"clone": "^2.1.0",
"core-js": "^2.4.1",
"hammerjs": "^2.0.8",
"dot-env": "^0.0.1",
"dotenv": "^4.0.0",
"inversify": "^3.3.0",
"iridium": "^7.1.6",
"is-zip": "^1.0.0",
"koa": "^2.0.0",
"koa-bodyparser": "^3.2.0",
"koa-log4": "^2.1.0",
"koa-router": "^7.0.1",
"mime": "^1.3.4",
"mongodb": "^2.2.16",
"mongodb-migrate": "^2.0.1",
"mongorito": "^2.2.0",
"nodemon": "^1.11.0",
"random": "^1.0.0-beta-1",
"react": "^15.4.2",
"react-intl": "^2.2.3",
"reflect-metadata": "^0.1.9",
"mongoose": "^4.9.4",
"mongoose-timestamp": "^0.6.0",
"mongoose-unique-validator": "^1.0.4",
"tmp": "0.0.31",
"typed-promisify": "^0.4.0",
"uuid": "^3.0.1",
"zone.js": "^0.7.4"
"uuid": "^3.0.1"
},
"devDependencies": {
"@types/clone": "^0.1.30",
"@types/hammerjs": "^2.0.34",
"@types/bluebird": "^3.5.0",
"@types/koa": "^2.0.37",
"@types/koa-bodyparser": "^3.0.22",
"@types/koa-router": "^7.0.21",
......@@ -49,8 +37,10 @@
"@types/node": "^6.0.55",
"@types/pluralize": "0.0.27",
"@types/tmp": "0.0.32",
"@types/uuid": "^2.0.29",
"concurrently": "^3.1.0",
"lite-server": "^2.2.2",
"nodemon": "^1.11.0",
"tslint": "^3.15.1",
"typescript": "^2.1.4"
}
......
/**
* Created by weijian on 2017/1/6.
*/
const queue = [];
while(true){
}
/**
* Created by weijian on 2016/12/28.
*/
import Router = require('koa-router');
import {NotFound, InternalError} from '../koa/errors';
import {App} from '../models/app';
import {Package} from '../models/Package'
import {ModelError, ModelInvalidError} from '../models/errors';
const router = new Router();
router.get('/apps', async(ctx, next) => {
let apps: App[]|null = await App.all();
apps = await Promise.all(apps.map(async app => {
if(app.packages && app.packages.length > 0) {
app.packages = await Promise.all(app.packages.map(async id => {
return await Package.findOne({id})
}))
}
return app
}))
ctx.body = apps
});
router.get('/apps/:id', async(ctx, next) => {
let app = await App.findOne({id: ctx.params.id});
if (app) {
ctx.body = app;
} else {
throw new NotFound(`App ${ctx.params.id} Not Found`);
}
});
router.post('/apps/:id', async(ctx, next) => {
if (!ctx.request.body.id || ctx.params.id !== ctx.request.body.id) {
throw new ModelInvalidError('App id not same');
}
let app = new App(ctx.request.body);
try {
ctx.body = await app.save();
} catch (e) {
if (e instanceof ModelError) {
throw e;
} else {
throw new InternalError(e);
}
}
});
router.patch('/apps/:id', async(ctx, next) => {
let app: App|null = await App.findOne({id: ctx.params.id});
if (!app) {
throw new NotFound(`App ${ctx.params.id} Not Found`);
}
if (!ctx.request.body.id || ctx.request.body.id !== app.id) {
throw new ModelInvalidError('Can not change AppID');
}
try {
if(ctx.request.body.packages.length > 0) {
ctx.request.body.packages = await Promise.all(ctx.request.body.packages.map(async _p=> {
const p: Package|null = await Package.findOne({ id: _p.id })
if(p) {
Object.assign(p, _p)
await p.save()
return p.id
}
const newP = new Package(_p)
await newP.save()
return newP.id
}))
}
Object.assign(app, ctx.request.body);
ctx.body = await app.save();
} catch (error) {
ctx.throw(403, error)
}
});
router.delete('/apps/:id', async(ctx, next) => {
let result = await App.remove({id: ctx.params.id});
if (!result.result.n) {
throw new NotFound(`App ${ctx.params.id} Not Found`);
}
ctx.body = result.result;
});
export default router;
import Router = require('koa-router');
const router = new Router();
/* GET home page. */
router.get('/', (ctx, next) => {
ctx.body = 'Hello World';
});
export default router;
/**
* Created by weijian on 2016/12/29.
*/
import Router = require('koa-router');
import {NotFound} from '../koa/errors';
import {Package} from '../models/package';
import {ModelInvalidError} from '../models/errors';
import * as tmp from 'tmp';
import {ChildProcess} from 'child_process';
import fs = require('fs');
import http = require('http');
import isZip = require('is-zip');
import path = require('path');
import child_process = require('child_process');
const router = new Router();
interface Option {
dir?: string;
}
class Archive {
constructor(public tarPath = 'tar', public unzipPath = 'unzip') {
}
async extract(options?: Option) {
}
private async isZip(file: string): Promise<boolean > {
return new Promise<boolean>((resolve, reject) => {
fs.readFile(file, (err, data) => {
if (err) {
reject(err);
} else {
resolve(isZip(data));
}
});
});
}
async decompress(file: string, option?: Option) {
let dir = '.';
if (option) {
if (option.dir) {
dir = option.dir;
}
}
await new Promise(async(resolve, reject) => {
let process: ChildProcess;
if (await this.isZip(file)) {
// TODO zip解压
process = child_process.spawn(this.unzipPath);
} else {
process = child_process.spawn(this.tarPath, ['xvf', file, '-c', dir]);
}
process.on('exit', (code, signal) => {
if (code !== 0) {
reject(`tar exited by accident, code ${code}`);
} else {
resolve();
}
});
});
}
}
router.get('/packages/all/:appId', async(ctx, next) => {
let appId = ctx.params.appId;
ctx.body = await Package.findAllByApp(appId);
});
router.get('/packages/:id', async(ctx, next) => {
let p: Package|null = await Package.findOne({id: ctx.params.id});
if (!p) {
throw new NotFound(`Package id ${ctx.params.id} not found`);
}
ctx.body = p;
});
// router.post('/packages/:id', async(ctx, next) => {
// let p: Package|null = await Package.findOne({id: ctx.params.id});
// if (!p) {
// throw new NotFound(`Package ${ctx.params.id} Not Found`);
// }
// if (!ctx.request.body.id || ctx.request.body.id !== p.id) {
// throw new ModelInvalidError('Can not change AppID');
// }
// Object.assign(p, ctx.request.body);
// ctx.body = await p.save();
// })
router.patch('/packages/:id', async(ctx, next) => {
new Promise<string|Buffer>((resolve, reject) => {
let downloadUrl = ctx.request.body.downloadUrl;
tmp.tmpName((e, file) => {
if (e) {
reject(e);
} else {
let writeStream = fs.createWriteStream(file);
http.get(downloadUrl, (response) => {
response.pipe(writeStream);
writeStream.on('finish', () => {
resolve(writeStream.path);
});
}).on('error', (err) => {
reject(err);
});
}
});
});
// TODO 打包
});
export default router;
import * as Router from 'koa-router'
import * as path from 'path'
import * as uuid from 'uuid'
import * as _fs from 'fs'
import { promisifyAll} from 'bluebird'
const fs:any = promisifyAll(_fs)
import * as busboy from 'async-busboy'
import * as mime from 'mime'
const router = new Router();
function uploadImageStream(file){
return new Promise(async (resolve, reject) => {
const ext = mime.extension(file.mime)
if(['png','jpg','jpeg','gif','webp'].indexOf(ext) === -1) {
return reject(new Error("Unsupported image type"))
}
const hash = uuid.v1()
const uploadDir = 'upload'
const fileName = `${hash}.${ext}`
try {
let access = await fs.accessAsync(uploadDir)
} catch (error) {
await fs.mkdirAsync(uploadDir)
}
let writeStream = fs.createWriteStream(path.join(uploadDir, fileName))
file.pipe(writeStream)
resolve({fileName})
})
}
router.post('/upload/image', async(ctx, next) => {
try {
const {files} = await busboy(ctx.req)
const res = await Promise.all(files.map(file => {
return uploadImageStream(file)
}))
ctx.body = res
} catch (err) {
ctx.throw(403, err)
}
})
export default router;
import Router = require('koa-router');
const router = new Router();
/* GET home page. */
router.get('/users', (ctx, next) => {
ctx.body = 'Hello World';
});
router.post('/users/:id(\\d*)', async(ctx, next) => {
});
export default router;
import Koa = require('koa');
import index from './routes/index';
import upload from './routes/upload';
import users from './routes/users';
import apps from './routes/apps';
import packages from './routes/packages';
import bodyParser = require('koa-bodyparser');
import * as mongoose from 'mongoose'
// import Mongorito = require('mongorito');
import log4js = require('log4js');
if(process.env.NODE_ENV !== 'production') {
require('dotenv').config()
}
import * as Koa from 'koa'
import * as log4js from 'log4js'
import * as bodyParser from 'koa-bodyparser'
import { mongodb } from './src/models/iridium'
// import index from './routes/index';
import upload from './src/routes/upload';
// import users from './src/routes/users';
import apps from './src/routes/app';
// import packages from './routes/packages';
const logger = log4js.getLogger();
const url = require('./mongodb_config.json').dbSettings.connectionString;
const logger = log4js.getLogger();
const app = new Koa();
......@@ -58,91 +60,16 @@ app.use(async(ctx, next) => {
app.use(bodyParser());
app.use(index.routes());
app.use(users.routes());
// app.use(index.routes());
// app.use(users.routes());
app.use(apps.routes());
app.use(upload.routes());
app.use(packages.routes());
// app.use(packages.routes());
mongoose.connect(url).then(() => {
app.listen(8001, () => {
console.log("app listening port 8001")
});
mongodb.connect().then(() => {
app.listen(8001, () => {
console.log("app listening port 8001")
});
})
// Mongorito.connect(url).then(() => {
// app.listen(8001, () => {
// console.log("app listening port 8001")
// });
// });
// function getKoaLogger (logger4js, options) {
// if (typeof options === 'object') {
// options = options || {}
// } else if (options) {
// options = { format: options }
// } else {
// options = {}
// }
//
// var thislogger = logger4js
// var level = levels.toLevel(options.level, levels.INFO)
// var fmt = options.format || DEFAULT_FORMAT
// var nolog = options.nolog ? createNoLogCondition(options.nolog) : null
//
// return co.wrap(function *(ctx, next) {
// // mount safety
// if (ctx.request._logging) return yield next()
//
// // nologs
// if (nolog && nolog.test(ctx.originalUrl)) return yield next()
// if (thislogger.isLevelEnabled(level) || options.level === 'auto') {
// var start = new Date()
// var writeHead = ctx.response.writeHead
//
// // flag as logging
// ctx.request._logging = true
//
// // proxy for statusCode.
// ctx.response.writeHead = function (code, headers) {
// ctx.response.writeHead = writeHead
// ctx.response.writeHead(code, headers)
// ctx.response.__statusCode = code
// ctx.response.__headers = headers || {}
//
// // status code response level handling
// if (options.level === 'auto') {
// level = levels.INFO
// if (code >= 300) level = levels.WARN
// if (code >= 400) level = levels.ERROR
// } else {
// level = levels.toLevel(options.level, levels.INFO)
// }
// }
//
// yield next()
// // hook on end request to emit the log entry of the HTTP request.
// ctx.response.responseTime = new Date() - start
// // status code response level handling
// if (ctx.res.statusCode && options.level === 'auto') {
// level = levels.INFO
// if (ctx.res.statusCode >= 300) level = levels.WARN
// if (ctx.res.statusCode >= 400) level = levels.ERROR
// }
// if (thislogger.isLevelEnabled(level)) {
// var combinedTokens = assembleTokens(ctx, options.tokens || [])
// if (typeof fmt === 'function') {
// var line = fmt(ctx, function (str) {
// return format(str, combinedTokens)
// })
// if (line) thislogger.log(level, line)
// } else {
// thislogger.log(level, format(fmt, combinedTokens))
// }
// }
// } else {
// // ensure next gets always called
// yield next()
// }
// })
// }
import { Container } from 'inversify'
import TYPES from './types'
const container = new Container()
export default container
\ No newline at end of file
import {Core, Model, Instance, Collection, Index, Property, ObjectID} from 'iridium'
import {handleImg} from '../utils'
interface I18n<T> {
[locale: string]: T;
}
interface Platform<T> {
[platform: string]: T;
}
interface Package{
id: string;
name: string;
platforms: Platform<string[]>;
locales: I18n<string[]>;
files: File[];
}
interface File {
path: string;
size: number;
hash: string;
}
export interface App {
id: string;
name?: I18n<string>;
description?: I18n<string>
developers?: I18n<[{ name: string, url: string }]>
publishers?: I18n<[{ name: string, url: string }]>
released_at?: string;
category?: string;
parent?: string;
tag?: string[];
dependencies?: Platform<string[]>;
references?: Platform<string[]>;
homepage?: string;
locales?: string[];
actions?: Platform<{[key: string]: {execuate: string, args: string[], env: {[key: string]: string}}}>;
files?: {[key: string]: { sync: boolean}}
version?: Platform<string>;
news?: I18n<{title: string, url: string, image: string}[]>;
conference?: string;
data?: any;
icon?: string;
cover?: string;
background?: string;
packages?: Package[];
created_at: Date;
}
@Collection('apps')
@Index({id: 1}, { unique: true })
export class AppSchema extends Instance<App, AppSchema> implements App {
@Property(String, true)
id: string;
@Property(Object, false)
name?: I18n<string>;
@Property(Object, false)
description?: I18n<string>
@Property(Object, false)
developers?: I18n<[{ name: string, url: string }]>
@Property(Object, false)
publishers?: I18n<[{ name: string, url: string }]>
@Property(String, false)
released_at?: string;
@Property(String, false)
category?: string;
@Property(String, false)
parent?: string;
@Property(Array, false)
tag?: string[];
@Property(Object, false)
dependencies?: Platform<string[]>;
@Property(Object, false)
references?: Platform<string[]>;
@Property(String, false)
homepage?: string;
@Property(Array, false)
locales?: string[];
@Property(Object, false)
actions?: Platform<{[key: string]: {execuate: string, args: string[], env: {[key: string]: string}}}>;
@Property(Object, false)
files?: {[key: string]: { sync: boolean}}
@Property(Object, false)
version?: Platform<string>;
@Property(Object, false)
news?: I18n<{title: string, url: string, image: string}[]>;
@Property(String, false)
conference?: string;
@Property(Object, false)
data?: any;
@Property(String, false)
icon?: string;
@Property(String, false)
cover?: string;
@Property(String, false)
background?: string;
@Property(Array, false)
packages?: Package[];
@Property(Date, false)
created_at: Date;
static onCreating(app: App){
app.created_at = new Date()
app.packages = []
}
handleUpdate(data: App) {
Object.assign(this, data)
}
toJSON() {
this.Convert()
return JSON.parse(this)
}
Convert() {
this.icon = handleImg(this.icon),
this.cover = handleImg(this.cover),
this.background = handleImg(this.background)
}
}
import {Core, Model} from "iridium";
import {App, AppSchema} from "./App";
import {Package, PackageSchema} from "./Package";
export class MongoDB extends Core {
Apps = new Model<App, AppSchema>(this, AppSchema)
Packages = new Model<Package, PackageSchema>(this,PackageSchema)
}
export const mongodb = new MongoDB(process.env["MONGODB"])
import {Core, Model, Instance, Collection, Index, Property, ObjectID} from 'iridium'
type Locale = 'zh-CN' | 'en-US' | 'ja-JP'
type Platform = 'win32' | 'linux' | 'darwin'
export interface Action {
execute: string;
args: string[];
env: {};
open?: string;
}
export interface File {
path: string;
size: number;
hash: string;
}
export interface Package {
id: string;
name: string;
appId: string;
version: string;
locales: Locale[];
platforms: Platform[];
files: File[];
}
@Collection("packages")
@Index({id: 1}, { unique: true })
export class PackageSchema extends Instance<Package, PackageSchema> implements Package {
@Property(String, true)
id: string;
@Property(String, false)
name: string;
@Property(String, false)
appId: string;
@Property(String, false)
version: string;
@Property(Array, false)
locales: Locale[];
@Property(Array, false)
platforms: Platform[];
@Property(Array, false)
files: File[];
handleUpdate(data: Package) {
Object.assign(this, data)
}
}
\ No newline at end of file
import Router = require('koa-router');
import {mongodb} from '../models/iridium'
import {App, AppSchema} from "../models/App";
import {Context} from "koa";
const router = new Router();
router.get('/apps', async (ctx: Context, next) => {
ctx.body = await mongodb.Apps.find({})
.map(async app => {
if(Array.isArray(app.packages) && app.packages.length > 0){
app.packages = await Promise.all(app.packages.map(async p => {
return await mongodb.Packages.findOne({id: p})
}))
}
return app
})
});
router.post('/apps/:id', async (ctx: Context, next) => {
if (!ctx.request.body.id || ctx.params.id !== ctx.request.body.id) {
ctx.throw(400, "App is not same")
}
let exists = await mongodb.Apps.findOne({id: ctx.request.body.id});
if (exists) {
ctx.throw(400, "App id is exists")
}
try {
ctx.body = await mongodb.Apps.insert(ctx.request.body)
} catch (e) {
ctx.throw(400, e)
}
})
router.patch('/apps/:id', async (ctx: Context, next) => {
let data = ctx.request.body
let app: AppSchema | null = await mongodb.Apps.findOne({id: ctx.params.id});
if (!app) {
ctx.throw(400, `App ${ctx.params.id} Not Found `);
}
if (!ctx.request.body.id || ctx.request.body.id !== app!.id) {
ctx.throw(400, `Can not change AppID`)
}
if(Array.isArray(data.packages)) {
data.packages = await Promise.all(data.packages.map(async _p => {
const p = await mongodb.Packages.findOne({id: _p.id})
if(p) {
p.handleUpdate(_p)
await p.save()
return p.id
} else {
const newP = await mongodb.Packages.insert(_p)
return newP.id
}
}))
}
app!.handleUpdate(data)
ctx.body = await app!.save()
})
export default router
\ No newline at end of file
import { Context } from 'koa';
import { OSS } from 'aliyun-sdk';
import * as busboy from 'async-busboy';
import * as mime from 'mime';
import * as uuid from 'uuid';
import * as Client from 'aliyun-oss-upload-stream';
import Router = require('koa-router');
const ossStream = Client(new OSS({
accessKeyId: process.env["OSS_ACCESS_ID"],
secretAccessKey: process.env["OSS_ACCESS_KEY"],
endpoint: process.env["OSS_ENDPOINT"],
apiVersion: '2013-10-15'
}));
const router = new Router()
const UploadImage = async (ctx: Context) => {
try {
const { files } = await busboy(ctx.req);
ctx.body = await Promise.all(files.map(async file => {
const ext = mime.extension(file.mime);
if (['png', 'jpg', 'jpeg', 'gif', 'webp'].indexOf(ext) === -1) {
throw new Error('Unsupported image type');
}
const filename = `test/${uuid.v1()}`;
const upload = ossStream.upload({
Bucket: process.env["OSS_BUCKET"],
Key: filename,
ContentType: file.mimeType
});
upload.minPartSize(1048576); // 1M,表示每块part大小至少大于1M
file.pipe(upload);
return await new Promise((resolve, reject) => {
upload.on('error', reject);
upload.on('uploaded', resolve);
});
}));
} catch (err) {
ctx.throw(403, err);
}
};
router.post('/upload/image', UploadImage)
export default router
const TYPES = {
}
export default TYPES
\ No newline at end of file
import { URL } from 'url';
export const handleImg = (img) => {
if (img) {
let url: URL;
if (img.substring(0, 16) == '/uploads/default') {
url = new URL(img, 'https://ygobbs.com');
} else {
url = new URL(img, 'https://cdn01.moecube.com');
}
return url.toString();
} else {
return 'https://cdn01.moecube.com/accounts/default_avatar.jpg';
}
}
\ No newline at end of file
{
"rules": {
"class-name": true,
"comment-format": [
true,
"check-space"
],
"curly": true,
"eofline": true,
"forin": true,
"indent": [
true,
"spaces"
],
"label-position": true,
"label-undefined": true,
"max-line-length": [
true,
140
],
"member-access": false,
"member-ordering": [
true,
"static-before-instance",
"variables-before-functions"
],
"no-arg": true,
"no-bitwise": true,
"no-console": [
true,
"debug",
"info",
"time",
"timeEnd",
"trace"
],
"no-construct": true,
"no-debugger": true,
"no-duplicate-key": true,
"no-duplicate-variable": true,
"no-empty": false,
"no-eval": true,
"no-inferrable-types": true,
"no-shadowed-variable": true,
"no-string-literal": false,
"no-switch-case-fall-through": true,
"no-trailing-whitespace": true,
"no-unused-expression": true,
"no-unused-variable": true,
"no-unreachable": true,
"no-use-before-declare": true,
"no-var-keyword": true,
"object-literal-sort-keys": false,
"one-line": [
true,
"check-open-brace",
"check-catch",
"check-else",
"check-whitespace"
],
"quotemark": [
true,
"single"
],
"radix": true,
"semicolon": [
"always"
],
"triple-equals": [
true,
"allow-null-check"
],
"typedef-whitespace": [
true,
{
"call-signature": "nospace",
"index-signature": "nospace",
"parameter": "nospace",
"property-declaration": "nospace",
"variable-declaration": "nospace"
}
],
"variable-name": false,
"whitespace": [
true,
"check-branch",
"check-decl",
"check-operator",
"check-separator",
"check-type"
]
}
}
......@@ -10,9 +10,13 @@
version "3.5.0"
resolved "https://registry.yarnpkg.com/@types/bluebird/-/bluebird-3.5.0.tgz#2633470a4eabe9a47cd9a45fdb20ed5f93407bca"
"@types/clone@^0.1.30":
version "0.1.30"
resolved "https://registry.yarnpkg.com/@types/clone/-/clone-0.1.30.tgz#e7365648c1b42136a59c7d5040637b3b5c83b614"
"@types/bluebird@^3.5.2":
version "3.5.2"
resolved "https://registry.yarnpkg.com/@types/bluebird/-/bluebird-3.5.2.tgz#ecf1104217495e50fe0b588d538146cd6f733b89"
"@types/chai@^3.4.35":
version "3.5.0"
resolved "https://registry.yarnpkg.com/@types/chai/-/chai-3.5.0.tgz#45e2dc2af9a5727be846af6e61d08ffc45d5b2ca"
"@types/cookies@*":
version "0.6.0"
......@@ -22,8 +26,8 @@
"@types/node" "*"
"@types/express-serve-static-core@*":
version "4.0.40"
resolved "https://registry.yarnpkg.com/@types/express-serve-static-core/-/express-serve-static-core-4.0.40.tgz#168e82978bffc81ee7737bc60728d64733a4f37b"
version "4.0.41"
resolved "https://registry.yarnpkg.com/@types/express-serve-static-core/-/express-serve-static-core-4.0.41.tgz#05df354cbbe5069b4c089320065870033f41e670"
dependencies:
"@types/node" "*"
......@@ -34,10 +38,6 @@
"@types/express-serve-static-core" "*"
"@types/serve-static" "*"
"@types/hammerjs@^2.0.34":
version "2.0.34"
resolved "https://registry.yarnpkg.com/@types/hammerjs/-/hammerjs-2.0.34.tgz#9cbac4f41cb039436141785e1be50b3ab10a04a9"
"@types/http-assert@*":
version "1.2.0"
resolved "https://registry.yarnpkg.com/@types/http-assert/-/http-assert-1.2.0.tgz#0b82993036e86c6ff2944e033b73b57e85ccdcab"
......@@ -63,8 +63,8 @@
"@types/koa" "*"
"@types/koa@*", "@types/koa@^2.0.37":
version "2.0.38"
resolved "https://registry.yarnpkg.com/@types/koa/-/koa-2.0.38.tgz#a37c66c57786dd5e1bfbebc5ad2f2bda53c69396"
version "2.0.39"
resolved "https://registry.yarnpkg.com/@types/koa/-/koa-2.0.39.tgz#45ba1249d8849b9b0ff8c1d6d2f80b0838b89ffa"
dependencies:
"@types/accepts" "*"
"@types/cookies" "*"
......@@ -73,6 +73,10 @@
"@types/koa-compose" "*"
"@types/node" "*"
"@types/lodash@^4.14.58":
version "4.14.62"
resolved "https://registry.yarnpkg.com/@types/lodash/-/lodash-4.14.62.tgz#8674f9861582148a60b7a89cb260f11378d11683"
"@types/log4js@0.0.32":
version "0.0.32"
resolved "https://registry.yarnpkg.com/@types/log4js/-/log4js-0.0.32.tgz#c15621cfa96f92ec6b0cfb49096bdd23cd893c7c"
......@@ -83,7 +87,7 @@
version "0.0.29"
resolved "https://registry.yarnpkg.com/@types/mime/-/mime-0.0.29.tgz#fbcfd330573b912ef59eeee14602bface630754b"
"@types/mongodb@*", "@types/mongodb@^2.1.36":
"@types/mongodb@*", "@types/mongodb@^2.1.36", "@types/mongodb@^2.1.41":
version "2.1.41"
resolved "https://registry.yarnpkg.com/@types/mongodb/-/mongodb-2.1.41.tgz#92ea0f832b9e0269c7826fb7f899cf86fe5c4df5"
dependencies:
......@@ -97,8 +101,8 @@
"@types/node" "*"
"@types/node@*", "@types/node@^6.0.55":
version "6.0.64"
resolved "https://registry.yarnpkg.com/@types/node/-/node-6.0.64.tgz#cdc901411f6301e1437dfed23bc68f54442e4dc8"
version "6.0.65"
resolved "https://registry.yarnpkg.com/@types/node/-/node-6.0.65.tgz#c00faa7ffcfc9842b5dd7bf650872562504d5670"
"@types/pluralize@0.0.27":
version "0.0.27"
......@@ -153,12 +157,26 @@ after@0.8.1:
resolved "https://registry.yarnpkg.com/after/-/after-0.8.1.tgz#ab5d4fb883f596816d3515f8f791c0af486dd627"
ajv@^4.9.1:
version "4.11.4"
resolved "https://registry.yarnpkg.com/ajv/-/ajv-4.11.4.tgz#ebf3a55d4b132ea60ff5847ae85d2ef069960b45"
version "4.11.5"
resolved "https://registry.yarnpkg.com/ajv/-/ajv-4.11.5.tgz#b6ee74657b993a01dce44b7944d56f485828d5bd"
dependencies:
co "^4.6.0"
json-stable-stringify "^1.0.1"
aliyun-oss-upload-stream@^1.3.0:
version "1.3.0"
resolved "https://registry.yarnpkg.com/aliyun-oss-upload-stream/-/aliyun-oss-upload-stream-1.3.0.tgz#38301b19f0344068438eb63977a0cd95d60470c0"
aliyun-sdk@^1.9.22:
version "1.9.22"
resolved "https://registry.yarnpkg.com/aliyun-sdk/-/aliyun-sdk-1.9.22.tgz#5d7bcb18de91c05a7e2a22d746ab74a2c37602c6"
dependencies:
node_memcached "1.1.3"
pomelo-protobuf "^0.4.0"
protobufjs "^4.1.2"
xml2js "0.4.4"
xmlbuilder "^2.4.5"
ansi-regex@^0.2.0, ansi-regex@^0.2.1:
version "0.2.1"
resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-0.2.1.tgz#0d8e946967a3d8143f93e24e298525fc1b2235f9"
......@@ -219,22 +237,25 @@ arrify@^1.0.0:
version "1.0.1"
resolved "https://registry.yarnpkg.com/arrify/-/arrify-1.0.1.tgz#898508da2226f380df904728456849c1501a4b0d"
asap@~2.0.3:
version "2.0.5"
resolved "https://registry.yarnpkg.com/asap/-/asap-2.0.5.tgz#522765b50c3510490e52d7dcfe085ef9ba96958f"
ascli@~1:
version "1.0.1"
resolved "https://registry.yarnpkg.com/ascli/-/ascli-1.0.1.tgz#bcfa5974a62f18e81cabaeb49732ab4a88f906bc"
dependencies:
colour "~0.7.1"
optjs "~3.2.2"
asn1@~0.2.3:
version "0.2.3"
resolved "https://registry.yarnpkg.com/asn1/-/asn1-0.2.3.tgz#dac8787713c9966849fc8180777ebe9c1ddf3b86"
assert-plus@1.0.0, assert-plus@^1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/assert-plus/-/assert-plus-1.0.0.tgz#f12e0f3c5d77b0b1cdd9146942e4e96c1e4dd525"
assert-plus@^0.2.0:
version "0.2.0"
resolved "https://registry.yarnpkg.com/assert-plus/-/assert-plus-0.2.0.tgz#d74e1b87e7affc0db8aadb7021f3fe48101ab234"
assert-plus@^1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/assert-plus/-/assert-plus-1.0.0.tgz#f12e0f3c5d77b0b1cdd9146942e4e96c1e4dd525"
async-busboy@^0.3.4:
version "0.3.4"
resolved "https://registry.yarnpkg.com/async-busboy/-/async-busboy-0.3.4.tgz#1311af58c32b07440d626b7acc6e38b751580e7d"
......@@ -253,6 +274,12 @@ async@1.5.2:
version "1.5.2"
resolved "https://registry.yarnpkg.com/async/-/async-1.5.2.tgz#ec6a61ae56480c0c3cb241c95618e20892f9672a"
async@2.1.4:
version "2.1.4"
resolved "https://registry.yarnpkg.com/async/-/async-2.1.4.tgz#2d2160c7788032e4dd6cbe2502f1f9a2c8f6cde4"
dependencies:
lodash "^4.14.0"
asynckit@^0.4.0:
version "0.4.0"
resolved "https://registry.yarnpkg.com/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79"
......@@ -311,7 +338,11 @@ block-stream@*:
dependencies:
inherits "~2.0.0"
bluebird@^3.3.1, bluebird@^3.5.0:
bluebird@2.10.2:
version "2.10.2"
resolved "https://registry.yarnpkg.com/bluebird/-/bluebird-2.10.2.tgz#024a5517295308857f14f91f1106fc3b555f446b"
bluebird@^3.5.0:
version "3.5.0"
resolved "https://registry.yarnpkg.com/bluebird/-/bluebird-3.5.0.tgz#791420d7f551eea2897453a8a77653f96606d67c"
......@@ -354,7 +385,7 @@ browser-sync-ui@0.6.3:
stream-throttle "^0.1.3"
weinre "^2.0.0-pre-I0Z7U9OV"
browser-sync@^2.12.3:
browser-sync@^2.18.5:
version "2.18.8"
resolved "https://registry.yarnpkg.com/browser-sync/-/browser-sync-2.18.8.tgz#2fb4de253798d7cfb839afb9c2f801968490cec2"
dependencies:
......@@ -416,6 +447,10 @@ buffer-shims@^1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/buffer-shims/-/buffer-shims-1.0.0.tgz#9978ce317388c649ad8793028c3477ef044a8b51"
bufferview@~1:
version "1.0.1"
resolved "https://registry.yarnpkg.com/bufferview/-/bufferview-1.0.1.tgz#7afd74a45f937fa422a1d338c08bbfdc76cd725d"
builtin-modules@^1.0.0:
version "1.1.1"
resolved "https://registry.yarnpkg.com/builtin-modules/-/builtin-modules-1.1.1.tgz#270f076c5a72c02f5b65a47df94c5fe3a278892f"
......@@ -427,6 +462,13 @@ busboy@^0.2.12:
dicer "0.2.5"
readable-stream "1.1.x"
"bytebuffer@~4 >=4.1":
version "4.1.0"
resolved "https://registry.yarnpkg.com/bytebuffer/-/bytebuffer-4.1.0.tgz#4c58269e052ab1e4b1f7ff364fdfb3ce882906aa"
dependencies:
bufferview "~1"
long "~2 >=2.3.0"
bytes@2.4.0:
version "2.4.0"
resolved "https://registry.yarnpkg.com/bytes/-/bytes-2.4.0.tgz#7d97196f9d5baf7f6935e25985549edd2a6c2339"
......@@ -486,12 +528,6 @@ chokidar@1.6.1, chokidar@^1.4.3:
optionalDependencies:
fsevents "^1.0.0"
class-extend@^0.1.2:
version "0.1.2"
resolved "https://registry.yarnpkg.com/class-extend/-/class-extend-0.1.2.tgz#8057a82b00f53f82a5d62c50ef8cffdec6fabc34"
dependencies:
object-assign "^2.0.0"
cliui@^3.0.3, cliui@^3.2.0:
version "3.2.0"
resolved "https://registry.yarnpkg.com/cliui/-/cliui-3.2.0.tgz#120601537a916d29940f934da3b48d585a39213d"
......@@ -504,10 +540,6 @@ clone@^1.0.2:
version "1.0.2"
resolved "https://registry.yarnpkg.com/clone/-/clone-1.0.2.tgz#260b7a99ebb1edfe247538175f783243cb19d149"
clone@^2.1.0:
version "2.1.0"
resolved "https://registry.yarnpkg.com/clone/-/clone-2.1.0.tgz#9c715bfbd39aa197c8ee0f8e65c3912ba34f8cd6"
co-body@^4.2.0:
version "4.2.0"
resolved "https://registry.yarnpkg.com/co-body/-/co-body-4.2.0.tgz#74df20fa73262125dc45482af04e342ea8db3515"
......@@ -529,6 +561,10 @@ colors@^1.1.2:
version "1.1.2"
resolved "https://registry.yarnpkg.com/colors/-/colors-1.1.2.tgz#168a4701756b6a7f51a12ce0c97bfa28c084ed63"
colour@~0.7.1:
version "0.7.1"
resolved "https://registry.yarnpkg.com/colour/-/colour-0.7.1.tgz#9cb169917ec5d12c0736d3e8685746df1cadf778"
combined-stream@^1.0.5, combined-stream@~1.0.5:
version "1.0.5"
resolved "https://registry.yarnpkg.com/combined-stream/-/combined-stream-1.0.5.tgz#938370a57b4a51dea2c77c15d5c5fdf895164009"
......@@ -634,22 +670,14 @@ cookie@0.3.1:
version "0.3.1"
resolved "https://registry.yarnpkg.com/cookie/-/cookie-0.3.1.tgz#e7e0a1f9ef43b4c8ba925c5c5a96e806d16873bb"
cookies@~0.6.1:
version "0.6.2"
resolved "https://registry.yarnpkg.com/cookies/-/cookies-0.6.2.tgz#6ac1b052895208e8fc4c4f5f86a9ed31b9cb5ccf"
cookies@~0.7.0:
version "0.7.0"
resolved "https://registry.yarnpkg.com/cookies/-/cookies-0.7.0.tgz#0bc961d910c35254980fc7c9eff5da12011bbf00"
dependencies:
depd "~1.1.0"
keygrip "~1.0.1"
core-js@^1.0.0:
version "1.2.7"
resolved "https://registry.yarnpkg.com/core-js/-/core-js-1.2.7.tgz#652294c14651db28fa93bd2d5ff2983a4f08c636"
core-js@^2.4.1:
version "2.4.1"
resolved "https://registry.yarnpkg.com/core-js/-/core-js-2.4.1.tgz#4de911e667b0eae9124e34254b53aea6fc618d3e"
core-util-is@1.0.2, core-util-is@~1.0.0:
core-util-is@~1.0.0:
version "1.0.2"
resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.2.tgz#b5fd54220aa2bc5ab57aab7140c940754503c1a7"
......@@ -666,12 +694,12 @@ dashdash@^1.12.0:
assert-plus "^1.0.0"
date-fns@^1.23.0:
version "1.28.0"
resolved "https://registry.yarnpkg.com/date-fns/-/date-fns-1.28.0.tgz#3b12f54b66467807bb95e5930caf7bfb4170bc1a"
version "1.28.1"
resolved "https://registry.yarnpkg.com/date-fns/-/date-fns-1.28.1.tgz#9e2325c77b1cb7da3a9fd9822ba52c188a4ce91b"
debug@*, debug@^2.2.0:
version "2.6.1"
resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.1.tgz#79855090ba2c4e3115cc7d8769491d58f0491351"
debug@*, debug@^2.1.0, debug@^2.2.0:
version "2.6.3"
resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.3.tgz#0f7eb8c30965ec08c72accfa0130c8b79984141d"
dependencies:
ms "0.7.2"
......@@ -699,6 +727,12 @@ deep-extend@~0.4.0:
version "0.4.1"
resolved "https://registry.yarnpkg.com/deep-extend/-/deep-extend-0.4.1.tgz#efe4113d08085f4e6f9687759810f807469e2253"
defaults@^1.0.3:
version "1.0.3"
resolved "https://registry.yarnpkg.com/defaults/-/defaults-1.0.3.tgz#c656051e9817d9ff08ed881477f3fe4019f3ef7d"
dependencies:
clone "^1.0.2"
delayed-stream@~1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/delayed-stream/-/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619"
......@@ -730,6 +764,14 @@ diff@^2.2.1:
version "2.2.3"
resolved "https://registry.yarnpkg.com/diff/-/diff-2.2.3.tgz#60eafd0d28ee906e4e8ff0a52c1229521033bf99"
dot-env@^0.0.1:
version "0.0.1"
resolved "https://registry.yarnpkg.com/dot-env/-/dot-env-0.0.1.tgz#e4434cb8c69143e445bc28a729437e4fabd88c80"
dotenv@^4.0.0:
version "4.0.0"
resolved "https://registry.yarnpkg.com/dotenv/-/dotenv-4.0.0.tgz#864ef1379aced55ce6f95debecdce179f7a0cd1d"
duplexer@~0.1.1:
version "0.1.1"
resolved "https://registry.yarnpkg.com/duplexer/-/duplexer-0.1.1.tgz#ace6ff808c1ce66b57d1ebf97977acb02334cfc1"
......@@ -773,12 +815,6 @@ encodeurl@~1.0.1:
version "1.0.1"
resolved "https://registry.yarnpkg.com/encodeurl/-/encodeurl-1.0.1.tgz#79e3d58655346909fe6f0f45a5de68103b294d20"
encoding@^0.1.11:
version "0.1.12"
resolved "https://registry.yarnpkg.com/encoding/-/encoding-0.1.12.tgz#538b66f3ee62cd1ab51ec323829d1f9480c74beb"
dependencies:
iconv-lite "~0.4.13"
end-of-stream@1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/end-of-stream/-/end-of-stream-1.0.0.tgz#d4596e702734a93e40e9af864319eabd99ff2f0e"
......@@ -834,10 +870,14 @@ error-inject@~1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/error-inject/-/error-inject-1.0.0.tgz#e2b3d91b54aed672f309d950d154850fa11d4f37"
es6-promise@3.2.1, es6-promise@^3.0.2:
es6-promise@3.2.1:
version "3.2.1"
resolved "https://registry.yarnpkg.com/es6-promise/-/es6-promise-3.2.1.tgz#ec56233868032909207170c39448e24449dd1fc4"
es6-promise@^3.0.2:
version "3.3.1"
resolved "https://registry.yarnpkg.com/es6-promise/-/es6-promise-3.3.1.tgz#a08cdde84ccdbf34d027a1451bc91d4bcd28a613"
escape-html@~1.0.1, escape-html@~1.0.3:
version "1.0.3"
resolved "https://registry.yarnpkg.com/escape-html/-/escape-html-1.0.3.tgz#0258eae4d3d0c0974de1c169188ef0051d1d1988"
......@@ -905,22 +945,6 @@ extsprintf@1.0.2:
version "1.0.2"
resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.0.2.tgz#e1080e0658e300b06294990cc70e1502235fd550"
extsprintf@^1.2.0:
version "1.3.0"
resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.3.0.tgz#96918440e3041a7a414f8c52e3c574eb3c3e1e05"
fbjs@^0.8.4:
version "0.8.9"
resolved "https://registry.yarnpkg.com/fbjs/-/fbjs-0.8.9.tgz#180247fbd347dcc9004517b904f865400a0c8f14"
dependencies:
core-js "^1.0.0"
isomorphic-fetch "^2.1.1"
loose-envify "^1.0.0"
object-assign "^4.1.0"
promise "^7.1.1"
setimmediate "^1.0.5"
ua-parser-js "^0.7.9"
filename-regex@^2.0.0:
version "2.0.0"
resolved "https://registry.yarnpkg.com/filename-regex/-/filename-regex-2.0.0.tgz#996e3e80479b98b9897f15a8a58b3d084e926775"
......@@ -988,6 +1012,10 @@ fresh@0.3.0, fresh@^0.3.0:
version "0.3.0"
resolved "https://registry.yarnpkg.com/fresh/-/fresh-0.3.0.tgz#651f838e22424e7566de161d8358caa199f83d4f"
fresh@^0.5.0:
version "0.5.0"
resolved "https://registry.yarnpkg.com/fresh/-/fresh-0.5.0.tgz#f474ca5e6a9246d6fd8e0953cfa9b9c805afa78e"
from@~0:
version "0.1.7"
resolved "https://registry.yarnpkg.com/from/-/from-0.1.7.tgz#83c60afc58b9c56997007ed1a768b3ab303a44fe"
......@@ -1020,8 +1048,8 @@ fstream-ignore@~1.0.5:
minimatch "^3.0.0"
fstream@^1.0.0, fstream@^1.0.2, fstream@~1.0.10:
version "1.0.10"
resolved "https://registry.yarnpkg.com/fstream/-/fstream-1.0.10.tgz#604e8a92fe26ffd9f6fae30399d4984e1ab22822"
version "1.0.11"
resolved "https://registry.yarnpkg.com/fstream/-/fstream-1.0.11.tgz#5c1fb1f117477114f0632a0eb4b71b3cb0fd3171"
dependencies:
graceful-fs "^4.1.2"
inherits "~2.0.0"
......@@ -1055,10 +1083,6 @@ get-caller-file@^1.0.1:
version "1.0.2"
resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-1.0.2.tgz#f702e63127e7e231c160a80c1554acb70d5047e5"
get-value@^2.0.3:
version "2.0.6"
resolved "https://registry.yarnpkg.com/get-value/-/get-value-2.0.6.tgz#dc15ca1c672387ca76bd37ac0a395ba2042a2c28"
getpass@^0.1.1:
version "0.1.6"
resolved "https://registry.yarnpkg.com/getpass/-/getpass-0.1.6.tgz#283ffd9fc1256840875311c1b60e8c40187110e6"
......@@ -1078,24 +1102,24 @@ glob-parent@^2.0.0:
dependencies:
is-glob "^2.0.0"
glob@^7.0.3, glob@^7.0.5:
version "7.1.1"
resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.1.tgz#805211df04faaf1c63a3600306cdf5ade50b2ec8"
glob@^5.0.10, glob@~5.0.0:
version "5.0.15"
resolved "https://registry.yarnpkg.com/glob/-/glob-5.0.15.tgz#1bc936b9e02f4a603fcc222ecf7633d30b8b93b1"
dependencies:
fs.realpath "^1.0.0"
inflight "^1.0.4"
inherits "2"
minimatch "^3.0.2"
minimatch "2 || 3"
once "^1.3.0"
path-is-absolute "^1.0.0"
glob@~5.0.0:
version "5.0.15"
resolved "https://registry.yarnpkg.com/glob/-/glob-5.0.15.tgz#1bc936b9e02f4a603fcc222ecf7633d30b8b93b1"
glob@^7.0.3, glob@^7.0.5:
version "7.1.1"
resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.1.tgz#805211df04faaf1c63a3600306cdf5ade50b2ec8"
dependencies:
fs.realpath "^1.0.0"
inflight "^1.0.4"
inherits "2"
minimatch "2 || 3"
minimatch "^3.0.2"
once "^1.3.0"
path-is-absolute "^1.0.0"
......@@ -1122,10 +1146,6 @@ graceful-fs@^4.1.11, graceful-fs@^4.1.2, graceful-fs@^4.1.6, graceful-fs@^4.1.9:
version "1.0.1"
resolved "https://registry.yarnpkg.com/graceful-readlink/-/graceful-readlink-1.0.1.tgz#4cafad76bc62f02fa039b2f94e9a3dd3a391a725"
hammerjs@^2.0.8:
version "2.0.8"
resolved "https://registry.yarnpkg.com/hammerjs/-/hammerjs-2.0.8.tgz#04ef77862cff2bb79d30f7692095930222bf60f1"
har-schema@^1.0.5:
version "1.0.5"
resolved "https://registry.yarnpkg.com/har-schema/-/har-schema-1.0.5.tgz#d263135f43307c02c602afc8fe95970c0151369e"
......@@ -1139,7 +1159,7 @@ har-validator@~2.0.6:
is-my-json-valid "^2.12.4"
pinkie-promise "^2.0.0"
har-validator@~4.2.0:
har-validator@~4.2.1:
version "4.2.1"
resolved "https://registry.yarnpkg.com/har-validator/-/har-validator-4.2.1.tgz#33481d0f1bbff600dd203d75812a6a5fba002e2a"
dependencies:
......@@ -1195,9 +1215,13 @@ hoek@2.x.x:
version "2.16.3"
resolved "https://registry.yarnpkg.com/hoek/-/hoek-2.16.3.tgz#20bb7403d3cea398e91dc4710a8ff1b8274a25ed"
hooks-fixed@2.0.0:
version "2.0.0"
resolved "https://registry.yarnpkg.com/hooks-fixed/-/hooks-fixed-2.0.0.tgz#a01d894d52ac7f6599bbb1f63dfc9c411df70cba"
hosted-git-info@^2.1.4:
version "2.2.0"
resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-2.2.0.tgz#7a0d097863d886c0fabbdcd37bf1758d8becf8a5"
version "2.3.1"
resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-2.3.1.tgz#ac439421605f0beb0ea1349de7d8bb28e50be1dd"
http-assert@^1.1.0:
version "1.2.0"
......@@ -1245,7 +1269,7 @@ http-signature@~1.1.0:
jsprim "^1.2.2"
sshpk "^1.7.0"
iconv-lite@0.4.13, iconv-lite@~0.4.13:
iconv-lite@0.4.13:
version "0.4.13"
resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.13.tgz#1f88aba4ab0b1508e8312acc39345f36e992e2f2"
......@@ -1292,36 +1316,27 @@ ini@~1.3.0:
version "1.3.4"
resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.4.tgz#0537cb79daf59b59a1a517dff706c86ec039162e"
intl-format-cache@^2.0.5:
version "2.0.5"
resolved "https://registry.yarnpkg.com/intl-format-cache/-/intl-format-cache-2.0.5.tgz#b484cefcb9353f374f25de389a3ceea1af18d7c9"
intl-messageformat-parser@1.2.0:
version "1.2.0"
resolved "https://registry.yarnpkg.com/intl-messageformat-parser/-/intl-messageformat-parser-1.2.0.tgz#5906b7f953ab7470e0dc8549097b648b991892ff"
intl-messageformat@1.3.0, intl-messageformat@^1.3.0:
version "1.3.0"
resolved "https://registry.yarnpkg.com/intl-messageformat/-/intl-messageformat-1.3.0.tgz#f7d926aded7a3ab19b2dc601efd54e99a4bd4eae"
dependencies:
intl-messageformat-parser "1.2.0"
intl-relativeformat@^1.3.0:
version "1.3.0"
resolved "https://registry.yarnpkg.com/intl-relativeformat/-/intl-relativeformat-1.3.0.tgz#893dc7076fccd380cf091a2300c380fa57ace45b"
dependencies:
intl-messageformat "1.3.0"
invariant@^2.1.1:
version "2.2.2"
resolved "https://registry.yarnpkg.com/invariant/-/invariant-2.2.2.tgz#9e1f56ac0acdb6bf303306f338be3b204ae60360"
dependencies:
loose-envify "^1.0.0"
inversify@^3.3.0:
version "3.3.0"
resolved "https://registry.yarnpkg.com/inversify/-/inversify-3.3.0.tgz#57ca2e0aaac7b54aa5018ad69a10c5aba366e96e"
invert-kv@^1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/invert-kv/-/invert-kv-1.0.0.tgz#104a8e4aaca6d3d8cd157a8ef8bfab2d7a3ffdb6"
iridium@^7.1.6:
version "7.1.6"
resolved "https://registry.yarnpkg.com/iridium/-/iridium-7.1.6.tgz#9b3edf964925e544913ce3944cfb0edf602c3d47"
dependencies:
"@types/bluebird" "^3.5.2"
"@types/chai" "^3.4.35"
"@types/lodash" "^4.14.58"
"@types/mongodb" "^2.1.41"
bluebird "^3.5.0"
lodash "^4.17.4"
mongodb "^2.2.25"
skmatc "~1.2.2"
is-arrayish@^0.2.1:
version "0.2.1"
resolved "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.2.1.tgz#77c99840527aa8ecb1a8ba697b80645a7a926a9d"
......@@ -1333,8 +1348,8 @@ is-binary-path@^1.0.0:
binary-extensions "^1.0.0"
is-buffer@^1.0.2:
version "1.1.4"
resolved "https://registry.yarnpkg.com/is-buffer/-/is-buffer-1.1.4.tgz#cfc86ccd5dc5a52fa80489111c6920c457e2d98b"
version "1.1.5"
resolved "https://registry.yarnpkg.com/is-buffer/-/is-buffer-1.1.5.tgz#1f3b26ef613b214b88cbca23cc6c01d87961eecc"
is-builtin-module@^1.0.0:
version "1.0.0"
......@@ -1372,10 +1387,6 @@ is-fullwidth-code-point@^1.0.0:
dependencies:
number-is-nan "^1.0.0"
is-generator-fn@^1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/is-generator-fn/-/is-generator-fn-1.0.0.tgz#969d49e1bb3329f6bb7f09089be26578b2ddd46a"
is-generator-function@^1.0.3:
version "1.0.6"
resolved "https://registry.yarnpkg.com/is-generator-function/-/is-generator-function-1.0.6.tgz#9e71653cd15fff341c79c4151460a131d31e9fc4"
......@@ -1428,7 +1439,7 @@ is-redirect@^1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/is-redirect/-/is-redirect-1.0.0.tgz#1d03dded53bd8db0f30c26e4f95d36fc7c87dc24"
is-stream@^1.0.0, is-stream@^1.0.1:
is-stream@^1.0.0:
version "1.1.0"
resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-1.1.0.tgz#12d4a3dd4e68e0b79ceb8dbc84173ae80d91ca44"
......@@ -1444,10 +1455,6 @@ is-zip@^1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/is-zip/-/is-zip-1.0.0.tgz#47b0a8ff4d38a76431ccfd99a8e15a4c86ba2325"
is_js@^0.7.4:
version "0.7.6"
resolved "https://registry.yarnpkg.com/is_js/-/is_js-0.7.6.tgz#5d41aae0aeb5827a9b8ee15caac4a70a0581113a"
isarray@0.0.1:
version "0.0.1"
resolved "https://registry.yarnpkg.com/isarray/-/isarray-0.0.1.tgz#8a18acfca9a8f4177e09abfc6038939b05d1eedf"
......@@ -1456,23 +1463,12 @@ isarray@1.0.0, isarray@~1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11"
isobject@^1.0.0:
version "1.0.2"
resolved "https://registry.yarnpkg.com/isobject/-/isobject-1.0.2.tgz#f0f9b8ce92dd540fa0740882e3835a2e022ec78a"
isobject@^2.0.0:
version "2.1.0"
resolved "https://registry.yarnpkg.com/isobject/-/isobject-2.1.0.tgz#f065561096a3f1da2ef46272f815c840d87e0c89"
dependencies:
isarray "1.0.0"
isomorphic-fetch@^2.1.1:
version "2.2.1"
resolved "https://registry.yarnpkg.com/isomorphic-fetch/-/isomorphic-fetch-2.2.1.tgz#611ae1acf14f5e81f729507472819fe9733558a9"
dependencies:
node-fetch "^1.0.1"
whatwg-fetch ">=0.10.0"
isstream@~0.1.2:
version "0.1.2"
resolved "https://registry.yarnpkg.com/isstream/-/isstream-0.1.2.tgz#47e63f7af55afa6f92e1500e690eb8b8529c099a"
......@@ -1483,10 +1479,6 @@ jodid25519@^1.0.0:
dependencies:
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:
version "0.1.1"
resolved "https://registry.yarnpkg.com/jsbn/-/jsbn-0.1.1.tgz#a5e654c2e5a2deb5f201d96cefbca80c0ef2f513"
......@@ -1524,13 +1516,18 @@ jsonpointer@^4.0.0:
resolved "https://registry.yarnpkg.com/jsonpointer/-/jsonpointer-4.0.1.tgz#4fd92cb34e0e9db3c89c8622ecf51f9b978c6cb9"
jsprim@^1.2.2:
version "1.3.1"
resolved "https://registry.yarnpkg.com/jsprim/-/jsprim-1.3.1.tgz#2a7256f70412a29ee3670aaca625994c4dcff252"
version "1.4.0"
resolved "https://registry.yarnpkg.com/jsprim/-/jsprim-1.4.0.tgz#a3b87e40298d8c380552d8cc7628a0bb95a22918"
dependencies:
assert-plus "1.0.0"
extsprintf "1.0.2"
json-schema "0.2.3"
verror "1.3.6"
kareem@1.2.1:
version "1.2.1"
resolved "https://registry.yarnpkg.com/kareem/-/kareem-1.2.1.tgz#acdb8c8119845834abbfa58ade1cf9dea63dc752"
keygrip@~1.0.1:
version "1.0.1"
resolved "https://registry.yarnpkg.com/keygrip/-/keygrip-1.0.1.tgz#b02fa4816eef21a8c4b35ca9e52921ffc89a30e9"
......@@ -1587,20 +1584,20 @@ koa-router@^7.0.1:
path-to-regexp "^1.1.1"
koa@^2.0.0:
version "2.0.1"
resolved "https://registry.yarnpkg.com/koa/-/koa-2.0.1.tgz#c15a0da4d62554c058ae881e76992e3defe45bd8"
version "2.2.0"
resolved "https://registry.yarnpkg.com/koa/-/koa-2.2.0.tgz#b055933187849d540ad8b9f731baaa4be97c652d"
dependencies:
accepts "^1.2.2"
content-disposition "~0.5.0"
content-type "^1.0.0"
cookies "~0.6.1"
cookies "~0.7.0"
debug "*"
delegates "^1.0.0"
depd "^1.1.0"
destroy "^1.0.3"
error-inject "~1.0.0"
escape-html "~1.0.1"
fresh "^0.3.0"
fresh "^0.5.0"
http-assert "^1.1.0"
http-errors "^1.2.8"
is-generator-function "^1.0.3"
......@@ -1632,10 +1629,10 @@ limiter@^1.0.5:
resolved "https://registry.yarnpkg.com/limiter/-/limiter-1.1.0.tgz#6e2bd12ca3fcdaa11f224e2e53c896df3f08d913"
lite-server@^2.2.2:
version "2.2.2"
resolved "https://registry.yarnpkg.com/lite-server/-/lite-server-2.2.2.tgz#4644afe6c9146d850cfa0ad9a86a94f87156499e"
version "2.3.0"
resolved "https://registry.yarnpkg.com/lite-server/-/lite-server-2.3.0.tgz#5b4cc8f5d5fd4836105480ab2ac48a3a0de2b0c8"
dependencies:
browser-sync "^2.12.3"
browser-sync "^2.18.5"
connect-history-api-fallback "^1.2.0"
connect-logger "0.0.1"
lodash "^4.11.1"
......@@ -1706,6 +1703,14 @@ lodash.defaults@^3.1.2:
lodash.assign "^3.0.0"
lodash.restparam "^3.0.0"
lodash.foreach@^4.1.0:
version "4.5.0"
resolved "https://registry.yarnpkg.com/lodash.foreach/-/lodash.foreach-4.5.0.tgz#1a6a35eace401280c7f06dddec35165ab27e3e53"
lodash.get@^4.0.2:
version "4.4.2"
resolved "https://registry.yarnpkg.com/lodash.get/-/lodash.get-4.4.2.tgz#2d177f652fa31e939b4438d5341499dfa3825e99"
lodash.isarguments@^3.0.0:
version "3.1.0"
resolved "https://registry.yarnpkg.com/lodash.isarguments/-/lodash.isarguments-3.1.0.tgz#2f573d85c6a24289ff00663b491c1d338ff3458a"
......@@ -1730,15 +1735,11 @@ lodash.restparam@^3.0.0:
version "3.6.1"
resolved "https://registry.yarnpkg.com/lodash.restparam/-/lodash.restparam-3.6.1.tgz#936a4e309ef330a7645ed4145986c85ae5b20805"
lodash.result@^4.2.0:
version "4.5.2"
resolved "https://registry.yarnpkg.com/lodash.result/-/lodash.result-4.5.2.tgz#cb45b27fb914eaa8d8ee6f0ce7b2870b87cb70aa"
lodash@^3.10.1:
lodash@^3.10.1, lodash@^3.5.0:
version "3.10.1"
resolved "https://registry.yarnpkg.com/lodash/-/lodash-3.10.1.tgz#5bf45e8e49ba4189e17d482789dfd15bd140b7b6"
lodash@^4.11.1, lodash@^4.5.1:
lodash@^4.11.1, lodash@^4.14.0, lodash@^4.17.4, lodash@^4.5.1:
version "4.17.4"
resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.4.tgz#78203a4d1c328ae1d86dca6460e369b57f4055ae"
......@@ -1749,11 +1750,9 @@ log4js@^0.6.35:
readable-stream "~1.0.2"
semver "~4.3.3"
loose-envify@^1.0.0, loose-envify@^1.1.0:
version "1.3.1"
resolved "https://registry.yarnpkg.com/loose-envify/-/loose-envify-1.3.1.tgz#d1a8ad33fa9ce0e713d65fdd0ac8b748d478c848"
dependencies:
js-tokens "^3.0.0"
"long@~2 >=2.3.0":
version "2.4.0"
resolved "https://registry.yarnpkg.com/long/-/long-2.4.0.tgz#9fa180bb1d9500cdc29c4156766a1995e1f4524f"
lowercase-keys@^1.0.0:
version "1.0.0"
......@@ -1842,47 +1841,70 @@ mkdirp@0.3.0:
minimist "0.0.8"
moment@*:
version "2.17.1"
resolved "https://registry.yarnpkg.com/moment/-/moment-2.17.1.tgz#fed9506063f36b10f066c8b59a144d7faebe1d82"
version "2.18.0"
resolved "https://registry.yarnpkg.com/moment/-/moment-2.18.0.tgz#6cfec6a495eca915d02600a67020ed994937252c"
mongodb-core@2.1.8:
version "2.1.8"
resolved "https://registry.yarnpkg.com/mongodb-core/-/mongodb-core-2.1.8.tgz#b33e0370d0a59d97b6cb1ec610527be9e95ca2c0"
mongodb-core@2.1.9:
version "2.1.9"
resolved "https://registry.yarnpkg.com/mongodb-core/-/mongodb-core-2.1.9.tgz#85aa71ee4fb716196e06b787557bf139f801daf5"
dependencies:
bson "~1.0.4"
require_optional "~1.0.0"
mongodb-migrate@^2.0.1:
version "2.0.1"
resolved "https://registry.yarnpkg.com/mongodb-migrate/-/mongodb-migrate-2.0.1.tgz#68c43d026ed2faa95b3517ba38d6d1c9941d9e4a"
dependencies:
mongodb ">=1.3.19 <3.0"
verror "^1.6.0"
"mongodb@>=1.3.19 <3.0", mongodb@^2.0.48, mongodb@^2.2.16:
version "2.2.24"
resolved "https://registry.yarnpkg.com/mongodb/-/mongodb-2.2.24.tgz#80f40d6ec5bdec0ddecf0f9ce0144e794c46449a"
mongodb@2.2.25, mongodb@^2.2.25:
version "2.2.25"
resolved "https://registry.yarnpkg.com/mongodb/-/mongodb-2.2.25.tgz#d3b25dad00eda2bdfcbc996210ba082ac686a6b6"
dependencies:
es6-promise "3.2.1"
mongodb-core "2.1.8"
mongodb-core "2.1.9"
readable-stream "2.1.5"
mongorito@^2.2.0:
version "2.2.0"
resolved "https://registry.yarnpkg.com/mongorito/-/mongorito-2.2.0.tgz#5025c8febbd41f3b5c0903b7f52c16a9911b5df4"
mongoose-timestamp@^0.6.0:
version "0.6.0"
resolved "https://registry.yarnpkg.com/mongoose-timestamp/-/mongoose-timestamp-0.6.0.tgz#da54110ca8e6d4c2b9957a0366836c362ed272be"
dependencies:
bluebird "^3.3.1"
class-extend "^0.1.2"
clone "^1.0.2"
co "^4.6.0"
get-value "^2.0.3"
is-generator-fn "^1.0.0"
is_js "^0.7.4"
lodash.result "^4.2.0"
mongodb "^2.0.48"
object-assign "^4.0.1"
pluralize "^1.2.1"
set-value "^0.2.0"
defaults "^1.0.3"
mongoose-unique-validator@^1.0.4:
version "1.0.4"
resolved "https://registry.yarnpkg.com/mongoose-unique-validator/-/mongoose-unique-validator-1.0.4.tgz#dc1a7c80bfd5968cdfba75237056c4656b146cea"
dependencies:
lodash.foreach "^4.1.0"
lodash.get "^4.0.2"
mongoose@^4.9.4:
version "4.9.4"
resolved "https://registry.yarnpkg.com/mongoose/-/mongoose-4.9.4.tgz#212be4597e2db57b05286cc53ee894f30f3d8fad"
dependencies:
async "2.1.4"
bson "~1.0.4"
hooks-fixed "2.0.0"
kareem "1.2.1"
mongodb "2.2.25"
mpath "0.2.1"
mpromise "0.5.5"
mquery "2.3.0"
ms "0.7.2"
muri "1.2.1"
regexp-clone "0.0.1"
sliced "1.0.1"
mpath@0.2.1:
version "0.2.1"
resolved "https://registry.yarnpkg.com/mpath/-/mpath-0.2.1.tgz#3a4e829359801de96309c27a6b2e102e89f9e96e"
mpromise@0.5.5:
version "0.5.5"
resolved "https://registry.yarnpkg.com/mpromise/-/mpromise-0.5.5.tgz#f5b24259d763acc2257b0a0c8c6d866fd51732e6"
mquery@2.3.0:
version "2.3.0"
resolved "https://registry.yarnpkg.com/mquery/-/mquery-2.3.0.tgz#3d1717ad8958d0c99e42ea2461a109f3e5f3e458"
dependencies:
bluebird "2.10.2"
debug "2.2.0"
regexp-clone "0.0.1"
sliced "0.0.5"
ms@0.7.1:
version "0.7.1"
......@@ -1892,6 +1914,10 @@ ms@0.7.2:
version "0.7.2"
resolved "https://registry.yarnpkg.com/ms/-/ms-0.7.2.tgz#ae25cf2512b3885a1d95d7f037868d8431124765"
muri@1.2.1:
version "1.2.1"
resolved "https://registry.yarnpkg.com/muri/-/muri-1.2.1.tgz#ec7ea5ce6ca6a523eb1ab35bacda5fa816c9aa3c"
nan@^2.3.0:
version "2.5.1"
resolved "https://registry.yarnpkg.com/nan/-/nan-2.5.1.tgz#d5b01691253326a97a2bbee9e61c55d8d60351e2"
......@@ -1906,13 +1932,6 @@ nested-error-stacks@^1.0.0:
dependencies:
inherits "~2.0.1"
node-fetch@^1.0.1:
version "1.6.3"
resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-1.6.3.tgz#dc234edd6489982d58e8f0db4f695029abcd8c04"
dependencies:
encoding "^0.1.11"
is-stream "^1.0.1"
node-pre-gyp@^0.6.29:
version "0.6.33"
resolved "https://registry.yarnpkg.com/node-pre-gyp/-/node-pre-gyp-0.6.33.tgz#640ac55198f6a925972e0c16c4ac26a034d5ecc9"
......@@ -1931,6 +1950,12 @@ node-uuid@~1.4.7:
version "1.4.7"
resolved "https://registry.yarnpkg.com/node-uuid/-/node-uuid-1.4.7.tgz#6da5a17668c4b3dd59623bda11cf7fa4c1f60a6f"
node_memcached@1.1.3:
version "1.1.3"
resolved "https://registry.yarnpkg.com/node_memcached/-/node_memcached-1.1.3.tgz#89c152af88ad28817f00d891c990451d5d712ea8"
dependencies:
debug "^2.1.0"
nodemon@^1.11.0:
version "1.11.0"
resolved "https://registry.yarnpkg.com/nodemon/-/nodemon-1.11.0.tgz#226c562bd2a7b13d3d7518b49ad4828a3623d06c"
......@@ -1946,10 +1971,6 @@ nodemon@^1.11.0:
undefsafe "0.0.3"
update-notifier "0.5.0"
noncharacters@^1.1.0:
version "1.1.0"
resolved "https://registry.yarnpkg.com/noncharacters/-/noncharacters-1.1.0.tgz#af33df30fd50ed3c53cd202258f25ada90b540d2"
nopt@3.0.x, nopt@~3.0.6:
version "3.0.6"
resolved "https://registry.yarnpkg.com/nopt/-/nopt-3.0.6.tgz#c6465dbf08abcd4db359317f79ac68a646b28ff9"
......@@ -1963,8 +1984,8 @@ nopt@~1.0.10:
abbrev "1"
normalize-package-data@^2.3.2:
version "2.3.5"
resolved "https://registry.yarnpkg.com/normalize-package-data/-/normalize-package-data-2.3.5.tgz#8d924f142960e1777e7ffe170543631cc7cb02df"
version "2.3.6"
resolved "https://registry.yarnpkg.com/normalize-package-data/-/normalize-package-data-2.3.6.tgz#498fa420c96401f787402ba21e600def9f981fff"
dependencies:
hosted-git-info "^2.1.4"
is-builtin-module "^1.0.0"
......@@ -1996,10 +2017,6 @@ object-assign@4.1.0:
version "4.1.0"
resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.0.tgz#7a3b3d0e98063d43f4c03f2e8ae6cd51a86883a0"
object-assign@^2.0.0:
version "2.1.1"
resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-2.1.1.tgz#43c36e5d569ff8e4816c4efa8be02d26967c18aa"
object-assign@^3.0.0:
version "3.0.0"
resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-3.0.0.tgz#9bedd5ca0897949bca47e7ff408062d549f587f2"
......@@ -2067,6 +2084,10 @@ options@>=0.0.5:
version "0.0.6"
resolved "https://registry.yarnpkg.com/options/-/options-0.0.6.tgz#ec22d312806bb53e731773e7cdaefcf1c643128f"
optjs@~3.2.2:
version "3.2.2"
resolved "https://registry.yarnpkg.com/optjs/-/optjs-3.2.2.tgz#69a6ce89c442a44403141ad2f9b370bd5bb6f4ee"
os-homedir@^1.0.0, os-homedir@^1.0.1:
version "1.0.2"
resolved "https://registry.yarnpkg.com/os-homedir/-/os-homedir-1.0.2.tgz#ffbc4988336e0e833de0c168c7ef152121aa7fb3"
......@@ -2184,9 +2205,9 @@ pinkie@^2.0.0:
version "2.0.4"
resolved "https://registry.yarnpkg.com/pinkie/-/pinkie-2.0.4.tgz#72556b80cfa0d48a974e80e77248e80ed4f7f870"
pluralize@^1.2.1:
version "1.2.1"
resolved "https://registry.yarnpkg.com/pluralize/-/pluralize-1.2.1.tgz#d1a21483fd22bb41e58a12fa3421823140897c45"
pomelo-protobuf@^0.4.0:
version "0.4.0"
resolved "https://registry.yarnpkg.com/pomelo-protobuf/-/pomelo-protobuf-0.4.0.tgz#e45e9a0a446eb18667e0c6e13eeb53d47addbda8"
portscanner@2.1.1:
version "2.1.1"
......@@ -2207,11 +2228,14 @@ process-nextick-args@~1.0.6:
version "1.0.7"
resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-1.0.7.tgz#150e20b756590ad3f91093f25a4f2ad8bff30ba3"
promise@^7.1.1:
version "7.1.1"
resolved "https://registry.yarnpkg.com/promise/-/promise-7.1.1.tgz#489654c692616b8aa55b0724fa809bb7db49c5bf"
protobufjs@^4.1.2:
version "4.1.3"
resolved "https://registry.yarnpkg.com/protobufjs/-/protobufjs-4.1.3.tgz#8e36d1b0226cbb68d647e4b44c2a144f37f2779e"
dependencies:
asap "~2.0.3"
ascli "~1"
bytebuffer "~4 >=4.1"
glob "^5.0.10"
yargs "^3.10.0"
ps-tree@^1.0.1:
version "1.1.0"
......@@ -2231,17 +2255,17 @@ qs@6.2.1:
version "6.2.1"
resolved "https://registry.yarnpkg.com/qs/-/qs-6.2.1.tgz#ce03c5ff0935bc1d9d69a9f14cbd18e568d67625"
"qs@>= 0.4.0", qs@~6.3.0:
version "6.3.1"
resolved "https://registry.yarnpkg.com/qs/-/qs-6.3.1.tgz#918c0b3bcd36679772baf135b1acb4c1651ed79d"
"qs@>= 0.4.0", qs@~6.4.0:
version "6.4.0"
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"
random@^1.0.0-beta-1:
version "1.0.0-beta-1"
resolved "https://registry.yarnpkg.com/random/-/random-1.0.0beta-1.tgz#8907ce93a25889afc42e31f3dc0b8083eb816410"
qs@~6.3.0:
version "6.3.2"
resolved "https://registry.yarnpkg.com/qs/-/qs-6.3.2.tgz#e75bd5f6e268122a2a0e0bda630b2550c166502c"
randomatic@^1.1.3:
version "1.1.6"
......@@ -2271,23 +2295,6 @@ rc@^1.0.1, rc@~1.1.6:
minimist "^1.2.0"
strip-json-comments "~2.0.1"
react-intl@^2.2.3:
version "2.2.3"
resolved "https://registry.yarnpkg.com/react-intl/-/react-intl-2.2.3.tgz#8eebb03cddc38b337ed22fab78037ab53a594270"
dependencies:
intl-format-cache "^2.0.5"
intl-messageformat "^1.3.0"
intl-relativeformat "^1.3.0"
invariant "^2.1.1"
react@^15.4.2:
version "15.4.2"
resolved "https://registry.yarnpkg.com/react/-/react-15.4.2.tgz#41f7991b26185392ba9bae96c8889e7e018397ef"
dependencies:
fbjs "^0.8.4"
loose-envify "^1.1.0"
object-assign "^4.1.0"
read-all-stream@^3.0.0:
version "3.1.0"
resolved "https://registry.yarnpkg.com/read-all-stream/-/read-all-stream-3.1.0.tgz#35c3e177f2078ef789ee4bfafa4373074eaef4fa"
......@@ -2349,10 +2356,6 @@ readdirp@^2.0.0:
readable-stream "^2.0.2"
set-immediate-shim "^1.0.1"
reflect-metadata@^0.1.9:
version "0.1.10"
resolved "https://registry.yarnpkg.com/reflect-metadata/-/reflect-metadata-0.1.10.tgz#b4f83704416acad89988c9b15635d47e03b9344a"
regex-cache@^0.4.2:
version "0.4.3"
resolved "https://registry.yarnpkg.com/regex-cache/-/regex-cache-0.4.3.tgz#9b1a6c35d4d0dfcef5711ae651e8e9d3d7114145"
......@@ -2360,6 +2363,10 @@ regex-cache@^0.4.2:
is-equal-shallow "^0.1.3"
is-primitive "^2.0.0"
regexp-clone@0.0.1:
version "0.0.1"
resolved "https://registry.yarnpkg.com/regexp-clone/-/regexp-clone-0.0.1.tgz#a7c2e09891fdbf38fbb10d376fb73003e68ac589"
registry-url@^3.0.0:
version "3.1.0"
resolved "https://registry.yarnpkg.com/registry-url/-/registry-url-3.1.0.tgz#3d4ef870f73dde1d77f0cf9a381432444e174942"
......@@ -2406,8 +2413,8 @@ request@2.78.0:
tunnel-agent "~0.4.1"
request@^2.79.0:
version "2.80.0"
resolved "https://registry.yarnpkg.com/request/-/request-2.80.0.tgz#8cc162d76d79381cdefdd3505d76b80b60589bd0"
version "2.81.0"
resolved "https://registry.yarnpkg.com/request/-/request-2.81.0.tgz#c6928946a0e06c5f8d6f8a9333469ffda46298a0"
dependencies:
aws-sign2 "~0.6.0"
aws4 "^1.2.1"
......@@ -2416,7 +2423,7 @@ request@^2.79.0:
extend "~3.0.0"
forever-agent "~0.6.1"
form-data "~2.1.1"
har-validator "~4.2.0"
har-validator "~4.2.1"
hawk "~3.1.3"
http-signature "~1.1.0"
is-typedarray "~1.0.0"
......@@ -2425,10 +2432,11 @@ request@^2.79.0:
mime-types "~2.1.7"
oauth-sign "~0.8.1"
performance-now "^0.2.0"
qs "~6.3.0"
qs "~6.4.0"
safe-buffer "^5.0.1"
stringstream "~0.0.4"
tough-cookie "~2.3.0"
tunnel-agent "~0.4.1"
tunnel-agent "^0.6.0"
uuid "^3.0.0"
require-directory@^2.1.1:
......@@ -2481,6 +2489,14 @@ rx@4.1.0:
version "4.1.0"
resolved "https://registry.yarnpkg.com/rx/-/rx-4.1.0.tgz#a5f13ff79ef3b740fe30aa803fb09f98805d4782"
safe-buffer@^5.0.1:
version "5.0.1"
resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.0.1.tgz#d263ca54696cd8a306b5ca6551e92de57918fbe7"
sax@0.6.x:
version "0.6.1"
resolved "https://registry.yarnpkg.com/sax/-/sax-0.6.1.tgz#563b19c7c1de892e09bfc4f2fc30e3c27f0952b9"
semver-diff@^2.0.0:
version "2.1.0"
resolved "https://registry.yarnpkg.com/semver-diff/-/semver-diff-2.1.0.tgz#4bbb8437c8d37e4b0cf1a68fd726ec6d645d6d36"
......@@ -2546,17 +2562,6 @@ set-immediate-shim@^1.0.1:
version "1.0.1"
resolved "https://registry.yarnpkg.com/set-immediate-shim/-/set-immediate-shim-1.0.1.tgz#4b2b1b27eb808a9f8dcc481a58e5e56f599f3f61"
set-value@^0.2.0:
version "0.2.0"
resolved "https://registry.yarnpkg.com/set-value/-/set-value-0.2.0.tgz#73b0a6825c158c6a16a82bbdc95775bf2a825fab"
dependencies:
isobject "^1.0.0"
noncharacters "^1.1.0"
setimmediate@^1.0.5:
version "1.0.5"
resolved "https://registry.yarnpkg.com/setimmediate/-/setimmediate-1.0.5.tgz#290cbb232e306942d7d7ea9b83732ab7856f8285"
setprototypeof@1.0.2:
version "1.0.2"
resolved "https://registry.yarnpkg.com/setprototypeof/-/setprototypeof-1.0.2.tgz#81a552141ec104b88e89ce383103ad5c66564d08"
......@@ -2569,6 +2574,20 @@ signal-exit@^3.0.0:
version "3.0.2"
resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.2.tgz#b5fdc08f1287ea1178628e415e25132b73646c6d"
skmatc@~1.2.2:
version "1.2.2"
resolved "https://registry.yarnpkg.com/skmatc/-/skmatc-1.2.2.tgz#dcea0cd0d57a18c7d45743d0d049a5a999dfda89"
dependencies:
lodash "^4.5.1"
sliced@0.0.5:
version "0.0.5"
resolved "https://registry.yarnpkg.com/sliced/-/sliced-0.0.5.tgz#5edc044ca4eb6f7816d50ba2fc63e25d8fe4707f"
sliced@1.0.1:
version "1.0.1"
resolved "https://registry.yarnpkg.com/sliced/-/sliced-1.0.1.tgz#0b3a662b5d04c3177b1926bea82b03f837a2ef41"
slide@^1.1.5:
version "1.1.6"
resolved "https://registry.yarnpkg.com/slide/-/slide-1.1.6.tgz#56eb027d65b4d2dce6cb2e2d32c4d4afc9e1d707"
......@@ -2823,6 +2842,12 @@ tslint@^3.15.1:
resolve "^1.1.7"
underscore.string "^3.3.4"
tunnel-agent@^0.6.0:
version "0.6.0"
resolved "https://registry.yarnpkg.com/tunnel-agent/-/tunnel-agent-0.6.0.tgz#27a5dea06b36b04a0a9966774b290868f0fc40fd"
dependencies:
safe-buffer "^5.0.1"
tunnel-agent@~0.4.1:
version "0.4.3"
resolved "https://registry.yarnpkg.com/tunnel-agent/-/tunnel-agent-0.4.3.tgz#6373db76909fe570e08d73583365ed828a74eeeb"
......@@ -2838,15 +2863,11 @@ type-is@^1.5.5, type-is@~1.6.6:
media-typer "0.3.0"
mime-types "~2.1.13"
typed-promisify@^0.4.0:
version "0.4.0"
resolved "https://registry.yarnpkg.com/typed-promisify/-/typed-promisify-0.4.0.tgz#ade1d3d32130767ba4ef5385162c720698105d0f"
typescript@^2.1.4:
version "2.2.1"
resolved "https://registry.yarnpkg.com/typescript/-/typescript-2.2.1.tgz#4862b662b988a4c8ff691cc7969622d24db76ae9"
ua-parser-js@0.7.12, ua-parser-js@^0.7.9:
ua-parser-js@0.7.12:
version "0.7.12"
resolved "https://registry.yarnpkg.com/ua-parser-js/-/ua-parser-js-0.7.12.tgz#04c81a99bdd5dc52263ea29d24c6bf8d4818a4bb"
......@@ -2922,14 +2943,6 @@ verror@1.3.6:
dependencies:
extsprintf "1.0.2"
verror@^1.6.0:
version "1.9.0"
resolved "https://registry.yarnpkg.com/verror/-/verror-1.9.0.tgz#107a8a2d14c33586fc4bb830057cd2d19ae2a6ee"
dependencies:
assert-plus "^1.0.0"
core-util-is "1.0.2"
extsprintf "^1.2.0"
vlq@^0.2.1:
version "0.2.1"
resolved "https://registry.yarnpkg.com/vlq/-/vlq-0.2.1.tgz#14439d711891e682535467f8587c5630e4222a6c"
......@@ -2942,10 +2955,6 @@ weinre@^2.0.0-pre-I0Z7U9OV:
nopt "3.0.x"
underscore "1.7.x"
whatwg-fetch@>=0.10.0:
version "2.0.3"
resolved "https://registry.yarnpkg.com/whatwg-fetch/-/whatwg-fetch-2.0.3.tgz#9c84ec2dcf68187ff00bc64e1274b442176e1c84"
which-module@^1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/which-module/-/which-module-1.0.0.tgz#bba63ca861948994ff307736089e3b96026c2a4f"
......@@ -3004,6 +3013,19 @@ xdg-basedir@^2.0.0:
dependencies:
os-homedir "^1.0.0"
xml2js@0.4.4:
version "0.4.4"
resolved "https://registry.yarnpkg.com/xml2js/-/xml2js-0.4.4.tgz#3111010003008ae19240eba17497b57c729c555d"
dependencies:
sax "0.6.x"
xmlbuilder ">=1.0.0"
xmlbuilder@>=1.0.0, xmlbuilder@^2.4.5:
version "2.6.5"
resolved "https://registry.yarnpkg.com/xmlbuilder/-/xmlbuilder-2.6.5.tgz#6ff7ad60fb72d22764f007a164b77f2bf1400526"
dependencies:
lodash "^3.5.0"
xmlhttprequest-ssl@1.5.3:
version "1.5.3"
resolved "https://registry.yarnpkg.com/xmlhttprequest-ssl/-/xmlhttprequest-ssl-1.5.3.tgz#185a888c04eca46c3e4070d99f7b49de3528992d"
......@@ -3022,7 +3044,7 @@ yargs-parser@^4.1.0:
dependencies:
camelcase "^3.0.0"
yargs@3.29.0:
yargs@3.29.0, yargs@^3.10.0:
version "3.29.0"
resolved "https://registry.yarnpkg.com/yargs/-/yargs-3.29.0.tgz#1aab9660eae79d8b8f675bcaeeab6ee34c2cf69c"
dependencies:
......@@ -3055,7 +3077,3 @@ yargs@6.4.0:
yeast@0.1.2:
version "0.1.2"
resolved "https://registry.yarnpkg.com/yeast/-/yeast-0.1.2.tgz#008e06d8094320c372dbc2f8ed76a0ca6c8ac419"
zone.js@^0.7.4:
version "0.7.7"
resolved "https://registry.yarnpkg.com/zone.js/-/zone.js-0.7.7.tgz#0d7b7ae7f68012d03438b8a18f5763441bbf9620"
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