diff --git a/.github/PULL_REQUEST_TEMPLATE.md b/.github/PULL_REQUEST_TEMPLATE.md index 6f21bd9133..d52ae19134 100644 --- a/.github/PULL_REQUEST_TEMPLATE.md +++ b/.github/PULL_REQUEST_TEMPLATE.md @@ -13,3 +13,13 @@ YES ## Release notes - + diff --git a/.gitignore b/.gitignore index bc9fa29741..0d6fc5347a 100644 --- a/.gitignore +++ b/.gitignore @@ -26,4 +26,5 @@ test-extend.js stats.json iris/.env .expo -mobile/.expo \ No newline at end of file +mobile/.expo +test-results.json diff --git a/dangerfile.js b/dangerfile.js new file mode 100644 index 0000000000..7b60d69edb --- /dev/null +++ b/dangerfile.js @@ -0,0 +1,66 @@ +// @flow +import path from 'path'; +import { warn, fail, message, markdown, schedule, danger } from 'danger'; +import yarn from 'danger-plugin-yarn'; +import jest from 'danger-plugin-jest'; +import noTestShortcuts from 'danger-plugin-no-test-shortcuts'; + +const APP_FOLDERS = [ + 'admin', + 'athena', + 'chronos', + 'hermes', + 'hyperion', + 'iris', + 'mercury', + 'shared', + 'src', + 'vulcan', +]; +const CHECKBOXES = /^- \[x\] *(.*)?$/gim; +const possibleAutoLabels = { + wip: 'WIP: Building', + 'needs testing': 'WIP: Needs Testing', + 'ready for review': 'WIP: Ready for Review', +}; + +// Make sure people describe what their PR is about +if (danger.github.pr.body.length < 10) { + fail('Please add a description to your PR.'); +} + +// Add automatic labels to the PR +schedule(async () => { + const pr = danger.github.pr; + const api = danger.github.api; + const checkedBoxes = pr.body.match(CHECKBOXES); + if (!checkedBoxes || checkedBoxes.length === 0) return; + + const matches = checkedBoxes.map(result => result[1]); + + const matchingLabels = matches.filter(match => + Object.keys(possibleAutoLabels).includes(match.toLowerCase()) + ); + + if (!matchingLabels || matchingLabels.length === 0) return; + + await api.issues.addLabels({ + owner: pr.owner, + repo: pr.repo, + number: pr.number, + labels: matchingLabels, + }); +}); + +// Make sure the yarn.lock file is updated when dependencies get added and log any added dependencies +APP_FOLDERS.forEach(folder => { + schedule(yarn(path.join(__dirname, folder, 'package.json'))); +}); + +// Log test failures if there are any +jest(); + +// Make sure nobody does a it.only and blocks our entire test-suite from running +noTestShortcuts({ + testFilePredicate: filePath => filePath.endsWith('.test.js'), +}); diff --git a/flow-typed/npm/danger-plugin-jest_vx.x.x.js b/flow-typed/npm/danger-plugin-jest_vx.x.x.js new file mode 100644 index 0000000000..8617997fc8 --- /dev/null +++ b/flow-typed/npm/danger-plugin-jest_vx.x.x.js @@ -0,0 +1,39 @@ +// flow-typed signature: 0bc9953088789fa140d0772a738d8153 +// flow-typed version: <>/danger-plugin-jest_v^1.1.0/flow_v0.66.0 + +/** + * This is an autogenerated libdef stub for: + * + * 'danger-plugin-jest' + * + * Fill this stub out by replacing all the `any` types. + * + * Once filled out, we encourage you to share your work with the + * community by sending a pull request to: + * https://github.com/flowtype/flow-typed + */ + +declare module 'danger-plugin-jest' { + declare module.exports: any; +} + +/** + * We include stubs for each file inside this npm package in case you need to + * require those files directly. Feel free to delete any files that aren't + * needed. + */ +declare module 'danger-plugin-jest/dist/index' { + declare module.exports: any; +} + +declare module 'danger-plugin-jest/dist/types' { + declare module.exports: any; +} + +// Filename aliases +declare module 'danger-plugin-jest/dist/index.js' { + declare module.exports: $Exports<'danger-plugin-jest/dist/index'>; +} +declare module 'danger-plugin-jest/dist/types.js' { + declare module.exports: $Exports<'danger-plugin-jest/dist/types'>; +} diff --git a/flow-typed/npm/danger-plugin-no-test-shortcuts_vx.x.x.js b/flow-typed/npm/danger-plugin-no-test-shortcuts_vx.x.x.js new file mode 100644 index 0000000000..e71ca2faa8 --- /dev/null +++ b/flow-typed/npm/danger-plugin-no-test-shortcuts_vx.x.x.js @@ -0,0 +1,32 @@ +// flow-typed signature: 6eac443fa8195b12d311468f9d3dfcb8 +// flow-typed version: <>/danger-plugin-no-test-shortcuts_v^2.0.0/flow_v0.66.0 + +/** + * This is an autogenerated libdef stub for: + * + * 'danger-plugin-no-test-shortcuts' + * + * Fill this stub out by replacing all the `any` types. + * + * Once filled out, we encourage you to share your work with the + * community by sending a pull request to: + * https://github.com/flowtype/flow-typed + */ + +declare module 'danger-plugin-no-test-shortcuts' { + declare module.exports: any; +} + +/** + * We include stubs for each file inside this npm package in case you need to + * require those files directly. Feel free to delete any files that aren't + * needed. + */ +declare module 'danger-plugin-no-test-shortcuts/dist/index' { + declare module.exports: any; +} + +// Filename aliases +declare module 'danger-plugin-no-test-shortcuts/dist/index.js' { + declare module.exports: $Exports<'danger-plugin-no-test-shortcuts/dist/index'>; +} diff --git a/flow-typed/npm/danger-plugin-yarn_vx.x.x.js b/flow-typed/npm/danger-plugin-yarn_vx.x.x.js new file mode 100644 index 0000000000..f653b2085e --- /dev/null +++ b/flow-typed/npm/danger-plugin-yarn_vx.x.x.js @@ -0,0 +1,46 @@ +// flow-typed signature: 7b69917a67b22d12810ba89bc8ffdec2 +// flow-typed version: <>/danger-plugin-yarn_v^1.2.1/flow_v0.66.0 + +/** + * This is an autogenerated libdef stub for: + * + * 'danger-plugin-yarn' + * + * Fill this stub out by replacing all the `any` types. + * + * Once filled out, we encourage you to share your work with the + * community by sending a pull request to: + * https://github.com/flowtype/flow-typed + */ + +declare module 'danger-plugin-yarn' { + declare module.exports: any; +} + +/** + * We include stubs for each file inside this npm package in case you need to + * require those files directly. Feel free to delete any files that aren't + * needed. + */ +declare module 'danger-plugin-yarn/dist/danger-mock' { + declare module.exports: any; +} + +declare module 'danger-plugin-yarn/dist/index' { + declare module.exports: any; +} + +declare module 'danger-plugin-yarn/dist/index.test' { + declare module.exports: any; +} + +// Filename aliases +declare module 'danger-plugin-yarn/dist/danger-mock.js' { + declare module.exports: $Exports<'danger-plugin-yarn/dist/danger-mock'>; +} +declare module 'danger-plugin-yarn/dist/index.js' { + declare module.exports: $Exports<'danger-plugin-yarn/dist/index'>; +} +declare module 'danger-plugin-yarn/dist/index.test.js' { + declare module.exports: $Exports<'danger-plugin-yarn/dist/index.test'>; +} diff --git a/flow-typed/npm/danger_vx.x.x.js b/flow-typed/npm/danger_vx.x.x.js new file mode 100644 index 0000000000..48ebcc48fc --- /dev/null +++ b/flow-typed/npm/danger_vx.x.x.js @@ -0,0 +1,592 @@ +// flow-typed signature: 9a4f89440762daa780f3c48b41660b25 +// flow-typed version: <>/danger_v3.x/flow_v0.66.0 + +/** + * This is an autogenerated libdef stub for: + * + * 'danger' + * + * Fill this stub out by replacing all the `any` types. + * + * Once filled out, we encourage you to share your work with the + * community by sending a pull request to: + * https://github.com/flowtype/flow-typed + */ + +declare module 'danger' { + declare module.exports: any; +} + +/** + * We include stubs for each file inside this npm package in case you need to + * require those files directly. Feel free to delete any files that aren't + * needed. + */ +declare module 'danger/dangerfile.circle' { + declare module.exports: any; +} + +declare module 'danger/dangerfile.flow' { + declare module.exports: any; +} + +declare module 'danger/distribution/api/fetch' { + declare module.exports: any; +} + +declare module 'danger/distribution/ci_source/ci_source_helpers' { + declare module.exports: any; +} + +declare module 'danger/distribution/ci_source/ci_source' { + declare module.exports: any; +} + +declare module 'danger/distribution/ci_source/get_ci_source' { + declare module.exports: any; +} + +declare module 'danger/distribution/ci_source/providers/Bitrise' { + declare module.exports: any; +} + +declare module 'danger/distribution/ci_source/providers/BuddyBuild' { + declare module.exports: any; +} + +declare module 'danger/distribution/ci_source/providers/Buildkite' { + declare module.exports: any; +} + +declare module 'danger/distribution/ci_source/providers/Circle' { + declare module.exports: any; +} + +declare module 'danger/distribution/ci_source/providers/Codeship' { + declare module.exports: any; +} + +declare module 'danger/distribution/ci_source/providers/DockerCloud' { + declare module.exports: any; +} + +declare module 'danger/distribution/ci_source/providers/Drone' { + declare module.exports: any; +} + +declare module 'danger/distribution/ci_source/providers/Fake' { + declare module.exports: any; +} + +declare module 'danger/distribution/ci_source/providers/index' { + declare module.exports: any; +} + +declare module 'danger/distribution/ci_source/providers/Jenkins' { + declare module.exports: any; +} + +declare module 'danger/distribution/ci_source/providers/local-repo' { + declare module.exports: any; +} + +declare module 'danger/distribution/ci_source/providers/Nevercode' { + declare module.exports: any; +} + +declare module 'danger/distribution/ci_source/providers/Semaphore' { + declare module.exports: any; +} + +declare module 'danger/distribution/ci_source/providers/Surf' { + declare module.exports: any; +} + +declare module 'danger/distribution/ci_source/providers/Travis' { + declare module.exports: any; +} + +declare module 'danger/distribution/ci_source/providers/VSTS' { + declare module.exports: any; +} + +declare module 'danger/distribution/commands/ci/runner' { + declare module.exports: any; +} + +declare module 'danger/distribution/commands/danger-ci' { + declare module.exports: any; +} + +declare module 'danger/distribution/commands/danger-init' { + declare module.exports: any; +} + +declare module 'danger/distribution/commands/danger-local' { + declare module.exports: any; +} + +declare module 'danger/distribution/commands/danger-pr' { + declare module.exports: any; +} + +declare module 'danger/distribution/commands/danger-process' { + declare module.exports: any; +} + +declare module 'danger/distribution/commands/danger-runner' { + declare module.exports: any; +} + +declare module 'danger/distribution/commands/danger' { + declare module.exports: any; +} + +declare module 'danger/distribution/commands/init/add-to-ci' { + declare module.exports: any; +} + +declare module 'danger/distribution/commands/init/default-dangerfile' { + declare module.exports: any; +} + +declare module 'danger/distribution/commands/init/get-repo-slug' { + declare module.exports: any; +} + +declare module 'danger/distribution/commands/init/interfaces' { + declare module.exports: any; +} + +declare module 'danger/distribution/commands/init/state-setup' { + declare module.exports: any; +} + +declare module 'danger/distribution/commands/utils/dangerRunToRunnerCLI' { + declare module.exports: any; +} + +declare module 'danger/distribution/commands/utils/file-utils' { + declare module.exports: any; +} + +declare module 'danger/distribution/commands/utils/getRuntimeCISource' { + declare module.exports: any; +} + +declare module 'danger/distribution/commands/utils/reporting' { + declare module.exports: any; +} + +declare module 'danger/distribution/commands/utils/runDangerSubprocess' { + declare module.exports: any; +} + +declare module 'danger/distribution/commands/utils/sharedDangerfileArgs' { + declare module.exports: any; +} + +declare module 'danger/distribution/commands/utils/validateDangerfileExists' { + declare module.exports: any; +} + +declare module 'danger/distribution/danger' { + declare module.exports: any; +} + +declare module 'danger/distribution/dsl/Aliases' { + declare module.exports: any; +} + +declare module 'danger/distribution/dsl/cli-args' { + declare module.exports: any; +} + +declare module 'danger/distribution/dsl/Commit' { + declare module.exports: any; +} + +declare module 'danger/distribution/dsl/DangerDSL' { + declare module.exports: any; +} + +declare module 'danger/distribution/dsl/DangerResults' { + declare module.exports: any; +} + +declare module 'danger/distribution/dsl/DangerUtilsDSL' { + declare module.exports: any; +} + +declare module 'danger/distribution/dsl/GitDSL' { + declare module.exports: any; +} + +declare module 'danger/distribution/dsl/GitHubDSL' { + declare module.exports: any; +} + +declare module 'danger/distribution/dsl/Violation' { + declare module.exports: any; +} + +declare module 'danger/distribution/platforms/FakePlatform' { + declare module.exports: any; +} + +declare module 'danger/distribution/platforms/git/diffToGitJSONDSL' { + declare module.exports: any; +} + +declare module 'danger/distribution/platforms/git/gitJSONToGitDSL' { + declare module.exports: any; +} + +declare module 'danger/distribution/platforms/git/localGetCommits' { + declare module.exports: any; +} + +declare module 'danger/distribution/platforms/git/localGetDiff' { + declare module.exports: any; +} + +declare module 'danger/distribution/platforms/git/localGetFileAtSHA' { + declare module.exports: any; +} + +declare module 'danger/distribution/platforms/GitHub' { + declare module.exports: any; +} + +declare module 'danger/distribution/platforms/github/GitHubAPI' { + declare module.exports: any; +} + +declare module 'danger/distribution/platforms/github/GitHubGit' { + declare module.exports: any; +} + +declare module 'danger/distribution/platforms/github/GitHubUtils' { + declare module.exports: any; +} + +declare module 'danger/distribution/platforms/github/pullRequestParser' { + declare module.exports: any; +} + +declare module 'danger/distribution/platforms/LocalGit' { + declare module.exports: any; +} + +declare module 'danger/distribution/platforms/platform' { + declare module.exports: any; +} + +declare module 'danger/distribution/runner/danger-dsl-json' { + declare module.exports: any; +} + +declare module 'danger/distribution/runner/Dangerfile' { + declare module.exports: any; +} + +declare module 'danger/distribution/runner/DangerUtils' { + declare module.exports: any; +} + +declare module 'danger/distribution/runner/dslGenerator' { + declare module.exports: any; +} + +declare module 'danger/distribution/runner/Executor' { + declare module.exports: any; +} + +declare module 'danger/distribution/runner/json-to-context' { + declare module.exports: any; +} + +declare module 'danger/distribution/runner/jsonToDSL' { + declare module.exports: any; +} + +declare module 'danger/distribution/runner/runners/inline' { + declare module.exports: any; +} + +declare module 'danger/distribution/runner/runners/runner' { + declare module.exports: any; +} + +declare module 'danger/distribution/runner/runners/utils/cleanDangerfile' { + declare module.exports: any; +} + +declare module 'danger/distribution/runner/runners/utils/resultsForCaughtError' { + declare module.exports: any; +} + +declare module 'danger/distribution/runner/runners/utils/transpiler' { + declare module.exports: any; +} + +declare module 'danger/distribution/runner/runners/vm2' { + declare module.exports: any; +} + +declare module 'danger/distribution/runner/templates/exceptionRaisedTemplate' { + declare module.exports: any; +} + +declare module 'danger/distribution/runner/templates/githubIssueTemplate' { + declare module.exports: any; +} + +declare module 'danger/wallaby' { + declare module.exports: any; +} + +// Filename aliases +declare module 'danger/dangerfile.circle.js' { + declare module.exports: $Exports<'danger/dangerfile.circle'>; +} +declare module 'danger/dangerfile.flow.js' { + declare module.exports: $Exports<'danger/dangerfile.flow'>; +} +declare module 'danger/distribution/api/fetch.js' { + declare module.exports: $Exports<'danger/distribution/api/fetch'>; +} +declare module 'danger/distribution/ci_source/ci_source_helpers.js' { + declare module.exports: $Exports<'danger/distribution/ci_source/ci_source_helpers'>; +} +declare module 'danger/distribution/ci_source/ci_source.js' { + declare module.exports: $Exports<'danger/distribution/ci_source/ci_source'>; +} +declare module 'danger/distribution/ci_source/get_ci_source.js' { + declare module.exports: $Exports<'danger/distribution/ci_source/get_ci_source'>; +} +declare module 'danger/distribution/ci_source/providers/Bitrise.js' { + declare module.exports: $Exports<'danger/distribution/ci_source/providers/Bitrise'>; +} +declare module 'danger/distribution/ci_source/providers/BuddyBuild.js' { + declare module.exports: $Exports<'danger/distribution/ci_source/providers/BuddyBuild'>; +} +declare module 'danger/distribution/ci_source/providers/Buildkite.js' { + declare module.exports: $Exports<'danger/distribution/ci_source/providers/Buildkite'>; +} +declare module 'danger/distribution/ci_source/providers/Circle.js' { + declare module.exports: $Exports<'danger/distribution/ci_source/providers/Circle'>; +} +declare module 'danger/distribution/ci_source/providers/Codeship.js' { + declare module.exports: $Exports<'danger/distribution/ci_source/providers/Codeship'>; +} +declare module 'danger/distribution/ci_source/providers/DockerCloud.js' { + declare module.exports: $Exports<'danger/distribution/ci_source/providers/DockerCloud'>; +} +declare module 'danger/distribution/ci_source/providers/Drone.js' { + declare module.exports: $Exports<'danger/distribution/ci_source/providers/Drone'>; +} +declare module 'danger/distribution/ci_source/providers/Fake.js' { + declare module.exports: $Exports<'danger/distribution/ci_source/providers/Fake'>; +} +declare module 'danger/distribution/ci_source/providers/index.js' { + declare module.exports: $Exports<'danger/distribution/ci_source/providers/index'>; +} +declare module 'danger/distribution/ci_source/providers/Jenkins.js' { + declare module.exports: $Exports<'danger/distribution/ci_source/providers/Jenkins'>; +} +declare module 'danger/distribution/ci_source/providers/local-repo.js' { + declare module.exports: $Exports<'danger/distribution/ci_source/providers/local-repo'>; +} +declare module 'danger/distribution/ci_source/providers/Nevercode.js' { + declare module.exports: $Exports<'danger/distribution/ci_source/providers/Nevercode'>; +} +declare module 'danger/distribution/ci_source/providers/Semaphore.js' { + declare module.exports: $Exports<'danger/distribution/ci_source/providers/Semaphore'>; +} +declare module 'danger/distribution/ci_source/providers/Surf.js' { + declare module.exports: $Exports<'danger/distribution/ci_source/providers/Surf'>; +} +declare module 'danger/distribution/ci_source/providers/Travis.js' { + declare module.exports: $Exports<'danger/distribution/ci_source/providers/Travis'>; +} +declare module 'danger/distribution/ci_source/providers/VSTS.js' { + declare module.exports: $Exports<'danger/distribution/ci_source/providers/VSTS'>; +} +declare module 'danger/distribution/commands/ci/runner.js' { + declare module.exports: $Exports<'danger/distribution/commands/ci/runner'>; +} +declare module 'danger/distribution/commands/danger-ci.js' { + declare module.exports: $Exports<'danger/distribution/commands/danger-ci'>; +} +declare module 'danger/distribution/commands/danger-init.js' { + declare module.exports: $Exports<'danger/distribution/commands/danger-init'>; +} +declare module 'danger/distribution/commands/danger-local.js' { + declare module.exports: $Exports<'danger/distribution/commands/danger-local'>; +} +declare module 'danger/distribution/commands/danger-pr.js' { + declare module.exports: $Exports<'danger/distribution/commands/danger-pr'>; +} +declare module 'danger/distribution/commands/danger-process.js' { + declare module.exports: $Exports<'danger/distribution/commands/danger-process'>; +} +declare module 'danger/distribution/commands/danger-runner.js' { + declare module.exports: $Exports<'danger/distribution/commands/danger-runner'>; +} +declare module 'danger/distribution/commands/danger.js' { + declare module.exports: $Exports<'danger/distribution/commands/danger'>; +} +declare module 'danger/distribution/commands/init/add-to-ci.js' { + declare module.exports: $Exports<'danger/distribution/commands/init/add-to-ci'>; +} +declare module 'danger/distribution/commands/init/default-dangerfile.js' { + declare module.exports: $Exports<'danger/distribution/commands/init/default-dangerfile'>; +} +declare module 'danger/distribution/commands/init/get-repo-slug.js' { + declare module.exports: $Exports<'danger/distribution/commands/init/get-repo-slug'>; +} +declare module 'danger/distribution/commands/init/interfaces.js' { + declare module.exports: $Exports<'danger/distribution/commands/init/interfaces'>; +} +declare module 'danger/distribution/commands/init/state-setup.js' { + declare module.exports: $Exports<'danger/distribution/commands/init/state-setup'>; +} +declare module 'danger/distribution/commands/utils/dangerRunToRunnerCLI.js' { + declare module.exports: $Exports<'danger/distribution/commands/utils/dangerRunToRunnerCLI'>; +} +declare module 'danger/distribution/commands/utils/file-utils.js' { + declare module.exports: $Exports<'danger/distribution/commands/utils/file-utils'>; +} +declare module 'danger/distribution/commands/utils/getRuntimeCISource.js' { + declare module.exports: $Exports<'danger/distribution/commands/utils/getRuntimeCISource'>; +} +declare module 'danger/distribution/commands/utils/reporting.js' { + declare module.exports: $Exports<'danger/distribution/commands/utils/reporting'>; +} +declare module 'danger/distribution/commands/utils/runDangerSubprocess.js' { + declare module.exports: $Exports<'danger/distribution/commands/utils/runDangerSubprocess'>; +} +declare module 'danger/distribution/commands/utils/sharedDangerfileArgs.js' { + declare module.exports: $Exports<'danger/distribution/commands/utils/sharedDangerfileArgs'>; +} +declare module 'danger/distribution/commands/utils/validateDangerfileExists.js' { + declare module.exports: $Exports<'danger/distribution/commands/utils/validateDangerfileExists'>; +} +declare module 'danger/distribution/danger.js' { + declare module.exports: $Exports<'danger/distribution/danger'>; +} +declare module 'danger/distribution/dsl/Aliases.js' { + declare module.exports: $Exports<'danger/distribution/dsl/Aliases'>; +} +declare module 'danger/distribution/dsl/cli-args.js' { + declare module.exports: $Exports<'danger/distribution/dsl/cli-args'>; +} +declare module 'danger/distribution/dsl/Commit.js' { + declare module.exports: $Exports<'danger/distribution/dsl/Commit'>; +} +declare module 'danger/distribution/dsl/DangerDSL.js' { + declare module.exports: $Exports<'danger/distribution/dsl/DangerDSL'>; +} +declare module 'danger/distribution/dsl/DangerResults.js' { + declare module.exports: $Exports<'danger/distribution/dsl/DangerResults'>; +} +declare module 'danger/distribution/dsl/DangerUtilsDSL.js' { + declare module.exports: $Exports<'danger/distribution/dsl/DangerUtilsDSL'>; +} +declare module 'danger/distribution/dsl/GitDSL.js' { + declare module.exports: $Exports<'danger/distribution/dsl/GitDSL'>; +} +declare module 'danger/distribution/dsl/GitHubDSL.js' { + declare module.exports: $Exports<'danger/distribution/dsl/GitHubDSL'>; +} +declare module 'danger/distribution/dsl/Violation.js' { + declare module.exports: $Exports<'danger/distribution/dsl/Violation'>; +} +declare module 'danger/distribution/platforms/FakePlatform.js' { + declare module.exports: $Exports<'danger/distribution/platforms/FakePlatform'>; +} +declare module 'danger/distribution/platforms/git/diffToGitJSONDSL.js' { + declare module.exports: $Exports<'danger/distribution/platforms/git/diffToGitJSONDSL'>; +} +declare module 'danger/distribution/platforms/git/gitJSONToGitDSL.js' { + declare module.exports: $Exports<'danger/distribution/platforms/git/gitJSONToGitDSL'>; +} +declare module 'danger/distribution/platforms/git/localGetCommits.js' { + declare module.exports: $Exports<'danger/distribution/platforms/git/localGetCommits'>; +} +declare module 'danger/distribution/platforms/git/localGetDiff.js' { + declare module.exports: $Exports<'danger/distribution/platforms/git/localGetDiff'>; +} +declare module 'danger/distribution/platforms/git/localGetFileAtSHA.js' { + declare module.exports: $Exports<'danger/distribution/platforms/git/localGetFileAtSHA'>; +} +declare module 'danger/distribution/platforms/GitHub.js' { + declare module.exports: $Exports<'danger/distribution/platforms/GitHub'>; +} +declare module 'danger/distribution/platforms/github/GitHubAPI.js' { + declare module.exports: $Exports<'danger/distribution/platforms/github/GitHubAPI'>; +} +declare module 'danger/distribution/platforms/github/GitHubGit.js' { + declare module.exports: $Exports<'danger/distribution/platforms/github/GitHubGit'>; +} +declare module 'danger/distribution/platforms/github/GitHubUtils.js' { + declare module.exports: $Exports<'danger/distribution/platforms/github/GitHubUtils'>; +} +declare module 'danger/distribution/platforms/github/pullRequestParser.js' { + declare module.exports: $Exports<'danger/distribution/platforms/github/pullRequestParser'>; +} +declare module 'danger/distribution/platforms/LocalGit.js' { + declare module.exports: $Exports<'danger/distribution/platforms/LocalGit'>; +} +declare module 'danger/distribution/platforms/platform.js' { + declare module.exports: $Exports<'danger/distribution/platforms/platform'>; +} +declare module 'danger/distribution/runner/danger-dsl-json.js' { + declare module.exports: $Exports<'danger/distribution/runner/danger-dsl-json'>; +} +declare module 'danger/distribution/runner/Dangerfile.js' { + declare module.exports: $Exports<'danger/distribution/runner/Dangerfile'>; +} +declare module 'danger/distribution/runner/DangerUtils.js' { + declare module.exports: $Exports<'danger/distribution/runner/DangerUtils'>; +} +declare module 'danger/distribution/runner/dslGenerator.js' { + declare module.exports: $Exports<'danger/distribution/runner/dslGenerator'>; +} +declare module 'danger/distribution/runner/Executor.js' { + declare module.exports: $Exports<'danger/distribution/runner/Executor'>; +} +declare module 'danger/distribution/runner/json-to-context.js' { + declare module.exports: $Exports<'danger/distribution/runner/json-to-context'>; +} +declare module 'danger/distribution/runner/jsonToDSL.js' { + declare module.exports: $Exports<'danger/distribution/runner/jsonToDSL'>; +} +declare module 'danger/distribution/runner/runners/inline.js' { + declare module.exports: $Exports<'danger/distribution/runner/runners/inline'>; +} +declare module 'danger/distribution/runner/runners/runner.js' { + declare module.exports: $Exports<'danger/distribution/runner/runners/runner'>; +} +declare module 'danger/distribution/runner/runners/utils/cleanDangerfile.js' { + declare module.exports: $Exports<'danger/distribution/runner/runners/utils/cleanDangerfile'>; +} +declare module 'danger/distribution/runner/runners/utils/resultsForCaughtError.js' { + declare module.exports: $Exports<'danger/distribution/runner/runners/utils/resultsForCaughtError'>; +} +declare module 'danger/distribution/runner/runners/utils/transpiler.js' { + declare module.exports: $Exports<'danger/distribution/runner/runners/utils/transpiler'>; +} +declare module 'danger/distribution/runner/runners/vm2.js' { + declare module.exports: $Exports<'danger/distribution/runner/runners/vm2'>; +} +declare module 'danger/distribution/runner/templates/exceptionRaisedTemplate.js' { + declare module.exports: $Exports<'danger/distribution/runner/templates/exceptionRaisedTemplate'>; +} +declare module 'danger/distribution/runner/templates/githubIssueTemplate.js' { + declare module.exports: $Exports<'danger/distribution/runner/templates/githubIssueTemplate'>; +} +declare module 'danger/wallaby.js' { + declare module.exports: $Exports<'danger/wallaby'>; +} diff --git a/iris/models/directMessageThread.js b/iris/models/directMessageThread.js index 54d29dfdb5..bb505259b9 100644 --- a/iris/models/directMessageThread.js +++ b/iris/models/directMessageThread.js @@ -80,9 +80,7 @@ const hasChanged = (field: string) => .ne(db.row('new_val')(field)); const THREAD_LAST_ACTIVE_CHANGED = hasChanged('threadLastActive'); -const listenToUpdatedDirectMessageThreads = (userId: string) => ( - cb: Function -): Function => { +const listenToUpdatedDirectMessageThreads = (cb: Function): Function => { return db .table('directMessageThreads') .changes({ @@ -90,7 +88,6 @@ const listenToUpdatedDirectMessageThreads = (userId: string) => ( }) .filter(NEW_DOCUMENTS.or(THREAD_LAST_ACTIVE_CHANGED))('new_val') .eqJoin('id', db.table('usersDirectMessageThreads'), { index: 'threadId' }) - .filter({ right: { userId } }) .without({ right: ['id', 'createdAt', 'threadId', 'lastActive', 'lastSeen'], }) diff --git a/iris/models/message.js b/iris/models/message.js index 3bbc104ad7..4121ef6ce4 100644 --- a/iris/models/message.js +++ b/iris/models/message.js @@ -149,13 +149,9 @@ export const storeMessage = ( }); }; -export const listenToNewMessagesInThread = (threadId: string) => ( - cb: Function -): Function => { +export const listenToNewMessages = (cb: Function): Function => { return db .table('messages') - .getAll(threadId, { index: 'threadId' }) - .filter(db.row.hasFields('deletedAt').not()) .changes({ includeInitial: false, }) diff --git a/iris/models/notification.js b/iris/models/notification.js index 7d93707021..f7a3e91f93 100644 --- a/iris/models/notification.js +++ b/iris/models/notification.js @@ -62,16 +62,13 @@ const hasChanged = (field: string) => const MODIFIED_AT_CHANGED = hasChanged('entityAddedAt'); -export const listenToNewNotifications = (userId: string) => ( - cb: Function -): Function => { +export const listenToNewNotifications = (cb: Function): Function => { return db .table('usersNotifications') .changes({ includeInitial: false, }) .filter(NEW_DOCUMENTS.or(MODIFIED_AT_CHANGED))('new_val') - .filter({ userId }) .eqJoin('notificationId', db.table('notifications')) .without({ left: ['notificationId', 'createdAt', 'id', 'entityAddedAt'], @@ -81,16 +78,13 @@ export const listenToNewNotifications = (userId: string) => ( .run(eachAsyncNewValue(cb)); }; -export const listenToNewDirectMessageNotifications = (userId: string) => ( - cb: Function -) => { +export const listenToNewDirectMessageNotifications = (cb: Function) => { return db .table('usersNotifications') .changes({ includeInitial: false, }) .filter(NEW_DOCUMENTS.or(MODIFIED_AT_CHANGED))('new_val') - .filter({ userId }) .eqJoin('notificationId', db.table('notifications')) .without({ left: ['notificationId', 'createdAt', 'id', 'entityAddedAt'], diff --git a/iris/models/thread.js b/iris/models/thread.js index a6baa66a8f..f6a346533d 100644 --- a/iris/models/thread.js +++ b/iris/models/thread.js @@ -505,17 +505,12 @@ const hasChanged = (field: string) => .ne(db.row('new_val')(field)); const LAST_ACTIVE_CHANGED = hasChanged('lastActive'); -export const listenToUpdatedThreads = (channelIds: Array) => ( - cb: Function -): Function => { +export const listenToUpdatedThreads = (cb: Function): Function => { return db .table('threads') .changes({ includeInitial: false, }) - .filter(NEW_DOCUMENTS.or(LAST_ACTIVE_CHANGED)) - .filter(thread => - db.expr(channelIds).contains(thread('new_val')('channelId')) - )('new_val') + .filter(NEW_DOCUMENTS.or(LAST_ACTIVE_CHANGED))('new_val') .run(eachAsyncNewValue(cb)); }; diff --git a/iris/subscriptions/directMessageThread.js b/iris/subscriptions/directMessageThread.js index 2f7f854d93..640dbea514 100644 --- a/iris/subscriptions/directMessageThread.js +++ b/iris/subscriptions/directMessageThread.js @@ -16,6 +16,10 @@ import type { GraphQLContext } from '../'; import type { GraphQLResolveInfo } from 'graphql'; import type { DBDirectMessageThread } from '../models/directMessageThread'; +const addNewDirectMessageThreadListener = asyncify( + listenToUpdatedDirectMessageThreads +); + module.exports = { Subscription: { directMessageThreadUpdated: { @@ -32,20 +36,13 @@ module.exports = { ); debug(`@${user.username || user.id} listening to updated DM threads`); - return asyncify(listenToUpdatedDirectMessageThreads(user.id), { + return addNewDirectMessageThreadListener({ + filter: thread => thread.userId === user.id, onError: err => { // Don't crash the whole API server on error in the listener console.error(err); Raven.captureException(err); }, - onClose: cursor => { - if (cursor) { - /* ignore errors that happen when closing the cursor */ - try { - cursor.close(() => {}); - } catch (err) {} - } - }, }); }, }, diff --git a/iris/subscriptions/message.js b/iris/subscriptions/message.js index c0520d8e4a..e7420167eb 100644 --- a/iris/subscriptions/message.js +++ b/iris/subscriptions/message.js @@ -2,13 +2,15 @@ const debug = require('debug')('iris:subscriptions:messages'); import { getThread } from '../models/thread'; import { getDirectMessageThread } from '../models/directMessageThread'; -import { userCanViewChannel, userCanViewDirectMessageThread } from './utils'; +import { listenToNewMessages } from '../models/message'; +import UserError from '../utils/UserError'; import asyncify from '../utils/asyncify'; -import { listenToNewMessagesInThread } from '../models/message'; +import { userCanViewChannel, userCanViewDirectMessageThread } from './utils'; import { trackUserThreadLastSeenQueue } from 'shared/bull/queues.js'; -import UserError from '../utils/UserError'; import Raven from 'shared/raven'; +const addMessageListener = asyncify(listenToNewMessages); + import type { Message } from '../models/message'; import type { GraphQLContext } from '../'; import type { GraphQLResolveInfo } from 'graphql'; @@ -53,29 +55,19 @@ module.exports = { } debug(`${moniker} listening to new messages in ${thread}`); - return asyncify(listenToNewMessagesInThread(thread), { - onError: err => { - // Don't crash the whole API server on error in the listener - console.error(err); - Raven.captureException(err); - }, - onClose: cursor => { - // Once the user unsubscribes record a new threadLastSeen - if (user && user.id) { - trackUserThreadLastSeenQueue.add({ - threadId: thread, - userId: user.id, - timestamp: Date.now(), - }); - } - if (cursor) { - /* ignore errors that happen when closing the cursor */ - try { - cursor.close(() => {}); - } catch (err) {} - } - }, - }); + try { + return addMessageListener({ + filter: message => message.threadId === thread, + onError: err => { + // Don't crash the whole API server on error in the listener + console.error(err); + Raven.captureException(err); + }, + }); + } catch (err) { + console.error(err); + Raven.captureException(err); + } }, }, }, diff --git a/iris/subscriptions/notification.js b/iris/subscriptions/notification.js index 9ec0cf3126..488010e6dc 100644 --- a/iris/subscriptions/notification.js +++ b/iris/subscriptions/notification.js @@ -11,6 +11,11 @@ import Raven from 'shared/raven'; import type { GraphQLContext } from '../'; import type { GraphQLResolveInfo } from 'graphql'; +const addNotificationListener = asyncify(listenToNewNotifications); +const addDMNotificationListener = asyncify( + listenToNewDirectMessageNotifications +); + module.exports = { Subscription: { notificationAdded: { @@ -27,20 +32,14 @@ module.exports = { ); debug(`@${user.username || user.id} listening to notifications`); - return asyncify(listenToNewNotifications(user.id), { + return addNotificationListener({ + filter: notification => + notification && notification.userId === user.id, onError: err => { // Don't crash the whole API server on error in the listener console.error(err); Raven.captureException(err); }, - onClose: cursor => { - if (cursor) { - /* ignore errors that happen when closing the cursor */ - try { - cursor.close(() => {}); - } catch (err) {} - } - }, }); }, }, @@ -58,20 +57,14 @@ module.exports = { ); debug(`@${user.username || user.id} listening to DM notifications`); - return asyncify(listenToNewDirectMessageNotifications(user.id), { + return addDMNotificationListener({ + filter: notification => + notification && notification.userId === user.id, onError: err => { // Don't crash the whole API server on error in the listener console.error(err); Raven.captureException(err); }, - onClose: cursor => { - if (cursor) { - /* ignore errors that happen when closing the cursor */ - try { - cursor.close(() => {}); - } catch (err) {} - } - }, }); }, }, diff --git a/iris/subscriptions/thread.js b/iris/subscriptions/thread.js index a4af28332c..17b543a4ed 100644 --- a/iris/subscriptions/thread.js +++ b/iris/subscriptions/thread.js @@ -13,6 +13,8 @@ import Raven from 'shared/raven'; import type { GraphQLContext } from '../'; import type { GraphQLResolveInfo } from 'graphql'; +const addThreadListener = asyncify(listenToUpdatedThreads); + module.exports = { Subscription: { threadUpdated: { @@ -51,20 +53,13 @@ module.exports = { ids.length } channels` ); - return asyncify(listenToUpdatedThreads(ids), { + return addThreadListener({ + filter: thread => thread && ids.includes(thread.channelId), onError: err => { // Don't crash the whole API server on error in the listener console.error(err); Raven.captureException(err); }, - onClose: cursor => { - if (cursor) { - /* ignore errors that happen when closing the cursor */ - try { - cursor.close(() => {}); - } catch (err) {} - } - }, }); }, }, diff --git a/iris/utils/asyncify.js b/iris/utils/asyncify.js index 25d62156e5..2b3427df09 100644 --- a/iris/utils/asyncify.js +++ b/iris/utils/asyncify.js @@ -1,89 +1,66 @@ // @flow -// Turn a callback-based listener into an async iterator -// Based on https://github.com/apollographql/graphql-subscriptions/blob/master/src/event-emitter-to-async-iterator.ts -const debug = require('debug')('iris:utils:asyncify'); +// Turn a callback-based listener into many async iterators without buffering import { $$asyncIterator } from 'iterall'; -type Listener = ((arg: any) => void) => Promise; - -type onError = (err: Error) => void; +type Listener = ((arg: any) => void) => Promise; const defaultOnError = (err: Error) => { throw new Error(err); }; type Options = {| - onError?: onError, - onClose?: Function, + onError?: (err: Error) => void, + filter?: (arg: any) => boolean, |}; -const asyncify = ( - listener: Listener, - { onError = defaultOnError, onClose }: Options = {} -) => { - try { - let pullQueue = []; - let pushQueue = []; - let listening = true; - let listenerReturnValue; - // Start listener - listener(value => pushValue(value)) - .then(a => { - listenerReturnValue = a; - }) - .catch(err => { - onError(err); - }); +type Watcher = { + filter?: (arg: any) => boolean, + callback?: ({ done: boolean, value: any }) => void, +}; - function pushValue(value) { - if (pullQueue.length !== 0) { - pullQueue.shift()({ value, done: false }); - } else { - pushQueue.push(value); +const asyncify = (listener: Listener) => { + let watchers: Array = []; + listener(value => { + watchers.forEach(watcher => { + if (watcher.callback && (!watcher.filter || watcher.filter(value))) { + watcher.callback({ done: false, value }); } - } + }); + }); - function pullValue() { - return new Promise(resolve => { - if (pushQueue.length !== 0) { - resolve({ value: pushQueue.shift(), done: false }); - } else { - pullQueue.push(resolve); - } - }); - } - - function emptyQueue() { - if (listening) { - listening = false; - pullQueue.forEach(resolve => resolve({ value: undefined, done: true })); - pullQueue = []; - pushQueue = []; - onClose && onClose(listenerReturnValue); + return ({ filter, onError = defaultOnError }: Options = {}) => { + let watcher: Watcher = { filter }; + let watching = true; + const cleanup = () => { + if (watching) { + watching = false; + watchers = watchers.filter(w => w !== watcher); } + }; + try { + return { + next: () => + new Promise(resolve => { + watcher.callback = resolve; + watchers.push(watcher); + }), + return: () => { + cleanup(); + return Promise.resolve({ done: true }); + }, + throw: err => { + cleanup(); + onError(err); + return Promise.reject(err); + }, + [$$asyncIterator]() { + return this; + }, + }; + } catch (err) { + onError(err); } - - return ({ - next() { - return listening ? pullValue() : this.return(); - }, - return() { - emptyQueue(); - return Promise.resolve({ value: undefined, done: true }); - }, - throw(error) { - emptyQueue(); - onError(error); - return Promise.reject(error); - }, - [$$asyncIterator]() { - return this; - }, - }: any); - } catch (err) { - debug(err); - onError(err); - } + }; }; export default asyncify; diff --git a/package.json b/package.json index 342dae38cc..c4c1555a00 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "Spectrum", - "version": "2.1.5", + "version": "2.1.6", "private": true, "devDependencies": { "babel-cli": "^6.24.1", @@ -18,6 +18,9 @@ "backpack-core": "^0.4.1", "cheerio": "^1.0.0-rc.2", "cross-env": "^5.0.5", + "danger": "^3.1.8", + "danger-plugin-jest": "^1.1.0", + "danger-plugin-yarn": "^1.2.1", "eslint": "^4.15.0", "eslint-plugin-flowtype": "^2.39.1", "eslint-plugin-jest": "^21.6.1", @@ -61,6 +64,7 @@ "cookie-session": "^2.0.0-beta.3", "cors": "^2.8.3", "css.escape": "^1.5.1", + "danger-plugin-no-test-shortcuts": "^2.0.0", "dataloader": "^1.3.0", "debounce": "^1.1.0", "debug": "^2.6.8", @@ -213,7 +217,7 @@ "build:web": "cross-env NODE_PATH=./ react-app-rewired build", "jest": "cross-env NODE_PATH=./ jest", "test": "npm run jest -- --runInBand --watch", - "test:ci": "npm run jest -- --forceExit", + "test:ci": "npm run jest -- --forceExit --outputFile test-results.json --json", "flow": "flow", "db:migrate": "npm run rethinkdb:migrate -- up", "db:drop": "npm run rethinkdb:migrate -- down", diff --git a/shared/clients/draft-js/links-decorator/core.js b/shared/clients/draft-js/links-decorator/core.js index 95d24c08ef..10778c5e3a 100644 --- a/shared/clients/draft-js/links-decorator/core.js +++ b/shared/clients/draft-js/links-decorator/core.js @@ -1,7 +1,6 @@ // @flow import React from 'react'; -import findWithRegex from 'find-with-regex'; -import { URL } from 'shared/regexps'; +import linkStrategy from 'draft-js-linkify-plugin/lib/linkStrategy'; import normalizeUrl from '../../../normalize-url'; import type { ContentBlock } from 'draft-js/lib/ContentBlock'; import type { ComponentType, Node } from 'react'; @@ -20,10 +19,7 @@ let i = 0; const createLinksDecorator = ( Component: ComponentType ) => ({ - strategy: ( - contentBlock: ContentBlock, - callback: (...args?: Array) => any - ) => findWithRegex(URL, contentBlock, callback), + strategy: linkStrategy, component: ({ decoratedText, children }: DecoratorComponentProps) => ( { - // if the string starts with http or https, we are good - if (PROTOCOL.test(string)) { - return string; +// Note(@mxstbr): This method assumes that a string passed into it is already verified to be an URL +// it'll just append https:// to anything that doesn't look like an URL +const addProtocolToString = (url: string) => { + if (STARTS_WITH_PROTOCOL.test(url)) { + return url; } else { - // otherwise it doesn't start with a protocol, prepend http - return `http://${string}`; + return `https://${url}`; } }; diff --git a/shared/test/normalize-url.test.js b/shared/test/normalize-url.test.js new file mode 100644 index 0000000000..92ef88ac37 --- /dev/null +++ b/shared/test/normalize-url.test.js @@ -0,0 +1,30 @@ +// @flow +import normalizeUrl from '../normalize-url'; + +type Input = string; +type Output = string; + +// If only Input is provided it tests for input === output +type TestCase = [Input, Output]; + +type TestCases = { + [testName: string]: TestCase, +}; + +const testCases: TestCases = { + 'should do nothing to https URLs': [ + 'https://github.com', + 'https://github.com', + ], + 'should do nothing to http URLs': ['http://github.com', 'http://github.com'], + 'should add https:// in front of URLs without protocol': [ + 'github.com', + 'https://github.com', + ], +}; + +Object.keys(testCases).forEach(name => { + it(name, () => { + expect(normalizeUrl(testCases[name][0])).toEqual(testCases[name][1]); + }); +}); diff --git a/src/components/listItems/style.js b/src/components/listItems/style.js index 03050a0e66..fe978b9801 100644 --- a/src/components/listItems/style.js +++ b/src/components/listItems/style.js @@ -62,7 +62,7 @@ export const Row = styled(FlexRow)` export const Heading = styled(H3)` font-weight: 500; - font-size: 14px; + font-size: 16px; transition: ${Transition.hover.off}; line-height: 1.2; display: flex; @@ -96,8 +96,6 @@ export const ActionContainer = styled(FlexCol)` export const StyledCard = styled.div` flex-direction: column; - margin-top: 32px; - margin-left: 32px; display: ${props => (props.smallOnly ? 'none' : 'flex')}; @media (max-width: 768px) { diff --git a/src/components/message/style.js b/src/components/message/style.js index f6a93e7c75..150f12dce1 100644 --- a/src/components/message/style.js +++ b/src/components/message/style.js @@ -309,7 +309,7 @@ export const Line = styled.pre` export const Paragraph = styled.p` line-height: 1.5; - & ~ & { + &:not(:empty) ~ &:not(:empty) { margin-top: 1em; } `; diff --git a/src/components/profile/style.js b/src/components/profile/style.js index edee166721..4ab9c9c465 100644 --- a/src/components/profile/style.js +++ b/src/components/profile/style.js @@ -12,7 +12,6 @@ import { import { Button, OutlineButton, IconButton } from '../buttons'; import { ReputationWrapper } from '../reputation/style'; import Card from '../card'; -import { Heading } from '../listItems/style'; export const ProfileHeader = styled(FlexRow)` padding: 16px; @@ -78,11 +77,6 @@ export const FullProfile = styled.div` margin-top: -64px; background-color: ${props => props.theme.bg.default}; - ${Heading} { - font-size: 16px; - color: ${props => props.theme.text.alt}; - } - @media (max-width: 768px) { margin-top: -48px; } diff --git a/src/components/toggleChannelNotifications/index.js b/src/components/toggleChannelNotifications/index.js new file mode 100644 index 0000000000..c58027ba72 --- /dev/null +++ b/src/components/toggleChannelNotifications/index.js @@ -0,0 +1,79 @@ +// @flow +import * as React from 'react'; +import { connect } from 'react-redux'; +import compose from 'recompose/compose'; +import { addToastWithTimeout } from '../../actions/toasts'; +import type { GetChannelType } from 'shared/graphql/queries/channel/getChannel'; +import toggleChannelNotificationsMutation, { + type ToggleChannelNotificationsType, +} from 'shared/graphql/mutations/channel/toggleChannelNotifications'; + +type Props = { + channel: { + ...$Exact, + }, + toggleChannelNotifications: Function, + dispatch: Function, + render: Function, +}; + +type State = { isLoading: boolean }; + +class ToggleChannelNotifications extends React.Component { + state = { isLoading: false }; + + init = () => { + this.setState({ + isLoading: true, + }); + + return this.toggleNotifications(); + }; + + terminate = () => { + this.setState({ + isLoading: false, + }); + }; + + toggleNotifications = () => { + const { channel } = this.props; + + this.setState({ + isLoading: true, + }); + + this.props + .toggleChannelNotifications(channel.id) + .then(({ data }: ToggleChannelNotificationsType) => { + this.setState({ + isLoading: false, + }); + + const { toggleChannelNotifications } = data; + + const value = + toggleChannelNotifications.channelPermissions.receiveNotifications; + const type = value ? 'success' : 'neutral'; + const str = value + ? 'Notifications activated!' + : 'Notifications turned off.'; + this.props.dispatch(addToastWithTimeout(type, str)); + return; + }) + .catch(err => { + this.setState({ + isLoading: false, + }); + this.props.dispatch(addToastWithTimeout('error', err.message)); + }); + }; + + render() { + return
{this.props.render(this.state)}
; + } +} + +export default compose(connect(), toggleChannelNotificationsMutation)( + ToggleChannelNotifications +); diff --git a/src/components/upsell/joinChannel.js b/src/components/upsell/joinChannel.js index 75de7cdd03..ac65bd9d80 100644 --- a/src/components/upsell/joinChannel.js +++ b/src/components/upsell/joinChannel.js @@ -6,10 +6,7 @@ import toggleChannelSubscriptionMutation from 'shared/graphql/mutations/channel/ import type { ToggleChannelSubscriptionType } from 'shared/graphql/mutations/channel/toggleChannelSubscription'; import { addToastWithTimeout } from '../../actions/toasts'; import { track } from '../../helpers/events'; -import { NullState } from './index'; import { - Title, - Subtitle, JoinChannelContainer, JoinChannelContent, JoinChannelTitle, diff --git a/src/views/community/components/channelList.js b/src/views/community/components/channelList.js index 184df98ad8..43ddd10b2a 100644 --- a/src/views/community/components/channelList.js +++ b/src/views/community/components/channelList.js @@ -5,19 +5,20 @@ import { connect } from 'react-redux'; import compose from 'recompose/compose'; import { ChannelListItem } from '../../../components/listItems'; import { ChannelProfile } from '../../../components/profile'; -import { IconButton } from '../../../components/buttons'; +import { OutlineButton } from '../../../components/buttons'; import Icon from '../../../components/icons'; import { openModal } from '../../../actions/modals'; import viewNetworkHandler from '../../../components/viewNetworkHandler'; -import { LoadingCard } from '../../../components/loading'; +import { LoadingCard, Loading } from '../../../components/loading'; import getCommunityChannels from 'shared/graphql/queries/community/getCommunityChannelConnection'; import type { GetCommunityChannelConnectionType } from 'shared/graphql/queries/community/getCommunityChannelConnection'; +import { StyledCard, ListContainer } from '../../../components/listItems/style'; import { - StyledCard, - ListHeader, - ListHeading, - ListContainer, -} from '../../../components/listItems/style'; + ColumnHeading, + ChannelListItemRow, + ToggleNotificationsContainer, +} from '../style'; +import ToggleChannelNotifications from 'src/components/toggleChannelNotifications'; type Props = { data: { @@ -80,18 +81,7 @@ class ChannelList extends React.Component { return ( - - Channels - {isOwner && ( - - dispatch(openModal('CREATE_CHANNEL_MODAL', community)) - } - /> - )} - + Channels {/* user isn't logged in, channel list is used for navigation @@ -128,19 +118,48 @@ class ChannelList extends React.Component { {sortedJoinedChannels.map(channel => { if (!channel) return null; return ( - - + - - - + + + ( + + {state.isLoading ? ( + + ) : ( + + )} + + )} + /> + ); })} @@ -148,11 +167,8 @@ class ChannelList extends React.Component { {sortedNonJoinedChannels.length > 0 && isMember && ( - - - New channels - - + + New channels
    {sortedNonJoinedChannels.map(channel => { @@ -167,8 +183,23 @@ class ChannelList extends React.Component { })}
-
+ )} + + {isOwner && ( + + dispatch(openModal('CREATE_CHANNEL_MODAL', community)) + } + > + Create a channel + + )}
); } diff --git a/src/views/community/components/memberGrid.js b/src/views/community/components/memberGrid.js index 514e4508c2..f1fecc5977 100644 --- a/src/views/community/components/memberGrid.js +++ b/src/views/community/components/memberGrid.js @@ -4,13 +4,12 @@ import compose from 'recompose/compose'; import getCommunityMembersQuery, { type GetCommunityMembersType, } from 'shared/graphql/queries/community/getCommunityMembers'; -import { FlexCol } from '../../../components/globals'; -import { Card } from '../../../components/card'; -import { LoadingList } from '../../../components/loading'; -import { UserListItem } from '../../../components/listItems'; -import viewNetworkHandler from '../../../components/viewNetworkHandler'; -import ViewError from '../../../components/viewError'; -import { StyledButton } from '../style'; +import { FlexCol } from 'src/components/globals'; +import { Card } from 'src/components/card'; +import { LoadingList } from 'src/components/loading'; +import { UserListItem } from 'src/components/listItems'; +import viewNetworkHandler from 'src/components/viewNetworkHandler'; +import ViewError from 'src/components/viewError'; type Props = { data: { @@ -23,11 +22,7 @@ type Props = { class CommunityMemberGrid extends React.Component { render() { - const { - data: { community, fetchMore }, - isLoading, - isFetchingMore, - } = this.props; + const { data: { community }, isLoading } = this.props; if (community) { const { edges: members } = community.members; @@ -45,11 +40,6 @@ class CommunityMemberGrid extends React.Component { }); return ; })} - {community.members.pageInfo.hasNextPage && ( - fetchMore()}> - View more... - - )} ); } diff --git a/src/views/community/index.js b/src/views/community/index.js index 3c7c577ea3..36c831acc5 100644 --- a/src/views/community/index.js +++ b/src/views/community/index.js @@ -223,10 +223,6 @@ class CommunityView extends React.Component { )} - @@ -309,7 +305,17 @@ class CommunityView extends React.Component { selectedView === 'search' && } - Members + + + + Top Members ({community.metaData && + community.metaData.members && + community.metaData.members.toLocaleString()}{' '} + total) + diff --git a/src/views/community/style.js b/src/views/community/style.js index 272319a434..01a9b82f15 100644 --- a/src/views/community/style.js +++ b/src/views/community/style.js @@ -7,6 +7,7 @@ import { Transition, zIndex, Gradient, + Tooltip, } from '../../components/globals'; import { DesktopSegment, @@ -222,3 +223,17 @@ export const ColumnHeading = styled.div` margin-top: 16px; border-bottom: 2px solid ${props => props.theme.bg.border}; `; + +export const ChannelListItemRow = styled.div` + display: flex; +`; + +export const ToggleNotificationsContainer = styled.div` + display: flex; + color: ${props => props.theme.text.alt}; + justify-content: center; + align-items: center; + height: 100%; + cursor: pointer; + ${Tooltip}; +`; diff --git a/src/views/status/style.js b/src/views/status/style.js index 89ad0b659b..db7a105dfc 100644 --- a/src/views/status/style.js +++ b/src/views/status/style.js @@ -1,6 +1,5 @@ // @flow import styled from 'styled-components'; -import { hexa } from 'src/components/globals'; export const Bar = styled.div` display: grid; diff --git a/src/views/thread/index.js b/src/views/thread/index.js index 64aa1e0df8..16a0510760 100644 --- a/src/views/thread/index.js +++ b/src/views/thread/index.js @@ -17,7 +17,7 @@ import { getThreadByMatch, getThreadByMatchQuery, } from 'shared/graphql/queries/thread/getThread'; -import { NullState, UpsellSignIn } from '../../components/upsell'; +import { NullState } from '../../components/upsell'; import JoinChannel from '../../components/upsell/joinChannel'; import { toState } from 'shared/draft-utils'; import LoadingView from './components/loading'; diff --git a/yarn.lock b/yarn.lock index 06e95ebc0b..b9102565c3 100644 --- a/yarn.lock +++ b/yarn.lock @@ -118,6 +118,17 @@ lodash "^4.2.0" to-fast-properties "^2.0.0" +"@octokit/rest@^14.0.4": + version "14.0.9" + resolved "https://registry.yarnpkg.com/@octokit/rest/-/rest-14.0.9.tgz#d5e0a00dcb78901dd7b2ef852acfc0aea7c479ef" + dependencies: + before-after-hook "^1.1.0" + debug "^3.1.0" + is-array-buffer "^1.0.0" + is-stream "^1.1.0" + lodash "^4.17.4" + url-template "^2.0.8" + "@types/async@2.0.47": version "2.0.47" resolved "https://registry.yarnpkg.com/@types/async/-/async-2.0.47.tgz#f49ba1dd1f189486beb6e1d070a850f6ab4bd521" @@ -134,7 +145,7 @@ version "0.5.3" resolved "https://registry.yarnpkg.com/@types/zen-observable/-/zen-observable-0.5.3.tgz#91b728599544efbb7386d8b6633693a3c2e7ade5" -abab@^1.0.3, abab@^1.0.4: +abab@^1.0.0, abab@^1.0.3, abab@^1.0.4: version "1.0.4" resolved "https://registry.yarnpkg.com/abab/-/abab-1.0.4.tgz#5faad9c2c07f60dd76770f71cf025b62a63cfd4e" @@ -155,6 +166,12 @@ acorn-dynamic-import@^2.0.0: dependencies: acorn "^4.0.3" +acorn-globals@^1.0.4: + version "1.0.9" + resolved "https://registry.yarnpkg.com/acorn-globals/-/acorn-globals-1.0.9.tgz#55bb5e98691507b74579d0513413217c380c54cf" + dependencies: + acorn "^2.1.0" + acorn-globals@^3.1.0: version "3.1.0" resolved "https://registry.yarnpkg.com/acorn-globals/-/acorn-globals-3.1.0.tgz#fd8270f71fbb4996b004fa880ee5d46573a731bf" @@ -173,6 +190,10 @@ acorn-jsx@^3.0.0: dependencies: acorn "^3.0.4" +acorn@^2.1.0, acorn@^2.4.0: + version "2.7.0" + resolved "https://registry.yarnpkg.com/acorn/-/acorn-2.7.0.tgz#ab6e7d9d886aaca8b085bc3312b79a198433f0e7" + acorn@^3.0.4: version "3.3.0" resolved "https://registry.yarnpkg.com/acorn/-/acorn-3.3.0.tgz#45e37fb39e8da3f25baee3ff5369e2bb5f22017a" @@ -483,6 +504,26 @@ argparse@^1.0.7: dependencies: sprintf-js "~1.0.2" +args@2.6.1: + version "2.6.1" + resolved "https://registry.yarnpkg.com/args/-/args-2.6.1.tgz#b2590ed4168cd31b62444199bdc5166bb1920c2f" + dependencies: + camelcase "4.1.0" + chalk "1.1.3" + minimist "1.2.0" + pkginfo "0.4.0" + string-similarity "1.1.0" + +args@3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/args/-/args-3.0.2.tgz#850bb8e881f3139203a5e4cb176431092b562c2d" + dependencies: + camelcase "4.1.0" + chalk "1.1.3" + minimist "1.2.0" + pkginfo "0.4.0" + string-similarity "1.1.0" + aria-query@^0.7.0: version "0.7.1" resolved "https://registry.yarnpkg.com/aria-query/-/aria-query-0.7.1.tgz#26cbb5aff64144b0a825be1846e0b16cfa00b11e" @@ -642,6 +683,13 @@ async-limiter@~1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/async-limiter/-/async-limiter-1.0.0.tgz#78faed8c3d074ab81f22b4e985d79e8738f720f8" +async-to-gen@1.3.3: + version "1.3.3" + resolved "https://registry.yarnpkg.com/async-to-gen/-/async-to-gen-1.3.3.tgz#d52c9fb4801f0df44abc4d2de1870b48b60e20bb" + dependencies: + babylon "^6.14.0" + magic-string "^0.19.0" + async@^1.4.0, async@^1.5.2: version "1.5.2" resolved "https://registry.yarnpkg.com/async/-/async-1.5.2.tgz#ec6a61ae56480c0c3cb241c95618e20892f9672a" @@ -735,7 +783,7 @@ babel-cli@^6.24.1: optionalDependencies: chokidar "^1.6.1" -babel-code-frame@6.26.0, babel-code-frame@^6.11.0, babel-code-frame@^6.22.0, babel-code-frame@^6.26.0: +babel-code-frame@6.26.0, babel-code-frame@^6.11.0, babel-code-frame@^6.22.0, babel-code-frame@^6.26.0, babel-code-frame@^6.8.0: version "6.26.0" resolved "https://registry.yarnpkg.com/babel-code-frame/-/babel-code-frame-6.26.0.tgz#63fd43f7dc1e3bb7ce35947db8fe369a3f58c74b" dependencies: @@ -787,6 +835,17 @@ babel-eslint@^8.0.1: eslint-scope "~3.7.1" eslint-visitor-keys "^1.0.0" +babel-generator@6.11.4: + version "6.11.4" + resolved "https://registry.yarnpkg.com/babel-generator/-/babel-generator-6.11.4.tgz#14f6933abb20c62666d27e3b7b9f5b9dc0712a9a" + dependencies: + babel-messages "^6.8.0" + babel-runtime "^6.9.0" + babel-types "^6.10.2" + detect-indent "^3.0.1" + lodash "^4.2.0" + source-map "^0.5.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" @@ -947,7 +1006,7 @@ babel-loader@^7.1.0: loader-utils "^1.0.2" mkdirp "^0.5.1" -babel-messages@^6.23.0: +babel-messages@^6.23.0, babel-messages@^6.8.0: version "6.23.0" resolved "https://registry.yarnpkg.com/babel-messages/-/babel-messages-6.23.0.tgz#f3cdf4703858035b2a2951c6ec5edf6c62f2630e" dependencies: @@ -1310,7 +1369,7 @@ babel-plugin-transform-strict-mode@^6.24.1: babel-runtime "^6.22.0" babel-types "^6.24.1" -babel-polyfill@^6.26.0: +babel-polyfill@^6.23.0, babel-polyfill@^6.26.0: version "6.26.0" resolved "https://registry.yarnpkg.com/babel-polyfill/-/babel-polyfill-6.26.0.tgz#379937abc67d7895970adc621f284cd966cf2153" dependencies: @@ -1433,7 +1492,7 @@ babel-register@^6.26.0: mkdirp "^0.5.1" source-map-support "^0.4.15" -babel-runtime@6.26.0, babel-runtime@^6.11.6, babel-runtime@^6.18.0, babel-runtime@^6.22.0, babel-runtime@^6.26.0: +babel-runtime@6.26.0, babel-runtime@^6.11.6, babel-runtime@^6.18.0, babel-runtime@^6.22.0, babel-runtime@^6.26.0, babel-runtime@^6.9.0: version "6.26.0" resolved "https://registry.yarnpkg.com/babel-runtime/-/babel-runtime-6.26.0.tgz#965c7058668e82b55d7bfe04ff2337bc8b5647fe" dependencies: @@ -1450,6 +1509,20 @@ babel-template@^6.16.0, babel-template@^6.24.1, babel-template@^6.26.0: babylon "^6.18.0" lodash "^4.17.4" +babel-traverse@6.12.0: + version "6.12.0" + resolved "https://registry.yarnpkg.com/babel-traverse/-/babel-traverse-6.12.0.tgz#f22f54fa0d6eeb7f63585246bab6e637858f5d94" + dependencies: + babel-code-frame "^6.8.0" + babel-messages "^6.8.0" + babel-runtime "^6.9.0" + babel-types "^6.9.0" + babylon "^6.7.0" + debug "^2.2.0" + globals "^8.3.0" + invariant "^2.2.0" + lodash "^4.2.0" + 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" @@ -1464,7 +1537,7 @@ babel-traverse@^6.18.0, babel-traverse@^6.23.1, babel-traverse@^6.24.1, babel-tr 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: +babel-types@^6.10.2, 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, babel-types@^6.9.0: version "6.26.0" resolved "https://registry.yarnpkg.com/babel-types/-/babel-types-6.26.0.tgz#a3b073f94ab49eb6fa55cd65227a334380632497" dependencies: @@ -1473,11 +1546,15 @@ babel-types@^6.18.0, babel-types@^6.19.0, babel-types@^6.23.0, babel-types@^6.24 lodash "^4.17.4" to-fast-properties "^1.0.3" +babylon@6.14.1: + version "6.14.1" + resolved "https://registry.yarnpkg.com/babylon/-/babylon-6.14.1.tgz#956275fab72753ad9b3435d7afe58f8bf0a29815" + babylon@7.0.0-beta.40, babylon@^7.0.0-beta.40: version "7.0.0-beta.40" resolved "https://registry.yarnpkg.com/babylon/-/babylon-7.0.0-beta.40.tgz#91fc8cd56d5eb98b28e6fde41045f2957779940a" -babylon@^6.17.0, babylon@^6.18.0: +babylon@^6.14.0, babylon@^6.17.0, babylon@^6.18.0, babylon@^6.7.0: version "6.18.0" resolved "https://registry.yarnpkg.com/babylon/-/babylon-6.18.0.tgz#af2f3b88fa6f5c1e4c634d1a0f8eac4f55b395e3" @@ -1538,6 +1615,10 @@ base@^0.11.1: mixin-deep "^1.2.0" pascalcase "^0.1.1" +basic-auth@1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/basic-auth/-/basic-auth-1.1.0.tgz#45221ee429f7ee1e5035be3f51533f1cdfd29884" + batch@0.6.1: version "0.6.1" resolved "https://registry.yarnpkg.com/batch/-/batch-0.6.1.tgz#dc34314f4e679318093fc760272525f94bf25c16" @@ -1548,6 +1629,10 @@ bcrypt-pbkdf@^1.0.0: dependencies: tweetnacl "^0.14.3" +before-after-hook@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/before-after-hook/-/before-after-hook-1.1.0.tgz#83165e15a59460d13702cb8febd6a1807896db5a" + bfj-node4@^5.2.0: version "5.2.1" resolved "https://registry.yarnpkg.com/bfj-node4/-/bfj-node4-5.2.1.tgz#3a6aa2730cf6911ba2afb836c2f88f015d718f3f" @@ -1577,6 +1662,10 @@ block-stream@*: dependencies: inherits "~2.0.0" +bluebird@3.5.0: + version "3.5.0" + resolved "https://registry.yarnpkg.com/bluebird/-/bluebird-3.5.0.tgz#791420d7f551eea2897453a8a77653f96606d67c" + "bluebird@>= 2.3.2 < 3", bluebird@^2.10.2: version "2.11.0" resolved "https://registry.yarnpkg.com/bluebird/-/bluebird-2.11.0.tgz#534b9033c022c9579c56ba3b3e5a5caafbb650e1" @@ -1637,7 +1726,19 @@ boom@5.x.x: dependencies: hoek "4.x.x" -boxen@^1.2.1: +boxen@1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/boxen/-/boxen-1.1.0.tgz#b1b69dd522305e807a99deee777dbd6e5167b102" + dependencies: + ansi-align "^2.0.0" + camelcase "^4.0.0" + chalk "^1.1.1" + cli-boxes "^1.0.0" + string-width "^2.0.0" + term-size "^0.1.0" + widest-line "^1.0.0" + +boxen@^1.0.0, boxen@^1.2.1: version "1.3.0" resolved "https://registry.yarnpkg.com/boxen/-/boxen-1.3.0.tgz#55c6c39a8ba58d9c61ad22cd877532deb665a20b" dependencies: @@ -1834,6 +1935,10 @@ bytebuffer@~5: dependencies: long "~3" +bytes@2.4.0: + version "2.4.0" + resolved "https://registry.yarnpkg.com/bytes/-/bytes-2.4.0.tgz#7d97196f9d5baf7f6935e25985549edd2a6c2339" + bytes@3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/bytes/-/bytes-3.0.0.tgz#d32815404d689699f85a4ea4fa8755dd13a96048" @@ -1880,6 +1985,10 @@ camelcase-keys@^2.0.0: camelcase "^2.0.0" map-obj "^1.0.0" +camelcase@4.1.0, camelcase@^4.0.0, camelcase@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-4.1.0.tgz#d545635be1e33c542649c69173e5de6acfae34dd" + camelcase@^1.0.2: version "1.2.1" resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-1.2.1.tgz#9bb5304d2e0b56698b2c758b08a3eaa9daa58a39" @@ -1892,10 +2001,6 @@ 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" @@ -1983,7 +2088,19 @@ check-types@^7.3.0: version "7.3.0" resolved "https://registry.yarnpkg.com/check-types/-/check-types-7.3.0.tgz#468f571a4435c24248f5fd0cb0e8d87c3c341e7d" -cheerio@^0.22.0: +cheerio@0.20.0: + version "0.20.0" + resolved "https://registry.yarnpkg.com/cheerio/-/cheerio-0.20.0.tgz#5c710f2bab95653272842ba01c6ea61b3545ec35" + dependencies: + css-select "~1.2.0" + dom-serializer "~0.1.0" + entities "~1.1.1" + htmlparser2 "~3.8.1" + lodash "^4.1.0" + optionalDependencies: + jsdom "^7.0.2" + +cheerio@0.22.0, cheerio@^0.22.0: version "0.22.0" resolved "https://registry.yarnpkg.com/cheerio/-/cheerio-0.22.0.tgz#a9baa860a3f9b595a6b81b1a86873121ed3a269e" dependencies: @@ -2127,6 +2244,18 @@ clipboard@^1.6.1, clipboard@^1.7.1: select "^1.1.2" tiny-emitter "^2.0.0" +clipboardy@1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/clipboardy/-/clipboardy-1.1.1.tgz#75b5a7ac50d83c98025fb6303298c6a9007c16c7" + dependencies: + execa "^0.6.0" + +clipboardy@1.1.4: + version "1.1.4" + resolved "https://registry.yarnpkg.com/clipboardy/-/clipboardy-1.1.4.tgz#51b17574fc682588e2dd295cfa6e6aa109eab5ee" + dependencies: + execa "^0.6.0" + cliui@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/cliui/-/cliui-2.1.0.tgz#4b475760ff80264c762c3a1719032e91c7fea0d1" @@ -2186,6 +2315,10 @@ color-convert@^1.3.0, color-convert@^1.9.0: dependencies: color-name "^1.1.1" +color-logger@0.0.3: + version "0.0.3" + resolved "https://registry.yarnpkg.com/color-logger/-/color-logger-0.0.3.tgz#d9b22dd1d973e166b18bf313f9f481bba4df2018" + color-name@^1.0.0, color-name@^1.1.1: version "1.1.3" resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.3.tgz#a7d0558bd89c42f795dd42328f740831ca53bc25" @@ -2250,7 +2383,7 @@ compressible@~2.0.13: dependencies: mime-db ">= 1.33.0 < 2" -compression@^1.5.2: +compression@^1.5.2, compression@^1.6.2: version "1.7.2" resolved "https://registry.yarnpkg.com/compression/-/compression-1.7.2.tgz#aaffbcd6aaf854b44ebb280353d5ad1651f59a69" dependencies: @@ -2469,6 +2602,13 @@ cross-env@^5.0.5: cross-spawn "^5.1.0" is-windows "^1.0.0" +cross-spawn-async@^2.1.1: + version "2.2.5" + resolved "https://registry.yarnpkg.com/cross-spawn-async/-/cross-spawn-async-2.2.5.tgz#845ff0c0834a3ded9d160daca6d390906bb288cc" + dependencies: + lru-cache "^4.0.0" + which "^1.2.8" + 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" @@ -2621,11 +2761,11 @@ csso@~2.3.1: clap "^1.0.9" source-map "^0.5.3" -cssom@0.3.x, "cssom@>= 0.3.2 < 0.4.0": +cssom@0.3.x, "cssom@>= 0.3.0 < 0.4.0", "cssom@>= 0.3.2 < 0.4.0": version "0.3.2" resolved "https://registry.yarnpkg.com/cssom/-/cssom-0.3.2.tgz#b8036170c79f07a90ff2f16e22284027a243848b" -"cssstyle@>= 0.2.37 < 0.3.0": +"cssstyle@>= 0.2.29 < 0.3.0", "cssstyle@>= 0.2.37 < 0.3.0": version "0.2.37" resolved "https://registry.yarnpkg.com/cssstyle/-/cssstyle-0.2.37.tgz#541097234cb2513c83ceed3acddc27ff27987d54" dependencies: @@ -2653,6 +2793,68 @@ damerau-levenshtein@^1.0.0: version "1.0.4" resolved "https://registry.yarnpkg.com/damerau-levenshtein/-/damerau-levenshtein-1.0.4.tgz#03191c432cb6eea168bb77f3a55ffdccb8978514" +danger-plugin-jest@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/danger-plugin-jest/-/danger-plugin-jest-1.1.0.tgz#9b53e14a0483e6de5a65f8d58fbb6a8121a948d4" + dependencies: + strip-ansi "^4.0.0" + optionalDependencies: + serve "^5.1.5" + +danger-plugin-no-test-shortcuts@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/danger-plugin-no-test-shortcuts/-/danger-plugin-no-test-shortcuts-2.0.0.tgz#02dbb72455819454d36cd5952e2ff0f47df810da" + dependencies: + lodash "^4.17.4" + +danger-plugin-yarn@^1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/danger-plugin-yarn/-/danger-plugin-yarn-1.2.1.tgz#e161d898ab3ddd5a80695c38471205476af9da81" + dependencies: + date-fns "^1.28.5" + lodash.flatten "^4.4.0" + lodash.includes "^4.3.0" + node-fetch "^1.7.1" + semver "^5.4.1" + optionalDependencies: + esdoc "^0.5.2" + +danger@^3.1.8: + version "3.1.8" + resolved "https://registry.yarnpkg.com/danger/-/danger-3.1.8.tgz#dd7cdb2e155bb02d9413bcce936b9aae64977029" + dependencies: + "@octokit/rest" "^14.0.4" + babel-polyfill "^6.23.0" + chalk "^2.3.0" + commander "^2.13.0" + debug "^3.1.0" + get-stdin "^5.0.1" + hyperlinker "^1.0.0" + jsome "^2.3.25" + json5 "^0.5.1" + jsonpointer "^4.0.1" + lodash.find "^4.6.0" + lodash.includes "^4.3.0" + lodash.isobject "^3.0.2" + lodash.keys "^4.0.8" + node-cleanup "^2.1.2" + node-fetch "^1.7.3" + parse-diff "^0.4.0" + parse-git-config "^1.1.1" + parse-github-url "^1.0.2" + parse-link-header "^1.0.1" + pinpoint "^1.1.0" + readline-sync "^1.4.7" + require-from-string "^2.0.1" + rfc6902 "^2.2.2" + supports-hyperlinks "^1.0.1" + vm2 patriksimek/vm2#custom_files + voca "^1.4.0" + +dargs@5.1.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/dargs/-/dargs-5.1.0.tgz#ec7ea50c78564cd36c9d5ec18f66329fade27829" + dashdash@^1.12.0: version "1.14.1" resolved "https://registry.yarnpkg.com/dashdash/-/dashdash-1.14.1.tgz#853cfa0f7cbe2fed5de20326b8dd581035f6e2f0" @@ -2663,7 +2865,7 @@ dataloader@^1.3.0: version "1.4.0" resolved "https://registry.yarnpkg.com/dataloader/-/dataloader-1.4.0.tgz#bca11d867f5d3f1b9ed9f737bd15970c65dff5c8" -date-fns@^1.27.2: +date-fns@^1.27.2, date-fns@^1.28.5: version "1.29.0" resolved "https://registry.yarnpkg.com/date-fns/-/date-fns-1.29.0.tgz#12e609cdcb935127311d04d33334e2960a2a54e6" @@ -2679,6 +2881,12 @@ debug@0.7.0: version "0.7.0" resolved "https://registry.yarnpkg.com/debug/-/debug-0.7.0.tgz#f5be05ec0434c992d79940e50b2695cfb2e01b08" +debug@2.6.7: + version "2.6.7" + resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.7.tgz#92bad1f6d05bbb6bba22cca88bcd0ec894c2861e" + dependencies: + ms "2.0.0" + debug@2.6.9, debug@^2.2.0, debug@^2.3.2, debug@^2.3.3, debug@^2.5.2, 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" @@ -2810,7 +3018,7 @@ 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.0, depd@~1.1.1: version "1.1.2" resolved "https://registry.yarnpkg.com/depd/-/depd-1.1.2.tgz#9bcd52e14c097763e749b274c4346ed2e560b5a9" @@ -2829,6 +3037,14 @@ destroy@~1.0.4: version "1.0.4" resolved "https://registry.yarnpkg.com/destroy/-/destroy-1.0.4.tgz#978857442c44749e4206613e37946205826abd80" +detect-indent@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/detect-indent/-/detect-indent-3.0.1.tgz#9dc5e5ddbceef8325764b9451b02bc6d54084f75" + dependencies: + get-stdin "^4.0.1" + minimist "^1.1.0" + repeating "^1.1.0" + detect-indent@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/detect-indent/-/detect-indent-4.0.0.tgz#f76d064352cdf43a1cb6ce619c4ee3a9475de208" @@ -2854,6 +3070,13 @@ detect-port-alt@1.1.5: address "^1.0.1" debug "^2.6.0" +detect-port@1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/detect-port/-/detect-port-1.2.1.tgz#a2c0a048aa9df2b703fc54bb4436ce2118f09b5a" + 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" @@ -2951,6 +3174,12 @@ domhandler@2.1: dependencies: domelementtype "1" +domhandler@2.3: + version "2.3.0" + resolved "https://registry.yarnpkg.com/domhandler/-/domhandler-2.3.0.tgz#2de59a0822d5027fabff6f032c2b25a2a8abe738" + dependencies: + domelementtype "1" + domhandler@^2.3.0: version "2.4.1" resolved "https://registry.yarnpkg.com/domhandler/-/domhandler-2.4.1.tgz#892e47000a99be55bbf3774ffea0561d8879c259" @@ -2963,7 +3192,7 @@ domutils@1.1: dependencies: domelementtype "1" -domutils@1.5.1: +domutils@1.5, domutils@1.5.1: version "1.5.1" resolved "https://registry.yarnpkg.com/domutils/-/domutils-1.5.1.tgz#dcd8488a26f563d61079e48c9f7b7e32373682cf" dependencies: @@ -3218,6 +3447,10 @@ enhanced-resolve@^3.4.0: object-assign "^4.0.1" tapable "^0.2.7" +entities@1.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/entities/-/entities-1.0.0.tgz#b2987aa3821347fcde642b24fdfc9e4fb712bf26" + entities@^1.1.1, entities@~1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/entities/-/entities-1.1.1.tgz#6e5c2d0a5621b5dadaecef80b90edfb5cd7772f0" @@ -3327,7 +3560,7 @@ es6-weak-map@^2.0.1: es6-iterator "^2.0.1" es6-symbol "^3.1.1" -escape-html@~1.0.3: +escape-html@1.0.3, escape-html@~1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/escape-html/-/escape-html-1.0.3.tgz#0258eae4d3d0c0974de1c169188ef0051d1d1988" @@ -3355,6 +3588,22 @@ escope@^3.6.0: esrecurse "^4.1.0" estraverse "^4.1.1" +esdoc@^0.5.2: + version "0.5.2" + resolved "https://registry.yarnpkg.com/esdoc/-/esdoc-0.5.2.tgz#cbfd0b20e3d1cacc23c93c328eed987e21ba0067" + dependencies: + babel-generator "6.11.4" + babel-traverse "6.12.0" + babylon "6.14.1" + cheerio "0.22.0" + color-logger "0.0.3" + escape-html "1.0.3" + fs-extra "1.0.0" + ice-cap "0.0.4" + marked "0.3.6" + minimist "1.2.0" + taffydb "2.7.2" + 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" @@ -3586,7 +3835,7 @@ esutils@^2.0.2: version "2.0.2" resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.2.tgz#0abf4f1caa5bcb1f7a9d8acc6dea4faaa04bac9b" -etag@~1.8.1: +etag@~1.8.0, etag@~1.8.1: version "1.8.1" resolved "https://registry.yarnpkg.com/etag/-/etag-1.8.1.tgz#41ae2eeb65efa62268aebfea83ac7d79299b0887" @@ -3640,6 +3889,29 @@ exec-sh@^0.2.0: dependencies: merge "^1.1.3" +execa@^0.4.0: + version "0.4.0" + resolved "https://registry.yarnpkg.com/execa/-/execa-0.4.0.tgz#4eb6467a36a095fabb2970ff9d5e3fb7bce6ebc3" + dependencies: + cross-spawn-async "^2.1.1" + is-stream "^1.1.0" + npm-run-path "^1.0.0" + object-assign "^4.0.1" + path-key "^1.0.0" + strip-eof "^1.0.0" + +execa@^0.6.0: + version "0.6.3" + resolved "https://registry.yarnpkg.com/execa/-/execa-0.6.3.tgz#57b69a594f081759c69e5370f0d17b9cb11658fe" + 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" + execa@^0.7.0: version "0.7.0" resolved "https://registry.yarnpkg.com/execa/-/execa-0.7.0.tgz#944becd34cc41ee32a63a9faf27ad5a65fc59777" @@ -3959,6 +4231,10 @@ fileset@^2.0.2: glob "^7.0.3" minimatch "^3.0.3" +filesize@3.5.10: + version "3.5.10" + resolved "https://registry.yarnpkg.com/filesize/-/filesize-3.5.10.tgz#fc8fa23ddb4ef9e5e0ab6e1e64f679a24a56761f" + filesize@3.5.11: version "3.5.11" resolved "https://registry.yarnpkg.com/filesize/-/filesize-3.5.11.tgz#1919326749433bb3cf77368bd158caabcc19e9ee" @@ -4130,6 +4406,10 @@ fragment-cache@^0.2.1: dependencies: map-cache "^0.2.2" +fresh@0.5.0: + version "0.5.0" + resolved "https://registry.yarnpkg.com/fresh/-/fresh-0.5.0.tgz#f474ca5e6a9246d6fd8e0953cfa9b9c805afa78e" + fresh@0.5.2: version "0.5.2" resolved "https://registry.yarnpkg.com/fresh/-/fresh-0.5.2.tgz#3d8cadd90d976569fa835ab1f8e4b23a105605a7" @@ -4146,6 +4426,18 @@ from@~0: version "0.1.7" resolved "https://registry.yarnpkg.com/from/-/from-0.1.7.tgz#83c60afc58b9c56997007ed1a768b3ab303a44fe" +fs-exists-sync@^0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/fs-exists-sync/-/fs-exists-sync-0.1.0.tgz#982d6893af918e72d08dec9e8673ff2b5a8d6add" + +fs-extra@1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-1.0.0.tgz#cd3ce5f7e7cb6145883fcae3191e9877f8587950" + dependencies: + graceful-fs "^4.1.2" + jsonfile "^2.1.0" + klaw "^1.0.0" + fs-extra@3.0.1: version "3.0.1" resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-3.0.1.tgz#3794f378c58b342ea7dbbb23095109c4b3b62291" @@ -4242,10 +4534,18 @@ get-document@1: version "1.0.0" resolved "https://registry.yarnpkg.com/get-document/-/get-document-1.0.0.tgz#4821bce66f1c24cb0331602be6cb6b12c4f01c4b" +get-port@3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/get-port/-/get-port-3.1.0.tgz#ef01b18a84ca6486970ff99e54446141a73ffd3e" + get-stdin@^4.0.1: version "4.0.1" resolved "https://registry.yarnpkg.com/get-stdin/-/get-stdin-4.0.1.tgz#b968c6b0a04384324902e8bf1a5df32579a450fe" +get-stdin@^5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/get-stdin/-/get-stdin-5.0.1.tgz#122e161591e21ff4c52530305693f20e6393a398" + get-stream@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-3.0.0.tgz#8e943d1358dc37555054ecbe2edb05aa174ede14" @@ -4266,6 +4566,14 @@ getpass@^0.1.1: dependencies: assert-plus "^1.0.0" +git-config-path@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/git-config-path/-/git-config-path-1.0.1.tgz#6d33f7ed63db0d0e118131503bab3aca47d54664" + dependencies: + extend-shallow "^2.0.1" + fs-exists-sync "^0.1.0" + homedir-polyfill "^1.0.0" + github@0.2.4: version "0.2.4" resolved "https://registry.yarnpkg.com/github/-/github-0.2.4.tgz#24fa7f0e13fa11b946af91134c51982a91ce538b" @@ -4338,6 +4646,10 @@ globals@^11.0.1, globals@^11.1.0: version "11.3.0" resolved "https://registry.yarnpkg.com/globals/-/globals-11.3.0.tgz#e04fdb7b9796d8adac9c8f64c14837b2313378b0" +globals@^8.3.0: + version "8.18.0" + resolved "https://registry.yarnpkg.com/globals/-/globals-8.18.0.tgz#93d4a62bdcac38cfafafc47d6b034768cb0ffcb4" + globals@^9.17.0, globals@^9.18.0: version "9.18.0" resolved "https://registry.yarnpkg.com/globals/-/globals-9.18.0.tgz#aa3896b3e69b487f17e31ed2143d69a8e30c2d8a" @@ -4525,6 +4837,16 @@ 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.10: + version "4.0.10" + resolved "https://registry.yarnpkg.com/handlebars/-/handlebars-4.0.10.tgz#3d30c718b09a3d96f23ea4cc1f403c4d3ba9ff4f" + dependencies: + async "^1.4.0" + optimist "^0.6.1" + source-map "^0.4.4" + optionalDependencies: + uglify-js "^2.6" + handlebars@^4.0.3: version "4.0.11" resolved "https://registry.yarnpkg.com/handlebars/-/handlebars-4.0.11.tgz#630a35dfe0294bc281edae6ffc5d329fc7982dcc" @@ -4713,7 +5035,7 @@ home-or-tmp@^2.0.0: os-homedir "^1.0.0" os-tmpdir "^1.0.1" -homedir-polyfill@^1.0.1: +homedir-polyfill@^1.0.0, homedir-polyfill@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/homedir-polyfill/-/homedir-polyfill-1.0.1.tgz#4c2bbc8a758998feebf5ed68580f76d46768b4bc" dependencies: @@ -4794,11 +5116,21 @@ htmlparser2@~3.3.0: domutils "1.1" readable-stream "1.0" +htmlparser2@~3.8.1: + version "3.8.3" + resolved "https://registry.yarnpkg.com/htmlparser2/-/htmlparser2-3.8.3.tgz#996c28b191516a8be86501a7d79757e5c70c1068" + dependencies: + domelementtype "1" + domhandler "2.3" + domutils "1.5" + entities "1.0" + readable-stream "1.1" + 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, http-errors@~1.6.2: +http-errors@1.6.2, http-errors@~1.6.1, http-errors@~1.6.2: version "1.6.2" resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-1.6.2.tgz#0a002cc85707192a7e7946ceedc11155f60ec736" dependencies: @@ -4860,6 +5192,21 @@ https-proxy-agent@^2.1.0: agent-base "^4.1.0" debug "^3.1.0" +hyperlinker@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/hyperlinker/-/hyperlinker-1.0.0.tgz#23dc9e38a206b208ee49bc2d6c8ef47027df0c0e" + +ice-cap@0.0.4: + version "0.0.4" + resolved "https://registry.yarnpkg.com/ice-cap/-/ice-cap-0.0.4.tgz#8a6d31ab4cac8d4b56de4fa946df3352561b6e18" + dependencies: + cheerio "0.20.0" + color-logger "0.0.3" + +iconv-lite@0.4.15: + version "0.4.15" + resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.15.tgz#fe265a218ac6a57cfe854927e9d04c19825eddeb" + iconv-lite@0.4.19, iconv-lite@^0.4.17, iconv-lite@~0.4.13: version "0.4.19" resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.19.tgz#f7468f60135f5e5dad3399c0a81be9a1603a082b" @@ -5051,7 +5398,7 @@ ioredis@^3.1.4: redis-commands "^1.2.0" redis-parser "^2.4.0" -ip@^1.1.0, ip@^1.1.5: +ip@1.1.5, ip@^1.1.0, ip@^1.1.5: version "1.1.5" resolved "https://registry.yarnpkg.com/ip/-/ip-1.1.5.tgz#bdded70114290828c0a039e72ef25f5aaec4354a" @@ -5075,10 +5422,18 @@ is-accessor-descriptor@^1.0.0: dependencies: kind-of "^6.0.0" +is-array-buffer@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-array-buffer/-/is-array-buffer-1.0.0.tgz#f32497a0509d109423f472003f98bab6a8ea34cb" + is-arrayish@^0.2.1: version "0.2.1" resolved "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.2.1.tgz#77c99840527aa8ecb1a8ba697b80645a7a926a9d" +is-async-supported@1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/is-async-supported/-/is-async-supported-1.2.0.tgz#20d58ac4d6707eb1cb3712dd38480c0536f27c07" + 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" @@ -5405,7 +5760,7 @@ isomorphic-fetch@^2.1.1, isomorphic-fetch@^2.2.1: node-fetch "^1.0.1" whatwg-fetch ">=0.10.0" -isstream@~0.1.2: +isstream@0.1.2, isstream@~0.1.2: version "0.1.2" resolved "https://registry.yarnpkg.com/isstream/-/isstream-0.1.2.tgz#47e63f7af55afa6f92e1500e690eb8b8529c099a" @@ -6247,6 +6602,26 @@ jsdom@^11.5.1: ws "^4.0.0" xml-name-validator "^3.0.0" +jsdom@^7.0.2: + version "7.2.2" + resolved "https://registry.yarnpkg.com/jsdom/-/jsdom-7.2.2.tgz#40b402770c2bda23469096bee91ab675e3b1fc6e" + dependencies: + abab "^1.0.0" + acorn "^2.4.0" + acorn-globals "^1.0.4" + cssom ">= 0.3.0 < 0.4.0" + cssstyle ">= 0.2.29 < 0.3.0" + escodegen "^1.6.1" + nwmatcher ">= 1.3.7 < 2.0.0" + parse5 "^1.5.1" + request "^2.55.0" + sax "^1.1.4" + symbol-tree ">= 3.1.0 < 4.0.0" + tough-cookie "^2.2.0" + webidl-conversions "^2.0.0" + whatwg-url-compat "~0.6.5" + xml-name-validator ">= 2.0.1 < 3.0.0" + jsdom@^9.12.0: version "9.12.0" resolved "https://registry.yarnpkg.com/jsdom/-/jsdom-9.12.0.tgz#e8c546fffcb06c00d4833ca84410fed7f8a097d4" @@ -6283,6 +6658,14 @@ jsesc@~0.5.0: version "0.5.0" resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-0.5.0.tgz#e7dee66e35d6fc16f710fe91d5cf69f70f08911d" +jsome@^2.3.25: + version "2.5.0" + resolved "https://registry.yarnpkg.com/jsome/-/jsome-2.5.0.tgz#5e417eef4341ffeb83ee8bfa9265b36d56fe49ed" + dependencies: + chalk "^2.3.0" + json-stringify-safe "^5.0.1" + yargs "^11.0.0" + json-loader@^0.5.4: version "0.5.7" resolved "https://registry.yarnpkg.com/json-loader/-/json-loader-0.5.7.tgz#dca14a70235ff82f0ac9a3abeb60d337a365185d" @@ -6313,7 +6696,7 @@ json-stringify-pretty-compact@^1.0.4: version "1.1.0" resolved "https://registry.yarnpkg.com/json-stringify-pretty-compact/-/json-stringify-pretty-compact-1.1.0.tgz#4fa5b898f61a287d64828691baa822a41f3ad5ab" -json-stringify-safe@~5.0.1: +json-stringify-safe@^5.0.1, 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" @@ -6347,6 +6730,10 @@ jsonify@~0.0.0: version "0.0.0" resolved "https://registry.yarnpkg.com/jsonify/-/jsonify-0.0.0.tgz#2c74b6ee41d93ca51b7b5aaee8f503631d252a73" +jsonpointer@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/jsonpointer/-/jsonpointer-4.0.1.tgz#4fd92cb34e0e9db3c89c8622ecf51f9b978c6cb9" + jsonwebtoken@^8.0.1: version "8.2.0" resolved "https://registry.yarnpkg.com/jsonwebtoken/-/jsonwebtoken-8.2.0.tgz#690ec3a9e7e95e2884347ce3e9eb9d389aa598b3" @@ -6452,6 +6839,10 @@ lazy-cache@^2.0.2: dependencies: set-getter "^0.1.0" +lazy-req@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/lazy-req/-/lazy-req-2.0.0.tgz#c9450a363ecdda2e6f0c70132ad4f37f8f06f2b4" + lcid@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/lcid/-/lcid-1.0.0.tgz#308accafa0bc483a3867b4b6f2b9506251d1b835" @@ -6650,6 +7041,10 @@ lodash.filter@^4.4.0: version "4.6.0" resolved "https://registry.yarnpkg.com/lodash.filter/-/lodash.filter-4.6.0.tgz#668b1d4981603ae1cc5a6fa760143e480b4c4ace" +lodash.find@^4.6.0: + version "4.6.0" + resolved "https://registry.yarnpkg.com/lodash.find/-/lodash.find-4.6.0.tgz#cb0704d47ab71789ffa0de8b97dd926fb88b13b1" + lodash.flatten@^4.2.0, lodash.flatten@^4.4.0: version "4.4.0" resolved "https://registry.yarnpkg.com/lodash.flatten/-/lodash.flatten-4.4.0.tgz#f31c22225a9632d2bbf8e4addbef240aa765a61f" @@ -6698,7 +7093,7 @@ lodash.isstring@^4.0.1: version "4.0.1" resolved "https://registry.yarnpkg.com/lodash.isstring/-/lodash.isstring-4.0.1.tgz#d527dfb5456eca7cc9bb95d5daeaf88ba54a5451" -lodash.keys@^4.2.0: +lodash.keys@^4.0.8, lodash.keys@^4.2.0: version "4.2.0" resolved "https://registry.yarnpkg.com/lodash.keys/-/lodash.keys-4.2.0.tgz#a08602ac12e4fb83f91fc1fb7a360a4d9ba35205" @@ -6775,7 +7170,7 @@ lodash.values@^4.3.0: version "4.3.0" resolved "https://registry.yarnpkg.com/lodash.values/-/lodash.values-4.3.0.tgz#a3a6c2b0ebecc5c2cba1c17e6e620fe81b53d347" -"lodash@>=3.5 <5", lodash@^4.13.1, lodash@^4.14.0, lodash@^4.15.0, lodash@^4.17.2, lodash@^4.17.3, lodash@^4.17.4, lodash@^4.17.5, lodash@^4.2.0, lodash@^4.2.1, lodash@^4.3.0, lodash@^4.5.1: +"lodash@>=3.5 <5", lodash@^4.1.0, lodash@^4.13.1, lodash@^4.14.0, lodash@^4.15.0, lodash@^4.17.2, lodash@^4.17.3, lodash@^4.17.4, lodash@^4.17.5, lodash@^4.2.0, lodash@^4.2.1, lodash@^4.3.0, lodash@^4.5.1: version "4.17.5" resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.5.tgz#99a92d65c0272debe8c96b6057bc8fbfa3bed511" @@ -6825,6 +7220,13 @@ lowercase-keys@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/lowercase-keys/-/lowercase-keys-1.0.0.tgz#4e3366b39e7f5457e35f1324bdf6f88d0bfc7306" +lru-cache@^4.0.0: + version "4.1.2" + resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-4.1.2.tgz#45234b2e6e2f2b33da125624c4664929a0224c3f" + dependencies: + pseudomap "^1.0.2" + yallist "^2.1.2" + lru-cache@^4.0.1: version "4.1.1" resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-4.1.1.tgz#622e32e82488b49279114a4f9ecf45e7cd6bba55" @@ -6836,6 +7238,12 @@ macaddress@^0.2.8: version "0.2.8" resolved "https://registry.yarnpkg.com/macaddress/-/macaddress-0.2.8.tgz#5904dc537c39ec6dbefeae902327135fa8511f12" +magic-string@^0.19.0: + version "0.19.1" + resolved "https://registry.yarnpkg.com/magic-string/-/magic-string-0.19.1.tgz#14d768013caf2ec8fdea16a49af82fc377e75201" + dependencies: + vlq "^0.2.1" + make-dir@^1.0.0: version "1.2.0" resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-1.2.0.tgz#6d6a49eead4aae296c53bbf3a1a008bd6c89469b" @@ -6866,6 +7274,10 @@ map-visit@^1.0.0: dependencies: object-visit "^1.0.0" +marked@0.3.6: + version "0.3.6" + resolved "https://registry.yarnpkg.com/marked/-/marked-0.3.6.tgz#b2c6c618fccece4ef86c4fc6cb8a7cbf5aeda8d7" + "match-stream@>= 0.0.2 < 1": version "0.0.2" resolved "https://registry.yarnpkg.com/match-stream/-/match-stream-0.0.2.tgz#99eb050093b34dffade421b9ac0b410a9cfa17cf" @@ -6946,6 +7358,31 @@ methods@~1.1.2: version "1.1.2" resolved "https://registry.yarnpkg.com/methods/-/methods-1.1.2.tgz#5529a4d67654134edcc5266656835b0f851afcee" +micro-compress@1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/micro-compress/-/micro-compress-1.0.0.tgz#53f5a80b4ad0320ca165a559b6e3df145d4f704f" + dependencies: + compression "^1.6.2" + +micro@7.3.3: + version "7.3.3" + resolved "https://registry.yarnpkg.com/micro/-/micro-7.3.3.tgz#8261c56d2a31a7df93986eff86441396f2b4b070" + dependencies: + args "2.6.1" + async-to-gen "1.3.3" + bluebird "3.5.0" + boxen "1.1.0" + chalk "1.1.3" + clipboardy "1.1.1" + get-port "3.1.0" + ip "1.1.5" + is-async-supported "1.2.0" + isstream "0.1.2" + media-typer "0.3.0" + node-version "1.0.0" + raw-body "2.2.0" + update-notifier "2.1.0" + micromatch@^2.1.5, micromatch@^2.3.11: version "2.3.11" resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-2.3.11.tgz#86677c97d1720b363431d04d0d15293bd38c1565" @@ -6993,12 +7430,26 @@ miller-rabin@^4.0.0: version "1.33.0" resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.33.0.tgz#a3492050a5cb9b63450541e39d9788d2272783db" +mime-db@~1.27.0: + version "1.27.0" + resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.27.0.tgz#820f572296bbd20ec25ed55e5b5de869e5436eb1" + +mime-types@2.1.15: + version "2.1.15" + resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.15.tgz#a4ebf5064094569237b8cf70046776d09fc92aed" + dependencies: + mime-db "~1.27.0" + mime-types@^2.1.12, mime-types@~2.1.17, mime-types@~2.1.18, mime-types@~2.1.7: version "2.1.18" resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.18.tgz#6f323f60a83d11146f831ff11fd66e2fe5503bb8" dependencies: mime-db "~1.33.0" +mime@1.3.4: + version "1.3.4" + resolved "https://registry.yarnpkg.com/mime/-/mime-1.3.4.tgz#115f9e3b6b3daf2959983cb38f149a2d40eb5d53" + mime@1.4.1: version "1.4.1" resolved "https://registry.yarnpkg.com/mime/-/mime-1.4.1.tgz#121f9ebc49e3766f311a76e1fa1c8003c4b03aa6" @@ -7049,7 +7500,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: +minimist@1.2.0, minimist@^1.1.0, 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" @@ -7162,11 +7613,15 @@ no-case@^2.2.0: dependencies: lower-case "^1.1.1" +node-cleanup@^2.1.2: + version "2.1.2" + resolved "https://registry.yarnpkg.com/node-cleanup/-/node-cleanup-2.1.2.tgz#7ac19abd297e09a7f72a71545d951b517e4dde2c" + node-env-file@^0.1.8: version "0.1.8" resolved "https://registry.yarnpkg.com/node-env-file/-/node-env-file-0.1.8.tgz#fccb7b050f735b5a33da9eb937cf6f1ab457fb69" -node-fetch@^1.0.1, node-fetch@^1.6.1: +node-fetch@^1.0.1, node-fetch@^1.6.1, node-fetch@^1.7.1, node-fetch@^1.7.3: version "1.7.3" resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-1.7.3.tgz#980f6f72d85211a5347c6b2bc18c5b84c3eb47ef" dependencies: @@ -7234,6 +7689,10 @@ node-pre-gyp@^0.6.39: tar "^2.2.1" tar-pack "^3.4.0" +node-version@1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/node-version/-/node-version-1.0.0.tgz#1b9b9584a9a7f7a6123f215cd14a652bf21ab19e" + nodemon@^1.11.0: version "1.17.1" resolved "https://registry.yarnpkg.com/nodemon/-/nodemon-1.17.1.tgz#cdb4bc53d7a86d6162143a1a44d7adf927d8652f" @@ -7300,6 +7759,12 @@ npm-path@^2.0.2: dependencies: which "^1.2.10" +npm-run-path@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/npm-run-path/-/npm-run-path-1.0.0.tgz#f5c32bf595fe81ae927daec52e82f8b000ac3c8f" + dependencies: + path-key "^1.0.0" + 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" @@ -7337,7 +7802,7 @@ 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", nwmatcher@^1.4.3: +"nwmatcher@>= 1.3.7 < 2.0.0", "nwmatcher@>= 1.3.9 < 2.0.0", nwmatcher@^1.4.3: version "1.4.3" resolved "https://registry.yarnpkg.com/nwmatcher/-/nwmatcher-1.4.3.tgz#64348e3b3d80f035b40ac11563d278f8b72db89c" @@ -7443,6 +7908,12 @@ opener@^1.4.3: version "1.4.3" resolved "https://registry.yarnpkg.com/opener/-/opener-1.4.3.tgz#5c6da2c5d7e5831e8ffa3964950f8d6674ac90b8" +opn@5.1.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/opn/-/opn-5.1.0.tgz#72ce2306a17dbea58ff1041853352b4a8fc77519" + dependencies: + is-wsl "^1.1.0" + opn@5.2.0, opn@^5.1.0: version "5.2.0" resolved "https://registry.yarnpkg.com/opn/-/opn-5.2.0.tgz#71fdf934d6827d676cecbea1531f95d354641225" @@ -7607,6 +8078,23 @@ parse-asn1@^5.0.0: evp_bytestokey "^1.0.0" pbkdf2 "^3.0.3" +parse-diff@^0.4.0: + version "0.4.2" + resolved "https://registry.yarnpkg.com/parse-diff/-/parse-diff-0.4.2.tgz#b173390e916564e8c70ccd37756047941e5b3ef2" + +parse-git-config@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/parse-git-config/-/parse-git-config-1.1.1.tgz#d3a9984317132f57398712bba438e129590ddf8c" + dependencies: + extend-shallow "^2.0.1" + fs-exists-sync "^0.1.0" + git-config-path "^1.0.1" + ini "^1.3.4" + +parse-github-url@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/parse-github-url/-/parse-github-url-1.0.2.tgz#242d3b65cbcdda14bb50439e3242acf6971db395" + parse-glob@^3.0.4: version "3.0.4" resolved "https://registry.yarnpkg.com/parse-glob/-/parse-glob-3.0.4.tgz#b2c376cfb11f35513badd173ef0bb6e3a388391c" @@ -7622,6 +8110,12 @@ parse-json@^2.2.0: dependencies: error-ex "^1.2.0" +parse-link-header@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/parse-link-header/-/parse-link-header-1.0.1.tgz#bedfe0d2118aeb84be75e7b025419ec8a61140a7" + dependencies: + xtend "~4.0.1" + parse-passwd@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/parse-passwd/-/parse-passwd-1.0.0.tgz#6d5b934a456993b23d37f40a382d6f1666a8e5c6" @@ -7727,6 +8221,10 @@ 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@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/path-key/-/path-key-1.0.0.tgz#5d53d578019646c0d68800db4e146e6bdc2ac7af" + path-key@^2.0.0: version "2.0.1" resolved "https://registry.yarnpkg.com/path-key/-/path-key-2.0.1.tgz#411cadb574c5a140d3a4b1910d40d80cc9f40b40" @@ -7745,6 +8243,12 @@ path-to-regexp@^1.0.1, path-to-regexp@^1.7.0: dependencies: isarray "0.0.1" +path-type@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" + path-type@^1.0.0: version "1.1.0" resolved "https://registry.yarnpkg.com/path-type/-/path-type-1.1.0.tgz#59c44f7ee491da704da415da5a4070ba4f8fe441" @@ -7753,12 +8257,6 @@ path-type@^1.0.0: 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" - pause-stream@0.0.11: version "0.0.11" resolved "https://registry.yarnpkg.com/pause-stream/-/pause-stream-0.0.11.tgz#fe5a34b0cbce12b5aa6a2b403ee2e73b602f1445" @@ -7813,6 +8311,10 @@ pinkie@^2.0.0: version "2.0.4" resolved "https://registry.yarnpkg.com/pinkie/-/pinkie-2.0.4.tgz#72556b80cfa0d48a974e80e77248e80ed4f7f870" +pinpoint@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/pinpoint/-/pinpoint-1.1.0.tgz#0cf7757a6977f1bf7f6a32207b709e377388e874" + pkg-dir@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/pkg-dir/-/pkg-dir-1.0.0.tgz#7a4b508a8d5bb2d629d447056ff4e9c9314cf3d4" @@ -7825,6 +8327,10 @@ pkg-dir@^2.0.0: dependencies: find-up "^2.1.0" +pkginfo@0.4.0: + version "0.4.0" + resolved "https://registry.yarnpkg.com/pkginfo/-/pkginfo-0.4.0.tgz#349dbb7ffd38081fcadc0853df687f0c7744cd65" + pluralize@^7.0.0: version "7.0.0" resolved "https://registry.yarnpkg.com/pluralize/-/pluralize-7.0.0.tgz#298b89df8b93b0221dbf421ad2b1b1ea23fc6777" @@ -8423,6 +8929,14 @@ raven@^2.0.2: timed-out "4.0.1" uuid "3.0.0" +raw-body@2.2.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/raw-body/-/raw-body-2.2.0.tgz#994976cf6a5096a41162840492f0bdc5d6e7fb96" + dependencies: + bytes "2.4.0" + iconv-lite "0.4.15" + unpipe "1.0.0" + raw-body@2.3.2: version "2.3.2" resolved "https://registry.yarnpkg.com/raw-body/-/raw-body-2.3.2.tgz#bcd60c77d3eb93cde0050295c3f379389bc88f89" @@ -8719,6 +9233,15 @@ readable-stream@1.0, readable-stream@~1.0.0, readable-stream@~1.0.31: isarray "0.0.1" string_decoder "~0.10.x" +readable-stream@1.1: + version "1.1.13" + resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-1.1.13.tgz#f6eef764f514c89e2b9e23146a75ba106756d23e" + 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.1.4, readable-stream@^2.2.2, readable-stream@^2.2.9, readable-stream@^2.3.3: version "2.3.5" resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.5.tgz#b4f85003a938cbb6ecbce2a124fb1012bd1a838d" @@ -8740,6 +9263,10 @@ readdirp@^2.0.0: readable-stream "^2.0.2" set-immediate-shim "^1.0.1" +readline-sync@^1.4.7: + version "1.4.9" + resolved "https://registry.yarnpkg.com/readline-sync/-/readline-sync-1.4.9.tgz#3eda8e65f23cd2a17e61301b1f0003396af5ecda" + realpath-native@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/realpath-native/-/realpath-native-1.0.0.tgz#7885721a83b43bd5327609f0ddecb2482305fdf0" @@ -8911,6 +9438,12 @@ 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@^1.1.0: + version "1.1.3" + resolved "https://registry.yarnpkg.com/repeating/-/repeating-1.1.3.tgz#3d4114218877537494f97f77f9785fab810fa4ac" + dependencies: + is-finite "^1.0.0" + repeating@^2.0.0: version "2.0.1" resolved "https://registry.yarnpkg.com/repeating/-/repeating-2.0.1.tgz#5214c53a926d3552707527fbab415dbc08d06dda" @@ -8958,6 +9491,33 @@ request@2.81.0: tunnel-agent "^0.6.0" uuid "^3.0.0" +request@^2.55.0: + version "2.85.0" + resolved "https://registry.yarnpkg.com/request/-/request-2.85.0.tgz#5a03615a47c61420b3eb99b7dba204f83603e1fa" + dependencies: + aws-sign2 "~0.7.0" + aws4 "^1.6.0" + caseless "~0.12.0" + combined-stream "~1.0.5" + extend "~3.0.1" + forever-agent "~0.6.1" + form-data "~2.3.1" + har-validator "~5.0.3" + hawk "~6.0.2" + http-signature "~1.2.0" + is-typedarray "~1.0.0" + isstream "~0.1.2" + json-stringify-safe "~5.0.1" + mime-types "~2.1.17" + oauth-sign "~0.8.2" + performance-now "^2.1.0" + qs "~6.5.1" + safe-buffer "^5.1.1" + stringstream "~0.0.5" + tough-cookie "~2.3.3" + tunnel-agent "^0.6.0" + uuid "^3.1.0" + request@^2.74.0, request@^2.79.0, request@^2.83.0: version "2.83.0" resolved "https://registry.yarnpkg.com/request/-/request-2.83.0.tgz#ca0b65da02ed62935887808e6f510381034e3356" @@ -8993,6 +9553,10 @@ 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-from-string@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/require-from-string/-/require-from-string-2.0.1.tgz#c545233e9d7da6616e9d59adfb39fc9f588676ff" + 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" @@ -9093,6 +9657,10 @@ rethinkdbdash@^2.3.29, rethinkdbdash@^2.3.31: dependencies: bluebird ">= 3.0.1" +rfc6902@^2.2.2: + version "2.2.2" + resolved "https://registry.yarnpkg.com/rfc6902/-/rfc6902-2.2.2.tgz#518a4e9caac1688f3d94c9df2fdcdb6ce21f29be" + right-align@^0.1.1: version "0.1.3" resolved "https://registry.yarnpkg.com/right-align/-/right-align-0.1.3.tgz#61339b722fe6a3515689210d24e14c96148613ef" @@ -9200,7 +9768,7 @@ sax@0.4.2: version "0.4.2" resolved "https://registry.yarnpkg.com/sax/-/sax-0.4.2.tgz#39f3b601733d6bec97105b242a2a40fd6978ac3c" -sax@^1.2.1, sax@^1.2.4, sax@~1.2.1: +sax@^1.1.4, 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" @@ -9247,6 +9815,24 @@ semver-diff@^2.0.0: version "5.5.0" resolved "https://registry.yarnpkg.com/semver/-/semver-5.5.0.tgz#dc4bbc7a6ca9d916dee5d43516f0092b58f7b8ab" +send@0.15.3: + version "0.15.3" + resolved "https://registry.yarnpkg.com/send/-/send-0.15.3.tgz#5013f9f99023df50d1bd9892c19e3defd1d53309" + dependencies: + debug "2.6.7" + depd "~1.1.0" + destroy "~1.0.4" + encodeurl "~1.0.1" + escape-html "~1.0.3" + etag "~1.8.0" + fresh "0.5.0" + http-errors "~1.6.1" + mime "1.3.4" + ms "2.0.0" + on-finished "~2.3.0" + range-parser "~1.2.0" + statuses "~1.3.1" + send@0.16.1: version "0.16.1" resolved "https://registry.yarnpkg.com/send/-/send-0.16.1.tgz#a70e1ca21d1382c11d0d9f6231deb281080d7ab3" @@ -9290,6 +9876,31 @@ serve-static@1.13.1: parseurl "~1.3.2" send "0.16.1" +serve@^5.1.5: + version "5.2.4" + resolved "https://registry.yarnpkg.com/serve/-/serve-5.2.4.tgz#4742c05f65a2330f788cdde901cd7a09b23a99f6" + dependencies: + args "3.0.2" + basic-auth "1.1.0" + bluebird "3.5.0" + boxen "1.1.0" + chalk "1.1.3" + clipboardy "1.1.4" + dargs "5.1.0" + detect-port "1.2.1" + filesize "3.5.10" + fs-extra "3.0.1" + handlebars "4.0.10" + ip "1.1.5" + micro "7.3.3" + micro-compress "1.0.0" + mime-types "2.1.15" + node-version "1.0.0" + opn "5.1.0" + path-type "2.0.0" + send "0.15.3" + update-notifier "2.2.0" + 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" @@ -9718,6 +10329,12 @@ string-replace-to-array@^1.0.3: lodash.flatten "^4.2.0" lodash.isstring "^4.0.1" +string-similarity@1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/string-similarity/-/string-similarity-1.1.0.tgz#3c66498858a465ec7c40c7d81739bbd995904914" + dependencies: + lodash "^4.13.1" + 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" @@ -9867,12 +10484,19 @@ supports-color@^4.2.1: dependencies: has-flag "^2.0.0" -supports-color@^5.2.0, supports-color@^5.3.0: +supports-color@^5.0.0, supports-color@^5.2.0, supports-color@^5.3.0: version "5.3.0" resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-5.3.0.tgz#5b24ac15db80fa927cf5227a4a33fd3c4c7676c0" dependencies: has-flag "^3.0.0" +supports-hyperlinks@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/supports-hyperlinks/-/supports-hyperlinks-1.0.1.tgz#71daedf36cc1060ac5100c351bb3da48c29c0ef7" + dependencies: + has-flag "^2.0.0" + supports-color "^5.0.0" + svgo@^0.7.0: version "0.7.2" resolved "https://registry.yarnpkg.com/svgo/-/svgo-0.7.2.tgz#9f5772413952135c6fefbf40afe6a4faa88b4bb5" @@ -9923,7 +10547,7 @@ symbol-observable@^1.0.2, 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, symbol-tree@^3.2.2: +"symbol-tree@>= 3.1.0 < 4.0.0", symbol-tree@^3.2.1, symbol-tree@^3.2.2: version "3.2.2" resolved "https://registry.yarnpkg.com/symbol-tree/-/symbol-tree-3.2.2.tgz#ae27db38f660a7ae2e1c3b7d1bc290819b8519e6" @@ -9953,6 +10577,10 @@ table@^4.0.1, table@^4.0.2: slice-ansi "1.0.0" string-width "^2.1.1" +taffydb@2.7.2: + version "2.7.2" + resolved "https://registry.yarnpkg.com/taffydb/-/taffydb-2.7.2.tgz#7bf8106a5c1a48251b3e3bc0a0e1732489fd0dc8" + tapable@^0.2.7: version "0.2.8" resolved "https://registry.yarnpkg.com/tapable/-/tapable-0.2.8.tgz#99372a5c999bf2df160afc0d74bed4f47948cd22" @@ -9978,6 +10606,12 @@ tar@^2.2.1: fstream "^1.0.2" inherits "2" +term-size@^0.1.0: + version "0.1.1" + resolved "https://registry.yarnpkg.com/term-size/-/term-size-0.1.1.tgz#87360b96396cab5760963714cda0d0cbeecad9ca" + dependencies: + execa "^0.4.0" + term-size@^1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/term-size/-/term-size-1.2.0.tgz#458b83887f288fc56d6fffbfad262e26638efa69" @@ -10110,7 +10744,7 @@ touch@^3.1.0: dependencies: nopt "~1.0.10" -tough-cookie@>=2.3.3, tough-cookie@^2.3.2, tough-cookie@^2.3.3, tough-cookie@~2.3.0, tough-cookie@~2.3.3: +tough-cookie@>=2.3.3, tough-cookie@^2.2.0, tough-cookie@^2.3.2, tough-cookie@^2.3.3, tough-cookie@~2.3.0, tough-cookie@~2.3.3: version "2.3.4" resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-2.3.4.tgz#ec60cee38ac675063ffc97a5c18970578ee83655" dependencies: @@ -10122,7 +10756,7 @@ tr46@^1.0.0: dependencies: punycode "^2.1.0" -tr46@~0.0.3: +tr46@~0.0.1, tr46@~0.0.3: version "0.0.3" resolved "https://registry.yarnpkg.com/tr46/-/tr46-0.0.3.tgz#8184fd347dac9cdc185992f3a6622e14b9d9ab6a" @@ -10304,6 +10938,32 @@ upath@^1.0.0: version "1.0.4" resolved "https://registry.yarnpkg.com/upath/-/upath-1.0.4.tgz#ee2321ba0a786c50973db043a50b7bcba822361d" +update-notifier@2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/update-notifier/-/update-notifier-2.1.0.tgz#ec0c1e53536b76647a24b77cb83966d9315123d9" + dependencies: + boxen "^1.0.0" + chalk "^1.0.0" + configstore "^3.0.0" + is-npm "^1.0.0" + latest-version "^3.0.0" + lazy-req "^2.0.0" + semver-diff "^2.0.0" + xdg-basedir "^3.0.0" + +update-notifier@2.2.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/update-notifier/-/update-notifier-2.2.0.tgz#1b5837cf90c0736d88627732b661c138f86de72f" + dependencies: + boxen "^1.0.0" + chalk "^1.0.0" + configstore "^3.0.0" + import-lazy "^2.1.0" + is-npm "^1.0.0" + latest-version "^3.0.0" + semver-diff "^2.0.0" + xdg-basedir "^3.0.0" + update-notifier@^2.3.0: version "2.3.0" resolved "https://registry.yarnpkg.com/update-notifier/-/update-notifier-2.3.0.tgz#4e8827a6bb915140ab093559d7014e3ebb837451" @@ -10358,6 +11018,10 @@ url-parse@^1.1.8: querystringify "~1.0.0" requires-port "~1.0.0" +url-template@^2.0.8: + version "2.0.8" + resolved "https://registry.yarnpkg.com/url-template/-/url-template-2.0.8.tgz#fc565a3cccbff7730c775f5641f9555791439f21" + url-to-options@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/url-to-options/-/url-to-options-1.0.1.tgz#1505a03a289a48cbd7a434efbaeec5055f5633a9" @@ -10463,12 +11127,24 @@ verror@1.10.0: core-util-is "1.0.2" extsprintf "^1.2.0" +vlq@^0.2.1: + version "0.2.3" + resolved "https://registry.yarnpkg.com/vlq/-/vlq-0.2.3.tgz#8f3e4328cf63b1540c0d67e1b2778386f8975b26" + 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" +vm2@patriksimek/vm2#custom_files: + version "3.5.0" + resolved "https://codeload.github.com/patriksimek/vm2/tar.gz/7e82f90ac705fc44fad044147cb0df09b4c79a57" + +voca@^1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/voca/-/voca-1.4.0.tgz#e15ac58b38290b72acc0c330366b6cc7984924d7" + w3c-hr-time@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/w3c-hr-time/-/w3c-hr-time-1.0.1.tgz#82ac2bff63d950ea9e3189a58a65625fedf19045" @@ -10522,6 +11198,10 @@ web-push@^3.2.2: minimist "^1.2.0" urlsafe-base64 "^1.0.0" +webidl-conversions@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-2.0.1.tgz#3bf8258f7d318c7443c36f2e169402a1a6703506" + webidl-conversions@^3.0.0: version "3.0.1" resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-3.0.1.tgz#24534275e2a7bc6be7bc86611cc16ae0a5654871" @@ -10686,6 +11366,12 @@ whatwg-fetch@2.0.3, whatwg-fetch@>=0.10.0: version "2.0.3" resolved "https://registry.yarnpkg.com/whatwg-fetch/-/whatwg-fetch-2.0.3.tgz#9c84ec2dcf68187ff00bc64e1274b442176e1c84" +whatwg-url-compat@~0.6.5: + version "0.6.5" + resolved "https://registry.yarnpkg.com/whatwg-url-compat/-/whatwg-url-compat-0.6.5.tgz#00898111af689bb097541cd5a45ca6c8798445bf" + dependencies: + tr46 "~0.0.1" + whatwg-url@^4.3.0: version "4.8.0" resolved "https://registry.yarnpkg.com/whatwg-url/-/whatwg-url-4.8.0.tgz#d2981aa9148c1e00a41c5a6131166ab4683bbcc0" @@ -10719,7 +11405,7 @@ which@1.2.x: dependencies: isexe "^2.0.0" -which@^1.2.10, which@^1.2.12, which@^1.2.14, which@^1.2.9, which@^1.3.0: +which@^1.2.10, which@^1.2.12, which@^1.2.14, which@^1.2.8, which@^1.2.9, which@^1.3.0: version "1.3.0" resolved "https://registry.yarnpkg.com/which/-/which-1.3.0.tgz#ff04bdfc010ee547d780bec38e1ac1c2777d253a" dependencies: @@ -10731,6 +11417,12 @@ wide-align@^1.1.0: dependencies: string-width "^1.0.2" +widest-line@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/widest-line/-/widest-line-1.0.0.tgz#0c09c85c2a94683d0d7eaf8ee097d564bf0e105c" + dependencies: + string-width "^1.0.1" + widest-line@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/widest-line/-/widest-line-2.0.0.tgz#0142a4e8a243f8882c0233aa0e0281aa76152273" @@ -10832,7 +11524,7 @@ xml-char-classes@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/xml-char-classes/-/xml-char-classes-1.0.0.tgz#64657848a20ffc5df583a42ad8a277b4512bbc4d" -xml-name-validator@^2.0.1: +"xml-name-validator@>= 2.0.1 < 3.0.0", 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"