open-telemetry / opentelemetry-js-contrib

OpenTelemetry instrumentation for JavaScript modules
https://opentelemetry.io
Apache License 2.0
692 stars 506 forks source link

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

Closed owais closed 4 years ago

owais commented 4 years ago

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);
                        }
                    }
                }

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.

owais commented 4 years ago

I think this is probably related more to the context manager than the user interaction plugin so moving to the core repo: https://github.com/open-telemetry/opentelemetry-js/issues/1206