From 83df2c81d3338eec01e3387204511febed37a29f Mon Sep 17 00:00:00 2001 From: Mayur Kale Date: Tue, 8 Jan 2019 18:02:41 -0800 Subject: [PATCH 1/3] Add helper util for coverting OC Metrics data models to SD monitoring data models --- package-lock.json | 158 ++-- packages/opencensus-core/package-lock.json | 894 +++++++++++++----- .../src/stackdriver-stats-utils.ts | 288 ++++++ .../src/types.ts | 6 +- .../test/test-stackdriver-stats-utils.ts | 433 +++++++++ 5 files changed, 1468 insertions(+), 311 deletions(-) create mode 100644 packages/opencensus-exporter-stackdriver/src/stackdriver-stats-utils.ts create mode 100644 packages/opencensus-exporter-stackdriver/test/test-stackdriver-stats-utils.ts diff --git a/package-lock.json b/package-lock.json index 826a27cee..6be65b72d 100644 --- a/package-lock.json +++ b/package-lock.json @@ -28,7 +28,7 @@ }, "ansi-escapes": { "version": "3.1.0", - "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-3.1.0.tgz", + "resolved": "http://registry.npmjs.org/ansi-escapes/-/ansi-escapes-3.1.0.tgz", "integrity": "sha512-UgAb8H9D41AQnu/PbWlCofQVcnV4Gs2bBJi9eZPxfU/hgglFh3SMDMENRIqdr7H6XFnXdoknctFByVsCOotTVw==", "dev": true }, @@ -41,7 +41,7 @@ "ansi-styles": { "version": "3.2.1", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "integrity": "sha1-QfuyAkPlCxK+DwS43tvwdSDOhB0=", "dev": true, "requires": { "color-convert": "^1.9.0" @@ -50,7 +50,7 @@ "aproba": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/aproba/-/aproba-1.2.0.tgz", - "integrity": "sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw==", + "integrity": "sha1-aALmJk79GMeQobDVF/DyYnvyyUo=", "dev": true }, "are-we-there-yet": { @@ -98,7 +98,7 @@ }, "async": { "version": "1.5.2", - "resolved": "https://registry.npmjs.org/async/-/async-1.5.2.tgz", + "resolved": "http://registry.npmjs.org/async/-/async-1.5.2.tgz", "integrity": "sha1-7GphrlZIDAw8skHJVhjiCJL5Zyo=", "dev": true }, @@ -111,7 +111,7 @@ "brace-expansion": { "version": "1.1.11", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "integrity": "sha1-PH/L9SnYcibz0vUrlm/1Jx60Qd0=", "dev": true, "requires": { "balanced-match": "^1.0.0", @@ -309,7 +309,7 @@ "concat-stream": { "version": "1.6.2", "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.2.tgz", - "integrity": "sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==", + "integrity": "sha1-kEvfGUzTEi/Gdcd/xKw9T/D9GjQ=", "dev": true, "requires": { "buffer-from": "^1.0.0", @@ -345,7 +345,7 @@ }, "conventional-changelog-angular": { "version": "1.6.6", - "resolved": "https://registry.npmjs.org/conventional-changelog-angular/-/conventional-changelog-angular-1.6.6.tgz", + "resolved": "http://registry.npmjs.org/conventional-changelog-angular/-/conventional-changelog-angular-1.6.6.tgz", "integrity": "sha512-suQnFSqCxRwyBxY68pYTsFkG0taIdinHLNEAX5ivtw8bCRnIgnpvcHmlR/yjUyZIrNPYAoXlY1WiEKWgSE4BNg==", "dev": true, "requires": { @@ -355,7 +355,7 @@ }, "conventional-changelog-atom": { "version": "0.2.8", - "resolved": "https://registry.npmjs.org/conventional-changelog-atom/-/conventional-changelog-atom-0.2.8.tgz", + "resolved": "http://registry.npmjs.org/conventional-changelog-atom/-/conventional-changelog-atom-0.2.8.tgz", "integrity": "sha512-8pPZqhMbrnltNBizjoDCb/Sz85KyUXNDQxuAEYAU5V/eHn0okMBVjqc8aHWYpHrytyZWvMGbayOlDv7i8kEf6g==", "dev": true, "requires": { @@ -377,7 +377,7 @@ }, "conventional-changelog-codemirror": { "version": "0.3.8", - "resolved": "https://registry.npmjs.org/conventional-changelog-codemirror/-/conventional-changelog-codemirror-0.3.8.tgz", + "resolved": "http://registry.npmjs.org/conventional-changelog-codemirror/-/conventional-changelog-codemirror-0.3.8.tgz", "integrity": "sha512-3HFZKtBXTaUCHvz7ai6nk2+psRIkldDoNzCsom0egDtVmPsvvHZkzjynhdQyULfacRSsBTaiQ0ol6nBOL4dDiQ==", "dev": true, "requires": { @@ -407,7 +407,7 @@ "dependencies": { "load-json-file": { "version": "1.1.0", - "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-1.1.0.tgz", + "resolved": "http://registry.npmjs.org/load-json-file/-/load-json-file-1.1.0.tgz", "integrity": "sha1-lWkFcI1YtLq0wiYbBPWfMcmTdMA=", "dev": true, "requires": { @@ -440,7 +440,7 @@ }, "pify": { "version": "2.3.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", + "resolved": "http://registry.npmjs.org/pify/-/pify-2.3.0.tgz", "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", "dev": true }, @@ -477,7 +477,7 @@ }, "conventional-changelog-eslint": { "version": "1.0.9", - "resolved": "https://registry.npmjs.org/conventional-changelog-eslint/-/conventional-changelog-eslint-1.0.9.tgz", + "resolved": "http://registry.npmjs.org/conventional-changelog-eslint/-/conventional-changelog-eslint-1.0.9.tgz", "integrity": "sha512-h87nfVh2fdk9fJIvz26wCBsbDC/KxqCc5wSlNMZbXcARtbgNbNDIF7Y7ctokFdnxkzVdaHsbINkh548T9eBA7Q==", "dev": true, "requires": { @@ -486,7 +486,7 @@ }, "conventional-changelog-express": { "version": "0.3.6", - "resolved": "https://registry.npmjs.org/conventional-changelog-express/-/conventional-changelog-express-0.3.6.tgz", + "resolved": "http://registry.npmjs.org/conventional-changelog-express/-/conventional-changelog-express-0.3.6.tgz", "integrity": "sha512-3iWVtBJZ9RnRnZveNDzOD8QRn6g6vUif0qVTWWyi5nUIAbuN1FfPVyKdAlJJfp5Im+dE8Kiy/d2SpaX/0X678Q==", "dev": true, "requires": { @@ -495,7 +495,7 @@ }, "conventional-changelog-jquery": { "version": "0.1.0", - "resolved": "https://registry.npmjs.org/conventional-changelog-jquery/-/conventional-changelog-jquery-0.1.0.tgz", + "resolved": "http://registry.npmjs.org/conventional-changelog-jquery/-/conventional-changelog-jquery-0.1.0.tgz", "integrity": "sha1-Agg5cWLjhGmG5xJztsecW1+A9RA=", "dev": true, "requires": { @@ -513,7 +513,7 @@ }, "conventional-changelog-jshint": { "version": "0.3.8", - "resolved": "https://registry.npmjs.org/conventional-changelog-jshint/-/conventional-changelog-jshint-0.3.8.tgz", + "resolved": "http://registry.npmjs.org/conventional-changelog-jshint/-/conventional-changelog-jshint-0.3.8.tgz", "integrity": "sha512-hn9QU4ZI/5V50wKPJNPGT4gEWgiBFpV6adieILW4MaUFynuDYOvQ71EMSj3EznJyKi/KzuXpc9dGmX8njZMjig==", "dev": true, "requires": { @@ -523,13 +523,13 @@ }, "conventional-changelog-preset-loader": { "version": "1.1.8", - "resolved": "https://registry.npmjs.org/conventional-changelog-preset-loader/-/conventional-changelog-preset-loader-1.1.8.tgz", + "resolved": "http://registry.npmjs.org/conventional-changelog-preset-loader/-/conventional-changelog-preset-loader-1.1.8.tgz", "integrity": "sha512-MkksM4G4YdrMlT2MbTsV2F6LXu/hZR0Tc/yenRrDIKRwBl/SP7ER4ZDlglqJsCzLJi4UonBc52Bkm5hzrOVCcw==", "dev": true }, "conventional-changelog-writer": { "version": "3.0.9", - "resolved": "https://registry.npmjs.org/conventional-changelog-writer/-/conventional-changelog-writer-3.0.9.tgz", + "resolved": "http://registry.npmjs.org/conventional-changelog-writer/-/conventional-changelog-writer-3.0.9.tgz", "integrity": "sha512-n9KbsxlJxRQsUnK6wIBRnARacvNnN4C/nxnxCkH+B/R1JS2Fa+DiP1dU4I59mEDEjgnFaN2+9wr1P1s7GYB5/Q==", "dev": true, "requires": { @@ -547,7 +547,7 @@ }, "conventional-commits-filter": { "version": "1.1.6", - "resolved": "https://registry.npmjs.org/conventional-commits-filter/-/conventional-commits-filter-1.1.6.tgz", + "resolved": "http://registry.npmjs.org/conventional-commits-filter/-/conventional-commits-filter-1.1.6.tgz", "integrity": "sha512-KcDgtCRKJCQhyk6VLT7zR+ZOyCnerfemE/CsR3iQpzRRFbLEs0Y6rwk3mpDvtOh04X223z+1xyJ582Stfct/0Q==", "dev": true, "requires": { @@ -557,7 +557,7 @@ }, "conventional-commits-parser": { "version": "2.1.7", - "resolved": "https://registry.npmjs.org/conventional-commits-parser/-/conventional-commits-parser-2.1.7.tgz", + "resolved": "http://registry.npmjs.org/conventional-commits-parser/-/conventional-commits-parser-2.1.7.tgz", "integrity": "sha512-BoMaddIEJ6B4QVMSDu9IkVImlGOSGA1I2BQyOZHeLQ6qVOJLcLKn97+fL6dGbzWEiqDzfH4OkcveULmeq2MHFQ==", "dev": true, "requires": { @@ -573,7 +573,7 @@ "conventional-recommended-bump": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/conventional-recommended-bump/-/conventional-recommended-bump-1.2.1.tgz", - "integrity": "sha512-oJjG6DkRgtnr/t/VrPdzmf4XZv8c4xKVJrVT4zrSHd92KEL+EYxSbYoKq8lQ7U5yLMw7130wrcQTLRjM/T+d4w==", + "integrity": "sha1-G3E377UJH5n+AJ4v6d23zEkOk3U=", "dev": true, "requires": { "concat-stream": "^1.4.10", @@ -593,7 +593,7 @@ }, "camelcase-keys": { "version": "2.1.0", - "resolved": "https://registry.npmjs.org/camelcase-keys/-/camelcase-keys-2.1.0.tgz", + "resolved": "http://registry.npmjs.org/camelcase-keys/-/camelcase-keys-2.1.0.tgz", "integrity": "sha1-MIvur/3ygRkFHvodkyITyRuPkuc=", "dev": true, "requires": { @@ -618,7 +618,7 @@ }, "meow": { "version": "3.7.0", - "resolved": "https://registry.npmjs.org/meow/-/meow-3.7.0.tgz", + "resolved": "http://registry.npmjs.org/meow/-/meow-3.7.0.tgz", "integrity": "sha1-cstmi0JSKCkKu/qFaJJYcwioAfs=", "dev": true, "requires": { @@ -636,7 +636,7 @@ }, "minimist": { "version": "1.2.0", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", + "resolved": "http://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=", "dev": true }, @@ -714,7 +714,7 @@ "dateformat": { "version": "3.0.3", "resolved": "https://registry.npmjs.org/dateformat/-/dateformat-3.0.3.tgz", - "integrity": "sha512-jyCETtSl3VMZMWeRo7iY1FL19ges1t55hMo5yaam4Jrsm5EPL89UQkoQRyiI+Yf4k8r2ZpdngkV8hr1lIdjb3Q==", + "integrity": "sha1-puN0maTZqc+F71hyBE1ikByYia4=", "dev": true }, "decamelize": { @@ -785,7 +785,7 @@ }, "duplexer": { "version": "0.1.1", - "resolved": "https://registry.npmjs.org/duplexer/-/duplexer-0.1.1.tgz", + "resolved": "http://registry.npmjs.org/duplexer/-/duplexer-0.1.1.tgz", "integrity": "sha1-rOb/gIwc5mtX0ev5eXessCM0z8E=", "dev": true }, @@ -827,7 +827,7 @@ }, "external-editor": { "version": "2.2.0", - "resolved": "https://registry.npmjs.org/external-editor/-/external-editor-2.2.0.tgz", + "resolved": "http://registry.npmjs.org/external-editor/-/external-editor-2.2.0.tgz", "integrity": "sha512-bSn6gvGxKt+b7+6TKEv1ZycHleA7aHhRHyAqJyp5pbUFuYYNIzpZnQDk7AsYckyWdEnTeAnay0aCy2aV6iTk9A==", "dev": true, "requires": { @@ -857,7 +857,7 @@ "fs-extra": { "version": "4.0.3", "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-4.0.3.tgz", - "integrity": "sha512-q6rbdDd1o2mAnQreO7YADIxf/Whx4AHBiRf6d+/cVT8h44ss+lHgxf1FemcqDnQt9X3ct4McHr+JMGlYSsK7Cg==", + "integrity": "sha1-DYUhIuW8W+tFP7Ao6cDJvzY0DJQ=", "dev": true, "requires": { "graceful-fs": "^4.1.2", @@ -936,7 +936,7 @@ }, "camelcase-keys": { "version": "2.1.0", - "resolved": "https://registry.npmjs.org/camelcase-keys/-/camelcase-keys-2.1.0.tgz", + "resolved": "http://registry.npmjs.org/camelcase-keys/-/camelcase-keys-2.1.0.tgz", "integrity": "sha1-MIvur/3ygRkFHvodkyITyRuPkuc=", "dev": true, "requires": { @@ -961,7 +961,7 @@ }, "meow": { "version": "3.7.0", - "resolved": "https://registry.npmjs.org/meow/-/meow-3.7.0.tgz", + "resolved": "http://registry.npmjs.org/meow/-/meow-3.7.0.tgz", "integrity": "sha1-cstmi0JSKCkKu/qFaJJYcwioAfs=", "dev": true, "requires": { @@ -979,7 +979,7 @@ }, "minimist": { "version": "1.2.0", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", + "resolved": "http://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=", "dev": true }, @@ -1024,13 +1024,13 @@ }, "get-stream": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-3.0.0.tgz", + "resolved": "http://registry.npmjs.org/get-stream/-/get-stream-3.0.0.tgz", "integrity": "sha1-jpQ9E1jcN1VQVOy+LtsFqhdO3hQ=", "dev": true }, "git-raw-commits": { "version": "1.3.6", - "resolved": "https://registry.npmjs.org/git-raw-commits/-/git-raw-commits-1.3.6.tgz", + "resolved": "http://registry.npmjs.org/git-raw-commits/-/git-raw-commits-1.3.6.tgz", "integrity": "sha512-svsK26tQ8vEKnMshTDatSIQSMDdz8CxIIqKsvPqbtV23Etmw6VNaFAitu8zwZ0VrOne7FztwPyRLxK7/DIUTQg==", "dev": true, "requires": { @@ -1053,7 +1053,7 @@ "dependencies": { "pify": { "version": "2.3.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", + "resolved": "http://registry.npmjs.org/pify/-/pify-2.3.0.tgz", "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", "dev": true } @@ -1061,7 +1061,7 @@ }, "git-semver-tags": { "version": "1.3.6", - "resolved": "https://registry.npmjs.org/git-semver-tags/-/git-semver-tags-1.3.6.tgz", + "resolved": "http://registry.npmjs.org/git-semver-tags/-/git-semver-tags-1.3.6.tgz", "integrity": "sha512-2jHlJnln4D/ECk9FxGEBh3k44wgYdWjWDtMmJPaecjoRmxKo3Y1Lh8GMYuOPu04CHw86NTAODchYjC5pnpMQig==", "dev": true, "requires": { @@ -1117,7 +1117,7 @@ "dependencies": { "pify": { "version": "2.3.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", + "resolved": "http://registry.npmjs.org/pify/-/pify-2.3.0.tgz", "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", "dev": true } @@ -1125,7 +1125,7 @@ }, "got": { "version": "6.7.1", - "resolved": "https://registry.npmjs.org/got/-/got-6.7.1.tgz", + "resolved": "http://registry.npmjs.org/got/-/got-6.7.1.tgz", "integrity": "sha1-JAzQV4WpoY5WHcG0S0HHY+8ejbA=", "dev": true, "requires": { @@ -1229,13 +1229,13 @@ "ini": { "version": "1.3.5", "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.5.tgz", - "integrity": "sha512-RZY5huIKCMRWDUqZlEi72f/lmXKMvuszcMBduliQ3nnWbx9X/ZBQO7DijMEYS9EhHBb2qacRUMtC7svLwe0lcw==", + "integrity": "sha1-7uJfVtscnsYIXgwid4CD9Zar+Sc=", "dev": true }, "inquirer": { "version": "3.3.0", "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-3.3.0.tgz", - "integrity": "sha512-h+xtnyk4EwKvFWHrUYsWErEVR+igKtLdchu+o0Z1RL7VU/jVMFbYir2bp6bAj8efFNxWqHX0dIss6fJQ+/+qeQ==", + "integrity": "sha1-ndLyrXZdyrH/BEO0kUQqILoifck=", "dev": true, "requires": { "ansi-escapes": "^3.0.0", @@ -1285,7 +1285,7 @@ }, "is-builtin-module": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-builtin-module/-/is-builtin-module-1.0.0.tgz", + "resolved": "http://registry.npmjs.org/is-builtin-module/-/is-builtin-module-1.0.0.tgz", "integrity": "sha1-VAVy0096wxGfj3bDDLwbHgN6/74=", "dev": true, "requires": { @@ -1333,7 +1333,7 @@ }, "is-obj": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-1.0.1.tgz", + "resolved": "http://registry.npmjs.org/is-obj/-/is-obj-1.0.1.tgz", "integrity": "sha1-PkcprB9f3gJc19g6iW2rn09n2w8=", "dev": true }, @@ -1403,7 +1403,7 @@ "json-parse-better-errors": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz", - "integrity": "sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==", + "integrity": "sha1-u4Z8+zRQ5pEHwTHRxRS6s9yLyqk=", "dev": true }, "json-stringify-safe": { @@ -1549,7 +1549,7 @@ "lowercase-keys": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-1.0.1.tgz", - "integrity": "sha512-G2Lj61tXDnVFFOi8VZds+SoQjtQC3dgokKdDG2mTm1tx4m50NUHBOZSBwQQHyy0V12A0JTG4icfZQH+xPyh8VA==", + "integrity": "sha1-b54wtHCE2XGnyCD/FabFFnt0wm8=", "dev": true }, "lru-cache": { @@ -1605,7 +1605,7 @@ "dependencies": { "minimist": { "version": "1.2.0", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", + "resolved": "http://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=", "dev": true }, @@ -1624,13 +1624,13 @@ "mimic-fn": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-1.2.0.tgz", - "integrity": "sha512-jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ==", + "integrity": "sha1-ggyGo5M0ZA6ZUWkovQP8qIBX0CI=", "dev": true }, "minimatch": { "version": "3.0.4", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", - "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", + "integrity": "sha1-UWbihkV/AzBgZL5Ul+jbsMPTIIM=", "dev": true, "requires": { "brace-expansion": "^1.1.7" @@ -1638,14 +1638,14 @@ }, "minimist": { "version": "0.0.8", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz", + "resolved": "http://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz", "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=", "dev": true }, "minimist-options": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/minimist-options/-/minimist-options-3.0.2.tgz", - "integrity": "sha512-FyBrT/d0d4+uiZRbqznPXqw3IpZZG3gl3wKWiX784FycUKVwBt0uLBFkQrtE4tZOrgo78nZp2jnKz3L65T5LdQ==", + "integrity": "sha1-+6TIGRM54T7PTWG+sD8HAQPz2VQ=", "dev": true, "requires": { "arrify": "^1.0.1", @@ -1654,7 +1654,7 @@ }, "mkdirp": { "version": "0.5.1", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz", + "resolved": "http://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz", "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=", "dev": true, "requires": { @@ -1664,7 +1664,7 @@ "modify-values": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/modify-values/-/modify-values-1.0.1.tgz", - "integrity": "sha512-xV2bxeN6F7oYjZWTe/YPAy6MN2M+sL4u/Rlm2AHCIVGfo2p1yGmBHQ6vHehl4bRTZBdHu3TSkWdYgkwpYzAGSw==", + "integrity": "sha1-s5OfpgVUZHTj4+PGPWS9Q7TuYCI=", "dev": true }, "moment": { @@ -1682,7 +1682,7 @@ "normalize-package-data": { "version": "2.4.0", "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.4.0.tgz", - "integrity": "sha512-9jjUFbTPfEy3R/ad/2oNbKtW9Hgovl5O1FvFWKkKblNXoN/Oou6+9+KKohPK13Yc3/TyunyWhJp6gvRNR/PPAw==", + "integrity": "sha1-EvlaMH1YNSB1oEkHuErIvpisAS8=", "dev": true, "requires": { "hosted-git-info": "^2.1.4", @@ -1703,7 +1703,7 @@ "npmlog": { "version": "4.1.2", "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-4.1.2.tgz", - "integrity": "sha512-2uUqazuKlTaSI/dC8AzicUck7+IrEaOnN/e0jd3Xtt1KcGpwx30v50mL7oPyr/h9bL3E4aZccVwpwP+5W9Vjkg==", + "integrity": "sha1-CKfyqL9zRgR3mp76StXMcXq7lUs=", "dev": true, "requires": { "are-we-there-yet": "~1.1.2", @@ -1755,7 +1755,7 @@ "os-locale": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/os-locale/-/os-locale-2.1.0.tgz", - "integrity": "sha512-3sslG3zJbEYcaC4YVAvDorjGxc7tv6KVATnLPZONiljsUncvihe9BQoVCEs0RZ1kmf4Hk9OBqlZfJZWI4GanKA==", + "integrity": "sha1-QrwpAKa1uL0XN2yOiCtlr8zyS/I=", "dev": true, "requires": { "execa": "^0.7.0", @@ -1782,7 +1782,7 @@ }, "os-tmpdir": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", + "resolved": "http://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=", "dev": true }, @@ -1858,7 +1858,7 @@ }, "path-is-absolute": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "resolved": "http://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", "dev": true }, @@ -1871,7 +1871,7 @@ "path-type": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/path-type/-/path-type-3.0.0.tgz", - "integrity": "sha512-T2ZUsdZFHgA3u4e5PfPbjd7HDDpxPnQb5jN0SrDsjNSuVXHJqtwTnWqG0B1jZrgmJ/7lj1EmVIByWt1gxGkWvg==", + "integrity": "sha1-zvMdyOCho7sNEFwM2Xzzv0f0428=", "dev": true, "requires": { "pify": "^3.0.0" @@ -1907,7 +1907,7 @@ "process-nextick-args": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.0.tgz", - "integrity": "sha512-MtEC1TqN0EU5nephaJ4rAtThHtC86dNN9qCuEhtshvpVBkAW5ZO7BASN9REnF9eoXGcRub+pFuKEpOHE+HbEMw==", + "integrity": "sha1-o31zL0JxtKsa0HDTVQjoKQeI/6o=", "dev": true }, "pseudomap": { @@ -1942,7 +1942,7 @@ "dependencies": { "minimist": { "version": "1.2.0", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", + "resolved": "http://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=", "dev": true } @@ -1990,7 +1990,7 @@ }, "load-json-file": { "version": "1.1.0", - "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-1.1.0.tgz", + "resolved": "http://registry.npmjs.org/load-json-file/-/load-json-file-1.1.0.tgz", "integrity": "sha1-lWkFcI1YtLq0wiYbBPWfMcmTdMA=", "dev": true, "requires": { @@ -2032,7 +2032,7 @@ }, "pify": { "version": "2.3.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", + "resolved": "http://registry.npmjs.org/pify/-/pify-2.3.0.tgz", "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", "dev": true }, @@ -2060,7 +2060,7 @@ }, "readable-stream": { "version": "2.3.6", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz", + "resolved": "http://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz", "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==", "dev": true, "requires": { @@ -2086,7 +2086,7 @@ "registry-auth-token": { "version": "3.3.2", "resolved": "https://registry.npmjs.org/registry-auth-token/-/registry-auth-token-3.3.2.tgz", - "integrity": "sha512-JL39c60XlzCVgNrO+qq68FoNb56w/m7JYvGR2jT5iR1xBrUA3Mfx5Twk5rqTThPmQKMWydGmq8oFtDlxfrmxnQ==", + "integrity": "sha1-hR/UkDjuy1hpERFa+EUmDuyYPyA=", "dev": true, "requires": { "rc": "^1.1.6", @@ -2136,7 +2136,7 @@ "rimraf": { "version": "2.6.2", "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.2.tgz", - "integrity": "sha512-lreewLK/BlghmxtfH36YYVg1i8IAce4TI7oao75I1g245+6BctqTVQiBP3YUJ9C6DQOXJmkYR9X9fCLtCOJc5w==", + "integrity": "sha1-LtgVDSShbqhlHm1u8PR8QVjOejY=", "dev": true, "requires": { "glob": "^7.0.5" @@ -2175,7 +2175,7 @@ "safer-buffer": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", - "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", + "integrity": "sha1-RPoWGwGHuVSd2Eu5GAL5vYOFzWo=", "dev": true }, "semver": { @@ -2251,7 +2251,7 @@ "spdx-expression-parse": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.0.tgz", - "integrity": "sha512-Yg6D3XpRD4kkOmTpdgbUiEJFKghJH03fiC1OPll5h/0sO6neh2jqRDVHOQ4o/LMea0tgCkbMgea5ip/e+MkWyg==", + "integrity": "sha1-meEZt6XaAOBUkcn6M4t5BII7QdA=", "dev": true, "requires": { "spdx-exceptions": "^2.1.0", @@ -2267,7 +2267,7 @@ "split": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/split/-/split-1.0.1.tgz", - "integrity": "sha512-mTyOoPbrivtXnwnIxZRFYRrPNtEFKlpB2fvjSnCQUiAA6qAZzqwna5envK4uk6OIeP17CsdF3rSBGYVBsU0Tkg==", + "integrity": "sha1-YFvZvjA6pZ+zX5Ip++oN3snqB9k=", "dev": true, "requires": { "through": "2" @@ -2276,7 +2276,7 @@ "split2": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/split2/-/split2-2.2.0.tgz", - "integrity": "sha512-RAb22TG39LhI31MbreBgIuKiIKhVsawfTgEGqKHTK87aG+ul/PB8Sqoi3I7kVdRWiCfrKxK3uo4/YUkpNvhPbw==", + "integrity": "sha1-GGsldbz4PoW30YRldWI47k7kJJM=", "dev": true, "requires": { "through2": "^2.0.2" @@ -2285,7 +2285,7 @@ "string-width": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", - "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", + "integrity": "sha1-q5Pyeo3BPSjKyBXEYhQ6bZASrp4=", "dev": true, "requires": { "is-fullwidth-code-point": "^2.0.0", @@ -2312,7 +2312,7 @@ "string_decoder": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "integrity": "sha1-nPFhG6YmhdcDCunkujQUnDrwP8g=", "dev": true, "requires": { "safe-buffer": "~5.1.0" @@ -2320,7 +2320,7 @@ }, "strip-ansi": { "version": "3.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", + "resolved": "http://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", "dev": true, "requires": { @@ -2335,7 +2335,7 @@ }, "strip-eof": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/strip-eof/-/strip-eof-1.0.0.tgz", + "resolved": "http://registry.npmjs.org/strip-eof/-/strip-eof-1.0.0.tgz", "integrity": "sha1-u0P/VZim6wXYm1n80SnJgzE2Br8=", "dev": true }, @@ -2353,7 +2353,7 @@ }, "strong-log-transformer": { "version": "1.0.6", - "resolved": "https://registry.npmjs.org/strong-log-transformer/-/strong-log-transformer-1.0.6.tgz", + "resolved": "http://registry.npmjs.org/strong-log-transformer/-/strong-log-transformer-1.0.6.tgz", "integrity": "sha1-9/uTdYpppXEUAYEnfuoMLrEwH6M=", "dev": true, "requires": { @@ -2366,7 +2366,7 @@ "dependencies": { "minimist": { "version": "0.1.0", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.1.0.tgz", + "resolved": "http://registry.npmjs.org/minimist/-/minimist-0.1.0.tgz", "integrity": "sha1-md9lelJXTCHJBXSX33QnkLK0wN4=", "dev": true } @@ -2427,7 +2427,7 @@ }, "through": { "version": "2.3.8", - "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", + "resolved": "http://registry.npmjs.org/through/-/through-2.3.8.tgz", "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=", "dev": true }, @@ -2450,7 +2450,7 @@ "tmp": { "version": "0.0.33", "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz", - "integrity": "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==", + "integrity": "sha1-bTQzWIl2jSGyvNoKonfO07G/rfk=", "dev": true, "requires": { "os-tmpdir": "~1.0.2" @@ -2520,7 +2520,7 @@ }, "uuid": { "version": "2.0.3", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-2.0.3.tgz", + "resolved": "http://registry.npmjs.org/uuid/-/uuid-2.0.3.tgz", "integrity": "sha1-Z+LoY3lyFVMN/zGOW/nc6/1Hsho=", "dev": true }, @@ -2575,7 +2575,7 @@ }, "wrap-ansi": { "version": "2.1.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-2.1.0.tgz", + "resolved": "http://registry.npmjs.org/wrap-ansi/-/wrap-ansi-2.1.0.tgz", "integrity": "sha1-2Pw9KE3QV5T+hJc8rs3Rz4JP3YU=", "dev": true, "requires": { @@ -2614,7 +2614,7 @@ "write-file-atomic": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-2.3.0.tgz", - "integrity": "sha512-xuPeK4OdjWqtfi59ylvVL0Yn35SF3zgcAcv7rBPFHVaEapaDr4GdGgm3j7ckTwH9wHL7fGmgfAnb0+THrHb8tA==", + "integrity": "sha1-H/YVdcLipOjlENb6TiQ8zhg5mas=", "dev": true, "requires": { "graceful-fs": "^4.1.11", @@ -2687,7 +2687,7 @@ "dependencies": { "load-json-file": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-2.0.0.tgz", + "resolved": "http://registry.npmjs.org/load-json-file/-/load-json-file-2.0.0.tgz", "integrity": "sha1-eUfkIUmvgNaWy/eXvKq8/h/inKg=", "dev": true, "requires": { @@ -2717,7 +2717,7 @@ }, "pify": { "version": "2.3.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", + "resolved": "http://registry.npmjs.org/pify/-/pify-2.3.0.tgz", "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", "dev": true }, diff --git a/packages/opencensus-core/package-lock.json b/packages/opencensus-core/package-lock.json index d702e0ea2..f4ed3c19f 100644 --- a/packages/opencensus-core/package-lock.json +++ b/packages/opencensus-core/package-lock.json @@ -1,11 +1,14 @@ { - "requires": true, + "name": "@opencensus/core", + "version": "0.0.8", "lockfileVersion": 1, + "requires": true, "dependencies": { "@babel/code-frame": { "version": "7.0.0", "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.0.0.tgz", "integrity": "sha512-OfC2uemaknXr87bdLUkWog7nYuliM9Ij5HUcajsVcMCpQrcLmtxRbVFTIqmcSkSeYRBFBRxs2FiUqFJDLdiebA==", + "dev": true, "requires": { "@babel/highlight": "^7.0.0" } @@ -14,6 +17,7 @@ "version": "7.2.2", "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.2.2.tgz", "integrity": "sha512-I4o675J/iS8k+P38dvJ3IBGqObLXyQLTxtrR4u9cSUJOURvafeEWb/pFMOTwtNrmq73mJzyF6ueTbO1BtN0Zeg==", + "dev": true, "requires": { "@babel/types": "^7.2.2", "jsesc": "^2.5.1", @@ -25,7 +29,8 @@ "source-map": { "version": "0.5.7", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=" + "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", + "dev": true } } }, @@ -33,6 +38,7 @@ "version": "7.1.0", "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.1.0.tgz", "integrity": "sha512-A95XEoCpb3TO+KZzJ4S/5uW5fNe26DjBGqf1o9ucyLyCmi1dXq/B3c8iaWTfBk3VvetUxl16e8tIrd5teOCfGw==", + "dev": true, "requires": { "@babel/helper-get-function-arity": "^7.0.0", "@babel/template": "^7.1.0", @@ -43,6 +49,7 @@ "version": "7.0.0", "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.0.0.tgz", "integrity": "sha512-r2DbJeg4svYvt3HOS74U4eWKsUAMRH01Z1ds1zx8KNTPtpTL5JAsdFv8BNyOpVqdFhHkkRDIg5B4AsxmkjAlmQ==", + "dev": true, "requires": { "@babel/types": "^7.0.0" } @@ -51,6 +58,7 @@ "version": "7.0.0", "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.0.0.tgz", "integrity": "sha512-MXkOJqva62dfC0w85mEf/LucPPS/1+04nmmRMPEBUB++hiiThQ2zPtX/mEWQ3mtzCEjIJvPY8nuwxXtQeQwUag==", + "dev": true, "requires": { "@babel/types": "^7.0.0" } @@ -59,6 +67,7 @@ "version": "7.0.0", "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.0.0.tgz", "integrity": "sha512-UFMC4ZeFC48Tpvj7C8UgLvtkaUuovQX+5xNWrsIoMG8o2z+XFKjKaN9iVmS84dPwVN00W4wPmqvYoZF3EGAsfw==", + "dev": true, "requires": { "chalk": "^2.0.0", "esutils": "^2.0.2", @@ -68,19 +77,22 @@ "js-tokens": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", - "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==" + "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", + "dev": true } } }, "@babel/parser": { "version": "7.2.2", "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.2.2.tgz", - "integrity": "sha512-UNTmQ5cSLDeBGBl+s7JeowkqIHgmFAGBnLDdIzFmUNSuS5JF0XBcN59jsh/vJO/YjfsBqMxhMjoFGmNExmf0FA==" + "integrity": "sha512-UNTmQ5cSLDeBGBl+s7JeowkqIHgmFAGBnLDdIzFmUNSuS5JF0XBcN59jsh/vJO/YjfsBqMxhMjoFGmNExmf0FA==", + "dev": true }, "@babel/template": { "version": "7.2.2", "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.2.2.tgz", "integrity": "sha512-zRL0IMM02AUDwghf5LMSSDEz7sBCO2YnNmpg3uWTZj/v1rcG2BmQUvaGU8GhU8BvfMh1k2KIAYZ7Ji9KXPUg7g==", + "dev": true, "requires": { "@babel/code-frame": "^7.0.0", "@babel/parser": "^7.2.2", @@ -91,6 +103,7 @@ "version": "7.2.2", "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.2.2.tgz", "integrity": "sha512-E5Bn9FSwHpSkUhthw/XEuvFZxIgrqb9M8cX8j5EUQtrUG5DQUy6bFyl7G7iQ1D1Czudor+xkmp81JbLVVM0Sjg==", + "dev": true, "requires": { "@babel/code-frame": "^7.0.0", "@babel/generator": "^7.2.2", @@ -107,6 +120,7 @@ "version": "4.1.0", "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.0.tgz", "integrity": "sha512-heNPJUJIqC+xB6ayLAMHaIrmN9HKa7aQO8MGqKpvCA+uJYVcvR6l5kgdrhRuwPFHU7P5/A1w0BjByPHwpfTDKg==", + "dev": true, "requires": { "ms": "^2.1.1" } @@ -114,7 +128,8 @@ "ms": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz", - "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==" + "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==", + "dev": true } } }, @@ -122,6 +137,7 @@ "version": "7.2.2", "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.2.2.tgz", "integrity": "sha512-fKCuD6UFUMkR541eDWL+2ih/xFZBXPOg/7EQFeTluMDebfqR4jrpaCjLhkWlQS4hT6nRa2PMEgXKbRB5/H2fpg==", + "dev": true, "requires": { "esutils": "^2.0.2", "lodash": "^4.17.10", @@ -132,6 +148,7 @@ "version": "3.2.1", "resolved": "https://registry.npmjs.org/@types/continuation-local-storage/-/continuation-local-storage-3.2.1.tgz", "integrity": "sha1-oz4N+dzptCTRyY/E/evYV43O7H4=", + "dev": true, "requires": { "@types/node": "*" } @@ -139,32 +156,38 @@ "@types/mocha": { "version": "5.2.5", "resolved": "https://registry.npmjs.org/@types/mocha/-/mocha-5.2.5.tgz", - "integrity": "sha512-lAVp+Kj54ui/vLUFxsJTMtWvZraZxum3w3Nwkble2dNuV5VnPA+Mi2oGX9XYJAaIvZi3tn3cbjS/qcJXRb6Bww==" + "integrity": "sha512-lAVp+Kj54ui/vLUFxsJTMtWvZraZxum3w3Nwkble2dNuV5VnPA+Mi2oGX9XYJAaIvZi3tn3cbjS/qcJXRb6Bww==", + "dev": true }, "@types/node": { "version": "10.12.12", "resolved": "https://registry.npmjs.org/@types/node/-/node-10.12.12.tgz", - "integrity": "sha512-Pr+6JRiKkfsFvmU/LK68oBRCQeEg36TyAbPhc2xpez24OOZZCuoIhWGTd39VZy6nGafSbxzGouFPTFD/rR1A0A==" + "integrity": "sha512-Pr+6JRiKkfsFvmU/LK68oBRCQeEg36TyAbPhc2xpez24OOZZCuoIhWGTd39VZy6nGafSbxzGouFPTFD/rR1A0A==", + "dev": true }, "@types/once": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/@types/once/-/once-1.4.0.tgz", - "integrity": "sha512-cnEvTAVVRqF6OQg/4SLnbxQ0slZJHqZQDve5BzGhcIQtuMpPv8T5QNS2cBPa/W0jTxciqwn7bmJAIGe/bOJ5Kw==" + "integrity": "sha512-cnEvTAVVRqF6OQg/4SLnbxQ0slZJHqZQDve5BzGhcIQtuMpPv8T5QNS2cBPa/W0jTxciqwn7bmJAIGe/bOJ5Kw==", + "dev": true }, "@types/semver": { "version": "5.5.0", "resolved": "https://registry.npmjs.org/@types/semver/-/semver-5.5.0.tgz", - "integrity": "sha512-41qEJgBH/TWgo5NFSvBCJ1qkoi3Q6ONSF2avrHq1LVEZfYpdHmj0y9SuTK+u9ZhG1sYQKBL1AWXKyLWP4RaUoQ==" + "integrity": "sha512-41qEJgBH/TWgo5NFSvBCJ1qkoi3Q6ONSF2avrHq1LVEZfYpdHmj0y9SuTK+u9ZhG1sYQKBL1AWXKyLWP4RaUoQ==", + "dev": true }, "@types/shimmer": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/@types/shimmer/-/shimmer-1.0.1.tgz", - "integrity": "sha512-I9ouuzrWLcjM1wre7f0i780W3KHk5PxFAC5KOpvpOGNaTsaKLN8p7sqRh9THwV9cpdOA/YJC+yMhG1jonQFdRQ==" + "integrity": "sha512-I9ouuzrWLcjM1wre7f0i780W3KHk5PxFAC5KOpvpOGNaTsaKLN8p7sqRh9THwV9cpdOA/YJC+yMhG1jonQFdRQ==", + "dev": true }, "@types/uuid": { "version": "3.4.3", "resolved": "https://registry.npmjs.org/@types/uuid/-/uuid-3.4.3.tgz", "integrity": "sha512-5fRLCYhLtDb3hMWqQyH10qtF+Ud2JnNCXTCZ+9ktNdCcgslcuXkDTkFcJNk++MT29yDntDnlF1+jD+uVGumsbw==", + "dev": true, "requires": { "@types/node": "*" } @@ -173,6 +196,7 @@ "version": "6.6.1", "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.6.1.tgz", "integrity": "sha512-ZoJjft5B+EJBjUyu9C9Hc0OZyPZSSlOF+plzouTrg6UlA8f+e/n8NIgBFG/9tppJtpPWfthHakK7juJdNDODww==", + "dev": true, "requires": { "fast-deep-equal": "^2.0.1", "fast-json-stable-stringify": "^2.0.0", @@ -184,6 +208,7 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/ansi-align/-/ansi-align-2.0.0.tgz", "integrity": "sha1-w2rsy6VjuJzrVW82kPCx2eNUf38=", + "dev": true, "requires": { "string-width": "^2.0.0" } @@ -191,17 +216,20 @@ "ansi-escapes": { "version": "3.1.0", "resolved": "http://registry.npmjs.org/ansi-escapes/-/ansi-escapes-3.1.0.tgz", - "integrity": "sha512-UgAb8H9D41AQnu/PbWlCofQVcnV4Gs2bBJi9eZPxfU/hgglFh3SMDMENRIqdr7H6XFnXdoknctFByVsCOotTVw==" + "integrity": "sha512-UgAb8H9D41AQnu/PbWlCofQVcnV4Gs2bBJi9eZPxfU/hgglFh3SMDMENRIqdr7H6XFnXdoknctFByVsCOotTVw==", + "dev": true }, "ansi-regex": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", - "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=" + "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", + "dev": true }, "ansi-styles": { "version": "3.2.1", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, "requires": { "color-convert": "^1.9.0" } @@ -210,6 +238,7 @@ "version": "1.0.10", "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", + "dev": true, "requires": { "sprintf-js": "~1.0.2" } @@ -217,22 +246,26 @@ "argv": { "version": "0.0.2", "resolved": "https://registry.npmjs.org/argv/-/argv-0.0.2.tgz", - "integrity": "sha1-7L0W+JSbFXGDcRsb2jNPN4QBhas=" + "integrity": "sha1-7L0W+JSbFXGDcRsb2jNPN4QBhas=", + "dev": true }, "array-find-index": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/array-find-index/-/array-find-index-1.0.2.tgz", - "integrity": "sha1-3wEKoSh+Fku9pvlyOwqWoexBh6E=" + "integrity": "sha1-3wEKoSh+Fku9pvlyOwqWoexBh6E=", + "dev": true }, "arrify": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/arrify/-/arrify-1.0.1.tgz", - "integrity": "sha1-iYUI2iIm84DfkEcoRWhJwVAaSw0=" + "integrity": "sha1-iYUI2iIm84DfkEcoRWhJwVAaSw0=", + "dev": true }, "asn1": { "version": "0.2.4", "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.4.tgz", "integrity": "sha512-jxwzQpLQjSmWXgwaCZE9Nz+glAG01yF1QnWgbhGwHI5A6FRIEY6IVqtHhIepHqI7/kyEyQEagBC5mBEFlIYvdg==", + "dev": true, "requires": { "safer-buffer": "~2.1.0" } @@ -240,12 +273,14 @@ "assert-plus": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", - "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=" + "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=", + "dev": true }, "async": { "version": "1.5.2", "resolved": "http://registry.npmjs.org/async/-/async-1.5.2.tgz", - "integrity": "sha1-7GphrlZIDAw8skHJVhjiCJL5Zyo=" + "integrity": "sha1-7GphrlZIDAw8skHJVhjiCJL5Zyo=", + "dev": true }, "async-listener": { "version": "0.6.9", @@ -259,22 +294,26 @@ "asynckit": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", - "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=" + "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=", + "dev": true }, "aws-sign2": { "version": "0.7.0", "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz", - "integrity": "sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg=" + "integrity": "sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg=", + "dev": true }, "aws4": { "version": "1.8.0", "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.8.0.tgz", - "integrity": "sha512-ReZxvNHIOv88FlT7rxcXIIC0fPt4KZqZbOlivyWtXLt8ESx84zd3kMC6iK5jVeS2qt+g7ftS7ye4fi06X5rtRQ==" + "integrity": "sha512-ReZxvNHIOv88FlT7rxcXIIC0fPt4KZqZbOlivyWtXLt8ESx84zd3kMC6iK5jVeS2qt+g7ftS7ye4fi06X5rtRQ==", + "dev": true }, "babel-code-frame": { "version": "6.26.0", "resolved": "https://registry.npmjs.org/babel-code-frame/-/babel-code-frame-6.26.0.tgz", "integrity": "sha1-Y/1D99weO7fONZR9uP42mj9Yx0s=", + "dev": true, "requires": { "chalk": "^1.1.3", "esutils": "^2.0.2", @@ -284,17 +323,20 @@ "ansi-regex": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", - "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=" + "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", + "dev": true }, "ansi-styles": { "version": "2.2.1", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", - "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=" + "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", + "dev": true }, "chalk": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", + "dev": true, "requires": { "ansi-styles": "^2.2.1", "escape-string-regexp": "^1.0.2", @@ -307,6 +349,7 @@ "version": "3.0.1", "resolved": "http://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", + "dev": true, "requires": { "ansi-regex": "^2.0.0" } @@ -314,19 +357,22 @@ "supports-color": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", - "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=" + "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", + "dev": true } } }, "balanced-match": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", - "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=" + "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=", + "dev": true }, "bcrypt-pbkdf": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz", "integrity": "sha1-pDAdOJtqQ/m2f/PKEaP2Y342Dp4=", + "dev": true, "requires": { "tweetnacl": "^0.14.3" } @@ -335,6 +381,7 @@ "version": "1.3.0", "resolved": "https://registry.npmjs.org/boxen/-/boxen-1.3.0.tgz", "integrity": "sha512-TNPjfTr432qx7yOjQyaXm3dSR0MH9vXp7eT1BFSl/C51g+EFnOR9hTg1IreahGBmDNCehscshe45f+C1TBZbLw==", + "dev": true, "requires": { "ansi-align": "^2.0.0", "camelcase": "^4.0.0", @@ -349,6 +396,7 @@ "version": "1.1.11", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, "requires": { "balanced-match": "^1.0.0", "concat-map": "0.0.1" @@ -357,27 +405,32 @@ "browser-stdout": { "version": "1.3.1", "resolved": "https://registry.npmjs.org/browser-stdout/-/browser-stdout-1.3.1.tgz", - "integrity": "sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw==" + "integrity": "sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw==", + "dev": true }, "buffer-from": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.1.tgz", - "integrity": "sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A==" + "integrity": "sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A==", + "dev": true }, "builtin-modules": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-1.1.1.tgz", - "integrity": "sha1-Jw8HbFpywC9bZaR9+Uxf46J4iS8=" + "integrity": "sha1-Jw8HbFpywC9bZaR9+Uxf46J4iS8=", + "dev": true }, "camelcase": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-4.1.0.tgz", - "integrity": "sha1-1UVjW+HjPFQmScaRc+Xeas+uNN0=" + "integrity": "sha1-1UVjW+HjPFQmScaRc+Xeas+uNN0=", + "dev": true }, "camelcase-keys": { "version": "4.2.0", "resolved": "https://registry.npmjs.org/camelcase-keys/-/camelcase-keys-4.2.0.tgz", "integrity": "sha1-oqpfsa9oh1glnDLBQUJteJI7m3c=", + "dev": true, "requires": { "camelcase": "^4.1.0", "map-obj": "^2.0.0", @@ -387,17 +440,20 @@ "capture-stack-trace": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/capture-stack-trace/-/capture-stack-trace-1.0.1.tgz", - "integrity": "sha512-mYQLZnx5Qt1JgB1WEiMCf2647plpGeQ2NMR/5L0HNZzGQo4fuSPnK+wjfPnKZV0aiJDgzmWqqkV/g7JD+DW0qw==" + "integrity": "sha512-mYQLZnx5Qt1JgB1WEiMCf2647plpGeQ2NMR/5L0HNZzGQo4fuSPnK+wjfPnKZV0aiJDgzmWqqkV/g7JD+DW0qw==", + "dev": true }, "caseless": { "version": "0.12.0", "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz", - "integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=" + "integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=", + "dev": true }, "chalk": { "version": "2.3.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.3.2.tgz", "integrity": "sha512-ZM4j2/ld/YZDc3Ma8PgN7gyAk+kHMMMyzLNryCPGhWrsfAuDVeuid5bpRFTDgMH9JBK2lA4dyyAkkZYF/WcqDQ==", + "dev": true, "requires": { "ansi-styles": "^3.2.1", "escape-string-regexp": "^1.0.5", @@ -407,12 +463,14 @@ "has-flag": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=" + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", + "dev": true }, "supports-color": { "version": "5.3.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.3.0.tgz", "integrity": "sha512-0aP01LLIskjKs3lq52EC0aGBAJhLq7B2Rd8HC/DR/PtNNpcLilNmHC12O+hu0usQpo7wtHNRqtrhBwtDb0+dNg==", + "dev": true, "requires": { "has-flag": "^3.0.0" } @@ -422,17 +480,20 @@ "chardet": { "version": "0.7.0", "resolved": "https://registry.npmjs.org/chardet/-/chardet-0.7.0.tgz", - "integrity": "sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==" + "integrity": "sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==", + "dev": true }, "ci-info": { "version": "1.6.0", "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-1.6.0.tgz", - "integrity": "sha512-vsGdkwSCDpWmP80ncATX7iea5DWQemg1UgCW5J8tqjU3lYw4FBYuj89J0CTVomA7BEfvSZd84GmHko+MxFQU2A==" + "integrity": "sha512-vsGdkwSCDpWmP80ncATX7iea5DWQemg1UgCW5J8tqjU3lYw4FBYuj89J0CTVomA7BEfvSZd84GmHko+MxFQU2A==", + "dev": true }, "clang-format": { "version": "1.2.3", "resolved": "https://registry.npmjs.org/clang-format/-/clang-format-1.2.3.tgz", "integrity": "sha512-x90Hac4ERacGDcZSvHKK58Ga0STuMD+Doi5g0iG2zf7wlJef5Huvhs/3BvMRFxwRYyYSdl6mpQNrtfMxE8MQzw==", + "dev": true, "requires": { "async": "^1.5.2", "glob": "^7.0.0", @@ -442,12 +503,14 @@ "cli-boxes": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/cli-boxes/-/cli-boxes-1.0.0.tgz", - "integrity": "sha1-T6kXw+WclKAEzWH47lCdplFocUM=" + "integrity": "sha1-T6kXw+WclKAEzWH47lCdplFocUM=", + "dev": true }, "cli-cursor": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-2.1.0.tgz", "integrity": "sha1-s12sN2R5+sw+lHR9QdDQ9SOP/LU=", + "dev": true, "requires": { "restore-cursor": "^2.0.0" } @@ -455,12 +518,14 @@ "cli-width": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-2.2.0.tgz", - "integrity": "sha1-/xnt6Kml5XkyQUewwR8PvLq+1jk=" + "integrity": "sha1-/xnt6Kml5XkyQUewwR8PvLq+1jk=", + "dev": true }, "codecov": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/codecov/-/codecov-3.1.0.tgz", "integrity": "sha512-aWQc/rtHbcWEQLka6WmBAOpV58J2TwyXqlpAQGhQaSiEUoigTTUk6lLd2vB3kXkhnDyzyH74RXfmV4dq2txmdA==", + "dev": true, "requires": { "argv": "^0.0.2", "ignore-walk": "^3.0.1", @@ -473,6 +538,7 @@ "version": "1.9.1", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.1.tgz", "integrity": "sha512-mjGanIiwQJskCC18rPR6OmrZ6fm2Lc7PeGFYwCmy5J34wC6F1PzdGL6xeMfmgicfYcNLGuVFA3WzXtIDCQSZxQ==", + "dev": true, "requires": { "color-name": "^1.1.1" } @@ -480,12 +546,14 @@ "color-name": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=" + "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", + "dev": true }, "combined-stream": { "version": "1.0.7", "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.7.tgz", "integrity": "sha512-brWl9y6vOB1xYPZcpZde3N9zDByXTosAeMDo4p1wzo6UMOX4vumB+TP1RZ76sfE6Md68Q0NJSrE/gbezd4Ul+w==", + "dev": true, "requires": { "delayed-stream": "~1.0.0" } @@ -493,17 +561,20 @@ "commander": { "version": "2.11.0", "resolved": "https://registry.npmjs.org/commander/-/commander-2.11.0.tgz", - "integrity": "sha512-b0553uYA5YAEGgyYIGYROzKQ7X5RAqedkfjiZxwi0kL1g3bOaBNNZfYkzt/CL0umgD5wc9Jec2FbB98CjkMRvQ==" + "integrity": "sha512-b0553uYA5YAEGgyYIGYROzKQ7X5RAqedkfjiZxwi0kL1g3bOaBNNZfYkzt/CL0umgD5wc9Jec2FbB98CjkMRvQ==", + "dev": true }, "concat-map": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=" + "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", + "dev": true }, "configstore": { "version": "3.1.2", "resolved": "https://registry.npmjs.org/configstore/-/configstore-3.1.2.tgz", "integrity": "sha512-vtv5HtGjcYUgFrXc6Kx747B83MRRVS5R1VTEQoXvuP+kMI+if6uywV0nDGoiydJRy4yk7h9od5Og0kxx4zUXmw==", + "dev": true, "requires": { "dot-prop": "^4.1.0", "graceful-fs": "^4.1.2", @@ -525,12 +596,14 @@ "core-util-is": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", - "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=" + "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=", + "dev": true }, "create-error-class": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/create-error-class/-/create-error-class-3.0.2.tgz", "integrity": "sha1-Br56vvlHo/FKMP1hBnHUAbyot7Y=", + "dev": true, "requires": { "capture-stack-trace": "^1.0.0" } @@ -539,6 +612,7 @@ "version": "5.1.0", "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-5.1.0.tgz", "integrity": "sha1-6L0O/uWPz/b4+UUQoKVUu/ojVEk=", + "dev": true, "requires": { "lru-cache": "^4.0.1", "shebang-command": "^1.2.0", @@ -548,12 +622,14 @@ "crypto-random-string": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/crypto-random-string/-/crypto-random-string-1.0.0.tgz", - "integrity": "sha1-ojD2T1aDEOFJgAmUB5DsmVRbyn4=" + "integrity": "sha1-ojD2T1aDEOFJgAmUB5DsmVRbyn4=", + "dev": true }, "currently-unhandled": { "version": "0.4.1", "resolved": "https://registry.npmjs.org/currently-unhandled/-/currently-unhandled-0.4.1.tgz", "integrity": "sha1-mI3zP+qxke95mmE2nddsF635V+o=", + "dev": true, "requires": { "array-find-index": "^1.0.1" } @@ -562,6 +638,7 @@ "version": "1.14.1", "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz", "integrity": "sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=", + "dev": true, "requires": { "assert-plus": "^1.0.0" } @@ -570,6 +647,7 @@ "version": "3.1.0", "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", + "dev": true, "requires": { "ms": "2.0.0" } @@ -577,12 +655,14 @@ "decamelize": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", - "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=" + "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=", + "dev": true }, "decamelize-keys": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/decamelize-keys/-/decamelize-keys-1.1.0.tgz", "integrity": "sha1-0XGoeTMlKAfrPLYdwcFEXQeN8tk=", + "dev": true, "requires": { "decamelize": "^1.1.0", "map-obj": "^1.0.0" @@ -591,29 +671,34 @@ "map-obj": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-1.0.1.tgz", - "integrity": "sha1-2TPOuSBdgr3PSIb2dCvcK03qFG0=" + "integrity": "sha1-2TPOuSBdgr3PSIb2dCvcK03qFG0=", + "dev": true } } }, "deep-extend": { "version": "0.6.0", "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz", - "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==" + "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==", + "dev": true }, "delayed-stream": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", - "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=" + "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=", + "dev": true }, "diff": { "version": "3.5.0", "resolved": "https://registry.npmjs.org/diff/-/diff-3.5.0.tgz", - "integrity": "sha512-A46qtFgd+g7pDZinpnwiRJtxbC1hpgf0uzP3iG89scHk0AUC7A1TGxf5OiiOUv/JMZR8GOt8hL900hV0bOy5xA==" + "integrity": "sha512-A46qtFgd+g7pDZinpnwiRJtxbC1hpgf0uzP3iG89scHk0AUC7A1TGxf5OiiOUv/JMZR8GOt8hL900hV0bOy5xA==", + "dev": true }, "dot-prop": { "version": "4.2.0", "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-4.2.0.tgz", "integrity": "sha512-tUMXrxlExSW6U2EXiiKGSBVdYgtV8qlHL+C10TsW4PURY/ic+eaysnSkwB4kA/mBlCyy/IKDJ+Lc3wbWeaXtuQ==", + "dev": true, "requires": { "is-obj": "^1.0.0" } @@ -621,12 +706,14 @@ "duplexer3": { "version": "0.1.4", "resolved": "https://registry.npmjs.org/duplexer3/-/duplexer3-0.1.4.tgz", - "integrity": "sha1-7gHdHKwO08vH/b6jfcCo8c4ALOI=" + "integrity": "sha1-7gHdHKwO08vH/b6jfcCo8c4ALOI=", + "dev": true }, "ecc-jsbn": { "version": "0.1.2", "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz", "integrity": "sha1-OoOpBOVDUyh4dMVkt1SThoSamMk=", + "dev": true, "requires": { "jsbn": "~0.1.0", "safer-buffer": "^2.1.0" @@ -643,12 +730,14 @@ "entities": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/entities/-/entities-1.1.2.tgz", - "integrity": "sha512-f2LZMYl1Fzu7YSBKg+RoROelpOaNrcGmE9AZubeDfrCEia483oW4MI4VyFd5VNHIgQ/7qm1I0wUHK1eJnn2y2w==" + "integrity": "sha512-f2LZMYl1Fzu7YSBKg+RoROelpOaNrcGmE9AZubeDfrCEia483oW4MI4VyFd5VNHIgQ/7qm1I0wUHK1eJnn2y2w==", + "dev": true }, "error-ex": { "version": "1.3.2", "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", + "dev": true, "requires": { "is-arrayish": "^0.2.1" } @@ -656,22 +745,26 @@ "escape-string-regexp": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=" + "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", + "dev": true }, "esprima": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", - "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==" + "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", + "dev": true }, "esutils": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.2.tgz", - "integrity": "sha1-Cr9PHKpbyx96nYrMbepPqqBLrJs=" + "integrity": "sha1-Cr9PHKpbyx96nYrMbepPqqBLrJs=", + "dev": true }, "execa": { "version": "0.7.0", "resolved": "https://registry.npmjs.org/execa/-/execa-0.7.0.tgz", "integrity": "sha1-lEvs00zEHuMqY6n68nrVpl/Fl3c=", + "dev": true, "requires": { "cross-spawn": "^5.0.1", "get-stream": "^3.0.0", @@ -685,12 +778,14 @@ "extend": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", - "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==" + "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==", + "dev": true }, "external-editor": { "version": "3.0.3", "resolved": "https://registry.npmjs.org/external-editor/-/external-editor-3.0.3.tgz", "integrity": "sha512-bn71H9+qWoOQKyZDo25mOMVpSmXROAsTJVVVYzrrtol3d4y+AsKjf4Iwl2Q+IuT0kFSQ1qo166UuIwqYq7mGnA==", + "dev": true, "requires": { "chardet": "^0.7.0", "iconv-lite": "^0.4.24", @@ -700,22 +795,26 @@ "extsprintf": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz", - "integrity": "sha1-lpGEQOMEGnpBT4xS48V06zw+HgU=" + "integrity": "sha1-lpGEQOMEGnpBT4xS48V06zw+HgU=", + "dev": true }, "fast-deep-equal": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-2.0.1.tgz", - "integrity": "sha1-ewUhjd+WZ79/Nwv3/bLLFf3Qqkk=" + "integrity": "sha1-ewUhjd+WZ79/Nwv3/bLLFf3Qqkk=", + "dev": true }, "fast-json-stable-stringify": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.0.0.tgz", - "integrity": "sha1-1RQsDK7msRifh9OnYREGT4bIu/I=" + "integrity": "sha1-1RQsDK7msRifh9OnYREGT4bIu/I=", + "dev": true }, "figures": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/figures/-/figures-2.0.0.tgz", "integrity": "sha1-OrGi0qYsi/tDGgyUy3l6L84nyWI=", + "dev": true, "requires": { "escape-string-regexp": "^1.0.5" } @@ -724,6 +823,7 @@ "version": "2.1.0", "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz", "integrity": "sha1-RdG35QbHF93UgndaK3eSCjwMV6c=", + "dev": true, "requires": { "locate-path": "^2.0.0" } @@ -731,12 +831,14 @@ "forever-agent": { "version": "0.6.1", "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", - "integrity": "sha1-+8cfDEGt6zf5bFd60e1C2P2sypE=" + "integrity": "sha1-+8cfDEGt6zf5bFd60e1C2P2sypE=", + "dev": true }, "form-data": { "version": "2.3.3", "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.3.tgz", "integrity": "sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==", + "dev": true, "requires": { "asynckit": "^0.4.0", "combined-stream": "^1.0.6", @@ -746,17 +848,20 @@ "fs.realpath": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=" + "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", + "dev": true }, "get-stream": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-3.0.0.tgz", - "integrity": "sha1-jpQ9E1jcN1VQVOy+LtsFqhdO3hQ=" + "integrity": "sha1-jpQ9E1jcN1VQVOy+LtsFqhdO3hQ=", + "dev": true }, "getpass": { "version": "0.1.7", "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz", "integrity": "sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=", + "dev": true, "requires": { "assert-plus": "^1.0.0" } @@ -765,6 +870,7 @@ "version": "7.1.2", "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz", "integrity": "sha512-MJTUg1kjuLeQCJ+ccE4Vpa6kKVXkPYJ2mOCQyUuKLcLQsdrMCpBPUi8qVE6+YuaJkozeA9NusTAw3hLr8Xe5EQ==", + "dev": true, "requires": { "fs.realpath": "^1.0.0", "inflight": "^1.0.4", @@ -778,6 +884,7 @@ "version": "0.1.1", "resolved": "https://registry.npmjs.org/global-dirs/-/global-dirs-0.1.1.tgz", "integrity": "sha1-sxnA3UYH81PzvpzKTHL8FIxJ9EU=", + "dev": true, "requires": { "ini": "^1.3.4" } @@ -785,12 +892,14 @@ "globals": { "version": "11.9.0", "resolved": "https://registry.npmjs.org/globals/-/globals-11.9.0.tgz", - "integrity": "sha512-5cJVtyXWH8PiJPVLZzzoIizXx944O4OmRro5MWKx5fT4MgcN7OfaMutPeaTdJCCURwbWdhhcCWcKIffPnmTzBg==" + "integrity": "sha512-5cJVtyXWH8PiJPVLZzzoIizXx944O4OmRro5MWKx5fT4MgcN7OfaMutPeaTdJCCURwbWdhhcCWcKIffPnmTzBg==", + "dev": true }, "got": { "version": "6.7.1", "resolved": "http://registry.npmjs.org/got/-/got-6.7.1.tgz", "integrity": "sha1-JAzQV4WpoY5WHcG0S0HHY+8ejbA=", + "dev": true, "requires": { "create-error-class": "^3.0.0", "duplexer3": "^0.1.4", @@ -808,17 +917,20 @@ "graceful-fs": { "version": "4.1.15", "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.15.tgz", - "integrity": "sha512-6uHUhOPEBgQ24HM+r6b/QwWfZq+yiFcipKFrOFiBEnWdy5sdzYoi+pJeQaPI5qOLRFqWmAXUPQNsielzdLoecA==" + "integrity": "sha512-6uHUhOPEBgQ24HM+r6b/QwWfZq+yiFcipKFrOFiBEnWdy5sdzYoi+pJeQaPI5qOLRFqWmAXUPQNsielzdLoecA==", + "dev": true }, "growl": { "version": "1.10.3", "resolved": "https://registry.npmjs.org/growl/-/growl-1.10.3.tgz", - "integrity": "sha512-hKlsbA5Vu3xsh1Cg3J7jSmX/WaW6A5oBeqzM88oNbCRQFz+zUaXm6yxS4RVytp1scBoJzSYl4YAEOQIt6O8V1Q==" + "integrity": "sha512-hKlsbA5Vu3xsh1Cg3J7jSmX/WaW6A5oBeqzM88oNbCRQFz+zUaXm6yxS4RVytp1scBoJzSYl4YAEOQIt6O8V1Q==", + "dev": true }, "gts": { "version": "0.9.0", "resolved": "https://registry.npmjs.org/gts/-/gts-0.9.0.tgz", "integrity": "sha512-Id2Vmg0xNU1FODc0AwmaFA1h0+h6V9/zBqu4NfT8FucVOVEP7pyJ16btyHfSH/UdzTCXjV1fq+fNBEgx/50EaA==", + "dev": true, "requires": { "chalk": "^2.4.1", "clang-format": "1.2.3", @@ -837,6 +949,7 @@ "version": "2.4.1", "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.1.tgz", "integrity": "sha512-ObN6h1v2fTJSmUXoS3nMQ92LbDK9be4TV+6G+omQlGJFdcUX5heKi1LZ1YnRMIgwTLEj3E24bT6tYni50rlCfQ==", + "dev": true, "requires": { "ansi-styles": "^3.2.1", "escape-string-regexp": "^1.0.5", @@ -846,12 +959,14 @@ "has-flag": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=" + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", + "dev": true }, "supports-color": { "version": "5.5.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, "requires": { "has-flag": "^3.0.0" } @@ -861,12 +976,14 @@ "har-schema": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz", - "integrity": "sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI=" + "integrity": "sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI=", + "dev": true }, "har-validator": { "version": "5.1.3", "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.1.3.tgz", "integrity": "sha512-sNvOCzEQNr/qrvJgc3UG/kD4QtlHycrzwS+6mfTrrSq97BvaYcPZZI1ZSqGSPR73Cxn4LKTD4PttRwfU7jWq5g==", + "dev": true, "requires": { "ajv": "^6.5.5", "har-schema": "^2.0.0" @@ -876,6 +993,7 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz", "integrity": "sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE=", + "dev": true, "requires": { "ansi-regex": "^2.0.0" }, @@ -883,29 +1001,34 @@ "ansi-regex": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", - "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=" + "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", + "dev": true } } }, "has-flag": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-2.0.0.tgz", - "integrity": "sha1-6CB68cx7MNRGzHC3NLXovhj4jVE=" + "integrity": "sha1-6CB68cx7MNRGzHC3NLXovhj4jVE=", + "dev": true }, "he": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/he/-/he-1.1.1.tgz", - "integrity": "sha1-k0EP0hsAlzUVH4howvJx80J+I/0=" + "integrity": "sha1-k0EP0hsAlzUVH4howvJx80J+I/0=", + "dev": true }, "hosted-git-info": { "version": "2.7.1", "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.7.1.tgz", - "integrity": "sha512-7T/BxH19zbcCTa8XkMlbK5lTo1WtgkFi3GvdWEyNuc4Vex7/9Dqbnpsf4JMydcfj9HCg4zUWFTL3Za6lapg5/w==" + "integrity": "sha512-7T/BxH19zbcCTa8XkMlbK5lTo1WtgkFi3GvdWEyNuc4Vex7/9Dqbnpsf4JMydcfj9HCg4zUWFTL3Za6lapg5/w==", + "dev": true }, "http-signature": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz", "integrity": "sha1-muzZJRFHcvPZW2WmCruPfBj7rOE=", + "dev": true, "requires": { "assert-plus": "^1.0.0", "jsprim": "^1.2.2", @@ -916,6 +1039,7 @@ "version": "0.4.24", "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", + "dev": true, "requires": { "safer-buffer": ">= 2.1.2 < 3" } @@ -924,6 +1048,7 @@ "version": "3.0.1", "resolved": "https://registry.npmjs.org/ignore-walk/-/ignore-walk-3.0.1.tgz", "integrity": "sha512-DTVlMx3IYPe0/JJcYP7Gxg7ttZZu3IInhuEhbchuqneY9wWe5Ojy2mXLBaQFUQmo0AW2r3qG7m1mg86js+gnlQ==", + "dev": true, "requires": { "minimatch": "^3.0.4" } @@ -931,22 +1056,26 @@ "import-lazy": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/import-lazy/-/import-lazy-2.1.0.tgz", - "integrity": "sha1-BWmOPUXIjo1+nZLLBYTnfwlvPkM=" + "integrity": "sha1-BWmOPUXIjo1+nZLLBYTnfwlvPkM=", + "dev": true }, "imurmurhash": { "version": "0.1.4", "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", - "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=" + "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=", + "dev": true }, "indent-string": { "version": "3.2.0", "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-3.2.0.tgz", - "integrity": "sha1-Sl/W0nzDMvN+VBmlBNu4NxBckok=" + "integrity": "sha1-Sl/W0nzDMvN+VBmlBNu4NxBckok=", + "dev": true }, "inflight": { "version": "1.0.6", "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", + "dev": true, "requires": { "once": "^1.3.0", "wrappy": "1" @@ -955,17 +1084,20 @@ "inherits": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", - "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=" + "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=", + "dev": true }, "ini": { "version": "1.3.5", "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.5.tgz", - "integrity": "sha512-RZY5huIKCMRWDUqZlEi72f/lmXKMvuszcMBduliQ3nnWbx9X/ZBQO7DijMEYS9EhHBb2qacRUMtC7svLwe0lcw==" + "integrity": "sha512-RZY5huIKCMRWDUqZlEi72f/lmXKMvuszcMBduliQ3nnWbx9X/ZBQO7DijMEYS9EhHBb2qacRUMtC7svLwe0lcw==", + "dev": true }, "inquirer": { "version": "6.2.1", "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-6.2.1.tgz", "integrity": "sha512-088kl3DRT2dLU5riVMKKr1DlImd6X7smDhpXUCkJDCKvTEJeRiXh0G132HG9u5a+6Ylw9plFRY7RuTnwohYSpg==", + "dev": true, "requires": { "ansi-escapes": "^3.0.0", "chalk": "^2.0.0", @@ -986,6 +1118,7 @@ "version": "0.1.2", "resolved": "https://registry.npmjs.org/intercept-stdout/-/intercept-stdout-0.1.2.tgz", "integrity": "sha1-Emq/H65sUJpCipjGGmMVWQQq6f0=", + "dev": true, "requires": { "lodash.toarray": "^3.0.0" } @@ -993,12 +1126,14 @@ "is-arrayish": { "version": "0.2.1", "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", - "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=" + "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=", + "dev": true }, "is-builtin-module": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-builtin-module/-/is-builtin-module-1.0.0.tgz", "integrity": "sha1-VAVy0096wxGfj3bDDLwbHgN6/74=", + "dev": true, "requires": { "builtin-modules": "^1.0.0" } @@ -1007,6 +1142,7 @@ "version": "1.2.1", "resolved": "https://registry.npmjs.org/is-ci/-/is-ci-1.2.1.tgz", "integrity": "sha512-s6tfsaQaQi3JNciBH6shVqEDvhGut0SUXr31ag8Pd8BBbVVlcGfWhpPmEOoM6RJ5TFhbypvf5yyRw/VXW1IiWg==", + "dev": true, "requires": { "ci-info": "^1.5.0" } @@ -1014,12 +1150,14 @@ "is-fullwidth-code-point": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", - "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=" + "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", + "dev": true }, "is-installed-globally": { "version": "0.1.0", "resolved": "https://registry.npmjs.org/is-installed-globally/-/is-installed-globally-0.1.0.tgz", "integrity": "sha1-Df2Y9akRFxbdU13aZJL2e/PSWoA=", + "dev": true, "requires": { "global-dirs": "^0.1.0", "is-path-inside": "^1.0.0" @@ -1028,17 +1166,20 @@ "is-npm": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-npm/-/is-npm-1.0.0.tgz", - "integrity": "sha1-8vtjpl5JBbQGyGBydloaTceTufQ=" + "integrity": "sha1-8vtjpl5JBbQGyGBydloaTceTufQ=", + "dev": true }, "is-obj": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-1.0.1.tgz", - "integrity": "sha1-PkcprB9f3gJc19g6iW2rn09n2w8=" + "integrity": "sha1-PkcprB9f3gJc19g6iW2rn09n2w8=", + "dev": true }, "is-path-inside": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-1.0.1.tgz", "integrity": "sha1-jvW33lBDej/cprToZe96pVy0gDY=", + "dev": true, "requires": { "path-is-inside": "^1.0.1" } @@ -1046,52 +1187,62 @@ "is-plain-obj": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-1.1.0.tgz", - "integrity": "sha1-caUMhCnfync8kqOQpKA7OfzVHT4=" + "integrity": "sha1-caUMhCnfync8kqOQpKA7OfzVHT4=", + "dev": true }, "is-promise": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/is-promise/-/is-promise-2.1.0.tgz", - "integrity": "sha1-eaKp7OfwlugPNtKy87wWwf9L8/o=" + "integrity": "sha1-eaKp7OfwlugPNtKy87wWwf9L8/o=", + "dev": true }, "is-redirect": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-redirect/-/is-redirect-1.0.0.tgz", - "integrity": "sha1-HQPd7VO9jbDzDCbk+V02/HyH3CQ=" + "integrity": "sha1-HQPd7VO9jbDzDCbk+V02/HyH3CQ=", + "dev": true }, "is-retry-allowed": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/is-retry-allowed/-/is-retry-allowed-1.1.0.tgz", - "integrity": "sha1-EaBgVotnM5REAz0BJaYaINVk+zQ=" + "integrity": "sha1-EaBgVotnM5REAz0BJaYaINVk+zQ=", + "dev": true }, "is-stream": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", - "integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ=" + "integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ=", + "dev": true }, "is-typedarray": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", - "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=" + "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=", + "dev": true }, "isexe": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=" + "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=", + "dev": true }, "isstream": { "version": "0.1.2", "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", - "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=" + "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=", + "dev": true }, "istanbul-lib-coverage": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.1.tgz", - "integrity": "sha512-nPvSZsVlbG9aLhZYaC3Oi1gT/tpyo3Yt5fNyf6NmcKIayz4VV/txxJFFKAK/gU4dcNn8ehsanBbVHVl0+amOLA==" + "integrity": "sha512-nPvSZsVlbG9aLhZYaC3Oi1gT/tpyo3Yt5fNyf6NmcKIayz4VV/txxJFFKAK/gU4dcNn8ehsanBbVHVl0+amOLA==", + "dev": true }, "istanbul-lib-instrument": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-3.0.0.tgz", "integrity": "sha512-eQY9vN9elYjdgN9Iv6NS/00bptm02EBBk70lRMaVjeA6QYocQgenVrSgC28TJurdnZa80AGO3ASdFN+w/njGiQ==", + "dev": true, "requires": { "@babel/generator": "^7.0.0", "@babel/parser": "^7.0.0", @@ -1105,12 +1256,14 @@ "js-tokens": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-3.0.2.tgz", - "integrity": "sha1-mGbfOVECEw449/mWvOtlRDIJwls=" + "integrity": "sha1-mGbfOVECEw449/mWvOtlRDIJwls=", + "dev": true }, "js-yaml": { "version": "3.12.0", "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.12.0.tgz", "integrity": "sha512-PIt2cnwmPfL4hKNwqeiuz4bKfnzHTBv6HyVgjahA6mPLwPDzjDWrplJBMjHUFxku/N3FlmrbyPclad+I+4mJ3A==", + "dev": true, "requires": { "argparse": "^1.0.7", "esprima": "^4.0.0" @@ -1119,37 +1272,44 @@ "jsbn": { "version": "0.1.1", "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz", - "integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM=" + "integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM=", + "dev": true }, "jsesc": { "version": "2.5.2", "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", - "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==" + "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==", + "dev": true }, "json-parse-better-errors": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz", - "integrity": "sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==" + "integrity": "sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==", + "dev": true }, "json-schema": { "version": "0.2.3", "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.2.3.tgz", - "integrity": "sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM=" + "integrity": "sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM=", + "dev": true }, "json-schema-traverse": { "version": "0.4.1", "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", - "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==" + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", + "dev": true }, "json-stringify-safe": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", - "integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=" + "integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=", + "dev": true }, "jsprim": { "version": "1.4.1", "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.1.tgz", "integrity": "sha1-MT5mvB5cwG5Di8G3SZwuXFastqI=", + "dev": true, "requires": { "assert-plus": "1.0.0", "extsprintf": "1.3.0", @@ -1161,6 +1321,7 @@ "version": "3.1.0", "resolved": "https://registry.npmjs.org/latest-version/-/latest-version-3.1.0.tgz", "integrity": "sha1-ogU4P+oyKzO1rjsYq+4NwvNW7hU=", + "dev": true, "requires": { "package-json": "^4.0.0" } @@ -1169,6 +1330,7 @@ "version": "4.0.0", "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-4.0.0.tgz", "integrity": "sha1-L19Fq5HjMhYjT9U62rZo607AmTs=", + "dev": true, "requires": { "graceful-fs": "^4.1.2", "parse-json": "^4.0.0", @@ -1179,7 +1341,8 @@ "pify": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", - "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=" + "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=", + "dev": true } } }, @@ -1187,6 +1350,7 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz", "integrity": "sha1-K1aLJl7slExtnA3pw9u7ygNUzY4=", + "dev": true, "requires": { "p-locate": "^2.0.0", "path-exists": "^3.0.0" @@ -1195,37 +1359,44 @@ "lodash": { "version": "4.17.11", "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.11.tgz", - "integrity": "sha512-cQKh8igo5QUhZ7lg38DYWAxMvjSAKG0A8wGSVimP07SIUEK2UO+arSRKbRZWtelMtN5V0Hkwh5ryOto/SshYIg==" + "integrity": "sha512-cQKh8igo5QUhZ7lg38DYWAxMvjSAKG0A8wGSVimP07SIUEK2UO+arSRKbRZWtelMtN5V0Hkwh5ryOto/SshYIg==", + "dev": true }, "lodash._arraycopy": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/lodash._arraycopy/-/lodash._arraycopy-3.0.0.tgz", - "integrity": "sha1-due3wfH7klRzdIeKVi7Qaj5Q9uE=" + "integrity": "sha1-due3wfH7klRzdIeKVi7Qaj5Q9uE=", + "dev": true }, "lodash._basevalues": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/lodash._basevalues/-/lodash._basevalues-3.0.0.tgz", - "integrity": "sha1-W3dXYoAr3j0yl1A+JjAIIP32Ybc=" + "integrity": "sha1-W3dXYoAr3j0yl1A+JjAIIP32Ybc=", + "dev": true }, "lodash._getnative": { "version": "3.9.1", "resolved": "https://registry.npmjs.org/lodash._getnative/-/lodash._getnative-3.9.1.tgz", - "integrity": "sha1-VwvH3t5G1hzc3mh9ZdPuy6o6r/U=" + "integrity": "sha1-VwvH3t5G1hzc3mh9ZdPuy6o6r/U=", + "dev": true }, "lodash.isarguments": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/lodash.isarguments/-/lodash.isarguments-3.1.0.tgz", - "integrity": "sha1-L1c9hcaiQon/AGY7SRwdM4/zRYo=" + "integrity": "sha1-L1c9hcaiQon/AGY7SRwdM4/zRYo=", + "dev": true }, "lodash.isarray": { "version": "3.0.4", "resolved": "https://registry.npmjs.org/lodash.isarray/-/lodash.isarray-3.0.4.tgz", - "integrity": "sha1-eeTriMNqgSKvhvhEqpvNhRtfu1U=" + "integrity": "sha1-eeTriMNqgSKvhvhEqpvNhRtfu1U=", + "dev": true }, "lodash.keys": { "version": "3.1.2", "resolved": "https://registry.npmjs.org/lodash.keys/-/lodash.keys-3.1.2.tgz", "integrity": "sha1-TbwEcrFWvlCgsoaFXRvQsMZWCYo=", + "dev": true, "requires": { "lodash._getnative": "^3.0.0", "lodash.isarguments": "^3.0.0", @@ -1236,6 +1407,7 @@ "version": "3.0.2", "resolved": "https://registry.npmjs.org/lodash.toarray/-/lodash.toarray-3.0.2.tgz", "integrity": "sha1-KyBPD6T1HChcbwDIHRzqWiMEEXk=", + "dev": true, "requires": { "lodash._arraycopy": "^3.0.0", "lodash._basevalues": "^3.0.0", @@ -1251,6 +1423,7 @@ "version": "1.6.0", "resolved": "https://registry.npmjs.org/loud-rejection/-/loud-rejection-1.6.0.tgz", "integrity": "sha1-W0b4AUft7leIcPCG0Eghz5mOVR8=", + "dev": true, "requires": { "currently-unhandled": "^0.4.1", "signal-exit": "^3.0.0" @@ -1259,12 +1432,14 @@ "lowercase-keys": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-1.0.1.tgz", - "integrity": "sha512-G2Lj61tXDnVFFOi8VZds+SoQjtQC3dgokKdDG2mTm1tx4m50NUHBOZSBwQQHyy0V12A0JTG4icfZQH+xPyh8VA==" + "integrity": "sha512-G2Lj61tXDnVFFOi8VZds+SoQjtQC3dgokKdDG2mTm1tx4m50NUHBOZSBwQQHyy0V12A0JTG4icfZQH+xPyh8VA==", + "dev": true }, "lru-cache": { "version": "4.1.5", "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.5.tgz", "integrity": "sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g==", + "dev": true, "requires": { "pseudomap": "^1.0.2", "yallist": "^2.1.2" @@ -1274,6 +1449,7 @@ "version": "1.3.0", "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-1.3.0.tgz", "integrity": "sha512-2w31R7SJtieJJnQtGc7RVL2StM2vGYVfqUOvUDxH6bC6aJTxPxTF0GnIgCyu7tjockiUWAYQRbxa7vKn34s5sQ==", + "dev": true, "requires": { "pify": "^3.0.0" }, @@ -1281,24 +1457,28 @@ "pify": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", - "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=" + "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=", + "dev": true } } }, "make-error": { "version": "1.3.5", "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.5.tgz", - "integrity": "sha512-c3sIjNUow0+8swNwVpqoH4YCShKNFkMaw6oH1mNS2haDZQqkeZFlHS3dhoeEbKKmJB4vXpJucU6oH75aDYeE9g==" + "integrity": "sha512-c3sIjNUow0+8swNwVpqoH4YCShKNFkMaw6oH1mNS2haDZQqkeZFlHS3dhoeEbKKmJB4vXpJucU6oH75aDYeE9g==", + "dev": true }, "map-obj": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-2.0.0.tgz", - "integrity": "sha1-plzSkIepJZi4eRJXpSPgISIqwfk=" + "integrity": "sha1-plzSkIepJZi4eRJXpSPgISIqwfk=", + "dev": true }, "meow": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/meow/-/meow-5.0.0.tgz", "integrity": "sha512-CbTqYU17ABaLefO8vCU153ZZlprKYWDljcndKKDCFcYQITzWCXZAVk4QMFZPgvzrnUQ3uItnIE/LoUOwrT15Ig==", + "dev": true, "requires": { "camelcase-keys": "^4.0.0", "decamelize-keys": "^1.0.0", @@ -1314,12 +1494,14 @@ "mime-db": { "version": "1.37.0", "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.37.0.tgz", - "integrity": "sha512-R3C4db6bgQhlIhPU48fUtdVmKnflq+hRdad7IyKhtFj06VPNVdk2RhiYL3UjQIlso8L+YxAtFkobT0VK+S/ybg==" + "integrity": "sha512-R3C4db6bgQhlIhPU48fUtdVmKnflq+hRdad7IyKhtFj06VPNVdk2RhiYL3UjQIlso8L+YxAtFkobT0VK+S/ybg==", + "dev": true }, "mime-types": { "version": "2.1.21", "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.21.tgz", "integrity": "sha512-3iL6DbwpyLzjR3xHSFNFeb9Nz/M8WDkX33t1GFQnFOllWk8pOrh/LSrB5OXlnlW5P9LH73X6loW/eogc+F5lJg==", + "dev": true, "requires": { "mime-db": "~1.37.0" } @@ -1327,12 +1509,14 @@ "mimic-fn": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-1.2.0.tgz", - "integrity": "sha512-jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ==" + "integrity": "sha512-jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ==", + "dev": true }, "minimatch": { "version": "3.0.4", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", + "dev": true, "requires": { "brace-expansion": "^1.1.7" } @@ -1340,12 +1524,14 @@ "minimist": { "version": "0.0.8", "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz", - "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=" + "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=", + "dev": true }, "minimist-options": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/minimist-options/-/minimist-options-3.0.2.tgz", "integrity": "sha512-FyBrT/d0d4+uiZRbqznPXqw3IpZZG3gl3wKWiX784FycUKVwBt0uLBFkQrtE4tZOrgo78nZp2jnKz3L65T5LdQ==", + "dev": true, "requires": { "arrify": "^1.0.1", "is-plain-obj": "^1.1.0" @@ -1355,6 +1541,7 @@ "version": "0.5.1", "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz", "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=", + "dev": true, "requires": { "minimist": "0.0.8" } @@ -1363,6 +1550,7 @@ "version": "5.0.4", "resolved": "https://registry.npmjs.org/mocha/-/mocha-5.0.4.tgz", "integrity": "sha512-nMOpAPFosU1B4Ix1jdhx5e3q7XO55ic5a8cgYvW27CequcEY+BabS0kUVL1Cw1V5PuVHZWeNRWFLmEPexo79VA==", + "dev": true, "requires": { "browser-stdout": "1.3.1", "commander": "2.11.0", @@ -1379,22 +1567,26 @@ "ms": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "dev": true }, "mute-stream": { "version": "0.0.7", "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.7.tgz", - "integrity": "sha1-MHXOk7whuPq0PhvE2n6BFe0ee6s=" + "integrity": "sha1-MHXOk7whuPq0PhvE2n6BFe0ee6s=", + "dev": true }, "ncp": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/ncp/-/ncp-2.0.0.tgz", - "integrity": "sha1-GVoh1sRuNh0vsSgbo4uR6d9727M=" + "integrity": "sha1-GVoh1sRuNh0vsSgbo4uR6d9727M=", + "dev": true }, "normalize-package-data": { "version": "2.4.0", "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.4.0.tgz", "integrity": "sha512-9jjUFbTPfEy3R/ad/2oNbKtW9Hgovl5O1FvFWKkKblNXoN/Oou6+9+KKohPK13Yc3/TyunyWhJp6gvRNR/PPAw==", + "dev": true, "requires": { "hosted-git-info": "^2.1.4", "is-builtin-module": "^1.0.0", @@ -1406,6 +1598,7 @@ "version": "2.0.2", "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-2.0.2.tgz", "integrity": "sha1-NakjLfo11wZ7TLLd8jV7GHFTbF8=", + "dev": true, "requires": { "path-key": "^2.0.0" } @@ -1414,6 +1607,7 @@ "version": "13.1.0", "resolved": "https://registry.npmjs.org/nyc/-/nyc-13.1.0.tgz", "integrity": "sha512-3GyY6TpQ58z9Frpv4GMExE1SV2tAgYqC7HSy2omEhNiCT3mhT9NyiOvIE8zkbuJVFzmvvNTnE4h/7/wQae7xLg==", + "dev": true, "requires": { "archy": "^1.0.0", "arrify": "^1.0.1", @@ -1445,7 +1639,7 @@ "align-text": { "version": "0.1.4", "bundled": true, - "optional": true, + "dev": true, "requires": { "kind-of": "^3.0.2", "longest": "^1.0.1", @@ -1454,38 +1648,46 @@ }, "amdefine": { "version": "1.0.1", - "bundled": true + "bundled": true, + "dev": true }, "ansi-regex": { "version": "3.0.0", - "bundled": true + "bundled": true, + "dev": true }, "append-transform": { "version": "1.0.0", "bundled": true, + "dev": true, "requires": { "default-require-extensions": "^2.0.0" } }, "archy": { "version": "1.0.0", - "bundled": true + "bundled": true, + "dev": true }, "arrify": { "version": "1.0.1", - "bundled": true + "bundled": true, + "dev": true }, "async": { "version": "1.5.2", - "bundled": true + "bundled": true, + "dev": true }, "balanced-match": { "version": "1.0.0", - "bundled": true + "bundled": true, + "dev": true }, "brace-expansion": { "version": "1.1.11", "bundled": true, + "dev": true, "requires": { "balanced-match": "^1.0.0", "concat-map": "0.0.1" @@ -1493,11 +1695,13 @@ }, "builtin-modules": { "version": "1.1.1", - "bundled": true + "bundled": true, + "dev": true }, "caching-transform": { "version": "2.0.0", "bundled": true, + "dev": true, "requires": { "make-dir": "^1.0.0", "md5-hex": "^2.0.0", @@ -1508,11 +1712,13 @@ "camelcase": { "version": "1.2.1", "bundled": true, + "dev": true, "optional": true }, "center-align": { "version": "0.1.3", "bundled": true, + "dev": true, "optional": true, "requires": { "align-text": "^0.1.3", @@ -1522,6 +1728,7 @@ "cliui": { "version": "2.1.0", "bundled": true, + "dev": true, "optional": true, "requires": { "center-align": "^0.1.1", @@ -1532,25 +1739,30 @@ "wordwrap": { "version": "0.0.2", "bundled": true, + "dev": true, "optional": true } } }, "code-point-at": { "version": "1.1.0", - "bundled": true + "bundled": true, + "dev": true }, "commondir": { "version": "1.0.1", - "bundled": true + "bundled": true, + "dev": true }, "concat-map": { "version": "0.0.1", - "bundled": true + "bundled": true, + "dev": true }, "convert-source-map": { "version": "1.6.0", "bundled": true, + "dev": true, "requires": { "safe-buffer": "~5.1.1" } @@ -1558,6 +1770,7 @@ "cross-spawn": { "version": "4.0.2", "bundled": true, + "dev": true, "requires": { "lru-cache": "^4.0.1", "which": "^1.2.9" @@ -1566,21 +1779,25 @@ "debug": { "version": "3.1.0", "bundled": true, + "dev": true, "requires": { "ms": "2.0.0" } }, "debug-log": { "version": "1.0.1", - "bundled": true + "bundled": true, + "dev": true }, "decamelize": { "version": "1.2.0", - "bundled": true + "bundled": true, + "dev": true }, "default-require-extensions": { "version": "2.0.0", "bundled": true, + "dev": true, "requires": { "strip-bom": "^3.0.0" } @@ -1588,17 +1805,20 @@ "error-ex": { "version": "1.3.2", "bundled": true, + "dev": true, "requires": { "is-arrayish": "^0.2.1" } }, "es6-error": { "version": "4.1.1", - "bundled": true + "bundled": true, + "dev": true }, "execa": { "version": "0.7.0", "bundled": true, + "dev": true, "requires": { "cross-spawn": "^5.0.1", "get-stream": "^3.0.0", @@ -1612,6 +1832,7 @@ "cross-spawn": { "version": "5.1.0", "bundled": true, + "dev": true, "requires": { "lru-cache": "^4.0.1", "shebang-command": "^1.2.0", @@ -1623,6 +1844,7 @@ "find-cache-dir": { "version": "2.0.0", "bundled": true, + "dev": true, "requires": { "commondir": "^1.0.1", "make-dir": "^1.0.0", @@ -1632,6 +1854,7 @@ "find-up": { "version": "3.0.0", "bundled": true, + "dev": true, "requires": { "locate-path": "^3.0.0" } @@ -1639,6 +1862,7 @@ "foreground-child": { "version": "1.5.6", "bundled": true, + "dev": true, "requires": { "cross-spawn": "^4", "signal-exit": "^3.0.0" @@ -1646,19 +1870,23 @@ }, "fs.realpath": { "version": "1.0.0", - "bundled": true + "bundled": true, + "dev": true }, "get-caller-file": { "version": "1.0.3", - "bundled": true + "bundled": true, + "dev": true }, "get-stream": { "version": "3.0.0", - "bundled": true + "bundled": true, + "dev": true }, "glob": { "version": "7.1.3", "bundled": true, + "dev": true, "requires": { "fs.realpath": "^1.0.0", "inflight": "^1.0.4", @@ -1670,11 +1898,13 @@ }, "graceful-fs": { "version": "4.1.11", - "bundled": true + "bundled": true, + "dev": true }, "handlebars": { "version": "4.0.11", "bundled": true, + "dev": true, "requires": { "async": "^1.4.0", "optimist": "^0.6.1", @@ -1685,6 +1915,7 @@ "source-map": { "version": "0.4.4", "bundled": true, + "dev": true, "requires": { "amdefine": ">=0.0.4" } @@ -1693,19 +1924,23 @@ }, "has-flag": { "version": "3.0.0", - "bundled": true + "bundled": true, + "dev": true }, "hosted-git-info": { "version": "2.7.1", - "bundled": true + "bundled": true, + "dev": true }, "imurmurhash": { "version": "0.1.4", - "bundled": true + "bundled": true, + "dev": true }, "inflight": { "version": "1.0.6", "bundled": true, + "dev": true, "requires": { "once": "^1.3.0", "wrappy": "1" @@ -1713,47 +1948,56 @@ }, "inherits": { "version": "2.0.3", - "bundled": true + "bundled": true, + "dev": true }, "invert-kv": { "version": "1.0.0", - "bundled": true + "bundled": true, + "dev": true }, "is-arrayish": { "version": "0.2.1", - "bundled": true + "bundled": true, + "dev": true }, "is-buffer": { "version": "1.1.6", "bundled": true, - "optional": true + "dev": true }, "is-builtin-module": { "version": "1.0.0", "bundled": true, + "dev": true, "requires": { "builtin-modules": "^1.0.0" } }, "is-fullwidth-code-point": { "version": "2.0.0", - "bundled": true + "bundled": true, + "dev": true }, "is-stream": { "version": "1.1.0", - "bundled": true + "bundled": true, + "dev": true }, "isexe": { "version": "2.0.0", - "bundled": true + "bundled": true, + "dev": true }, "istanbul-lib-coverage": { "version": "2.0.1", - "bundled": true + "bundled": true, + "dev": true }, "istanbul-lib-hook": { "version": "2.0.1", "bundled": true, + "dev": true, "requires": { "append-transform": "^1.0.0" } @@ -1761,6 +2005,7 @@ "istanbul-lib-report": { "version": "2.0.2", "bundled": true, + "dev": true, "requires": { "istanbul-lib-coverage": "^2.0.1", "make-dir": "^1.3.0", @@ -1770,6 +2015,7 @@ "istanbul-lib-source-maps": { "version": "2.0.1", "bundled": true, + "dev": true, "requires": { "debug": "^3.1.0", "istanbul-lib-coverage": "^2.0.1", @@ -1780,25 +2026,28 @@ "dependencies": { "source-map": { "version": "0.6.1", - "bundled": true + "bundled": true, + "dev": true } } }, "istanbul-reports": { "version": "2.0.1", "bundled": true, + "dev": true, "requires": { "handlebars": "^4.0.11" } }, "json-parse-better-errors": { "version": "1.0.2", - "bundled": true + "bundled": true, + "dev": true }, "kind-of": { "version": "3.2.2", "bundled": true, - "optional": true, + "dev": true, "requires": { "is-buffer": "^1.1.5" } @@ -1806,11 +2055,13 @@ "lazy-cache": { "version": "1.0.4", "bundled": true, + "dev": true, "optional": true }, "lcid": { "version": "1.0.0", "bundled": true, + "dev": true, "requires": { "invert-kv": "^1.0.0" } @@ -1818,6 +2069,7 @@ "load-json-file": { "version": "4.0.0", "bundled": true, + "dev": true, "requires": { "graceful-fs": "^4.1.2", "parse-json": "^4.0.0", @@ -1828,6 +2080,7 @@ "locate-path": { "version": "3.0.0", "bundled": true, + "dev": true, "requires": { "p-locate": "^3.0.0", "path-exists": "^3.0.0" @@ -1835,16 +2088,18 @@ }, "lodash.flattendeep": { "version": "4.4.0", - "bundled": true + "bundled": true, + "dev": true }, "longest": { "version": "1.0.1", "bundled": true, - "optional": true + "dev": true }, "lru-cache": { "version": "4.1.3", "bundled": true, + "dev": true, "requires": { "pseudomap": "^1.0.2", "yallist": "^2.1.2" @@ -1853,6 +2108,7 @@ "make-dir": { "version": "1.3.0", "bundled": true, + "dev": true, "requires": { "pify": "^3.0.0" } @@ -1860,17 +2116,20 @@ "md5-hex": { "version": "2.0.0", "bundled": true, + "dev": true, "requires": { "md5-o-matic": "^0.1.1" } }, "md5-o-matic": { "version": "0.1.1", - "bundled": true + "bundled": true, + "dev": true }, "mem": { "version": "1.1.0", "bundled": true, + "dev": true, "requires": { "mimic-fn": "^1.0.0" } @@ -1878,51 +2137,60 @@ "merge-source-map": { "version": "1.1.0", "bundled": true, + "dev": true, "requires": { "source-map": "^0.6.1" }, "dependencies": { "source-map": { "version": "0.6.1", - "bundled": true + "bundled": true, + "dev": true } } }, "mimic-fn": { "version": "1.2.0", - "bundled": true + "bundled": true, + "dev": true }, "minimatch": { "version": "3.0.4", "bundled": true, + "dev": true, "requires": { "brace-expansion": "^1.1.7" } }, "minimist": { "version": "0.0.10", - "bundled": true + "bundled": true, + "dev": true }, "mkdirp": { "version": "0.5.1", "bundled": true, + "dev": true, "requires": { "minimist": "0.0.8" }, "dependencies": { "minimist": { "version": "0.0.8", - "bundled": true + "bundled": true, + "dev": true } } }, "ms": { "version": "2.0.0", - "bundled": true + "bundled": true, + "dev": true }, "normalize-package-data": { "version": "2.4.0", "bundled": true, + "dev": true, "requires": { "hosted-git-info": "^2.1.4", "is-builtin-module": "^1.0.0", @@ -1933,17 +2201,20 @@ "npm-run-path": { "version": "2.0.2", "bundled": true, + "dev": true, "requires": { "path-key": "^2.0.0" } }, "number-is-nan": { "version": "1.0.1", - "bundled": true + "bundled": true, + "dev": true }, "once": { "version": "1.4.0", "bundled": true, + "dev": true, "requires": { "wrappy": "1" } @@ -1951,6 +2222,7 @@ "optimist": { "version": "0.6.1", "bundled": true, + "dev": true, "requires": { "minimist": "~0.0.1", "wordwrap": "~0.0.2" @@ -1958,11 +2230,13 @@ }, "os-homedir": { "version": "1.0.2", - "bundled": true + "bundled": true, + "dev": true }, "os-locale": { "version": "2.1.0", "bundled": true, + "dev": true, "requires": { "execa": "^0.7.0", "lcid": "^1.0.0", @@ -1971,11 +2245,13 @@ }, "p-finally": { "version": "1.0.0", - "bundled": true + "bundled": true, + "dev": true }, "p-limit": { "version": "2.0.0", "bundled": true, + "dev": true, "requires": { "p-try": "^2.0.0" } @@ -1983,17 +2259,20 @@ "p-locate": { "version": "3.0.0", "bundled": true, + "dev": true, "requires": { "p-limit": "^2.0.0" } }, "p-try": { "version": "2.0.0", - "bundled": true + "bundled": true, + "dev": true }, "package-hash": { "version": "2.0.0", "bundled": true, + "dev": true, "requires": { "graceful-fs": "^4.1.11", "lodash.flattendeep": "^4.4.0", @@ -2004,6 +2283,7 @@ "parse-json": { "version": "4.0.0", "bundled": true, + "dev": true, "requires": { "error-ex": "^1.3.1", "json-parse-better-errors": "^1.0.1" @@ -2011,41 +2291,49 @@ }, "path-exists": { "version": "3.0.0", - "bundled": true + "bundled": true, + "dev": true }, "path-is-absolute": { "version": "1.0.1", - "bundled": true + "bundled": true, + "dev": true }, "path-key": { "version": "2.0.1", - "bundled": true + "bundled": true, + "dev": true }, "path-type": { "version": "3.0.0", "bundled": true, + "dev": true, "requires": { "pify": "^3.0.0" } }, "pify": { "version": "3.0.0", - "bundled": true + "bundled": true, + "dev": true }, "pkg-dir": { "version": "3.0.0", "bundled": true, + "dev": true, "requires": { "find-up": "^3.0.0" } }, "pseudomap": { "version": "1.0.2", - "bundled": true + "bundled": true, + "dev": true }, "read-pkg": { "version": "3.0.0", "bundled": true, + "dev": true, "requires": { "load-json-file": "^4.0.0", "normalize-package-data": "^2.3.2", @@ -2055,6 +2343,7 @@ "read-pkg-up": { "version": "4.0.0", "bundled": true, + "dev": true, "requires": { "find-up": "^3.0.0", "read-pkg": "^3.0.0" @@ -2063,6 +2352,7 @@ "release-zalgo": { "version": "1.0.0", "bundled": true, + "dev": true, "requires": { "es6-error": "^4.0.1" } @@ -2070,23 +2360,27 @@ "repeat-string": { "version": "1.6.1", "bundled": true, - "optional": true + "dev": true }, "require-directory": { "version": "2.1.1", - "bundled": true + "bundled": true, + "dev": true }, "require-main-filename": { "version": "1.0.1", - "bundled": true + "bundled": true, + "dev": true }, "resolve-from": { "version": "4.0.0", - "bundled": true + "bundled": true, + "dev": true }, "right-align": { "version": "0.1.3", "bundled": true, + "dev": true, "optional": true, "requires": { "align-text": "^0.1.1" @@ -2095,45 +2389,54 @@ "rimraf": { "version": "2.6.2", "bundled": true, + "dev": true, "requires": { "glob": "^7.0.5" } }, "safe-buffer": { "version": "5.1.2", - "bundled": true + "bundled": true, + "dev": true }, "semver": { "version": "5.5.0", - "bundled": true + "bundled": true, + "dev": true }, "set-blocking": { "version": "2.0.0", - "bundled": true + "bundled": true, + "dev": true }, "shebang-command": { "version": "1.2.0", "bundled": true, + "dev": true, "requires": { "shebang-regex": "^1.0.0" } }, "shebang-regex": { "version": "1.0.0", - "bundled": true + "bundled": true, + "dev": true }, "signal-exit": { "version": "3.0.2", - "bundled": true + "bundled": true, + "dev": true }, "source-map": { "version": "0.5.7", "bundled": true, + "dev": true, "optional": true }, "spawn-wrap": { "version": "1.4.2", "bundled": true, + "dev": true, "requires": { "foreground-child": "^1.5.6", "mkdirp": "^0.5.0", @@ -2146,6 +2449,7 @@ "spdx-correct": { "version": "3.0.0", "bundled": true, + "dev": true, "requires": { "spdx-expression-parse": "^3.0.0", "spdx-license-ids": "^3.0.0" @@ -2153,11 +2457,13 @@ }, "spdx-exceptions": { "version": "2.1.0", - "bundled": true + "bundled": true, + "dev": true }, "spdx-expression-parse": { "version": "3.0.0", "bundled": true, + "dev": true, "requires": { "spdx-exceptions": "^2.1.0", "spdx-license-ids": "^3.0.0" @@ -2165,11 +2471,13 @@ }, "spdx-license-ids": { "version": "3.0.0", - "bundled": true + "bundled": true, + "dev": true }, "string-width": { "version": "2.1.1", "bundled": true, + "dev": true, "requires": { "is-fullwidth-code-point": "^2.0.0", "strip-ansi": "^4.0.0" @@ -2178,21 +2486,25 @@ "strip-ansi": { "version": "4.0.0", "bundled": true, + "dev": true, "requires": { "ansi-regex": "^3.0.0" } }, "strip-bom": { "version": "3.0.0", - "bundled": true + "bundled": true, + "dev": true }, "strip-eof": { "version": "1.0.0", - "bundled": true + "bundled": true, + "dev": true }, "supports-color": { "version": "5.4.0", "bundled": true, + "dev": true, "requires": { "has-flag": "^3.0.0" } @@ -2200,6 +2512,7 @@ "test-exclude": { "version": "5.0.0", "bundled": true, + "dev": true, "requires": { "arrify": "^1.0.1", "minimatch": "^3.0.4", @@ -2210,6 +2523,7 @@ "uglify-js": { "version": "2.8.29", "bundled": true, + "dev": true, "optional": true, "requires": { "source-map": "~0.5.1", @@ -2220,6 +2534,7 @@ "yargs": { "version": "3.10.0", "bundled": true, + "dev": true, "optional": true, "requires": { "camelcase": "^1.0.2", @@ -2233,15 +2548,18 @@ "uglify-to-browserify": { "version": "1.0.2", "bundled": true, + "dev": true, "optional": true }, "uuid": { "version": "3.3.2", - "bundled": true + "bundled": true, + "dev": true }, "validate-npm-package-license": { "version": "3.0.3", "bundled": true, + "dev": true, "requires": { "spdx-correct": "^3.0.0", "spdx-expression-parse": "^3.0.0" @@ -2250,26 +2568,31 @@ "which": { "version": "1.3.1", "bundled": true, + "dev": true, "requires": { "isexe": "^2.0.0" } }, "which-module": { "version": "2.0.0", - "bundled": true + "bundled": true, + "dev": true }, "window-size": { "version": "0.1.0", "bundled": true, + "dev": true, "optional": true }, "wordwrap": { "version": "0.0.3", - "bundled": true + "bundled": true, + "dev": true }, "wrap-ansi": { "version": "2.1.0", "bundled": true, + "dev": true, "requires": { "string-width": "^1.0.1", "strip-ansi": "^3.0.1" @@ -2277,11 +2600,13 @@ "dependencies": { "ansi-regex": { "version": "2.1.1", - "bundled": true + "bundled": true, + "dev": true }, "is-fullwidth-code-point": { "version": "1.0.0", "bundled": true, + "dev": true, "requires": { "number-is-nan": "^1.0.0" } @@ -2289,6 +2614,7 @@ "string-width": { "version": "1.0.2", "bundled": true, + "dev": true, "requires": { "code-point-at": "^1.0.0", "is-fullwidth-code-point": "^1.0.0", @@ -2298,6 +2624,7 @@ "strip-ansi": { "version": "3.0.1", "bundled": true, + "dev": true, "requires": { "ansi-regex": "^2.0.0" } @@ -2306,11 +2633,13 @@ }, "wrappy": { "version": "1.0.2", - "bundled": true + "bundled": true, + "dev": true }, "write-file-atomic": { "version": "2.3.0", "bundled": true, + "dev": true, "requires": { "graceful-fs": "^4.1.11", "imurmurhash": "^0.1.4", @@ -2319,15 +2648,18 @@ }, "y18n": { "version": "3.2.1", - "bundled": true + "bundled": true, + "dev": true }, "yallist": { "version": "2.1.2", - "bundled": true + "bundled": true, + "dev": true }, "yargs": { "version": "11.1.0", "bundled": true, + "dev": true, "requires": { "cliui": "^4.0.0", "decamelize": "^1.1.1", @@ -2346,6 +2678,7 @@ "cliui": { "version": "4.1.0", "bundled": true, + "dev": true, "requires": { "string-width": "^2.1.1", "strip-ansi": "^4.0.0", @@ -2355,6 +2688,7 @@ "find-up": { "version": "2.1.0", "bundled": true, + "dev": true, "requires": { "locate-path": "^2.0.0" } @@ -2362,6 +2696,7 @@ "locate-path": { "version": "2.0.0", "bundled": true, + "dev": true, "requires": { "p-locate": "^2.0.0", "path-exists": "^3.0.0" @@ -2370,6 +2705,7 @@ "p-limit": { "version": "1.3.0", "bundled": true, + "dev": true, "requires": { "p-try": "^1.0.0" } @@ -2377,26 +2713,30 @@ "p-locate": { "version": "2.0.0", "bundled": true, + "dev": true, "requires": { "p-limit": "^1.1.0" } }, "p-try": { "version": "1.0.0", - "bundled": true + "bundled": true, + "dev": true } } }, "yargs-parser": { "version": "9.0.2", "bundled": true, + "dev": true, "requires": { "camelcase": "^4.1.0" }, "dependencies": { "camelcase": { "version": "4.1.0", - "bundled": true + "bundled": true, + "dev": true } } } @@ -2405,12 +2745,14 @@ "oauth-sign": { "version": "0.9.0", "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.9.0.tgz", - "integrity": "sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ==" + "integrity": "sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ==", + "dev": true }, "once": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", + "dev": true, "requires": { "wrappy": "1" } @@ -2419,6 +2761,7 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/onetime/-/onetime-2.0.1.tgz", "integrity": "sha1-BnQoIw/WdEOyeUsiu6UotoZ5YtQ=", + "dev": true, "requires": { "mimic-fn": "^1.0.0" } @@ -2426,17 +2769,20 @@ "os-tmpdir": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", - "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=" + "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=", + "dev": true }, "p-finally": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz", - "integrity": "sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4=" + "integrity": "sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4=", + "dev": true }, "p-limit": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.3.0.tgz", "integrity": "sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==", + "dev": true, "requires": { "p-try": "^1.0.0" } @@ -2445,6 +2791,7 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-2.0.0.tgz", "integrity": "sha1-IKAQOyIqcMj9OcwuWAaA893l7EM=", + "dev": true, "requires": { "p-limit": "^1.1.0" } @@ -2452,12 +2799,14 @@ "p-try": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/p-try/-/p-try-1.0.0.tgz", - "integrity": "sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M=" + "integrity": "sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M=", + "dev": true }, "package-json": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/package-json/-/package-json-4.0.1.tgz", "integrity": "sha1-iGmgQBJTZhxMTKPabCEh7VVfXu0=", + "dev": true, "requires": { "got": "^6.7.1", "registry-auth-token": "^3.0.1", @@ -2469,6 +2818,7 @@ "version": "4.0.0", "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-4.0.0.tgz", "integrity": "sha1-vjX1Qlvh9/bHRxhPmKeIy5lHfuA=", + "dev": true, "requires": { "error-ex": "^1.3.1", "json-parse-better-errors": "^1.0.1" @@ -2477,32 +2827,38 @@ "path-exists": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", - "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=" + "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=", + "dev": true }, "path-is-absolute": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", - "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=" + "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", + "dev": true }, "path-is-inside": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/path-is-inside/-/path-is-inside-1.0.2.tgz", - "integrity": "sha1-NlQX3t5EQw0cEa9hAn+s8HS9/FM=" + "integrity": "sha1-NlQX3t5EQw0cEa9hAn+s8HS9/FM=", + "dev": true }, "path-key": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz", - "integrity": "sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=" + "integrity": "sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=", + "dev": true }, "path-parse": { "version": "1.0.6", "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.6.tgz", - "integrity": "sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw==" + "integrity": "sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw==", + "dev": true }, "path-type": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/path-type/-/path-type-3.0.0.tgz", "integrity": "sha512-T2ZUsdZFHgA3u4e5PfPbjd7HDDpxPnQb5jN0SrDsjNSuVXHJqtwTnWqG0B1jZrgmJ/7lj1EmVIByWt1gxGkWvg==", + "dev": true, "requires": { "pify": "^3.0.0" }, @@ -2510,54 +2866,64 @@ "pify": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", - "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=" + "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=", + "dev": true } } }, "performance-now": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz", - "integrity": "sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns=" + "integrity": "sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns=", + "dev": true }, "pify": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz", - "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==" + "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==", + "dev": true }, "prepend-http": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/prepend-http/-/prepend-http-1.0.4.tgz", - "integrity": "sha1-1PRWKwzjaW5BrFLQ4ALlemNdxtw=" + "integrity": "sha1-1PRWKwzjaW5BrFLQ4ALlemNdxtw=", + "dev": true }, "pseudomap": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/pseudomap/-/pseudomap-1.0.2.tgz", - "integrity": "sha1-8FKijacOYYkX7wqKw0wa5aaChrM=" + "integrity": "sha1-8FKijacOYYkX7wqKw0wa5aaChrM=", + "dev": true }, "psl": { "version": "1.1.29", "resolved": "https://registry.npmjs.org/psl/-/psl-1.1.29.tgz", - "integrity": "sha512-AeUmQ0oLN02flVHXWh9sSJF7mcdFq0ppid/JkErufc3hGIV/AMa8Fo9VgDo/cT2jFdOWoFvHp90qqBH54W+gjQ==" + "integrity": "sha512-AeUmQ0oLN02flVHXWh9sSJF7mcdFq0ppid/JkErufc3hGIV/AMa8Fo9VgDo/cT2jFdOWoFvHp90qqBH54W+gjQ==", + "dev": true }, "punycode": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", - "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==" + "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==", + "dev": true }, "qs": { "version": "6.5.2", "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.2.tgz", - "integrity": "sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA==" + "integrity": "sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA==", + "dev": true }, "quick-lru": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/quick-lru/-/quick-lru-1.1.0.tgz", - "integrity": "sha1-Q2CxfGETatOAeDl/8RQW4Ybc+7g=" + "integrity": "sha1-Q2CxfGETatOAeDl/8RQW4Ybc+7g=", + "dev": true }, "rc": { "version": "1.2.8", "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz", "integrity": "sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==", + "dev": true, "requires": { "deep-extend": "^0.6.0", "ini": "~1.3.0", @@ -2568,7 +2934,8 @@ "minimist": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", - "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=" + "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=", + "dev": true } } }, @@ -2576,6 +2943,7 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-3.0.0.tgz", "integrity": "sha1-nLxoaXj+5l0WwA4rGcI3/Pbjg4k=", + "dev": true, "requires": { "load-json-file": "^4.0.0", "normalize-package-data": "^2.3.2", @@ -2586,6 +2954,7 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-3.0.0.tgz", "integrity": "sha1-PtSWaF26D4/hGNBpHcUfSh/5bwc=", + "dev": true, "requires": { "find-up": "^2.0.0", "read-pkg": "^3.0.0" @@ -2595,6 +2964,7 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/redent/-/redent-2.0.0.tgz", "integrity": "sha1-wbIAe0LVfrE4kHmzyDM2OdXhzKo=", + "dev": true, "requires": { "indent-string": "^3.0.0", "strip-indent": "^2.0.0" @@ -2604,6 +2974,7 @@ "version": "3.3.2", "resolved": "https://registry.npmjs.org/registry-auth-token/-/registry-auth-token-3.3.2.tgz", "integrity": "sha512-JL39c60XlzCVgNrO+qq68FoNb56w/m7JYvGR2jT5iR1xBrUA3Mfx5Twk5rqTThPmQKMWydGmq8oFtDlxfrmxnQ==", + "dev": true, "requires": { "rc": "^1.1.6", "safe-buffer": "^5.0.1" @@ -2613,6 +2984,7 @@ "version": "3.1.0", "resolved": "https://registry.npmjs.org/registry-url/-/registry-url-3.1.0.tgz", "integrity": "sha1-PU74cPc93h138M+aOBQyRE4XSUI=", + "dev": true, "requires": { "rc": "^1.0.1" } @@ -2621,6 +2993,7 @@ "version": "2.88.0", "resolved": "https://registry.npmjs.org/request/-/request-2.88.0.tgz", "integrity": "sha512-NAqBSrijGLZdM0WZNsInLJpkJokL72XYjUpnB0iwsRgxh7dB6COrHnTBNwN0E+lHDAJzu7kLAkDeY08z2/A0hg==", + "dev": true, "requires": { "aws-sign2": "~0.7.0", "aws4": "^1.8.0", @@ -2647,7 +3020,8 @@ "uuid": { "version": "3.3.2", "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.3.2.tgz", - "integrity": "sha512-yXJmeNaw3DnnKAOKJE51sL/ZaYfWJRl1pK9dr19YFCu0ObS231AB1/LbqTKRAQ5kw8A90rA6fr4riOUpTZvQZA==" + "integrity": "sha512-yXJmeNaw3DnnKAOKJE51sL/ZaYfWJRl1pK9dr19YFCu0ObS231AB1/LbqTKRAQ5kw8A90rA6fr4riOUpTZvQZA==", + "dev": true } } }, @@ -2655,6 +3029,7 @@ "version": "1.8.1", "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.8.1.tgz", "integrity": "sha512-AicPrAC7Qu1JxPCZ9ZgCZlY35QgFnNqc+0LtbRNxnVw4TXvjQ72wnuL9JQcEBgXkI9JM8MsT9kaQoHcpCRJOYA==", + "dev": true, "requires": { "path-parse": "^1.0.5" } @@ -2663,6 +3038,7 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-2.0.0.tgz", "integrity": "sha1-n37ih/gv0ybU/RYpI9YhKe7g368=", + "dev": true, "requires": { "onetime": "^2.0.0", "signal-exit": "^3.0.2" @@ -2672,6 +3048,7 @@ "version": "2.6.2", "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.2.tgz", "integrity": "sha512-lreewLK/BlghmxtfH36YYVg1i8IAce4TI7oao75I1g245+6BctqTVQiBP3YUJ9C6DQOXJmkYR9X9fCLtCOJc5w==", + "dev": true, "requires": { "glob": "^7.0.5" } @@ -2680,6 +3057,7 @@ "version": "2.3.0", "resolved": "https://registry.npmjs.org/run-async/-/run-async-2.3.0.tgz", "integrity": "sha1-A3GrSuC91yDUFm19/aZP96RFpsA=", + "dev": true, "requires": { "is-promise": "^2.1.0" } @@ -2688,6 +3066,7 @@ "version": "6.3.3", "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.3.3.tgz", "integrity": "sha512-JTWmoY9tWCs7zvIk/CvRjhjGaOd+OVBM987mxFo+OW66cGpdKjZcpmc74ES1sB//7Kl/PAe8+wEakuhG4pcgOw==", + "dev": true, "requires": { "tslib": "^1.9.0" } @@ -2695,12 +3074,14 @@ "safe-buffer": { "version": "5.1.2", "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "dev": true }, "safer-buffer": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", - "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", + "dev": true }, "semver": { "version": "5.5.0", @@ -2711,6 +3092,7 @@ "version": "2.1.0", "resolved": "https://registry.npmjs.org/semver-diff/-/semver-diff-2.1.0.tgz", "integrity": "sha1-S7uEN8jTfksM8aaP1ybsbWRdbTY=", + "dev": true, "requires": { "semver": "^5.0.3" } @@ -2719,6 +3101,7 @@ "version": "1.2.0", "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", "integrity": "sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=", + "dev": true, "requires": { "shebang-regex": "^1.0.0" } @@ -2726,7 +3109,8 @@ "shebang-regex": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz", - "integrity": "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=" + "integrity": "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=", + "dev": true }, "shimmer": { "version": "1.2.0", @@ -2736,17 +3120,20 @@ "signal-exit": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.2.tgz", - "integrity": "sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0=" + "integrity": "sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0=", + "dev": true }, "source-map": { "version": "0.6.1", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true }, "source-map-support": { "version": "0.5.9", "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.9.tgz", "integrity": "sha512-gR6Rw4MvUlYy83vP0vxoVNzM6t8MUXqNuRsuBmBHQDu1Fh6X015FrLdgoDKcNdkwGubozq0P4N0Q37UyFVr1EA==", + "dev": true, "requires": { "buffer-from": "^1.0.0", "source-map": "^0.6.0" @@ -2756,6 +3143,7 @@ "version": "3.1.0", "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.1.0.tgz", "integrity": "sha512-lr2EZCctC2BNR7j7WzJ2FpDznxky1sjfxvvYEyzxNyb6lZXHODmEoJeFu4JupYlkfha1KZpJyoqiJ7pgA1qq8Q==", + "dev": true, "requires": { "spdx-expression-parse": "^3.0.0", "spdx-license-ids": "^3.0.0" @@ -2764,12 +3152,14 @@ "spdx-exceptions": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.2.0.tgz", - "integrity": "sha512-2XQACfElKi9SlVb1CYadKDXvoajPgBVPn/gOQLrTvHdElaVhr7ZEbqJaRnJLVNeaI4cMEAgVCeBMKF6MWRDCRA==" + "integrity": "sha512-2XQACfElKi9SlVb1CYadKDXvoajPgBVPn/gOQLrTvHdElaVhr7ZEbqJaRnJLVNeaI4cMEAgVCeBMKF6MWRDCRA==", + "dev": true }, "spdx-expression-parse": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.0.tgz", "integrity": "sha512-Yg6D3XpRD4kkOmTpdgbUiEJFKghJH03fiC1OPll5h/0sO6neh2jqRDVHOQ4o/LMea0tgCkbMgea5ip/e+MkWyg==", + "dev": true, "requires": { "spdx-exceptions": "^2.1.0", "spdx-license-ids": "^3.0.0" @@ -2778,17 +3168,20 @@ "spdx-license-ids": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.2.tgz", - "integrity": "sha512-qky9CVt0lVIECkEsYbNILVnPvycuEBkXoMFLRWsREkomQLevYhtRKC+R91a5TOAQ3bCMjikRwhyaRqj1VYatYg==" + "integrity": "sha512-qky9CVt0lVIECkEsYbNILVnPvycuEBkXoMFLRWsREkomQLevYhtRKC+R91a5TOAQ3bCMjikRwhyaRqj1VYatYg==", + "dev": true }, "sprintf-js": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", - "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=" + "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=", + "dev": true }, "sshpk": { "version": "1.15.2", "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.15.2.tgz", "integrity": "sha512-Ra/OXQtuh0/enyl4ETZAfTaeksa6BXks5ZcjpSUNrjBr0DvrJKX+1fsKDPpT9TBXgHAFsa4510aNVgI8g/+SzA==", + "dev": true, "requires": { "asn1": "~0.2.3", "assert-plus": "^1.0.0", @@ -2805,6 +3198,7 @@ "version": "2.1.1", "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", + "dev": true, "requires": { "is-fullwidth-code-point": "^2.0.0", "strip-ansi": "^4.0.0" @@ -2814,6 +3208,7 @@ "version": "4.0.0", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", + "dev": true, "requires": { "ansi-regex": "^3.0.0" } @@ -2824,6 +3219,7 @@ "version": "5.0.0", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.0.0.tgz", "integrity": "sha512-Uu7gQyZI7J7gn5qLn1Np3G9vcYGTVqB+lFTytnDJv83dd8T22aGH451P3jueT2/QemInJDfxHB5Tde5OzgG1Ow==", + "dev": true, "requires": { "ansi-regex": "^4.0.0" }, @@ -2831,34 +3227,40 @@ "ansi-regex": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.0.0.tgz", - "integrity": "sha512-iB5Dda8t/UqpPI/IjsejXu5jOGDrzn41wJyljwPH65VCIbk6+1BzFIMJGFwTNrYXT1CrD+B4l19U7awiQ8rk7w==" + "integrity": "sha512-iB5Dda8t/UqpPI/IjsejXu5jOGDrzn41wJyljwPH65VCIbk6+1BzFIMJGFwTNrYXT1CrD+B4l19U7awiQ8rk7w==", + "dev": true } } }, "strip-bom": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", - "integrity": "sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=" + "integrity": "sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=", + "dev": true }, "strip-eof": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/strip-eof/-/strip-eof-1.0.0.tgz", - "integrity": "sha1-u0P/VZim6wXYm1n80SnJgzE2Br8=" + "integrity": "sha1-u0P/VZim6wXYm1n80SnJgzE2Br8=", + "dev": true }, "strip-indent": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-2.0.0.tgz", - "integrity": "sha1-XvjbKV0B5u1sv3qrlpmNeCJSe2g=" + "integrity": "sha1-XvjbKV0B5u1sv3qrlpmNeCJSe2g=", + "dev": true }, "strip-json-comments": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", - "integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo=" + "integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo=", + "dev": true }, "supports-color": { "version": "4.4.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-4.4.0.tgz", "integrity": "sha512-rKC3+DyXWgK0ZLKwmRsrkyHVZAjNkfzeehuFWdGGcqGDTZFH73+RH6S/RDAAxl9GusSjZSUWYLmT9N5pzXFOXQ==", + "dev": true, "requires": { "has-flag": "^2.0.0" } @@ -2867,6 +3269,7 @@ "version": "1.2.0", "resolved": "https://registry.npmjs.org/term-size/-/term-size-1.2.0.tgz", "integrity": "sha1-RYuDiH8oj8Vtb/+/rSYuJmOO+mk=", + "dev": true, "requires": { "execa": "^0.7.0" } @@ -2874,17 +3277,20 @@ "through": { "version": "2.3.8", "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", - "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=" + "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=", + "dev": true }, "timed-out": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/timed-out/-/timed-out-4.0.1.tgz", - "integrity": "sha1-8y6srFoXW+ol1/q1Zas+2HQe9W8=" + "integrity": "sha1-8y6srFoXW+ol1/q1Zas+2HQe9W8=", + "dev": true }, "tmp": { "version": "0.0.33", "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz", "integrity": "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==", + "dev": true, "requires": { "os-tmpdir": "~1.0.2" } @@ -2892,12 +3298,14 @@ "to-fast-properties": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", - "integrity": "sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4=" + "integrity": "sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4=", + "dev": true }, "tough-cookie": { "version": "2.4.3", "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.4.3.tgz", "integrity": "sha512-Q5srk/4vDM54WJsJio3XNn6K2sCG+CQ8G5Wz6bZhRZoAe/+TxjWB/GlFAnYEbkYVlON9FMk/fE3h2RLpPXo4lQ==", + "dev": true, "requires": { "psl": "^1.1.24", "punycode": "^1.4.1" @@ -2906,24 +3314,28 @@ "punycode": { "version": "1.4.1", "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz", - "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4=" + "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4=", + "dev": true } } }, "trim-newlines": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/trim-newlines/-/trim-newlines-2.0.0.tgz", - "integrity": "sha1-tAPQuRvlDDMd/EuC7s6yLD3hbSA=" + "integrity": "sha1-tAPQuRvlDDMd/EuC7s6yLD3hbSA=", + "dev": true }, "trim-right": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/trim-right/-/trim-right-1.0.1.tgz", - "integrity": "sha1-yy4SAwZ+DI3h9hQJS5/kVwTqYAM=" + "integrity": "sha1-yy4SAwZ+DI3h9hQJS5/kVwTqYAM=", + "dev": true }, "ts-node": { "version": "7.0.1", "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-7.0.1.tgz", "integrity": "sha512-BVwVbPJRspzNh2yfslyT1PSbl5uIk03EZlb493RKHN4qej/D06n1cEhjlOJG69oFsE7OT8XjpTUcYf6pKTLMhw==", + "dev": true, "requires": { "arrify": "^1.0.0", "buffer-from": "^1.1.0", @@ -2938,19 +3350,22 @@ "minimist": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", - "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=" + "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=", + "dev": true } } }, "tslib": { "version": "1.9.3", "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.9.3.tgz", - "integrity": "sha512-4krF8scpejhaOgqzBEcGM7yDIEfi0/8+8zDRZhNZZ2kjmHJ4hv3zCbQWxoJGz1iw5U0Jl0nma13xzHXcncMavQ==" + "integrity": "sha512-4krF8scpejhaOgqzBEcGM7yDIEfi0/8+8zDRZhNZZ2kjmHJ4hv3zCbQWxoJGz1iw5U0Jl0nma13xzHXcncMavQ==", + "dev": true }, "tslint": { "version": "5.11.0", "resolved": "https://registry.npmjs.org/tslint/-/tslint-5.11.0.tgz", "integrity": "sha1-mPMMAurjzecAYgHkwzywi0hYHu0=", + "dev": true, "requires": { "babel-code-frame": "^6.22.0", "builtin-modules": "^1.1.1", @@ -2969,7 +3384,8 @@ "commander": { "version": "2.19.0", "resolved": "https://registry.npmjs.org/commander/-/commander-2.19.0.tgz", - "integrity": "sha512-6tvAOO+D6OENvRAh524Dh9jcfKTYDQAqvqezbCW82xj5X0pSrcpxtvRKHLG0yBY6SD7PSDrJaj+0AiOcKVd1Xg==" + "integrity": "sha512-6tvAOO+D6OENvRAh524Dh9jcfKTYDQAqvqezbCW82xj5X0pSrcpxtvRKHLG0yBY6SD7PSDrJaj+0AiOcKVd1Xg==", + "dev": true } } }, @@ -2977,6 +3393,7 @@ "version": "2.29.0", "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-2.29.0.tgz", "integrity": "sha512-g5JVHCIJwzfISaXpXE1qvNalca5Jwob6FjI4AoPlqMusJ6ftFE7IkkFoMhVLRgK+4Kx3gkzb8UZK5t5yTTvEmA==", + "dev": true, "requires": { "tslib": "^1.8.1" } @@ -2985,6 +3402,7 @@ "version": "0.6.0", "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", "integrity": "sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=", + "dev": true, "requires": { "safe-buffer": "^5.0.1" } @@ -2992,17 +3410,20 @@ "tweetnacl": { "version": "0.14.5", "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz", - "integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=" + "integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=", + "dev": true }, "typescript": { "version": "2.9.2", "resolved": "https://registry.npmjs.org/typescript/-/typescript-2.9.2.tgz", - "integrity": "sha512-Gr4p6nFNaoufRIY4NMdpQRNmgxVIGMs4Fcu/ujdYk3nAZqk7supzBE9idmvfZIlH/Cuj//dvi+019qEue9lV0w==" + "integrity": "sha512-Gr4p6nFNaoufRIY4NMdpQRNmgxVIGMs4Fcu/ujdYk3nAZqk7supzBE9idmvfZIlH/Cuj//dvi+019qEue9lV0w==", + "dev": true }, "unique-string": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/unique-string/-/unique-string-1.0.0.tgz", "integrity": "sha1-nhBXzKhRq7kzmPizOuGHuZyuwRo=", + "dev": true, "requires": { "crypto-random-string": "^1.0.0" } @@ -3010,12 +3431,14 @@ "unzip-response": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/unzip-response/-/unzip-response-2.0.1.tgz", - "integrity": "sha1-0vD3N9FrBhXnKmk17QQhRXLVb5c=" + "integrity": "sha1-0vD3N9FrBhXnKmk17QQhRXLVb5c=", + "dev": true }, "update-notifier": { "version": "2.5.0", "resolved": "https://registry.npmjs.org/update-notifier/-/update-notifier-2.5.0.tgz", "integrity": "sha512-gwMdhgJHGuj/+wHJJs9e6PcCszpxR1b236igrOkUofGhqJuG+amlIKwApH1IW1WWl7ovZxsX49lMBWLxSdm5Dw==", + "dev": true, "requires": { "boxen": "^1.2.1", "chalk": "^2.0.1", @@ -3033,6 +3456,7 @@ "version": "4.2.2", "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.2.2.tgz", "integrity": "sha512-KY9Frmirql91X2Qgjry0Wd4Y+YTdrdZheS8TFwvkbLWf/G5KNJDCh6pKL5OZctEW4+0Baa5idK2ZQuELRwPznQ==", + "dev": true, "requires": { "punycode": "^2.1.0" } @@ -3041,6 +3465,7 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/url-parse-lax/-/url-parse-lax-1.0.0.tgz", "integrity": "sha1-evjzA2Rem9eaJy56FKxovAYJ2nM=", + "dev": true, "requires": { "prepend-http": "^1.0.1" } @@ -3048,7 +3473,8 @@ "urlgrey": { "version": "0.4.4", "resolved": "https://registry.npmjs.org/urlgrey/-/urlgrey-0.4.4.tgz", - "integrity": "sha1-iS/pWWCAXoVRnxzUOJ8stMu3ZS8=" + "integrity": "sha1-iS/pWWCAXoVRnxzUOJ8stMu3ZS8=", + "dev": true }, "uuid": { "version": "3.2.1", @@ -3059,6 +3485,7 @@ "version": "3.0.4", "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz", "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==", + "dev": true, "requires": { "spdx-correct": "^3.0.0", "spdx-expression-parse": "^3.0.0" @@ -3068,6 +3495,7 @@ "version": "1.10.0", "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz", "integrity": "sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA=", + "dev": true, "requires": { "assert-plus": "^1.0.0", "core-util-is": "1.0.2", @@ -3078,6 +3506,7 @@ "version": "1.3.1", "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", + "dev": true, "requires": { "isexe": "^2.0.0" } @@ -3086,6 +3515,7 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/widest-line/-/widest-line-2.0.1.tgz", "integrity": "sha512-Ba5m9/Fa4Xt9eb2ELXt77JxVDV8w7qQrH0zS/TWSJdLyAwQjWoOzpzj5lwVftDz6n/EOu3tNACS84v509qwnJA==", + "dev": true, "requires": { "string-width": "^2.1.1" } @@ -3093,12 +3523,14 @@ "wrappy": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=" + "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", + "dev": true }, "write-file-atomic": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-2.3.0.tgz", "integrity": "sha512-xuPeK4OdjWqtfi59ylvVL0Yn35SF3zgcAcv7rBPFHVaEapaDr4GdGgm3j7ckTwH9wHL7fGmgfAnb0+THrHb8tA==", + "dev": true, "requires": { "graceful-fs": "^4.1.11", "imurmurhash": "^0.1.4", @@ -3108,17 +3540,20 @@ "xdg-basedir": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/xdg-basedir/-/xdg-basedir-3.0.0.tgz", - "integrity": "sha1-SWsswQnsqNus/i3HK2A8F8WHCtQ=" + "integrity": "sha1-SWsswQnsqNus/i3HK2A8F8WHCtQ=", + "dev": true }, "yallist": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz", - "integrity": "sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI=" + "integrity": "sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI=", + "dev": true }, "yargs-parser": { "version": "10.1.0", "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-10.1.0.tgz", "integrity": "sha512-VCIyR1wJoEBZUqk5PA+oOBF6ypbwh5aNB3I50guxAL/quggdfs4TtNHQrSazFA3fYZ+tEqfs0zIGlv0c/rgjbQ==", + "dev": true, "requires": { "camelcase": "^4.1.0" } @@ -3126,7 +3561,8 @@ "yn": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/yn/-/yn-2.0.0.tgz", - "integrity": "sha1-5a2ryKz0CPY4X8dklWhMiOavaJo=" + "integrity": "sha1-5a2ryKz0CPY4X8dklWhMiOavaJo=", + "dev": true } } } diff --git a/packages/opencensus-exporter-stackdriver/src/stackdriver-stats-utils.ts b/packages/opencensus-exporter-stackdriver/src/stackdriver-stats-utils.ts new file mode 100644 index 000000000..ed206d5bc --- /dev/null +++ b/packages/opencensus-exporter-stackdriver/src/stackdriver-stats-utils.ts @@ -0,0 +1,288 @@ +/** + * Copyright 2019, OpenCensus Authors + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import {BucketOptions, DistributionBucket, DistributionValue, LabelKey, LabelValue, Metric, MetricDescriptor as OCMetricDescriptor, MetricDescriptorType, TimeSeriesPoint, Timestamp} from '@opencensus/core'; +import * as os from 'os'; +import * as path from 'path'; +import {Distribution, LabelDescriptor, MetricDescriptor, MetricKind, Point, TimeSeries, ValueType} from './types'; + +/** + * Util methods to convert OpenCensus Metrics data models to StackDriver + * monitoring data models. + */ +export class StackdriverStatsExporterUtils { + static readonly OPENCENSUS_TASK: string = 'opencensus_task'; + static readonly OPENCENSUS_TASK_DESCRIPTION: string = + 'Opencensus task identifier'; + static readonly OPENCENSUS_TASK_VALUE_DEFAULT = + StackdriverStatsExporterUtils.generateDefaultTaskValue(); + + /** + * Returns a task label value in the format of 'nodejs-@'. + */ + static generateDefaultTaskValue(): string { + const pid = process.pid; + const hostname = os.hostname() || 'localhost'; + return 'nodejs-' + pid + '@' + hostname; + } + + /** + * Converts a OpenCensus MetricDescriptor to a StackDriver MetricDescriptor. + * @param metricDescriptor The OpenCensus MetricDescriptor. + */ + static createMetricDescriptorData( + metricDescriptor: OCMetricDescriptor, metricPrefix: string, + displayNamePrefix: string): MetricDescriptor { + return { + type: this.getMetricType(metricDescriptor.name, metricPrefix), + description: metricDescriptor.description, + displayName: + this.createDisplayName(metricDescriptor.name, displayNamePrefix), + metricKind: this.createMetricKind(metricDescriptor.type), + valueType: this.createValueType(metricDescriptor.type), + unit: metricDescriptor.unit, + labels: this.createLabelDescriptor(metricDescriptor.labelKeys) + } as MetricDescriptor; + } + + /** + * Converts metric's timeseries to a list of TimeSeries, so that metric can be + * uploaded to StackDriver. + * @param metric The metric to get TimeSeries information from. + */ + static createTimeSeriesList( + metric: Metric, + monitoredResource: {type: string, labels: {[key: string]: string}}, + metricPrefix: string): TimeSeries[] { + const timeSeriesList: TimeSeries[] = []; + + // TODO(mayurkale): Use Resource API here, once available (PR#173) + const metricDescriptor = metric.descriptor; + const metricKind = this.createMetricKind(metricDescriptor.type); + const valueType = this.createValueType(metricDescriptor.type); + + for (const timeSeries of metric.timeseries) { + timeSeriesList.push({ + metric: this.createMetric( + metricDescriptor, timeSeries.labelValues, metricPrefix), + resource: monitoredResource, + metricKind, + valueType, + points: timeSeries.points.map(point => { + return this.createPoint(point, timeSeries.startTimestamp, valueType); + }) + }); + } + return timeSeriesList; + } + + /** + * Gets metric type. + * @param name The metric name. + * @param metricPrefix The metric prefix. + */ + static getMetricType(name: string, metricPrefix: string): string { + return path.join(metricPrefix, name); + } + + /** + * Creates Metric display name. + * @param name The metric name + * @param displayNamePrefix The metric display name. + */ + static createDisplayName(name: string, displayNamePrefix: string): string { + return path.join(displayNamePrefix, name); + } + + /** + * Converts a OpenCensus Type to a StackDriver MetricKind. + * @param metricDescriptorType The kind of metric. + */ + static createMetricKind(metricDescriptorType: MetricDescriptorType): + MetricKind { + if (metricDescriptorType === MetricDescriptorType.GAUGE_INT64 || + metricDescriptorType === MetricDescriptorType.GAUGE_DOUBLE) { + return MetricKind.GAUGE; + } else if ( + metricDescriptorType === MetricDescriptorType.CUMULATIVE_INT64 || + metricDescriptorType === MetricDescriptorType.CUMULATIVE_DOUBLE || + metricDescriptorType === MetricDescriptorType.CUMULATIVE_DISTRIBUTION) { + return MetricKind.CUMULATIVE; + } + return MetricKind.UNSPECIFIED; + } + + /** + * Converts a OpenCensus Type to a StackDriver ValueType. + * @param metricDescriptorType The kind of metric. + */ + static createValueType(metricDescriptorType: MetricDescriptorType): + ValueType { + if (metricDescriptorType === MetricDescriptorType.CUMULATIVE_DOUBLE || + metricDescriptorType === MetricDescriptorType.GAUGE_DOUBLE) { + return ValueType.DOUBLE; + } else if ( + metricDescriptorType === MetricDescriptorType.GAUGE_INT64 || + metricDescriptorType === MetricDescriptorType.CUMULATIVE_INT64) { + return ValueType.INT64; + } else if ( + metricDescriptorType === MetricDescriptorType.GAUGE_DISTRIBUTION || + metricDescriptorType === MetricDescriptorType.CUMULATIVE_DISTRIBUTION) { + return ValueType.DISTRIBUTION; + } else { + return ValueType.VALUE_TYPE_UNSPECIFIED; + } + } + + /** + * Constructs a LabelDescriptor from a LabelKey. + * @param tag The Tags to get TimeSeries information from. + */ + static createLabelDescriptor(labelKeys: LabelKey[]): LabelDescriptor[] { + const labelDescriptorList = labelKeys.map(labelKey => { + return { + key: labelKey.key, + valueType: 'STRING', // Now we only support String type. + description: labelKey.description + } as LabelDescriptor; + }); + + // add default "opencensus_task" label. + labelDescriptorList.push({ + key: StackdriverStatsExporterUtils.OPENCENSUS_TASK, + valueType: 'STRING', + description: StackdriverStatsExporterUtils.OPENCENSUS_TASK_DESCRIPTION + }); + return labelDescriptorList; + } + + /** + * Creates a Metric using the LabelKeys and LabelValues. + * @param metricDescriptor The OpenCensus MetricDescriptor. + * @param labelValues The OpenCensus LabelValue. + */ + static createMetric( + metricDescriptor: OCMetricDescriptor, labelValues: LabelValue[], + metricPrefix: string): {type: string; labels: {[key: string]: string};} { + const type = this.getMetricType(metricDescriptor.name, metricPrefix); + const labels: {[key: string]: string} = {}; + for (let i = 0; i < labelValues.length; i++) { + const value = labelValues[i].value; + if (value && metricDescriptor.labelKeys[i]) { + labels[metricDescriptor.labelKeys[i].key] = value; + } else { + // TODO(mayurkale) : consider to throw an error when LabelValue and + // LabelKey lengths are not same. + } + } + labels[StackdriverStatsExporterUtils.OPENCENSUS_TASK] = + StackdriverStatsExporterUtils.OPENCENSUS_TASK_VALUE_DEFAULT; + return {type, labels}; + } + + /** + * Converts timeseries's point, so that metric can be uploaded to StackDriver. + * @param point The timestamped measurement. + * @param startTimeStamp The start timestamp of timeseries. + * @param valueType The ValueType of metric. + */ + static createPoint( + point: TimeSeriesPoint, startTimeStamp: Timestamp, + valueType: ValueType): Point { + let value; + if (valueType === ValueType.INT64) { + value = {int64Value: point.value as number}; + } else if (valueType === ValueType.DOUBLE) { + value = {doubleValue: point.value as number}; + } else if (valueType === ValueType.DISTRIBUTION) { + value = { + distributionValue: + this.createDistribution(point.value as DistributionValue) + }; + } else { + // console.log(`${valueType} is not supported.`); + } + + const endTime = this.toISOString(point.timestamp); + if (startTimeStamp) { + // Must be present for cumulative metrics. + const startTime = this.toISOString(startTimeStamp); + return {interval: {startTime, endTime}, value}; + } + + return {interval: {endTime}, value}; + } + + /** + * Formats an OpenCensus Distribution to Stackdriver's format. + * @param distribution The OpenCensus Distribution Data. + */ + static createDistribution(distribution: DistributionValue): Distribution { + return { + count: distribution.count, + mean: distribution.count === 0 ? 0 : + distribution.sum / distribution.count, + sumOfSquaredDeviation: distribution.sumOfSquaredDeviation, + bucketOptions: { + explicitBuckets: { + bounds: this.createExplicitBucketOptions(distribution.bucketOptions) + } + }, + bucketCounts: this.createBucketCounts(distribution.buckets) + }; + } + + /** + * Converts a OpenCensus BucketOptions to a StackDriver BucketOptions. + * @param buckets The DistributionValue BucketOptions. + */ + static createExplicitBucketOptions(bucketOptions: BucketOptions): number[] { + const explicitBucketOptions: number[] = []; + // The first bucket bound should be 0.0 because the Metrics first bucket is + // [0, first_bound) but Stackdriver monitoring bucket bounds begin with + // -infinity (first bucket is (-infinity, 0)) + explicitBucketOptions.push(0); + return explicitBucketOptions.concat(bucketOptions.explicit.bounds); + } + + /** + * Converts a OpenCensus Buckets to a list of counts. + * @param buckets The DistributionValue buckets. + */ + static createBucketCounts(buckets: DistributionBucket[]): number[] { + const bucketCounts: number[] = []; + // The first bucket (underflow bucket) should always be 0 count because the + // Metrics first bucket is [0, first_bound) but StackDriver distribution + // consists of an underflow bucket (number 0). + bucketCounts.push(0); + buckets.map((bucket: DistributionBucket) => { + bucketCounts.push(bucket.count); + }); + return bucketCounts; + } + + private static toISOString(timestamp: Timestamp) { + const str = new Date(timestamp.seconds * 1000).toISOString(); + const nsStr = `${this.padNS(timestamp.nanos)}`.replace(/0+$/, ''); + return str.replace('000Z', `${nsStr}Z`); + } + + private static padNS(ns: number) { + const str = `${ns}`; + const pad = '000000000'.substring(0, 9 - str.length); + return `${pad}${str}`; + } +} diff --git a/packages/opencensus-exporter-stackdriver/src/types.ts b/packages/opencensus-exporter-stackdriver/src/types.ts index 78191ff0b..83e035b75 100644 --- a/packages/opencensus-exporter-stackdriver/src/types.ts +++ b/packages/opencensus-exporter-stackdriver/src/types.ts @@ -103,7 +103,7 @@ export interface Distribution { } export interface Point { - interval: {endTime: string, startTime: string}; + interval: {endTime: string, startTime?: string}; value: { boolValue?: boolean; int64Value?: number; @@ -115,8 +115,8 @@ export interface Point { export interface TimeSeries { metric: {type: string; labels: {[key: string]: string};}; - resource: {type: 'global', labels: {[key: string]: string}}; + resource: {type: string, labels: {[key: string]: string}}; metricKind: MetricKind; valueType: ValueType; points: Point[]; -} \ No newline at end of file +} diff --git a/packages/opencensus-exporter-stackdriver/test/test-stackdriver-stats-utils.ts b/packages/opencensus-exporter-stackdriver/test/test-stackdriver-stats-utils.ts new file mode 100644 index 000000000..14e7845e2 --- /dev/null +++ b/packages/opencensus-exporter-stackdriver/test/test-stackdriver-stats-utils.ts @@ -0,0 +1,433 @@ +/** + * Copyright 2019, OpenCensus Authors + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import {DistributionValue, LabelKey, LabelValue, MetricDescriptor as OCMetricDescriptor, MetricDescriptorType, TimeSeriesPoint, Timestamp} from '@opencensus/core'; +import * as assert from 'assert'; +import {StackdriverStatsExporter} from '../src/stackdriver-monitoring'; +import {StackdriverStatsExporterUtils} from '../src/stackdriver-stats-utils'; +import {Distribution, MetricDescriptor, MetricKind, ValueType} from '../src/types'; + +const METRIC_NAME = 'metric-name'; +const METRIC_DESCRIPTION = 'metric-description'; +const DEFAULT_UNIT = '1'; + +describe('Stackdriver Stats Exporter Utils', () => { + describe('createMetricKind()', () => { + it('should return a Stackdriver MetricKind', () => { + assert.strictEqual( + StackdriverStatsExporterUtils.createMetricKind( + MetricDescriptorType.CUMULATIVE_INT64), + MetricKind.CUMULATIVE); + assert.strictEqual( + StackdriverStatsExporterUtils.createMetricKind( + MetricDescriptorType.GAUGE_INT64), + MetricKind.GAUGE); + assert.strictEqual( + StackdriverStatsExporterUtils.createMetricKind( + MetricDescriptorType.GAUGE_DOUBLE), + MetricKind.GAUGE); + assert.strictEqual( + StackdriverStatsExporterUtils.createMetricKind( + MetricDescriptorType.SUMMARY), + MetricKind.UNSPECIFIED); + }); + }); + + describe('createValueType()', () => { + it('should return a Stackdriver ValueType', () => { + assert.strictEqual( + StackdriverStatsExporterUtils.createValueType( + MetricDescriptorType.GAUGE_DOUBLE), + ValueType.DOUBLE); + assert.strictEqual( + StackdriverStatsExporterUtils.createValueType( + MetricDescriptorType.CUMULATIVE_INT64), + ValueType.INT64); + assert.strictEqual( + StackdriverStatsExporterUtils.createValueType( + MetricDescriptorType.GAUGE_INT64), + ValueType.INT64); + assert.strictEqual( + StackdriverStatsExporterUtils.createValueType( + MetricDescriptorType.CUMULATIVE_DOUBLE), + ValueType.DOUBLE); + assert.strictEqual( + StackdriverStatsExporterUtils.createValueType( + MetricDescriptorType.CUMULATIVE_DISTRIBUTION), + ValueType.DISTRIBUTION); + assert.strictEqual( + StackdriverStatsExporterUtils.createValueType( + MetricDescriptorType.GAUGE_DISTRIBUTION), + ValueType.DISTRIBUTION); + assert.strictEqual( + StackdriverStatsExporterUtils.createValueType( + MetricDescriptorType.SUMMARY), + ValueType.VALUE_TYPE_UNSPECIFIED); + }); + }); + + describe('createLabelDescriptor()', () => { + const labelKeys: LabelKey[] = [{'key': 'key', 'description': 'desc'}]; + + it('should return a Stackdriver LabelDescriptor', () => { + assert.deepStrictEqual( + StackdriverStatsExporterUtils.createLabelDescriptor(labelKeys), [ + {description: 'desc', key: 'key', valueType: 'STRING'}, { + description: + StackdriverStatsExporterUtils.OPENCENSUS_TASK_DESCRIPTION, + key: StackdriverStatsExporterUtils.OPENCENSUS_TASK, + valueType: 'STRING' + } + ]); + }); + }); + + describe('createDisplayName()', () => { + it('should return a Stackdriver DisplayName', () => { + assert.strictEqual( + StackdriverStatsExporterUtils.createDisplayName( + 'demo/latency', 'custom.googleapis.com/opencensus'), + 'custom.googleapis.com/opencensus/demo/latency'); + }); + }); + + describe('getMetricType()', () => { + it('should return a Stackdriver MetricType', () => { + assert.strictEqual( + StackdriverStatsExporterUtils.getMetricType( + 'demo/latency', 'opencensus'), + 'opencensus/demo/latency'); + }); + }); + + describe('createMetric()', () => { + const labelKeys: LabelKey[] = [{'key': 'key1', 'description': 'desc'}]; + const labelValues: LabelValue[] = [{'value': 'value1'}]; + const metricDescriptor: OCMetricDescriptor = { + name: METRIC_NAME, + description: METRIC_DESCRIPTION, + unit: DEFAULT_UNIT, + type: MetricDescriptorType.GAUGE_INT64, + labelKeys + }; + + it('should return a Stackdriver Metric', () => { + const metric = StackdriverStatsExporterUtils.createMetric( + metricDescriptor, labelValues, + StackdriverStatsExporter.CUSTOM_OPENCENSUS_DOMAIN); + assert.strictEqual( + metric.type, `custom.googleapis.com/opencensus/${METRIC_NAME}`); + assert.deepStrictEqual(metric.labels, { + 'key1': 'value1', + 'opencensus_task': + StackdriverStatsExporterUtils.generateDefaultTaskValue() + }); + }); + + it('should return a Stackdriver Metric With External Metric Domain', () => { + const prometheusDomain = 'external.googleapis.com/prometheus/'; + const metric = StackdriverStatsExporterUtils.createMetric( + metricDescriptor, labelValues, prometheusDomain); + assert.strictEqual(metric.type, `${prometheusDomain}${METRIC_NAME}`); + assert.deepStrictEqual(metric.labels, { + 'key1': 'value1', + 'opencensus_task': + StackdriverStatsExporterUtils.generateDefaultTaskValue() + }); + }); + + it('should return a Stackdriver Metric With Empty Label', () => { + const prometheusDomain = 'external.googleapis.com/prometheus/'; + const metric = StackdriverStatsExporterUtils.createMetric( + metricDescriptor, [], prometheusDomain); + assert.strictEqual(metric.type, `${prometheusDomain}${METRIC_NAME}`); + assert.deepStrictEqual(metric.labels, { + 'opencensus_task': + StackdriverStatsExporterUtils.generateDefaultTaskValue() + }); + }); + }); + + describe('createDistribution()', () => { + const distributionValue: DistributionValue = { + count: 3, + sum: 2, + sumOfSquaredDeviation: 14, + bucketOptions: {explicit: {bounds: [1.0, 3.0, 5.0]}}, + buckets: [{count: 3}, {count: 1}, {count: 2}, {count: 4}], + }; + it('should return a Stackdriver Distribution', () => { + const distribution: Distribution = + StackdriverStatsExporterUtils.createDistribution(distributionValue); + + assert.strictEqual(distribution.count, 3); + assert.strictEqual(distribution.mean, 0.6666666666666666); + assert.strictEqual(distribution.sumOfSquaredDeviation, 14); + assert.deepStrictEqual( + distribution.bucketOptions, + {explicitBuckets: {bounds: [0, 1, 3, 5]}}); + assert.deepStrictEqual(distribution.bucketCounts, [0, 3, 1, 2, 4]); + }); + }); + + describe('createMetricDescriptorData()', () => { + const labelKeys: LabelKey[] = [{'key': 'key1', 'description': 'desc'}]; + const metricDescriptor: OCMetricDescriptor = { + name: METRIC_NAME, + description: METRIC_DESCRIPTION, + unit: DEFAULT_UNIT, + type: MetricDescriptorType.GAUGE_INT64, + labelKeys + }; + const metricDescriptor1: OCMetricDescriptor = { + name: METRIC_NAME, + description: METRIC_DESCRIPTION, + unit: DEFAULT_UNIT, + type: MetricDescriptorType.CUMULATIVE_INT64, + labelKeys + }; + + it('should return a Stackdriver MetricDescriptor', () => { + const descriptor: MetricDescriptor = + StackdriverStatsExporterUtils.createMetricDescriptorData( + metricDescriptor, 'custom.googleapis.com/myorg/', 'myorg/'); + + assert.strictEqual(descriptor.description, METRIC_DESCRIPTION); + assert.strictEqual(descriptor.displayName, `myorg/${METRIC_NAME}`); + assert.strictEqual( + descriptor.type, `custom.googleapis.com/myorg/${METRIC_NAME}`); + assert.strictEqual(descriptor.unit, DEFAULT_UNIT); + assert.strictEqual(descriptor.metricKind, MetricKind.GAUGE); + assert.strictEqual(descriptor.valueType, ValueType.INT64); + assert.deepStrictEqual(descriptor.labels, [ + {description: 'desc', key: 'key1', valueType: 'STRING'}, { + description: + StackdriverStatsExporterUtils.OPENCENSUS_TASK_DESCRIPTION, + key: StackdriverStatsExporterUtils.OPENCENSUS_TASK, + valueType: 'STRING' + } + ]); + }); + + it('should return a Cumulative Stackdriver MetricDescriptor', () => { + const descriptor: MetricDescriptor = + StackdriverStatsExporterUtils.createMetricDescriptorData( + metricDescriptor1, + StackdriverStatsExporter.CUSTOM_OPENCENSUS_DOMAIN, 'OpenCensus'); + + assert.strictEqual(descriptor.description, METRIC_DESCRIPTION); + assert.strictEqual(descriptor.displayName, `OpenCensus/${METRIC_NAME}`); + assert.strictEqual( + descriptor.type, + `${StackdriverStatsExporter.CUSTOM_OPENCENSUS_DOMAIN}/${ + METRIC_NAME}`); + assert.strictEqual(descriptor.unit, DEFAULT_UNIT); + assert.strictEqual(descriptor.metricKind, MetricKind.CUMULATIVE); + assert.strictEqual(descriptor.valueType, ValueType.INT64); + assert.deepStrictEqual(descriptor.labels, [ + {description: 'desc', key: 'key1', valueType: 'STRING'}, { + description: + StackdriverStatsExporterUtils.OPENCENSUS_TASK_DESCRIPTION, + key: StackdriverStatsExporterUtils.OPENCENSUS_TASK, + valueType: 'STRING' + } + ]); + }); + }); + + describe('createPoint()', () => { + const startTimestamp: Timestamp = {seconds: 1546998712, nanos: 20}; + const pointTimestamp = {seconds: 1546998775, nanos: 10}; + const intPoint: + TimeSeriesPoint = {value: 12345678, timestamp: pointTimestamp}; + const doublePoint: + TimeSeriesPoint = {value: 12345678.2, timestamp: pointTimestamp}; + const distributionPoint: TimeSeriesPoint = { + value: { + count: 3, + sum: 2, + sumOfSquaredDeviation: 14, + bucketOptions: {explicit: {bounds: [1.2, 3.2, 5.2]}}, + buckets: [{count: 3}, {count: 1}, {count: 2}, {count: 4}], + } as DistributionValue, + timestamp: pointTimestamp + }; + + it('should return a Stackdriver Point', () => { + const pt = StackdriverStatsExporterUtils.createPoint( + doublePoint, null, ValueType.DOUBLE); + + assert.deepStrictEqual(pt, { + value: {doubleValue: 12345678.2}, + interval: {endTime: '2019-01-09T01:52:55.00000001Z'} + }); + }); + + it('should return a Stackdriver Cumulative Point', () => { + const pt = StackdriverStatsExporterUtils.createPoint( + intPoint, startTimestamp, ValueType.INT64); + + assert.deepStrictEqual(pt, { + value: {int64Value: 12345678}, + interval: { + startTime: '2019-01-09T01:51:52.00000002Z', + endTime: '2019-01-09T01:52:55.00000001Z' + } + }); + }); + + it('should return a Stackdriver Distribution Point', () => { + const pt = StackdriverStatsExporterUtils.createPoint( + distributionPoint, startTimestamp, ValueType.DISTRIBUTION); + + assert.deepStrictEqual(pt, { + value: { + distributionValue: { + count: 3, + mean: 0.6666666666666666, + sumOfSquaredDeviation: 14, + bucketOptions: {explicitBuckets: {bounds: [0, 1.2, 3.2, 5.2]}}, + bucketCounts: [0, 3, 1, 2, 4] + } + }, + interval: { + startTime: '2019-01-09T01:51:52.00000002Z', + endTime: '2019-01-09T01:52:55.00000001Z' + } + }); + }); + }); + + describe('createTimeSeriesList()', () => { + const metricPrefix = StackdriverStatsExporter.CUSTOM_OPENCENSUS_DOMAIN; + const defaultResource = {type: 'global', labels: {}}; + const customResource = { + type: 'global', + labels: {'name': 'p0001', 'zone': 'us-west-1'} + }; + const labelKeys = [{'key': 'key1', 'description': 'desc'}]; + const labelValues = [{'value': 'value1'}]; + const labelValues2 = [{'value': 'value2'}]; + const cumulativeMetricDescriptor = { + name: METRIC_NAME, + description: METRIC_DESCRIPTION, + unit: DEFAULT_UNIT, + type: MetricDescriptorType.CUMULATIVE_DOUBLE, + labelKeys + }; + const pointTimestamp = {seconds: 100, nanos: 1e7}; + const doublePoint = {value: 12345678.2, timestamp: pointTimestamp}; + const startTimestamp: Timestamp = {seconds: 90, nanos: 1e7}; + const cumulativeTimeSeries = { + labelValues, + points: [doublePoint], + startTimestamp + }; + const metric = { + descriptor: cumulativeMetricDescriptor, + timeseries: [cumulativeTimeSeries] + }; + + const gaugeMetricDescriptor = { + name: METRIC_NAME, + description: METRIC_DESCRIPTION, + unit: DEFAULT_UNIT, + type: MetricDescriptorType.GAUGE_DOUBLE, + labelKeys + }; + const gaugePoint1 = {value: 10, timestamp: pointTimestamp}; + const gaugePoint2 = {value: 15, timestamp: pointTimestamp}; + const gaugeTimeSeries1 = {labelValues, points: [gaugePoint1]}; + const gaugeTimeSeries2 = {labelValues: labelValues2, points: [gaugePoint2]}; + const gaugeMetric = { + descriptor: gaugeMetricDescriptor, + timeseries: [gaugeTimeSeries1, gaugeTimeSeries2] + }; + + it('should return a Stackdriver TimeSeries', () => { + const timeSeriesList = StackdriverStatsExporterUtils.createTimeSeriesList( + metric, defaultResource, metricPrefix); + + assert.equal(timeSeriesList.length, 1); + const [timeseries] = timeSeriesList; + assert.deepStrictEqual( + timeseries.metric.type, + 'custom.googleapis.com/opencensus/metric-name'); + assert.deepStrictEqual(timeseries.metric.labels, { + 'key1': 'value1', + 'opencensus_task': + StackdriverStatsExporterUtils.generateDefaultTaskValue() + }); + assert.deepStrictEqual(timeseries.metricKind, MetricKind.CUMULATIVE); + assert.deepStrictEqual(timeseries.valueType, ValueType.DOUBLE); + assert.deepStrictEqual(timeseries.resource, {type: 'global', labels: {}}); + assert.deepStrictEqual(timeseries.points.length, 1); + const [point] = timeseries.points; + assert.deepStrictEqual(point.value, {doubleValue: 12345678.2}); + }); + + it('should return a Stackdriver TimeSeries with custom monitored resource', + () => { + const timeSeriesList = + StackdriverStatsExporterUtils.createTimeSeriesList( + metric, customResource, metricPrefix); + + assert.equal(timeSeriesList.length, 1); + const [timeseries] = timeSeriesList; + assert.deepStrictEqual( + timeseries.metric.type, + 'custom.googleapis.com/opencensus/metric-name'); + assert.deepStrictEqual(timeseries.metric.labels, { + 'key1': 'value1', + 'opencensus_task': + StackdriverStatsExporterUtils.generateDefaultTaskValue() + }); + assert.deepStrictEqual( + timeseries.resource, + {type: 'global', labels: {'name': 'p0001', 'zone': 'us-west-1'}}); + assert.deepStrictEqual(timeseries.points.length, 1); + const [point] = timeseries.points; + assert.deepStrictEqual(point.value, {doubleValue: 12345678.2}); + }); + + it('should return a Stackdriver TimeSeries with Gauge and multiple timeseries', + () => { + const timeSeriesList = + StackdriverStatsExporterUtils.createTimeSeriesList( + gaugeMetric, defaultResource, metricPrefix); + + assert.equal(timeSeriesList.length, 2); + const [timeseries1, timeseries2] = timeSeriesList; + assert.deepStrictEqual( + timeseries1.metric.type, + 'custom.googleapis.com/opencensus/metric-name'); + assert.deepStrictEqual(timeseries1.metric.labels, { + 'key1': 'value1', + 'opencensus_task': + StackdriverStatsExporterUtils.generateDefaultTaskValue() + }); + assert.deepStrictEqual(timeseries1.metricKind, MetricKind.GAUGE); + assert.deepStrictEqual(timeseries1.valueType, ValueType.DOUBLE); + assert.deepStrictEqual( + timeseries1.resource, {type: 'global', labels: {}}); + assert.deepStrictEqual(timeseries1.points.length, 1); + const [point1] = timeseries1.points; + assert.deepStrictEqual(point1.value, {doubleValue: 10}); + const [point2] = timeseries2.points; + assert.deepStrictEqual(point2.value, {doubleValue: 15}); + }); + }); +}); From c9aa60a47ac6cbdb657220a6178a75b1f1484955 Mon Sep 17 00:00:00 2001 From: Mayur Kale Date: Wed, 9 Jan 2019 12:11:31 -0800 Subject: [PATCH 2/3] fix review comments --- .../src/stackdriver-stats-utils.ts | 440 ++++++++---------- .../src/types.ts | 11 +- .../test/test-stackdriver-stats-utils.ts | 149 +++--- 3 files changed, 263 insertions(+), 337 deletions(-) diff --git a/packages/opencensus-exporter-stackdriver/src/stackdriver-stats-utils.ts b/packages/opencensus-exporter-stackdriver/src/stackdriver-stats-utils.ts index ed206d5bc..a23ef6cae 100644 --- a/packages/opencensus-exporter-stackdriver/src/stackdriver-stats-utils.ts +++ b/packages/opencensus-exporter-stackdriver/src/stackdriver-stats-utils.ts @@ -17,272 +17,226 @@ import {BucketOptions, DistributionBucket, DistributionValue, LabelKey, LabelValue, Metric, MetricDescriptor as OCMetricDescriptor, MetricDescriptorType, TimeSeriesPoint, Timestamp} from '@opencensus/core'; import * as os from 'os'; import * as path from 'path'; -import {Distribution, LabelDescriptor, MetricDescriptor, MetricKind, Point, TimeSeries, ValueType} from './types'; + +import {Distribution, LabelDescriptor, MetricDescriptor, MetricKind, MonitoredResource, Point, TimeSeries, ValueType} from './types'; + +const OPENCENSUS_TASK = 'opencensus_task'; +const OPENCENSUS_TASK_DESCRIPTION = 'Opencensus task identifier'; +export const OPENCENSUS_TASK_VALUE_DEFAULT = generateDefaultTaskValue(); + +/** Converts a OpenCensus MetricDescriptor to a StackDriver MetricDescriptor. */ +export function createMetricDescriptorData( + metricDescriptor: OCMetricDescriptor, metricPrefix: string, + displayNamePrefix: string): MetricDescriptor { + return { + type: getMetricType(metricDescriptor.name, metricPrefix), + description: metricDescriptor.description, + displayName: createDisplayName(metricDescriptor.name, displayNamePrefix), + metricKind: createMetricKind(metricDescriptor.type), + valueType: createValueType(metricDescriptor.type), + unit: metricDescriptor.unit, + labels: createLabelDescriptor(metricDescriptor.labelKeys) + }; +} /** - * Util methods to convert OpenCensus Metrics data models to StackDriver - * monitoring data models. + * Converts metric's timeseries to a list of TimeSeries, so that metric can be + * uploaded to StackDriver. */ -export class StackdriverStatsExporterUtils { - static readonly OPENCENSUS_TASK: string = 'opencensus_task'; - static readonly OPENCENSUS_TASK_DESCRIPTION: string = - 'Opencensus task identifier'; - static readonly OPENCENSUS_TASK_VALUE_DEFAULT = - StackdriverStatsExporterUtils.generateDefaultTaskValue(); - - /** - * Returns a task label value in the format of 'nodejs-@'. - */ - static generateDefaultTaskValue(): string { - const pid = process.pid; - const hostname = os.hostname() || 'localhost'; - return 'nodejs-' + pid + '@' + hostname; - } - - /** - * Converts a OpenCensus MetricDescriptor to a StackDriver MetricDescriptor. - * @param metricDescriptor The OpenCensus MetricDescriptor. - */ - static createMetricDescriptorData( - metricDescriptor: OCMetricDescriptor, metricPrefix: string, - displayNamePrefix: string): MetricDescriptor { - return { - type: this.getMetricType(metricDescriptor.name, metricPrefix), - description: metricDescriptor.description, - displayName: - this.createDisplayName(metricDescriptor.name, displayNamePrefix), - metricKind: this.createMetricKind(metricDescriptor.type), - valueType: this.createValueType(metricDescriptor.type), - unit: metricDescriptor.unit, - labels: this.createLabelDescriptor(metricDescriptor.labelKeys) - } as MetricDescriptor; +export function createTimeSeriesList( + metric: Metric, monitoredResource: MonitoredResource, + metricPrefix: string): TimeSeries[] { + const timeSeriesList: TimeSeries[] = []; + + // TODO(mayurkale): Use Resource API here, once available (PR#173) + const metricDescriptor = metric.descriptor; + const metricKind = createMetricKind(metricDescriptor.type); + const valueType = createValueType(metricDescriptor.type); + + for (const timeSeries of metric.timeseries) { + timeSeriesList.push({ + metric: + createMetric(metricDescriptor, timeSeries.labelValues, metricPrefix), + resource: monitoredResource, + metricKind, + valueType, + points: timeSeries.points.map(point => { + return createPoint(point, timeSeries.startTimestamp, valueType); + }) + }); } + return timeSeriesList; +} - /** - * Converts metric's timeseries to a list of TimeSeries, so that metric can be - * uploaded to StackDriver. - * @param metric The metric to get TimeSeries information from. - */ - static createTimeSeriesList( - metric: Metric, - monitoredResource: {type: string, labels: {[key: string]: string}}, - metricPrefix: string): TimeSeries[] { - const timeSeriesList: TimeSeries[] = []; - - // TODO(mayurkale): Use Resource API here, once available (PR#173) - const metricDescriptor = metric.descriptor; - const metricKind = this.createMetricKind(metricDescriptor.type); - const valueType = this.createValueType(metricDescriptor.type); +/** Creates Metric type. */ +export function getMetricType(name: string, metricPrefix: string): string { + return path.join(metricPrefix, name); +} - for (const timeSeries of metric.timeseries) { - timeSeriesList.push({ - metric: this.createMetric( - metricDescriptor, timeSeries.labelValues, metricPrefix), - resource: monitoredResource, - metricKind, - valueType, - points: timeSeries.points.map(point => { - return this.createPoint(point, timeSeries.startTimestamp, valueType); - }) - }); - } - return timeSeriesList; - } +/** Creates Metric display name. */ +export function createDisplayName( + name: string, displayNamePrefix: string): string { + return path.join(displayNamePrefix, name); +} - /** - * Gets metric type. - * @param name The metric name. - * @param metricPrefix The metric prefix. - */ - static getMetricType(name: string, metricPrefix: string): string { - return path.join(metricPrefix, name); +/** Converts a OpenCensus Type to a StackDriver MetricKind. */ +export function createMetricKind(metricDescriptorType: MetricDescriptorType): + MetricKind { + if (metricDescriptorType === MetricDescriptorType.GAUGE_INT64 || + metricDescriptorType === MetricDescriptorType.GAUGE_DOUBLE) { + return MetricKind.GAUGE; + } else if ( + metricDescriptorType === MetricDescriptorType.CUMULATIVE_INT64 || + metricDescriptorType === MetricDescriptorType.CUMULATIVE_DOUBLE || + metricDescriptorType === MetricDescriptorType.CUMULATIVE_DISTRIBUTION) { + return MetricKind.CUMULATIVE; } + return MetricKind.UNSPECIFIED; +} - /** - * Creates Metric display name. - * @param name The metric name - * @param displayNamePrefix The metric display name. - */ - static createDisplayName(name: string, displayNamePrefix: string): string { - return path.join(displayNamePrefix, name); +/** Converts a OpenCensus Type to a StackDriver ValueType. */ +export function createValueType(metricDescriptorType: MetricDescriptorType): + ValueType { + if (metricDescriptorType === MetricDescriptorType.CUMULATIVE_DOUBLE || + metricDescriptorType === MetricDescriptorType.GAUGE_DOUBLE) { + return ValueType.DOUBLE; + } else if ( + metricDescriptorType === MetricDescriptorType.GAUGE_INT64 || + metricDescriptorType === MetricDescriptorType.CUMULATIVE_INT64) { + return ValueType.INT64; + } else if ( + metricDescriptorType === MetricDescriptorType.GAUGE_DISTRIBUTION || + metricDescriptorType === MetricDescriptorType.CUMULATIVE_DISTRIBUTION) { + return ValueType.DISTRIBUTION; + } else { + return ValueType.VALUE_TYPE_UNSPECIFIED; } +} - /** - * Converts a OpenCensus Type to a StackDriver MetricKind. - * @param metricDescriptorType The kind of metric. - */ - static createMetricKind(metricDescriptorType: MetricDescriptorType): - MetricKind { - if (metricDescriptorType === MetricDescriptorType.GAUGE_INT64 || - metricDescriptorType === MetricDescriptorType.GAUGE_DOUBLE) { - return MetricKind.GAUGE; - } else if ( - metricDescriptorType === MetricDescriptorType.CUMULATIVE_INT64 || - metricDescriptorType === MetricDescriptorType.CUMULATIVE_DOUBLE || - metricDescriptorType === MetricDescriptorType.CUMULATIVE_DISTRIBUTION) { - return MetricKind.CUMULATIVE; - } - return MetricKind.UNSPECIFIED; - } +/** Constructs a LabelDescriptor from a LabelKey. */ +export function createLabelDescriptor(labelKeys: LabelKey[]): + LabelDescriptor[] { + const labelDescriptorList: LabelDescriptor[] = + labelKeys.map(labelKey => ({ + key: labelKey.key, + valueType: 'STRING', // Now we only support String type. + description: labelKey.description + })); + + // add default "opencensus_task" label. + labelDescriptorList.push({ + key: OPENCENSUS_TASK, + valueType: 'STRING', + description: OPENCENSUS_TASK_DESCRIPTION + }); + return labelDescriptorList; +} - /** - * Converts a OpenCensus Type to a StackDriver ValueType. - * @param metricDescriptorType The kind of metric. - */ - static createValueType(metricDescriptorType: MetricDescriptorType): - ValueType { - if (metricDescriptorType === MetricDescriptorType.CUMULATIVE_DOUBLE || - metricDescriptorType === MetricDescriptorType.GAUGE_DOUBLE) { - return ValueType.DOUBLE; - } else if ( - metricDescriptorType === MetricDescriptorType.GAUGE_INT64 || - metricDescriptorType === MetricDescriptorType.CUMULATIVE_INT64) { - return ValueType.INT64; - } else if ( - metricDescriptorType === MetricDescriptorType.GAUGE_DISTRIBUTION || - metricDescriptorType === MetricDescriptorType.CUMULATIVE_DISTRIBUTION) { - return ValueType.DISTRIBUTION; +/** Creates a Metric using the LabelKeys and LabelValues. */ +export function createMetric( + metricDescriptor: OCMetricDescriptor, labelValues: LabelValue[], + metricPrefix: string): {type: string; labels: {[key: string]: string};} { + const type = getMetricType(metricDescriptor.name, metricPrefix); + const labels: {[key: string]: string} = {}; + for (let i = 0; i < labelValues.length; i++) { + const value = labelValues[i].value; + if (value && metricDescriptor.labelKeys[i]) { + labels[metricDescriptor.labelKeys[i].key] = value; } else { - return ValueType.VALUE_TYPE_UNSPECIFIED; - } - } - - /** - * Constructs a LabelDescriptor from a LabelKey. - * @param tag The Tags to get TimeSeries information from. - */ - static createLabelDescriptor(labelKeys: LabelKey[]): LabelDescriptor[] { - const labelDescriptorList = labelKeys.map(labelKey => { - return { - key: labelKey.key, - valueType: 'STRING', // Now we only support String type. - description: labelKey.description - } as LabelDescriptor; - }); - - // add default "opencensus_task" label. - labelDescriptorList.push({ - key: StackdriverStatsExporterUtils.OPENCENSUS_TASK, - valueType: 'STRING', - description: StackdriverStatsExporterUtils.OPENCENSUS_TASK_DESCRIPTION - }); - return labelDescriptorList; - } - - /** - * Creates a Metric using the LabelKeys and LabelValues. - * @param metricDescriptor The OpenCensus MetricDescriptor. - * @param labelValues The OpenCensus LabelValue. - */ - static createMetric( - metricDescriptor: OCMetricDescriptor, labelValues: LabelValue[], - metricPrefix: string): {type: string; labels: {[key: string]: string};} { - const type = this.getMetricType(metricDescriptor.name, metricPrefix); - const labels: {[key: string]: string} = {}; - for (let i = 0; i < labelValues.length; i++) { - const value = labelValues[i].value; - if (value && metricDescriptor.labelKeys[i]) { - labels[metricDescriptor.labelKeys[i].key] = value; - } else { - // TODO(mayurkale) : consider to throw an error when LabelValue and - // LabelKey lengths are not same. - } + // TODO(mayurkale) : consider to throw an error when LabelValue and + // LabelKey lengths are not same. } - labels[StackdriverStatsExporterUtils.OPENCENSUS_TASK] = - StackdriverStatsExporterUtils.OPENCENSUS_TASK_VALUE_DEFAULT; - return {type, labels}; } + labels[OPENCENSUS_TASK] = OPENCENSUS_TASK_VALUE_DEFAULT; + return {type, labels}; +} - /** - * Converts timeseries's point, so that metric can be uploaded to StackDriver. - * @param point The timestamped measurement. - * @param startTimeStamp The start timestamp of timeseries. - * @param valueType The ValueType of metric. - */ - static createPoint( - point: TimeSeriesPoint, startTimeStamp: Timestamp, - valueType: ValueType): Point { - let value; - if (valueType === ValueType.INT64) { - value = {int64Value: point.value as number}; - } else if (valueType === ValueType.DOUBLE) { - value = {doubleValue: point.value as number}; - } else if (valueType === ValueType.DISTRIBUTION) { - value = { - distributionValue: - this.createDistribution(point.value as DistributionValue) - }; - } else { - // console.log(`${valueType} is not supported.`); - } - - const endTime = this.toISOString(point.timestamp); - if (startTimeStamp) { - // Must be present for cumulative metrics. - const startTime = this.toISOString(startTimeStamp); - return {interval: {startTime, endTime}, value}; - } - - return {interval: {endTime}, value}; +/** + * Converts timeseries's point, so that metric can be uploaded to StackDriver. + */ +export function createPoint( + point: TimeSeriesPoint, startTimeStamp: Timestamp, + valueType: ValueType): Point { + const value = createValue(valueType, point); + const endTime = toISOString(point.timestamp); + if (startTimeStamp) { + // Must be present for cumulative metrics. + const startTime = toISOString(startTimeStamp); + return {interval: {startTime, endTime}, value}; } + return {interval: {endTime}, value}; +} - /** - * Formats an OpenCensus Distribution to Stackdriver's format. - * @param distribution The OpenCensus Distribution Data. - */ - static createDistribution(distribution: DistributionValue): Distribution { +/** Converts a OpenCensus Point's value to a StackDriver Point value. */ +export function createValue(valueType: ValueType, point: TimeSeriesPoint) { + if (valueType === ValueType.INT64) { + return {int64Value: point.value as number}; + } else if (valueType === ValueType.DOUBLE) { + return {doubleValue: point.value as number}; + } else if (valueType === ValueType.DISTRIBUTION) { return { - count: distribution.count, - mean: distribution.count === 0 ? 0 : - distribution.sum / distribution.count, - sumOfSquaredDeviation: distribution.sumOfSquaredDeviation, - bucketOptions: { - explicitBuckets: { - bounds: this.createExplicitBucketOptions(distribution.bucketOptions) - } - }, - bucketCounts: this.createBucketCounts(distribution.buckets) + distributionValue: createDistribution(point.value as DistributionValue) }; } + throw Error(`unsupported value type: ${valueType}`); +} - /** - * Converts a OpenCensus BucketOptions to a StackDriver BucketOptions. - * @param buckets The DistributionValue BucketOptions. - */ - static createExplicitBucketOptions(bucketOptions: BucketOptions): number[] { - const explicitBucketOptions: number[] = []; - // The first bucket bound should be 0.0 because the Metrics first bucket is - // [0, first_bound) but Stackdriver monitoring bucket bounds begin with - // -infinity (first bucket is (-infinity, 0)) - explicitBucketOptions.push(0); - return explicitBucketOptions.concat(bucketOptions.explicit.bounds); - } +/** Formats an OpenCensus Distribution to Stackdriver's format. */ +export function createDistribution(distribution: DistributionValue): + Distribution { + return { + count: distribution.count, + mean: distribution.count === 0 ? 0 : distribution.sum / distribution.count, + sumOfSquaredDeviation: distribution.sumOfSquaredDeviation, + bucketOptions: { + explicitBuckets: + {bounds: createExplicitBucketOptions(distribution.bucketOptions)} + }, + bucketCounts: createBucketCounts(distribution.buckets) + }; +} - /** - * Converts a OpenCensus Buckets to a list of counts. - * @param buckets The DistributionValue buckets. - */ - static createBucketCounts(buckets: DistributionBucket[]): number[] { - const bucketCounts: number[] = []; - // The first bucket (underflow bucket) should always be 0 count because the - // Metrics first bucket is [0, first_bound) but StackDriver distribution - // consists of an underflow bucket (number 0). - bucketCounts.push(0); - buckets.map((bucket: DistributionBucket) => { - bucketCounts.push(bucket.count); - }); - return bucketCounts; - } +/** Converts a OpenCensus BucketOptions to a StackDriver BucketOptions. */ +export function createExplicitBucketOptions(bucketOptions: BucketOptions): + number[] { + const explicitBucketOptions: number[] = []; + // The first bucket bound should be 0.0 because the Metrics first bucket is + // [0, first_bound) but Stackdriver monitoring bucket bounds begin with + // -infinity (first bucket is (-infinity, 0)) + explicitBucketOptions.push(0); + return explicitBucketOptions.concat(bucketOptions.explicit.bounds); +} - private static toISOString(timestamp: Timestamp) { - const str = new Date(timestamp.seconds * 1000).toISOString(); - const nsStr = `${this.padNS(timestamp.nanos)}`.replace(/0+$/, ''); - return str.replace('000Z', `${nsStr}Z`); - } +/** Converts a OpenCensus Buckets to a list of counts. */ +export function createBucketCounts(buckets: DistributionBucket[]): number[] { + const bucketCounts: number[] = []; + // The first bucket (underflow bucket) should always be 0 count because the + // Metrics first bucket is [0, first_bound) but StackDriver distribution + // consists of an underflow bucket (number 0). + bucketCounts.push(0); + buckets.map((bucket: DistributionBucket) => { + bucketCounts.push(bucket.count); + }); + return bucketCounts; +} - private static padNS(ns: number) { - const str = `${ns}`; - const pad = '000000000'.substring(0, 9 - str.length); - return `${pad}${str}`; - } +/** Returns a task label value in the format of 'nodejs-@'. */ +function generateDefaultTaskValue(): string { + console.log('inside generateDefaultTaskValue'); + const pid = process.pid; + const hostname = os.hostname() || 'localhost'; + return 'nodejs-' + pid + '@' + hostname; +} + +function toISOString(timestamp: Timestamp) { + const str = new Date(timestamp.seconds * 1000).toISOString(); + const nsStr = `${leftZeroPad(timestamp.nanos)}`.replace(/0+$/, ''); + return str.replace('000Z', `${nsStr}Z`); +} + +/** Pad a number with 0 on the left */ +function leftZeroPad(ns: number) { + const str = `${ns}`; + const pad = '000000000'.substring(0, 9 - str.length); + return `${pad}${str}`; } diff --git a/packages/opencensus-exporter-stackdriver/src/types.ts b/packages/opencensus-exporter-stackdriver/src/types.ts index 83e035b75..bb3e37883 100644 --- a/packages/opencensus-exporter-stackdriver/src/types.ts +++ b/packages/opencensus-exporter-stackdriver/src/types.ts @@ -115,8 +115,17 @@ export interface Point { export interface TimeSeries { metric: {type: string; labels: {[key: string]: string};}; - resource: {type: string, labels: {[key: string]: string}}; + resource: MonitoredResource; metricKind: MetricKind; valueType: ValueType; points: Point[]; } + +/** Resource information. */ +export interface MonitoredResource { + /** Type identifier for the resource. */ + type: string; + + /** Set of labels that describe the resource. */ + labels: {[key: string]: string}; +} diff --git a/packages/opencensus-exporter-stackdriver/test/test-stackdriver-stats-utils.ts b/packages/opencensus-exporter-stackdriver/test/test-stackdriver-stats-utils.ts index 14e7845e2..848d4da11 100644 --- a/packages/opencensus-exporter-stackdriver/test/test-stackdriver-stats-utils.ts +++ b/packages/opencensus-exporter-stackdriver/test/test-stackdriver-stats-utils.ts @@ -16,8 +16,9 @@ import {DistributionValue, LabelKey, LabelValue, MetricDescriptor as OCMetricDescriptor, MetricDescriptorType, TimeSeriesPoint, Timestamp} from '@opencensus/core'; import * as assert from 'assert'; + import {StackdriverStatsExporter} from '../src/stackdriver-monitoring'; -import {StackdriverStatsExporterUtils} from '../src/stackdriver-stats-utils'; +import {createDisplayName, createDistribution, createLabelDescriptor, createMetric, createMetricDescriptorData, createMetricKind, createPoint, createTimeSeriesList, createValueType, getMetricType, OPENCENSUS_TASK_VALUE_DEFAULT} from '../src/stackdriver-stats-utils'; import {Distribution, MetricDescriptor, MetricKind, ValueType} from '../src/types'; const METRIC_NAME = 'metric-name'; @@ -28,20 +29,15 @@ describe('Stackdriver Stats Exporter Utils', () => { describe('createMetricKind()', () => { it('should return a Stackdriver MetricKind', () => { assert.strictEqual( - StackdriverStatsExporterUtils.createMetricKind( - MetricDescriptorType.CUMULATIVE_INT64), + createMetricKind(MetricDescriptorType.CUMULATIVE_INT64), MetricKind.CUMULATIVE); assert.strictEqual( - StackdriverStatsExporterUtils.createMetricKind( - MetricDescriptorType.GAUGE_INT64), - MetricKind.GAUGE); + createMetricKind(MetricDescriptorType.GAUGE_INT64), MetricKind.GAUGE); assert.strictEqual( - StackdriverStatsExporterUtils.createMetricKind( - MetricDescriptorType.GAUGE_DOUBLE), + createMetricKind(MetricDescriptorType.GAUGE_DOUBLE), MetricKind.GAUGE); assert.strictEqual( - StackdriverStatsExporterUtils.createMetricKind( - MetricDescriptorType.SUMMARY), + createMetricKind(MetricDescriptorType.SUMMARY), MetricKind.UNSPECIFIED); }); }); @@ -49,32 +45,23 @@ describe('Stackdriver Stats Exporter Utils', () => { describe('createValueType()', () => { it('should return a Stackdriver ValueType', () => { assert.strictEqual( - StackdriverStatsExporterUtils.createValueType( - MetricDescriptorType.GAUGE_DOUBLE), - ValueType.DOUBLE); + createValueType(MetricDescriptorType.GAUGE_DOUBLE), ValueType.DOUBLE); assert.strictEqual( - StackdriverStatsExporterUtils.createValueType( - MetricDescriptorType.CUMULATIVE_INT64), + createValueType(MetricDescriptorType.CUMULATIVE_INT64), ValueType.INT64); assert.strictEqual( - StackdriverStatsExporterUtils.createValueType( - MetricDescriptorType.GAUGE_INT64), - ValueType.INT64); + createValueType(MetricDescriptorType.GAUGE_INT64), ValueType.INT64); assert.strictEqual( - StackdriverStatsExporterUtils.createValueType( - MetricDescriptorType.CUMULATIVE_DOUBLE), + createValueType(MetricDescriptorType.CUMULATIVE_DOUBLE), ValueType.DOUBLE); assert.strictEqual( - StackdriverStatsExporterUtils.createValueType( - MetricDescriptorType.CUMULATIVE_DISTRIBUTION), + createValueType(MetricDescriptorType.CUMULATIVE_DISTRIBUTION), ValueType.DISTRIBUTION); assert.strictEqual( - StackdriverStatsExporterUtils.createValueType( - MetricDescriptorType.GAUGE_DISTRIBUTION), + createValueType(MetricDescriptorType.GAUGE_DISTRIBUTION), ValueType.DISTRIBUTION); assert.strictEqual( - StackdriverStatsExporterUtils.createValueType( - MetricDescriptorType.SUMMARY), + createValueType(MetricDescriptorType.SUMMARY), ValueType.VALUE_TYPE_UNSPECIFIED); }); }); @@ -83,23 +70,20 @@ describe('Stackdriver Stats Exporter Utils', () => { const labelKeys: LabelKey[] = [{'key': 'key', 'description': 'desc'}]; it('should return a Stackdriver LabelDescriptor', () => { - assert.deepStrictEqual( - StackdriverStatsExporterUtils.createLabelDescriptor(labelKeys), [ - {description: 'desc', key: 'key', valueType: 'STRING'}, { - description: - StackdriverStatsExporterUtils.OPENCENSUS_TASK_DESCRIPTION, - key: StackdriverStatsExporterUtils.OPENCENSUS_TASK, - valueType: 'STRING' - } - ]); + assert.deepStrictEqual(createLabelDescriptor(labelKeys), [ + {description: 'desc', key: 'key', valueType: 'STRING'}, { + description: 'Opencensus task identifier', + key: 'opencensus_task', + valueType: 'STRING' + } + ]); }); }); describe('createDisplayName()', () => { it('should return a Stackdriver DisplayName', () => { assert.strictEqual( - StackdriverStatsExporterUtils.createDisplayName( - 'demo/latency', 'custom.googleapis.com/opencensus'), + createDisplayName('demo/latency', 'custom.googleapis.com/opencensus'), 'custom.googleapis.com/opencensus/demo/latency'); }); }); @@ -107,8 +91,7 @@ describe('Stackdriver Stats Exporter Utils', () => { describe('getMetricType()', () => { it('should return a Stackdriver MetricType', () => { assert.strictEqual( - StackdriverStatsExporterUtils.getMetricType( - 'demo/latency', 'opencensus'), + getMetricType('demo/latency', 'opencensus'), 'opencensus/demo/latency'); }); }); @@ -125,39 +108,32 @@ describe('Stackdriver Stats Exporter Utils', () => { }; it('should return a Stackdriver Metric', () => { - const metric = StackdriverStatsExporterUtils.createMetric( + const metric = createMetric( metricDescriptor, labelValues, StackdriverStatsExporter.CUSTOM_OPENCENSUS_DOMAIN); assert.strictEqual( metric.type, `custom.googleapis.com/opencensus/${METRIC_NAME}`); - assert.deepStrictEqual(metric.labels, { - 'key1': 'value1', - 'opencensus_task': - StackdriverStatsExporterUtils.generateDefaultTaskValue() - }); + assert.deepStrictEqual( + metric.labels, + {'key1': 'value1', 'opencensus_task': OPENCENSUS_TASK_VALUE_DEFAULT}); }); it('should return a Stackdriver Metric With External Metric Domain', () => { const prometheusDomain = 'external.googleapis.com/prometheus/'; - const metric = StackdriverStatsExporterUtils.createMetric( - metricDescriptor, labelValues, prometheusDomain); + const metric = + createMetric(metricDescriptor, labelValues, prometheusDomain); assert.strictEqual(metric.type, `${prometheusDomain}${METRIC_NAME}`); - assert.deepStrictEqual(metric.labels, { - 'key1': 'value1', - 'opencensus_task': - StackdriverStatsExporterUtils.generateDefaultTaskValue() - }); + assert.deepStrictEqual( + metric.labels, + {'key1': 'value1', 'opencensus_task': OPENCENSUS_TASK_VALUE_DEFAULT}); }); it('should return a Stackdriver Metric With Empty Label', () => { const prometheusDomain = 'external.googleapis.com/prometheus/'; - const metric = StackdriverStatsExporterUtils.createMetric( - metricDescriptor, [], prometheusDomain); + const metric = createMetric(metricDescriptor, [], prometheusDomain); assert.strictEqual(metric.type, `${prometheusDomain}${METRIC_NAME}`); - assert.deepStrictEqual(metric.labels, { - 'opencensus_task': - StackdriverStatsExporterUtils.generateDefaultTaskValue() - }); + assert.deepStrictEqual( + metric.labels, {'opencensus_task': OPENCENSUS_TASK_VALUE_DEFAULT}); }); }); @@ -170,8 +146,7 @@ describe('Stackdriver Stats Exporter Utils', () => { buckets: [{count: 3}, {count: 1}, {count: 2}, {count: 4}], }; it('should return a Stackdriver Distribution', () => { - const distribution: Distribution = - StackdriverStatsExporterUtils.createDistribution(distributionValue); + const distribution: Distribution = createDistribution(distributionValue); assert.strictEqual(distribution.count, 3); assert.strictEqual(distribution.mean, 0.6666666666666666); @@ -201,9 +176,8 @@ describe('Stackdriver Stats Exporter Utils', () => { }; it('should return a Stackdriver MetricDescriptor', () => { - const descriptor: MetricDescriptor = - StackdriverStatsExporterUtils.createMetricDescriptorData( - metricDescriptor, 'custom.googleapis.com/myorg/', 'myorg/'); + const descriptor: MetricDescriptor = createMetricDescriptorData( + metricDescriptor, 'custom.googleapis.com/myorg/', 'myorg/'); assert.strictEqual(descriptor.description, METRIC_DESCRIPTION); assert.strictEqual(descriptor.displayName, `myorg/${METRIC_NAME}`); @@ -214,19 +188,17 @@ describe('Stackdriver Stats Exporter Utils', () => { assert.strictEqual(descriptor.valueType, ValueType.INT64); assert.deepStrictEqual(descriptor.labels, [ {description: 'desc', key: 'key1', valueType: 'STRING'}, { - description: - StackdriverStatsExporterUtils.OPENCENSUS_TASK_DESCRIPTION, - key: StackdriverStatsExporterUtils.OPENCENSUS_TASK, + description: 'Opencensus task identifier', + key: 'opencensus_task', valueType: 'STRING' } ]); }); it('should return a Cumulative Stackdriver MetricDescriptor', () => { - const descriptor: MetricDescriptor = - StackdriverStatsExporterUtils.createMetricDescriptorData( - metricDescriptor1, - StackdriverStatsExporter.CUSTOM_OPENCENSUS_DOMAIN, 'OpenCensus'); + const descriptor: MetricDescriptor = createMetricDescriptorData( + metricDescriptor1, StackdriverStatsExporter.CUSTOM_OPENCENSUS_DOMAIN, + 'OpenCensus'); assert.strictEqual(descriptor.description, METRIC_DESCRIPTION); assert.strictEqual(descriptor.displayName, `OpenCensus/${METRIC_NAME}`); @@ -239,9 +211,8 @@ describe('Stackdriver Stats Exporter Utils', () => { assert.strictEqual(descriptor.valueType, ValueType.INT64); assert.deepStrictEqual(descriptor.labels, [ {description: 'desc', key: 'key1', valueType: 'STRING'}, { - description: - StackdriverStatsExporterUtils.OPENCENSUS_TASK_DESCRIPTION, - key: StackdriverStatsExporterUtils.OPENCENSUS_TASK, + description: 'Opencensus task identifier', + key: 'opencensus_task', valueType: 'STRING' } ]); @@ -267,8 +238,7 @@ describe('Stackdriver Stats Exporter Utils', () => { }; it('should return a Stackdriver Point', () => { - const pt = StackdriverStatsExporterUtils.createPoint( - doublePoint, null, ValueType.DOUBLE); + const pt = createPoint(doublePoint, null, ValueType.DOUBLE); assert.deepStrictEqual(pt, { value: {doubleValue: 12345678.2}, @@ -277,8 +247,7 @@ describe('Stackdriver Stats Exporter Utils', () => { }); it('should return a Stackdriver Cumulative Point', () => { - const pt = StackdriverStatsExporterUtils.createPoint( - intPoint, startTimestamp, ValueType.INT64); + const pt = createPoint(intPoint, startTimestamp, ValueType.INT64); assert.deepStrictEqual(pt, { value: {int64Value: 12345678}, @@ -290,7 +259,7 @@ describe('Stackdriver Stats Exporter Utils', () => { }); it('should return a Stackdriver Distribution Point', () => { - const pt = StackdriverStatsExporterUtils.createPoint( + const pt = createPoint( distributionPoint, startTimestamp, ValueType.DISTRIBUTION); assert.deepStrictEqual(pt, { @@ -358,19 +327,17 @@ describe('Stackdriver Stats Exporter Utils', () => { }; it('should return a Stackdriver TimeSeries', () => { - const timeSeriesList = StackdriverStatsExporterUtils.createTimeSeriesList( - metric, defaultResource, metricPrefix); + const timeSeriesList = + createTimeSeriesList(metric, defaultResource, metricPrefix); assert.equal(timeSeriesList.length, 1); const [timeseries] = timeSeriesList; assert.deepStrictEqual( timeseries.metric.type, 'custom.googleapis.com/opencensus/metric-name'); - assert.deepStrictEqual(timeseries.metric.labels, { - 'key1': 'value1', - 'opencensus_task': - StackdriverStatsExporterUtils.generateDefaultTaskValue() - }); + assert.deepStrictEqual( + timeseries.metric.labels, + {'key1': 'value1', 'opencensus_task': OPENCENSUS_TASK_VALUE_DEFAULT}); assert.deepStrictEqual(timeseries.metricKind, MetricKind.CUMULATIVE); assert.deepStrictEqual(timeseries.valueType, ValueType.DOUBLE); assert.deepStrictEqual(timeseries.resource, {type: 'global', labels: {}}); @@ -382,8 +349,7 @@ describe('Stackdriver Stats Exporter Utils', () => { it('should return a Stackdriver TimeSeries with custom monitored resource', () => { const timeSeriesList = - StackdriverStatsExporterUtils.createTimeSeriesList( - metric, customResource, metricPrefix); + createTimeSeriesList(metric, customResource, metricPrefix); assert.equal(timeSeriesList.length, 1); const [timeseries] = timeSeriesList; @@ -392,8 +358,7 @@ describe('Stackdriver Stats Exporter Utils', () => { 'custom.googleapis.com/opencensus/metric-name'); assert.deepStrictEqual(timeseries.metric.labels, { 'key1': 'value1', - 'opencensus_task': - StackdriverStatsExporterUtils.generateDefaultTaskValue() + 'opencensus_task': OPENCENSUS_TASK_VALUE_DEFAULT }); assert.deepStrictEqual( timeseries.resource, @@ -406,8 +371,7 @@ describe('Stackdriver Stats Exporter Utils', () => { it('should return a Stackdriver TimeSeries with Gauge and multiple timeseries', () => { const timeSeriesList = - StackdriverStatsExporterUtils.createTimeSeriesList( - gaugeMetric, defaultResource, metricPrefix); + createTimeSeriesList(gaugeMetric, defaultResource, metricPrefix); assert.equal(timeSeriesList.length, 2); const [timeseries1, timeseries2] = timeSeriesList; @@ -416,8 +380,7 @@ describe('Stackdriver Stats Exporter Utils', () => { 'custom.googleapis.com/opencensus/metric-name'); assert.deepStrictEqual(timeseries1.metric.labels, { 'key1': 'value1', - 'opencensus_task': - StackdriverStatsExporterUtils.generateDefaultTaskValue() + 'opencensus_task': OPENCENSUS_TASK_VALUE_DEFAULT }); assert.deepStrictEqual(timeseries1.metricKind, MetricKind.GAUGE); assert.deepStrictEqual(timeseries1.valueType, ValueType.DOUBLE); From 4c4a190b17cb553f978107445d3f62760c235f1b Mon Sep 17 00:00:00 2001 From: Mayur Kale Date: Wed, 9 Jan 2019 22:52:08 -0800 Subject: [PATCH 3/3] remove temp log --- .../src/stackdriver-stats-utils.ts | 1 - 1 file changed, 1 deletion(-) diff --git a/packages/opencensus-exporter-stackdriver/src/stackdriver-stats-utils.ts b/packages/opencensus-exporter-stackdriver/src/stackdriver-stats-utils.ts index a23ef6cae..bd9cc0ec9 100644 --- a/packages/opencensus-exporter-stackdriver/src/stackdriver-stats-utils.ts +++ b/packages/opencensus-exporter-stackdriver/src/stackdriver-stats-utils.ts @@ -222,7 +222,6 @@ export function createBucketCounts(buckets: DistributionBucket[]): number[] { /** Returns a task label value in the format of 'nodejs-@'. */ function generateDefaultTaskValue(): string { - console.log('inside generateDefaultTaskValue'); const pid = process.pid; const hostname = os.hostname() || 'localhost'; return 'nodejs-' + pid + '@' + hostname;