diff --git a/.circleci/config.yml b/.circleci/config.yml index 10a683e3e..4d40f0d24 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -9,9 +9,11 @@ version: 2.1 # create pull request previews and to update `https://docs.ohif.org` ### +## https://github.com/cypress-io/circleci-orb +## orbs: codecov: codecov/codecov@1.0.5 - cypress: cypress-io/cypress@1.8.0 + cypress: cypress-io/cypress@1.10.0 defaults: &defaults docker: @@ -21,13 +23,11 @@ defaults: &defaults working_directory: ~/repo jobs: - PR_UNIT_TESTS: + CHECKOUT: <<: *defaults - steps: # Enable yarn workspaces - run: yarn config set workspaces-experimental true - # Checkout code and ALL Git Tags - checkout: post: @@ -48,6 +48,12 @@ jobs: - ~/.cache ## Cache yarn and Cypress key: yarn-packages-v1-{{ .Branch }}-{{ checksum "yarn.lock" }} + UNIT_TESTS: + <<: *defaults + steps: + - attach_workspace: + at: ~/repo + # RUN TESTS - run: name: 'JavaScript Test Suite' @@ -86,72 +92,7 @@ jobs: root: ~/repo paths: . - MERGE_UNIT_TESTS: - <<: *defaults - - steps: - # Enable yarn workspaces - - run: yarn config set workspaces-experimental true - - # Checkout code and ALL Git Tags - - checkout: - post: - - git fetch --all - - restore_cache: - name: Restore Yarn and Cypress Package Cache - keys: - # when lock file changes, use increasingly general patterns to restore cache - - yarn-packages-v1-{{ .Branch }}-{{ checksum "yarn.lock" }} - - yarn-packages-v1-{{ .Branch }}- - - yarn-packages-v1- - - run: - name: Install Dependencies - command: yarn install --frozen-lockfile - - save_cache: - name: Save Yarn Package Cache - paths: - - ~/.cache ## Cache yarn and Cypress - key: yarn-packages-v1-{{ .Branch }}-{{ checksum "yarn.lock" }} - - # RUN TESTS - - run: - name: 'JavaScript Test Suite' - command: yarn run test:unit:ci - - # PLATFORM/VIEWER - - run: - name: 'VIEWER: Combine report output' - command: | - viewerCov="/home/circleci/repo/platform/viewer/coverage" - touch "${viewerCov}/reports" - cat "${viewerCov}/clover.xml" >> "${viewerCov}/reports" - echo "\<<\<<\<< EOF" >> "${viewerCov}/reports" - cat "${viewerCov}/lcov.info" >>"${viewerCov}/reports" - echo "\<<\<<\<< EOF" >> "${viewerCov}/reports" - - codecov/upload: - file: '/home/circleci/repo/platform/viewer/coverage/reports' - flags: 'viewer' - - # PLATFORM/CORE - - run: - name: 'CORE: Combine report output' - command: | - coreCov="/home/circleci/repo/platform/core/coverage" - touch "${coreCov}/reports" - cat "${coreCov}/clover.xml" >> "${coreCov}/reports" - echo "\<<\<<\<< EOF" >> "${coreCov}/reports" - cat "${coreCov}/lcov.info" >> "${coreCov}/reports" - echo "\<<\<<\<< EOF" >> "${coreCov}/reports" - - codecov/upload: - file: '/home/circleci/repo/platform/core/coverage/reports' - flags: 'core' - - # Persist :+1: - - persist_to_workspace: - root: ~/repo - paths: . - - npm_publish: + NPM_PUBLISH: <<: *defaults steps: - attach_workspace: @@ -175,7 +116,7 @@ jobs: root: ~/repo paths: . - docs_publish: + DOCS_PUBLISH: <<: *defaults steps: - attach_workspace: @@ -192,7 +133,7 @@ jobs: - run: chmod +x ~/repo/.circleci/build-and-publish-docs.sh - run: ~/repo/.circleci/build-and-publish-docs.sh - docker_publish: + DOCKER_PUBLISH: <<: *defaults steps: - attach_workspace: @@ -221,7 +162,7 @@ jobs: docker push ohif/$IMAGE_NAME:latest fi - viewer_demo_build: + VIEWER_DEMO_BUILD: <<: *defaults steps: - attach_workspace: @@ -246,7 +187,7 @@ jobs: root: ~/repo paths: . - viewer_demo_publish: + VIEWER_DEMO_PUBLISH: working_directory: ~/repo docker: - image: google/cloud-sdk @@ -272,71 +213,117 @@ workflows: # PULL REQUESTS PR_CHECKS: jobs: - - PR_UNIT_TESTS: + - CHECKOUT: filters: branches: ignore: - master - feature/* - hotfix/* - # Cypress job added by `cypress-io` orb + - UNIT_TESTS: + requires: + - CHECKOUT + # E2E: PWA - cypress/run: + name: 'E2E: PWA' pre-steps: - run: 'rm -rf ~/.yarn && npm i -g yarn && yarn -v && yarn global add wait-on' # Use yarn latest yarn: true store_artifacts: true - start: yarn run dev - wait-on: 'http://localhost:3000' - no-workspace: true # Don't persist workspace working_directory: platform/viewer + build: yarn run build + start: yarn run test:e2e:dist + wait-on: 'http://localhost:3000' cache-key: 'yarn-packages-v1-{{ .Branch }}-{{ checksum "yarn.lock" }}' - post-steps: - - store_test_results: - path: cypress/results + no-workspace: true # Don't persist workspace requires: - - PR_UNIT_TESTS + - UNIT_TESTS + # E2E: script-tag + - cypress/run: + name: 'E2E: Script Tag' + pre-steps: + - run: 'rm -rf ~/.yarn && npm i -g yarn && yarn -v && yarn global + add wait-on' # Use yarn latest + yarn: true + store_artifacts: true + working_directory: platform/viewer + build: yarn run build:package + start: yarn run test:e2e:dist + wait-on: 'http://localhost:3000' + cache-key: 'yarn-packages-v1-{{ .Branch }}-{{ checksum "yarn.lock" }}' + no-workspace: true # Don't persist workspace + requires: + - UNIT_TESTS # MERGE TO MASTER RELEASE: jobs: - - MERGE_UNIT_TESTS: + - CHECKOUT: filters: branches: only: master - # Cypress job added by `cypress-io` orb + - UNIT_TESTS: + requires: + - CHECKOUT + # E2E: PWA + Persist - cypress/run: + name: 'E2E: PWA' pre-steps: - run: 'rm -rf ~/.yarn && npm i -g yarn && yarn -v && yarn global add wait-on' # Use yarn latest yarn: true record: true store_artifacts: true - start: yarn run dev - wait-on: 'http://localhost:3000' working_directory: platform/viewer + build: yarn run build + start: yarn run test:e2e:dist + wait-on: 'http://localhost:3000' cache-key: 'yarn-packages-v1-{{ .Branch }}-{{ checksum "yarn.lock" }}' + no-workspace: true # Don't persist workspace post-steps: - store_test_results: path: cypress/results requires: - - MERGE_UNIT_TESTS + - UNIT_TESTS + # E2E: script-tag + - cypress/run: + name: 'E2E: Script Tag' + pre-steps: + - run: 'rm -rf ~/.yarn && npm i -g yarn && yarn -v && yarn global + add wait-on' # Use yarn latest + yarn: true + store_artifacts: true + working_directory: platform/viewer + build: yarn run build:package + start: yarn run test:e2e:dist + wait-on: 'http://localhost:3000' + cache-key: 'yarn-packages-v1-{{ .Branch }}-{{ checksum "yarn.lock" }}' + no-workspace: true # Don't persist workspace + post-steps: + - store_test_results: + path: cypress/results + requires: + - UNIT_TESTS # Update NPM - - npm_publish: + - NPM_PUBLISH: requires: - - cypress/run - # Update docs.ohif.org - - docs_publish: + - 'E2E: Script Tag' + - 'E2E: PWA' + - DOCS_PUBLISH: requires: - - cypress/run + - 'E2E: Script Tag' + - 'E2E: PWA' + - VIEWER_DEMO_BUILD: + requires: + - 'E2E: Script Tag' + - 'E2E: PWA' + - VIEWER_DEMO_PUBLISH: + requires: + - VIEWER_DEMO_BUILD # Update hub.docker.org - # - docker_publish: + # - DOCKER_PUBLISH: # requires: - # - npm_publish + # - NPM_PUBLISH # Update viewer.ohif.org - - viewer_demo_build: - requires: - - cypress/run - - viewer_demo_publish: - requires: - - viewer_demo_build + # Update docs.ohif.org diff --git a/.gitignore b/.gitignore index 86124426b..3630eb166 100644 --- a/.gitignore +++ b/.gitignore @@ -28,7 +28,7 @@ example/deps/ docker/dcm4che/dcm4che-arc # Cypress test results -cypress/videos/ +videos/ # Locize settings -.locize \ No newline at end of file +.locize diff --git a/docs/latest/deployment/recipes/embedded-viewer.md b/docs/latest/deployment/recipes/embedded-viewer.md index 384c22b78..3018d97c2 100644 --- a/docs/latest/deployment/recipes/embedded-viewer.md +++ b/docs/latest/deployment/recipes/embedded-viewer.md @@ -53,9 +53,6 @@ window.config = { qidoSupportsIncludeField: true, imageRendering: 'wadors', thumbnailRendering: 'wadors', - requestOptions: { - requestFromBrowser: true, - }, }, ], }, diff --git a/docs/latest/essentials/configuration.md b/docs/latest/essentials/configuration.md index 64662abb0..182eaa0ca 100644 --- a/docs/latest/essentials/configuration.md +++ b/docs/latest/essentials/configuration.md @@ -59,9 +59,6 @@ window.config = { qidoSupportsIncludeField: true, imageRendering: 'wadors', thumbnailRendering: 'wadors', - requestOptions: { - requestFromBrowser: true, - }, }, ], }, diff --git a/package.json b/package.json index 361fd8123..1657aef90 100644 --- a/package.json +++ b/package.json @@ -24,6 +24,8 @@ "test": "yarn run test:unit", "test:unit": "jest --collectCoverage", "test:unit:ci": "lerna run test:unit:ci --parallel --stream", + "test:e2e": "lerna run test:e2e --stream", + "test:e2e:dist": "lerna run test:e2e:dist --stream", "see-changed": "lerna changed", "docs:publish": "chmod +x ./build-and-publish-docs.sh && ./build-and-publish-docs.sh", "release": "yarn run lerna:version && yarn run lerna:publish", @@ -79,7 +81,9 @@ "react-dom": "^16.8.6", "react-hot-loader": "^4.12.11", "redux-testkit": "^1.0.6", + "serve": "^11.1.0", "shader-loader": "^1.3.1", + "start-server-and-test": "^1.10.0", "style-loader": "^1.0.0", "stylelint": "^10.1.0", "stylelint-config-recommended": "^2.2.0", diff --git a/platform/core/src/DICOMWeb/getAuthorizationHeader.js b/platform/core/src/DICOMWeb/getAuthorizationHeader.js index c7d391571..7d4109896 100644 --- a/platform/core/src/DICOMWeb/getAuthorizationHeader.js +++ b/platform/core/src/DICOMWeb/getAuthorizationHeader.js @@ -6,17 +6,21 @@ import user from '../user'; /** * Returns the Authorization header as part of an Object. * - * @returns {Object} + * @export + * @param {Object} [server={}] + * @param {Object} [server.requestOptions] + * @param {string} [server.requestOptions.auth] + * @returns {Object} { Authorization } */ -export default function getAuthorizationHeader(server) { +export default function getAuthorizationHeader({ requestOptions } = {}) { const headers = {}; // Check for OHIF.user since this can also be run on the server const accessToken = user && user.getAccessToken && user.getAccessToken(); - if (server && server.requestOptions && server.requestOptions.auth) { + if (requestOptions && requestOptions.auth) { // HTTP Basic Auth (user:password) - headers.Authorization = `Basic ${btoa(server.requestOptions.auth)}`; + headers.Authorization = `Basic ${btoa(requestOptions.auth)}`; } else if (accessToken) { headers.Authorization = `Bearer ${accessToken}`; } diff --git a/platform/core/src/utils/addServer.test.js b/platform/core/src/utils/addServer.test.js index c5981bb4b..dc6a71593 100644 --- a/platform/core/src/utils/addServer.test.js +++ b/platform/core/src/utils/addServer.test.js @@ -11,9 +11,6 @@ describe('addServers', () => { qidoSupportsIncludeField: true, imageRendering: 'wadors', thumbnailRendering: 'wadors', - requestOptions: { - requestFromBrowser: true, - }, }, ], oidc: [ @@ -52,7 +49,6 @@ describe('addServers', () => { name: 'DCM4CHEE', qidoRoot: 'https://server.dcmjs.org/dcm4chee-arc/aets/DCM4CHEE/rs', qidoSupportsIncludeField: true, - requestOptions: { requestFromBrowser: true }, thumbnailRendering: 'wadors', type: 'dicomWeb', wadoRoot: 'https://server.dcmjs.org/dcm4chee-arc/aets/DCM4CHEE/rs', diff --git a/platform/viewer/.webpack/webpack.commonjs.js b/platform/viewer/.webpack/webpack.commonjs.js index b0e4ecb07..7a2c07e08 100644 --- a/platform/viewer/.webpack/webpack.commonjs.js +++ b/platform/viewer/.webpack/webpack.commonjs.js @@ -4,9 +4,14 @@ const webpackCommon = require('./../../../.webpack/webpack.commonjs.js'); // const { CleanWebpackPlugin } = require('clean-webpack-plugin'); const fontsToJavaScriptRule = require('./rules/fontsToJavaScript.js'); +const HtmlWebpackPlugin = require('html-webpack-plugin'); // const const SRC_DIR = path.join(__dirname, '../src'); const DIST_DIR = path.join(__dirname, '../dist'); +const PUBLIC_DIR = path.join(__dirname, '../public'); +// ~~ Env Vars +const HTML_TEMPLATE = process.env.HTML_TEMPLATE || 'script-tag.html'; +const PUBLIC_URL = process.env.PUBLIC_URL || '/'; module.exports = (env, argv) => { const commonConfig = webpackCommon(env, argv, { SRC_DIR, DIST_DIR }); @@ -33,7 +38,7 @@ module.exports = (env, argv) => { }, output: { path: DIST_DIR, - library: 'ohifViewer', + library: 'OHIFViewer', libraryTarget: 'umd', filename: 'index.umd.js', }, @@ -43,6 +48,12 @@ module.exports = (env, argv) => { plugins: [ // Clean output.path new CleanWebpackPlugin(), + // Generate "index.html" w/ correct includes/imports + new HtmlWebpackPlugin({ + inject: false, + template: `${PUBLIC_DIR}/html-templates/${HTML_TEMPLATE}`, + filename: 'index.html', + }), ], }); }; diff --git a/platform/viewer/cypress/support/script-tag/index.html b/platform/viewer/cypress/support/script-tag/index.html deleted file mode 100644 index c4370ab79..000000000 --- a/platform/viewer/cypress/support/script-tag/index.html +++ /dev/null @@ -1,56 +0,0 @@ - - - - - - - - - - - - - - - - - - OHIF Standalone Viewer - - - - - -
- - - - - - - - - - diff --git a/platform/viewer/package.json b/platform/viewer/package.json index 3452a7ee3..cb5ad8888 100644 --- a/platform/viewer/package.json +++ b/platform/viewer/package.json @@ -27,6 +27,9 @@ "dev:viewer": "yarn run dev", "start": "yarn run dev", "test:e2e": "cypress open", + "test:e2e:ci": "cypress run", + "test:e2e:dist": "start-server-and-test test:e2e:serve http://localhost:3000 test:e2e:ci", + "test:e2e:serve": "serve -l 3000 -s dist", "test:unit": "jest --watchAll", "test:unit:ci": "jest --ci --runInBand --collectCoverage", "prepublishOnly": "yarn run build:package" diff --git a/platform/viewer/public/config/default.js b/platform/viewer/public/config/default.js index 55339be37..639b627f7 100644 --- a/platform/viewer/public/config/default.js +++ b/platform/viewer/public/config/default.js @@ -13,9 +13,6 @@ window.config = { qidoSupportsIncludeField: true, imageRendering: 'wadors', thumbnailRendering: 'wadors', - requestOptions: { - requestFromBrowser: true, - }, }, ], }, diff --git a/platform/viewer/public/config/demo.js b/platform/viewer/public/config/demo.js index eca2a470c..816a02e25 100644 --- a/platform/viewer/public/config/demo.js +++ b/platform/viewer/public/config/demo.js @@ -12,9 +12,6 @@ window.config = { qidoSupportsIncludeField: true, imageRendering: 'wadors', thumbnailRendering: 'wadors', - requestOptions: { - requestFromBrowser: true, - }, }, ], }, diff --git a/platform/viewer/public/config/docker_nginx-orthanc.js b/platform/viewer/public/config/docker_nginx-orthanc.js index 45b563d6e..812972475 100644 --- a/platform/viewer/public/config/docker_nginx-orthanc.js +++ b/platform/viewer/public/config/docker_nginx-orthanc.js @@ -11,9 +11,6 @@ window.config = { qidoSupportsIncludeField: false, imageRendering: 'wadors', thumbnailRendering: 'wadors', - requestOptions: { - requestFromBrowser: true, - }, }, ], }, diff --git a/platform/viewer/public/config/docker_openresty-orthanc-keycloak.js b/platform/viewer/public/config/docker_openresty-orthanc-keycloak.js index 4a57db574..a872f4a44 100644 --- a/platform/viewer/public/config/docker_openresty-orthanc-keycloak.js +++ b/platform/viewer/public/config/docker_openresty-orthanc-keycloak.js @@ -14,11 +14,10 @@ window.config = { thumbnailRendering: 'wadors', // REQUIRED TAG: // TODO: Remove tag after https://github.com/OHIF/ohif-core/pull/19 is merged and we bump version - requestOptions: { - // undefined to use JWT + Bearer auth - // auth: 'orthanc:orthanc', - requestFromBrowser: true, - }, + // requestOptions: { + // undefined to use JWT + Bearer auth + // auth: 'orthanc:orthanc', + // }, }, ], }, diff --git a/platform/viewer/public/config/docker_openresty-orthanc.js b/platform/viewer/public/config/docker_openresty-orthanc.js index aa10446a7..d23915fc7 100644 --- a/platform/viewer/public/config/docker_openresty-orthanc.js +++ b/platform/viewer/public/config/docker_openresty-orthanc.js @@ -12,15 +12,11 @@ window.config = { qidoSupportsIncludeField: false, imageRendering: 'wadors', thumbnailRendering: 'wadors', - // REQUIRED TAG: - // https://github.com/OHIF/ohif-core/blob/59e1e04b92be24aee5d4402445cb3dcedb746995/src/studies/retrieveStudyMetadata.js#L54 - // TODO: Remove tag after https://github.com/OHIF/ohif-core/pull/19 is merged and we bump version - requestOptions: { - // undefined to use JWT + Bearer auth - // auth: 'orthanc:orthanc', - requestFromBrowser: true, - }, + // requestOptions: { + // undefined to use JWT + Bearer auth + // auth: 'orthanc:orthanc', + // }, }, ], }, -} +}; diff --git a/platform/viewer/public/config/local_dcm4chee.js b/platform/viewer/public/config/local_dcm4chee.js index 112c28756..1dc87f528 100644 --- a/platform/viewer/public/config/local_dcm4chee.js +++ b/platform/viewer/public/config/local_dcm4chee.js @@ -14,11 +14,10 @@ window.config = { imageRendering: 'wadors', thumbnailRendering: 'wadors', requestOptions: { - requestFromBrowser: true, auth: 'admin:admin', }, }, ], }, studyListFunctionsEnabled: true, -} +}; diff --git a/platform/viewer/public/config/netlify.js b/platform/viewer/public/config/netlify.js index d4a6f6956..e01f19189 100644 --- a/platform/viewer/public/config/netlify.js +++ b/platform/viewer/public/config/netlify.js @@ -11,9 +11,6 @@ window.config = { qidoSupportsIncludeField: true, imageRendering: 'wadors', thumbnailRendering: 'wadors', - requestOptions: { - requestFromBrowser: true, - }, }, ], }, diff --git a/platform/viewer/public/config/public_dicomweb.js b/platform/viewer/public/config/public_dicomweb.js index 825f7fc0d..0569b5045 100644 --- a/platform/viewer/public/config/public_dicomweb.js +++ b/platform/viewer/public/config/public_dicomweb.js @@ -11,15 +11,12 @@ window.config = { qidoSupportsIncludeField: true, imageRendering: 'wadors', thumbnailRendering: 'wadors', - requestOptions: { - requestFromBrowser: true, - }, }, ], }, i18n: { LOCIZE_PROJECTID: 'a8da3f9a-e467-4dd6-af33-474d582a0294', LOCIZE_API_KEY: null, // Developers can use this to do in-context editing. DO NOT COMMIT THIS KEY! - USE_LOCIZE: false - } -} + USE_LOCIZE: false, + }, +}; diff --git a/platform/viewer/public/html-templates/script-tag.html b/platform/viewer/public/html-templates/script-tag.html new file mode 100644 index 000000000..7c4867a4e --- /dev/null +++ b/platform/viewer/public/html-templates/script-tag.html @@ -0,0 +1,65 @@ + + + + + + + + + + + + + + + + + OHIF Standalone Viewer + + + + + +
+ + + + + diff --git a/platform/viewer/src/index.js b/platform/viewer/src/index.js index 01132f887..604a35de2 100644 --- a/platform/viewer/src/index.js +++ b/platform/viewer/src/index.js @@ -31,7 +31,6 @@ import OHIFDicomPDFExtension from '@ohif/extension-dicom-pdf'; let config = {}; const appDefaults = { routerBasename: '/', - relativeWebWorkerScriptsPath: '', }; if (window) { diff --git a/yarn.lock b/yarn.lock index e4caeb74e..d15cea8e6 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1243,7 +1243,7 @@ resolved "https://registry.yarnpkg.com/@hapi/hoek/-/hoek-8.2.4.tgz#684a14f4ca35d46f44abc87dfc696e5e4fe8a020" integrity sha512-Ze5SDNt325yZvNO7s5C4fXDscjJ6dcqLFXJQ/M7dZRQCewuDj2iDUuBi6jLQt+APbW9RjjVEvLr35FXuOEqjow== -"@hapi/joi@^15.0.0": +"@hapi/joi@^15.0.0", "@hapi/joi@^15.0.3": version "15.1.1" resolved "https://registry.yarnpkg.com/@hapi/joi/-/joi-15.1.1.tgz#c675b8a71296f02833f8d6d243b34c57b8ce19d7" integrity sha512-entf8ZMOK8sc+8YfeOlM8pCfg3b5+WZIKBfUaaJT8UsjAAPjartzxIYm3TIbjvA4u+u++KbcXD38k682nVHDAQ== @@ -3874,7 +3874,7 @@ bluebird@3.5.0: resolved "https://registry.yarnpkg.com/bluebird/-/bluebird-3.5.0.tgz#791420d7f551eea2897453a8a77653f96606d67c" integrity sha1-eRQg1/VR7qKJdFOop3ZT+WYG1nw= -bluebird@^3.5.1, bluebird@^3.5.3, bluebird@^3.5.5: +bluebird@3.5.5, bluebird@^3.5.1, bluebird@^3.5.3, bluebird@^3.5.5: version "3.5.5" resolved "https://registry.yarnpkg.com/bluebird/-/bluebird-3.5.5.tgz#a8d0afd73251effbbd5fe384a77d73003c17a71f" integrity sha512-5am6HnnfN+urzt4yfg7IgTbotDjIT/u8AJpEt0sIU9FtXfVeezXAPKswrG+xKUCOYAINpSdgZVDU6QFh+cuH3w== @@ -5885,7 +5885,7 @@ debug@3.2.6, debug@^3.0.0, debug@^3.1.0, debug@^3.2.5, debug@^3.2.6: dependencies: ms "^2.1.1" -debug@^4.0.1, debug@^4.1.0, debug@^4.1.1: +debug@4.1.1, debug@^4.0.1, debug@^4.1.0, debug@^4.1.1: version "4.1.1" resolved "https://registry.yarnpkg.com/debug/-/debug-4.1.1.tgz#3b72260255109c6b589cee050f1d516139664791" integrity sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw== @@ -6670,7 +6670,7 @@ duplexer3@^0.1.4: resolved "https://registry.yarnpkg.com/duplexer3/-/duplexer3-0.1.4.tgz#ee01dd1cac0ed3cbc7fdbea37dc0a8f1ce002ce2" integrity sha1-7gHdHKwO08vH/b6jfcCo8c4ALOI= -duplexer@^0.1.1: +duplexer@^0.1.1, duplexer@~0.1.1: version "0.1.1" resolved "https://registry.yarnpkg.com/duplexer/-/duplexer-0.1.1.tgz#ace6ff808c1ce66b57d1ebf97977acb02334cfc1" integrity sha1-rOb/gIwc5mtX0ev5eXessCM0z8E= @@ -7170,6 +7170,19 @@ etag@~1.8.1: resolved "https://registry.yarnpkg.com/etag/-/etag-1.8.1.tgz#41ae2eeb65efa62268aebfea83ac7d79299b0887" integrity sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc= +event-stream@=3.3.4: + version "3.3.4" + resolved "https://registry.yarnpkg.com/event-stream/-/event-stream-3.3.4.tgz#4ab4c9a0f5a54db9338b4c34d86bfce8f4b35571" + integrity sha1-SrTJoPWlTbkzi0w02Gv86PSzVXE= + dependencies: + duplexer "~0.1.1" + from "~0" + map-stream "~0.1.0" + pause-stream "0.0.11" + split "0.3" + stream-combiner "~0.0.4" + through "~2.3.1" + eventemitter3@^3.0.0, eventemitter3@^3.1.0: version "3.1.2" resolved "https://registry.yarnpkg.com/eventemitter3/-/eventemitter3-3.1.2.tgz#2d3d48f9c346698fce83a85d7d664e98535df6e7" @@ -7220,6 +7233,19 @@ execa@0.10.0: signal-exit "^3.0.0" strip-eof "^1.0.0" +execa@0.11.0: + version "0.11.0" + resolved "https://registry.yarnpkg.com/execa/-/execa-0.11.0.tgz#0b3c71daf9b9159c252a863cd981af1b4410d97a" + integrity sha512-k5AR22vCt1DcfeiRixW46U5tMLtBg44ssdJM9PiXw3D8Bn5qyxFCSnKY/eR22y+ctFDGPqafpaXg2G4Emyua4A== + dependencies: + cross-spawn "^6.0.0" + get-stream "^4.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" @@ -7908,6 +7934,11 @@ from2@^2.1.0: inherits "^2.0.1" readable-stream "^2.0.0" +from@~0: + version "0.1.7" + resolved "https://registry.yarnpkg.com/from/-/from-0.1.7.tgz#83c60afc58b9c56997007ed1a768b3ab303a44fe" + integrity sha1-g8YK/Fi5xWmXAH7Rp2izqzA6RP4= + fs-extra@5.0.0: version "5.0.0" resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-5.0.0.tgz#414d0110cdd06705734d055652c5411260c31abd" @@ -11452,6 +11483,11 @@ map-obj@^2.0.0: resolved "https://registry.yarnpkg.com/map-obj/-/map-obj-2.0.0.tgz#a65cd29087a92598b8791257a523e021222ac1f9" integrity sha1-plzSkIepJZi4eRJXpSPgISIqwfk= +map-stream@~0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/map-stream/-/map-stream-0.1.0.tgz#e56aa94c4c8055a16404a0674b78f215f7c8e194" + integrity sha1-5WqpTEyAVaFkBKBnS3jyFffI4ZQ= + map-visit@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/map-visit/-/map-visit-1.0.0.tgz#ecdca8f13144e660f1b5bd41f12f3479d98dfb8f" @@ -13195,6 +13231,13 @@ path-type@^4.0.0: resolved "https://registry.yarnpkg.com/path-type/-/path-type-4.0.0.tgz#84ed01c0a7ba380afe09d90a8c180dcd9d03043b" integrity sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw== +pause-stream@0.0.11: + version "0.0.11" + resolved "https://registry.yarnpkg.com/pause-stream/-/pause-stream-0.0.11.tgz#fe5a34b0cbce12b5aa6a2b403ee2e73b602f1445" + integrity sha1-/lo0sMvOErWqaitAPuLnO2AvFEU= + dependencies: + through "~2.3" + pbf@3.1.0: version "3.1.0" resolved "https://registry.yarnpkg.com/pbf/-/pbf-3.1.0.tgz#f70004badcb281761eabb1e76c92f179f08189e9" @@ -14302,6 +14345,13 @@ prr@~1.0.1: resolved "https://registry.yarnpkg.com/prr/-/prr-1.0.1.tgz#d3fc114ba06995a45ec6893f484ceb1d78f5f476" integrity sha1-0/wRS6BplaRexok/SEzrHXj19HY= +ps-tree@1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/ps-tree/-/ps-tree-1.2.0.tgz#5e7425b89508736cdd4f2224d028f7bb3f722ebd" + integrity sha512-0VnamPPYHl4uaU/nSFeZZpR21QAWRz+sRv4iW9+v/GS/J5U5iZB5BNN6J0RMoOvdx2gWM2+ZFMIm58q24e4UYA== + dependencies: + event-stream "=3.3.4" + pseudomap@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/pseudomap/-/pseudomap-1.0.2.tgz#f052a28da70e618917ef0a8ac34c1ae5a68286b3" @@ -15952,6 +16002,11 @@ rx-lite@*, rx-lite@^4.0.8: resolved "https://registry.yarnpkg.com/rx-lite/-/rx-lite-4.0.8.tgz#0b1e11af8bc44836f04a6407e92da42467b79444" integrity sha1-Cx4Rr4vESDbwSmQH6S2kJGe3lEQ= +rx@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/rx/-/rx-4.1.0.tgz#a5f13ff79ef3b740fe30aa803fb09f98805d4782" + integrity sha1-pfE/957zt0D+MKqAP7CfmIBdR4I= + rxjs@^5.0.0-beta.11: version "5.5.12" resolved "https://registry.yarnpkg.com/rxjs/-/rxjs-5.5.12.tgz#6fa61b8a77c3d793dbaf270bee2f43f652d741cc" @@ -16193,7 +16248,7 @@ serve-static@1.14.1: parseurl "~1.3.3" send "0.17.1" -serve@^11.0.0: +serve@^11.0.0, serve@^11.1.0: version "11.1.0" resolved "https://registry.yarnpkg.com/serve/-/serve-11.1.0.tgz#1bfe2f4a08d0130cbf44711cdb7996cb742172e0" integrity sha512-+4wpDtOSS+4ZLyDWMxThutA3iOTawX2+yDovOI8cjOUOmemyvNlHyFAsezBlSgbZKTYChI3tzA1Mh0z6XZ62qA== @@ -16619,6 +16674,13 @@ split2@^2.0.0: dependencies: through2 "^2.0.2" +split@0.3: + version "0.3.3" + resolved "https://registry.yarnpkg.com/split/-/split-0.3.3.tgz#cd0eea5e63a211dfff7eb0f091c4133e2d0dd28f" + integrity sha1-zQ7qXmOiEd//frDwkcQTPi0N0o8= + dependencies: + through "2" + split@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/split/-/split-1.0.1.tgz#605bd9be303aa59fb35f9229fbea0ddec9ea07d9" @@ -16682,6 +16744,19 @@ stackframe@^1.0.4: resolved "https://registry.yarnpkg.com/stackframe/-/stackframe-1.0.4.tgz#357b24a992f9427cba6b545d96a14ed2cbca187b" integrity sha512-to7oADIniaYwS3MhtCa/sQhrxidCCQiF/qp4/m5iN3ipf0Y7Xlri0f6eG29r08aL7JYl8n32AF3Q5GYBZ7K8vw== +start-server-and-test@^1.10.0: + version "1.10.0" + resolved "https://registry.yarnpkg.com/start-server-and-test/-/start-server-and-test-1.10.0.tgz#a7cd88932a52b42bc9de184430a498338e426c0b" + integrity sha512-wp6x++18wNUIkI0qT+EkgwVQFwoXh003u/PPUJVEEyh9lSNDONLD9CK2qleghS/kl5LxipbrIUw+FJVEFRVkGw== + dependencies: + bluebird "3.5.5" + check-more-types "2.24.0" + debug "4.1.1" + execa "0.11.0" + lazy-ass "1.6.0" + ps-tree "1.2.0" + wait-on "3.3.0" + state-toggle@^1.0.0: version "1.0.2" resolved "https://registry.yarnpkg.com/state-toggle/-/state-toggle-1.0.2.tgz#75e93a61944116b4959d665c8db2d243631d6ddc" @@ -16734,6 +16809,13 @@ stream-browserify@^2.0.1: inherits "~2.0.1" readable-stream "^2.0.2" +stream-combiner@~0.0.4: + version "0.0.4" + resolved "https://registry.yarnpkg.com/stream-combiner/-/stream-combiner-0.0.4.tgz#4d5e433c185261dde623ca3f44c586bcf5c4ad14" + integrity sha1-TV5DPBhSYd3mI8o/RMWGvPXErRQ= + dependencies: + duplexer "~0.1.1" + stream-each@^1.1.0: version "1.2.3" resolved "https://registry.yarnpkg.com/stream-each/-/stream-each-1.2.3.tgz#ebe27a0c389b04fbcc233642952e10731afa9bae" @@ -17387,7 +17469,7 @@ through2@^3.0.0: dependencies: readable-stream "2 || 3" -through@2, "through@>=2.2.7 <3", through@^2.3.4, through@^2.3.6: +through@2, "through@>=2.2.7 <3", through@^2.3.4, through@^2.3.6, through@~2.3, through@~2.3.1: version "2.3.8" resolved "https://registry.yarnpkg.com/through/-/through-2.3.8.tgz#0dd4c9ffaabc357960b1b724115d7e0e86a2e1f5" integrity sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU= @@ -18334,6 +18416,17 @@ w3c-hr-time@^1.0.1: dependencies: browser-process-hrtime "^0.1.2" +wait-on@3.3.0: + version "3.3.0" + resolved "https://registry.yarnpkg.com/wait-on/-/wait-on-3.3.0.tgz#9940981d047a72a9544a97b8b5fca45b2170a082" + integrity sha512-97dEuUapx4+Y12aknWZn7D25kkjMk16PbWoYzpSdA8bYpVfS6hpl2a2pOWZ3c+Tyt3/i4/pglyZctG3J4V1hWQ== + dependencies: + "@hapi/joi" "^15.0.3" + core-js "^2.6.5" + minimist "^1.2.0" + request "^2.88.0" + rx "^4.1.0" + walker@^1.0.7, walker@~1.0.5: version "1.0.7" resolved "https://registry.yarnpkg.com/walker/-/walker-1.0.7.tgz#2f7f9b8fd10d677262b18a884e28d19618e028fb"