Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Web tracer, zone context manager and User Interaction plugin does not work with Angular #1206

Closed
owais opened this issue Jun 17, 2020 · 6 comments
Assignees
Labels
bug Something isn't working

Comments

@owais
Copy link

owais commented Jun 17, 2020

Please answer these questions before submitting a bug report.

What version of OpenTelemetry are you using?

I'm using the following Otel packages:

    "@opentelemetry/context-zone-peer-dep": "^0.8.3",
    "@opentelemetry/core": "^0.8.3",
    "@opentelemetry/plugin-user-interaction": "^0.8.0",
    "@opentelemetry/tracing": "^0.8.3",
    "@opentelemetry/web": "^0.8.3",

Output of npm ls:

Click to expand
ang2-conduit@0.0.0 /Users/olone/playground/angular-realworld-example-app
├─┬ @angular-devkit/build-angular@0.13.1
│ ├─┬ @angular-devkit/architect@0.13.1
│ │ ├── @angular-devkit/core@7.3.1 deduped
│ │ └─┬ rxjs@6.3.3
│ │   └── tslib@1.9.3 deduped
│ ├─┬ @angular-devkit/build-optimizer@0.13.1
│ │ ├── loader-utils@1.2.3 deduped
│ │ ├── source-map@0.5.6
│ │ ├── typescript@3.2.4 deduped
│ │ └── webpack-sources@1.3.0 deduped
│ ├─┬ @angular-devkit/build-webpack@0.13.1
│ │ ├── @angular-devkit/architect@0.13.1 deduped
│ │ ├── @angular-devkit/core@7.3.1 deduped
│ │ └─┬ rxjs@6.3.3
│ │   └── tslib@1.9.3 deduped
│ ├─┬ @angular-devkit/core@7.3.1
│ │ ├─┬ ajv@6.7.0
│ │ │ ├── fast-deep-equal@2.0.1 deduped
│ │ │ ├── fast-json-stable-stringify@2.0.0 deduped
│ │ │ ├── json-schema-traverse@0.4.1 deduped
│ │ │ └── uri-js@4.2.2 deduped
│ │ ├─┬ chokidar@2.0.4
│ │ │ ├─┬ anymatch@2.0.0
│ │ │ │ ├── micromatch@3.1.10 deduped
│ │ │ │ └── normalize-path@2.1.1 deduped
│ │ │ ├── async-each@1.0.1 deduped
│ │ │ ├─┬ braces@2.3.2
│ │ │ │ ├── arr-flatten@1.1.0
│ │ │ │ ├── array-unique@0.3.2 deduped
│ │ │ │ ├─┬ extend-shallow@2.0.1
│ │ │ │ │ └── is-extendable@0.1.1 deduped
│ │ │ │ ├─┬ fill-range@4.0.0
│ │ │ │ │ ├── extend-shallow@2.0.1 deduped
│ │ │ │ │ ├─┬ is-number@3.0.0
│ │ │ │ │ │ └── kind-of@3.2.2 deduped
│ │ │ │ │ ├── repeat-string@1.6.1
│ │ │ │ │ └─┬ to-regex-range@2.1.1
│ │ │ │ │   ├── is-number@3.0.0 deduped
│ │ │ │ │   └── repeat-string@1.6.1 deduped
│ │ │ │ ├── isobject@3.0.1
│ │ │ │ ├── repeat-element@1.1.3
│ │ │ │ ├── snapdragon@0.8.2 deduped
│ │ │ │ ├─┬ snapdragon-node@2.1.1
│ │ │ │ │ ├─┬ define-property@1.0.0
│ │ │ │ │ │ └── is-descriptor@1.0.2 deduped
│ │ │ │ │ ├── isobject@3.0.1 deduped
│ │ │ │ │ └─┬ snapdragon-util@3.0.1
│ │ │ │ │   └── kind-of@3.2.2 deduped
│ │ │ │ ├─┬ split-string@3.1.0
│ │ │ │ │ └─┬ extend-shallow@3.0.2
│ │ │ │ │   ├── assign-symbols@1.0.0 deduped
│ │ │ │ │   └─┬ is-extendable@1.0.1
│ │ │ │ │     └── is-plain-object@2.0.4 deduped
│ │ │ │ └── to-regex@3.0.2 deduped
│ │ │ ├── UNMET OPTIONAL DEPENDENCY fsevents@^1.2.2
│ │ │ ├─┬ glob-parent@3.1.0
│ │ │ │ ├─┬ is-glob@3.1.0
│ │ │ │ │ └── is-extglob@2.1.1 deduped
│ │ │ │ └── path-dirname@1.0.2
│ │ │ ├── inherits@2.0.3 deduped
│ │ │ ├── is-binary-path@1.0.1 deduped
│ │ │ ├─┬ is-glob@4.0.0
│ │ │ │ └── is-extglob@2.1.1
│ │ │ ├── lodash.debounce@4.0.8
│ │ │ ├─┬ normalize-path@2.1.1
│ │ │ │ └── remove-trailing-separator@1.1.0
│ │ │ ├── path-is-absolute@1.0.1 deduped
│ │ │ ├── readdirp@2.2.1 deduped
│ │ │ └── upath@1.1.0
│ │ ├── fast-json-stable-stringify@2.0.0 deduped
│ │ ├─┬ rxjs@6.3.3
│ │ │ └── tslib@1.9.3 deduped
│ │ └── source-map@0.7.3
│ ├─┬ @ngtools/webpack@7.3.1
│ │ ├── @angular-devkit/core@7.3.1 deduped
│ │ ├─┬ enhanced-resolve@4.1.0
│ │ │ ├── graceful-fs@4.1.15 deduped
│ │ │ ├── memory-fs@0.4.1 deduped
│ │ │ └── tapable@1.1.1 deduped
│ │ ├─┬ rxjs@6.3.3
│ │ │ └── tslib@1.9.3 deduped
│ │ ├── tree-kill@1.2.1 deduped
│ │ └── webpack-sources@1.3.0 deduped
│ ├─┬ ajv@6.7.0
│ │ ├── fast-deep-equal@2.0.1
│ │ ├── fast-json-stable-stringify@2.0.0
│ │ ├── json-schema-traverse@0.4.1
│ │ └─┬ uri-js@4.2.2
│ │   └── punycode@2.1.1
│ ├─┬ autoprefixer@9.4.6
│ │ ├─┬ browserslist@4.4.1
│ │ │ ├── caniuse-lite@1.0.30000936 deduped
│ │ │ ├── electron-to-chromium@1.3.113
│ │ │ └─┬ node-releases@1.1.7
│ │ │   └── semver@5.6.0 deduped
│ │ ├── caniuse-lite@1.0.30000936
│ │ ├── normalize-range@0.1.2
│ │ ├── num2fraction@1.2.2
│ │ ├── postcss@7.0.14 deduped
│ │ └── postcss-value-parser@3.3.1
│ ├── circular-dependency-plugin@5.0.2
│ ├─┬ clean-css@4.2.1
│ │ └── source-map@0.6.1 deduped
│ ├─┬ copy-webpack-plugin@4.6.0
│ │ ├─┬ cacache@10.0.4
│ │ │ ├── bluebird@3.5.3 deduped
│ │ │ ├── chownr@1.1.1
│ │ │ ├── glob@7.1.3 deduped
│ │ │ ├── graceful-fs@4.1.15 deduped
│ │ │ ├── lru-cache@4.1.5 deduped
│ │ │ ├─┬ mississippi@2.0.0
│ │ │ │ ├── concat-stream@1.6.2 deduped
│ │ │ │ ├── duplexify@3.7.1 deduped
│ │ │ │ ├── end-of-stream@1.4.1 deduped
│ │ │ │ ├── flush-write-stream@1.1.1 deduped
│ │ │ │ ├── from2@2.3.0 deduped
│ │ │ │ ├── parallel-transform@1.1.0 deduped
│ │ │ │ ├─┬ pump@2.0.1
│ │ │ │ │ ├── end-of-stream@1.4.1 deduped
│ │ │ │ │ └── once@1.4.0 deduped
│ │ │ │ ├── pumpify@1.5.1 deduped
│ │ │ │ ├── stream-each@1.2.3 deduped
│ │ │ │ └── through2@2.0.5 deduped
│ │ │ ├── mkdirp@0.5.1 deduped
│ │ │ ├─┬ move-concurrently@1.0.1
│ │ │ │ ├── aproba@1.2.0
│ │ │ │ ├─┬ copy-concurrently@1.0.5
│ │ │ │ │ ├── aproba@1.2.0 deduped
│ │ │ │ │ ├── fs-write-stream-atomic@1.0.10 deduped
│ │ │ │ │ ├── iferr@0.1.5
│ │ │ │ │ ├── mkdirp@0.5.1 deduped
│ │ │ │ │ ├── rimraf@2.6.3 deduped
│ │ │ │ │ └── run-queue@1.0.3 deduped
│ │ │ │ ├─┬ fs-write-stream-atomic@1.0.10
│ │ │ │ │ ├── graceful-fs@4.1.15 deduped
│ │ │ │ │ ├── iferr@0.1.5 deduped
│ │ │ │ │ ├── imurmurhash@0.1.4 deduped
│ │ │ │ │ └── readable-stream@2.3.6 deduped
│ │ │ │ ├── mkdirp@0.5.1 deduped
│ │ │ │ ├── rimraf@2.6.3 deduped
│ │ │ │ └─┬ run-queue@1.0.3
│ │ │ │   └── aproba@1.2.0 deduped
│ │ │ ├── promise-inflight@1.0.1 deduped
│ │ │ ├── rimraf@2.6.3 deduped
│ │ │ ├─┬ ssri@5.3.0
│ │ │ │ └── safe-buffer@5.1.2 deduped
│ │ │ ├── unique-filename@1.1.1 deduped
│ │ │ └── y18n@4.0.0
│ │ ├─┬ find-cache-dir@1.0.0
│ │ │ ├── commondir@1.0.1
│ │ │ ├─┬ make-dir@1.3.0
│ │ │ │ └── pify@3.0.0
│ │ │ └─┬ pkg-dir@2.0.0
│ │ │   └── find-up@2.1.0 deduped
│ │ ├─┬ globby@7.1.1
│ │ │ ├─┬ array-union@1.0.2
│ │ │ │ └── array-uniq@1.0.3
│ │ │ ├─┬ dir-glob@2.2.2
│ │ │ │ └─┬ path-type@3.0.0
│ │ │ │   └── pify@3.0.0
│ │ │ ├── glob@7.1.3 deduped
│ │ │ ├── ignore@3.3.10
│ │ │ ├── pify@3.0.0
│ │ │ └── slash@1.0.0
│ │ ├─┬ is-glob@4.0.0
│ │ │ └── is-extglob@2.1.1
│ │ ├── loader-utils@1.2.3 deduped
│ │ ├── minimatch@3.0.4 deduped
│ │ ├─┬ p-limit@1.3.0
│ │ │ └── p-try@1.0.0
│ │ └── serialize-javascript@1.6.1
│ ├─┬ file-loader@3.0.1
│ │ ├── loader-utils@1.2.3 deduped
│ │ └─┬ schema-utils@1.0.0
│ │   ├── ajv@6.9.1 deduped
│ │   ├── ajv-errors@1.0.1
│ │   └── ajv-keywords@3.4.0 deduped
│ ├─┬ glob@7.1.3
│ │ ├── fs.realpath@1.0.0
│ │ ├─┬ inflight@1.0.6
│ │ │ ├── once@1.4.0 deduped
│ │ │ └── wrappy@1.0.2
│ │ ├── inherits@2.0.3
│ │ ├── minimatch@3.0.4 deduped
│ │ ├─┬ once@1.4.0
│ │ │ └── wrappy@1.0.2 deduped
│ │ └── path-is-absolute@1.0.1
│ ├─┬ istanbul-instrumenter-loader@3.0.1
│ │ ├── convert-source-map@1.6.0 deduped
│ │ ├─┬ istanbul-lib-instrument@1.10.2
│ │ │ ├─┬ babel-generator@6.26.1
│ │ │ │ ├─┬ babel-messages@6.23.0
│ │ │ │ │ └── babel-runtime@6.26.0 deduped
│ │ │ │ ├─┬ babel-runtime@6.26.0
│ │ │ │ │ ├── core-js@2.6.4 deduped
│ │ │ │ │ └── regenerator-runtime@0.11.1
│ │ │ │ ├── babel-types@6.26.0 deduped
│ │ │ │ ├─┬ detect-indent@4.0.0
│ │ │ │ │ └─┬ repeating@2.0.1
│ │ │ │ │   └─┬ is-finite@1.0.2
│ │ │ │ │     └── number-is-nan@1.0.1 deduped
│ │ │ │ ├── jsesc@1.3.0
│ │ │ │ ├── lodash@4.17.11 deduped
│ │ │ │ ├── source-map@0.5.7
│ │ │ │ └── trim-right@1.0.1
│ │ │ ├─┬ babel-template@6.26.0
│ │ │ │ ├── babel-runtime@6.26.0 deduped
│ │ │ │ ├── babel-traverse@6.26.0 deduped
│ │ │ │ ├── babel-types@6.26.0 deduped
│ │ │ │ ├── babylon@6.18.0 deduped
│ │ │ │ └── lodash@4.17.11 deduped
│ │ │ ├─┬ babel-traverse@6.26.0
│ │ │ │ ├── babel-code-frame@6.26.0 deduped
│ │ │ │ ├── babel-messages@6.23.0 deduped
│ │ │ │ ├── babel-runtime@6.26.0 deduped
│ │ │ │ ├── babel-types@6.26.0 deduped
│ │ │ │ ├── babylon@6.18.0 deduped
│ │ │ │ ├── debug@2.6.9 deduped
│ │ │ │ ├── globals@9.18.0
│ │ │ │ ├─┬ invariant@2.2.4
│ │ │ │ │ └─┬ loose-envify@1.4.0
│ │ │ │ │   └── js-tokens@4.0.0
│ │ │ │ └── lodash@4.17.11 deduped
│ │ │ ├─┬ babel-types@6.26.0
│ │ │ │ ├── babel-runtime@6.26.0 deduped
│ │ │ │ ├── esutils@2.0.2 deduped
│ │ │ │ ├── lodash@4.17.11 deduped
│ │ │ │ └── to-fast-properties@1.0.3
│ │ │ ├── babylon@6.18.0
│ │ │ ├── istanbul-lib-coverage@1.2.1 deduped
│ │ │ └── semver@5.6.0 deduped
│ │ ├── loader-utils@1.2.3 deduped
│ │ └─┬ schema-utils@0.3.0
│ │   └─┬ ajv@5.5.2
│ │     ├── co@4.6.0
│ │     ├── fast-deep-equal@1.1.0
│ │     ├── fast-json-stable-stringify@2.0.0 deduped
│ │     └── json-schema-traverse@0.3.1
│ ├─┬ karma-source-map-support@1.3.0
│ │ └── source-map-support@0.5.10 deduped
│ ├─┬ less@3.9.0
│ │ ├── clone@2.1.2
│ │ ├─┬ errno@0.1.7
│ │ │ └── prr@1.0.1
│ │ ├── graceful-fs@4.1.15 deduped
│ │ ├── image-size@0.5.5
│ │ ├── mime@1.6.0 deduped
│ │ ├── mkdirp@0.5.1 deduped
│ │ ├─┬ promise@7.3.1
│ │ │ └── asap@2.0.6
│ │ ├─┬ request@2.88.0
│ │ │ ├── aws-sign2@0.7.0
│ │ │ ├── aws4@1.8.0
│ │ │ ├── caseless@0.12.0
│ │ │ ├─┬ combined-stream@1.0.7
│ │ │ │ └── delayed-stream@1.0.0
│ │ │ ├── extend@3.0.2 deduped
│ │ │ ├── forever-agent@0.6.1
│ │ │ ├─┬ form-data@2.3.3
│ │ │ │ ├── asynckit@0.4.0
│ │ │ │ ├── combined-stream@1.0.7 deduped
│ │ │ │ └── mime-types@2.1.21 deduped
│ │ │ ├─┬ har-validator@5.1.3
│ │ │ │ ├── ajv@6.9.1 deduped
│ │ │ │ └── har-schema@2.0.0
│ │ │ ├─┬ http-signature@1.2.0
│ │ │ │ ├── assert-plus@1.0.0
│ │ │ │ ├─┬ jsprim@1.4.1
│ │ │ │ │ ├── assert-plus@1.0.0 deduped
│ │ │ │ │ ├── extsprintf@1.3.0
│ │ │ │ │ ├── json-schema@0.2.3
│ │ │ │ │ └─┬ verror@1.10.0
│ │ │ │ │   ├── assert-plus@1.0.0 deduped
│ │ │ │ │   ├── core-util-is@1.0.2 deduped
│ │ │ │ │   └── extsprintf@1.4.0
│ │ │ │ └─┬ sshpk@1.16.1
│ │ │ │   ├─┬ asn1@0.2.4
│ │ │ │   │ └── safer-buffer@2.1.2 deduped
│ │ │ │   ├── assert-plus@1.0.0 deduped
│ │ │ │   ├─┬ bcrypt-pbkdf@1.0.2
│ │ │ │   │ └── tweetnacl@0.14.5 deduped
│ │ │ │   ├─┬ dashdash@1.14.1
│ │ │ │   │ └── assert-plus@1.0.0 deduped
│ │ │ │   ├─┬ ecc-jsbn@0.1.2
│ │ │ │   │ ├── jsbn@0.1.1 deduped
│ │ │ │   │ └── safer-buffer@2.1.2 deduped
│ │ │ │   ├─┬ getpass@0.1.7
│ │ │ │   │ └── assert-plus@1.0.0 deduped
│ │ │ │   ├── jsbn@0.1.1
│ │ │ │   ├── safer-buffer@2.1.2 deduped
│ │ │ │   └── tweetnacl@0.14.5
│ │ │ ├── is-typedarray@1.0.0
│ │ │ ├── isstream@0.1.2
│ │ │ ├── json-stringify-safe@5.0.1
│ │ │ ├─┬ mime-types@2.1.21
│ │ │ │ └── mime-db@1.37.0
│ │ │ ├── oauth-sign@0.9.0
│ │ │ ├── performance-now@2.1.0
│ │ │ ├── qs@6.5.2 deduped
│ │ │ ├── safe-buffer@5.1.2 deduped
│ │ │ ├─┬ tough-cookie@2.4.3
│ │ │ │ ├── psl@1.1.31
│ │ │ │ └── punycode@1.4.1 deduped
│ │ │ ├─┬ tunnel-agent@0.6.0
│ │ │ │ └── safe-buffer@5.1.2 deduped
│ │ │ └── uuid@3.3.2
│ │ └── source-map@0.6.1 deduped
│ ├─┬ less-loader@4.1.0
│ │ ├── clone@2.1.2 deduped
│ │ ├── loader-utils@1.2.3 deduped
│ │ └── pify@3.0.0
│ ├─┬ license-webpack-plugin@2.1.0
│ │ ├─┬ @types/webpack-sources@0.1.5
│ │ │ ├── @types/node@11.9.0
│ │ │ ├── @types/source-list-map@0.1.2
│ │ │ └── source-map@0.6.1 deduped
│ │ └── webpack-sources@1.3.0 deduped
│ ├─┬ loader-utils@1.2.3
│ │ ├── big.js@5.2.2
│ │ ├── emojis-list@2.1.0
│ │ └─┬ json5@1.0.1
│ │   └── minimist@1.2.0 deduped
│ ├─┬ mini-css-extract-plugin@0.5.0
│ │ ├── loader-utils@1.2.3 deduped
│ │ ├── schema-utils@1.0.0 deduped
│ │ └── webpack-sources@1.3.0 deduped
│ ├─┬ minimatch@3.0.4
│ │ └─┬ brace-expansion@1.1.11
│ │   ├── balanced-match@1.0.0
│ │   └── concat-map@0.0.1
│ ├── UNMET OPTIONAL DEPENDENCY node-sass@4.11.0
│ ├─┬ opn@5.4.0
│ │ └── is-wsl@1.1.0
│ ├── parse5@4.0.0
│ ├─┬ postcss@7.0.14
│ │ ├── chalk@2.4.2 deduped
│ │ ├── source-map@0.6.1 deduped
│ │ └─┬ supports-color@6.1.0
│ │   └── has-flag@3.0.0
│ ├─┬ postcss-import@12.0.1
│ │ ├── postcss@7.0.14 deduped
│ │ ├── postcss-value-parser@3.3.1 deduped
│ │ ├─┬ read-cache@1.0.0
│ │ │ └── pify@2.3.0
│ │ └── resolve@1.10.0 deduped
│ ├─┬ postcss-loader@3.0.0
│ │ ├── loader-utils@1.2.3 deduped
│ │ ├── postcss@7.0.14 deduped
│ │ ├─┬ postcss-load-config@2.0.0
│ │ │ ├─┬ cosmiconfig@4.0.0
│ │ │ │ ├── is-directory@0.3.1
│ │ │ │ ├── js-yaml@3.12.1 deduped
│ │ │ │ ├─┬ parse-json@4.0.0
│ │ │ │ │ ├─┬ error-ex@1.3.2
│ │ │ │ │ │ └── is-arrayish@0.2.1
│ │ │ │ │ └── json-parse-better-errors@1.0.2 deduped
│ │ │ │ └── require-from-string@2.0.2
│ │ │ └─┬ import-cwd@2.1.0
│ │ │   └─┬ import-from@2.1.0
│ │ │     └── resolve-from@3.0.0 deduped
│ │ └── schema-utils@1.0.0 deduped
│ ├─┬ raw-loader@1.0.0
│ │ ├── loader-utils@1.2.3 deduped
│ │ └── schema-utils@1.0.0 deduped
│ ├─┬ rxjs@6.3.3
│ │ └── tslib@1.9.3 deduped
│ ├─┬ sass-loader@7.1.0
│ │ ├─┬ clone-deep@2.0.2
│ │ │ ├─┬ for-own@1.0.0
│ │ │ │ └── for-in@1.0.2
│ │ │ ├─┬ is-plain-object@2.0.4
│ │ │ │ └── isobject@3.0.1 deduped
│ │ │ ├── kind-of@6.0.2
│ │ │ └─┬ shallow-clone@1.0.0
│ │ │   ├── is-extendable@0.1.1
│ │ │   ├── kind-of@5.1.0
│ │ │   └─┬ mixin-object@2.0.1
│ │ │     ├── for-in@0.1.8
│ │ │     └── is-extendable@0.1.1 deduped
│ │ ├── loader-utils@1.2.3 deduped
│ │ ├── lodash.tail@4.1.1
│ │ ├── neo-async@2.6.0
│ │ ├── pify@3.0.0
│ │ └── semver@5.6.0 deduped
│ ├── semver@5.6.0
│ ├─┬ source-map-loader@0.2.4
│ │ ├─┬ async@2.6.1
│ │ │ └── lodash@4.17.11 deduped
│ │ └── loader-utils@1.2.3 deduped
│ ├─┬ source-map-support@0.5.10
│ │ ├── buffer-from@1.1.1
│ │ └── source-map@0.6.1 deduped
│ ├─┬ speed-measure-webpack-plugin@1.3.0
│ │ └── chalk@2.4.2 deduped
│ ├─┬ stats-webpack-plugin@0.7.0
│ │ └── lodash@4.17.11
│ ├─┬ style-loader@0.23.1
│ │ ├── loader-utils@1.2.3 deduped
│ │ └── schema-utils@1.0.0 deduped
│ ├─┬ stylus@0.54.5
│ │ ├── css-parse@1.7.0
│ │ ├─┬ debug@4.1.1
│ │ │ └── ms@2.1.1
│ │ ├─┬ glob@7.0.6
│ │ │ ├── fs.realpath@1.0.0 deduped
│ │ │ ├── inflight@1.0.6 deduped
│ │ │ ├── inherits@2.0.3 deduped
│ │ │ ├── minimatch@3.0.4 deduped
│ │ │ ├── once@1.4.0 deduped
│ │ │ └── path-is-absolute@1.0.1 deduped
│ │ ├── mkdirp@0.5.1 deduped
│ │ ├── sax@0.5.8
│ │ └─┬ source-map@0.1.43
│ │   └── amdefine@1.0.1
│ ├─┬ stylus-loader@3.0.2
│ │ ├── loader-utils@1.2.3 deduped
│ │ ├── lodash.clonedeep@4.5.0
│ │ └── when@3.6.4
│ ├─┬ terser-webpack-plugin@1.2.2
│ │ ├─┬ cacache@11.3.2
│ │ │ ├── bluebird@3.5.3 deduped
│ │ │ ├── chownr@1.1.1 deduped
│ │ │ ├── figgy-pudding@3.5.1 deduped
│ │ │ ├── glob@7.1.3 deduped
│ │ │ ├── graceful-fs@4.1.15 deduped
│ │ │ ├─┬ lru-cache@5.1.1
│ │ │ │ └── yallist@3.0.3 deduped
│ │ │ ├── mississippi@3.0.0 deduped
│ │ │ ├── mkdirp@0.5.1 deduped
│ │ │ ├── move-concurrently@1.0.1 deduped
│ │ │ ├── promise-inflight@1.0.1 deduped
│ │ │ ├── rimraf@2.6.3 deduped
│ │ │ ├── ssri@6.0.1 deduped
│ │ │ ├── unique-filename@1.1.1 deduped
│ │ │ └── y18n@4.0.0 deduped
│ │ ├─┬ find-cache-dir@2.0.0
│ │ │ ├── commondir@1.0.1 deduped
│ │ │ ├── make-dir@1.3.0 deduped
│ │ │ └─┬ pkg-dir@3.0.0
│ │ │   └─┬ find-up@3.0.0
│ │ │     └─┬ locate-path@3.0.0
│ │ │       ├─┬ p-locate@3.0.0
│ │ │       │ └─┬ p-limit@2.1.0
│ │ │       │   └── p-try@2.0.0
│ │ │       └── path-exists@3.0.0 deduped
│ │ ├── schema-utils@1.0.0 deduped
│ │ ├── serialize-javascript@1.6.1 deduped
│ │ ├── source-map@0.6.1 deduped
│ │ ├─┬ terser@3.16.1
│ │ │ ├── commander@2.17.1
│ │ │ ├── source-map@0.6.1 deduped
│ │ │ └── source-map-support@0.5.10 deduped
│ │ ├── webpack-sources@1.3.0 deduped
│ │ └─┬ worker-farm@1.6.0
│ │   └── errno@0.1.7 deduped
│ ├── tree-kill@1.2.1
│ ├─┬ webpack@4.29.0
│ │ ├─┬ @webassemblyjs/ast@1.7.11
│ │ │ ├── @webassemblyjs/helper-module-context@1.7.11 deduped
│ │ │ ├── @webassemblyjs/helper-wasm-bytecode@1.7.11
│ │ │ └─┬ @webassemblyjs/wast-parser@1.7.11
│ │ │   ├── @webassemblyjs/ast@1.7.11 deduped
│ │ │   ├── @webassemblyjs/floating-point-hex-parser@1.7.11
│ │ │   ├── @webassemblyjs/helper-api-error@1.7.11 deduped
│ │ │   ├─┬ @webassemblyjs/helper-code-frame@1.7.11
│ │ │   │ └── @webassemblyjs/wast-printer@1.7.11 deduped
│ │ │   ├── @webassemblyjs/helper-fsm@1.7.11
│ │ │   └── @xtuc/long@4.2.1
│ │ ├── @webassemblyjs/helper-module-context@1.7.11
│ │ ├─┬ @webassemblyjs/wasm-edit@1.7.11
│ │ │ ├── @webassemblyjs/ast@1.7.11 deduped
│ │ │ ├── @webassemblyjs/helper-buffer@1.7.11
│ │ │ ├── @webassemblyjs/helper-wasm-bytecode@1.7.11 deduped
│ │ │ ├─┬ @webassemblyjs/helper-wasm-section@1.7.11
│ │ │ │ ├── @webassemblyjs/ast@1.7.11 deduped
│ │ │ │ ├── @webassemblyjs/helper-buffer@1.7.11 deduped
│ │ │ │ ├── @webassemblyjs/helper-wasm-bytecode@1.7.11 deduped
│ │ │ │ └── @webassemblyjs/wasm-gen@1.7.11 deduped
│ │ │ ├─┬ @webassemblyjs/wasm-gen@1.7.11
│ │ │ │ ├── @webassemblyjs/ast@1.7.11 deduped
│ │ │ │ ├── @webassemblyjs/helper-wasm-bytecode@1.7.11 deduped
│ │ │ │ ├── @webassemblyjs/ieee754@1.7.11 deduped
│ │ │ │ ├── @webassemblyjs/leb128@1.7.11 deduped
│ │ │ │ └── @webassemblyjs/utf8@1.7.11 deduped
│ │ │ ├─┬ @webassemblyjs/wasm-opt@1.7.11
│ │ │ │ ├── @webassemblyjs/ast@1.7.11 deduped
│ │ │ │ ├── @webassemblyjs/helper-buffer@1.7.11 deduped
│ │ │ │ ├── @webassemblyjs/wasm-gen@1.7.11 deduped
│ │ │ │ └── @webassemblyjs/wasm-parser@1.7.11 deduped
│ │ │ ├── @webassemblyjs/wasm-parser@1.7.11 deduped
│ │ │ └─┬ @webassemblyjs/wast-printer@1.7.11
│ │ │   ├── @webassemblyjs/ast@1.7.11 deduped
│ │ │   ├── @webassemblyjs/wast-parser@1.7.11 deduped
│ │ │   └── @xtuc/long@4.2.1 deduped
│ │ ├─┬ @webassemblyjs/wasm-parser@1.7.11
│ │ │ ├── @webassemblyjs/ast@1.7.11 deduped
│ │ │ ├── @webassemblyjs/helper-api-error@1.7.11
│ │ │ ├── @webassemblyjs/helper-wasm-bytecode@1.7.11 deduped
│ │ │ ├─┬ @webassemblyjs/ieee754@1.7.11
│ │ │ │ └── @xtuc/ieee754@1.2.0
│ │ │ ├─┬ @webassemblyjs/leb128@1.7.11
│ │ │ │ └── @xtuc/long@4.2.1 deduped
│ │ │ └── @webassemblyjs/utf8@1.7.11
│ │ ├── acorn@6.1.0
│ │ ├── acorn-dynamic-import@4.0.0
│ │ ├─┬ ajv@6.9.1
│ │ │ ├── fast-deep-equal@2.0.1 deduped
│ │ │ ├── fast-json-stable-stringify@2.0.0 deduped
│ │ │ ├── json-schema-traverse@0.4.1 deduped
│ │ │ └── uri-js@4.2.2 deduped
│ │ ├── ajv-keywords@3.4.0
│ │ ├─┬ chrome-trace-event@1.0.0
│ │ │ └── tslib@1.9.3 deduped
│ │ ├── enhanced-resolve@4.1.0 deduped
│ │ ├─┬ eslint-scope@4.0.0
│ │ │ ├─┬ esrecurse@4.2.1
│ │ │ │ └── estraverse@4.2.0 deduped
│ │ │ └── estraverse@4.2.0
│ │ ├── json-parse-better-errors@1.0.2
│ │ ├── loader-runner@2.4.0
│ │ ├── loader-utils@1.2.3 deduped
│ │ ├─┬ memory-fs@0.4.1
│ │ │ ├── errno@0.1.7 deduped
│ │ │ └─┬ readable-stream@2.3.6
│ │ │   ├── core-util-is@1.0.2 deduped
│ │ │   ├── inherits@2.0.3 deduped
│ │ │   ├── isarray@1.0.0
│ │ │   ├── process-nextick-args@2.0.0
│ │ │   ├── safe-buffer@5.1.2 deduped
│ │ │   ├─┬ string_decoder@1.1.1
│ │ │   │ └── safe-buffer@5.1.2 deduped
│ │ │   └── util-deprecate@1.0.2
│ │ ├─┬ micromatch@3.1.10
│ │ │ ├── arr-diff@4.0.0
│ │ │ ├── array-unique@0.3.2
│ │ │ ├── braces@2.3.2 deduped
│ │ │ ├─┬ define-property@2.0.2
│ │ │ │ ├─┬ is-descriptor@1.0.2
│ │ │ │ │ ├─┬ is-accessor-descriptor@1.0.0
│ │ │ │ │ │ └── kind-of@6.0.2
│ │ │ │ │ ├─┬ is-data-descriptor@1.0.0
│ │ │ │ │ │ └── kind-of@6.0.2
│ │ │ │ │ └── kind-of@6.0.2
│ │ │ │ └── isobject@3.0.1 deduped
│ │ │ ├─┬ extend-shallow@3.0.2
│ │ │ │ ├── assign-symbols@1.0.0
│ │ │ │ └─┬ is-extendable@1.0.1
│ │ │ │   └── is-plain-object@2.0.4 deduped
│ │ │ ├─┬ extglob@2.0.4
│ │ │ │ ├── array-unique@0.3.2 deduped
│ │ │ │ ├─┬ define-property@1.0.0
│ │ │ │ │ └── is-descriptor@1.0.2 deduped
│ │ │ │ ├─┬ expand-brackets@2.1.4
│ │ │ │ │ ├── debug@2.6.9 deduped
│ │ │ │ │ ├── define-property@0.2.5 deduped
│ │ │ │ │ ├── extend-shallow@2.0.1 deduped
│ │ │ │ │ ├── posix-character-classes@0.1.1
│ │ │ │ │ ├── regex-not@1.0.2 deduped
│ │ │ │ │ ├── snapdragon@0.8.2 deduped
│ │ │ │ │ └── to-regex@3.0.2 deduped
│ │ │ │ ├── extend-shallow@2.0.1 deduped
│ │ │ │ ├── fragment-cache@0.2.1 deduped
│ │ │ │ ├── regex-not@1.0.2 deduped
│ │ │ │ ├── snapdragon@0.8.2 deduped
│ │ │ │ └── to-regex@3.0.2 deduped
│ │ │ ├─┬ fragment-cache@0.2.1
│ │ │ │ └── map-cache@0.2.2
│ │ │ ├── kind-of@6.0.2
│ │ │ ├─┬ nanomatch@1.2.13
│ │ │ │ ├── arr-diff@4.0.0 deduped
│ │ │ │ ├── array-unique@0.3.2 deduped
│ │ │ │ ├─┬ define-property@2.0.2
│ │ │ │ │ ├── is-descriptor@1.0.2 deduped
│ │ │ │ │ └── isobject@3.0.1 deduped
│ │ │ │ ├─┬ extend-shallow@3.0.2
│ │ │ │ │ ├── assign-symbols@1.0.0 deduped
│ │ │ │ │ └─┬ is-extendable@1.0.1
│ │ │ │ │   └── is-plain-object@2.0.4 deduped
│ │ │ │ ├── fragment-cache@0.2.1 deduped
│ │ │ │ ├── is-windows@1.0.2
│ │ │ │ ├── kind-of@6.0.2
│ │ │ │ ├── object.pick@1.3.0 deduped
│ │ │ │ ├── regex-not@1.0.2 deduped
│ │ │ │ ├── snapdragon@0.8.2 deduped
│ │ │ │ └── to-regex@3.0.2 deduped
│ │ │ ├─┬ object.pick@1.3.0
│ │ │ │ └── isobject@3.0.1 deduped
│ │ │ ├─┬ regex-not@1.0.2
│ │ │ │ ├─┬ extend-shallow@3.0.2
│ │ │ │ │ ├── assign-symbols@1.0.0 deduped
│ │ │ │ │ └─┬ is-extendable@1.0.1
│ │ │ │ │   └── is-plain-object@2.0.4 deduped
│ │ │ │ └─┬ safe-regex@1.1.0
│ │ │ │   └── ret@0.1.15
│ │ │ ├─┬ snapdragon@0.8.2
│ │ │ │ ├─┬ base@0.11.2
│ │ │ │ │ ├─┬ cache-base@1.0.1
│ │ │ │ │ │ ├─┬ collection-visit@1.0.0
│ │ │ │ │ │ │ ├─┬ map-visit@1.0.0
│ │ │ │ │ │ │ │ └── object-visit@1.0.1 deduped
│ │ │ │ │ │ │ └─┬ object-visit@1.0.1
│ │ │ │ │ │ │   └── isobject@3.0.1 deduped
│ │ │ │ │ │ ├── component-emitter@1.2.1 deduped
│ │ │ │ │ │ ├── get-value@2.0.6
│ │ │ │ │ │ ├─┬ has-value@1.0.0
│ │ │ │ │ │ │ ├── get-value@2.0.6 deduped
│ │ │ │ │ │ │ ├─┬ has-values@1.0.0
│ │ │ │ │ │ │ │ ├── is-number@3.0.0 deduped
│ │ │ │ │ │ │ │ └─┬ kind-of@4.0.0
│ │ │ │ │ │ │ │   └── is-buffer@1.1.6 deduped
│ │ │ │ │ │ │ └── isobject@3.0.1 deduped
│ │ │ │ │ │ ├── isobject@3.0.1 deduped
│ │ │ │ │ │ ├─┬ set-value@2.0.0
│ │ │ │ │ │ │ ├── extend-shallow@2.0.1 deduped
│ │ │ │ │ │ │ ├── is-extendable@0.1.1 deduped
│ │ │ │ │ │ │ ├── is-plain-object@2.0.4 deduped
│ │ │ │ │ │ │ └── split-string@3.1.0 deduped
│ │ │ │ │ │ ├─┬ to-object-path@0.3.0
│ │ │ │ │ │ │ └── kind-of@3.2.2 deduped
│ │ │ │ │ │ ├─┬ union-value@1.0.0
│ │ │ │ │ │ │ ├── arr-union@3.1.0 deduped
│ │ │ │ │ │ │ ├── get-value@2.0.6 deduped
│ │ │ │ │ │ │ ├── is-extendable@0.1.1 deduped
│ │ │ │ │ │ │ └─┬ set-value@0.4.3
│ │ │ │ │ │ │   ├── extend-shallow@2.0.1 deduped
│ │ │ │ │ │ │   ├── is-extendable@0.1.1 deduped
│ │ │ │ │ │ │   ├── is-plain-object@2.0.4 deduped
│ │ │ │ │ │ │   └── to-object-path@0.3.0 deduped
│ │ │ │ │ │ └─┬ unset-value@1.0.0
│ │ │ │ │ │   ├─┬ has-value@0.3.1
│ │ │ │ │ │   │ ├── get-value@2.0.6 deduped
│ │ │ │ │ │   │ ├── has-values@0.1.4
│ │ │ │ │ │   │ └─┬ isobject@2.1.0
│ │ │ │ │ │   │   └── isarray@1.0.0 deduped
│ │ │ │ │ │   └── isobject@3.0.1 deduped
│ │ │ │ │ ├─┬ class-utils@0.3.6
│ │ │ │ │ │ ├── arr-union@3.1.0
│ │ │ │ │ │ ├── define-property@0.2.5 deduped
│ │ │ │ │ │ ├── isobject@3.0.1 deduped
│ │ │ │ │ │ └─┬ static-extend@0.1.2
│ │ │ │ │ │   ├── define-property@0.2.5 deduped
│ │ │ │ │ │   └─┬ object-copy@0.1.0
│ │ │ │ │ │     ├── copy-descriptor@0.1.1
│ │ │ │ │ │     ├── define-property@0.2.5 deduped
│ │ │ │ │ │     └── kind-of@3.2.2 deduped
│ │ │ │ │ ├── component-emitter@1.2.1 deduped
│ │ │ │ │ ├─┬ define-property@1.0.0
│ │ │ │ │ │ └── is-descriptor@1.0.2 deduped
│ │ │ │ │ ├── isobject@3.0.1 deduped
│ │ │ │ │ ├─┬ mixin-deep@1.3.1
│ │ │ │ │ │ ├── for-in@1.0.2 deduped
│ │ │ │ │ │ └─┬ is-extendable@1.0.1
│ │ │ │ │ │   └── is-plain-object@2.0.4 deduped
│ │ │ │ │ └── pascalcase@0.1.1
│ │ │ │ ├── debug@2.6.9 deduped
│ │ │ │ ├─┬ define-property@0.2.5
│ │ │ │ │ └─┬ is-descriptor@0.1.6
│ │ │ │ │   ├─┬ is-accessor-descriptor@0.1.6
│ │ │ │ │   │ └─┬ kind-of@3.2.2
│ │ │ │ │   │   └── is-buffer@1.1.6 deduped
│ │ │ │ │   ├─┬ is-data-descriptor@0.1.4
│ │ │ │ │   │ └─┬ kind-of@3.2.2
│ │ │ │ │   │   └── is-buffer@1.1.6 deduped
│ │ │ │ │   └── kind-of@5.1.0
│ │ │ │ ├── extend-shallow@2.0.1 deduped
│ │ │ │ ├── map-cache@0.2.2 deduped
│ │ │ │ ├── source-map@0.5.7
│ │ │ │ ├─┬ source-map-resolve@0.5.2
│ │ │ │ │ ├── atob@2.1.2
│ │ │ │ │ ├── decode-uri-component@0.2.0
│ │ │ │ │ ├── resolve-url@0.2.1
│ │ │ │ │ ├── source-map-url@0.4.0
│ │ │ │ │ └── urix@0.1.0
│ │ │ │ └── use@3.1.1
│ │ │ └─┬ to-regex@3.0.2
│ │ │   ├─┬ define-property@2.0.2
│ │ │   │ ├── is-descriptor@1.0.2 deduped
│ │ │   │ └── isobject@3.0.1 deduped
│ │ │   ├─┬ extend-shallow@3.0.2
│ │ │   │ ├── assign-symbols@1.0.0 deduped
│ │ │   │ └─┬ is-extendable@1.0.1
│ │ │   │   └── is-plain-object@2.0.4 deduped
│ │ │   ├── regex-not@1.0.2 deduped
│ │ │   └── safe-regex@1.1.0 deduped
│ │ ├── mkdirp@0.5.1 deduped
│ │ ├── neo-async@2.6.0 deduped
│ │ ├─┬ node-libs-browser@2.2.0
│ │ │ ├─┬ assert@1.4.1
│ │ │ │ └─┬ util@0.10.3
│ │ │ │   └── inherits@2.0.1
│ │ │ ├─┬ browserify-zlib@0.2.0
│ │ │ │ └── pako@1.0.8 deduped
│ │ │ ├─┬ buffer@4.9.1
│ │ │ │ ├── base64-js@1.3.0
│ │ │ │ ├── ieee754@1.1.12
│ │ │ │ └── isarray@1.0.0 deduped
│ │ │ ├─┬ console-browserify@1.1.0
│ │ │ │ └── date-now@0.1.4
│ │ │ ├── constants-browserify@1.0.0
│ │ │ ├─┬ crypto-browserify@3.12.0
│ │ │ │ ├─┬ browserify-cipher@1.0.1
│ │ │ │ │ ├─┬ browserify-aes@1.2.0
│ │ │ │ │ │ ├── buffer-xor@1.0.3
│ │ │ │ │ │ ├── cipher-base@1.0.4 deduped
│ │ │ │ │ │ ├── create-hash@1.2.0 deduped
│ │ │ │ │ │ ├── evp_bytestokey@1.0.3 deduped
│ │ │ │ │ │ ├── inherits@2.0.3 deduped
│ │ │ │ │ │ └── safe-buffer@5.1.2 deduped
│ │ │ │ │ ├─┬ browserify-des@1.0.2
│ │ │ │ │ │ ├── cipher-base@1.0.4 deduped
│ │ │ │ │ │ ├─┬ des.js@1.0.0
│ │ │ │ │ │ │ ├── inherits@2.0.3 deduped
│ │ │ │ │ │ │ └── minimalistic-assert@1.0.1 deduped
│ │ │ │ │ │ ├── inherits@2.0.3 deduped
│ │ │ │ │ │ └── safe-buffer@5.1.2 deduped
│ │ │ │ │ └─┬ evp_bytestokey@1.0.3
│ │ │ │ │   ├── md5.js@1.3.5 deduped
│ │ │ │ │   └── safe-buffer@5.1.2 deduped
│ │ │ │ ├─┬ browserify-sign@4.0.4
│ │ │ │ │ ├── bn.js@4.11.8
│ │ │ │ │ ├─┬ browserify-rsa@4.0.1
│ │ │ │ │ │ ├── bn.js@4.11.8 deduped
│ │ │ │ │ │ └── randombytes@2.0.6 deduped
│ │ │ │ │ ├── create-hash@1.2.0 deduped
│ │ │ │ │ ├── create-hmac@1.1.7 deduped
│ │ │ │ │ ├─┬ elliptic@6.4.1
│ │ │ │ │ │ ├── bn.js@4.11.8 deduped
│ │ │ │ │ │ ├── brorand@1.1.0
│ │ │ │ │ │ ├─┬ hash.js@1.1.7
│ │ │ │ │ │ │ ├── inherits@2.0.3 deduped
│ │ │ │ │ │ │ └── minimalistic-assert@1.0.1 deduped
│ │ │ │ │ │ ├─┬ hmac-drbg@1.0.1
│ │ │ │ │ │ │ ├── hash.js@1.1.7 deduped
│ │ │ │ │ │ │ ├── minimalistic-assert@1.0.1 deduped
│ │ │ │ │ │ │ └── minimalistic-crypto-utils@1.0.1 deduped
│ │ │ │ │ │ ├── inherits@2.0.3 deduped
│ │ │ │ │ │ ├── minimalistic-assert@1.0.1 deduped
│ │ │ │ │ │ └── minimalistic-crypto-utils@1.0.1
│ │ │ │ │ ├── inherits@2.0.3 deduped
│ │ │ │ │ └─┬ parse-asn1@5.1.3
│ │ │ │ │   ├─┬ asn1.js@4.10.1
│ │ │ │ │   │ ├── bn.js@4.11.8 deduped
│ │ │ │ │   │ ├── inherits@2.0.3 deduped
│ │ │ │ │   │ └── minimalistic-assert@1.0.1 deduped
│ │ │ │ │   ├── browserify-aes@1.2.0 deduped
│ │ │ │ │   ├── create-hash@1.2.0 deduped
│ │ │ │ │   ├── evp_bytestokey@1.0.3 deduped
│ │ │ │ │   ├── pbkdf2@3.0.17 deduped
│ │ │ │ │   └── safe-buffer@5.1.2 deduped
│ │ │ │ ├─┬ create-ecdh@4.0.3
│ │ │ │ │ ├── bn.js@4.11.8 deduped
│ │ │ │ │ └── elliptic@6.4.1 deduped
│ │ │ │ ├─┬ create-hash@1.2.0
│ │ │ │ │ ├─┬ cipher-base@1.0.4
│ │ │ │ │ │ ├── inherits@2.0.3 deduped
│ │ │ │ │ │ └── safe-buffer@5.1.2 deduped
│ │ │ │ │ ├── inherits@2.0.3 deduped
│ │ │ │ │ ├─┬ md5.js@1.3.5
│ │ │ │ │ │ ├─┬ hash-base@3.0.4
│ │ │ │ │ │ │ ├── inherits@2.0.3 deduped
│ │ │ │ │ │ │ └── safe-buffer@5.1.2 deduped
│ │ │ │ │ │ ├── inherits@2.0.3 deduped
│ │ │ │ │ │ └── safe-buffer@5.1.2 deduped
│ │ │ │ │ ├─┬ ripemd160@2.0.2
│ │ │ │ │ │ ├── hash-base@3.0.4 deduped
│ │ │ │ │ │ └── inherits@2.0.3 deduped
│ │ │ │ │ └─┬ sha.js@2.4.11
│ │ │ │ │   ├── inherits@2.0.3 deduped
│ │ │ │ │   └── safe-buffer@5.1.2 deduped
│ │ │ │ ├─┬ create-hmac@1.1.7
│ │ │ │ │ ├── cipher-base@1.0.4 deduped
│ │ │ │ │ ├── create-hash@1.2.0 deduped
│ │ │ │ │ ├── inherits@2.0.3 deduped
│ │ │ │ │ ├── ripemd160@2.0.2 deduped
│ │ │ │ │ ├── safe-buffer@5.1.2 deduped
│ │ │ │ │ └── sha.js@2.4.11 deduped
│ │ │ │ ├─┬ diffie-hellman@5.0.3
│ │ │ │ │ ├── bn.js@4.11.8 deduped
│ │ │ │ │ ├─┬ miller-rabin@4.0.1
│ │ │ │ │ │ ├── bn.js@4.11.8 deduped
│ │ │ │ │ │ └── brorand@1.1.0 deduped
│ │ │ │ │ └── randombytes@2.0.6 deduped
│ │ │ │ ├── inherits@2.0.3 deduped
│ │ │ │ ├─┬ pbkdf2@3.0.17
│ │ │ │ │ ├── create-hash@1.2.0 deduped
│ │ │ │ │ ├── create-hmac@1.1.7 deduped
│ │ │ │ │ ├── ripemd160@2.0.2 deduped
│ │ │ │ │ ├── safe-buffer@5.1.2 deduped
│ │ │ │ │ └── sha.js@2.4.11 deduped
│ │ │ │ ├─┬ public-encrypt@4.0.3
│ │ │ │ │ ├── bn.js@4.11.8 deduped
│ │ │ │ │ ├── browserify-rsa@4.0.1 deduped
│ │ │ │ │ ├── create-hash@1.2.0 deduped
│ │ │ │ │ ├── parse-asn1@5.1.3 deduped
│ │ │ │ │ ├── randombytes@2.0.6 deduped
│ │ │ │ │ └── safe-buffer@5.1.2 deduped
│ │ │ │ ├─┬ randombytes@2.0.6
│ │ │ │ │ └── safe-buffer@5.1.2 deduped
│ │ │ │ └─┬ randomfill@1.0.4
│ │ │ │   ├── randombytes@2.0.6 deduped
│ │ │ │   └── safe-buffer@5.1.2 deduped
│ │ │ ├── domain-browser@1.2.0
│ │ │ ├── events@3.0.0
│ │ │ ├── https-browserify@1.0.0
│ │ │ ├── os-browserify@0.3.0
│ │ │ ├── path-browserify@0.0.0
│ │ │ ├── process@0.11.10
│ │ │ ├── punycode@1.4.1
│ │ │ ├── querystring-es3@0.2.1
│ │ │ ├── readable-stream@2.3.6 deduped
│ │ │ ├─┬ stream-browserify@2.0.2
│ │ │ │ ├── inherits@2.0.3 deduped
│ │ │ │ └── readable-stream@2.3.6 deduped
│ │ │ ├─┬ stream-http@2.8.3
│ │ │ │ ├── builtin-status-codes@3.0.0
│ │ │ │ ├── inherits@2.0.3 deduped
│ │ │ │ ├── readable-stream@2.3.6 deduped
│ │ │ │ ├── to-arraybuffer@1.0.1
│ │ │ │ └── xtend@4.0.1
│ │ │ ├─┬ string_decoder@1.2.0
│ │ │ │ └── safe-buffer@5.1.2 deduped
│ │ │ ├─┬ timers-browserify@2.0.10
│ │ │ │ └── setimmediate@1.0.5
│ │ │ ├── tty-browserify@0.0.0
│ │ │ ├── url@0.11.0 deduped
│ │ │ ├─┬ util@0.11.1
│ │ │ │ └── inherits@2.0.3 deduped
│ │ │ └─┬ vm-browserify@0.0.4
│ │ │   └── indexof@0.0.1 deduped
│ │ ├─┬ schema-utils@0.4.7
│ │ │ ├── ajv@6.9.1 deduped
│ │ │ └── ajv-keywords@3.4.0 deduped
│ │ ├── tapable@1.1.1
│ │ ├── terser-webpack-plugin@1.2.2 deduped
│ │ ├─┬ watchpack@1.6.0
│ │ │ ├─┬ chokidar@2.1.1
│ │ │ │ ├── anymatch@2.0.0 deduped
│ │ │ │ ├── async-each@1.0.1 deduped
│ │ │ │ ├── braces@2.3.2 deduped
│ │ │ │ ├── UNMET OPTIONAL DEPENDENCY fsevents@^1.2.7
│ │ │ │ ├─┬ glob-parent@3.1.0
│ │ │ │ │ ├─┬ is-glob@3.1.0
│ │ │ │ │ │ └── is-extglob@2.1.1 deduped
│ │ │ │ │ └── path-dirname@1.0.2 deduped
│ │ │ │ ├── inherits@2.0.3 deduped
│ │ │ │ ├── is-binary-path@1.0.1 deduped
│ │ │ │ ├─┬ is-glob@4.0.0
│ │ │ │ │ └── is-extglob@2.1.1
│ │ │ │ ├── normalize-path@3.0.0
│ │ │ │ ├── path-is-absolute@1.0.1 deduped
│ │ │ │ ├── readdirp@2.2.1 deduped
│ │ │ │ └── upath@1.1.0 deduped
│ │ │ ├── graceful-fs@4.1.15 deduped
│ │ │ └── neo-async@2.6.0 deduped
│ │ └── webpack-sources@1.3.0 deduped
│ ├─┬ webpack-dev-middleware@3.5.1
│ │ ├── memory-fs@0.4.1 deduped
│ │ ├── mime@2.4.0
│ │ ├── range-parser@1.2.0 deduped
│ │ └─┬ webpack-log@2.0.0
│ │   ├── ansi-colors@3.2.3
│ │   └── uuid@3.3.2 deduped
│ ├─┬ webpack-dev-server@3.1.14
│ │ ├── ansi-html@0.0.7
│ │ ├─┬ bonjour@3.5.0
│ │ │ ├── array-flatten@2.1.2
│ │ │ ├── deep-equal@1.0.1
│ │ │ ├── dns-equal@1.0.0
│ │ │ ├─┬ dns-txt@2.0.2
│ │ │ │ └── buffer-indexof@1.1.1
│ │ │ ├─┬ multicast-dns@6.2.3
│ │ │ │ ├─┬ dns-packet@1.3.1
│ │ │ │ │ ├── ip@1.1.5 deduped
│ │ │ │ │ └── safe-buffer@5.1.2 deduped
│ │ │ │ └── thunky@1.0.3
│ │ │ └── multicast-dns-service-types@1.1.0
│ │ ├─┬ chokidar@2.1.1
│ │ │ ├── anymatch@2.0.0 deduped
│ │ │ ├── async-each@1.0.1 deduped
│ │ │ ├── braces@2.3.2 deduped
│ │ │ ├── UNMET OPTIONAL DEPENDENCY fsevents@^1.2.7
│ │ │ ├─┬ glob-parent@3.1.0
│ │ │ │ ├─┬ is-glob@3.1.0
│ │ │ │ │ └── is-extglob@2.1.1 deduped
│ │ │ │ └── path-dirname@1.0.2 deduped
│ │ │ ├── inherits@2.0.3 deduped
│ │ │ ├── is-binary-path@1.0.1 deduped
│ │ │ ├─┬ is-glob@4.0.0
│ │ │ │ └── is-extglob@2.1.1
│ │ │ ├── normalize-path@3.0.0
│ │ │ ├── path-is-absolute@1.0.1 deduped
│ │ │ ├── readdirp@2.2.1 deduped
│ │ │ └── upath@1.1.0 deduped
│ │ ├─┬ compression@1.7.3
│ │ │ ├─┬ accepts@1.3.5
│ │ │ │ ├── mime-types@2.1.21 deduped
│ │ │ │ └── negotiator@0.6.1
│ │ │ ├── bytes@3.0.0 deduped
│ │ │ ├─┬ compressible@2.0.15
│ │ │ │ └── mime-db@1.38.0
│ │ │ ├── debug@2.6.9 deduped
│ │ │ ├── on-headers@1.0.1
│ │ │ ├── safe-buffer@5.1.2 deduped
│ │ │ └── vary@1.1.2
│ │ ├── connect-history-api-fallback@1.6.0
│ │ ├─┬ debug@3.2.6
│ │ │ └── ms@2.1.1
│ │ ├─┬ del@3.0.0
│ │ │ ├─┬ globby@6.1.0
│ │ │ │ ├── array-union@1.0.2 deduped
│ │ │ │ ├── glob@7.1.3 deduped
│ │ │ │ ├── object-assign@4.1.1 deduped
│ │ │ │ ├── pify@2.3.0
│ │ │ │ └── pinkie-promise@2.0.1 deduped
│ │ │ ├── is-path-cwd@1.0.0
│ │ │ ├─┬ is-path-in-cwd@1.0.1
│ │ │ │ └─┬ is-path-inside@1.0.1
│ │ │ │   └── path-is-inside@1.0.2
│ │ │ ├── p-map@1.2.0
│ │ │ ├── pify@3.0.0
│ │ │ └── rimraf@2.6.3 deduped
│ │ ├─┬ express@4.16.4
│ │ │ ├── accepts@1.3.5 deduped
│ │ │ ├── array-flatten@1.1.1
│ │ │ ├── body-parser@1.18.3 deduped
│ │ │ ├── content-disposition@0.5.2
│ │ │ ├── content-type@1.0.4 deduped
│ │ │ ├── cookie@0.3.1
│ │ │ ├── cookie-signature@1.0.6
│ │ │ ├── debug@2.6.9 deduped
│ │ │ ├── depd@1.1.2 deduped
│ │ │ ├── encodeurl@1.0.2
│ │ │ ├── escape-html@1.0.3
│ │ │ ├── etag@1.8.1
│ │ │ ├─┬ finalhandler@1.1.1
│ │ │ │ ├── debug@2.6.9 deduped
│ │ │ │ ├── encodeurl@1.0.2 deduped
│ │ │ │ ├── escape-html@1.0.3 deduped
│ │ │ │ ├── on-finished@2.3.0 deduped
│ │ │ │ ├── parseurl@1.3.2 deduped
│ │ │ │ ├── statuses@1.4.0 deduped
│ │ │ │ └── unpipe@1.0.0 deduped
│ │ │ ├── fresh@0.5.2
│ │ │ ├── merge-descriptors@1.0.1
│ │ │ ├── methods@1.1.2
│ │ │ ├── on-finished@2.3.0 deduped
│ │ │ ├── parseurl@1.3.2 deduped
│ │ │ ├── path-to-regexp@0.1.7
│ │ │ ├─┬ proxy-addr@2.0.4
│ │ │ │ ├── forwarded@0.1.2
│ │ │ │ └── ipaddr.js@1.8.0
│ │ │ ├── qs@6.5.2 deduped
│ │ │ ├── range-parser@1.2.0 deduped
│ │ │ ├── safe-buffer@5.1.2 deduped
│ │ │ ├─┬ send@0.16.2
│ │ │ │ ├── debug@2.6.9 deduped
│ │ │ │ ├── depd@1.1.2 deduped
│ │ │ │ ├── destroy@1.0.4
│ │ │ │ ├── encodeurl@1.0.2 deduped
│ │ │ │ ├── escape-html@1.0.3 deduped
│ │ │ │ ├── etag@1.8.1 deduped
│ │ │ │ ├── fresh@0.5.2 deduped
│ │ │ │ ├── http-errors@1.6.3 deduped
│ │ │ │ ├── mime@1.4.1
│ │ │ │ ├── ms@2.0.0 deduped
│ │ │ │ ├── on-finished@2.3.0 deduped
│ │ │ │ ├── range-parser@1.2.0 deduped
│ │ │ │ └── statuses@1.4.0 deduped
│ │ │ ├─┬ serve-static@1.13.2
│ │ │ │ ├── encodeurl@1.0.2 deduped
│ │ │ │ ├── escape-html@1.0.3 deduped
│ │ │ │ ├── parseurl@1.3.2 deduped
│ │ │ │ └── send@0.16.2 deduped
│ │ │ ├── setprototypeof@1.1.0
│ │ │ ├── statuses@1.4.0
│ │ │ ├── type-is@1.6.16 deduped
│ │ │ ├── utils-merge@1.0.1 deduped
│ │ │ └── vary@1.1.2 deduped
│ │ ├── html-entities@1.2.1
│ │ ├─┬ http-proxy-middleware@0.18.0
│ │ │ ├── http-proxy@1.17.0 deduped
│ │ │ ├─┬ is-glob@4.0.0
│ │ │ │ └── is-extglob@2.1.1
│ │ │ ├── lodash@4.17.11 deduped
│ │ │ └── micromatch@3.1.10 deduped
│ │ ├─┬ import-local@2.0.0
│ │ │ ├── pkg-dir@3.0.0 deduped
│ │ │ └─┬ resolve-cwd@2.0.0
│ │ │   └── resolve-from@3.0.0
│ │ ├─┬ internal-ip@3.0.1
│ │ │ ├─┬ default-gateway@2.7.2
│ │ │ │ ├─┬ execa@0.10.0
│ │ │ │ │ ├─┬ cross-spawn@6.0.5
│ │ │ │ │ │ ├── nice-try@1.0.5
│ │ │ │ │ │ ├── path-key@2.0.1 deduped
│ │ │ │ │ │ ├── semver@5.6.0 deduped
│ │ │ │ │ │ ├── shebang-command@1.2.0 deduped
│ │ │ │ │ │ └── which@1.3.1 deduped
│ │ │ │ │ ├── get-stream@3.0.0 deduped
│ │ │ │ │ ├── is-stream@1.1.0 deduped
│ │ │ │ │ ├── npm-run-path@2.0.2 deduped
│ │ │ │ │ ├── p-finally@1.0.0 deduped
│ │ │ │ │ ├── signal-exit@3.0.2 deduped
│ │ │ │ │ └── strip-eof@1.0.0 deduped
│ │ │ │ └── ip-regex@2.1.0
│ │ │ └── ipaddr.js@1.9.0
│ │ ├── ip@1.1.5
│ │ ├── killable@1.0.1
│ │ ├── loglevel@1.6.1
│ │ ├── opn@5.4.0 deduped
│ │ ├─┬ portfinder@1.0.20
│ │ │ ├── async@1.5.2
│ │ │ ├── debug@2.6.9 deduped
│ │ │ └── mkdirp@0.5.1 deduped
│ │ ├── schema-utils@1.0.0 deduped
│ │ ├─┬ selfsigned@1.10.4
│ │ │ └── node-forge@0.7.5
│ │ ├── semver@5.6.0 deduped
│ │ ├─┬ serve-index@1.9.1
│ │ │ ├── accepts@1.3.5 deduped
│ │ │ ├── batch@0.6.1
│ │ │ ├── debug@2.6.9 deduped
│ │ │ ├── escape-html@1.0.3 deduped
│ │ │ ├── http-errors@1.6.3 deduped
│ │ │ ├── mime-types@2.1.21 deduped
│ │ │ └── parseurl@1.3.2 deduped
│ │ ├─┬ sockjs@0.3.19
│ │ │ ├─┬ faye-websocket@0.10.0
│ │ │ │ └─┬ websocket-driver@0.7.0
│ │ │ │   ├── http-parser-js@0.5.0
│ │ │ │   └── websocket-extensions@0.1.3
│ │ │ └── uuid@3.3.2 deduped
│ │ ├─┬ sockjs-client@1.3.0
│ │ │ ├─┬ debug@3.2.6
│ │ │ │ └── ms@2.1.1
│ │ │ ├─┬ eventsource@1.0.7
│ │ │ │ └─┬ original@1.0.2
│ │ │ │   └── url-parse@1.4.4 deduped
│ │ │ ├─┬ faye-websocket@0.11.1
│ │ │ │ └── websocket-driver@0.7.0 deduped
│ │ │ ├── inherits@2.0.3 deduped
│ │ │ ├── json3@3.3.2
│ │ │ └─┬ url-parse@1.4.4
│ │ │   ├── querystringify@2.1.0
│ │ │   └── requires-port@1.0.0 deduped
│ │ ├─┬ spdy@4.0.0
│ │ │ ├─┬ debug@4.1.1
│ │ │ │ └── ms@2.1.1
│ │ │ ├── handle-thing@2.0.0
│ │ │ ├── http-deceiver@1.2.7
│ │ │ ├── select-hose@2.0.0
│ │ │ └─┬ spdy-transport@3.0.0
│ │ │   ├─┬ debug@4.1.1
│ │ │   │ └── ms@2.1.1
│ │ │   ├── detect-node@2.0.4
│ │ │   ├─┬ hpack.js@2.1.6
│ │ │   │ ├── inherits@2.0.3 deduped
│ │ │   │ ├── obuf@1.1.2 deduped
│ │ │   │ ├── readable-stream@2.3.6 deduped
│ │ │   │ └── wbuf@1.7.3 deduped
│ │ │   ├── obuf@1.1.2
│ │ │   ├─┬ readable-stream@3.1.1
│ │ │   │ ├── inherits@2.0.3 deduped
│ │ │   │ ├─┬ string_decoder@1.2.0
│ │ │   │ │ └── safe-buffer@5.1.2 deduped
│ │ │   │ └── util-deprecate@1.0.2 deduped
│ │ │   └─┬ wbuf@1.7.3
│ │ │     └── minimalistic-assert@1.0.1
│ │ ├─┬ strip-ansi@3.0.1
│ │ │ └── ansi-regex@2.1.1
│ │ ├─┬ supports-color@5.5.0
│ │ │ └── has-flag@3.0.0 deduped
│ │ ├─┬ url@0.11.0
│ │ │ ├── punycode@1.3.2
│ │ │ └── querystring@0.2.0
│ │ ├─┬ webpack-dev-middleware@3.4.0
│ │ │ ├── memory-fs@0.4.1 deduped
│ │ │ ├── mime@2.4.0
│ │ │ ├── range-parser@1.2.0 deduped
│ │ │ └── webpack-log@2.0.0 deduped
│ │ ├── webpack-log@2.0.0 deduped
│ │ └─┬ yargs@12.0.2
│ │   ├─┬ cliui@4.1.0
│ │   │ ├── string-width@2.1.1 deduped
│ │   │ ├─┬ strip-ansi@4.0.0
│ │   │ │ └── ansi-regex@3.0.0
│ │   │ └── wrap-ansi@2.1.0 deduped
│ │   ├─┬ decamelize@2.0.0
│ │   │ └── xregexp@4.0.0
│ │   ├─┬ find-up@3.0.0
│ │   │ └─┬ locate-path@3.0.0
│ │   │   ├─┬ p-locate@3.0.0
│ │   │   │ └─┬ p-limit@2.1.0
│ │   │   │   └── p-try@2.0.0
│ │   │   └── path-exists@3.0.0
│ │   ├── get-caller-file@1.0.3 deduped
│ │   ├─┬ os-locale@3.1.0
│ │   │ ├─┬ execa@1.0.0
│ │   │ │ ├─┬ cross-spawn@6.0.5
│ │   │ │ │ ├── nice-try@1.0.5 deduped
│ │   │ │ │ ├── path-key@2.0.1 deduped
│ │   │ │ │ ├── semver@5.6.0 deduped
│ │   │ │ │ ├── shebang-command@1.2.0 deduped
│ │   │ │ │ └── which@1.3.1 deduped
│ │   │ │ ├─┬ get-stream@4.1.0
│ │   │ │ │ └─┬ pump@3.0.0
│ │   │ │ │   ├── end-of-stream@1.4.1 deduped
│ │   │ │ │   └── once@1.4.0 deduped
│ │   │ │ ├── is-stream@1.1.0 deduped
│ │   │ │ ├── npm-run-path@2.0.2 deduped
│ │   │ │ ├── p-finally@1.0.0 deduped
│ │   │ │ ├── signal-exit@3.0.2 deduped
│ │   │ │ └── strip-eof@1.0.0 deduped
│ │   │ ├─┬ lcid@2.0.0
│ │   │ │ └── invert-kv@2.0.0
│ │   │ └─┬ mem@4.1.0
│ │   │   ├─┬ map-age-cleaner@0.1.3
│ │   │   │ └── p-defer@1.0.0
│ │   │   ├── mimic-fn@1.2.0 deduped
│ │   │   └── p-is-promise@2.0.0
│ │   ├── require-directory@2.1.1 deduped
│ │   ├── require-main-filename@1.0.1 deduped
│ │   ├── set-blocking@2.0.0 deduped
│ │   ├── string-width@2.1.1 deduped
│ │   ├── which-module@2.0.0 deduped
│ │   ├── y18n@4.0.0 deduped
│ │   └─┬ yargs-parser@10.1.0
│ │     └── camelcase@4.1.0 deduped
│ ├─┬ webpack-merge@4.2.1
│ │ └── lodash@4.17.11 deduped
│ ├─┬ webpack-sources@1.3.0
│ │ ├── source-list-map@2.0.1
│ │ └── source-map@0.6.1 deduped
│ └─┬ webpack-subresource-integrity@1.1.0-rc.6
│   └─┬ webpack-core@0.6.9
│     ├── source-list-map@0.1.8
│     └─┬ source-map@0.4.4
│       └── amdefine@1.0.1 deduped
├─┬ @angular/animations@7.2.4
│ └── tslib@1.9.3 deduped
├─┬ @angular/cli@7.3.1
│ ├── @angular-devkit/architect@0.13.1 deduped
│ ├── @angular-devkit/core@7.3.1 deduped
│ ├─┬ @angular-devkit/schematics@7.3.1
│ │ ├── @angular-devkit/core@7.3.1 deduped
│ │ └─┬ rxjs@6.3.3
│ │   └── tslib@1.9.3 deduped
│ ├─┬ @schematics/angular@7.3.1
│ │ ├── @angular-devkit/core@7.3.1 deduped
│ │ ├── @angular-devkit/schematics@7.3.1 deduped
│ │ └── typescript@3.2.4 deduped
│ ├─┬ @schematics/update@0.13.1
│ │ ├── @angular-devkit/core@7.3.1 deduped
│ │ ├── @angular-devkit/schematics@7.3.1 deduped
│ │ ├── @yarnpkg/lockfile@1.1.0 deduped
│ │ ├── ini@1.3.5 deduped
│ │ ├── pacote@9.4.0 deduped
│ │ ├─┬ rxjs@6.3.3
│ │ │ └── tslib@1.9.3 deduped
│ │ ├── semver@5.6.0 deduped
│ │ └─┬ semver-intersect@1.4.0
│ │   └── semver@5.6.0 deduped
│ ├── @yarnpkg/lockfile@1.1.0
│ ├── ini@1.3.5
│ ├─┬ inquirer@6.2.1
│ │ ├── ansi-escapes@3.2.0
│ │ ├── chalk@2.4.2 deduped
│ │ ├─┬ cli-cursor@2.1.0
│ │ │ └─┬ restore-cursor@2.0.0
│ │ │   ├─┬ onetime@2.0.1
│ │ │   │ └── mimic-fn@1.2.0 deduped
│ │ │   └── signal-exit@3.0.2
│ │ ├── cli-width@2.2.0
│ │ ├─┬ external-editor@3.0.3
│ │ │ ├── chardet@0.7.0
│ │ │ ├─┬ iconv-lite@0.4.24
│ │ │ │ └── safer-buffer@2.1.2 deduped
│ │ │ └── tmp@0.0.33 deduped
│ │ ├─┬ figures@2.0.0
│ │ │ └── escape-string-regexp@1.0.5 deduped
│ │ ├── lodash@4.17.11 deduped
│ │ ├── mute-stream@0.0.7
│ │ ├─┬ run-async@2.3.0
│ │ │ └── is-promise@2.1.0
│ │ ├── rxjs@6.4.0 deduped
│ │ ├─┬ string-width@2.1.1
│ │ │ ├── is-fullwidth-code-point@2.0.0
│ │ │ └─┬ strip-ansi@4.0.0
│ │ │   └── ansi-regex@3.0.0
│ │ ├─┬ strip-ansi@5.0.0
│ │ │ └── ansi-regex@4.0.0
│ │ └── through@2.3.8
│ ├─┬ npm-package-arg@6.1.0
│ │ ├── hosted-git-info@2.7.1
│ │ ├─┬ osenv@0.1.5
│ │ │ ├── os-homedir@1.0.2
│ │ │ └── os-tmpdir@1.0.2 deduped
│ │ ├── semver@5.6.0 deduped
│ │ └─┬ validate-npm-package-name@3.0.0
│ │   └── builtins@1.0.3
│ ├── opn@5.4.0 deduped
│ ├─┬ pacote@9.4.0
│ │ ├── bluebird@3.5.3 deduped
│ │ ├── cacache@11.3.2 deduped
│ │ ├── figgy-pudding@3.5.1
│ │ ├─┬ get-stream@4.1.0
│ │ │ └─┬ pump@3.0.0
│ │ │   ├── end-of-stream@1.4.1 deduped
│ │ │   └── once@1.4.0 deduped
│ │ ├── glob@7.1.3 deduped
│ │ ├─┬ lru-cache@5.1.1
│ │ │ └── yallist@3.0.3 deduped
│ │ ├─┬ make-fetch-happen@4.0.1
│ │ │ ├─┬ agentkeepalive@3.5.2
│ │ │ │ └─┬ humanize-ms@1.2.1
│ │ │ │   └── ms@2.1.1
│ │ │ ├── cacache@11.3.2 deduped
│ │ │ ├── http-cache-semantics@3.8.1
│ │ │ ├─┬ http-proxy-agent@2.1.0
│ │ │ │ ├── agent-base@4.2.1 deduped
│ │ │ │ └─┬ debug@3.1.0
│ │ │ │   └── ms@2.0.0 deduped
│ │ │ ├── https-proxy-agent@2.2.1 deduped
│ │ │ ├── lru-cache@4.1.5 deduped
│ │ │ ├── mississippi@3.0.0 deduped
│ │ │ ├─┬ node-fetch-npm@2.0.2
│ │ │ │ ├─┬ encoding@0.1.12
│ │ │ │ │ └── iconv-lite@0.4.24 deduped
│ │ │ │ ├── json-parse-better-errors@1.0.2 deduped
│ │ │ │ └── safe-buffer@5.1.2 deduped
│ │ │ ├── promise-retry@1.1.1 deduped
│ │ │ ├─┬ socks-proxy-agent@4.0.1
│ │ │ │ ├── agent-base@4.2.1 deduped
│ │ │ │ └─┬ socks@2.2.3
│ │ │ │   ├── ip@1.1.5 deduped
│ │ │ │   └── smart-buffer@4.0.2
│ │ │ └── ssri@6.0.1 deduped
│ │ ├── minimatch@3.0.4 deduped
│ │ ├─┬ minipass@2.3.5
│ │ │ ├── safe-buffer@5.1.2 deduped
│ │ │ └── yallist@3.0.3
│ │ ├─┬ mississippi@3.0.0
│ │ │ ├── concat-stream@1.6.2 deduped
│ │ │ ├─┬ duplexify@3.7.1
│ │ │ │ ├── end-of-stream@1.4.1 deduped
│ │ │ │ ├── inherits@2.0.3 deduped
│ │ │ │ ├── readable-stream@2.3.6 deduped
│ │ │ │ └── stream-shift@1.0.0
│ │ │ ├─┬ end-of-stream@1.4.1
│ │ │ │ └── once@1.4.0 deduped
│ │ │ ├─┬ flush-write-stream@1.1.1
│ │ │ │ ├── inherits@2.0.3 deduped
│ │ │ │ └── readable-stream@2.3.6 deduped
│ │ │ ├─┬ from2@2.3.0
│ │ │ │ ├── inherits@2.0.3 deduped
│ │ │ │ └── readable-stream@2.3.6 deduped
│ │ │ ├─┬ parallel-transform@1.1.0
│ │ │ │ ├── cyclist@0.2.2
│ │ │ │ ├── inherits@2.0.3 deduped
│ │ │ │ └── readable-stream@2.3.6 deduped
│ │ │ ├─┬ pump@3.0.0
│ │ │ │ ├── end-of-stream@1.4.1 deduped
│ │ │ │ └── once@1.4.0 deduped
│ │ │ ├─┬ pumpify@1.5.1
│ │ │ │ ├── duplexify@3.7.1 deduped
│ │ │ │ ├── inherits@2.0.3 deduped
│ │ │ │ └── pump@2.0.1 deduped
│ │ │ ├─┬ stream-each@1.2.3
│ │ │ │ ├── end-of-stream@1.4.1 deduped
│ │ │ │ └── stream-shift@1.0.0 deduped
│ │ │ └─┬ through2@2.0.5
│ │ │   ├── readable-stream@2.3.6 deduped
│ │ │   └── xtend@4.0.1 deduped
│ │ ├── mkdirp@0.5.1 deduped
│ │ ├─┬ normalize-package-data@2.5.0
│ │ │ ├── hosted-git-info@2.7.1 deduped
│ │ │ ├── resolve@1.10.0 deduped
│ │ │ ├── semver@5.6.0 deduped
│ │ │ └─┬ validate-npm-package-license@3.0.4
│ │ │   ├─┬ spdx-correct@3.1.0
│ │ │   │ ├── spdx-expression-parse@3.0.0 deduped
│ │ │   │ └── spdx-license-ids@3.0.3
│ │ │   └─┬ spdx-expression-parse@3.0.0
│ │ │     ├── spdx-exceptions@2.2.0
│ │ │     └── spdx-license-ids@3.0.3 deduped
│ │ ├── npm-package-arg@6.1.0 deduped
│ │ ├─┬ npm-packlist@1.3.0
│ │ │ ├─┬ ignore-walk@3.0.1
│ │ │ │ └── minimatch@3.0.4 deduped
│ │ │ └── npm-bundled@1.0.6
│ │ ├─┬ npm-pick-manifest@2.2.3
│ │ │ ├── figgy-pudding@3.5.1 deduped
│ │ │ ├── npm-package-arg@6.1.0 deduped
│ │ │ └── semver@5.6.0 deduped
│ │ ├─┬ npm-registry-fetch@3.9.0
│ │ │ ├── bluebird@3.5.3 deduped
│ │ │ ├── figgy-pudding@3.5.1 deduped
│ │ │ ├─┬ JSONStream@1.3.5
│ │ │ │ ├── jsonparse@1.3.1
│ │ │ │ └── through@2.3.8 deduped
│ │ │ ├── lru-cache@4.1.5 deduped
│ │ │ ├── make-fetch-happen@4.0.1 deduped
│ │ │ └── npm-package-arg@6.1.0 deduped
│ │ ├── osenv@0.1.5 deduped
│ │ ├── promise-inflight@1.0.1
│ │ ├─┬ promise-retry@1.1.1
│ │ │ ├── err-code@1.1.2
│ │ │ └── retry@0.10.1
│ │ ├─┬ protoduck@5.0.1
│ │ │ └── genfun@5.0.0
│ │ ├── rimraf@2.6.3 deduped
│ │ ├── safe-buffer@5.1.2 deduped
│ │ ├── semver@5.6.0 deduped
│ │ ├─┬ ssri@6.0.1
│ │ │ └── figgy-pudding@3.5.1 deduped
│ │ ├─┬ tar@4.4.8
│ │ │ ├── chownr@1.1.1 deduped
│ │ │ ├─┬ fs-minipass@1.2.5
│ │ │ │ └── minipass@2.3.5 deduped
│ │ │ ├── minipass@2.3.5 deduped
│ │ │ ├─┬ minizlib@1.2.1
│ │ │ │ └── minipass@2.3.5 deduped
│ │ │ ├── mkdirp@0.5.1 deduped
│ │ │ ├── safe-buffer@5.1.2 deduped
│ │ │ └── yallist@3.0.3 deduped
│ │ ├─┬ unique-filename@1.1.1
│ │ │ └─┬ unique-slug@2.0.1
│ │ │   └── imurmurhash@0.1.4
│ │ └── which@1.3.1 deduped
│ ├── semver@5.6.0 deduped
│ └── symbol-observable@1.2.0
├─┬ @angular/common@7.2.4
│ └── tslib@1.9.3 deduped
├─┬ @angular/compiler@7.2.4
│ └── tslib@1.9.3 deduped
├─┬ @angular/compiler-cli@7.2.4
│ ├── canonical-path@1.0.0
│ ├─┬ chokidar@1.7.0
│ │ ├─┬ anymatch@1.3.2
│ │ │ ├─┬ micromatch@2.3.11
│ │ │ │ ├─┬ arr-diff@2.0.0
│ │ │ │ │ └── arr-flatten@1.1.0 deduped
│ │ │ │ ├── array-unique@0.2.1
│ │ │ │ ├─┬ braces@1.8.5
│ │ │ │ │ ├─┬ expand-range@1.8.2
│ │ │ │ │ │ └─┬ fill-range@2.2.4
│ │ │ │ │ │   ├─┬ is-number@2.1.0
│ │ │ │ │ │   │ └── kind-of@3.2.2 deduped
│ │ │ │ │ │   ├─┬ isobject@2.1.0
│ │ │ │ │ │   │ └── isarray@1.0.0 deduped
│ │ │ │ │ │   ├─┬ randomatic@3.1.1
│ │ │ │ │ │   │ ├── is-number@4.0.0
│ │ │ │ │ │   │ ├── kind-of@6.0.2
│ │ │ │ │ │   │ └── math-random@1.0.4
│ │ │ │ │ │   ├── repeat-element@1.1.3 deduped
│ │ │ │ │ │   └── repeat-string@1.6.1 deduped
│ │ │ │ │ ├── preserve@0.2.0
│ │ │ │ │ └── repeat-element@1.1.3 deduped
│ │ │ │ ├─┬ expand-brackets@0.1.5
│ │ │ │ │ └── is-posix-bracket@0.1.1
│ │ │ │ ├─┬ extglob@0.3.2
│ │ │ │ │ └── is-extglob@1.0.0 deduped
│ │ │ │ ├── filename-regex@2.0.1
│ │ │ │ ├── is-extglob@1.0.0 deduped
│ │ │ │ ├── is-glob@2.0.1 deduped
│ │ │ │ ├─┬ kind-of@3.2.2
│ │ │ │ │ └── is-buffer@1.1.6
│ │ │ │ ├── normalize-path@2.1.1 deduped
│ │ │ │ ├─┬ object.omit@2.0.1
│ │ │ │ │ ├─┬ for-own@0.1.5
│ │ │ │ │ │ └── for-in@1.0.2 deduped
│ │ │ │ │ └── is-extendable@0.1.1 deduped
│ │ │ │ ├─┬ parse-glob@3.0.4
│ │ │ │ │ ├─┬ glob-base@0.3.0
│ │ │ │ │ │ ├── glob-parent@2.0.0 deduped
│ │ │ │ │ │ └── is-glob@2.0.1 deduped
│ │ │ │ │ ├── is-dotfile@1.0.3
│ │ │ │ │ ├── is-extglob@1.0.0 deduped
│ │ │ │ │ └── is-glob@2.0.1 deduped
│ │ │ │ └─┬ regex-cache@0.4.4
│ │ │ │   └─┬ is-equal-shallow@0.1.3
│ │ │ │     └── is-primitive@2.0.0
│ │ │ └── normalize-path@2.1.1 deduped
│ │ ├── async-each@1.0.1
│ │ ├── UNMET OPTIONAL DEPENDENCY fsevents@^1.0.0
│ │ ├─┬ glob-parent@2.0.0
│ │ │ └── is-glob@2.0.1 deduped
│ │ ├── inherits@2.0.3 deduped
│ │ ├─┬ is-binary-path@1.0.1
│ │ │ └── binary-extensions@1.13.0
│ │ ├─┬ is-glob@2.0.1
│ │ │ └── is-extglob@1.0.0
│ │ ├── path-is-absolute@1.0.1 deduped
│ │ └─┬ readdirp@2.2.1
│ │   ├── graceful-fs@4.1.15 deduped
│ │   ├── micromatch@3.1.10 deduped
│ │   └── readable-stream@2.3.6 deduped
│ ├─┬ convert-source-map@1.6.0
│ │ └── safe-buffer@5.1.2 deduped
│ ├── dependency-graph@0.7.2
│ ├─┬ magic-string@0.25.2
│ │ └── sourcemap-codec@1.4.4
│ ├── minimist@1.2.0
│ ├── reflect-metadata@0.1.13
│ ├─┬ shelljs@0.8.3
│ │ ├── glob@7.1.3 deduped
│ │ ├── interpret@1.2.0
│ │ └─┬ rechoir@0.6.2
│ │   └── resolve@1.10.0 deduped
│ ├── source-map@0.6.1
│ ├── tslib@1.9.3 deduped
│ └─┬ yargs@9.0.1
│   ├── camelcase@4.1.0
│   ├─┬ cliui@3.2.0
│   │ ├─┬ string-width@1.0.2
│   │ │ ├── code-point-at@1.1.0
│   │ │ ├─┬ is-fullwidth-code-point@1.0.0
│   │ │ │ └── number-is-nan@1.0.1
│   │ │ └── strip-ansi@3.0.1 deduped
│   │ ├── strip-ansi@3.0.1 deduped
│   │ └─┬ wrap-ansi@2.1.0
│   │   ├─┬ string-width@1.0.2
│   │   │ ├── code-point-at@1.1.0 deduped
│   │   │ ├─┬ is-fullwidth-code-point@1.0.0
│   │   │ │ └── number-is-nan@1.0.1 deduped
│   │   │ └── strip-ansi@3.0.1 deduped
│   │   └── strip-ansi@3.0.1 deduped
│   ├── decamelize@1.2.0
│   ├── get-caller-file@1.0.3
│   ├─┬ os-locale@2.1.0
│   │ ├─┬ execa@0.7.0
│   │ │ ├── cross-spawn@5.1.0 deduped
│   │ │ ├── get-stream@3.0.0
│   │ │ ├── is-stream@1.1.0
│   │ │ ├─┬ npm-run-path@2.0.2
│   │ │ │ └── path-key@2.0.1
│   │ │ ├── p-finally@1.0.0
│   │ │ ├── signal-exit@3.0.2 deduped
│   │ │ └── strip-eof@1.0.0
│   │ ├─┬ lcid@1.0.0
│   │ │ └── invert-kv@1.0.0
│   │ └─┬ mem@1.1.0
│   │   └── mimic-fn@1.2.0
│   ├─┬ read-pkg-up@2.0.0
│   │ ├─┬ find-up@2.1.0
│   │ │ └─┬ locate-path@2.0.0
│   │ │   ├─┬ p-locate@2.0.0
│   │ │   │ └── p-limit@1.3.0 deduped
│   │ │   └── path-exists@3.0.0 deduped
│   │ └─┬ read-pkg@2.0.0
│   │   ├─┬ load-json-file@2.0.0
│   │   │ ├── graceful-fs@4.1.15 deduped
│   │   │ ├─┬ parse-json@2.2.0
│   │   │ │ └── error-ex@1.3.2 deduped
│   │   │ ├── pify@2.3.0 deduped
│   │   │ └── strip-bom@3.0.0
│   │   ├── normalize-package-data@2.5.0 deduped
│   │   └─┬ path-type@2.0.0
│   │     └── pify@2.3.0 deduped
│   ├── require-directory@2.1.1
│   ├── require-main-filename@1.0.1
│   ├── set-blocking@2.0.0
│   ├── string-width@2.1.1 deduped
│   ├── which-module@2.0.0
│   ├── y18n@3.2.1
│   └─┬ yargs-parser@7.0.0
│     └── camelcase@4.1.0 deduped
├─┬ @angular/core@7.2.4
│ └── tslib@1.9.3 deduped
├─┬ @angular/forms@7.2.4
│ └── tslib@1.9.3 deduped
├── @angular/language-service@7.2.4
├─┬ @angular/platform-browser@7.2.4
│ └── tslib@1.9.3 deduped
├─┬ @angular/platform-browser-dynamic@7.2.4
│ └── tslib@1.9.3 deduped
├─┬ @angular/router@7.2.4
│ └── tslib@1.9.3 deduped
├─┬ @opentelemetry/context-zone-peer-dep@0.8.3
│ └── @opentelemetry/context-base@0.8.3
├─┬ @opentelemetry/core@0.8.3
│ ├─┬ @opentelemetry/api@0.8.3
│ │ └── @opentelemetry/context-base@0.8.3 deduped
│ ├── @opentelemetry/context-base@0.8.3 deduped
│ └── semver@7.3.2
├─┬ @opentelemetry/plugin-user-interaction@0.8.0
│ ├── @opentelemetry/api@0.8.3 deduped
│ ├── @opentelemetry/core@0.8.3 deduped
│ ├── @opentelemetry/web@0.8.3 deduped
│ └── shimmer@1.2.1
├─┬ @opentelemetry/tracing@0.8.3
│ ├── @opentelemetry/api@0.8.3 deduped
│ ├── @opentelemetry/context-base@0.8.3 deduped
│ ├── @opentelemetry/core@0.8.3 deduped
│ └─┬ @opentelemetry/resources@0.8.3
│   ├── @opentelemetry/api@0.8.3 deduped
│   ├── @opentelemetry/core@0.8.3 deduped
│   └─┬ gcp-metadata@3.5.0
│     ├─┬ gaxios@2.3.4
│     │ ├─┬ abort-controller@3.0.0
│     │ │ └── event-target-shim@5.0.1
│     │ ├── extend@3.0.2 deduped
│     │ ├─┬ https-proxy-agent@5.0.0
│     │ │ ├─┬ agent-base@6.0.0
│     │ │ │ └── debug@4.1.1 deduped
│     │ │ └─┬ debug@4.1.1
│     │ │   └── ms@2.1.1
│     │ ├── is-stream@2.0.0
│     │ └── node-fetch@2.6.0
│     └─┬ json-bigint@0.3.1
│       └── bignumber.js@9.0.0
├─┬ @opentelemetry/web@0.8.3
│ ├── @opentelemetry/api@0.8.3 deduped
│ ├── @opentelemetry/context-base@0.8.3 deduped
│ ├── @opentelemetry/core@0.8.3 deduped
│ └── @opentelemetry/tracing@0.8.3 deduped
├── @types/jasmine@2.5.54
├─┬ @types/jasminewd2@2.0.6
│ └── @types/jasmine@3.3.8
├── @types/node@12.12.35
├── async-foreach@0.1.3 extraneous
├─┬ codelyzer@4.5.0
│ ├── app-root-path@2.1.0
│ ├─┬ css-selector-tokenizer@0.7.1
│ │ ├── cssesc@0.1.0
│ │ ├── fastparse@1.1.2
│ │ └─┬ regexpu-core@1.0.0
│ │   ├── regenerate@1.4.0
│ │   ├── regjsgen@0.2.0
│ │   └─┬ regjsparser@0.1.5
│ │     └── jsesc@0.5.0
│ ├─┬ cssauron@1.4.0
│ │ └── through@2.3.8 deduped
│ ├─┬ semver-dsl@1.0.1
│ │ └── semver@5.6.0 deduped
│ ├── source-map@0.5.7
│ └── sprintf-js@1.1.2
├── core-js@2.6.4
├── gaze@1.1.3 extraneous
├── in-publish@2.0.0 extraneous
├── jasmine-core@2.6.4
├─┬ jasmine-spec-reporter@4.1.1
│ └── colors@1.1.2
├─┬ karma@1.7.1
│ ├── bluebird@3.5.3
│ ├─┬ body-parser@1.18.3
│ │ ├── bytes@3.0.0
│ │ ├── content-type@1.0.4
│ │ ├─┬ debug@2.6.9
│ │ │ └── ms@2.0.0
│ │ ├── depd@1.1.2
│ │ ├─┬ http-errors@1.6.3
│ │ │ ├── depd@1.1.2 deduped
│ │ │ ├── inherits@2.0.3 deduped
│ │ │ ├── setprototypeof@1.1.0 deduped
│ │ │ └── statuses@1.5.0
│ │ ├─┬ iconv-lite@0.4.23
│ │ │ └── safer-buffer@2.1.2
│ │ ├─┬ on-finished@2.3.0
│ │ │ └── ee-first@1.1.1
│ │ ├── qs@6.5.2
│ │ ├─┬ raw-body@2.3.3
│ │ │ ├── bytes@3.0.0 deduped
│ │ │ ├── http-errors@1.6.3 deduped
│ │ │ ├─┬ iconv-lite@0.4.23
│ │ │ │ └── safer-buffer@2.1.2 deduped
│ │ │ └── unpipe@1.0.0
│ │ └─┬ type-is@1.6.16
│ │   ├── media-typer@0.3.0
│ │   └── mime-types@2.1.21 deduped
│ ├── chokidar@1.7.0 deduped
│ ├── colors@1.3.3
│ ├─┬ combine-lists@1.0.1
│ │ └── lodash@4.17.11 deduped
│ ├─┬ connect@3.6.6
│ │ ├── debug@2.6.9 deduped
│ │ ├─┬ finalhandler@1.1.0
│ │ │ ├── debug@2.6.9 deduped
│ │ │ ├── encodeurl@1.0.2 deduped
│ │ │ ├── escape-html@1.0.3 deduped
│ │ │ ├── on-finished@2.3.0 deduped
│ │ │ ├── parseurl@1.3.2 deduped
│ │ │ ├── statuses@1.3.1
│ │ │ └── unpipe@1.0.0 deduped
│ │ ├── parseurl@1.3.2
│ │ └── utils-merge@1.0.1
│ ├── core-js@2.6.4 deduped
│ ├── di@0.0.1
│ ├─┬ dom-serialize@2.2.1
│ │ ├── custom-event@1.0.1
│ │ ├── ent@2.2.0
│ │ ├── extend@3.0.2
│ │ └── void-elements@2.0.1
│ ├─┬ expand-braces@0.1.2
│ │ ├── array-slice@0.2.3
│ │ ├── array-unique@0.2.1
│ │ └─┬ braces@0.1.5
│ │   └─┬ expand-range@0.1.1
│ │     ├── is-number@0.1.1
│ │     └── repeat-string@0.2.2
│ ├── glob@7.1.3 deduped
│ ├── graceful-fs@4.1.15
│ ├─┬ http-proxy@1.17.0
│ │ ├── eventemitter3@3.1.0
│ │ ├─┬ follow-redirects@1.6.1
│ │ │ └─┬ debug@3.1.0
│ │ │   └── ms@2.0.0 deduped
│ │ └── requires-port@1.0.0
│ ├─┬ isbinaryfile@3.0.3
│ │ └─┬ buffer-alloc@1.2.0
│ │   ├── buffer-alloc-unsafe@1.1.0
│ │   └── buffer-fill@1.0.0
│ ├── lodash@3.10.1
│ ├─┬ log4js@0.6.38
│ │ ├─┬ readable-stream@1.0.34
│ │ │ ├── core-util-is@1.0.2
│ │ │ ├── inherits@2.0.3 deduped
│ │ │ ├── isarray@0.0.1
│ │ │ └── string_decoder@0.10.31
│ │ └── semver@4.3.6
│ ├── mime@1.6.0
│ ├── minimatch@3.0.4 deduped
│ ├─┬ optimist@0.6.1
│ │ ├── minimist@0.0.10
│ │ └── wordwrap@0.0.3
│ ├── qjobs@1.2.0
│ ├── range-parser@1.2.0
│ ├─┬ rimraf@2.6.3
│ │ └── glob@7.1.3 deduped
│ ├── safe-buffer@5.1.2
│ ├─┬ socket.io@1.7.3
│ │ ├─┬ debug@2.3.3
│ │ │ └── ms@0.7.2
│ │ ├─┬ engine.io@1.8.3
│ │ │ ├─┬ accepts@1.3.3
│ │ │ │ ├── mime-types@2.1.21 deduped
│ │ │ │ └── negotiator@0.6.1 deduped
│ │ │ ├── base64id@1.0.0
│ │ │ ├── cookie@0.3.1 deduped
│ │ │ ├─┬ debug@2.3.3
│ │ │ │ └── ms@0.7.2
│ │ │ ├─┬ engine.io-parser@1.3.2
│ │ │ │ ├── after@0.8.2
│ │ │ │ ├── arraybuffer.slice@0.0.6
│ │ │ │ ├── base64-arraybuffer@0.1.5
│ │ │ │ ├── blob@0.0.4
│ │ │ │ ├── has-binary@0.1.7 deduped
│ │ │ │ └── wtf-8@1.0.0
│ │ │ └─┬ ws@1.1.2
│ │ │   ├── options@0.0.6
│ │ │   └── ultron@1.0.2
│ │ ├─┬ has-binary@0.1.7
│ │ │ └── isarray@0.0.1
│ │ ├── object-assign@4.1.0
│ │ ├─┬ socket.io-adapter@0.5.0
│ │ │ ├─┬ debug@2.3.3
│ │ │ │ └── ms@0.7.2
│ │ │ └── socket.io-parser@2.3.1 deduped
│ │ ├─┬ socket.io-client@1.7.3
│ │ │ ├── backo2@1.0.2
│ │ │ ├── component-bind@1.0.0
│ │ │ ├── component-emitter@1.2.1
│ │ │ ├─┬ debug@2.3.3
│ │ │ │ └── ms@0.7.2
│ │ │ ├─┬ engine.io-client@1.8.3
│ │ │ │ ├── component-emitter@1.2.1 deduped
│ │ │ │ ├── component-inherit@0.0.3
│ │ │ │ ├─┬ debug@2.3.3
│ │ │ │ │ └── ms@0.7.2
│ │ │ │ ├── engine.io-parser@1.3.2 deduped
│ │ │ │ ├── has-cors@1.1.0
│ │ │ │ ├── indexof@0.0.1 deduped
│ │ │ │ ├─┬ parsejson@0.0.3
│ │ │ │ │ └── better-assert@1.0.2 deduped
│ │ │ │ ├─┬ parseqs@0.0.5
│ │ │ │ │ └── better-assert@1.0.2 deduped
│ │ │ │ ├── parseuri@0.0.5 deduped
│ │ │ │ ├── ws@1.1.2 deduped
│ │ │ │ ├── xmlhttprequest-ssl@1.5.3
│ │ │ │ └── yeast@0.1.2
│ │ │ ├── has-binary@0.1.7 deduped
│ │ │ ├── indexof@0.0.1
│ │ │ ├── object-component@0.0.3
│ │ │ ├─┬ parseuri@0.0.5
│ │ │ │ └─┬ better-assert@1.0.2
│ │ │ │   └── callsite@1.0.0
│ │ │ ├── socket.io-parser@2.3.1 deduped
│ │ │ └── to-array@0.1.4
│ │ └─┬ socket.io-parser@2.3.1
│ │   ├── component-emitter@1.1.2
│ │   ├─┬ debug@2.2.0
│ │   │ └── ms@0.7.1
│ │   ├── isarray@0.0.1
│ │   └── json3@3.3.2 deduped
│ ├── source-map@0.5.7
│ ├─┬ tmp@0.0.31
│ │ └── os-tmpdir@1.0.2
│ └─┬ useragent@2.3.0
│   ├─┬ lru-cache@4.1.5
│   │ ├── pseudomap@1.0.2
│   │ └── yallist@2.1.2
│   └─┬ tmp@0.0.33
│     └── os-tmpdir@1.0.2 deduped
├─┬ karma-chrome-launcher@2.1.1
│ ├─┬ fs-access@1.0.1
│ │ └── null-check@1.0.0
│ └─┬ which@1.3.1
│   └── isexe@2.0.0
├─┬ karma-cli@1.0.1
│ └─┬ resolve@1.10.0
│   └── path-parse@1.0.6
├─┬ karma-coverage-istanbul-reporter@1.4.3
│ ├─┬ istanbul-api@1.3.7
│ │ ├── async@2.6.1 deduped
│ │ ├─┬ fileset@2.0.3
│ │ │ ├── glob@7.1.3 deduped
│ │ │ └── minimatch@3.0.4 deduped
│ │ ├── istanbul-lib-coverage@1.2.1
│ │ ├─┬ istanbul-lib-hook@1.2.2
│ │ │ └─┬ append-transform@0.4.0
│ │ │   └─┬ default-require-extensions@1.0.0
│ │ │     └─┬ strip-bom@2.0.0
│ │ │       └── is-utf8@0.2.1
│ │ ├── istanbul-lib-instrument@1.10.2 deduped
│ │ ├─┬ istanbul-lib-report@1.1.5
│ │ │ ├── istanbul-lib-coverage@1.2.1 deduped
│ │ │ ├── mkdirp@0.5.1 deduped
│ │ │ ├── path-parse@1.0.6 deduped
│ │ │ └─┬ supports-color@3.2.3
│ │ │   └── has-flag@1.0.0
│ │ ├─┬ istanbul-lib-source-maps@1.2.6
│ │ │ ├─┬ debug@3.2.6
│ │ │ │ └── ms@2.1.1
│ │ │ ├── istanbul-lib-coverage@1.2.1 deduped
│ │ │ ├── mkdirp@0.5.1 deduped
│ │ │ ├── rimraf@2.6.3 deduped
│ │ │ └── source-map@0.5.7
│ │ ├─┬ istanbul-reports@1.5.1
│ │ │ └─┬ handlebars@4.1.0
│ │ │   ├── async@2.6.1 deduped
│ │ │   ├── optimist@0.6.1 deduped
│ │ │   ├── source-map@0.6.1 deduped
│ │ │   └─┬ uglify-js@3.4.9
│ │ │     ├── commander@2.17.1 deduped
│ │ │     └── source-map@0.6.1 deduped
│ │ ├── js-yaml@3.12.1 deduped
│ │ ├── mkdirp@0.5.1 deduped
│ │ └── once@1.4.0 deduped
│ └── minimatch@3.0.4 deduped
├── karma-jasmine@1.1.2
├─┬ karma-jasmine-html-reporter@0.2.2
│ └── karma-jasmine@1.1.2 deduped
├── lodash.assign@4.2.0 extraneous
├── lodash.mergewith@4.6.1 extraneous
├── marked@0.3.19
├── meow@3.7.0 extraneous
├── nan@2.12.1 extraneous
├── node-gyp@3.8.0 extraneous
├── node-pre-gyp@0.10.3 extraneous
├─┬ pre-commit@1.2.2
│ ├─┬ cross-spawn@5.1.0
│ │ ├── lru-cache@4.1.5 deduped
│ │ ├─┬ shebang-command@1.2.0
│ │ │ └── shebang-regex@1.0.0
│ │ └── which@1.3.1 deduped
│ ├─┬ spawn-sync@1.0.15
│ │ ├─┬ concat-stream@1.6.2
│ │ │ ├── buffer-from@1.1.1 deduped
│ │ │ ├── inherits@2.0.3 deduped
│ │ │ ├── readable-stream@2.3.6 deduped
│ │ │ └── typedarray@0.0.6
│ │ └── os-shim@0.1.3
│ └─┬ which@1.2.14
│   └── isexe@2.0.0 deduped
├─┬ protractor@5.4.2
│ ├── @types/q@0.0.32
│ ├── @types/selenium-webdriver@3.0.14
│ ├─┬ blocking-proxy@1.0.1
│ │ └── minimist@1.2.0 deduped
│ ├─┬ browserstack@1.5.2
│ │ └─┬ https-proxy-agent@2.2.1
│ │   ├─┬ agent-base@4.2.1
│ │   │ └─┬ es6-promisify@5.0.0
│ │   │   └── es6-promise@4.2.5
│ │   └─┬ debug@3.2.6
│ │     └── ms@2.1.1
│ ├─┬ chalk@1.1.3
│ │ ├── ansi-styles@2.2.1
│ │ ├── escape-string-regexp@1.0.5
│ │ ├─┬ has-ansi@2.0.0
│ │ │ └── ansi-regex@2.1.1 deduped
│ │ ├── strip-ansi@3.0.1 deduped
│ │ └── supports-color@2.0.0
│ ├── glob@7.1.3 deduped
│ ├─┬ jasmine@2.8.0
│ │ ├── exit@0.1.2
│ │ ├── glob@7.1.3 deduped
│ │ └── jasmine-core@2.8.0
│ ├── jasminewd2@2.2.0
│ ├── optimist@0.6.1 deduped
│ ├── q@1.4.1
│ ├─┬ saucelabs@1.5.0
│ │ └── https-proxy-agent@2.2.1 deduped
│ ├─┬ selenium-webdriver@3.6.0
│ │ ├─┬ jszip@3.1.5
│ │ │ ├── core-js@2.3.0
│ │ │ ├── es6-promise@3.0.2
│ │ │ ├─┬ lie@3.1.1
│ │ │ │ └── immediate@3.0.6
│ │ │ ├── pako@1.0.8
│ │ │ └─┬ readable-stream@2.0.6
│ │ │   ├── core-util-is@1.0.2 deduped
│ │ │   ├── inherits@2.0.3 deduped
│ │ │   ├── isarray@1.0.0 deduped
│ │ │   ├── process-nextick-args@1.0.7
│ │ │   ├── string_decoder@0.10.31 deduped
│ │ │   └── util-deprecate@1.0.2 deduped
│ │ ├── rimraf@2.6.3 deduped
│ │ ├─┬ tmp@0.0.30
│ │ │ └── os-tmpdir@1.0.2 deduped
│ │ └─┬ xml2js@0.4.19
│ │   ├── sax@1.2.4
│ │   └── xmlbuilder@9.0.7
│ ├─┬ source-map-support@0.4.18
│ │ └── source-map@0.5.7
│ ├─┬ webdriver-js-extender@2.1.0
│ │ ├── @types/selenium-webdriver@3.0.14 deduped
│ │ └── selenium-webdriver@3.6.0 deduped
│ └─┬ webdriver-manager@12.1.1
│   ├── adm-zip@0.4.13
│   ├─┬ chalk@1.1.3
│   │ ├── ansi-styles@2.2.1
│   │ ├── escape-string-regexp@1.0.5 deduped
│   │ ├── has-ansi@2.0.0 deduped
│   │ ├── strip-ansi@3.0.1 deduped
│   │ └── supports-color@2.0.0
│   ├─┬ del@2.2.2
│   │ ├─┬ globby@5.0.0
│   │ │ ├── array-union@1.0.2 deduped
│   │ │ ├── arrify@1.0.1 deduped
│   │ │ ├── glob@7.1.3 deduped
│   │ │ ├── object-assign@4.1.1 deduped
│   │ │ ├── pify@2.3.0 deduped
│   │ │ └── pinkie-promise@2.0.1 deduped
│   │ ├── is-path-cwd@1.0.0 deduped
│   │ ├── is-path-in-cwd@1.0.1 deduped
│   │ ├── object-assign@4.1.1
│   │ ├── pify@2.3.0 deduped
│   │ ├─┬ pinkie-promise@2.0.1
│   │ │ └── pinkie@2.0.4
│   │ └── rimraf@2.6.3 deduped
│   ├── glob@7.1.3 deduped
│   ├── ini@1.3.5 deduped
│   ├── minimist@1.2.0 deduped
│   ├── q@1.5.1
│   ├── request@2.88.0 deduped
│   ├── rimraf@2.6.3 deduped
│   ├── semver@5.6.0 deduped
│   └── xml2js@0.4.19 deduped
├─┬ rxjs@6.4.0
│ └── tslib@1.9.3 deduped
├── sass-graph@2.2.4 extraneous
├── stdout-stream@1.4.1 extraneous
├── true-case-path@1.0.3 extraneous
├─┬ ts-node@4.1.0
│ ├── arrify@1.0.1
│ ├─┬ chalk@2.4.2
│ │ ├─┬ ansi-styles@3.2.1
│ │ │ └─┬ color-convert@1.9.3
│ │ │   └── color-name@1.1.3
│ │ ├── escape-string-regexp@1.0.5 deduped
│ │ └── supports-color@5.5.0 deduped
│ ├── diff@3.5.0
│ ├── make-error@1.3.5
│ ├── minimist@1.2.0 deduped
│ ├─┬ mkdirp@0.5.1
│ │ └── minimist@0.0.8
│ ├── source-map-support@0.5.10 deduped
│ ├─┬ tsconfig@7.0.0
│ │ ├── @types/strip-bom@3.0.0
│ │ ├── @types/strip-json-comments@0.0.30
│ │ ├── strip-bom@3.0.0
│ │ └── strip-json-comments@2.0.1
│ ├─┬ v8flags@3.1.2
│ │ └─┬ homedir-polyfill@1.0.1
│ │   └── parse-passwd@1.0.0
│ └── yn@2.0.0
├── tslib@1.9.3
├─┬ tslint@5.9.1
│ ├─┬ babel-code-frame@6.26.0
│ │ ├─┬ chalk@1.1.3
│ │ │ ├── ansi-styles@2.2.1
│ │ │ ├── escape-string-regexp@1.0.5 deduped
│ │ │ ├── has-ansi@2.0.0 deduped
│ │ │ ├── strip-ansi@3.0.1 deduped
│ │ │ └── supports-color@2.0.0
│ │ ├── esutils@2.0.2
│ │ └── js-tokens@3.0.2
│ ├── builtin-modules@1.1.1
│ ├── chalk@2.4.2 deduped
│ ├── commander@2.19.0
│ ├── diff@3.5.0 deduped
│ ├── glob@7.1.3 deduped
│ ├─┬ js-yaml@3.12.1
│ │ ├─┬ argparse@1.0.10
│ │ │ └── sprintf-js@1.0.3
│ │ └── esprima@4.0.1
│ ├── minimatch@3.0.4 deduped
│ ├── resolve@1.10.0 deduped
│ ├── semver@5.6.0 deduped
│ ├── tslib@1.9.3 deduped
│ └─┬ tsutils@2.29.0
│   └── tslib@1.9.3 deduped
├── typescript@3.2.4
└── UNMET PEER DEPENDENCY zone.js@0.8.29

