Commit ec0e667b authored by 神楽坂玲奈's avatar 神楽坂玲奈

init

parent 205b8fd2
FROM node
RUN apt-get update
RUN apt-get install aria2 -y
RUN apt-get install curl -y
RUN curl --location --retry 5 --output ossutil 'https://github.com/mycard/ossutil/releases/download/1.0.0.Beta2/ossutil'
RUN chmod +x ossutil && mv ossutil /usr/local/bin/ossutil
RUN mkdir -p /usr/src/app
WORKDIR /usr/src/app
COPY package.json /usr/src/app
RUN npm install
COPY . /usr/src/app
EXPOSE 8080
ENTRYPOINT "./entrypoint.sh"
#允许rpc
enable-rpc=true
#允许非外部访问
rpc-listen-all=true
#RPC端口, 仅当默认端口被占用时修改
rpc-listen-port=6800
#最大同时下载数(任务数), 路由建议值: 3
max-concurrent-downloads=10
#断点续传
continue=true
#同服务器连接数
max-connection-per-server=10
#最小文件分片大小, 下载线程数上限取决于能分出多少片, 对于小文件重要
min-split-size=10M
#单文件最大线程数, 路由建议值: 5
split=10
#下载速度限制
max-overall-download-limit=0
#单文件速度限制
max-download-limit=0
#上传速度限制
max-overall-upload-limit=0
#单文件速度限制
max-upload-limit=0
#!/usr/bin/env node
const {bundle} = require('../package/main')
bundle(process.argv[2], process.argv[3])
import * as path from 'path';
let baseUrl = 'http://127.0.01:8001'
let testUrl = 'http://114.215.243.95:8001'
export default {
upload_path: path.join(__dirname, './test/upload'),
download_path: path.join(__dirname, './test/release/downloads'),
new_apps_json: `${baseUrl}/v2/apps`,
upload_url: `${testUrl}/v1/upload/packageUrl`,
old_apps_json: 'https://api.moecube.com/apps.json',
new_package: `${baseUrl}/v1/package/`,
new_app: (appId) => `${baseUrl}/v1/app/${appId}`,
old_metalinks: (package_id) => `https://cdn01.moecube.com/release/metalinks/${package_id}.meta4`,
new_metalinks: (package_id) => `${baseUrl}/v2/package-legacy/${package_id}/meta`,
old_checksums: (package_id) => `https://cdn01.moecube.com/release/checksums/${package_id}`,
new_checksums: (package_id) => `${baseUrl}/v2/package-legacy/${package_id}/checksum`,
};
# This file is used by the build system to adjust CSS and JS output to support the specified browsers below.
# For additional information regarding the format and rule options, please see:
# https://github.com/browserslist/browserslist#queries
# For the full list of supported browsers by the Angular framework, please see:
# https://angular.io/guide/browser-support
# You can see what browsers were selected by your queries by running:
# npx browserslist
last 1 Chrome version
last 1 Firefox version
last 2 Edge major versions
last 2 Safari major versions
last 2 iOS major versions
Firefox ESR
not IE 11 # Angular supports IE 11 only as an opt-in. To opt-in, remove the 'not' prefix on this line.
# Editor configuration, see https://editorconfig.org
root = true
[*]
charset = utf-8
indent_style = space
indent_size = 2
insert_final_newline = true
trim_trailing_whitespace = true
[*.ts]
quote_type = single
[*.md]
max_line_length = off
trim_trailing_whitespace = false
# See http://help.github.com/ignore-files/ for more about ignoring files.
# compiled output
/dist
/tmp
/out-tsc
# Only exists if Bazel was run
/bazel-out
# dependencies
/node_modules
# profiling files
chrome-profiler-events*.json
# IDEs and editors
/.idea
.project
.classpath
.c9/
*.launch
.settings/
*.sublime-workspace
# IDE - VSCode
.vscode/*
!.vscode/settings.json
!.vscode/tasks.json
!.vscode/launch.json
!.vscode/extensions.json
.history/*
# misc
/.sass-cache
/connect.lock
/coverage
/libpeerconnection.log
npm-debug.log
yarn-error.log
testem.log
/typings
# System Files
.DS_Store
Thumbs.db
# ConsoleWeb
This project was generated with [Angular CLI](https://github.com/angular/angular-cli) version 12.2.1.
## Development server
Run `ng serve` for a dev server. Navigate to `http://localhost:4200/`. The app will automatically reload if you change any of the source files.
## Code scaffolding
Run `ng generate component component-name` to generate a new component. You can also use `ng generate directive|pipe|service|class|guard|interface|enum|module`.
## Build
Run `ng build` to build the project. The build artifacts will be stored in the `dist/` directory.
## Running unit tests
Run `ng test` to execute the unit tests via [Karma](https://karma-runner.github.io).
## Running end-to-end tests
Run `ng e2e` to execute the end-to-end tests via a platform of your choice. To use this command, you need to first add a package that implements end-to-end testing capabilities.
## Further help
To get more help on the Angular CLI use `ng help` or go check out the [Angular CLI Overview and Command Reference](https://angular.io/cli) page.
{
"$schema": "./node_modules/@angular/cli/lib/config/schema.json",
"version": 1,
"newProjectRoot": "projects",
"projects": {
"console-web": {
"projectType": "application",
"schematics": {
"@schematics/angular:class": {
"skipTests": true
},
"@schematics/angular:component": {
"skipTests": true
},
"@schematics/angular:directive": {
"skipTests": true
},
"@schematics/angular:guard": {
"skipTests": true
},
"@schematics/angular:interceptor": {
"skipTests": true
},
"@schematics/angular:pipe": {
"skipTests": true
},
"@schematics/angular:service": {
"skipTests": true
},
"@schematics/angular:application": {
"strict": true
}
},
"root": "",
"sourceRoot": "src",
"prefix": "app",
"architect": {
"build": {
"builder": "@angular-devkit/build-angular:browser",
"options": {
"outputPath": "dist/console-web",
"index": "src/index.html",
"main": "src/main.ts",
"polyfills": "src/polyfills.ts",
"tsConfig": "tsconfig.app.json",
"assets": [
"src/favicon.ico",
"src/assets"
],
"styles": [
"src/styles.css"
],
"scripts": []
},
"configurations": {
"production": {
"budgets": [
{
"type": "initial",
"maximumWarning": "500kb",
"maximumError": "1mb"
},
{
"type": "anyComponentStyle",
"maximumWarning": "2kb",
"maximumError": "4kb"
}
],
"fileReplacements": [
{
"replace": "src/environments/environment.ts",
"with": "src/environments/environment.prod.ts"
}
],
"outputHashing": "all"
},
"development": {
"buildOptimizer": false,
"optimization": false,
"vendorChunk": true,
"extractLicenses": false,
"sourceMap": true,
"namedChunks": true
}
},
"defaultConfiguration": "production"
},
"serve": {
"builder": "@angular-devkit/build-angular:dev-server",
"configurations": {
"production": {
"browserTarget": "console-web:build:production"
},
"development": {
"browserTarget": "console-web:build:development"
}
},
"defaultConfiguration": "development"
},
"extract-i18n": {
"builder": "@angular-devkit/build-angular:extract-i18n",
"options": {
"browserTarget": "console-web:build"
}
}
}
}
},
"defaultProject": "console-web"
}
This source diff could not be displayed because it is too large. You can view the blob instead.
{
"name": "console-web",
"version": "0.0.0",
"scripts": {
"ng": "ng",
"start": "ng serve",
"build": "ng build",
"watch": "ng build --watch --configuration development"
},
"private": true,
"dependencies": {
"@angular/animations": "~12.2.0",
"@angular/common": "~12.2.0",
"@angular/compiler": "~12.2.0",
"@angular/core": "~12.2.0",
"@angular/forms": "~12.2.0",
"@angular/platform-browser": "~12.2.0",
"@angular/platform-browser-dynamic": "~12.2.0",
"@angular/router": "~12.2.0",
"rxjs": "~6.6.0",
"tslib": "^2.3.0",
"zone.js": "~0.11.4"
},
"devDependencies": {
"@angular-devkit/build-angular": "~12.2.1",
"@angular/cli": "~12.2.1",
"@angular/compiler-cli": "~12.2.0",
"@types/node": "^12.11.1",
"typescript": "~4.3.5"
}
}
import { NgModule } from '@angular/core';
import { RouterModule, Routes } from '@angular/router';
const routes: Routes = [];
@NgModule({
imports: [RouterModule.forRoot(routes)],
exports: [RouterModule]
})
export class AppRoutingModule { }
<!-- * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * -->
<!-- * * * * * * * * * * * The content below * * * * * * * * * * * -->
<!-- * * * * * * * * * * is only a placeholder * * * * * * * * * * -->
<!-- * * * * * * * * * * and can be replaced. * * * * * * * * * * * -->
<!-- * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * -->
<!-- * * * * * * * * * Delete the template below * * * * * * * * * * -->
<!-- * * * * * * * to get started with your project! * * * * * * * * -->
<!-- * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * -->
<style>
:host {
font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Helvetica, Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol";
font-size: 14px;
color: #333;
box-sizing: border-box;
-webkit-font-smoothing: antialiased;
-moz-osx-font-smoothing: grayscale;
}
h1,
h2,
h3,
h4,
h5,
h6 {
margin: 8px 0;
}
p {
margin: 0;
}
.spacer {
flex: 1;
}
.toolbar {
position: absolute;
top: 0;
left: 0;
right: 0;
height: 60px;
display: flex;
align-items: center;
background-color: #1976d2;
color: white;
font-weight: 600;
}
.toolbar img {
margin: 0 16px;
}
.toolbar #twitter-logo {
height: 40px;
margin: 0 8px;
}
.toolbar #youtube-logo {
height: 40px;
margin: 0 16px;
}
.toolbar #twitter-logo:hover,
.toolbar #youtube-logo:hover {
opacity: 0.8;
}
.content {
display: flex;
margin: 82px auto 32px;
padding: 0 16px;
max-width: 960px;
flex-direction: column;
align-items: center;
}
svg.material-icons {
height: 24px;
width: auto;
}
svg.material-icons:not(:last-child) {
margin-right: 8px;
}
.card svg.material-icons path {
fill: #888;
}
.card-container {
display: flex;
flex-wrap: wrap;
justify-content: center;
margin-top: 16px;
}
.card {
all: unset;
border-radius: 4px;
border: 1px solid #eee;
background-color: #fafafa;
height: 40px;
width: 200px;
margin: 0 8px 16px;
padding: 16px;
display: flex;
flex-direction: row;
justify-content: center;
align-items: center;
transition: all 0.2s ease-in-out;
line-height: 24px;
}
.card-container .card:not(:last-child) {
margin-right: 0;
}
.card.card-small {
height: 16px;
width: 168px;
}
.card-container .card:not(.highlight-card) {
cursor: pointer;
}
.card-container .card:not(.highlight-card):hover {
transform: translateY(-3px);
box-shadow: 0 4px 17px rgba(0, 0, 0, 0.35);
}
.card-container .card:not(.highlight-card):hover .material-icons path {
fill: rgb(105, 103, 103);
}
.card.highlight-card {
background-color: #1976d2;
color: white;
font-weight: 600;
border: none;
width: auto;
min-width: 30%;
position: relative;
}
.card.card.highlight-card span {
margin-left: 60px;
}
svg#rocket {
width: 80px;
position: absolute;
left: -10px;
top: -24px;
}
svg#rocket-smoke {
height: calc(100vh - 95px);
position: absolute;
top: 10px;
right: 180px;
z-index: -10;
}
a,
a:visited,
a:hover {
color: #1976d2;
text-decoration: none;
}
a:hover {
color: #125699;
}
.terminal {
position: relative;
width: 80%;
max-width: 600px;
border-radius: 6px;
padding-top: 45px;
margin-top: 8px;
overflow: hidden;
background-color: rgb(15, 15, 16);
}
.terminal::before {
content: "\2022 \2022 \2022";
position: absolute;
top: 0;
left: 0;
height: 4px;
background: rgb(58, 58, 58);
color: #c2c3c4;
width: 100%;
font-size: 2rem;
line-height: 0;
padding: 14px 0;
text-indent: 4px;
}
.terminal pre {
font-family: SFMono-Regular,Consolas,Liberation Mono,Menlo,monospace;
color: white;
padding: 0 1rem 1rem;
margin: 0;
}
.circle-link {
height: 40px;
width: 40px;
border-radius: 40px;
margin: 8px;
background-color: white;
border: 1px solid #eeeeee;
display: flex;
justify-content: center;
align-items: center;
cursor: pointer;
box-shadow: 0 1px 3px rgba(0, 0, 0, 0.12), 0 1px 2px rgba(0, 0, 0, 0.24);
transition: 1s ease-out;
}
.circle-link:hover {
transform: translateY(-0.25rem);
box-shadow: 0px 3px 15px rgba(0, 0, 0, 0.2);
}
footer {
margin-top: 8px;
display: flex;
align-items: center;
line-height: 20px;
}
footer a {
display: flex;
align-items: center;
}
.github-star-badge {
color: #24292e;
display: flex;
align-items: center;
font-size: 12px;
padding: 3px 10px;
border: 1px solid rgba(27,31,35,.2);
border-radius: 3px;
background-image: linear-gradient(-180deg,#fafbfc,#eff3f6 90%);
margin-left: 4px;
font-weight: 600;
}
.github-star-badge:hover {
background-image: linear-gradient(-180deg,#f0f3f6,#e6ebf1 90%);
border-color: rgba(27,31,35,.35);
background-position: -.5em;
}
.github-star-badge .material-icons {
height: 16px;
width: 16px;
margin-right: 4px;
}
svg#clouds {
position: fixed;
bottom: -160px;
left: -230px;
z-index: -10;
width: 1920px;
}
/* Responsive Styles */
@media screen and (max-width: 767px) {
.card-container > *:not(.circle-link) ,
.terminal {
width: 100%;
}
.card:not(.highlight-card) {
height: 16px;
margin: 8px 0;
}
.card.highlight-card span {
margin-left: 72px;
}
svg#rocket-smoke {
right: 120px;
transform: rotate(-5deg);
}
}
@media screen and (max-width: 575px) {
svg#rocket-smoke {
display: none;
visibility: hidden;
}
}
</style>
<!-- Toolbar -->
<div class="toolbar" role="banner">
<img
width="40"
alt="Angular Logo"
src="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyNTAgMjUwIj4KICAgIDxwYXRoIGZpbGw9IiNERDAwMzEiIGQ9Ik0xMjUgMzBMMzEuOSA2My4ybDE0LjIgMTIzLjFMMTI1IDIzMGw3OC45LTQzLjcgMTQuMi0xMjMuMXoiIC8+CiAgICA8cGF0aCBmaWxsPSIjQzMwMDJGIiBkPSJNMTI1IDMwdjIyLjItLjFWMjMwbDc4LjktNDMuNyAxNC4yLTEyMy4xTDEyNSAzMHoiIC8+CiAgICA8cGF0aCAgZmlsbD0iI0ZGRkZGRiIgZD0iTTEyNSA1Mi4xTDY2LjggMTgyLjZoMjEuN2wxMS43LTI5LjJoNDkuNGwxMS43IDI5LjJIMTgzTDEyNSA1Mi4xem0xNyA4My4zaC0zNGwxNy00MC45IDE3IDQwLjl6IiAvPgogIDwvc3ZnPg=="
/>
<span>Welcome</span>
<div class="spacer"></div>
<a aria-label="Angular on twitter" target="_blank" rel="noopener" href="https://twitter.com/angular" title="Twitter">
<svg id="twitter-logo" height="24" data-name="Logo" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 400 400">
<rect width="400" height="400" fill="none"/>
<path d="M153.62,301.59c94.34,0,145.94-78.16,145.94-145.94,0-2.22,0-4.43-.15-6.63A104.36,104.36,0,0,0,325,122.47a102.38,102.38,0,0,1-29.46,8.07,51.47,51.47,0,0,0,22.55-28.37,102.79,102.79,0,0,1-32.57,12.45,51.34,51.34,0,0,0-87.41,46.78A145.62,145.62,0,0,1,92.4,107.81a51.33,51.33,0,0,0,15.88,68.47A50.91,50.91,0,0,1,85,169.86c0,.21,0,.43,0,.65a51.31,51.31,0,0,0,41.15,50.28,51.21,51.21,0,0,1-23.16.88,51.35,51.35,0,0,0,47.92,35.62,102.92,102.92,0,0,1-63.7,22A104.41,104.41,0,0,1,75,278.55a145.21,145.21,0,0,0,78.62,23" fill="#fff"/>
</svg>
</a>
<a aria-label="Angular on YouTube" target="_blank" rel="noopener" href="https://youtube.com/angular" title="YouTube">
<svg id="youtube-logo" height="24" width="24" data-name="Logo" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="#fff">
<path d="M0 0h24v24H0V0z" fill="none"/>
<path d="M21.58 7.19c-.23-.86-.91-1.54-1.77-1.77C18.25 5 12 5 12 5s-6.25 0-7.81.42c-.86.23-1.54.91-1.77 1.77C2 8.75 2 12 2 12s0 3.25.42 4.81c.23.86.91 1.54 1.77 1.77C5.75 19 12 19 12 19s6.25 0 7.81-.42c.86-.23 1.54-.91 1.77-1.77C22 15.25 22 12 22 12s0-3.25-.42-4.81zM10 15V9l5.2 3-5.2 3z"/>
</svg>
</a>
</div>
<div class="content" role="main">
<!-- Highlight Card -->
<div class="card highlight-card card-small">
<svg id="rocket" xmlns="http://www.w3.org/2000/svg" width="101.678" height="101.678" viewBox="0 0 101.678 101.678">
<title>Rocket Ship</title>
<g id="Group_83" data-name="Group 83" transform="translate(-141 -696)">
<circle id="Ellipse_8" data-name="Ellipse 8" cx="50.839" cy="50.839" r="50.839" transform="translate(141 696)" fill="#dd0031"/>
<g id="Group_47" data-name="Group 47" transform="translate(165.185 720.185)">
<path id="Path_33" data-name="Path 33" d="M3.4,42.615a3.084,3.084,0,0,0,3.553,3.553,21.419,21.419,0,0,0,12.215-6.107L9.511,30.4A21.419,21.419,0,0,0,3.4,42.615Z" transform="translate(0.371 3.363)" fill="#fff"/>
<path id="Path_34" data-name="Path 34" d="M53.3,3.221A3.09,3.09,0,0,0,50.081,0,48.227,48.227,0,0,0,18.322,13.437c-6-1.666-14.991-1.221-18.322,7.218A33.892,33.892,0,0,1,9.439,25.1l-.333.666a3.013,3.013,0,0,0,.555,3.553L23.985,43.641a2.9,2.9,0,0,0,3.553.555l.666-.333A33.892,33.892,0,0,1,32.647,53.3c8.55-3.664,8.884-12.326,7.218-18.322A48.227,48.227,0,0,0,53.3,3.221ZM34.424,9.772a6.439,6.439,0,1,1,9.106,9.106,6.368,6.368,0,0,1-9.106,0A6.467,6.467,0,0,1,34.424,9.772Z" transform="translate(0 0.005)" fill="#fff"/>
</g>
</g>
</svg>
<span>{{ title }} app is running!</span>
<svg id="rocket-smoke" xmlns="http://www.w3.org/2000/svg" width="516.119" height="1083.632" viewBox="0 0 516.119 1083.632">
<title>Rocket Ship Smoke</title>
<path id="Path_40" data-name="Path 40" d="M644.6,141S143.02,215.537,147.049,870.207s342.774,201.755,342.774,201.755S404.659,847.213,388.815,762.2c-27.116-145.51-11.551-384.124,271.9-609.1C671.15,139.365,644.6,141,644.6,141Z" transform="translate(-147.025 -140.939)" fill="#f5f5f5"/>
</svg>
</div>
<!-- Resources -->
<h2>Resources</h2>
<p>Here are some links to help you get started:</p>
<div class="card-container">
<a class="card" target="_blank" rel="noopener" href="https://angular.io/tutorial">
<svg class="material-icons" xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><path d="M5 13.18v4L12 21l7-3.82v-4L12 17l-7-3.82zM12 3L1 9l11 6 9-4.91V17h2V9L12 3z"/></svg>
<span>Learn Angular</span>
<svg class="material-icons" xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><path d="M10 6L8.59 7.41 13.17 12l-4.58 4.59L10 18l6-6z"/></svg> </a>
<a class="card" target="_blank" rel="noopener" href="https://angular.io/cli">
<svg class="material-icons" xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><path d="M9.4 16.6L4.8 12l4.6-4.6L8 6l-6 6 6 6 1.4-1.4zm5.2 0l4.6-4.6-4.6-4.6L16 6l6 6-6 6-1.4-1.4z"/></svg>
<span>CLI Documentation</span>
<svg class="material-icons" xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><path d="M10 6L8.59 7.41 13.17 12l-4.58 4.59L10 18l6-6z"/></svg>
</a>
<a class="card" target="_blank" rel="noopener" href="https://blog.angular.io/">
<svg class="material-icons" xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><path d="M13.5.67s.74 2.65.74 4.8c0 2.06-1.35 3.73-3.41 3.73-2.07 0-3.63-1.67-3.63-3.73l.03-.36C5.21 7.51 4 10.62 4 14c0 4.42 3.58 8 8 8s8-3.58 8-8C20 8.61 17.41 3.8 13.5.67zM11.71 19c-1.78 0-3.22-1.4-3.22-3.14 0-1.62 1.05-2.76 2.81-3.12 1.77-.36 3.6-1.21 4.62-2.58.39 1.29.59 2.65.59 4.04 0 2.65-2.15 4.8-4.8 4.8z"/></svg>
<span>Angular Blog</span>
<svg class="material-icons" xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><path d="M10 6L8.59 7.41 13.17 12l-4.58 4.59L10 18l6-6z"/></svg>
</a>
<a class="card" target="_blank" rel="noopener" href="https://angular.io/devtools/">
<svg class="material-icons" xmlns="http://www.w3.org/2000/svg" enable-background="new 0 0 24 24" height="24px" viewBox="0 0 24 24" width="24px" fill="#000000"><g><rect fill="none" height="24" width="24"/></g><g><g><path d="M14.73,13.31C15.52,12.24,16,10.93,16,9.5C16,5.91,13.09,3,9.5,3S3,5.91,3,9.5C3,13.09,5.91,16,9.5,16 c1.43,0,2.74-0.48,3.81-1.27L19.59,21L21,19.59L14.73,13.31z M9.5,14C7.01,14,5,11.99,5,9.5S7.01,5,9.5,5S14,7.01,14,9.5 S11.99,14,9.5,14z"/><polygon points="10.29,8.44 9.5,6 8.71,8.44 6.25,8.44 8.26,10.03 7.49,12.5 9.5,10.97 11.51,12.5 10.74,10.03 12.75,8.44"/></g></g></svg>
<span>Angular DevTools</span>
<svg class="material-icons" xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><path d="M10 6L8.59 7.41 13.17 12l-4.58 4.59L10 18l6-6z"/></svg>
</a>
</div>
<!-- Next Steps -->
<h2>Next Steps</h2>
<p>What do you want to do next with your app?</p>
<input type="hidden" #selection>
<div class="card-container">
<button class="card card-small" (click)="selection.value = 'component'" tabindex="0">
<svg class="material-icons" xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><path d="M19 13h-6v6h-2v-6H5v-2h6V5h2v6h6v2z"/></svg>
<span>New Component</span>
</button>
<button class="card card-small" (click)="selection.value = 'material'" tabindex="0">
<svg class="material-icons" xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><path d="M19 13h-6v6h-2v-6H5v-2h6V5h2v6h6v2z"/></svg>
<span>Angular Material</span>
</button>
<button class="card card-small" (click)="selection.value = 'pwa'" tabindex="0">
<svg class="material-icons" xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><path d="M19 13h-6v6h-2v-6H5v-2h6V5h2v6h6v2z"/></svg>
<span>Add PWA Support</span>
</button>
<button class="card card-small" (click)="selection.value = 'dependency'" tabindex="0">
<svg class="material-icons" xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><path d="M19 13h-6v6h-2v-6H5v-2h6V5h2v6h6v2z"/></svg>
<span>Add Dependency</span>
</button>
<button class="card card-small" (click)="selection.value = 'test'" tabindex="0">
<svg class="material-icons" xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><path d="M19 13h-6v6h-2v-6H5v-2h6V5h2v6h6v2z"/></svg>
<span>Run and Watch Tests</span>
</button>
<button class="card card-small" (click)="selection.value = 'build'" tabindex="0">
<svg class="material-icons" xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><path d="M19 13h-6v6h-2v-6H5v-2h6V5h2v6h6v2z"/></svg>
<span>Build for Production</span>
</button>
</div>
<!-- Terminal -->
<div class="terminal" [ngSwitch]="selection.value">
<pre *ngSwitchDefault>ng generate component xyz</pre>
<pre *ngSwitchCase="'material'">ng add @angular/material</pre>
<pre *ngSwitchCase="'pwa'">ng add @angular/pwa</pre>
<pre *ngSwitchCase="'dependency'">ng add _____</pre>
<pre *ngSwitchCase="'test'">ng test</pre>
<pre *ngSwitchCase="'build'">ng build</pre>
</div>
<!-- Links -->
<div class="card-container">
<a class="circle-link" title="Animations" href="https://angular.io/guide/animations" target="_blank" rel="noopener">
<svg id="Group_20" data-name="Group 20" xmlns="http://www.w3.org/2000/svg" width="21.813" height="23.453" viewBox="0 0 21.813 23.453">
<path id="Path_15" data-name="Path 15" d="M4099.584,972.736h0l-10.882,3.9,1.637,14.4,9.245,5.153,9.245-5.153,1.686-14.4Z" transform="translate(-4088.702 -972.736)" fill="#ffa726"/>
<path id="Path_16" data-name="Path 16" d="M4181.516,972.736v23.453l9.245-5.153,1.686-14.4Z" transform="translate(-4170.633 -972.736)" fill="#fb8c00"/>
<path id="Path_17" data-name="Path 17" d="M4137.529,1076.127l-7.7-3.723,4.417-2.721,7.753,3.723Z" transform="translate(-4125.003 -1058.315)" fill="#ffe0b2"/>
<path id="Path_18" data-name="Path 18" d="M4137.529,1051.705l-7.7-3.723,4.417-2.721,7.753,3.723Z" transform="translate(-4125.003 -1036.757)" fill="#fff3e0"/>
<path id="Path_19" data-name="Path 19" d="M4137.529,1027.283l-7.7-3.723,4.417-2.721,7.753,3.723Z" transform="translate(-4125.003 -1015.199)" fill="#fff"/>
</svg>
</a>
<a class="circle-link" title="CLI" href="https://cli.angular.io/" target="_blank" rel="noopener">
<svg xmlns="http://www.w3.org/2000/svg" width="21.762" height="23.447" viewBox="0 0 21.762 23.447">
<title>Angular CLI Logo</title>
<g id="Group_21" data-name="Group 21" transform="translate(0)">
<path id="Path_20" data-name="Path 20" d="M2660.313,313.618h0l-10.833,3.9,1.637,14.4,9.2,5.152,9.244-5.152,1.685-14.4Z" transform="translate(-2649.48 -313.618)" fill="#37474f"/>
<path id="Path_21" data-name="Path 21" d="M2741.883,313.618v23.447l9.244-5.152,1.685-14.4Z" transform="translate(-2731.05 -313.618)" fill="#263238"/>
<path id="Path_22" data-name="Path 22" d="M2692.293,379.169h11.724V368.618h-11.724Zm11.159-.6h-10.608v-9.345h10.621v9.345Z" transform="translate(-2687.274 -362.17)" fill="#fff"/>
<path id="Path_23" data-name="Path 23" d="M2709.331,393.688l.4.416,2.265-2.28-2.294-2.294-.4.4,1.893,1.893Z" transform="translate(-2702.289 -380.631)" fill="#fff"/>
<rect id="Rectangle_12" data-name="Rectangle 12" width="3.517" height="0.469" transform="translate(9.709 13.744)" fill="#fff"/>
</g>
</svg>
</a>
<a class="circle-link" title="Find a Local Meetup" href="https://www.meetup.com/find/?keywords=angular" target="_blank" rel="noopener">
<svg xmlns="http://www.w3.org/2000/svg" width="24.607" height="23.447" viewBox="0 0 24.607 23.447">
<title>Meetup Logo</title>
<path id="logo--mSwarm" d="M21.221,14.95A4.393,4.393,0,0,1,17.6,19.281a4.452,4.452,0,0,1-.8.069c-.09,0-.125.035-.154.117a2.939,2.939,0,0,1-2.506,2.091,2.868,2.868,0,0,1-2.248-.624.168.168,0,0,0-.245-.005,3.926,3.926,0,0,1-2.589.741,4.015,4.015,0,0,1-3.7-3.347,2.7,2.7,0,0,1-.043-.38c0-.106-.042-.146-.143-.166a3.524,3.524,0,0,1-1.516-.69A3.623,3.623,0,0,1,2.23,14.557a3.66,3.66,0,0,1,1.077-3.085.138.138,0,0,0,.026-.2,3.348,3.348,0,0,1-.451-1.821,3.46,3.46,0,0,1,2.749-3.28.44.44,0,0,0,.355-.281,5.072,5.072,0,0,1,3.863-3,5.028,5.028,0,0,1,3.555.666.31.31,0,0,0,.271.03A4.5,4.5,0,0,1,18.3,4.7a4.4,4.4,0,0,1,1.334,2.751,3.658,3.658,0,0,1,.022.706.131.131,0,0,0,.1.157,2.432,2.432,0,0,1,1.574,1.645,2.464,2.464,0,0,1-.7,2.616c-.065.064-.051.1-.014.166A4.321,4.321,0,0,1,21.221,14.95ZM13.4,14.607a2.09,2.09,0,0,0,1.409,1.982,4.7,4.7,0,0,0,1.275.221,1.807,1.807,0,0,0,.9-.151.542.542,0,0,0,.321-.545.558.558,0,0,0-.359-.534,1.2,1.2,0,0,0-.254-.078c-.262-.047-.526-.086-.787-.138a.674.674,0,0,1-.617-.75,3.394,3.394,0,0,1,.218-1.109c.217-.658.509-1.286.79-1.918a15.609,15.609,0,0,0,.745-1.86,1.95,1.95,0,0,0,.06-1.073,1.286,1.286,0,0,0-1.051-1.033,1.977,1.977,0,0,0-1.521.2.339.339,0,0,1-.446-.042c-.1-.092-.2-.189-.307-.284a1.214,1.214,0,0,0-1.643-.061,7.563,7.563,0,0,1-.614.512A.588.588,0,0,1,10.883,8c-.215-.115-.437-.215-.659-.316a2.153,2.153,0,0,0-.695-.248A2.091,2.091,0,0,0,7.541,8.562a9.915,9.915,0,0,0-.405.986c-.559,1.545-1.015,3.123-1.487,4.7a1.528,1.528,0,0,0,.634,1.777,1.755,1.755,0,0,0,1.5.211,1.35,1.35,0,0,0,.824-.858c.543-1.281,1.032-2.584,1.55-3.875.142-.355.28-.712.432-1.064a.548.548,0,0,1,.851-.24.622.622,0,0,1,.185.539,2.161,2.161,0,0,1-.181.621c-.337.852-.68,1.7-1.018,2.552a2.564,2.564,0,0,0-.173.528.624.624,0,0,0,.333.71,1.073,1.073,0,0,0,.814.034,1.22,1.22,0,0,0,.657-.655q.758-1.488,1.511-2.978.35-.687.709-1.37a1.073,1.073,0,0,1,.357-.434.43.43,0,0,1,.463-.016.373.373,0,0,1,.153.387.7.7,0,0,1-.057.236c-.065.157-.127.316-.2.469-.42.883-.846,1.763-1.262,2.648A2.463,2.463,0,0,0,13.4,14.607Zm5.888,6.508a1.09,1.09,0,0,0-2.179.006,1.09,1.09,0,0,0,2.179-.006ZM1.028,12.139a1.038,1.038,0,1,0,.01-2.075,1.038,1.038,0,0,0-.01,2.075ZM13.782.528a1.027,1.027,0,1,0-.011,2.055A1.027,1.027,0,0,0,13.782.528ZM22.21,6.95a.882.882,0,0,0-1.763.011A.882.882,0,0,0,22.21,6.95ZM4.153,4.439a.785.785,0,1,0,.787-.78A.766.766,0,0,0,4.153,4.439Zm8.221,18.22a.676.676,0,1,0-.677.666A.671.671,0,0,0,12.374,22.658ZM22.872,12.2a.674.674,0,0,0-.665.665.656.656,0,0,0,.655.643.634.634,0,0,0,.655-.644A.654.654,0,0,0,22.872,12.2ZM7.171-.123A.546.546,0,0,0,6.613.43a.553.553,0,1,0,1.106,0A.539.539,0,0,0,7.171-.123ZM24.119,9.234a.507.507,0,0,0-.493.488.494.494,0,0,0,.494.494.48.48,0,0,0,.487-.483A.491.491,0,0,0,24.119,9.234Zm-19.454,9.7a.5.5,0,0,0-.488-.488.491.491,0,0,0-.487.5.483.483,0,0,0,.491.479A.49.49,0,0,0,4.665,18.936Z" transform="translate(0 0.123)" fill="#f64060"/>
</svg>
</a>
<a class="circle-link" title="Join the Conversation on Discord" href="https://discord.gg/angular" target="_blank" rel="noopener">
<svg xmlns="http://www.w3.org/2000/svg" width="26" height="26" viewBox="0 0 245 240">
<title>Discord Logo</title>
<path d="M104.4 103.9c-5.7 0-10.2 5-10.2 11.1s4.6 11.1 10.2 11.1c5.7 0 10.2-5 10.2-11.1.1-6.1-4.5-11.1-10.2-11.1zM140.9 103.9c-5.7 0-10.2 5-10.2 11.1s4.6 11.1 10.2 11.1c5.7 0 10.2-5 10.2-11.1s-4.5-11.1-10.2-11.1z"/>
<path d="M189.5 20h-134C44.2 20 35 29.2 35 40.6v135.2c0 11.4 9.2 20.6 20.5 20.6h113.4l-5.3-18.5 12.8 11.9 12.1 11.2 21.5 19V40.6c0-11.4-9.2-20.6-20.5-20.6zm-38.6 130.6s-3.6-4.3-6.6-8.1c13.1-3.7 18.1-11.9 18.1-11.9-4.1 2.7-8 4.6-11.5 5.9-5 2.1-9.8 3.5-14.5 4.3-9.6 1.8-18.4 1.3-25.9-.1-5.7-1.1-10.6-2.7-14.7-4.3-2.3-.9-4.8-2-7.3-3.4-.3-.2-.6-.3-.9-.5-.2-.1-.3-.2-.4-.3-1.8-1-2.8-1.7-2.8-1.7s4.8 8 17.5 11.8c-3 3.8-6.7 8.3-6.7 8.3-22.1-.7-30.5-15.2-30.5-15.2 0-32.2 14.4-58.3 14.4-58.3 14.4-10.8 28.1-10.5 28.1-10.5l1 1.2c-18 5.2-26.3 13.1-26.3 13.1s2.2-1.2 5.9-2.9c10.7-4.7 19.2-6 22.7-6.3.6-.1 1.1-.2 1.7-.2 6.1-.8 13-1 20.2-.2 9.5 1.1 19.7 3.9 30.1 9.6 0 0-7.9-7.5-24.9-12.7l1.4-1.6s13.7-.3 28.1 10.5c0 0 14.4 26.1 14.4 58.3 0 0-8.5 14.5-30.6 15.2z"/>
</svg>
</a>
</div>
<!-- Footer -->
<footer>
Love Angular?&nbsp;
<a href="https://github.com/angular/angular" target="_blank" rel="noopener"> Give our repo a star.
<div class="github-star-badge">
<svg class="material-icons" xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><path d="M0 0h24v24H0z" fill="none"/><path d="M12 17.27L18.18 21l-1.64-7.03L22 9.24l-7.19-.61L12 2 9.19 8.63 2 9.24l5.46 4.73L5.82 21z"/></svg>
Star
</div>
</a>
<a href="https://github.com/angular/angular" target="_blank" rel="noopener">
<svg class="material-icons" xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><path d="M10 6L8.59 7.41 13.17 12l-4.58 4.59L10 18l6-6z" fill="#1976d2"/><path d="M0 0h24v24H0z" fill="none"/></svg>
</a>
</footer>
<svg id="clouds" xmlns="http://www.w3.org/2000/svg" width="2611.084" height="485.677" viewBox="0 0 2611.084 485.677">
<title>Gray Clouds Background</title>
<path id="Path_39" data-name="Path 39" d="M2379.709,863.793c10-93-77-171-168-149-52-114-225-105-264,15-75,3-140,59-152,133-30,2.83-66.725,9.829-93.5,26.25-26.771-16.421-63.5-23.42-93.5-26.25-12-74-77-130-152-133-39-120-212-129-264-15-54.084-13.075-106.753,9.173-138.488,48.9-31.734-39.726-84.4-61.974-138.487-48.9-52-114-225-105-264,15a162.027,162.027,0,0,0-103.147,43.044c-30.633-45.365-87.1-72.091-145.206-58.044-52-114-225-105-264,15-75,3-140,59-152,133-53,5-127,23-130,83-2,42,35,72,70,86,49,20,106,18,157,5a165.625,165.625,0,0,0,120,0c47,94,178,113,251,33,61.112,8.015,113.854-5.72,150.492-29.764a165.62,165.62,0,0,0,110.861-3.236c47,94,178,113,251,33,31.385,4.116,60.563,2.495,86.487-3.311,25.924,5.806,55.1,7.427,86.488,3.311,73,80,204,61,251-33a165.625,165.625,0,0,0,120,0c51,13,108,15,157-5a147.188,147.188,0,0,0,33.5-18.694,147.217,147.217,0,0,0,33.5,18.694c49,20,106,18,157,5a165.625,165.625,0,0,0,120,0c47,94,178,113,251,33C2446.709,1093.793,2554.709,922.793,2379.709,863.793Z" transform="translate(142.69 -634.312)" fill="#eee"/>
</svg>
</div>
<!-- * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * -->
<!-- * * * * * * * * * * * The content above * * * * * * * * * * * -->
<!-- * * * * * * * * * * is only a placeholder * * * * * * * * * * -->
<!-- * * * * * * * * * * and can be replaced. * * * * * * * * * * * -->
<!-- * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * -->
<!-- * * * * * * * * * * End of Placeholder * * * * * * * * * * * -->
<!-- * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * -->
<router-outlet></router-outlet>
import { Component } from '@angular/core';
@Component({
selector: 'app-root',
templateUrl: './app.component.html',
styleUrls: ['./app.component.css']
})
export class AppComponent {
title = 'console-web';
}
import { NgModule } from '@angular/core';
import { BrowserModule } from '@angular/platform-browser';
import { AppRoutingModule } from './app-routing.module';
import { AppComponent } from './app.component';
@NgModule({
declarations: [
AppComponent
],
imports: [
BrowserModule,
AppRoutingModule
],
providers: [],
bootstrap: [AppComponent]
})
export class AppModule { }
export const environment = {
production: true
};
// This file can be replaced during build by using the `fileReplacements` array.
// `ng build` replaces `environment.ts` with `environment.prod.ts`.
// The list of file replacements can be found in `angular.json`.
export const environment = {
production: false
};
/*
* For easier debugging in development mode, you can import the following file
* to ignore zone related error stack frames such as `zone.run`, `zoneDelegate.invokeTask`.
*
* This import should be commented out in production mode because it will have a negative impact
* on performance if an error is thrown.
*/
// import 'zone.js/plugins/zone-error'; // Included with Angular CLI.
<!doctype html>
<html lang="en">
<head>
<meta charset="utf-8">
<title>ConsoleWeb</title>
<base href="/">
<meta name="viewport" content="width=device-width, initial-scale=1">
<link rel="icon" type="image/x-icon" href="favicon.ico">
</head>
<body>
<app-root></app-root>
</body>
</html>
import { enableProdMode } from '@angular/core';
import { platformBrowserDynamic } from '@angular/platform-browser-dynamic';
import { AppModule } from './app/app.module';
import { environment } from './environments/environment';
if (environment.production) {
enableProdMode();
}
platformBrowserDynamic().bootstrapModule(AppModule)
.catch(err => console.error(err));
/**
* This file includes polyfills needed by Angular and is loaded before the app.
* You can add your own extra polyfills to this file.
*
* This file is divided into 2 sections:
* 1. Browser polyfills. These are applied before loading ZoneJS and are sorted by browsers.
* 2. Application imports. Files imported after ZoneJS that should be loaded before your main
* file.
*
* The current setup is for so-called "evergreen" browsers; the last versions of browsers that
* automatically update themselves. This includes Safari >= 10, Chrome >= 55 (including Opera),
* Edge >= 13 on the desktop, and iOS 10 and Chrome on mobile.
*
* Learn more in https://angular.io/guide/browser-support
*/
/***************************************************************************************************
* BROWSER POLYFILLS
*/
/**
* IE11 requires the following for NgClass support on SVG elements
*/
// import 'classlist.js'; // Run `npm install --save classlist.js`.
/**
* Web Animations `@angular/platform-browser/animations`
* Only required if AnimationBuilder is used within the application and using IE/Edge or Safari.
* Standard animation support in Angular DOES NOT require any polyfills (as of Angular 6.0).
*/
// import 'web-animations-js'; // Run `npm install --save web-animations-js`.
/**
* By default, zone.js will patch all possible macroTask and DomEvents
* user can disable parts of macroTask/DomEvents patch by setting following flags
* because those flags need to be set before `zone.js` being loaded, and webpack
* will put import in the top of bundle, so user need to create a separate file
* in this directory (for example: zone-flags.ts), and put the following flags
* into that file, and then add the following code before importing zone.js.
* import './zone-flags';
*
* The flags allowed in zone-flags.ts are listed here.
*
* The following flags will work for all browsers.
*
* (window as any).__Zone_disable_requestAnimationFrame = true; // disable patch requestAnimationFrame
* (window as any).__Zone_disable_on_property = true; // disable patch onProperty such as onclick
* (window as any).__zone_symbol__UNPATCHED_EVENTS = ['scroll', 'mousemove']; // disable patch specified eventNames
*
* in IE/Edge developer tools, the addEventListener will also be wrapped by zone.js
* with the following flag, it will bypass `zone.js` patch for IE/Edge
*
* (window as any).__Zone_enable_cross_context_check = true;
*
*/
/***************************************************************************************************
* Zone JS is required by default for Angular itself.
*/
import 'zone.js'; // Included with Angular CLI.
/***************************************************************************************************
* APPLICATION IMPORTS
*/
/* You can add global styles to this file, and also import other style files */
// This file is required by karma.conf.js and loads recursively all the .spec and framework files
import 'zone.js/testing';
import { getTestBed } from '@angular/core/testing';
import {
BrowserDynamicTestingModule,
platformBrowserDynamicTesting
} from '@angular/platform-browser-dynamic/testing';
declare const require: {
context(path: string, deep?: boolean, filter?: RegExp): {
keys(): string[];
<T>(id: string): T;
};
};
// First, initialize the Angular testing environment.
getTestBed().initTestEnvironment(
BrowserDynamicTestingModule,
platformBrowserDynamicTesting(),
{ teardown: { destroyAfterEach: true }},
);
// Then we find all the tests.
const context = require.context('./', true, /\.spec\.ts$/);
// And load the modules.
context.keys().map(context);
/* To learn more about this file see: https://angular.io/config/tsconfig. */
{
"extends": "./tsconfig.json",
"compilerOptions": {
"outDir": "./out-tsc/app",
"types": []
},
"files": [
"src/main.ts",
"src/polyfills.ts"
],
"include": [
"src/**/*.d.ts"
]
}
/* To learn more about this file see: https://angular.io/config/tsconfig. */
{
"compileOnSave": false,
"compilerOptions": {
"baseUrl": "./",
"outDir": "./dist/out-tsc",
"forceConsistentCasingInFileNames": true,
"strict": true,
"noImplicitReturns": true,
"noFallthroughCasesInSwitch": true,
"sourceMap": true,
"declaration": false,
"downlevelIteration": true,
"experimentalDecorators": true,
"moduleResolution": "node",
"importHelpers": true,
"target": "es2017",
"module": "es2020",
"lib": [
"es2018",
"dom"
]
},
"angularCompilerOptions": {
"enableI18nLegacyMessageIdFormat": false,
"strictInjectionParameters": true,
"strictInputAccessModifiers": true,
"strictTemplates": true
}
}
<!DOCTYPE html>
<html lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>哔哩哔哩 (゜-゜)つロ 干杯~-bilibili</title>
<meta name="description" content="bilibili是国内知名的视频弹幕网站,这里有最及时的动漫新番,最棒的ACG氛围,最有创意的Up主。大家可以在这里找到许多欢乐。">
<meta name="keywords" content="B站,弹幕,字幕,AMV,MAD,MTV,ANIME,动漫,动漫音乐,游戏,游戏解说,ACG,galgame,动画,番组,新番,初音,洛天依,vocaloid">
<meta name="renderer" content="webkit">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<link rel="shortcut icon" href="//static.hdslb.com/images/favicon.ico">
<link rel="search" type="application/opensearchdescription+xml" href="//static.hdslb.com/opensearch.xml" title="哔哩哔哩" />
<link rel="stylesheet" href="//static.hdslb.com/images/jquery-ui/custom/jquery-ui.css" type="text/css">
<link rel="stylesheet" href="//static.hdslb.com/css/core-v5/page-core.css" type="text/css" />
<script type="text/javascript" src="//static.hdslb.com/js/jquery.min.js"></script>
<script type="text/javascript" src="//static.hdslb.com/js/jquery-ui.min.js"></script>
<script type="text/javascript" src="//static.hdslb.com/js/core-v5/base.core.js"></script>
<script type="text/javascript" src="//s1.hdslb.com/bfs/cm/st/seed.js"></script>
<meta name="fragment" content="!">
<link rel="stylesheet" type="text/css" href="//static.hdslb.com/css/index.css" />
<script type="text/javascript" src="//static.hdslb.com/js/core-v5/page.core.js"></script>
<script type="text/javascript" src="//static.hdslb.com/js/core-v5/page.index.js"></script>
<style> body { min-height: 1500px; } </style>
</head>
<body>
<!-- 2017-05-04 15:44:20 --> <script type="text/javascript">biliAdjust();
$(function () {
biliAdjust(true);
$(window).resize(biliAdjust);
});</script>
<div class="float_window"><div class="close"></div><div id="float_window"></div></div>
<div class="z_top_container">
<div class="z_top b-header-blur">
<div class="b-header-mask-wrp"><div class="b-header-mask-bg"></div><div class="b-header-mask"></div></div>
<div class="z_header">
<div class="z_top_nav">
<!--<div id="httpsNotWorkTips">
<text style="font-family: 'PingFang SC'; font-size: 16px; font-variant-ligatures: normal; orphans: 2; widows: 2; color: red;">访问异常?</text><span style="font-family: 'PingFang SC'; font-size: medium; font-variant-ligatures: normal; orphans: 2; widows: 2;">&nbsp;</span><a style="font-family: 'PingFang SC'; font-size: medium; font-variant-ligatures: normal; orphans: 2; widows: 2; color: blue;" target="_blank" href="http://www.bilibili.com/html/diagnostics.html">【点击这里】</a><span style="font-family: 'PingFang SC'; font-size: medium; font-variant-ligatures: normal; orphans: 2; widows: 2;">&nbsp;</span><text style="font-family: 'PingFang SC'; font-size: 16px; font-variant-ligatures: normal; orphans: 2; widows: 2; color: red;">请将的诊断结果与系统环境、正在使用的浏览器信息发送给我们,邮箱:bug@bilibili.com,或进入</text><span style="font-family: 'PingFang SC'; font-size: medium; font-variant-ligatures: normal; orphans: 2; widows: 2;">&nbsp;</span><a style="font-family: 'PingFang SC'; font-size: medium; font-variant-ligatures: normal; orphans: 2; widows: 2; color: blue;" target="_blank" href="http://link.acg.tv">【用户反馈论坛】</a><span style="font-family: 'PingFang SC'; font-size: medium; font-variant-ligatures: normal; orphans: 2; widows: 2;">&nbsp;</span><text style="font-family: 'PingFang SC'; font-size: 16px; font-variant-ligatures: normal; orphans: 2; widows: 2; color: red;">反映。</text><span style=" font-size:12pt;font-family:DengXian ;;;"><br></span>
</div>-->
<ul>
<li class="home">
<a class="i-link" href="//www.bilibili.com/index.html"><span>主站</span></a>
</li>
<li class="hbili"><a class="i-link" href="http://h.bilibili.com/" title="画友">画友</a></li>
<li class="b-gc" hasframe="true">
<a class="i-link" href="//game.bilibili.com/" title="游戏中心">游戏中心</a>
<div class="i_div game" data-frame="game"></div>
</li>
<li class="live" hasframe="true">
<a class="i-link" target="_blank" href="//live.bilibili.com" title="直播">直播</a>
<div class="i_div stream" data-frame="stream"></div>
</li>
<li class="b-zb"><a class="i-link" target="_blank" href="//bmall.bilibili.com/#!/" title="周边">周边</a></li>
<li style='display:none' class="b-ml"><a class="i-link" target="_blank" href="//bml.bilibili.com/index2016/?nav" title="BML">BML</a></li>
<li class="shouji">
<a class="i-link" target="_blank" href="//app.bilibili.com" title="移动端">移动端</a>
<div class="mobile-p-box"><div class="mobile-p-qrcode"></div></div>
</li>
</ul>
</div>
<div class="uns_box">
<ul class="menu">
<li id="i_menu_profile_btn" guest="no" class="u-i i_user" i_menu="#i_menu_profile">
<a class="i-link" href="//space.bilibili.com/" target="_blank">
<img class="i_face">
</a>
<div id="i_menu_profile" class="i_menu">
<div class="i_menu_bg_t"></div>
<div class="info clearfix"><div class="uname"></div><div class="coin"></div></div>
<div class="member-menu-wrp">
<ul class="member-menu">
<li><a href="https://account.bilibili.com/site/home" target="_blank" class="account"><i class="b-icon b-icon-p-account"></i>个人中心</a></li>
<li><a href="http://member.bilibili.com/v/#/article" target="_blank" class="member"><i class="b-icon b-icon-p-member"></i>投稿管理</a></li>
<li><a href="https://pay.bilibili.com/" target="_blank" class="wallet"><i class="b-icon b-icon-p-wallet"></i>B币钱包</a></li>
<li><a href="//live.bilibili.com/i" target="_blank" class="live"><i class="b-icon b-icon-p-live"></i>直播中心</a></li>
</ul>
</div>
<div class="member-bottom">
<a class="logout" href="https://account.bilibili.com/login?act=exit">退出</a>
</div>
</div>
</li>
<li id="i_menu_become_vip" guest="no" i_menu="become_vip" class="u-i">
<a class="i-link" href="//big.bilibili.com/site/big.html" target="_blank">成为大会员</a>
</li>
<li id="i_menu_community_msg_btn" guest="no" i_menu="community_msg" class="u-i">
<a class="i-link" href="//message.bilibili.com" target="_blank">消息</a>
</li>
<li id="i_menu_msg_btn" guest="no" i_menu="#dyn_wnd" class="u-i">
<div class="num" id="dynamic_num_total"></div>
<a class="i-link" href="//www.bilibili.com/account/dynamic" target="_blank">动态</a>
</li>
<li id="i_menu_fav_btn" guest="no" i_menu="#i_menu_fav" class="u-i">
<a class="i-link" href="//space.bilibili.com/#!/favlist" target="_blank">收藏夹</a>
</li>
<li id="i_menu_login_reg" guest="yes" class="u-i">
<a id="i_menu_login_btn" class="i-link login" href="https://account.bilibili.com/login"><span>登录</span></a><i class="s-line"></i><a id="i_menu_register_btn" class="i-link reg" href="https://www.bilibili.com/register"><span>注册</span></a>
</li>
<li id="i_menu_history_btn" class="u-i">
<a class="i-link" href="//www.bilibili.com/account/history">历史</a>
</li>
<li class="u-i b-post">
<a class="i-link" href="http://member.bilibili.com/v/video/submit.html" target="_blank">投 稿</a>
<ul class="s-menu">
<li><a href="http://member.bilibili.com/v/video/submit.html" target="_blank"><i class="b-icon b-icon-vp"></i><em>视频投稿</em></a></li>
<li><a href="http://member.bilibili.com/v/#/article" target="_blank"><i class="b-icon b-icon-vm"></i><em>投稿管理</em></a></li>
<li><a href="http://member.bilibili.com/v/" target="_blank"><i class="b-icon b-icon-vc"></i><em>创作中心</em></a></li>
</ul>
</li>
</ul>
</div>
</div>
</div>
</div>
<div class="header">
<div class="h-center">
<a href="//www.bilibili.com/index.html" class="logo"></a>
<a href="//www.bilibili.com/random" target="_blank" title="随便找个视频看看?" class="lsb"></a>
</div>
<div class="num">
<div class="menu-wrapper">
<ul class="nav-menu">
<li class="m-i home"><a class="i-link" href="//www.bilibili.com/index.html"><em>首页</em></a></li>
<!-- 动画 -->
<li class="m-i" data-tid="1">
<a class="i-link" href="//www.bilibili.com/video/douga.html"><em>动画</em><div class="v-num"><span class="addnew_1">--</span></div></a>
<ul class="i_num">
<li><a href="//www.bilibili.com/video/douga-mad-1.html"><b>MAD·AMV<em></em></b></a></li>
<li><a href="//www.bilibili.com/video/douga-mmd-1.html"><b>MMD·3D<em></em></b></a></li>
<li><a href="//www.bilibili.com/video/douga-voice-1.html"><b>短片·手书·配音<em></em></b></a></li>
<li><a href="//www.bilibili.com/video/douga-else-1.html"><b>综合<em></em></b></a></li>
</ul>
</li>
<!-- 番剧 -->
<li class="m-i" data-tid="13">
<a class="i-link" href="//bangumi.bilibili.com/22/"><em>番剧</em><div class="v-num"><span class="addnew_13">--</span></div></a>
<ul class="i_num">
<li><a href="//www.bilibili.com/video/bangumi-two-1.html"><b>连载动画<em></em></b></a></li>
<li><a href="//www.bilibili.com/video/part-twoelement-1.html"><b>完结动画<em></em></b></a></li>
<li><a href="//www.bilibili.com/video/douga-else-information-1.html"><b>资讯<em></em></b></a></li>
<li><a href="//www.bilibili.com/video/bagumi_offical_1.html"><b>官方延伸<em></em></b></a></li>
<li><a href="//bangumi.bilibili.com/anime/timeline"><b>新番时间表<em></em></b></a></li>
<li><a href="//bangumi.bilibili.com/anime/index"><b>番剧索引<em></em></b></a></li>
</ul>
</li>
<!-- 国创 -->
<li class="m-i" data-tid="167">
<a class="i-link" href="//bangumi.bilibili.com/guochuang/"><em>国创</em><div class="v-num"><span class="addnew_167">--</span></div></a>
<ul class="i_num">
<li><a href="//www.bilibili.com/video/bangumi_chinese_1.html"><b>国产动画<em></em></b></a></li>
<li><a href="//www.bilibili.com/video/guochuang-fanvid-1.html"><b>国产原创相关<em></em></b></a></li>
<li><a href="//www.bilibili.com/video/glove-puppetry-1.html"><b>布袋戏<em></em></b></a></li>
<li><a href="//www.bilibili.com/video/guochuang-offical-1.html"><b>资讯<em></em></b></a></li>
<li><a href="//bangumi.bilibili.com/guochuang/timeline"><b>新番时间表<em></em></b></a></li>
<li><a href="//bangumi.bilibili.com/guochuang/index"><b>国产动画索引<em></em></b></a></li>
</ul>
</li>
<!-- 音乐 -->
<li class="m-i" data-tid="3">
<a class="i-link" href="//www.bilibili.com/video/music.html"><em>音乐</em><div class="v-num"><span class="addnew_3">--</span></div></a>
<ul class="i_num">
<li><a href="//www.bilibili.com/video/music-original-1.html"><b>原创音乐<em></em></b></a></li>
<li><a href="//www.bilibili.com/video/music-Cover-1.html"><b>翻唱<em></em></b></a></li>
<li><a href="//www.bilibili.com/video/music-vocaloid-1.html"><b>VOCALOID·UTAU<em></em></b></a></li>
<li><a href="//www.bilibili.com/video/music-perform-1.html"><b>演奏<em></em></b></a></li>
<li><a href="//www.bilibili.com/video/music-coordinate-1.html"><b>三次元音乐<em></em></b></a></li>
<li><a href="//www.bilibili.com/video/music-oped-1.html"><b>OP/ED/OST<em></em></b></a></li>
<li><a href="//www.bilibili.com/video/music-collection-1.html"><b>音乐选集<em></em></b></a></li>
</ul>
</li>
<!-- 舞蹈 -->
<li class="m-i" data-tid="129">
<a class="i-link" href="//www.bilibili.com/video/dance.html"><em>舞蹈</em><div class="v-num"><span class="addnew_129">--</span></div></a>
<ul class="i_num">
<li><a href="//www.bilibili.com/video/dance-1.html"><b>宅舞<em></em></b></a></li>
<li><a href="//www.bilibili.com/video/three-dimension-dance-1.html"><b>三次元舞蹈<em></em></b></a></li>
<li><a href="//www.bilibili.com/video/dance-demo-1.html"><b>舞蹈教程<em></em></b></a></li>
</ul>
</li>
<!-- 游戏 -->
<li class="m-i" data-tid="4">
<a class="i-link" href="//www.bilibili.com/video/game.html"><em>游戏</em><div class="v-num"><span class="addnew_4">--</span></div></a>
<ul class="i_num">
<li><a href="//www.bilibili.com/video/videogame-1.html"><b>单机游戏<em></em></b></a></li>
<li><a href="//www.bilibili.com/video/esports-1.html"><b>电子竞技<em></em></b></a></li>
<li><a href="//www.bilibili.com/video/mobilegame-1.html"><b>手机游戏<em></em></b></a></li>
<li><a href="//www.bilibili.com/video/onlinegame-1.html"><b>网络游戏<em></em></b></a></li>
<li><a href="//www.bilibili.com/video/boardgame-1.html"><b>桌游棋牌<em></em></b></a></li>
<li><a href="//www.bilibili.com/video/gmv-1.html"><b>GMV<em></em></b></a></li>
<li><a href="//www.bilibili.com/video/music-game-1.html"><b>音游<em></em></b></a></li>
<li><a href="//www.bilibili.com/video/game-mugen-1.html"><b>Mugen<em></em></b></a></li>
</ul>
</li>
<!-- 科技 -->
<li class="m-i" data-tid="36">
<a class="i-link" href="//www.bilibili.com/video/technology.html"><em>科技</em><div class="v-num"><span class="addnew_36">--</span></div></a>
<ul class="i_num">
<li><a href="//www.bilibili.com/video/tech-popular-science-1.html"><b>纪录片<em></em></b></a></li>
<li><a href="//www.bilibili.com/video/tech-fun-1.html"><b>趣味科普人文<em></em></b></a></li>
<li><a href="//www.bilibili.com/video/tech-wild-1.html"><b>野生技术协会<em></em></b></a></li>
<li><a href="//www.bilibili.com/video/speech-course-1.html"><b>演讲·公开课<em></em></b></a></li>
<li><a href="//www.bilibili.com/video/tech-future-military-1.html"><b>星海<em></em></b></a></li>
<li><a href="//www.bilibili.com/video/tech-future-digital-1.html"><b>数码<em></em></b></a></li>
<li><a href="//www.bilibili.com/video/tech-future-other-1.html"><b>机械<em></em></b></a></li>
</ul>
</li>
<!-- 生活 -->
<li class="m-i" data-tid="160">
<a class="i-link" href="//www.bilibili.com/video/life.html"><em>生活</em><div class="v-num"><span class="addnew_160">--</span></div></a>
<ul class="i_num">
<li><a href="//www.bilibili.com/video/ent_funny_1.html"><b>搞笑<em></em></b></a></li>
<li><a href="//www.bilibili.com/video/ent-life-1.html"><b>日常<em></em></b></a></li>
<li><a href="//www.bilibili.com/video/ent-food-1.html"><b>美食圈<em></em></b></a></li>
<li><a href="//www.bilibili.com/video/ent-animal-1.html"><b>动物圈<em></em></b></a></li>
<li><a href="//www.bilibili.com/video/ent-handmake-1.html"><b>手工<em></em></b></a></li>
<li><a href="//www.bilibili.com/video/ent-painting-1.html"><b>绘画<em></em></b></a></li>
<li><a href="//www.bilibili.com/video/ent-sports-1.html"><b>运动<em></em></b></a></li>
<li><a href="//www.bilibili.com/video/others-1.html"><b>其他<em></em></b></a></li>
</ul>
</li>
<!-- 鬼畜 -->
<li class="m-i" data-tid="119">
<a class="i-link" href="//www.bilibili.com/video/kichiku.html"><em>鬼畜</em><div class="v-num"><span class="addnew_119">--</span></div></a>
<ul class="i_num">
<li><a href="//www.bilibili.com/video/ent-Kichiku-1.html"><b>鬼畜调教<em></em></b></a></li>
<li><a href="//www.bilibili.com/video/douga-kichiku-1.html"><b>音MAD<em></em></b></a></li>
<li><a href="//www.bilibili.com/video/kichiku-manual_vocaloid-1.html"><b>人力VOCALOID<em></em></b></a></li>
<li><a href="//www.bilibili.com/video/kichiku-course-1.html"><b>教程演示<em></em></b></a></li>
</ul>
</li>
<!-- 时尚 -->
<li class="m-i" data-tid="155">
<a class="i-link" href="//www.bilibili.com/video/fashion.html"><em>时尚</em><div class="v-num"><span class="addnew_155">--</span></div></a>
<ul class="i_num">
<li><a href="//www.bilibili.com/video/fashion-makeup-fitness-1.html"><b>美妆<em></em></b></a></li>
<li><a href="//www.bilibili.com/video/fashion-clothing-1.html"><b>服饰<em></em></b></a></li>
<li><a href="//www.bilibili.com/video/fashion-body-1.html"><b>健身<em></em></b></a></li>
<li><a href="//www.bilibili.com/video/fashion-info-1.html"><b>资讯<em></em></b></a></li>
</ul>
</li>
<!-- 广告 -->
<li class="m-i" data-tid="165">
<a class="i-link" href="//www.bilibili.com/video/ad-ad-1.html"><em>广告</em><div class="v-num"><span class="addnew_165">--</span></div></a>
</li>
<!-- 娱乐 -->
<li class="m-i" data-tid="5">
<a class="i-link" href="//www.bilibili.com/video/ent.html"><em>娱乐</em><div class="v-num"><span class="addnew_5">--</span></div></a>
<ul class="i_num">
<li><a href="//www.bilibili.com/video/ent-variety-1.html"><b>综艺<em></em></b></a></li>
<li><a href="//www.bilibili.com/video/ent-circle-1.html"><b>明星<em></em></b></a></li>
<li><a href="//www.bilibili.com/video/ent-korea-1.html"><b>Korea相关<em></em></b></a></li>
</ul>
</li>
<!-- 影视 -->
<li class="m-i" data-tid="23">
<a class="i-link" href="//bangumi.bilibili.com/33/"><em>影视</em><div class="v-num"><span class="addnew_23_11">--</span></div></a>
<ul class="i_num">
<li><a href="//bangumi.bilibili.com/movie/"><b>电影<em></em></b></a></li>
<li><a href="//bangumi.bilibili.com/tv/"><b>电视剧<em></em></b></a></li>
</ul>
</li>
<li class="m-i m-i-square">
<a class="i-link" href="//www.bilibili.com/square"><em>广场</em></a>
<div class="i_num">
<ul>
<li><a href="//activity.bilibili.com"><i class="b-icon b-icon-n-activity"></i><b>活动中心</b></a></li>
<li><a href="//game.bilibili.com"><i class="b-icon b-icon-n-gc"></i><b>游戏中心</b></a></li>
<li><a href="//news.bilibili.com"><i class="b-icon b-icon-n-new"></i><b>新闻中心</b></a></li>
<li><a href="//h.bilibili.com/"><i class="b-icon b-icon-n-h"></i><b>画友</b></a></li>
<li><a href="//www.bilibili.com/mango"><i class="b-icon b-icon-n-mango"></i><b>芒果TV</b></a></li>
</ul>
</div>
</li>
<li class="m-i m-i-live m-i-last">
<a class="i-link" href="//live.bilibili.com"><em>直播</em></a>
<ul class="i_num">
<li><a href="//live.bilibili.com/subject"><b>推荐主播<em></em></b></a></li>
<li><a href="//live.bilibili.com/ent-life"><b>生活娱乐<em></em></b></a></li>
<li><a href="//live.bilibili.com/draw"><b>绘画专区<em></em></b></a></li>
<li><a href="//live.bilibili.com/sing-dance"><b>唱见舞见<em></em></b></a></li>
<li><a href="//live.bilibili.com/otaku"><b>御宅文化<em></em></b></a></li>
<li><a href="//live.bilibili.com/single"><b>单机联机<em></em></b></a></li>
<li><a href="//live.bilibili.com/online"><b>网络游戏<em></em></b></a></li>
<li><a href="//live.bilibili.com/e-sports"><b>电子竞技<em></em></b></a></li>
<li><a href="//live.bilibili.com/mobile-game"><b>手游直播<em></em></b></a></li>
<li><a href="//live.bilibili.com/movie"><b>放映厅<em></em></b></a></li>
</ul>
</li>
<li class="m-i m-i-blackroom"><a class="i-link" href="//www.bilibili.com/blackroom"><em>小黑屋</em></a></li>
</ul>
<div class="menu-r">
<a id="random_p" class="random-p" target="_blank"></a>
</div>
<div class="search">
<form action="//search.bilibili.com/all" id="searchform" target="_blank">
<input name="keyword" type="text" class="search-keyword" id="search-keyword" autocomplete="off" accesskey="s" x-webkit-speech x-webkit-grammar="builtin:translate">
<button type="submit" class="search-submit"></button>
</form>
<a class="link-ranking" href="//www.bilibili.com/ranking" target="_blank"><span>排行榜</span></a>
</div>
</div>
</div>
</div>
<div class="b-page-body">
<!--[if lt IE 7]>
<script type="text/javascript" language="JavaScript">
window.location="/newlist.html";
</script>
<![endif]-->
<script type="text/javascript">
var pageLoadStart = (new Date()).getTime();
</script>
<div class="index-container" id="index_container">
<!--顶部-->
<div class="container-top-wrapper">
<div class="container-top" id="b_index_top">
<div class="b-l">
</div>
<div class="b-r">
<div class="top-list-wrapper"></div>
</div>
</div>
</div>
<!--新作推广-->
<div class="container-row" id="b_promote">
<div class="b-l">
<div class="b-head"></div>
<div class="b-body">
</div>
</div>
<div class="b-r">
<div class="b-head">
<div class="index-online">
<span class="web-online"><a href="/video/online.html" title="在线观看:2745231" target="_blank">在线人数:<em>1350853</em></a></span><i class="s-line"></i><span class="new-video"><a href="/newlist.html" target="_blank">最新投稿:<em>--</em></a></span>
</div>
</div>
<div class="b-body">
</div>
</div>
</div>
<script type="text/javascript">
window.indexNav = new IndexNavigator({
sortable: true,
nav: {
douga: {
name: "动画",
target: "#b_douga"
},
bangumi: {
name: "番剧",
target: "#b_bangumi"
},
guochuang: {
name: "国创",
target: "#b_guochuang"
},
music: {
name: "音乐",
target: "#b_music"
},
dance: {
name: "舞蹈",
target: "#b_dance"
},
game: {
name: "游戏",
target: "#b_game"
},
technology: {
name: "科技",
target: "#b_technology"
},
life: {
name: "生活",
target: "#b_life"
},
kichiku: {
name: "鬼畜",
target: "#b_kichiku"
},
fashion: {
name: "时尚",
target: "#b_fashion"
},
"ad-ad-1": {
name: "广告",
target: "#b_ad"
},
ent: {
name: "娱乐",
target: "#b_ent"
},
movie: {
name: "电影",
target: "#b_movie"
},
teleplay: {
name: "TV剧",
target: "#b_teleplay"
}
}
});
ModuleManage.load(indexBlock, {container: "#index_container", nav: indexNav});
indexNav.loadSetting();
</script>
</div>
</div>
<div class="footer">
<div class="footer-wrp">
<div class="footer-cnt clearfix">
<ul class="boston-postcards">
<li>
<div class="tips">bilibili</div>
<div class="cards"><a target="_blank" href="//www.bilibili.com/html/aboutUs.html">关于我们</a></div>
<div class="cards"><a target="_blank" href="//www.bilibili.com/html/friends-links.html">友情链接</a></div>
<div class="cards"><a target="_blank" href="//bmall.bilibili.com/#!/">哔哩哔哩周边</a></div>
<div class="cards"><a target="_blank" href="//www.bilibili.com/html/contact.html">联系我们</a></div>
<div class="cards"><a target="_blank" href="//www.bilibili.com/html/join.html">加入我们</a></div>
<div class="cards"><a target="_blank" href="https://account.bilibili.com/site/ident.html">官方认证</a></div>
</li>
<li>
<div class="tips">传送门</div>
<div class="cards"><a target="_blank" href="//www.bilibili.com/html/help.html">帮助中心</a></div>
<div class="cards"><a target="_blank" href="//www.bilibili.com/video/av120040/">高级弹幕</a></div>
<div class="cards"><a target="_blank" href="//www.bilibili.com/event">活动专题页</a></div>
<div class="cards"><a target="_blank" href="//www.bilibili.com/html/copyright.html">侵权申诉</a></div>
<div class="cards"><a target="_blank" href="https://account.bilibili.com/answer/addq">分院帽计划</a></div>
<div class="cards"><a target="_blank" href="//activity.bilibili.com/">活动中心</a></div>
<div class="cards"><a target="_blank" href="http://link.acg.tv">用户反馈论坛</a></div>
<div class="cards"><a target="_blank" href="http://h.bilibili.com/wallpaper?action=list">壁纸站</a></div>
<div class="cards"><a target="_blank" href="http://www.bilibili.com/html/cele.html">名人堂</a></div>
</li>
<li>
<div class="block right">
<a target="_blank" href="//app.bilibili.com/">
<div class="phone">
<div class="pic"></div>
<em>手机端下载</em>
<div class="qrcode-box-wrp">
<div class="qrcode-box qrcode-app">
<div class="qrcode-box-arrow">
</div>
</div>
</div>
</div>
</a>
<a target="_blank" href="http://weibo.com/bilibiliweb">
<div class="weibo">
<div class="pic"></div>
<em>新浪微博</em>
<div class="qrcode-box-wrp">
<div class="qrcode-box qrcode-weibo">
<div class="qrcode-box-arrow">
</div>
</div>
</div>
</div>
</a>
<a id="weixin">
<div class="weixin">
<div class="pic"></div>
<em>官方微信</em>
<div class="qrcode-box-wrp bigvip-qrcode">
<div class="qrcode-box qrcode-weixin">
<div class="qrcode-box-arrow">
</div>
</div>
</div>
</div>
</a>
</div>
</li>
</ul>
<div class="partner">
<div class="block left" style="padding-top: 0px;">
<div class="partner-banner"></div>
</div>
<div class="block left" style="margin: 0px 68px 0 115px;line-height:24px;float: none;">
<p>广播电视节目制作经营许可证:<span>(沪)字第1248号 </span> | 网络文化经营许可证:<span>沪网文[2013]0480-056号</span> | 信息网络传播视听节目许可证:<span>0910417</span> | 互联网ICP备案:<span>沪ICP备13002172号-3</span> 沪ICP证:<span>沪B2-20100043</span> | 违法不良信息举报邮箱:help@bilibili.com | 违法不良信息举报电话:4000233233转3</p>
<p>网上有害信息举报专区:<a href="http://www.12377.cn/?spm=a2hww.20023042.0.0" target="_blank"><img src="//static.hdslb.com/images/12377.png" width="16" height="16" style="vertical-align: sub;"> 中国互联网违法和不良信息举报中心</a> | <a href="http://www.shjbzx.cn" target="_blank"><i class="icons-footer icons-footer-report"></i><span> 上海互联网举报中心</span></a> | <a href="http://jb.ccm.gov.cn/" target="_blank">12318 全国文化市场举报网站</a></p>
</div>
</div>
</div>
</div>
</div>
<script type="text/javascript">loadLoginStatus();</script>
<script type="text/javascript" src="//www.bilibili.com/online.js"></script>
<div style="display:none;">
<script type="text/javascript">
$(function () {
$.ajax({url: '//data.bilibili.com/rec.js', cache: true, dataType: 'script'});
$('<scr' + 'ipt type="text/javascript" src="//static.hdslb.com/js/bfd.js" charset="UTF-8"></scri' + 'pt>').appendTo('body');
// $('<scr' + 'ipt type="text/javascript" src="//s11.cnzz.com/stat.php?id=2724999&web_id=2724999" charset="UTF-8"></scri' + 'pt>').appendTo('body');
$('<scr' + 'ipt type="text/javascript" src="//tajs.qq.com/stats?sId=9156259" charset="UTF-8"></scri' + 'pt>').appendTo('body');
});
</script>
<script>
var myUrl = window.location.href ;
if( myUrl.indexOf('//www.bilibili.com/video/life.html') >= 0 ){
var body_object = {
speed : 1 ,
face : 'no-face'
};
var error_object = {
Vtimeout : 1000 ,
b : 2
}
var config = {
sample : 1,
errorTracker : true ,
resourceTracker: false ,
scrollTracker: true,
msgObjects : 'error_object|body_object'
};
var jq = document.createElement('script');
jq.src = "//s1.hdslb.com/bfs/static/log/report/output.6753c.js?v=1";
document.getElementsByTagName('body')[0].appendChild(jq);
var det = document.createElement('script');
det.src = "//s1.hdslb.com/bfs/static/script-detection/detection.js?v=1";
document.getElementsByTagName('body')[0].appendChild(det);
}
</script>
<script>
var cnzz_s_tag = document.createElement('script');
cnzz_s_tag.type = 'text/javascript';
cnzz_s_tag.async = true;
cnzz_s_tag.charset = "utf-8";
cnzz_s_tag.src = "https://s11.cnzz.com/stat.php?id=2724999&web_id=2724999&async=1";
var root_s = document.getElementsByTagName('script')[0];
root_s.parentNode.insertBefore(cnzz_s_tag, root_s);
</script>
</div>
</body>
</html>
<!DOCTYPE html>
<html lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>哔哩哔哩 (゜-゜)つロ 干杯~-bilibili</title>
<meta name="description" content="bilibili是国内知名的视频弹幕网站,这里有最及时的动漫新番,最棒的ACG氛围,最有创意的Up主。大家可以在这里找到许多欢乐。">
<meta name="keywords" content="B站,弹幕,字幕,AMV,MAD,MTV,ANIME,动漫,动漫音乐,游戏,游戏解说,ACG,galgame,动画,番组,新番,初音,洛天依,vocaloid">
<meta name="renderer" content="webkit">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<link rel="shortcut icon" href="//static.hdslb.com/images/favicon.ico">
<link rel="search" type="application/opensearchdescription+xml" href="//static.hdslb.com/opensearch.xml" title="哔哩哔哩" />
<link rel="stylesheet" href="//static.hdslb.com/images/jquery-ui/custom/jquery-ui.css" type="text/css">
<link rel="stylesheet" href="//static.hdslb.com/css/core-v5/page-core.css" type="text/css" />
<script type="text/javascript" src="//static.hdslb.com/js/jquery.min.js"></script>
<script type="text/javascript" src="//static.hdslb.com/js/jquery-ui.min.js"></script>
<script type="text/javascript" src="//static.hdslb.com/js/core-v5/base.core.js"></script>
<script type="text/javascript" src="//s2.hdslb.com/bfs/cm/st/seed.js"></script>
<meta name="fragment" content="!">
<link rel="stylesheet" type="text/css" href="//static.hdslb.com/css/index.css" />
<script type="text/javascript" src="//static.hdslb.com/js/core-v5/page.core.js"></script>
<script type="text/javascript" src="//static.hdslb.com/js/core-v5/page.index.js"></script>
<style> body { min-height: 1500px; } </style>
</head>
<body>
<!-- 2017-05-04 15:45:04 --> <script type="text/javascript">biliAdjust();
$(function () {
biliAdjust(true);
$(window).resize(biliAdjust);
});</script>
<div class="float_window"><div class="close"></div><div id="float_window"></div></div>
<div class="z_top_container">
<div class="z_top b-header-blur">
<div class="b-header-mask-wrp"><div class="b-header-mask-bg"></div><div class="b-header-mask"></div></div>
<div class="z_header">
<div class="z_top_nav">
<!--<div id="httpsNotWorkTips">
<text style="font-family: 'PingFang SC'; font-size: 16px; font-variant-ligatures: normal; orphans: 2; widows: 2; color: red;">访问异常?</text><span style="font-family: 'PingFang SC'; font-size: medium; font-variant-ligatures: normal; orphans: 2; widows: 2;">&nbsp;</span><a style="font-family: 'PingFang SC'; font-size: medium; font-variant-ligatures: normal; orphans: 2; widows: 2; color: blue;" target="_blank" href="http://www.bilibili.com/html/diagnostics.html">【点击这里】</a><span style="font-family: 'PingFang SC'; font-size: medium; font-variant-ligatures: normal; orphans: 2; widows: 2;">&nbsp;</span><text style="font-family: 'PingFang SC'; font-size: 16px; font-variant-ligatures: normal; orphans: 2; widows: 2; color: red;">请将的诊断结果与系统环境、正在使用的浏览器信息发送给我们,邮箱:bug@bilibili.com,或进入</text><span style="font-family: 'PingFang SC'; font-size: medium; font-variant-ligatures: normal; orphans: 2; widows: 2;">&nbsp;</span><a style="font-family: 'PingFang SC'; font-size: medium; font-variant-ligatures: normal; orphans: 2; widows: 2; color: blue;" target="_blank" href="http://link.acg.tv">【用户反馈论坛】</a><span style="font-family: 'PingFang SC'; font-size: medium; font-variant-ligatures: normal; orphans: 2; widows: 2;">&nbsp;</span><text style="font-family: 'PingFang SC'; font-size: 16px; font-variant-ligatures: normal; orphans: 2; widows: 2; color: red;">反映。</text><span style=" font-size:12pt;font-family:DengXian ;;;"><br></span>
</div>-->
<ul>
<li class="home">
<a class="i-link" href="//www.bilibili.com/index.html"><span>主站</span></a>
</li>
<li class="hbili"><a class="i-link" href="http://h.bilibili.com/" title="画友">画友</a></li>
<li class="b-gc" hasframe="true">
<a class="i-link" href="//game.bilibili.com/" title="游戏中心">游戏中心</a>
<div class="i_div game" data-frame="game"></div>
</li>
<li class="live" hasframe="true">
<a class="i-link" target="_blank" href="//live.bilibili.com" title="直播">直播</a>
<div class="i_div stream" data-frame="stream"></div>
</li>
<li class="b-zb"><a class="i-link" target="_blank" href="//bmall.bilibili.com/#!/" title="周边">周边</a></li>
<li style='display:none' class="b-ml"><a class="i-link" target="_blank" href="//bml.bilibili.com/index2016/?nav" title="BML">BML</a></li>
<li class="shouji">
<a class="i-link" target="_blank" href="//app.bilibili.com" title="移动端">移动端</a>
<div class="mobile-p-box"><div class="mobile-p-qrcode"></div></div>
</li>
</ul>
</div>
<div class="uns_box">
<ul class="menu">
<li id="i_menu_profile_btn" guest="no" class="u-i i_user" i_menu="#i_menu_profile">
<a class="i-link" href="//space.bilibili.com/" target="_blank">
<img class="i_face">
</a>
<div id="i_menu_profile" class="i_menu">
<div class="i_menu_bg_t"></div>
<div class="info clearfix"><div class="uname"></div><div class="coin"></div></div>
<div class="member-menu-wrp">
<ul class="member-menu">
<li><a href="https://account.bilibili.com/site/home" target="_blank" class="account"><i class="b-icon b-icon-p-account"></i>个人中心</a></li>
<li><a href="http://member.bilibili.com/v/#/article" target="_blank" class="member"><i class="b-icon b-icon-p-member"></i>投稿管理</a></li>
<li><a href="https://pay.bilibili.com/" target="_blank" class="wallet"><i class="b-icon b-icon-p-wallet"></i>B币钱包</a></li>
<li><a href="//live.bilibili.com/i" target="_blank" class="live"><i class="b-icon b-icon-p-live"></i>直播中心</a></li>
</ul>
</div>
<div class="member-bottom">
<a class="logout" href="https://account.bilibili.com/login?act=exit">退出</a>
</div>
</div>
</li>
<li id="i_menu_become_vip" guest="no" i_menu="become_vip" class="u-i">
<a class="i-link" href="//big.bilibili.com/site/big.html" target="_blank">成为大会员</a>
</li>
<li id="i_menu_community_msg_btn" guest="no" i_menu="community_msg" class="u-i">
<a class="i-link" href="//message.bilibili.com" target="_blank">消息</a>
</li>
<li id="i_menu_msg_btn" guest="no" i_menu="#dyn_wnd" class="u-i">
<div class="num" id="dynamic_num_total"></div>
<a class="i-link" href="//www.bilibili.com/account/dynamic" target="_blank">动态</a>
</li>
<li id="i_menu_fav_btn" guest="no" i_menu="#i_menu_fav" class="u-i">
<a class="i-link" href="//space.bilibili.com/#!/favlist" target="_blank">收藏夹</a>
</li>
<li id="i_menu_login_reg" guest="yes" class="u-i">
<a id="i_menu_login_btn" class="i-link login" href="https://account.bilibili.com/login"><span>登录</span></a><i class="s-line"></i><a id="i_menu_register_btn" class="i-link reg" href="https://www.bilibili.com/register"><span>注册</span></a>
</li>
<li id="i_menu_history_btn" class="u-i">
<a class="i-link" href="//www.bilibili.com/account/history">历史</a>
</li>
<li class="u-i b-post">
<a class="i-link" href="http://member.bilibili.com/v/video/submit.html" target="_blank">投 稿</a>
<ul class="s-menu">
<li><a href="http://member.bilibili.com/v/video/submit.html" target="_blank"><i class="b-icon b-icon-vp"></i><em>视频投稿</em></a></li>
<li><a href="http://member.bilibili.com/v/#/article" target="_blank"><i class="b-icon b-icon-vm"></i><em>投稿管理</em></a></li>
<li><a href="http://member.bilibili.com/v/" target="_blank"><i class="b-icon b-icon-vc"></i><em>创作中心</em></a></li>
</ul>
</li>
</ul>
</div>
</div>
</div>
</div>
<div class="header">
<div class="h-center">
<a href="//www.bilibili.com/index.html" class="logo"></a>
<a href="//www.bilibili.com/random" target="_blank" title="随便找个视频看看?" class="lsb"></a>
</div>
<div class="num">
<div class="menu-wrapper">
<ul class="nav-menu">
<li class="m-i home"><a class="i-link" href="//www.bilibili.com/index.html"><em>首页</em></a></li>
<!-- 动画 -->
<li class="m-i" data-tid="1">
<a class="i-link" href="//www.bilibili.com/video/douga.html"><em>动画</em><div class="v-num"><span class="addnew_1">--</span></div></a>
<ul class="i_num">
<li><a href="//www.bilibili.com/video/douga-mad-1.html"><b>MAD·AMV<em></em></b></a></li>
<li><a href="//www.bilibili.com/video/douga-mmd-1.html"><b>MMD·3D<em></em></b></a></li>
<li><a href="//www.bilibili.com/video/douga-voice-1.html"><b>短片·手书·配音<em></em></b></a></li>
<li><a href="//www.bilibili.com/video/douga-else-1.html"><b>综合<em></em></b></a></li>
</ul>
</li>
<!-- 番剧 -->
<li class="m-i" data-tid="13">
<a class="i-link" href="//bangumi.bilibili.com/22/"><em>番剧</em><div class="v-num"><span class="addnew_13">--</span></div></a>
<ul class="i_num">
<li><a href="//www.bilibili.com/video/bangumi-two-1.html"><b>连载动画<em></em></b></a></li>
<li><a href="//www.bilibili.com/video/part-twoelement-1.html"><b>完结动画<em></em></b></a></li>
<li><a href="//www.bilibili.com/video/douga-else-information-1.html"><b>资讯<em></em></b></a></li>
<li><a href="//www.bilibili.com/video/bagumi_offical_1.html"><b>官方延伸<em></em></b></a></li>
<li><a href="//bangumi.bilibili.com/anime/timeline"><b>新番时间表<em></em></b></a></li>
<li><a href="//bangumi.bilibili.com/anime/index"><b>番剧索引<em></em></b></a></li>
</ul>
</li>
<!-- 国创 -->
<li class="m-i" data-tid="167">
<a class="i-link" href="//bangumi.bilibili.com/guochuang/"><em>国创</em><div class="v-num"><span class="addnew_167">--</span></div></a>
<ul class="i_num">
<li><a href="//www.bilibili.com/video/bangumi_chinese_1.html"><b>国产动画<em></em></b></a></li>
<li><a href="//www.bilibili.com/video/guochuang-fanvid-1.html"><b>国产原创相关<em></em></b></a></li>
<li><a href="//www.bilibili.com/video/glove-puppetry-1.html"><b>布袋戏<em></em></b></a></li>
<li><a href="//www.bilibili.com/video/guochuang-offical-1.html"><b>资讯<em></em></b></a></li>
<li><a href="//bangumi.bilibili.com/guochuang/timeline"><b>新番时间表<em></em></b></a></li>
<li><a href="//bangumi.bilibili.com/guochuang/index"><b>国产动画索引<em></em></b></a></li>
</ul>
</li>
<!-- 音乐 -->
<li class="m-i" data-tid="3">
<a class="i-link" href="//www.bilibili.com/video/music.html"><em>音乐</em><div class="v-num"><span class="addnew_3">--</span></div></a>
<ul class="i_num">
<li><a href="//www.bilibili.com/video/music-original-1.html"><b>原创音乐<em></em></b></a></li>
<li><a href="//www.bilibili.com/video/music-Cover-1.html"><b>翻唱<em></em></b></a></li>
<li><a href="//www.bilibili.com/video/music-vocaloid-1.html"><b>VOCALOID·UTAU<em></em></b></a></li>
<li><a href="//www.bilibili.com/video/music-perform-1.html"><b>演奏<em></em></b></a></li>
<li><a href="//www.bilibili.com/video/music-coordinate-1.html"><b>三次元音乐<em></em></b></a></li>
<li><a href="//www.bilibili.com/video/music-oped-1.html"><b>OP/ED/OST<em></em></b></a></li>
<li><a href="//www.bilibili.com/video/music-collection-1.html"><b>音乐选集<em></em></b></a></li>
</ul>
</li>
<!-- 舞蹈 -->
<li class="m-i" data-tid="129">
<a class="i-link" href="//www.bilibili.com/video/dance.html"><em>舞蹈</em><div class="v-num"><span class="addnew_129">--</span></div></a>
<ul class="i_num">
<li><a href="//www.bilibili.com/video/dance-1.html"><b>宅舞<em></em></b></a></li>
<li><a href="//www.bilibili.com/video/three-dimension-dance-1.html"><b>三次元舞蹈<em></em></b></a></li>
<li><a href="//www.bilibili.com/video/dance-demo-1.html"><b>舞蹈教程<em></em></b></a></li>
</ul>
</li>
<!-- 游戏 -->
<li class="m-i" data-tid="4">
<a class="i-link" href="//www.bilibili.com/video/game.html"><em>游戏</em><div class="v-num"><span class="addnew_4">--</span></div></a>
<ul class="i_num">
<li><a href="//www.bilibili.com/video/videogame-1.html"><b>单机游戏<em></em></b></a></li>
<li><a href="//www.bilibili.com/video/esports-1.html"><b>电子竞技<em></em></b></a></li>
<li><a href="//www.bilibili.com/video/mobilegame-1.html"><b>手机游戏<em></em></b></a></li>
<li><a href="//www.bilibili.com/video/onlinegame-1.html"><b>网络游戏<em></em></b></a></li>
<li><a href="//www.bilibili.com/video/boardgame-1.html"><b>桌游棋牌<em></em></b></a></li>
<li><a href="//www.bilibili.com/video/gmv-1.html"><b>GMV<em></em></b></a></li>
<li><a href="//www.bilibili.com/video/music-game-1.html"><b>音游<em></em></b></a></li>
<li><a href="//www.bilibili.com/video/game-mugen-1.html"><b>Mugen<em></em></b></a></li>
</ul>
</li>
<!-- 科技 -->
<li class="m-i" data-tid="36">
<a class="i-link" href="//www.bilibili.com/video/technology.html"><em>科技</em><div class="v-num"><span class="addnew_36">--</span></div></a>
<ul class="i_num">
<li><a href="//www.bilibili.com/video/tech-popular-science-1.html"><b>纪录片<em></em></b></a></li>
<li><a href="//www.bilibili.com/video/tech-fun-1.html"><b>趣味科普人文<em></em></b></a></li>
<li><a href="//www.bilibili.com/video/tech-wild-1.html"><b>野生技术协会<em></em></b></a></li>
<li><a href="//www.bilibili.com/video/speech-course-1.html"><b>演讲·公开课<em></em></b></a></li>
<li><a href="//www.bilibili.com/video/tech-future-military-1.html"><b>星海<em></em></b></a></li>
<li><a href="//www.bilibili.com/video/tech-future-digital-1.html"><b>数码<em></em></b></a></li>
<li><a href="//www.bilibili.com/video/tech-future-other-1.html"><b>机械<em></em></b></a></li>
</ul>
</li>
<!-- 生活 -->
<li class="m-i" data-tid="160">
<a class="i-link" href="//www.bilibili.com/video/life.html"><em>生活</em><div class="v-num"><span class="addnew_160">--</span></div></a>
<ul class="i_num">
<li><a href="//www.bilibili.com/video/ent_funny_1.html"><b>搞笑<em></em></b></a></li>
<li><a href="//www.bilibili.com/video/ent-life-1.html"><b>日常<em></em></b></a></li>
<li><a href="//www.bilibili.com/video/ent-food-1.html"><b>美食圈<em></em></b></a></li>
<li><a href="//www.bilibili.com/video/ent-animal-1.html"><b>动物圈<em></em></b></a></li>
<li><a href="//www.bilibili.com/video/ent-handmake-1.html"><b>手工<em></em></b></a></li>
<li><a href="//www.bilibili.com/video/ent-painting-1.html"><b>绘画<em></em></b></a></li>
<li><a href="//www.bilibili.com/video/ent-sports-1.html"><b>运动<em></em></b></a></li>
<li><a href="//www.bilibili.com/video/others-1.html"><b>其他<em></em></b></a></li>
</ul>
</li>
<!-- 鬼畜 -->
<li class="m-i" data-tid="119">
<a class="i-link" href="//www.bilibili.com/video/kichiku.html"><em>鬼畜</em><div class="v-num"><span class="addnew_119">--</span></div></a>
<ul class="i_num">
<li><a href="//www.bilibili.com/video/ent-Kichiku-1.html"><b>鬼畜调教<em></em></b></a></li>
<li><a href="//www.bilibili.com/video/douga-kichiku-1.html"><b>音MAD<em></em></b></a></li>
<li><a href="//www.bilibili.com/video/kichiku-manual_vocaloid-1.html"><b>人力VOCALOID<em></em></b></a></li>
<li><a href="//www.bilibili.com/video/kichiku-course-1.html"><b>教程演示<em></em></b></a></li>
</ul>
</li>
<!-- 时尚 -->
<li class="m-i" data-tid="155">
<a class="i-link" href="//www.bilibili.com/video/fashion.html"><em>时尚</em><div class="v-num"><span class="addnew_155">--</span></div></a>
<ul class="i_num">
<li><a href="//www.bilibili.com/video/fashion-makeup-fitness-1.html"><b>美妆<em></em></b></a></li>
<li><a href="//www.bilibili.com/video/fashion-clothing-1.html"><b>服饰<em></em></b></a></li>
<li><a href="//www.bilibili.com/video/fashion-body-1.html"><b>健身<em></em></b></a></li>
<li><a href="//www.bilibili.com/video/fashion-info-1.html"><b>资讯<em></em></b></a></li>
</ul>
</li>
<!-- 广告 -->
<li class="m-i" data-tid="165">
<a class="i-link" href="//www.bilibili.com/video/ad-ad-1.html"><em>广告</em><div class="v-num"><span class="addnew_165">--</span></div></a>
</li>
<!-- 娱乐 -->
<li class="m-i" data-tid="5">
<a class="i-link" href="//www.bilibili.com/video/ent.html"><em>娱乐</em><div class="v-num"><span class="addnew_5">--</span></div></a>
<ul class="i_num">
<li><a href="//www.bilibili.com/video/ent-variety-1.html"><b>综艺<em></em></b></a></li>
<li><a href="//www.bilibili.com/video/ent-circle-1.html"><b>明星<em></em></b></a></li>
<li><a href="//www.bilibili.com/video/ent-korea-1.html"><b>Korea相关<em></em></b></a></li>
</ul>
</li>
<!-- 影视 -->
<li class="m-i" data-tid="23">
<a class="i-link" href="//bangumi.bilibili.com/33/"><em>影视</em><div class="v-num"><span class="addnew_23_11">--</span></div></a>
<ul class="i_num">
<li><a href="//bangumi.bilibili.com/movie/"><b>电影<em></em></b></a></li>
<li><a href="//bangumi.bilibili.com/tv/"><b>电视剧<em></em></b></a></li>
</ul>
</li>
<li class="m-i m-i-square">
<a class="i-link" href="//www.bilibili.com/square"><em>广场</em></a>
<div class="i_num">
<ul>
<li><a href="//activity.bilibili.com"><i class="b-icon b-icon-n-activity"></i><b>活动中心</b></a></li>
<li><a href="//game.bilibili.com"><i class="b-icon b-icon-n-gc"></i><b>游戏中心</b></a></li>
<li><a href="//news.bilibili.com"><i class="b-icon b-icon-n-new"></i><b>新闻中心</b></a></li>
<li><a href="//h.bilibili.com/"><i class="b-icon b-icon-n-h"></i><b>画友</b></a></li>
<li><a href="//www.bilibili.com/mango"><i class="b-icon b-icon-n-mango"></i><b>芒果TV</b></a></li>
</ul>
</div>
</li>
<li class="m-i m-i-live m-i-last">
<a class="i-link" href="//live.bilibili.com"><em>直播</em></a>
<ul class="i_num">
<li><a href="//live.bilibili.com/subject"><b>推荐主播<em></em></b></a></li>
<li><a href="//live.bilibili.com/ent-life"><b>生活娱乐<em></em></b></a></li>
<li><a href="//live.bilibili.com/draw"><b>绘画专区<em></em></b></a></li>
<li><a href="//live.bilibili.com/sing-dance"><b>唱见舞见<em></em></b></a></li>
<li><a href="//live.bilibili.com/otaku"><b>御宅文化<em></em></b></a></li>
<li><a href="//live.bilibili.com/single"><b>单机联机<em></em></b></a></li>
<li><a href="//live.bilibili.com/online"><b>网络游戏<em></em></b></a></li>
<li><a href="//live.bilibili.com/e-sports"><b>电子竞技<em></em></b></a></li>
<li><a href="//live.bilibili.com/mobile-game"><b>手游直播<em></em></b></a></li>
<li><a href="//live.bilibili.com/movie"><b>放映厅<em></em></b></a></li>
</ul>
</li>
<li class="m-i m-i-blackroom"><a class="i-link" href="//www.bilibili.com/blackroom"><em>小黑屋</em></a></li>
</ul>
<div class="menu-r">
<a id="random_p" class="random-p" target="_blank"></a>
</div>
<div class="search">
<form action="//search.bilibili.com/all" id="searchform" target="_blank">
<input name="keyword" type="text" class="search-keyword" id="search-keyword" autocomplete="off" accesskey="s" x-webkit-speech x-webkit-grammar="builtin:translate">
<button type="submit" class="search-submit"></button>
</form>
<a class="link-ranking" href="//www.bilibili.com/ranking" target="_blank"><span>排行榜</span></a>
</div>
</div>
</div>
</div>
<div class="b-page-body">
<!--[if lt IE 7]>
<script type="text/javascript" language="JavaScript">
window.location="/newlist.html";
</script>
<![endif]-->
<script type="text/javascript">
var pageLoadStart = (new Date()).getTime();
</script>
<div class="index-container" id="index_container">
<!--顶部-->
<div class="container-top-wrapper">
<div class="container-top" id="b_index_top">
<div class="b-l">
</div>
<div class="b-r">
<div class="top-list-wrapper"></div>
</div>
</div>
</div>
<!--新作推广-->
<div class="container-row" id="b_promote">
<div class="b-l">
<div class="b-head"></div>
<div class="b-body">
</div>
</div>
<div class="b-r">
<div class="b-head">
<div class="index-online">
<span class="web-online"><a href="/video/online.html" title="在线观看:2747227" target="_blank">在线人数:<em>1355718</em></a></span><i class="s-line"></i><span class="new-video"><a href="/newlist.html" target="_blank">最新投稿:<em>--</em></a></span>
</div>
</div>
<div class="b-body">
</div>
</div>
</div>
<script type="text/javascript">
window.indexNav = new IndexNavigator({
sortable: true,
nav: {
douga: {
name: "动画",
target: "#b_douga"
},
bangumi: {
name: "番剧",
target: "#b_bangumi"
},
guochuang: {
name: "国创",
target: "#b_guochuang"
},
music: {
name: "音乐",
target: "#b_music"
},
dance: {
name: "舞蹈",
target: "#b_dance"
},
game: {
name: "游戏",
target: "#b_game"
},
technology: {
name: "科技",
target: "#b_technology"
},
life: {
name: "生活",
target: "#b_life"
},
kichiku: {
name: "鬼畜",
target: "#b_kichiku"
},
fashion: {
name: "时尚",
target: "#b_fashion"
},
"ad-ad-1": {
name: "广告",
target: "#b_ad"
},
ent: {
name: "娱乐",
target: "#b_ent"
},
movie: {
name: "电影",
target: "#b_movie"
},
teleplay: {
name: "TV剧",
target: "#b_teleplay"
}
}
});
ModuleManage.load(indexBlock, {container: "#index_container", nav: indexNav});
indexNav.loadSetting();
</script>
</div>
</div>
<div class="footer">
<div class="footer-wrp">
<div class="footer-cnt clearfix">
<ul class="boston-postcards">
<li>
<div class="tips">bilibili</div>
<div class="cards"><a target="_blank" href="//www.bilibili.com/html/aboutUs.html">关于我们</a></div>
<div class="cards"><a target="_blank" href="//www.bilibili.com/html/friends-links.html">友情链接</a></div>
<div class="cards"><a target="_blank" href="//bmall.bilibili.com/#!/">哔哩哔哩周边</a></div>
<div class="cards"><a target="_blank" href="//www.bilibili.com/html/contact.html">联系我们</a></div>
<div class="cards"><a target="_blank" href="//www.bilibili.com/html/join.html">加入我们</a></div>
<div class="cards"><a target="_blank" href="https://account.bilibili.com/site/ident.html">官方认证</a></div>
</li>
<li>
<div class="tips">传送门</div>
<div class="cards"><a target="_blank" href="//www.bilibili.com/html/help.html">帮助中心</a></div>
<div class="cards"><a target="_blank" href="//www.bilibili.com/video/av120040/">高级弹幕</a></div>
<div class="cards"><a target="_blank" href="//www.bilibili.com/event">活动专题页</a></div>
<div class="cards"><a target="_blank" href="//www.bilibili.com/html/copyright.html">侵权申诉</a></div>
<div class="cards"><a target="_blank" href="https://account.bilibili.com/answer/addq">分院帽计划</a></div>
<div class="cards"><a target="_blank" href="//activity.bilibili.com/">活动中心</a></div>
<div class="cards"><a target="_blank" href="http://link.acg.tv">用户反馈论坛</a></div>
<div class="cards"><a target="_blank" href="http://h.bilibili.com/wallpaper?action=list">壁纸站</a></div>
<div class="cards"><a target="_blank" href="http://www.bilibili.com/html/cele.html">名人堂</a></div>
</li>
<li>
<div class="block right">
<a target="_blank" href="//app.bilibili.com/">
<div class="phone">
<div class="pic"></div>
<em>手机端下载</em>
<div class="qrcode-box-wrp">
<div class="qrcode-box qrcode-app">
<div class="qrcode-box-arrow">
</div>
</div>
</div>
</div>
</a>
<a target="_blank" href="http://weibo.com/bilibiliweb">
<div class="weibo">
<div class="pic"></div>
<em>新浪微博</em>
<div class="qrcode-box-wrp">
<div class="qrcode-box qrcode-weibo">
<div class="qrcode-box-arrow">
</div>
</div>
</div>
</div>
</a>
<a id="weixin">
<div class="weixin">
<div class="pic"></div>
<em>官方微信</em>
<div class="qrcode-box-wrp bigvip-qrcode">
<div class="qrcode-box qrcode-weixin">
<div class="qrcode-box-arrow">
</div>
</div>
</div>
</div>
</a>
</div>
</li>
</ul>
<div class="partner">
<div class="block left" style="padding-top: 0px;">
<div class="partner-banner"></div>
</div>
<div class="block left" style="margin: 0px 68px 0 115px;line-height:24px;float: none;">
<p>广播电视节目制作经营许可证:<span>(沪)字第1248号 </span> | 网络文化经营许可证:<span>沪网文[2013]0480-056号</span> | 信息网络传播视听节目许可证:<span>0910417</span> | 互联网ICP备案:<span>沪ICP备13002172号-3</span> 沪ICP证:<span>沪B2-20100043</span> | 违法不良信息举报邮箱:help@bilibili.com | 违法不良信息举报电话:4000233233转3</p>
<p>网上有害信息举报专区:<a href="http://www.12377.cn/?spm=a2hww.20023042.0.0" target="_blank"><img src="//static.hdslb.com/images/12377.png" width="16" height="16" style="vertical-align: sub;"> 中国互联网违法和不良信息举报中心</a> | <a href="http://www.shjbzx.cn" target="_blank"><i class="icons-footer icons-footer-report"></i><span> 上海互联网举报中心</span></a> | <a href="http://jb.ccm.gov.cn/" target="_blank">12318 全国文化市场举报网站</a></p>
</div>
</div>
</div>
</div>
</div>
<script type="text/javascript">loadLoginStatus();</script>
<script type="text/javascript" src="//www.bilibili.com/online.js"></script>
<div style="display:none;">
<script type="text/javascript">
$(function () {
$.ajax({url: '//data.bilibili.com/rec.js', cache: true, dataType: 'script'});
$('<scr' + 'ipt type="text/javascript" src="//static.hdslb.com/js/bfd.js" charset="UTF-8"></scri' + 'pt>').appendTo('body');
// $('<scr' + 'ipt type="text/javascript" src="//s11.cnzz.com/stat.php?id=2724999&web_id=2724999" charset="UTF-8"></scri' + 'pt>').appendTo('body');
$('<scr' + 'ipt type="text/javascript" src="//tajs.qq.com/stats?sId=9156259" charset="UTF-8"></scri' + 'pt>').appendTo('body');
});
</script>
<script>
var myUrl = window.location.href ;
if( myUrl.indexOf('//www.bilibili.com/video/life.html') >= 0 ){
var body_object = {
speed : 1 ,
face : 'no-face'
};
var error_object = {
Vtimeout : 1000 ,
b : 2
}
var config = {
sample : 1,
errorTracker : true ,
resourceTracker: false ,
scrollTracker: true,
msgObjects : 'error_object|body_object'
};
var jq = document.createElement('script');
jq.src = "//s1.hdslb.com/bfs/static/log/report/output.6753c.js?v=1";
document.getElementsByTagName('body')[0].appendChild(jq);
var det = document.createElement('script');
det.src = "//s1.hdslb.com/bfs/static/script-detection/detection.js?v=1";
document.getElementsByTagName('body')[0].appendChild(det);
}
</script>
<script>
var cnzz_s_tag = document.createElement('script');
cnzz_s_tag.type = 'text/javascript';
cnzz_s_tag.async = true;
cnzz_s_tag.charset = "utf-8";
cnzz_s_tag.src = "https://s11.cnzz.com/stat.php?id=2724999&web_id=2724999&async=1";
var root_s = document.getElementsByTagName('script')[0];
root_s.parentNode.insertBefore(cnzz_s_tag, root_s);
</script>
</div>
</body>
</html>
aria2c --conf-path=/usr/src/app/aria2.conf -D;
ossutil config --endpoint oss-cn-hangzhou.aliyuncs.com --access-key-id $OSS_ACCESS_ID --access-key-secret $OSS_ACCESS_KEY;
npm start
import axios from 'axios';
import config from './config';
import * as uuid from 'uuid';
import { XmlDocument } from 'xmldoc';
let apps = {};
const locales = ['zh-CN', 'zh-TW', 'en-US', 'ja-JP'];
const languagePack = ['zh-CN', 'en-US'];
const platforms = ['win32', 'darwin'];
const ygoproPlatforms = ['linux', 'osx', 'win32'];
const ygoproLocales = ['en-US', 'ja-JP', 'zh-CN'];
let wait = ms => new Promise(resolve => setTimeout(resolve, ms));
const lang = {
'en-US': {
'en-US': 'English',
'zh-CN': 'Simplified Chinese',
'zh-TW': 'Traditional Chinese',
'language_pack': 'Language Pack'
},
'zh-CN': {
'en-US': '英文',
'zh-CN': '简体中文',
'zh-TW': '繁体中文',
'language_pack': '语言包'
}
};
async function createPackage(app) {
return await axios.post(config.new_package, {
id: uuid.v1(),
appId: app.id,
locales: locales,
platforms: platforms,
version: '0.0.1',
});
}
async function createCustomPackage(app) {
return await axios.post(config.new_package, {
id: uuid.v1(),
appId: app.id,
locales: app.locales,
platforms: app.platforms,
version: '0.0.1',
});
}
async function updatePackage(app, pack) {
let { data } = await axios.get(config.old_metalinks(app.id));
const xml = new XmlDocument(data);
const rawUrl = xml.valueWithPath('file.url');
const url = rawUrl.replace('https://r.my-card.in/dist/', 'https://r.my-card.in/release/dist/');
console.log(pack._id, url);
return await axios.post(config.upload_url, {
_id: pack._id,
url
});
}
async function updateCustomPackage(app, pack) {
let metalink = `${app.id}-${pack.platforms[0]}`.replace('osx', 'darwin');
console.log(config.old_metalinks(metalink));
let { data } = await axios.get(config.old_metalinks(metalink));
const xml = new XmlDocument(data);
const rawUrl = xml.valueWithPath('file.url');
const url = rawUrl.replace('https://r.my-card.in/dist/', 'https://r.my-card.in/release/dist/');
console.log(pack._id, url);
return await axios.post(config.upload_url, {
_id: pack._id,
url
});
}
async function handleYgopro(app) {
console.log(ygoproPlatforms, ygoproLocales);
for (let platform of ygoproPlatforms) {
for (let locale of ygoproLocales) {
try {
app.platforms = [platform];
app.locales = [locale];
console.log('正在处理yogopro', app.platforms, app.locales);
let { data } = await createCustomPackage(app);
await updateCustomPackage(app, data);
// await wait(180000);
} catch (e) {
console.log(e);
}
}
}
}
async function handleDesume(app) {
for (let platform of platforms) {
app.platforms = [platform];
app.locales = locales;
console.log('正在处理desume', app.platforms, app.locales);
let { data } = await createCustomPackage(app);
await updateCustomPackage(app, data);
}
}
async function createApp(app) {
return await axios.post(config.new_app(app.id), {
id: app.id,
name: app.name,
author: '1',
});
}
function handleName(app) {
if (!app.parent) {
console.log('parent 不存在', app.parent);
}
return Object.assign({}, ...languagePack.map(language => ({
/* tslint:disable */
[language]: `${apps[app.parent]['name'][language]} ${lang[language]['language_pack']} (${app.locales.map(locale => lang[language][locale])})`
/* tslint:enable */
})));
}
async function updateApp(app) {
const {
id, name, description, developers, publishers, released_at, category, tags, dependencies, references,
homepage, actions, version, conference, icon, cover, background, locales, author, news, ...other
} = app;
return await
axios.patch(config.new_app(app.id), {
id,
name: name || handleName(app),
description,
developers,
publishers,
released_at,
category,
tags,
dependencies,
references,
homepage,
actions,
version,
conference,
icon,
cover,
background,
locales: locales || [],
news: {},
...other,
});
}
async function main() {
let { data } = await axios.get(config.old_apps_json);
let newApps = await axios.get(config.new_apps_json);
newApps.data.map(app => {
apps[app['id']] = app;
});
for (let app of data) {
if (!['test'].includes(app['id']) && !apps[app['id']]) {
await createApp(app);
}
}
for (let i = 0, t = 0, w = true; i <= data.length; i++ , t = 180000) {
try {
let app = data[i];
// if (w) {
// await wait(t);
// w = true;
// }
// if (!['ygopro', 'desmume', 'test'].includes(app['id'])) {
// console.log(`正在处理${app['id']}`);
// await updateApp(app);
// let { data } = await createPackage(app);
// await updatePackage(app, data);
// }
// if (app['id'] == 'ygopro') {
// await updateApp(app);
// await handleYgopro(app);
// }
if (app['id'] == 'desmume') {
await updateApp(app);
await handleDesume(app);
}
} catch (e) {
console.log(e.response.data);
w = false;
continue;
}
}
}
main();
nohup: 1: No such file or directory
{
"name": "application-name",
"version": "0.0.1",
"scripts": {
"start": "node server.js",
"server": "node server.js",
"tsc": "tsc",
"prestart": "tsc",
"test": "node test.js",
"pretest": "tsc"
},
"dependencies": {
"@types/joi": "^10.3.0",
"aliyun-oss-upload-stream": "^1.3.0",
"aliyun-sdk": "^1.9.22",
"aria2": "^3.0.0",
"async-busboy": "^0.4.0",
"axios": "^0.16.1",
"bluebird": "^3.5.0",
"dotenv": "^4.0.0",
"fs-extra-promise": "^1.0.1",
"inversify": "^3.3.0",
"iridium": "^7.1.6",
"joi": "^10.4.1",
"koa": "^2.0.0",
"koa-bodyparser": "^4.2.0",
"koa-hbs": "next",
"koa-log4": "^2.1.0",
"koa-router": "^7.0.1",
"mime": "^1.3.4",
"tmp": "0.0.31",
"uuid": "^3.0.1",
"vercomp": "^1.0.2"
},
"devDependencies": {
"@types/bluebird": "^3.5.0",
"@types/busboy": "^0.2.3",
"@types/fs-extra-promise": "^0.0.32",
"@types/isomorphic-fetch": "0.0.34",
"@types/koa": "^2.0.37",
"@types/koa-bodyparser": "^3.0.22",
"@types/koa-router": "^7.0.22",
"@types/lodash": "^4.14.63",
"@types/log4js": "0.0.32",
"@types/node": "^7.0.13",
"@types/pluralize": "0.0.27",
"@types/tmp": "0.0.32",
"@types/uuid": "^2.0.29",
"@types/xmldoc": "^0.5.0",
"isomorphic-fetch": "latest",
"lodash": "latest",
"nodemon": "^1.11.0",
"tslint": "^5.1.0",
"typescript": "^2.3.4",
"xmldoc": "^1.0.0"
}
}
import * as path from 'path';
import * as fs from 'fs-extra-promise';
import {archive, archiveSingle, caculateSHA256, crawlPath, untar} from './utils';
import {Archive, File} from '../src/models/Package';
const upload_path = path.join(__dirname, '../test/upload');
const release_path = path.join(__dirname, '../test/release');
const app_path = path.join(__dirname, '../test/apps');
export async function bundle(...args) {
const [package_id] = args;
console.log(`package ${package_id}`);
await fs.ensureDirAsync(release_path);
await fs.ensureDirAsync(app_path);
await fs.ensureDirAsync(upload_path);
const archive_path = path.join(release_path, 'downloads', package_id);
const package_path = path.join(app_path, package_id);
const uploadFile_path = path.join(upload_path, package_id);
// const full_path = path.join(archive_path, 'full');
// const sand_path = path.join(archive_path, 'sand');
const dist_path = path.join(archive_path, 'dist');
await fs.ensureDirAsync(archive_path);
await fs.ensureDirAsync(package_path);
// await fs.ensureDirAsync(full_path);
// await fs.ensureDirAsync(sand_path);
await fs.ensureDirAsync(dist_path);
// untar upload package
await untar(uploadFile_path, package_path);
let files = new Map<string, File>();
let archives = new Map<string, Archive>();
// let files = {}
await crawlPath(package_path, {
onFile: async (file) => {
let file_hash = await caculateSHA256(file);
files.set(file, {
path: path.relative(package_path, file),
hash: file_hash,
size: (await fs.statAsync(file)).size
});
let sand_file = path.join(dist_path, `${file_hash}.tar.gz`);
await archiveSingle(sand_file, [file], package_path);
let sand_hash = await caculateSHA256(sand_file);
archives.set(sand_file, {
path: path.relative(dist_path, sand_file),
hash: sand_hash,
size: (await fs.statAsync(sand_file)).size
});
await fs.renameAsync(sand_file, path.join(path.dirname(sand_file), `${sand_hash}.tar.gz`));
},
onDir: async (_files, _path, depth) => {
files.set(_path, {
path: path.relative(package_path, _path) || '.',
});
},
});
let filePath = path.join(dist_path, `${package_id}.tar.gz`);
await archive(filePath, await fs.readdirAsync(package_path), package_path);
const fullHash = await caculateSHA256(filePath);
const fullSize = (await fs.statAsync(filePath)).size;
let fullPath = path.join(dist_path, `${fullHash}.tar.gz`);
await fs.renameAsync(filePath, fullPath);
await fs.removeAsync(uploadFile_path);
await fs.removeAsync(package_path);
return {
archivePath: archive_path,
distPath: dist_path,
files: Array.from(files.values()),
archives: Array.from(archives.values()),
fullSize,
fullHash
};
}
import * as fs from 'fs-extra-promise';
import * as _fs from 'fs';
import * as crypto from 'crypto';
import * as child_process from 'child_process';
interface CrawOptions {
onDir: (files: string | string[], _path: string, depth: number) => Promise<void>;
onFile: (file: string) => Promise<void>;
}
export async function crawlPath(_path, options: CrawOptions, depth = 0) {
if (await isDir(_path)) {
depth += 1;
const files = await fs.readdirAsync(_path);
await options.onDir(files, _path, depth);
if (files) {
for (let fileName of files) {
const file = `${_path}/${fileName}`;
if (await isDir(file)) {
await crawlPath(file, options, depth);
} else if (await isFile(file)) {
await options.onFile(file);
}
}
}
} else if (await isFile(_path)) {
await options.onFile(_path);
}
}
export async function isDir(path) {
return (await fs.lstatAsync(path)).isDirectory();
}
export async function isFile(path) {
return (await fs.lstatAsync(path)).isFile();
}
export function archiveSingle(archive: string, files: string[], directory: string): Promise<void> {
// const dir = fs.createWriteStream(archive)
// const pack = tar.Pack()
// .on('error', () => console.log('error'))
// .on('end',() => {})
// fstream.Reader({type: 'File', path: file})
// .pipe(pack)
// .pipe(dir)
// return tar.pack(file).pipe(_fs.createWriteStream(archive))
return new Promise<void>((resolve, reject) => {
let child = child_process.spawn('tar', ['-czf', archive, '-P', '-C', directory].concat(files), {stdio: 'inherit'});
child.on('exit', (code) => {
if (code == 0) {
resolve();
} else {
reject(code);
}
});
child.on('error', (error) => {
reject(error);
});
});
}
export function archive(archive: string, files: string[], directory: string): Promise<void> {
return new Promise<void>((resolve, reject) => {
let child = child_process.spawn('tar', ['-czf', archive, '-C', directory].concat(files), {stdio: 'inherit'});
child.on('exit', (code) => {
if (code == 0) {
resolve();
} else {
reject(code);
}
});
child.on('error', (error) => {
reject(error);
});
});
}
export function untar(archive: string, directory: string): Promise<void> {
return new Promise<void>((resolve, reject) => {
let child = child_process.spawn('tar', ['-xf', archive, '-C', directory], {stdio: 'inherit'});
child.on('exit', (code) => {
if (code == 0) {
resolve();
} else {
reject(code);
}
});
child.on('error', (error) => {
reject(error);
});
});
}
export function caculateSHA256(file: string): Promise<string> {
return new Promise((resolve, reject) => {
let input = _fs.createReadStream(file);
const hash = crypto.createHash('sha256');
hash.on('error', (error: Error) => {
reject(error);
});
input.on('error', (error: Error) => {
reject(error);
});
hash.on('readable', () => {
let data = hash.read();
if (data) {
resolve((<Buffer>data).toString('hex'));
}
});
input.pipe(hash);
});
}
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 * as hbs from 'koa-hbs';
import {mongodb} from './src/models/Iridium';
// import index from './routes/index';
import upload from './src/routes/upload';
// import users from './src/routes/users';
import pack from './src/routes/package';
import apps from './src/routes/app';
// import packages from './routes/packages';
const logger = log4js.getLogger();
const app = new Koa();
app.use(hbs.middleware({
viewPath: __dirname + '/views',
}));
app.use(async (ctx, next) => {
const start = new Date();
await next();
const ms = Date.now() - start.getTime();
ctx.set('X-Response-Time', `${ms}ms`);
});
// 错误处理`
app.use(async (ctx, next) => {
try {
await next();
} catch (err) {
// will only respond with JSON
console.log(err);
ctx.status = err.status || 500;
ctx.body = {
message: err.message,
};
if (err.errCode) {
ctx.body['errCode'] = err.errCode;
}
if (ctx.response.status >= 500) {
logger.error(err);
} else if (ctx.response.status >= 400) {
logger.warn(err);
}
}
});
// 跨域
app.use(async (ctx, next) => {
ctx.set('Access-Control-Allow-Origin', '*');
ctx.set('Access-Control-Allow-Methods', 'GET, POST, PUT, DELETE, PATCH');
ctx.set('Access-Control-Allow-Headers', 'Content-Type, X-Requested-With',);
if (ctx.method === 'OPTIONS') {
ctx.status = 204;
} else {
await next();
}
});
app.use(bodyParser());
// app.use(index.routes());
// app.use(users.routes());
app.use(apps.routes());
app.use(upload.routes());
app.use(pack.routes());
// app.use(packages.routes());
mongodb.connect().then(() => {
app.listen(8001, () => {
console.log('app listening port 8001');
});
});
import {Container} from 'inversify';
const container = new Container();
export default container;
import {Collection, Index, Instance, Property} 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;
// }
interface Trailer {
type: string;
url: string;
poster: string;
}
interface Achievement {
name: string;
description: string;
image: string;
progress_max: number;
}
export interface App {
id: string;
status: string;
author: 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;
tags?: 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, ignore: boolean } };
version?: Platform<string>;
news?: I18n<{ title: string, url: string, image: string }[]>;
conference?: string;
data?: any;
icon?: string;
cover?: string;
background?: string;
created_at?: Date;
trailer?: Trailer[];
achievements?: Achievement[];
}
@Collection('apps')
@Index({id: 1}, {unique: true})
export class AppSchema extends Instance<App, AppSchema> implements App {
@Property(String, true)
id: string;
@Property(String, true)
status: string;
@Property(String, true)
author: 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)
tags?: 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, ignore: 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(Date, false)
created_at?: Date;
@Property(Array, false)
trailer?: Trailer[];
@Property(Array, false)
achievements?: Achievement[];
static onCreating(app: App) {
app.created_at = new Date();
}
handleUpdate(data: App) {
Object.assign(this, data);
}
toJSON() {
this.Convert();
// hack
return JSON.parse(this.toString());
}
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 {Collection, Index, Instance, Property} 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 Archive {
path: string;
size: number;
hash: string;
}
export interface Package {
id: string;
name: string;
appId: string;
fullSize?: number;
fullHash?: string;
version: string;
status: string;
type: string;
locales: Locale[];
platforms: Platform[];
files?: File[];
archives?: Archive[];
}
@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(Number, false)
fullSize: number;
@Property(String, false)
fullHash: string;
@Property(String, true)
type: string;
@Property(String, true)
status: string;
@Property(String, false)
version: string;
@Property(Array, false)
locales: Locale[];
@Property(Array, false)
platforms: Platform[];
@Property(Array, false)
files: File[];
@Property(Array, false)
archives: Archive[];
static onCreating(pack: Package) {
pack.status = pack.status || 'init';
}
handleUpdate(data: Package) {
Object.assign(this, data);
}
}
import Router = require('koa-router');
import {mongodb} from '../models/Iridium';
import {App} from '../models/App';
import {Context} from 'koa';
import * as joi from 'joi';
import {promisify as py} from 'bluebird';
import {dot} from '../utils';
const router = new Router();
const isTest = process.env['ENV'] !== 'production';
let validate: any = py(joi.validate);
router.get('/v2/apps', async (ctx: Context, next) => {
ctx.body = await mongodb.Apps.find({}).toArray();
});
router.get('/v1/apps', async (ctx: Context, next) => {
let payload = ctx.request.query;
if ((!payload.author && !payload.admin)) {
ctx.throw(400, 'params error');
}
let apps = {};
if (isTest || payload.admin == 'true') {
apps = await mongodb.Apps.find({}).map(app => {
if (app.files) {
app.files = Object.assign({}, ...Object.keys(app.files).map(key => ({[key.replace(new RegExp(dot, 'g'), '.')]: app.files![key]})));
}
return app;
});
} else {
apps = await mongodb.Apps.find({author: payload.author}).map(app => {
if (app.files) {
app.files = Object.assign({}, ...Object.keys(app.files).map(key => ({[key.replace(new RegExp(dot, 'g'), '.')]: app.files![key]})));
}
return app;
});
}
ctx.body = apps;
});
router.post('/v1/app/:id', async (ctx: Context, next) => {
let payload: App = {
id: ctx.request.body.id,
name: ctx.request.body.name,
author: ctx.request.body.author,
status: 'editing',
};
if (!payload.id) {
ctx.throw(400, 'params error');
}
if (ctx.params.id !== payload.id) {
ctx.throw(400, 'App is not same');
}
let exists = await mongodb.Apps.findOne({id: payload.id});
if (exists) {
ctx.throw(400, 'App is exists');
}
try {
ctx.body = await mongodb.Apps.create(payload);
} catch (e) {
ctx.throw(400, e);
}
});
router.patch('/v1/app/:id', async (ctx: Context, next) => {
let _app = ctx.request.body;
let app = await mongodb.Apps.findOne({id: ctx.params.id});
if (!app) {
return ctx.throw(400, `App ${ctx.params.id} Not Found `);
}
if (!_app.id || _app.id !== app.id) {
ctx.throw(400, `Can not change AppID`);
}
if (_app.status == 'ready') {
try {
await validate(_app, joi.object().keys({
action: joi.object().required(),
}).required());
} catch (e) {
e.message = '资料尚未填写完毕或格式有误';
return ctx.throw(e);
}
}
if (_app.files && Object.keys(_app.files).length > 0) {
_app.files = Object.assign({}, ...Object.keys(_app.files).map(key => ({[key.replace(new RegExp('\\.', 'g'), dot)]: _app.files[key]})));
}
app.handleUpdate(_app);
ctx.body = await app.save();
});
export default router;
import Router = require('koa-router');
import {toObjectID} from 'iridium';
import {mongodb} from '../models/Iridium';
import {Context} from 'koa';
import {Archive, Package} from '../models/Package';
import {renderChecksum} from '../utils';
const router = new Router();
router.get('/v2/packages', async (ctx: Context, next) => {
if (!ctx.request.query.appId) {
ctx.throw(400, 'appId must be required!');
}
let packs = await mongodb.Packages.find({
appId: ctx.request.query.appId,
status: 'uploaded'
}).toArray();
ctx.body = packs;
});
router.get('/v2/package-legacy/:id/checksum', async (ctx: Context, next) => {
let pack = await mongodb.Packages.findOne({appId: ctx.params.id, status: 'uploaded'});
if (!pack) {
return ctx.throw(400, 'pack error');
}
ctx.body = renderChecksum(pack.files);
});
router.get('/v2/package/:id/checksum', async (ctx: Context, next) => {
let pack = await mongodb.Packages.findOne({id: ctx.params.id, status: 'uploaded'});
if (!pack) {
return ctx.throw(400, 'pack error');
}
ctx.body = renderChecksum(pack.files);
});
router.get('/v2/package/:id/meta', async (ctx: Context, next) => {
let pack = await mongodb.Packages.findOne({id: ctx.params.id, status: 'uploaded'});
if (!pack) {
return ctx.throw(400, 'pack error');
}
await ctx['render']('update', {
files: {
name: pack.id,
size: pack.fullSize,
hash: pack.fullHash
}
});
});
router.get('/v2/package-legacy/:id/meta', async (ctx: Context, next) => {
let pack = await mongodb.Packages.findOne({appId: ctx.params.id, status: 'uploaded'});
if (!pack) {
return ctx.throw(400, 'pack error');
}
await ctx['render']('update', {
files: {
name: pack.id,
size: pack.fullSize,
hash: pack.fullHash
}
});
});
router.post('/v2/package/:id/update', async (ctx: Context, next) => {
const package_id = ctx.params.id;
const request_overhead = 1024 * 1024;
let sandSize = ctx.request.body.length * request_overhead;
let pack = await mongodb.Packages.findOne({id: package_id, status: 'uploaded'});
if (!pack) {
return ctx.throw(400, 'pack not exists');
}
let {fullSize} = pack;
let files;
let fullFiles = new Map<string, Archive>();
pack.archives.map((f) => {
fullFiles.set(f.path, f);
});
if (fullSize > sandSize) {
files = ctx.request.body.map((_file) => {
const file: Archive | undefined = fullFiles.get(_file);
if (!file) {
return ctx.throw(400, '');
}
sandSize += file.size;
return {
path: file.path,
size: file.size,
hash: file.hash
};
});
}
if (sandSize <= fullSize) {
files = [{
path: pack.id,
size: pack.fullSize,
hash: pack.fullHash
}];
}
await ctx['render']('update', {files});
});
router.get('/v1/packages', async (ctx: Context, next) => {
if (!ctx.request.query.appId) {
ctx.throw(400, 'appId must be required!');
}
let packs = await mongodb.Packages.find({
appId: ctx.request.query.appId,
type: 'editing'
}).toArray();
ctx.body = {
[ctx.request.query.appId]: packs
};
});
router.post('/v1/package', async (ctx: Context, next) => {
const _p: Package = ctx.request.body;
if (!_p.id) {
ctx.throw(400, `id 参数缺失:${_p.id}`);
}
if (!_p.platforms || _p.platforms.length == 0) {
ctx.throw(400, `请填写支持的平台:${_p.id}`);
} else if (!_p.locales || _p.locales.length == 0) {
ctx.throw(400, `请填写支持的语言:${_p.id}`);
} else if (!_p.version) {
ctx.throw(400, `请填写版本号:${_p.id}`);
}
let existsPlatform = await mongodb.Packages.findOne({
id: {$ne: _p.id},
appId: _p.appId,
$and: [{
platforms: {$in: _p.platforms},
locales: {$in: _p.locales}
}],
type: 'editing'
});
if (existsPlatform) {
console.log(existsPlatform);
ctx.throw(400, '平台语言已存在');
}
await mongodb.Packages.update({id: _p.id}, {$set: {type: 'edited'}}, {multi: true});
let _pack: Package = {
id: _p.id,
name: _p.name,
version: _p.version,
appId: _p.appId,
locales: _p.locales,
platforms: _p.platforms,
status: 'init',
type: 'editing'
};
ctx.body = await mongodb.Packages.insert(_pack);
});
router.patch('/v1/package', async (ctx: Context, next) => {
const _p = ctx.request.body;
const p = await mongodb.Packages.findOne({_id: toObjectID(_p._id)});
if (!p) {
return ctx.throw(400, 'pack not exists');
}
if (!_p.id) {
ctx.throw(400, `id 参数缺失:${_p.id}`);
}
if (!_p.platforms || _p.platforms.length == 0) {
ctx.throw(400, `请填写支持的平台:${_p.id}`);
} else if (!_p.locales || _p.locales.length == 0) {
ctx.throw(400, `请填写支持的语言:${_p.id}`);
} else if (!_p.version) {
ctx.throw(400, `请填写版本号:${_p.id}`);
}
let existsPlatform = await mongodb.Packages.find({
id: {$ne: _p.id},
appId: _p.appId,
platforms: {$in: _p.platforms},
type: 'editing'
}).count();
if (existsPlatform) {
console.log(existsPlatform);
ctx.throw(400, '平台已存在');
}
let existsLocales = await mongodb.Packages.find({
id: {$ne: _p.id},
appId: _p.appId,
locales: {$in: _p.locales},
type: 'editing'
}).count();
if (existsLocales) {
console.log(existsLocales);
ctx.throw(400, '语言已存在');
}
if (p.status == 'init') {
p.handleUpdate(_p);
ctx.body = await p.save();
} else {
ctx.throw(400, `非法操作:${_p.id}`);
}
});
router.delete('/v1/package', async (ctx: Context, next) => {
const _p = ctx.request.body;
const p = await mongodb.Packages.findOne({_id: toObjectID(_p._id)});
if (!p) {
return ctx.throw(400, 'pack not exists');
}
p.type = 'edited';
p.status = 'delete';
await p.save();
ctx.body = {
message: 'delete successful'
};
});
export default router;
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 * as fs from 'fs-extra-promise';
import * as path from 'path';
import * as Aria2 from 'aria2';
import { bundle } from '../../package/main';
import { mongodb } from '../models/Iridium';
import { toObjectID } from 'iridium';
import config from '../../config';
import { UploadOSS } from '../utils';
import Router = require('koa-router');
import { Queue } from '../utils';
const queue = new Queue({
concurrency: 1
});
const checkFilePath = async (file) => {
if (['.gz', '.rar', '.zip', '.7z'].indexOf(path.extname(file.path)) === -1) {
console.log(file);
throw new Error(`Unsupported file type: ${path.extname(file.path)}`);
}
};
const checkPackage = async (file) => {
if (['application/zip', 'application/gz', 'application/rar', 'application/7z', 'application/x-gzip'].indexOf(file.mime) === -1) {
console.log(file.mime);
throw new Error(`Unsupported file type: ${file.mime}`);
}
};
const checkImage = async (file) => {
const ext = mime.extension(file.mime);
if (['png', 'jpg', 'jpeg', 'gif', 'webp'].indexOf(ext) === -1) {
throw new Error('Unsupported file type');
}
};
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 => {
await checkImage(file);
const filename = `test/${uuid.v1()}`;
const upload = ossStream.upload({
Bucket: process.env['OSS_BUCKET'],
Key: filename,
ContentType: file.mimeType
});
file.pipe(upload);
return await new Promise((resolve, reject) => {
upload.on('error', reject);
upload.on('uploaded', resolve);
});
}));
} catch (err) {
ctx.throw(403, err);
}
};
export const UploadPackage = async (ctx: Context) => {
try {
const { files } = await busboy(ctx.req);
ctx.body = await Promise.all(files.map(async file => {
await checkPackage(file);
const filename = uuid.v1();
const archive_path = path.join(__dirname, '../../test/upload');
await fs.ensureDirAsync(archive_path);
const archive = fs.createWriteStream(path.join(archive_path, filename));
let pack = await mongodb.Packages.findOne({ _id: toObjectID(ctx.params.id) });
if (!pack) {
return ctx.throw(400, 'pack not exists');
}
return await new Promise((resolve, reject) => {
file.pipe(archive);
file.on('close', async () => {
await queue.run(async (ctx, next) => {
try {
pack!.status = 'uploading';
await pack!.save();
resolve(pack!);
// 上传完, 打包
let bundled;
bundled = await bundle(filename);
// 打包完,上传阿里云
await UploadOSS(bundled.distPath);
Object.assign(pack, bundled);
pack!.status = 'uploaded';
await mongodb.Packages.update({ id: pack!.id }, { $set: { status: 'deprecated' } }, { multi: true });
await pack!.save();
// 上传完,干掉本地目录
await fs.removeAsync(bundled.archivePath);
} catch (e) {
pack!.status = 'failed';
await pack!.save();
console.log(e);
}
next();
});
});
file.on('error', async (error) => {
pack!.status = 'failed';
await pack!.save();
reject(error);
});
});
}));
} catch (err) {
ctx.throw(403, err);
}
};
const uploadPackageUrl = async (ctx: Context) => {
if (!ctx.request.body.url) {
ctx.throw(400, 'params error');
}
// testUrl: https://r.my-card.in/release/dist/0c16a3ecb115fd7cf575ccdd64f62a8f3edc635b087950e4ed4f3f781972bbfd.tar.gz
const downloader = new Aria2;
await downloader.open();
let pack = await mongodb.Packages.findOne({ _id: toObjectID(ctx.request.body._id) });
if (!pack) {
return ctx.throw(400, 'pack not exists');
}
downloader.onDownloadStart = async ({ gid }) => {
const { files } = await downloader.send('tellStatus', gid);
const [file] = files;
const [url] = file.uris;
if (ctx.request.body.url == url.uri) {
pack!.status = 'uploading';
await pack!.save();
}
};
downloader.onDownloadComplete = async ({ gid }) => {
const { files } = await downloader.send('tellStatus', gid);
const [file] = files;
const [url] = file.uris;
if (ctx.request.body.url == url.uri) {
await queue.run(async (ctx, next) => {
try {
await checkFilePath(file);
// 打包
const bundled = await bundle(path.basename(file.path));
await UploadOSS(bundled.distPath);
Object.assign(pack, bundled);
pack!.status = 'uploaded';
await mongodb.Packages.update({ id: pack!.id }, { $set: { status: 'deprecated' } }, { multi: true });
await pack!.save();
// 上传完,干掉本地目录
await fs.removeAsync(bundled.archivePath);
} catch (e) {
console.trace(e);
pack!.status = 'failed';
await pack!.save();
}
next();
});
// 打包完, 上传阿里云
await downloader.close();
}
};
downloader.onDownloadError = async (err) => {
const { files } = await downloader.send('tellStatus', err.gid);
const [file] = files;
const [url] = file.uris;
if (ctx.request.body.url == url.uri) {
pack!.status = 'failed';
await pack!.save();
await downloader.close();
console.log(err);
}
};
ctx.body = await new Promise((resolve, reject) => {
downloader.onmessage = m => {
if (m['error']) {
reject(m['error']);
} else {
resolve(m);
}
};
downloader.send('addUri', [ctx.request.body.url], { dir: config.upload_path });
});
};
router.post('/v1/upload/image', UploadImage);
router.post('/v1/upload/package/:id', UploadPackage);
router.post('/v1/upload/packageUrl', uploadPackageUrl);
export default router;
const TYPES = {};
export default TYPES;
import { URL } from 'url';
import * as child_process from 'child_process';
export const dot = '__<DOT>__';
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';
}
};
export function renderChecksum(files: { path: string, hash?: string }[]) {
return files.map(({ path, hash }) => `${hash || ''} ${path}`).join('\n');
}
export function UploadOSS(dist: string): Promise<void> {
return new Promise<void>((resolve, reject) => {
let child = child_process.spawn('ossutil', ['cp', '--recursive', dist, 'oss://mycard/test-release'], { stdio: 'inherit' });
child.on('exit', (code) => {
if (code == 0) {
resolve();
} else {
reject(code);
}
});
child.on('error', (error) => {
reject(error);
});
});
}
type QueueParams = {
concurrency: number;
};
export class Queue {
concurrency: number;
running: number;
queue: Array<Function>;
constructor(params: QueueParams) {
Object.assign(this, params);
this.running = 0;
this.queue = [];
}
set(args: QueueParams): Queue {
Object.assign(this, args);
return this;
}
push(task: Function): Queue {
this.queue.push(task);
return this;
}
async run(task: Function) {
this.queue.push(task);
await this.next();
}
async next() {
while (this.running < this.concurrency && this.queue.length) {
let task: Function | undefined = this.queue.shift();
if (!task) {
return;
}
this.running++;
await task(this, () => {
this.running--;
this.next();
});
}
}
}
/**
* Created by zh99998 on 2017/4/27.
*/
import * as fetch from 'isomorphic-fetch';
import * as _ from 'lodash';
import { XmlDocument } from 'xmldoc';
import config from './config';
async function test_checksums() {
const apps: any[] = (await (await fetch(config.new_apps_json)).json())
// .filter(i => !['ygopro', 'desmume'].includes(i.id)); // 排除 ygopro 和 desmume
let oldMaps = new Set();
for (let app of apps) {
console.log(`正在测试 ${app.id} 的 checksum`);
const old_checksum = await (await fetch(config.old_checksums(app.id))).text();
const new_checksum = await (await fetch(config.new_checksums(app.id))).text();
new_checksum.split('\n').forEach(line => {
oldMaps.add(line);
});
old_checksum.split('\n').forEach(line => {
if (!oldMaps.has(line)) {
console.log('', old_checksum);
console.log('', new_checksum);
throw `应用 ${app.id} 的 checksum 不一致`;
}
});
}
}
async function test_download() {
const apps: any[] = (await (await fetch(config.new_apps_json)).json())
.filter(i => !['ygopro', 'desmume'].includes(i.id)); // 排除 ygopro 和 desmume
const app: any = _.sample(apps);
console.log(`正在测试 ${app.id} 的 下载`);
const metalink = await (await fetch(config.new_metalinks(app.id))).text();
const xml = new XmlDocument(metalink);
const url = xml.valueWithPath('file.url');
const response = await fetch(url, { method: 'HEAD' });
if (!response.ok) {
throw `${app.id} 的 下载地址 ${url} 返回 ${response.statusText}`;
}
}
async function test_update() {
// TODO
}
async function test_apps_json() {
const old_apps = await (await fetch(config.old_apps_json)).json();
const new_apps = await (await fetch(config.new_apps_json)).json();
for (let new_app of new_apps) {
let old_app = old_apps.find(i => i.id == new_app.id);
delete old_app.author;
delete new_app.author;
delete old_app.news;
delete new_app.news;
if (!old_app) {
throw `应用 ${new_app.id} 在旧的列表不存在`;
}
for (let [key, value] of Object.entries(old_app)) {
if (!new_app[key]) {
throw `应用 ${new_app.id}${key} 字段在的新的列表中不存在`;
}
if (!_.isEqual(new_app[key], value)) {
console.log('', JSON.stringify(value, null, 2));
console.log('', JSON.stringify(new_app[key], null, 2));
throw `应用 ${new_app.id}${key} 字段跟旧的不同`;
}
}
}
}
async function main() {
// await test_apps_json();
try {
await test_checksums();
await test_download();
await test_update();
} catch (e) {
console.log(e);
}
console.log('ok');
}
main();
process.on('unhandledRejection', (reason, p) => {
console.error('Unhandled Rejection at: Promise', p, 'reason:', reason);
});
{
"compilerOptions": {
"module": "commonjs",
"target": "es6",
"experimentalDecorators": true,
"emitDecoratorMetadata": true,
"strictNullChecks": true,
"sourceMap": true,
"moduleResolution": "node",
"lib": [
"es2017",
"dom"
],
"noImplicitAny": false,
"suppressImplicitAnyIndexErrors": true,
"skipLibCheck": true
}
}
\ No newline at end of file
{
"rules": {
"max-line-length": [true, 140],
"no-inferrable-types": true,
"class-name": true,
"comment-format": [
true,
"check-space"
],
"indent": [
true,
"spaces"
],
"eofline": true,
"no-duplicate-variable": true,
"no-eval": true,
"no-arg": true,
"no-internal-module": true,
"no-trailing-whitespace": true,
"no-bitwise": true,
"no-unused-expression": true,
"no-var-keyword": true,
"one-line": [
true,
"check-catch",
"check-else",
"check-open-brace",
"check-whitespace"
],
"quotemark": [
true,
"single",
"avoid-escape"
],
"semicolon": [true, "always"],
"typedef-whitespace": [
true,
{
"call-signature": "nospace",
"index-signature": "nospace",
"parameter": "nospace",
"property-declaration": "nospace",
"variable-declaration": "nospace"
}
],
"curly": true,
"whitespace": [
true,
"check-branch",
"check-decl",
"check-operator",
"check-separator",
"check-type"
]
}
}
<?xml version="1.0" encoding="UTF-8"?>
<metalink xmlns="urn:ietf:params:xml:ns:metalink">
{{#files}}
<file name="{{name}}">
<size>{{size}}</size>
<hash type="sha-256">{{hash}}</hash>
<url priority="1">https://cdn01.moecube.com/test-release/{{hash}}.tar.gz</url>
<url priority="1">https://cdn01.moecube.com/test-release/{{hash}}.tar.gz</url>
</file>
{{/files}}
</metalink>
# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY.
# yarn lockfile v1
"@types/accepts@*":
version "1.3.2"
resolved "https://registry.yarnpkg.com/@types/accepts/-/accepts-1.3.2.tgz#52897ad5a51f05ea2f57f8e8136085c7d1c385a5"
"@types/bluebird@*", "@types/bluebird@^3.5.0", "@types/bluebird@^3.5.2":
version "3.5.2"
resolved "https://registry.yarnpkg.com/@types/bluebird/-/bluebird-3.5.2.tgz#ecf1104217495e50fe0b588d538146cd6f733b89"
"@types/bson@*":
version "1.0.3"
resolved "https://registry.yarnpkg.com/@types/bson/-/bson-1.0.3.tgz#6c26f0876bf9d8cbb06edd4019e29354bf3a03e0"
dependencies:
"@types/node" "*"
"@types/busboy@^0.2.3":
version "0.2.3"
resolved "https://registry.yarnpkg.com/@types/busboy/-/busboy-0.2.3.tgz#6697ad29873246c530f09a3ff5a40861824230d5"
dependencies:
"@types/node" "*"
"@types/chai@^3.4.35":
version "3.5.1"
resolved "https://registry.yarnpkg.com/@types/chai/-/chai-3.5.1.tgz#9bd77fe12503ae00648b0945b38eab666adffe2e"
"@types/cookies@*":
version "0.6.1"
resolved "https://registry.yarnpkg.com/@types/cookies/-/cookies-0.6.1.tgz#d12cbd0f8aa6b9f0d3bfb613b958897a0b348731"
dependencies:
"@types/keygrip" "*"
"@types/node" "*"
"@types/express-serve-static-core@*":
version "4.0.44"
resolved "https://registry.yarnpkg.com/@types/express-serve-static-core/-/express-serve-static-core-4.0.44.tgz#a1c3bd5d80e93c72fba91a03f5412c47f21d4ae7"
dependencies:
"@types/node" "*"
"@types/express@*":
version "4.0.35"
resolved "https://registry.yarnpkg.com/@types/express/-/express-4.0.35.tgz#6267c7b60a51fac473467b3c4a02cd1e441805fe"
dependencies:
"@types/express-serve-static-core" "*"
"@types/serve-static" "*"
"@types/fs-extra-promise@^0.0.32":
version "0.0.32"
resolved "https://registry.yarnpkg.com/@types/fs-extra-promise/-/fs-extra-promise-0.0.32.tgz#38be021eee89ad7fc9346eadd305f259042f790b"
dependencies:
"@types/bluebird" "*"
"@types/fs-extra" "*"
"@types/node" "*"
"@types/fs-extra@*":
version "2.1.0"
resolved "https://registry.yarnpkg.com/@types/fs-extra/-/fs-extra-2.1.0.tgz#8b350239c0455d92b8d3c626edac193860ff395f"
dependencies:
"@types/node" "*"
"@types/http-assert@*":
version "1.2.0"
resolved "https://registry.yarnpkg.com/@types/http-assert/-/http-assert-1.2.0.tgz#0b82993036e86c6ff2944e033b73b57e85ccdcab"
"@types/isomorphic-fetch@0.0.34":
version "0.0.34"
resolved "https://registry.yarnpkg.com/@types/isomorphic-fetch/-/isomorphic-fetch-0.0.34.tgz#3c3483e606c041378438e951464f00e4e60706d6"
"@types/joi@^10.3.0":
version "10.3.0"
resolved "https://registry.yarnpkg.com/@types/joi/-/joi-10.3.0.tgz#a928df18a2d00e9dc47471af62953ffd88d64f63"
"@types/keygrip@*":
version "1.0.1"
resolved "https://registry.yarnpkg.com/@types/keygrip/-/keygrip-1.0.1.tgz#ff540462d2fb4d0a88441ceaf27d287b01c3d878"
"@types/koa-bodyparser@^3.0.22":
version "3.0.23"
resolved "https://registry.yarnpkg.com/@types/koa-bodyparser/-/koa-bodyparser-3.0.23.tgz#0e719b708d463d1ea31a25971c485c2e4eb6ced4"
dependencies:
"@types/koa" "*"
"@types/koa-compose@*":
version "3.2.2"
resolved "https://registry.yarnpkg.com/@types/koa-compose/-/koa-compose-3.2.2.tgz#dc106e000bbf92a3ac900f756df47344887ee847"
"@types/koa-router@^7.0.22":
version "7.0.22"
resolved "https://registry.yarnpkg.com/@types/koa-router/-/koa-router-7.0.22.tgz#92b4b533f074036250892fe35bb6329ee9242def"
dependencies:
"@types/koa" "*"
"@types/koa@*", "@types/koa@^2.0.37":
version "2.0.39"
resolved "https://registry.yarnpkg.com/@types/koa/-/koa-2.0.39.tgz#45ba1249d8849b9b0ff8c1d6d2f80b0838b89ffa"
dependencies:
"@types/accepts" "*"
"@types/cookies" "*"
"@types/http-assert" "*"
"@types/keygrip" "*"
"@types/koa-compose" "*"
"@types/node" "*"
"@types/lodash@^4.14.58", "@types/lodash@^4.14.63":
version "4.14.63"
resolved "https://registry.yarnpkg.com/@types/lodash/-/lodash-4.14.63.tgz#5ac475f55bfdc62bc88c4239dbc482f2f3bead93"
"@types/log4js@0.0.32":
version "0.0.32"
resolved "https://registry.yarnpkg.com/@types/log4js/-/log4js-0.0.32.tgz#c15621cfa96f92ec6b0cfb49096bdd23cd893c7c"
dependencies:
"@types/express" "*"
"@types/mime@*":
version "0.0.29"
resolved "https://registry.yarnpkg.com/@types/mime/-/mime-0.0.29.tgz#fbcfd330573b912ef59eeee14602bface630754b"
"@types/mongodb@^2.1.41":
version "2.1.43"
resolved "https://registry.yarnpkg.com/@types/mongodb/-/mongodb-2.1.43.tgz#6fbd60c0ae0f2e8f5776ed1d73f5c718cc2625ee"
dependencies:
"@types/bson" "*"
"@types/node" "*"
"@types/node@*", "@types/node@^7.0.13":
version "7.0.13"
resolved "https://registry.yarnpkg.com/@types/node/-/node-7.0.13.tgz#1b0a53fe9ef9c3a5d061b126cc9b915bca43a3f5"
"@types/pluralize@0.0.27":
version "0.0.27"
resolved "https://registry.yarnpkg.com/@types/pluralize/-/pluralize-0.0.27.tgz#087354a791ce027db1101ff399db6111fc9275f7"
"@types/serve-static@*":
version "1.7.31"
resolved "https://registry.yarnpkg.com/@types/serve-static/-/serve-static-1.7.31.tgz#15456de8d98d6b4cff31be6c6af7492ae63f521a"
dependencies:
"@types/express-serve-static-core" "*"
"@types/mime" "*"
"@types/tmp@0.0.32":
version "0.0.32"
resolved "https://registry.yarnpkg.com/@types/tmp/-/tmp-0.0.32.tgz#0d3cb31022f8427ea58c008af32b80da126ca4e3"
"@types/uuid@^2.0.29":
version "2.0.29"
resolved "https://registry.yarnpkg.com/@types/uuid/-/uuid-2.0.29.tgz#939a198ab73567f811ab84f670d2be9c25addd41"
dependencies:
"@types/node" "*"
"@types/xmldoc@^0.5.0":
version "0.5.0"
resolved "https://registry.yarnpkg.com/@types/xmldoc/-/xmldoc-0.5.0.tgz#a3e7398024fc5ee15e947108b9ed41af0eb7158d"
abbrev@1:
version "1.1.0"
resolved "https://registry.yarnpkg.com/abbrev/-/abbrev-1.1.0.tgz#d0554c2256636e2f56e7c2e5ad183f859428d81f"
accepts@^1.2.2:
version "1.3.3"
resolved "https://registry.yarnpkg.com/accepts/-/accepts-1.3.3.tgz#c3ca7434938648c3e0d9c1e328dd68b622c284ca"
dependencies:
mime-types "~2.1.11"
negotiator "0.6.1"
ajv@^4.9.1:
version "4.11.7"
resolved "https://registry.yarnpkg.com/ajv/-/ajv-4.11.7.tgz#8655a5d86d0824985cc471a1d913fb6729a0ec48"
dependencies:
co "^4.6.0"
json-stable-stringify "^1.0.1"
align-text@^0.1.1, align-text@^0.1.3:
version "0.1.4"
resolved "https://registry.yarnpkg.com/align-text/-/align-text-0.1.4.tgz#0cd90a561093f35d0a99256c22b7069433fad117"
dependencies:
kind-of "^3.0.2"
longest "^1.0.1"
repeat-string "^1.5.2"
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"
amdefine@>=0.0.4:
version "1.0.1"
resolved "https://registry.yarnpkg.com/amdefine/-/amdefine-1.0.1.tgz#4a5282ac164729e93619bcfd3ad151f817ce91f5"
ansi-regex@^2.0.0:
version "2.1.1"
resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-2.1.1.tgz#c3b33ab5ee360d86e0e628f0468ae7ef27d654df"
ansi-styles@^2.2.1:
version "2.2.1"
resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-2.2.1.tgz#b432dd3358b634cf75e1e4664368240533c1ddbe"
any-promise@^1.1.0:
version "1.3.0"
resolved "https://registry.yarnpkg.com/any-promise/-/any-promise-1.3.0.tgz#abc6afeedcea52e809cdc0376aed3ce39635d17f"
anymatch@^1.3.0:
version "1.3.0"
resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-1.3.0.tgz#a3e52fa39168c825ff57b0248126ce5a8ff95507"
dependencies:
arrify "^1.0.0"
micromatch "^2.1.5"
aproba@^1.0.3:
version "1.1.1"
resolved "https://registry.yarnpkg.com/aproba/-/aproba-1.1.1.tgz#95d3600f07710aa0e9298c726ad5ecf2eacbabab"
are-we-there-yet@~1.1.2:
version "1.1.3"
resolved "https://registry.yarnpkg.com/are-we-there-yet/-/are-we-there-yet-1.1.3.tgz#ee86447bf1a06feb4dd3aac46e023b87d7f8e2ef"
dependencies:
delegates "^1.0.0"
readable-stream "^2.0.6"
aria2@^3.0.0:
version "3.0.0"
resolved "https://registry.yarnpkg.com/aria2/-/aria2-3.0.0.tgz#3363b9812fcf4aa3b5615beca34a24eeb76b72cd"
dependencies:
commander "^2.9.0"
node-fetch "^1.6.3"
polygoat "^1.1.4"
ws "^1.1.1"
arr-diff@^2.0.0:
version "2.0.0"
resolved "https://registry.yarnpkg.com/arr-diff/-/arr-diff-2.0.0.tgz#8f3b827f955a8bd669697e4a4256ac3ceae356cf"
dependencies:
arr-flatten "^1.0.1"
arr-flatten@^1.0.1:
version "1.0.3"
resolved "https://registry.yarnpkg.com/arr-flatten/-/arr-flatten-1.0.3.tgz#a274ed85ac08849b6bd7847c4580745dc51adfb1"
array-unique@^0.2.1:
version "0.2.1"
resolved "https://registry.yarnpkg.com/array-unique/-/array-unique-0.2.1.tgz#a1d97ccafcbc2625cc70fadceb36a50c58b01a53"
arrify@^1.0.0:
version "1.0.1"
resolved "https://registry.yarnpkg.com/arrify/-/arrify-1.0.1.tgz#898508da2226f380df904728456849c1501a4b0d"
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"
assertion-error@1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/assertion-error/-/assertion-error-1.0.0.tgz#c7f85438fdd466bc7ca16ab90c81513797a5d23b"
async-busboy@^0.4.0:
version "0.4.0"
resolved "https://registry.yarnpkg.com/async-busboy/-/async-busboy-0.4.0.tgz#55d6cf2041d8571f07085bfe00a7df39d48b7182"
dependencies:
busboy "^0.2.12"
async-each@^1.0.0:
version "1.0.1"
resolved "https://registry.yarnpkg.com/async-each/-/async-each-1.0.1.tgz#19d386a1d9edc6e7c1c85d388aedbcc56d33602d"
async@^1.4.0:
version "1.5.2"
resolved "https://registry.yarnpkg.com/async/-/async-1.5.2.tgz#ec6a61ae56480c0c3cb241c95618e20892f9672a"
asynckit@^0.4.0:
version "0.4.0"
resolved "https://registry.yarnpkg.com/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79"
aws-sign2@~0.6.0:
version "0.6.0"
resolved "https://registry.yarnpkg.com/aws-sign2/-/aws-sign2-0.6.0.tgz#14342dd38dbcc94d0e5b87d763cd63612c0e794f"
aws4@^1.2.1:
version "1.6.0"
resolved "https://registry.yarnpkg.com/aws4/-/aws4-1.6.0.tgz#83ef5ca860b2b32e4a0deedee8c771b9db57471e"
axios@^0.16.1:
version "0.16.1"
resolved "https://registry.yarnpkg.com/axios/-/axios-0.16.1.tgz#c0b6d26600842384b8f509e57111f0d2df8223ca"
dependencies:
follow-redirects "^1.2.3"
babel-code-frame@^6.22.0:
version "6.22.0"
resolved "https://registry.yarnpkg.com/babel-code-frame/-/babel-code-frame-6.22.0.tgz#027620bee567a88c32561574e7fd0801d33118e4"
dependencies:
chalk "^1.1.0"
esutils "^2.0.2"
js-tokens "^3.0.0"
balanced-match@^0.4.1:
version "0.4.2"
resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-0.4.2.tgz#cb3f3e3c732dc0f01ee70b403f302e61d7709838"
bcrypt-pbkdf@^1.0.0:
version "1.0.1"
resolved "https://registry.yarnpkg.com/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.1.tgz#63bc5dcb61331b92bc05fd528953c33462a06f8d"
dependencies:
tweetnacl "^0.14.3"
binary-extensions@^1.0.0:
version "1.8.0"
resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-1.8.0.tgz#48ec8d16df4377eae5fa5884682480af4d95c774"
block-stream@*:
version "0.0.9"
resolved "https://registry.yarnpkg.com/block-stream/-/block-stream-0.0.9.tgz#13ebfe778a03205cfe03751481ebb4b3300c126a"
dependencies:
inherits "~2.0.0"
bluebird@^3.5.0:
version "3.5.0"
resolved "https://registry.yarnpkg.com/bluebird/-/bluebird-3.5.0.tgz#791420d7f551eea2897453a8a77653f96606d67c"
boom@2.x.x:
version "2.10.1"
resolved "https://registry.yarnpkg.com/boom/-/boom-2.10.1.tgz#39c8918ceff5799f83f9492a848f625add0c766f"
dependencies:
hoek "2.x.x"
brace-expansion@^1.0.0:
version "1.1.7"
resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.7.tgz#3effc3c50e000531fb720eaff80f0ae8ef23cf59"
dependencies:
balanced-match "^0.4.1"
concat-map "0.0.1"
braces@^1.8.2:
version "1.8.5"
resolved "https://registry.yarnpkg.com/braces/-/braces-1.8.5.tgz#ba77962e12dff969d6b76711e914b737857bf6a7"
dependencies:
expand-range "^1.8.1"
preserve "^0.2.0"
repeat-element "^1.1.2"
bson@~1.0.4:
version "1.0.4"
resolved "https://registry.yarnpkg.com/bson/-/bson-1.0.4.tgz#93c10d39eaa5b58415cbc4052f3e53e562b0b72c"
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"
busboy@^0.2.12:
version "0.2.14"
resolved "https://registry.yarnpkg.com/busboy/-/busboy-0.2.14.tgz#6c2a622efcf47c57bbbe1e2a9c37ad36c7925453"
dependencies:
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"
camelcase@^1.0.2:
version "1.2.1"
resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-1.2.1.tgz#9bb5304d2e0b56698b2c758b08a3eaa9daa58a39"
camelcase@^2.0.1:
version "2.1.1"
resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-2.1.1.tgz#7c1d16d679a1bbe59ca02cacecfb011e201f5a1f"
caseless@~0.12.0:
version "0.12.0"
resolved "https://registry.yarnpkg.com/caseless/-/caseless-0.12.0.tgz#1b681c21ff84033c826543090689420d187151dc"
center-align@^0.1.1:
version "0.1.3"
resolved "https://registry.yarnpkg.com/center-align/-/center-align-0.1.3.tgz#aa0d32629b6ee972200411cbd4461c907bc2b7ad"
dependencies:
align-text "^0.1.3"
lazy-cache "^1.0.3"
chai@^2.2.0:
version "2.3.0"
resolved "https://registry.yarnpkg.com/chai/-/chai-2.3.0.tgz#8a2f6a34748da801090fd73287b2aa739a4e909a"
dependencies:
assertion-error "1.0.0"
deep-eql "0.1.3"
chalk@^1.0.0, chalk@^1.1.0:
version "1.1.3"
resolved "https://registry.yarnpkg.com/chalk/-/chalk-1.1.3.tgz#a8115c55e4a702fe4d150abd3872822a7e09fc98"
dependencies:
ansi-styles "^2.2.1"
escape-string-regexp "^1.0.2"
has-ansi "^2.0.0"
strip-ansi "^3.0.0"
supports-color "^2.0.0"
chokidar@^1.4.3:
version "1.6.1"
resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-1.6.1.tgz#2f4447ab5e96e50fb3d789fd90d4c72e0e4c70c2"
dependencies:
anymatch "^1.3.0"
async-each "^1.0.0"
glob-parent "^2.0.0"
inherits "^2.0.1"
is-binary-path "^1.0.0"
is-glob "^2.0.0"
path-is-absolute "^1.0.0"
readdirp "^2.0.0"
optionalDependencies:
fsevents "^1.0.0"
cliui@^2.1.0:
version "2.1.0"
resolved "https://registry.yarnpkg.com/cliui/-/cliui-2.1.0.tgz#4b475760ff80264c762c3a1719032e91c7fea0d1"
dependencies:
center-align "^0.1.1"
right-align "^0.1.1"
wordwrap "0.0.2"
cliui@^3.0.3:
version "3.2.0"
resolved "https://registry.yarnpkg.com/cliui/-/cliui-3.2.0.tgz#120601537a916d29940f934da3b48d585a39213d"
dependencies:
string-width "^1.0.1"
strip-ansi "^3.0.1"
wrap-ansi "^2.0.0"
co-body@^5.1.0:
version "5.1.1"
resolved "https://registry.yarnpkg.com/co-body/-/co-body-5.1.1.tgz#d97781d1e3344ba4a820fd1806bddf8341505236"
dependencies:
inflation "^2.0.0"
qs "^6.4.0"
raw-body "^2.2.0"
type-is "^1.6.14"
co@^4.6.0:
version "4.6.0"
resolved "https://registry.yarnpkg.com/co/-/co-4.6.0.tgz#6ea6bdf3d853ae54ccb8e47bfa0bf3f9031fb184"
code-point-at@^1.0.0:
version "1.1.0"
resolved "https://registry.yarnpkg.com/code-point-at/-/code-point-at-1.1.0.tgz#0d070b4d043a5bea33a2f1a40e2edb3d9a4ccf77"
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"
dependencies:
delayed-stream "~1.0.0"
commander@^2.9.0:
version "2.9.0"
resolved "https://registry.yarnpkg.com/commander/-/commander-2.9.0.tgz#9c99094176e12240cb22d6c5146098400fe0f7d4"
dependencies:
graceful-readlink ">= 1.0.0"
concat-map@0.0.1:
version "0.0.1"
resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b"
configstore@^1.0.0:
version "1.4.0"
resolved "https://registry.yarnpkg.com/configstore/-/configstore-1.4.0.tgz#c35781d0501d268c25c54b8b17f6240e8a4fb021"
dependencies:
graceful-fs "^4.1.2"
mkdirp "^0.5.0"
object-assign "^4.0.1"
os-tmpdir "^1.0.0"
osenv "^0.1.0"
uuid "^2.0.1"
write-file-atomic "^1.1.2"
xdg-basedir "^2.0.0"
console-control-strings@^1.0.0, console-control-strings@~1.1.0:
version "1.1.0"
resolved "https://registry.yarnpkg.com/console-control-strings/-/console-control-strings-1.1.0.tgz#3d7cf4464db6446ea644bf4b39507f9851008e8e"
content-disposition@~0.5.0:
version "0.5.2"
resolved "https://registry.yarnpkg.com/content-disposition/-/content-disposition-0.5.2.tgz#0cf68bb9ddf5f2be7961c3a85178cb85dba78cb4"
content-type@^1.0.0:
version "1.0.2"
resolved "https://registry.yarnpkg.com/content-type/-/content-type-1.0.2.tgz#b7d113aee7a8dd27bd21133c4dc2529df1721eed"
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"
copy-to@^2.0.1:
version "2.0.1"
resolved "https://registry.yarnpkg.com/copy-to/-/copy-to-2.0.1.tgz#2680fbb8068a48d08656b6098092bdafc906f4a5"
core-util-is@~1.0.0:
version "1.0.2"
resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.2.tgz#b5fd54220aa2bc5ab57aab7140c940754503c1a7"
cryptiles@2.x.x:
version "2.0.5"
resolved "https://registry.yarnpkg.com/cryptiles/-/cryptiles-2.0.5.tgz#3bdfecdc608147c1c67202fa291e7dca59eaa3b8"
dependencies:
boom "2.x.x"
dashdash@^1.12.0:
version "1.14.1"
resolved "https://registry.yarnpkg.com/dashdash/-/dashdash-1.14.1.tgz#853cfa0f7cbe2fed5de20326b8dd581035f6e2f0"
dependencies:
assert-plus "^1.0.0"
debug@*, debug@^2.1.0, debug@^2.2.0, debug@^2.4.5:
version "2.6.4"
resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.4.tgz#7586a9b3c39741c0282ae33445c4e8ac74734fe0"
dependencies:
ms "0.7.3"
decamelize@^1.0.0, decamelize@^1.1.1:
version "1.2.0"
resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-1.2.0.tgz#f6534d15148269b20352e7bee26f501f9a191290"
deep-eql@0.1.3:
version "0.1.3"
resolved "https://registry.yarnpkg.com/deep-eql/-/deep-eql-0.1.3.tgz#ef558acab8de25206cd713906d74e56930eb69f2"
dependencies:
type-detect "0.1.1"
deep-equal@~1.0.0:
version "1.0.1"
resolved "https://registry.yarnpkg.com/deep-equal/-/deep-equal-1.0.1.tgz#f5d260292b660e084eff4cdbc9f08ad3247448b5"
deep-extend@~0.4.0:
version "0.4.1"
resolved "https://registry.yarnpkg.com/deep-extend/-/deep-extend-0.4.1.tgz#efe4113d08085f4e6f9687759810f807469e2253"
delayed-stream@~1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/delayed-stream/-/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619"
delegates@^1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/delegates/-/delegates-1.0.0.tgz#84c6e159b81904fdca59a0ef44cd870d31250f9a"
depd@1.1.0, depd@^1.1.0, depd@~1.1.0:
version "1.1.0"
resolved "https://registry.yarnpkg.com/depd/-/depd-1.1.0.tgz#e1bd82c6aab6ced965b97b88b17ed3e528ca18c3"
destroy@^1.0.3:
version "1.0.4"
resolved "https://registry.yarnpkg.com/destroy/-/destroy-1.0.4.tgz#978857442c44749e4206613e37946205826abd80"
dicer@0.2.5:
version "0.2.5"
resolved "https://registry.yarnpkg.com/dicer/-/dicer-0.2.5.tgz#5996c086bb33218c812c090bddc09cd12facb70f"
dependencies:
readable-stream "1.1.x"
streamsearch "0.1.2"
diff@^3.2.0:
version "3.2.0"
resolved "https://registry.yarnpkg.com/diff/-/diff-3.2.0.tgz#c9ce393a4b7cbd0b058a725c93df299027868ff9"
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"
duplexify@^3.2.0:
version "3.5.0"
resolved "https://registry.yarnpkg.com/duplexify/-/duplexify-3.5.0.tgz#1aa773002e1578457e9d9d4a50b0ccaaebcbd604"
dependencies:
end-of-stream "1.0.0"
inherits "^2.0.1"
readable-stream "^2.0.0"
stream-shift "^1.0.0"
ecc-jsbn@~0.1.1:
version "0.1.1"
resolved "https://registry.yarnpkg.com/ecc-jsbn/-/ecc-jsbn-0.1.1.tgz#0fc73a9ed5f0d53c38193398523ef7e543777505"
dependencies:
jsbn "~0.1.0"
ee-first@1.1.1:
version "1.1.1"
resolved "https://registry.yarnpkg.com/ee-first/-/ee-first-1.1.1.tgz#590c61156b0ae2f4f0255732a158b266bc56b21d"
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"
dependencies:
once "~1.3.0"
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:
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:
version "1.0.3"
resolved "https://registry.yarnpkg.com/escape-html/-/escape-html-1.0.3.tgz#0258eae4d3d0c0974de1c169188ef0051d1d1988"
escape-string-regexp@^1.0.2:
version "1.0.5"
resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4"
esutils@^2.0.2:
version "2.0.2"
resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.2.tgz#0abf4f1caa5bcb1f7a9d8acc6dea4faaa04bac9b"
event-stream@~3.3.0:
version "3.3.4"
resolved "https://registry.yarnpkg.com/event-stream/-/event-stream-3.3.4.tgz#4ab4c9a0f5a54db9338b4c34d86bfce8f4b35571"
dependencies:
duplexer "~0.1.1"
from "~0"
map-stream "~0.1.0"
pause-stream "0.0.11"
split "0.3"
stream-combiner "~0.0.4"
through "~2.3.1"
expand-brackets@^0.1.4:
version "0.1.5"
resolved "https://registry.yarnpkg.com/expand-brackets/-/expand-brackets-0.1.5.tgz#df07284e342a807cd733ac5af72411e581d1177b"
dependencies:
is-posix-bracket "^0.1.0"
expand-range@^1.8.1:
version "1.8.2"
resolved "https://registry.yarnpkg.com/expand-range/-/expand-range-1.8.2.tgz#a299effd335fe2721ebae8e257ec79644fc85337"
dependencies:
fill-range "^2.1.0"
extend@~3.0.0:
version "3.0.0"
resolved "https://registry.yarnpkg.com/extend/-/extend-3.0.0.tgz#5a474353b9f3353ddd8176dfd37b91c83a46f1d4"
extglob@^0.3.1:
version "0.3.2"
resolved "https://registry.yarnpkg.com/extglob/-/extglob-0.3.2.tgz#2e18ff3d2f49ab2765cec9023f011daa8d8349a1"
dependencies:
is-extglob "^1.0.0"
extsprintf@1.0.2:
version "1.0.2"
resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.0.2.tgz#e1080e0658e300b06294990cc70e1502235fd550"
filename-regex@^2.0.0:
version "2.0.0"
resolved "https://registry.yarnpkg.com/filename-regex/-/filename-regex-2.0.0.tgz#996e3e80479b98b9897f15a8a58b3d084e926775"
fill-range@^2.1.0:
version "2.2.3"
resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-2.2.3.tgz#50b77dfd7e469bc7492470963699fe7a8485a723"
dependencies:
is-number "^2.1.0"
isobject "^2.0.0"
randomatic "^1.1.3"
repeat-element "^1.1.2"
repeat-string "^1.5.2"
findup-sync@~0.3.0:
version "0.3.0"
resolved "https://registry.yarnpkg.com/findup-sync/-/findup-sync-0.3.0.tgz#37930aa5d816b777c03445e1966cc6790a4c0b16"
dependencies:
glob "~5.0.0"
follow-redirects@^1.2.3:
version "1.2.3"
resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.2.3.tgz#01abaeca85e3609837d9fcda3167a7e42fdaca21"
dependencies:
debug "^2.4.5"
for-in@^1.0.1:
version "1.0.2"
resolved "https://registry.yarnpkg.com/for-in/-/for-in-1.0.2.tgz#81068d295a8142ec0ac726c6e2200c30fb6d5e80"
for-own@^0.1.4:
version "0.1.5"
resolved "https://registry.yarnpkg.com/for-own/-/for-own-0.1.5.tgz#5265c681a4f294dabbf17c9509b6763aa84510ce"
dependencies:
for-in "^1.0.1"
forever-agent@~0.6.1:
version "0.6.1"
resolved "https://registry.yarnpkg.com/forever-agent/-/forever-agent-0.6.1.tgz#fbc71f0c41adeb37f96c577ad1ed42d8fdacca91"
form-data@~2.1.1:
version "2.1.4"
resolved "https://registry.yarnpkg.com/form-data/-/form-data-2.1.4.tgz#33c183acf193276ecaa98143a69e94bfee1750d1"
dependencies:
asynckit "^0.4.0"
combined-stream "^1.0.5"
mime-types "^2.1.12"
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"
fs-extra-promise@^1.0.1:
version "1.0.1"
resolved "https://registry.yarnpkg.com/fs-extra-promise/-/fs-extra-promise-1.0.1.tgz#b6ed1ace97b10e06b95f458d051b7f05c6613ee6"
dependencies:
bluebird "^3.5.0"
fs-extra "^2.1.2"
fs-extra@^2.1.2:
version "2.1.2"
resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-2.1.2.tgz#046c70163cef9aad46b0e4a7fa467fb22d71de35"
dependencies:
graceful-fs "^4.1.2"
jsonfile "^2.1.0"
fs.realpath@^1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f"
fsevents@^1.0.0:
version "1.1.1"
resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-1.1.1.tgz#f19fd28f43eeaf761680e519a203c4d0b3d31aff"
dependencies:
nan "^2.3.0"
node-pre-gyp "^0.6.29"
fstream-ignore@^1.0.5:
version "1.0.5"
resolved "https://registry.yarnpkg.com/fstream-ignore/-/fstream-ignore-1.0.5.tgz#9c31dae34767018fe1d249b24dada67d092da105"
dependencies:
fstream "^1.0.0"
inherits "2"
minimatch "^3.0.0"
fstream@^1.0.0, fstream@^1.0.10, fstream@^1.0.2:
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"
mkdirp ">=0.5 0"
rimraf "2"
gauge@~2.7.1:
version "2.7.3"
resolved "https://registry.yarnpkg.com/gauge/-/gauge-2.7.3.tgz#1c23855f962f17b3ad3d0dc7443f304542edfe09"
dependencies:
aproba "^1.0.3"
console-control-strings "^1.0.0"
has-unicode "^2.0.0"
object-assign "^4.1.0"
signal-exit "^3.0.0"
string-width "^1.0.1"
strip-ansi "^3.0.1"
wide-align "^1.1.0"
getpass@^0.1.1:
version "0.1.6"
resolved "https://registry.yarnpkg.com/getpass/-/getpass-0.1.6.tgz#283ffd9fc1256840875311c1b60e8c40187110e6"
dependencies:
assert-plus "^1.0.0"
glob-base@^0.3.0:
version "0.3.0"
resolved "https://registry.yarnpkg.com/glob-base/-/glob-base-0.3.0.tgz#dbb164f6221b1c0b1ccf82aea328b497df0ea3c4"
dependencies:
glob-parent "^2.0.0"
is-glob "^2.0.0"
glob-parent@^2.0.0:
version "2.0.0"
resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-2.0.0.tgz#81383d72db054fcccf5336daa902f182f6edbb28"
dependencies:
is-glob "^2.0.0"
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:
inflight "^1.0.4"
inherits "2"
minimatch "2 || 3"
once "^1.3.0"
path-is-absolute "^1.0.0"
glob@^7.0.5, glob@^7.1.1:
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 "^3.0.2"
once "^1.3.0"
path-is-absolute "^1.0.0"
got@^3.2.0:
version "3.3.1"
resolved "https://registry.yarnpkg.com/got/-/got-3.3.1.tgz#e5d0ed4af55fc3eef4d56007769d98192bcb2eca"
dependencies:
duplexify "^3.2.0"
infinity-agent "^2.0.0"
is-redirect "^1.0.0"
is-stream "^1.0.0"
lowercase-keys "^1.0.0"
nested-error-stacks "^1.0.0"
object-assign "^3.0.0"
prepend-http "^1.0.0"
read-all-stream "^3.0.0"
timed-out "^2.0.0"
graceful-fs@^4.1.11, graceful-fs@^4.1.2, graceful-fs@^4.1.6:
version "4.1.11"
resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.1.11.tgz#0e8bdfe4d1ddb8854d64e04ea7c00e2a026e5658"
"graceful-readlink@>= 1.0.0":
version "1.0.1"
resolved "https://registry.yarnpkg.com/graceful-readlink/-/graceful-readlink-1.0.1.tgz#4cafad76bc62f02fa039b2f94e9a3dd3a391a725"
handlebars@^4.0.5:
version "4.0.6"
resolved "https://registry.yarnpkg.com/handlebars/-/handlebars-4.0.6.tgz#2ce4484850537f9c97a8026d5399b935c4ed4ed7"
dependencies:
async "^1.4.0"
optimist "^0.6.1"
source-map "^0.4.4"
optionalDependencies:
uglify-js "^2.6"
har-schema@^1.0.5:
version "1.0.5"
resolved "https://registry.yarnpkg.com/har-schema/-/har-schema-1.0.5.tgz#d263135f43307c02c602afc8fe95970c0151369e"
har-validator@~4.2.1:
version "4.2.1"
resolved "https://registry.yarnpkg.com/har-validator/-/har-validator-4.2.1.tgz#33481d0f1bbff600dd203d75812a6a5fba002e2a"
dependencies:
ajv "^4.9.1"
har-schema "^1.0.5"
has-ansi@^2.0.0:
version "2.0.0"
resolved "https://registry.yarnpkg.com/has-ansi/-/has-ansi-2.0.0.tgz#34f5049ce1ecdf2b0649af3ef24e45ed35416d91"
dependencies:
ansi-regex "^2.0.0"
has-unicode@^2.0.0:
version "2.0.1"
resolved "https://registry.yarnpkg.com/has-unicode/-/has-unicode-2.0.1.tgz#e0e6fe6a28cf51138855e086d1691e771de2a8b9"
hawk@~3.1.3:
version "3.1.3"
resolved "https://registry.yarnpkg.com/hawk/-/hawk-3.1.3.tgz#078444bd7c1640b0fe540d2c9b73d59678e8e1c4"
dependencies:
boom "2.x.x"
cryptiles "2.x.x"
hoek "2.x.x"
sntp "1.x.x"
hoek@2.x.x:
version "2.16.3"
resolved "https://registry.yarnpkg.com/hoek/-/hoek-2.16.3.tgz#20bb7403d3cea398e91dc4710a8ff1b8274a25ed"
hoek@4.x.x:
version "4.1.1"
resolved "https://registry.yarnpkg.com/hoek/-/hoek-4.1.1.tgz#9cc573ffba2b7b408fb5e9c2a13796be94cddce9"
http-assert@^1.1.0:
version "1.2.0"
resolved "https://registry.yarnpkg.com/http-assert/-/http-assert-1.2.0.tgz#d6392e6f6519def4e340266b35096db6d3feba00"
dependencies:
deep-equal "~1.0.0"
http-errors "~1.4.0"
http-errors@^1.2.8, http-errors@^1.3.1:
version "1.6.1"
resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-1.6.1.tgz#5f8b8ed98aca545656bf572997387f904a722257"
dependencies:
depd "1.1.0"
inherits "2.0.3"
setprototypeof "1.0.3"
statuses ">= 1.3.1 < 2"
http-errors@~1.4.0:
version "1.4.0"
resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-1.4.0.tgz#6c0242dea6b3df7afda153c71089b31c6e82aabf"
dependencies:
inherits "2.0.1"
statuses ">= 1.2.1 < 2"
http-signature@~1.1.0:
version "1.1.1"
resolved "https://registry.yarnpkg.com/http-signature/-/http-signature-1.1.1.tgz#df72e267066cd0ac67fb76adf8e134a8fbcf91bf"
dependencies:
assert-plus "^0.2.0"
jsprim "^1.2.2"
sshpk "^1.7.0"
iconv-lite@0.4.15, iconv-lite@~0.4.13:
version "0.4.15"
resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.15.tgz#fe265a218ac6a57cfe854927e9d04c19825eddeb"
ignore-by-default@^1.0.0:
version "1.0.1"
resolved "https://registry.yarnpkg.com/ignore-by-default/-/ignore-by-default-1.0.1.tgz#48ca6d72f6c6a3af00a9ad4ae6876be3889e2b09"
imurmurhash@^0.1.4:
version "0.1.4"
resolved "https://registry.yarnpkg.com/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea"
infinity-agent@^2.0.0:
version "2.0.3"
resolved "https://registry.yarnpkg.com/infinity-agent/-/infinity-agent-2.0.3.tgz#45e0e2ff7a9eb030b27d62b74b3744b7a7ac4216"
inflation@^2.0.0:
version "2.0.0"
resolved "https://registry.yarnpkg.com/inflation/-/inflation-2.0.0.tgz#8b417e47c28f925a45133d914ca1fd389107f30f"
inflight@^1.0.4:
version "1.0.6"
resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9"
dependencies:
once "^1.3.0"
wrappy "1"
inherits@2, inherits@2.0.3, inherits@^2.0.1, inherits@~2.0.0, inherits@~2.0.1:
version "2.0.3"
resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.3.tgz#633c2c83e3da42a502f52466022480f4208261de"
inherits@2.0.1:
version "2.0.1"
resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.1.tgz#b17d08d326b4423e568eff719f91b0b1cbdf69f1"
ini@~1.3.0:
version "1.3.4"
resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.4.tgz#0537cb79daf59b59a1a517dff706c86ec039162e"
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-binary-path@^1.0.0:
version "1.0.1"
resolved "https://registry.yarnpkg.com/is-binary-path/-/is-binary-path-1.0.1.tgz#75f16642b480f187a711c814161fd3a4a7655898"
dependencies:
binary-extensions "^1.0.0"
is-buffer@^1.0.2:
version "1.1.5"
resolved "https://registry.yarnpkg.com/is-buffer/-/is-buffer-1.1.5.tgz#1f3b26ef613b214b88cbca23cc6c01d87961eecc"
is-dotfile@^1.0.0:
version "1.0.2"
resolved "https://registry.yarnpkg.com/is-dotfile/-/is-dotfile-1.0.2.tgz#2c132383f39199f8edc268ca01b9b007d205cc4d"
is-equal-shallow@^0.1.3:
version "0.1.3"
resolved "https://registry.yarnpkg.com/is-equal-shallow/-/is-equal-shallow-0.1.3.tgz#2238098fc221de0bcfa5d9eac4c45d638aa1c534"
dependencies:
is-primitive "^2.0.0"
is-extendable@^0.1.1:
version "0.1.1"
resolved "https://registry.yarnpkg.com/is-extendable/-/is-extendable-0.1.1.tgz#62b110e289a471418e3ec36a617d472e301dfc89"
is-extglob@^1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-1.0.0.tgz#ac468177c4943405a092fc8f29760c6ffc6206c0"
is-finite@^1.0.0:
version "1.0.2"
resolved "https://registry.yarnpkg.com/is-finite/-/is-finite-1.0.2.tgz#cc6677695602be550ef11e8b4aa6305342b6d0aa"
dependencies:
number-is-nan "^1.0.0"
is-fullwidth-code-point@^1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz#ef9e31386f031a7f0d643af82fde50c457ef00cb"
dependencies:
number-is-nan "^1.0.0"
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"
is-glob@^2.0.0, is-glob@^2.0.1:
version "2.0.1"
resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-2.0.1.tgz#d096f926a3ded5600f3fdfd91198cb0888c2d863"
dependencies:
is-extglob "^1.0.0"
is-npm@^1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/is-npm/-/is-npm-1.0.0.tgz#f2fb63a65e4905b406c86072765a1a4dc793b9f4"
is-number@^2.0.2, is-number@^2.1.0:
version "2.1.0"
resolved "https://registry.yarnpkg.com/is-number/-/is-number-2.1.0.tgz#01fcbbb393463a548f2f466cce16dece49db908f"
dependencies:
kind-of "^3.0.2"
is-posix-bracket@^0.1.0:
version "0.1.1"
resolved "https://registry.yarnpkg.com/is-posix-bracket/-/is-posix-bracket-0.1.1.tgz#3334dc79774368e92f016e6fbc0a88f5cd6e6bc4"
is-primitive@^2.0.0:
version "2.0.0"
resolved "https://registry.yarnpkg.com/is-primitive/-/is-primitive-2.0.0.tgz#207bab91638499c07b2adf240a41a87210034575"
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:
version "1.1.0"
resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-1.1.0.tgz#12d4a3dd4e68e0b79ceb8dbc84173ae80d91ca44"
is-typedarray@~1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/is-typedarray/-/is-typedarray-1.0.0.tgz#e479c80858df0c1b11ddda6940f96011fcda4a9a"
isarray@0.0.1:
version "0.0.1"
resolved "https://registry.yarnpkg.com/isarray/-/isarray-0.0.1.tgz#8a18acfca9a8f4177e09abfc6038939b05d1eedf"
isarray@1.0.0, isarray@~1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11"
isemail@2.x.x:
version "2.2.1"
resolved "https://registry.yarnpkg.com/isemail/-/isemail-2.2.1.tgz#0353d3d9a62951080c262c2aa0a42b8ea8e9e2a6"
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@latest:
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"
items@2.x.x:
version "2.1.1"
resolved "https://registry.yarnpkg.com/items/-/items-2.1.1.tgz#8bd16d9c83b19529de5aea321acaada78364a198"
jodid25519@^1.0.0:
version "1.0.2"
resolved "https://registry.yarnpkg.com/jodid25519/-/jodid25519-1.0.2.tgz#06d4912255093419477d425633606e0e90782967"
dependencies:
jsbn "~0.1.0"
joi@^10.4.1:
version "10.4.1"
resolved "https://registry.yarnpkg.com/joi/-/joi-10.4.1.tgz#a2fca1f0d603d1b843f2c1e086b52461f6be1f36"
dependencies:
hoek "4.x.x"
isemail "2.x.x"
items "2.x.x"
topo "2.x.x"
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"
json-schema@0.2.3:
version "0.2.3"
resolved "https://registry.yarnpkg.com/json-schema/-/json-schema-0.2.3.tgz#b480c892e59a2f05954ce727bd3f2a4e882f9e13"
json-stable-stringify@^1.0.1:
version "1.0.1"
resolved "https://registry.yarnpkg.com/json-stable-stringify/-/json-stable-stringify-1.0.1.tgz#9a759d39c5f2ff503fd5300646ed445f88c4f9af"
dependencies:
jsonify "~0.0.0"
json-stringify-safe@~5.0.1:
version "5.0.1"
resolved "https://registry.yarnpkg.com/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz#1296a2d58fd45f19a0f6ce01d65701e2c735b6eb"
jsonfile@^2.1.0:
version "2.4.0"
resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-2.4.0.tgz#3736a2b428b87bbda0cc83b53fa3d633a35c2ae8"
optionalDependencies:
graceful-fs "^4.1.6"
jsonify@~0.0.0:
version "0.0.0"
resolved "https://registry.yarnpkg.com/jsonify/-/jsonify-0.0.0.tgz#2c74b6ee41d93ca51b7b5aaee8f503631d252a73"
jsprim@^1.2.2:
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"
keygrip@~1.0.1:
version "1.0.1"
resolved "https://registry.yarnpkg.com/keygrip/-/keygrip-1.0.1.tgz#b02fa4816eef21a8c4b35ca9e52921ffc89a30e9"
kind-of@^3.0.2:
version "3.1.0"
resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-3.1.0.tgz#475d698a5e49ff5e53d14e3e732429dc8bf4cf47"
dependencies:
is-buffer "^1.0.2"
koa-bodyparser@^4.2.0:
version "4.2.0"
resolved "https://registry.yarnpkg.com/koa-bodyparser/-/koa-bodyparser-4.2.0.tgz#bce6e08bc65f8709b6d1faa9411c7f0d8938aa54"
dependencies:
co-body "^5.1.0"
copy-to "^2.0.1"
koa-compose@^3.0.0:
version "3.2.1"
resolved "https://registry.yarnpkg.com/koa-compose/-/koa-compose-3.2.1.tgz#a85ccb40b7d986d8e5a345b3a1ace8eabcf54de7"
dependencies:
any-promise "^1.1.0"
koa-convert@^1.2.0:
version "1.2.0"
resolved "https://registry.yarnpkg.com/koa-convert/-/koa-convert-1.2.0.tgz#da40875df49de0539098d1700b50820cebcd21d0"
dependencies:
co "^4.6.0"
koa-compose "^3.0.0"
koa-hbs@next:
version "1.0.0-alpha.1"
resolved "https://registry.yarnpkg.com/koa-hbs/-/koa-hbs-1.0.0-alpha.1.tgz#a060497f3d764f0bd299f069c1556e05d443781e"
dependencies:
glob "^7.0.5"
handlebars "^4.0.5"
koa-is-json@^1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/koa-is-json/-/koa-is-json-1.0.0.tgz#273c07edcdcb8df6a2c1ab7d59ee76491451ec14"
koa-log4@^2.1.0:
version "2.2.1"
resolved "https://registry.yarnpkg.com/koa-log4/-/koa-log4-2.2.1.tgz#7be52fc23ef8137fec4be7ee7c9a9bdf7e898f73"
dependencies:
log4js "^0.6.35"
koa-router@^7.0.1:
version "7.1.1"
resolved "https://registry.yarnpkg.com/koa-router/-/koa-router-7.1.1.tgz#38cce6b1381fada18cfa47a3b3323e995ca231cf"
dependencies:
debug "^2.2.0"
http-errors "^1.3.1"
koa-compose "^3.0.0"
methods "^1.0.1"
path-to-regexp "^1.1.1"
koa@^2.0.0:
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.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.5.0"
http-assert "^1.1.0"
http-errors "^1.2.8"
is-generator-function "^1.0.3"
koa-compose "^3.0.0"
koa-convert "^1.2.0"
koa-is-json "^1.0.0"
mime-types "^2.0.7"
on-finished "^2.1.0"
only "0.0.2"
parseurl "^1.3.0"
statuses "^1.2.0"
type-is "^1.5.5"
vary "^1.0.0"
latest-version@^1.0.0:
version "1.0.1"
resolved "https://registry.yarnpkg.com/latest-version/-/latest-version-1.0.1.tgz#72cfc46e3e8d1be651e1ebb54ea9f6ea96f374bb"
dependencies:
package-json "^1.0.0"
lazy-cache@^1.0.3:
version "1.0.4"
resolved "https://registry.yarnpkg.com/lazy-cache/-/lazy-cache-1.0.4.tgz#a1d78fc3a50474cb80845d3b3b6e1da49a446e8e"
lcid@^1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/lcid/-/lcid-1.0.0.tgz#308accafa0bc483a3867b4b6f2b9506251d1b835"
dependencies:
invert-kv "^1.0.0"
lodash._baseassign@^3.0.0:
version "3.2.0"
resolved "https://registry.yarnpkg.com/lodash._baseassign/-/lodash._baseassign-3.2.0.tgz#8c38a099500f215ad09e59f1722fd0c52bfe0a4e"
dependencies:
lodash._basecopy "^3.0.0"
lodash.keys "^3.0.0"
lodash._basecopy@^3.0.0:
version "3.0.1"
resolved "https://registry.yarnpkg.com/lodash._basecopy/-/lodash._basecopy-3.0.1.tgz#8da0e6a876cf344c0ad8a54882111dd3c5c7ca36"
lodash._bindcallback@^3.0.0:
version "3.0.1"
resolved "https://registry.yarnpkg.com/lodash._bindcallback/-/lodash._bindcallback-3.0.1.tgz#e531c27644cf8b57a99e17ed95b35c748789392e"
lodash._createassigner@^3.0.0:
version "3.1.1"
resolved "https://registry.yarnpkg.com/lodash._createassigner/-/lodash._createassigner-3.1.1.tgz#838a5bae2fdaca63ac22dee8e19fa4e6d6970b11"
dependencies:
lodash._bindcallback "^3.0.0"
lodash._isiterateecall "^3.0.0"
lodash.restparam "^3.0.0"
lodash._getnative@^3.0.0:
version "3.9.1"
resolved "https://registry.yarnpkg.com/lodash._getnative/-/lodash._getnative-3.9.1.tgz#570bc7dede46d61cdcde687d65d3eecbaa3aaff5"
lodash._isiterateecall@^3.0.0:
version "3.0.9"
resolved "https://registry.yarnpkg.com/lodash._isiterateecall/-/lodash._isiterateecall-3.0.9.tgz#5203ad7ba425fae842460e696db9cf3e6aac057c"
lodash.assign@^3.0.0:
version "3.2.0"
resolved "https://registry.yarnpkg.com/lodash.assign/-/lodash.assign-3.2.0.tgz#3ce9f0234b4b2223e296b8fa0ac1fee8ebca64fa"
dependencies:
lodash._baseassign "^3.0.0"
lodash._createassigner "^3.0.0"
lodash.keys "^3.0.0"
lodash.defaults@^3.1.2:
version "3.1.2"
resolved "https://registry.yarnpkg.com/lodash.defaults/-/lodash.defaults-3.1.2.tgz#c7308b18dbf8bc9372d701a73493c61192bd2e2c"
dependencies:
lodash.assign "^3.0.0"
lodash.restparam "^3.0.0"
lodash.isarguments@^3.0.0:
version "3.1.0"
resolved "https://registry.yarnpkg.com/lodash.isarguments/-/lodash.isarguments-3.1.0.tgz#2f573d85c6a24289ff00663b491c1d338ff3458a"
lodash.isarray@^3.0.0:
version "3.0.4"
resolved "https://registry.yarnpkg.com/lodash.isarray/-/lodash.isarray-3.0.4.tgz#79e4eb88c36a8122af86f844aa9bcd851b5fbb55"
lodash.keys@^3.0.0:
version "3.1.2"
resolved "https://registry.yarnpkg.com/lodash.keys/-/lodash.keys-3.1.2.tgz#4dbc0472b156be50a0b286855d1bd0b0c656098a"
dependencies:
lodash._getnative "^3.0.0"
lodash.isarguments "^3.0.0"
lodash.isarray "^3.0.0"
lodash.restparam@^3.0.0:
version "3.6.1"
resolved "https://registry.yarnpkg.com/lodash.restparam/-/lodash.restparam-3.6.1.tgz#936a4e309ef330a7645ed4145986c85ae5b20805"
lodash@^3.5.0:
version "3.10.1"
resolved "https://registry.yarnpkg.com/lodash/-/lodash-3.10.1.tgz#5bf45e8e49ba4189e17d482789dfd15bd140b7b6"
lodash@^4.17.4, lodash@^4.5.1, lodash@latest:
version "4.17.4"
resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.4.tgz#78203a4d1c328ae1d86dca6460e369b57f4055ae"
log4js@^0.6.35:
version "0.6.38"
resolved "https://registry.yarnpkg.com/log4js/-/log4js-0.6.38.tgz#2c494116695d6fb25480943d3fc872e662a522fd"
dependencies:
readable-stream "~1.0.2"
semver "~4.3.3"
"long@~2 >=2.3.0":
version "2.4.0"
resolved "https://registry.yarnpkg.com/long/-/long-2.4.0.tgz#9fa180bb1d9500cdc29c4156766a1995e1f4524f"
longest@^1.0.1:
version "1.0.1"
resolved "https://registry.yarnpkg.com/longest/-/longest-1.0.1.tgz#30a0b2da38f73770e8294a0d22e6625ed77d0097"
lowercase-keys@^1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/lowercase-keys/-/lowercase-keys-1.0.0.tgz#4e3366b39e7f5457e35f1324bdf6f88d0bfc7306"
map-stream@~0.1.0:
version "0.1.0"
resolved "https://registry.yarnpkg.com/map-stream/-/map-stream-0.1.0.tgz#e56aa94c4c8055a16404a0674b78f215f7c8e194"
media-typer@0.3.0:
version "0.3.0"
resolved "https://registry.yarnpkg.com/media-typer/-/media-typer-0.3.0.tgz#8710d7af0aa626f8fffa1ce00168545263255748"
methods@^1.0.1:
version "1.1.2"
resolved "https://registry.yarnpkg.com/methods/-/methods-1.1.2.tgz#5529a4d67654134edcc5266656835b0f851afcee"
micromatch@^2.1.5:
version "2.3.11"
resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-2.3.11.tgz#86677c97d1720b363431d04d0d15293bd38c1565"
dependencies:
arr-diff "^2.0.0"
array-unique "^0.2.1"
braces "^1.8.2"
expand-brackets "^0.1.4"
extglob "^0.3.1"
filename-regex "^2.0.0"
is-extglob "^1.0.0"
is-glob "^2.0.1"
kind-of "^3.0.2"
normalize-path "^2.0.1"
object.omit "^2.0.0"
parse-glob "^3.0.4"
regex-cache "^0.4.2"
mime-db@~1.27.0:
version "1.27.0"
resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.27.0.tgz#820f572296bbd20ec25ed55e5b5de869e5436eb1"
mime-types@^2.0.7, mime-types@^2.1.12, mime-types@~2.1.11, mime-types@~2.1.15, mime-types@~2.1.7:
version "2.1.15"
resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.15.tgz#a4ebf5064094569237b8cf70046776d09fc92aed"
dependencies:
mime-db "~1.27.0"
mime@^1.3.4:
version "1.3.4"
resolved "https://registry.yarnpkg.com/mime/-/mime-1.3.4.tgz#115f9e3b6b3daf2959983cb38f149a2d40eb5d53"
"minimatch@2 || 3", minimatch@^3.0.0, minimatch@^3.0.2:
version "3.0.3"
resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.3.tgz#2a4e4090b96b2db06a9d7df01055a62a77c9b774"
dependencies:
brace-expansion "^1.0.0"
minimist@0.0.8:
version "0.0.8"
resolved "https://registry.yarnpkg.com/minimist/-/minimist-0.0.8.tgz#857fcabfc3397d2625b8228262e86aa7a011b05d"
minimist@^1.2.0:
version "1.2.0"
resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.0.tgz#a35008b20f41383eec1fb914f4cd5df79a264284"
minimist@~0.0.1:
version "0.0.10"
resolved "https://registry.yarnpkg.com/minimist/-/minimist-0.0.10.tgz#de3f98543dbf96082be48ad1a0c7cda836301dcf"
"mkdirp@>=0.5 0", mkdirp@^0.5.0, mkdirp@^0.5.1:
version "0.5.1"
resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.1.tgz#30057438eac6cf7f8c4767f38648d6697d75c903"
dependencies:
minimist "0.0.8"
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@^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.9"
readable-stream "2.1.5"
ms@0.7.3:
version "0.7.3"
resolved "https://registry.yarnpkg.com/ms/-/ms-0.7.3.tgz#708155a5e44e33f5fd0fc53e81d0d40a91be1fff"
nan@^2.3.0:
version "2.6.2"
resolved "https://registry.yarnpkg.com/nan/-/nan-2.6.2.tgz#e4ff34e6c95fdfb5aecc08de6596f43605a7db45"
negotiator@0.6.1:
version "0.6.1"
resolved "https://registry.yarnpkg.com/negotiator/-/negotiator-0.6.1.tgz#2b327184e8992101177b28563fb5e7102acd0ca9"
nested-error-stacks@^1.0.0:
version "1.0.2"
resolved "https://registry.yarnpkg.com/nested-error-stacks/-/nested-error-stacks-1.0.2.tgz#19f619591519f096769a5ba9a86e6eeec823c3cf"
dependencies:
inherits "~2.0.1"
node-fetch@^1.0.1, node-fetch@^1.6.3:
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.34"
resolved "https://registry.yarnpkg.com/node-pre-gyp/-/node-pre-gyp-0.6.34.tgz#94ad1c798a11d7fc67381b50d47f8cc18d9799f7"
dependencies:
mkdirp "^0.5.1"
nopt "^4.0.1"
npmlog "^4.0.2"
rc "^1.1.7"
request "^2.81.0"
rimraf "^2.6.1"
semver "^5.3.0"
tar "^2.2.1"
tar-pack "^3.4.0"
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"
dependencies:
chokidar "^1.4.3"
debug "^2.2.0"
es6-promise "^3.0.2"
ignore-by-default "^1.0.0"
lodash.defaults "^3.1.2"
minimatch "^3.0.0"
ps-tree "^1.0.1"
touch "1.0.0"
undefsafe "0.0.3"
update-notifier "0.5.0"
nopt@^4.0.1:
version "4.0.1"
resolved "https://registry.yarnpkg.com/nopt/-/nopt-4.0.1.tgz#d0d4685afd5415193c8c7505602d0d17cd64474d"
dependencies:
abbrev "1"
osenv "^0.1.4"
nopt@~1.0.10:
version "1.0.10"
resolved "https://registry.yarnpkg.com/nopt/-/nopt-1.0.10.tgz#6ddd21bd2a31417b92727dd585f8a6f37608ebee"
dependencies:
abbrev "1"
normalize-path@^2.0.1:
version "2.1.1"
resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-2.1.1.tgz#1ab28b556e198363a8c1a6f7e6fa20137fe6aed9"
dependencies:
remove-trailing-separator "^1.0.1"
npmlog@^4.0.2:
version "4.0.2"
resolved "https://registry.yarnpkg.com/npmlog/-/npmlog-4.0.2.tgz#d03950e0e78ce1527ba26d2a7592e9348ac3e75f"
dependencies:
are-we-there-yet "~1.1.2"
console-control-strings "~1.1.0"
gauge "~2.7.1"
set-blocking "~2.0.0"
number-is-nan@^1.0.0:
version "1.0.1"
resolved "https://registry.yarnpkg.com/number-is-nan/-/number-is-nan-1.0.1.tgz#097b602b53422a522c1afb8790318336941a011d"
oauth-sign@~0.8.1:
version "0.8.2"
resolved "https://registry.yarnpkg.com/oauth-sign/-/oauth-sign-0.8.2.tgz#46a6ab7f0aead8deae9ec0565780b7d4efeb9d43"
object-assign@^3.0.0:
version "3.0.0"
resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-3.0.0.tgz#9bedd5ca0897949bca47e7ff408062d549f587f2"
object-assign@^4.0.1, object-assign@^4.1.0:
version "4.1.1"
resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863"
object.omit@^2.0.0:
version "2.0.1"
resolved "https://registry.yarnpkg.com/object.omit/-/object.omit-2.0.1.tgz#1a9c744829f39dbb858c76ca3579ae2a54ebd1fa"
dependencies:
for-own "^0.1.4"
is-extendable "^0.1.1"
on-finished@^2.1.0:
version "2.3.0"
resolved "https://registry.yarnpkg.com/on-finished/-/on-finished-2.3.0.tgz#20f1336481b083cd75337992a16971aa2d906947"
dependencies:
ee-first "1.1.1"
once@^1.3.0, once@^1.3.3:
version "1.4.0"
resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1"
dependencies:
wrappy "1"
once@~1.3.0:
version "1.3.3"
resolved "https://registry.yarnpkg.com/once/-/once-1.3.3.tgz#b2e261557ce4c314ec8304f3fa82663e4297ca20"
dependencies:
wrappy "1"
only@0.0.2:
version "0.0.2"
resolved "https://registry.yarnpkg.com/only/-/only-0.0.2.tgz#2afde84d03e50b9a8edc444e30610a70295edfb4"
optimist@^0.6.1, optimist@~0.6.0:
version "0.6.1"
resolved "https://registry.yarnpkg.com/optimist/-/optimist-0.6.1.tgz#da3ea74686fa21a19a111c326e90eb15a0196686"
dependencies:
minimist "~0.0.1"
wordwrap "~0.0.2"
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:
version "1.0.2"
resolved "https://registry.yarnpkg.com/os-homedir/-/os-homedir-1.0.2.tgz#ffbc4988336e0e833de0c168c7ef152121aa7fb3"
os-locale@^1.4.0:
version "1.4.0"
resolved "https://registry.yarnpkg.com/os-locale/-/os-locale-1.4.0.tgz#20f9f17ae29ed345e8bde583b13d2009803c14d9"
dependencies:
lcid "^1.0.0"
os-tmpdir@^1.0.0, os-tmpdir@~1.0.1:
version "1.0.2"
resolved "https://registry.yarnpkg.com/os-tmpdir/-/os-tmpdir-1.0.2.tgz#bbe67406c79aa85c5cfec766fe5734555dfa1274"
osenv@^0.1.0, osenv@^0.1.4:
version "0.1.4"
resolved "https://registry.yarnpkg.com/osenv/-/osenv-0.1.4.tgz#42fe6d5953df06c8064be6f176c3d05aaaa34644"
dependencies:
os-homedir "^1.0.0"
os-tmpdir "^1.0.0"
package-json@^1.0.0:
version "1.2.0"
resolved "https://registry.yarnpkg.com/package-json/-/package-json-1.2.0.tgz#c8ecac094227cdf76a316874ed05e27cc939a0e0"
dependencies:
got "^3.2.0"
registry-url "^3.0.0"
parse-glob@^3.0.4:
version "3.0.4"
resolved "https://registry.yarnpkg.com/parse-glob/-/parse-glob-3.0.4.tgz#b2c376cfb11f35513badd173ef0bb6e3a388391c"
dependencies:
glob-base "^0.3.0"
is-dotfile "^1.0.0"
is-extglob "^1.0.0"
is-glob "^2.0.0"
parseurl@^1.3.0:
version "1.3.1"
resolved "https://registry.yarnpkg.com/parseurl/-/parseurl-1.3.1.tgz#c8ab8c9223ba34888aa64a297b28853bec18da56"
path-is-absolute@^1.0.0:
version "1.0.1"
resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f"
path-parse@^1.0.5:
version "1.0.5"
resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.5.tgz#3c1adf871ea9cd6c9431b6ea2bd74a0ff055c4c1"
path-to-regexp@^1.1.1:
version "1.7.0"
resolved "https://registry.yarnpkg.com/path-to-regexp/-/path-to-regexp-1.7.0.tgz#59fde0f435badacba103a84e9d3bc64e96b9937d"
dependencies:
isarray "0.0.1"
pause-stream@0.0.11:
version "0.0.11"
resolved "https://registry.yarnpkg.com/pause-stream/-/pause-stream-0.0.11.tgz#fe5a34b0cbce12b5aa6a2b403ee2e73b602f1445"
dependencies:
through "~2.3"
performance-now@^0.2.0:
version "0.2.0"
resolved "https://registry.yarnpkg.com/performance-now/-/performance-now-0.2.0.tgz#33ef30c5c77d4ea21c5a53869d91b56d8f2555e5"
pinkie-promise@^2.0.0:
version "2.0.1"
resolved "https://registry.yarnpkg.com/pinkie-promise/-/pinkie-promise-2.0.1.tgz#2135d6dfa7a358c069ac9b178776288228450ffa"
dependencies:
pinkie "^2.0.0"
pinkie@^2.0.0:
version "2.0.4"
resolved "https://registry.yarnpkg.com/pinkie/-/pinkie-2.0.4.tgz#72556b80cfa0d48a974e80e77248e80ed4f7f870"
polygoat@^1.1.4:
version "1.1.4"
resolved "https://registry.yarnpkg.com/polygoat/-/polygoat-1.1.4.tgz#329f9a0d1b2d4a45149e2539523c6f7dfd850a5f"
pomelo-protobuf@^0.4.0:
version "0.4.0"
resolved "https://registry.yarnpkg.com/pomelo-protobuf/-/pomelo-protobuf-0.4.0.tgz#e45e9a0a446eb18667e0c6e13eeb53d47addbda8"
prepend-http@^1.0.0:
version "1.0.4"
resolved "https://registry.yarnpkg.com/prepend-http/-/prepend-http-1.0.4.tgz#d4f4562b0ce3696e41ac52d0e002e57a635dc6dc"
preserve@^0.2.0:
version "0.2.0"
resolved "https://registry.yarnpkg.com/preserve/-/preserve-0.2.0.tgz#815ed1f6ebc65926f865b310c0713bcb3315ce4b"
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"
protobufjs@^4.1.2:
version "4.1.3"
resolved "https://registry.yarnpkg.com/protobufjs/-/protobufjs-4.1.3.tgz#8e36d1b0226cbb68d647e4b44c2a144f37f2779e"
dependencies:
ascli "~1"
bytebuffer "~4 >=4.1"
glob "^5.0.10"
yargs "^3.10.0"
ps-tree@^1.0.1:
version "1.1.0"
resolved "https://registry.yarnpkg.com/ps-tree/-/ps-tree-1.1.0.tgz#b421b24140d6203f1ed3c76996b4427b08e8c014"
dependencies:
event-stream "~3.3.0"
punycode@^1.4.1:
version "1.4.1"
resolved "https://registry.yarnpkg.com/punycode/-/punycode-1.4.1.tgz#c0d5a63b2718800ad8e1eb0fa5269c84dd41845e"
qs@^6.4.0, qs@~6.4.0:
version "6.4.0"
resolved "https://registry.yarnpkg.com/qs/-/qs-6.4.0.tgz#13e26d28ad6b0ffaa91312cd3bf708ed351e7233"
randomatic@^1.1.3:
version "1.1.6"
resolved "https://registry.yarnpkg.com/randomatic/-/randomatic-1.1.6.tgz#110dcabff397e9dcff7c0789ccc0a49adf1ec5bb"
dependencies:
is-number "^2.0.2"
kind-of "^3.0.2"
raw-body@^2.2.0:
version "2.2.0"
resolved "https://registry.yarnpkg.com/raw-body/-/raw-body-2.2.0.tgz#994976cf6a5096a41162840492f0bdc5d6e7fb96"
dependencies:
bytes "2.4.0"
iconv-lite "0.4.15"
unpipe "1.0.0"
rc@^1.0.1, rc@^1.1.7:
version "1.2.1"
resolved "https://registry.yarnpkg.com/rc/-/rc-1.2.1.tgz#2e03e8e42ee450b8cb3dce65be1bf8974e1dfd95"
dependencies:
deep-extend "~0.4.0"
ini "~1.3.0"
minimist "^1.2.0"
strip-json-comments "~2.0.1"
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"
dependencies:
pinkie-promise "^2.0.0"
readable-stream "^2.0.0"
readable-stream@1.1.x:
version "1.1.14"
resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-1.1.14.tgz#7cf4c54ef648e3813084c636dd2079e166c081d9"
dependencies:
core-util-is "~1.0.0"
inherits "~2.0.1"
isarray "0.0.1"
string_decoder "~0.10.x"
readable-stream@2.1.5, readable-stream@^2.0.0, readable-stream@^2.0.2, readable-stream@^2.0.6, readable-stream@^2.1.4:
version "2.1.5"
resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.1.5.tgz#66fa8b720e1438b364681f2ad1a63c618448c9d0"
dependencies:
buffer-shims "^1.0.0"
core-util-is "~1.0.0"
inherits "~2.0.1"
isarray "~1.0.0"
process-nextick-args "~1.0.6"
string_decoder "~0.10.x"
util-deprecate "~1.0.1"
readable-stream@~1.0.2:
version "1.0.34"
resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-1.0.34.tgz#125820e34bc842d2f2aaafafe4c2916ee32c157c"
dependencies:
core-util-is "~1.0.0"
inherits "~2.0.1"
isarray "0.0.1"
string_decoder "~0.10.x"
readdirp@^2.0.0:
version "2.1.0"
resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-2.1.0.tgz#4ed0ad060df3073300c48440373f72d1cc642d78"
dependencies:
graceful-fs "^4.1.2"
minimatch "^3.0.2"
readable-stream "^2.0.2"
set-immediate-shim "^1.0.1"
regex-cache@^0.4.2:
version "0.4.3"
resolved "https://registry.yarnpkg.com/regex-cache/-/regex-cache-0.4.3.tgz#9b1a6c35d4d0dfcef5711ae651e8e9d3d7114145"
dependencies:
is-equal-shallow "^0.1.3"
is-primitive "^2.0.0"
registry-url@^3.0.0:
version "3.1.0"
resolved "https://registry.yarnpkg.com/registry-url/-/registry-url-3.1.0.tgz#3d4ef870f73dde1d77f0cf9a381432444e174942"
dependencies:
rc "^1.0.1"
remove-trailing-separator@^1.0.1:
version "1.0.1"
resolved "https://registry.yarnpkg.com/remove-trailing-separator/-/remove-trailing-separator-1.0.1.tgz#615ebb96af559552d4bf4057c8436d486ab63cc4"
repeat-element@^1.1.2:
version "1.1.2"
resolved "https://registry.yarnpkg.com/repeat-element/-/repeat-element-1.1.2.tgz#ef089a178d1483baae4d93eb98b4f9e4e11d990a"
repeat-string@^1.5.2:
version "1.6.1"
resolved "https://registry.yarnpkg.com/repeat-string/-/repeat-string-1.6.1.tgz#8dcae470e1c88abc2d600fff4a776286da75e637"
repeating@^1.1.2:
version "1.1.3"
resolved "https://registry.yarnpkg.com/repeating/-/repeating-1.1.3.tgz#3d4114218877537494f97f77f9785fab810fa4ac"
dependencies:
is-finite "^1.0.0"
request@^2.81.0:
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"
caseless "~0.12.0"
combined-stream "~1.0.5"
extend "~3.0.0"
forever-agent "~0.6.1"
form-data "~2.1.1"
har-validator "~4.2.1"
hawk "~3.1.3"
http-signature "~1.1.0"
is-typedarray "~1.0.0"
isstream "~0.1.2"
json-stringify-safe "~5.0.1"
mime-types "~2.1.7"
oauth-sign "~0.8.1"
performance-now "^0.2.0"
qs "~6.4.0"
safe-buffer "^5.0.1"
stringstream "~0.0.4"
tough-cookie "~2.3.0"
tunnel-agent "^0.6.0"
uuid "^3.0.0"
require_optional@~1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/require_optional/-/require_optional-1.0.0.tgz#52a86137a849728eb60a55533617f8f914f59abf"
dependencies:
resolve-from "^2.0.0"
semver "^5.1.0"
resolve-from@^2.0.0:
version "2.0.0"
resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-2.0.0.tgz#9480ab20e94ffa1d9e80a804c7ea147611966b57"
resolve@^1.3.2:
version "1.3.3"
resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.3.3.tgz#655907c3469a8680dc2de3a275a8fdd69691f0e5"
dependencies:
path-parse "^1.0.5"
right-align@^0.1.1:
version "0.1.3"
resolved "https://registry.yarnpkg.com/right-align/-/right-align-0.1.3.tgz#61339b722fe6a3515689210d24e14c96148613ef"
dependencies:
align-text "^0.1.1"
rimraf@2, rimraf@^2.5.1, rimraf@^2.6.1:
version "2.6.1"
resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.6.1.tgz#c2338ec643df7a1b7fe5c54fa86f57428a55f33d"
dependencies:
glob "^7.0.5"
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"
sax@^1.2.1:
version "1.2.2"
resolved "https://registry.yarnpkg.com/sax/-/sax-1.2.2.tgz#fd8631a23bc7826bef5d871bdb87378c95647828"
semver-diff@^2.0.0:
version "2.1.0"
resolved "https://registry.yarnpkg.com/semver-diff/-/semver-diff-2.1.0.tgz#4bbb8437c8d37e4b0cf1a68fd726ec6d645d6d36"
dependencies:
semver "^5.0.3"
semver@^5.0.3, semver@^5.1.0, semver@^5.3.0:
version "5.3.0"
resolved "https://registry.yarnpkg.com/semver/-/semver-5.3.0.tgz#9b2ce5d3de02d17c6012ad326aa6b4d0cf54f94f"
semver@~4.3.3:
version "4.3.6"
resolved "https://registry.yarnpkg.com/semver/-/semver-4.3.6.tgz#300bc6e0e86374f7ba61068b5b1ecd57fc6532da"
set-blocking@~2.0.0:
version "2.0.0"
resolved "https://registry.yarnpkg.com/set-blocking/-/set-blocking-2.0.0.tgz#045f9782d011ae9a6803ddd382b24392b3d890f7"
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"
setprototypeof@1.0.3:
version "1.0.3"
resolved "https://registry.yarnpkg.com/setprototypeof/-/setprototypeof-1.0.3.tgz#66567e37043eeb4f04d91bd658c0cbefb55b8e04"
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"
slide@^1.1.5:
version "1.1.6"
resolved "https://registry.yarnpkg.com/slide/-/slide-1.1.6.tgz#56eb027d65b4d2dce6cb2e2d32c4d4afc9e1d707"
sntp@1.x.x:
version "1.0.9"
resolved "https://registry.yarnpkg.com/sntp/-/sntp-1.0.9.tgz#6541184cc90aeea6c6e7b35e2659082443c66198"
dependencies:
hoek "2.x.x"
source-map@^0.4.4:
version "0.4.4"
resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.4.4.tgz#eba4f5da9c0dc999de68032d8b4f76173652036b"
dependencies:
amdefine ">=0.0.4"
source-map@~0.5.1:
version "0.5.6"
resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.5.6.tgz#75ce38f52bf0733c5a7f0c118d81334a2bb5f412"
split@0.3:
version "0.3.3"
resolved "https://registry.yarnpkg.com/split/-/split-0.3.3.tgz#cd0eea5e63a211dfff7eb0f091c4133e2d0dd28f"
dependencies:
through "2"
sshpk@^1.7.0:
version "1.13.0"
resolved "https://registry.yarnpkg.com/sshpk/-/sshpk-1.13.0.tgz#ff2a3e4fd04497555fed97b39a0fd82fafb3a33c"
dependencies:
asn1 "~0.2.3"
assert-plus "^1.0.0"
dashdash "^1.12.0"
getpass "^0.1.1"
optionalDependencies:
bcrypt-pbkdf "^1.0.0"
ecc-jsbn "~0.1.1"
jodid25519 "^1.0.0"
jsbn "~0.1.0"
tweetnacl "~0.14.0"
"statuses@>= 1.2.1 < 2", "statuses@>= 1.3.1 < 2", statuses@^1.2.0:
version "1.3.1"
resolved "https://registry.yarnpkg.com/statuses/-/statuses-1.3.1.tgz#faf51b9eb74aaef3b3acf4ad5f61abf24cb7b93e"
stream-combiner@~0.0.4:
version "0.0.4"
resolved "https://registry.yarnpkg.com/stream-combiner/-/stream-combiner-0.0.4.tgz#4d5e433c185261dde623ca3f44c586bcf5c4ad14"
dependencies:
duplexer "~0.1.1"
stream-shift@^1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/stream-shift/-/stream-shift-1.0.0.tgz#d5c752825e5367e786f78e18e445ea223a155952"
streamsearch@0.1.2:
version "0.1.2"
resolved "https://registry.yarnpkg.com/streamsearch/-/streamsearch-0.1.2.tgz#808b9d0e56fc273d809ba57338e929919a1a9f1a"
string-length@^1.0.0:
version "1.0.1"
resolved "https://registry.yarnpkg.com/string-length/-/string-length-1.0.1.tgz#56970fb1c38558e9e70b728bf3de269ac45adfac"
dependencies:
strip-ansi "^3.0.0"
string-width@^1.0.1:
version "1.0.2"
resolved "https://registry.yarnpkg.com/string-width/-/string-width-1.0.2.tgz#118bdf5b8cdc51a2a7e70d211e07e2b0b9b107d3"
dependencies:
code-point-at "^1.0.0"
is-fullwidth-code-point "^1.0.0"
strip-ansi "^3.0.0"
string_decoder@~0.10.x:
version "0.10.31"
resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-0.10.31.tgz#62e203bc41766c6c28c9fc84301dab1c5310fa94"
stringstream@~0.0.4:
version "0.0.5"
resolved "https://registry.yarnpkg.com/stringstream/-/stringstream-0.0.5.tgz#4e484cd4de5a0bbbee18e46307710a8a81621878"
strip-ansi@^3.0.0, strip-ansi@^3.0.1:
version "3.0.1"
resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-3.0.1.tgz#6a385fb8853d952d5ff05d0e8aaf94278dc63dcf"
dependencies:
ansi-regex "^2.0.0"
strip-json-comments@~2.0.1:
version "2.0.1"
resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-2.0.1.tgz#3c531942e908c2697c0ec344858c286c7ca0a60a"
supports-color@^2.0.0:
version "2.0.0"
resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-2.0.0.tgz#535d045ce6b6363fa40117084629995e9df324c7"
tar-pack@^3.4.0:
version "3.4.0"
resolved "https://registry.yarnpkg.com/tar-pack/-/tar-pack-3.4.0.tgz#23be2d7f671a8339376cbdb0b8fe3fdebf317984"
dependencies:
debug "^2.2.0"
fstream "^1.0.10"
fstream-ignore "^1.0.5"
once "^1.3.3"
readable-stream "^2.1.4"
rimraf "^2.5.1"
tar "^2.2.1"
uid-number "^0.0.6"
tar@^2.2.1:
version "2.2.1"
resolved "https://registry.yarnpkg.com/tar/-/tar-2.2.1.tgz#8e4d2a256c0e2185c6b18ad694aec968b83cb1d1"
dependencies:
block-stream "*"
fstream "^1.0.2"
inherits "2"
through@2, through@~2.3, through@~2.3.1:
version "2.3.8"
resolved "https://registry.yarnpkg.com/through/-/through-2.3.8.tgz#0dd4c9ffaabc357960b1b724115d7e0e86a2e1f5"
timed-out@^2.0.0:
version "2.0.0"
resolved "https://registry.yarnpkg.com/timed-out/-/timed-out-2.0.0.tgz#f38b0ae81d3747d628001f41dafc652ace671c0a"
tmp@0.0.31:
version "0.0.31"
resolved "https://registry.yarnpkg.com/tmp/-/tmp-0.0.31.tgz#8f38ab9438e17315e5dbd8b3657e8bfb277ae4a7"
dependencies:
os-tmpdir "~1.0.1"
topo@2.x.x:
version "2.0.2"
resolved "https://registry.yarnpkg.com/topo/-/topo-2.0.2.tgz#cd5615752539057c0dc0491a621c3bc6fbe1d182"
dependencies:
hoek "4.x.x"
touch@1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/touch/-/touch-1.0.0.tgz#449cbe2dbae5a8c8038e30d71fa0ff464947c4de"
dependencies:
nopt "~1.0.10"
tough-cookie@~2.3.0:
version "2.3.2"
resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-2.3.2.tgz#f081f76e4c85720e6c37a5faced737150d84072a"
dependencies:
punycode "^1.4.1"
tslint@^5.1.0:
version "5.1.0"
resolved "https://registry.yarnpkg.com/tslint/-/tslint-5.1.0.tgz#51a47baeeb58956fcd617bd2cf00e2ef0eea2ed9"
dependencies:
babel-code-frame "^6.22.0"
colors "^1.1.2"
diff "^3.2.0"
findup-sync "~0.3.0"
glob "^7.1.1"
optimist "~0.6.0"
resolve "^1.3.2"
semver "^5.3.0"
tsutils "^1.4.0"
tsutils@^1.4.0:
version "1.7.0"
resolved "https://registry.yarnpkg.com/tsutils/-/tsutils-1.7.0.tgz#2e63ccc2d6912bb095f7e363ff4100721dc86f50"
tunnel-agent@^0.6.0:
version "0.6.0"
resolved "https://registry.yarnpkg.com/tunnel-agent/-/tunnel-agent-0.6.0.tgz#27a5dea06b36b04a0a9966774b290868f0fc40fd"
dependencies:
safe-buffer "^5.0.1"
tweetnacl@^0.14.3, tweetnacl@~0.14.0:
version "0.14.5"
resolved "https://registry.yarnpkg.com/tweetnacl/-/tweetnacl-0.14.5.tgz#5ae68177f192d4456269d108afa93ff8743f4f64"
type-detect@0.1.1:
version "0.1.1"
resolved "https://registry.yarnpkg.com/type-detect/-/type-detect-0.1.1.tgz#0ba5ec2a885640e470ea4e8505971900dac58822"
type-is@^1.5.5, type-is@^1.6.14:
version "1.6.15"
resolved "https://registry.yarnpkg.com/type-is/-/type-is-1.6.15.tgz#cab10fb4909e441c82842eafe1ad646c81804410"
dependencies:
media-typer "0.3.0"
mime-types "~2.1.15"
typescript@^2.3.4:
version "2.3.4"
resolved "https://registry.yarnpkg.com/typescript/-/typescript-2.3.4.tgz#3d38321828231e434f287514959c37a82b629f42"
uglify-js@^2.6:
version "2.8.22"
resolved "https://registry.yarnpkg.com/uglify-js/-/uglify-js-2.8.22.tgz#d54934778a8da14903fa29a326fb24c0ab51a1a0"
dependencies:
source-map "~0.5.1"
yargs "~3.10.0"
optionalDependencies:
uglify-to-browserify "~1.0.0"
uglify-to-browserify@~1.0.0:
version "1.0.2"
resolved "https://registry.yarnpkg.com/uglify-to-browserify/-/uglify-to-browserify-1.0.2.tgz#6e0924d6bda6b5afe349e39a6d632850a0f882b7"
uid-number@^0.0.6:
version "0.0.6"
resolved "https://registry.yarnpkg.com/uid-number/-/uid-number-0.0.6.tgz#0ea10e8035e8eb5b8e4449f06da1c730663baa81"
ultron@1.0.x:
version "1.0.2"
resolved "https://registry.yarnpkg.com/ultron/-/ultron-1.0.2.tgz#ace116ab557cd197386a4e88f4685378c8b2e4fa"
undefsafe@0.0.3:
version "0.0.3"
resolved "https://registry.yarnpkg.com/undefsafe/-/undefsafe-0.0.3.tgz#ecca3a03e56b9af17385baac812ac83b994a962f"
unpipe@1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/unpipe/-/unpipe-1.0.0.tgz#b2bf4ee8514aae6165b4817829d21b2ef49904ec"
update-notifier@0.5.0:
version "0.5.0"
resolved "https://registry.yarnpkg.com/update-notifier/-/update-notifier-0.5.0.tgz#07b5dc2066b3627ab3b4f530130f7eddda07a4cc"
dependencies:
chalk "^1.0.0"
configstore "^1.0.0"
is-npm "^1.0.0"
latest-version "^1.0.0"
repeating "^1.1.2"
semver-diff "^2.0.0"
string-length "^1.0.0"
util-deprecate@~1.0.1:
version "1.0.2"
resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf"
uuid@^2.0.1:
version "2.0.3"
resolved "https://registry.yarnpkg.com/uuid/-/uuid-2.0.3.tgz#67e2e863797215530dff318e5bf9dcebfd47b21a"
uuid@^3.0.0, uuid@^3.0.1:
version "3.0.1"
resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.0.1.tgz#6544bba2dfda8c1cf17e629a3a305e2bb1fee6c1"
vary@^1.0.0:
version "1.1.1"
resolved "https://registry.yarnpkg.com/vary/-/vary-1.1.1.tgz#67535ebb694c1d52257457984665323f587e8d37"
vercomp@^1.0.2:
version "1.0.2"
resolved "https://registry.yarnpkg.com/vercomp/-/vercomp-1.0.2.tgz#725fd292c099014d919ad9e9e05d3d25c7cff491"
dependencies:
chai "^2.2.0"
verror@1.3.6:
version "1.3.6"
resolved "https://registry.yarnpkg.com/verror/-/verror-1.3.6.tgz#cff5df12946d297d2baaefaa2689e25be01c005c"
dependencies:
extsprintf "1.0.2"
whatwg-fetch@>=0.10.0:
version "2.0.3"
resolved "https://registry.yarnpkg.com/whatwg-fetch/-/whatwg-fetch-2.0.3.tgz#9c84ec2dcf68187ff00bc64e1274b442176e1c84"
wide-align@^1.1.0:
version "1.1.0"
resolved "https://registry.yarnpkg.com/wide-align/-/wide-align-1.1.0.tgz#40edde802a71fea1f070da3e62dcda2e7add96ad"
dependencies:
string-width "^1.0.1"
window-size@0.1.0:
version "0.1.0"
resolved "https://registry.yarnpkg.com/window-size/-/window-size-0.1.0.tgz#5438cd2ea93b202efa3a19fe8887aee7c94f9c9d"
window-size@^0.1.4:
version "0.1.4"
resolved "https://registry.yarnpkg.com/window-size/-/window-size-0.1.4.tgz#f8e1aa1ee5a53ec5bf151ffa09742a6ad7697876"
wordwrap@0.0.2:
version "0.0.2"
resolved "https://registry.yarnpkg.com/wordwrap/-/wordwrap-0.0.2.tgz#b79669bb42ecb409f83d583cad52ca17eaa1643f"
wordwrap@~0.0.2:
version "0.0.3"
resolved "https://registry.yarnpkg.com/wordwrap/-/wordwrap-0.0.3.tgz#a3d5da6cd5c0bc0008d37234bbaf1bed63059107"
wrap-ansi@^2.0.0:
version "2.1.0"
resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-2.1.0.tgz#d8fc3d284dd05794fe84973caecdd1cf824fdd85"
dependencies:
string-width "^1.0.1"
strip-ansi "^3.0.1"
wrappy@1:
version "1.0.2"
resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f"
write-file-atomic@^1.1.2:
version "1.3.2"
resolved "https://registry.yarnpkg.com/write-file-atomic/-/write-file-atomic-1.3.2.tgz#f80ac5e06d3a38996ab51b5d310db57102deb902"
dependencies:
graceful-fs "^4.1.11"
imurmurhash "^0.1.4"
slide "^1.1.5"
ws@^1.1.1:
version "1.1.4"
resolved "https://registry.yarnpkg.com/ws/-/ws-1.1.4.tgz#57f40d036832e5f5055662a397c4de76ed66bf61"
dependencies:
options ">=0.0.5"
ultron "1.0.x"
xdg-basedir@^2.0.0:
version "2.0.0"
resolved "https://registry.yarnpkg.com/xdg-basedir/-/xdg-basedir-2.0.0.tgz#edbc903cc385fc04523d966a335504b5504d1bd2"
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"
xmldoc@^1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/xmldoc/-/xmldoc-1.0.0.tgz#afb1177830612bbd716fe94e883e6a08f8b97906"
dependencies:
sax "^1.2.1"
y18n@^3.2.0:
version "3.2.1"
resolved "https://registry.yarnpkg.com/y18n/-/y18n-3.2.1.tgz#6d15fba884c08679c0d77e88e7759e811e07fa41"
yargs@^3.10.0:
version "3.32.0"
resolved "https://registry.yarnpkg.com/yargs/-/yargs-3.32.0.tgz#03088e9ebf9e756b69751611d2a5ef591482c995"
dependencies:
camelcase "^2.0.1"
cliui "^3.0.3"
decamelize "^1.1.1"
os-locale "^1.4.0"
string-width "^1.0.1"
window-size "^0.1.4"
y18n "^3.2.0"
yargs@~3.10.0:
version "3.10.0"
resolved "https://registry.yarnpkg.com/yargs/-/yargs-3.10.0.tgz#f7ee7bd857dd7c1d2d38c0e74efbd681d1431fd1"
dependencies:
camelcase "^1.0.2"
cliui "^2.1.0"
decamelize "^1.0.0"
window-size "0.1.0"
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