diff options
author | James E. Blair <jeblair@redhat.com> | 2018-09-29 11:50:22 -0700 |
---|---|---|
committer | James E. Blair <jeblair@redhat.com> | 2018-09-29 11:51:43 -0700 |
commit | 3dba813c643ec8f4b3323c2a09c6aecf8ad4d338 (patch) | |
tree | 4931b06e75e56b9d0480f24bb09c13993f6fcaec /web | |
parent | ca199eb9dbb64e25490ee5803e4f18c91f34681d (diff) | |
download | zuul-3dba813c643ec8f4b3323c2a09c6aecf8ad4d338.tar.gz |
Revert "web: rewrite interface in react"
Revert "Fix publish-openstack-javascript-content"
This reverts commit ca199eb9dbb64e25490ee5803e4f18c91f34681d.
This reverts commit 1082faae958bffa719ab333c3f5ae9776a8b26d7.
This appears to remove the tarball publishing system that we rely on.
Change-Id: Id746fb826dfc01b157c5b772adc1d2991ddcd93a
Diffstat (limited to 'web')
75 files changed, 3033 insertions, 10707 deletions
diff --git a/web/.eslintrc b/web/.eslintrc deleted file mode 100644 index f7a147486..000000000 --- a/web/.eslintrc +++ /dev/null @@ -1,23 +0,0 @@ -parser: babel-eslint -plugins: - - standard - - jest -rules: - no-console: off - semi: [error, never] - quotes: [error, single] - lines-between-class-members: error - react/prop-types: error - react/jsx-key: error - react/no-did-mount-set-state: error - react/no-did-update-set-state: error - react/no-deprecated: error -extends: - - eslint:recommended - - plugin:react/recommended -settings: - react: - version: 16.4 -env: - jest/globals: true - browser: true diff --git a/web/.gitignore b/web/.gitignore new file mode 100644 index 000000000..218f297df --- /dev/null +++ b/web/.gitignore @@ -0,0 +1 @@ +public_html/lib diff --git a/web/.jshintignore b/web/.jshintignore new file mode 100644 index 000000000..218f297df --- /dev/null +++ b/web/.jshintignore @@ -0,0 +1 @@ +public_html/lib diff --git a/web/.jshintrc b/web/.jshintrc new file mode 100644 index 000000000..15bd571e7 --- /dev/null +++ b/web/.jshintrc @@ -0,0 +1,21 @@ +{ + "bitwise": true, + "eqeqeq": true, + "forin": true, + "latedef": true, + "newcap": true, + "noarg": true, + "noempty": true, + "nonew": true, + "undef": true, + "unused": true, + + "strict": false, + "laxbreak": true, + "browser": true, + + "predef": [ + "jQuery", + "zuul" + ] +} diff --git a/web/app-routing.module.ts b/web/app-routing.module.ts new file mode 100644 index 000000000..15a2a1d98 --- /dev/null +++ b/web/app-routing.module.ts @@ -0,0 +1,84 @@ +// Routing information for Zuul dashboard pages +// +// Copyright 2018 Red Hat, Inc +// +// Licensed under the Apache License, Version 2.0 (the "License"); you may +// not use this file except in compliance with the License. You may obtain +// a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, WITHOUT +// WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the +// License for the specific language governing permissions and limitations +// under the License. + +import { NgModule, isDevMode } from '@angular/core' +import { RouterModule, Routes } from '@angular/router' + +import BuildsComponent from './builds/builds.component' +import JobsComponent from './jobs/jobs.component' +import StatusComponent from './status/status.component' +import StreamComponent from './stream/stream.component' +import TenantsComponent from './tenants/tenants.component' + +// Have all routes go to builds.html for now +const appRoutes: Routes = [ + { + path: 't/:tenant/builds.html', + component: BuildsComponent + }, + { + path: 'builds.html', + component: BuildsComponent + }, + { + path: 't/:tenant/status.html', + component: StatusComponent + }, + { + path: 'status.html', + component: StatusComponent + }, + { + path: 't/:tenant/jobs.html', + component: JobsComponent + }, + { + path: 'jobs.html', + component: JobsComponent + }, + { + path: 'stream.html', + component: StreamComponent + }, + { + path: 't/:tenant/stream.html', + component: StreamComponent + }, + { + path: 'tenants.html', + component: TenantsComponent + }, + { + path: 't/tenants.html', + component: TenantsComponent + }, + { + path: '**', + component: StatusComponent + } +] + +@NgModule({ + imports: [ + RouterModule.forRoot( + appRoutes, + // Enable router tracing in devel mode. This prints router decisions + // to the console.log. + { enableTracing: isDevMode() } + )], + exports: [RouterModule] +}) +export class AppRoutingModule { } diff --git a/web/app.component.ts b/web/app.component.ts new file mode 100644 index 000000000..e9f173cdc --- /dev/null +++ b/web/app.component.ts @@ -0,0 +1,28 @@ +// Main dashboard component +// +// Copyright 2018 Red Hat, Inc +// +// Licensed under the Apache License, Version 2.0 (the "License"); you may +// not use this file except in compliance with the License. You may obtain +// a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, WITHOUT +// WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the +// License for the specific language governing permissions and limitations +// under the License. + +import { Component } from '@angular/core' + +@Component({ + selector: 'zuul-dashboard', + template: ` + <navigation></navigation> + <div class="container-fluid"> + <router-outlet></router-outlet> + </div> + ` +}) +export class AppComponent {} diff --git a/web/app.module.ts b/web/app.module.ts new file mode 100644 index 000000000..2f977a792 --- /dev/null +++ b/web/app.module.ts @@ -0,0 +1,73 @@ +// Entrypoint for Zuul dashboard pages +// +// Copyright 2018 Red Hat, Inc +// +// Licensed under the Apache License, Version 2.0 (the "License"); you may +// not use this file except in compliance with the License. You may obtain +// a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, WITHOUT +// WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the +// License for the specific language governing permissions and limitations +// under the License. + +import './styles/zuul.css' + +import { APP_BASE_HREF } from '@angular/common' +import { NgModule } from '@angular/core' +import { BrowserModule } from '@angular/platform-browser' +import { HttpClientModule } from '@angular/common/http' +import { FormsModule } from '@angular/forms' + +import { CoreModule } from './core/core.module' + +import { AppRoutingModule } from './app-routing.module' +import { AppComponent } from './app.component' +import { getAppBaseHref } from './zuul/zuul.service' + +import BuildsComponent from './builds/builds.component' +import NavigationComponent from './navigation/navigation.component' +import JobsComponent from './jobs/jobs.component' +import StatusComponent from './status/status.component' +import StreamComponent from './stream/stream.component' +import TenantsComponent from './tenants/tenants.component' +import ZuulService from './zuul/zuul.service' + + +@NgModule({ + imports: [ + BrowserModule, + HttpClientModule, + FormsModule, + CoreModule.forRoot({}), + AppRoutingModule, + ], + declarations: [ + AppComponent, + BuildsComponent, + NavigationComponent, + JobsComponent, + StatusComponent, + StreamComponent, + TenantsComponent + ], + entryComponents: [ + BuildsComponent, + NavigationComponent, + JobsComponent, + StatusComponent, + StreamComponent, + TenantsComponent + ], + providers: [ + ZuulService, + {provide: APP_BASE_HREF, useValue: getAppBaseHref()} + ], + bootstrap: [ + AppComponent + ] +}) +export class AppModule { } diff --git a/web/build b/web/build deleted file mode 120000 index 45dc67777..000000000 --- a/web/build +++ /dev/null @@ -1 +0,0 @@ -../zuul/web/static/
\ No newline at end of file diff --git a/web/builds/build.ts b/web/builds/build.ts new file mode 100644 index 000000000..f7252f8ba --- /dev/null +++ b/web/builds/build.ts @@ -0,0 +1,28 @@ +// Copyright 2017 Red Hat +// +// Licensed under the Apache License, Version 2.0 (the "License"); you may +// not use this file except in compliance with the License. You may obtain +// a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, WITHOUT +// WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the +// License for the specific language governing permissions and limitations +// under the License. + +export default class Build { + + constructor( + public job_name: string, + public result: string, + public project: string, + public pipeline: string, + public ref_url: string, + public duration: number, + public start_time: string, + public log_url?: string, + ) {} + +} diff --git a/web/builds/builds.component.html b/web/builds/builds.component.html new file mode 100644 index 000000000..7ce5de2de --- /dev/null +++ b/web/builds/builds.component.html @@ -0,0 +1,67 @@ +<!-- +Copyright 2017 Red Hat + +Licensed under the Apache License, Version 2.0 (the "License"); you may +not use this file except in compliance with the License. You may obtain +a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, WITHOUT +WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the +License for the specific language governing permissions and limitations +under the License. +--> +<div class="container-fluid"> + <span style="float: right; margin-top: 7px;"> + <form class="form-inline" #buildsForm="ngForm"> + <div class="form-group"> + <label for="pipeline">Pipeline:</label> + <input class="form-control" id="pipeline" + [(ngModel)]="pipeline" name="pipeline" /> + </div> + <div class="form-group"> + <label for="job_name">Job:</label> + <input class="form-control" id="job_name" + [(ngModel)]="job_name" name="job_name" /> + </div> + <div class="form-group"> + <label for="project">Project:</label> + <input class="form-control" id="project" + [(ngModel)]="project" name="project"> + </div> + <button type="submit" class="btn" (click)='buildsFetch()'> + Refresh + </button> + </form> + </span> +</div> +<table class="table table-hover table-condensed"> + <thead> + <tr> + <th>Job</th> + <th>Project</th> + <th>Branch</th> + <th>Pipeline</th> + <th>Change</th> + <th>Duration</th> + <th>Log url</th> + <th>Start time</th> + <th>Result</th> + </tr> + </thead> + <tbody> + <tr *ngFor="let build of builds" [class]="getRowClass(build)"> + <td>{{ build.job_name }}</td> + <td>{{ build.project }}</td> + <td>{{ build.branch }}</td> + <td>{{ build.pipeline }}</td> + <td><a href="{{ build.ref_url }}" target="_self">change</a></td> + <td>{{ build.duration }} seconds</td> + <td><a *ngIf="build.log_url" href="{{ build.log_url }}" target="_self">logs</a></td> + <td>{{ build.start_time }}</td> + <td>{{ build.result }}</td> + </tr> + </tbody> +</table> diff --git a/web/builds/builds.component.ts b/web/builds/builds.component.ts new file mode 100644 index 000000000..5ef2dea46 --- /dev/null +++ b/web/builds/builds.component.ts @@ -0,0 +1,78 @@ +// Copyright 2017 Red Hat +// +// Licensed under the Apache License, Version 2.0 (the "License"); you may +// not use this file except in compliance with the License. You may obtain +// a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, WITHOUT +// WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the +// License for the specific language governing permissions and limitations +// under the License. + +import { Component, OnInit } from '@angular/core' +import { ActivatedRoute } from '@angular/router' +import { HttpClient, HttpParams } from '@angular/common/http' +import { Observable } from 'rxjs/Observable' +import 'rxjs/add/operator/map' + +import ZuulService from '../zuul/zuul.service' +import Build from './build' + + +@Component({ + template: require('./builds.component.html') +}) +export default class BuildsComponent implements OnInit { + builds: Build[] + pipeline: string + job_name: string + project: string + + constructor( + private http: HttpClient, private route: ActivatedRoute, + private zuul: ZuulService + ) {} + + async ngOnInit() { + await this.zuul.setTenant(this.route.snapshot.paramMap.get('tenant')) + + this.pipeline = this.route.snapshot.queryParamMap.get('pipeline') + this.job_name = this.route.snapshot.queryParamMap.get('job_name') + this.project = this.route.snapshot.queryParamMap.get('project') + + this.buildsFetch() + } + + buildsFetch(): void { + let params = new HttpParams() + if (this.pipeline) { params = params.set('pipeline', this.pipeline) } + if (this.job_name) { params = params.set('job_name', this.job_name) } + if (this.project) { params = params.set('project', this.project) } + + const remoteLocation = this.zuul.getSourceUrl('builds') + if (remoteLocation) { + this.http.get<Build[]>(remoteLocation, {params: params}) + .subscribe(builds => { + for (const build of builds) { + /* Fix incorect url for post_failure job */ + /* TODO(mordred) Maybe let's fix this server side? */ + if (build.log_url === build.job_name) { + build.log_url = undefined + } + } + this.builds = builds + }) + } + } + + getRowClass(build: Build): string { + if (build.result === 'SUCCESS') { + return 'success' + } else { + return 'warning' + } + } +} diff --git a/web/config/main.ejs b/web/config/main.ejs new file mode 100644 index 000000000..94bd434da --- /dev/null +++ b/web/config/main.ejs @@ -0,0 +1,24 @@ +<!DOCTYPE html> +<!-- +Copyright 2017 Red Hat + +Licensed under the Apache License, Version 2.0 (the "License"); you may +not use this file except in compliance with the License. You may obtain +a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, WITHOUT +WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the +License for the specific language governing permissions and limitations +under the License. +--> +<html> +<head> + <meta http-equiv="Content-type" content="text/html; charset=utf-8"/> + <title id='pagetitle'><%= htmlWebpackPlugin.options.title %></title> +</head> +<body> + <zuul-dashboard></zuul-dashboard> +</body></html> diff --git a/web/config/status-basic.json b/web/config/status-basic.json new file mode 100644 index 000000000..63745a30b --- /dev/null +++ b/web/config/status-basic.json @@ -0,0 +1,178 @@ +{ + "last_reconfigured": 1389381756000, + "message": "Example info message", + "pipelines": [ + { + "name": "test", + "description": "Lint and unit tests", + "change_queues": [ + { + "name": "some-jobs@worker301.ci-example.org", + "heads": [ + [ + { + "id": "10101,1", + "url": "#!/review.example.org/r/10101", + "project": "openstack/infra/zuul", + "jobs": [ + { + "name": "zuul-merge", + "url": "#!/jenkins.example.org/job/zuul-merge/201", + "result": "SUCCESS", + "voting": true + }, + { + "name": "zuul-lint", + "url": "#!/jenkins.example.org/job/zuul-lint/201", + "result": "SUCCESS", + "voting": true + }, + { + "name": "zuul-test", + "url": "#!/jenkins.example.org/job/zuul-test/201", + "result": "SUCCESS", + "voting": true + } + ] + } + ], + [ + { + "id": "10103,1", + "url": "#!/review.example.org/r/10103", + "project": "google/gerrit", + "jobs": [ + { + "name": "gerrit-merge", + "url": "#!/jenkins.example.org/job/gerrit-merge/203", + "result": "SUCCESS", + "voting": false + } + ] + } + ] + ] + }, + { + "name": "other-jobs@worker301.ci-example.org", + "heads": [ + [ + { + "id": "10102,1", + "url": "#!/review.example.org/r/10102", + "project": "google/gerrit", + "jobs": [ + { + "name": "gerrit-merge", + "url": "#!/jenkins.example.org/job/gerrit-merge/202", + "result": "UNSTABLE", + "voting": false + } + ] + } + ], + [ + { + "id": "10104,1", + "url": "#!/review.example.org/r/10104", + "project": "openstack/infra/zuul", + "jobs": [ + { + "name": "zuul-merge", + "url": "#!/jenkins.example.org/job/zuul-merge/204", + "result": "SUCCESS", + "voting": true + }, + { + "name": "zuul-lint", + "url": "#!/jenkins.example.org/job/zuul-lint/204", + "result": "FAILURE", + "voting": true + }, + { + "name": "zuul-test", + "url": "#!/jenkins.example.org/job/zuul-test/204", + "result": null, + "voting": true + } + ] + } + ] + ] + } + ] + }, + { + "name": "gate-and-submit", + "change_queues": [] + }, + { + "name": "postmerge", + "change_queues": [ + { + "name": "some-jobs@worker301.ci-example.org", + "heads": [ + [ + { + "id": "7f1d65cb0f663c907698f915da01c008c7ef4748", + "url": "#!/review.example.org/r/10100", + "project": "openstack/infra/zuul", + "jobs": [ + { + "name": "zuul-lint", + "url": "#!/jenkins.example.org/job/zuul-lint/200", + "result": "SUCCESS", + "voting": true + }, + { + "name": "zuul-test", + "url": "#!/jenkins.example.org/job/zuul-test/200", + "result": "FAILURE", + "voting": true + }, + { + "name": "zuul-regression-python2", + "url": "#!/jenkins.example.org/job/zuul-regression-python2/200", + "result": "SUCCESS", + "voting": true + }, + { + "name": "zuul-regression-python3", + "url": "#!/jenkins.example.org/job/zuul-regression-python3/200", + "result": "FAILURE", + "voting": true + }, + { + "name": "zuul-performance-python2", + "url": null, + "result": null, + "voting": true + }, + { + "name": "zuul-performance-python3", + "url": null, + "result": null, + "voting": true + }, + { + "name": "zuul-docs-publish", + "url": null, + "result": null, + "voting": true + } + ] + } + ] + ] + } + ] + } + ], + "trigger_event_queue": { + "length": 0 + }, + "result_event_queue": { + "length": 0 + }, + "zuul_version": "2.0.0.19" +} diff --git a/web/config/status-openstack.json b/web/config/status-openstack.json new file mode 100644 index 000000000..41c231a39 --- /dev/null +++ b/web/config/status-openstack.json @@ -0,0 +1,312 @@ +{ + "last_reconfigured": 1389381756000, + "pipelines": [ + { + "name": "check", + "description": "Newly uploaded patchsets enter this pipeline to receive an initial +/-1 Verified vote from Jenkins.", + "change_queues": [ + { + "heads": [], + "name": "stackforge/tripleo-image-elements" + } + ] + }, + { + "description": "Changes that have been approved by core developers are enqueued in order in this pipeline, and .", + "change_queues": [ + { + "heads": [], + "name": "openstack-detackforge/reddwarf-integration" + }, + { + "heads": [], + "name": "stackforge/moniker" + }, + { + "heads": [ + [ + { + "url": "https://review.openstack.org/26292", + "project": "openstack/quantum", + "jobs": [ + { + "url": "https://jenkins.openstack.org/job/gate-quantum-docs/5501/consoleFull", + "voting": true, + "result": "SUCCESS", + "name": "gate-quantum-docs" + }, + { + "url": "https://jenkins.openstack.org/job/gate-quantum-pep8/6254/consoleFull", + "voting": true, + "result": "SUCCESS", + "name": "gate-quantum-pep8" + }, + { + "url": "https://jenkins.openstack.org/job/gate-quantum-python26/5876/", + "voting": true, + "result": null, + "name": "gate-quantum-python26" + }, + { + "url": "https://jenkins.openstack.org/job/gate-quantum-python27/5887/", + "voting": true, + "result": null, + "name": "gate-quantum-python27" + }, + { + "url": "https://jenkins.openstack.org/job/gate-tempest-devstack-vm-quantum/17548/", + "voting": true, + "result": null, + "name": "gate-tempest-devstack-vm-quantum" + } + ], + "id": "26292,1" + } + ] + ], + "name": "openstack-dev/devstack, openstack-infra/devstack-gate, openstack/cinder, openstack/glance, openstack/horizon, openstack/keystone, openstack/nova, openstack/python-cinderclient, openstack/python-glanceclient, openstack/python-keystoneclient, openstack/python-novaclient, openstack/python-quantumclient, openstack/quantum, openstack/swift, openstack/tempest, z/tempest" + }, + { + "heads": [], + "name": "openstack/ceilometer" + }, + { + "heads": [], + "name": "stackforge/puppet-openstack" + }, + { + "heads": [], + "name": "stackforge/puppet-cinder" + }, + { + "heads": [], + "name": "stackforge/marconi" + }, + { + "heads": [], + "name": "openstack-infra/config" + }, + { + "heads": [], + "name": "stackforge/tripleo-image-elements" + }, + { + "heads": [], + "name": "stackforge/kwapi" + }, + { + "heads": [], + "name": "stackforge/python-reddwarfclient" + }, + { + "heads": [], + "name": "stackforge/python-savannaclient" + }, + { + "heads": [], + "name": "stackforge/python-monikerclient" + }, + { + "heads": [], + "name": "stackforge/packstack" + }, + { + "heads": [], + "name": "openstack/oslo.config" + }, + { + "heads": [], + "name": "openstack-infra/jenkins-job-builder" + }, + { + "heads": [], + "name": "stackforge/puppet-horizon" + }, + { + "heads": [], + "name": "openstack/heat-cfntools" + }, + { + "heads": [], + "name": "openstack/oslo-incubator" + }, + { + "heads": [], + "name": "stackforge/os-config-applier" + }, + { + "heads": [], + "name": "openstack/requirements" + }, + { + "heads": [], + "name": "stackforge/puppet-glance" + }, + { + "heads": [], + "name": "openstack-infra/gearman-plugin" + }, + { + "heads": [], + "name": "stackforge/puppet-keystone" + }, + { + "heads": [], + "name": "stackforge/puppet-nova" + }, + { + "heads": [], + "name": "stackforge/climate" + }, + { + "heads": [], + "name": "openstack/python-swiftclient" + }, + { + "heads": [], + "name": "openstack/python-ceilometerclient" + }, + { + "heads": [], + "name": "openstack-infra/git-review" + }, + { + "heads": [], + "name": "stackforge/bufunfa" + }, + { + "heads": [], + "name": "stackforge/puppet-swift" + }, + { + "heads": [], + "name": "openstack-infra/statusbot" + }, + { + "heads": [], + "name": "openstack/openstack-planet" + }, + { + "heads": [], + "name": "openstack/python-openstackclient" + }, + { + "heads": [], + "name": "stackforge/diskimage-builder" + }, + { + "heads": [], + "name": "openstack-infra/gerritlib" + }, + { + "heads": [], + "name": "openstack-infra/zuul" + }, + { + "heads": [], + "name": "stackforge/reddwarf" + }, + { + "heads": [], + "name": "openstack-dev/hacking" + }, + { + "heads": [], + "name": "openstack/python-heatclient" + }, + { + "heads": [], + "name": "stackforge/python-libraclient" + }, + { + "heads": [], + "name": "openstack-infra/reviewday" + }, + { + "heads": [], + "name": "openstack-infra/jeepyb" + }, + { + "heads": [], + "name": "openstack/heat" + }, + { + "heads": [], + "name": "stackforge/libra" + }, + { + "heads": [], + "name": "openstack-infra/gerrit" + }, + { + "heads": [], + "name": "stackforge/healthnmon" + }, + { + "heads": [], + "name": "openstack-infra/gerritbot" + }, + { + "heads": [], + "name": "openstack-dev/pbr" + }, + { + "heads": [], + "name": "stackforge/savanna" + }, + { + "heads": [], + "name": "openstack/openstack-manuals" + } + ], + "name": "gate" + }, + { + "description": "This pipeline runs jobs that operate after each change is merged.", + "change_queues": [ + { + "heads": [], + "name": "openstack-dev/hacking, openstack-dev/openstack-qa, openstack-dev/pbr, openstack-infra/config, openstack-infra/gearman-plugin, openstack-infra/gerrit, openstack-infra/gerritbot, openstack-infra/git-review, openstack-infra/jenkins-job-builder, openstack-infra/nose-html-output, openstack-infra/reviewday, openstack-infra/statusbot, openstack-infra/zuul, openstack/api-site, openstack/ceilometer, openstack/cinder, openstack/compute-api, openstack/glance, openstack/heat, openstack/heat-cfntools, openstack/horizon, openstack/identity-api, openstack/image-api, openstack/keystone, openstack/netconn-api, openstack/nova, openstack/object-api, openstack/openstack-manuals, openstack/oslo-incubator, openstack/oslo.config, openstack/python-ceilometerclient, openstack/python-cinderclient, openstack/python-glanceclient, openstack/python-heatclient, openstack/python-keystoneclient, openstack/python-novaclient, openstack/python-openstackclient, openstack/python-quantumclient, openstack/python-swiftclient, openstack/quantum, openstack/requirements, openstack/swift, openstack/volume-api, stackforge/bufunfa, stackforge/diskimage-builder, stackforge/moniker, stackforge/os-config-applier, stackforge/python-monikerclient, stackforge/python-savannaclient, stackforge/reddwarf, stackforge/savanna, stackforge/tripleo-image-elements" + } + ], + "name": "post" + }, + { + "description": "This pipeline runs jobs on projects in response to pre-release tags.", + "change_queues": [ + { + "heads": [], + "name": "openstack-dev/hacking, openstack-dev/pbr, openstack-infra/gerritbot, openstack-infra/gerritlib, openstack-infra/git-review, openstack-infra/jeepyb, openstack-infra/jenkins-job-builder, openstack-infra/nose-html-output, openstack-infra/reviewday, openstack-infra/statusbot, openstack-infra/zuul, openstack/ceilometer, openstack/cinder, openstack/glance, openstack/heat, openstack/heat-cfntools, openstack/horizon, openstack/keystone, openstack/nova, openstack/oslo.config, openstack/python-ceilometerclient, openstack/python-cinderclient, openstack/python-glanceclient, openstack/python-heatclient, openstack/python-keystoneclient, openstack/python-novaclient, openstack/python-openstackclient, openstack/python-quantumclient, openstack/python-swiftclient, openstack/quantum, openstack/swift, stackforge/moniker, stackforge/python-monikerclient, stackforge/python-reddwarfclient, stackforge/python-savannaclient, stackforge/savanna" + } + ], + "name": "pre-release" + }, + { + "description": "When a commit is tagged as a release, this pipeline runs jobs that publish archives and documentation.", + "change_queues": [ + { + "heads": [], + "name": "openstack-dev/hacking, openstack-dev/openstack-qa, openstack-dev/pbr, openstack-infra/gerritbot, openstack-infra/gerritlib, openstack-infra/git-review, openstack-infra/jeepyb, openstack-infra/jenkins-job-builder, openstack-infra/nose-html-output, openstack-infra/reviewday, openstack-infra/statusbot, openstack-infra/zuul, openstack/ceilometer, openstack/cinder, openstack/glance, openstack/heat, openstack/heat-cfntools, openstack/horizon, openstack/keystone, openstack/nova, openstack/oslo-incubator, openstack/oslo.config, openstack/python-ceilometerclient, openstack/python-cinderclient, openstack/python-glanceclient, openstack/python-heatclient, openstack/python-keystoneclient, openstack/python-novaclient, openstack/python-openstackclient, openstack/python-quantumclient, openstack/python-swiftclient, openstack/quantum, openstack/swift, stackforge/moniker, stackforge/python-monikerclient, stackforge/python-reddwarfclient, stackforge/python-savannaclient, stackforge/savanna" + } + ], + "name": "release" + }, + { + "description": "This pipeline is used for silently testing new jobs.", + "change_queues": [ + { + "heads": [], + "name": "" + } + ], + "name": "silent" + } + ], + "trigger_event_queue": { + "length": 0 + }, + "result_event_queue": { + "length": 0 + }, + "zuul_version": "2.0.0.19" +} diff --git a/web/config/status-tree.json b/web/config/status-tree.json new file mode 100644 index 000000000..31a37c8aa --- /dev/null +++ b/web/config/status-tree.json @@ -0,0 +1 @@ +{"pipelines": [{"description": "Newly uploaded patchsets enter this pipeline to receive an initial +/-1 Verified vote from Jenkins.", "change_queues": [{"heads": [[{"failing_reasons": ["at least one job failed"], "items_behind": [], "jobs": [{"elapsed_time": 271291, "name": "gate-nova-pep8", "url": "https://jenkins02.openstack.org/job/gate-nova-pep8/4691/", "voting": true, "remaining_time": 0, "result": "SUCCESS"}, {"elapsed_time": 229630, "name": "gate-nova-docs", "url": "https://jenkins02.openstack.org/job/gate-nova-docs/4628/", "voting": true, "remaining_time": 0, "result": "SUCCESS"}, {"elapsed_time": 1136580, "name": "gate-nova-python26", "url": "https://jenkins01.openstack.org/job/gate-nova-python26/5766/", "voting": true, "remaining_time": 0, "result": "SUCCESS"}, {"elapsed_time": 686242, "name": "gate-nova-python27", "url": "https://jenkins02.openstack.org/job/gate-nova-python27/5832/", "voting": true, "remaining_time": 0, "result": "SUCCESS"}, {"elapsed_time": 2119040, "name": "check-tempest-devstack-vm-full", "url": "https://jenkins01.openstack.org/job/check-tempest-devstack-vm-full/5/", "voting": true, "remaining_time": 0, "result": null}, {"elapsed_time": 2120037, "name": "check-tempest-devstack-vm-postgres-full", "url": "https://jenkins01.openstack.org/job/check-tempest-devstack-vm-postgres-full/4/", "voting": true, "remaining_time": 0, "result": null}, {"elapsed_time": 1621689, "name": "check-tempest-devstack-vm-neutron", "url": "https://jenkins01.openstack.org/job/check-tempest-devstack-vm-neutron/5/", "voting": true, "remaining_time": 0, "result": "SUCCESS"}, {"elapsed_time": 1044129, "name": "check-tempest-devstack-vm-large-ops", "url": "https://jenkins01.openstack.org/job/check-tempest-devstack-vm-large-ops/1/", "voting": true, "remaining_time": 0, "result": "FAILURE"}, {"elapsed_time": 1977057, "name": "check-grenade-devstack-vm", "url": "https://jenkins01.openstack.org/job/check-grenade-devstack-vm/4/", "voting": true, "remaining_time": 0, "result": "SUCCESS"}, {"elapsed_time": 678310, "name": "gate-nova-pylint", "url": "https://jenkins01.openstack.org/job/gate-nova-pylint/3023/", "voting": false, "remaining_time": 0, "result": "SUCCESS"}], "url": "https://review.openstack.org/48721", "item_ahead": null, "enqueue_time": 1380308488015, "project": "openstack/nova", "remaining_time": 0, "id": "48721,1"}], [{"failing_reasons": ["at least one job failed"], "items_behind": [], "jobs": [{"elapsed_time": 582992, "name": "gate-requirements-install", "url": "https://jenkins02.openstack.org/job/gate-requirements-install/225/", "voting": true, "remaining_time": 0, "result": "SUCCESS"}, {"elapsed_time": 23168, "name": "gate-requirements-pep8", "url": "https://jenkins01.openstack.org/job/gate-requirements-pep8/268/", "voting": true, "remaining_time": 0, "result": "SUCCESS"}, {"elapsed_time": 109904, "name": "gate-requirements-python27", "url": "https://jenkins01.openstack.org/job/gate-requirements-python27/273/", "voting": true, "remaining_time": 0, "result": "SUCCESS"}, {"elapsed_time": 190547, "name": "gate-requirements-pypy", "url": "https://jenkins01.openstack.org/job/gate-requirements-pypy/54/", "voting": true, "remaining_time": 0, "result": "SUCCESS"}, {"elapsed_time": 2120035, "name": "check-tempest-devstack-vm-full", "url": "https://jenkins01.openstack.org/job/check-tempest-devstack-vm-full/4/", "voting": true, "remaining_time": 0, "result": null}, {"elapsed_time": 2127801, "name": "check-tempest-devstack-vm-postgres-full", "url": "https://jenkins02.openstack.org/job/check-tempest-devstack-vm-postgres-full/1/", "voting": true, "remaining_time": 0, "result": null}, {"elapsed_time": 2113881, "name": "check-tempest-devstack-vm-neutron", "url": "https://jenkins02.openstack.org/job/check-tempest-devstack-vm-neutron/1/", "voting": true, "remaining_time": 0, "result": "FAILURE"}, {"elapsed_time": 1005847, "name": "check-tempest-devstack-vm-large-ops", "url": "https://jenkins02.openstack.org/job/check-tempest-devstack-vm-large-ops/1/", "voting": true, "remaining_time": 0, "result": "FAILURE"}, {"elapsed_time": 1885169, "name": "check-grenade-devstack-vm", "url": "https://jenkins01.openstack.org/job/check-grenade-devstack-vm/2/", "voting": true, "remaining_time": 0, "result": "SUCCESS"}, {"elapsed_time": 854611, "name": "check-swift-devstack-vm-functional", "url": "https://jenkins02.openstack.org/job/check-swift-devstack-vm-functional/1/", "voting": true, "remaining_time": 0, "result": "SUCCESS"}], "url": "https://review.openstack.org/48722", "item_ahead": null, "enqueue_time": 1380308971613, "project": "openstack/requirements", "remaining_time": 0, "id": "48722,1"}], [{"failing_reasons": ["at least one job failed"], "items_behind": [], "jobs": [{"elapsed_time": 133600, "name": "gate-neutron-pep8", "url": "https://jenkins02.openstack.org/job/gate-neutron-pep8/1416/", "voting": true, "remaining_time": 0, "result": "SUCCESS"}, {"elapsed_time": 131277, "name": "gate-neutron-docs", "url": "https://jenkins02.openstack.org/job/gate-neutron-docs/1467/", "voting": true, "remaining_time": 0, "result": "SUCCESS"}, {"elapsed_time": 2251822, "name": "gate-neutron-python26", "url": "https://jenkins01.openstack.org/job/gate-neutron-python26/1771/", "voting": true, "remaining_time": 0, "result": "FAILURE"}, {"elapsed_time": 1452497, "name": "gate-neutron-python27", "url": "https://jenkins02.openstack.org/job/gate-neutron-python27/1678/", "voting": true, "remaining_time": 0, "result": "FAILURE"}, {"elapsed_time": 2124032, "name": "check-tempest-devstack-vm-neutron", "url": "https://jenkins01.openstack.org/job/check-tempest-devstack-vm-neutron/1/", "voting": true, "remaining_time": 0, "result": null}, {"elapsed_time": 1945001, "name": "check-tempest-devstack-vm-neutron-pg", "url": "https://jenkins01.openstack.org/job/check-tempest-devstack-vm-neutron-pg/1/", "voting": false, "remaining_time": 0, "result": "FAILURE"}], "url": "https://review.openstack.org/45677", "item_ahead": null, "enqueue_time": 1380308990019, "project": "openstack/neutron", "remaining_time": 0, "id": "45677,4"}], [{"failing_reasons": ["at least one job failed"], "items_behind": [], "jobs": [{"elapsed_time": 94738, "name": "gate-tempest-pep8", "url": "https://jenkins01.openstack.org/job/gate-tempest-pep8/1576/", "voting": true, "remaining_time": 0, "result": "SUCCESS"}, {"elapsed_time": 208144, "name": "gate-tempest-docs", "url": "https://jenkins01.openstack.org/job/gate-tempest-docs/1492/", "voting": true, "remaining_time": 0, "result": "SUCCESS"}, {"elapsed_time": 2126572, "name": "check-tempest-devstack-vm-full", "url": "https://jenkins02.openstack.org/job/check-tempest-devstack-vm-full/1/", "voting": true, "remaining_time": 0, "result": null}, {"elapsed_time": 2119030, "name": "check-tempest-devstack-vm-postgres-full", "url": "https://jenkins01.openstack.org/job/check-tempest-devstack-vm-postgres-full/5/", "voting": true, "remaining_time": 0, "result": null}, {"elapsed_time": 1622822, "name": "check-tempest-devstack-vm-neutron", "url": "https://jenkins01.openstack.org/job/check-tempest-devstack-vm-neutron/3/", "voting": true, "remaining_time": 0, "result": "SUCCESS"}, {"elapsed_time": 989220, "name": "check-tempest-devstack-vm-large-ops", "url": "https://jenkins01.openstack.org/job/check-tempest-devstack-vm-large-ops/3/", "voting": true, "remaining_time": 0, "result": "FAILURE"}, {"elapsed_time": 2119038, "name": "check-grenade-devstack-vm", "url": "https://jenkins01.openstack.org/job/check-grenade-devstack-vm/3/", "voting": true, "remaining_time": 0, "result": null}], "url": "https://review.openstack.org/48147", "item_ahead": null, "enqueue_time": 1380309029918, "project": "openstack/tempest", "remaining_time": 0, "id": "48147,8"}], [{"failing_reasons": ["at least one job failed"], "items_behind": [], "jobs": [{"elapsed_time": 105321, "name": "gate-heat-pep8", "url": "https://jenkins02.openstack.org/job/gate-heat-pep8/1627/", "voting": true, "remaining_time": 0, "result": "SUCCESS"}, {"elapsed_time": 120878, "name": "gate-heat-docs", "url": "https://jenkins01.openstack.org/job/gate-heat-docs/1411/", "voting": true, "remaining_time": 0, "result": "SUCCESS"}, {"elapsed_time": 137196, "name": "gate-heat-python26", "url": "https://jenkins02.openstack.org/job/gate-heat-python26/1658/", "voting": true, "remaining_time": 0, "result": "SUCCESS"}, {"elapsed_time": 105580, "name": "gate-heat-python27", "url": "https://jenkins01.openstack.org/job/gate-heat-python27/1951/", "voting": true, "remaining_time": 0, "result": "SUCCESS"}, {"elapsed_time": 2126107, "name": "check-tempest-devstack-vm-full", "url": "https://jenkins01.openstack.org/job/check-tempest-devstack-vm-full/2/", "voting": true, "remaining_time": 0, "result": null}, {"elapsed_time": 2070327, "name": "check-tempest-devstack-vm-postgres-full", "url": "https://jenkins01.openstack.org/job/check-tempest-devstack-vm-postgres-full/2/", "voting": true, "remaining_time": 0, "result": "SUCCESS"}, {"elapsed_time": 1688657, "name": "check-tempest-devstack-vm-neutron", "url": "https://jenkins01.openstack.org/job/check-tempest-devstack-vm-neutron/4/", "voting": true, "remaining_time": 0, "result": "SUCCESS"}, {"elapsed_time": 973734, "name": "check-tempest-devstack-vm-large-ops", "url": "https://jenkins01.openstack.org/job/check-tempest-devstack-vm-large-ops/2/", "voting": true, "remaining_time": 0, "result": "FAILURE"}], "url": "https://review.openstack.org/48727", "item_ahead": null, "enqueue_time": 1380309606606, "project": "openstack/heat", "remaining_time": 0, "id": "48727,1"}], [{"failing_reasons": ["at least one job failed"], "items_behind": [], "jobs": [{"elapsed_time": 259891, "name": "gate-nova-pep8", "url": "https://jenkins01.openstack.org/job/gate-nova-pep8/6686/", "voting": true, "remaining_time": 0, "result": "SUCCESS"}, {"elapsed_time": 179999, "name": "gate-nova-docs", "url": "https://jenkins01.openstack.org/job/gate-nova-docs/6789/", "voting": true, "remaining_time": 0, "result": "SUCCESS"}, {"elapsed_time": 1102654, "name": "gate-nova-python26", "url": "https://jenkins01.openstack.org/job/gate-nova-python26/5777/", "voting": true, "remaining_time": 0, "result": "SUCCESS"}, {"elapsed_time": 818856, "name": "gate-nova-python27", "url": "https://jenkins01.openstack.org/job/gate-nova-python27/5498/", "voting": true, "remaining_time": 0, "result": "SUCCESS"}, {"elapsed_time": 2127117, "name": "check-tempest-devstack-vm-full", "url": "https://jenkins01.openstack.org/job/check-tempest-devstack-vm-full/1/", "voting": true, "remaining_time": 0, "result": null}, {"elapsed_time": 2070550, "name": "check-tempest-devstack-vm-postgres-full", "url": "https://jenkins01.openstack.org/job/check-tempest-devstack-vm-postgres-full/1/", "voting": true, "remaining_time": 0, "result": "SUCCESS"}, {"elapsed_time": 1674929, "name": "check-tempest-devstack-vm-neutron", "url": "https://jenkins01.openstack.org/job/check-tempest-devstack-vm-neutron/2/", "voting": true, "remaining_time": 0, "result": "FAILURE"}, {"elapsed_time": 1066930, "name": "check-tempest-devstack-vm-large-ops", "url": "https://jenkins01.openstack.org/job/check-tempest-devstack-vm-large-ops/4/", "voting": true, "remaining_time": 0, "result": "FAILURE"}, {"elapsed_time": 2101177, "name": "check-grenade-devstack-vm", "url": "https://jenkins01.openstack.org/job/check-grenade-devstack-vm/1/", "voting": true, "remaining_time": 0, "result": "SUCCESS"}, {"elapsed_time": 682941, "name": "gate-nova-pylint", "url": "https://jenkins02.openstack.org/job/gate-nova-pylint/2934/", "voting": false, "remaining_time": 0, "result": "SUCCESS"}], "url": "https://review.openstack.org/42736", "item_ahead": null, "enqueue_time": 1380309629537, "project": "openstack/nova", "remaining_time": 0, "id": "42736,16"}], [{"failing_reasons": ["at least one job failed"], "items_behind": [], "jobs": [{"elapsed_time": 169641, "name": "gate-cinder-pep8", "url": "https://jenkins01.openstack.org/job/gate-cinder-pep8/1643/", "voting": true, "remaining_time": 0, "result": "SUCCESS"}, {"elapsed_time": 527224, "name": "gate-cinder-docs", "url": "https://jenkins02.openstack.org/job/gate-cinder-docs/1120/", "voting": true, "remaining_time": 0, "result": "SUCCESS"}, {"elapsed_time": 354497, "name": "gate-cinder-python26", "url": "https://jenkins02.openstack.org/job/gate-cinder-python26/1316/", "voting": true, "remaining_time": 0, "result": "FAILURE"}, {"elapsed_time": 265127, "name": "gate-cinder-python27", "url": "https://jenkins01.openstack.org/job/gate-cinder-python27/1468/", "voting": true, "remaining_time": 0, "result": "FAILURE"}, {"elapsed_time": 291907, "name": "gate-cinder-pylint", "url": "https://jenkins01.openstack.org/job/gate-cinder-pylint/843/", "voting": false, "remaining_time": 0, "result": "SUCCESS"}, {"elapsed_time": 2121705, "name": "check-tempest-devstack-vm-full", "url": "https://jenkins01.openstack.org/job/check-tempest-devstack-vm-full/3/", "voting": true, "remaining_time": 0, "result": "SUCCESS"}, {"elapsed_time": 2124111, "name": "check-tempest-devstack-vm-postgres-full", "url": "https://jenkins01.openstack.org/job/check-tempest-devstack-vm-postgres-full/3/", "voting": true, "remaining_time": 0, "result": null}, {"elapsed_time": 2107674, "name": "check-tempest-devstack-vm-neutron", "url": "https://jenkins02.openstack.org/job/check-tempest-devstack-vm-neutron/3/", "voting": true, "remaining_time": 0, "result": "FAILURE"}, {"elapsed_time": 1132023, "name": "check-tempest-devstack-vm-large-ops", "url": "https://jenkins02.openstack.org/job/check-tempest-devstack-vm-large-ops/3/", "voting": true, "remaining_time": 0, "result": "FAILURE"}, {"elapsed_time": 1953058, "name": "check-grenade-devstack-vm", "url": "https://jenkins02.openstack.org/job/check-grenade-devstack-vm/2/", "voting": true, "remaining_time": 0, "result": "SUCCESS"}], "url": "https://review.openstack.org/48387", "item_ahead": null, "enqueue_time": 1380309658104, "project": "openstack/cinder", "remaining_time": 0, "id": "48387,2"}], [{"failing_reasons": ["at least one job failed"], "items_behind": [], "jobs": [{"elapsed_time": 2124616, "name": "check-tempest-devstack-vm-full", "url": "https://jenkins02.openstack.org/job/check-tempest-devstack-vm-full/2/", "voting": true, "remaining_time": 0, "result": null}, {"elapsed_time": 2124614, "name": "check-tempest-devstack-vm-postgres-full", "url": "https://jenkins02.openstack.org/job/check-tempest-devstack-vm-postgres-full/2/", "voting": true, "remaining_time": 0, "result": null}, {"elapsed_time": 2092452, "name": "check-tempest-devstack-vm-neutron", "url": "https://jenkins02.openstack.org/job/check-tempest-devstack-vm-neutron/4/", "voting": true, "remaining_time": 0, "result": "FAILURE"}, {"elapsed_time": 1016557, "name": "check-tempest-devstack-vm-large-ops", "url": "https://jenkins02.openstack.org/job/check-tempest-devstack-vm-large-ops/2/", "voting": true, "remaining_time": 0, "result": "FAILURE"}, {"elapsed_time": 1962618, "name": "check-grenade-devstack-vm", "url": "https://jenkins02.openstack.org/job/check-grenade-devstack-vm/1/", "voting": true, "remaining_time": 0, "result": "SUCCESS"}, {"elapsed_time": 843816, "name": "check-swift-devstack-vm-functional", "url": "https://jenkins02.openstack.org/job/check-swift-devstack-vm-functional/2/", "voting": true, "remaining_time": 0, "result": "SUCCESS"}], "url": "https://review.openstack.org/48411", "item_ahead": null, "enqueue_time": 1380309825203, "project": "openstack-dev/devstack", "remaining_time": 0, "id": "48411,2"}], [{"failing_reasons": ["at least one job failed"], "items_behind": [], "jobs": [{"elapsed_time": 129512, "name": "gate-heat-pep8", "url": "https://jenkins01.openstack.org/job/gate-heat-pep8/2137/", "voting": true, "remaining_time": 0, "result": "FAILURE"}, {"elapsed_time": 121344, "name": "gate-heat-docs", "url": "https://jenkins01.openstack.org/job/gate-heat-docs/1412/", "voting": true, "remaining_time": 0, "result": "SUCCESS"}, {"elapsed_time": 139891, "name": "gate-heat-python26", "url": "https://jenkins01.openstack.org/job/gate-heat-python26/1887/", "voting": true, "remaining_time": 0, "result": "SUCCESS"}, {"elapsed_time": 99492, "name": "gate-heat-python27", "url": "https://jenkins02.openstack.org/job/gate-heat-python27/1796/", "voting": true, "remaining_time": 0, "result": "SUCCESS"}, {"elapsed_time": 2120214, "name": "check-tempest-devstack-vm-full", "url": "https://jenkins02.openstack.org/job/check-tempest-devstack-vm-full/5/", "voting": true, "remaining_time": 0, "result": null}, {"elapsed_time": 2121195, "name": "check-tempest-devstack-vm-postgres-full", "url": "https://jenkins02.openstack.org/job/check-tempest-devstack-vm-postgres-full/3/", "voting": true, "remaining_time": 0, "result": null}, {"elapsed_time": 2119197, "name": "check-tempest-devstack-vm-neutron", "url": "https://jenkins02.openstack.org/job/check-tempest-devstack-vm-neutron/6/", "voting": true, "remaining_time": 0, "result": null}, {"elapsed_time": 1172776, "name": "check-tempest-devstack-vm-large-ops", "url": "https://jenkins02.openstack.org/job/check-tempest-devstack-vm-large-ops/4/", "voting": true, "remaining_time": 0, "result": "FAILURE"}], "url": "https://review.openstack.org/48730", "item_ahead": null, "enqueue_time": 1380309894142, "project": "openstack/heat", "remaining_time": 0, "id": "48730,1"}], [{"failing_reasons": ["at least one job failed"], "items_behind": [], "jobs": [{"elapsed_time": 228482, "name": "gate-nova-pep8", "url": "https://jenkins01.openstack.org/job/gate-nova-pep8/6687/", "voting": true, "remaining_time": 0, "result": "SUCCESS"}, {"elapsed_time": 261211, "name": "gate-nova-docs", "url": "https://jenkins02.openstack.org/job/gate-nova-docs/4642/", "voting": true, "remaining_time": 0, "result": "SUCCESS"}, {"elapsed_time": 871252, "name": "gate-nova-python26", "url": "https://jenkins01.openstack.org/job/gate-nova-python26/5778/", "voting": true, "remaining_time": 0, "result": "SUCCESS"}, {"elapsed_time": 808633, "name": "gate-nova-python27", "url": "https://jenkins01.openstack.org/job/gate-nova-python27/5499/", "voting": true, "remaining_time": 0, "result": "SUCCESS"}, {"elapsed_time": 2121220, "name": "check-tempest-devstack-vm-full", "url": "https://jenkins02.openstack.org/job/check-tempest-devstack-vm-full/4/", "voting": true, "remaining_time": 0, "result": null}, {"elapsed_time": 2035444, "name": "check-tempest-devstack-vm-postgres-full", "url": "https://jenkins02.openstack.org/job/check-tempest-devstack-vm-postgres-full/5/", "voting": true, "remaining_time": 0, "result": "FAILURE"}, {"elapsed_time": 2089448, "name": "check-tempest-devstack-vm-neutron", "url": "https://jenkins02.openstack.org/job/check-tempest-devstack-vm-neutron/7/", "voting": true, "remaining_time": 0, "result": null}, {"elapsed_time": 790327, "name": "check-tempest-devstack-vm-large-ops", "url": "https://jenkins02.openstack.org/job/check-tempest-devstack-vm-large-ops/6/", "voting": true, "remaining_time": 0, "result": "SUCCESS"}, {"elapsed_time": 1747827, "name": "check-grenade-devstack-vm", "url": "https://jenkins02.openstack.org/job/check-grenade-devstack-vm/4/", "voting": true, "remaining_time": 0, "result": "SUCCESS"}, {"elapsed_time": 887417, "name": "gate-nova-pylint", "url": "https://jenkins01.openstack.org/job/gate-nova-pylint/3024/", "voting": false, "remaining_time": 0, "result": "SUCCESS"}], "url": "https://review.openstack.org/48666", "item_ahead": null, "enqueue_time": 1380310094572, "project": "openstack/nova", "remaining_time": 0, "id": "48666,1"}], [{"failing_reasons": [], "items_behind": [], "jobs": [{"elapsed_time": 53467, "name": "gate-python-keystoneclient-pep8", "url": "https://jenkins01.openstack.org/job/gate-python-keystoneclient-pep8/391/", "voting": true, "remaining_time": 0, "result": "SUCCESS"}, {"elapsed_time": 59025, "name": "gate-python-keystoneclient-docs", "url": "https://jenkins01.openstack.org/job/gate-python-keystoneclient-docs/388/", "voting": true, "remaining_time": 0, "result": "SUCCESS"}, {"elapsed_time": 53179, "name": "gate-python-keystoneclient-python26", "url": "https://jenkins02.openstack.org/job/gate-python-keystoneclient-python26/334/", "voting": true, "remaining_time": 0, "result": "SUCCESS"}, {"elapsed_time": 49841, "name": "gate-python-keystoneclient-python27", "url": "https://jenkins02.openstack.org/job/gate-python-keystoneclient-python27/325/", "voting": true, "remaining_time": 0, "result": "SUCCESS"}, {"elapsed_time": 19429, "name": "gate-python-keystoneclient-python33", "url": "https://jenkins01.openstack.org/job/gate-python-keystoneclient-python33/242/", "voting": false, "remaining_time": 0, "result": "FAILURE"}, {"elapsed_time": 98806, "name": "check-tempest-devstack-vm-full", "url": "https://jenkins01.openstack.org/job/check-tempest-devstack-vm-full/6/", "voting": true, "remaining_time": 2016562, "result": null}, {"elapsed_time": 97555, "name": "check-tempest-devstack-vm-postgres-full", "url": "https://jenkins02.openstack.org/job/check-tempest-devstack-vm-postgres-full/6/", "voting": true, "remaining_time": 0, "result": null}, {"elapsed_time": 97553, "name": "check-tempest-devstack-vm-neutron", "url": "https://jenkins02.openstack.org/job/check-tempest-devstack-vm-neutron/10/", "voting": true, "remaining_time": 1828676, "result": null}, {"elapsed_time": 97548, "name": "check-tempest-devstack-vm-large-ops", "url": "https://jenkins02.openstack.org/job/check-tempest-devstack-vm-large-ops/7/", "voting": true, "remaining_time": 691118, "result": null}, {"elapsed_time": 98513, "name": "check-grenade-devstack-vm", "url": "https://jenkins01.openstack.org/job/check-grenade-devstack-vm/5/", "voting": true, "remaining_time": 1886679, "result": null}], "url": "https://review.openstack.org/40703", "item_ahead": null, "enqueue_time": 1380314139375, "project": "openstack/python-keystoneclient", "remaining_time": 2016562, "id": "40703,7"}], [{"failing_reasons": [], "items_behind": [], "jobs": [{"elapsed_time": 45817, "name": "gate-heat-pep8", "url": "https://jenkins01.openstack.org/job/gate-heat-pep8/2171/", "voting": true, "remaining_time": 48324, "result": null}, {"elapsed_time": 45858, "name": "gate-heat-docs", "url": "https://jenkins01.openstack.org/job/gate-heat-docs/1446/", "voting": true, "remaining_time": 94144, "result": null}, {"elapsed_time": 45815, "name": "gate-heat-python26", "url": "https://jenkins01.openstack.org/job/gate-heat-python26/1924/", "voting": true, "remaining_time": 99244, "result": null}, {"elapsed_time": 45813, "name": "gate-heat-python27", "url": "https://jenkins01.openstack.org/job/gate-heat-python27/1989/", "voting": true, "remaining_time": 72904, "result": null}, {"elapsed_time": 45793, "name": "check-tempest-devstack-vm-full", "url": "https://jenkins01.openstack.org/job/check-tempest-devstack-vm-full/7/", "voting": true, "remaining_time": 2069575, "result": null}, {"elapsed_time": 45795, "name": "check-tempest-devstack-vm-postgres-full", "url": "https://jenkins01.openstack.org/job/check-tempest-devstack-vm-postgres-full/6/", "voting": true, "remaining_time": 2022237, "result": null}, {"elapsed_time": 45749, "name": "check-tempest-devstack-vm-neutron", "url": "https://jenkins01.openstack.org/job/check-tempest-devstack-vm-neutron/7/", "voting": true, "remaining_time": 1588997, "result": null}, {"elapsed_time": 45594, "name": "check-tempest-devstack-vm-large-ops", "url": "https://jenkins02.openstack.org/job/check-tempest-devstack-vm-large-ops/8/", "voting": true, "remaining_time": 743072, "result": null}], "url": "https://review.openstack.org/44534", "item_ahead": null, "enqueue_time": 1380314190372, "project": "openstack/heat", "remaining_time": 2069575, "id": "44534,9"}], [{"failing_reasons": [], "items_behind": [], "jobs": [{"elapsed_time": 24513, "name": "gate-nova-pep8", "url": "https://jenkins01.openstack.org/job/gate-nova-pep8/6722/", "voting": true, "remaining_time": 221251, "result": null}, {"elapsed_time": 24476, "name": "gate-nova-docs", "url": "https://jenkins01.openstack.org/job/gate-nova-docs/6823/", "voting": true, "remaining_time": 213900, "result": null}, {"elapsed_time": 24418, "name": "gate-nova-python26", "url": "https://jenkins02.openstack.org/job/gate-nova-python26/5157/", "voting": true, "remaining_time": 1052059, "result": null}, {"elapsed_time": 24471, "name": "gate-nova-python27", "url": "https://jenkins01.openstack.org/job/gate-nova-python27/5532/", "voting": true, "remaining_time": 723110, "result": null}, {"elapsed_time": 24466, "name": "check-tempest-devstack-vm-full", "url": "https://jenkins01.openstack.org/job/check-tempest-devstack-vm-full/8/", "voting": true, "remaining_time": 2090902, "result": null}, {"elapsed_time": 24412, "name": "check-tempest-devstack-vm-postgres-full", "url": "https://jenkins02.openstack.org/job/check-tempest-devstack-vm-postgres-full/7/", "voting": true, "remaining_time": 0, "result": null}, {"elapsed_time": 24253, "name": "check-tempest-devstack-vm-neutron", "url": "https://jenkins01.openstack.org/job/check-tempest-devstack-vm-neutron/8/", "voting": true, "remaining_time": 1610493, "result": null}, {"elapsed_time": 24324, "name": "check-tempest-devstack-vm-large-ops", "url": "https://jenkins02.openstack.org/job/check-tempest-devstack-vm-large-ops/9/", "voting": true, "remaining_time": 764342, "result": null}, {"elapsed_time": 24104, "name": "check-grenade-devstack-vm", "url": "https://jenkins02.openstack.org/job/check-grenade-devstack-vm/5/", "voting": true, "remaining_time": 1859269, "result": null}, {"elapsed_time": 24294, "name": "gate-nova-pylint", "url": "https://jenkins02.openstack.org/job/gate-nova-pylint/2935/", "voting": false, "remaining_time": 717239, "result": null}], "url": "https://review.openstack.org/48544", "item_ahead": null, "enqueue_time": 1380314204556, "project": "openstack/nova", "remaining_time": 2090902, "id": "48544,2"}], [{"failing_reasons": [], "items_behind": [], "jobs": [{"elapsed_time": 8576, "name": "gate-barbican-pep8", "url": "https://jenkins01.openstack.org/job/gate-barbican-pep8/63/", "voting": true, "remaining_time": 29785, "result": null}, {"elapsed_time": 8575, "name": "gate-barbican-python27", "url": "https://jenkins01.openstack.org/job/gate-barbican-python27/54/", "voting": true, "remaining_time": 79333, "result": null}], "url": "https://review.openstack.org/48734", "item_ahead": null, "enqueue_time": 1380314228789, "project": "stackforge/barbican", "remaining_time": 79333, "id": "48734,1"}], [{"failing_reasons": [], "items_behind": [], "jobs": [{"elapsed_time": 1337, "name": "gate-python-swiftclient-requirements", "url": "https://jenkins02.openstack.org/job/gate-python-swiftclient-requirements/9/", "voting": true, "remaining_time": 3536, "result": null}, {"elapsed_time": 1342, "name": "gate-python-swiftclient-pep8", "url": "https://jenkins02.openstack.org/job/gate-python-swiftclient-pep8/22/", "voting": true, "remaining_time": 31997, "result": null}, {"elapsed_time": 3342, "name": "gate-python-swiftclient-docs", "url": "https://jenkins01.openstack.org/job/gate-python-swiftclient-docs/39/", "voting": true, "remaining_time": 40808, "result": null}, {"elapsed_time": 3338, "name": "gate-python-swiftclient-python26", "url": "https://jenkins01.openstack.org/job/gate-python-swiftclient-python26/34/", "voting": true, "remaining_time": 41947, "result": null}, {"elapsed_time": 3336, "name": "gate-python-swiftclient-python27", "url": "https://jenkins01.openstack.org/job/gate-python-swiftclient-python27/21/", "voting": true, "remaining_time": 33146, "result": null}, {"elapsed_time": 3344, "name": "gate-python-swiftclient-python33", "url": "https://jenkins01.openstack.org/job/gate-python-swiftclient-python33/35/", "voting": false, "remaining_time": 0, "result": null}, {"elapsed_time": 1748, "name": "gate-python-swiftclient-pypy", "url": "https://jenkins01.openstack.org/job/gate-python-swiftclient-pypy/27/", "voting": true, "remaining_time": 82666, "result": null}, {"elapsed_time": 1746, "name": "check-swift-devstack-vm-functional", "url": "https://jenkins01.openstack.org/job/check-swift-devstack-vm-functional/2/", "voting": true, "remaining_time": 0, "result": null}], "url": "https://review.openstack.org/48724", "item_ahead": null, "enqueue_time": 1380314236719, "project": "openstack/python-swiftclient", "remaining_time": 82666, "id": "48724,3"}]], "name": "openstack-dev/cookiecutter, openstack-dev/devstack, openstack-dev/grenade, openstack-dev/hacking, openstack-dev/heat-cfnclient, openstack-dev/openstack-nose, openstack-dev/openstack-qa, openstack-dev/pbr, openstack-dev/sandbox, openstack-infra/activity-board, openstack-infra/askbot-theme, openstack-infra/config, openstack-infra/devstack-gate, openstack-infra/elastic-recheck, openstack-infra/gear, openstack-infra/gearman-plugin, openstack-infra/gerrit, openstack-infra/gerritbot, openstack-infra/gerritlib, openstack-infra/git-review, openstack-infra/gitdm, openstack-infra/groups, openstack-infra/jeepyb, openstack-infra/jenkins-job-builder, openstack-infra/lodgeit, openstack-infra/meetbot, openstack-infra/nodepool, openstack-infra/nose-html-output, openstack-infra/odsreg, openstack-infra/publications, openstack-infra/puppet-apparmor, openstack-infra/puppet-dashboard, openstack-infra/puppet-vcsrepo, openstack-infra/pypi-mirror, openstack-infra/releasestatus, openstack-infra/reviewday, openstack-infra/reviewstats, openstack-infra/statusbot, openstack-infra/storyboard, openstack-infra/tripleo-ci, openstack-infra/zmq-event-publisher, openstack-infra/zuul, openstack/api-site, openstack/ceilometer, openstack/cinder, openstack/compute-api, openstack/database-api, openstack/diskimage-builder, openstack/django_openstack_auth, openstack/glance, openstack/governance, openstack/heat, openstack/heat-cfntools, openstack/heat-templates, openstack/horizon, openstack/identity-api, openstack/image-api, openstack/ironic, openstack/keystone, openstack/marconi, openstack/netconn-api, openstack/neutron, openstack/nova, openstack/object-api, openstack/openstack-chef, openstack/openstack-manuals, openstack/openstack-planet, openstack/operations-guide, openstack/os-apply-config, openstack/os-collect-config, openstack/os-refresh-config, openstack/oslo-incubator, openstack/oslo.config, openstack/oslo.messaging, openstack/oslo.sphinx, openstack/oslo.version, openstack/python-ceilometerclient, openstack/python-cinderclient, openstack/python-glanceclient, openstack/python-heatclient, openstack/python-ironicclient, openstack/python-keystoneclient, openstack/python-marconiclient, openstack/python-neutronclient, openstack/python-novaclient, openstack/python-openstackclient, openstack/python-swiftclient, openstack/python-troveclient, openstack/requirements, openstack/swift, openstack/tempest, openstack/tripleo-heat-templates, openstack/tripleo-image-elements, openstack/tripleo-incubator, openstack/trove, openstack/trove-integration, openstack/volume-api, stackforge/MRaaS, stackforge/anvil, stackforge/barbican, stackforge/billingstack, stackforge/bindep, stackforge/bufunfa, stackforge/cl-openstack-client, stackforge/climate, stackforge/cloudcafe, stackforge/clouddocs-maven-plugin, stackforge/cloudroast, stackforge/cookbook-openstack-block-storage, stackforge/cookbook-openstack-common, stackforge/cookbook-openstack-compute, stackforge/cookbook-openstack-dashboard, stackforge/cookbook-openstack-identity, stackforge/cookbook-openstack-image, stackforge/cookbook-openstack-metering, stackforge/cookbook-openstack-network, stackforge/cookbook-openstack-object-storage, stackforge/cookbook-openstack-ops-database, stackforge/cookbook-openstack-ops-messaging, stackforge/cookbook-openstack-orchestration, stackforge/designate, stackforge/fuel-astute, stackforge/fuel-main, stackforge/fuel-ostf-plugin, stackforge/fuel-ostf-tests, stackforge/fuel-web, stackforge/golang-client, stackforge/healthnmon, stackforge/inception, stackforge/kwapi, stackforge/libra, stackforge/manila, stackforge/murano-agent, stackforge/murano-api, stackforge/murano-common, stackforge/murano-conductor, stackforge/murano-dashboard, stackforge/murano-deployment, stackforge/murano-docs, stackforge/murano-tests, stackforge/novaimagebuilder, stackforge/occi-os, stackforge/opencafe, stackforge/openstack-chef-repo, stackforge/openvz-nova-driver, stackforge/packstack, stackforge/pecan, stackforge/puppet-ceilometer, stackforge/puppet-cinder, stackforge/puppet-glance, stackforge/puppet-heat, stackforge/puppet-horizon, stackforge/puppet-keystone, stackforge/puppet-neutron, stackforge/puppet-nova, stackforge/puppet-openstack, stackforge/puppet-openstack_dev_env, stackforge/puppet-savanna, stackforge/puppet-swift, stackforge/puppet-tempest, stackforge/pycadf, stackforge/pyghmi, stackforge/python-climateclient, stackforge/python-designateclient, stackforge/python-libraclient, stackforge/python-manilaclient, stackforge/python-muranoclient, stackforge/python-savannaclient, stackforge/python-tuskarclient, stackforge/rally, stackforge/savanna, stackforge/savanna-dashboard, stackforge/savanna-extra, stackforge/savanna-image-elements, stackforge/sqlalchemy-migrate, stackforge/staccato, stackforge/stackalytics, stackforge/taskflow, stackforge/tuskar, stackforge/tuskar-ui, stackforge/wsme"}], "name": "check"}, {"description": "Changes that have been approved by core developers are enqueued in order in this pipeline, and if they pass tests in Jenkins, will be merged.", "change_queues": [{"heads": [], "name": "stackforge/puppet-horizon"}, {"heads": [], "name": "openstack-dev/heat-cfnclient"}, {"heads": [[{"failing_reasons": ["at least one job failed"], "items_behind": ["48423,2"], "jobs": [{"elapsed_time": 199240, "name": "gate-ceilometer-docs", "url": "https://jenkins01.openstack.org/job/gate-ceilometer-docs/1113/", "voting": true, "remaining_time": 0, "result": "SUCCESS"}, {"elapsed_time": 88267, "name": "gate-ceilometer-pep8", "url": "https://jenkins01.openstack.org/job/gate-ceilometer-pep8/1146/", "voting": true, "remaining_time": 0, "result": "SUCCESS"}, {"elapsed_time": 621409, "name": "gate-ceilometer-python26", "url": "https://jenkins02.openstack.org/job/gate-ceilometer-python26/1014/", "voting": true, "remaining_time": 0, "result": "FAILURE"}, {"elapsed_time": 11124, "name": "gate-ceilometer-python27", "url": "https://jenkins02.openstack.org/job/gate-ceilometer-python27/1003/", "voting": true, "remaining_time": 0, "result": "FAILURE"}, {"elapsed_time": 1585675, "name": "gate-tempest-devstack-vm-full", "url": "https://jenkins02.openstack.org/job/gate-tempest-devstack-vm-full/14925/", "voting": true, "remaining_time": 340565, "result": null}, {"elapsed_time": 1582866, "name": "gate-tempest-devstack-vm-postgres-full", "url": "https://jenkins01.openstack.org/job/gate-tempest-devstack-vm-postgres-full/14693/", "voting": true, "remaining_time": 138052, "result": null}, {"elapsed_time": 1155105, "name": "gate-tempest-devstack-vm-neutron", "url": "https://jenkins01.openstack.org/job/gate-tempest-devstack-vm-neutron/16378/", "voting": true, "remaining_time": 0, "result": "FAILURE"}, {"elapsed_time": 882181, "name": "gate-tempest-devstack-vm-large-ops", "url": "https://jenkins02.openstack.org/job/gate-tempest-devstack-vm-large-ops/4288/", "voting": true, "remaining_time": 0, "result": "SUCCESS"}, {"elapsed_time": 612572, "name": "gate-swift-devstack-vm-functional", "url": "https://jenkins01.openstack.org/job/gate-swift-devstack-vm-functional/1678/", "voting": true, "remaining_time": 0, "result": "SUCCESS"}], "url": "https://review.openstack.org/48418", "item_ahead": null, "enqueue_time": 1380275100319, "project": "openstack/ceilometer", "remaining_time": 340565, "id": "48418,1"}, {"failing_reasons": ["a needed change is failing", "at least one job failed"], "items_behind": [], "jobs": [{"elapsed_time": 1581332, "name": "gate-ceilometer-docs", "url": "https://jenkins01.openstack.org/job/gate-ceilometer-docs/1114/", "voting": true, "remaining_time": 0, "result": "CANCELED"}, {"elapsed_time": 78975, "name": "gate-ceilometer-pep8", "url": "https://jenkins02.openstack.org/job/gate-ceilometer-pep8/961/", "voting": true, "remaining_time": 0, "result": "CANCELED"}, {"elapsed_time": 1581499, "name": "gate-ceilometer-python26", "url": "https://jenkins02.openstack.org/job/gate-ceilometer-python26/1015/", "voting": true, "remaining_time": 0, "result": "CANCELED"}, {"elapsed_time": 1581346, "name": "gate-ceilometer-python27", "url": "https://jenkins01.openstack.org/job/gate-ceilometer-python27/1099/", "voting": true, "remaining_time": 0, "result": "CANCELED"}, {"elapsed_time": 1524357, "name": "gate-tempest-devstack-vm-full", "url": "https://jenkins01.openstack.org/job/gate-tempest-devstack-vm-full/15590/", "voting": true, "remaining_time": 264284, "result": "CANCELED"}, {"elapsed_time": 1522887, "name": "gate-tempest-devstack-vm-postgres-full", "url": "https://jenkins02.openstack.org/job/gate-tempest-devstack-vm-postgres-full/14951/", "voting": true, "remaining_time": 281026, "result": "CANCELED"}, {"elapsed_time": 1512715, "name": "gate-tempest-devstack-vm-neutron", "url": "https://jenkins01.openstack.org/job/gate-tempest-devstack-vm-neutron/16379/", "voting": true, "remaining_time": 0, "result": "CANCELED"}, {"elapsed_time": 1501341, "name": "gate-tempest-devstack-vm-large-ops", "url": "https://jenkins01.openstack.org/job/gate-tempest-devstack-vm-large-ops/4047/", "voting": true, "remaining_time": 0, "result": "CANCELED"}, {"elapsed_time": 1486370, "name": "gate-swift-devstack-vm-functional", "url": "https://jenkins01.openstack.org/job/gate-swift-devstack-vm-functional/1679/", "voting": true, "remaining_time": 0, "result": "CANCELED"}], "url": "https://review.openstack.org/48423", "item_ahead": "48418,1", "enqueue_time": 1380275122088, "project": "openstack/ceilometer", "remaining_time": 340565, "id": "48423,2"}], [{"failing_reasons": [], "items_behind": ["48385,1"], "jobs": [{"elapsed_time": 84934, "name": "gate-tempest-pep8", "url": "https://jenkins02.openstack.org/job/gate-tempest-pep8/1189/", "voting": true, "remaining_time": 0, "result": "SUCCESS"}, {"elapsed_time": 214743, "name": "gate-tempest-docs", "url": "https://jenkins01.openstack.org/job/gate-tempest-docs/1514/", "voting": true, "remaining_time": 0, "result": "SUCCESS"}, {"elapsed_time": 1399439, "name": "gate-tempest-devstack-vm-full", "url": "https://jenkins01.openstack.org/job/gate-tempest-devstack-vm-full/15592/", "voting": true, "remaining_time": 384946, "result": null}, {"elapsed_time": 1391747, "name": "gate-tempest-devstack-vm-postgres-full", "url": "https://jenkins02.openstack.org/job/gate-tempest-devstack-vm-postgres-full/14953/", "voting": true, "remaining_time": 521249, "result": null}, {"elapsed_time": 1387288, "name": "gate-tempest-devstack-vm-neutron", "url": "https://jenkins01.openstack.org/job/gate-tempest-devstack-vm-neutron/16381/", "voting": true, "remaining_time": 0, "result": null}, {"elapsed_time": 805938, "name": "gate-tempest-devstack-vm-large-ops", "url": "https://jenkins02.openstack.org/job/gate-tempest-devstack-vm-large-ops/4289/", "voting": true, "remaining_time": 0, "result": "SUCCESS"}, {"elapsed_time": 1326300, "name": "gate-grenade-devstack-vm", "url": "https://jenkins02.openstack.org/job/gate-grenade-devstack-vm/12622/", "voting": true, "remaining_time": 328649, "result": null}], "url": "https://review.openstack.org/48271", "item_ahead": null, "enqueue_time": 1380276878515, "project": "openstack/tempest", "remaining_time": 521249, "id": "48271,1"}, {"failing_reasons": [], "items_behind": ["48240,1"], "jobs": [{"elapsed_time": 266700, "name": "gate-nova-docs", "url": "https://jenkins01.openstack.org/job/gate-nova-docs/6815/", "voting": true, "remaining_time": 0, "result": "SUCCESS"}, {"elapsed_time": 288292, "name": "gate-nova-pep8", "url": "https://jenkins01.openstack.org/job/gate-nova-pep8/6716/", "voting": true, "remaining_time": 0, "result": "SUCCESS"}, {"elapsed_time": 1053388, "name": "gate-nova-python26", "url": "https://jenkins01.openstack.org/job/gate-nova-python26/5799/", "voting": true, "remaining_time": 0, "result": "SUCCESS"}, {"elapsed_time": 806482, "name": "gate-nova-python27", "url": "https://jenkins01.openstack.org/job/gate-nova-python27/5525/", "voting": true, "remaining_time": 0, "result": "SUCCESS"}, {"elapsed_time": 1297198, "name": "gate-tempest-devstack-vm-full", "url": "https://jenkins02.openstack.org/job/gate-tempest-devstack-vm-full/14927/", "voting": true, "remaining_time": 629042, "result": null}, {"elapsed_time": 1288003, "name": "gate-tempest-devstack-vm-postgres-full", "url": "https://jenkins02.openstack.org/job/gate-tempest-devstack-vm-postgres-full/14954/", "voting": true, "remaining_time": 624993, "result": null}, {"elapsed_time": 1255139, "name": "gate-tempest-devstack-vm-neutron", "url": "https://jenkins02.openstack.org/job/gate-tempest-devstack-vm-neutron/16430/", "voting": true, "remaining_time": 59370, "result": null}, {"elapsed_time": 652956, "name": "gate-tempest-devstack-vm-large-ops", "url": "https://jenkins01.openstack.org/job/gate-tempest-devstack-vm-large-ops/4049/", "voting": true, "remaining_time": 0, "result": "SUCCESS"}, {"elapsed_time": 1207574, "name": "gate-grenade-devstack-vm", "url": "https://jenkins02.openstack.org/job/gate-grenade-devstack-vm/12623/", "voting": true, "remaining_time": 447375, "result": null}], "url": "https://review.openstack.org/48385", "item_ahead": "48271,1", "enqueue_time": 1380282964803, "project": "openstack/nova", "remaining_time": 629042, "id": "48385,1"}, {"failing_reasons": [], "items_behind": ["48242,1"], "jobs": [{"elapsed_time": 109796, "name": "gate-heat-pep8", "url": "https://jenkins01.openstack.org/job/gate-heat-pep8/2164/", "voting": true, "remaining_time": 0, "result": "SUCCESS"}, {"elapsed_time": 104030, "name": "gate-heat-docs", "url": "https://jenkins01.openstack.org/job/gate-heat-docs/1439/", "voting": true, "remaining_time": 0, "result": "SUCCESS"}, {"elapsed_time": 141262, "name": "gate-heat-python26", "url": "https://jenkins01.openstack.org/job/gate-heat-python26/1917/", "voting": true, "remaining_time": 0, "result": "SUCCESS"}, {"elapsed_time": 113583, "name": "gate-heat-python27", "url": "https://jenkins01.openstack.org/job/gate-heat-python27/1981/", "voting": true, "remaining_time": 0, "result": "SUCCESS"}, {"elapsed_time": 1205403, "name": "gate-tempest-devstack-vm-full", "url": "https://jenkins02.openstack.org/job/gate-tempest-devstack-vm-full/14928/", "voting": true, "remaining_time": 720837, "result": null}, {"elapsed_time": 1166515, "name": "gate-tempest-devstack-vm-postgres-full", "url": "https://jenkins02.openstack.org/job/gate-tempest-devstack-vm-postgres-full/14955/", "voting": true, "remaining_time": 746481, "result": null}, {"elapsed_time": 1161162, "name": "gate-tempest-devstack-vm-neutron", "url": "https://jenkins01.openstack.org/job/gate-tempest-devstack-vm-neutron/16382/", "voting": true, "remaining_time": 0, "result": null}, {"elapsed_time": 673234, "name": "gate-tempest-devstack-vm-large-ops", "url": "https://jenkins01.openstack.org/job/gate-tempest-devstack-vm-large-ops/4050/", "voting": true, "remaining_time": 0, "result": "SUCCESS"}], "url": "https://review.openstack.org/48240", "item_ahead": "48385,1", "enqueue_time": 1380283569407, "project": "openstack/heat", "remaining_time": 746481, "id": "48240,1"}, {"failing_reasons": [], "items_behind": ["48243,1"], "jobs": [{"elapsed_time": 118066, "name": "gate-heat-pep8", "url": "https://jenkins01.openstack.org/job/gate-heat-pep8/2165/", "voting": true, "remaining_time": 0, "result": "SUCCESS"}, {"elapsed_time": 138169, "name": "gate-heat-docs", "url": "https://jenkins01.openstack.org/job/gate-heat-docs/1440/", "voting": true, "remaining_time": 0, "result": "SUCCESS"}, {"elapsed_time": 135068, "name": "gate-heat-python26", "url": "https://jenkins01.openstack.org/job/gate-heat-python26/1918/", "voting": true, "remaining_time": 0, "result": "SUCCESS"}, {"elapsed_time": 115149, "name": "gate-heat-python27", "url": "https://jenkins01.openstack.org/job/gate-heat-python27/1982/", "voting": true, "remaining_time": 0, "result": "SUCCESS"}, {"elapsed_time": 1119221, "name": "gate-tempest-devstack-vm-full", "url": "https://jenkins02.openstack.org/job/gate-tempest-devstack-vm-full/14929/", "voting": true, "remaining_time": 807019, "result": null}, {"elapsed_time": 1107201, "name": "gate-tempest-devstack-vm-postgres-full", "url": "https://jenkins02.openstack.org/job/gate-tempest-devstack-vm-postgres-full/14956/", "voting": true, "remaining_time": 805795, "result": null}, {"elapsed_time": 1094770, "name": "gate-tempest-devstack-vm-neutron", "url": "https://jenkins01.openstack.org/job/gate-tempest-devstack-vm-neutron/16383/", "voting": true, "remaining_time": 45791, "result": null}, {"elapsed_time": 654451, "name": "gate-tempest-devstack-vm-large-ops", "url": "https://jenkins01.openstack.org/job/gate-tempest-devstack-vm-large-ops/4051/", "voting": true, "remaining_time": 0, "result": "SUCCESS"}], "url": "https://review.openstack.org/48242", "item_ahead": "48240,1", "enqueue_time": 1380283569962, "project": "openstack/heat", "remaining_time": 807019, "id": "48242,1"}, {"failing_reasons": [], "items_behind": ["47860,4"], "jobs": [{"elapsed_time": 115274, "name": "gate-heat-pep8", "url": "https://jenkins02.openstack.org/job/gate-heat-pep8/1663/", "voting": true, "remaining_time": 0, "result": "SUCCESS"}, {"elapsed_time": 221959, "name": "gate-heat-docs", "url": "https://jenkins02.openstack.org/job/gate-heat-docs/1274/", "voting": true, "remaining_time": 0, "result": "SUCCESS"}, {"elapsed_time": 170541, "name": "gate-heat-python26", "url": "https://jenkins02.openstack.org/job/gate-heat-python26/1675/", "voting": true, "remaining_time": 0, "result": "SUCCESS"}, {"elapsed_time": 128771, "name": "gate-heat-python27", "url": "https://jenkins01.openstack.org/job/gate-heat-python27/1983/", "voting": true, "remaining_time": 0, "result": "SUCCESS"}, {"elapsed_time": 1080686, "name": "gate-tempest-devstack-vm-full", "url": "https://jenkins02.openstack.org/job/gate-tempest-devstack-vm-full/14930/", "voting": true, "remaining_time": 845554, "result": null}, {"elapsed_time": 1070273, "name": "gate-tempest-devstack-vm-postgres-full", "url": "https://jenkins01.openstack.org/job/gate-tempest-devstack-vm-postgres-full/14694/", "voting": true, "remaining_time": 650645, "result": null}, {"elapsed_time": 1065343, "name": "gate-tempest-devstack-vm-neutron", "url": "https://jenkins01.openstack.org/job/gate-tempest-devstack-vm-neutron/16384/", "voting": true, "remaining_time": 75218, "result": null}, {"elapsed_time": 672944, "name": "gate-tempest-devstack-vm-large-ops", "url": "https://jenkins02.openstack.org/job/gate-tempest-devstack-vm-large-ops/4290/", "voting": true, "remaining_time": 0, "result": "SUCCESS"}], "url": "https://review.openstack.org/48243", "item_ahead": "48242,1", "enqueue_time": 1380283570607, "project": "openstack/heat", "remaining_time": 845554, "id": "48243,1"}, {"failing_reasons": [], "items_behind": ["48155,3"], "jobs": [{"elapsed_time": 98153, "name": "gate-heat-pep8", "url": "https://jenkins02.openstack.org/job/gate-heat-pep8/1664/", "voting": true, "remaining_time": 0, "result": "SUCCESS"}, {"elapsed_time": 253092, "name": "gate-heat-docs", "url": "https://jenkins02.openstack.org/job/gate-heat-docs/1275/", "voting": true, "remaining_time": 0, "result": "SUCCESS"}, {"elapsed_time": 142179, "name": "gate-heat-python26", "url": "https://jenkins01.openstack.org/job/gate-heat-python26/1919/", "voting": true, "remaining_time": 0, "result": "SUCCESS"}, {"elapsed_time": 138551, "name": "gate-heat-python27", "url": "https://jenkins01.openstack.org/job/gate-heat-python27/1984/", "voting": true, "remaining_time": 0, "result": "SUCCESS"}, {"elapsed_time": 1044832, "name": "gate-tempest-devstack-vm-full", "url": "https://jenkins01.openstack.org/job/gate-tempest-devstack-vm-full/15593/", "voting": true, "remaining_time": 739553, "result": null}, {"elapsed_time": 1032808, "name": "gate-tempest-devstack-vm-postgres-full", "url": "https://jenkins02.openstack.org/job/gate-tempest-devstack-vm-postgres-full/14957/", "voting": true, "remaining_time": 880188, "result": null}, {"elapsed_time": 1030352, "name": "gate-tempest-devstack-vm-neutron", "url": "https://jenkins01.openstack.org/job/gate-tempest-devstack-vm-neutron/16385/", "voting": true, "remaining_time": 110209, "result": null}, {"elapsed_time": 661805, "name": "gate-tempest-devstack-vm-large-ops", "url": "https://jenkins02.openstack.org/job/gate-tempest-devstack-vm-large-ops/4291/", "voting": true, "remaining_time": 0, "result": "SUCCESS"}], "url": "https://review.openstack.org/47860", "item_ahead": "48243,1", "enqueue_time": 1380283597382, "project": "openstack/heat", "remaining_time": 880188, "id": "47860,4"}, {"failing_reasons": [], "items_behind": ["48591,1", "48111,7"], "jobs": [{"elapsed_time": 143371, "name": "gate-heat-pep8", "url": "https://jenkins02.openstack.org/job/gate-heat-pep8/1665/", "voting": true, "remaining_time": 0, "result": "SUCCESS"}, {"elapsed_time": 159850, "name": "gate-heat-docs", "url": "https://jenkins01.openstack.org/job/gate-heat-docs/1441/", "voting": true, "remaining_time": 0, "result": "SUCCESS"}, {"elapsed_time": 153069, "name": "gate-heat-python26", "url": "https://jenkins01.openstack.org/job/gate-heat-python26/1920/", "voting": true, "remaining_time": 0, "result": "SUCCESS"}, {"elapsed_time": 104530, "name": "gate-heat-python27", "url": "https://jenkins01.openstack.org/job/gate-heat-python27/1985/", "voting": true, "remaining_time": 0, "result": "SUCCESS"}, {"elapsed_time": 999795, "name": "gate-tempest-devstack-vm-full", "url": "https://jenkins01.openstack.org/job/gate-tempest-devstack-vm-full/15594/", "voting": true, "remaining_time": 784590, "result": null}, {"elapsed_time": 998656, "name": "gate-tempest-devstack-vm-postgres-full", "url": "https://jenkins02.openstack.org/job/gate-tempest-devstack-vm-postgres-full/14958/", "voting": true, "remaining_time": 914340, "result": null}, {"elapsed_time": 988798, "name": "gate-tempest-devstack-vm-neutron", "url": "https://jenkins02.openstack.org/job/gate-tempest-devstack-vm-neutron/16431/", "voting": true, "remaining_time": 325711, "result": null}, {"elapsed_time": 682055, "name": "gate-tempest-devstack-vm-large-ops", "url": "https://jenkins01.openstack.org/job/gate-tempest-devstack-vm-large-ops/4052/", "voting": true, "remaining_time": 0, "result": "SUCCESS"}], "url": "https://review.openstack.org/48155", "item_ahead": "47860,4", "enqueue_time": 1380284449273, "project": "openstack/heat", "remaining_time": 914340, "id": "48155,3"}, {"failing_reasons": ["at least one job failed"], "items_behind": [], "jobs": [{"elapsed_time": 108212, "name": "gate-neutron-docs", "url": "https://jenkins01.openstack.org/job/gate-neutron-docs/2037/", "voting": true, "remaining_time": 0, "result": "SUCCESS"}, {"elapsed_time": 137419, "name": "gate-neutron-pep8", "url": "https://jenkins01.openstack.org/job/gate-neutron-pep8/2074/", "voting": true, "remaining_time": 0, "result": "SUCCESS"}, {"elapsed_time": 1361580, "name": "gate-neutron-python26", "url": "https://jenkins02.openstack.org/job/gate-neutron-python26/1628/", "voting": true, "remaining_time": 780221, "result": null}, {"elapsed_time": 22586, "name": "gate-neutron-python27", "url": "https://jenkins02.openstack.org/job/gate-neutron-python27/1689/", "voting": true, "remaining_time": 0, "result": "FAILURE"}, {"elapsed_time": 963152, "name": "gate-tempest-devstack-vm-neutron", "url": "https://jenkins02.openstack.org/job/gate-tempest-devstack-vm-neutron/16432/", "voting": true, "remaining_time": 351357, "result": null}], "url": "https://review.openstack.org/48591", "item_ahead": "48155,3", "enqueue_time": 1380287876076, "project": "openstack/neutron", "remaining_time": 914340, "id": "48591,1"}, {"failing_reasons": [], "items_behind": ["46123,21"], "jobs": [{"elapsed_time": 79014, "name": "gate-keystone-docs", "url": "https://jenkins01.openstack.org/job/gate-keystone-docs/1206/", "voting": true, "remaining_time": 0, "result": "SUCCESS"}, {"elapsed_time": 75321, "name": "gate-keystone-pep8", "url": "https://jenkins02.openstack.org/job/gate-keystone-pep8/998/", "voting": true, "remaining_time": 0, "result": "SUCCESS"}, {"elapsed_time": 1055592, "name": "gate-keystone-python26", "url": "https://jenkins02.openstack.org/job/gate-keystone-python26/1057/", "voting": true, "remaining_time": 0, "result": "SUCCESS"}, {"elapsed_time": 846093, "name": "gate-keystone-python27", "url": "https://jenkins01.openstack.org/job/gate-keystone-python27/1103/", "voting": true, "remaining_time": 0, "result": "SUCCESS"}, {"elapsed_time": 960841, "name": "gate-tempest-devstack-vm-full", "url": "https://jenkins01.openstack.org/job/gate-tempest-devstack-vm-full/15595/", "voting": true, "remaining_time": 823544, "result": null}, {"elapsed_time": 950223, "name": "gate-tempest-devstack-vm-postgres-full", "url": "https://jenkins01.openstack.org/job/gate-tempest-devstack-vm-postgres-full/14695/", "voting": true, "remaining_time": 770695, "result": null}, {"elapsed_time": 938442, "name": "gate-tempest-devstack-vm-neutron", "url": "https://jenkins02.openstack.org/job/gate-tempest-devstack-vm-neutron/16433/", "voting": true, "remaining_time": 376067, "result": null}, {"elapsed_time": 762279, "name": "gate-tempest-devstack-vm-large-ops", "url": "https://jenkins02.openstack.org/job/gate-tempest-devstack-vm-large-ops/4292/", "voting": true, "remaining_time": 0, "result": "SUCCESS"}, {"elapsed_time": 914795, "name": "gate-grenade-devstack-vm", "url": "https://jenkins01.openstack.org/job/gate-grenade-devstack-vm/12022/", "voting": true, "remaining_time": 741441, "result": null}, {"elapsed_time": 795754, "name": "gate-swift-devstack-vm-functional", "url": "https://jenkins02.openstack.org/job/gate-swift-devstack-vm-functional/1792/", "voting": true, "remaining_time": 0, "result": "SUCCESS"}], "url": "https://review.openstack.org/48111", "item_ahead": "48155,3", "enqueue_time": 1380288460992, "project": "openstack/keystone", "remaining_time": 914340, "id": "48111,7"}, {"failing_reasons": [], "items_behind": ["48168,4"], "jobs": [{"elapsed_time": 86559, "name": "gate-keystone-docs", "url": "https://jenkins01.openstack.org/job/gate-keystone-docs/1207/", "voting": true, "remaining_time": 0, "result": "SUCCESS"}, {"elapsed_time": 90221, "name": "gate-keystone-pep8", "url": "https://jenkins02.openstack.org/job/gate-keystone-pep8/999/", "voting": true, "remaining_time": 0, "result": "SUCCESS"}, {"elapsed_time": 1171771, "name": "gate-keystone-python26", "url": "https://jenkins01.openstack.org/job/gate-keystone-python26/1058/", "voting": true, "remaining_time": 124855, "result": null}, {"elapsed_time": 859978, "name": "gate-keystone-python27", "url": "https://jenkins01.openstack.org/job/gate-keystone-python27/1104/", "voting": true, "remaining_time": 0, "result": "SUCCESS"}, {"elapsed_time": 899159, "name": "gate-tempest-devstack-vm-full", "url": "https://jenkins01.openstack.org/job/gate-tempest-devstack-vm-full/15596/", "voting": true, "remaining_time": 885226, "result": null}, {"elapsed_time": 883709, "name": "gate-tempest-devstack-vm-postgres-full", "url": "https://jenkins02.openstack.org/job/gate-tempest-devstack-vm-postgres-full/14959/", "voting": true, "remaining_time": 1029287, "result": null}, {"elapsed_time": 848838, "name": "gate-tempest-devstack-vm-neutron", "url": "https://jenkins02.openstack.org/job/gate-tempest-devstack-vm-neutron/16434/", "voting": true, "remaining_time": 465671, "result": null}, {"elapsed_time": 651313, "name": "gate-tempest-devstack-vm-large-ops", "url": "https://jenkins01.openstack.org/job/gate-tempest-devstack-vm-large-ops/4053/", "voting": true, "remaining_time": 0, "result": "SUCCESS"}, {"elapsed_time": 829582, "name": "gate-grenade-devstack-vm", "url": "https://jenkins02.openstack.org/job/gate-grenade-devstack-vm/12624/", "voting": true, "remaining_time": 825367, "result": null}, {"elapsed_time": 742887, "name": "gate-swift-devstack-vm-functional", "url": "https://jenkins02.openstack.org/job/gate-swift-devstack-vm-functional/1793/", "voting": true, "remaining_time": 0, "result": "SUCCESS"}], "url": "https://review.openstack.org/46123", "item_ahead": "48111,7", "enqueue_time": 1380288462307, "project": "openstack/keystone", "remaining_time": 1029287, "id": "46123,21"}, {"failing_reasons": [], "items_behind": ["47546,2"], "jobs": [{"elapsed_time": 87433, "name": "gate-tempest-pep8", "url": "https://jenkins02.openstack.org/job/gate-tempest-pep8/1193/", "voting": true, "remaining_time": 0, "result": "SUCCESS"}, {"elapsed_time": 221562, "name": "gate-tempest-docs", "url": "https://jenkins01.openstack.org/job/gate-tempest-docs/1516/", "voting": true, "remaining_time": 0, "result": "SUCCESS"}, {"elapsed_time": 802529, "name": "gate-tempest-devstack-vm-full", "url": "https://jenkins01.openstack.org/job/gate-tempest-devstack-vm-full/15597/", "voting": true, "remaining_time": 981856, "result": null}, {"elapsed_time": 788099, "name": "gate-tempest-devstack-vm-postgres-full", "url": "https://jenkins01.openstack.org/job/gate-tempest-devstack-vm-postgres-full/14696/", "voting": true, "remaining_time": 932819, "result": null}, {"elapsed_time": 774143, "name": "gate-tempest-devstack-vm-neutron", "url": "https://jenkins01.openstack.org/job/gate-tempest-devstack-vm-neutron/16386/", "voting": true, "remaining_time": 366418, "result": null}, {"elapsed_time": 683464, "name": "gate-tempest-devstack-vm-large-ops", "url": "https://jenkins02.openstack.org/job/gate-tempest-devstack-vm-large-ops/4293/", "voting": true, "remaining_time": 0, "result": "SUCCESS"}, {"elapsed_time": 757249, "name": "gate-grenade-devstack-vm", "url": "https://jenkins02.openstack.org/job/gate-grenade-devstack-vm/12625/", "voting": true, "remaining_time": 897700, "result": null}], "url": "https://review.openstack.org/48168", "item_ahead": "46123,21", "enqueue_time": 1380288896067, "project": "openstack/tempest", "remaining_time": 1029287, "id": "48168,4"}, {"failing_reasons": [], "items_behind": ["48534,1"], "jobs": [{"elapsed_time": 241419, "name": "gate-nova-docs", "url": "https://jenkins01.openstack.org/job/gate-nova-docs/6816/", "voting": true, "remaining_time": 0, "result": "SUCCESS"}, {"elapsed_time": 269854, "name": "gate-nova-pep8", "url": "https://jenkins01.openstack.org/job/gate-nova-pep8/6718/", "voting": true, "remaining_time": 0, "result": "SUCCESS"}, {"elapsed_time": 1040776, "name": "gate-nova-python26", "url": "https://jenkins02.openstack.org/job/gate-nova-python26/5151/", "voting": true, "remaining_time": 0, "result": "SUCCESS"}, {"elapsed_time": 850596, "name": "gate-nova-python27", "url": "https://jenkins02.openstack.org/job/gate-nova-python27/5870/", "voting": true, "remaining_time": 0, "result": "SUCCESS"}, {"elapsed_time": 745448, "name": "gate-tempest-devstack-vm-full", "url": "https://jenkins01.openstack.org/job/gate-tempest-devstack-vm-full/15598/", "voting": true, "remaining_time": 1038937, "result": null}, {"elapsed_time": 720692, "name": "gate-tempest-devstack-vm-postgres-full", "url": "https://jenkins02.openstack.org/job/gate-tempest-devstack-vm-postgres-full/14960/", "voting": true, "remaining_time": 1192304, "result": null}, {"elapsed_time": 715260, "name": "gate-tempest-devstack-vm-neutron", "url": "https://jenkins01.openstack.org/job/gate-tempest-devstack-vm-neutron/16387/", "voting": true, "remaining_time": 425301, "result": null}, {"elapsed_time": 626189, "name": "gate-tempest-devstack-vm-large-ops", "url": "https://jenkins01.openstack.org/job/gate-tempest-devstack-vm-large-ops/4054/", "voting": true, "remaining_time": 0, "result": "SUCCESS"}, {"elapsed_time": 684699, "name": "gate-grenade-devstack-vm", "url": "https://jenkins02.openstack.org/job/gate-grenade-devstack-vm/12626/", "voting": true, "remaining_time": 970250, "result": null}], "url": "https://review.openstack.org/47546", "item_ahead": "48168,4", "enqueue_time": 1380289298528, "project": "openstack/nova", "remaining_time": 1192304, "id": "47546,2"}, {"failing_reasons": [], "items_behind": ["48516,4"], "jobs": [{"elapsed_time": 115419, "name": "gate-keystone-docs", "url": "https://jenkins02.openstack.org/job/gate-keystone-docs/1003/", "voting": true, "remaining_time": 0, "result": "SUCCESS"}, {"elapsed_time": 75258, "name": "gate-keystone-pep8", "url": "https://jenkins02.openstack.org/job/gate-keystone-pep8/1000/", "voting": true, "remaining_time": 0, "result": "SUCCESS"}, {"elapsed_time": 1160955, "name": "gate-keystone-python26", "url": "https://jenkins01.openstack.org/job/gate-keystone-python26/1059/", "voting": true, "remaining_time": 135671, "result": null}, {"elapsed_time": 854661, "name": "gate-keystone-python27", "url": "https://jenkins01.openstack.org/job/gate-keystone-python27/1105/", "voting": true, "remaining_time": 0, "result": "SUCCESS"}, {"elapsed_time": 684605, "name": "gate-tempest-devstack-vm-full", "url": "https://jenkins02.openstack.org/job/gate-tempest-devstack-vm-full/14931/", "voting": true, "remaining_time": 1241635, "result": null}, {"elapsed_time": 683344, "name": "gate-tempest-devstack-vm-postgres-full", "url": "https://jenkins01.openstack.org/job/gate-tempest-devstack-vm-postgres-full/14697/", "voting": true, "remaining_time": 1037574, "result": null}, {"elapsed_time": 672761, "name": "gate-tempest-devstack-vm-neutron", "url": "https://jenkins01.openstack.org/job/gate-tempest-devstack-vm-neutron/16388/", "voting": true, "remaining_time": 467800, "result": null}, {"elapsed_time": 658114, "name": "gate-tempest-devstack-vm-large-ops", "url": "https://jenkins02.openstack.org/job/gate-tempest-devstack-vm-large-ops/4294/", "voting": true, "remaining_time": 40884, "result": null}, {"elapsed_time": 653007, "name": "gate-grenade-devstack-vm", "url": "https://jenkins01.openstack.org/job/gate-grenade-devstack-vm/12023/", "voting": true, "remaining_time": 1003229, "result": null}, {"elapsed_time": 639570, "name": "gate-swift-devstack-vm-functional", "url": "https://jenkins01.openstack.org/job/gate-swift-devstack-vm-functional/1680/", "voting": true, "remaining_time": 0, "result": "SUCCESS"}], "url": "https://review.openstack.org/48534", "item_ahead": "47546,2", "enqueue_time": 1380290773932, "project": "openstack/keystone", "remaining_time": 1241635, "id": "48534,1"}, {"failing_reasons": [], "items_behind": ["47479,2", "39668,13", "48625,1", "48627,1", "48601,1", "48164,1", "46291,2"], "jobs": [{"elapsed_time": 119304, "name": "gate-tempest-pep8", "url": "https://jenkins01.openstack.org/job/gate-tempest-pep8/1601/", "voting": true, "remaining_time": 0, "result": "SUCCESS"}, {"elapsed_time": 373183, "name": "gate-tempest-docs", "url": "https://jenkins02.openstack.org/job/gate-tempest-docs/1168/", "voting": true, "remaining_time": 0, "result": "SUCCESS"}, {"elapsed_time": 635471, "name": "gate-tempest-devstack-vm-full", "url": "https://jenkins01.openstack.org/job/gate-tempest-devstack-vm-full/15599/", "voting": true, "remaining_time": 1148914, "result": null}, {"elapsed_time": 605990, "name": "gate-tempest-devstack-vm-postgres-full", "url": "https://jenkins02.openstack.org/job/gate-tempest-devstack-vm-postgres-full/14961/", "voting": true, "remaining_time": 1307006, "result": null}, {"elapsed_time": 603764, "name": "gate-tempest-devstack-vm-neutron", "url": "https://jenkins01.openstack.org/job/gate-tempest-devstack-vm-neutron/16389/", "voting": true, "remaining_time": 536797, "result": null}, {"elapsed_time": 573906, "name": "gate-tempest-devstack-vm-large-ops", "url": "https://jenkins02.openstack.org/job/gate-tempest-devstack-vm-large-ops/4295/", "voting": true, "remaining_time": 125092, "result": null}, {"elapsed_time": 570202, "name": "gate-grenade-devstack-vm", "url": "https://jenkins01.openstack.org/job/gate-grenade-devstack-vm/12024/", "voting": true, "remaining_time": 1086034, "result": null}], "url": "https://review.openstack.org/48516", "item_ahead": "48534,1", "enqueue_time": 1380293089245, "project": "openstack/tempest", "remaining_time": 1307006, "id": "48516,4"}, {"failing_reasons": ["at least one job failed"], "items_behind": [], "jobs": [{"elapsed_time": 225181, "name": "gate-nova-docs", "url": "https://jenkins01.openstack.org/job/gate-nova-docs/6817/", "voting": true, "remaining_time": 0, "result": "SUCCESS"}, {"elapsed_time": 250970, "name": "gate-nova-pep8", "url": "https://jenkins02.openstack.org/job/gate-nova-pep8/4724/", "voting": true, "remaining_time": 0, "result": "SUCCESS"}, {"elapsed_time": 1160801, "name": "gate-nova-python26", "url": "https://jenkins01.openstack.org/job/gate-nova-python26/5803/", "voting": true, "remaining_time": 0, "result": null}, {"elapsed_time": 11087, "name": "gate-nova-python27", "url": "https://jenkins02.openstack.org/job/gate-nova-python27/5871/", "voting": true, "remaining_time": 0, "result": "FAILURE"}, {"elapsed_time": 551403, "name": "gate-tempest-devstack-vm-full", "url": "https://jenkins01.openstack.org/job/gate-tempest-devstack-vm-full/15600/", "voting": true, "remaining_time": 1232982, "result": null}, {"elapsed_time": 538724, "name": "gate-tempest-devstack-vm-postgres-full", "url": "https://jenkins01.openstack.org/job/gate-tempest-devstack-vm-postgres-full/14698/", "voting": true, "remaining_time": 1182194, "result": null}, {"elapsed_time": 518413, "name": "gate-tempest-devstack-vm-neutron", "url": "https://jenkins01.openstack.org/job/gate-tempest-devstack-vm-neutron/16390/", "voting": true, "remaining_time": 622148, "result": null}, {"elapsed_time": 513228, "name": "gate-tempest-devstack-vm-large-ops", "url": "https://jenkins02.openstack.org/job/gate-tempest-devstack-vm-large-ops/4296/", "voting": true, "remaining_time": 185770, "result": null}, {"elapsed_time": 488201, "name": "gate-grenade-devstack-vm", "url": "https://jenkins01.openstack.org/job/gate-grenade-devstack-vm/12025/", "voting": true, "remaining_time": 1168035, "result": null}], "url": "https://review.openstack.org/47479", "item_ahead": "48516,4", "enqueue_time": 1380293138283, "project": "openstack/nova", "remaining_time": 1307006, "id": "47479,2"}, {"failing_reasons": ["at least one job failed"], "items_behind": [], "jobs": [{"elapsed_time": 4238, "name": "gate-nova-docs", "url": "https://jenkins02.openstack.org/job/gate-nova-docs/4674/", "voting": true, "remaining_time": 0, "result": "FAILURE"}, {"elapsed_time": 2365, "name": "gate-nova-pep8", "url": "https://jenkins02.openstack.org/job/gate-nova-pep8/4727/", "voting": true, "remaining_time": 0, "result": "FAILURE"}, {"elapsed_time": 854913, "name": "gate-nova-python26", "url": "https://jenkins01.openstack.org/job/gate-nova-python26/5806/", "voting": true, "remaining_time": 0, "result": "SUCCESS"}, {"elapsed_time": 776630, "name": "gate-nova-python27", "url": "https://jenkins02.openstack.org/job/gate-nova-python27/5874/", "voting": true, "remaining_time": 0, "result": "SUCCESS"}, {"elapsed_time": 477284, "name": "gate-tempest-devstack-vm-full", "url": "https://jenkins02.openstack.org/job/gate-tempest-devstack-vm-full/14932/", "voting": true, "remaining_time": 1448956, "result": null}, {"elapsed_time": 474443, "name": "gate-tempest-devstack-vm-postgres-full", "url": "https://jenkins01.openstack.org/job/gate-tempest-devstack-vm-postgres-full/14699/", "voting": true, "remaining_time": 1246475, "result": null}, {"elapsed_time": 472601, "name": "gate-tempest-devstack-vm-neutron", "url": "https://jenkins02.openstack.org/job/gate-tempest-devstack-vm-neutron/16435/", "voting": true, "remaining_time": 841908, "result": null}, {"elapsed_time": 453504, "name": "gate-tempest-devstack-vm-large-ops", "url": "https://jenkins01.openstack.org/job/gate-tempest-devstack-vm-large-ops/4055/", "voting": true, "remaining_time": 191249, "result": null}, {"elapsed_time": 444138, "name": "gate-grenade-devstack-vm", "url": "https://jenkins02.openstack.org/job/gate-grenade-devstack-vm/12627/", "voting": true, "remaining_time": 1210811, "result": null}], "url": "https://review.openstack.org/39668", "item_ahead": "48516,4", "enqueue_time": 1380296032916, "project": "openstack/nova", "remaining_time": 1448956, "id": "39668,13"}, {"failing_reasons": ["at least one job failed"], "items_behind": [], "jobs": [{"elapsed_time": 104102, "name": "gate-heat-pep8", "url": "https://jenkins01.openstack.org/job/gate-heat-pep8/2169/", "voting": true, "remaining_time": 0, "result": "SUCCESS"}, {"elapsed_time": 78608, "name": "gate-heat-docs", "url": "https://jenkins02.openstack.org/job/gate-heat-docs/1279/", "voting": true, "remaining_time": 0, "result": "FAILURE"}, {"elapsed_time": 135647, "name": "gate-heat-python26", "url": "https://jenkins02.openstack.org/job/gate-heat-python26/1681/", "voting": true, "remaining_time": 0, "result": "SUCCESS"}, {"elapsed_time": 131232, "name": "gate-heat-python27", "url": "https://jenkins02.openstack.org/job/gate-heat-python27/1833/", "voting": true, "remaining_time": 0, "result": "SUCCESS"}, {"elapsed_time": 437367, "name": "gate-tempest-devstack-vm-full", "url": "https://jenkins01.openstack.org/job/gate-tempest-devstack-vm-full/15601/", "voting": true, "remaining_time": 1347018, "result": null}, {"elapsed_time": 419164, "name": "gate-tempest-devstack-vm-postgres-full", "url": "https://jenkins01.openstack.org/job/gate-tempest-devstack-vm-postgres-full/14700/", "voting": true, "remaining_time": 1301754, "result": null}, {"elapsed_time": 405004, "name": "gate-tempest-devstack-vm-neutron", "url": "https://jenkins01.openstack.org/job/gate-tempest-devstack-vm-neutron/16391/", "voting": true, "remaining_time": 735557, "result": null}, {"elapsed_time": 388934, "name": "gate-tempest-devstack-vm-large-ops", "url": "https://jenkins01.openstack.org/job/gate-tempest-devstack-vm-large-ops/4056/", "voting": true, "remaining_time": 255819, "result": null}], "url": "https://review.openstack.org/48625", "item_ahead": "48516,4", "enqueue_time": 1380298199735, "project": "openstack/heat", "remaining_time": 1448956, "id": "48625,1"}, {"failing_reasons": ["at least one job failed"], "items_behind": [], "jobs": [{"elapsed_time": 2383, "name": "gate-heat-pep8", "url": "https://jenkins02.openstack.org/job/gate-heat-pep8/1669/", "voting": true, "remaining_time": 0, "result": "FAILURE"}, {"elapsed_time": 123063, "name": "gate-heat-docs", "url": "https://jenkins01.openstack.org/job/gate-heat-docs/1445/", "voting": true, "remaining_time": 0, "result": "SUCCESS"}, {"elapsed_time": 140643, "name": "gate-heat-python26", "url": "https://jenkins01.openstack.org/job/gate-heat-python26/1923/", "voting": true, "remaining_time": 0, "result": "SUCCESS"}, {"elapsed_time": 120361, "name": "gate-heat-python27", "url": "https://jenkins02.openstack.org/job/gate-heat-python27/1834/", "voting": true, "remaining_time": 0, "result": "SUCCESS"}, {"elapsed_time": 355849, "name": "gate-tempest-devstack-vm-full", "url": "https://jenkins01.openstack.org/job/gate-tempest-devstack-vm-full/15602/", "voting": true, "remaining_time": 1428536, "result": null}, {"elapsed_time": 349963, "name": "gate-tempest-devstack-vm-postgres-full", "url": "https://jenkins02.openstack.org/job/gate-tempest-devstack-vm-postgres-full/14962/", "voting": true, "remaining_time": 1563033, "result": null}, {"elapsed_time": 325802, "name": "gate-tempest-devstack-vm-neutron", "url": "https://jenkins02.openstack.org/job/gate-tempest-devstack-vm-neutron/16436/", "voting": true, "remaining_time": 988707, "result": null}, {"elapsed_time": 309685, "name": "gate-tempest-devstack-vm-large-ops", "url": "https://jenkins01.openstack.org/job/gate-tempest-devstack-vm-large-ops/4057/", "voting": true, "remaining_time": 335068, "result": null}], "url": "https://review.openstack.org/48627", "item_ahead": "48516,4", "enqueue_time": 1380298279387, "project": "openstack/heat", "remaining_time": 1563033, "id": "48627,1"}, {"failing_reasons": ["at least one job failed"], "items_behind": [], "jobs": [{"elapsed_time": 39984, "name": "gate-swift-docs", "url": "https://jenkins02.openstack.org/job/gate-swift-docs/659/", "voting": true, "remaining_time": 0, "result": "FAILURE"}, {"elapsed_time": 62434, "name": "gate-swift-pep8", "url": "https://jenkins02.openstack.org/job/gate-swift-pep8/651/", "voting": true, "remaining_time": 0, "result": "SUCCESS"}, {"elapsed_time": 135465, "name": "gate-swift-python26", "url": "https://jenkins02.openstack.org/job/gate-swift-python26/714/", "voting": true, "remaining_time": 0, "result": "SUCCESS"}, {"elapsed_time": 84251, "name": "gate-swift-python27", "url": "https://jenkins02.openstack.org/job/gate-swift-python27/723/", "voting": true, "remaining_time": 0, "result": "SUCCESS"}, {"elapsed_time": 289217, "name": "gate-swift-devstack-vm-functional", "url": "https://jenkins02.openstack.org/job/gate-swift-devstack-vm-functional/1794/", "voting": true, "remaining_time": 503200, "result": null}, {"elapsed_time": 264841, "name": "gate-tempest-devstack-vm-full", "url": "https://jenkins01.openstack.org/job/gate-tempest-devstack-vm-full/15603/", "voting": true, "remaining_time": 1519544, "result": null}, {"elapsed_time": 241185, "name": "gate-tempest-devstack-vm-neutron", "url": "https://jenkins02.openstack.org/job/gate-tempest-devstack-vm-neutron/16437/", "voting": true, "remaining_time": 1073324, "result": null}, {"elapsed_time": 215778, "name": "gate-tempest-devstack-vm-postgres-full", "url": "https://jenkins02.openstack.org/job/gate-tempest-devstack-vm-postgres-full/14963/", "voting": true, "remaining_time": 1697218, "result": null}, {"elapsed_time": 190054, "name": "gate-tempest-devstack-vm-large-ops", "url": "https://jenkins02.openstack.org/job/gate-tempest-devstack-vm-large-ops/4297/", "voting": true, "remaining_time": 508944, "result": null}, {"elapsed_time": 166190, "name": "gate-grenade-devstack-vm", "url": "https://jenkins01.openstack.org/job/gate-grenade-devstack-vm/12026/", "voting": true, "remaining_time": 1490046, "result": null}], "url": "https://review.openstack.org/48601", "item_ahead": "48516,4", "enqueue_time": 1380298994701, "project": "openstack/swift", "remaining_time": 1697218, "id": "48601,1"}, {"failing_reasons": ["at least one job failed"], "items_behind": [], "jobs": [{"elapsed_time": 100330, "name": "gate-swift-docs", "url": "https://jenkins02.openstack.org/job/gate-swift-docs/662/", "voting": true, "remaining_time": 0, "result": "SUCCESS"}, {"elapsed_time": 64171, "name": "gate-swift-pep8", "url": "https://jenkins02.openstack.org/job/gate-swift-pep8/652/", "voting": true, "remaining_time": 0, "result": "SUCCESS"}, {"elapsed_time": 121329, "name": "gate-swift-python26", "url": "https://jenkins01.openstack.org/job/gate-swift-python26/683/", "voting": true, "remaining_time": 0, "result": "SUCCESS"}, {"elapsed_time": 5623, "name": "gate-swift-python27", "url": "https://jenkins02.openstack.org/job/gate-swift-python27/726/", "voting": true, "remaining_time": 0, "result": "FAILURE"}, {"elapsed_time": 159076, "name": "gate-swift-devstack-vm-functional", "url": "https://jenkins02.openstack.org/job/gate-swift-devstack-vm-functional/1795/", "voting": true, "remaining_time": 633341, "result": null}, {"elapsed_time": 149233, "name": "gate-tempest-devstack-vm-full", "url": "https://jenkins01.openstack.org/job/gate-tempest-devstack-vm-full/15604/", "voting": true, "remaining_time": 1635152, "result": null}, {"elapsed_time": 139770, "name": "gate-tempest-devstack-vm-neutron", "url": "https://jenkins02.openstack.org/job/gate-tempest-devstack-vm-neutron/16438/", "voting": true, "remaining_time": 1174739, "result": null}, {"elapsed_time": 133160, "name": "gate-tempest-devstack-vm-postgres-full", "url": "https://jenkins01.openstack.org/job/gate-tempest-devstack-vm-postgres-full/14701/", "voting": true, "remaining_time": 1587758, "result": null}, {"elapsed_time": 117650, "name": "gate-tempest-devstack-vm-large-ops", "url": "https://jenkins02.openstack.org/job/gate-tempest-devstack-vm-large-ops/4298/", "voting": true, "remaining_time": 581348, "result": null}, {"elapsed_time": 115132, "name": "gate-grenade-devstack-vm", "url": "https://jenkins02.openstack.org/job/gate-grenade-devstack-vm/12628/", "voting": true, "remaining_time": 1539817, "result": null}], "url": "https://review.openstack.org/48164", "item_ahead": "48516,4", "enqueue_time": 1380299009131, "project": "openstack/swift", "remaining_time": 1697218, "id": "48164,1"}, {"failing_reasons": [], "items_behind": ["48503,1"], "jobs": [{"elapsed_time": 80662, "name": "gate-swift-docs", "url": "https://jenkins01.openstack.org/job/gate-swift-docs/794/", "voting": true, "remaining_time": 0, "result": "SUCCESS"}, {"elapsed_time": 61048, "name": "gate-swift-pep8", "url": "https://jenkins01.openstack.org/job/gate-swift-pep8/801/", "voting": true, "remaining_time": 0, "result": "SUCCESS"}, {"elapsed_time": 118183, "name": "gate-swift-python26", "url": "https://jenkins02.openstack.org/job/gate-swift-python26/717/", "voting": true, "remaining_time": 0, "result": "SUCCESS"}, {"elapsed_time": 99494, "name": "gate-swift-python27", "url": "https://jenkins01.openstack.org/job/gate-swift-python27/723/", "voting": true, "remaining_time": 0, "result": "SUCCESS"}, {"elapsed_time": 110549, "name": "gate-swift-devstack-vm-functional", "url": "https://jenkins02.openstack.org/job/gate-swift-devstack-vm-functional/1796/", "voting": true, "remaining_time": 681868, "result": null}, {"elapsed_time": 70538, "name": "gate-tempest-devstack-vm-full", "url": "https://jenkins02.openstack.org/job/gate-tempest-devstack-vm-full/14933/", "voting": true, "remaining_time": 1855702, "result": null}, {"elapsed_time": 60891, "name": "gate-tempest-devstack-vm-neutron", "url": "https://jenkins02.openstack.org/job/gate-tempest-devstack-vm-neutron/16439/", "voting": true, "remaining_time": 1253618, "result": null}, {"elapsed_time": null, "name": "gate-tempest-devstack-vm-postgres-full", "url": null, "voting": true, "remaining_time": null, "result": null}, {"elapsed_time": null, "name": "gate-tempest-devstack-vm-large-ops", "url": null, "voting": true, "remaining_time": null, "result": null}, {"elapsed_time": null, "name": "gate-grenade-devstack-vm", "url": null, "voting": true, "remaining_time": null, "result": null}], "url": "https://review.openstack.org/46291", "item_ahead": "48516,4", "enqueue_time": 1380299228671, "project": "openstack/swift", "remaining_time": null, "id": "46291,2"}, {"failing_reasons": [], "items_behind": ["48202,1", "48553,4", "47718,7"], "jobs": [{"elapsed_time": 98382, "name": "gate-glance-docs", "url": "https://jenkins02.openstack.org/job/gate-glance-docs/640/", "voting": true, "remaining_time": 0, "result": "SUCCESS"}, {"elapsed_time": 171699, "name": "gate-glance-pep8", "url": "https://jenkins02.openstack.org/job/gate-glance-pep8/626/", "voting": true, "remaining_time": 0, "result": "SUCCESS"}, {"elapsed_time": 589539, "name": "gate-glance-python26", "url": "https://jenkins02.openstack.org/job/gate-glance-python26/689/", "voting": true, "remaining_time": 0, "result": "SUCCESS"}, {"elapsed_time": 520779, "name": "gate-glance-python27", "url": "https://jenkins02.openstack.org/job/gate-glance-python27/726/", "voting": true, "remaining_time": 0, "result": "SUCCESS"}, {"elapsed_time": null, "name": "gate-tempest-devstack-vm-full", "url": null, "voting": true, "remaining_time": null, "result": null}, {"elapsed_time": null, "name": "gate-tempest-devstack-vm-postgres-full", "url": null, "voting": true, "remaining_time": null, "result": null}, {"elapsed_time": null, "name": "gate-tempest-devstack-vm-neutron", "url": null, "voting": true, "remaining_time": null, "result": null}, {"elapsed_time": null, "name": "gate-tempest-devstack-vm-large-ops", "url": null, "voting": true, "remaining_time": null, "result": null}, {"elapsed_time": null, "name": "gate-grenade-devstack-vm", "url": null, "voting": true, "remaining_time": null, "result": null}], "url": "https://review.openstack.org/48503", "item_ahead": "46291,2", "enqueue_time": 1380299426335, "project": "openstack/glance", "remaining_time": null, "id": "48503,1"}, {"failing_reasons": ["at least one job failed"], "items_behind": [], "jobs": [{"elapsed_time": 579487, "name": "gate-horizon-docs", "url": "https://jenkins02.openstack.org/job/gate-horizon-docs/616/", "voting": true, "remaining_time": 0, "result": "SUCCESS"}, {"elapsed_time": 118371, "name": "gate-horizon-pep8", "url": "https://jenkins01.openstack.org/job/gate-horizon-pep8/826/", "voting": true, "remaining_time": 0, "result": "SUCCESS"}, {"elapsed_time": 234012, "name": "gate-horizon-python26", "url": "https://jenkins02.openstack.org/job/gate-horizon-python26/756/", "voting": true, "remaining_time": 0, "result": "SUCCESS"}, {"elapsed_time": 216372, "name": "gate-horizon-python27", "url": "https://jenkins02.openstack.org/job/gate-horizon-python27/716/", "voting": true, "remaining_time": 0, "result": "SUCCESS"}, {"elapsed_time": 188521, "name": "gate-horizon-python27-django14", "url": "https://jenkins02.openstack.org/job/gate-horizon-python27-django14/685/", "voting": true, "remaining_time": 0, "result": "SUCCESS"}, {"elapsed_time": 1847, "name": "gate-horizon-selenium", "url": "https://jenkins02.openstack.org/job/gate-horizon-selenium/734/", "voting": true, "remaining_time": 0, "result": "FAILURE"}, {"elapsed_time": null, "name": "gate-tempest-devstack-vm-full", "url": null, "voting": true, "remaining_time": null, "result": null}, {"elapsed_time": null, "name": "gate-tempest-devstack-vm-postgres-full", "url": null, "voting": true, "remaining_time": null, "result": null}, {"elapsed_time": null, "name": "gate-tempest-devstack-vm-neutron", "url": null, "voting": true, "remaining_time": null, "result": null}, {"elapsed_time": null, "name": "gate-tempest-devstack-vm-large-ops", "url": null, "voting": true, "remaining_time": null, "result": null}, {"elapsed_time": null, "name": "gate-grenade-devstack-vm", "url": null, "voting": true, "remaining_time": null, "result": null}], "url": "https://review.openstack.org/48202", "item_ahead": "48503,1", "enqueue_time": 1380304046069, "project": "openstack/horizon", "remaining_time": null, "id": "48202,1"}, {"failing_reasons": ["at least one job failed"], "items_behind": [], "jobs": [{"elapsed_time": 79009, "name": "gate-keystone-docs", "url": "https://jenkins01.openstack.org/job/gate-keystone-docs/1215/", "voting": true, "remaining_time": 0, "result": "SUCCESS"}, {"elapsed_time": 89394, "name": "gate-keystone-pep8", "url": "https://jenkins02.openstack.org/job/gate-keystone-pep8/1007/", "voting": true, "remaining_time": 0, "result": "SUCCESS"}, {"elapsed_time": 633149, "name": "gate-keystone-python26", "url": "https://jenkins02.openstack.org/job/gate-keystone-python26/1065/", "voting": true, "remaining_time": 448519, "result": null}, {"elapsed_time": 8840, "name": "gate-keystone-python27", "url": "https://jenkins02.openstack.org/job/gate-keystone-python27/1097/", "voting": true, "remaining_time": 0, "result": "FAILURE"}, {"elapsed_time": null, "name": "gate-tempest-devstack-vm-full", "url": null, "voting": true, "remaining_time": null, "result": null}, {"elapsed_time": null, "name": "gate-tempest-devstack-vm-postgres-full", "url": null, "voting": true, "remaining_time": null, "result": null}, {"elapsed_time": null, "name": "gate-tempest-devstack-vm-neutron", "url": null, "voting": true, "remaining_time": null, "result": null}, {"elapsed_time": null, "name": "gate-tempest-devstack-vm-large-ops", "url": null, "voting": true, "remaining_time": null, "result": null}, {"elapsed_time": null, "name": "gate-grenade-devstack-vm", "url": null, "voting": true, "remaining_time": null, "result": null}, {"elapsed_time": null, "name": "gate-swift-devstack-vm-functional", "url": null, "voting": true, "remaining_time": null, "result": null}], "url": "https://review.openstack.org/48553", "item_ahead": "48503,1", "enqueue_time": 1380304548765, "project": "openstack/keystone", "remaining_time": null, "id": "48553,4"}, {"failing_reasons": [], "items_behind": ["48721,1"], "jobs": [{"elapsed_time": 93320, "name": "gate-glance-docs", "url": "https://jenkins02.openstack.org/job/gate-glance-docs/641/", "voting": true, "remaining_time": 0, "result": "SUCCESS"}, {"elapsed_time": 98965, "name": "gate-glance-pep8", "url": "https://jenkins01.openstack.org/job/gate-glance-pep8/816/", "voting": true, "remaining_time": 0, "result": "SUCCESS"}, {"elapsed_time": 601959, "name": "gate-glance-python26", "url": "https://jenkins01.openstack.org/job/gate-glance-python26/666/", "voting": true, "remaining_time": 0, "result": "SUCCESS"}, {"elapsed_time": 588646, "name": "gate-glance-python27", "url": "https://jenkins02.openstack.org/job/gate-glance-python27/729/", "voting": true, "remaining_time": 0, "result": "SUCCESS"}, {"elapsed_time": null, "name": "gate-tempest-devstack-vm-full", "url": null, "voting": true, "remaining_time": null, "result": null}, {"elapsed_time": null, "name": "gate-tempest-devstack-vm-postgres-full", "url": null, "voting": true, "remaining_time": null, "result": null}, {"elapsed_time": null, "name": "gate-tempest-devstack-vm-neutron", "url": null, "voting": true, "remaining_time": null, "result": null}, {"elapsed_time": null, "name": "gate-tempest-devstack-vm-large-ops", "url": null, "voting": true, "remaining_time": null, "result": null}, {"elapsed_time": null, "name": "gate-grenade-devstack-vm", "url": null, "voting": true, "remaining_time": null, "result": null}], "url": "https://review.openstack.org/47718", "item_ahead": "48503,1", "enqueue_time": 1380307097942, "project": "openstack/glance", "remaining_time": null, "id": "47718,7"}, {"failing_reasons": [], "items_behind": ["48636,3", "48560,1"], "jobs": [{"elapsed_time": 250871, "name": "gate-nova-docs", "url": "https://jenkins01.openstack.org/job/gate-nova-docs/6822/", "voting": true, "remaining_time": 0, "result": "SUCCESS"}, {"elapsed_time": 271342, "name": "gate-nova-pep8", "url": "https://jenkins02.openstack.org/job/gate-nova-pep8/4733/", "voting": true, "remaining_time": 0, "result": "SUCCESS"}, {"elapsed_time": 603753, "name": "gate-nova-python26", "url": "https://jenkins01.openstack.org/job/gate-nova-python26/5810/", "voting": true, "remaining_time": 378103, "result": null}, {"elapsed_time": 607935, "name": "gate-nova-python27", "url": "https://jenkins02.openstack.org/job/gate-nova-python27/5878/", "voting": true, "remaining_time": 201525, "result": null}, {"elapsed_time": null, "name": "gate-tempest-devstack-vm-full", "url": null, "voting": true, "remaining_time": null, "result": null}, {"elapsed_time": null, "name": "gate-tempest-devstack-vm-postgres-full", "url": null, "voting": true, "remaining_time": null, "result": null}, {"elapsed_time": null, "name": "gate-tempest-devstack-vm-neutron", "url": null, "voting": true, "remaining_time": null, "result": null}, {"elapsed_time": null, "name": "gate-tempest-devstack-vm-large-ops", "url": null, "voting": true, "remaining_time": null, "result": null}, {"elapsed_time": null, "name": "gate-grenade-devstack-vm", "url": null, "voting": true, "remaining_time": null, "result": null}], "url": "https://review.openstack.org/48721", "item_ahead": "47718,7", "enqueue_time": 1380308978350, "project": "openstack/nova", "remaining_time": null, "id": "48721,1"}, {"failing_reasons": ["at least one job failed"], "items_behind": [], "jobs": [{"elapsed_time": 220348, "name": "gate-ceilometer-docs", "url": "https://jenkins02.openstack.org/job/gate-ceilometer-docs/995/", "voting": true, "remaining_time": 0, "result": "SUCCESS"}, {"elapsed_time": 70164, "name": "gate-ceilometer-pep8", "url": "https://jenkins01.openstack.org/job/gate-ceilometer-pep8/1153/", "voting": true, "remaining_time": 0, "result": "SUCCESS"}, {"elapsed_time": 554806, "name": "gate-ceilometer-python26", "url": "https://jenkins02.openstack.org/job/gate-ceilometer-python26/1021/", "voting": true, "remaining_time": 43, "result": null}, {"elapsed_time": 329706, "name": "gate-ceilometer-python27", "url": "https://jenkins02.openstack.org/job/gate-ceilometer-python27/1009/", "voting": true, "remaining_time": 0, "result": "FAILURE"}, {"elapsed_time": null, "name": "gate-tempest-devstack-vm-full", "url": null, "voting": true, "remaining_time": null, "result": null}, {"elapsed_time": null, "name": "gate-tempest-devstack-vm-postgres-full", "url": null, "voting": true, "remaining_time": null, "result": null}, {"elapsed_time": null, "name": "gate-tempest-devstack-vm-neutron", "url": null, "voting": true, "remaining_time": null, "result": null}, {"elapsed_time": null, "name": "gate-tempest-devstack-vm-large-ops", "url": null, "voting": true, "remaining_time": null, "result": null}, {"elapsed_time": null, "name": "gate-swift-devstack-vm-functional", "url": null, "voting": true, "remaining_time": null, "result": null}], "url": "https://review.openstack.org/48636", "item_ahead": "48721,1", "enqueue_time": 1380309007955, "project": "openstack/ceilometer", "remaining_time": null, "id": "48636,3"}, {"failing_reasons": [], "items_behind": [], "jobs": [{"elapsed_time": 5555, "name": "gate-tempest-requirements", "url": "https://jenkins01.openstack.org/job/gate-tempest-requirements/35/", "voting": true, "remaining_time": 0, "result": "SUCCESS"}, {"elapsed_time": 103859, "name": "gate-tempest-pep8", "url": "https://jenkins01.openstack.org/job/gate-tempest-pep8/1605/", "voting": true, "remaining_time": 0, "result": "SUCCESS"}, {"elapsed_time": 263246, "name": "gate-tempest-docs", "url": "https://jenkins02.openstack.org/job/gate-tempest-docs/1175/", "voting": true, "remaining_time": 157235, "result": null}, {"elapsed_time": null, "name": "gate-tempest-devstack-vm-full", "url": null, "voting": true, "remaining_time": null, "result": null}, {"elapsed_time": null, "name": "gate-tempest-devstack-vm-postgres-full", "url": null, "voting": true, "remaining_time": null, "result": null}, {"elapsed_time": null, "name": "gate-tempest-devstack-vm-neutron", "url": null, "voting": true, "remaining_time": null, "result": null}, {"elapsed_time": null, "name": "gate-tempest-devstack-vm-large-ops", "url": null, "voting": true, "remaining_time": null, "result": null}, {"elapsed_time": null, "name": "gate-grenade-devstack-vm", "url": null, "voting": true, "remaining_time": null, "result": null}], "url": "https://review.openstack.org/48560", "item_ahead": "48721,1", "enqueue_time": 1380309816876, "project": "openstack/tempest", "remaining_time": null, "id": "48560,1"}]], "name": "openstack-dev/devstack, openstack-dev/grenade, openstack-dev/pbr, openstack-infra/devstack-gate, openstack/ceilometer, openstack/cinder, openstack/glance, openstack/heat, openstack/horizon, openstack/keystone, openstack/neutron, openstack/nova, openstack/oslo.config, openstack/oslo.messaging, openstack/oslo.version, openstack/python-ceilometerclient, openstack/python-cinderclient, openstack/python-glanceclient, openstack/python-heatclient, openstack/python-keystoneclient, openstack/python-neutronclient, openstack/python-novaclient, openstack/python-swiftclient, openstack/requirements, openstack/swift, openstack/tempest, z/tempest"}, {"heads": [], "name": "openstack/ironic"}, {"heads": [], "name": "openstack-dev/cookiecutter, openstack-dev/openstack-nose, openstack-dev/openstack-qa, openstack-dev/sandbox, openstack-infra/activity-board, openstack-infra/askbot-theme, openstack-infra/groups, openstack-infra/lodgeit, openstack-infra/meetbot, openstack-infra/nose-html-output, openstack-infra/odsreg, openstack-infra/publications, openstack-infra/puppet-apparmor, openstack-infra/puppet-dashboard, openstack-infra/puppet-vcsrepo, openstack-infra/releasestatus, openstack-infra/reviewstats, openstack-infra/tripleo-ci, openstack/api-site, openstack/compute-api, openstack/database-api, openstack/governance, openstack/heat-templates, openstack/identity-api, openstack/image-api, openstack/netconn-api, openstack/object-api, openstack/openstack-chef, openstack/tripleo-heat-templates, openstack/tripleo-image-elements, openstack/trove-integration, openstack/volume-api, stackforge/MRaaS, stackforge/cloudcafe, stackforge/clouddocs-maven-plugin, stackforge/cloudroast, stackforge/fuel-astute, stackforge/fuel-main, stackforge/fuel-ostf-plugin, stackforge/fuel-ostf-tests, stackforge/fuel-web, stackforge/golang-client, stackforge/murano-agent, stackforge/murano-deployment, stackforge/murano-docs, stackforge/murano-tests, stackforge/novaimagebuilder, stackforge/occi-os, stackforge/opencafe, stackforge/openvz-nova-driver, stackforge/puppet-openstack_dev_env, stackforge/puppet-savanna, stackforge/python-climateclient, stackforge/savanna-extra, stackforge/savanna-image-elements, stackforge/staccato, stackforge/tuskar-ui"}, {"heads": [], "name": "stackforge/savanna"}, {"heads": [], "name": "stackforge/cookbook-openstack-image"}, {"heads": [], "name": "stackforge/puppet-cinder"}, {"heads": [], "name": "openstack/trove"}, {"heads": [], "name": "openstack/python-ironicclient"}, {"heads": [], "name": "stackforge/cookbook-openstack-identity"}, {"heads": [], "name": "stackforge/python-tuskarclient"}, {"heads": [], "name": "stackforge/bufunfa"}, {"heads": [], "name": "openstack-infra/gerrit"}, {"heads": [], "name": "openstack/heat-cfntools"}, {"heads": [], "name": "stackforge/taskflow"}, {"heads": [], "name": "openstack/openstack-planet"}, {"heads": [], "name": "stackforge/barbican"}, {"heads": [], "name": "stackforge/pycadf"}, {"heads": [], "name": "openstack-infra/jeepyb"}, {"heads": [], "name": "stackforge/puppet-heat"}, {"heads": [], "name": "stackforge/packstack"}, {"heads": [], "name": "openstack/oslo.sphinx"}, {"heads": [], "name": "stackforge/murano-conductor"}, {"heads": [], "name": "openstack-infra/reviewday"}, {"heads": [], "name": "openstack/python-marconiclient"}, {"heads": [], "name": "stackforge/puppet-glance"}, {"heads": [], "name": "stackforge/anvil"}, {"heads": [], "name": "stackforge/puppet-nova"}, {"heads": [], "name": "stackforge/murano-api"}, {"heads": [], "name": "stackforge/cookbook-openstack-dashboard"}, {"heads": [], "name": "stackforge/murano-common"}, {"heads": [], "name": "openstack-infra/gearman-plugin"}, {"heads": [], "name": "openstack-infra/gerritbot"}, {"heads": [], "name": "stackforge/python-savannaclient"}, {"heads": [], "name": "openstack-infra/elastic-recheck"}, {"heads": [], "name": "stackforge/pecan"}, {"heads": [], "name": "openstack/diskimage-builder"}, {"heads": [], "name": "stackforge/cookbook-openstack-orchestration"}, {"heads": [], "name": "stackforge/cookbook-openstack-common"}, {"heads": [], "name": "stackforge/cookbook-openstack-object-storage"}, {"heads": [], "name": "openstack-infra/nodepool"}, {"heads": [], "name": "stackforge/cookbook-openstack-compute"}, {"heads": [], "name": "openstack/python-troveclient"}, {"heads": [], "name": "stackforge/climate"}, {"heads": [], "name": "openstack-infra/git-review"}, {"heads": [], "name": "openstack-infra/gitdm"}, {"heads": [], "name": "stackforge/designate"}, {"heads": [], "name": "openstack-infra/config"}, {"heads": [], "name": "stackforge/tuskar"}, {"heads": [], "name": "stackforge/murano-dashboard"}, {"heads": [], "name": "stackforge/pyghmi"}, {"heads": [], "name": "openstack/operations-guide"}, {"heads": [], "name": "stackforge/cl-openstack-client"}, {"heads": [], "name": "stackforge/puppet-neutron"}, {"heads": [], "name": "stackforge/stackalytics"}, {"heads": [], "name": "stackforge/python-manilaclient"}, {"heads": [], "name": "stackforge/puppet-openstack"}, {"heads": [], "name": "stackforge/cookbook-openstack-metering"}, {"heads": [], "name": "openstack-infra/gerritlib"}, {"heads": [], "name": "stackforge/sqlalchemy-migrate"}, {"heads": [], "name": "stackforge/manila"}, {"heads": [], "name": "stackforge/kwapi"}, {"heads": [], "name": "openstack-infra/zmq-event-publisher"}, {"heads": [], "name": "openstack/os-collect-config"}, {"heads": [], "name": "openstack-infra/statusbot"}, {"heads": [], "name": "stackforge/python-libraclient"}, {"heads": [], "name": "openstack-infra/gear"}, {"heads": [], "name": "openstack-infra/zuul"}, {"heads": [], "name": "stackforge/libra"}, {"heads": [], "name": "stackforge/bindep"}, {"heads": [], "name": "stackforge/savanna-dashboard"}, {"heads": [], "name": "openstack/os-apply-config"}, {"heads": [], "name": "stackforge/openstack-chef-repo"}, {"heads": [], "name": "openstack-infra/storyboard"}, {"heads": [], "name": "stackforge/cookbook-openstack-network"}, {"heads": [], "name": "stackforge/cookbook-openstack-ops-database"}, {"heads": [], "name": "openstack-infra/pypi-mirror"}, {"heads": [], "name": "openstack/oslo-incubator"}, {"heads": [], "name": "stackforge/puppet-swift"}, {"heads": [], "name": "openstack-dev/hacking"}, {"heads": [], "name": "stackforge/cookbook-openstack-ops-messaging"}, {"heads": [], "name": "stackforge/puppet-keystone"}, {"heads": [], "name": "stackforge/inception"}, {"heads": [], "name": "openstack/os-refresh-config"}, {"heads": [], "name": "stackforge/healthnmon"}, {"heads": [], "name": "openstack-infra/jenkins-job-builder"}, {"heads": [], "name": "stackforge/python-muranoclient"}, {"heads": [], "name": "stackforge/python-designateclient"}, {"heads": [], "name": "stackforge/puppet-ceilometer"}, {"heads": [], "name": "openstack/django_openstack_auth"}, {"heads": [], "name": "stackforge/cookbook-openstack-block-storage"}, {"heads": [], "name": "stackforge/puppet-tempest"}, {"heads": [], "name": "stackforge/billingstack"}, {"heads": [], "name": "openstack/tripleo-incubator"}, {"heads": [], "name": "stackforge/rally"}, {"heads": [], "name": "stackforge/wsme"}, {"heads": [], "name": "openstack/python-openstackclient"}, {"heads": [], "name": "openstack/marconi"}, {"heads": [], "name": "openstack/openstack-manuals"}], "name": "gate"}, {"description": "This pipeline runs jobs that operate after each change is merged.", "change_queues": [{"heads": [[{"failing_reasons": ["at least one job failed"], "items_behind": [], "jobs": [{"elapsed_time": 111939, "name": "nova-branch-tarball", "url": "https://jenkins01.openstack.org/job/nova-branch-tarball/399/", "voting": true, "remaining_time": 71193, "result": null}, {"elapsed_time": 111936, "name": "nova-coverage", "url": "https://jenkins01.openstack.org/job/nova-coverage/395/", "voting": true, "remaining_time": 902451, "result": null}, {"elapsed_time": 111938, "name": "nova-docs", "url": "https://jenkins01.openstack.org/job/nova-docs/376/", "voting": true, "remaining_time": 204320, "result": null}, {"elapsed_time": 102513, "name": "nova-upstream-translation-update", "url": "https://jenkins.openstack.org/job/nova-upstream-translation-update/4393/", "voting": true, "remaining_time": 0, "result": "FAILURE"}], "url": "https://review.openstack.org/gitweb?p=openstack/nova.git;a=commitdiff;h=839b5e593f54dbd94f430af45e77f174329942b5", "item_ahead": null, "enqueue_time": 1380314129491, "project": "openstack/nova", "remaining_time": 902451, "id": "839b5e593f54dbd94f430af45e77f174329942b5"}], [{"failing_reasons": [], "items_behind": [], "jobs": [{"elapsed_time": 79896, "name": "tempest-docs", "url": "https://jenkins02.openstack.org/job/tempest-docs/83/", "voting": true, "remaining_time": 150587, "result": null}, {"elapsed_time": 79831, "name": "tempest-branch-tarball", "url": "https://jenkins02.openstack.org/job/tempest-branch-tarball/90/", "voting": true, "remaining_time": 92417, "result": null}], "url": "https://review.openstack.org/gitweb?p=openstack/tempest.git;a=commitdiff;h=6d4eecc3ca744a6b6d78f57b4a9177652bcab166", "item_ahead": null, "enqueue_time": 1380314162965, "project": "openstack/tempest", "remaining_time": 150587, "id": "6d4eecc3ca744a6b6d78f57b4a9177652bcab166"}], [{"failing_reasons": [], "items_behind": [], "jobs": [{"elapsed_time": null, "name": "nova-branch-tarball", "url": null, "voting": true, "remaining_time": null, "result": null}, {"elapsed_time": 72296, "name": "nova-coverage", "url": "https://jenkins01.openstack.org/job/nova-coverage/396/", "voting": true, "remaining_time": 942091, "result": null}, {"elapsed_time": 72128, "name": "nova-docs", "url": "https://jenkins02.openstack.org/job/nova-docs/328/", "voting": true, "remaining_time": 226661, "result": null}, {"elapsed_time": 10567, "name": "nova-upstream-translation-update", "url": "https://jenkins.openstack.org/job/nova-upstream-translation-update/4394/", "voting": true, "remaining_time": 139, "result": null}], "url": "https://review.openstack.org/gitweb?p=openstack/nova.git;a=commitdiff;h=a9890c554685959199cb01dfff4a989c2e410649", "item_ahead": null, "enqueue_time": 1380314170606, "project": "openstack/nova", "remaining_time": null, "id": "a9890c554685959199cb01dfff4a989c2e410649"}], [{"failing_reasons": [], "items_behind": [], "jobs": [{"elapsed_time": 58196, "name": "nova-branch-tarball", "url": "https://jenkins02.openstack.org/job/nova-branch-tarball/306/", "voting": true, "remaining_time": 162209, "result": null}, {"elapsed_time": 58156, "name": "nova-coverage", "url": "https://jenkins02.openstack.org/job/nova-coverage/308/", "voting": true, "remaining_time": 1164893, "result": null}, {"elapsed_time": 58150, "name": "nova-docs", "url": "https://jenkins02.openstack.org/job/nova-docs/329/", "voting": true, "remaining_time": 240639, "result": null}, {"elapsed_time": null, "name": "nova-upstream-translation-update", "url": null, "voting": true, "remaining_time": null, "result": null}], "url": "https://review.openstack.org/gitweb?p=openstack/nova.git;a=commitdiff;h=2d5755416c6ae52f61ec342d100cec9be6ff4539", "item_ahead": null, "enqueue_time": 1380314184610, "project": "openstack/nova", "remaining_time": null, "id": "2d5755416c6ae52f61ec342d100cec9be6ff4539"}]], "name": "openstack-dev/hacking, openstack-dev/openstack-qa, openstack-dev/pbr, openstack-infra/config, openstack-infra/gear, openstack-infra/gearman-plugin, openstack-infra/gerrit, openstack-infra/gerritbot, openstack-infra/git-review, openstack-infra/jenkins-job-builder, openstack-infra/nodepool, openstack-infra/nose-html-output, openstack-infra/publications, openstack-infra/reviewday, openstack-infra/statusbot, openstack-infra/storyboard, openstack-infra/zmq-event-publisher, openstack-infra/zuul, openstack/api-site, openstack/ceilometer, openstack/cinder, openstack/compute-api, openstack/diskimage-builder, openstack/django_openstack_auth, openstack/glance, openstack/heat, openstack/heat-cfntools, openstack/horizon, openstack/identity-api, openstack/image-api, openstack/ironic, openstack/keystone, openstack/marconi, openstack/netconn-api, openstack/neutron, openstack/nova, openstack/object-api, openstack/openstack-manuals, openstack/operations-guide, openstack/os-apply-config, openstack/os-collect-config, openstack/os-refresh-config, openstack/oslo-incubator, openstack/oslo.config, openstack/oslo.messaging, openstack/oslo.sphinx, openstack/oslo.version, openstack/python-ceilometerclient, openstack/python-cinderclient, openstack/python-glanceclient, openstack/python-heatclient, openstack/python-ironicclient, openstack/python-keystoneclient, openstack/python-marconiclient, openstack/python-neutronclient, openstack/python-novaclient, openstack/python-openstackclient, openstack/python-swiftclient, openstack/python-troveclient, openstack/requirements, openstack/swift, openstack/tempest, openstack/tripleo-image-elements, openstack/tripleo-incubator, openstack/trove, openstack/volume-api, stackforge/barbican, stackforge/billingstack, stackforge/bindep, stackforge/bufunfa, stackforge/designate, stackforge/libra, stackforge/manila, stackforge/murano-api, stackforge/murano-common, stackforge/murano-conductor, stackforge/murano-dashboard, stackforge/pecan, stackforge/pycadf, stackforge/python-designateclient, stackforge/python-manilaclient, stackforge/python-muranoclient, stackforge/python-savannaclient, stackforge/python-tuskarclient, stackforge/rally, stackforge/savanna, stackforge/savanna-dashboard, stackforge/sqlalchemy-migrate, stackforge/stackalytics, stackforge/wsme"}], "name": "post"}, {"description": "This pipeline runs jobs on projects in response to pre-release tags.", "change_queues": [{"heads": [], "name": "openstack-dev/hacking, openstack-dev/pbr, openstack-infra/gear, openstack-infra/gerritbot, openstack-infra/gerritlib, openstack-infra/git-review, openstack-infra/jeepyb, openstack-infra/jenkins-job-builder, openstack-infra/nodepool, openstack-infra/nose-html-output, openstack-infra/pypi-mirror, openstack-infra/reviewday, openstack-infra/statusbot, openstack-infra/storyboard, openstack-infra/zuul, openstack/ceilometer, openstack/cinder, openstack/diskimage-builder, openstack/django_openstack_auth, openstack/glance, openstack/heat, openstack/heat-cfntools, openstack/horizon, openstack/ironic, openstack/keystone, openstack/marconi, openstack/neutron, openstack/nova, openstack/os-apply-config, openstack/os-collect-config, openstack/os-refresh-config, openstack/oslo.config, openstack/oslo.messaging, openstack/oslo.sphinx, openstack/oslo.version, openstack/python-ceilometerclient, openstack/python-cinderclient, openstack/python-glanceclient, openstack/python-heatclient, openstack/python-keystoneclient, openstack/python-marconiclient, openstack/python-neutronclient, openstack/python-novaclient, openstack/python-openstackclient, openstack/python-swiftclient, openstack/python-troveclient, openstack/swift, openstack/tripleo-image-elements, openstack/tripleo-incubator, openstack/trove, stackforge/billingstack, stackforge/bindep, stackforge/designate, stackforge/libra, stackforge/murano-api, stackforge/murano-common, stackforge/murano-conductor, stackforge/murano-dashboard, stackforge/pecan, stackforge/pycadf, stackforge/python-designateclient, stackforge/python-muranoclient, stackforge/python-savannaclient, stackforge/rally, stackforge/savanna, stackforge/savanna-dashboard, stackforge/sqlalchemy-migrate, stackforge/stackalytics, stackforge/wsme"}], "name": "pre-release"}, {"description": "When a commit is tagged as a release, this pipeline runs jobs that publish archives and documentation.", "change_queues": [{"heads": [], "name": "openstack-dev/hacking, openstack-dev/openstack-qa, openstack-dev/pbr, openstack-infra/gear, openstack-infra/gearman-plugin, openstack-infra/gerritbot, openstack-infra/gerritlib, openstack-infra/git-review, openstack-infra/jeepyb, openstack-infra/jenkins-job-builder, openstack-infra/nodepool, openstack-infra/nose-html-output, openstack-infra/pypi-mirror, openstack-infra/reviewday, openstack-infra/statusbot, openstack-infra/storyboard, openstack-infra/zmq-event-publisher, openstack-infra/zuul, openstack/ceilometer, openstack/cinder, openstack/diskimage-builder, openstack/django_openstack_auth, openstack/glance, openstack/heat, openstack/heat-cfntools, openstack/horizon, openstack/ironic, openstack/keystone, openstack/marconi, openstack/neutron, openstack/nova, openstack/os-apply-config, openstack/os-collect-config, openstack/os-refresh-config, openstack/oslo-incubator, openstack/oslo.config, openstack/oslo.messaging, openstack/oslo.sphinx, openstack/oslo.version, openstack/python-ceilometerclient, openstack/python-cinderclient, openstack/python-glanceclient, openstack/python-heatclient, openstack/python-keystoneclient, openstack/python-marconiclient, openstack/python-neutronclient, openstack/python-novaclient, openstack/python-openstackclient, openstack/python-swiftclient, openstack/python-troveclient, openstack/swift, openstack/tripleo-image-elements, openstack/tripleo-incubator, openstack/trove, stackforge/billingstack, stackforge/bindep, stackforge/designate, stackforge/libra, stackforge/murano-api, stackforge/murano-common, stackforge/murano-conductor, stackforge/murano-dashboard, stackforge/pecan, stackforge/pycadf, stackforge/python-designateclient, stackforge/python-muranoclient, stackforge/python-savannaclient, stackforge/rally, stackforge/savanna, stackforge/savanna-dashboard, stackforge/sqlalchemy-migrate, stackforge/stackalytics, stackforge/wsme"}], "name": "release"}, {"description": "This pipeline is used for silently testing new jobs.", "change_queues": [{"heads": [], "name": ""}], "name": "silent"}, {"description": "On-demand pipeline for requesting a run against a set of jobs that are not yet gating. Leave review comment of \"check experimental\" to run jobs in this pipeline.", "change_queues": [{"heads": [], "name": "openstack-dev/devstack, openstack-dev/grenade, openstack-dev/pbr, openstack-infra/devstack-gate, openstack/cinder, openstack/glance, openstack/heat, openstack/horizon, openstack/keystone, openstack/neutron, openstack/nova, openstack/oslo-incubator, openstack/python-cinderclient, openstack/python-glanceclient, openstack/python-heatclient, openstack/python-keystoneclient, openstack/python-neutronclient, openstack/python-novaclient, openstack/swift, openstack/tempest, stackforge/sqlalchemy-migrate"}], "name": "experimental"}, {"description": "Jobs in this queue are triggered on a timer.", "change_queues": [{"heads": [], "name": "openstack-infra/gitdm, openstack-infra/zuul, openstack/ceilometer, openstack/cinder, openstack/glance, openstack/heat, openstack/horizon, openstack/keystone, openstack/neutron, openstack/nova, openstack/openstack-manuals, openstack/requirements, openstack/tempest, stackforge/savanna"}], "name": "periodic"}], "trigger_event_queue": {"length": 85}, "result_event_queue": {"length": 2}}
\ No newline at end of file diff --git a/web/config/webpack.common.js b/web/config/webpack.common.js new file mode 100644 index 000000000..ce27980d8 --- /dev/null +++ b/web/config/webpack.common.js @@ -0,0 +1,147 @@ +const path = require('path') +const webpack = require('webpack') +const HtmlWebpackPlugin = require('html-webpack-plugin') +const ForkTsCheckerWebpackPlugin = require('fork-ts-checker-webpack-plugin') + +module.exports = { + entry: './web/main.ts', + resolve: { + extensions: [ '.tsx', '.ts', '.js' ] + }, + output: { + filename: '[name].js', + // path.resolve(__dirname winds up relative to the config dir + path: path.resolve(__dirname, '../../zuul/web/static'), + publicPath: '' + }, + // Some folks prefer "cheaper" source-map for dev and one that is more + // expensive to build for prod. Debugging without the full source-map sucks, + // so define it here in common. + devtool: 'source-map', + optimization: { + runtimeChunk: true, + splitChunks: { + cacheGroups: { + commons: { + test: /node_modules/, + name: 'vendor', + chunks: 'all' + } + } + } + }, + plugins: [ + new ForkTsCheckerWebpackPlugin(), + new webpack.ProvidePlugin({ + $: 'jquery/dist/jquery', + jQuery: 'jquery/dist/jquery', + }), + // Each of the entries below lists a specific 'chunk' which is one of the + // entry items from above. We can collapse this to just do one single + // output file. + new HtmlWebpackPlugin({ + filename: 'index.html', + template: 'web/config/main.ejs', + title: 'Zuul Status' + }), + new HtmlWebpackPlugin({ + filename: 'status.html', + template: 'web/config/main.ejs', + title: 'Zuul Status' + }), + new HtmlWebpackPlugin({ + title: 'Zuul Builds', + template: 'web/config/main.ejs', + filename: 'builds.html' + }), + new HtmlWebpackPlugin({ + title: 'Zuul Jobs', + template: 'web/config/main.ejs', + filename: 'jobs.html' + }), + new HtmlWebpackPlugin({ + title: 'Zuul Tenants', + template: 'web/config/main.ejs', + filename: 'tenants.html' + }), + new HtmlWebpackPlugin({ + title: 'Zuul Console Stream', + template: 'web/config/main.ejs', + filename: 'stream.html' + }) + ], + module: { + rules: [ + { + test: /\.ts$/, + exclude: /node_modules/, + use: { + loader: 'ts-loader', + options: { + // disable type checker - we will use it in fork plugin + transpileOnly: true + } + } + }, + { + test: /\.js$/, + exclude: /node_modules/, + use: [ + 'babel-loader' + ] + }, + { + test: /.css$/, + use: [ + 'style-loader', + 'css-loader' + ] + }, + { + test: /\.(png|svg|jpg|gif)$/, + use: ['file-loader'], + }, + // The majority of the rules below are all about getting bootstrap copied + // appropriately. + { + test: /\.woff(2)?(\?v=\d+\.\d+\.\d+)?$/, + use: { + loader: 'url-loader', + options: { + limit: 10000, + mimetype: 'application/font-woff' + } + } + }, + { + test: /\.ttf(\?v=\d+\.\d+\.\d+)?$/, + use: { + loader: 'url-loader', + options: { + limit: 10000, + mimetype: 'application/octet-stream' + } + } + }, + { + test: /\.eot(\?v=\d+\.\d+\.\d+)?$/, + use: ['file-loader'], + }, + { + test: /\.svg(\?v=\d+\.\d+\.\d+)?$/, + use: { + loader: 'url-loader', + options: { + limit: 10000, + mimetype: 'image/svg+xml' + } + } + }, + { + test: /\.html$/, + use: ['html-loader'], + exclude: /node_modules/ + } + ] + } +}; diff --git a/web/config/webpack.dev.js b/web/config/webpack.dev.js new file mode 100644 index 000000000..6a9a98a8b --- /dev/null +++ b/web/config/webpack.dev.js @@ -0,0 +1,23 @@ +const path = require('path'); +const webpack = require('webpack'); +const Merge = require('webpack-merge'); +const CommonConfig = require('./webpack.common.js'); + +module.exports = Merge(CommonConfig, { + mode: 'development', + // Enable Hot Module Replacement for devServer + devServer: { + hot: true, + contentBase: path.resolve(__dirname, './zuul/web/static'), + publicPath: '/' + }, + plugins: [ + new webpack.HotModuleReplacementPlugin(), + // We only need to bundle the demo files when we're running locally + new webpack.ProvidePlugin({ + DemoStatusBasic: '../config/status-basic.json', + DemoStatusOpenStack: '../config/status-openstack.json', + DemoStatusTree: '../config/status-tree.json' + }), + ] +}) diff --git a/web/config/webpack.lint.js b/web/config/webpack.lint.js new file mode 100644 index 000000000..40fd03a73 --- /dev/null +++ b/web/config/webpack.lint.js @@ -0,0 +1,47 @@ +const path = require('path'); +const webpack = require('webpack'); +const Merge = require('webpack-merge'); +const CommonConfig = require('./webpack.common.js'); +const BundleAnalyzer = require('webpack-bundle-analyzer'); + +module.exports = Merge(CommonConfig, { + mode: 'development', + module: { + rules: [ + { + enforce: 'pre', + test: /\.ts$/, + exclude: /node_modules/, + use: [ + { + loader: 'tslint-loader', + options: { + emitErrors: true, + typeCheck: false, + + } + } + ] + }, + { + enforce: 'pre', + test: /\.js$/, + use: [ + 'babel-loader', + 'eslint-loader' + ], + exclude: /node_modules/, + } + ] + }, + plugins: [ + new webpack.HotModuleReplacementPlugin(), + new BundleAnalyzer.BundleAnalyzerPlugin({ + analyzerMode: 'static', + reportFilename: '../../../reports/bundle.html', + generateStatsFile: true, + openAnalyzer: false, + statsFilename: '../../../reports/stats.json', + }), + ] +}) diff --git a/web/config/webpack.prod.js b/web/config/webpack.prod.js new file mode 100644 index 000000000..8bc0d37d7 --- /dev/null +++ b/web/config/webpack.prod.js @@ -0,0 +1,32 @@ +const path = require('path'); +const webpack = require('webpack'); +const Merge = require('webpack-merge'); +const CommonConfig = require('./webpack.common.js'); +const CleanWebpackPlugin = require('clean-webpack-plugin'); +const ArchivePlugin = require('webpack-archive-plugin'); + +module.exports = Merge(CommonConfig, { + mode: 'production', + output: { + filename: '[name].[chunkhash].js', + // path.resolve(__dirname winds up relative to the config dir + path: path.resolve(__dirname, '../../zuul/web/static'), + publicPath: '' + }, + optimization: { + minimize: true + }, + plugins: [ + new CleanWebpackPlugin( + ['zuul/web/static'], { root: path.resolve(__dirname, '../..')}), + // Keeps the vendor bundle from changing needlessly. + new webpack.HashedModuleIdsPlugin(), + new ArchivePlugin({ + output: path.resolve(__dirname, '../../zuul-web'), + format: [ + 'tar', + ], + ext: 'tgz' + }) + ] +}) diff --git a/web/core/core.module.ts b/web/core/core.module.ts new file mode 100644 index 000000000..645192f9c --- /dev/null +++ b/web/core/core.module.ts @@ -0,0 +1,24 @@ +import { ModuleWithProviders, NgModule, Optional, SkipSelf } from '@angular/core' + +import { CommonModule } from '@angular/common' + +import { ZuulService } from '../zuul/zuul.service' + +@NgModule({ + imports: [ CommonModule ], + providers: [ ZuulService ] +}) +export class CoreModule { + constructor (@Optional() @SkipSelf() parentModule: CoreModule) { + if (parentModule) { + throw new Error( + 'CoreModule is already loaded. Import it in the AppModule only') + } + } + + static forRoot(config: {}): ModuleWithProviders { + return { + ngModule: CoreModule, + } + } +} diff --git a/web/images/black.png b/web/images/black.png Binary files differnew file mode 100644 index 000000000..252d87470 --- /dev/null +++ b/web/images/black.png diff --git a/web/images/green.png b/web/images/green.png Binary files differnew file mode 100644 index 000000000..a8765f141 --- /dev/null +++ b/web/images/green.png diff --git a/web/images/grey.png b/web/images/grey.png Binary files differnew file mode 100644 index 000000000..eaee0d7ce --- /dev/null +++ b/web/images/grey.png diff --git a/web/src/images/line-angle.png b/web/images/line-angle.png Binary files differindex fa748682a..fa748682a 100644 --- a/web/src/images/line-angle.png +++ b/web/images/line-angle.png diff --git a/web/src/images/line-t.png b/web/images/line-t.png Binary files differindex cfd3111a3..cfd3111a3 100644 --- a/web/src/images/line-t.png +++ b/web/images/line-t.png diff --git a/web/src/images/line.png b/web/images/line.png Binary files differindex ace6bab3d..ace6bab3d 100644 --- a/web/src/images/line.png +++ b/web/images/line.png diff --git a/web/images/red.png b/web/images/red.png Binary files differnew file mode 100644 index 000000000..e9956e8c5 --- /dev/null +++ b/web/images/red.png diff --git a/web/jobs/details.ts b/web/jobs/details.ts new file mode 100644 index 000000000..8dd7b3831 --- /dev/null +++ b/web/jobs/details.ts @@ -0,0 +1,17 @@ +// Copyright 2018 Red Hat +// +// Licensed under the Apache License, Version 2.0 (the "License"); you may +// not use this file except in compliance with the License. You may obtain +// a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, WITHOUT +// WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the +// License for the specific language governing permissions and limitations +// under the License. + +export default class JobDetails { + source_context: string +} diff --git a/web/jobs/job.ts b/web/jobs/job.ts new file mode 100644 index 000000000..0ce6c0cbd --- /dev/null +++ b/web/jobs/job.ts @@ -0,0 +1,25 @@ +// Copyright 2018 Red Hat +// +// Licensed under the Apache License, Version 2.0 (the "License"); you may +// not use this file except in compliance with the License. You may obtain +// a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, WITHOUT +// WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the +// License for the specific language governing permissions and limitations +// under the License. + +import JobDetails from './details' + +export default class Job { + expanded: boolean + details: JobDetails + name: string + + constructor() { + this.expanded = false + } +} diff --git a/web/jobs/jobs.component.html b/web/jobs/jobs.component.html new file mode 100644 index 000000000..87cdbb619 --- /dev/null +++ b/web/jobs/jobs.component.html @@ -0,0 +1,47 @@ +<!-- +Copyright 2017 Red Hat + +Licensed under the Apache License, Version 2.0 (the "License"); you may +not use this file except in compliance with the License. You may obtain +a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, WITHOUT +WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the +License for the specific language governing permissions and limitations +under the License. +--> +<div class="container-fluid"> + <table class="table table-hover table-condensed"> + <thead> + <tr> + <th>Name</th> + <th>Description</th> + <th>Last builds</th> + </tr> + </thead> + <tbody> + <ng-container *ngFor="let job of jobs"> + <tr> + <td>{{ job.name }}</td> + <td>{{ job.description }}</td> + <td><a [routerLink]="['../builds.html']" + [queryParams]="{job_name: job.name}" target="_self"> + builds</a></td> + </tr> + <tr *ngIf="job.expanded"> + <td colspan="3"> + <ul class="list-group"> + <li class="list-group-item" *ngFor="let detail of job.details"> + <!-- TODO: make clickable link to cgit files ? --> + {{ detail.source_context }} + </li> + </ul> + </td> + </tr> + </ng-container> + </tbody> + </table> +</div> diff --git a/web/jobs/jobs.component.ts b/web/jobs/jobs.component.ts new file mode 100644 index 000000000..6323ae821 --- /dev/null +++ b/web/jobs/jobs.component.ts @@ -0,0 +1,54 @@ +// Copyright 2017 Red Hat +// +// Licensed under the Apache License, Version 2.0 (the "License"); you may +// not use this file except in compliance with the License. You may obtain +// a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, WITHOUT +// WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the +// License for the specific language governing permissions and limitations +// under the License. + +import { Component, OnInit } from '@angular/core' +import { HttpClient } from '@angular/common/http' +import { ActivatedRoute } from '@angular/router' + +import ZuulService from '../zuul/zuul.service' +import JobDetails from './details' +import Job from './job' + +@Component({ + template: require('./jobs.component.html') +}) +export default class JobsComponent implements OnInit { + + jobs: Job[] + + constructor( + private http: HttpClient, private route: ActivatedRoute, + private zuul: ZuulService + ) {} + + async ngOnInit() { + await this.zuul.setTenant(this.route.snapshot.paramMap.get('tenant')) + this.jobsFetch() + } + + jobsFetch(): void { + const remoteLocation = this.zuul.getSourceUrl('jobs') + if (remoteLocation) { + this.http.get<Job[]>(remoteLocation) + .subscribe(jobs => this.injestJobs(jobs)) + } + } + + injestJobs(jobs: Job[]): void { + for (const job of jobs) { + job.expanded = false + } + this.jobs = jobs + } +} diff --git a/web/main.ts b/web/main.ts new file mode 100644 index 000000000..4ee56015f --- /dev/null +++ b/web/main.ts @@ -0,0 +1,22 @@ +// Copyright 2018 Red Hat, Inc +// +// Licensed under the Apache License, Version 2.0 (the "License"); you may +// not use this file except in compliance with the License. You may obtain +// a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, WITHOUT +// WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the +// License for the specific language governing permissions and limitations +// under the License. + +import 'zone.js' +import 'reflect-metadata' + +import { platformBrowserDynamic } from '@angular/platform-browser-dynamic' + +import { AppModule } from './app.module' + +platformBrowserDynamic().bootstrapModule(AppModule) diff --git a/web/navigation/navigation.component.html b/web/navigation/navigation.component.html new file mode 100644 index 000000000..b253c3a5d --- /dev/null +++ b/web/navigation/navigation.component.html @@ -0,0 +1,30 @@ +<!-- +Copyright 2017 Red Hat + +Licensed under the Apache License, Version 2.0 (the "License"); you may +not use this file except in compliance with the License. You may obtain +a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, WITHOUT +WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the +License for the specific language governing permissions and limitations +under the License. +--> +<nav class="navbar navbar-default"> + <div class="container-fluid"> + <div class="navbar-header"> + <a *ngIf="zuul.info && !zuul.info.whiteLabel" class="navbar-brand" [routerLink]="dashboardLink" target="_self">Zuul Dashboard</a> + <span *ngIf="zuul.info && zuul.info.whiteLabel" class="navbar-brand">Zuul Dashboard</span> + </div> + <ul class="nav navbar-nav" *ngIf="zuul.info && zuul.info.tenant !== ''"> + <li routerLinkActive="active" *ngFor="let route of zuul.navbarRoutes"> + <a [routerLink]="route.url"> + {{ route.title }} + </a> + </li> + </ul> + </div> +</nav> diff --git a/web/navigation/navigation.component.ts b/web/navigation/navigation.component.ts new file mode 100644 index 000000000..af5775158 --- /dev/null +++ b/web/navigation/navigation.component.ts @@ -0,0 +1,34 @@ +// Copyright 2018 Red Hat, Inc. +// +// Licensed under the Apache License, Version 2.0 (the "License"); you may +// not use this file except in compliance with the License. You may obtain +// a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, WITHOUT +// WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the +// License for the specific language governing permissions and limitations +// under the License. + +import { OnInit, Component } from '@angular/core' +import { Router, ResolveEnd } from '@angular/router' +import { Observable } from 'rxjs/Observable' +import { filter } from 'rxjs/operators' + +import ZuulService from '../zuul/zuul.service' + +@Component({ + selector: 'navigation', + template: require('./navigation.component.html') +}) +export default class NavigationComponent implements OnInit { + dashboardLink: string + + constructor(private router: Router, private zuul: ZuulService) {} + + async ngOnInit() { + this.dashboardLink = '/t/tenants.html' + } +} diff --git a/web/package.json b/web/package.json deleted file mode 100644 index a8c212e8d..000000000 --- a/web/package.json +++ /dev/null @@ -1,41 +0,0 @@ -{ - "name": "@zuul-ci/dashboard", - "version": "1.0.0", - "description": "Web Dashboard for Zuul", - "repository": "https://git.zuul-ci.org/zuul", - "author": "OpenStack Infra", - "license": "Apache-2.0", - "homepage": "/", - "private": true, - "dependencies": { - "axios": "^0.18.0", - "lodash": "^4.17.10", - "patternfly-react": "^2.13.1", - "prop-types": "^15.6.2", - "react": "^16.4.2", - "react-dom": "^16.4.2", - "react-redux": "^5.0.7", - "react-router": "^4.3.1", - "react-router-dom": "^4.3.1", - "react-scripts": "1.1.4", - "redux": "<4.0.0", - "redux-thunk": "^2.3.0", - "sockette": "^2.0.0" - }, - "devDependencies": { - "eslint": "^5.3.0", - "eslint-plugin-jest": "^21.21.0", - "eslint-plugin-react": "^7.11.1", - "eslint-plugin-standard": "^3.1.0", - "yarn": "^1.9.4" - }, - "scripts": { - "start:openstack": "REACT_APP_ZUUL_API='https://zuul.openstack.org/api/' react-scripts start", - "start:multi": "REACT_APP_ZUUL_API='https://softwarefactory-project.io/zuul/api/' react-scripts start", - "start": "react-scripts start", - "build": "react-scripts build", - "test": "react-scripts test --env=jsdom", - "eject": "react-scripts eject", - "lint": "eslint --ext .js --ext .jsx src" - } -} diff --git a/web/public/favicon.ico b/web/public/favicon.ico Binary files differdeleted file mode 100644 index 006c4b0ce..000000000 --- a/web/public/favicon.ico +++ /dev/null diff --git a/web/public/index.html b/web/public/index.html deleted file mode 100644 index b78be0e2a..000000000 --- a/web/public/index.html +++ /dev/null @@ -1,17 +0,0 @@ -<!DOCTYPE html> -<html lang="en" class="layout-pf layout-pf-fixed"> - <head> - <meta charset="utf-8"> - <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no"> - <meta name="theme-color" content="#000000"> - <link rel="manifest" href="%PUBLIC_URL%/manifest.json"> - <link rel="shortcut icon" href="%PUBLIC_URL%/favicon.ico"> - <title>Zuul</title> - </head> - <body> - <noscript> - You need to enable JavaScript to run this app. - </noscript> - <div id="root"></div> - </body> -</html> diff --git a/web/public/manifest.json b/web/public/manifest.json deleted file mode 100644 index d810a4fcb..000000000 --- a/web/public/manifest.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "short_name": "Zuul", - "name": "Zuul Dashboard", - "icons": [ - { - "src": "favicon.ico", - "sizes": "48x48 32x32", - "type": "image/x-icon" - } - ], - "start_url": "./index.html", - "display": "standalone", - "theme_color": "#000000", - "background_color": "#ffffff" -} diff --git a/web/src/App.jsx b/web/src/App.jsx deleted file mode 100644 index ad6f3993c..000000000 --- a/web/src/App.jsx +++ /dev/null @@ -1,162 +0,0 @@ -// Copyright 2018 Red Hat, Inc -// -// Licensed under the Apache License, Version 2.0 (the "License"); you may -// not use this file except in compliance with the License. You may obtain -// a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, WITHOUT -// WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the -// License for the specific language governing permissions and limitations -// under the License. - -// The App is the parent component of every pages. Each page content is -// rendered by the Route object according to the current location. - -import React from 'react' -import PropTypes from 'prop-types' -import { matchPath, withRouter } from 'react-router' -import { Link, Redirect, Route, Switch } from 'react-router-dom' -import { connect } from 'react-redux' -import { Masthead } from 'patternfly-react' - -import logo from './images/logo.png' -import { routes } from './routes' -import { setTenantAction } from './reducers' - - -class App extends React.Component { - static propTypes = { - info: PropTypes.object, - tenant: PropTypes.object, - location: PropTypes.object, - dispatch: PropTypes.func - } - - constructor() { - super() - this.menu = routes() - } - - renderMenu() { - const { location } = this.props - const activeItem = this.menu.find( - item => location.pathname === item.to - ) - return ( - <ul className='nav navbar-nav navbar-primary'> - {this.menu.filter(item => item.title).map(item => ( - <li key={item.to} className={item === activeItem ? 'active' : ''}> - <Link to={this.props.tenant.linkPrefix + item.to}> - {item.title} - </Link> - </li> - ))} - </ul> - ) - } - - renderContent = () => { - const { tenant } = this.props - const allRoutes = [] - this.menu - // Do not include '/tenants' route in white-label setup - .filter(item => - (tenant.whiteLabel && !item.globalRoute) || !tenant.whiteLabel) - .forEach((item, index) => { - allRoutes.push( - <Route - key={index} - path={item.globalRoute ? item.to : tenant.routePrefix + item.to} - component={item.component} - exact - /> - ) - }) - return ( - <Switch> - {allRoutes} - <Redirect from='*' to={tenant.defaultRoute} key='default-route' /> - </Switch> - ) - } - - componentDidUpdate() { - // This method is called when info property is updated - const { tenant, info } = this.props - if (info.capabilities) { - let tenantName, whiteLabel - - if (info.tenant) { - // White label - whiteLabel = true - tenantName = info.tenant - } else if (!info.tenant) { - // Multi tenant, look for tenant name in url - whiteLabel = false - - const match = matchPath( - this.props.location.pathname, {path: '/t/:tenant'}) - - if (match) { - tenantName = match.params.tenant - } else { - tenantName = '' - } - } - // Set tenant only if it changed to prevent DidUpdate loop - if (typeof tenant.name === 'undefined' || tenant.name !== tenantName) { - this.props.dispatch(setTenantAction(tenantName, whiteLabel)) - } - } - } - - render() { - const { tenant } = this.props - if (typeof tenant.name === 'undefined') { - return (<h2>Loading...</h2>) - } - - return ( - <React.Fragment> - <Masthead - iconImg={logo} - navToggle - thin - > - <div className='collapse navbar-collapse'> - {tenant.name && this.renderMenu()} - <ul className='nav navbar-nav navbar-utility'> - <li> - <a href='https://zuul-ci.org/docs' - rel='noopener noreferrer' target='_blank'> - Documentation - </a> - </li> - {tenant.name && ( - <li> - <Link to={tenant.defaultRoute}> - <strong>Tenant</strong> {tenant.name} - </Link> - </li> - )} - </ul> - </div> - </Masthead> - <div className='container-fluid container-cards-pf'> - {this.renderContent()} - </div> - </React.Fragment> - ) - } -} - -// This connect the info state from the store to the info property of the App. -export default withRouter(connect( - state => ({ - info: state.info, - tenant: state.tenant - }) -)(App)) diff --git a/web/src/App.test.jsx b/web/src/App.test.jsx deleted file mode 100644 index a5dc77df6..000000000 --- a/web/src/App.test.jsx +++ /dev/null @@ -1,102 +0,0 @@ -/* global Promise, expect, jest, it, location */ -// Copyright 2018 Red Hat, Inc -// -// Licensed under the Apache License, Version 2.0 (the "License"); you may -// not use this file except in compliance with the License. You may obtain -// a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, WITHOUT -// WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the -// License for the specific language governing permissions and limitations -// under the License. - -import React from 'react' -import ReactTestUtils from 'react-dom/test-utils' -import ReactDOM from 'react-dom' -import { Link, BrowserRouter as Router } from 'react-router-dom' -import { Provider } from 'react-redux' - -import { createZuulStore, fetchInfoAction } from './reducers' -import App from './App' -import TenantsPage from './pages/Tenants' -import StatusPage from './pages/Status' -import * as api from './api' - -api.fetchInfo = jest.fn() -api.fetchTenants = jest.fn() -api.fetchStatus = jest.fn() - - -it('renders without crashing', () => { - const div = document.createElement('div') - const store = createZuulStore() - ReactDOM.render(<Provider store={store}><Router><App /></Router></Provider>, - div) - ReactDOM.unmountComponentAtNode(div) -}) - -it('renders multi tenant', () => { - api.fetchInfo.mockImplementation( - () => Promise.resolve({data: { - info: {capabilities: {}} - }}) - ) - api.fetchTenants.mockImplementation( - () => Promise.resolve({data: [{name: 'openstack'}]}) - ) - const store = createZuulStore() - const application = ReactTestUtils.renderIntoDocument( - <Provider store={store}><Router><App /></Router></Provider> - ) - store.dispatch(fetchInfoAction()).then(() => { - // Link should be tenant scoped - const topMenuLinks = ReactTestUtils.scryRenderedComponentsWithType( - application, Link) - expect(topMenuLinks[0].props.to).toEqual('/t/openstack/status') - expect(topMenuLinks[1].props.to).toEqual('/t/openstack/jobs') - // Location should be /tenants - expect(location.pathname).toEqual('/tenants') - // Info should tell multi tenants - expect(store.getState().info.tenant).toEqual(undefined) - // Tenants list has been rendered - expect(ReactTestUtils.findRenderedComponentWithType( - application, TenantsPage)).not.toEqual(null) - // Fetch tenants has been called - expect(api.fetchTenants).toBeCalled() - }) -}) - -it('renders single tenant', () => { - api.fetchInfo.mockImplementation( - () => Promise.resolve({data: { - info: {capabilities: {}, tenant: 'openstack'} - }}) - ) - api.fetchStatus.mockImplementation( - () => Promise.resolve({data: {pipelines: []}}) - ) - const store = createZuulStore() - const application = ReactTestUtils.renderIntoDocument( - <Provider store={store}><Router><App /></Router></Provider> - ) - - store.dispatch(fetchInfoAction()).then(() => { - // Link should be white-label scoped - const topMenuLinks = ReactTestUtils.scryRenderedComponentsWithType( - application, Link) - expect(topMenuLinks[0].props.to).toEqual('/status') - expect(topMenuLinks[1].props.to).toEqual('/jobs') - // Location should be /status - expect(location.pathname).toEqual('/status') - // Info should tell white label tenant openstack - expect(store.getState().info.tenant).toEqual('openstack') - // Status page has been rendered - expect(ReactTestUtils.findRenderedComponentWithType( - application, StatusPage)).not.toEqual(null) - // Fetch status has been called - expect(api.fetchStatus).toBeCalled() - }) -}) diff --git a/web/src/api.js b/web/src/api.js deleted file mode 100644 index 9af4adb8e..000000000 --- a/web/src/api.js +++ /dev/null @@ -1,133 +0,0 @@ -/* global process, window */ -// Copyright 2018 Red Hat, Inc -// -// Licensed under the Apache License, Version 2.0 (the "License"); you may -// not use this file except in compliance with the License. You may obtain -// a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, WITHOUT -// WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the -// License for the specific language governing permissions and limitations -// under the License. - -import Axios from 'axios' - -function getHomepageUrl (url) { - // - // Discover serving location from href. - // - // This is only needed for sub-directory serving. - // Serving the application from '/' may simply default to '/' - // - // Note that this is not enough for sub-directory serving, - // The static files location also needs to be adapted with the 'homepage' - // settings of the package.json file. - // - // This homepage url is used for the Router and Link resolution logic - // - let baseUrl - if (url) { - baseUrl = url - } else { - baseUrl = window.location.href - } - // Get dirname of the current url - baseUrl = baseUrl.replace(/\\/g, '/').replace(/\/[^/]*$/, '/') - - // Remove any query strings - if (baseUrl.includes('?')) { - baseUrl = baseUrl.slice(0, baseUrl.lastIndexOf('?')) - } - // Remove any hash anchor - if (baseUrl.includes('/#')) { - baseUrl = baseUrl.slice(0, baseUrl.lastIndexOf('/#') + 1) - } - - // Remove known sub-path - const subDir = [ - '/build/', - '/job/', - '/project/', - '/stream/', - ] - subDir.forEach(path => { - if (baseUrl.includes(path)) { - baseUrl = baseUrl.slice(0, baseUrl.lastIndexOf(path) + 1) - } - }) - - // Remove tenant scope - if (baseUrl.includes('/t/')) { - baseUrl = baseUrl.slice(0, baseUrl.lastIndexOf('/t/') + 1) - } - if (! baseUrl.endsWith('/')) { - baseUrl = baseUrl + '/' - } - // console.log('Homepage url is ', baseUrl) - return baseUrl -} - -function getZuulUrl () { - // Return the zuul root api absolute url - const ZUUL_API = process.env.REACT_APP_ZUUL_API - let apiUrl - - if (ZUUL_API) { - // Api url set at build time, use it - apiUrl = ZUUL_API - } else { - // Api url is relative to homepage path - apiUrl = getHomepageUrl () + 'api/' - } - if (! apiUrl.endsWith('/')) { - apiUrl = apiUrl + '/' - } - if (! apiUrl.endsWith('/api/')) { - apiUrl = apiUrl + 'api/' - } - // console.log('Api url is ', apiUrl) - return apiUrl -} -const apiUrl = getZuulUrl() - - -function getStreamUrl (apiPrefix) { - const streamUrl = (apiUrl + apiPrefix) - .replace(/(http)(s)?:\/\//, 'ws$2://') + 'console-stream' - // console.log('Stream url is ', streamUrl) - return streamUrl -} - -// Direct APIs -function fetchInfo () { - return Axios.get(apiUrl + 'info') -} -function fetchTenants () { - return Axios.get(apiUrl + 'tenants') -} -function fetchStatus (apiPrefix) { - return Axios.get(apiUrl + apiPrefix + 'status') -} -function fetchBuilds (apiPrefix, queryString) { - let path = 'builds' - if (queryString) { - path += '?' + queryString.slice(1) - } - return Axios.get(apiUrl + apiPrefix + path) -} -function fetchJobs (apiPrefix) { - return Axios.get(apiUrl + apiPrefix + 'jobs') -} - -export { - getHomepageUrl, - getStreamUrl, - fetchStatus, - fetchBuilds, - fetchJobs, - fetchTenants, - fetchInfo -} diff --git a/web/src/containers/TableFilters.jsx b/web/src/containers/TableFilters.jsx deleted file mode 100644 index a2a23dc63..000000000 --- a/web/src/containers/TableFilters.jsx +++ /dev/null @@ -1,237 +0,0 @@ -/* global URLSearchParams */ -// Copyright 2018 Red Hat, Inc -// -// Licensed under the Apache License, Version 2.0 (the "License"); you may -// not use this file except in compliance with the License. You may obtain -// a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, WITHOUT -// WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the -// License for the specific language governing permissions and limitations -// under the License. - -// Boiler plate code to manage table filtering - -import * as React from 'react' -import PropTypes from 'prop-types' -import { Button, Filter, FormControl, Toolbar } from 'patternfly-react' - - -class TableFilters extends React.Component { - static propTypes = { - location: PropTypes.object - } - - getFilterFromUrl = () => { - const urlParams = new URLSearchParams(this.props.location.search) - let activeFilters = [] - this.filterTypes.forEach(item => { - urlParams.getAll(item.id).forEach(param => { - activeFilters.push({ - label: item.title + ': ' + param, - key: item.id, - value: param}) - }) - }) - this.setState({activeFilters: activeFilters}) - return activeFilters - } - - updateUrl (activeFilters) { - let path = this.props.location.pathname - if (activeFilters.length > 0) { - path += '?' - activeFilters.forEach((item, idx) => { - if (idx > 0) { - path += '&' - } - path += ( - encodeURIComponent(item.key) - + '=' + - encodeURIComponent(item.value) - ) - }) - } - window.history.pushState({path: path}, '', path) - } - - filterAdded = (field, value) => { - let filterText = '' - if (field.title) { - filterText = field.title - } else { - filterText = field - } - filterText += ': ' - - if (value.filterCategory) { - filterText += - (value.filterCategory.title || value.filterCategory) + - '-' + - (value.filterValue.title || value.filterValue) - } else if (value.title) { - filterText += value.title - } else { - filterText += value - } - - let activeFilters = [...this.state.activeFilters, { - label: filterText, - key: field.id, - value: value - }] - this.setState({ activeFilters: activeFilters }) - this.updateData(activeFilters) - this.updateUrl(activeFilters) - } - - selectFilterType = filterType => { - const { currentFilterType } = this.state - if (currentFilterType !== filterType) { - this.setState(prevState => { - return { - currentValue: '', - currentFilterType: filterType, - filterCategory: - filterType.filterType === 'complex-select' - ? undefined - : prevState.filterCategory, - categoryValue: - filterType.filterType === 'complex-select' - ? '' - : prevState.categoryValue - } - }) - } - } - - filterValueSelected = filterValue => { - const { currentFilterType, currentValue } = this.state - - if (filterValue !== currentValue) { - this.setState({ currentValue: filterValue }) - if (filterValue) { - this.filterAdded(currentFilterType, filterValue) - } - } - } - - filterCategorySelected = category => { - const { filterCategory } = this.state - if (filterCategory !== category) { - this.setState({ filterCategory: category, currentValue: '' }) - } - } - - categoryValueSelected = value => { - const { currentValue, currentFilterType, filterCategory } = this.state - - if (filterCategory && currentValue !== value) { - this.setState({ currentValue: value }) - if (value) { - let filterValue = { - filterCategory: filterCategory, - filterValue: value - } - this.filterAdded(currentFilterType, filterValue) - } - } - } - - updateCurrentValue = event => { - this.setState({ currentValue: event.target.value }) - } - - onValueKeyPress = keyEvent => { - const { currentValue, currentFilterType } = this.state - - if (keyEvent.key === 'Enter' && currentValue && currentValue.length > 0) { - this.setState({ currentValue: '' }) - this.filterAdded(currentFilterType, currentValue) - keyEvent.stopPropagation() - keyEvent.preventDefault() - } - } - - removeFilter = filter => { - const { activeFilters } = this.state - - let index = activeFilters.indexOf(filter) - if (index > -1) { - let updated = [ - ...activeFilters.slice(0, index), - ...activeFilters.slice(index + 1) - ] - this.setState({ activeFilters: updated }) - this.updateData(updated) - this.updateUrl(updated) - } - } - - clearFilters = () => { - this.setState({ activeFilters: [] }) - this.updateData() - this.updateUrl([]) - } - - renderFilterInput() { - const { currentFilterType, currentValue } = this.state - if (!currentFilterType) { - return null - } - return ( - <FormControl - type={currentFilterType.filterType} - value={currentValue} - placeholder={currentFilterType.placeholder} - onChange={e => this.updateCurrentValue(e)} - onKeyPress={e => this.onValueKeyPress(e)} - /> - ) - } - - renderFilter = () => { - const { currentFilterType, activeFilters } = this.state - return ( - <React.Fragment> - <div style={{ width: 300 }}> - <Filter> - <Filter.TypeSelector - filterTypes={this.filterTypes} - currentFilterType={currentFilterType} - onFilterTypeSelected={this.selectFilterType} - /> - {this.renderFilterInput()} - </Filter> - </div> - {activeFilters && activeFilters.length > 0 && ( - <Toolbar.Results> - <Filter.ActiveLabel>{'Active Filters:'}</Filter.ActiveLabel> - <Filter.List> - {activeFilters.map((item, index) => { - return ( - <Filter.Item - key={index} - onRemove={this.removeFilter} - filterData={item} - > - {item.label} - </Filter.Item> - ) - })} - </Filter.List> - <Button onClick={e => { - e.preventDefault() - this.clearFilters() - }}>Clear All Filters</Button> - </Toolbar.Results> - )} - </React.Fragment> - ) - } -} - -export default TableFilters diff --git a/web/src/containers/status/Change.jsx b/web/src/containers/status/Change.jsx deleted file mode 100644 index ddd82a9ae..000000000 --- a/web/src/containers/status/Change.jsx +++ /dev/null @@ -1,99 +0,0 @@ -// Copyright 2018 Red Hat, Inc -// -// Licensed under the Apache License, Version 2.0 (the "License"); you may -// not use this file except in compliance with the License. You may obtain -// a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, WITHOUT -// WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the -// License for the specific language governing permissions and limitations -// under the License. - -import * as React from 'react' -import PropTypes from 'prop-types' - -import LineAngleImage from '../../images/line-angle.png' -import LineTImage from '../../images/line-t.png' -import ChangePanel from './ChangePanel' - - -class Change extends React.Component { - static propTypes = { - change: PropTypes.object.isRequired, - queue: PropTypes.object.isRequired, - expanded: PropTypes.bool.isRequired - } - - renderStatusIcon (change) { - let iconGlyph = 'pficon pficon-ok' - let iconTitle = 'Succeeding' - if (change.active !== true) { - iconGlyph = 'pficon pficon-pending' - iconTitle = 'Waiting until closer to head of queue to' + - ' start jobs' - } else if (change.live !== true) { - iconGlyph = 'pficon pficon-info' - iconTitle = 'Dependent change required for testing' - } else if (change.failing_reasons && - change.failing_reasons.length > 0) { - let reason = change.failing_reasons.join(', ') - iconTitle = 'Failing because ' + reason - if (reason.match(/merge conflict/)) { - iconGlyph = 'pficon pficon-error-circle-o zuul-build-merge-conflict' - } else { - iconGlyph = 'pficon pficon-error-circle-o' - } - } - return ( - <span className={'zuul-build-status ' + iconGlyph} - title={iconTitle} /> - ) - } - - renderLineImg (change, i) { - let image = LineTImage - if (change._tree_branches.indexOf(i) === change._tree_branches.length - 1) { - // Angle line - image = LineAngleImage - } - return <img alt="Line" src={image} style={{verticalAlign: 'baseline'}} /> - } - - render () { - const { change, queue, expanded } = this.props - let row = [] - let i - for (i = 0; i < queue._tree_columns; i++) { - let className = '' - if (i < change._tree.length && change._tree[i] !== null) { - className = ' zuul-change-row-line' - } - row.push( - <td key={i} className={'zuul-change-row' + className}> - {i === change._tree_index ? this.renderStatusIcon(change) : ''} - {change._tree_branches.indexOf(i) !== -1 ? ( - this.renderLineImg(change, i)) : ''} - </td>) - } - let changeWidth = 360 - 16 * queue._tree_columns - row.push( - <td key={i + 1} - className="zuul-change-cell" - style={{width: changeWidth + 'px'}}> - <ChangePanel change={change} globalExpanded={expanded} /> - </td> - ) - return ( - <table className="zuul-change-box" style={{boxSizing: 'content-box'}}> - <tbody> - <tr>{row}</tr> - </tbody> - </table> - ) - } -} - -export default Change diff --git a/web/src/containers/status/ChangePanel.jsx b/web/src/containers/status/ChangePanel.jsx deleted file mode 100644 index cb6cb5081..000000000 --- a/web/src/containers/status/ChangePanel.jsx +++ /dev/null @@ -1,317 +0,0 @@ -// Copyright 2018 Red Hat, Inc -// -// Licensed under the Apache License, Version 2.0 (the "License"); you may -// not use this file except in compliance with the License. You may obtain -// a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, WITHOUT -// WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the -// License for the specific language governing permissions and limitations -// under the License. - -import * as React from 'react' -import PropTypes from 'prop-types' -import { connect } from 'react-redux' -import { Link } from 'react-router-dom' - - -class ChangePanel extends React.Component { - static propTypes = { - globalExpanded: PropTypes.bool.isRequired, - change: PropTypes.object.isRequired, - tenant: PropTypes.object - } - - constructor () { - super() - this.state = { - expanded: false - } - this.onClick = this.onClick.bind(this) - this.clicked = false - } - - onClick () { - let expanded = this.state.expanded - if (!this.clicked) { - expanded = this.props.globalExpanded - } - this.clicked = true - this.setState({ expanded: !expanded }) - } - - time (ms, words) { - if (typeof (words) === 'undefined') { - words = false - } - let seconds = (+ms) / 1000 - let minutes = Math.floor(seconds / 60) - let hours = Math.floor(minutes / 60) - seconds = Math.floor(seconds % 60) - minutes = Math.floor(minutes % 60) - let r = '' - if (words) { - if (hours) { - r += hours - r += ' hr ' - } - r += minutes + ' min' - } else { - if (hours < 10) { - r += '0' - } - r += hours + ':' - if (minutes < 10) { - r += '0' - } - r += minutes + ':' - if (seconds < 10) { - r += '0' - } - r += seconds - } - return r - } - - enqueueTime (ms) { - // Special format case for enqueue time to add style - let hours = 60 * 60 * 1000 - let now = Date.now() - let delta = now - ms - let status = 'text-success' - let text = this.time(delta, true) - if (delta > (4 * hours)) { - status = 'text-danger' - } else if (delta > (2 * hours)) { - status = 'text-warning' - } - return <span className={status}>{text}</span> - } - - renderChangeLink (change) { - let changeId = change.id || 'NA' - let changeTitle = changeId - let changeText = '' - if (change.url !== null) { - let githubId = changeId.match(/^([0-9]+),([0-9a-f]{40})$/) - if (githubId) { - changeTitle = githubId - changeText = '#' + githubId[1] - } else if (/^[0-9a-f]{40}$/.test(changeId)) { - changeText = changeId.slice(0, 7) - } - } else if (changeId.length === 40) { - changeText = changeId.slice(0, 7) - } - return ( - <small> - <a href={change.url}> - {changeText !== '' ? ( - <abbr title={changeTitle}>{changeText}</abbr>) : changeTitle} - </a> - </small>) - } - - renderProgressBar (change) { - let jobPercent = Math.floor(100 / change.jobs.length) - return ( - <div className='progress zuul-change-total-result'> - {change.jobs.map((job, idx) => { - let result = job.result ? job.result.toLowerCase() : null - if (result === null) { - result = job.url ? 'in progress' : 'queued' - } - if (result !== 'queued') { - let className = '' - switch (result) { - case 'success': - className = ' progress-bar-success' - break - case 'lost': - case 'failure': - className = ' progress-bar-danger' - break - case 'unstable': - className = ' progress-bar-warning' - break - case 'in progress': - case 'queued': - break - default: - break - } - return <div className={'progress-bar' + className} - key={idx} - title={job.name} - style={{width: jobPercent + '%'}}/> - } else { - return '' - } - })} - </div> - ) - } - - renderTimer (change) { - let remainingTime - if (change.remaining_time === null) { - remainingTime = 'unknown' - } else { - remainingTime = this.time(change.remaining_time, true) - } - return ( - <React.Fragment> - <small title='Remaining Time' className='time'> - {remainingTime} - </small> - <br /> - <small title='Elapsed Time' className='time'> - {this.enqueueTime(change.enqueue_time)} - </small> - </React.Fragment> - ) - } - - renderJobProgressBar (elapsedTime, remainingTime) { - let progressPercent = 100 * (elapsedTime / (elapsedTime + - remainingTime)) - return ( - <div className='progress zuul-job-result'> - <div className='progress-bar' - role='progressbar' - aria-valuenow={progressPercent} - aria-valuemin={0} - aria-valuemax={100} - style={{'width': progressPercent + '%'}} - /> - </div> - ) - } - - renderJobStatusLabel (result) { - let className - switch (result) { - case 'success': - className = 'label-success' - break - case 'failure': - className = 'label-danger' - break - case 'unstable': - className = 'label-warning' - break - case 'skipped': - className = 'label-info' - break - // 'in progress' 'queued' 'lost' 'aborted' ... - default: - className = 'label-default' - } - - return ( - <span className={'zuul-job-result label ' + className}>{result}</span> - ) - } - - renderJob (job) { - const { tenant } = this.props - let name = '' - if (job.result !== null) { - name = <a className='zuul-job-name' href={job.report_url}>{job.name}</a> - } else if (job.url !== null) { - let url = job.url - if (job.url.match('stream.html')) { - const buildUuid = job.url.split('?')[1].split('&')[0].split('=')[1] - const to = ( - tenant.linkPrefix + '/stream/' + buildUuid + '?logfile=console.log' - ) - name = <Link to={to}>{job.name}</Link> - } else { - name = <a className='zuul-job-name' href={url}>{job.name}</a> - } - } else { - name = <span className='zuul-job-name'>{job.name}</span> - } - let resultBar - let result = job.result ? job.result.toLowerCase() : null - if (result === null) { - if (job.url === null) { - result = 'queued' - } else if (job.paused !== null && job.paused) { - result = 'paused' - } else { - result = 'in progress' - } - } - if (result === 'in progress') { - resultBar = this.renderJobProgressBar( - job.elapsed_time, job.remaining_time) - } else { - resultBar = this.renderJobStatusLabel(result) - } - - return ( - <span> - {name} - {resultBar} - {job.voting === false ? ( - <small className='zuul-non-voting-desc'> (non-voting)</small>) : ''} - <div style={{clear: 'both'}} /> - </span>) - } - - renderJobList (jobs) { - return ( - <ul className='list-group zuul-patchset-body'> - {jobs.map((job, idx) => ( - <li key={idx} className='list-group-item zuul-change-job'> - {this.renderJob(job)} - </li> - ))} - </ul>) - } - - render () { - const { expanded } = this.state - const { change, globalExpanded } = this.props - let expand = globalExpanded - if (this.clicked) { - expand = expanded - } - const header = ( - <div className='panel panel-default zuul-change' onClick={this.onClick}> - <div className='panel-heading zuul-patchset-header'> - <div className='row'> - <div className='col-xs-8'> - <span className='change_project'>{change.project}</span> - <div className='row'> - <div className='col-xs-4'> - {this.renderChangeLink(change)} - </div> - <div className='col-xs-8'> - {this.renderProgressBar(change)} - </div> - </div> - </div> - {change.live === true ? ( - <div className='col-xs-4 text-right'> - {this.renderTimer(change)} - </div> - ) : ''} - </div> - </div> - {expand ? this.renderJobList(change.jobs) : ''} - </div> - ) - return ( - <React.Fragment> - {header} - </React.Fragment> - ) - } -} - -export default connect(state => ({tenant: state.tenant}))(ChangePanel) diff --git a/web/src/containers/status/ChangePanel.test.jsx b/web/src/containers/status/ChangePanel.test.jsx deleted file mode 100644 index 719cf810e..000000000 --- a/web/src/containers/status/ChangePanel.test.jsx +++ /dev/null @@ -1,64 +0,0 @@ -/* global expect, jest, it */ -// Copyright 2018 Red Hat, Inc -// -// Licensed under the Apache License, Version 2.0 (the "License"); you may -// not use this file except in compliance with the License. You may obtain -// a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, WITHOUT -// WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the -// License for the specific language governing permissions and limitations -// under the License. - -import React from 'react' -import ReactTestUtils from 'react-dom/test-utils' -import { Link, BrowserRouter as Router } from 'react-router-dom' -import { Provider } from 'react-redux' - -import { createZuulStore, setTenantAction } from '../../reducers' -import ChangePanel from './ChangePanel' - - -const fakeChange = { - project: 'org-project', - jobs: [{ - name: 'job-name', - url: 'stream.html?build=42', - result: null - }] -} - -it('change panel render multi tenant links', () => { - const store = createZuulStore() - store.dispatch(setTenantAction('tenant-one', false)) - const application = ReactTestUtils.renderIntoDocument( - <Provider store={store}> - <Router> - <ChangePanel change={fakeChange} globalExpanded={true} /> - </Router> - </Provider> - ) - const jobLink = ReactTestUtils.findRenderedComponentWithType( - application, Link) - expect(jobLink.props.to).toEqual( - '/t/tenant-one/stream/42?logfile=console.log') -}) - -it('change panel render white-label tenant links', () => { - const store = createZuulStore() - store.dispatch(setTenantAction('tenant-one', true)) - const application = ReactTestUtils.renderIntoDocument( - <Provider store={store}> - <Router> - <ChangePanel change={fakeChange} globalExpanded={true} /> - </Router> - </Provider> - ) - const jobLink = ReactTestUtils.findRenderedComponentWithType( - application, Link) - expect(jobLink.props.to).toEqual( - '/stream/42?logfile=console.log') -}) diff --git a/web/src/containers/status/ChangeQueue.jsx b/web/src/containers/status/ChangeQueue.jsx deleted file mode 100644 index 97218b76a..000000000 --- a/web/src/containers/status/ChangeQueue.jsx +++ /dev/null @@ -1,54 +0,0 @@ -// Copyright 2018 Red Hat, Inc -// -// Licensed under the Apache License, Version 2.0 (the "License"); you may -// not use this file except in compliance with the License. You may obtain -// a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, WITHOUT -// WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the -// License for the specific language governing permissions and limitations -// under the License. - -import * as React from 'react' -import PropTypes from 'prop-types' - -import Change from './Change' - - -class ChangeQueue extends React.Component { - static propTypes = { - pipeline: PropTypes.string.isRequired, - queue: PropTypes.object.isRequired, - expanded: PropTypes.bool.isRequired - } - - render () { - const { queue, pipeline, expanded } = this.props - let shortName = queue.name - if (shortName.length > 32) { - shortName = shortName.substr(0, 32) + '...' - } - let changesList = [] - queue.heads.forEach((changes, changeIdx) => { - changes.forEach((change, idx) => { - changesList.push( - <Change - change={change} - queue={queue} - expanded={expanded} - key={changeIdx.toString() + idx} - />) - }) - }) - return ( - <div className="change-queue" data-zuul-pipeline={pipeline}> - <p>Queue: <abbr title={queue.name}>{shortName}</abbr></p> - {changesList} - </div>) - } -} - -export default ChangeQueue diff --git a/web/src/containers/status/Pipeline.jsx b/web/src/containers/status/Pipeline.jsx deleted file mode 100644 index f3705da64..000000000 --- a/web/src/containers/status/Pipeline.jsx +++ /dev/null @@ -1,136 +0,0 @@ -// Copyright 2018 Red Hat, Inc -// -// Licensed under the Apache License, Version 2.0 (the "License"); you may -// not use this file except in compliance with the License. You may obtain -// a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, WITHOUT -// WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the -// License for the specific language governing permissions and limitations -// under the License. - -import * as React from 'react' -import PropTypes from 'prop-types' -import { Badge } from 'patternfly-react' - -import ChangeQueue from './ChangeQueue' - - -class Pipeline extends React.Component { - static propTypes = { - expanded: PropTypes.bool.isRequired, - pipeline: PropTypes.object.isRequired, - filter: PropTypes.string - } - - createTree (pipeline) { - let count = 0 - let pipelineMaxTreeColumns = 1 - pipeline.change_queues.forEach(changeQueue => { - let tree = [] - let maxTreeColumns = 1 - let changes = [] - let lastTreeLength = 0 - changeQueue.heads.forEach(head => { - head.forEach((change, changeIndex) => { - changes[change.id] = change - change._tree_position = changeIndex - }) - }) - changeQueue.heads.forEach(head => { - head.forEach(change => { - if (change.live === true) { - count += 1 - } - let idx = tree.indexOf(change.id) - if (idx > -1) { - change._tree_index = idx - // remove... - tree[idx] = null - while (tree[tree.length - 1] === null) { - tree.pop() - } - } else { - change._tree_index = 0 - } - change._tree_branches = [] - change._tree = [] - if (typeof (change.items_behind) === 'undefined') { - change.items_behind = [] - } - change.items_behind.sort(function (a, b) { - return (changes[b]._tree_position - changes[a]._tree_position) - }) - change.items_behind.forEach(id => { - tree.push(id) - if (tree.length > lastTreeLength && lastTreeLength > 0) { - change._tree_branches.push(tree.length - 1) - } - }) - if (tree.length > maxTreeColumns) { - maxTreeColumns = tree.length - } - if (tree.length > pipelineMaxTreeColumns) { - pipelineMaxTreeColumns = tree.length - } - change._tree = tree.slice(0) // make a copy - lastTreeLength = tree.length - }) - }) - changeQueue._tree_columns = maxTreeColumns - }) - pipeline._tree_columns = pipelineMaxTreeColumns - return count - } - - filterQueue(queue, filter) { - let found = false - queue.heads.forEach(changes => { - changes.forEach(change => { - if ((change.project && change.project.indexOf(filter) !== -1) || - (change.id && change.id.indexOf(filter) !== -1)) { - found = true - return - } - }) - if (found) { - return - } - }) - return found - } - - render () { - const { pipeline, filter, expanded } = this.props - const count = this.createTree(pipeline) - return ( - <div className="zuul-pipeline col-md-4"> - <div className="zuul-pipeline-header"> - <h3>{pipeline.name} <Badge>{count}</Badge></h3> - {pipeline.description ? ( - <small> - <p>{pipeline.description.split(/\r?\n\r?\n/)}</p> - </small>) : ''} - </div> - {pipeline.change_queues.filter(item => item.heads.length > 0) - .filter(item => (!filter || ( - pipeline.name.indexOf(filter) !== -1 || - this.filterQueue(item, filter) - ))) - .map((changeQueue, idx) => ( - <ChangeQueue - queue={changeQueue} - expanded={expanded} - pipeline={pipeline.name} - key={idx} - /> - ))} - </div> - ) - } -} - -export default Pipeline diff --git a/web/src/images/logo.png b/web/src/images/logo.png Binary files differdeleted file mode 100644 index 640c38604..000000000 --- a/web/src/images/logo.png +++ /dev/null diff --git a/web/src/images/logo.svg b/web/src/images/logo.svg deleted file mode 100644 index e270d664b..000000000 --- a/web/src/images/logo.svg +++ /dev/null @@ -1,83 +0,0 @@ -<?xml version="1.0" encoding="UTF-8" standalone="no"?> -<!-- Generator: Adobe Illustrator 22.0.1, SVG Export Plug-In . SVG Version: 6.00 Build 0) --> - -<svg - xmlns:dc="http://purl.org/dc/elements/1.1/" - xmlns:cc="http://creativecommons.org/ns#" - xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" - xmlns:svg="http://www.w3.org/2000/svg" - xmlns="http://www.w3.org/2000/svg" - xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" - xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" - version="1.1" - id="Layer_1" - x="0px" - y="0px" - viewBox="0 0 144 144" - style="enable-background:new 0 0 144 144;" - xml:space="preserve" - inkscape:version="0.91 r13725" - sodipodi:docname="logo.svg" - inkscape:export-filename="/data/logo.png" - inkscape:export-xdpi="8.7290258" - inkscape:export-ydpi="8.7290258"><metadata - id="metadata21"><rdf:RDF><cc:Work - rdf:about=""><dc:format>image/svg+xml</dc:format><dc:type - rdf:resource="http://purl.org/dc/dcmitype/StillImage" /><dc:title></dc:title></cc:Work></rdf:RDF></metadata><defs - id="defs19" /><sodipodi:namedview - pagecolor="#ffffff" - bordercolor="#666666" - borderopacity="1" - objecttolerance="10" - gridtolerance="10" - guidetolerance="10" - inkscape:pageopacity="0" - inkscape:pageshadow="2" - inkscape:window-width="1220" - inkscape:window-height="740" - id="namedview17" - showgrid="false" - showborder="false" - inkscape:zoom="0.81944444" - inkscape:cx="250.26215" - inkscape:cy="186.8512" - inkscape:window-x="252" - inkscape:window-y="337" - inkscape:window-maximized="0" - inkscape:current-layer="Layer_1"><inkscape:grid - type="xygrid" - id="grid3360" /></sodipodi:namedview><style - type="text/css" - id="style3"> - .st0{fill:#071D49;} -</style><path - style="fill:#e6e6e6" - inkscape:connector-curvature="0" - id="path7" - d="m 12.8,102.6 118.5,0 -25.3,-43.8 0,-15 7,-9.2 -21,0 L 72,0 52,34.7 l -20.9,0 7,9.2 0,15 -25.3,43.7 z m 25.2,-6 -14.9,0 14.9,-25.8 0,25.8 z m 10.4,0 -4.4,0 0,-35.3 4.3,0 0,35.3 z m 0,-41.3 -4.4,0 0,-4.3 4.3,0 0,4.3 z m 20.6,41.3 -14.7,0 0,-35.3 14.7,0 0,35.3 z m 20.7,0 -14.7,0 0,-35.3 14.7,0 0,35.3 z m 0,-41.3 -35.4,0 0,-4.3 35.3,0 0,4.3 z m 10.3,41.3 -4.3,0 0,-35.3 4.3,0 0,35.3 z m 0,-41.3 -4.3,0 0,-4.3 4.3,0 0,4.3 z m 6,15.5 14.9,25.8 -14.9,0 0,-25.8 z M 72,12 85.1,34.7 58.9,34.7 72,12 Z m 28.9,28.7 -0.9,1.2 0,3.1 -56,0 0,-3.2 -0.9,-1.2 57.8,0 z" - class="st0" - inkscape:export-xdpi="14.038373" - inkscape:export-ydpi="14.038373" /><g - id="g3354" - transform="matrix(3,0,0,3,155.07357,-334.75)" - style="fill:#e6e6e6" - inkscape:export-xdpi="14.038373" - inkscape:export-ydpi="14.038373"><polygon - class="st0" - points="138.2,137.3 125.1,137.3 125.1,114.6 119.1,118.1 119.1,137.3 119.1,139.6 119.1,143.3 141.6,143.3 " - id="polygon9" - style="fill:#e6e6e6" /><path - class="st0" - d="m 99.1,131.5 0,0 0,0 c 0,3.6 -2.9,6.5 -6.5,6.5 -3.6,0 -6.5,-2.9 -6.5,-6.5 l 0,0 0,0 0,-16.9 -6,3.5 0,13.5 0,0 c 0,6.9 5.6,12.5 12.5,12.5 6.9,0 12.5,-5.6 12.5,-12.5 l 0,0 0,-16.9 -6,3.5 0,13.3 z" - id="path11" - inkscape:connector-curvature="0" - style="fill:#e6e6e6" /><path - class="st0" - d="m 60.2,131.5 0,0 0,0 c 0,3.6 -2.9,6.5 -6.5,6.5 -3.6,0 -6.5,-2.9 -6.5,-6.5 l 0,0 0,0 0,-16.9 -6,3.5 0,13.5 0,0 c 0,6.9 5.6,12.5 12.5,12.5 6.9,0 12.5,-5.6 12.5,-12.5 l 0,0 0,-16.9 -6,3.5 0,13.3 z" - id="path13" - inkscape:connector-curvature="0" - style="fill:#e6e6e6" /><polygon - class="st0" - points="2.4,143.3 23.8,143.3 27.3,137.3 12.7,137.3 25.8,114.6 25.4,114.6 18.9,114.6 5.8,114.6 2.4,120.6 15.5,120.6 " - id="polygon15" - style="fill:#e6e6e6" /></g></svg>
\ No newline at end of file diff --git a/web/src/index.css b/web/src/index.css deleted file mode 100644 index 4c030195b..000000000 --- a/web/src/index.css +++ /dev/null @@ -1,122 +0,0 @@ -body { - margin: 0; - padding: 0; - font-family: sans-serif; -} -a.refresh { - cursor: pointer; - border-bottom-style: none; - text-decoration: none; -} - -/* Status page */ -.zuul-change { - margin-bottom: 10px; -} - -.zuul-change-id { - float: right; -} - -.zuul-job-result { - float: right; - width: 70px; - height: 15px; - margin: 2px 0 0 0; -} - -.zuul-change-total-result { - height: 10px; - width: 100px; - margin: 0; - display: inline-block; - vertical-align: middle; -} - -.zuul-spinner, -.zuul-spinner:hover { - opacity: 0; - transition: opacity 0.5s ease-out; - cursor: default; - pointer-events: none; -} - -.zuul-spinner-on, -.zuul-spinner-on:hover { - opacity: 1; - transition-duration: 0.2s; - cursor: progress; -} - -.zuul-change-cell { - padding-left: 5px; -} - -.zuul-change-job { - padding: 2px 8px; -} - -.zuul-job-name { - font-size: small; -} - -.zuul-non-voting-desc { - font-size: smaller; -} - -.zuul-patchset-header { - font-size: small; - padding: 8px 12px; -} - -.form-inline > .form-group { - padding-right: 5px; -} - -.zuul-change-row { - height: 100%; - padding: 0 0 10px 0; - margin: 0; - width: 16px; - min-width: 16px; - overflow: hidden; - vertical-align: top; -} - -.zuul-build-status { - background: white; - font-size: 16px; -} - -.zuul-build-merge-conflict:before { - color: black; -} - -.zuul-change-row-line { - background-image: url('images/line.png'); - background-repeat: 'repeat-y'; -} - -/* Stream page */ -#zuulstreamoverlay { - float: right; - position: fixed; - top: 70px; - right: 5px; - background-color: white; - padding: 2px 0px 0px 2px; - color: black; -} - -pre#zuulstreamcontent { - font-family: monospace; - white-space: pre; - margin: 0px 10px; - background-color: black; - color: lightgrey; - border: none; -} -p.zuulstreamline { - margin: 0px 0px; - line-height: 1.4; -} diff --git a/web/src/index.js b/web/src/index.js deleted file mode 100644 index fb42857b4..000000000 --- a/web/src/index.js +++ /dev/null @@ -1,40 +0,0 @@ -// Copyright 2018 Red Hat, Inc -// -// Licensed under the Apache License, Version 2.0 (the "License"); you may -// not use this file except in compliance with the License. You may obtain -// a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, WITHOUT -// WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the -// License for the specific language governing permissions and limitations -// under the License. - -// The index is the main of the project. The App is wrapped with -// a Provider to share the redux store and a Router to manage the location. - -import React from 'react' -import ReactDOM from 'react-dom' -import { BrowserRouter as Router } from 'react-router-dom' -import { Provider } from 'react-redux' -import 'patternfly/dist/css/patternfly.min.css' -import 'patternfly/dist/css/patternfly-additions.min.css' -import './index.css' - -import { getHomepageUrl } from './api' -import registerServiceWorker from './registerServiceWorker' -import { createZuulStore, fetchInfoAction } from './reducers' -import App from './App' - -// This calls the /api/info endpoint asynchronously, the App is connected -// with redux and it will update the info prop when fetch succeed. -const store = createZuulStore() -store.dispatch(fetchInfoAction()) - -ReactDOM.render( - <Provider store={store}> - <Router basename={new URL(getHomepageUrl()).pathname}><App /></Router> - </Provider>, document.getElementById('root')) -registerServiceWorker() diff --git a/web/src/pages/Builds.jsx b/web/src/pages/Builds.jsx deleted file mode 100644 index 8f902ee83..000000000 --- a/web/src/pages/Builds.jsx +++ /dev/null @@ -1,159 +0,0 @@ -// Copyright 2018 Red Hat, Inc -// -// Licensed under the Apache License, Version 2.0 (the "License"); you may -// not use this file except in compliance with the License. You may obtain -// a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, WITHOUT -// WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the -// License for the specific language governing permissions and limitations -// under the License. - -import * as React from 'react' -import PropTypes from 'prop-types' -import { connect } from 'react-redux' -import { Table } from 'patternfly-react' - -import { fetchBuilds } from '../api' -import TableFilters from '../containers/TableFilters' - - -class BuildsPage extends TableFilters { - static propTypes = { - tenant: PropTypes.object - } - - constructor () { - super() - - this.prepareTableHeaders() - this.state = { - builds: null, - currentFilterType: this.filterTypes[0], - activeFilters: [], - currentValue: '' - } - } - - updateData = (filters) => { - let queryString = '' - if (filters) { - filters.forEach(item => queryString += '&' + item.key + '=' + item.value) - } - this.setState({builds: null}) - fetchBuilds(this.props.tenant.apiPrefix, queryString).then(response => { - this.setState({builds: response.data}) - }) - } - - componentDidMount () { - document.title = 'Zuul Build' - if (this.props.tenant.name) { - this.updateData(this.getFilterFromUrl()) - } - } - - componentDidUpdate (prevProps) { - if (this.props.tenant.name !== prevProps.tenant.name) { - this.updateData(this.getFilterFromUrl()) - } - } - - prepareTableHeaders() { - const headerFormat = value => <Table.Heading>{value}</Table.Heading> - const cellFormat = (value) => ( - <Table.Cell>{value}</Table.Cell>) - const linkCellFormat = (value) => ( - <Table.Cell> - <a href={value} target='_blank' rel='noopener noreferrer'>link</a> - </Table.Cell> - ) - this.columns = [] - this.filterTypes = [] - const myColumns = [ - 'job', - 'project', - 'branch', - 'pipeline', - 'change', - 'duration', - 'log', - 'start time', - 'result'] - myColumns.forEach(column => { - let prop = column - let formatter = cellFormat - // Adapt column name and property name - if (column === 'job') { - prop = 'job_name' - } else if (column === 'start time') { - prop = 'start_time' - } else if (column === 'change') { - prop = 'ref_url' - formatter = linkCellFormat - } else if (column === 'log') { - prop = 'log_url' - formatter = linkCellFormat - } - const label = column.charAt(0).toUpperCase() + column.slice(1) - this.columns.push({ - header: {label: label, formatters: [headerFormat]}, - property: prop, - cell: {formatters: [formatter]} - }) - if (prop !== 'start_time' && prop !== 'ref_url' && prop !== 'duration' - && prop !== 'log_url' && prop !== 'uuid') { - this.filterTypes.push({ - id: prop, - title: label, - placeholder: 'Filter by ' + label, - filterType: 'text', - }) - } - }) - // Add build filter at the end - this.filterTypes.push({ - id: 'uuid', - title: 'Build', - palceholder: 'Filter by Build UUID', - fileterType: 'text', - }) - } - - renderTable (builds) { - return ( - <Table.PfProvider - striped - bordered - columns={this.columns} - > - <Table.Header/> - <Table.Body - rows={builds} - rowKey='uuid' - onRow={(row) => { - switch (row.result) { - case 'SUCCESS': - return { className: 'success' } - default: - return { className: 'warning' } - } - }} /> - </Table.PfProvider>) - } - - render() { - const { builds } = this.state - return ( - <React.Fragment> - {this.renderFilter()} - {builds ? this.renderTable(builds) : <p>Loading...</p>} - </React.Fragment> - ) - } -} - -export default connect(state => ({tenant: state.tenant}))(BuildsPage) diff --git a/web/src/pages/Jobs.jsx b/web/src/pages/Jobs.jsx deleted file mode 100644 index 8ec0e3d72..000000000 --- a/web/src/pages/Jobs.jsx +++ /dev/null @@ -1,99 +0,0 @@ -// Copyright 2018 Red Hat, Inc -// -// Licensed under the Apache License, Version 2.0 (the "License"); you may -// not use this file except in compliance with the License. You may obtain -// a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, WITHOUT -// WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the -// License for the specific language governing permissions and limitations -// under the License. - -import * as React from 'react' -import PropTypes from 'prop-types' -import { connect } from 'react-redux' -import { Link } from 'react-router-dom' -import { Table } from 'patternfly-react' - -import { fetchJobs } from '../api' - - -class JobsPage extends React.Component { - static propTypes = { - tenant: PropTypes.object - } - - state = { - jobs: null - } - - updateData () { - fetchJobs(this.props.tenant.apiPrefix).then(response => { - this.setState({jobs: response.data}) - }) - } - - componentDidMount () { - document.title = 'Zuul Jobs' - if (this.props.tenant.name) { - this.updateData() - } - } - - componentDidUpdate (prevProps) { - if (this.props.tenant.name !== prevProps.tenant.name) { - this.updateData() - } - } - - render () { - const { jobs } = this.state - if (!jobs) { - return (<p>Loading...</p>) - } - - const headerFormat = value => <Table.Heading>{value}</Table.Heading> - const cellFormat = (value) => ( - <Table.Cell>{value}</Table.Cell>) - const cellBuildFormat = (value) => ( - <Table.Cell> - <Link to={this.props.tenant.linkPrefix + '/builds?job_name=' + value}> - builds - </Link> - </Table.Cell>) - const columns = [] - const myColumns = ['name', 'description', 'Last builds'] - myColumns.forEach(column => { - let formatter = cellFormat - let prop = column - if (column === 'Last builds') { - prop = 'name' - formatter = cellBuildFormat - } - columns.push({ - header: {label: column, - formatters: [headerFormat]}, - property: prop, - cell: {formatters: [formatter]} - }) - }) - return ( - <Table.PfProvider - striped - bordered - hover - columns={columns} - > - <Table.Header/> - <Table.Body - rows={jobs} - rowKey="name" - /> - </Table.PfProvider>) - } -} - -export default connect(state => ({tenant: state.tenant}))(JobsPage) diff --git a/web/src/pages/Status.jsx b/web/src/pages/Status.jsx deleted file mode 100644 index 22a6754fb..000000000 --- a/web/src/pages/Status.jsx +++ /dev/null @@ -1,289 +0,0 @@ -/* global setTimeout, clearTimeout */ -// Copyright 2018 Red Hat, Inc -// -// Licensed under the Apache License, Version 2.0 (the "License"); you may -// not use this file except in compliance with the License. You may obtain -// a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, WITHOUT -// WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the -// License for the specific language governing permissions and limitations -// under the License. - -import * as React from 'react' -import PropTypes from 'prop-types' -import { connect } from 'react-redux' -import { - Alert, - Checkbox, - Icon, - Form, - FormGroup, - FormControl, - Spinner -} from 'patternfly-react' - -import { fetchStatus } from '../api' -import Pipeline from '../containers/status/Pipeline' - - -class StatusPage extends React.Component { - static propTypes = { - location: PropTypes.object, - tenant: PropTypes.object - } - - state = { - status: null, - filter: null, - expanded: false, - error: null, - loading: false, - autoReload: true - } - - visibilityListener = () => { - if (document[this.visibilityStateProperty] === 'visible') { - this.visible = true - this.updateData() - } else { - this.visible = false - } - } - - constructor () { - super() - - this.timer = null - this.visible = true - - // Stop refresh when page is not visible - if (typeof document.hidden !== 'undefined') { - this.visibilityChangeEvent = 'visibilitychange' - this.visibilityStateProperty = 'visibilityState' - } else if (typeof document.mozHidden !== 'undefined') { - this.visibilityChangeEvent = 'mozvisibilitychange' - this.visibilityStateProperty = 'mozVisibilityState' - } else if (typeof document.msHidden !== 'undefined') { - this.visibilityChangeEvent = 'msvisibilitychange' - this.visibilityStateProperty = 'msVisibilityState' - } else if (typeof document.webkitHidden !== 'undefined') { - this.visibilityChangeEvent = 'webkitvisibilitychange' - this.visibilityStateProperty = 'webkitVisibilityState' - } - document.addEventListener( - this.visibilityChangeEvent, this.visibilityListener, false) - } - - setCookie (name, value) { - document.cookie = name + '=' + value + '; path=/' - } - - updateData = (force) => { - /* // Create fake delay - function sleeper(ms) { - return function(x) { - return new Promise(resolve => setTimeout(() => resolve(x), ms)); - }; - } - */ - - if (force || (this.visible && this.state.autoReload)) { - this.setState({error: null, loading: true}) - fetchStatus(this.props.tenant.apiPrefix) - // .then(sleeper(2000)) - .then(response => { - this.setState({status: response.data, loading: false}) - }).catch(error => { - this.setState({error: error.message, status: null}) - }) - } - // Clear any running timer - if (this.timer) { - clearTimeout(this.timer) - this.timer = null - } - if (this.state.autoReload) { - this.timer = setTimeout(this.updateData, 5000) - } - } - - componentDidMount () { - document.title = 'Zuul Status' - this.loadState() - if (this.props.tenant.name) { - this.updateData() - } - } - - componentDidUpdate (prevProps, prevState) { - // When autoReload is set, also call updateData to retrigger the setTimeout - if (this.props.tenant.name !== prevProps.tenant.name || ( - this.state.autoReload && - this.state.autoReload !== prevState.autoReload)) { - this.updateData() - } - } - - componentWillUnmount () { - if (this.timer) { - clearTimeout(this.timer) - this.timer = null - } - document.removeEventListener( - this.visibilityChangeEvent, this.visibilityListener) - } - - setFilter = (filter) => { - this.filter.value = filter - this.setState({filter: filter}) - this.setCookie('zuul_filter_string', filter) - } - - handleKeyPress = (e) => { - if (e.charCode === 13) { - this.setFilter(e.target.value) - e.preventDefault() - e.target.blur() - } - } - - handleCheckBox = (e) => { - this.setState({expanded: e.target.checked}) - this.setCookie('zuul_expand_by_default', e.target.checked) - } - - loadState = () => { - function readCookie (name, defaultValue) { - let nameEQ = name + '=' - let ca = document.cookie.split(';') - for (let i = 0; i < ca.length; i++) { - let c = ca[i] - while (c.charAt(0) === ' ') { - c = c.substring(1, c.length) - } - if (c.indexOf(nameEQ) === 0) { - return c.substring(nameEQ.length, c.length) - } - } - return defaultValue - } - let filter = readCookie('zuul_filter_string', '') - let expanded = readCookie('zuul_expand_by_default', false) - if (typeof expanded === 'string') { - expanded = (expanded === 'true') - } - - if (this.props.location.hash) { - filter = this.props.location.hash.slice(1) - } - if (filter || expanded) { - this.setState({ - filter: filter, - expanded: expanded - }) - } - } - - renderStatusHeader (status) { - return ( - <p> - Queue lengths: <span>{status.trigger_event_queue ? - status.trigger_event_queue.length : '0' - }</span> events, - <span>{status.management_event_queue ? - status.management_event_queue.length : '0' - }</span> management events, - <span>{status.result_event_queue ? - status.result_event_queue.length : '0' - }</span> results. - </p> - ) - } - - renderStatusFooter (status) { - return ( - <React.Fragment> - <p>Zuul version: <span>{status.zuul_version}</span></p> - {status.last_reconfigured ? ( - <p>Last reconfigured: <span> - {new Date(status.last_reconfigured).toString()} - </span></p>) : ''} - </React.Fragment> - ) - } - - render () { - const { autoReload, error, status, filter, expanded, loading } = this.state - if (error) { - return (<Alert>{this.state.error}</Alert>) - } - if (this.filter && filter) { - this.filter.value = filter - } - const statusControl = ( - <Form inline> - <FormGroup controlId='status'> - <FormControl - type='text' - placeholder='change or project name' - defaultValue={filter} - inputRef={i => this.filter = i} - onKeyPress={this.handleKeyPress} /> - {filter && ( - <FormControl.Feedback> - <span - onClick={() => {this.setFilter('')}} - style={{cursor: 'pointer', zIndex: 10, pointerEvents: 'auto'}} - > - <Icon type='pf' title='Clear filter' name='delete' /> - - </span> - </FormControl.Feedback> - )} - </FormGroup> - <FormGroup controlId='status'> - Expand by default: - <Checkbox - defaultChecked={expanded} - onChange={this.handleCheckBox} /> - </FormGroup> - </Form> - ) - return ( - <React.Fragment> - <div className="pull-right" style={{display: 'flex'}}> - <Spinner loading={loading}> - <a className="refresh" onClick={() => {this.updateData(true)}}> - <Icon type="fa" name="refresh" /> refresh - </a> - </Spinner> - <Checkbox - defaultChecked={autoReload} - onChange={(e) => {this.setState({autoReload: e.target.checked})}} - style={{marginTop: '0px'}}> - auto reload - </Checkbox> - </div> - - {status && this.renderStatusHeader(status)} - {statusControl} - <div className='row'> - {status && status.pipelines.map(item => ( - <Pipeline - pipeline={item} - filter={filter} - expanded={expanded} - key={item.name} - /> - ))} - </div> - {status && this.renderStatusFooter(status)} - </React.Fragment>) - } -} - -export default connect(state => ({tenant: state.tenant}))(StatusPage) diff --git a/web/src/pages/Stream.jsx b/web/src/pages/Stream.jsx deleted file mode 100644 index 3ae7d3e9d..000000000 --- a/web/src/pages/Stream.jsx +++ /dev/null @@ -1,158 +0,0 @@ -/* global clearTimeout, setTimeout, JSON, URLSearchParams */ -// Copyright 2018 Red Hat, Inc -// -// Licensed under the Apache License, Version 2.0 (the "License"); you may -// not use this file except in compliance with the License. You may obtain -// a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, WITHOUT -// WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the -// License for the specific language governing permissions and limitations -// under the License. - -import * as React from 'react' -import PropTypes from 'prop-types' -import { connect } from 'react-redux' -import { Checkbox, Form, FormGroup } from 'patternfly-react' -import Sockette from 'sockette' - -import { getStreamUrl } from '../api' - - -class StreamPage extends React.Component { - static propTypes = { - match: PropTypes.object.isRequired, - location: PropTypes.object.isRequired, - tenant: PropTypes.object - } - - state = { - autoscroll: true, - } - - constructor() { - super() - this.receiveBuffer = '' - this.displayRef = React.createRef() - this.lines = [] - } - - refreshLoop = () => { - if (this.displayRef.current) { - let newLine = false - this.lines.forEach(line => { - newLine = true - this.displayRef.current.appendChild(line) - }) - this.lines = [] - if (newLine) { - const { autoscroll } = this.state - if (autoscroll) { - this.messagesEnd.scrollIntoView({ behavior: 'instant' }) - } - } - } - this.timer = setTimeout(this.refreshLoop, 250) - } - - componentWillUnmount () { - if (this.timer) { - clearTimeout(this.timer) - this.timer = null - } - if (this.ws) { - console.log('Remove ws') - this.ws.close() - } - } - - onLine = (line) => { - // Create dom elements - const lineDom = document.createElement('p') - lineDom.className = 'zuulstreamline' - lineDom.appendChild(document.createTextNode(line)) - this.lines.push(lineDom) - } - - onMessage = (message) => { - this.receiveBuffer += message - const lines = this.receiveBuffer.split('\n') - const lastLine = lines.slice(-1)[0] - // Append all completed lines - lines.slice(0, -1).forEach(line => { - this.onLine(line) - }) - // Check if last chunk is completed - if (lastLine && this.receiveBuffer.slice(-1) === '\n') { - this.onLine(lastLine) - this.receiveBuffer = '' - } else { - this.receiveBuffer = lastLine - } - this.refreshLoop() - } - - componentDidMount() { - const params = { - uuid: this.props.match.params.buildId - } - const urlParams = new URLSearchParams(this.props.location.search) - const logfile = urlParams.get('logfile') - if (logfile) { - params.logfile = logfile - } - document.title = 'Zuul Stream | ' + params.uuid.slice(0, 7) - this.ws = new Sockette(getStreamUrl(this.props.tenant.apiPrefix), { - timeout: 5e3, - maxAttempts: 3, - onopen: () => { - console.log('onopen') - this.ws.send(JSON.stringify(params)) - }, - onmessage: e => { - this.onMessage(e.data) - }, - onreconnect: e => { - console.log('Reconnecting...', e) - }, - onmaximum: e => { - console.log('Stop Attempting!', e) - }, - onclose: e => { - console.log('onclose', e) - this.onMessage('\n--- END OF STREAM ---\n') - }, - onerror: e => { - console.log('onerror:', e) - } - }) - } - - handleCheckBox = (e) => { - this.setState({autoscroll: e.target.checked}) - } - - render () { - return ( - <React.Fragment> - <Form inline id='zuulstreamoverlay'> - <FormGroup controlId='stream'> - <Checkbox - checked={this.state.autoscroll} - onChange={this.handleCheckBox}> - autoscroll - </Checkbox> - </FormGroup> - </Form> - <pre id='zuulstreamcontent' ref={this.displayRef} /> - <div ref={(el) => { this.messagesEnd = el }} /> - </React.Fragment> - ) - } -} - - -export default connect(state => ({tenant: state.tenant}))(StreamPage) diff --git a/web/src/pages/Tenants.jsx b/web/src/pages/Tenants.jsx deleted file mode 100644 index 4b6a03efe..000000000 --- a/web/src/pages/Tenants.jsx +++ /dev/null @@ -1,79 +0,0 @@ -// Copyright 2018 Red Hat, Inc -// -// Licensed under the Apache License, Version 2.0 (the "License"); you may -// not use this file except in compliance with the License. You may obtain -// a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, WITHOUT -// WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the -// License for the specific language governing permissions and limitations -// under the License. - -import * as React from 'react' -import { Link } from 'react-router-dom' -import { Table } from 'patternfly-react' - -import { fetchTenants } from '../api' - -class TenantsPage extends React.Component { - constructor () { - super() - - this.state = { - tenants: [] - } - } - - componentDidMount () { - document.title = 'Zuul Tenants' - fetchTenants().then(response => { - this.setState({tenants: response.data}) - }) - } - - render () { - const { tenants } = this.state - if (tenants.length === 0) { - return (<p>Loading...</p>) - } - const headerFormat = value => <Table.Heading>{value}</Table.Heading> - const cellFormat = (value) => ( - <Table.Cell>{value}</Table.Cell>) - const columns = [] - const myColumns = ['name', 'status', 'jobs', 'builds', 'projects', 'queue'] - myColumns.forEach(column => { - columns.push({ - header: {label: column, - formatters: [headerFormat]}, - property: column, - cell: {formatters: [cellFormat]} - }) - }) - tenants.forEach(tenant => { - tenant.status = ( - <Link to={'/t/' + tenant.name + '/status'}>Status</Link>) - tenant.jobs = ( - <Link to={'/t/' + tenant.name + '/jobs'}>Jobs</Link>) - tenant.builds = ( - <Link to={'/t/' + tenant.name + '/builds'}>Builds</Link>) - }) - return ( - <Table.PfProvider - striped - bordered - hover - columns={columns} - > - <Table.Header/> - <Table.Body - rows={tenants} - rowKey="name" - /> - </Table.PfProvider>) - } -} - -export default TenantsPage diff --git a/web/src/reducers.js b/web/src/reducers.js deleted file mode 100644 index 0ce01c3b2..000000000 --- a/web/src/reducers.js +++ /dev/null @@ -1,94 +0,0 @@ -// Copyright 2018 Red Hat, Inc -// -// Licensed under the Apache License, Version 2.0 (the "License"); you may -// not use this file except in compliance with the License. You may obtain -// a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, WITHOUT -// WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the -// License for the specific language governing permissions and limitations -// under the License. - -// Redux store enable to share global variables through state -// To update the store, use a reducer and dispatch method, -// see the App.setTenant method -// -// The store contains: -// info: the info object, tenant is set when white-label api -// tenant: the current tenant name, only used with multi-tenant api - -import { applyMiddleware, createStore, combineReducers } from 'redux' -import thunk from 'redux-thunk' - -import { fetchInfo } from './api' - -const infoReducer = (state = {}, action) => { - switch (action.type) { - case 'FETCH_INFO_SUCCESS': - return action.info - default: - return state - } -} - -const tenantReducer = (state = {}, action) => { - switch (action.type) { - case 'SET_TENANT': - return action.tenant - default: - return state - } -} - -function createZuulStore() { - return createStore(combineReducers({ - info: infoReducer, - tenant: tenantReducer - }), applyMiddleware(thunk)) -} - -// Reducer actions -function fetchInfoAction () { - return (dispatch) => { - return fetchInfo() - .then(response => { - dispatch({type: 'FETCH_INFO_SUCCESS', info: response.data.info}) - }) - .catch(error => { - throw (error) - }) - } -} - -function setTenantAction (name, whiteLabel) { - let apiPrefix = '' - let linkPrefix = '' - let routePrefix = '' - let defaultRoute = '/status' - if (!whiteLabel) { - apiPrefix = 'tenant/' + name + '/' - linkPrefix = '/t/' + name - routePrefix = '/t/:tenant' - defaultRoute = '/tenants' - } - return { - type: 'SET_TENANT', - tenant: { - name: name, - whiteLabel: whiteLabel, - defaultRoute: defaultRoute, - linkPrefix: linkPrefix, - apiPrefix: apiPrefix, - routePrefix: routePrefix - } - } -} - -export { - createZuulStore, - setTenantAction, - fetchInfoAction -} diff --git a/web/src/registerServiceWorker.js b/web/src/registerServiceWorker.js deleted file mode 100644 index 4f9531442..000000000 --- a/web/src/registerServiceWorker.js +++ /dev/null @@ -1,119 +0,0 @@ -/* global process */ -// In production, we register a service worker to serve assets from local cache. - -// This lets the app load faster on subsequent visits in production, and gives -// it offline capabilities. However, it also means that developers (and users) -// will only see deployed updates on the "N+1" visit to a page, since previously -// cached resources are updated in the background. - -// To learn more about the benefits of this model, read -// https://github.com/facebook/create-react-app/blob/master/packages/react-scripts/template/README.md#making-a-progressive-web-app -// This link also includes instructions on opting out of this behavior. - -const isLocalhost = Boolean( - window.location.hostname === 'localhost' || - // [::1] is the IPv6 localhost address. - window.location.hostname === '[::1]' || - // 127.0.0.1/8 is considered localhost for IPv4. - window.location.hostname.match( - /^127(?:\.(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)){3}$/ - ) -) - -export default function register () { - if (process.env.NODE_ENV === 'production' && 'serviceWorker' in navigator) { - // The URL constructor is available in all browsers that support SW. - const publicUrl = new URL(process.env.PUBLIC_URL, window.location) - if (publicUrl.origin !== window.location.origin) { - // Our service worker won't work if PUBLIC_URL is on a different origin - // from what our page is served on. This might happen if a CDN is used to - // serve assets; see https://github.com/facebookincubator/create-react-app/issues/2374 - return - } - - window.addEventListener('load', () => { - const swUrl = `${process.env.PUBLIC_URL}/service-worker.js` - - if (isLocalhost) { - // This is running on localhost. Lets check if a service worker still exists or not. - checkValidServiceWorker(swUrl) - - // Add some additional logging to localhost, pointing developers to the - // service worker/PWA documentation. - navigator.serviceWorker.ready.then(() => { - console.log( - 'This web app is being served cache-first by a service ' + - 'worker. To learn more, visit https://goo.gl/SC7cgQ' - ) - }) - } else { - // Is not local host. Just register service worker - registerValidSW(swUrl) - } - }) - } -} - -function registerValidSW (swUrl) { - navigator.serviceWorker - .register(swUrl) - .then(registration => { - registration.onupdatefound = () => { - const installingWorker = registration.installing - installingWorker.onstatechange = () => { - if (installingWorker.state === 'installed') { - if (navigator.serviceWorker.controller) { - // At this point, the old content will have been purged and - // the fresh content will have been added to the cache. - // It's the perfect time to display a "New content is - // available; please refresh." message in your web app. - console.log('New content is available; please refresh.') - } else { - // At this point, everything has been precached. - // It's the perfect time to display a - // "Content is cached for offline use." message. - console.log('Content is cached for offline use.') - } - } - } - } - }) - .catch(error => { - console.error('Error during service worker registration:', error) - }) -} - -function checkValidServiceWorker (swUrl) { - // Check if the service worker can be found. If it can't reload the page. - fetch(swUrl) - .then(response => { - // Ensure service worker exists, and that we really are getting a JS file. - if ( - response.status === 404 || - response.headers.get('content-type').indexOf('javascript') === -1 - ) { - // No service worker found. Probably a different app. Reload the page. - navigator.serviceWorker.ready.then(registration => { - registration.unregister().then(() => { - window.location.reload() - }) - }) - } else { - // Service worker found. Proceed as normal. - registerValidSW(swUrl) - } - }) - .catch(() => { - console.log( - 'No internet connection found. App is running in offline mode.' - ) - }) -} - -export function unregister () { - if ('serviceWorker' in navigator) { - navigator.serviceWorker.ready.then(registration => { - registration.unregister() - }) - } -} diff --git a/web/src/routes.js b/web/src/routes.js deleted file mode 100644 index 408599eaf..000000000 --- a/web/src/routes.js +++ /dev/null @@ -1,52 +0,0 @@ -// Copyright 2018 Red Hat, Inc -// -// Licensed under the Apache License, Version 2.0 (the "License"); you may -// not use this file except in compliance with the License. You may obtain -// a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, WITHOUT -// WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the -// License for the specific language governing permissions and limitations -// under the License. - -import StatusPage from './pages/Status' -import JobsPage from './pages/Jobs' -import BuildsPage from './pages/Builds' -import TenantsPage from './pages/Tenants' -import StreamPage from './pages/Stream' - -// The Route object are created in the App component. -// Object with a title are created in the menu. -// Object with globalRoute are not tenant scoped. -// Remember to update the api getHomepageUrl subDir list for route with params -const routes = () => [ - { - title: 'Status', - to: '/status', - component: StatusPage - }, - { - title: 'Jobs', - to: '/jobs', - component: JobsPage - }, - { - title: 'Builds', - to: '/builds', - component: BuildsPage - }, - { - to: '/stream/:buildId', - component: StreamPage - }, - { - to: '/tenants', - component: TenantsPage, - globalRoute: true - } -] - -export { routes } diff --git a/web/status/jquery.zuul.js b/web/status/jquery.zuul.js new file mode 100644 index 000000000..777d48f5f --- /dev/null +++ b/web/status/jquery.zuul.js @@ -0,0 +1,944 @@ +/* global Image, jQuery */ +// jquery plugin for Zuul status page +// +// Copyright 2012 OpenStack Foundation +// Copyright 2013 Timo Tijhof +// Copyright 2013 Wikimedia Foundation +// Copyright 2014 Rackspace Australia +// +// Licensed under the Apache License, Version 2.0 (the "License"); you may +// not use this file except in compliance with the License. You may obtain +// a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, WITHOUT +// WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the +// License for the specific language governing permissions and limitations +// under the License. + +import RedImage from '../images/red.png' +import GreyImage from '../images/grey.png' +import GreenImage from '../images/green.png' +import BlackImage from '../images/black.png' +import LineImage from '../images/line.png' +import LineAngleImage from '../images/line-angle.png' +import LineTImage from '../images/line-t.png'; + +(function ($) { + function setCookie (name, value) { + document.cookie = name + '=' + value + '; path=/' + } + + function readCookie (name, defaultValue) { + let nameEQ = name + '=' + let ca = document.cookie.split(';') + for (let i = 0; i < ca.length; i++) { + let c = ca[i] + while (c.charAt(0) === ' ') { + c = c.substring(1, c.length) + } + if (c.indexOf(nameEQ) === 0) { + return c.substring(nameEQ.length, c.length) + } + } + return defaultValue + } + + $.zuul = function (options, zuulService) { + options = $.extend({ + 'enabled': true, + 'graphite_url': '', + 'source': 'status', + 'source_data': null, + 'msg_id': '#zuul_msg', + 'pipelines_id': '#zuul_pipelines', + 'queue_events_num': '#zuul_queue_events_num', + 'queue_management_events_num': '#zuul_queue_management_events_num', + 'queue_results_num': '#zuul_queue_results_num' + }, options) + + let collapsedExceptions = [] + let currentFilter = readCookie('zuul_filter_string', '') + let changeSetInURL = window.location.href.split('#')[1] + if (changeSetInURL) { + currentFilter = changeSetInURL + } + let $jq + + let xhr + let zuulGraphUpdateCount = 0 + let zuulSparklineURLs = {} + + function getSparklineURL (pipelineName) { + if (options.graphite_url !== '') { + if (!(pipelineName in zuulSparklineURLs)) { + zuulSparklineURLs[pipelineName] = $.fn.graphite + .geturl({ + url: options.graphite_url, + from: '-8hours', + width: 100, + height: 26, + margin: 0, + hideLegend: true, + hideAxes: true, + hideGrid: true, + target: [ + 'color(stats.gauges.zuul.pipeline.' + pipelineName + + ".current_changes, '6b8182')" + ] + }) + } + return zuulSparklineURLs[pipelineName] + } + return false + } + + let format = { + job: function (job) { + let $jobLine = $('<span />') + + if (job.result !== null) { + $jobLine.append( + $('<a />') + .addClass('zuul-job-name') + .attr('href', job.report_url) + .text(job.name) + ) + } else if (job.url !== null) { + $jobLine.append( + $('<a />') + .addClass('zuul-job-name') + .attr('href', job.url) + .text(job.name) + ) + } else { + $jobLine.append( + $('<span />') + .addClass('zuul-job-name') + .text(job.name) + ) + } + + $jobLine.append(this.job_status(job)) + + if (job.voting === false) { + $jobLine.append( + $(' <small />') + .addClass('zuul-non-voting-desc') + .text(' (non-voting)') + ) + } + + $jobLine.append($('<div style="clear: both"></div>')) + return $jobLine + }, + + job_status: function (job) { + let result = job.result ? job.result.toLowerCase() : null + if (result === null) { + if (job.url === null) { + result = 'queued' + } else if (job.paused !== null && job.paused) { + result = 'paused' + } else { + result = 'in progress' + } + } + + if (result === 'in progress') { + return this.job_progress_bar(job.elapsed_time, + job.remaining_time) + } else { + return this.status_label(result) + } + }, + + status_label: function (result) { + let $status = $('<span />') + $status.addClass('zuul-job-result label') + + switch (result) { + case 'success': + $status.addClass('label-success') + break + case 'failure': + $status.addClass('label-danger') + break + case 'unstable': + $status.addClass('label-warning') + break + case 'skipped': + $status.addClass('label-info') + break + // 'in progress' 'queued' 'lost' 'aborted' ... + default: + $status.addClass('label-default') + } + $status.text(result) + return $status + }, + + job_progress_bar: function (elapsedTime, remainingTime) { + let progressPercent = 100 * (elapsedTime / (elapsedTime + + remainingTime)) + let $barInner = $('<div />') + .addClass('progress-bar') + .attr('role', 'progressbar') + .attr('aria-valuenow', 'progressbar') + .attr('aria-valuemin', progressPercent) + .attr('aria-valuemin', '0') + .attr('aria-valuemax', '100') + .css('width', progressPercent + '%') + + let $barOutter = $('<div />') + .addClass('progress zuul-job-result') + .append($barInner) + + return $barOutter + }, + + enqueueTime: function (ms) { + // Special format case for enqueue time to add style + let hours = 60 * 60 * 1000 + let now = Date.now() + let delta = now - ms + let status = 'text-success' + let text = this.time(delta, true) + if (delta > (4 * hours)) { + status = 'text-danger' + } else if (delta > (2 * hours)) { + status = 'text-warning' + } + return '<span class="' + status + '">' + text + '</span>' + }, + + time: function (ms, words) { + if (typeof (words) === 'undefined') { + words = false + } + let seconds = (+ms) / 1000 + let minutes = Math.floor(seconds / 60) + let hours = Math.floor(minutes / 60) + seconds = Math.floor(seconds % 60) + minutes = Math.floor(minutes % 60) + let r = '' + if (words) { + if (hours) { + r += hours + r += ' hr ' + } + r += minutes + ' min' + } else { + if (hours < 10) { + r += '0' + } + r += hours + ':' + if (minutes < 10) { + r += '0' + } + r += minutes + ':' + if (seconds < 10) { + r += '0' + } + r += seconds + } + return r + }, + + changeTotalProgressBar: function (change) { + let jobPercent = Math.floor(100 / change.jobs.length) + let $barOutter = $('<div />') + .addClass('progress zuul-change-total-result') + + $.each(change.jobs, function (i, job) { + let result = job.result ? job.result.toLowerCase() : null + if (result === null) { + result = job.url ? 'in progress' : 'queued' + } + + if (result !== 'queued') { + let $barInner = $('<div />') + .addClass('progress-bar') + + switch (result) { + case 'success': + $barInner.addClass('progress-bar-success') + break + case 'lost': + case 'failure': + $barInner.addClass('progress-bar-danger') + break + case 'unstable': + $barInner.addClass('progress-bar-warning') + break + case 'in progress': + case 'queued': + break + } + $barInner.attr('title', job.name) + .css('width', jobPercent + '%') + $barOutter.append($barInner) + } + }) + return $barOutter + }, + + changeHeader: function (change) { + let changeId = change.id || 'NA' + + let $changeLink = $('<small />') + if (change.url !== null) { + let githubId = changeId.match(/^([0-9]+),([0-9a-f]{40})$/) + if (githubId) { + $changeLink.append( + $('<a />').attr('href', change.url).append( + $('<abbr />') + .attr('title', changeId) + .text('#' + githubId[1]) + ) + ) + } else if (/^[0-9a-f]{40}$/.test(changeId)) { + let changeIdShort = changeId.slice(0, 7) + $changeLink.append( + $('<a />').attr('href', change.url).append( + $('<abbr />') + .attr('title', changeId) + .text(changeIdShort) + ) + ) + } else { + $changeLink.append( + $('<a />').attr('href', change.url).text(changeId) + ) + } + } else { + if (changeId.length === 40) { + changeId = changeId.substr(0, 7) + } + $changeLink.text(changeId) + } + + let $changeProgressRowLeft = $('<div />') + .addClass('col-xs-4') + .append($changeLink) + let $changeProgressRowRight = $('<div />') + .addClass('col-xs-8') + .append(this.changeTotalProgressBar(change)) + + let $changeProgressRow = $('<div />') + .addClass('row') + .append($changeProgressRowLeft) + .append($changeProgressRowRight) + + let $projectSpan = $('<span />') + .addClass('change_project') + .text(change.project) + + let $left = $('<div />') + .addClass('col-xs-8') + .append($projectSpan, $changeProgressRow) + + let remainingTime + if (change.remaining_time === null) { + remainingTime = 'unknown' + } else { + remainingTime = this.time(change.remaining_time, true) + } + let enqueueTime = this.enqueueTime(change.enqueue_time) + let $remainingTime = $('<small />').addClass('time') + .attr('title', 'Remaining Time').html(remainingTime) + let $enqueueTime = $('<small />').addClass('time') + .attr('title', 'Elapsed Time').html(enqueueTime) + + let $right = $('<div />') + if (change.live === true) { + $right.addClass('col-xs-4 text-right') + .append($remainingTime, $('<br />'), $enqueueTime) + } + + let $header = $('<div />') + .addClass('row') + .append($left, $right) + return $header + }, + + change_list: function (jobs) { + let format = this + let $list = $('<ul />') + .addClass('list-group zuul-patchset-body') + + $.each(jobs, function (i, job) { + let $item = $('<li />') + .addClass('list-group-item') + .addClass('zuul-change-job') + .append(format.job(job)) + $list.append($item) + }) + + return $list + }, + + changePanel: function (change) { + let $header = $('<div />') + .addClass('panel-heading zuul-patchset-header') + .append(this.changeHeader(change)) + + let panelId = change.id ? change.id.replace(',', '_') + : change.project.replace('/', '_') + + '-' + change.enqueue_time + let $panel = $('<div />') + .attr('id', panelId) + .addClass('panel panel-default zuul-change') + .append($header) + .append(this.change_list(change.jobs)) + + $header.click(this.toggle_patchset) + return $panel + }, + + change_status_icon: function (change) { + let iconFile = GreenImage + let iconTitle = 'Succeeding' + + if (change.active !== true) { + // Grey icon + iconFile = GreyImage + iconTitle = 'Waiting until closer to head of queue to' + + ' start jobs' + } else if (change.live !== true) { + // Grey icon + iconFile = GreyImage + iconTitle = 'Dependent change required for testing' + } else if (change.failing_reasons && + change.failing_reasons.length > 0) { + let reason = change.failing_reasons.join(', ') + iconTitle = 'Failing because ' + reason + if (reason.match(/merge conflict/)) { + // Black icon + iconFile = BlackImage + } else { + // Red icon + iconFile = RedImage + } + } + + let $icon = $('<img />') + .attr('src', zuulService.appBaseHref + iconFile) + .attr('title', iconTitle) + .css('display', 'block') + + return $icon + }, + + change_with_status_tree: function (change, changeQueue) { + let $changeRow = $('<tr />') + + for (let i = 0; i < changeQueue._tree_columns; i++) { + let $treeCell = $('<td />') + .css('height', '100%') + .css('padding', '0 0 10px 0') + .css('margin', '0') + .css('width', '16px') + .css('min-width', '16px') + .css('overflow', 'hidden') + .css('vertical-align', 'top') + + if (i < change._tree.length && change._tree[i] !== null) { + $treeCell.css('background-image', + 'url(' + LineImage + ')') + .css('background-repeat', 'repeat-y') + } + + if (i === change._tree_index) { + $treeCell.append( + this.change_status_icon(change)) + } + if (change._tree_branches.indexOf(i) !== -1) { + let $image = $('<img />') + .css('vertical-align', 'baseline') + if (change._tree_branches.indexOf(i) === + change._tree_branches.length - 1) { + // Angle line + $image.attr('src', LineAngleImage) + } else { + // T line + $image.attr('src', LineTImage) + } + $treeCell.append($image) + } + $changeRow.append($treeCell) + } + + let changeWidth = 360 - 16 * changeQueue._tree_columns + let $changeColumn = $('<td />') + .css('width', changeWidth + 'px') + .addClass('zuul-change-cell') + .append(this.changePanel(change)) + + $changeRow.append($changeColumn) + + let $changeTable = $('<table />') + .addClass('zuul-change-box') + .css('-moz-box-sizing', 'content-box') + .css('box-sizing', 'content-box') + .append($changeRow) + + return $changeTable + }, + + pipeline_sparkline: function (pipelineName) { + if (options.graphite_url !== '') { + let $sparkline = $('<img />') + .addClass('pull-right') + .attr('src', getSparklineURL(pipelineName)) + return $sparkline + } + return false + }, + + pipeline_header: function (pipeline, count) { + // Format the pipeline name, sparkline and description + let $headerDiv = $('<div />') + .addClass('zuul-pipeline-header') + + let $heading = $('<h3 />') + .css('vertical-align', 'middle') + .text(pipeline.name) + .append( + $('<span />') + .addClass('badge pull-right') + .css('vertical-align', 'middle') + .css('margin-top', '0.5em') + .text(count) + ) + .append(this.pipeline_sparkline(pipeline.name)) + + $headerDiv.append($heading) + + if (typeof pipeline.description === 'string') { + let descr = $('<small />') + $.each(pipeline.description.split(/\r?\n\r?\n/), + function (index, descrPart) { + descr.append($('<p />').text(descrPart)) + }) + $headerDiv.append($('<p />').append(descr)) + } + return $headerDiv + }, + + pipeline: function (pipeline, count) { + let format = this + let $html = $('<div />') + .addClass('zuul-pipeline col-md-4') + .append(this.pipeline_header(pipeline, count)) + + $.each(pipeline.change_queues, function (queueIndex, changeQueue) { + $.each(changeQueue.heads, function (headIndex, changes) { + let $changeQueueHtml = $('<div />') + .addClass('change-queue') + .data('zuul-pipeline', pipeline.name) + $html.append($changeQueueHtml) + + if (pipeline.change_queues.length > 1 && headIndex === 0) { + let name = changeQueue.name + let shortName = name + if (shortName.length > 32) { + shortName = shortName.substr(0, 32) + '...' + } + $changeQueueHtml.append($('<p />') + .text('Queue: ') + .append( + $('<abbr />') + .attr('title', name) + .text(shortName) + ) + ) + } + + let $changeBoxes = $.map(changes, function (change) { + return format.change_with_status_tree(change, changeQueue) + }) + + let visible = $.map($changeBoxes, function (changeBox) { + $changeQueueHtml.append(changeBox) + return format.display_patchset(changeBox) + }).some(function (visible) { + return visible + }) + + if (!visible) $changeQueueHtml.remove() + }) + }) + return $html + }, + + toggle_patchset: function (e) { + // Toggle showing/hiding the patchset when the header is clicked. + if (e.target.nodeName.toLowerCase() === 'a') { + // Ignore clicks from gerrit patch set link + return + } + + // Grab the patchset panel + let $panel = $(e.target).parents('.zuul-change') + let $body = $panel.children('.zuul-patchset-body') + $body.toggle(200) + let collapsedIndex = collapsedExceptions.indexOf( + $panel.attr('id')) + if (collapsedIndex === -1) { + // Currently not an exception, add it to list + collapsedExceptions.push($panel.attr('id')) + } else { + // Currently an except, remove from exceptions + collapsedExceptions.splice(collapsedIndex, 1) + } + }, + + display_patchset: function ($changeBox, animate) { + // Determine if to show or hide the patchset and/or the results + // when loaded + + // See if we should hide the body/results + let $panel = $changeBox.find('.zuul-change') + let panelChange = $panel.attr('id') + let $body = $panel.children('.zuul-patchset-body') + let expandByDefault = $('#expand_by_default') + .prop('checked') + + let collapsedIndex = collapsedExceptions + .indexOf(panelChange) + + if ((expandByDefault && collapsedIndex === -1) || + (!expandByDefault && collapsedIndex !== -1)) { + // Expand by default, or is an exception + $body.show(animate) + } else { + $body.hide(animate) + } + + // Check if we should hide the whole panel + let panelProject = $panel.find('.change_project').text() + .toLowerCase() + + let panelPipeline = $changeBox + .parents('.zuul-pipeline') + .find('.zuul-pipeline-header > h3') + .html() + .toLowerCase() + + let showPanel = true + + if (currentFilter !== '') { + showPanel = false + let filter = currentFilter.trim().split(/[\s,]+/) + $.each(filter, function (index, filterVal) { + if (filterVal !== '') { + filterVal = filterVal.toLowerCase() + if (panelProject.indexOf(filterVal) !== -1 || + panelPipeline.indexOf(filterVal) !== -1 || + panelChange.indexOf(filterVal) !== -1) { + showPanel = true + } + } + }) + } + + if (showPanel === true) { + $changeBox.show(animate) + } else { + $changeBox.hide(animate) + } + + return showPanel + } + } + + let app = { + schedule: function (app) { + app = app || this + if (!options.enabled) { + app.timer = setTimeout(function () { app.schedule(app) }, 5000) + return + } + app.update().always(function () { + app.timer = setTimeout(function () { app.schedule(app) }, 5000) + }) + + // Only update graphs every minute + if (zuulGraphUpdateCount > 11) { + zuulGraphUpdateCount = 0 + $.zuul.update_sparklines() + } + }, + injest: function (data, $msg) { + if ('message' in data) { + $msg.removeClass('alert-danger') + .addClass('alert-info') + .text(data.message) + .show() + } else { + $msg.empty() + .hide() + } + + if ('zuul_version' in data) { + $('#zuul-version-span').text(data.zuul_version) + } + if ('last_reconfigured' in data) { + let lastReconfigured = + new Date(data.last_reconfigured) + $('#last-reconfigured-span').text( + lastReconfigured.toString()) + } + + let $pipelines = $(options.pipelines_id) + $pipelines.html('') + $.each(data.pipelines, function (i, pipeline) { + let count = app.create_tree(pipeline) + $pipelines.append( + format.pipeline(pipeline, count)) + }) + + $(options.queue_events_num).text( + data.trigger_event_queue + ? data.trigger_event_queue.length : '0' + ) + $(options.queue_results_num).text( + data.result_event_queue + ? data.result_event_queue.length : '0' + ) + }, + /** @return {jQuery.Promise} */ + update: function () { + // Cancel the previous update if it hasn't completed yet. + if (xhr) { + xhr.abort() + } + + this.emit('update-start') + let app = this + + let $msg = $(options.msg_id) + if (options.source_data !== null) { + app.injest(options.source_data, $msg) + return + } + xhr = $.getJSON(options.source) + .done(function (data) { + app.injest(data, $msg) + }) + .fail(function (jqXHR, statusText, errMsg) { + if (statusText === 'abort') { + return + } + $msg.text(options.source + ': ' + errMsg) + .addClass('alert-danger') + .removeClass('zuul-msg-wrap-off') + .show() + }) + .always(function () { + xhr = undefined + app.emit('update-end') + }) + + return xhr + }, + + update_sparklines: function () { + $.each(zuulSparklineURLs, function (name, url) { + let newimg = new Image() + let parts = url.split('#') + newimg.src = parts[0] + '#' + new Date().getTime() + $(newimg).load(function () { + zuulSparklineURLs[name] = newimg.src + }) + }) + }, + + emit: function () { + $jq.trigger.apply($jq, arguments) + return this + }, + on: function () { + $jq.on.apply($jq, arguments) + return this + }, + one: function () { + $jq.one.apply($jq, arguments) + return this + }, + + controlForm: function () { + // Build the filter form filling anything from cookies + + let $controlForm = $('<form />') + .attr('role', 'form') + .addClass('form-inline') + .submit(this.handleFilterChange) + + $controlForm + .append(this.filterFormGroup()) + .append(this.expandFormGroup()) + + return $controlForm + }, + + filterFormGroup: function () { + // Update the filter form with a clear button if required + + let $label = $('<label />') + .addClass('control-label') + .attr('for', 'filter_string') + .text('Filters') + .css('padding-right', '0.5em') + + let $input = $('<input />') + .attr('type', 'text') + .attr('id', 'filter_string') + .addClass('form-control') + .attr('title', + 'project(s), pipeline(s) or review(s) comma ' + + 'separated') + .attr('value', currentFilter) + + $input.change(this.handleFilterChange) + + let $clearIcon = $('<span />') + .addClass('form-control-feedback') + .addClass('glyphicon glyphicon-remove-circle') + .attr('id', 'filter_form_clear_box') + .attr('title', 'clear filter') + .css('cursor', 'pointer') + + $clearIcon.click(function () { + $('#filter_string').val('').change() + }) + + if (currentFilter === '') { + $clearIcon.hide() + } + + let $formGroup = $('<div />') + .addClass('form-group has-feedback') + .append($label, $input, $clearIcon) + return $formGroup + }, + + expandFormGroup: function () { + let expandByDefault = ( + readCookie('zuul_expand_by_default', false) === 'true') + + let $checkbox = $('<input />') + .attr('type', 'checkbox') + .attr('id', 'expand_by_default') + .prop('checked', expandByDefault) + .change(this.handleExpandByDefault) + + let $label = $('<label />') + .css('padding-left', '1em') + .html('Expand by default: ') + .append($checkbox) + + let $formGroup = $('<div />') + .addClass('checkbox') + .append($label) + return $formGroup + }, + + handleFilterChange: function () { + // Update the filter and save it to a cookie + currentFilter = $('#filter_string').val() + setCookie('zuul_filter_string', currentFilter) + if (currentFilter === '') { + $('#filter_form_clear_box').hide() + } else { + $('#filter_form_clear_box').show() + } + + this.update() + return false + }, + + handleExpandByDefault: function (e) { + // Handle toggling expand by default + setCookie('zuul_expand_by_default', e.target.checked) + collapsedExceptions = [] + $('.zuul-change-box').each(function (index, obj) { + let $changeBox = $(obj) + format.display_patchset($changeBox, 200) + }) + }, + + create_tree: function (pipeline) { + let count = 0 + let pipelineMaxTreeColumns = 1 + $.each(pipeline.change_queues, + function (changeQueueIndex, changeQueue) { + let tree = [] + let maxTreeColumns = 1 + let changes = [] + let lastTreeLength = 0 + $.each(changeQueue.heads, function (headIndex, head) { + $.each(head, function (changeIndex, change) { + changes[change.id] = change + change._tree_position = changeIndex + }) + }) + $.each(changeQueue.heads, function (headIndex, head) { + $.each(head, function (changeIndex, change) { + if (change.live === true) { + count += 1 + } + let idx = tree.indexOf(change.id) + if (idx > -1) { + change._tree_index = idx + // remove... + tree[idx] = null + while (tree[tree.length - 1] === null) { + tree.pop() + } + } else { + change._tree_index = 0 + } + change._tree_branches = [] + change._tree = [] + if (typeof (change.items_behind) === 'undefined') { + change.items_behind = [] + } + change.items_behind.sort(function (a, b) { + return (changes[b]._tree_position - changes[a]._tree_position) + }) + $.each(change.items_behind, function (i, id) { + tree.push(id) + if (tree.length > lastTreeLength && lastTreeLength > 0) { + change._tree_branches.push(tree.length - 1) + } + }) + if (tree.length > maxTreeColumns) { + maxTreeColumns = tree.length + } + if (tree.length > pipelineMaxTreeColumns) { + pipelineMaxTreeColumns = tree.length + } + change._tree = tree.slice(0) // make a copy + lastTreeLength = tree.length + }) + }) + changeQueue._tree_columns = maxTreeColumns + }) + pipeline._tree_columns = pipelineMaxTreeColumns + return count + } + } + + $jq = $(app) + return { + options: options, + format: format, + app: app, + jq: $jq + } + } +}(jQuery)) diff --git a/web/status/status.component.html b/web/status/status.component.html new file mode 100644 index 000000000..3a8718f22 --- /dev/null +++ b/web/status/status.component.html @@ -0,0 +1,32 @@ +<!-- +Copyright 2017 Red Hat + +Licensed under the Apache License, Version 2.0 (the "License"); you may +not use this file except in compliance with the License. You may obtain +a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, WITHOUT +WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the +License for the specific language governing permissions and limitations +under the License. +--> +<div class="container"> + <div class="zuul-container" id="zuul-container"> + <div style="display: none;" class="alert" id="zuul_msg"></div> + <button class="btn pull-right zuul-spinner"> + updating <span class="glyphicon glyphicon-refresh"></span> + </button> + <p>Queue lengths: + <span id="zuul_queue_events_num">0</span> events, + <span id="zuul_queue_management_events_num">0</span> management events, + <span id="zuul_queue_results_num">0</span> results. + </p> + <div id="zuul_controls"></div> + <div id="zuul_pipelines" class="row"></div> + <p>Zuul version: <span id="zuul-version-span"></span></p> + <p>Last reconfigured: <span id="last-reconfigured-span"></span></p> + </div> +</div> diff --git a/web/status/status.component.ts b/web/status/status.component.ts new file mode 100644 index 000000000..578d35b30 --- /dev/null +++ b/web/status/status.component.ts @@ -0,0 +1,57 @@ +// Copyright 2018 Red Hat, Inc. +// +// Licensed under the Apache License, Version 2.0 (the "License"); you may +// not use this file except in compliance with the License. You may obtain +// a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, WITHOUT +// WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the +// License for the specific language governing permissions and limitations +// under the License. + +import { Component, OnInit, OnDestroy } from '@angular/core' +import { ActivatedRoute } from '@angular/router' + +import ZuulService from '../zuul/zuul.service' +import zuulStart from './zuulStart' + +interface ZuulStatusOption { + enabled: boolean +} + +interface ZuulStatus { + options: ZuulStatusOption + timer: number +} + +@Component({ + template: require('./status.component.html') +}) +export default class StatusComponent implements OnInit, OnDestroy { + tenant: string + app: ZuulStatus + + constructor(private route: ActivatedRoute, private zuul: ZuulService) {} + + async ngOnInit() { + await this.zuul.setTenant(this.route.snapshot.paramMap.get('tenant')) + + if (typeof this.app === 'undefined') { + this.app = zuulStart( + jQuery, this.zuul) + } + this.app.options.enabled = true + } + + ngOnDestroy() { + this.app.options.enabled = false + if (typeof this.app.timer !== 'undefined') { + clearTimeout(this.app.timer) + this.app.timer = 0 + } + jQuery(document).off() + } +} diff --git a/web/status/zuulStart.js b/web/status/zuulStart.js new file mode 100644 index 000000000..063b0d697 --- /dev/null +++ b/web/status/zuulStart.js @@ -0,0 +1,102 @@ +/* global URL, DemoStatusBasic, DemoStatusOpenStack, DemoStatusTree, BuiltinConfig */ +// Client script for Zuul status page +// +// Copyright 2013 OpenStack Foundation +// Copyright 2013 Timo Tijhof +// Copyright 2013 Wikimedia Foundation +// Copyright 2014 Rackspace Australia +// +// Licensed under the Apache License, Version 2.0 (the "License"); you may +// not use this file except in compliance with the License. You may obtain +// a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, WITHOUT +// WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the +// License for the specific language governing permissions and limitations +// under the License. + +import 'jquery-visibility/jquery-visibility' +import 'graphitejs/jquery.graphite.js' + +import './jquery.zuul' + +/** + * @return The $.zuul instance + */ +function zuulStart ($, zuulService) { + // Start the zuul app (expects default dom) + + let $container, $indicator + + let url = new URL(window.location) + let params = { + // graphite_url: 'http://graphite.openstack.org/render/' + } + + if (typeof BuiltinConfig !== 'undefined') { + params['source'] = BuiltinConfig.api_endpoint + '/' + 'status' + } else if (url.searchParams.has('source_url')) { + params['source'] = url.searchParams.get('source_url') + '/' + 'status' + } else if (url.searchParams.has('demo')) { + let demo = url.searchParams.get('demo') || 'basic' + if (demo === 'basic') { + params['source_data'] = DemoStatusBasic + } else if (demo === 'openstack') { + params['source_data'] = DemoStatusOpenStack + } else if (demo === 'tree') { + params['source_data'] = DemoStatusTree + } + } else { + params['source'] = zuulService.getSourceUrl('status') + } + + let zuul = $.zuul(params, zuulService) + + zuul.jq.on('update-start', function () { + $container.addClass('zuul-container-loading') + $indicator.addClass('zuul-spinner-on') + }) + + zuul.jq.on('update-end', function () { + $container.removeClass('zuul-container-loading') + setTimeout(function () { + $indicator.removeClass('zuul-spinner-on') + }, 500) + }) + + zuul.jq.one('update-end', function () { + // Do this asynchronous so that if the first update adds a + // message, it will not animate while we fade in the content. + // Instead it simply appears with the rest of the content. + setTimeout(function () { + // Fade in the content + $container.addClass('zuul-container-ready') + }) + }) + + $(function ($) { + // DOM ready + $container = $('#zuul-container') + $indicator = $('#zuul-spinner') + $('#zuul_controls').append(zuul.app.controlForm()) + + zuul.app.schedule() + + $(document).on({ + 'show.visibility': function () { + zuul.options.enabled = true + zuul.app.update() + }, + 'hide.visibility': function () { + zuul.options.enabled = false + } + }) + }) + + return zuul +} + +export default zuulStart diff --git a/web/stream/stream.component.css b/web/stream/stream.component.css new file mode 100644 index 000000000..3eb73e453 --- /dev/null +++ b/web/stream/stream.component.css @@ -0,0 +1,18 @@ +#zuulstreamoverlay { + float: right; + position: fixed; + top: 5px; + right: 5px; + background-color: white; + padding: 2px; + color: black; +} + +pre#zuulstreamcontent { + font-family: monospace; + white-space: pre; + margin: 0px 10px; + background-color: black; + color: lightgrey; + border: none; +} diff --git a/web/stream/stream.component.html b/web/stream/stream.component.html new file mode 100644 index 000000000..dcee2ff5c --- /dev/null +++ b/web/stream/stream.component.html @@ -0,0 +1,24 @@ +<!-- +Copyright 2017 BMW Car IT GmbH + +Licensed under the Apache License, Version 2.0 (the "License"); you may +not use this file except in compliance with the License. You may obtain +a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, WITHOUT +WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the +License for the specific language governing permissions and limitations +under the License. +--> +<div class="container-fluid"> + <span id="zuulstreamoverlay"> + <form> + <input type="checkbox" id="autoscroll" checked> autoscroll + </form> + </span> +</div> + +<pre id="zuulstreamcontent"></pre> diff --git a/web/stream/stream.component.ts b/web/stream/stream.component.ts new file mode 100644 index 000000000..3af31bc34 --- /dev/null +++ b/web/stream/stream.component.ts @@ -0,0 +1,90 @@ +// Copyright 2018 Red Hat, Inc. +// +// Licensed under the Apache License, Version 2.0 (the "License"); you may +// not use this file except in compliance with the License. You may obtain +// a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, WITHOUT +// WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the +// License for the specific language governing permissions and limitations +// under the License. +declare var BuiltinConfig: object + +import { Component, OnInit } from '@angular/core' +import { ActivatedRoute } from '@angular/router' + +import ZuulService from '../zuul/zuul.service' + +function escapeLog (text) { + const pattern = /[<>&"']/g + + return text.replace(pattern, function (match) { + return '&#' + match.charCodeAt(0) + ';' + }) +} + +@Component({ + styles: [require('./stream.component.css').toString()], + template: require('./stream.component.html') +}) +export default class StreamComponent implements OnInit { + + constructor(private route: ActivatedRoute, private zuul: ZuulService) {} + + async ngOnInit() { + await this.zuul.setTenant(this.route.snapshot.paramMap.get('tenant')) + this.startStream() + } + + startStream () { + const pageUpdateInMS = 250 + let receiveBuffer = '' + + setInterval(function () { + console.log('autoScroll') + if (receiveBuffer !== '') { + document.getElementById('zuulstreamcontent').innerHTML += receiveBuffer + receiveBuffer = '' + if ((<HTMLInputElement>document.getElementById('autoscroll')).checked) { + window.scrollTo(0, document.body.scrollHeight) + } + } + }, pageUpdateInMS) + + const queryParamMap = this.route.snapshot.queryParamMap + + const params = { + uuid: queryParamMap.get('uuid') + } + if (queryParamMap.has('logfile')) { + params['logfile'] = queryParamMap.get('logfile') + const logfileSuffix = `(${params['logfile']})` + } + if (typeof BuiltinConfig !== 'undefined') { + params['websocket_url'] = BuiltinConfig['websocket_url'] + } else if (queryParamMap.has('websocket_url')) { + params['websocket_url'] = queryParamMap.get('websocket_url') + } else { + params['websocket_url'] = this.zuul.getWebsocketUrl('console-stream') + } + const ws = new WebSocket(params['websocket_url']) + + ws.onmessage = function (event) { + console.log('onmessage') + receiveBuffer = receiveBuffer + escapeLog(event.data) + } + + ws.onopen = function (event) { + console.log('onopen') + ws.send(JSON.stringify(params)) + } + + ws.onclose = function (event) { + console.log('onclose') + receiveBuffer = receiveBuffer + '\n--- END OF STREAM ---\n' + } + } +} diff --git a/web/styles/zuul.css b/web/styles/zuul.css new file mode 100644 index 000000000..419a1d08e --- /dev/null +++ b/web/styles/zuul.css @@ -0,0 +1,65 @@ +@import url('~bootstrap/dist/css/bootstrap.css'); + +.zuul-change { + margin-bottom: 10px; +} + +.zuul-change-id { + float: right; +} + +.zuul-job-result { + float: right; + width: 70px; + height: 15px; + margin: 2px 0 0 0; +} + +.zuul-change-total-result { + height: 10px; + width: 100px; + margin: 0; + display: inline-block; + vertical-align: middle; +} + +.zuul-spinner, +.zuul-spinner:hover { + opacity: 0; + transition: opacity 0.5s ease-out; + cursor: default; + pointer-events: none; +} + +.zuul-spinner-on, +.zuul-spinner-on:hover { + opacity: 1; + transition-duration: 0.2s; + cursor: progress; +} + +.zuul-change-cell { + padding-left: 5px; +} + +.zuul-change-job { + padding: 2px 8px; +} + +.zuul-job-name { + font-size: small; +} + +.zuul-non-voting-desc { + font-size: smaller; +} + +.zuul-patchset-header { + font-size: small; + padding: 8px 12px; + cursor: pointer; +} + +.form-inline > .form-group { + padding-right: 5px; +} diff --git a/web/tenants/tenant.ts b/web/tenants/tenant.ts new file mode 100644 index 000000000..a571bf707 --- /dev/null +++ b/web/tenants/tenant.ts @@ -0,0 +1,18 @@ +// Copyright 2018 Red Hat +// +// Licensed under the Apache License, Version 2.0 (the "License"); you may +// not use this file except in compliance with the License. You may obtain +// a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, WITHOUT +// WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the +// License for the specific language governing permissions and limitations +// under the License. + +class Tenant { + name: string + projects: number +} diff --git a/web/tenants/tenants.component.html b/web/tenants/tenants.component.html new file mode 100644 index 000000000..216003ff3 --- /dev/null +++ b/web/tenants/tenants.component.html @@ -0,0 +1,40 @@ +<!-- +Copyright 2017 Red Hat + +Licensed under the Apache License, Version 2.0 (the "License"); you may +not use this file except in compliance with the License. You may obtain +a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, WITHOUT +WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the +License for the specific language governing permissions and limitations +under the License. +--> +<div class="container-fluid"> + <!-- TODO(mordred) Make navigation smarter to handle tenants list --> + <table class="table table-hover table-condensed"> + <thead> + <tr> + <th>Name</th> + <th>Status</th> + <th>Jobs</th> + <th>Builds</th> + <th>Projects count</th> + <th>Queue size</th> + </tr> + </thead> + <tbody> + <tr *ngFor="let tenant of tenants"> + <td>{{ tenant.name }}</td> + <td><a [routerLink]="['/t', tenant.name, 'status.html']">status</a></td> + <td><a [routerLink]="['/t', tenant.name, 'jobs.html']">jobs</a></td> + <td><a [routerLink]="['/t', tenant.name, 'builds.html']">builds</a></td> + <td>{{ tenant.projects }}</td> + <td>{{ tenant.queue }}</td> + </tr> + </tbody> + </table> +</div> diff --git a/web/tenants/tenants.component.ts b/web/tenants/tenants.component.ts new file mode 100644 index 000000000..c43294a57 --- /dev/null +++ b/web/tenants/tenants.component.ts @@ -0,0 +1,38 @@ +// Copyright 2017 Red Hat +// +// Licensed under the Apache License, Version 2.0 (the "License"); you may +// not use this file except in compliance with the License. You may obtain +// a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, WITHOUT +// WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the +// License for the specific language governing permissions and limitations +// under the License. + +import { Component, OnInit } from '@angular/core' +import { HttpClient } from '@angular/common/http' + +import ZuulService from '../zuul/zuul.service' + +@Component({ + template: require('./tenants.component.html') +}) +export default class TenantsComponent implements OnInit { + + tenants: Tenant[] + + constructor(private http: HttpClient, private zuul: ZuulService) {} + + async ngOnInit() { + await this.zuul.setTenant() + this.tenantsFetch() + } + + tenantsFetch(): void { + this.http.get<Tenant[]>(this.zuul.getSourceUrl('tenants')) + .subscribe(tenants => { this.tenants = tenants }) + } +} diff --git a/web/yarn.lock b/web/yarn.lock deleted file mode 100644 index 025242168..000000000 --- a/web/yarn.lock +++ /dev/null @@ -1,8012 +0,0 @@ -# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. -# yarn lockfile v1 - - -"@types/c3@^0.6.0": - version "0.6.0" - resolved "https://registry.yarnpkg.com/@types/c3/-/c3-0.6.0.tgz#74fe73461f18386ae460e8113ea4883ab7fbeab1" - dependencies: - "@types/d3" "^4" - -"@types/d3-array@*": - version "1.2.1" - resolved "https://registry.yarnpkg.com/@types/d3-array/-/d3-array-1.2.1.tgz#e489605208d46a1c9d980d2e5772fa9c75d9ec65" - -"@types/d3-axis@*": - version "1.0.10" - resolved "https://registry.yarnpkg.com/@types/d3-axis/-/d3-axis-1.0.10.tgz#41d6b3ea9032f9531ec0d71d83bcf49294511210" - dependencies: - "@types/d3-selection" "*" - -"@types/d3-brush@*": - version "1.0.8" - resolved "https://registry.yarnpkg.com/@types/d3-brush/-/d3-brush-1.0.8.tgz#2bb9b93e58115da9e0c94ac2b865e34d3631b69b" - dependencies: - "@types/d3-selection" "*" - -"@types/d3-chord@*": - version "1.0.7" - resolved "https://registry.yarnpkg.com/@types/d3-chord/-/d3-chord-1.0.7.tgz#6cb982d84c02bf1b05874d921316451546fde9c3" - -"@types/d3-collection@*": - version "1.0.7" - resolved "https://registry.yarnpkg.com/@types/d3-collection/-/d3-collection-1.0.7.tgz#829e1db477d6bbbcdc038cbc489f22798752d707" - -"@types/d3-color@*": - version "1.2.1" - resolved "https://registry.yarnpkg.com/@types/d3-color/-/d3-color-1.2.1.tgz#26141c3c554e320edd40726b793570a3ae57397e" - -"@types/d3-dispatch@*": - version "1.0.6" - resolved "https://registry.yarnpkg.com/@types/d3-dispatch/-/d3-dispatch-1.0.6.tgz#19b173f669cd2ab7dd3d862e8037aae1a98c7508" - -"@types/d3-drag@*": - version "1.2.1" - resolved "https://registry.yarnpkg.com/@types/d3-drag/-/d3-drag-1.2.1.tgz#6394bcf2f6414140b3b0d521259cadc6fa1da926" - dependencies: - "@types/d3-selection" "*" - -"@types/d3-dsv@*": - version "1.0.33" - resolved "https://registry.yarnpkg.com/@types/d3-dsv/-/d3-dsv-1.0.33.tgz#18de1867927f7ec898671aef82f730f16d4c7fcb" - -"@types/d3-ease@*": - version "1.0.7" - resolved "https://registry.yarnpkg.com/@types/d3-ease/-/d3-ease-1.0.7.tgz#93a301868be9e15061f3d44343b1ab3f8acb6f09" - -"@types/d3-force@*": - version "1.1.1" - resolved "https://registry.yarnpkg.com/@types/d3-force/-/d3-force-1.1.1.tgz#185c18b77932df63457894bd36d0d6e9692546c0" - -"@types/d3-format@*": - version "1.3.0" - resolved "https://registry.yarnpkg.com/@types/d3-format/-/d3-format-1.3.0.tgz#c5e115fac8e6861ce656fe9861892b22f6b0cfcb" - -"@types/d3-geo@*": - version "1.10.3" - resolved "https://registry.yarnpkg.com/@types/d3-geo/-/d3-geo-1.10.3.tgz#3c01b2baa480e1108301096328dc2837e7ff4d8a" - dependencies: - "@types/geojson" "*" - -"@types/d3-hierarchy@*": - version "1.1.3" - resolved "https://registry.yarnpkg.com/@types/d3-hierarchy/-/d3-hierarchy-1.1.3.tgz#c5364aac0ff4491fc78f73b7c0d546b57b561230" - -"@types/d3-interpolate@*": - version "1.2.0" - resolved "https://registry.yarnpkg.com/@types/d3-interpolate/-/d3-interpolate-1.2.0.tgz#b5587e013f8afbbc0194046e6a66bb7b8f1c8619" - dependencies: - "@types/d3-color" "*" - -"@types/d3-path@*": - version "1.0.7" - resolved "https://registry.yarnpkg.com/@types/d3-path/-/d3-path-1.0.7.tgz#a0736fceed688a695f48265a82ff7a3369414b81" - -"@types/d3-polygon@*": - version "1.0.6" - resolved "https://registry.yarnpkg.com/@types/d3-polygon/-/d3-polygon-1.0.6.tgz#db25c630a2afb9191fe51ba61dd37baee9dd44c7" - -"@types/d3-quadtree@*": - version "1.0.6" - resolved "https://registry.yarnpkg.com/@types/d3-quadtree/-/d3-quadtree-1.0.6.tgz#45da9e603688ba90eedd3d40f6e504764e06e493" - -"@types/d3-queue@*": - version "3.0.6" - resolved "https://registry.yarnpkg.com/@types/d3-queue/-/d3-queue-3.0.6.tgz#2f5aa7eca3b153bb49687eaa570c10ab713439d3" - -"@types/d3-random@*": - version "1.1.1" - resolved "https://registry.yarnpkg.com/@types/d3-random/-/d3-random-1.1.1.tgz#38647ce2ff4ce7d0d56974334c1c4092513c8b9f" - -"@types/d3-request@*": - version "1.0.2" - resolved "https://registry.yarnpkg.com/@types/d3-request/-/d3-request-1.0.2.tgz#db9db8154f47816584706c6e6f702be66f22f4be" - dependencies: - "@types/d3-dsv" "*" - -"@types/d3-scale@^1": - version "1.0.13" - resolved "https://registry.yarnpkg.com/@types/d3-scale/-/d3-scale-1.0.13.tgz#8c89f73ea8adf81b849124683628aa834dcf545e" - dependencies: - "@types/d3-time" "*" - -"@types/d3-selection@*": - version "1.3.2" - resolved "https://registry.yarnpkg.com/@types/d3-selection/-/d3-selection-1.3.2.tgz#dd5661a560ba9ce3aba823c424b8d4a1bc7e833f" - -"@types/d3-shape@*": - version "1.2.3" - resolved "https://registry.yarnpkg.com/@types/d3-shape/-/d3-shape-1.2.3.tgz#cadc9f93a626db9190f306048a650df4ffa4e500" - dependencies: - "@types/d3-path" "*" - -"@types/d3-time-format@*": - version "2.1.0" - resolved "https://registry.yarnpkg.com/@types/d3-time-format/-/d3-time-format-2.1.0.tgz#011e0fb7937be34a9a8f580ae1e2f2f1336a8a22" - -"@types/d3-time@*": - version "1.0.8" - resolved "https://registry.yarnpkg.com/@types/d3-time/-/d3-time-1.0.8.tgz#6c083127b330b3c2fc65cd0f3a6e9cbd9607b28c" - -"@types/d3-timer@*": - version "1.0.7" - resolved "https://registry.yarnpkg.com/@types/d3-timer/-/d3-timer-1.0.7.tgz#053e6369d9485c9dc80bc62fc0851123341d7816" - -"@types/d3-transition@*": - version "1.1.2" - resolved "https://registry.yarnpkg.com/@types/d3-transition/-/d3-transition-1.1.2.tgz#1106fc3129decc9ad5682a9f52b2dfa52f14e57c" - dependencies: - "@types/d3-selection" "*" - -"@types/d3-voronoi@*": - version "1.1.7" - resolved "https://registry.yarnpkg.com/@types/d3-voronoi/-/d3-voronoi-1.1.7.tgz#c0a145cf04395927e01706ff6c4ff835c97a8ece" - -"@types/d3-zoom@*": - version "1.7.1" - resolved "https://registry.yarnpkg.com/@types/d3-zoom/-/d3-zoom-1.7.1.tgz#0d69be0bf5849cffb66f48e4258c838436b43822" - dependencies: - "@types/d3-interpolate" "*" - "@types/d3-selection" "*" - -"@types/d3@^4": - version "4.13.0" - resolved "https://registry.yarnpkg.com/@types/d3/-/d3-4.13.0.tgz#aae092b368266409cfbf19c611203145ec0d5f65" - dependencies: - "@types/d3-array" "*" - "@types/d3-axis" "*" - "@types/d3-brush" "*" - "@types/d3-chord" "*" - "@types/d3-collection" "*" - "@types/d3-color" "*" - "@types/d3-dispatch" "*" - "@types/d3-drag" "*" - "@types/d3-dsv" "*" - "@types/d3-ease" "*" - "@types/d3-force" "*" - "@types/d3-format" "*" - "@types/d3-geo" "*" - "@types/d3-hierarchy" "*" - "@types/d3-interpolate" "*" - "@types/d3-path" "*" - "@types/d3-polygon" "*" - "@types/d3-quadtree" "*" - "@types/d3-queue" "*" - "@types/d3-random" "*" - "@types/d3-request" "*" - "@types/d3-scale" "^1" - "@types/d3-selection" "*" - "@types/d3-shape" "*" - "@types/d3-time" "*" - "@types/d3-time-format" "*" - "@types/d3-timer" "*" - "@types/d3-transition" "*" - "@types/d3-voronoi" "*" - "@types/d3-zoom" "*" - -"@types/geojson@*": - version "7946.0.4" - resolved "https://registry.yarnpkg.com/@types/geojson/-/geojson-7946.0.4.tgz#4e049756383c3f055dd8f3d24e63fb543e98eb07" - -abab@^1.0.3: - version "1.0.4" - resolved "https://registry.yarnpkg.com/abab/-/abab-1.0.4.tgz#5faad9c2c07f60dd76770f71cf025b62a63cfd4e" - -abbrev@1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/abbrev/-/abbrev-1.1.1.tgz#f8f2c887ad10bf67f634f005b6987fed3179aac8" - -accepts@~1.3.4, accepts@~1.3.5: - version "1.3.5" - resolved "https://registry.yarnpkg.com/accepts/-/accepts-1.3.5.tgz#eb777df6011723a3b14e8a72c0805c8e86746bd2" - dependencies: - mime-types "~2.1.18" - negotiator "0.6.1" - -acorn-dynamic-import@^2.0.0: - version "2.0.2" - resolved "https://registry.yarnpkg.com/acorn-dynamic-import/-/acorn-dynamic-import-2.0.2.tgz#c752bd210bef679501b6c6cb7fc84f8f47158cc4" - dependencies: - acorn "^4.0.3" - -acorn-globals@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/acorn-globals/-/acorn-globals-3.1.0.tgz#fd8270f71fbb4996b004fa880ee5d46573a731bf" - dependencies: - acorn "^4.0.4" - -acorn-jsx@^3.0.0: - version "3.0.1" - resolved "https://registry.yarnpkg.com/acorn-jsx/-/acorn-jsx-3.0.1.tgz#afdf9488fb1ecefc8348f6fb22f464e32a58b36b" - dependencies: - acorn "^3.0.4" - -acorn-jsx@^4.1.1: - version "4.1.1" - resolved "https://registry.yarnpkg.com/acorn-jsx/-/acorn-jsx-4.1.1.tgz#e8e41e48ea2fe0c896740610ab6a4ffd8add225e" - dependencies: - acorn "^5.0.3" - -acorn@^3.0.4: - version "3.3.0" - resolved "https://registry.yarnpkg.com/acorn/-/acorn-3.3.0.tgz#45e37fb39e8da3f25baee3ff5369e2bb5f22017a" - -acorn@^4.0.3, acorn@^4.0.4: - version "4.0.13" - resolved "https://registry.yarnpkg.com/acorn/-/acorn-4.0.13.tgz#105495ae5361d697bd195c825192e1ad7f253787" - -acorn@^5.0.0, acorn@^5.0.3, acorn@^5.5.0, acorn@^5.6.0: - version "5.7.1" - resolved "https://registry.yarnpkg.com/acorn/-/acorn-5.7.1.tgz#f095829297706a7c9776958c0afc8930a9b9d9d8" - -address@1.0.3, address@^1.0.1: - version "1.0.3" - resolved "https://registry.yarnpkg.com/address/-/address-1.0.3.tgz#b5f50631f8d6cec8bd20c963963afb55e06cbce9" - -ajv-keywords@^2.0.0: - version "2.1.1" - resolved "https://registry.yarnpkg.com/ajv-keywords/-/ajv-keywords-2.1.1.tgz#617997fc5f60576894c435f940d819e135b80762" - -ajv-keywords@^3.0.0: - version "3.2.0" - resolved "https://registry.yarnpkg.com/ajv-keywords/-/ajv-keywords-3.2.0.tgz#e86b819c602cf8821ad637413698f1dec021847a" - -ajv@^5.0.0, ajv@^5.1.5, ajv@^5.2.0, ajv@^5.3.0: - version "5.5.2" - resolved "https://registry.yarnpkg.com/ajv/-/ajv-5.5.2.tgz#73b5eeca3fab653e3d3f9422b341ad42205dc965" - dependencies: - co "^4.6.0" - fast-deep-equal "^1.0.0" - fast-json-stable-stringify "^2.0.0" - json-schema-traverse "^0.3.0" - -ajv@^6.0.1, ajv@^6.5.0: - version "6.5.2" - resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.5.2.tgz#678495f9b82f7cca6be248dd92f59bff5e1f4360" - dependencies: - fast-deep-equal "^2.0.1" - fast-json-stable-stringify "^2.0.0" - json-schema-traverse "^0.4.1" - uri-js "^4.2.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" - -alphanum-sort@^1.0.1, alphanum-sort@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/alphanum-sort/-/alphanum-sort-1.0.2.tgz#97a1119649b211ad33691d9f9f486a8ec9fbe0a3" - -amdefine@>=0.0.4: - version "1.0.1" - resolved "https://registry.yarnpkg.com/amdefine/-/amdefine-1.0.1.tgz#4a5282ac164729e93619bcfd3ad151f817ce91f5" - -ansi-align@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/ansi-align/-/ansi-align-2.0.0.tgz#c36aeccba563b89ceb556f3690f0b1d9e3547f7f" - dependencies: - string-width "^2.0.0" - -ansi-escapes@^1.4.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-1.4.0.tgz#d3a8a83b319aa67793662b13e761c7911422306e" - -ansi-escapes@^3.0.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-3.1.0.tgz#f73207bb81207d75fd6c83f125af26eea378ca30" - -ansi-html@0.0.7: - version "0.0.7" - resolved "https://registry.yarnpkg.com/ansi-html/-/ansi-html-0.0.7.tgz#813584021962a9e9e6fd039f940d12f56ca7859e" - -ansi-regex@^2.0.0, ansi-regex@^2.1.1: - version "2.1.1" - resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-2.1.1.tgz#c3b33ab5ee360d86e0e628f0468ae7ef27d654df" - -ansi-regex@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-3.0.0.tgz#ed0317c322064f79466c02966bddb605ab37d998" - -ansi-styles@^2.2.1: - version "2.2.1" - resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-2.2.1.tgz#b432dd3358b634cf75e1e4664368240533c1ddbe" - -ansi-styles@^3.0.0, ansi-styles@^3.2.1: - version "3.2.1" - resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-3.2.1.tgz#41fbb20243e50b12be0f04b8dedbf07520ce841d" - dependencies: - color-convert "^1.9.0" - -anymatch@^1.3.0: - version "1.3.2" - resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-1.3.2.tgz#553dcb8f91e3c889845dfdba34c77721b90b9d7a" - dependencies: - micromatch "^2.1.5" - normalize-path "^2.0.0" - -anymatch@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-2.0.0.tgz#bcb24b4f37934d9aa7ac17b4adaf89e7c76ef2eb" - dependencies: - micromatch "^3.1.4" - normalize-path "^2.1.1" - -append-transform@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/append-transform/-/append-transform-1.0.0.tgz#046a52ae582a228bd72f58acfbe2967c678759ab" - dependencies: - default-require-extensions "^2.0.0" - -aproba@^1.0.3: - version "1.2.0" - resolved "https://registry.yarnpkg.com/aproba/-/aproba-1.2.0.tgz#6802e6264efd18c790a1b0d517f0f2627bf2c94a" - -are-we-there-yet@~1.1.2: - version "1.1.5" - resolved "https://registry.yarnpkg.com/are-we-there-yet/-/are-we-there-yet-1.1.5.tgz#4b35c2944f062a8bfcda66410760350fe9ddfc21" - dependencies: - delegates "^1.0.0" - readable-stream "^2.0.6" - -argparse@^1.0.7: - version "1.0.10" - resolved "https://registry.yarnpkg.com/argparse/-/argparse-1.0.10.tgz#bcd6791ea5ae09725e17e5ad988134cd40b3d911" - dependencies: - sprintf-js "~1.0.2" - -aria-query@^0.7.0: - version "0.7.1" - resolved "https://registry.yarnpkg.com/aria-query/-/aria-query-0.7.1.tgz#26cbb5aff64144b0a825be1846e0b16cfa00b11e" - dependencies: - ast-types-flow "0.0.7" - commander "^2.11.0" - -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-diff@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/arr-diff/-/arr-diff-4.0.0.tgz#d6461074febfec71e7e15235761a329a5dc7c520" - -arr-flatten@^1.0.1, arr-flatten@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/arr-flatten/-/arr-flatten-1.1.0.tgz#36048bbff4e7b47e136644316c99669ea5ae91f1" - -arr-union@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/arr-union/-/arr-union-3.1.0.tgz#e39b09aea9def866a8f206e288af63919bae39c4" - -array-equal@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/array-equal/-/array-equal-1.0.0.tgz#8c2a5ef2472fd9ea742b04c77a75093ba2757c93" - -array-filter@~0.0.0: - version "0.0.1" - resolved "https://registry.yarnpkg.com/array-filter/-/array-filter-0.0.1.tgz#7da8cf2e26628ed732803581fd21f67cacd2eeec" - -array-find-index@^1.0.1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/array-find-index/-/array-find-index-1.0.2.tgz#df010aa1287e164bbda6f9723b0a96a1ec4187a1" - -array-flatten@1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/array-flatten/-/array-flatten-1.1.1.tgz#9a5f699051b1e7073328f2a008968b64ea2955d2" - -array-flatten@^2.1.0: - version "2.1.1" - resolved "https://registry.yarnpkg.com/array-flatten/-/array-flatten-2.1.1.tgz#426bb9da84090c1838d812c8150af20a8331e296" - -array-includes@^3.0.3: - version "3.0.3" - resolved "https://registry.yarnpkg.com/array-includes/-/array-includes-3.0.3.tgz#184b48f62d92d7452bb31b323165c7f8bd02266d" - dependencies: - define-properties "^1.1.2" - es-abstract "^1.7.0" - -array-map@~0.0.0: - version "0.0.0" - resolved "https://registry.yarnpkg.com/array-map/-/array-map-0.0.0.tgz#88a2bab73d1cf7bcd5c1b118a003f66f665fa662" - -array-reduce@~0.0.0: - version "0.0.0" - resolved "https://registry.yarnpkg.com/array-reduce/-/array-reduce-0.0.0.tgz#173899d3ffd1c7d9383e4479525dbe278cab5f2b" - -array-union@^1.0.1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/array-union/-/array-union-1.0.2.tgz#9a34410e4f4e3da23dea375be5be70f24778ec39" - dependencies: - array-uniq "^1.0.1" - -array-uniq@^1.0.1: - version "1.0.3" - resolved "https://registry.yarnpkg.com/array-uniq/-/array-uniq-1.0.3.tgz#af6ac877a25cc7f74e058894753858dfdb24fdb6" - -array-unique@^0.2.1: - version "0.2.1" - resolved "https://registry.yarnpkg.com/array-unique/-/array-unique-0.2.1.tgz#a1d97ccafcbc2625cc70fadceb36a50c58b01a53" - -array-unique@^0.3.2: - version "0.3.2" - resolved "https://registry.yarnpkg.com/array-unique/-/array-unique-0.3.2.tgz#a894b75d4bc4f6cd679ef3244a9fd8f46ae2d428" - -arrify@^1.0.0, arrify@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/arrify/-/arrify-1.0.1.tgz#898508da2226f380df904728456849c1501a4b0d" - -asap@~2.0.3: - version "2.0.6" - resolved "https://registry.yarnpkg.com/asap/-/asap-2.0.6.tgz#e50347611d7e690943208bbdafebcbc2fb866d46" - -asn1.js@^4.0.0: - version "4.10.1" - resolved "https://registry.yarnpkg.com/asn1.js/-/asn1.js-4.10.1.tgz#b9c2bf5805f1e64aadeed6df3a2bfafb5a73f5a0" - dependencies: - bn.js "^4.0.0" - inherits "^2.0.1" - minimalistic-assert "^1.0.0" - -asn1@~0.2.3: - version "0.2.4" - resolved "https://registry.yarnpkg.com/asn1/-/asn1-0.2.4.tgz#8d2475dfab553bb33e77b54e59e880bb8ce23136" - dependencies: - safer-buffer "~2.1.0" - -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@^1.1.1: - version "1.4.1" - resolved "https://registry.yarnpkg.com/assert/-/assert-1.4.1.tgz#99912d591836b5a6f5b345c0f07eefc08fc65d91" - dependencies: - util "0.10.3" - -assign-symbols@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/assign-symbols/-/assign-symbols-1.0.0.tgz#59667f41fadd4f20ccbc2bb96b8d4f7f78ec0367" - -ast-types-flow@0.0.7: - version "0.0.7" - resolved "https://registry.yarnpkg.com/ast-types-flow/-/ast-types-flow-0.0.7.tgz#f70b735c6bca1a5c9c22d982c3e39e7feba3bdad" - -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, async@^1.5.2: - version "1.5.2" - resolved "https://registry.yarnpkg.com/async/-/async-1.5.2.tgz#ec6a61ae56480c0c3cb241c95618e20892f9672a" - -async@^2.1.2, async@^2.1.4, async@^2.4.1: - version "2.6.1" - resolved "https://registry.yarnpkg.com/async/-/async-2.6.1.tgz#b245a23ca71930044ec53fa46aa00a3e87c6a610" - dependencies: - lodash "^4.17.10" - -asynckit@^0.4.0: - version "0.4.0" - resolved "https://registry.yarnpkg.com/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79" - -atob@^2.1.1: - version "2.1.1" - resolved "https://registry.yarnpkg.com/atob/-/atob-2.1.1.tgz#ae2d5a729477f289d60dd7f96a6314a22dd6c22a" - -autoprefixer@7.1.6: - version "7.1.6" - resolved "https://registry.yarnpkg.com/autoprefixer/-/autoprefixer-7.1.6.tgz#fb933039f74af74a83e71225ce78d9fd58ba84d7" - dependencies: - browserslist "^2.5.1" - caniuse-lite "^1.0.30000748" - normalize-range "^0.1.2" - num2fraction "^1.2.2" - postcss "^6.0.13" - postcss-value-parser "^3.2.3" - -autoprefixer@^6.3.1: - version "6.7.7" - resolved "https://registry.yarnpkg.com/autoprefixer/-/autoprefixer-6.7.7.tgz#1dbd1c835658e35ce3f9984099db00585c782014" - dependencies: - browserslist "^1.7.6" - caniuse-db "^1.0.30000634" - normalize-range "^0.1.2" - num2fraction "^1.2.2" - postcss "^5.2.16" - postcss-value-parser "^3.2.3" - -aws-sign2@~0.7.0: - version "0.7.0" - resolved "https://registry.yarnpkg.com/aws-sign2/-/aws-sign2-0.7.0.tgz#b46e890934a9591f2d2f6f86d7e6a9f1b3fe76a8" - -aws4@^1.8.0: - version "1.8.0" - resolved "https://registry.yarnpkg.com/aws4/-/aws4-1.8.0.tgz#f0e003d9ca9e7f59c7a508945d7b2ef9a04a542f" - -axios@^0.18.0: - version "0.18.0" - resolved "https://registry.yarnpkg.com/axios/-/axios-0.18.0.tgz#32d53e4851efdc0a11993b6cd000789d70c05102" - dependencies: - follow-redirects "^1.3.0" - is-buffer "^1.1.5" - -axobject-query@^0.1.0: - version "0.1.0" - resolved "https://registry.yarnpkg.com/axobject-query/-/axobject-query-0.1.0.tgz#62f59dbc59c9f9242759ca349960e7a2fe3c36c0" - dependencies: - ast-types-flow "0.0.7" - -babel-code-frame@6.26.0, babel-code-frame@^6.11.0, babel-code-frame@^6.22.0, babel-code-frame@^6.26.0: - version "6.26.0" - resolved "https://registry.yarnpkg.com/babel-code-frame/-/babel-code-frame-6.26.0.tgz#63fd43f7dc1e3bb7ce35947db8fe369a3f58c74b" - dependencies: - chalk "^1.1.3" - esutils "^2.0.2" - js-tokens "^3.0.2" - -babel-core@6.26.0: - version "6.26.0" - resolved "https://registry.yarnpkg.com/babel-core/-/babel-core-6.26.0.tgz#af32f78b31a6fcef119c87b0fd8d9753f03a0bb8" - dependencies: - babel-code-frame "^6.26.0" - babel-generator "^6.26.0" - babel-helpers "^6.24.1" - babel-messages "^6.23.0" - babel-register "^6.26.0" - babel-runtime "^6.26.0" - babel-template "^6.26.0" - babel-traverse "^6.26.0" - babel-types "^6.26.0" - babylon "^6.18.0" - convert-source-map "^1.5.0" - debug "^2.6.8" - json5 "^0.5.1" - lodash "^4.17.4" - minimatch "^3.0.4" - path-is-absolute "^1.0.1" - private "^0.1.7" - slash "^1.0.0" - source-map "^0.5.6" - -babel-core@^6.0.0, babel-core@^6.26.0: - version "6.26.3" - resolved "https://registry.yarnpkg.com/babel-core/-/babel-core-6.26.3.tgz#b2e2f09e342d0f0c88e2f02e067794125e75c207" - dependencies: - babel-code-frame "^6.26.0" - babel-generator "^6.26.0" - babel-helpers "^6.24.1" - babel-messages "^6.23.0" - babel-register "^6.26.0" - babel-runtime "^6.26.0" - babel-template "^6.26.0" - babel-traverse "^6.26.0" - babel-types "^6.26.0" - babylon "^6.18.0" - convert-source-map "^1.5.1" - debug "^2.6.9" - json5 "^0.5.1" - lodash "^4.17.4" - minimatch "^3.0.4" - path-is-absolute "^1.0.1" - private "^0.1.8" - slash "^1.0.0" - source-map "^0.5.7" - -babel-eslint@7.2.3: - version "7.2.3" - resolved "https://registry.yarnpkg.com/babel-eslint/-/babel-eslint-7.2.3.tgz#b2fe2d80126470f5c19442dc757253a897710827" - dependencies: - babel-code-frame "^6.22.0" - babel-traverse "^6.23.1" - babel-types "^6.23.0" - babylon "^6.17.0" - -babel-generator@^6.18.0, babel-generator@^6.26.0: - version "6.26.1" - resolved "https://registry.yarnpkg.com/babel-generator/-/babel-generator-6.26.1.tgz#1844408d3b8f0d35a404ea7ac180f087a601bd90" - dependencies: - babel-messages "^6.23.0" - babel-runtime "^6.26.0" - babel-types "^6.26.0" - detect-indent "^4.0.0" - jsesc "^1.3.0" - lodash "^4.17.4" - source-map "^0.5.7" - trim-right "^1.0.1" - -babel-helper-builder-binary-assignment-operator-visitor@^6.24.1: - version "6.24.1" - resolved "https://registry.yarnpkg.com/babel-helper-builder-binary-assignment-operator-visitor/-/babel-helper-builder-binary-assignment-operator-visitor-6.24.1.tgz#cce4517ada356f4220bcae8a02c2b346f9a56664" - dependencies: - babel-helper-explode-assignable-expression "^6.24.1" - babel-runtime "^6.22.0" - babel-types "^6.24.1" - -babel-helper-builder-react-jsx@^6.24.1: - version "6.26.0" - resolved "https://registry.yarnpkg.com/babel-helper-builder-react-jsx/-/babel-helper-builder-react-jsx-6.26.0.tgz#39ff8313b75c8b65dceff1f31d383e0ff2a408a0" - dependencies: - babel-runtime "^6.26.0" - babel-types "^6.26.0" - esutils "^2.0.2" - -babel-helper-call-delegate@^6.24.1: - version "6.24.1" - resolved "https://registry.yarnpkg.com/babel-helper-call-delegate/-/babel-helper-call-delegate-6.24.1.tgz#ece6aacddc76e41c3461f88bfc575bd0daa2df8d" - dependencies: - babel-helper-hoist-variables "^6.24.1" - babel-runtime "^6.22.0" - babel-traverse "^6.24.1" - babel-types "^6.24.1" - -babel-helper-define-map@^6.24.1: - version "6.26.0" - resolved "https://registry.yarnpkg.com/babel-helper-define-map/-/babel-helper-define-map-6.26.0.tgz#a5f56dab41a25f97ecb498c7ebaca9819f95be5f" - dependencies: - babel-helper-function-name "^6.24.1" - babel-runtime "^6.26.0" - babel-types "^6.26.0" - lodash "^4.17.4" - -babel-helper-explode-assignable-expression@^6.24.1: - version "6.24.1" - resolved "https://registry.yarnpkg.com/babel-helper-explode-assignable-expression/-/babel-helper-explode-assignable-expression-6.24.1.tgz#f25b82cf7dc10433c55f70592d5746400ac22caa" - dependencies: - babel-runtime "^6.22.0" - babel-traverse "^6.24.1" - babel-types "^6.24.1" - -babel-helper-function-name@^6.24.1: - version "6.24.1" - resolved "https://registry.yarnpkg.com/babel-helper-function-name/-/babel-helper-function-name-6.24.1.tgz#d3475b8c03ed98242a25b48351ab18399d3580a9" - dependencies: - babel-helper-get-function-arity "^6.24.1" - babel-runtime "^6.22.0" - babel-template "^6.24.1" - babel-traverse "^6.24.1" - babel-types "^6.24.1" - -babel-helper-get-function-arity@^6.24.1: - version "6.24.1" - resolved "https://registry.yarnpkg.com/babel-helper-get-function-arity/-/babel-helper-get-function-arity-6.24.1.tgz#8f7782aa93407c41d3aa50908f89b031b1b6853d" - dependencies: - babel-runtime "^6.22.0" - babel-types "^6.24.1" - -babel-helper-hoist-variables@^6.24.1: - version "6.24.1" - resolved "https://registry.yarnpkg.com/babel-helper-hoist-variables/-/babel-helper-hoist-variables-6.24.1.tgz#1ecb27689c9d25513eadbc9914a73f5408be7a76" - dependencies: - babel-runtime "^6.22.0" - babel-types "^6.24.1" - -babel-helper-optimise-call-expression@^6.24.1: - version "6.24.1" - resolved "https://registry.yarnpkg.com/babel-helper-optimise-call-expression/-/babel-helper-optimise-call-expression-6.24.1.tgz#f7a13427ba9f73f8f4fa993c54a97882d1244257" - dependencies: - babel-runtime "^6.22.0" - babel-types "^6.24.1" - -babel-helper-regex@^6.24.1: - version "6.26.0" - resolved "https://registry.yarnpkg.com/babel-helper-regex/-/babel-helper-regex-6.26.0.tgz#325c59f902f82f24b74faceed0363954f6495e72" - dependencies: - babel-runtime "^6.26.0" - babel-types "^6.26.0" - lodash "^4.17.4" - -babel-helper-remap-async-to-generator@^6.24.1: - version "6.24.1" - resolved "https://registry.yarnpkg.com/babel-helper-remap-async-to-generator/-/babel-helper-remap-async-to-generator-6.24.1.tgz#5ec581827ad723fecdd381f1c928390676e4551b" - dependencies: - babel-helper-function-name "^6.24.1" - babel-runtime "^6.22.0" - babel-template "^6.24.1" - babel-traverse "^6.24.1" - babel-types "^6.24.1" - -babel-helper-replace-supers@^6.24.1: - version "6.24.1" - resolved "https://registry.yarnpkg.com/babel-helper-replace-supers/-/babel-helper-replace-supers-6.24.1.tgz#bf6dbfe43938d17369a213ca8a8bf74b6a90ab1a" - dependencies: - babel-helper-optimise-call-expression "^6.24.1" - babel-messages "^6.23.0" - babel-runtime "^6.22.0" - babel-template "^6.24.1" - babel-traverse "^6.24.1" - babel-types "^6.24.1" - -babel-helpers@^6.24.1: - version "6.24.1" - resolved "https://registry.yarnpkg.com/babel-helpers/-/babel-helpers-6.24.1.tgz#3471de9caec388e5c850e597e58a26ddf37602b2" - dependencies: - babel-runtime "^6.22.0" - babel-template "^6.24.1" - -babel-jest@20.0.3, babel-jest@^20.0.3: - version "20.0.3" - resolved "https://registry.yarnpkg.com/babel-jest/-/babel-jest-20.0.3.tgz#e4a03b13dc10389e140fc645d09ffc4ced301671" - dependencies: - babel-core "^6.0.0" - babel-plugin-istanbul "^4.0.0" - babel-preset-jest "^20.0.3" - -babel-loader@7.1.2: - version "7.1.2" - resolved "https://registry.yarnpkg.com/babel-loader/-/babel-loader-7.1.2.tgz#f6cbe122710f1aa2af4d881c6d5b54358ca24126" - dependencies: - find-cache-dir "^1.0.0" - loader-utils "^1.0.2" - mkdirp "^0.5.1" - -babel-messages@^6.23.0: - version "6.23.0" - resolved "https://registry.yarnpkg.com/babel-messages/-/babel-messages-6.23.0.tgz#f3cdf4703858035b2a2951c6ec5edf6c62f2630e" - dependencies: - babel-runtime "^6.22.0" - -babel-plugin-check-es2015-constants@^6.22.0: - version "6.22.0" - resolved "https://registry.yarnpkg.com/babel-plugin-check-es2015-constants/-/babel-plugin-check-es2015-constants-6.22.0.tgz#35157b101426fd2ffd3da3f75c7d1e91835bbf8a" - dependencies: - babel-runtime "^6.22.0" - -babel-plugin-dynamic-import-node@1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/babel-plugin-dynamic-import-node/-/babel-plugin-dynamic-import-node-1.1.0.tgz#bd1d88ac7aaf98df4917c384373b04d971a2b37a" - dependencies: - babel-plugin-syntax-dynamic-import "^6.18.0" - babel-template "^6.26.0" - babel-types "^6.26.0" - -babel-plugin-istanbul@^4.0.0: - version "4.1.6" - resolved "https://registry.yarnpkg.com/babel-plugin-istanbul/-/babel-plugin-istanbul-4.1.6.tgz#36c59b2192efce81c5b378321b74175add1c9a45" - dependencies: - babel-plugin-syntax-object-rest-spread "^6.13.0" - find-up "^2.1.0" - istanbul-lib-instrument "^1.10.1" - test-exclude "^4.2.1" - -babel-plugin-jest-hoist@^20.0.3: - version "20.0.3" - resolved "https://registry.yarnpkg.com/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-20.0.3.tgz#afedc853bd3f8dc3548ea671fbe69d03cc2c1767" - -babel-plugin-syntax-async-functions@^6.8.0: - version "6.13.0" - resolved "https://registry.yarnpkg.com/babel-plugin-syntax-async-functions/-/babel-plugin-syntax-async-functions-6.13.0.tgz#cad9cad1191b5ad634bf30ae0872391e0647be95" - -babel-plugin-syntax-class-properties@^6.8.0: - version "6.13.0" - resolved "https://registry.yarnpkg.com/babel-plugin-syntax-class-properties/-/babel-plugin-syntax-class-properties-6.13.0.tgz#d7eb23b79a317f8543962c505b827c7d6cac27de" - -babel-plugin-syntax-dynamic-import@6.18.0, babel-plugin-syntax-dynamic-import@^6.18.0: - version "6.18.0" - resolved "https://registry.yarnpkg.com/babel-plugin-syntax-dynamic-import/-/babel-plugin-syntax-dynamic-import-6.18.0.tgz#8d6a26229c83745a9982a441051572caa179b1da" - -babel-plugin-syntax-exponentiation-operator@^6.8.0: - version "6.13.0" - resolved "https://registry.yarnpkg.com/babel-plugin-syntax-exponentiation-operator/-/babel-plugin-syntax-exponentiation-operator-6.13.0.tgz#9ee7e8337290da95288201a6a57f4170317830de" - -babel-plugin-syntax-flow@^6.18.0: - version "6.18.0" - resolved "https://registry.yarnpkg.com/babel-plugin-syntax-flow/-/babel-plugin-syntax-flow-6.18.0.tgz#4c3ab20a2af26aa20cd25995c398c4eb70310c8d" - -babel-plugin-syntax-jsx@^6.3.13, babel-plugin-syntax-jsx@^6.8.0: - version "6.18.0" - resolved "https://registry.yarnpkg.com/babel-plugin-syntax-jsx/-/babel-plugin-syntax-jsx-6.18.0.tgz#0af32a9a6e13ca7a3fd5069e62d7b0f58d0d8946" - -babel-plugin-syntax-object-rest-spread@^6.13.0, babel-plugin-syntax-object-rest-spread@^6.8.0: - version "6.13.0" - resolved "https://registry.yarnpkg.com/babel-plugin-syntax-object-rest-spread/-/babel-plugin-syntax-object-rest-spread-6.13.0.tgz#fd6536f2bce13836ffa3a5458c4903a597bb3bf5" - -babel-plugin-syntax-trailing-function-commas@^6.22.0: - version "6.22.0" - resolved "https://registry.yarnpkg.com/babel-plugin-syntax-trailing-function-commas/-/babel-plugin-syntax-trailing-function-commas-6.22.0.tgz#ba0360937f8d06e40180a43fe0d5616fff532cf3" - -babel-plugin-transform-async-to-generator@^6.22.0: - version "6.24.1" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-async-to-generator/-/babel-plugin-transform-async-to-generator-6.24.1.tgz#6536e378aff6cb1d5517ac0e40eb3e9fc8d08761" - dependencies: - babel-helper-remap-async-to-generator "^6.24.1" - babel-plugin-syntax-async-functions "^6.8.0" - babel-runtime "^6.22.0" - -babel-plugin-transform-class-properties@6.24.1: - version "6.24.1" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-class-properties/-/babel-plugin-transform-class-properties-6.24.1.tgz#6a79763ea61d33d36f37b611aa9def81a81b46ac" - dependencies: - babel-helper-function-name "^6.24.1" - babel-plugin-syntax-class-properties "^6.8.0" - babel-runtime "^6.22.0" - babel-template "^6.24.1" - -babel-plugin-transform-es2015-arrow-functions@^6.22.0: - version "6.22.0" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-arrow-functions/-/babel-plugin-transform-es2015-arrow-functions-6.22.0.tgz#452692cb711d5f79dc7f85e440ce41b9f244d221" - dependencies: - babel-runtime "^6.22.0" - -babel-plugin-transform-es2015-block-scoped-functions@^6.22.0: - version "6.22.0" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-block-scoped-functions/-/babel-plugin-transform-es2015-block-scoped-functions-6.22.0.tgz#bbc51b49f964d70cb8d8e0b94e820246ce3a6141" - dependencies: - babel-runtime "^6.22.0" - -babel-plugin-transform-es2015-block-scoping@^6.23.0: - version "6.26.0" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-block-scoping/-/babel-plugin-transform-es2015-block-scoping-6.26.0.tgz#d70f5299c1308d05c12f463813b0a09e73b1895f" - dependencies: - babel-runtime "^6.26.0" - babel-template "^6.26.0" - babel-traverse "^6.26.0" - babel-types "^6.26.0" - lodash "^4.17.4" - -babel-plugin-transform-es2015-classes@^6.23.0: - version "6.24.1" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-classes/-/babel-plugin-transform-es2015-classes-6.24.1.tgz#5a4c58a50c9c9461e564b4b2a3bfabc97a2584db" - dependencies: - babel-helper-define-map "^6.24.1" - babel-helper-function-name "^6.24.1" - babel-helper-optimise-call-expression "^6.24.1" - babel-helper-replace-supers "^6.24.1" - babel-messages "^6.23.0" - babel-runtime "^6.22.0" - babel-template "^6.24.1" - babel-traverse "^6.24.1" - babel-types "^6.24.1" - -babel-plugin-transform-es2015-computed-properties@^6.22.0: - version "6.24.1" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-computed-properties/-/babel-plugin-transform-es2015-computed-properties-6.24.1.tgz#6fe2a8d16895d5634f4cd999b6d3480a308159b3" - dependencies: - babel-runtime "^6.22.0" - babel-template "^6.24.1" - -babel-plugin-transform-es2015-destructuring@6.23.0, babel-plugin-transform-es2015-destructuring@^6.23.0: - version "6.23.0" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-destructuring/-/babel-plugin-transform-es2015-destructuring-6.23.0.tgz#997bb1f1ab967f682d2b0876fe358d60e765c56d" - dependencies: - babel-runtime "^6.22.0" - -babel-plugin-transform-es2015-duplicate-keys@^6.22.0: - version "6.24.1" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-duplicate-keys/-/babel-plugin-transform-es2015-duplicate-keys-6.24.1.tgz#73eb3d310ca969e3ef9ec91c53741a6f1576423e" - dependencies: - babel-runtime "^6.22.0" - babel-types "^6.24.1" - -babel-plugin-transform-es2015-for-of@^6.23.0: - version "6.23.0" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-for-of/-/babel-plugin-transform-es2015-for-of-6.23.0.tgz#f47c95b2b613df1d3ecc2fdb7573623c75248691" - dependencies: - babel-runtime "^6.22.0" - -babel-plugin-transform-es2015-function-name@^6.22.0: - version "6.24.1" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-function-name/-/babel-plugin-transform-es2015-function-name-6.24.1.tgz#834c89853bc36b1af0f3a4c5dbaa94fd8eacaa8b" - dependencies: - babel-helper-function-name "^6.24.1" - babel-runtime "^6.22.0" - babel-types "^6.24.1" - -babel-plugin-transform-es2015-literals@^6.22.0: - version "6.22.0" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-literals/-/babel-plugin-transform-es2015-literals-6.22.0.tgz#4f54a02d6cd66cf915280019a31d31925377ca2e" - dependencies: - babel-runtime "^6.22.0" - -babel-plugin-transform-es2015-modules-amd@^6.22.0, babel-plugin-transform-es2015-modules-amd@^6.24.1: - version "6.24.1" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-modules-amd/-/babel-plugin-transform-es2015-modules-amd-6.24.1.tgz#3b3e54017239842d6d19c3011c4bd2f00a00d154" - dependencies: - babel-plugin-transform-es2015-modules-commonjs "^6.24.1" - babel-runtime "^6.22.0" - babel-template "^6.24.1" - -babel-plugin-transform-es2015-modules-commonjs@^6.23.0, babel-plugin-transform-es2015-modules-commonjs@^6.24.1: - version "6.26.2" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-modules-commonjs/-/babel-plugin-transform-es2015-modules-commonjs-6.26.2.tgz#58a793863a9e7ca870bdc5a881117ffac27db6f3" - dependencies: - babel-plugin-transform-strict-mode "^6.24.1" - babel-runtime "^6.26.0" - babel-template "^6.26.0" - babel-types "^6.26.0" - -babel-plugin-transform-es2015-modules-systemjs@^6.23.0: - version "6.24.1" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-modules-systemjs/-/babel-plugin-transform-es2015-modules-systemjs-6.24.1.tgz#ff89a142b9119a906195f5f106ecf305d9407d23" - dependencies: - babel-helper-hoist-variables "^6.24.1" - babel-runtime "^6.22.0" - babel-template "^6.24.1" - -babel-plugin-transform-es2015-modules-umd@^6.23.0: - version "6.24.1" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-modules-umd/-/babel-plugin-transform-es2015-modules-umd-6.24.1.tgz#ac997e6285cd18ed6176adb607d602344ad38468" - dependencies: - babel-plugin-transform-es2015-modules-amd "^6.24.1" - babel-runtime "^6.22.0" - babel-template "^6.24.1" - -babel-plugin-transform-es2015-object-super@^6.22.0: - version "6.24.1" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-object-super/-/babel-plugin-transform-es2015-object-super-6.24.1.tgz#24cef69ae21cb83a7f8603dad021f572eb278f8d" - dependencies: - babel-helper-replace-supers "^6.24.1" - babel-runtime "^6.22.0" - -babel-plugin-transform-es2015-parameters@^6.23.0: - version "6.24.1" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-parameters/-/babel-plugin-transform-es2015-parameters-6.24.1.tgz#57ac351ab49caf14a97cd13b09f66fdf0a625f2b" - dependencies: - babel-helper-call-delegate "^6.24.1" - babel-helper-get-function-arity "^6.24.1" - babel-runtime "^6.22.0" - babel-template "^6.24.1" - babel-traverse "^6.24.1" - babel-types "^6.24.1" - -babel-plugin-transform-es2015-shorthand-properties@^6.22.0: - version "6.24.1" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-shorthand-properties/-/babel-plugin-transform-es2015-shorthand-properties-6.24.1.tgz#24f875d6721c87661bbd99a4622e51f14de38aa0" - dependencies: - babel-runtime "^6.22.0" - babel-types "^6.24.1" - -babel-plugin-transform-es2015-spread@^6.22.0: - version "6.22.0" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-spread/-/babel-plugin-transform-es2015-spread-6.22.0.tgz#d6d68a99f89aedc4536c81a542e8dd9f1746f8d1" - dependencies: - babel-runtime "^6.22.0" - -babel-plugin-transform-es2015-sticky-regex@^6.22.0: - version "6.24.1" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-sticky-regex/-/babel-plugin-transform-es2015-sticky-regex-6.24.1.tgz#00c1cdb1aca71112cdf0cf6126c2ed6b457ccdbc" - dependencies: - babel-helper-regex "^6.24.1" - babel-runtime "^6.22.0" - babel-types "^6.24.1" - -babel-plugin-transform-es2015-template-literals@^6.22.0: - version "6.22.0" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-template-literals/-/babel-plugin-transform-es2015-template-literals-6.22.0.tgz#a84b3450f7e9f8f1f6839d6d687da84bb1236d8d" - dependencies: - babel-runtime "^6.22.0" - -babel-plugin-transform-es2015-typeof-symbol@^6.23.0: - version "6.23.0" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-typeof-symbol/-/babel-plugin-transform-es2015-typeof-symbol-6.23.0.tgz#dec09f1cddff94b52ac73d505c84df59dcceb372" - dependencies: - babel-runtime "^6.22.0" - -babel-plugin-transform-es2015-unicode-regex@^6.22.0: - version "6.24.1" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-unicode-regex/-/babel-plugin-transform-es2015-unicode-regex-6.24.1.tgz#d38b12f42ea7323f729387f18a7c5ae1faeb35e9" - dependencies: - babel-helper-regex "^6.24.1" - babel-runtime "^6.22.0" - regexpu-core "^2.0.0" - -babel-plugin-transform-exponentiation-operator@^6.22.0: - version "6.24.1" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-exponentiation-operator/-/babel-plugin-transform-exponentiation-operator-6.24.1.tgz#2ab0c9c7f3098fa48907772bb813fe41e8de3a0e" - dependencies: - babel-helper-builder-binary-assignment-operator-visitor "^6.24.1" - babel-plugin-syntax-exponentiation-operator "^6.8.0" - babel-runtime "^6.22.0" - -babel-plugin-transform-flow-strip-types@^6.22.0: - version "6.22.0" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-flow-strip-types/-/babel-plugin-transform-flow-strip-types-6.22.0.tgz#84cb672935d43714fdc32bce84568d87441cf7cf" - dependencies: - babel-plugin-syntax-flow "^6.18.0" - babel-runtime "^6.22.0" - -babel-plugin-transform-object-rest-spread@6.26.0: - version "6.26.0" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-object-rest-spread/-/babel-plugin-transform-object-rest-spread-6.26.0.tgz#0f36692d50fef6b7e2d4b3ac1478137a963b7b06" - dependencies: - babel-plugin-syntax-object-rest-spread "^6.8.0" - babel-runtime "^6.26.0" - -babel-plugin-transform-react-constant-elements@6.23.0: - version "6.23.0" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-react-constant-elements/-/babel-plugin-transform-react-constant-elements-6.23.0.tgz#2f119bf4d2cdd45eb9baaae574053c604f6147dd" - dependencies: - babel-runtime "^6.22.0" - -babel-plugin-transform-react-display-name@^6.23.0: - version "6.25.0" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-react-display-name/-/babel-plugin-transform-react-display-name-6.25.0.tgz#67e2bf1f1e9c93ab08db96792e05392bf2cc28d1" - dependencies: - babel-runtime "^6.22.0" - -babel-plugin-transform-react-jsx-self@6.22.0, babel-plugin-transform-react-jsx-self@^6.22.0: - version "6.22.0" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-react-jsx-self/-/babel-plugin-transform-react-jsx-self-6.22.0.tgz#df6d80a9da2612a121e6ddd7558bcbecf06e636e" - dependencies: - babel-plugin-syntax-jsx "^6.8.0" - babel-runtime "^6.22.0" - -babel-plugin-transform-react-jsx-source@6.22.0, babel-plugin-transform-react-jsx-source@^6.22.0: - version "6.22.0" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-react-jsx-source/-/babel-plugin-transform-react-jsx-source-6.22.0.tgz#66ac12153f5cd2d17b3c19268f4bf0197f44ecd6" - dependencies: - babel-plugin-syntax-jsx "^6.8.0" - babel-runtime "^6.22.0" - -babel-plugin-transform-react-jsx@6.24.1, babel-plugin-transform-react-jsx@^6.24.1: - version "6.24.1" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-react-jsx/-/babel-plugin-transform-react-jsx-6.24.1.tgz#840a028e7df460dfc3a2d29f0c0d91f6376e66a3" - dependencies: - babel-helper-builder-react-jsx "^6.24.1" - babel-plugin-syntax-jsx "^6.8.0" - babel-runtime "^6.22.0" - -babel-plugin-transform-regenerator@6.26.0, babel-plugin-transform-regenerator@^6.22.0: - version "6.26.0" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-regenerator/-/babel-plugin-transform-regenerator-6.26.0.tgz#e0703696fbde27f0a3efcacf8b4dca2f7b3a8f2f" - dependencies: - regenerator-transform "^0.10.0" - -babel-plugin-transform-runtime@6.23.0: - version "6.23.0" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-runtime/-/babel-plugin-transform-runtime-6.23.0.tgz#88490d446502ea9b8e7efb0fe09ec4d99479b1ee" - dependencies: - babel-runtime "^6.22.0" - -babel-plugin-transform-strict-mode@^6.24.1: - version "6.24.1" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-strict-mode/-/babel-plugin-transform-strict-mode-6.24.1.tgz#d5faf7aa578a65bbe591cf5edae04a0c67020758" - dependencies: - babel-runtime "^6.22.0" - babel-types "^6.24.1" - -babel-preset-env@1.6.1: - version "1.6.1" - resolved "https://registry.yarnpkg.com/babel-preset-env/-/babel-preset-env-1.6.1.tgz#a18b564cc9b9afdf4aae57ae3c1b0d99188e6f48" - dependencies: - babel-plugin-check-es2015-constants "^6.22.0" - babel-plugin-syntax-trailing-function-commas "^6.22.0" - babel-plugin-transform-async-to-generator "^6.22.0" - babel-plugin-transform-es2015-arrow-functions "^6.22.0" - babel-plugin-transform-es2015-block-scoped-functions "^6.22.0" - babel-plugin-transform-es2015-block-scoping "^6.23.0" - babel-plugin-transform-es2015-classes "^6.23.0" - babel-plugin-transform-es2015-computed-properties "^6.22.0" - babel-plugin-transform-es2015-destructuring "^6.23.0" - babel-plugin-transform-es2015-duplicate-keys "^6.22.0" - babel-plugin-transform-es2015-for-of "^6.23.0" - babel-plugin-transform-es2015-function-name "^6.22.0" - babel-plugin-transform-es2015-literals "^6.22.0" - babel-plugin-transform-es2015-modules-amd "^6.22.0" - babel-plugin-transform-es2015-modules-commonjs "^6.23.0" - babel-plugin-transform-es2015-modules-systemjs "^6.23.0" - babel-plugin-transform-es2015-modules-umd "^6.23.0" - babel-plugin-transform-es2015-object-super "^6.22.0" - babel-plugin-transform-es2015-parameters "^6.23.0" - babel-plugin-transform-es2015-shorthand-properties "^6.22.0" - babel-plugin-transform-es2015-spread "^6.22.0" - babel-plugin-transform-es2015-sticky-regex "^6.22.0" - babel-plugin-transform-es2015-template-literals "^6.22.0" - babel-plugin-transform-es2015-typeof-symbol "^6.23.0" - babel-plugin-transform-es2015-unicode-regex "^6.22.0" - babel-plugin-transform-exponentiation-operator "^6.22.0" - babel-plugin-transform-regenerator "^6.22.0" - browserslist "^2.1.2" - invariant "^2.2.2" - semver "^5.3.0" - -babel-preset-flow@^6.23.0: - version "6.23.0" - resolved "https://registry.yarnpkg.com/babel-preset-flow/-/babel-preset-flow-6.23.0.tgz#e71218887085ae9a24b5be4169affb599816c49d" - dependencies: - babel-plugin-transform-flow-strip-types "^6.22.0" - -babel-preset-jest@^20.0.3: - version "20.0.3" - resolved "https://registry.yarnpkg.com/babel-preset-jest/-/babel-preset-jest-20.0.3.tgz#cbacaadecb5d689ca1e1de1360ebfc66862c178a" - dependencies: - babel-plugin-jest-hoist "^20.0.3" - -babel-preset-react-app@^3.1.1: - version "3.1.2" - resolved "https://registry.yarnpkg.com/babel-preset-react-app/-/babel-preset-react-app-3.1.2.tgz#49ba3681b917c4e5c73a5249d3ef4c48fae064e2" - dependencies: - babel-plugin-dynamic-import-node "1.1.0" - babel-plugin-syntax-dynamic-import "6.18.0" - babel-plugin-transform-class-properties "6.24.1" - babel-plugin-transform-es2015-destructuring "6.23.0" - babel-plugin-transform-object-rest-spread "6.26.0" - babel-plugin-transform-react-constant-elements "6.23.0" - babel-plugin-transform-react-jsx "6.24.1" - babel-plugin-transform-react-jsx-self "6.22.0" - babel-plugin-transform-react-jsx-source "6.22.0" - babel-plugin-transform-regenerator "6.26.0" - babel-plugin-transform-runtime "6.23.0" - babel-preset-env "1.6.1" - babel-preset-react "6.24.1" - -babel-preset-react@6.24.1: - version "6.24.1" - resolved "https://registry.yarnpkg.com/babel-preset-react/-/babel-preset-react-6.24.1.tgz#ba69dfaea45fc3ec639b6a4ecea6e17702c91380" - dependencies: - babel-plugin-syntax-jsx "^6.3.13" - babel-plugin-transform-react-display-name "^6.23.0" - babel-plugin-transform-react-jsx "^6.24.1" - babel-plugin-transform-react-jsx-self "^6.22.0" - babel-plugin-transform-react-jsx-source "^6.22.0" - babel-preset-flow "^6.23.0" - -babel-register@^6.26.0: - version "6.26.0" - resolved "https://registry.yarnpkg.com/babel-register/-/babel-register-6.26.0.tgz#6ed021173e2fcb486d7acb45c6009a856f647071" - dependencies: - babel-core "^6.26.0" - babel-runtime "^6.26.0" - core-js "^2.5.0" - home-or-tmp "^2.0.0" - lodash "^4.17.4" - mkdirp "^0.5.1" - source-map-support "^0.4.15" - -babel-runtime@6.26.0, babel-runtime@6.x.x, babel-runtime@^6.11.6, babel-runtime@^6.18.0, babel-runtime@^6.22.0, babel-runtime@^6.26.0: - version "6.26.0" - resolved "https://registry.yarnpkg.com/babel-runtime/-/babel-runtime-6.26.0.tgz#965c7058668e82b55d7bfe04ff2337bc8b5647fe" - dependencies: - core-js "^2.4.0" - regenerator-runtime "^0.11.0" - -babel-template@^6.16.0, babel-template@^6.24.1, babel-template@^6.26.0: - version "6.26.0" - resolved "https://registry.yarnpkg.com/babel-template/-/babel-template-6.26.0.tgz#de03e2d16396b069f46dd9fff8521fb1a0e35e02" - dependencies: - babel-runtime "^6.26.0" - babel-traverse "^6.26.0" - babel-types "^6.26.0" - babylon "^6.18.0" - lodash "^4.17.4" - -babel-traverse@^6.18.0, babel-traverse@^6.23.1, babel-traverse@^6.24.1, babel-traverse@^6.26.0: - version "6.26.0" - resolved "https://registry.yarnpkg.com/babel-traverse/-/babel-traverse-6.26.0.tgz#46a9cbd7edcc62c8e5c064e2d2d8d0f4035766ee" - dependencies: - babel-code-frame "^6.26.0" - babel-messages "^6.23.0" - babel-runtime "^6.26.0" - babel-types "^6.26.0" - babylon "^6.18.0" - debug "^2.6.8" - globals "^9.18.0" - invariant "^2.2.2" - lodash "^4.17.4" - -babel-types@^6.18.0, babel-types@^6.19.0, babel-types@^6.23.0, babel-types@^6.24.1, babel-types@^6.26.0: - version "6.26.0" - resolved "https://registry.yarnpkg.com/babel-types/-/babel-types-6.26.0.tgz#a3b073f94ab49eb6fa55cd65227a334380632497" - dependencies: - babel-runtime "^6.26.0" - esutils "^2.0.2" - lodash "^4.17.4" - to-fast-properties "^1.0.3" - -babylon@^6.17.0, babylon@^6.18.0: - version "6.18.0" - resolved "https://registry.yarnpkg.com/babylon/-/babylon-6.18.0.tgz#af2f3b88fa6f5c1e4c634d1a0f8eac4f55b395e3" - -balanced-match@^0.4.2: - version "0.4.2" - resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-0.4.2.tgz#cb3f3e3c732dc0f01ee70b403f302e61d7709838" - -balanced-match@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.0.tgz#89b4d199ab2bee49de164ea02b89ce462d71b767" - -base64-js@^1.0.2: - version "1.3.0" - resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-1.3.0.tgz#cab1e6118f051095e58b5281aea8c1cd22bfc0e3" - -base@^0.11.1: - version "0.11.2" - resolved "https://registry.yarnpkg.com/base/-/base-0.11.2.tgz#7bde5ced145b6d551a90db87f83c558b4eb48a8f" - dependencies: - cache-base "^1.0.1" - class-utils "^0.3.5" - component-emitter "^1.2.1" - define-property "^1.0.0" - isobject "^3.0.1" - mixin-deep "^1.2.0" - pascalcase "^0.1.1" - -batch@0.6.1: - version "0.6.1" - resolved "https://registry.yarnpkg.com/batch/-/batch-0.6.1.tgz#dc34314f4e679318093fc760272525f94bf25c16" - -bcrypt-pbkdf@^1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz#a4301d389b6a43f9b67ff3ca11a3f6637e360e9e" - dependencies: - tweetnacl "^0.14.3" - -big.js@^3.1.3: - version "3.2.0" - resolved "https://registry.yarnpkg.com/big.js/-/big.js-3.2.0.tgz#a5fc298b81b9e0dca2e458824784b65c52ba588e" - -binary-extensions@^1.0.0: - version "1.11.0" - resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-1.11.0.tgz#46aa1751fb6a2f93ee5e689bb1087d4b14c6c205" - -bluebird@^3.4.7: - version "3.5.1" - resolved "https://registry.yarnpkg.com/bluebird/-/bluebird-3.5.1.tgz#d9551f9de98f1fcda1e683d17ee91a0602ee2eb9" - -bn.js@^4.0.0, bn.js@^4.1.0, bn.js@^4.1.1, bn.js@^4.4.0: - version "4.11.8" - resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-4.11.8.tgz#2cde09eb5ee341f484746bb0309b3253b1b1442f" - -body-parser@1.18.2: - version "1.18.2" - resolved "https://registry.yarnpkg.com/body-parser/-/body-parser-1.18.2.tgz#87678a19d84b47d859b83199bd59bce222b10454" - dependencies: - bytes "3.0.0" - content-type "~1.0.4" - debug "2.6.9" - depd "~1.1.1" - http-errors "~1.6.2" - iconv-lite "0.4.19" - on-finished "~2.3.0" - qs "6.5.1" - raw-body "2.3.2" - type-is "~1.6.15" - -bonjour@^3.5.0: - version "3.5.0" - resolved "https://registry.yarnpkg.com/bonjour/-/bonjour-3.5.0.tgz#8e890a183d8ee9a2393b3844c691a42bcf7bc9f5" - dependencies: - array-flatten "^2.1.0" - deep-equal "^1.0.1" - dns-equal "^1.0.0" - dns-txt "^2.0.2" - multicast-dns "^6.0.1" - multicast-dns-service-types "^1.1.0" - -boolbase@~1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/boolbase/-/boolbase-1.0.0.tgz#68dff5fbe60c51eb37725ea9e3ed310dcc1e776e" - -bootstrap-datepicker@^1.7.1: - version "1.8.0" - resolved "https://registry.yarnpkg.com/bootstrap-datepicker/-/bootstrap-datepicker-1.8.0.tgz#c63513931e6f09f16ae9f11b62f32d950df3958e" - dependencies: - jquery ">=1.7.1 <4.0.0" - -bootstrap-sass@^3.3.7: - version "3.3.7" - resolved "https://registry.yarnpkg.com/bootstrap-sass/-/bootstrap-sass-3.3.7.tgz#6596c7ab40f6637393323ab0bc80d064fc630498" - -bootstrap-select@1.12.2: - version "1.12.2" - resolved "https://registry.yarnpkg.com/bootstrap-select/-/bootstrap-select-1.12.2.tgz#58d095b3fd584b31443866fbe39b6fdd4e4e12a4" - dependencies: - jquery ">=1.8" - -bootstrap-slider-without-jquery@^10.0.0: - version "10.0.0" - resolved "https://registry.yarnpkg.com/bootstrap-slider-without-jquery/-/bootstrap-slider-without-jquery-10.0.0.tgz#5c304461b3b915037c7c118806c8ca08102f5de3" - -bootstrap-slider@^9.9.0: - version "9.10.0" - resolved "https://registry.yarnpkg.com/bootstrap-slider/-/bootstrap-slider-9.10.0.tgz#1103d6bc00cfbfa8cfc9a2599ab518c55643da3f" - -bootstrap-switch@~3.3.4: - version "3.3.4" - resolved "https://registry.yarnpkg.com/bootstrap-switch/-/bootstrap-switch-3.3.4.tgz#70e0aeb2a877c0dc766991de108e2170fc29a2ff" - -bootstrap-touchspin@~3.1.1: - version "3.1.1" - resolved "https://registry.yarnpkg.com/bootstrap-touchspin/-/bootstrap-touchspin-3.1.1.tgz#9779deac72aaf577e5e762b8512c747c871d9597" - -bootstrap@3.3.x, bootstrap@^3.3, bootstrap@~3.3.7: - version "3.3.7" - resolved "https://registry.yarnpkg.com/bootstrap/-/bootstrap-3.3.7.tgz#5a389394549f23330875a3b150656574f8a9eb71" - -boxen@^1.2.1: - version "1.3.0" - resolved "https://registry.yarnpkg.com/boxen/-/boxen-1.3.0.tgz#55c6c39a8ba58d9c61ad22cd877532deb665a20b" - dependencies: - ansi-align "^2.0.0" - camelcase "^4.0.0" - chalk "^2.0.1" - cli-boxes "^1.0.0" - string-width "^2.0.0" - term-size "^1.2.0" - widest-line "^2.0.0" - -brace-expansion@^1.0.0, brace-expansion@^1.1.7: - version "1.1.11" - resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd" - dependencies: - balanced-match "^1.0.0" - 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" - -braces@^2.3.0, braces@^2.3.1: - version "2.3.2" - resolved "https://registry.yarnpkg.com/braces/-/braces-2.3.2.tgz#5979fd3f14cd531565e5fa2df1abfff1dfaee729" - dependencies: - arr-flatten "^1.1.0" - array-unique "^0.3.2" - extend-shallow "^2.0.1" - fill-range "^4.0.0" - isobject "^3.0.1" - repeat-element "^1.1.2" - snapdragon "^0.8.1" - snapdragon-node "^2.0.1" - split-string "^3.0.2" - to-regex "^3.0.1" - -breakjs@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/breakjs/-/breakjs-1.0.0.tgz#ec8353a06862eb43962deae09072ee66a4cd8459" - -brorand@^1.0.1: - version "1.1.0" - resolved "https://registry.yarnpkg.com/brorand/-/brorand-1.1.0.tgz#12c25efe40a45e3c323eb8675a0a0ce57b22371f" - -browser-resolve@^1.11.2: - version "1.11.3" - resolved "https://registry.yarnpkg.com/browser-resolve/-/browser-resolve-1.11.3.tgz#9b7cbb3d0f510e4cb86bdbd796124d28b5890af6" - dependencies: - resolve "1.1.7" - -browserify-aes@^1.0.0, browserify-aes@^1.0.4: - version "1.2.0" - resolved "https://registry.yarnpkg.com/browserify-aes/-/browserify-aes-1.2.0.tgz#326734642f403dabc3003209853bb70ad428ef48" - dependencies: - buffer-xor "^1.0.3" - cipher-base "^1.0.0" - create-hash "^1.1.0" - evp_bytestokey "^1.0.3" - inherits "^2.0.1" - safe-buffer "^5.0.1" - -browserify-cipher@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/browserify-cipher/-/browserify-cipher-1.0.1.tgz#8d6474c1b870bfdabcd3bcfcc1934a10e94f15f0" - dependencies: - browserify-aes "^1.0.4" - browserify-des "^1.0.0" - evp_bytestokey "^1.0.0" - -browserify-des@^1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/browserify-des/-/browserify-des-1.0.2.tgz#3af4f1f59839403572f1c66204375f7a7f703e9c" - dependencies: - cipher-base "^1.0.1" - des.js "^1.0.0" - inherits "^2.0.1" - safe-buffer "^5.1.2" - -browserify-rsa@^4.0.0: - version "4.0.1" - resolved "https://registry.yarnpkg.com/browserify-rsa/-/browserify-rsa-4.0.1.tgz#21e0abfaf6f2029cf2fafb133567a701d4135524" - dependencies: - bn.js "^4.1.0" - randombytes "^2.0.1" - -browserify-sign@^4.0.0: - version "4.0.4" - resolved "https://registry.yarnpkg.com/browserify-sign/-/browserify-sign-4.0.4.tgz#aa4eb68e5d7b658baa6bf6a57e630cbd7a93d298" - dependencies: - bn.js "^4.1.1" - browserify-rsa "^4.0.0" - create-hash "^1.1.0" - create-hmac "^1.1.2" - elliptic "^6.0.0" - inherits "^2.0.1" - parse-asn1 "^5.0.0" - -browserify-zlib@^0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/browserify-zlib/-/browserify-zlib-0.2.0.tgz#2869459d9aa3be245fe8fe2ca1f46e2e7f54d73f" - dependencies: - pako "~1.0.5" - -browserslist@^1.3.6, browserslist@^1.5.2, browserslist@^1.7.6: - version "1.7.7" - resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-1.7.7.tgz#0bd76704258be829b2398bb50e4b62d1a166b0b9" - dependencies: - caniuse-db "^1.0.30000639" - electron-to-chromium "^1.2.7" - -browserslist@^2.1.2, browserslist@^2.5.1: - version "2.11.3" - resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-2.11.3.tgz#fe36167aed1bbcde4827ebfe71347a2cc70b99b2" - dependencies: - caniuse-lite "^1.0.30000792" - electron-to-chromium "^1.3.30" - -bser@1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/bser/-/bser-1.0.2.tgz#381116970b2a6deea5646dd15dd7278444b56169" - dependencies: - node-int64 "^0.4.0" - -bser@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/bser/-/bser-2.0.0.tgz#9ac78d3ed5d915804fd87acb158bc797147a1719" - dependencies: - node-int64 "^0.4.0" - -buffer-from@^1.0.0: - version "1.1.1" - resolved "https://registry.yarnpkg.com/buffer-from/-/buffer-from-1.1.1.tgz#32713bc028f75c02fdb710d7c7bcec1f2c6070ef" - -buffer-indexof@^1.0.0: - version "1.1.1" - resolved "https://registry.yarnpkg.com/buffer-indexof/-/buffer-indexof-1.1.1.tgz#52fabcc6a606d1a00302802648ef68f639da268c" - -buffer-xor@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/buffer-xor/-/buffer-xor-1.0.3.tgz#26e61ed1422fb70dd42e6e36729ed51d855fe8d9" - -buffer@^4.3.0: - version "4.9.1" - resolved "https://registry.yarnpkg.com/buffer/-/buffer-4.9.1.tgz#6d1bb601b07a4efced97094132093027c95bc298" - dependencies: - base64-js "^1.0.2" - ieee754 "^1.1.4" - isarray "^1.0.0" - -builtin-modules@^1.0.0, builtin-modules@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/builtin-modules/-/builtin-modules-1.1.1.tgz#270f076c5a72c02f5b65a47df94c5fe3a278892f" - -builtin-status-codes@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/builtin-status-codes/-/builtin-status-codes-3.0.0.tgz#85982878e21b98e1c66425e03d0174788f569ee8" - -bytes@3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/bytes/-/bytes-3.0.0.tgz#d32815404d689699f85a4ea4fa8755dd13a96048" - -c3@^0.4.11, c3@~0.4.11: - version "0.4.23" - resolved "https://registry.yarnpkg.com/c3/-/c3-0.4.23.tgz#32ece135d0ac6d124187be5c6935903699643002" - dependencies: - d3 "~3.5.0" - -cache-base@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/cache-base/-/cache-base-1.0.1.tgz#0a7f46416831c8b662ee36fe4e7c59d76f666ab2" - dependencies: - collection-visit "^1.0.0" - component-emitter "^1.2.1" - get-value "^2.0.6" - has-value "^1.0.0" - isobject "^3.0.1" - set-value "^2.0.0" - to-object-path "^0.3.0" - union-value "^1.0.0" - unset-value "^1.0.0" - -caller-path@^0.1.0: - version "0.1.0" - resolved "https://registry.yarnpkg.com/caller-path/-/caller-path-0.1.0.tgz#94085ef63581ecd3daa92444a8fe94e82577751f" - dependencies: - callsites "^0.2.0" - -callsites@^0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/callsites/-/callsites-0.2.0.tgz#afab96262910a7f33c19a5775825c69f34e350ca" - -callsites@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/callsites/-/callsites-2.0.0.tgz#06eb84f00eea413da86affefacbffb36093b3c50" - -camel-case@3.0.x: - version "3.0.0" - resolved "https://registry.yarnpkg.com/camel-case/-/camel-case-3.0.0.tgz#ca3c3688a4e9cf3a4cda777dc4dcbc713249cf73" - dependencies: - no-case "^2.2.0" - upper-case "^1.1.1" - -camelcase-keys@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/camelcase-keys/-/camelcase-keys-2.1.0.tgz#308beeaffdf28119051efa1d932213c91b8f92e7" - dependencies: - camelcase "^2.0.0" - map-obj "^1.0.0" - -camelcase@^1.0.2: - version "1.2.1" - resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-1.2.1.tgz#9bb5304d2e0b56698b2c758b08a3eaa9daa58a39" - -camelcase@^2.0.0: - version "2.1.1" - resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-2.1.1.tgz#7c1d16d679a1bbe59ca02cacecfb011e201f5a1f" - -camelcase@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-3.0.0.tgz#32fc4b9fcdaf845fcdf7e73bb97cac2261f0ab0a" - -camelcase@^4.0.0, camelcase@^4.1.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-4.1.0.tgz#d545635be1e33c542649c69173e5de6acfae34dd" - -caniuse-api@^1.5.2: - version "1.6.1" - resolved "https://registry.yarnpkg.com/caniuse-api/-/caniuse-api-1.6.1.tgz#b534e7c734c4f81ec5fbe8aca2ad24354b962c6c" - dependencies: - browserslist "^1.3.6" - caniuse-db "^1.0.30000529" - lodash.memoize "^4.1.2" - lodash.uniq "^4.5.0" - -caniuse-db@^1.0.30000529, caniuse-db@^1.0.30000634, caniuse-db@^1.0.30000639: - version "1.0.30000877" - resolved "https://registry.yarnpkg.com/caniuse-db/-/caniuse-db-1.0.30000877.tgz#29ea435fdbe8a671cc5b027a75e28a816c17c340" - -caniuse-lite@^1.0.30000748, caniuse-lite@^1.0.30000792: - version "1.0.30000876" - resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30000876.tgz#69fc1b696a35fd91089061aa916f677ee7057ada" - -capture-stack-trace@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/capture-stack-trace/-/capture-stack-trace-1.0.0.tgz#4a6fa07399c26bba47f0b2496b4d0fb408c5550d" - -case-sensitive-paths-webpack-plugin@2.1.1: - version "2.1.1" - resolved "https://registry.yarnpkg.com/case-sensitive-paths-webpack-plugin/-/case-sensitive-paths-webpack-plugin-2.1.1.tgz#3d29ced8c1f124bf6f53846fb3f5894731fdc909" - -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" - -chalk@1.1.3, chalk@^1.1.3: - 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" - -chalk@^2.0.0, chalk@^2.0.1, chalk@^2.1.0, chalk@^2.4.1: - version "2.4.1" - resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.1.tgz#18c49ab16a037b6eb0152cc83e3471338215b66e" - dependencies: - ansi-styles "^3.2.1" - escape-string-regexp "^1.0.5" - supports-color "^5.3.0" - -change-emitter@^0.1.2: - version "0.1.6" - resolved "https://registry.yarnpkg.com/change-emitter/-/change-emitter-0.1.6.tgz#e8b2fe3d7f1ab7d69a32199aff91ea6931409515" - -chardet@^0.4.0: - version "0.4.2" - resolved "https://registry.yarnpkg.com/chardet/-/chardet-0.4.2.tgz#b5473b33dc97c424e5d98dc87d55d4d8a29c8bf2" - -chokidar@^1.6.0: - version "1.7.0" - resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-1.7.0.tgz#798e689778151c8076b4b360e5edd28cda2bb468" - 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" - -chokidar@^2.0.2: - version "2.0.4" - resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-2.0.4.tgz#356ff4e2b0e8e43e322d18a372460bbcf3accd26" - dependencies: - anymatch "^2.0.0" - async-each "^1.0.0" - braces "^2.3.0" - glob-parent "^3.1.0" - inherits "^2.0.1" - is-binary-path "^1.0.0" - is-glob "^4.0.0" - lodash.debounce "^4.0.8" - normalize-path "^2.1.1" - path-is-absolute "^1.0.0" - readdirp "^2.0.0" - upath "^1.0.5" - optionalDependencies: - fsevents "^1.2.2" - -chownr@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/chownr/-/chownr-1.0.1.tgz#e2a75042a9551908bebd25b8523d5f9769d79181" - -ci-info@^1.0.0: - version "1.1.3" - resolved "https://registry.yarnpkg.com/ci-info/-/ci-info-1.1.3.tgz#710193264bb05c77b8c90d02f5aaf22216a667b2" - -cipher-base@^1.0.0, cipher-base@^1.0.1, cipher-base@^1.0.3: - version "1.0.4" - resolved "https://registry.yarnpkg.com/cipher-base/-/cipher-base-1.0.4.tgz#8760e4ecc272f4c363532f926d874aae2c1397de" - dependencies: - inherits "^2.0.1" - safe-buffer "^5.0.1" - -circular-json@^0.3.1: - version "0.3.3" - resolved "https://registry.yarnpkg.com/circular-json/-/circular-json-0.3.3.tgz#815c99ea84f6809529d2f45791bdf82711352d66" - -clap@^1.0.9: - version "1.2.3" - resolved "https://registry.yarnpkg.com/clap/-/clap-1.2.3.tgz#4f36745b32008492557f46412d66d50cb99bce51" - dependencies: - chalk "^1.1.3" - -class-utils@^0.3.5: - version "0.3.6" - resolved "https://registry.yarnpkg.com/class-utils/-/class-utils-0.3.6.tgz#f93369ae8b9a7ce02fd41faad0ca83033190c463" - dependencies: - arr-union "^3.1.0" - define-property "^0.2.5" - isobject "^3.0.0" - static-extend "^0.1.1" - -classnames@^2.2.0, classnames@^2.2.5: - version "2.2.6" - resolved "https://registry.yarnpkg.com/classnames/-/classnames-2.2.6.tgz#43935bffdd291f326dad0a205309b38d00f650ce" - -clean-css@4.1.x: - version "4.1.11" - resolved "https://registry.yarnpkg.com/clean-css/-/clean-css-4.1.11.tgz#2ecdf145aba38f54740f26cefd0ff3e03e125d6a" - dependencies: - source-map "0.5.x" - -cli-boxes@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/cli-boxes/-/cli-boxes-1.0.0.tgz#4fa917c3e59c94a004cd61f8ee509da651687143" - -cli-cursor@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/cli-cursor/-/cli-cursor-2.1.0.tgz#b35dac376479facc3e94747d41d0d0f5238ffcb5" - dependencies: - restore-cursor "^2.0.0" - -cli-width@^2.0.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/cli-width/-/cli-width-2.2.0.tgz#ff19ede8a9a5e579324147b0c11f0fbcbabed639" - -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.2.0: - 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" - -clone@^1.0.2: - version "1.0.4" - resolved "https://registry.yarnpkg.com/clone/-/clone-1.0.4.tgz#da309cc263df15994c688ca902179ca3c7cd7c7e" - -co@^4.6.0: - version "4.6.0" - resolved "https://registry.yarnpkg.com/co/-/co-4.6.0.tgz#6ea6bdf3d853ae54ccb8e47bfa0bf3f9031fb184" - -coa@~1.0.1: - version "1.0.4" - resolved "https://registry.yarnpkg.com/coa/-/coa-1.0.4.tgz#a9ef153660d6a86a8bdec0289a5c684d217432fd" - dependencies: - q "^1.1.2" - -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" - -collection-visit@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/collection-visit/-/collection-visit-1.0.0.tgz#4bc0373c164bc3291b4d368c829cf1a80a59dca0" - dependencies: - map-visit "^1.0.0" - object-visit "^1.0.0" - -color-convert@^1.3.0, color-convert@^1.9.0: - version "1.9.2" - resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-1.9.2.tgz#49881b8fba67df12a96bdf3f56c0aab9e7913147" - dependencies: - color-name "1.1.1" - -color-name@1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.1.tgz#4b1415304cf50028ea81643643bd82ea05803689" - -color-name@^1.0.0: - version "1.1.3" - resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.3.tgz#a7d0558bd89c42f795dd42328f740831ca53bc25" - -color-string@^0.3.0: - version "0.3.0" - resolved "https://registry.yarnpkg.com/color-string/-/color-string-0.3.0.tgz#27d46fb67025c5c2fa25993bfbf579e47841b991" - dependencies: - color-name "^1.0.0" - -color@^0.11.0: - version "0.11.4" - resolved "https://registry.yarnpkg.com/color/-/color-0.11.4.tgz#6d7b5c74fb65e841cd48792ad1ed5e07b904d764" - dependencies: - clone "^1.0.2" - color-convert "^1.3.0" - color-string "^0.3.0" - -colormin@^1.0.5: - version "1.1.2" - resolved "https://registry.yarnpkg.com/colormin/-/colormin-1.1.2.tgz#ea2f7420a72b96881a38aae59ec124a6f7298133" - dependencies: - color "^0.11.0" - css-color-names "0.0.4" - has "^1.0.1" - -colors@~1.1.2: - version "1.1.2" - resolved "https://registry.yarnpkg.com/colors/-/colors-1.1.2.tgz#168a4701756b6a7f51a12ce0c97bfa28c084ed63" - -combined-stream@1.0.6, combined-stream@~1.0.6: - version "1.0.6" - resolved "https://registry.yarnpkg.com/combined-stream/-/combined-stream-1.0.6.tgz#723e7df6e801ac5613113a7e445a9b69cb632818" - dependencies: - delayed-stream "~1.0.0" - -commander@2.16.x, commander@~2.16.0: - version "2.16.0" - resolved "https://registry.yarnpkg.com/commander/-/commander-2.16.0.tgz#f16390593996ceb4f3eeb020b31d78528f7f8a50" - -commander@^2.11.0: - version "2.17.1" - resolved "https://registry.yarnpkg.com/commander/-/commander-2.17.1.tgz#bd77ab7de6de94205ceacc72f1716d29f20a77bf" - -commondir@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/commondir/-/commondir-1.0.1.tgz#ddd800da0c66127393cca5950ea968a3aaf1253b" - -compare-versions@^3.1.0: - version "3.3.0" - resolved "https://registry.yarnpkg.com/compare-versions/-/compare-versions-3.3.0.tgz#af93ea705a96943f622ab309578b9b90586f39c3" - -component-emitter@^1.2.1: - version "1.2.1" - resolved "https://registry.yarnpkg.com/component-emitter/-/component-emitter-1.2.1.tgz#137918d6d78283f7df7a6b7c5a63e140e69425e6" - -compressible@~2.0.14: - version "2.0.14" - resolved "https://registry.yarnpkg.com/compressible/-/compressible-2.0.14.tgz#326c5f507fbb055f54116782b969a81b67a29da7" - dependencies: - mime-db ">= 1.34.0 < 2" - -compression@^1.5.2: - version "1.7.3" - resolved "https://registry.yarnpkg.com/compression/-/compression-1.7.3.tgz#27e0e176aaf260f7f2c2813c3e440adb9f1993db" - dependencies: - accepts "~1.3.5" - bytes "3.0.0" - compressible "~2.0.14" - debug "2.6.9" - on-headers "~1.0.1" - safe-buffer "5.1.2" - vary "~1.1.2" - -concat-map@0.0.1: - version "0.0.1" - resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" - -concat-stream@^1.6.0: - version "1.6.2" - resolved "https://registry.yarnpkg.com/concat-stream/-/concat-stream-1.6.2.tgz#904bdf194cd3122fc675c77fc4ac3d4ff0fd1a34" - dependencies: - buffer-from "^1.0.0" - inherits "^2.0.3" - readable-stream "^2.2.2" - typedarray "^0.0.6" - -configstore@^3.0.0: - version "3.1.2" - resolved "https://registry.yarnpkg.com/configstore/-/configstore-3.1.2.tgz#c6f25defaeef26df12dd33414b001fe81a543f8f" - dependencies: - dot-prop "^4.1.0" - graceful-fs "^4.1.2" - make-dir "^1.0.0" - unique-string "^1.0.0" - write-file-atomic "^2.0.0" - xdg-basedir "^3.0.0" - -connect-history-api-fallback@^1.3.0: - version "1.5.0" - resolved "https://registry.yarnpkg.com/connect-history-api-fallback/-/connect-history-api-fallback-1.5.0.tgz#b06873934bc5e344fef611a196a6faae0aee015a" - -console-browserify@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/console-browserify/-/console-browserify-1.1.0.tgz#f0241c45730a9fc6323b206dbf38edc741d0bb10" - dependencies: - date-now "^0.1.4" - -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" - -constants-browserify@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/constants-browserify/-/constants-browserify-1.0.0.tgz#c20b96d8c617748aaf1c16021760cd27fcb8cb75" - -contains-path@^0.1.0: - version "0.1.0" - resolved "https://registry.yarnpkg.com/contains-path/-/contains-path-0.1.0.tgz#fe8cf184ff6670b6baef01a9d4861a5cbec4120a" - -content-disposition@0.5.2: - version "0.5.2" - resolved "https://registry.yarnpkg.com/content-disposition/-/content-disposition-0.5.2.tgz#0cf68bb9ddf5f2be7961c3a85178cb85dba78cb4" - -content-type-parser@^1.0.1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/content-type-parser/-/content-type-parser-1.0.2.tgz#caabe80623e63638b2502fd4c7f12ff4ce2352e7" - -content-type@~1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/content-type/-/content-type-1.0.4.tgz#e138cc75e040c727b1966fe5e5f8c9aee256fe3b" - -convert-source-map@^1.4.0, convert-source-map@^1.5.0, convert-source-map@^1.5.1: - version "1.5.1" - resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-1.5.1.tgz#b8278097b9bc229365de5c62cf5fcaed8b5599e5" - -cookie-signature@1.0.6: - version "1.0.6" - resolved "https://registry.yarnpkg.com/cookie-signature/-/cookie-signature-1.0.6.tgz#e303a882b342cc3ee8ca513a79999734dab3ae2c" - -cookie@0.3.1: - version "0.3.1" - resolved "https://registry.yarnpkg.com/cookie/-/cookie-0.3.1.tgz#e7e0a1f9ef43b4c8ba925c5c5a96e806d16873bb" - -copy-descriptor@^0.1.0: - version "0.1.1" - resolved "https://registry.yarnpkg.com/copy-descriptor/-/copy-descriptor-0.1.1.tgz#676f6eb3c39997c2ee1ac3a924fd6124748f578d" - -core-js@^1.0.0: - version "1.2.7" - resolved "https://registry.yarnpkg.com/core-js/-/core-js-1.2.7.tgz#652294c14651db28fa93bd2d5ff2983a4f08c636" - -core-js@^2.4.0, core-js@^2.5.0: - version "2.5.7" - resolved "https://registry.yarnpkg.com/core-js/-/core-js-2.5.7.tgz#f972608ff0cead68b841a16a932d0b183791814e" - -core-util-is@1.0.2, 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" - -cosmiconfig@^2.1.0, cosmiconfig@^2.1.1: - version "2.2.2" - resolved "https://registry.yarnpkg.com/cosmiconfig/-/cosmiconfig-2.2.2.tgz#6173cebd56fac042c1f4390edf7af6c07c7cb892" - dependencies: - is-directory "^0.3.1" - js-yaml "^3.4.3" - minimist "^1.2.0" - object-assign "^4.1.0" - os-homedir "^1.0.1" - parse-json "^2.2.0" - require-from-string "^1.1.0" - -create-ecdh@^4.0.0: - version "4.0.3" - resolved "https://registry.yarnpkg.com/create-ecdh/-/create-ecdh-4.0.3.tgz#c9111b6f33045c4697f144787f9254cdc77c45ff" - dependencies: - bn.js "^4.1.0" - elliptic "^6.0.0" - -create-error-class@^3.0.0: - version "3.0.2" - resolved "https://registry.yarnpkg.com/create-error-class/-/create-error-class-3.0.2.tgz#06be7abef947a3f14a30fd610671d401bca8b7b6" - dependencies: - capture-stack-trace "^1.0.0" - -create-hash@^1.1.0, create-hash@^1.1.2: - version "1.2.0" - resolved "https://registry.yarnpkg.com/create-hash/-/create-hash-1.2.0.tgz#889078af11a63756bcfb59bd221996be3a9ef196" - dependencies: - cipher-base "^1.0.1" - inherits "^2.0.1" - md5.js "^1.3.4" - ripemd160 "^2.0.1" - sha.js "^2.4.0" - -create-hmac@^1.1.0, create-hmac@^1.1.2, create-hmac@^1.1.4: - version "1.1.7" - resolved "https://registry.yarnpkg.com/create-hmac/-/create-hmac-1.1.7.tgz#69170c78b3ab957147b2b8b04572e47ead2243ff" - dependencies: - cipher-base "^1.0.3" - create-hash "^1.1.0" - inherits "^2.0.1" - ripemd160 "^2.0.0" - safe-buffer "^5.0.1" - sha.js "^2.4.8" - -create-react-context@^0.2.1: - version "0.2.2" - resolved "https://registry.yarnpkg.com/create-react-context/-/create-react-context-0.2.2.tgz#9836542f9aaa22868cd7d4a6f82667df38019dca" - dependencies: - fbjs "^0.8.0" - gud "^1.0.0" - -cross-spawn@5.1.0, cross-spawn@^5.0.1, cross-spawn@^5.1.0: - version "5.1.0" - resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-5.1.0.tgz#e8bd0efee58fcff6f8f94510a0a554bbfa235449" - dependencies: - lru-cache "^4.0.1" - shebang-command "^1.2.0" - which "^1.2.9" - -cross-spawn@^6.0.5: - version "6.0.5" - resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-6.0.5.tgz#4a5ec7c64dfae22c3a14124dbacdee846d80cbc4" - dependencies: - nice-try "^1.0.4" - path-key "^2.0.1" - semver "^5.5.0" - shebang-command "^1.2.0" - which "^1.2.9" - -crypto-browserify@^3.11.0: - version "3.12.0" - resolved "https://registry.yarnpkg.com/crypto-browserify/-/crypto-browserify-3.12.0.tgz#396cf9f3137f03e4b8e532c58f698254e00f80ec" - dependencies: - browserify-cipher "^1.0.0" - browserify-sign "^4.0.0" - create-ecdh "^4.0.0" - create-hash "^1.1.0" - create-hmac "^1.1.0" - diffie-hellman "^5.0.0" - inherits "^2.0.1" - pbkdf2 "^3.0.3" - public-encrypt "^4.0.0" - randombytes "^2.0.0" - randomfill "^1.0.3" - -crypto-random-string@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/crypto-random-string/-/crypto-random-string-1.0.0.tgz#a230f64f568310e1498009940790ec99545bca7e" - -css-color-names@0.0.4: - version "0.0.4" - resolved "https://registry.yarnpkg.com/css-color-names/-/css-color-names-0.0.4.tgz#808adc2e79cf84738069b646cb20ec27beb629e0" - -css-element-queries@^1.0.1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/css-element-queries/-/css-element-queries-1.0.2.tgz#a32edfee4a5023688ef4d45f402077306d51d44c" - -css-loader@0.28.7: - version "0.28.7" - resolved "https://registry.yarnpkg.com/css-loader/-/css-loader-0.28.7.tgz#5f2ee989dd32edd907717f953317656160999c1b" - dependencies: - babel-code-frame "^6.11.0" - css-selector-tokenizer "^0.7.0" - cssnano ">=2.6.1 <4" - icss-utils "^2.1.0" - loader-utils "^1.0.2" - lodash.camelcase "^4.3.0" - object-assign "^4.0.1" - postcss "^5.0.6" - postcss-modules-extract-imports "^1.0.0" - postcss-modules-local-by-default "^1.0.1" - postcss-modules-scope "^1.0.0" - postcss-modules-values "^1.1.0" - postcss-value-parser "^3.3.0" - source-list-map "^2.0.0" - -css-select@^1.1.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/css-select/-/css-select-1.2.0.tgz#2b3a110539c5355f1cd8d314623e870b121ec858" - dependencies: - boolbase "~1.0.0" - css-what "2.1" - domutils "1.5.1" - nth-check "~1.0.1" - -css-selector-tokenizer@^0.7.0: - version "0.7.0" - resolved "https://registry.yarnpkg.com/css-selector-tokenizer/-/css-selector-tokenizer-0.7.0.tgz#e6988474ae8c953477bf5e7efecfceccd9cf4c86" - dependencies: - cssesc "^0.1.0" - fastparse "^1.1.1" - regexpu-core "^1.0.0" - -css-what@2.1: - version "2.1.0" - resolved "https://registry.yarnpkg.com/css-what/-/css-what-2.1.0.tgz#9467d032c38cfaefb9f2d79501253062f87fa1bd" - -cssesc@^0.1.0: - version "0.1.0" - resolved "https://registry.yarnpkg.com/cssesc/-/cssesc-0.1.0.tgz#c814903e45623371a0477b40109aaafbeeaddbb4" - -"cssnano@>=2.6.1 <4": - version "3.10.0" - resolved "https://registry.yarnpkg.com/cssnano/-/cssnano-3.10.0.tgz#4f38f6cea2b9b17fa01490f23f1dc68ea65c1c38" - dependencies: - autoprefixer "^6.3.1" - decamelize "^1.1.2" - defined "^1.0.0" - has "^1.0.1" - object-assign "^4.0.1" - postcss "^5.0.14" - postcss-calc "^5.2.0" - postcss-colormin "^2.1.8" - postcss-convert-values "^2.3.4" - postcss-discard-comments "^2.0.4" - postcss-discard-duplicates "^2.0.1" - postcss-discard-empty "^2.0.1" - postcss-discard-overridden "^0.1.1" - postcss-discard-unused "^2.2.1" - postcss-filter-plugins "^2.0.0" - postcss-merge-idents "^2.1.5" - postcss-merge-longhand "^2.0.1" - postcss-merge-rules "^2.0.3" - postcss-minify-font-values "^1.0.2" - postcss-minify-gradients "^1.0.1" - postcss-minify-params "^1.0.4" - postcss-minify-selectors "^2.0.4" - postcss-normalize-charset "^1.1.0" - postcss-normalize-url "^3.0.7" - postcss-ordered-values "^2.1.0" - postcss-reduce-idents "^2.2.2" - postcss-reduce-initial "^1.0.0" - postcss-reduce-transforms "^1.0.3" - postcss-svgo "^2.1.1" - postcss-unique-selectors "^2.0.2" - postcss-value-parser "^3.2.3" - postcss-zindex "^2.0.1" - -csso@~2.3.1: - version "2.3.2" - resolved "https://registry.yarnpkg.com/csso/-/csso-2.3.2.tgz#ddd52c587033f49e94b71fc55569f252e8ff5f85" - dependencies: - clap "^1.0.9" - source-map "^0.5.3" - -cssom@0.3.x, "cssom@>= 0.3.2 < 0.4.0": - version "0.3.4" - resolved "https://registry.yarnpkg.com/cssom/-/cssom-0.3.4.tgz#8cd52e8a3acfd68d3aed38ee0a640177d2f9d797" - -"cssstyle@>= 0.2.37 < 0.3.0": - version "0.2.37" - resolved "https://registry.yarnpkg.com/cssstyle/-/cssstyle-0.2.37.tgz#541097234cb2513c83ceed3acddc27ff27987d54" - dependencies: - cssom "0.3.x" - -currently-unhandled@^0.4.1: - version "0.4.1" - resolved "https://registry.yarnpkg.com/currently-unhandled/-/currently-unhandled-0.4.1.tgz#988df33feab191ef799a61369dd76c17adf957ea" - dependencies: - array-find-index "^1.0.1" - -d3@~3.5.0, d3@~3.5.17: - version "3.5.17" - resolved "https://registry.yarnpkg.com/d3/-/d3-3.5.17.tgz#bc46748004378b21a360c9fc7cf5231790762fb8" - -d@1: - version "1.0.0" - resolved "https://registry.yarnpkg.com/d/-/d-1.0.0.tgz#754bb5bfe55451da69a58b94d45f4c5b0462d58f" - dependencies: - es5-ext "^0.10.9" - -damerau-levenshtein@^1.0.0: - version "1.0.4" - resolved "https://registry.yarnpkg.com/damerau-levenshtein/-/damerau-levenshtein-1.0.4.tgz#03191c432cb6eea168bb77f3a55ffdccb8978514" - -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" - -datatables.net-bs@>=1.10.9: - version "1.10.19" - resolved "https://registry.yarnpkg.com/datatables.net-bs/-/datatables.net-bs-1.10.19.tgz#08763b4e4d0cef1a427d019dc15e717c7ed67a4d" - dependencies: - datatables.net "1.10.19" - jquery ">=1.7" - -datatables.net-colreorder-bs@~1.3.2: - version "1.3.3" - resolved "https://registry.yarnpkg.com/datatables.net-colreorder-bs/-/datatables.net-colreorder-bs-1.3.3.tgz#3a9dcb08deebeb5d854079591e06e493ad793a53" - dependencies: - datatables.net-bs ">=1.10.9" - datatables.net-colreorder ">=1.2.0" - jquery ">=1.7" - -datatables.net-colreorder@>=1.2.0, datatables.net-colreorder@^1.4.1: - version "1.5.1" - resolved "https://registry.yarnpkg.com/datatables.net-colreorder/-/datatables.net-colreorder-1.5.1.tgz#ee5eacd7178b5fd9396aab44d4907aae35086f8c" - dependencies: - datatables.net "^1.10.15" - jquery ">=1.7" - -datatables.net-select@~1.2.0: - version "1.2.7" - resolved "https://registry.yarnpkg.com/datatables.net-select/-/datatables.net-select-1.2.7.tgz#7d5badfca49c438f8b51df04483d8d77857e917c" - dependencies: - datatables.net "^1.10.15" - jquery ">=1.7" - -datatables.net@1.10.19, datatables.net@^1.10.15: - version "1.10.19" - resolved "https://registry.yarnpkg.com/datatables.net/-/datatables.net-1.10.19.tgz#97a1ed41c85e62d61040603481b59790a172dd1f" - dependencies: - jquery ">=1.7" - -date-now@^0.1.4: - version "0.1.4" - resolved "https://registry.yarnpkg.com/date-now/-/date-now-0.1.4.tgz#eaf439fd4d4848ad74e5cc7dbef200672b9e345b" - -debug@2.6.9, debug@^2.1.2, debug@^2.2.0, debug@^2.3.3, debug@^2.6.0, debug@^2.6.6, debug@^2.6.8, debug@^2.6.9: - version "2.6.9" - resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f" - dependencies: - ms "2.0.0" - -debug@^3.0.1, debug@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/debug/-/debug-3.1.0.tgz#5bb5a0672628b64149566ba16819e61518c67261" - dependencies: - ms "2.0.0" - -decamelize@^1.0.0, decamelize@^1.1.1, decamelize@^1.1.2: - version "1.2.0" - resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-1.2.0.tgz#f6534d15148269b20352e7bee26f501f9a191290" - -decode-uri-component@^0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/decode-uri-component/-/decode-uri-component-0.2.0.tgz#eb3913333458775cb84cd1a1fae062106bb87545" - -deep-equal@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/deep-equal/-/deep-equal-1.0.1.tgz#f5d260292b660e084eff4cdbc9f08ad3247448b5" - -deep-extend@^0.6.0: - version "0.6.0" - resolved "https://registry.yarnpkg.com/deep-extend/-/deep-extend-0.6.0.tgz#c4fa7c95404a17a9c3e8ca7e1537312b736330ac" - -deep-is@~0.1.3: - version "0.1.3" - resolved "https://registry.yarnpkg.com/deep-is/-/deep-is-0.1.3.tgz#b369d6fb5dbc13eecf524f91b070feedc357cf34" - -default-require-extensions@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/default-require-extensions/-/default-require-extensions-2.0.0.tgz#f5f8fbb18a7d6d50b21f641f649ebb522cfe24f7" - dependencies: - strip-bom "^3.0.0" - -define-properties@^1.1.2: - version "1.1.2" - resolved "https://registry.yarnpkg.com/define-properties/-/define-properties-1.1.2.tgz#83a73f2fea569898fb737193c8f873caf6d45c94" - dependencies: - foreach "^2.0.5" - object-keys "^1.0.8" - -define-property@^0.2.5: - version "0.2.5" - resolved "https://registry.yarnpkg.com/define-property/-/define-property-0.2.5.tgz#c35b1ef918ec3c990f9a5bc57be04aacec5c8116" - dependencies: - is-descriptor "^0.1.0" - -define-property@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/define-property/-/define-property-1.0.0.tgz#769ebaaf3f4a63aad3af9e8d304c9bbe79bfb0e6" - dependencies: - is-descriptor "^1.0.0" - -define-property@^2.0.2: - version "2.0.2" - resolved "https://registry.yarnpkg.com/define-property/-/define-property-2.0.2.tgz#d459689e8d654ba77e02a817f8710d702cb16e9d" - dependencies: - is-descriptor "^1.0.2" - isobject "^3.0.1" - -defined@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/defined/-/defined-1.0.0.tgz#c98d9bcef75674188e110969151199e39b1fa693" - -del@^2.0.2, del@^2.2.2: - version "2.2.2" - resolved "https://registry.yarnpkg.com/del/-/del-2.2.2.tgz#c12c981d067846c84bcaf862cff930d907ffd1a8" - dependencies: - globby "^5.0.0" - is-path-cwd "^1.0.0" - is-path-in-cwd "^1.0.0" - object-assign "^4.0.1" - pify "^2.0.0" - pinkie-promise "^2.0.0" - rimraf "^2.2.8" - -del@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/del/-/del-3.0.0.tgz#53ecf699ffcbcb39637691ab13baf160819766e5" - dependencies: - globby "^6.1.0" - is-path-cwd "^1.0.0" - is-path-in-cwd "^1.0.0" - p-map "^1.1.1" - pify "^3.0.0" - rimraf "^2.2.8" - -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.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/depd/-/depd-1.1.1.tgz#5783b4e1c459f06fa5ca27f991f3d06e7a310359" - -depd@~1.1.1, depd@~1.1.2: - version "1.1.2" - resolved "https://registry.yarnpkg.com/depd/-/depd-1.1.2.tgz#9bcd52e14c097763e749b274c4346ed2e560b5a9" - -des.js@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/des.js/-/des.js-1.0.0.tgz#c074d2e2aa6a8a9a07dbd61f9a15c2cd83ec8ecc" - dependencies: - inherits "^2.0.1" - minimalistic-assert "^1.0.0" - -destroy@~1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/destroy/-/destroy-1.0.4.tgz#978857442c44749e4206613e37946205826abd80" - -detect-indent@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/detect-indent/-/detect-indent-4.0.0.tgz#f76d064352cdf43a1cb6ce619c4ee3a9475de208" - dependencies: - repeating "^2.0.0" - -detect-libc@^1.0.2: - version "1.0.3" - resolved "https://registry.yarnpkg.com/detect-libc/-/detect-libc-1.0.3.tgz#fa137c4bd698edf55cd5cd02ac559f91a4c4ba9b" - -detect-node@^2.0.3: - version "2.0.3" - resolved "https://registry.yarnpkg.com/detect-node/-/detect-node-2.0.3.tgz#a2033c09cc8e158d37748fbde7507832bd6ce127" - -detect-port-alt@1.1.6: - version "1.1.6" - resolved "https://registry.yarnpkg.com/detect-port-alt/-/detect-port-alt-1.1.6.tgz#24707deabe932d4a3cf621302027c2b266568275" - dependencies: - address "^1.0.1" - debug "^2.6.0" - -diff@^3.2.0: - version "3.5.0" - resolved "https://registry.yarnpkg.com/diff/-/diff-3.5.0.tgz#800c0dd1e0a8bfbc95835c202ad220fe317e5a12" - -diffie-hellman@^5.0.0: - version "5.0.3" - resolved "https://registry.yarnpkg.com/diffie-hellman/-/diffie-hellman-5.0.3.tgz#40e8ee98f55a2149607146921c63e1ae5f3d2875" - dependencies: - bn.js "^4.1.0" - miller-rabin "^4.0.0" - randombytes "^2.0.0" - -dns-equal@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/dns-equal/-/dns-equal-1.0.0.tgz#b39e7f1da6eb0a75ba9c17324b34753c47e0654d" - -dns-packet@^1.3.1: - version "1.3.1" - resolved "https://registry.yarnpkg.com/dns-packet/-/dns-packet-1.3.1.tgz#12aa426981075be500b910eedcd0b47dd7deda5a" - dependencies: - ip "^1.1.0" - safe-buffer "^5.0.1" - -dns-txt@^2.0.2: - version "2.0.2" - resolved "https://registry.yarnpkg.com/dns-txt/-/dns-txt-2.0.2.tgz#b91d806f5d27188e4ab3e7d107d881a1cc4642b6" - dependencies: - buffer-indexof "^1.0.0" - -doctrine@1.5.0: - version "1.5.0" - resolved "https://registry.yarnpkg.com/doctrine/-/doctrine-1.5.0.tgz#379dce730f6166f76cefa4e6707a159b02c5a6fa" - dependencies: - esutils "^2.0.2" - isarray "^1.0.0" - -doctrine@^2.0.0, doctrine@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/doctrine/-/doctrine-2.1.0.tgz#5cd01fc101621b42c4cd7f5d1a66243716d3f39d" - dependencies: - esutils "^2.0.2" - -dom-converter@~0.1: - version "0.1.4" - resolved "https://registry.yarnpkg.com/dom-converter/-/dom-converter-0.1.4.tgz#a45ef5727b890c9bffe6d7c876e7b19cb0e17f3b" - dependencies: - utila "~0.3" - -dom-helpers@^3.2.0, dom-helpers@^3.2.1, dom-helpers@^3.3.1: - version "3.3.1" - resolved "https://registry.yarnpkg.com/dom-helpers/-/dom-helpers-3.3.1.tgz#fc1a4e15ffdf60ddde03a480a9c0fece821dd4a6" - -dom-serializer@0: - version "0.1.0" - resolved "https://registry.yarnpkg.com/dom-serializer/-/dom-serializer-0.1.0.tgz#073c697546ce0780ce23be4a28e293e40bc30c82" - dependencies: - domelementtype "~1.1.1" - entities "~1.1.1" - -dom-urls@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/dom-urls/-/dom-urls-1.1.0.tgz#001ddf81628cd1e706125c7176f53ccec55d918e" - dependencies: - urijs "^1.16.1" - -domain-browser@^1.1.1: - version "1.2.0" - resolved "https://registry.yarnpkg.com/domain-browser/-/domain-browser-1.2.0.tgz#3d31f50191a6749dd1375a7f522e823d42e54eda" - -domelementtype@1: - version "1.3.0" - resolved "https://registry.yarnpkg.com/domelementtype/-/domelementtype-1.3.0.tgz#b17aed82e8ab59e52dd9c19b1756e0fc187204c2" - -domelementtype@~1.1.1: - version "1.1.3" - resolved "https://registry.yarnpkg.com/domelementtype/-/domelementtype-1.1.3.tgz#bd28773e2642881aec51544924299c5cd822185b" - -domhandler@2.1: - version "2.1.0" - resolved "https://registry.yarnpkg.com/domhandler/-/domhandler-2.1.0.tgz#d2646f5e57f6c3bab11cf6cb05d3c0acf7412594" - dependencies: - domelementtype "1" - -domutils@1.1: - version "1.1.6" - resolved "https://registry.yarnpkg.com/domutils/-/domutils-1.1.6.tgz#bddc3de099b9a2efacc51c623f28f416ecc57485" - dependencies: - domelementtype "1" - -domutils@1.5.1: - version "1.5.1" - resolved "https://registry.yarnpkg.com/domutils/-/domutils-1.5.1.tgz#dcd8488a26f563d61079e48c9f7b7e32373682cf" - dependencies: - dom-serializer "0" - domelementtype "1" - -dot-prop@^4.1.0: - version "4.2.0" - resolved "https://registry.yarnpkg.com/dot-prop/-/dot-prop-4.2.0.tgz#1f19e0c2e1aa0e32797c49799f2837ac6af69c57" - dependencies: - is-obj "^1.0.0" - -dotenv-expand@4.2.0: - version "4.2.0" - resolved "https://registry.yarnpkg.com/dotenv-expand/-/dotenv-expand-4.2.0.tgz#def1f1ca5d6059d24a766e587942c21106ce1275" - -dotenv@4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/dotenv/-/dotenv-4.0.0.tgz#864ef1379aced55ce6f95debecdce179f7a0cd1d" - -drmonty-datatables-colvis@~1.1.2: - version "1.1.2" - resolved "https://registry.yarnpkg.com/drmonty-datatables-colvis/-/drmonty-datatables-colvis-1.1.2.tgz#96ab9edfb48643cc2edda3f87b88933cdee8127c" - dependencies: - jquery ">=1.7.0" - -duplexer3@^0.1.4: - version "0.1.4" - resolved "https://registry.yarnpkg.com/duplexer3/-/duplexer3-0.1.4.tgz#ee01dd1cac0ed3cbc7fdbea37dc0a8f1ce002ce2" - -duplexer@^0.1.1: - version "0.1.1" - resolved "https://registry.yarnpkg.com/duplexer/-/duplexer-0.1.1.tgz#ace6ff808c1ce66b57d1ebf97977acb02334cfc1" - -ecc-jsbn@~0.1.1: - version "0.1.2" - resolved "https://registry.yarnpkg.com/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz#3a83a904e54353287874c564b7549386849a98c9" - dependencies: - jsbn "~0.1.0" - safer-buffer "^2.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" - -electron-to-chromium@^1.2.7, electron-to-chromium@^1.3.30: - version "1.3.58" - resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.58.tgz#8267a4000014e93986d9d18c65a8b4022ca75188" - -elliptic@^6.0.0: - version "6.4.1" - resolved "https://registry.yarnpkg.com/elliptic/-/elliptic-6.4.1.tgz#c2d0b7776911b86722c632c3c06c60f2f819939a" - dependencies: - bn.js "^4.4.0" - brorand "^1.0.1" - hash.js "^1.0.0" - hmac-drbg "^1.0.0" - inherits "^2.0.1" - minimalistic-assert "^1.0.0" - minimalistic-crypto-utils "^1.0.0" - -emoji-regex@^6.1.0: - version "6.5.1" - resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-6.5.1.tgz#9baea929b155565c11ea41c6626eaa65cef992c2" - -emojis-list@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/emojis-list/-/emojis-list-2.1.0.tgz#4daa4d9db00f9819880c79fa457ae5b09a1fd389" - -encodeurl@~1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/encodeurl/-/encodeurl-1.0.2.tgz#ad3ff4c86ec2d029322f5a02c3a9a606c95b3f59" - -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" - -enhanced-resolve@^3.4.0: - version "3.4.1" - resolved "https://registry.yarnpkg.com/enhanced-resolve/-/enhanced-resolve-3.4.1.tgz#0421e339fd71419b3da13d129b3979040230476e" - dependencies: - graceful-fs "^4.1.2" - memory-fs "^0.4.0" - object-assign "^4.0.1" - tapable "^0.2.7" - -entities@~1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/entities/-/entities-1.1.1.tgz#6e5c2d0a5621b5dadaecef80b90edfb5cd7772f0" - -eonasdan-bootstrap-datetimepicker@^4.17.47: - version "4.17.47" - resolved "https://registry.yarnpkg.com/eonasdan-bootstrap-datetimepicker/-/eonasdan-bootstrap-datetimepicker-4.17.47.tgz#7a49970044065276e7965efd16f822735219e735" - dependencies: - bootstrap "^3.3" - jquery "^1.8.3 || ^2.0 || ^3.0" - moment "^2.10" - moment-timezone "^0.4.0" - -errno@^0.1.3, errno@~0.1.7: - version "0.1.7" - resolved "https://registry.yarnpkg.com/errno/-/errno-0.1.7.tgz#4684d71779ad39af177e3f007996f7c67c852618" - dependencies: - prr "~1.0.1" - -error-ex@^1.2.0: - version "1.3.2" - resolved "https://registry.yarnpkg.com/error-ex/-/error-ex-1.3.2.tgz#b4ac40648107fdcdcfae242f428bea8a14d4f1bf" - dependencies: - is-arrayish "^0.2.1" - -es-abstract@^1.10.0, es-abstract@^1.7.0: - version "1.12.0" - resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.12.0.tgz#9dbbdd27c6856f0001421ca18782d786bf8a6165" - dependencies: - es-to-primitive "^1.1.1" - function-bind "^1.1.1" - has "^1.0.1" - is-callable "^1.1.3" - is-regex "^1.0.4" - -es-to-primitive@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/es-to-primitive/-/es-to-primitive-1.1.1.tgz#45355248a88979034b6792e19bb81f2b7975dd0d" - dependencies: - is-callable "^1.1.1" - is-date-object "^1.0.1" - is-symbol "^1.0.1" - -es5-ext@^0.10.14, es5-ext@^0.10.35, es5-ext@^0.10.9, es5-ext@~0.10.14: - version "0.10.46" - resolved "https://registry.yarnpkg.com/es5-ext/-/es5-ext-0.10.46.tgz#efd99f67c5a7ec789baa3daa7f79870388f7f572" - dependencies: - es6-iterator "~2.0.3" - es6-symbol "~3.1.1" - next-tick "1" - -es6-iterator@^2.0.1, es6-iterator@~2.0.1, es6-iterator@~2.0.3: - version "2.0.3" - resolved "https://registry.yarnpkg.com/es6-iterator/-/es6-iterator-2.0.3.tgz#a7de889141a05a94b0854403b2d0a0fbfa98f3b7" - dependencies: - d "1" - es5-ext "^0.10.35" - es6-symbol "^3.1.1" - -es6-map@^0.1.3: - version "0.1.5" - resolved "https://registry.yarnpkg.com/es6-map/-/es6-map-0.1.5.tgz#9136e0503dcc06a301690f0bb14ff4e364e949f0" - dependencies: - d "1" - es5-ext "~0.10.14" - es6-iterator "~2.0.1" - es6-set "~0.1.5" - es6-symbol "~3.1.1" - event-emitter "~0.3.5" - -es6-promise@^4.0.5: - version "4.2.4" - resolved "https://registry.yarnpkg.com/es6-promise/-/es6-promise-4.2.4.tgz#dc4221c2b16518760bd8c39a52d8f356fc00ed29" - -es6-set@~0.1.5: - version "0.1.5" - resolved "https://registry.yarnpkg.com/es6-set/-/es6-set-0.1.5.tgz#d2b3ec5d4d800ced818db538d28974db0a73ccb1" - dependencies: - d "1" - es5-ext "~0.10.14" - es6-iterator "~2.0.1" - es6-symbol "3.1.1" - event-emitter "~0.3.5" - -es6-symbol@3.1.1, es6-symbol@^3.1.1, es6-symbol@~3.1.1: - version "3.1.1" - resolved "https://registry.yarnpkg.com/es6-symbol/-/es6-symbol-3.1.1.tgz#bf00ef4fdab6ba1b46ecb7b629b4c7ed5715cc77" - dependencies: - d "1" - es5-ext "~0.10.14" - -es6-weak-map@^2.0.1: - version "2.0.2" - resolved "https://registry.yarnpkg.com/es6-weak-map/-/es6-weak-map-2.0.2.tgz#5e3ab32251ffd1538a1f8e5ffa1357772f92d96f" - dependencies: - d "1" - es5-ext "^0.10.14" - es6-iterator "^2.0.1" - es6-symbol "^3.1.1" - -escape-html@~1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/escape-html/-/escape-html-1.0.3.tgz#0258eae4d3d0c0974de1c169188ef0051d1d1988" - -escape-string-regexp@1.0.5, escape-string-regexp@^1.0.2, escape-string-regexp@^1.0.5: - version "1.0.5" - resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4" - -escodegen@^1.6.1: - version "1.11.0" - resolved "https://registry.yarnpkg.com/escodegen/-/escodegen-1.11.0.tgz#b27a9389481d5bfd5bec76f7bb1eb3f8f4556589" - dependencies: - esprima "^3.1.3" - estraverse "^4.2.0" - esutils "^2.0.2" - optionator "^0.8.1" - optionalDependencies: - source-map "~0.6.1" - -escope@^3.6.0: - version "3.6.0" - resolved "https://registry.yarnpkg.com/escope/-/escope-3.6.0.tgz#e01975e812781a163a6dadfdd80398dc64c889c3" - dependencies: - es6-map "^0.1.3" - es6-weak-map "^2.0.1" - esrecurse "^4.1.0" - estraverse "^4.1.1" - -eslint-config-react-app@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/eslint-config-react-app/-/eslint-config-react-app-2.1.0.tgz#23c909f71cbaff76b945b831d2d814b8bde169eb" - -eslint-import-resolver-node@^0.3.1: - version "0.3.2" - resolved "https://registry.yarnpkg.com/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.2.tgz#58f15fb839b8d0576ca980413476aab2472db66a" - dependencies: - debug "^2.6.9" - resolve "^1.5.0" - -eslint-loader@1.9.0: - version "1.9.0" - resolved "https://registry.yarnpkg.com/eslint-loader/-/eslint-loader-1.9.0.tgz#7e1be9feddca328d3dcfaef1ad49d5beffe83a13" - dependencies: - loader-fs-cache "^1.0.0" - loader-utils "^1.0.2" - object-assign "^4.0.1" - object-hash "^1.1.4" - rimraf "^2.6.1" - -eslint-module-utils@^2.1.1: - version "2.2.0" - resolved "https://registry.yarnpkg.com/eslint-module-utils/-/eslint-module-utils-2.2.0.tgz#b270362cd88b1a48ad308976ce7fa54e98411746" - dependencies: - debug "^2.6.8" - pkg-dir "^1.0.0" - -eslint-plugin-flowtype@2.39.1: - version "2.39.1" - resolved "https://registry.yarnpkg.com/eslint-plugin-flowtype/-/eslint-plugin-flowtype-2.39.1.tgz#b5624622a0388bcd969f4351131232dcb9649cd5" - dependencies: - lodash "^4.15.0" - -eslint-plugin-import@2.8.0: - version "2.8.0" - resolved "https://registry.yarnpkg.com/eslint-plugin-import/-/eslint-plugin-import-2.8.0.tgz#fa1b6ef31fcb3c501c09859c1b86f1fc5b986894" - dependencies: - builtin-modules "^1.1.1" - contains-path "^0.1.0" - debug "^2.6.8" - doctrine "1.5.0" - eslint-import-resolver-node "^0.3.1" - eslint-module-utils "^2.1.1" - has "^1.0.1" - lodash.cond "^4.3.0" - minimatch "^3.0.3" - read-pkg-up "^2.0.0" - -eslint-plugin-jest@^21.21.0: - version "21.21.0" - resolved "https://registry.yarnpkg.com/eslint-plugin-jest/-/eslint-plugin-jest-21.21.0.tgz#f0afd138c4acb5f0cd7698318fb49c7d49f3bf45" - -eslint-plugin-jsx-a11y@5.1.1: - version "5.1.1" - resolved "https://registry.yarnpkg.com/eslint-plugin-jsx-a11y/-/eslint-plugin-jsx-a11y-5.1.1.tgz#5c96bb5186ca14e94db1095ff59b3e2bd94069b1" - dependencies: - aria-query "^0.7.0" - array-includes "^3.0.3" - ast-types-flow "0.0.7" - axobject-query "^0.1.0" - damerau-levenshtein "^1.0.0" - emoji-regex "^6.1.0" - jsx-ast-utils "^1.4.0" - -eslint-plugin-react@7.4.0: - version "7.4.0" - resolved "https://registry.yarnpkg.com/eslint-plugin-react/-/eslint-plugin-react-7.4.0.tgz#300a95861b9729c087d362dd64abcc351a74364a" - dependencies: - doctrine "^2.0.0" - has "^1.0.1" - jsx-ast-utils "^2.0.0" - prop-types "^15.5.10" - -eslint-plugin-react@^7.11.1: - version "7.11.1" - resolved "https://registry.yarnpkg.com/eslint-plugin-react/-/eslint-plugin-react-7.11.1.tgz#c01a7af6f17519457d6116aa94fc6d2ccad5443c" - dependencies: - array-includes "^3.0.3" - doctrine "^2.1.0" - has "^1.0.3" - jsx-ast-utils "^2.0.1" - prop-types "^15.6.2" - -eslint-plugin-standard@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/eslint-plugin-standard/-/eslint-plugin-standard-3.1.0.tgz#2a9e21259ba4c47c02d53b2d0c9135d4b1022d47" - -eslint-scope@^3.7.1: - version "3.7.3" - resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-3.7.3.tgz#bb507200d3d17f60247636160b4826284b108535" - dependencies: - esrecurse "^4.1.0" - estraverse "^4.1.1" - -eslint-scope@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-4.0.0.tgz#50bf3071e9338bcdc43331794a0cb533f0136172" - dependencies: - esrecurse "^4.1.0" - estraverse "^4.1.1" - -eslint-utils@^1.3.1: - version "1.3.1" - resolved "https://registry.yarnpkg.com/eslint-utils/-/eslint-utils-1.3.1.tgz#9a851ba89ee7c460346f97cf8939c7298827e512" - -eslint-visitor-keys@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-1.0.0.tgz#3f3180fb2e291017716acb4c9d6d5b5c34a6a81d" - -eslint@4.10.0: - version "4.10.0" - resolved "https://registry.yarnpkg.com/eslint/-/eslint-4.10.0.tgz#f25d0d7955c81968c2309aa5c9a229e045176bb7" - dependencies: - ajv "^5.2.0" - babel-code-frame "^6.22.0" - chalk "^2.1.0" - concat-stream "^1.6.0" - cross-spawn "^5.1.0" - debug "^3.0.1" - doctrine "^2.0.0" - eslint-scope "^3.7.1" - espree "^3.5.1" - esquery "^1.0.0" - estraverse "^4.2.0" - esutils "^2.0.2" - file-entry-cache "^2.0.0" - functional-red-black-tree "^1.0.1" - glob "^7.1.2" - globals "^9.17.0" - ignore "^3.3.3" - imurmurhash "^0.1.4" - inquirer "^3.0.6" - is-resolvable "^1.0.0" - js-yaml "^3.9.1" - json-stable-stringify "^1.0.1" - levn "^0.3.0" - lodash "^4.17.4" - minimatch "^3.0.2" - mkdirp "^0.5.1" - natural-compare "^1.4.0" - optionator "^0.8.2" - path-is-inside "^1.0.2" - pluralize "^7.0.0" - progress "^2.0.0" - require-uncached "^1.0.3" - semver "^5.3.0" - strip-ansi "^4.0.0" - strip-json-comments "~2.0.1" - table "^4.0.1" - text-table "~0.2.0" - -eslint@^5.3.0: - version "5.3.0" - resolved "https://registry.yarnpkg.com/eslint/-/eslint-5.3.0.tgz#53695aca5213968aacdf970ccb231e42a2b285f8" - dependencies: - ajv "^6.5.0" - babel-code-frame "^6.26.0" - chalk "^2.1.0" - cross-spawn "^6.0.5" - debug "^3.1.0" - doctrine "^2.1.0" - eslint-scope "^4.0.0" - eslint-utils "^1.3.1" - eslint-visitor-keys "^1.0.0" - espree "^4.0.0" - esquery "^1.0.1" - esutils "^2.0.2" - file-entry-cache "^2.0.0" - functional-red-black-tree "^1.0.1" - glob "^7.1.2" - globals "^11.7.0" - ignore "^4.0.2" - imurmurhash "^0.1.4" - inquirer "^5.2.0" - is-resolvable "^1.1.0" - js-yaml "^3.11.0" - json-stable-stringify-without-jsonify "^1.0.1" - levn "^0.3.0" - lodash "^4.17.5" - minimatch "^3.0.4" - mkdirp "^0.5.1" - natural-compare "^1.4.0" - optionator "^0.8.2" - path-is-inside "^1.0.2" - pluralize "^7.0.0" - progress "^2.0.0" - regexpp "^2.0.0" - require-uncached "^1.0.3" - semver "^5.5.0" - string.prototype.matchall "^2.0.0" - strip-ansi "^4.0.0" - strip-json-comments "^2.0.1" - table "^4.0.3" - text-table "^0.2.0" - -espree@^3.5.1: - version "3.5.4" - resolved "https://registry.yarnpkg.com/espree/-/espree-3.5.4.tgz#b0f447187c8a8bed944b815a660bddf5deb5d1a7" - dependencies: - acorn "^5.5.0" - acorn-jsx "^3.0.0" - -espree@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/espree/-/espree-4.0.0.tgz#253998f20a0f82db5d866385799d912a83a36634" - dependencies: - acorn "^5.6.0" - acorn-jsx "^4.1.1" - -esprima@^2.6.0: - version "2.7.3" - resolved "https://registry.yarnpkg.com/esprima/-/esprima-2.7.3.tgz#96e3b70d5779f6ad49cd032673d1c312767ba581" - -esprima@^3.1.3: - version "3.1.3" - resolved "https://registry.yarnpkg.com/esprima/-/esprima-3.1.3.tgz#fdca51cee6133895e3c88d535ce49dbff62a4633" - -esprima@^4.0.0: - version "4.0.1" - resolved "https://registry.yarnpkg.com/esprima/-/esprima-4.0.1.tgz#13b04cdb3e6c5d19df91ab6987a8695619b0aa71" - -esquery@^1.0.0, esquery@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/esquery/-/esquery-1.0.1.tgz#406c51658b1f5991a5f9b62b1dc25b00e3e5c708" - dependencies: - estraverse "^4.0.0" - -esrecurse@^4.1.0: - version "4.2.1" - resolved "https://registry.yarnpkg.com/esrecurse/-/esrecurse-4.2.1.tgz#007a3b9fdbc2b3bb87e4879ea19c92fdbd3942cf" - dependencies: - estraverse "^4.1.0" - -estraverse@^4.0.0, estraverse@^4.1.0, estraverse@^4.1.1, estraverse@^4.2.0: - version "4.2.0" - resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-4.2.0.tgz#0dee3fed31fcd469618ce7342099fc1afa0bdb13" - -esutils@^2.0.2: - version "2.0.2" - resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.2.tgz#0abf4f1caa5bcb1f7a9d8acc6dea4faaa04bac9b" - -etag@~1.8.1: - version "1.8.1" - resolved "https://registry.yarnpkg.com/etag/-/etag-1.8.1.tgz#41ae2eeb65efa62268aebfea83ac7d79299b0887" - -event-emitter@~0.3.5: - version "0.3.5" - resolved "https://registry.yarnpkg.com/event-emitter/-/event-emitter-0.3.5.tgz#df8c69eef1647923c7157b9ce83840610b02cc39" - dependencies: - d "1" - es5-ext "~0.10.14" - -eventemitter3@^3.0.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/eventemitter3/-/eventemitter3-3.1.0.tgz#090b4d6cdbd645ed10bf750d4b5407942d7ba163" - -events@^1.0.0: - version "1.1.1" - resolved "https://registry.yarnpkg.com/events/-/events-1.1.1.tgz#9ebdb7635ad099c70dcc4c2a1f5004288e8bd924" - -eventsource@0.1.6: - version "0.1.6" - resolved "https://registry.yarnpkg.com/eventsource/-/eventsource-0.1.6.tgz#0acede849ed7dd1ccc32c811bb11b944d4f29232" - dependencies: - original ">=0.0.5" - -evp_bytestokey@^1.0.0, evp_bytestokey@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/evp_bytestokey/-/evp_bytestokey-1.0.3.tgz#7fcbdb198dc71959432efe13842684e0525acb02" - dependencies: - md5.js "^1.3.4" - safe-buffer "^5.1.1" - -exec-sh@^0.2.0: - version "0.2.2" - resolved "https://registry.yarnpkg.com/exec-sh/-/exec-sh-0.2.2.tgz#2a5e7ffcbd7d0ba2755bdecb16e5a427dfbdec36" - dependencies: - merge "^1.2.0" - -execa@^0.7.0: - version "0.7.0" - resolved "https://registry.yarnpkg.com/execa/-/execa-0.7.0.tgz#944becd34cc41ee32a63a9faf27ad5a65fc59777" - dependencies: - cross-spawn "^5.0.1" - get-stream "^3.0.0" - is-stream "^1.1.0" - npm-run-path "^2.0.0" - p-finally "^1.0.0" - signal-exit "^3.0.0" - strip-eof "^1.0.0" - -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-brackets@^2.1.4: - version "2.1.4" - resolved "https://registry.yarnpkg.com/expand-brackets/-/expand-brackets-2.1.4.tgz#b77735e315ce30f6b6eff0f83b04151a22449622" - dependencies: - debug "^2.3.3" - define-property "^0.2.5" - extend-shallow "^2.0.1" - posix-character-classes "^0.1.0" - regex-not "^1.0.0" - snapdragon "^0.8.1" - to-regex "^3.0.1" - -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" - -expand-tilde@^2.0.0, expand-tilde@^2.0.2: - version "2.0.2" - resolved "https://registry.yarnpkg.com/expand-tilde/-/expand-tilde-2.0.2.tgz#97e801aa052df02454de46b02bf621642cdc8502" - dependencies: - homedir-polyfill "^1.0.1" - -express@^4.13.3: - version "4.16.3" - resolved "https://registry.yarnpkg.com/express/-/express-4.16.3.tgz#6af8a502350db3246ecc4becf6b5a34d22f7ed53" - dependencies: - accepts "~1.3.5" - array-flatten "1.1.1" - body-parser "1.18.2" - content-disposition "0.5.2" - content-type "~1.0.4" - cookie "0.3.1" - cookie-signature "1.0.6" - debug "2.6.9" - depd "~1.1.2" - encodeurl "~1.0.2" - escape-html "~1.0.3" - etag "~1.8.1" - finalhandler "1.1.1" - fresh "0.5.2" - merge-descriptors "1.0.1" - methods "~1.1.2" - on-finished "~2.3.0" - parseurl "~1.3.2" - path-to-regexp "0.1.7" - proxy-addr "~2.0.3" - qs "6.5.1" - range-parser "~1.2.0" - safe-buffer "5.1.1" - send "0.16.2" - serve-static "1.13.2" - setprototypeof "1.1.0" - statuses "~1.4.0" - type-is "~1.6.16" - utils-merge "1.0.1" - vary "~1.1.2" - -extend-shallow@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/extend-shallow/-/extend-shallow-2.0.1.tgz#51af7d614ad9a9f610ea1bafbb989d6b1c56890f" - dependencies: - is-extendable "^0.1.0" - -extend-shallow@^3.0.0, extend-shallow@^3.0.2: - version "3.0.2" - resolved "https://registry.yarnpkg.com/extend-shallow/-/extend-shallow-3.0.2.tgz#26a71aaf073b39fb2127172746131c2704028db8" - dependencies: - assign-symbols "^1.0.0" - is-extendable "^1.0.1" - -extend@~3.0.2: - version "3.0.2" - resolved "https://registry.yarnpkg.com/extend/-/extend-3.0.2.tgz#f8b1136b4071fbd8eb140aff858b1019ec2915fa" - -external-editor@^2.0.4, external-editor@^2.1.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/external-editor/-/external-editor-2.2.0.tgz#045511cfd8d133f3846673d1047c154e214ad3d5" - dependencies: - chardet "^0.4.0" - iconv-lite "^0.4.17" - tmp "^0.0.33" - -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" - -extglob@^2.0.4: - version "2.0.4" - resolved "https://registry.yarnpkg.com/extglob/-/extglob-2.0.4.tgz#ad00fe4dc612a9232e8718711dc5cb5ab0285543" - dependencies: - array-unique "^0.3.2" - define-property "^1.0.0" - expand-brackets "^2.1.4" - extend-shallow "^2.0.1" - fragment-cache "^0.2.1" - regex-not "^1.0.0" - snapdragon "^0.8.1" - to-regex "^3.0.1" - -extract-text-webpack-plugin@3.0.2: - version "3.0.2" - resolved "https://registry.yarnpkg.com/extract-text-webpack-plugin/-/extract-text-webpack-plugin-3.0.2.tgz#5f043eaa02f9750a9258b78c0a6e0dc1408fb2f7" - dependencies: - async "^2.4.1" - loader-utils "^1.1.0" - schema-utils "^0.3.0" - webpack-sources "^1.0.1" - -extsprintf@1.3.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.3.0.tgz#96918440e3041a7a414f8c52e3c574eb3c3e1e05" - -extsprintf@^1.2.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.4.0.tgz#e2689f8f356fad62cca65a3a91c5df5f9551692f" - -fast-deep-equal@^1.0.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-1.1.0.tgz#c053477817c86b51daa853c81e059b733d023614" - -fast-deep-equal@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-2.0.1.tgz#7b05218ddf9667bf7f370bf7fdb2cb15fdd0aa49" - -fast-json-stable-stringify@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.0.0.tgz#d5142c0caee6b1189f87d3a76111064f86c8bbf2" - -fast-levenshtein@~2.0.4: - version "2.0.6" - resolved "https://registry.yarnpkg.com/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz#3d8a5c66883a16a30ca8643e851f19baa7797917" - -fastparse@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/fastparse/-/fastparse-1.1.1.tgz#d1e2643b38a94d7583b479060e6c4affc94071f8" - -faye-websocket@^0.10.0: - version "0.10.0" - resolved "https://registry.yarnpkg.com/faye-websocket/-/faye-websocket-0.10.0.tgz#4e492f8d04dfb6f89003507f6edbf2d501e7c6f4" - dependencies: - websocket-driver ">=0.5.1" - -faye-websocket@~0.11.0: - version "0.11.1" - resolved "https://registry.yarnpkg.com/faye-websocket/-/faye-websocket-0.11.1.tgz#f0efe18c4f56e4f40afc7e06c719fd5ee6188f38" - dependencies: - websocket-driver ">=0.5.1" - -fb-watchman@^1.8.0: - version "1.9.2" - resolved "https://registry.yarnpkg.com/fb-watchman/-/fb-watchman-1.9.2.tgz#a24cf47827f82d38fb59a69ad70b76e3b6ae7383" - dependencies: - bser "1.0.2" - -fb-watchman@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/fb-watchman/-/fb-watchman-2.0.0.tgz#54e9abf7dfa2f26cd9b1636c588c1afc05de5d58" - dependencies: - bser "^2.0.0" - -fbjs@^0.8.0, fbjs@^0.8.1, fbjs@^0.8.16: - version "0.8.17" - resolved "https://registry.yarnpkg.com/fbjs/-/fbjs-0.8.17.tgz#c4d598ead6949112653d6588b01a5cdcd9f90fdd" - dependencies: - core-js "^1.0.0" - isomorphic-fetch "^2.1.1" - loose-envify "^1.0.0" - object-assign "^4.1.0" - promise "^7.1.1" - setimmediate "^1.0.5" - ua-parser-js "^0.7.18" - -figures@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/figures/-/figures-2.0.0.tgz#3ab1a2d2a62c8bfb431a0c94cb797a2fce27c962" - dependencies: - escape-string-regexp "^1.0.5" - -file-entry-cache@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/file-entry-cache/-/file-entry-cache-2.0.0.tgz#c392990c3e684783d838b8c84a45d8a048458361" - dependencies: - flat-cache "^1.2.1" - object-assign "^4.0.1" - -file-loader@1.1.5: - version "1.1.5" - resolved "https://registry.yarnpkg.com/file-loader/-/file-loader-1.1.5.tgz#91c25b6b6fbe56dae99f10a425fd64933b5c9daa" - dependencies: - loader-utils "^1.0.2" - schema-utils "^0.3.0" - -filename-regex@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/filename-regex/-/filename-regex-2.0.1.tgz#c1c4b9bee3e09725ddb106b75c1e301fe2f18b26" - -fileset@^2.0.2: - version "2.0.3" - resolved "https://registry.yarnpkg.com/fileset/-/fileset-2.0.3.tgz#8e7548a96d3cc2327ee5e674168723a333bba2a0" - dependencies: - glob "^7.0.3" - minimatch "^3.0.3" - -filesize@3.5.11: - version "3.5.11" - resolved "https://registry.yarnpkg.com/filesize/-/filesize-3.5.11.tgz#1919326749433bb3cf77368bd158caabcc19e9ee" - -fill-range@^2.1.0: - version "2.2.4" - resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-2.2.4.tgz#eb1e773abb056dcd8df2bfdf6af59b8b3a936565" - dependencies: - is-number "^2.1.0" - isobject "^2.0.0" - randomatic "^3.0.0" - repeat-element "^1.1.2" - repeat-string "^1.5.2" - -fill-range@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-4.0.0.tgz#d544811d428f98eb06a63dc402d2403c328c38f7" - dependencies: - extend-shallow "^2.0.1" - is-number "^3.0.0" - repeat-string "^1.6.1" - to-regex-range "^2.1.0" - -finalhandler@1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/finalhandler/-/finalhandler-1.1.1.tgz#eebf4ed840079c83f4249038c9d703008301b105" - dependencies: - debug "2.6.9" - encodeurl "~1.0.2" - escape-html "~1.0.3" - on-finished "~2.3.0" - parseurl "~1.3.2" - statuses "~1.4.0" - unpipe "~1.0.0" - -find-cache-dir@^0.1.1: - version "0.1.1" - resolved "https://registry.yarnpkg.com/find-cache-dir/-/find-cache-dir-0.1.1.tgz#c8defae57c8a52a8a784f9e31c57c742e993a0b9" - dependencies: - commondir "^1.0.1" - mkdirp "^0.5.1" - pkg-dir "^1.0.0" - -find-cache-dir@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/find-cache-dir/-/find-cache-dir-1.0.0.tgz#9288e3e9e3cc3748717d39eade17cf71fc30ee6f" - dependencies: - commondir "^1.0.1" - make-dir "^1.0.0" - pkg-dir "^2.0.0" - -find-up@^1.0.0: - version "1.1.2" - resolved "https://registry.yarnpkg.com/find-up/-/find-up-1.1.2.tgz#6b2e9822b1a2ce0a60ab64d610eccad53cb24d0f" - dependencies: - path-exists "^2.0.0" - pinkie-promise "^2.0.0" - -find-up@^2.0.0, find-up@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/find-up/-/find-up-2.1.0.tgz#45d1b7e506c717ddd482775a2b77920a3c0c57a7" - dependencies: - locate-path "^2.0.0" - -flat-cache@^1.2.1: - version "1.3.0" - resolved "https://registry.yarnpkg.com/flat-cache/-/flat-cache-1.3.0.tgz#d3030b32b38154f4e3b7e9c709f490f7ef97c481" - dependencies: - circular-json "^0.3.1" - del "^2.0.2" - graceful-fs "^4.1.2" - write "^0.2.1" - -flatten@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/flatten/-/flatten-1.0.2.tgz#dae46a9d78fbe25292258cc1e780a41d95c03782" - -follow-redirects@^1.0.0, follow-redirects@^1.3.0: - version "1.5.5" - resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.5.5.tgz#3c143ca599a2e22e62876687d68b23d55bad788b" - dependencies: - debug "^3.1.0" - -font-awesome-sass@^4.7.0: - version "4.7.0" - resolved "https://registry.yarnpkg.com/font-awesome-sass/-/font-awesome-sass-4.7.0.tgz#4eda693e915009ce00b228e0964dc5eca9bc34e1" - -font-awesome@^4.7.0: - version "4.7.0" - resolved "https://registry.yarnpkg.com/font-awesome/-/font-awesome-4.7.0.tgz#8fa8cf0411a1a31afd07b06d2902bb9fc815a133" - -for-in@^1.0.1, for-in@^1.0.2: - 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" - -foreach@^2.0.5: - version "2.0.5" - resolved "https://registry.yarnpkg.com/foreach/-/foreach-2.0.5.tgz#0bee005018aeb260d0a3af3ae658dd0136ec1b99" - -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.3.2: - version "2.3.2" - resolved "https://registry.yarnpkg.com/form-data/-/form-data-2.3.2.tgz#4970498be604c20c005d4f5c23aecd21d6b49099" - dependencies: - asynckit "^0.4.0" - combined-stream "1.0.6" - mime-types "^2.1.12" - -forwarded@~0.1.2: - version "0.1.2" - resolved "https://registry.yarnpkg.com/forwarded/-/forwarded-0.1.2.tgz#98c23dab1175657b8c0573e8ceccd91b0ff18c84" - -fragment-cache@^0.2.1: - version "0.2.1" - resolved "https://registry.yarnpkg.com/fragment-cache/-/fragment-cache-0.2.1.tgz#4290fad27f13e89be7f33799c6bc5a0abfff0d19" - dependencies: - map-cache "^0.2.2" - -fresh@0.5.2: - version "0.5.2" - resolved "https://registry.yarnpkg.com/fresh/-/fresh-0.5.2.tgz#3d8cadd90d976569fa835ab1f8e4b23a105605a7" - -fs-extra@3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-3.0.1.tgz#3794f378c58b342ea7dbbb23095109c4b3b62291" - dependencies: - graceful-fs "^4.1.2" - jsonfile "^3.0.0" - universalify "^0.1.0" - -fs-extra@^0.30.0: - version "0.30.0" - resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-0.30.0.tgz#f233ffcc08d4da7d432daa449776989db1df93f0" - dependencies: - graceful-fs "^4.1.2" - jsonfile "^2.1.0" - klaw "^1.0.0" - path-is-absolute "^1.0.0" - rimraf "^2.2.8" - -fs-minipass@^1.2.5: - version "1.2.5" - resolved "https://registry.yarnpkg.com/fs-minipass/-/fs-minipass-1.2.5.tgz#06c277218454ec288df77ada54a03b8702aacb9d" - dependencies: - minipass "^2.2.1" - -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, fsevents@^1.1.3, fsevents@^1.2.2: - version "1.2.4" - resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-1.2.4.tgz#f41dcb1af2582af3692da36fc55cbd8e1041c426" - dependencies: - nan "^2.9.2" - node-pre-gyp "^0.10.0" - -function-bind@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.1.tgz#a56899d3ea3c9bab874bb9773b7c5ede92f4895d" - -functional-red-black-tree@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz#1b0ab3bd553b2a0d6399d29c0e3ea0b252078327" - -gauge@~2.7.3: - version "2.7.4" - resolved "https://registry.yarnpkg.com/gauge/-/gauge-2.7.4.tgz#2c03405c7538c39d7eb37b317022e325fb018bf7" - 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" - -get-caller-file@^1.0.1: - version "1.0.3" - resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-1.0.3.tgz#f978fa4c90d1dfe7ff2d6beda2a515e713bdcf4a" - -get-stdin@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/get-stdin/-/get-stdin-4.0.1.tgz#b968c6b0a04384324902e8bf1a5df32579a450fe" - -get-stream@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-3.0.0.tgz#8e943d1358dc37555054ecbe2edb05aa174ede14" - -get-value@^2.0.3, get-value@^2.0.6: - version "2.0.6" - resolved "https://registry.yarnpkg.com/get-value/-/get-value-2.0.6.tgz#dc15ca1c672387ca76bd37ac0a395ba2042a2c28" - -getpass@^0.1.1: - version "0.1.7" - resolved "https://registry.yarnpkg.com/getpass/-/getpass-0.1.7.tgz#5eff8e3e684d569ae4cb2b1282604e8ba62149fa" - 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-parent@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-3.1.0.tgz#9e6af6299d8d3bd2bd40430832bd113df906c5ae" - dependencies: - is-glob "^3.1.0" - path-dirname "^1.0.0" - -glob@^7.0.3, glob@^7.0.5, glob@^7.1.1, glob@^7.1.2: - version "7.1.2" - resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.2.tgz#c19c9df9a028702d678612384a6552404c636d15" - dependencies: - fs.realpath "^1.0.0" - inflight "^1.0.4" - inherits "2" - minimatch "^3.0.4" - once "^1.3.0" - path-is-absolute "^1.0.0" - -global-dirs@^0.1.0: - version "0.1.1" - resolved "https://registry.yarnpkg.com/global-dirs/-/global-dirs-0.1.1.tgz#b319c0dd4607f353f3be9cca4c72fc148c49f445" - dependencies: - ini "^1.3.4" - -global-modules@1.0.0, global-modules@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/global-modules/-/global-modules-1.0.0.tgz#6d770f0eb523ac78164d72b5e71a8877265cc3ea" - dependencies: - global-prefix "^1.0.1" - is-windows "^1.0.1" - resolve-dir "^1.0.0" - -global-prefix@^1.0.1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/global-prefix/-/global-prefix-1.0.2.tgz#dbf743c6c14992593c655568cb66ed32c0122ebe" - dependencies: - expand-tilde "^2.0.2" - homedir-polyfill "^1.0.1" - ini "^1.3.4" - is-windows "^1.0.1" - which "^1.2.14" - -globals@^11.7.0: - version "11.7.0" - resolved "https://registry.yarnpkg.com/globals/-/globals-11.7.0.tgz#a583faa43055b1aca771914bf68258e2fc125673" - -globals@^9.17.0, globals@^9.18.0: - version "9.18.0" - resolved "https://registry.yarnpkg.com/globals/-/globals-9.18.0.tgz#aa3896b3e69b487f17e31ed2143d69a8e30c2d8a" - -globby@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/globby/-/globby-5.0.0.tgz#ebd84667ca0dbb330b99bcfc68eac2bc54370e0d" - dependencies: - array-union "^1.0.1" - arrify "^1.0.0" - glob "^7.0.3" - object-assign "^4.0.1" - pify "^2.0.0" - pinkie-promise "^2.0.0" - -globby@^6.1.0: - version "6.1.0" - resolved "https://registry.yarnpkg.com/globby/-/globby-6.1.0.tgz#f5a6d70e8395e21c858fb0489d64df02424d506c" - dependencies: - array-union "^1.0.1" - glob "^7.0.3" - object-assign "^4.0.1" - pify "^2.0.0" - pinkie-promise "^2.0.0" - -google-code-prettify@~1.0.5: - version "1.0.5" - resolved "https://registry.yarnpkg.com/google-code-prettify/-/google-code-prettify-1.0.5.tgz#9f477f224dbfa62372e5ef803a7e157410400084" - -got@^6.7.1: - version "6.7.1" - resolved "https://registry.yarnpkg.com/got/-/got-6.7.1.tgz#240cd05785a9a18e561dc1b44b41c763ef1e8db0" - dependencies: - create-error-class "^3.0.0" - duplexer3 "^0.1.4" - get-stream "^3.0.0" - is-redirect "^1.0.0" - is-retry-allowed "^1.0.0" - is-stream "^1.0.0" - lowercase-keys "^1.0.0" - safe-buffer "^5.0.1" - timed-out "^4.0.0" - unzip-response "^2.0.1" - url-parse-lax "^1.0.0" - -graceful-fs@^4.1.11, graceful-fs@^4.1.2, graceful-fs@^4.1.6, graceful-fs@^4.1.9: - version "4.1.11" - resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.1.11.tgz#0e8bdfe4d1ddb8854d64e04ea7c00e2a026e5658" - -growly@^1.3.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/growly/-/growly-1.3.0.tgz#f10748cbe76af964b7c96c93c6bcc28af120c081" - -gud@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/gud/-/gud-1.0.0.tgz#a489581b17e6a70beca9abe3ae57de7a499852c0" - -gzip-size@3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/gzip-size/-/gzip-size-3.0.0.tgz#546188e9bdc337f673772f81660464b389dce520" - dependencies: - duplexer "^0.1.1" - -handle-thing@^1.2.5: - version "1.2.5" - resolved "https://registry.yarnpkg.com/handle-thing/-/handle-thing-1.2.5.tgz#fd7aad726bf1a5fd16dfc29b2f7a6601d27139c4" - -handlebars@^4.0.3: - version "4.0.11" - resolved "https://registry.yarnpkg.com/handlebars/-/handlebars-4.0.11.tgz#630a35dfe0294bc281edae6ffc5d329fc7982dcc" - dependencies: - async "^1.4.0" - optimist "^0.6.1" - source-map "^0.4.4" - optionalDependencies: - uglify-js "^2.6" - -har-schema@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/har-schema/-/har-schema-2.0.0.tgz#a94c2224ebcac04782a0d9035521f24735b7ec92" - -har-validator@~5.1.0: - version "5.1.0" - resolved "https://registry.yarnpkg.com/har-validator/-/har-validator-5.1.0.tgz#44657f5688a22cfd4b72486e81b3a3fb11742c29" - dependencies: - ajv "^5.3.0" - har-schema "^2.0.0" - -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-flag@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-1.0.0.tgz#9d9e793165ce017a00f00418c43f942a7b1d11fa" - -has-flag@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-2.0.0.tgz#e8207af1cc7b30d446cc70b734b5e8be18f88d51" - -has-flag@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd" - -has-symbols@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.0.0.tgz#ba1a8f1af2a0fc39650f5c850367704122063b44" - -has-unicode@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/has-unicode/-/has-unicode-2.0.1.tgz#e0e6fe6a28cf51138855e086d1691e771de2a8b9" - -has-value@^0.3.1: - version "0.3.1" - resolved "https://registry.yarnpkg.com/has-value/-/has-value-0.3.1.tgz#7b1f58bada62ca827ec0a2078025654845995e1f" - dependencies: - get-value "^2.0.3" - has-values "^0.1.4" - isobject "^2.0.0" - -has-value@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/has-value/-/has-value-1.0.0.tgz#18b281da585b1c5c51def24c930ed29a0be6b177" - dependencies: - get-value "^2.0.6" - has-values "^1.0.0" - isobject "^3.0.0" - -has-values@^0.1.4: - version "0.1.4" - resolved "https://registry.yarnpkg.com/has-values/-/has-values-0.1.4.tgz#6d61de95d91dfca9b9a02089ad384bff8f62b771" - -has-values@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/has-values/-/has-values-1.0.0.tgz#95b0b63fec2146619a6fe57fe75628d5a39efe4f" - dependencies: - is-number "^3.0.0" - kind-of "^4.0.0" - -has@^1.0.1, has@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/has/-/has-1.0.3.tgz#722d7cbfc1f6aa8241f16dd814e011e1f41e8796" - dependencies: - function-bind "^1.1.1" - -hash-base@^3.0.0: - version "3.0.4" - resolved "https://registry.yarnpkg.com/hash-base/-/hash-base-3.0.4.tgz#5fc8686847ecd73499403319a6b0a3f3f6ae4918" - dependencies: - inherits "^2.0.1" - safe-buffer "^5.0.1" - -hash.js@^1.0.0, hash.js@^1.0.3: - version "1.1.5" - resolved "https://registry.yarnpkg.com/hash.js/-/hash.js-1.1.5.tgz#e38ab4b85dfb1e0c40fe9265c0e9b54854c23812" - dependencies: - inherits "^2.0.3" - minimalistic-assert "^1.0.1" - -he@1.1.x: - version "1.1.1" - resolved "https://registry.yarnpkg.com/he/-/he-1.1.1.tgz#93410fd21b009735151f8868c2f271f3427e23fd" - -history@^4.7.2: - version "4.7.2" - resolved "https://registry.yarnpkg.com/history/-/history-4.7.2.tgz#22b5c7f31633c5b8021c7f4a8a954ac139ee8d5b" - dependencies: - invariant "^2.2.1" - loose-envify "^1.2.0" - resolve-pathname "^2.2.0" - value-equal "^0.4.0" - warning "^3.0.0" - -hmac-drbg@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/hmac-drbg/-/hmac-drbg-1.0.1.tgz#d2745701025a6c775a6c545793ed502fc0c649a1" - dependencies: - hash.js "^1.0.3" - minimalistic-assert "^1.0.0" - minimalistic-crypto-utils "^1.0.1" - -hoist-non-react-statics@^2.1.1, hoist-non-react-statics@^2.3.1, hoist-non-react-statics@^2.5.0: - version "2.5.5" - resolved "https://registry.yarnpkg.com/hoist-non-react-statics/-/hoist-non-react-statics-2.5.5.tgz#c5903cf409c0dfd908f388e619d86b9c1174cb47" - -home-or-tmp@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/home-or-tmp/-/home-or-tmp-2.0.0.tgz#e36c3f2d2cae7d746a857e38d18d5f32a7882db8" - dependencies: - os-homedir "^1.0.0" - os-tmpdir "^1.0.1" - -homedir-polyfill@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/homedir-polyfill/-/homedir-polyfill-1.0.1.tgz#4c2bbc8a758998feebf5ed68580f76d46768b4bc" - dependencies: - parse-passwd "^1.0.0" - -hosted-git-info@^2.1.4: - version "2.7.1" - resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-2.7.1.tgz#97f236977bd6e125408930ff6de3eec6281ec047" - -hpack.js@^2.1.6: - version "2.1.6" - resolved "https://registry.yarnpkg.com/hpack.js/-/hpack.js-2.1.6.tgz#87774c0949e513f42e84575b3c45681fade2a0b2" - dependencies: - inherits "^2.0.1" - obuf "^1.0.0" - readable-stream "^2.0.1" - wbuf "^1.1.0" - -html-comment-regex@^1.1.0: - version "1.1.1" - resolved "https://registry.yarnpkg.com/html-comment-regex/-/html-comment-regex-1.1.1.tgz#668b93776eaae55ebde8f3ad464b307a4963625e" - -html-encoding-sniffer@^1.0.1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/html-encoding-sniffer/-/html-encoding-sniffer-1.0.2.tgz#e70d84b94da53aa375e11fe3a351be6642ca46f8" - dependencies: - whatwg-encoding "^1.0.1" - -html-entities@^1.2.0: - version "1.2.1" - resolved "https://registry.yarnpkg.com/html-entities/-/html-entities-1.2.1.tgz#0df29351f0721163515dfb9e5543e5f6eed5162f" - -html-minifier@^3.2.3: - version "3.5.19" - resolved "https://registry.yarnpkg.com/html-minifier/-/html-minifier-3.5.19.tgz#ed53c4b7326fe507bc3a1adbcc3bbb56660a2ebd" - dependencies: - camel-case "3.0.x" - clean-css "4.1.x" - commander "2.16.x" - he "1.1.x" - param-case "2.1.x" - relateurl "0.2.x" - uglify-js "3.4.x" - -html-webpack-plugin@2.29.0: - version "2.29.0" - resolved "https://registry.yarnpkg.com/html-webpack-plugin/-/html-webpack-plugin-2.29.0.tgz#e987f421853d3b6938c8c4c8171842e5fd17af23" - dependencies: - bluebird "^3.4.7" - html-minifier "^3.2.3" - loader-utils "^0.2.16" - lodash "^4.17.3" - pretty-error "^2.0.2" - toposort "^1.0.0" - -htmlparser2@~3.3.0: - version "3.3.0" - resolved "https://registry.yarnpkg.com/htmlparser2/-/htmlparser2-3.3.0.tgz#cc70d05a59f6542e43f0e685c982e14c924a9efe" - dependencies: - domelementtype "1" - domhandler "2.1" - domutils "1.1" - readable-stream "1.0" - -http-deceiver@^1.2.7: - version "1.2.7" - resolved "https://registry.yarnpkg.com/http-deceiver/-/http-deceiver-1.2.7.tgz#fa7168944ab9a519d337cb0bec7284dc3e723d87" - -http-errors@1.6.2: - version "1.6.2" - resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-1.6.2.tgz#0a002cc85707192a7e7946ceedc11155f60ec736" - dependencies: - depd "1.1.1" - inherits "2.0.3" - setprototypeof "1.0.3" - statuses ">= 1.3.1 < 2" - -http-errors@~1.6.2: - version "1.6.3" - resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-1.6.3.tgz#8b55680bb4be283a0b5bf4ea2e38580be1d9320d" - dependencies: - depd "~1.1.2" - inherits "2.0.3" - setprototypeof "1.1.0" - statuses ">= 1.4.0 < 2" - -http-parser-js@>=0.4.0: - version "0.4.13" - resolved "https://registry.yarnpkg.com/http-parser-js/-/http-parser-js-0.4.13.tgz#3bd6d6fde6e3172c9334c3b33b6c193d80fe1137" - -http-proxy-middleware@~0.17.4: - version "0.17.4" - resolved "https://registry.yarnpkg.com/http-proxy-middleware/-/http-proxy-middleware-0.17.4.tgz#642e8848851d66f09d4f124912846dbaeb41b833" - dependencies: - http-proxy "^1.16.2" - is-glob "^3.1.0" - lodash "^4.17.2" - micromatch "^2.3.11" - -http-proxy@^1.16.2: - version "1.17.0" - resolved "https://registry.yarnpkg.com/http-proxy/-/http-proxy-1.17.0.tgz#7ad38494658f84605e2f6db4436df410f4e5be9a" - dependencies: - eventemitter3 "^3.0.0" - follow-redirects "^1.0.0" - requires-port "^1.0.0" - -http-signature@~1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/http-signature/-/http-signature-1.2.0.tgz#9aecd925114772f3d95b65a60abb8f7c18fbace1" - dependencies: - assert-plus "^1.0.0" - jsprim "^1.2.2" - sshpk "^1.7.0" - -https-browserify@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/https-browserify/-/https-browserify-1.0.0.tgz#ec06c10e0a34c0f2faf199f7fd7fc78fffd03c73" - -iconv-lite@0.4.19: - version "0.4.19" - resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.19.tgz#f7468f60135f5e5dad3399c0a81be9a1603a082b" - -iconv-lite@0.4.23, iconv-lite@^0.4.17, iconv-lite@^0.4.4, iconv-lite@~0.4.13: - version "0.4.23" - resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.23.tgz#297871f63be507adcfbfca715d0cd0eed84e9a63" - dependencies: - safer-buffer ">= 2.1.2 < 3" - -icss-replace-symbols@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/icss-replace-symbols/-/icss-replace-symbols-1.1.0.tgz#06ea6f83679a7749e386cfe1fe812ae5db223ded" - -icss-utils@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/icss-utils/-/icss-utils-2.1.0.tgz#83f0a0ec378bf3246178b6c2ad9136f135b1c962" - dependencies: - postcss "^6.0.1" - -ieee754@^1.1.4: - version "1.1.12" - resolved "https://registry.yarnpkg.com/ieee754/-/ieee754-1.1.12.tgz#50bf24e5b9c8bb98af4964c941cdb0918da7b60b" - -ignore-walk@^3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/ignore-walk/-/ignore-walk-3.0.1.tgz#a83e62e7d272ac0e3b551aaa82831a19b69f82f8" - dependencies: - minimatch "^3.0.4" - -ignore@^3.3.3: - version "3.3.10" - resolved "https://registry.yarnpkg.com/ignore/-/ignore-3.3.10.tgz#0a97fb876986e8081c631160f8f9f389157f0043" - -ignore@^4.0.2: - version "4.0.6" - resolved "https://registry.yarnpkg.com/ignore/-/ignore-4.0.6.tgz#750e3db5862087b4737ebac8207ffd1ef27b25fc" - -import-lazy@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/import-lazy/-/import-lazy-2.1.0.tgz#05698e3d45c88e8d7e9d92cb0584e77f096f3e43" - -import-local@^0.1.1: - version "0.1.1" - resolved "https://registry.yarnpkg.com/import-local/-/import-local-0.1.1.tgz#b1179572aacdc11c6a91009fb430dbcab5f668a8" - dependencies: - pkg-dir "^2.0.0" - resolve-cwd "^2.0.0" - -imurmurhash@^0.1.4: - version "0.1.4" - resolved "https://registry.yarnpkg.com/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea" - -indent-string@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/indent-string/-/indent-string-2.1.0.tgz#8e2d48348742121b4a8218b7a137e9a52049dc80" - dependencies: - repeating "^2.0.0" - -indexes-of@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/indexes-of/-/indexes-of-1.0.1.tgz#f30f716c8e2bd346c7b67d3df3915566a7c05607" - -indexof@0.0.1: - version "0.0.1" - resolved "https://registry.yarnpkg.com/indexof/-/indexof-0.0.1.tgz#82dc336d232b9062179d05ab3293a66059fd435d" - -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.3, inherits@~2.0.1, inherits@~2.0.3: - 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.4, ini@~1.3.0: - version "1.3.5" - resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.5.tgz#eee25f56db1c9ec6085e0c22778083f596abf927" - -inquirer@3.3.0, inquirer@^3.0.6: - version "3.3.0" - resolved "https://registry.yarnpkg.com/inquirer/-/inquirer-3.3.0.tgz#9dd2f2ad765dcab1ff0443b491442a20ba227dc9" - dependencies: - ansi-escapes "^3.0.0" - chalk "^2.0.0" - cli-cursor "^2.1.0" - cli-width "^2.0.0" - external-editor "^2.0.4" - figures "^2.0.0" - lodash "^4.3.0" - mute-stream "0.0.7" - run-async "^2.2.0" - rx-lite "^4.0.8" - rx-lite-aggregates "^4.0.8" - string-width "^2.1.0" - strip-ansi "^4.0.0" - through "^2.3.6" - -inquirer@^5.2.0: - version "5.2.0" - resolved "https://registry.yarnpkg.com/inquirer/-/inquirer-5.2.0.tgz#db350c2b73daca77ff1243962e9f22f099685726" - dependencies: - ansi-escapes "^3.0.0" - chalk "^2.0.0" - cli-cursor "^2.1.0" - cli-width "^2.0.0" - external-editor "^2.1.0" - figures "^2.0.0" - lodash "^4.3.0" - mute-stream "0.0.7" - run-async "^2.2.0" - rxjs "^5.5.2" - string-width "^2.1.0" - strip-ansi "^4.0.0" - through "^2.3.6" - -internal-ip@1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/internal-ip/-/internal-ip-1.2.0.tgz#ae9fbf93b984878785d50a8de1b356956058cf5c" - dependencies: - meow "^3.3.0" - -interpret@^1.0.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/interpret/-/interpret-1.1.0.tgz#7ed1b1410c6a0e0f78cf95d3b8440c63f78b8614" - -invariant@^2.0.0, invariant@^2.1.0, invariant@^2.2.1, invariant@^2.2.2, invariant@^2.2.4: - version "2.2.4" - resolved "https://registry.yarnpkg.com/invariant/-/invariant-2.2.4.tgz#610f3c92c9359ce1db616e538008d23ff35158e6" - dependencies: - loose-envify "^1.0.0" - -invert-kv@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/invert-kv/-/invert-kv-1.0.0.tgz#104a8e4aaca6d3d8cd157a8ef8bfab2d7a3ffdb6" - -ip@^1.1.0, ip@^1.1.5: - version "1.1.5" - resolved "https://registry.yarnpkg.com/ip/-/ip-1.1.5.tgz#bdded70114290828c0a039e72ef25f5aaec4354a" - -ipaddr.js@1.8.0: - version "1.8.0" - resolved "https://registry.yarnpkg.com/ipaddr.js/-/ipaddr.js-1.8.0.tgz#eaa33d6ddd7ace8f7f6fe0c9ca0440e706738b1e" - -is-absolute-url@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/is-absolute-url/-/is-absolute-url-2.1.0.tgz#50530dfb84fcc9aa7dbe7852e83a37b93b9f2aa6" - -is-accessor-descriptor@^0.1.6: - version "0.1.6" - resolved "https://registry.yarnpkg.com/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz#a9e12cb3ae8d876727eeef3843f8a0897b5c98d6" - dependencies: - kind-of "^3.0.2" - -is-accessor-descriptor@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz#169c2f6d3df1f992618072365c9b0ea1f6878656" - dependencies: - kind-of "^6.0.0" - -is-arrayish@^0.2.1: - version "0.2.1" - resolved "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.2.1.tgz#77c99840527aa8ecb1a8ba697b80645a7a926a9d" - -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.1.5: - version "1.1.6" - resolved "https://registry.yarnpkg.com/is-buffer/-/is-buffer-1.1.6.tgz#efaa2ea9daa0d7ab2ea13a97b2b8ad51fefbe8be" - -is-builtin-module@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/is-builtin-module/-/is-builtin-module-1.0.0.tgz#540572d34f7ac3119f8f76c30cbc1b1e037affbe" - dependencies: - builtin-modules "^1.0.0" - -is-callable@^1.1.1, is-callable@^1.1.3: - version "1.1.4" - resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.1.4.tgz#1e1adf219e1eeb684d691f9d6a05ff0d30a24d75" - -is-ci@^1.0.10: - version "1.1.0" - resolved "https://registry.yarnpkg.com/is-ci/-/is-ci-1.1.0.tgz#247e4162e7860cebbdaf30b774d6b0ac7dcfe7a5" - dependencies: - ci-info "^1.0.0" - -is-data-descriptor@^0.1.4: - version "0.1.4" - resolved "https://registry.yarnpkg.com/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz#0b5ee648388e2c860282e793f1856fec3f301b56" - dependencies: - kind-of "^3.0.2" - -is-data-descriptor@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz#d84876321d0e7add03990406abbbbd36ba9268c7" - dependencies: - kind-of "^6.0.0" - -is-date-object@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/is-date-object/-/is-date-object-1.0.1.tgz#9aa20eb6aeebbff77fbd33e74ca01b33581d3a16" - -is-descriptor@^0.1.0: - version "0.1.6" - resolved "https://registry.yarnpkg.com/is-descriptor/-/is-descriptor-0.1.6.tgz#366d8240dde487ca51823b1ab9f07a10a78251ca" - dependencies: - is-accessor-descriptor "^0.1.6" - is-data-descriptor "^0.1.4" - kind-of "^5.0.0" - -is-descriptor@^1.0.0, is-descriptor@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/is-descriptor/-/is-descriptor-1.0.2.tgz#3b159746a66604b04f8c81524ba365c5f14d86ec" - dependencies: - is-accessor-descriptor "^1.0.0" - is-data-descriptor "^1.0.0" - kind-of "^6.0.2" - -is-directory@^0.3.1: - version "0.3.1" - resolved "https://registry.yarnpkg.com/is-directory/-/is-directory-0.3.1.tgz#61339b6f2475fc772fd9c9d83f5c8575dc154ae1" - -is-dotfile@^1.0.0: - version "1.0.3" - resolved "https://registry.yarnpkg.com/is-dotfile/-/is-dotfile-1.0.3.tgz#a6a2f32ffd2dfb04f5ca25ecd0f6b83cf798a1e1" - -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.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-extendable@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/is-extendable/-/is-extendable-1.0.1.tgz#a7470f9e426733d81bd81e1155264e3a3507cab4" - dependencies: - is-plain-object "^2.0.4" - -is-extglob@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-1.0.0.tgz#ac468177c4943405a092fc8f29760c6ffc6206c0" - -is-extglob@^2.1.0, is-extglob@^2.1.1: - version "2.1.1" - resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2" - -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-fullwidth-code-point@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz#a3b30a5c4f199183167aaab93beefae3ddfb654f" - -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-glob@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-3.1.0.tgz#7ba5ae24217804ac70707b96922567486cc3e84a" - dependencies: - is-extglob "^2.1.0" - -is-glob@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.0.tgz#9521c76845cc2610a85203ddf080a958c2ffabc0" - dependencies: - is-extglob "^2.1.1" - -is-installed-globally@^0.1.0: - version "0.1.0" - resolved "https://registry.yarnpkg.com/is-installed-globally/-/is-installed-globally-0.1.0.tgz#0dfd98f5a9111716dd535dda6492f67bf3d25a80" - dependencies: - global-dirs "^0.1.0" - is-path-inside "^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.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-number@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/is-number/-/is-number-3.0.0.tgz#24fd6201a4782cf50561c810276afc7d12d71195" - dependencies: - kind-of "^3.0.2" - -is-number@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/is-number/-/is-number-4.0.0.tgz#0026e37f5454d73e356dfe6564699867c6a7f0ff" - -is-obj@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/is-obj/-/is-obj-1.0.1.tgz#3e4729ac1f5fde025cd7d83a896dab9f4f67db0f" - -is-path-cwd@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/is-path-cwd/-/is-path-cwd-1.0.0.tgz#d225ec23132e89edd38fda767472e62e65f1106d" - -is-path-in-cwd@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/is-path-in-cwd/-/is-path-in-cwd-1.0.1.tgz#5ac48b345ef675339bd6c7a48a912110b241cf52" - dependencies: - is-path-inside "^1.0.0" - -is-path-inside@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/is-path-inside/-/is-path-inside-1.0.1.tgz#8ef5b7de50437a3fdca6b4e865ef7aa55cb48036" - dependencies: - path-is-inside "^1.0.1" - -is-plain-obj@^1.0.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/is-plain-obj/-/is-plain-obj-1.1.0.tgz#71a50c8429dfca773c92a390a4a03b39fcd51d3e" - -is-plain-object@^2.0.1, is-plain-object@^2.0.3, is-plain-object@^2.0.4: - version "2.0.4" - resolved "https://registry.yarnpkg.com/is-plain-object/-/is-plain-object-2.0.4.tgz#2c163b3fafb1b606d9d17928f05c2a1c38e07677" - dependencies: - isobject "^3.0.1" - -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-promise@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/is-promise/-/is-promise-2.1.0.tgz#79a2a9ece7f096e80f36d2b2f3bc16c1ff4bf3fa" - -is-redirect@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/is-redirect/-/is-redirect-1.0.0.tgz#1d03dded53bd8db0f30c26e4f95d36fc7c87dc24" - -is-regex@^1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/is-regex/-/is-regex-1.0.4.tgz#5517489b547091b0930e095654ced25ee97e9491" - dependencies: - has "^1.0.1" - -is-resolvable@^1.0.0, is-resolvable@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/is-resolvable/-/is-resolvable-1.1.0.tgz#fb18f87ce1feb925169c9a407c19318a3206ed88" - -is-retry-allowed@^1.0.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/is-retry-allowed/-/is-retry-allowed-1.1.0.tgz#11a060568b67339444033d0125a61a20d564fb34" - -is-root@1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/is-root/-/is-root-1.0.0.tgz#07b6c233bc394cd9d02ba15c966bd6660d6342d5" - -is-stream@^1.0.0, is-stream@^1.0.1, is-stream@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-1.1.0.tgz#12d4a3dd4e68e0b79ceb8dbc84173ae80d91ca44" - -is-svg@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/is-svg/-/is-svg-2.1.0.tgz#cf61090da0d9efbcab8722deba6f032208dbb0e9" - dependencies: - html-comment-regex "^1.1.0" - -is-symbol@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/is-symbol/-/is-symbol-1.0.1.tgz#3cc59f00025194b6ab2e38dbae6689256b660572" - -is-typedarray@~1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/is-typedarray/-/is-typedarray-1.0.0.tgz#e479c80858df0c1b11ddda6940f96011fcda4a9a" - -is-utf8@^0.2.0: - version "0.2.1" - resolved "https://registry.yarnpkg.com/is-utf8/-/is-utf8-0.2.1.tgz#4b0da1442104d1b336340e80797e865cf39f7d72" - -is-windows@^1.0.1, is-windows@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/is-windows/-/is-windows-1.0.2.tgz#d1850eb9791ecd18e6182ce12a30f396634bb19d" - -is-wsl@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/is-wsl/-/is-wsl-1.1.0.tgz#1f16e4aa22b04d1336b66188a66af3c600c3a66d" - -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, isarray@~1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11" - -isexe@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10" - -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" - -isobject@^3.0.0, isobject@^3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/isobject/-/isobject-3.0.1.tgz#4e431e92b11a9731636aa1f9c8d1ccbcfdab78df" - -isomorphic-fetch@^2.1.1: - version "2.2.1" - resolved "https://registry.yarnpkg.com/isomorphic-fetch/-/isomorphic-fetch-2.2.1.tgz#611ae1acf14f5e81f729507472819fe9733558a9" - dependencies: - node-fetch "^1.0.1" - whatwg-fetch ">=0.10.0" - -isstream@~0.1.2: - version "0.1.2" - resolved "https://registry.yarnpkg.com/isstream/-/isstream-0.1.2.tgz#47e63f7af55afa6f92e1500e690eb8b8529c099a" - -istanbul-api@^1.1.1: - version "1.3.1" - resolved "https://registry.yarnpkg.com/istanbul-api/-/istanbul-api-1.3.1.tgz#4c3b05d18c0016d1022e079b98dc82c40f488954" - dependencies: - async "^2.1.4" - compare-versions "^3.1.0" - fileset "^2.0.2" - istanbul-lib-coverage "^1.2.0" - istanbul-lib-hook "^1.2.0" - istanbul-lib-instrument "^1.10.1" - istanbul-lib-report "^1.1.4" - istanbul-lib-source-maps "^1.2.4" - istanbul-reports "^1.3.0" - js-yaml "^3.7.0" - mkdirp "^0.5.1" - once "^1.4.0" - -istanbul-lib-coverage@^1.0.1, istanbul-lib-coverage@^1.1.2, istanbul-lib-coverage@^1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/istanbul-lib-coverage/-/istanbul-lib-coverage-1.2.0.tgz#f7d8f2e42b97e37fe796114cb0f9d68b5e3a4341" - -istanbul-lib-hook@^1.2.0: - version "1.2.1" - resolved "https://registry.yarnpkg.com/istanbul-lib-hook/-/istanbul-lib-hook-1.2.1.tgz#f614ec45287b2a8fc4f07f5660af787575601805" - dependencies: - append-transform "^1.0.0" - -istanbul-lib-instrument@^1.10.1, istanbul-lib-instrument@^1.4.2: - version "1.10.1" - resolved "https://registry.yarnpkg.com/istanbul-lib-instrument/-/istanbul-lib-instrument-1.10.1.tgz#724b4b6caceba8692d3f1f9d0727e279c401af7b" - dependencies: - babel-generator "^6.18.0" - babel-template "^6.16.0" - babel-traverse "^6.18.0" - babel-types "^6.18.0" - babylon "^6.18.0" - istanbul-lib-coverage "^1.2.0" - semver "^5.3.0" - -istanbul-lib-report@^1.1.4: - version "1.1.4" - resolved "https://registry.yarnpkg.com/istanbul-lib-report/-/istanbul-lib-report-1.1.4.tgz#e886cdf505c4ebbd8e099e4396a90d0a28e2acb5" - dependencies: - istanbul-lib-coverage "^1.2.0" - mkdirp "^0.5.1" - path-parse "^1.0.5" - supports-color "^3.1.2" - -istanbul-lib-source-maps@^1.1.0: - version "1.2.3" - resolved "https://registry.yarnpkg.com/istanbul-lib-source-maps/-/istanbul-lib-source-maps-1.2.3.tgz#20fb54b14e14b3fb6edb6aca3571fd2143db44e6" - dependencies: - debug "^3.1.0" - istanbul-lib-coverage "^1.1.2" - mkdirp "^0.5.1" - rimraf "^2.6.1" - source-map "^0.5.3" - -istanbul-lib-source-maps@^1.2.4: - version "1.2.5" - resolved "https://registry.yarnpkg.com/istanbul-lib-source-maps/-/istanbul-lib-source-maps-1.2.5.tgz#ffe6be4e7ab86d3603e4290d54990b14506fc9b1" - dependencies: - debug "^3.1.0" - istanbul-lib-coverage "^1.2.0" - mkdirp "^0.5.1" - rimraf "^2.6.1" - source-map "^0.5.3" - -istanbul-reports@^1.3.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/istanbul-reports/-/istanbul-reports-1.3.0.tgz#2f322e81e1d9520767597dca3c20a0cce89a3554" - dependencies: - handlebars "^4.0.3" - -jest-changed-files@^20.0.3: - version "20.0.3" - resolved "https://registry.yarnpkg.com/jest-changed-files/-/jest-changed-files-20.0.3.tgz#9394d5cc65c438406149bef1bf4d52b68e03e3f8" - -jest-cli@^20.0.4: - version "20.0.4" - resolved "https://registry.yarnpkg.com/jest-cli/-/jest-cli-20.0.4.tgz#e532b19d88ae5bc6c417e8b0593a6fe954b1dc93" - dependencies: - ansi-escapes "^1.4.0" - callsites "^2.0.0" - chalk "^1.1.3" - graceful-fs "^4.1.11" - is-ci "^1.0.10" - istanbul-api "^1.1.1" - istanbul-lib-coverage "^1.0.1" - istanbul-lib-instrument "^1.4.2" - istanbul-lib-source-maps "^1.1.0" - jest-changed-files "^20.0.3" - jest-config "^20.0.4" - jest-docblock "^20.0.3" - jest-environment-jsdom "^20.0.3" - jest-haste-map "^20.0.4" - jest-jasmine2 "^20.0.4" - jest-message-util "^20.0.3" - jest-regex-util "^20.0.3" - jest-resolve-dependencies "^20.0.3" - jest-runtime "^20.0.4" - jest-snapshot "^20.0.3" - jest-util "^20.0.3" - micromatch "^2.3.11" - node-notifier "^5.0.2" - pify "^2.3.0" - slash "^1.0.0" - string-length "^1.0.1" - throat "^3.0.0" - which "^1.2.12" - worker-farm "^1.3.1" - yargs "^7.0.2" - -jest-config@^20.0.4: - version "20.0.4" - resolved "https://registry.yarnpkg.com/jest-config/-/jest-config-20.0.4.tgz#e37930ab2217c913605eff13e7bd763ec48faeea" - dependencies: - chalk "^1.1.3" - glob "^7.1.1" - jest-environment-jsdom "^20.0.3" - jest-environment-node "^20.0.3" - jest-jasmine2 "^20.0.4" - jest-matcher-utils "^20.0.3" - jest-regex-util "^20.0.3" - jest-resolve "^20.0.4" - jest-validate "^20.0.3" - pretty-format "^20.0.3" - -jest-diff@^20.0.3: - version "20.0.3" - resolved "https://registry.yarnpkg.com/jest-diff/-/jest-diff-20.0.3.tgz#81f288fd9e675f0fb23c75f1c2b19445fe586617" - dependencies: - chalk "^1.1.3" - diff "^3.2.0" - jest-matcher-utils "^20.0.3" - pretty-format "^20.0.3" - -jest-docblock@^20.0.3: - version "20.0.3" - resolved "https://registry.yarnpkg.com/jest-docblock/-/jest-docblock-20.0.3.tgz#17bea984342cc33d83c50fbe1545ea0efaa44712" - -jest-environment-jsdom@^20.0.3: - version "20.0.3" - resolved "https://registry.yarnpkg.com/jest-environment-jsdom/-/jest-environment-jsdom-20.0.3.tgz#048a8ac12ee225f7190417713834bb999787de99" - dependencies: - jest-mock "^20.0.3" - jest-util "^20.0.3" - jsdom "^9.12.0" - -jest-environment-node@^20.0.3: - version "20.0.3" - resolved "https://registry.yarnpkg.com/jest-environment-node/-/jest-environment-node-20.0.3.tgz#d488bc4612af2c246e986e8ae7671a099163d403" - dependencies: - jest-mock "^20.0.3" - jest-util "^20.0.3" - -jest-haste-map@^20.0.4: - version "20.0.5" - resolved "https://registry.yarnpkg.com/jest-haste-map/-/jest-haste-map-20.0.5.tgz#abad74efb1a005974a7b6517e11010709cab9112" - dependencies: - fb-watchman "^2.0.0" - graceful-fs "^4.1.11" - jest-docblock "^20.0.3" - micromatch "^2.3.11" - sane "~1.6.0" - worker-farm "^1.3.1" - -jest-jasmine2@^20.0.4: - version "20.0.4" - resolved "https://registry.yarnpkg.com/jest-jasmine2/-/jest-jasmine2-20.0.4.tgz#fcc5b1411780d911d042902ef1859e852e60d5e1" - dependencies: - chalk "^1.1.3" - graceful-fs "^4.1.11" - jest-diff "^20.0.3" - jest-matcher-utils "^20.0.3" - jest-matchers "^20.0.3" - jest-message-util "^20.0.3" - jest-snapshot "^20.0.3" - once "^1.4.0" - p-map "^1.1.1" - -jest-matcher-utils@^20.0.3: - version "20.0.3" - resolved "https://registry.yarnpkg.com/jest-matcher-utils/-/jest-matcher-utils-20.0.3.tgz#b3a6b8e37ca577803b0832a98b164f44b7815612" - dependencies: - chalk "^1.1.3" - pretty-format "^20.0.3" - -jest-matchers@^20.0.3: - version "20.0.3" - resolved "https://registry.yarnpkg.com/jest-matchers/-/jest-matchers-20.0.3.tgz#ca69db1c32db5a6f707fa5e0401abb55700dfd60" - dependencies: - jest-diff "^20.0.3" - jest-matcher-utils "^20.0.3" - jest-message-util "^20.0.3" - jest-regex-util "^20.0.3" - -jest-message-util@^20.0.3: - version "20.0.3" - resolved "https://registry.yarnpkg.com/jest-message-util/-/jest-message-util-20.0.3.tgz#6aec2844306fcb0e6e74d5796c1006d96fdd831c" - dependencies: - chalk "^1.1.3" - micromatch "^2.3.11" - slash "^1.0.0" - -jest-mock@^20.0.3: - version "20.0.3" - resolved "https://registry.yarnpkg.com/jest-mock/-/jest-mock-20.0.3.tgz#8bc070e90414aa155c11a8d64c869a0d5c71da59" - -jest-regex-util@^20.0.3: - version "20.0.3" - resolved "https://registry.yarnpkg.com/jest-regex-util/-/jest-regex-util-20.0.3.tgz#85bbab5d133e44625b19faf8c6aa5122d085d762" - -jest-resolve-dependencies@^20.0.3: - version "20.0.3" - resolved "https://registry.yarnpkg.com/jest-resolve-dependencies/-/jest-resolve-dependencies-20.0.3.tgz#6e14a7b717af0f2cb3667c549de40af017b1723a" - dependencies: - jest-regex-util "^20.0.3" - -jest-resolve@^20.0.4: - version "20.0.4" - resolved "https://registry.yarnpkg.com/jest-resolve/-/jest-resolve-20.0.4.tgz#9448b3e8b6bafc15479444c6499045b7ffe597a5" - dependencies: - browser-resolve "^1.11.2" - is-builtin-module "^1.0.0" - resolve "^1.3.2" - -jest-runtime@^20.0.4: - version "20.0.4" - resolved "https://registry.yarnpkg.com/jest-runtime/-/jest-runtime-20.0.4.tgz#a2c802219c4203f754df1404e490186169d124d8" - dependencies: - babel-core "^6.0.0" - babel-jest "^20.0.3" - babel-plugin-istanbul "^4.0.0" - chalk "^1.1.3" - convert-source-map "^1.4.0" - graceful-fs "^4.1.11" - jest-config "^20.0.4" - jest-haste-map "^20.0.4" - jest-regex-util "^20.0.3" - jest-resolve "^20.0.4" - jest-util "^20.0.3" - json-stable-stringify "^1.0.1" - micromatch "^2.3.11" - strip-bom "3.0.0" - yargs "^7.0.2" - -jest-snapshot@^20.0.3: - version "20.0.3" - resolved "https://registry.yarnpkg.com/jest-snapshot/-/jest-snapshot-20.0.3.tgz#5b847e1adb1a4d90852a7f9f125086e187c76566" - dependencies: - chalk "^1.1.3" - jest-diff "^20.0.3" - jest-matcher-utils "^20.0.3" - jest-util "^20.0.3" - natural-compare "^1.4.0" - pretty-format "^20.0.3" - -jest-util@^20.0.3: - version "20.0.3" - resolved "https://registry.yarnpkg.com/jest-util/-/jest-util-20.0.3.tgz#0c07f7d80d82f4e5a67c6f8b9c3fe7f65cfd32ad" - dependencies: - chalk "^1.1.3" - graceful-fs "^4.1.11" - jest-message-util "^20.0.3" - jest-mock "^20.0.3" - jest-validate "^20.0.3" - leven "^2.1.0" - mkdirp "^0.5.1" - -jest-validate@^20.0.3: - version "20.0.3" - resolved "https://registry.yarnpkg.com/jest-validate/-/jest-validate-20.0.3.tgz#d0cfd1de4f579f298484925c280f8f1d94ec3cab" - dependencies: - chalk "^1.1.3" - jest-matcher-utils "^20.0.3" - leven "^2.1.0" - pretty-format "^20.0.3" - -jest@20.0.4: - version "20.0.4" - resolved "https://registry.yarnpkg.com/jest/-/jest-20.0.4.tgz#3dd260c2989d6dad678b1e9cc4d91944f6d602ac" - dependencies: - jest-cli "^20.0.4" - -jquery-match-height@^0.7.2: - version "0.7.2" - resolved "https://registry.yarnpkg.com/jquery-match-height/-/jquery-match-height-0.7.2.tgz#f8d9f3ba5314daab109cf07408674be204be5f0e" - -"jquery@>= 2.1.x", jquery@>=1.7, jquery@>=1.7.0, "jquery@>=1.7.1 <4.0.0", jquery@>=1.8, "jquery@^1.8.3 || ^2.0 || ^3.0": - version "3.3.1" - resolved "https://registry.yarnpkg.com/jquery/-/jquery-3.3.1.tgz#958ce29e81c9790f31be7792df5d4d95fc57fbca" - -jquery@~3.2.1: - version "3.2.1" - resolved "https://registry.yarnpkg.com/jquery/-/jquery-3.2.1.tgz#5c4d9de652af6cd0a770154a631bba12b015c787" - -js-base64@^2.1.9: - version "2.4.8" - resolved "https://registry.yarnpkg.com/js-base64/-/js-base64-2.4.8.tgz#57a9b130888f956834aa40c5b165ba59c758f033" - -"js-tokens@^3.0.0 || ^4.0.0": - version "4.0.0" - resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499" - -js-tokens@^3.0.2: - version "3.0.2" - resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-3.0.2.tgz#9866df395102130e38f7f996bceb65443209c25b" - -js-yaml@^3.11.0, js-yaml@^3.4.3, js-yaml@^3.7.0, js-yaml@^3.9.1: - version "3.12.0" - resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.12.0.tgz#eaed656ec8344f10f527c6bfa1b6e2244de167d1" - dependencies: - argparse "^1.0.7" - esprima "^4.0.0" - -js-yaml@~3.7.0: - version "3.7.0" - resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.7.0.tgz#5c967ddd837a9bfdca5f2de84253abe8a1c03b80" - dependencies: - argparse "^1.0.7" - esprima "^2.6.0" - -jsbn@~0.1.0: - version "0.1.1" - resolved "https://registry.yarnpkg.com/jsbn/-/jsbn-0.1.1.tgz#a5e654c2e5a2deb5f201d96cefbca80c0ef2f513" - -jsdom@^9.12.0: - version "9.12.0" - resolved "https://registry.yarnpkg.com/jsdom/-/jsdom-9.12.0.tgz#e8c546fffcb06c00d4833ca84410fed7f8a097d4" - dependencies: - abab "^1.0.3" - acorn "^4.0.4" - acorn-globals "^3.1.0" - array-equal "^1.0.0" - content-type-parser "^1.0.1" - cssom ">= 0.3.2 < 0.4.0" - cssstyle ">= 0.2.37 < 0.3.0" - escodegen "^1.6.1" - html-encoding-sniffer "^1.0.1" - nwmatcher ">= 1.3.9 < 2.0.0" - parse5 "^1.5.1" - request "^2.79.0" - sax "^1.2.1" - symbol-tree "^3.2.1" - tough-cookie "^2.3.2" - webidl-conversions "^4.0.0" - whatwg-encoding "^1.0.1" - whatwg-url "^4.3.0" - xml-name-validator "^2.0.1" - -jsesc@^1.3.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-1.3.0.tgz#46c3fec8c1892b12b0833db9bc7622176dbab34b" - -jsesc@~0.5.0: - version "0.5.0" - resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-0.5.0.tgz#e7dee66e35d6fc16f710fe91d5cf69f70f08911d" - -json-loader@^0.5.4: - version "0.5.7" - resolved "https://registry.yarnpkg.com/json-loader/-/json-loader-0.5.7.tgz#dca14a70235ff82f0ac9a3abeb60d337a365185d" - -json-schema-traverse@^0.3.0: - version "0.3.1" - resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-0.3.1.tgz#349a6d44c53a51de89b40805c5d5e59b417d3340" - -json-schema-traverse@^0.4.1: - version "0.4.1" - resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz#69f6a87d9513ab8bb8fe63bdb0979c448e684660" - -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-without-jsonify@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz#9db7b59496ad3f3cfef30a75142d2d930ad72651" - -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" - -json3@^3.3.2: - version "3.3.2" - resolved "https://registry.yarnpkg.com/json3/-/json3-3.3.2.tgz#3c0434743df93e2f5c42aee7b19bcb483575f4e1" - -json5@^0.5.0, json5@^0.5.1: - version "0.5.1" - resolved "https://registry.yarnpkg.com/json5/-/json5-0.5.1.tgz#1eade7acc012034ad84e2396767ead9fa5495821" - -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" - -jsonfile@^3.0.0: - version "3.0.1" - resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-3.0.1.tgz#a5ecc6f65f53f662c4415c7675a0331d0992ec66" - 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.1" - resolved "https://registry.yarnpkg.com/jsprim/-/jsprim-1.4.1.tgz#313e66bc1e5cc06e438bc1b7499c2e5c56acb6a2" - dependencies: - assert-plus "1.0.0" - extsprintf "1.3.0" - json-schema "0.2.3" - verror "1.10.0" - -jsx-ast-utils@^1.4.0: - version "1.4.1" - resolved "https://registry.yarnpkg.com/jsx-ast-utils/-/jsx-ast-utils-1.4.1.tgz#3867213e8dd79bf1e8f2300c0cfc1efb182c0df1" - -jsx-ast-utils@^2.0.0, jsx-ast-utils@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/jsx-ast-utils/-/jsx-ast-utils-2.0.1.tgz#e801b1b39985e20fffc87b40e3748080e2dcac7f" - dependencies: - array-includes "^3.0.3" - -keycode@^2.1.2: - version "2.2.0" - resolved "https://registry.yarnpkg.com/keycode/-/keycode-2.2.0.tgz#3d0af56dc7b8b8e5cba8d0a97f107204eec22b04" - -killable@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/killable/-/killable-1.0.0.tgz#da8b84bd47de5395878f95d64d02f2449fe05e6b" - -kind-of@^3.0.2, kind-of@^3.0.3, kind-of@^3.2.0: - version "3.2.2" - resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-3.2.2.tgz#31ea21a734bab9bbb0f32466d893aea51e4a3c64" - dependencies: - is-buffer "^1.1.5" - -kind-of@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-4.0.0.tgz#20813df3d712928b207378691a45066fae72dd57" - dependencies: - is-buffer "^1.1.5" - -kind-of@^5.0.0: - version "5.1.0" - resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-5.1.0.tgz#729c91e2d857b7a419a1f9aa65685c4c33f5845d" - -kind-of@^6.0.0, kind-of@^6.0.2: - version "6.0.2" - resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-6.0.2.tgz#01146b36a6218e64e58f3a8d66de5d7fc6f6d051" - -klaw@^1.0.0: - version "1.3.1" - resolved "https://registry.yarnpkg.com/klaw/-/klaw-1.3.1.tgz#4088433b46b3b1ba259d78785d8e96f73ba02439" - optionalDependencies: - graceful-fs "^4.1.9" - -latest-version@^3.0.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/latest-version/-/latest-version-3.1.0.tgz#a205383fea322b33b5ae3b18abee0dc2f356ee15" - dependencies: - package-json "^4.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" - -leven@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/leven/-/leven-2.1.0.tgz#c2e7a9f772094dee9d34202ae8acce4687875580" - -levn@^0.3.0, levn@~0.3.0: - version "0.3.0" - resolved "https://registry.yarnpkg.com/levn/-/levn-0.3.0.tgz#3b09924edf9f083c0490fdd4c0bc4421e04764ee" - dependencies: - prelude-ls "~1.1.2" - type-check "~0.3.2" - -load-json-file@^1.0.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/load-json-file/-/load-json-file-1.1.0.tgz#956905708d58b4bab4c2261b04f59f31c99374c0" - dependencies: - graceful-fs "^4.1.2" - parse-json "^2.2.0" - pify "^2.0.0" - pinkie-promise "^2.0.0" - strip-bom "^2.0.0" - -load-json-file@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/load-json-file/-/load-json-file-2.0.0.tgz#7947e42149af80d696cbf797bcaabcfe1fe29ca8" - dependencies: - graceful-fs "^4.1.2" - parse-json "^2.2.0" - pify "^2.0.0" - strip-bom "^3.0.0" - -loader-fs-cache@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/loader-fs-cache/-/loader-fs-cache-1.0.1.tgz#56e0bf08bd9708b26a765b68509840c8dec9fdbc" - dependencies: - find-cache-dir "^0.1.1" - mkdirp "0.5.1" - -loader-runner@^2.3.0: - version "2.3.0" - resolved "https://registry.yarnpkg.com/loader-runner/-/loader-runner-2.3.0.tgz#f482aea82d543e07921700d5a46ef26fdac6b8a2" - -loader-utils@^0.2.16: - version "0.2.17" - resolved "https://registry.yarnpkg.com/loader-utils/-/loader-utils-0.2.17.tgz#f86e6374d43205a6e6c60e9196f17c0299bfb348" - dependencies: - big.js "^3.1.3" - emojis-list "^2.0.0" - json5 "^0.5.0" - object-assign "^4.0.1" - -loader-utils@^1.0.2, loader-utils@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/loader-utils/-/loader-utils-1.1.0.tgz#c98aef488bcceda2ffb5e2de646d6a754429f5cd" - dependencies: - big.js "^3.1.3" - emojis-list "^2.0.0" - json5 "^0.5.0" - -locate-path@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-2.0.0.tgz#2b568b265eec944c6d9c0de9c3dbbbca0354cd8e" - dependencies: - p-locate "^2.0.0" - path-exists "^3.0.0" - -lodash-es@^4.17.5, lodash-es@^4.2.1: - version "4.17.10" - resolved "https://registry.yarnpkg.com/lodash-es/-/lodash-es-4.17.10.tgz#62cd7104cdf5dd87f235a837f0ede0e8e5117e05" - -lodash._reinterpolate@~3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/lodash._reinterpolate/-/lodash._reinterpolate-3.0.0.tgz#0ccf2d89166af03b3663c796538b75ac6e114d9d" - -lodash.camelcase@^4.3.0: - version "4.3.0" - resolved "https://registry.yarnpkg.com/lodash.camelcase/-/lodash.camelcase-4.3.0.tgz#b28aa6288a2b9fc651035c7711f65ab6190331a6" - -lodash.cond@^4.3.0: - version "4.5.2" - resolved "https://registry.yarnpkg.com/lodash.cond/-/lodash.cond-4.5.2.tgz#f471a1da486be60f6ab955d17115523dd1d255d5" - -lodash.debounce@^4.0.8: - version "4.0.8" - resolved "https://registry.yarnpkg.com/lodash.debounce/-/lodash.debounce-4.0.8.tgz#82d79bff30a67c4005ffd5e2515300ad9ca4d7af" - -lodash.defaults@^4.2.0: - version "4.2.0" - resolved "https://registry.yarnpkg.com/lodash.defaults/-/lodash.defaults-4.2.0.tgz#d09178716ffea4dde9e5fb7b37f6f0802274580c" - -lodash.memoize@^4.1.2: - version "4.1.2" - resolved "https://registry.yarnpkg.com/lodash.memoize/-/lodash.memoize-4.1.2.tgz#bcc6c49a42a2840ed997f323eada5ecd182e0bfe" - -lodash.template@^4.4.0: - version "4.4.0" - resolved "https://registry.yarnpkg.com/lodash.template/-/lodash.template-4.4.0.tgz#e73a0385c8355591746e020b99679c690e68fba0" - dependencies: - lodash._reinterpolate "~3.0.0" - lodash.templatesettings "^4.0.0" - -lodash.templatesettings@^4.0.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/lodash.templatesettings/-/lodash.templatesettings-4.1.0.tgz#2b4d4e95ba440d915ff08bc899e4553666713316" - dependencies: - lodash._reinterpolate "~3.0.0" - -lodash.uniq@^4.5.0: - version "4.5.0" - resolved "https://registry.yarnpkg.com/lodash.uniq/-/lodash.uniq-4.5.0.tgz#d0225373aeb652adc1bc82e4945339a842754773" - -"lodash@>=3.5 <5", lodash@^4.15.0, lodash@^4.17.10, lodash@^4.17.2, lodash@^4.17.3, lodash@^4.17.4, lodash@^4.17.5, lodash@^4.2.1, lodash@^4.3.0: - version "4.17.10" - resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.10.tgz#1b7793cf7259ea38fb3661d4d38b3260af8ae4e7" - -loglevel@^1.4.1: - version "1.6.1" - resolved "https://registry.yarnpkg.com/loglevel/-/loglevel-1.6.1.tgz#e0fc95133b6ef276cdc8887cdaf24aa6f156f8fa" - -longest@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/longest/-/longest-1.0.1.tgz#30a0b2da38f73770e8294a0d22e6625ed77d0097" - -loose-envify@^1.0.0, loose-envify@^1.1.0, loose-envify@^1.2.0, loose-envify@^1.3.1: - version "1.4.0" - resolved "https://registry.yarnpkg.com/loose-envify/-/loose-envify-1.4.0.tgz#71ee51fa7be4caec1a63839f7e682d8132d30caf" - dependencies: - js-tokens "^3.0.0 || ^4.0.0" - -loud-rejection@^1.0.0: - version "1.6.0" - resolved "https://registry.yarnpkg.com/loud-rejection/-/loud-rejection-1.6.0.tgz#5b46f80147edee578870f086d04821cf998e551f" - dependencies: - currently-unhandled "^0.4.1" - signal-exit "^3.0.0" - -lower-case@^1.1.1: - version "1.1.4" - resolved "https://registry.yarnpkg.com/lower-case/-/lower-case-1.1.4.tgz#9a2cabd1b9e8e0ae993a4bf7d5875c39c42e8eac" - -lowercase-keys@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/lowercase-keys/-/lowercase-keys-1.0.1.tgz#6f9e30b47084d971a7c820ff15a6c5167b74c26f" - -lru-cache@^4.0.1: - version "4.1.3" - resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-4.1.3.tgz#a1175cf3496dfc8436c156c334b4955992bce69c" - dependencies: - pseudomap "^1.0.2" - yallist "^2.1.2" - -make-dir@^1.0.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-1.3.0.tgz#79c1033b80515bd6d24ec9933e860ca75ee27f0c" - dependencies: - pify "^3.0.0" - -makeerror@1.0.x: - version "1.0.11" - resolved "https://registry.yarnpkg.com/makeerror/-/makeerror-1.0.11.tgz#e01a5c9109f2af79660e4e8b9587790184f5a96c" - dependencies: - tmpl "1.0.x" - -map-cache@^0.2.2: - version "0.2.2" - resolved "https://registry.yarnpkg.com/map-cache/-/map-cache-0.2.2.tgz#c32abd0bd6525d9b051645bb4f26ac5dc98a0dbf" - -map-obj@^1.0.0, map-obj@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/map-obj/-/map-obj-1.0.1.tgz#d933ceb9205d82bdcf4886f6742bdc2b4dea146d" - -map-visit@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/map-visit/-/map-visit-1.0.0.tgz#ecdca8f13144e660f1b5bd41f12f3479d98dfb8f" - dependencies: - object-visit "^1.0.0" - -math-expression-evaluator@^1.2.14: - version "1.2.17" - resolved "https://registry.yarnpkg.com/math-expression-evaluator/-/math-expression-evaluator-1.2.17.tgz#de819fdbcd84dccd8fae59c6aeb79615b9d266ac" - -math-random@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/math-random/-/math-random-1.0.1.tgz#8b3aac588b8a66e4975e3cdea67f7bb329601fac" - -md5.js@^1.3.4: - version "1.3.4" - resolved "https://registry.yarnpkg.com/md5.js/-/md5.js-1.3.4.tgz#e9bdbde94a20a5ac18b04340fc5764d5b09d901d" - dependencies: - hash-base "^3.0.0" - inherits "^2.0.1" - -media-typer@0.3.0: - version "0.3.0" - resolved "https://registry.yarnpkg.com/media-typer/-/media-typer-0.3.0.tgz#8710d7af0aa626f8fffa1ce00168545263255748" - -mem@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/mem/-/mem-1.1.0.tgz#5edd52b485ca1d900fe64895505399a0dfa45f76" - dependencies: - mimic-fn "^1.0.0" - -memory-fs@^0.4.0, memory-fs@~0.4.1: - version "0.4.1" - resolved "https://registry.yarnpkg.com/memory-fs/-/memory-fs-0.4.1.tgz#3a9a20b8462523e447cfbc7e8bb80ed667bfc552" - dependencies: - errno "^0.1.3" - readable-stream "^2.0.1" - -meow@^3.3.0, meow@^3.7.0: - version "3.7.0" - resolved "https://registry.yarnpkg.com/meow/-/meow-3.7.0.tgz#72cb668b425228290abbfa856892587308a801fb" - dependencies: - camelcase-keys "^2.0.0" - decamelize "^1.1.2" - loud-rejection "^1.0.0" - map-obj "^1.0.1" - minimist "^1.1.3" - normalize-package-data "^2.3.4" - object-assign "^4.0.1" - read-pkg-up "^1.0.1" - redent "^1.0.0" - trim-newlines "^1.0.0" - -merge-descriptors@1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/merge-descriptors/-/merge-descriptors-1.0.1.tgz#b00aaa556dd8b44568150ec9d1b953f3f90cbb61" - -merge@^1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/merge/-/merge-1.2.0.tgz#7531e39d4949c281a66b8c5a6e0265e8b05894da" - -methods@~1.1.2: - version "1.1.2" - resolved "https://registry.yarnpkg.com/methods/-/methods-1.1.2.tgz#5529a4d67654134edcc5266656835b0f851afcee" - -micromatch@^2.1.5, micromatch@^2.3.11: - 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" - -micromatch@^3.1.4, micromatch@^3.1.8: - version "3.1.10" - resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-3.1.10.tgz#70859bc95c9840952f359a068a3fc49f9ecfac23" - dependencies: - arr-diff "^4.0.0" - array-unique "^0.3.2" - braces "^2.3.1" - define-property "^2.0.2" - extend-shallow "^3.0.2" - extglob "^2.0.4" - fragment-cache "^0.2.1" - kind-of "^6.0.2" - nanomatch "^1.2.9" - object.pick "^1.3.0" - regex-not "^1.0.0" - snapdragon "^0.8.1" - to-regex "^3.0.2" - -miller-rabin@^4.0.0: - version "4.0.1" - resolved "https://registry.yarnpkg.com/miller-rabin/-/miller-rabin-4.0.1.tgz#f080351c865b0dc562a8462966daa53543c78a4d" - dependencies: - bn.js "^4.0.0" - brorand "^1.0.1" - -"mime-db@>= 1.34.0 < 2", mime-db@~1.35.0: - version "1.35.0" - resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.35.0.tgz#0569d657466491283709663ad379a99b90d9ab47" - -mime-types@^2.1.12, mime-types@~2.1.17, mime-types@~2.1.18, mime-types@~2.1.19: - version "2.1.19" - resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.19.tgz#71e464537a7ef81c15f2db9d97e913fc0ff606f0" - dependencies: - mime-db "~1.35.0" - -mime@1.4.1: - version "1.4.1" - resolved "https://registry.yarnpkg.com/mime/-/mime-1.4.1.tgz#121f9ebc49e3766f311a76e1fa1c8003c4b03aa6" - -mime@^1.4.1, mime@^1.5.0: - version "1.6.0" - resolved "https://registry.yarnpkg.com/mime/-/mime-1.6.0.tgz#32cd9e5c64553bd58d19a568af452acff04981b1" - -mimic-fn@^1.0.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-1.2.0.tgz#820c86a39334640e99516928bd03fca88057d022" - -minimalistic-assert@^1.0.0, minimalistic-assert@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz#2e194de044626d4a10e7f7fbc00ce73e83e4d5c7" - -minimalistic-crypto-utils@^1.0.0, minimalistic-crypto-utils@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz#f6c00c1c0b082246e5c4d99dfb8c7c083b2b582a" - -minimatch@3.0.3: - version "3.0.3" - resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.3.tgz#2a4e4090b96b2db06a9d7df01055a62a77c9b774" - dependencies: - brace-expansion "^1.0.0" - -minimatch@^3.0.2, minimatch@^3.0.3, minimatch@^3.0.4: - version "3.0.4" - resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.4.tgz#5166e286457f03306064be5497e8dbb0c3d32083" - dependencies: - brace-expansion "^1.1.7" - -minimist@0.0.8: - version "0.0.8" - resolved "https://registry.yarnpkg.com/minimist/-/minimist-0.0.8.tgz#857fcabfc3397d2625b8228262e86aa7a011b05d" - -minimist@^1.1.1, minimist@^1.1.3, 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" - -minipass@^2.2.1, minipass@^2.3.3: - version "2.3.4" - resolved "https://registry.yarnpkg.com/minipass/-/minipass-2.3.4.tgz#4768d7605ed6194d6d576169b9e12ef71e9d9957" - dependencies: - safe-buffer "^5.1.2" - yallist "^3.0.0" - -minizlib@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/minizlib/-/minizlib-1.1.0.tgz#11e13658ce46bc3a70a267aac58359d1e0c29ceb" - dependencies: - minipass "^2.2.1" - -mixin-deep@^1.2.0: - version "1.3.1" - resolved "https://registry.yarnpkg.com/mixin-deep/-/mixin-deep-1.3.1.tgz#a49e7268dce1a0d9698e45326c5626df3543d0fe" - dependencies: - for-in "^1.0.2" - is-extendable "^1.0.1" - -mkdirp@0.5.1, mkdirp@0.5.x, mkdirp@^0.5.0, mkdirp@^0.5.1, 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" - -moment-timezone@^0.4.0, moment-timezone@^0.4.1: - version "0.4.1" - resolved "https://registry.yarnpkg.com/moment-timezone/-/moment-timezone-0.4.1.tgz#81f598c3ad5e22cdad796b67ecd8d88d0f5baa06" - dependencies: - moment ">= 2.6.0" - -"moment@>= 2.6.0", moment@^2.10, moment@^2.19.1: - version "2.22.2" - resolved "https://registry.yarnpkg.com/moment/-/moment-2.22.2.tgz#3c257f9839fc0e93ff53149632239eb90783ff66" - -ms@2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8" - -multicast-dns-service-types@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/multicast-dns-service-types/-/multicast-dns-service-types-1.1.0.tgz#899f11d9686e5e05cb91b35d5f0e63b773cfc901" - -multicast-dns@^6.0.1: - version "6.2.3" - resolved "https://registry.yarnpkg.com/multicast-dns/-/multicast-dns-6.2.3.tgz#a0ec7bd9055c4282f790c3c82f4e28db3b31b229" - dependencies: - dns-packet "^1.3.1" - thunky "^1.0.2" - -mute-stream@0.0.7: - version "0.0.7" - resolved "https://registry.yarnpkg.com/mute-stream/-/mute-stream-0.0.7.tgz#3075ce93bc21b8fab43e1bc4da7e8115ed1e7bab" - -nan@^2.9.2: - version "2.10.0" - resolved "https://registry.yarnpkg.com/nan/-/nan-2.10.0.tgz#96d0cd610ebd58d4b4de9cc0c6828cda99c7548f" - -nanomatch@^1.2.9: - version "1.2.13" - resolved "https://registry.yarnpkg.com/nanomatch/-/nanomatch-1.2.13.tgz#b87a8aa4fc0de8fe6be88895b38983ff265bd119" - dependencies: - arr-diff "^4.0.0" - array-unique "^0.3.2" - define-property "^2.0.2" - extend-shallow "^3.0.2" - fragment-cache "^0.2.1" - is-windows "^1.0.2" - kind-of "^6.0.2" - object.pick "^1.3.0" - regex-not "^1.0.0" - snapdragon "^0.8.1" - to-regex "^3.0.1" - -natural-compare@^1.4.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/natural-compare/-/natural-compare-1.4.0.tgz#4abebfeed7541f2c27acfb29bdbbd15c8d5ba4f7" - -needle@^2.2.1: - version "2.2.2" - resolved "https://registry.yarnpkg.com/needle/-/needle-2.2.2.tgz#1120ca4c41f2fcc6976fd28a8968afe239929418" - dependencies: - debug "^2.1.2" - iconv-lite "^0.4.4" - sax "^1.2.4" - -negotiator@0.6.1: - version "0.6.1" - resolved "https://registry.yarnpkg.com/negotiator/-/negotiator-0.6.1.tgz#2b327184e8992101177b28563fb5e7102acd0ca9" - -neo-async@^2.5.0: - version "2.5.2" - resolved "https://registry.yarnpkg.com/neo-async/-/neo-async-2.5.2.tgz#489105ce7bc54e709d736b195f82135048c50fcc" - -next-tick@1: - version "1.0.0" - resolved "https://registry.yarnpkg.com/next-tick/-/next-tick-1.0.0.tgz#ca86d1fe8828169b0120208e3dc8424b9db8342c" - -nice-try@^1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/nice-try/-/nice-try-1.0.4.tgz#d93962f6c52f2c1558c0fbda6d512819f1efe1c4" - -no-case@^2.2.0: - version "2.3.2" - resolved "https://registry.yarnpkg.com/no-case/-/no-case-2.3.2.tgz#60b813396be39b3f1288a4c1ed5d1e7d28b464ac" - dependencies: - lower-case "^1.1.1" - -node-fetch@^1.0.1: - version "1.7.3" - resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-1.7.3.tgz#980f6f72d85211a5347c6b2bc18c5b84c3eb47ef" - dependencies: - encoding "^0.1.11" - is-stream "^1.0.1" - -node-forge@0.7.5: - version "0.7.5" - resolved "https://registry.yarnpkg.com/node-forge/-/node-forge-0.7.5.tgz#6c152c345ce11c52f465c2abd957e8639cd674df" - -node-int64@^0.4.0: - version "0.4.0" - resolved "https://registry.yarnpkg.com/node-int64/-/node-int64-0.4.0.tgz#87a9065cdb355d3182d8f94ce11188b825c68a3b" - -node-libs-browser@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/node-libs-browser/-/node-libs-browser-2.1.0.tgz#5f94263d404f6e44767d726901fff05478d600df" - dependencies: - assert "^1.1.1" - browserify-zlib "^0.2.0" - buffer "^4.3.0" - console-browserify "^1.1.0" - constants-browserify "^1.0.0" - crypto-browserify "^3.11.0" - domain-browser "^1.1.1" - events "^1.0.0" - https-browserify "^1.0.0" - os-browserify "^0.3.0" - path-browserify "0.0.0" - process "^0.11.10" - punycode "^1.2.4" - querystring-es3 "^0.2.0" - readable-stream "^2.3.3" - stream-browserify "^2.0.1" - stream-http "^2.7.2" - string_decoder "^1.0.0" - timers-browserify "^2.0.4" - tty-browserify "0.0.0" - url "^0.11.0" - util "^0.10.3" - vm-browserify "0.0.4" - -node-notifier@^5.0.2: - version "5.2.1" - resolved "https://registry.yarnpkg.com/node-notifier/-/node-notifier-5.2.1.tgz#fa313dd08f5517db0e2502e5758d664ac69f9dea" - dependencies: - growly "^1.3.0" - semver "^5.4.1" - shellwords "^0.1.1" - which "^1.3.0" - -node-pre-gyp@^0.10.0: - version "0.10.3" - resolved "https://registry.yarnpkg.com/node-pre-gyp/-/node-pre-gyp-0.10.3.tgz#3070040716afdc778747b61b6887bf78880b80fc" - dependencies: - detect-libc "^1.0.2" - mkdirp "^0.5.1" - needle "^2.2.1" - nopt "^4.0.1" - npm-packlist "^1.1.6" - npmlog "^4.0.2" - rc "^1.2.7" - rimraf "^2.6.1" - semver "^5.3.0" - tar "^4" - -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" - -normalize-package-data@^2.3.2, normalize-package-data@^2.3.4: - version "2.4.0" - resolved "https://registry.yarnpkg.com/normalize-package-data/-/normalize-package-data-2.4.0.tgz#12f95a307d58352075a04907b84ac8be98ac012f" - dependencies: - hosted-git-info "^2.1.4" - is-builtin-module "^1.0.0" - semver "2 || 3 || 4 || 5" - validate-npm-package-license "^3.0.1" - -normalize-path@^2.0.0, normalize-path@^2.0.1, normalize-path@^2.1.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" - -normalize-range@^0.1.2: - version "0.1.2" - resolved "https://registry.yarnpkg.com/normalize-range/-/normalize-range-0.1.2.tgz#2d10c06bdfd312ea9777695a4d28439456b75942" - -normalize-url@^1.4.0: - version "1.9.1" - resolved "https://registry.yarnpkg.com/normalize-url/-/normalize-url-1.9.1.tgz#2cc0d66b31ea23036458436e3620d85954c66c3c" - dependencies: - object-assign "^4.0.1" - prepend-http "^1.0.0" - query-string "^4.1.0" - sort-keys "^1.0.0" - -npm-bundled@^1.0.1: - version "1.0.5" - resolved "https://registry.yarnpkg.com/npm-bundled/-/npm-bundled-1.0.5.tgz#3c1732b7ba936b3a10325aef616467c0ccbcc979" - -npm-packlist@^1.1.6: - version "1.1.11" - resolved "https://registry.yarnpkg.com/npm-packlist/-/npm-packlist-1.1.11.tgz#84e8c683cbe7867d34b1d357d893ce29e28a02de" - dependencies: - ignore-walk "^3.0.1" - npm-bundled "^1.0.1" - -npm-run-path@^2.0.0: - version "2.0.2" - resolved "https://registry.yarnpkg.com/npm-run-path/-/npm-run-path-2.0.2.tgz#35a9232dfa35d7067b4cb2ddf2357b1871536c5f" - dependencies: - path-key "^2.0.0" - -npmlog@^4.0.2: - version "4.1.2" - resolved "https://registry.yarnpkg.com/npmlog/-/npmlog-4.1.2.tgz#08a7f2a8bf734604779a9efa4ad5cc717abb954b" - dependencies: - are-we-there-yet "~1.1.2" - console-control-strings "~1.1.0" - gauge "~2.7.3" - set-blocking "~2.0.0" - -nth-check@~1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/nth-check/-/nth-check-1.0.1.tgz#9929acdf628fc2c41098deab82ac580cf149aae4" - dependencies: - boolbase "~1.0.0" - -num2fraction@^1.2.2: - version "1.2.2" - resolved "https://registry.yarnpkg.com/num2fraction/-/num2fraction-1.2.2.tgz#6f682b6a027a4e9ddfa4564cd2589d1d4e669ede" - -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" - -"nwmatcher@>= 1.3.9 < 2.0.0": - version "1.4.4" - resolved "https://registry.yarnpkg.com/nwmatcher/-/nwmatcher-1.4.4.tgz#2285631f34a95f0d0395cd900c96ed39b58f346e" - -oauth-sign@~0.9.0: - version "0.9.0" - resolved "https://registry.yarnpkg.com/oauth-sign/-/oauth-sign-0.9.0.tgz#47a7b016baa68b5fa0ecf3dee08a85c679ac6455" - -object-assign@4.1.1, object-assign@^4.0.1, object-assign@^4.1.0, object-assign@^4.1.1: - version "4.1.1" - resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863" - -object-copy@^0.1.0: - version "0.1.0" - resolved "https://registry.yarnpkg.com/object-copy/-/object-copy-0.1.0.tgz#7e7d858b781bd7c991a41ba975ed3812754e998c" - dependencies: - copy-descriptor "^0.1.0" - define-property "^0.2.5" - kind-of "^3.0.3" - -object-hash@^1.1.4: - version "1.3.0" - resolved "https://registry.yarnpkg.com/object-hash/-/object-hash-1.3.0.tgz#76d9ba6ff113cf8efc0d996102851fe6723963e2" - -object-keys@^1.0.8: - version "1.0.12" - resolved "https://registry.yarnpkg.com/object-keys/-/object-keys-1.0.12.tgz#09c53855377575310cca62f55bb334abff7b3ed2" - -object-visit@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/object-visit/-/object-visit-1.0.1.tgz#f79c4493af0c5377b59fe39d395e41042dd045bb" - dependencies: - isobject "^3.0.0" - -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" - -object.pick@^1.3.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/object.pick/-/object.pick-1.3.0.tgz#87a10ac4c1694bd2e1cbf53591a66141fb5dd747" - dependencies: - isobject "^3.0.1" - -obuf@^1.0.0, obuf@^1.1.1: - version "1.1.2" - resolved "https://registry.yarnpkg.com/obuf/-/obuf-1.1.2.tgz#09bea3343d41859ebd446292d11c9d4db619084e" - -on-finished@~2.3.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" - -on-headers@~1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/on-headers/-/on-headers-1.0.1.tgz#928f5d0f470d49342651ea6794b0857c100693f7" - -once@^1.3.0, once@^1.4.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" - dependencies: - wrappy "1" - -onetime@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/onetime/-/onetime-2.0.1.tgz#067428230fd67443b2794b22bba528b6867962d4" - dependencies: - mimic-fn "^1.0.0" - -opn@5.2.0: - version "5.2.0" - resolved "https://registry.yarnpkg.com/opn/-/opn-5.2.0.tgz#71fdf934d6827d676cecbea1531f95d354641225" - dependencies: - is-wsl "^1.1.0" - -opn@^5.1.0: - version "5.3.0" - resolved "https://registry.yarnpkg.com/opn/-/opn-5.3.0.tgz#64871565c863875f052cfdf53d3e3cb5adb53b1c" - dependencies: - is-wsl "^1.1.0" - -optimist@^0.6.1: - 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" - -optionator@^0.8.1, optionator@^0.8.2: - version "0.8.2" - resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.8.2.tgz#364c5e409d3f4d6301d6c0b4c05bba50180aeb64" - dependencies: - deep-is "~0.1.3" - fast-levenshtein "~2.0.4" - levn "~0.3.0" - prelude-ls "~1.1.2" - type-check "~0.3.2" - wordwrap "~1.0.0" - -original@>=0.0.5: - version "1.0.2" - resolved "https://registry.yarnpkg.com/original/-/original-1.0.2.tgz#e442a61cffe1c5fd20a65f3261c26663b303f25f" - dependencies: - url-parse "^1.4.3" - -os-browserify@^0.3.0: - version "0.3.0" - resolved "https://registry.yarnpkg.com/os-browserify/-/os-browserify-0.3.0.tgz#854373c7f5c2315914fc9bfc6bd8238fdda1ec27" - -os-homedir@^1.0.0, os-homedir@^1.0.1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/os-homedir/-/os-homedir-1.0.2.tgz#ffbc4988336e0e833de0c168c7ef152121aa7fb3" - -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-locale@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/os-locale/-/os-locale-2.1.0.tgz#42bc2900a6b5b8bd17376c8e882b65afccf24bf2" - dependencies: - execa "^0.7.0" - lcid "^1.0.0" - mem "^1.1.0" - -os-tmpdir@^1.0.0, os-tmpdir@^1.0.1, os-tmpdir@~1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/os-tmpdir/-/os-tmpdir-1.0.2.tgz#bbe67406c79aa85c5cfec766fe5734555dfa1274" - -osenv@^0.1.4: - version "0.1.5" - resolved "https://registry.yarnpkg.com/osenv/-/osenv-0.1.5.tgz#85cdfafaeb28e8677f416e287592b5f3f49ea410" - dependencies: - os-homedir "^1.0.0" - os-tmpdir "^1.0.0" - -p-finally@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/p-finally/-/p-finally-1.0.0.tgz#3fbcfb15b899a44123b34b6dcc18b724336a2cae" - -p-limit@^1.1.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-1.3.0.tgz#b86bd5f0c25690911c7590fcbfc2010d54b3ccb8" - dependencies: - p-try "^1.0.0" - -p-locate@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-2.0.0.tgz#20a0103b222a70c8fd39cc2e580680f3dde5ec43" - dependencies: - p-limit "^1.1.0" - -p-map@^1.1.1: - version "1.2.0" - resolved "https://registry.yarnpkg.com/p-map/-/p-map-1.2.0.tgz#e4e94f311eabbc8633a1e79908165fca26241b6b" - -p-try@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/p-try/-/p-try-1.0.0.tgz#cbc79cdbaf8fd4228e13f621f2b1a237c1b207b3" - -package-json@^4.0.0: - version "4.0.1" - resolved "https://registry.yarnpkg.com/package-json/-/package-json-4.0.1.tgz#8869a0401253661c4c4ca3da6c2121ed555f5eed" - dependencies: - got "^6.7.1" - registry-auth-token "^3.0.1" - registry-url "^3.0.3" - semver "^5.1.0" - -pako@~1.0.5: - version "1.0.6" - resolved "https://registry.yarnpkg.com/pako/-/pako-1.0.6.tgz#0101211baa70c4bca4a0f63f2206e97b7dfaf258" - -param-case@2.1.x: - version "2.1.1" - resolved "https://registry.yarnpkg.com/param-case/-/param-case-2.1.1.tgz#df94fd8cf6531ecf75e6bef9a0858fbc72be2247" - dependencies: - no-case "^2.2.0" - -parse-asn1@^5.0.0: - version "5.1.1" - resolved "https://registry.yarnpkg.com/parse-asn1/-/parse-asn1-5.1.1.tgz#f6bf293818332bd0dab54efb16087724745e6ca8" - dependencies: - asn1.js "^4.0.0" - browserify-aes "^1.0.0" - create-hash "^1.1.0" - evp_bytestokey "^1.0.0" - pbkdf2 "^3.0.3" - -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" - -parse-json@^2.2.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-2.2.0.tgz#f480f40434ef80741f8469099f8dea18f55a4dc9" - dependencies: - error-ex "^1.2.0" - -parse-passwd@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/parse-passwd/-/parse-passwd-1.0.0.tgz#6d5b934a456993b23d37f40a382d6f1666a8e5c6" - -parse5@^1.5.1: - version "1.5.1" - resolved "https://registry.yarnpkg.com/parse5/-/parse5-1.5.1.tgz#9b7f3b0de32be78dc2401b17573ccaf0f6f59d94" - -parseurl@~1.3.2: - version "1.3.2" - resolved "https://registry.yarnpkg.com/parseurl/-/parseurl-1.3.2.tgz#fc289d4ed8993119460c156253262cdc8de65bf3" - -pascalcase@^0.1.1: - version "0.1.1" - resolved "https://registry.yarnpkg.com/pascalcase/-/pascalcase-0.1.1.tgz#b363e55e8006ca6fe21784d2db22bd15d7917f14" - -path-browserify@0.0.0: - version "0.0.0" - resolved "https://registry.yarnpkg.com/path-browserify/-/path-browserify-0.0.0.tgz#a0b870729aae214005b7d5032ec2cbbb0fb4451a" - -path-dirname@^1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/path-dirname/-/path-dirname-1.0.2.tgz#cc33d24d525e099a5388c0336c6e32b9160609e0" - -path-exists@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-2.1.0.tgz#0feb6c64f0fc518d9a754dd5efb62c7022761f4b" - dependencies: - pinkie-promise "^2.0.0" - -path-exists@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-3.0.0.tgz#ce0ebeaa5f78cb18925ea7d810d7b59b010fd515" - -path-is-absolute@^1.0.0, path-is-absolute@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" - -path-is-inside@^1.0.1, path-is-inside@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/path-is-inside/-/path-is-inside-1.0.2.tgz#365417dede44430d1c11af61027facf074bdfc53" - -path-key@^2.0.0, path-key@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/path-key/-/path-key-2.0.1.tgz#411cadb574c5a140d3a4b1910d40d80cc9f40b40" - -path-parse@^1.0.5: - version "1.0.6" - resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.6.tgz#d62dbb5679405d72c4737ec58600e9ddcf06d24c" - -path-to-regexp@0.1.7: - version "0.1.7" - resolved "https://registry.yarnpkg.com/path-to-regexp/-/path-to-regexp-0.1.7.tgz#df604178005f522f15eb4490e7247a1bfaa67f8c" - -path-to-regexp@^1.0.1, path-to-regexp@^1.7.0: - 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" - -path-type@^1.0.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/path-type/-/path-type-1.1.0.tgz#59c44f7ee491da704da415da5a4070ba4f8fe441" - dependencies: - graceful-fs "^4.1.2" - pify "^2.0.0" - pinkie-promise "^2.0.0" - -path-type@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/path-type/-/path-type-2.0.0.tgz#f012ccb8415b7096fc2daa1054c3d72389594c73" - dependencies: - pify "^2.0.0" - -patternfly-bootstrap-combobox@~1.1.7: - version "1.1.7" - resolved "https://registry.yarnpkg.com/patternfly-bootstrap-combobox/-/patternfly-bootstrap-combobox-1.1.7.tgz#6a5e3ccd1170c21b3c4b4aa168a7413e1ddbb6e1" - -patternfly-bootstrap-treeview@~2.1.0: - version "2.1.5" - resolved "https://registry.yarnpkg.com/patternfly-bootstrap-treeview/-/patternfly-bootstrap-treeview-2.1.5.tgz#4c29f2582fb8a2f28f0a928f2f0d324d21d6990d" - dependencies: - bootstrap "3.3.x" - jquery ">= 2.1.x" - -patternfly-react@^2.13.1: - version "2.13.1" - resolved "https://registry.yarnpkg.com/patternfly-react/-/patternfly-react-2.13.1.tgz#198fd0335d8a1609d813ba13e5ebfa12a273fd38" - dependencies: - bootstrap-slider-without-jquery "^10.0.0" - breakjs "^1.0.0" - classnames "^2.2.5" - css-element-queries "^1.0.1" - patternfly "^3.52.1" - react-bootstrap "^0.32.1" - react-bootstrap-switch "^15.5.3" - react-bootstrap-typeahead "^3.1.3" - react-c3js "^0.1.20" - react-click-outside "^3.0.1" - react-collapse "^4.0.3" - react-fontawesome "^1.6.1" - react-motion "^0.5.2" - reactabular-table "^8.14.0" - recompose "^0.26.0" - optionalDependencies: - sortabular "^1.5.1" - table-resolver "^3.2.0" - -patternfly@^3.52.1: - version "3.54.1" - resolved "https://registry.yarnpkg.com/patternfly/-/patternfly-3.54.1.tgz#a0f8b52076aa405486e77ecb504460b1ff35fe92" - dependencies: - bootstrap "~3.3.7" - font-awesome "^4.7.0" - jquery "~3.2.1" - optionalDependencies: - "@types/c3" "^0.6.0" - bootstrap-datepicker "^1.7.1" - bootstrap-sass "^3.3.7" - bootstrap-select "1.12.2" - bootstrap-slider "^9.9.0" - bootstrap-switch "~3.3.4" - bootstrap-touchspin "~3.1.1" - c3 "~0.4.11" - d3 "~3.5.17" - datatables.net "^1.10.15" - datatables.net-colreorder "^1.4.1" - datatables.net-colreorder-bs "~1.3.2" - datatables.net-select "~1.2.0" - drmonty-datatables-colvis "~1.1.2" - eonasdan-bootstrap-datetimepicker "^4.17.47" - font-awesome-sass "^4.7.0" - google-code-prettify "~1.0.5" - jquery-match-height "^0.7.2" - moment "^2.19.1" - moment-timezone "^0.4.1" - patternfly-bootstrap-combobox "~1.1.7" - patternfly-bootstrap-treeview "~2.1.0" - -pbkdf2@^3.0.3: - version "3.0.16" - resolved "https://registry.yarnpkg.com/pbkdf2/-/pbkdf2-3.0.16.tgz#7404208ec6b01b62d85bf83853a8064f8d9c2a5c" - dependencies: - create-hash "^1.1.2" - create-hmac "^1.1.4" - ripemd160 "^2.0.1" - safe-buffer "^5.0.1" - sha.js "^2.4.8" - -performance-now@^0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/performance-now/-/performance-now-0.2.0.tgz#33ef30c5c77d4ea21c5a53869d91b56d8f2555e5" - -performance-now@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/performance-now/-/performance-now-2.1.0.tgz#6309f4e0e5fa913ec1c69307ae364b4b377c9e7b" - -pify@^2.0.0, pify@^2.3.0: - version "2.3.0" - resolved "https://registry.yarnpkg.com/pify/-/pify-2.3.0.tgz#ed141a6ac043a849ea588498e7dca8b15330e90c" - -pify@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/pify/-/pify-3.0.0.tgz#e5a4acd2c101fdf3d9a4d07f0dbc4db49dd28176" - -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" - -pkg-dir@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/pkg-dir/-/pkg-dir-1.0.0.tgz#7a4b508a8d5bb2d629d447056ff4e9c9314cf3d4" - dependencies: - find-up "^1.0.0" - -pkg-dir@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/pkg-dir/-/pkg-dir-2.0.0.tgz#f6d5d1109e19d63edf428e0bd57e12777615334b" - dependencies: - find-up "^2.1.0" - -pluralize@^7.0.0: - version "7.0.0" - resolved "https://registry.yarnpkg.com/pluralize/-/pluralize-7.0.0.tgz#298b89df8b93b0221dbf421ad2b1b1ea23fc6777" - -popper.js@^1.14.1: - version "1.14.4" - resolved "https://registry.yarnpkg.com/popper.js/-/popper.js-1.14.4.tgz#8eec1d8ff02a5a3a152dd43414a15c7b79fd69b6" - -portfinder@^1.0.9: - version "1.0.16" - resolved "https://registry.yarnpkg.com/portfinder/-/portfinder-1.0.16.tgz#a6a68be9c352bc66c1a4c17a261f661f3facaf52" - dependencies: - async "^1.5.2" - debug "^2.2.0" - mkdirp "0.5.x" - -posix-character-classes@^0.1.0: - version "0.1.1" - resolved "https://registry.yarnpkg.com/posix-character-classes/-/posix-character-classes-0.1.1.tgz#01eac0fe3b5af71a2a6c02feabb8c1fef7e00eab" - -postcss-calc@^5.2.0: - version "5.3.1" - resolved "https://registry.yarnpkg.com/postcss-calc/-/postcss-calc-5.3.1.tgz#77bae7ca928ad85716e2fda42f261bf7c1d65b5e" - dependencies: - postcss "^5.0.2" - postcss-message-helpers "^2.0.0" - reduce-css-calc "^1.2.6" - -postcss-colormin@^2.1.8: - version "2.2.2" - resolved "https://registry.yarnpkg.com/postcss-colormin/-/postcss-colormin-2.2.2.tgz#6631417d5f0e909a3d7ec26b24c8a8d1e4f96e4b" - dependencies: - colormin "^1.0.5" - postcss "^5.0.13" - postcss-value-parser "^3.2.3" - -postcss-convert-values@^2.3.4: - version "2.6.1" - resolved "https://registry.yarnpkg.com/postcss-convert-values/-/postcss-convert-values-2.6.1.tgz#bbd8593c5c1fd2e3d1c322bb925dcae8dae4d62d" - dependencies: - postcss "^5.0.11" - postcss-value-parser "^3.1.2" - -postcss-discard-comments@^2.0.4: - version "2.0.4" - resolved "https://registry.yarnpkg.com/postcss-discard-comments/-/postcss-discard-comments-2.0.4.tgz#befe89fafd5b3dace5ccce51b76b81514be00e3d" - dependencies: - postcss "^5.0.14" - -postcss-discard-duplicates@^2.0.1: - version "2.1.0" - resolved "https://registry.yarnpkg.com/postcss-discard-duplicates/-/postcss-discard-duplicates-2.1.0.tgz#b9abf27b88ac188158a5eb12abcae20263b91932" - dependencies: - postcss "^5.0.4" - -postcss-discard-empty@^2.0.1: - version "2.1.0" - resolved "https://registry.yarnpkg.com/postcss-discard-empty/-/postcss-discard-empty-2.1.0.tgz#d2b4bd9d5ced5ebd8dcade7640c7d7cd7f4f92b5" - dependencies: - postcss "^5.0.14" - -postcss-discard-overridden@^0.1.1: - version "0.1.1" - resolved "https://registry.yarnpkg.com/postcss-discard-overridden/-/postcss-discard-overridden-0.1.1.tgz#8b1eaf554f686fb288cd874c55667b0aa3668d58" - dependencies: - postcss "^5.0.16" - -postcss-discard-unused@^2.2.1: - version "2.2.3" - resolved "https://registry.yarnpkg.com/postcss-discard-unused/-/postcss-discard-unused-2.2.3.tgz#bce30b2cc591ffc634322b5fb3464b6d934f4433" - dependencies: - postcss "^5.0.14" - uniqs "^2.0.0" - -postcss-filter-plugins@^2.0.0: - version "2.0.3" - resolved "https://registry.yarnpkg.com/postcss-filter-plugins/-/postcss-filter-plugins-2.0.3.tgz#82245fdf82337041645e477114d8e593aa18b8ec" - dependencies: - postcss "^5.0.4" - -postcss-flexbugs-fixes@3.2.0: - version "3.2.0" - resolved "https://registry.yarnpkg.com/postcss-flexbugs-fixes/-/postcss-flexbugs-fixes-3.2.0.tgz#9b8b932c53f9cf13ba0f61875303e447c33dcc51" - dependencies: - postcss "^6.0.1" - -postcss-load-config@^1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/postcss-load-config/-/postcss-load-config-1.2.0.tgz#539e9afc9ddc8620121ebf9d8c3673e0ce50d28a" - dependencies: - cosmiconfig "^2.1.0" - object-assign "^4.1.0" - postcss-load-options "^1.2.0" - postcss-load-plugins "^2.3.0" - -postcss-load-options@^1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/postcss-load-options/-/postcss-load-options-1.2.0.tgz#b098b1559ddac2df04bc0bb375f99a5cfe2b6d8c" - dependencies: - cosmiconfig "^2.1.0" - object-assign "^4.1.0" - -postcss-load-plugins@^2.3.0: - version "2.3.0" - resolved "https://registry.yarnpkg.com/postcss-load-plugins/-/postcss-load-plugins-2.3.0.tgz#745768116599aca2f009fad426b00175049d8d92" - dependencies: - cosmiconfig "^2.1.1" - object-assign "^4.1.0" - -postcss-loader@2.0.8: - version "2.0.8" - resolved "https://registry.yarnpkg.com/postcss-loader/-/postcss-loader-2.0.8.tgz#8c67ddb029407dfafe684a406cfc16bad2ce0814" - dependencies: - loader-utils "^1.1.0" - postcss "^6.0.0" - postcss-load-config "^1.2.0" - schema-utils "^0.3.0" - -postcss-merge-idents@^2.1.5: - version "2.1.7" - resolved "https://registry.yarnpkg.com/postcss-merge-idents/-/postcss-merge-idents-2.1.7.tgz#4c5530313c08e1d5b3bbf3d2bbc747e278eea270" - dependencies: - has "^1.0.1" - postcss "^5.0.10" - postcss-value-parser "^3.1.1" - -postcss-merge-longhand@^2.0.1: - version "2.0.2" - resolved "https://registry.yarnpkg.com/postcss-merge-longhand/-/postcss-merge-longhand-2.0.2.tgz#23d90cd127b0a77994915332739034a1a4f3d658" - dependencies: - postcss "^5.0.4" - -postcss-merge-rules@^2.0.3: - version "2.1.2" - resolved "https://registry.yarnpkg.com/postcss-merge-rules/-/postcss-merge-rules-2.1.2.tgz#d1df5dfaa7b1acc3be553f0e9e10e87c61b5f721" - dependencies: - browserslist "^1.5.2" - caniuse-api "^1.5.2" - postcss "^5.0.4" - postcss-selector-parser "^2.2.2" - vendors "^1.0.0" - -postcss-message-helpers@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/postcss-message-helpers/-/postcss-message-helpers-2.0.0.tgz#a4f2f4fab6e4fe002f0aed000478cdf52f9ba60e" - -postcss-minify-font-values@^1.0.2: - version "1.0.5" - resolved "https://registry.yarnpkg.com/postcss-minify-font-values/-/postcss-minify-font-values-1.0.5.tgz#4b58edb56641eba7c8474ab3526cafd7bbdecb69" - dependencies: - object-assign "^4.0.1" - postcss "^5.0.4" - postcss-value-parser "^3.0.2" - -postcss-minify-gradients@^1.0.1: - version "1.0.5" - resolved "https://registry.yarnpkg.com/postcss-minify-gradients/-/postcss-minify-gradients-1.0.5.tgz#5dbda11373703f83cfb4a3ea3881d8d75ff5e6e1" - dependencies: - postcss "^5.0.12" - postcss-value-parser "^3.3.0" - -postcss-minify-params@^1.0.4: - version "1.2.2" - resolved "https://registry.yarnpkg.com/postcss-minify-params/-/postcss-minify-params-1.2.2.tgz#ad2ce071373b943b3d930a3fa59a358c28d6f1f3" - dependencies: - alphanum-sort "^1.0.1" - postcss "^5.0.2" - postcss-value-parser "^3.0.2" - uniqs "^2.0.0" - -postcss-minify-selectors@^2.0.4: - version "2.1.1" - resolved "https://registry.yarnpkg.com/postcss-minify-selectors/-/postcss-minify-selectors-2.1.1.tgz#b2c6a98c0072cf91b932d1a496508114311735bf" - dependencies: - alphanum-sort "^1.0.2" - has "^1.0.1" - postcss "^5.0.14" - postcss-selector-parser "^2.0.0" - -postcss-modules-extract-imports@^1.0.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/postcss-modules-extract-imports/-/postcss-modules-extract-imports-1.1.0.tgz#b614c9720be6816eaee35fb3a5faa1dba6a05ddb" - dependencies: - postcss "^6.0.1" - -postcss-modules-local-by-default@^1.0.1: - version "1.2.0" - resolved "https://registry.yarnpkg.com/postcss-modules-local-by-default/-/postcss-modules-local-by-default-1.2.0.tgz#f7d80c398c5a393fa7964466bd19500a7d61c069" - dependencies: - css-selector-tokenizer "^0.7.0" - postcss "^6.0.1" - -postcss-modules-scope@^1.0.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/postcss-modules-scope/-/postcss-modules-scope-1.1.0.tgz#d6ea64994c79f97b62a72b426fbe6056a194bb90" - dependencies: - css-selector-tokenizer "^0.7.0" - postcss "^6.0.1" - -postcss-modules-values@^1.1.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/postcss-modules-values/-/postcss-modules-values-1.3.0.tgz#ecffa9d7e192518389f42ad0e83f72aec456ea20" - dependencies: - icss-replace-symbols "^1.1.0" - postcss "^6.0.1" - -postcss-normalize-charset@^1.1.0: - version "1.1.1" - resolved "https://registry.yarnpkg.com/postcss-normalize-charset/-/postcss-normalize-charset-1.1.1.tgz#ef9ee71212d7fe759c78ed162f61ed62b5cb93f1" - dependencies: - postcss "^5.0.5" - -postcss-normalize-url@^3.0.7: - version "3.0.8" - resolved "https://registry.yarnpkg.com/postcss-normalize-url/-/postcss-normalize-url-3.0.8.tgz#108f74b3f2fcdaf891a2ffa3ea4592279fc78222" - dependencies: - is-absolute-url "^2.0.0" - normalize-url "^1.4.0" - postcss "^5.0.14" - postcss-value-parser "^3.2.3" - -postcss-ordered-values@^2.1.0: - version "2.2.3" - resolved "https://registry.yarnpkg.com/postcss-ordered-values/-/postcss-ordered-values-2.2.3.tgz#eec6c2a67b6c412a8db2042e77fe8da43f95c11d" - dependencies: - postcss "^5.0.4" - postcss-value-parser "^3.0.1" - -postcss-reduce-idents@^2.2.2: - version "2.4.0" - resolved "https://registry.yarnpkg.com/postcss-reduce-idents/-/postcss-reduce-idents-2.4.0.tgz#c2c6d20cc958284f6abfbe63f7609bf409059ad3" - dependencies: - postcss "^5.0.4" - postcss-value-parser "^3.0.2" - -postcss-reduce-initial@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/postcss-reduce-initial/-/postcss-reduce-initial-1.0.1.tgz#68f80695f045d08263a879ad240df8dd64f644ea" - dependencies: - postcss "^5.0.4" - -postcss-reduce-transforms@^1.0.3: - version "1.0.4" - resolved "https://registry.yarnpkg.com/postcss-reduce-transforms/-/postcss-reduce-transforms-1.0.4.tgz#ff76f4d8212437b31c298a42d2e1444025771ae1" - dependencies: - has "^1.0.1" - postcss "^5.0.8" - postcss-value-parser "^3.0.1" - -postcss-selector-parser@^2.0.0, postcss-selector-parser@^2.2.2: - version "2.2.3" - resolved "https://registry.yarnpkg.com/postcss-selector-parser/-/postcss-selector-parser-2.2.3.tgz#f9437788606c3c9acee16ffe8d8b16297f27bb90" - dependencies: - flatten "^1.0.2" - indexes-of "^1.0.1" - uniq "^1.0.1" - -postcss-svgo@^2.1.1: - version "2.1.6" - resolved "https://registry.yarnpkg.com/postcss-svgo/-/postcss-svgo-2.1.6.tgz#b6df18aa613b666e133f08adb5219c2684ac108d" - dependencies: - is-svg "^2.0.0" - postcss "^5.0.14" - postcss-value-parser "^3.2.3" - svgo "^0.7.0" - -postcss-unique-selectors@^2.0.2: - version "2.0.2" - resolved "https://registry.yarnpkg.com/postcss-unique-selectors/-/postcss-unique-selectors-2.0.2.tgz#981d57d29ddcb33e7b1dfe1fd43b8649f933ca1d" - dependencies: - alphanum-sort "^1.0.1" - postcss "^5.0.4" - uniqs "^2.0.0" - -postcss-value-parser@^3.0.1, postcss-value-parser@^3.0.2, postcss-value-parser@^3.1.1, postcss-value-parser@^3.1.2, postcss-value-parser@^3.2.3, postcss-value-parser@^3.3.0: - version "3.3.0" - resolved "https://registry.yarnpkg.com/postcss-value-parser/-/postcss-value-parser-3.3.0.tgz#87f38f9f18f774a4ab4c8a232f5c5ce8872a9d15" - -postcss-zindex@^2.0.1: - version "2.2.0" - resolved "https://registry.yarnpkg.com/postcss-zindex/-/postcss-zindex-2.2.0.tgz#d2109ddc055b91af67fc4cb3b025946639d2af22" - dependencies: - has "^1.0.1" - postcss "^5.0.4" - uniqs "^2.0.0" - -postcss@^5.0.10, postcss@^5.0.11, postcss@^5.0.12, postcss@^5.0.13, postcss@^5.0.14, postcss@^5.0.16, postcss@^5.0.2, postcss@^5.0.4, postcss@^5.0.5, postcss@^5.0.6, postcss@^5.0.8, postcss@^5.2.16: - version "5.2.18" - resolved "https://registry.yarnpkg.com/postcss/-/postcss-5.2.18.tgz#badfa1497d46244f6390f58b319830d9107853c5" - dependencies: - chalk "^1.1.3" - js-base64 "^2.1.9" - source-map "^0.5.6" - supports-color "^3.2.3" - -postcss@^6.0.0, postcss@^6.0.1, postcss@^6.0.13: - version "6.0.23" - resolved "https://registry.yarnpkg.com/postcss/-/postcss-6.0.23.tgz#61c82cc328ac60e677645f979054eb98bc0e3324" - dependencies: - chalk "^2.4.1" - source-map "^0.6.1" - supports-color "^5.4.0" - -prelude-ls@~1.1.2: - version "1.1.2" - resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.1.2.tgz#21932a549f5e52ffd9a827f570e04be62a97da54" - -prepend-http@^1.0.0, prepend-http@^1.0.1: - 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" - -pretty-bytes@^4.0.2: - version "4.0.2" - resolved "https://registry.yarnpkg.com/pretty-bytes/-/pretty-bytes-4.0.2.tgz#b2bf82e7350d65c6c33aa95aaa5a4f6327f61cd9" - -pretty-error@^2.0.2: - version "2.1.1" - resolved "https://registry.yarnpkg.com/pretty-error/-/pretty-error-2.1.1.tgz#5f4f87c8f91e5ae3f3ba87ab4cf5e03b1a17f1a3" - dependencies: - renderkid "^2.0.1" - utila "~0.4" - -pretty-format@^20.0.3: - version "20.0.3" - resolved "https://registry.yarnpkg.com/pretty-format/-/pretty-format-20.0.3.tgz#020e350a560a1fe1a98dc3beb6ccffb386de8b14" - dependencies: - ansi-regex "^2.1.1" - ansi-styles "^3.0.0" - -private@^0.1.6, private@^0.1.7, private@^0.1.8: - version "0.1.8" - resolved "https://registry.yarnpkg.com/private/-/private-0.1.8.tgz#2381edb3689f7a53d653190060fcf822d2f368ff" - -process-nextick-args@~2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-2.0.0.tgz#a37d732f4271b4ab1ad070d35508e8290788ffaa" - -process@^0.11.10: - version "0.11.10" - resolved "https://registry.yarnpkg.com/process/-/process-0.11.10.tgz#7332300e840161bda3e69a1d1d91a7d4bc16f182" - -progress@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/progress/-/progress-2.0.0.tgz#8a1be366bf8fc23db2bd23f10c6fe920b4389d1f" - -promise@8.0.1: - version "8.0.1" - resolved "https://registry.yarnpkg.com/promise/-/promise-8.0.1.tgz#e45d68b00a17647b6da711bf85ed6ed47208f450" - dependencies: - asap "~2.0.3" - -promise@^7.1.1: - version "7.3.1" - resolved "https://registry.yarnpkg.com/promise/-/promise-7.3.1.tgz#064b72602b18f90f29192b8b1bc418ffd1ebd3bf" - dependencies: - asap "~2.0.3" - -prop-types-extra@^1.0.1: - version "1.1.0" - resolved "https://registry.yarnpkg.com/prop-types-extra/-/prop-types-extra-1.1.0.tgz#32609910ea2dcf190366bacd3490d5a6412a605f" - dependencies: - react-is "^16.3.2" - warning "^3.0.0" - -prop-types@^15.5.10, prop-types@^15.5.6, prop-types@^15.5.8, prop-types@^15.6.0, prop-types@^15.6.1, prop-types@^15.6.2: - version "15.6.2" - resolved "https://registry.yarnpkg.com/prop-types/-/prop-types-15.6.2.tgz#05d5ca77b4453e985d60fc7ff8c859094a497102" - dependencies: - loose-envify "^1.3.1" - object-assign "^4.1.1" - -proxy-addr@~2.0.3: - version "2.0.4" - resolved "https://registry.yarnpkg.com/proxy-addr/-/proxy-addr-2.0.4.tgz#ecfc733bf22ff8c6f407fa275327b9ab67e48b93" - dependencies: - forwarded "~0.1.2" - ipaddr.js "1.8.0" - -prr@~1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/prr/-/prr-1.0.1.tgz#d3fc114ba06995a45ec6893f484ceb1d78f5f476" - -pseudomap@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/pseudomap/-/pseudomap-1.0.2.tgz#f052a28da70e618917ef0a8ac34c1ae5a68286b3" - -psl@^1.1.24: - version "1.1.29" - resolved "https://registry.yarnpkg.com/psl/-/psl-1.1.29.tgz#60f580d360170bb722a797cc704411e6da850c67" - -public-encrypt@^4.0.0: - version "4.0.2" - resolved "https://registry.yarnpkg.com/public-encrypt/-/public-encrypt-4.0.2.tgz#46eb9107206bf73489f8b85b69d91334c6610994" - dependencies: - bn.js "^4.1.0" - browserify-rsa "^4.0.0" - create-hash "^1.1.0" - parse-asn1 "^5.0.0" - randombytes "^2.0.1" - -punycode@1.3.2: - version "1.3.2" - resolved "https://registry.yarnpkg.com/punycode/-/punycode-1.3.2.tgz#9653a036fb7c1ee42342f2325cceefea3926c48d" - -punycode@^1.2.4, punycode@^1.4.1: - version "1.4.1" - resolved "https://registry.yarnpkg.com/punycode/-/punycode-1.4.1.tgz#c0d5a63b2718800ad8e1eb0fa5269c84dd41845e" - -punycode@^2.1.0: - version "2.1.1" - resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.1.1.tgz#b58b010ac40c22c5657616c8d2c2c02c7bf479ec" - -q@^1.1.2: - version "1.5.1" - resolved "https://registry.yarnpkg.com/q/-/q-1.5.1.tgz#7e32f75b41381291d04611f1bf14109ac00651d7" - -qs@6.5.1: - version "6.5.1" - resolved "https://registry.yarnpkg.com/qs/-/qs-6.5.1.tgz#349cdf6eef89ec45c12d7d5eb3fc0c870343a6d8" - -qs@~6.5.2: - version "6.5.2" - resolved "https://registry.yarnpkg.com/qs/-/qs-6.5.2.tgz#cb3ae806e8740444584ef154ce8ee98d403f3e36" - -query-string@^4.1.0: - version "4.3.4" - resolved "https://registry.yarnpkg.com/query-string/-/query-string-4.3.4.tgz#bbb693b9ca915c232515b228b1a02b609043dbeb" - dependencies: - object-assign "^4.1.0" - strict-uri-encode "^1.0.0" - -querystring-es3@^0.2.0: - version "0.2.1" - resolved "https://registry.yarnpkg.com/querystring-es3/-/querystring-es3-0.2.1.tgz#9ec61f79049875707d69414596fd907a4d711e73" - -querystring@0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/querystring/-/querystring-0.2.0.tgz#b209849203bb25df820da756e747005878521620" - -querystringify@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/querystringify/-/querystringify-2.0.0.tgz#fa3ed6e68eb15159457c89b37bc6472833195755" - -raf@3.4.0, raf@^3.1.0: - version "3.4.0" - resolved "https://registry.yarnpkg.com/raf/-/raf-3.4.0.tgz#a28876881b4bc2ca9117d4138163ddb80f781575" - dependencies: - performance-now "^2.1.0" - -randomatic@^3.0.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/randomatic/-/randomatic-3.1.0.tgz#36f2ca708e9e567f5ed2ec01949026d50aa10116" - dependencies: - is-number "^4.0.0" - kind-of "^6.0.0" - math-random "^1.0.1" - -randombytes@^2.0.0, randombytes@^2.0.1, randombytes@^2.0.5: - version "2.0.6" - resolved "https://registry.yarnpkg.com/randombytes/-/randombytes-2.0.6.tgz#d302c522948588848a8d300c932b44c24231da80" - dependencies: - safe-buffer "^5.1.0" - -randomfill@^1.0.3: - version "1.0.4" - resolved "https://registry.yarnpkg.com/randomfill/-/randomfill-1.0.4.tgz#c92196fc86ab42be983f1bf31778224931d61458" - dependencies: - randombytes "^2.0.5" - safe-buffer "^5.1.0" - -range-parser@^1.0.3, range-parser@~1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/range-parser/-/range-parser-1.2.0.tgz#f49be6b487894ddc40dcc94a322f611092e00d5e" - -raw-body@2.3.2: - version "2.3.2" - resolved "https://registry.yarnpkg.com/raw-body/-/raw-body-2.3.2.tgz#bcd60c77d3eb93cde0050295c3f379389bc88f89" - dependencies: - bytes "3.0.0" - http-errors "1.6.2" - iconv-lite "0.4.19" - unpipe "1.0.0" - -rc@^1.0.1, rc@^1.1.6, rc@^1.2.7: - version "1.2.8" - resolved "https://registry.yarnpkg.com/rc/-/rc-1.2.8.tgz#cd924bf5200a075b83c188cd6b9e211b7fc0d3ed" - dependencies: - deep-extend "^0.6.0" - ini "~1.3.0" - minimist "^1.2.0" - strip-json-comments "~2.0.1" - -react-bootstrap-switch@^15.5.3: - version "15.5.3" - resolved "https://registry.yarnpkg.com/react-bootstrap-switch/-/react-bootstrap-switch-15.5.3.tgz#97287791d4ec0d1892d142542e7e5248002b1251" - -react-bootstrap-typeahead@^3.1.3: - version "3.2.1" - resolved "https://registry.yarnpkg.com/react-bootstrap-typeahead/-/react-bootstrap-typeahead-3.2.1.tgz#a982d3dca65efa003abe70743402b4ffeac8540f" - dependencies: - classnames "^2.2.0" - escape-string-regexp "^1.0.5" - invariant "^2.2.1" - lodash "^4.17.2" - prop-types "^15.5.8" - prop-types-extra "^1.0.1" - react-onclickoutside "^6.1.1" - react-overlays "^0.8.1" - react-popper "^1.0.0" - warning "^4.0.1" - -react-bootstrap@^0.32.1: - version "0.32.1" - resolved "https://registry.yarnpkg.com/react-bootstrap/-/react-bootstrap-0.32.1.tgz#60624c1b48a39d773ef6cce6421a4f33ecc166bb" - dependencies: - babel-runtime "^6.11.6" - classnames "^2.2.5" - dom-helpers "^3.2.0" - invariant "^2.2.1" - keycode "^2.1.2" - prop-types "^15.5.10" - prop-types-extra "^1.0.1" - react-overlays "^0.8.0" - react-prop-types "^0.4.0" - react-transition-group "^2.0.0" - uncontrollable "^4.1.0" - warning "^3.0.0" - -react-c3js@^0.1.20: - version "0.1.20" - resolved "https://registry.yarnpkg.com/react-c3js/-/react-c3js-0.1.20.tgz#561bb211bd691be42af39726d11bab42d09f3e7b" - dependencies: - c3 "^0.4.11" - -react-click-outside@^3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/react-click-outside/-/react-click-outside-3.0.1.tgz#6e77e84d2f17afaaac26dbad743cbbf909f5e24c" - dependencies: - hoist-non-react-statics "^2.1.1" - -react-collapse@^4.0.3: - version "4.0.3" - resolved "https://registry.yarnpkg.com/react-collapse/-/react-collapse-4.0.3.tgz#b96de959ed0092a43534630b599a4753dd76d543" - dependencies: - prop-types "^15.5.8" - -react-dev-utils@^5.0.1: - version "5.0.1" - resolved "https://registry.yarnpkg.com/react-dev-utils/-/react-dev-utils-5.0.1.tgz#1f396e161fe44b595db1b186a40067289bf06613" - dependencies: - address "1.0.3" - babel-code-frame "6.26.0" - chalk "1.1.3" - cross-spawn "5.1.0" - detect-port-alt "1.1.6" - escape-string-regexp "1.0.5" - filesize "3.5.11" - global-modules "1.0.0" - gzip-size "3.0.0" - inquirer "3.3.0" - is-root "1.0.0" - opn "5.2.0" - react-error-overlay "^4.0.0" - recursive-readdir "2.2.1" - shell-quote "1.6.1" - sockjs-client "1.1.4" - strip-ansi "3.0.1" - text-table "0.2.0" - -react-dom@^16.4.2: - version "16.4.2" - resolved "https://registry.yarnpkg.com/react-dom/-/react-dom-16.4.2.tgz#4afed569689f2c561d2b8da0b819669c38a0bda4" - dependencies: - fbjs "^0.8.16" - loose-envify "^1.1.0" - object-assign "^4.1.1" - prop-types "^15.6.0" - -react-error-overlay@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/react-error-overlay/-/react-error-overlay-4.0.0.tgz#d198408a85b4070937a98667f500c832f86bd5d4" - -react-fontawesome@^1.6.1: - version "1.6.1" - resolved "https://registry.yarnpkg.com/react-fontawesome/-/react-fontawesome-1.6.1.tgz#eddce17e7dc731aa09fd4a186688a61793a16c5c" - dependencies: - prop-types "^15.5.6" - -react-is@^16.3.2: - version "16.4.2" - resolved "https://registry.yarnpkg.com/react-is/-/react-is-16.4.2.tgz#84891b56c2b6d9efdee577cc83501dfc5ecead88" - -react-lifecycles-compat@^3.0.4: - version "3.0.4" - resolved "https://registry.yarnpkg.com/react-lifecycles-compat/-/react-lifecycles-compat-3.0.4.tgz#4f1a273afdfc8f3488a8c516bfda78f872352362" - -react-motion@^0.5.2: - version "0.5.2" - resolved "https://registry.yarnpkg.com/react-motion/-/react-motion-0.5.2.tgz#0dd3a69e411316567927917c6626551ba0607316" - dependencies: - performance-now "^0.2.0" - prop-types "^15.5.8" - raf "^3.1.0" - -react-onclickoutside@^6.1.1: - version "6.7.1" - resolved "https://registry.yarnpkg.com/react-onclickoutside/-/react-onclickoutside-6.7.1.tgz#6a5b5b8b4eae6b776259712c89c8a2b36b17be93" - -react-overlays@^0.8.0, react-overlays@^0.8.1: - version "0.8.3" - resolved "https://registry.yarnpkg.com/react-overlays/-/react-overlays-0.8.3.tgz#fad65eea5b24301cca192a169f5dddb0b20d3ac5" - dependencies: - classnames "^2.2.5" - dom-helpers "^3.2.1" - prop-types "^15.5.10" - prop-types-extra "^1.0.1" - react-transition-group "^2.2.0" - warning "^3.0.0" - -react-popper@^1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/react-popper/-/react-popper-1.0.2.tgz#0e72f338b7f15ab9f9ec884e36ae0dad78a3e301" - dependencies: - babel-runtime "6.x.x" - create-react-context "^0.2.1" - popper.js "^1.14.1" - prop-types "^15.6.1" - typed-styles "^0.0.5" - warning "^3.0.0" - -react-prop-types@^0.4.0: - version "0.4.0" - resolved "https://registry.yarnpkg.com/react-prop-types/-/react-prop-types-0.4.0.tgz#f99b0bfb4006929c9af2051e7c1414a5c75b93d0" - dependencies: - warning "^3.0.0" - -react-redux@^5.0.7: - version "5.0.7" - resolved "https://registry.yarnpkg.com/react-redux/-/react-redux-5.0.7.tgz#0dc1076d9afb4670f993ffaef44b8f8c1155a4c8" - dependencies: - hoist-non-react-statics "^2.5.0" - invariant "^2.0.0" - lodash "^4.17.5" - lodash-es "^4.17.5" - loose-envify "^1.1.0" - prop-types "^15.6.0" - -react-router-dom@^4.3.1: - version "4.3.1" - resolved "https://registry.yarnpkg.com/react-router-dom/-/react-router-dom-4.3.1.tgz#4c2619fc24c4fa87c9fd18f4fb4a43fe63fbd5c6" - dependencies: - history "^4.7.2" - invariant "^2.2.4" - loose-envify "^1.3.1" - prop-types "^15.6.1" - react-router "^4.3.1" - warning "^4.0.1" - -react-router@^4.3.1: - version "4.3.1" - resolved "https://registry.yarnpkg.com/react-router/-/react-router-4.3.1.tgz#aada4aef14c809cb2e686b05cee4742234506c4e" - dependencies: - history "^4.7.2" - hoist-non-react-statics "^2.5.0" - invariant "^2.2.4" - loose-envify "^1.3.1" - path-to-regexp "^1.7.0" - prop-types "^15.6.1" - warning "^4.0.1" - -react-scripts@1.1.4: - version "1.1.4" - resolved "https://registry.yarnpkg.com/react-scripts/-/react-scripts-1.1.4.tgz#d5c230e707918d6dd2d06f303b10f5222d017c88" - dependencies: - autoprefixer "7.1.6" - babel-core "6.26.0" - babel-eslint "7.2.3" - babel-jest "20.0.3" - babel-loader "7.1.2" - babel-preset-react-app "^3.1.1" - babel-runtime "6.26.0" - case-sensitive-paths-webpack-plugin "2.1.1" - chalk "1.1.3" - css-loader "0.28.7" - dotenv "4.0.0" - dotenv-expand "4.2.0" - eslint "4.10.0" - eslint-config-react-app "^2.1.0" - eslint-loader "1.9.0" - eslint-plugin-flowtype "2.39.1" - eslint-plugin-import "2.8.0" - eslint-plugin-jsx-a11y "5.1.1" - eslint-plugin-react "7.4.0" - extract-text-webpack-plugin "3.0.2" - file-loader "1.1.5" - fs-extra "3.0.1" - html-webpack-plugin "2.29.0" - jest "20.0.4" - object-assign "4.1.1" - postcss-flexbugs-fixes "3.2.0" - postcss-loader "2.0.8" - promise "8.0.1" - raf "3.4.0" - react-dev-utils "^5.0.1" - resolve "1.6.0" - style-loader "0.19.0" - sw-precache-webpack-plugin "0.11.4" - url-loader "0.6.2" - webpack "3.8.1" - webpack-dev-server "2.9.4" - webpack-manifest-plugin "1.3.2" - whatwg-fetch "2.0.3" - optionalDependencies: - fsevents "^1.1.3" - -react-transition-group@^2.0.0, react-transition-group@^2.2.0: - version "2.4.0" - resolved "https://registry.yarnpkg.com/react-transition-group/-/react-transition-group-2.4.0.tgz#1d9391fabfd82e016f26fabd1eec329dbd922b5a" - dependencies: - dom-helpers "^3.3.1" - loose-envify "^1.3.1" - prop-types "^15.6.2" - react-lifecycles-compat "^3.0.4" - -react@^16.4.2: - version "16.4.2" - resolved "https://registry.yarnpkg.com/react/-/react-16.4.2.tgz#2cd90154e3a9d9dd8da2991149fdca3c260e129f" - dependencies: - fbjs "^0.8.16" - loose-envify "^1.1.0" - object-assign "^4.1.1" - prop-types "^15.6.0" - -reactabular-table@^8.14.0: - version "8.14.0" - resolved "https://registry.yarnpkg.com/reactabular-table/-/reactabular-table-8.14.0.tgz#2ce05de47d499db91678fa9518505ea509bf3d7f" - dependencies: - classnames "^2.2.5" - -read-pkg-up@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/read-pkg-up/-/read-pkg-up-1.0.1.tgz#9d63c13276c065918d57f002a57f40a1b643fb02" - dependencies: - find-up "^1.0.0" - read-pkg "^1.0.0" - -read-pkg-up@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/read-pkg-up/-/read-pkg-up-2.0.0.tgz#6b72a8048984e0c41e79510fd5e9fa99b3b549be" - dependencies: - find-up "^2.0.0" - read-pkg "^2.0.0" - -read-pkg@^1.0.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/read-pkg/-/read-pkg-1.1.0.tgz#f5ffaa5ecd29cb31c0474bca7d756b6bb29e3f28" - dependencies: - load-json-file "^1.0.0" - normalize-package-data "^2.3.2" - path-type "^1.0.0" - -read-pkg@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/read-pkg/-/read-pkg-2.0.0.tgz#8ef1c0623c6a6db0dc6713c4bfac46332b2368f8" - dependencies: - load-json-file "^2.0.0" - normalize-package-data "^2.3.2" - path-type "^2.0.0" - -readable-stream@1.0: - 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" - -readable-stream@^2.0.1, readable-stream@^2.0.2, readable-stream@^2.0.6, readable-stream@^2.2.2, readable-stream@^2.2.9, readable-stream@^2.3.3, readable-stream@^2.3.6: - version "2.3.6" - resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.6.tgz#b11c27d88b8ff1fbe070643cf94b0c79ae1b0aaf" - dependencies: - core-util-is "~1.0.0" - inherits "~2.0.3" - isarray "~1.0.0" - process-nextick-args "~2.0.0" - safe-buffer "~5.1.1" - string_decoder "~1.1.1" - util-deprecate "~1.0.1" - -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" - -recompose@^0.26.0: - version "0.26.0" - resolved "https://registry.yarnpkg.com/recompose/-/recompose-0.26.0.tgz#9babff039cb72ba5bd17366d55d7232fbdfb2d30" - dependencies: - change-emitter "^0.1.2" - fbjs "^0.8.1" - hoist-non-react-statics "^2.3.1" - symbol-observable "^1.0.4" - -recursive-readdir@2.2.1: - version "2.2.1" - resolved "https://registry.yarnpkg.com/recursive-readdir/-/recursive-readdir-2.2.1.tgz#90ef231d0778c5ce093c9a48d74e5c5422d13a99" - dependencies: - minimatch "3.0.3" - -redent@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/redent/-/redent-1.0.0.tgz#cf916ab1fd5f1f16dfb20822dd6ec7f730c2afde" - dependencies: - indent-string "^2.1.0" - strip-indent "^1.0.1" - -reduce-css-calc@^1.2.6: - version "1.3.0" - resolved "https://registry.yarnpkg.com/reduce-css-calc/-/reduce-css-calc-1.3.0.tgz#747c914e049614a4c9cfbba629871ad1d2927716" - dependencies: - balanced-match "^0.4.2" - math-expression-evaluator "^1.2.14" - reduce-function-call "^1.0.1" - -reduce-function-call@^1.0.1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/reduce-function-call/-/reduce-function-call-1.0.2.tgz#5a200bf92e0e37751752fe45b0ab330fd4b6be99" - dependencies: - balanced-match "^0.4.2" - -redux-thunk@^2.3.0: - version "2.3.0" - resolved "https://registry.yarnpkg.com/redux-thunk/-/redux-thunk-2.3.0.tgz#51c2c19a185ed5187aaa9a2d08b666d0d6467622" - -redux@<4.0.0: - version "3.7.2" - resolved "https://registry.yarnpkg.com/redux/-/redux-3.7.2.tgz#06b73123215901d25d065be342eb026bc1c8537b" - dependencies: - lodash "^4.2.1" - lodash-es "^4.2.1" - loose-envify "^1.1.0" - symbol-observable "^1.0.3" - -regenerate@^1.2.1: - version "1.4.0" - resolved "https://registry.yarnpkg.com/regenerate/-/regenerate-1.4.0.tgz#4a856ec4b56e4077c557589cae85e7a4c8869a11" - -regenerator-runtime@^0.11.0: - version "0.11.1" - resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz#be05ad7f9bf7d22e056f9726cee5017fbf19e2e9" - -regenerator-transform@^0.10.0: - version "0.10.1" - resolved "https://registry.yarnpkg.com/regenerator-transform/-/regenerator-transform-0.10.1.tgz#1e4996837231da8b7f3cf4114d71b5691a0680dd" - dependencies: - babel-runtime "^6.18.0" - babel-types "^6.19.0" - private "^0.1.6" - -regex-cache@^0.4.2: - version "0.4.4" - resolved "https://registry.yarnpkg.com/regex-cache/-/regex-cache-0.4.4.tgz#75bdc58a2a1496cec48a12835bc54c8d562336dd" - dependencies: - is-equal-shallow "^0.1.3" - -regex-not@^1.0.0, regex-not@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/regex-not/-/regex-not-1.0.2.tgz#1f4ece27e00b0b65e0247a6810e6a85d83a5752c" - dependencies: - extend-shallow "^3.0.2" - safe-regex "^1.1.0" - -regexp.prototype.flags@^1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/regexp.prototype.flags/-/regexp.prototype.flags-1.2.0.tgz#6b30724e306a27833eeb171b66ac8890ba37e41c" - dependencies: - define-properties "^1.1.2" - -regexpp@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/regexpp/-/regexpp-2.0.0.tgz#b2a7534a85ca1b033bcf5ce9ff8e56d4e0755365" - -regexpu-core@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/regexpu-core/-/regexpu-core-1.0.0.tgz#86a763f58ee4d7c2f6b102e4764050de7ed90c6b" - dependencies: - regenerate "^1.2.1" - regjsgen "^0.2.0" - regjsparser "^0.1.4" - -regexpu-core@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/regexpu-core/-/regexpu-core-2.0.0.tgz#49d038837b8dcf8bfa5b9a42139938e6ea2ae240" - dependencies: - regenerate "^1.2.1" - regjsgen "^0.2.0" - regjsparser "^0.1.4" - -registry-auth-token@^3.0.1: - version "3.3.2" - resolved "https://registry.yarnpkg.com/registry-auth-token/-/registry-auth-token-3.3.2.tgz#851fd49038eecb586911115af845260eec983f20" - dependencies: - rc "^1.1.6" - safe-buffer "^5.0.1" - -registry-url@^3.0.3: - version "3.1.0" - resolved "https://registry.yarnpkg.com/registry-url/-/registry-url-3.1.0.tgz#3d4ef870f73dde1d77f0cf9a381432444e174942" - dependencies: - rc "^1.0.1" - -regjsgen@^0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/regjsgen/-/regjsgen-0.2.0.tgz#6c016adeac554f75823fe37ac05b92d5a4edb1f7" - -regjsparser@^0.1.4: - version "0.1.5" - resolved "https://registry.yarnpkg.com/regjsparser/-/regjsparser-0.1.5.tgz#7ee8f84dc6fa792d3fd0ae228d24bd949ead205c" - dependencies: - jsesc "~0.5.0" - -relateurl@0.2.x: - version "0.2.7" - resolved "https://registry.yarnpkg.com/relateurl/-/relateurl-0.2.7.tgz#54dbf377e51440aca90a4cd274600d3ff2d888a9" - -remove-trailing-separator@^1.0.1: - version "1.1.0" - resolved "https://registry.yarnpkg.com/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz#c24bce2a283adad5bc3f58e0d48249b92379d8ef" - -renderkid@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/renderkid/-/renderkid-2.0.1.tgz#898cabfc8bede4b7b91135a3ffd323e58c0db319" - dependencies: - css-select "^1.1.0" - dom-converter "~0.1" - htmlparser2 "~3.3.0" - strip-ansi "^3.0.0" - utila "~0.3" - -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, repeat-string@^1.6.1: - version "1.6.1" - resolved "https://registry.yarnpkg.com/repeat-string/-/repeat-string-1.6.1.tgz#8dcae470e1c88abc2d600fff4a776286da75e637" - -repeating@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/repeating/-/repeating-2.0.1.tgz#5214c53a926d3552707527fbab415dbc08d06dda" - dependencies: - is-finite "^1.0.0" - -request@^2.79.0: - version "2.88.0" - resolved "https://registry.yarnpkg.com/request/-/request-2.88.0.tgz#9c2fca4f7d35b592efe57c7f0a55e81052124fef" - dependencies: - aws-sign2 "~0.7.0" - aws4 "^1.8.0" - caseless "~0.12.0" - combined-stream "~1.0.6" - extend "~3.0.2" - forever-agent "~0.6.1" - form-data "~2.3.2" - har-validator "~5.1.0" - http-signature "~1.2.0" - is-typedarray "~1.0.0" - isstream "~0.1.2" - json-stringify-safe "~5.0.1" - mime-types "~2.1.19" - oauth-sign "~0.9.0" - performance-now "^2.1.0" - qs "~6.5.2" - safe-buffer "^5.1.2" - tough-cookie "~2.4.3" - tunnel-agent "^0.6.0" - uuid "^3.3.2" - -require-directory@^2.1.1: - version "2.1.1" - resolved "https://registry.yarnpkg.com/require-directory/-/require-directory-2.1.1.tgz#8c64ad5fd30dab1c976e2344ffe7f792a6a6df42" - -require-from-string@^1.1.0: - version "1.2.1" - resolved "https://registry.yarnpkg.com/require-from-string/-/require-from-string-1.2.1.tgz#529c9ccef27380adfec9a2f965b649bbee636418" - -require-main-filename@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/require-main-filename/-/require-main-filename-1.0.1.tgz#97f717b69d48784f5f526a6c5aa8ffdda055a4d1" - -require-uncached@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/require-uncached/-/require-uncached-1.0.3.tgz#4e0d56d6c9662fd31e43011c4b95aa49955421d3" - dependencies: - caller-path "^0.1.0" - resolve-from "^1.0.0" - -requires-port@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/requires-port/-/requires-port-1.0.0.tgz#925d2601d39ac485e091cf0da5c6e694dc3dcaff" - -resolve-cwd@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/resolve-cwd/-/resolve-cwd-2.0.0.tgz#00a9f7387556e27038eae232caa372a6a59b665a" - dependencies: - resolve-from "^3.0.0" - -resolve-dir@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/resolve-dir/-/resolve-dir-1.0.1.tgz#79a40644c362be82f26effe739c9bb5382046f43" - dependencies: - expand-tilde "^2.0.0" - global-modules "^1.0.0" - -resolve-from@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-1.0.1.tgz#26cbfe935d1aeeeabb29bc3fe5aeb01e93d44226" - -resolve-from@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-3.0.0.tgz#b22c7af7d9d6881bc8b6e653335eebcb0a188748" - -resolve-pathname@^2.2.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/resolve-pathname/-/resolve-pathname-2.2.0.tgz#7e9ae21ed815fd63ab189adeee64dc831eefa879" - -resolve-url@^0.2.1: - version "0.2.1" - resolved "https://registry.yarnpkg.com/resolve-url/-/resolve-url-0.2.1.tgz#2c637fe77c893afd2a663fe21aa9080068e2052a" - -resolve@1.1.7: - version "1.1.7" - resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.1.7.tgz#203114d82ad2c5ed9e8e0411b3932875e889e97b" - -resolve@1.6.0: - version "1.6.0" - resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.6.0.tgz#0fbd21278b27b4004481c395349e7aba60a9ff5c" - dependencies: - path-parse "^1.0.5" - -resolve@^1.3.2, resolve@^1.5.0: - version "1.8.1" - resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.8.1.tgz#82f1ec19a423ac1fbd080b0bab06ba36e84a7a26" - dependencies: - path-parse "^1.0.5" - -restore-cursor@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/restore-cursor/-/restore-cursor-2.0.0.tgz#9f7ee287f82fd326d4fd162923d62129eee0dfaf" - dependencies: - onetime "^2.0.0" - signal-exit "^3.0.2" - -ret@~0.1.10: - version "0.1.15" - resolved "https://registry.yarnpkg.com/ret/-/ret-0.1.15.tgz#b8a4825d5bdb1fc3f6f53c2bc33f81388681c7bc" - -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.2.8, rimraf@^2.6.1: - version "2.6.2" - resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.6.2.tgz#2ed8150d24a16ea8651e6d6ef0f47c4158ce7a36" - dependencies: - glob "^7.0.5" - -ripemd160@^2.0.0, ripemd160@^2.0.1: - version "2.0.2" - resolved "https://registry.yarnpkg.com/ripemd160/-/ripemd160-2.0.2.tgz#a1c1a6f624751577ba5d07914cbc92850585890c" - dependencies: - hash-base "^3.0.0" - inherits "^2.0.1" - -run-async@^2.2.0: - version "2.3.0" - resolved "https://registry.yarnpkg.com/run-async/-/run-async-2.3.0.tgz#0371ab4ae0bdd720d4166d7dfda64ff7a445a6c0" - dependencies: - is-promise "^2.1.0" - -rx-lite-aggregates@^4.0.8: - version "4.0.8" - resolved "https://registry.yarnpkg.com/rx-lite-aggregates/-/rx-lite-aggregates-4.0.8.tgz#753b87a89a11c95467c4ac1626c4efc4e05c67be" - dependencies: - rx-lite "*" - -rx-lite@*, rx-lite@^4.0.8: - version "4.0.8" - resolved "https://registry.yarnpkg.com/rx-lite/-/rx-lite-4.0.8.tgz#0b1e11af8bc44836f04a6407e92da42467b79444" - -rxjs@^5.5.2: - version "5.5.11" - resolved "https://registry.yarnpkg.com/rxjs/-/rxjs-5.5.11.tgz#f733027ca43e3bec6b994473be4ab98ad43ced87" - dependencies: - symbol-observable "1.0.1" - -safe-buffer@5.1.1: - version "5.1.1" - resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.1.tgz#893312af69b2123def71f57889001671eeb2c853" - -safe-buffer@5.1.2, safe-buffer@^5.0.1, safe-buffer@^5.1.0, safe-buffer@^5.1.1, safe-buffer@^5.1.2, safe-buffer@~5.1.0, safe-buffer@~5.1.1: - version "5.1.2" - resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d" - -safe-regex@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/safe-regex/-/safe-regex-1.1.0.tgz#40a3669f3b077d1e943d44629e157dd48023bf2e" - dependencies: - ret "~0.1.10" - -"safer-buffer@>= 2.1.2 < 3", safer-buffer@^2.0.2, safer-buffer@^2.1.0, safer-buffer@~2.1.0: - version "2.1.2" - resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a" - -sane@~1.6.0: - version "1.6.0" - resolved "https://registry.yarnpkg.com/sane/-/sane-1.6.0.tgz#9610c452307a135d29c1fdfe2547034180c46775" - dependencies: - anymatch "^1.3.0" - exec-sh "^0.2.0" - fb-watchman "^1.8.0" - minimatch "^3.0.2" - minimist "^1.1.1" - walker "~1.0.5" - watch "~0.10.0" - -sax@^1.2.1, sax@^1.2.4, sax@~1.2.1: - version "1.2.4" - resolved "https://registry.yarnpkg.com/sax/-/sax-1.2.4.tgz#2816234e2378bddc4e5354fab5caa895df7100d9" - -schema-utils@^0.3.0: - version "0.3.0" - resolved "https://registry.yarnpkg.com/schema-utils/-/schema-utils-0.3.0.tgz#f5877222ce3e931edae039f17eb3716e7137f8cf" - dependencies: - ajv "^5.0.0" - -select-hose@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/select-hose/-/select-hose-2.0.0.tgz#625d8658f865af43ec962bfc376a37359a4994ca" - -selfsigned@^1.9.1: - version "1.10.3" - resolved "https://registry.yarnpkg.com/selfsigned/-/selfsigned-1.10.3.tgz#d628ecf9e3735f84e8bafba936b3cf85bea43823" - dependencies: - node-forge "0.7.5" - -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@2 || 3 || 4 || 5", semver@^5.0.3, semver@^5.1.0, semver@^5.3.0, semver@^5.4.1, semver@^5.5.0: - version "5.5.0" - resolved "https://registry.yarnpkg.com/semver/-/semver-5.5.0.tgz#dc4bbc7a6ca9d916dee5d43516f0092b58f7b8ab" - -send@0.16.2: - version "0.16.2" - resolved "https://registry.yarnpkg.com/send/-/send-0.16.2.tgz#6ecca1e0f8c156d141597559848df64730a6bbc1" - dependencies: - debug "2.6.9" - depd "~1.1.2" - destroy "~1.0.4" - encodeurl "~1.0.2" - escape-html "~1.0.3" - etag "~1.8.1" - fresh "0.5.2" - http-errors "~1.6.2" - mime "1.4.1" - ms "2.0.0" - on-finished "~2.3.0" - range-parser "~1.2.0" - statuses "~1.4.0" - -serve-index@^1.7.2: - version "1.9.1" - resolved "https://registry.yarnpkg.com/serve-index/-/serve-index-1.9.1.tgz#d3768d69b1e7d82e5ce050fff5b453bea12a9239" - dependencies: - accepts "~1.3.4" - batch "0.6.1" - debug "2.6.9" - escape-html "~1.0.3" - http-errors "~1.6.2" - mime-types "~2.1.17" - parseurl "~1.3.2" - -serve-static@1.13.2: - version "1.13.2" - resolved "https://registry.yarnpkg.com/serve-static/-/serve-static-1.13.2.tgz#095e8472fd5b46237db50ce486a43f4b86c6cec1" - dependencies: - encodeurl "~1.0.2" - escape-html "~1.0.3" - parseurl "~1.3.2" - send "0.16.2" - -serviceworker-cache-polyfill@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/serviceworker-cache-polyfill/-/serviceworker-cache-polyfill-4.0.0.tgz#de19ee73bef21ab3c0740a37b33db62464babdeb" - -set-blocking@^2.0.0, 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" - -set-value@^0.4.3: - version "0.4.3" - resolved "https://registry.yarnpkg.com/set-value/-/set-value-0.4.3.tgz#7db08f9d3d22dc7f78e53af3c3bf4666ecdfccf1" - dependencies: - extend-shallow "^2.0.1" - is-extendable "^0.1.1" - is-plain-object "^2.0.1" - to-object-path "^0.3.0" - -set-value@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/set-value/-/set-value-2.0.0.tgz#71ae4a88f0feefbbf52d1ea604f3fb315ebb6274" - dependencies: - extend-shallow "^2.0.1" - is-extendable "^0.1.1" - is-plain-object "^2.0.3" - split-string "^3.0.1" - -setimmediate@^1.0.4, setimmediate@^1.0.5: - version "1.0.5" - resolved "https://registry.yarnpkg.com/setimmediate/-/setimmediate-1.0.5.tgz#290cbb232e306942d7d7ea9b83732ab7856f8285" - -setprototypeof@1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/setprototypeof/-/setprototypeof-1.0.3.tgz#66567e37043eeb4f04d91bd658c0cbefb55b8e04" - -setprototypeof@1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/setprototypeof/-/setprototypeof-1.1.0.tgz#d0bd85536887b6fe7c0d818cb962d9d91c54e656" - -sha.js@^2.4.0, sha.js@^2.4.8: - version "2.4.11" - resolved "https://registry.yarnpkg.com/sha.js/-/sha.js-2.4.11.tgz#37a5cf0b81ecbc6943de109ba2960d1b26584ae7" - dependencies: - inherits "^2.0.1" - safe-buffer "^5.0.1" - -shebang-command@^1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-1.2.0.tgz#44aac65b695b03398968c39f363fee5deafdf1ea" - dependencies: - shebang-regex "^1.0.0" - -shebang-regex@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-1.0.0.tgz#da42f49740c0b42db2ca9728571cb190c98efea3" - -shell-quote@1.6.1: - version "1.6.1" - resolved "https://registry.yarnpkg.com/shell-quote/-/shell-quote-1.6.1.tgz#f4781949cce402697127430ea3b3c5476f481767" - dependencies: - array-filter "~0.0.0" - array-map "~0.0.0" - array-reduce "~0.0.0" - jsonify "~0.0.0" - -shellwords@^0.1.1: - version "0.1.1" - resolved "https://registry.yarnpkg.com/shellwords/-/shellwords-0.1.1.tgz#d6b9181c1a48d397324c84871efbcfc73fc0654b" - -signal-exit@^3.0.0, signal-exit@^3.0.2: - version "3.0.2" - resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.2.tgz#b5fdc08f1287ea1178628e415e25132b73646c6d" - -slash@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/slash/-/slash-1.0.0.tgz#c41f2f6c39fc16d1cd17ad4b5d896114ae470d55" - -slice-ansi@1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/slice-ansi/-/slice-ansi-1.0.0.tgz#044f1a49d8842ff307aad6b505ed178bd950134d" - dependencies: - is-fullwidth-code-point "^2.0.0" - -snapdragon-node@^2.0.1: - version "2.1.1" - resolved "https://registry.yarnpkg.com/snapdragon-node/-/snapdragon-node-2.1.1.tgz#6c175f86ff14bdb0724563e8f3c1b021a286853b" - dependencies: - define-property "^1.0.0" - isobject "^3.0.0" - snapdragon-util "^3.0.1" - -snapdragon-util@^3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/snapdragon-util/-/snapdragon-util-3.0.1.tgz#f956479486f2acd79700693f6f7b805e45ab56e2" - dependencies: - kind-of "^3.2.0" - -snapdragon@^0.8.1: - version "0.8.2" - resolved "https://registry.yarnpkg.com/snapdragon/-/snapdragon-0.8.2.tgz#64922e7c565b0e14204ba1aa7d6964278d25182d" - dependencies: - base "^0.11.1" - debug "^2.2.0" - define-property "^0.2.5" - extend-shallow "^2.0.1" - map-cache "^0.2.2" - source-map "^0.5.6" - source-map-resolve "^0.5.0" - use "^3.1.0" - -sockette@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/sockette/-/sockette-2.0.0.tgz#3da2f3459288d55cedcb6de580aeae68ae4554fc" - -sockjs-client@1.1.4: - version "1.1.4" - resolved "https://registry.yarnpkg.com/sockjs-client/-/sockjs-client-1.1.4.tgz#5babe386b775e4cf14e7520911452654016c8b12" - dependencies: - debug "^2.6.6" - eventsource "0.1.6" - faye-websocket "~0.11.0" - inherits "^2.0.1" - json3 "^3.3.2" - url-parse "^1.1.8" - -sockjs@0.3.18: - version "0.3.18" - resolved "https://registry.yarnpkg.com/sockjs/-/sockjs-0.3.18.tgz#d9b289316ca7df77595ef299e075f0f937eb4207" - dependencies: - faye-websocket "^0.10.0" - uuid "^2.0.2" - -sort-keys@^1.0.0: - version "1.1.2" - resolved "https://registry.yarnpkg.com/sort-keys/-/sort-keys-1.1.2.tgz#441b6d4d346798f1b4e49e8920adfba0e543f9ad" - dependencies: - is-plain-obj "^1.0.0" - -sortabular@^1.5.1: - version "1.6.0" - resolved "https://registry.yarnpkg.com/sortabular/-/sortabular-1.6.0.tgz#d320198c3add5cf8e200b14e076f0a06ad08d341" - -source-list-map@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/source-list-map/-/source-list-map-2.0.0.tgz#aaa47403f7b245a92fbc97ea08f250d6087ed085" - -source-map-resolve@^0.5.0: - version "0.5.2" - resolved "https://registry.yarnpkg.com/source-map-resolve/-/source-map-resolve-0.5.2.tgz#72e2cc34095543e43b2c62b2c4c10d4a9054f259" - dependencies: - atob "^2.1.1" - decode-uri-component "^0.2.0" - resolve-url "^0.2.1" - source-map-url "^0.4.0" - urix "^0.1.0" - -source-map-support@^0.4.15: - version "0.4.18" - resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.4.18.tgz#0286a6de8be42641338594e97ccea75f0a2c585f" - dependencies: - source-map "^0.5.6" - -source-map-url@^0.4.0: - version "0.4.0" - resolved "https://registry.yarnpkg.com/source-map-url/-/source-map-url-0.4.0.tgz#3e935d7ddd73631b97659956d55128e87b5084a3" - -source-map@0.5.x, source-map@^0.5.3, source-map@^0.5.6, source-map@^0.5.7, source-map@~0.5.1: - version "0.5.7" - resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.5.7.tgz#8a039d2d1021d22d1ea14c80d8ea468ba2ef3fcc" - -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.6.1, source-map@~0.6.1: - version "0.6.1" - resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263" - -spdx-correct@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/spdx-correct/-/spdx-correct-3.0.0.tgz#05a5b4d7153a195bc92c3c425b69f3b2a9524c82" - dependencies: - spdx-expression-parse "^3.0.0" - spdx-license-ids "^3.0.0" - -spdx-exceptions@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/spdx-exceptions/-/spdx-exceptions-2.1.0.tgz#2c7ae61056c714a5b9b9b2b2af7d311ef5c78fe9" - -spdx-expression-parse@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/spdx-expression-parse/-/spdx-expression-parse-3.0.0.tgz#99e119b7a5da00e05491c9fa338b7904823b41d0" - dependencies: - spdx-exceptions "^2.1.0" - spdx-license-ids "^3.0.0" - -spdx-license-ids@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/spdx-license-ids/-/spdx-license-ids-3.0.0.tgz#7a7cd28470cc6d3a1cfe6d66886f6bc430d3ac87" - -spdy-transport@^2.0.18: - version "2.1.0" - resolved "https://registry.yarnpkg.com/spdy-transport/-/spdy-transport-2.1.0.tgz#4bbb15aaffed0beefdd56ad61dbdc8ba3e2cb7a1" - dependencies: - debug "^2.6.8" - detect-node "^2.0.3" - hpack.js "^2.1.6" - obuf "^1.1.1" - readable-stream "^2.2.9" - safe-buffer "^5.0.1" - wbuf "^1.7.2" - -spdy@^3.4.1: - version "3.4.7" - resolved "https://registry.yarnpkg.com/spdy/-/spdy-3.4.7.tgz#42ff41ece5cc0f99a3a6c28aabb73f5c3b03acbc" - dependencies: - debug "^2.6.8" - handle-thing "^1.2.5" - http-deceiver "^1.2.7" - safe-buffer "^5.0.1" - select-hose "^2.0.0" - spdy-transport "^2.0.18" - -split-string@^3.0.1, split-string@^3.0.2: - version "3.1.0" - resolved "https://registry.yarnpkg.com/split-string/-/split-string-3.1.0.tgz#7cb09dda3a86585705c64b39a6466038682e8fe2" - dependencies: - extend-shallow "^3.0.0" - -sprintf-js@~1.0.2: - version "1.0.3" - resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.0.3.tgz#04e6926f662895354f3dd015203633b857297e2c" - -sshpk@^1.7.0: - version "1.14.2" - resolved "https://registry.yarnpkg.com/sshpk/-/sshpk-1.14.2.tgz#c6fc61648a3d9c4e764fd3fcdf4ea105e492ba98" - dependencies: - asn1 "~0.2.3" - assert-plus "^1.0.0" - dashdash "^1.12.0" - getpass "^0.1.1" - safer-buffer "^2.0.2" - optionalDependencies: - bcrypt-pbkdf "^1.0.0" - ecc-jsbn "~0.1.1" - jsbn "~0.1.0" - tweetnacl "~0.14.0" - -static-extend@^0.1.1: - version "0.1.2" - resolved "https://registry.yarnpkg.com/static-extend/-/static-extend-0.1.2.tgz#60809c39cbff55337226fd5e0b520f341f1fb5c6" - dependencies: - define-property "^0.2.5" - object-copy "^0.1.0" - -"statuses@>= 1.3.1 < 2", "statuses@>= 1.4.0 < 2": - version "1.5.0" - resolved "https://registry.yarnpkg.com/statuses/-/statuses-1.5.0.tgz#161c7dac177659fd9811f43771fa99381478628c" - -statuses@~1.4.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/statuses/-/statuses-1.4.0.tgz#bb73d446da2796106efcc1b601a253d6c46bd087" - -stream-browserify@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/stream-browserify/-/stream-browserify-2.0.1.tgz#66266ee5f9bdb9940a4e4514cafb43bb71e5c9db" - dependencies: - inherits "~2.0.1" - readable-stream "^2.0.2" - -stream-http@^2.7.2: - version "2.8.3" - resolved "https://registry.yarnpkg.com/stream-http/-/stream-http-2.8.3.tgz#b2d242469288a5a27ec4fe8933acf623de6514fc" - dependencies: - builtin-status-codes "^3.0.0" - inherits "^2.0.1" - readable-stream "^2.3.6" - to-arraybuffer "^1.0.0" - xtend "^4.0.0" - -strict-uri-encode@^1.0.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/strict-uri-encode/-/strict-uri-encode-1.1.0.tgz#279b225df1d582b1f54e65addd4352e18faa0713" - -string-length@^1.0.1: - 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, string-width@^1.0.2: - 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-width@^1.0.2 || 2", string-width@^2.0.0, string-width@^2.1.0, string-width@^2.1.1: - version "2.1.1" - resolved "https://registry.yarnpkg.com/string-width/-/string-width-2.1.1.tgz#ab93f27a8dc13d28cac815c462143a6d9012ae9e" - dependencies: - is-fullwidth-code-point "^2.0.0" - strip-ansi "^4.0.0" - -string.prototype.matchall@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/string.prototype.matchall/-/string.prototype.matchall-2.0.0.tgz#2af8fe3d2d6dc53ca2a59bd376b089c3c152b3c8" - dependencies: - define-properties "^1.1.2" - es-abstract "^1.10.0" - function-bind "^1.1.1" - has-symbols "^1.0.0" - regexp.prototype.flags "^1.2.0" - -string_decoder@^1.0.0, string_decoder@~1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.1.1.tgz#9cf1611ba62685d7030ae9e4ba34149c3af03fc8" - dependencies: - safe-buffer "~5.1.0" - -string_decoder@~0.10.x: - version "0.10.31" - resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-0.10.31.tgz#62e203bc41766c6c28c9fc84301dab1c5310fa94" - -strip-ansi@3.0.1, 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-ansi@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-4.0.0.tgz#a8479022eb1ac368a871389b635262c505ee368f" - dependencies: - ansi-regex "^3.0.0" - -strip-bom@3.0.0, strip-bom@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-3.0.0.tgz#2334c18e9c759f7bdd56fdef7e9ae3d588e68ed3" - -strip-bom@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-2.0.0.tgz#6219a85616520491f35788bdbf1447a99c7e6b0e" - dependencies: - is-utf8 "^0.2.0" - -strip-eof@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/strip-eof/-/strip-eof-1.0.0.tgz#bb43ff5598a6eb05d89b59fcd129c983313606bf" - -strip-indent@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/strip-indent/-/strip-indent-1.0.1.tgz#0c7962a6adefa7bbd4ac366460a638552ae1a0a2" - dependencies: - get-stdin "^4.0.1" - -strip-json-comments@^2.0.1, 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" - -style-loader@0.19.0: - version "0.19.0" - resolved "https://registry.yarnpkg.com/style-loader/-/style-loader-0.19.0.tgz#7258e788f0fee6a42d710eaf7d6c2412a4c50759" - dependencies: - loader-utils "^1.0.2" - schema-utils "^0.3.0" - -supports-color@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-2.0.0.tgz#535d045ce6b6363fa40117084629995e9df324c7" - -supports-color@^3.1.2, supports-color@^3.2.3: - version "3.2.3" - resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-3.2.3.tgz#65ac0504b3954171d8a64946b2ae3cbb8a5f54f6" - dependencies: - has-flag "^1.0.0" - -supports-color@^4.2.1: - version "4.5.0" - resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-4.5.0.tgz#be7a0de484dec5c5cddf8b3d59125044912f635b" - dependencies: - has-flag "^2.0.0" - -supports-color@^5.3.0, supports-color@^5.4.0: - version "5.4.0" - resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-5.4.0.tgz#1c6b337402c2137605efe19f10fec390f6faab54" - dependencies: - has-flag "^3.0.0" - -svgo@^0.7.0: - version "0.7.2" - resolved "https://registry.yarnpkg.com/svgo/-/svgo-0.7.2.tgz#9f5772413952135c6fefbf40afe6a4faa88b4bb5" - dependencies: - coa "~1.0.1" - colors "~1.1.2" - csso "~2.3.1" - js-yaml "~3.7.0" - mkdirp "~0.5.1" - sax "~1.2.1" - whet.extend "~0.9.9" - -sw-precache-webpack-plugin@0.11.4: - version "0.11.4" - resolved "https://registry.yarnpkg.com/sw-precache-webpack-plugin/-/sw-precache-webpack-plugin-0.11.4.tgz#a695017e54eed575551493a519dc1da8da2dc5e0" - dependencies: - del "^2.2.2" - sw-precache "^5.1.1" - uglify-js "^3.0.13" - -sw-precache@^5.1.1: - version "5.2.1" - resolved "https://registry.yarnpkg.com/sw-precache/-/sw-precache-5.2.1.tgz#06134f319eec68f3b9583ce9a7036b1c119f7179" - dependencies: - dom-urls "^1.1.0" - es6-promise "^4.0.5" - glob "^7.1.1" - lodash.defaults "^4.2.0" - lodash.template "^4.4.0" - meow "^3.7.0" - mkdirp "^0.5.1" - pretty-bytes "^4.0.2" - sw-toolbox "^3.4.0" - update-notifier "^2.3.0" - -sw-toolbox@^3.4.0: - version "3.6.0" - resolved "https://registry.yarnpkg.com/sw-toolbox/-/sw-toolbox-3.6.0.tgz#26df1d1c70348658e4dea2884319149b7b3183b5" - dependencies: - path-to-regexp "^1.0.1" - serviceworker-cache-polyfill "^4.0.0" - -symbol-observable@1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/symbol-observable/-/symbol-observable-1.0.1.tgz#8340fc4702c3122df5d22288f88283f513d3fdd4" - -symbol-observable@^1.0.3, symbol-observable@^1.0.4: - version "1.2.0" - resolved "https://registry.yarnpkg.com/symbol-observable/-/symbol-observable-1.2.0.tgz#c22688aed4eab3cdc2dfeacbb561660560a00804" - -symbol-tree@^3.2.1: - version "3.2.2" - resolved "https://registry.yarnpkg.com/symbol-tree/-/symbol-tree-3.2.2.tgz#ae27db38f660a7ae2e1c3b7d1bc290819b8519e6" - -table-resolver@^3.2.0: - version "3.3.0" - resolved "https://registry.yarnpkg.com/table-resolver/-/table-resolver-3.3.0.tgz#22e575d3c6aed15404ab71a0f2046c4ff55e556e" - -table@^4.0.1, table@^4.0.3: - version "4.0.3" - resolved "https://registry.yarnpkg.com/table/-/table-4.0.3.tgz#00b5e2b602f1794b9acaf9ca908a76386a7813bc" - dependencies: - ajv "^6.0.1" - ajv-keywords "^3.0.0" - chalk "^2.1.0" - lodash "^4.17.4" - slice-ansi "1.0.0" - string-width "^2.1.1" - -tapable@^0.2.7: - version "0.2.8" - resolved "https://registry.yarnpkg.com/tapable/-/tapable-0.2.8.tgz#99372a5c999bf2df160afc0d74bed4f47948cd22" - -tar@^4: - version "4.4.6" - resolved "https://registry.yarnpkg.com/tar/-/tar-4.4.6.tgz#63110f09c00b4e60ac8bcfe1bf3c8660235fbc9b" - dependencies: - chownr "^1.0.1" - fs-minipass "^1.2.5" - minipass "^2.3.3" - minizlib "^1.1.0" - mkdirp "^0.5.0" - safe-buffer "^5.1.2" - yallist "^3.0.2" - -term-size@^1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/term-size/-/term-size-1.2.0.tgz#458b83887f288fc56d6fffbfad262e26638efa69" - dependencies: - execa "^0.7.0" - -test-exclude@^4.2.1: - version "4.2.1" - resolved "https://registry.yarnpkg.com/test-exclude/-/test-exclude-4.2.1.tgz#dfa222f03480bca69207ca728b37d74b45f724fa" - dependencies: - arrify "^1.0.1" - micromatch "^3.1.8" - object-assign "^4.1.0" - read-pkg-up "^1.0.1" - require-main-filename "^1.0.1" - -text-table@0.2.0, text-table@^0.2.0, text-table@~0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/text-table/-/text-table-0.2.0.tgz#7f5ee823ae805207c00af2df4a84ec3fcfa570b4" - -throat@^3.0.0: - version "3.2.0" - resolved "https://registry.yarnpkg.com/throat/-/throat-3.2.0.tgz#50cb0670edbc40237b9e347d7e1f88e4620af836" - -through@^2.3.6: - version "2.3.8" - resolved "https://registry.yarnpkg.com/through/-/through-2.3.8.tgz#0dd4c9ffaabc357960b1b724115d7e0e86a2e1f5" - -thunky@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/thunky/-/thunky-1.0.2.tgz#a862e018e3fb1ea2ec3fce5d55605cf57f247371" - -time-stamp@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/time-stamp/-/time-stamp-2.0.1.tgz#708a89359c1fc50bd5e7b1c8aa750d08c9172232" - -timed-out@^4.0.0: - version "4.0.1" - resolved "https://registry.yarnpkg.com/timed-out/-/timed-out-4.0.1.tgz#f32eacac5a175bea25d7fab565ab3ed8741ef56f" - -timers-browserify@^2.0.4: - version "2.0.10" - resolved "https://registry.yarnpkg.com/timers-browserify/-/timers-browserify-2.0.10.tgz#1d28e3d2aadf1d5a5996c4e9f95601cd053480ae" - dependencies: - setimmediate "^1.0.4" - -tmp@^0.0.33: - version "0.0.33" - resolved "https://registry.yarnpkg.com/tmp/-/tmp-0.0.33.tgz#6d34335889768d21b2bcda0aa277ced3b1bfadf9" - dependencies: - os-tmpdir "~1.0.2" - -tmpl@1.0.x: - version "1.0.4" - resolved "https://registry.yarnpkg.com/tmpl/-/tmpl-1.0.4.tgz#23640dd7b42d00433911140820e5cf440e521dd1" - -to-arraybuffer@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/to-arraybuffer/-/to-arraybuffer-1.0.1.tgz#7d229b1fcc637e466ca081180836a7aabff83f43" - -to-fast-properties@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/to-fast-properties/-/to-fast-properties-1.0.3.tgz#b83571fa4d8c25b82e231b06e3a3055de4ca1a47" - -to-object-path@^0.3.0: - version "0.3.0" - resolved "https://registry.yarnpkg.com/to-object-path/-/to-object-path-0.3.0.tgz#297588b7b0e7e0ac08e04e672f85c1f4999e17af" - dependencies: - kind-of "^3.0.2" - -to-regex-range@^2.1.0: - version "2.1.1" - resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-2.1.1.tgz#7c80c17b9dfebe599e27367e0d4dd5590141db38" - dependencies: - is-number "^3.0.0" - repeat-string "^1.6.1" - -to-regex@^3.0.1, to-regex@^3.0.2: - version "3.0.2" - resolved "https://registry.yarnpkg.com/to-regex/-/to-regex-3.0.2.tgz#13cfdd9b336552f30b51f33a8ae1b42a7a7599ce" - dependencies: - define-property "^2.0.2" - extend-shallow "^3.0.2" - regex-not "^1.0.2" - safe-regex "^1.1.0" - -toposort@^1.0.0: - version "1.0.7" - resolved "https://registry.yarnpkg.com/toposort/-/toposort-1.0.7.tgz#2e68442d9f64ec720b8cc89e6443ac6caa950029" - -tough-cookie@^2.3.2, tough-cookie@~2.4.3: - version "2.4.3" - resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-2.4.3.tgz#53f36da3f47783b0925afa06ff9f3b165280f781" - dependencies: - psl "^1.1.24" - punycode "^1.4.1" - -tr46@~0.0.3: - version "0.0.3" - resolved "https://registry.yarnpkg.com/tr46/-/tr46-0.0.3.tgz#8184fd347dac9cdc185992f3a6622e14b9d9ab6a" - -trim-newlines@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/trim-newlines/-/trim-newlines-1.0.0.tgz#5887966bb582a4503a41eb524f7d35011815a613" - -trim-right@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/trim-right/-/trim-right-1.0.1.tgz#cb2e1203067e0c8de1f614094b9fe45704ea6003" - -tty-browserify@0.0.0: - version "0.0.0" - resolved "https://registry.yarnpkg.com/tty-browserify/-/tty-browserify-0.0.0.tgz#a157ba402da24e9bf957f9aa69d524eed42901a6" - -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-check@~0.3.2: - version "0.3.2" - resolved "https://registry.yarnpkg.com/type-check/-/type-check-0.3.2.tgz#5884cab512cf1d355e3fb784f30804b2b520db72" - dependencies: - prelude-ls "~1.1.2" - -type-is@~1.6.15, type-is@~1.6.16: - version "1.6.16" - resolved "https://registry.yarnpkg.com/type-is/-/type-is-1.6.16.tgz#f89ce341541c672b25ee7ae3c73dee3b2be50194" - dependencies: - media-typer "0.3.0" - mime-types "~2.1.18" - -typed-styles@^0.0.5: - version "0.0.5" - resolved "https://registry.yarnpkg.com/typed-styles/-/typed-styles-0.0.5.tgz#a60df245d482a9b1adf9c06c078d0f06085ed1cf" - -typedarray@^0.0.6: - version "0.0.6" - resolved "https://registry.yarnpkg.com/typedarray/-/typedarray-0.0.6.tgz#867ac74e3864187b1d3d47d996a78ec5c8830777" - -ua-parser-js@^0.7.18: - version "0.7.18" - resolved "https://registry.yarnpkg.com/ua-parser-js/-/ua-parser-js-0.7.18.tgz#a7bfd92f56edfb117083b69e31d2aa8882d4b1ed" - -uglify-js@3.4.x, uglify-js@^3.0.13: - version "3.4.7" - resolved "https://registry.yarnpkg.com/uglify-js/-/uglify-js-3.4.7.tgz#4df6b92e54789aa921a254cb1e33704d6ec12b89" - dependencies: - commander "~2.16.0" - source-map "~0.6.1" - -uglify-js@^2.6, uglify-js@^2.8.29: - version "2.8.29" - resolved "https://registry.yarnpkg.com/uglify-js/-/uglify-js-2.8.29.tgz#29c5733148057bb4e1f75df35b7a9cb72e6a59dd" - 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" - -uglifyjs-webpack-plugin@^0.4.6: - version "0.4.6" - resolved "https://registry.yarnpkg.com/uglifyjs-webpack-plugin/-/uglifyjs-webpack-plugin-0.4.6.tgz#b951f4abb6bd617e66f63eb891498e391763e309" - dependencies: - source-map "^0.5.6" - uglify-js "^2.8.29" - webpack-sources "^1.0.1" - -uncontrollable@^4.1.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/uncontrollable/-/uncontrollable-4.1.0.tgz#e0358291252e1865222d90939b19f2f49f81c1a9" - dependencies: - invariant "^2.1.0" - -union-value@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/union-value/-/union-value-1.0.0.tgz#5c71c34cb5bad5dcebe3ea0cd08207ba5aa1aea4" - dependencies: - arr-union "^3.1.0" - get-value "^2.0.6" - is-extendable "^0.1.1" - set-value "^0.4.3" - -uniq@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/uniq/-/uniq-1.0.1.tgz#b31c5ae8254844a3a8281541ce2b04b865a734ff" - -uniqs@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/uniqs/-/uniqs-2.0.0.tgz#ffede4b36b25290696e6e165d4a59edb998e6b02" - -unique-string@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/unique-string/-/unique-string-1.0.0.tgz#9e1057cca851abb93398f8b33ae187b99caec11a" - dependencies: - crypto-random-string "^1.0.0" - -universalify@^0.1.0: - version "0.1.2" - resolved "https://registry.yarnpkg.com/universalify/-/universalify-0.1.2.tgz#b646f69be3942dabcecc9d6639c80dc105efaa66" - -unpipe@1.0.0, unpipe@~1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/unpipe/-/unpipe-1.0.0.tgz#b2bf4ee8514aae6165b4817829d21b2ef49904ec" - -unset-value@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/unset-value/-/unset-value-1.0.0.tgz#8376873f7d2335179ffb1e6fc3a8ed0dfc8ab559" - dependencies: - has-value "^0.3.1" - isobject "^3.0.0" - -unzip-response@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/unzip-response/-/unzip-response-2.0.1.tgz#d2f0f737d16b0615e72a6935ed04214572d56f97" - -upath@^1.0.5: - version "1.1.0" - resolved "https://registry.yarnpkg.com/upath/-/upath-1.1.0.tgz#35256597e46a581db4793d0ce47fa9aebfc9fabd" - -update-notifier@^2.3.0: - version "2.5.0" - resolved "https://registry.yarnpkg.com/update-notifier/-/update-notifier-2.5.0.tgz#d0744593e13f161e406acb1d9408b72cad08aff6" - dependencies: - boxen "^1.2.1" - chalk "^2.0.1" - configstore "^3.0.0" - import-lazy "^2.1.0" - is-ci "^1.0.10" - is-installed-globally "^0.1.0" - is-npm "^1.0.0" - latest-version "^3.0.0" - semver-diff "^2.0.0" - xdg-basedir "^3.0.0" - -upper-case@^1.1.1: - version "1.1.3" - resolved "https://registry.yarnpkg.com/upper-case/-/upper-case-1.1.3.tgz#f6b4501c2ec4cdd26ba78be7222961de77621598" - -uri-js@^4.2.1: - version "4.2.2" - resolved "https://registry.yarnpkg.com/uri-js/-/uri-js-4.2.2.tgz#94c540e1ff772956e2299507c010aea6c8838eb0" - dependencies: - punycode "^2.1.0" - -urijs@^1.16.1: - version "1.19.1" - resolved "https://registry.yarnpkg.com/urijs/-/urijs-1.19.1.tgz#5b0ff530c0cbde8386f6342235ba5ca6e995d25a" - -urix@^0.1.0: - version "0.1.0" - resolved "https://registry.yarnpkg.com/urix/-/urix-0.1.0.tgz#da937f7a62e21fec1fd18d49b35c2935067a6c72" - -url-loader@0.6.2: - version "0.6.2" - resolved "https://registry.yarnpkg.com/url-loader/-/url-loader-0.6.2.tgz#a007a7109620e9d988d14bce677a1decb9a993f7" - dependencies: - loader-utils "^1.0.2" - mime "^1.4.1" - schema-utils "^0.3.0" - -url-parse-lax@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/url-parse-lax/-/url-parse-lax-1.0.0.tgz#7af8f303645e9bd79a272e7a14ac68bc0609da73" - dependencies: - prepend-http "^1.0.1" - -url-parse@^1.1.8, url-parse@^1.4.3: - version "1.4.3" - resolved "https://registry.yarnpkg.com/url-parse/-/url-parse-1.4.3.tgz#bfaee455c889023219d757e045fa6a684ec36c15" - dependencies: - querystringify "^2.0.0" - requires-port "^1.0.0" - -url@^0.11.0: - version "0.11.0" - resolved "https://registry.yarnpkg.com/url/-/url-0.11.0.tgz#3838e97cfc60521eb73c525a8e55bfdd9e2e28f1" - dependencies: - punycode "1.3.2" - querystring "0.2.0" - -use@^3.1.0: - version "3.1.1" - resolved "https://registry.yarnpkg.com/use/-/use-3.1.1.tgz#d50c8cac79a19fbc20f2911f56eb973f4e10070f" - -util-deprecate@~1.0.1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" - -util@0.10.3: - version "0.10.3" - resolved "https://registry.yarnpkg.com/util/-/util-0.10.3.tgz#7afb1afe50805246489e3db7fe0ed379336ac0f9" - dependencies: - inherits "2.0.1" - -util@^0.10.3: - version "0.10.4" - resolved "https://registry.yarnpkg.com/util/-/util-0.10.4.tgz#3aa0125bfe668a4672de58857d3ace27ecb76901" - dependencies: - inherits "2.0.3" - -utila@~0.3: - version "0.3.3" - resolved "https://registry.yarnpkg.com/utila/-/utila-0.3.3.tgz#d7e8e7d7e309107092b05f8d9688824d633a4226" - -utila@~0.4: - version "0.4.0" - resolved "https://registry.yarnpkg.com/utila/-/utila-0.4.0.tgz#8a16a05d445657a3aea5eecc5b12a4fa5379772c" - -utils-merge@1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/utils-merge/-/utils-merge-1.0.1.tgz#9f95710f50a267947b2ccc124741c1028427e713" - -uuid@^2.0.2: - version "2.0.3" - resolved "https://registry.yarnpkg.com/uuid/-/uuid-2.0.3.tgz#67e2e863797215530dff318e5bf9dcebfd47b21a" - -uuid@^3.3.2: - version "3.3.2" - resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.3.2.tgz#1b4af4955eb3077c501c23872fc6513811587131" - -validate-npm-package-license@^3.0.1: - version "3.0.4" - resolved "https://registry.yarnpkg.com/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz#fc91f6b9c7ba15c857f4cb2c5defeec39d4f410a" - dependencies: - spdx-correct "^3.0.0" - spdx-expression-parse "^3.0.0" - -value-equal@^0.4.0: - version "0.4.0" - resolved "https://registry.yarnpkg.com/value-equal/-/value-equal-0.4.0.tgz#c5bdd2f54ee093c04839d71ce2e4758a6890abc7" - -vary@~1.1.2: - version "1.1.2" - resolved "https://registry.yarnpkg.com/vary/-/vary-1.1.2.tgz#2299f02c6ded30d4a5961b0b9f74524a18f634fc" - -vendors@^1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/vendors/-/vendors-1.0.2.tgz#7fcb5eef9f5623b156bcea89ec37d63676f21801" - -verror@1.10.0: - version "1.10.0" - resolved "https://registry.yarnpkg.com/verror/-/verror-1.10.0.tgz#3a105ca17053af55d6e270c1f8288682e18da400" - dependencies: - assert-plus "^1.0.0" - core-util-is "1.0.2" - extsprintf "^1.2.0" - -vm-browserify@0.0.4: - version "0.0.4" - resolved "https://registry.yarnpkg.com/vm-browserify/-/vm-browserify-0.0.4.tgz#5d7ea45bbef9e4a6ff65f95438e0a87c357d5a73" - dependencies: - indexof "0.0.1" - -walker@~1.0.5: - version "1.0.7" - resolved "https://registry.yarnpkg.com/walker/-/walker-1.0.7.tgz#2f7f9b8fd10d677262b18a884e28d19618e028fb" - dependencies: - makeerror "1.0.x" - -warning@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/warning/-/warning-3.0.0.tgz#32e5377cb572de4ab04753bdf8821c01ed605b7c" - dependencies: - loose-envify "^1.0.0" - -warning@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/warning/-/warning-4.0.1.tgz#66ce376b7fbfe8a887c22bdf0e7349d73d397745" - dependencies: - loose-envify "^1.0.0" - -watch@~0.10.0: - version "0.10.0" - resolved "https://registry.yarnpkg.com/watch/-/watch-0.10.0.tgz#77798b2da0f9910d595f1ace5b0c2258521f21dc" - -watchpack@^1.4.0: - version "1.6.0" - resolved "https://registry.yarnpkg.com/watchpack/-/watchpack-1.6.0.tgz#4bc12c2ebe8aa277a71f1d3f14d685c7b446cd00" - dependencies: - chokidar "^2.0.2" - graceful-fs "^4.1.2" - neo-async "^2.5.0" - -wbuf@^1.1.0, wbuf@^1.7.2: - version "1.7.3" - resolved "https://registry.yarnpkg.com/wbuf/-/wbuf-1.7.3.tgz#c1d8d149316d3ea852848895cb6a0bfe887b87df" - dependencies: - minimalistic-assert "^1.0.0" - -webidl-conversions@^3.0.0: - version "3.0.1" - resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-3.0.1.tgz#24534275e2a7bc6be7bc86611cc16ae0a5654871" - -webidl-conversions@^4.0.0: - version "4.0.2" - resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-4.0.2.tgz#a855980b1f0b6b359ba1d5d9fb39ae941faa63ad" - -webpack-dev-middleware@^1.11.0: - version "1.12.2" - resolved "https://registry.yarnpkg.com/webpack-dev-middleware/-/webpack-dev-middleware-1.12.2.tgz#f8fc1120ce3b4fc5680ceecb43d777966b21105e" - dependencies: - memory-fs "~0.4.1" - mime "^1.5.0" - path-is-absolute "^1.0.0" - range-parser "^1.0.3" - time-stamp "^2.0.0" - -webpack-dev-server@2.9.4: - version "2.9.4" - resolved "https://registry.yarnpkg.com/webpack-dev-server/-/webpack-dev-server-2.9.4.tgz#7883e61759c6a4b33e9b19ec4037bd4ab61428d1" - dependencies: - ansi-html "0.0.7" - array-includes "^3.0.3" - bonjour "^3.5.0" - chokidar "^1.6.0" - compression "^1.5.2" - connect-history-api-fallback "^1.3.0" - debug "^3.1.0" - del "^3.0.0" - express "^4.13.3" - html-entities "^1.2.0" - http-proxy-middleware "~0.17.4" - import-local "^0.1.1" - internal-ip "1.2.0" - ip "^1.1.5" - killable "^1.0.0" - loglevel "^1.4.1" - opn "^5.1.0" - portfinder "^1.0.9" - selfsigned "^1.9.1" - serve-index "^1.7.2" - sockjs "0.3.18" - sockjs-client "1.1.4" - spdy "^3.4.1" - strip-ansi "^3.0.1" - supports-color "^4.2.1" - webpack-dev-middleware "^1.11.0" - yargs "^6.6.0" - -webpack-manifest-plugin@1.3.2: - version "1.3.2" - resolved "https://registry.yarnpkg.com/webpack-manifest-plugin/-/webpack-manifest-plugin-1.3.2.tgz#5ea8ee5756359ddc1d98814324fe43496349a7d4" - dependencies: - fs-extra "^0.30.0" - lodash ">=3.5 <5" - -webpack-sources@^1.0.1: - version "1.1.0" - resolved "https://registry.yarnpkg.com/webpack-sources/-/webpack-sources-1.1.0.tgz#a101ebae59d6507354d71d8013950a3a8b7a5a54" - dependencies: - source-list-map "^2.0.0" - source-map "~0.6.1" - -webpack@3.8.1: - version "3.8.1" - resolved "https://registry.yarnpkg.com/webpack/-/webpack-3.8.1.tgz#b16968a81100abe61608b0153c9159ef8bb2bd83" - dependencies: - acorn "^5.0.0" - acorn-dynamic-import "^2.0.0" - ajv "^5.1.5" - ajv-keywords "^2.0.0" - async "^2.1.2" - enhanced-resolve "^3.4.0" - escope "^3.6.0" - interpret "^1.0.0" - json-loader "^0.5.4" - json5 "^0.5.1" - loader-runner "^2.3.0" - loader-utils "^1.1.0" - memory-fs "~0.4.1" - mkdirp "~0.5.0" - node-libs-browser "^2.0.0" - source-map "^0.5.3" - supports-color "^4.2.1" - tapable "^0.2.7" - uglifyjs-webpack-plugin "^0.4.6" - watchpack "^1.4.0" - webpack-sources "^1.0.1" - yargs "^8.0.2" - -websocket-driver@>=0.5.1: - version "0.7.0" - resolved "https://registry.yarnpkg.com/websocket-driver/-/websocket-driver-0.7.0.tgz#0caf9d2d755d93aee049d4bdd0d3fe2cca2a24eb" - dependencies: - http-parser-js ">=0.4.0" - websocket-extensions ">=0.1.1" - -websocket-extensions@>=0.1.1: - version "0.1.3" - resolved "https://registry.yarnpkg.com/websocket-extensions/-/websocket-extensions-0.1.3.tgz#5d2ff22977003ec687a4b87073dfbbac146ccf29" - -whatwg-encoding@^1.0.1: - version "1.0.4" - resolved "https://registry.yarnpkg.com/whatwg-encoding/-/whatwg-encoding-1.0.4.tgz#63fb016b7435b795d9025632c086a5209dbd2621" - dependencies: - iconv-lite "0.4.23" - -whatwg-fetch@2.0.3: - version "2.0.3" - resolved "https://registry.yarnpkg.com/whatwg-fetch/-/whatwg-fetch-2.0.3.tgz#9c84ec2dcf68187ff00bc64e1274b442176e1c84" - -whatwg-fetch@>=0.10.0: - version "2.0.4" - resolved "https://registry.yarnpkg.com/whatwg-fetch/-/whatwg-fetch-2.0.4.tgz#dde6a5df315f9d39991aa17621853d720b85566f" - -whatwg-url@^4.3.0: - version "4.8.0" - resolved "https://registry.yarnpkg.com/whatwg-url/-/whatwg-url-4.8.0.tgz#d2981aa9148c1e00a41c5a6131166ab4683bbcc0" - dependencies: - tr46 "~0.0.3" - webidl-conversions "^3.0.0" - -whet.extend@~0.9.9: - version "0.9.9" - resolved "https://registry.yarnpkg.com/whet.extend/-/whet.extend-0.9.9.tgz#f877d5bf648c97e5aa542fadc16d6a259b9c11a1" - -which-module@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/which-module/-/which-module-1.0.0.tgz#bba63ca861948994ff307736089e3b96026c2a4f" - -which-module@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/which-module/-/which-module-2.0.0.tgz#d9ef07dce77b9902b8a3a8fa4b31c3e3f7e6e87a" - -which@^1.2.12, which@^1.2.14, which@^1.2.9, which@^1.3.0: - version "1.3.1" - resolved "https://registry.yarnpkg.com/which/-/which-1.3.1.tgz#a45043d54f5805316da8d62f9f50918d3da70b0a" - dependencies: - isexe "^2.0.0" - -wide-align@^1.1.0: - version "1.1.3" - resolved "https://registry.yarnpkg.com/wide-align/-/wide-align-1.1.3.tgz#ae074e6bdc0c14a431e804e624549c633b000457" - dependencies: - string-width "^1.0.2 || 2" - -widest-line@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/widest-line/-/widest-line-2.0.0.tgz#0142a4e8a243f8882c0233aa0e0281aa76152273" - dependencies: - string-width "^2.1.1" - -window-size@0.1.0: - version "0.1.0" - resolved "https://registry.yarnpkg.com/window-size/-/window-size-0.1.0.tgz#5438cd2ea93b202efa3a19fe8887aee7c94f9c9d" - -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" - -wordwrap@~1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/wordwrap/-/wordwrap-1.0.0.tgz#27584810891456a4171c8d0226441ade90cbcaeb" - -worker-farm@^1.3.1: - version "1.6.0" - resolved "https://registry.yarnpkg.com/worker-farm/-/worker-farm-1.6.0.tgz#aecc405976fab5a95526180846f0dba288f3a4a0" - dependencies: - errno "~0.1.7" - -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@^2.0.0: - version "2.3.0" - resolved "https://registry.yarnpkg.com/write-file-atomic/-/write-file-atomic-2.3.0.tgz#1ff61575c2e2a4e8e510d6fa4e243cce183999ab" - dependencies: - graceful-fs "^4.1.11" - imurmurhash "^0.1.4" - signal-exit "^3.0.2" - -write@^0.2.1: - version "0.2.1" - resolved "https://registry.yarnpkg.com/write/-/write-0.2.1.tgz#5fc03828e264cea3fe91455476f7a3c566cb0757" - dependencies: - mkdirp "^0.5.1" - -xdg-basedir@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/xdg-basedir/-/xdg-basedir-3.0.0.tgz#496b2cc109eca8dbacfe2dc72b603c17c5870ad4" - -xml-name-validator@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/xml-name-validator/-/xml-name-validator-2.0.1.tgz#4d8b8f1eccd3419aa362061becef515e1e559635" - -xtend@^4.0.0: - version "4.0.1" - resolved "https://registry.yarnpkg.com/xtend/-/xtend-4.0.1.tgz#a5c6d532be656e23db820efb943a1f04998d63af" - -y18n@^3.2.1: - version "3.2.1" - resolved "https://registry.yarnpkg.com/y18n/-/y18n-3.2.1.tgz#6d15fba884c08679c0d77e88e7759e811e07fa41" - -yallist@^2.1.2: - version "2.1.2" - resolved "https://registry.yarnpkg.com/yallist/-/yallist-2.1.2.tgz#1c11f9218f076089a47dd512f93c6699a6a81d52" - -yallist@^3.0.0, yallist@^3.0.2: - version "3.0.2" - resolved "https://registry.yarnpkg.com/yallist/-/yallist-3.0.2.tgz#8452b4bb7e83c7c188d8041c1a837c773d6d8bb9" - -yargs-parser@^4.2.0: - version "4.2.1" - resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-4.2.1.tgz#29cceac0dc4f03c6c87b4a9f217dd18c9f74871c" - dependencies: - camelcase "^3.0.0" - -yargs-parser@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-5.0.0.tgz#275ecf0d7ffe05c77e64e7c86e4cd94bf0e1228a" - dependencies: - camelcase "^3.0.0" - -yargs-parser@^7.0.0: - version "7.0.0" - resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-7.0.0.tgz#8d0ac42f16ea55debd332caf4c4038b3e3f5dfd9" - dependencies: - camelcase "^4.1.0" - -yargs@^6.6.0: - version "6.6.0" - resolved "https://registry.yarnpkg.com/yargs/-/yargs-6.6.0.tgz#782ec21ef403345f830a808ca3d513af56065208" - dependencies: - camelcase "^3.0.0" - cliui "^3.2.0" - decamelize "^1.1.1" - get-caller-file "^1.0.1" - os-locale "^1.4.0" - read-pkg-up "^1.0.1" - require-directory "^2.1.1" - require-main-filename "^1.0.1" - set-blocking "^2.0.0" - string-width "^1.0.2" - which-module "^1.0.0" - y18n "^3.2.1" - yargs-parser "^4.2.0" - -yargs@^7.0.2: - version "7.1.0" - resolved "https://registry.yarnpkg.com/yargs/-/yargs-7.1.0.tgz#6ba318eb16961727f5d284f8ea003e8d6154d0c8" - dependencies: - camelcase "^3.0.0" - cliui "^3.2.0" - decamelize "^1.1.1" - get-caller-file "^1.0.1" - os-locale "^1.4.0" - read-pkg-up "^1.0.1" - require-directory "^2.1.1" - require-main-filename "^1.0.1" - set-blocking "^2.0.0" - string-width "^1.0.2" - which-module "^1.0.0" - y18n "^3.2.1" - yargs-parser "^5.0.0" - -yargs@^8.0.2: - version "8.0.2" - resolved "https://registry.yarnpkg.com/yargs/-/yargs-8.0.2.tgz#6299a9055b1cefc969ff7e79c1d918dceb22c360" - dependencies: - camelcase "^4.1.0" - cliui "^3.2.0" - decamelize "^1.1.1" - get-caller-file "^1.0.1" - os-locale "^2.0.0" - read-pkg-up "^2.0.0" - require-directory "^2.1.1" - require-main-filename "^1.0.1" - set-blocking "^2.0.0" - string-width "^2.0.0" - which-module "^2.0.0" - y18n "^3.2.1" - yargs-parser "^7.0.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" - -yarn@^1.9.4: - version "1.9.4" - resolved "https://registry.yarnpkg.com/yarn/-/yarn-1.9.4.tgz#3b82d8446b652775723900b470d966861976924b" diff --git a/web/zuul/description.ts b/web/zuul/description.ts new file mode 100644 index 000000000..67f25e082 --- /dev/null +++ b/web/zuul/description.ts @@ -0,0 +1,18 @@ +// Copyright 2018 Red Hat +// +// Licensed under the Apache License, Version 2.0 (the "License"); you may +// not use this file except in compliance with the License. You may obtain +// a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, WITHOUT +// WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the +// License for the specific language governing permissions and limitations +// under the License. + +export default class RouteDescription { + title: string + url: string[] +} diff --git a/web/zuul/info.ts b/web/zuul/info.ts new file mode 100644 index 000000000..1df2391ec --- /dev/null +++ b/web/zuul/info.ts @@ -0,0 +1,18 @@ +// Copyright 2018 Red Hat +// +// Licensed under the Apache License, Version 2.0 (the "License"); you may +// not use this file except in compliance with the License. You may obtain +// a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, WITHOUT +// WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the +// License for the specific language governing permissions and limitations +// under the License. + +export default class Info { + tenant: string + whiteLabel: boolean +} diff --git a/web/zuul/infoResponse.ts b/web/zuul/infoResponse.ts new file mode 100644 index 000000000..6835222fa --- /dev/null +++ b/web/zuul/infoResponse.ts @@ -0,0 +1,19 @@ +// Copyright 2018 Red Hat +// +// Licensed under the Apache License, Version 2.0 (the "License"); you may +// not use this file except in compliance with the License. You may obtain +// a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, WITHOUT +// WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the +// License for the specific language governing permissions and limitations +// under the License. + +import Info from './info' + +export default class InfoResponse { + info: Info +} diff --git a/web/zuul/zuul.service.ts b/web/zuul/zuul.service.ts new file mode 100644 index 000000000..b244112ea --- /dev/null +++ b/web/zuul/zuul.service.ts @@ -0,0 +1,152 @@ +// Copyright 2017 Red Hat +// +// Licensed under the Apache License, Version 2.0 (the "License"); you may +// not use this file except in compliance with the License. You may obtain +// a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, WITHOUT +// WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the +// License for the specific language governing permissions and limitations +// under the License. + +import { Injectable, EventEmitter, Output } from '@angular/core' +import { HttpClient } from '@angular/common/http' +import { Router } from '@angular/router' +import { BehaviorSubject } from 'rxjs/BehaviorSubject' + +import * as url from 'url' + +import Info from './info' +import InfoResponse from './infoResponse' +import RouteDescription from './description' + +declare var ZUUL_API_URL: string +declare var ZUUL_BASE_HREF: string + +function getAppBaseHrefFromPath () { + const path = window.location.pathname + if (path.includes('/t/')) { + return path.slice(0, path.lastIndexOf('/t/') + 1) + } else { + return path.split('/').slice(0, -1).join('/') || '/' + } +} + +export function getAppBaseHref (): string { + /* + * Return a value suitable for use in + * https://angular.io/api/common/APP_BASE_HREF + */ + let path + if (typeof ZUUL_BASE_HREF !== 'undefined') { + path = ZUUL_BASE_HREF + } else { + // Use window.location.pathname because we're looking for a path + // prefix, not a URL. + path = getAppBaseHrefFromPath() + } + if (! path.endsWith('/')) { + path = path + '/' + } + return path +} + +@Injectable({ + providedIn: 'root', +}) +export class ZuulService { + public baseApiUrl: string + public appBaseHref: string + public info: Info + navbarRoutes: RouteDescription[] + private routePages = ['status', 'jobs', 'builds'] + + constructor(private router: Router, private http: HttpClient) { + this.baseApiUrl = this.getBaseApiUrl() + this.appBaseHref = getAppBaseHref() + } + + async setTenant (tenant?: string) { + if (!this.info) { + const infoEndpoint = this.baseApiUrl + 'api/info' + const infoResponse = await this.http.get<InfoResponse>( + infoEndpoint).toPromise() + this.info = infoResponse.info + if (this.info.tenant && !tenant) { + this.info.whiteLabel = true + } else { + this.info.whiteLabel = false + } + } + if (tenant) { + this.info.tenant = tenant + } + this.navbarRoutes = this.getNavbarRoutes() + } + + getBaseApiUrl (): string { + let path + if (typeof ZUUL_API_URL !== 'undefined') { + path = ZUUL_API_URL + } else { + path = url.resolve(window.location.href, getAppBaseHrefFromPath()) + } + if (! path.endsWith('/')) { + path = path + '/' + } + return path + } + + getSourceUrl (filename: string): string { + const tenant = this.info.tenant + if (this.info.whiteLabel || filename === 'tenants') { + if (!this.info.whiteLabel) { + // Reset selected tenant + this.info.tenant = '' + } + return url.resolve(this.baseApiUrl, `api/${filename}`) + } + if (!tenant) { + // No tenant selected, go to tenant list + console.log('No tenant selected, navigate to tenants list') + this.router.navigate(['/tenants.html']) + } + return url.resolve(this.baseApiUrl, `api/tenant/${tenant}/${filename}`) + } + + getWebsocketUrl (filename: string): string { + return this.getSourceUrl(filename) + .replace(/(http)(s)?\:\/\//, 'ws$2://') + } + + getNavbarRoutes(): RouteDescription[] { + const routes = [] + for (const routePage of this.routePages) { + const description: RouteDescription = { + title: this.getRouteTitle(routePage), + url: this.getRouterLink(routePage) + } + routes.push(description) + } + return routes + } + + getRouteTitle(target: string): string { + return target.charAt(0).toUpperCase() + target.slice(1) + } + + getRouterLink(target: string): string[] { + const htmlTarget = target + '.html' + if (this.info.whiteLabel) { + return ['/' + htmlTarget] + } else { + return ['/t', this.info.tenant, htmlTarget] + } + } + +} + +export default ZuulService |