What version of Node are you using?

➜ node --version
v13.5.0

What did you do?

If possible, provide a recipe for reproducing the error.

I checked out the Angular real world app (https://github.com/gothinkster/angular-realworld-example-app) and tried to instrument it with the web tracer, zone context manager and user interaction plugin.

Changes I made to src/main.ts:

+import { ConsoleSpanExporter, SimpleSpanProcessor } from '@opentelemetry/tracing';
+import { WebTracerProvider } from '@opentelemetry/web';
+import { UserInteractionPlugin } from '@opentelemetry/plugin-user-interaction';
+import { ZoneContextManager } from '@opentelemetry/context-zone-peer-dep';
+
 import { enableProdMode } from '@angular/core';
 import { platformBrowserDynamic } from '@angular/platform-browser-dynamic';

 import { AppModule } from './app/app.module';
 import { environment } from './environments/environment';

+const provider = new WebTracerProvider({
+  plugins: [
+    new UserInteractionPlugin(),
+  ]
+});
+
+provider.addSpanProcessor(new SimpleSpanProcessor(new ConsoleSpanExporter()));
+
+provider.register({
+  contextManager: new ZoneContextManager()
+});
+
 if (environment.production) {
   enableProdMode();
 }

What did you expect to see?

Expected the app to run normally, generate spans and print them to console.

What did you see instead?

App generates some spans but crashes as soon as a blog post is clicked and navigation is triggered.

Additional context

As soon as I click a blog post, the app crashes with the following error from Angular in console:

Navigation triggered outside Angular zone, did you forget to call 'ngZone.run()'?

The UI breaks as well and looks like this:

image


It looks like Angular does not like it when we patch runTask and pass it a Zone.js zone instead of an NgZone here: https://github.com/open-telemetry/opentelemetry-js-contrib/blob/master/plugins/web/opentelemetry-plugin-user-interaction/src/userInteraction.ts#L324

The following patch silences the error:

    _patchZoneRunTask() {
        const plugin = this;
        return (original) => {
            return function patchRunTask(task, applyThis, applyArgs) {
+               const currentNgZone = this;
                const target = plugin._getClickedElement(task);
                let span;
                if (target) {
                    span = plugin._createSpan(target, 'click');
                    if (span) {
                        plugin._incrementTask(span);
                        try {
                            return plugin._tracer.withSpan(span, () => {
                                const currentZone = Zone.current;
+                               currentNgZone.set('OT_ZONE_CONTEXT', currentZone.get('OT_ZONE_CONTEXT'));
                                task._zone = currentZone;
-                                return original.call(currentZone, task, applyThis, applyArgs);
+                                return original.call(currentNgZone, task, applyThis, applyArgs);
                            });
                        }
                        finally {
                            plugin._decrementTask(span);
                        }
                    }
                }
                else {
                    span = plugin._getCurrentSpan(this);
                }
                try {
                    return original.call(this, task, applyThis, applyArgs);
                }
                finally {
                    if (span && plugin._shouldCountTask(task, Zone.current)) {
                        plugin._decrementTask(span);
                    }
                }
            };
        };
    }

It looks like we either need to work with the original zone objects and add/duplicate context to them or accept a Zone implementation using some sort of dependency injection mechanism. This can allow all the plugins and the zone context manager to use whatever implementation of Zone is used by the app.

Another option is to have a special angular-context-manager that specifically uses NgZone, and then have all the plugins work with whatever kind of zone object is used by the context.

I've not used Angular, NgZone or Zone.js before so may be I'm doing something horribly wrong.

@obecny
Copy link
Member

obecny commented Jun 17, 2020

I will investigate this soon and let you know, thx for raising the issue

@owais
Copy link
Author

owais commented Jun 17, 2020

Thank you. Please let me know if you need more info or if I can help somehow.

@obecny
Copy link
Member

obecny commented Jun 17, 2020

another fix is here
gothinkster/angular-realworld-example-app#174

@obecny
Copy link
Member

obecny commented Jun 17, 2020

and finally a contrib repo open-telemetry/opentelemetry-js-contrib#88

@owais
Copy link
Author

owais commented Jun 17, 2020

Thank you. I can confirm these patches fix the bug.

@mhennoch
Copy link
Contributor

Issue was fixed close it? @obecny @dyladan

@obecny obecny closed this as completed May 18, 2021
pichlermarc pushed a commit to dynatrace-oss-contrib/opentelemetry-js that referenced this issue Dec 15, 2023
removed wrong dataloader and mongoose entries from release-please manifest.
sort entries in release-please config.

Co-authored-by: Rauno Viskus <Rauno56@users.noreply.github.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
bug Something isn't working
Projects
None yet
Development

No branches or pull requests

3 participants