From 94d124bbdb2fe5b4ee7e6bc61e8b381d7644395e Mon Sep 17 00:00:00 2001 From: Alistair Brown Date: Tue, 23 Oct 2018 01:06:44 +0100 Subject: [PATCH] Add initial testing setup for lambdas with tests for eventbrite producer --- lambdas/.eslintrc | 8 +- lambdas/Dockerfile-test | 4 + lambdas/eventbrite/handlers/producer.js | 2 +- lambdas/eventbrite/handlers/transformer.js | 2 +- lambdas/package-lock.json | 5362 +++++++++++++++-- lambdas/package.json | 3 + .../eventbrite/handlers/producer.test.js | 211 + .../test-data/events-payload-empty.json | 15 + .../test-data/events-payload-incomplete.json | 877 +++ .../test-data/events-payload-invalid.json | 15 + .../test-data/events-payload-populated.json | 877 +++ .../eventbrite/handlers/tranformer.test.js | 9 + lambdas/tests/eventbrite/test-utils.js | 23 + .../farsetlabs/handlers/producer.test.js | 8 + .../farsetlabs/handlers/tranformer.test.js | 8 + .../tests/meetupcom/handlers/producer.test.js | 8 + .../meetupcom/handlers/tranformer.test.js | 8 + test.sh | 2 + 18 files changed, 7012 insertions(+), 430 deletions(-) create mode 100644 lambdas/tests/eventbrite/handlers/producer.test.js create mode 100644 lambdas/tests/eventbrite/handlers/test-data/events-payload-empty.json create mode 100644 lambdas/tests/eventbrite/handlers/test-data/events-payload-incomplete.json create mode 100644 lambdas/tests/eventbrite/handlers/test-data/events-payload-invalid.json create mode 100644 lambdas/tests/eventbrite/handlers/test-data/events-payload-populated.json create mode 100644 lambdas/tests/eventbrite/handlers/tranformer.test.js create mode 100644 lambdas/tests/eventbrite/test-utils.js create mode 100644 lambdas/tests/farsetlabs/handlers/producer.test.js create mode 100644 lambdas/tests/farsetlabs/handlers/tranformer.test.js create mode 100644 lambdas/tests/meetupcom/handlers/producer.test.js create mode 100644 lambdas/tests/meetupcom/handlers/tranformer.test.js diff --git a/lambdas/.eslintrc b/lambdas/.eslintrc index 89788149..353fc616 100644 --- a/lambdas/.eslintrc +++ b/lambdas/.eslintrc @@ -6,11 +6,11 @@ "airbnb-base/legacy", "prettier" ], - "plugins": ["prettier"], + "plugins": ["jest", "prettier"], "env": { - }, - "globals": { - "Promise": true + "jest/globals": true, + "node": true, + "es6": true }, "rules": { "prettier/prettier": "error", diff --git a/lambdas/Dockerfile-test b/lambdas/Dockerfile-test index ff114b8a..894b9de0 100644 --- a/lambdas/Dockerfile-test +++ b/lambdas/Dockerfile-test @@ -7,3 +7,7 @@ WORKDIR /lambdas-test/ RUN npm install COPY . /lambdas-test/ + +RUN cd eventbrite && npm install +RUN cd farsetlabs && npm install +RUN cd meetupcom && npm install diff --git a/lambdas/eventbrite/handlers/producer.js b/lambdas/eventbrite/handlers/producer.js index f7d99641..14047200 100644 --- a/lambdas/eventbrite/handlers/producer.js +++ b/lambdas/eventbrite/handlers/producer.js @@ -12,7 +12,7 @@ const getErrors = function(eventsPages) { }; const getFromApi = async function() { - const initialResponse = await getFromWeb(getEventsUrl({ page: 0 })); + const initialResponse = await getFromWeb(getEventsUrl({ page: 1 })); const initialData = JSON.parse(initialResponse); if (initialData.error) return [initialResponse]; diff --git a/lambdas/eventbrite/handlers/transformer.js b/lambdas/eventbrite/handlers/transformer.js index dbc77d20..a77adcf9 100644 --- a/lambdas/eventbrite/handlers/transformer.js +++ b/lambdas/eventbrite/handlers/transformer.js @@ -117,7 +117,7 @@ module.exports.transform = async (event, context, callback) => { const validEvents = transformedEvents.filter(isValidEvent); if (validEvents.length !== transformedEvents.length) { - console.log("WARNING: some events generated were not valid!"); + console.log("WARNING: some events generated were not valid!"); // eslint-disable-line no-console } return validEvents; diff --git a/lambdas/package-lock.json b/lambdas/package-lock.json index 04a5875f..0d3213ec 100644 --- a/lambdas/package-lock.json +++ b/lambdas/package-lock.json @@ -41,6 +41,12 @@ "source-map-support": "^0.5.5" } }, + "abab": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/abab/-/abab-2.0.0.tgz", + "integrity": "sha512-sY5AXXVZv4Y1VACTtR11UJCPHHudgY5i26Qj5TypE6DKlIApbwb5uqhXcJ5UUGbvZNRh7EeIoW+LrJumBsKp7w==", + "dev": true + }, "accepts": { "version": "1.3.5", "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.5.tgz", @@ -56,6 +62,24 @@ "integrity": "sha512-T/zvzYRfbVojPWahDsE5evJdHb3oJoQfFbsrKM7w5Zcs++Tr257tia3BmMP8XYVjp1S9RZXQMh7gao96BlqZOw==", "dev": true }, + "acorn-globals": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/acorn-globals/-/acorn-globals-4.3.0.tgz", + "integrity": "sha512-hMtHj3s5RnuhvHPowpBYvJVj3rAar82JiDQHvGs1zO0l10ocX/xEdBShNHTJaboucJUsScghp74pH3s7EnHHQw==", + "dev": true, + "requires": { + "acorn": "^6.0.1", + "acorn-walk": "^6.0.1" + }, + "dependencies": { + "acorn": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-6.0.2.tgz", + "integrity": "sha512-GXmKIvbrN3TV7aVqAzVFaMW8F8wzVX7voEBRO3bDA64+EX37YSayggRJP5Xig6HYHBkWKpFg9W5gg6orklubhg==", + "dev": true + } + } + }, "acorn-jsx": { "version": "4.1.1", "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-4.1.1.tgz", @@ -65,6 +89,12 @@ "acorn": "^5.0.3" } }, + "acorn-walk": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-6.1.0.tgz", + "integrity": "sha512-ugTb7Lq7u4GfWSqqpwE0bGyoBZNMTok/zDBXxfEG0QM50jNlGhIWjRC1pPN7bvV1anhF+bs+/gNcRw+o55Evbg==", + "dev": true + }, "agent-base": { "version": "4.2.1", "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-4.2.1.tgz", @@ -162,6 +192,301 @@ "color-convert": "^1.9.0" } }, + "anymatch": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-2.0.0.tgz", + "integrity": "sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw==", + "dev": true, + "requires": { + "micromatch": "^3.1.4", + "normalize-path": "^2.1.1" + }, + "dependencies": { + "arr-diff": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz", + "integrity": "sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA=", + "dev": true + }, + "array-unique": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz", + "integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=", + "dev": true + }, + "braces": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", + "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", + "dev": true, + "requires": { + "arr-flatten": "^1.1.0", + "array-unique": "^0.3.2", + "extend-shallow": "^2.0.1", + "fill-range": "^4.0.0", + "isobject": "^3.0.1", + "repeat-element": "^1.1.2", + "snapdragon": "^0.8.1", + "snapdragon-node": "^2.0.1", + "split-string": "^3.0.2", + "to-regex": "^3.0.1" + }, + "dependencies": { + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "requires": { + "is-extendable": "^0.1.0" + } + } + } + }, + "expand-brackets": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-2.1.4.tgz", + "integrity": "sha1-t3c14xXOMPa27/D4OwQVGiJEliI=", + "dev": true, + "requires": { + "debug": "^2.3.3", + "define-property": "^0.2.5", + "extend-shallow": "^2.0.1", + "posix-character-classes": "^0.1.0", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.1" + }, + "dependencies": { + "define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "dev": true, + "requires": { + "is-descriptor": "^0.1.0" + } + }, + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "requires": { + "is-extendable": "^0.1.0" + } + }, + "is-accessor-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", + "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", + "dev": true, + "requires": { + "kind-of": "^3.0.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "is-data-descriptor": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", + "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", + "dev": true, + "requires": { + "kind-of": "^3.0.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "is-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", + "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", + "dev": true, + "requires": { + "is-accessor-descriptor": "^0.1.6", + "is-data-descriptor": "^0.1.4", + "kind-of": "^5.0.0" + } + }, + "kind-of": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", + "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", + "dev": true + } + } + }, + "extglob": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/extglob/-/extglob-2.0.4.tgz", + "integrity": "sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==", + "dev": true, + "requires": { + "array-unique": "^0.3.2", + "define-property": "^1.0.0", + "expand-brackets": "^2.1.4", + "extend-shallow": "^2.0.1", + "fragment-cache": "^0.2.1", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.1" + }, + "dependencies": { + "define-property": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", + "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", + "dev": true, + "requires": { + "is-descriptor": "^1.0.0" + } + }, + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "requires": { + "is-extendable": "^0.1.0" + } + } + } + }, + "fill-range": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", + "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=", + "dev": true, + "requires": { + "extend-shallow": "^2.0.1", + "is-number": "^3.0.0", + "repeat-string": "^1.6.1", + "to-regex-range": "^2.1.0" + }, + "dependencies": { + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "requires": { + "is-extendable": "^0.1.0" + } + } + } + }, + "is-accessor-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", + "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", + "dev": true, + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-data-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", + "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", + "dev": true, + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-descriptor": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", + "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", + "dev": true, + "requires": { + "is-accessor-descriptor": "^1.0.0", + "is-data-descriptor": "^1.0.0", + "kind-of": "^6.0.2" + } + }, + "is-number": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", + "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", + "dev": true, + "requires": { + "kind-of": "^3.0.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "isobject": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", + "dev": true + }, + "kind-of": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz", + "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==", + "dev": true + }, + "micromatch": { + "version": "3.1.10", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", + "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", + "dev": true, + "requires": { + "arr-diff": "^4.0.0", + "array-unique": "^0.3.2", + "braces": "^2.3.1", + "define-property": "^2.0.2", + "extend-shallow": "^3.0.2", + "extglob": "^2.0.4", + "fragment-cache": "^0.2.1", + "kind-of": "^6.0.2", + "nanomatch": "^1.2.9", + "object.pick": "^1.3.0", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.2" + } + } + } + }, + "append-transform": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/append-transform/-/append-transform-0.4.0.tgz", + "integrity": "sha1-126/jKlNJ24keja61EpLdKthGZE=", + "dev": true, + "requires": { + "default-require-extensions": "^1.0.0" + } + }, "archiver": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/archiver/-/archiver-1.3.0.tgz", @@ -218,6 +543,33 @@ "sprintf-js": "~1.0.2" } }, + "arr-diff": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-2.0.0.tgz", + "integrity": "sha1-jzuCf5Vai9ZpaX5KQlasPOrjVs8=", + "dev": true, + "requires": { + "arr-flatten": "^1.0.1" + } + }, + "arr-flatten": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/arr-flatten/-/arr-flatten-1.1.0.tgz", + "integrity": "sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg==", + "dev": true + }, + "arr-union": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/arr-union/-/arr-union-3.1.0.tgz", + "integrity": "sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ=", + "dev": true + }, + "array-equal": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/array-equal/-/array-equal-1.0.0.tgz", + "integrity": "sha1-jCpe8kcv2ep0KwTHenUJO6J1fJM=", + "dev": true + }, "array-flatten": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", @@ -236,22 +588,67 @@ "resolved": "https://registry.npmjs.org/array-uniq/-/array-uniq-1.0.3.tgz", "integrity": "sha1-r2rId6Jcx/dOBYiUdThY39sk/bY=" }, + "array-unique": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.2.1.tgz", + "integrity": "sha1-odl8yvy8JiXMcPrc6zalDFiwGlM=", + "dev": true + }, "arrify": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/arrify/-/arrify-1.0.1.tgz", "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" + } + }, + "assert-plus": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", + "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=", + "dev": true + }, + "assign-symbols": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/assign-symbols/-/assign-symbols-1.0.0.tgz", + "integrity": "sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c=", + "dev": true + }, + "astral-regex": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-1.0.0.tgz", + "integrity": "sha512-+Ryf6g3BKoRc7jfp7ad8tM4TtMiaWvbF/1/sQcZPkkS7ag3D5nMBCe2UfOTONtAkaG0tO0ij3C5Lwmf1EiyjHg==", + "dev": true + }, "async": { "version": "1.5.2", "resolved": "https://registry.npmjs.org/async/-/async-1.5.2.tgz", "integrity": "sha1-7GphrlZIDAw8skHJVhjiCJL5Zyo=" }, + "async-limiter": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/async-limiter/-/async-limiter-1.0.0.tgz", + "integrity": "sha512-jp/uFnooOiO+L211eZOoSyzpOITMXx1rBITauYykG3BRYPu8h0UcxsPNB04RR5vo4Tyz3+ay17tR6JVf9qzYWg==", + "dev": true + }, "asynckit": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=" }, + "atob": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/atob/-/atob-2.1.2.tgz", + "integrity": "sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg==", + "dev": true + }, "aws-sdk": { "version": "2.307.0", "resolved": "https://registry.npmjs.org/aws-sdk/-/aws-sdk-2.307.0.tgz", @@ -290,71 +687,424 @@ } } }, - "babel-polyfill": { + "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=", + "dev": true + }, + "aws4": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.8.0.tgz", + "integrity": "sha512-ReZxvNHIOv88FlT7rxcXIIC0fPt4KZqZbOlivyWtXLt8ESx84zd3kMC6iK5jVeS2qt+g7ftS7ye4fi06X5rtRQ==", + "dev": true + }, + "babel-code-frame": { "version": "6.26.0", - "resolved": "https://registry.npmjs.org/babel-polyfill/-/babel-polyfill-6.26.0.tgz", - "integrity": "sha1-N5k3q8Z9eJWXCtxiHyhM2WbPIVM=", + "resolved": "https://registry.npmjs.org/babel-code-frame/-/babel-code-frame-6.26.0.tgz", + "integrity": "sha1-Y/1D99weO7fONZR9uP42mj9Yx0s=", + "dev": true, "requires": { - "babel-runtime": "^6.26.0", - "core-js": "^2.5.0", - "regenerator-runtime": "^0.10.5" + "chalk": "^1.1.3", + "esutils": "^2.0.2", + "js-tokens": "^3.0.2" + }, + "dependencies": { + "ansi-styles": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", + "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", + "dev": true + }, + "chalk": { + "version": "1.1.3", + "resolved": "http://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", + "has-ansi": "^2.0.0", + "strip-ansi": "^3.0.0", + "supports-color": "^2.0.0" + } + }, + "js-tokens": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-3.0.2.tgz", + "integrity": "sha1-mGbfOVECEw449/mWvOtlRDIJwls=", + "dev": true + }, + "supports-color": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", + "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", + "dev": true + } } }, - "babel-runtime": { - "version": "6.26.0", - "resolved": "https://registry.npmjs.org/babel-runtime/-/babel-runtime-6.26.0.tgz", - "integrity": "sha1-llxwWGaOgrVde/4E/yM3vItWR/4=", + "babel-core": { + "version": "6.26.3", + "resolved": "https://registry.npmjs.org/babel-core/-/babel-core-6.26.3.tgz", + "integrity": "sha512-6jyFLuDmeidKmUEb3NM+/yawG0M2bDZ9Z1qbZP59cyHLz8kYGKYwpJP0UwUKKUiTRNvxfLesJnTedqczP7cTDA==", + "dev": true, "requires": { - "core-js": "^2.4.0", - "regenerator-runtime": "^0.11.0" + "babel-code-frame": "^6.26.0", + "babel-generator": "^6.26.0", + "babel-helpers": "^6.24.1", + "babel-messages": "^6.23.0", + "babel-register": "^6.26.0", + "babel-runtime": "^6.26.0", + "babel-template": "^6.26.0", + "babel-traverse": "^6.26.0", + "babel-types": "^6.26.0", + "babylon": "^6.18.0", + "convert-source-map": "^1.5.1", + "debug": "^2.6.9", + "json5": "^0.5.1", + "lodash": "^4.17.4", + "minimatch": "^3.0.4", + "path-is-absolute": "^1.0.1", + "private": "^0.1.8", + "slash": "^1.0.0", + "source-map": "^0.5.7" }, "dependencies": { - "regenerator-runtime": { - "version": "0.11.1", - "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz", - "integrity": "sha512-MguG95oij0fC3QV3URf4V2SDYGJhJnJGqvIIgdECeODCT98wSWDAJ94SSuVpYQUoTcGUIL6L4yNB7j1DFFHSBg==" + "source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", + "dev": true } } }, - "balanced-match": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", - "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=" - }, - "base64-js": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.3.0.tgz", - "integrity": "sha512-ccav/yGvoa80BQDljCxsmmQ3Xvx60/UpBIij5QN21W3wBi/hhIC9OoO+KLpu9IJTS9j4DRVJ3aDDF9cMSoa2lw==" + "babel-generator": { + "version": "6.26.1", + "resolved": "https://registry.npmjs.org/babel-generator/-/babel-generator-6.26.1.tgz", + "integrity": "sha512-HyfwY6ApZj7BYTcJURpM5tznulaBvyio7/0d4zFOeMPUmfxkCjHocCuoLa2SAGzBI8AREcH3eP3758F672DppA==", + "dev": true, + "requires": { + "babel-messages": "^6.23.0", + "babel-runtime": "^6.26.0", + "babel-types": "^6.26.0", + "detect-indent": "^4.0.0", + "jsesc": "^1.3.0", + "lodash": "^4.17.4", + "source-map": "^0.5.7", + "trim-right": "^1.0.1" + }, + "dependencies": { + "source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", + "dev": true + } + } }, - "bl": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/bl/-/bl-1.2.2.tgz", - "integrity": "sha512-e8tQYnZodmebYDWGH7KMRvtzKXaJHx3BbilrgZCfvyLUYdKpK1t5PSPmpkny/SgiTSCnjfLW7v5rlONXVFkQEA==", + "babel-helpers": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-helpers/-/babel-helpers-6.24.1.tgz", + "integrity": "sha1-NHHenK7DiOXIUOWX5Yom3fN2ArI=", + "dev": true, "requires": { - "readable-stream": "^2.3.5", - "safe-buffer": "^5.1.1" + "babel-runtime": "^6.22.0", + "babel-template": "^6.24.1" } }, - "bluebird": { - "version": "3.5.1", - "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.5.1.tgz", - "integrity": "sha512-MKiLiV+I1AA596t9w1sQJ8jkiSr5+ZKi0WKrYGUn6d1Fx+Ij4tIj+m2WMQSGczs5jZVxV339chE8iwk6F64wjA==" + "babel-jest": { + "version": "23.6.0", + "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-23.6.0.tgz", + "integrity": "sha512-lqKGG6LYXYu+DQh/slrQ8nxXQkEkhugdXsU6St7GmhVS7Ilc/22ArwqXNJrf0QaOBjZB0360qZMwXqDYQHXaew==", + "dev": true, + "requires": { + "babel-plugin-istanbul": "^4.1.6", + "babel-preset-jest": "^23.2.0" + } }, - "body-parser": { - "version": "1.18.3", - "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.18.3.tgz", - "integrity": "sha1-WykhmP/dVTs6DyDe0FkrlWlVyLQ=", + "babel-messages": { + "version": "6.23.0", + "resolved": "https://registry.npmjs.org/babel-messages/-/babel-messages-6.23.0.tgz", + "integrity": "sha1-8830cDhYA1sqKVHG7F7fbGLyYw4=", + "dev": true, "requires": { - "bytes": "3.0.0", - "content-type": "~1.0.4", - "debug": "2.6.9", - "depd": "~1.1.2", - "http-errors": "~1.6.3", - "iconv-lite": "0.4.23", - "on-finished": "~2.3.0", - "qs": "6.5.2", - "raw-body": "2.3.3", - "type-is": "~1.6.16" + "babel-runtime": "^6.22.0" + } + }, + "babel-plugin-istanbul": { + "version": "4.1.6", + "resolved": "http://registry.npmjs.org/babel-plugin-istanbul/-/babel-plugin-istanbul-4.1.6.tgz", + "integrity": "sha512-PWP9FQ1AhZhS01T/4qLSKoHGY/xvkZdVBGlKM/HuxxS3+sC66HhTNR7+MpbO/so/cz/wY94MeSWJuP1hXIPfwQ==", + "dev": true, + "requires": { + "babel-plugin-syntax-object-rest-spread": "^6.13.0", + "find-up": "^2.1.0", + "istanbul-lib-instrument": "^1.10.1", + "test-exclude": "^4.2.1" + }, + "dependencies": { + "find-up": { + "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" + } + } + } + }, + "babel-plugin-jest-hoist": { + "version": "23.2.0", + "resolved": "https://registry.npmjs.org/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-23.2.0.tgz", + "integrity": "sha1-5h+uBaHKiAGq3uV6bWa4zvr0QWc=", + "dev": true + }, + "babel-plugin-syntax-object-rest-spread": { + "version": "6.13.0", + "resolved": "http://registry.npmjs.org/babel-plugin-syntax-object-rest-spread/-/babel-plugin-syntax-object-rest-spread-6.13.0.tgz", + "integrity": "sha1-/WU28rzhODb/o6VFjEkDpZe7O/U=", + "dev": true + }, + "babel-polyfill": { + "version": "6.26.0", + "resolved": "https://registry.npmjs.org/babel-polyfill/-/babel-polyfill-6.26.0.tgz", + "integrity": "sha1-N5k3q8Z9eJWXCtxiHyhM2WbPIVM=", + "requires": { + "babel-runtime": "^6.26.0", + "core-js": "^2.5.0", + "regenerator-runtime": "^0.10.5" + } + }, + "babel-preset-jest": { + "version": "23.2.0", + "resolved": "https://registry.npmjs.org/babel-preset-jest/-/babel-preset-jest-23.2.0.tgz", + "integrity": "sha1-jsegOhOPABoaj7HoETZSvxpV2kY=", + "dev": true, + "requires": { + "babel-plugin-jest-hoist": "^23.2.0", + "babel-plugin-syntax-object-rest-spread": "^6.13.0" + } + }, + "babel-register": { + "version": "6.26.0", + "resolved": "https://registry.npmjs.org/babel-register/-/babel-register-6.26.0.tgz", + "integrity": "sha1-btAhFz4vy0htestFxgCahW9kcHE=", + "dev": true, + "requires": { + "babel-core": "^6.26.0", + "babel-runtime": "^6.26.0", + "core-js": "^2.5.0", + "home-or-tmp": "^2.0.0", + "lodash": "^4.17.4", + "mkdirp": "^0.5.1", + "source-map-support": "^0.4.15" + }, + "dependencies": { + "source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", + "dev": true + }, + "source-map-support": { + "version": "0.4.18", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.4.18.tgz", + "integrity": "sha512-try0/JqxPLF9nOjvSta7tVondkP5dwgyLDjVoyMDlmjugT2lRZ1OfsrYTkCd2hkDnJTKRbO/Rl3orm8vlsUzbA==", + "dev": true, + "requires": { + "source-map": "^0.5.6" + } + } + } + }, + "babel-runtime": { + "version": "6.26.0", + "resolved": "https://registry.npmjs.org/babel-runtime/-/babel-runtime-6.26.0.tgz", + "integrity": "sha1-llxwWGaOgrVde/4E/yM3vItWR/4=", + "requires": { + "core-js": "^2.4.0", + "regenerator-runtime": "^0.11.0" + }, + "dependencies": { + "regenerator-runtime": { + "version": "0.11.1", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz", + "integrity": "sha512-MguG95oij0fC3QV3URf4V2SDYGJhJnJGqvIIgdECeODCT98wSWDAJ94SSuVpYQUoTcGUIL6L4yNB7j1DFFHSBg==" + } + } + }, + "babel-template": { + "version": "6.26.0", + "resolved": "https://registry.npmjs.org/babel-template/-/babel-template-6.26.0.tgz", + "integrity": "sha1-3gPi0WOWsGn0bdn/+FIfsaDjXgI=", + "dev": true, + "requires": { + "babel-runtime": "^6.26.0", + "babel-traverse": "^6.26.0", + "babel-types": "^6.26.0", + "babylon": "^6.18.0", + "lodash": "^4.17.4" + } + }, + "babel-traverse": { + "version": "6.26.0", + "resolved": "https://registry.npmjs.org/babel-traverse/-/babel-traverse-6.26.0.tgz", + "integrity": "sha1-RqnL1+3MYsjlwGTi0tjQ9ANXZu4=", + "dev": true, + "requires": { + "babel-code-frame": "^6.26.0", + "babel-messages": "^6.23.0", + "babel-runtime": "^6.26.0", + "babel-types": "^6.26.0", + "babylon": "^6.18.0", + "debug": "^2.6.8", + "globals": "^9.18.0", + "invariant": "^2.2.2", + "lodash": "^4.17.4" + }, + "dependencies": { + "globals": { + "version": "9.18.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-9.18.0.tgz", + "integrity": "sha512-S0nG3CLEQiY/ILxqtztTWH/3iRRdyBLw6KMDxnKMchrtbj2OFmehVh0WUCfW3DUrIgx/qFrJPICrq4Z4sTR9UQ==", + "dev": true + } + } + }, + "babel-types": { + "version": "6.26.0", + "resolved": "https://registry.npmjs.org/babel-types/-/babel-types-6.26.0.tgz", + "integrity": "sha1-o7Bz+Uq0nrb6Vc1lInozQ4BjJJc=", + "dev": true, + "requires": { + "babel-runtime": "^6.26.0", + "esutils": "^2.0.2", + "lodash": "^4.17.4", + "to-fast-properties": "^1.0.3" + } + }, + "babylon": { + "version": "6.18.0", + "resolved": "https://registry.npmjs.org/babylon/-/babylon-6.18.0.tgz", + "integrity": "sha512-q/UEjfGJ2Cm3oKV71DJz9d25TPnq5rhBVL2Q4fA5wcC3jcrdn7+SssEybFIxwAvvP+YCsCYNKughoF33GxgycQ==", + "dev": true + }, + "balanced-match": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", + "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=" + }, + "base": { + "version": "0.11.2", + "resolved": "https://registry.npmjs.org/base/-/base-0.11.2.tgz", + "integrity": "sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg==", + "dev": true, + "requires": { + "cache-base": "^1.0.1", + "class-utils": "^0.3.5", + "component-emitter": "^1.2.1", + "define-property": "^1.0.0", + "isobject": "^3.0.1", + "mixin-deep": "^1.2.0", + "pascalcase": "^0.1.1" + }, + "dependencies": { + "define-property": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", + "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", + "dev": true, + "requires": { + "is-descriptor": "^1.0.0" + } + }, + "is-accessor-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", + "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", + "dev": true, + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-data-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", + "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", + "dev": true, + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-descriptor": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", + "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", + "dev": true, + "requires": { + "is-accessor-descriptor": "^1.0.0", + "is-data-descriptor": "^1.0.0", + "kind-of": "^6.0.2" + } + }, + "isobject": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", + "dev": true + }, + "kind-of": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz", + "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==", + "dev": true + } + } + }, + "base64-js": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.3.0.tgz", + "integrity": "sha512-ccav/yGvoa80BQDljCxsmmQ3Xvx60/UpBIij5QN21W3wBi/hhIC9OoO+KLpu9IJTS9j4DRVJ3aDDF9cMSoa2lw==" + }, + "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" + } + }, + "bl": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/bl/-/bl-1.2.2.tgz", + "integrity": "sha512-e8tQYnZodmebYDWGH7KMRvtzKXaJHx3BbilrgZCfvyLUYdKpK1t5PSPmpkny/SgiTSCnjfLW7v5rlONXVFkQEA==", + "requires": { + "readable-stream": "^2.3.5", + "safe-buffer": "^5.1.1" + } + }, + "bluebird": { + "version": "3.5.1", + "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.5.1.tgz", + "integrity": "sha512-MKiLiV+I1AA596t9w1sQJ8jkiSr5+ZKi0WKrYGUn6d1Fx+Ij4tIj+m2WMQSGczs5jZVxV339chE8iwk6F64wjA==" + }, + "body-parser": { + "version": "1.18.3", + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.18.3.tgz", + "integrity": "sha1-WykhmP/dVTs6DyDe0FkrlWlVyLQ=", + "requires": { + "bytes": "3.0.0", + "content-type": "~1.0.4", + "debug": "2.6.9", + "depd": "~1.1.2", + "http-errors": "~1.6.3", + "iconv-lite": "0.4.23", + "on-finished": "~2.3.0", + "qs": "6.5.2", + "raw-body": "2.3.3", + "type-is": "~1.6.16" } }, "boxen": { @@ -409,6 +1159,49 @@ "concat-map": "0.0.1" } }, + "braces": { + "version": "1.8.5", + "resolved": "https://registry.npmjs.org/braces/-/braces-1.8.5.tgz", + "integrity": "sha1-uneWLhLf+WnWt2cR6RS3N4V79qc=", + "dev": true, + "requires": { + "expand-range": "^1.8.1", + "preserve": "^0.2.0", + "repeat-element": "^1.1.2" + } + }, + "browser-process-hrtime": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/browser-process-hrtime/-/browser-process-hrtime-0.1.3.tgz", + "integrity": "sha512-bRFnI4NnjO6cnyLmOV/7PVoDEMJChlcfN0z4s1YMBY989/SvlfMI1lgCnkFUs53e9gQF+w7qu7XdllSTiSl8Aw==", + "dev": true + }, + "browser-resolve": { + "version": "1.11.3", + "resolved": "https://registry.npmjs.org/browser-resolve/-/browser-resolve-1.11.3.tgz", + "integrity": "sha512-exDi1BYWB/6raKHmDTCicQfTkqwN5fioMFV4j8BsfMU4R2DK/QfZfK7kOVkmWCNANf0snkBzqGqAJBao9gZMdQ==", + "dev": true, + "requires": { + "resolve": "1.1.7" + }, + "dependencies": { + "resolve": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.1.7.tgz", + "integrity": "sha1-IDEU2CrSxe2ejgQRs5ModeiJ6Xs=", + "dev": true + } + } + }, + "bser": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/bser/-/bser-2.0.0.tgz", + "integrity": "sha1-mseNPtXZFYBP2HrLFYvHlxR6Fxk=", + "dev": true, + "requires": { + "node-int64": "^0.4.0" + } + }, "buffer": { "version": "5.2.1", "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.2.1.tgz", @@ -458,6 +1251,31 @@ "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz", "integrity": "sha1-0ygVQE1olpn4Wk6k+odV3ROpYEg=" }, + "cache-base": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/cache-base/-/cache-base-1.0.1.tgz", + "integrity": "sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ==", + "dev": true, + "requires": { + "collection-visit": "^1.0.0", + "component-emitter": "^1.2.1", + "get-value": "^2.0.6", + "has-value": "^1.0.0", + "isobject": "^3.0.1", + "set-value": "^2.0.0", + "to-object-path": "^0.3.0", + "union-value": "^1.0.0", + "unset-value": "^1.0.0" + }, + "dependencies": { + "isobject": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", + "dev": true + } + } + }, "caller-path": { "version": "0.1.0", "resolved": "https://registry.npmjs.org/caller-path/-/caller-path-0.1.0.tgz", @@ -478,11 +1296,26 @@ "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-4.1.0.tgz", "integrity": "sha1-1UVjW+HjPFQmScaRc+Xeas+uNN0=" }, + "capture-exit": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/capture-exit/-/capture-exit-1.2.0.tgz", + "integrity": "sha1-HF/MSJ/QqwDU8ax64QcuMXP7q28=", + "dev": true, + "requires": { + "rsvp": "^3.3.3" + } + }, "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==" }, + "caseless": { + "version": "0.12.0", + "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz", + "integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=", + "dev": true + }, "caw": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/caw/-/caw-2.0.1.tgz", @@ -521,6 +1354,35 @@ "integrity": "sha512-UZK3NBx2Mca+b5LsG7bY183pHWt5Y1xts4P3Pz7ENTwGVnJOUWbRb3ocjvX7hx9tq/yTAdclXm9sZ38gNuem4A==", "dev": true }, + "class-utils": { + "version": "0.3.6", + "resolved": "https://registry.npmjs.org/class-utils/-/class-utils-0.3.6.tgz", + "integrity": "sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg==", + "dev": true, + "requires": { + "arr-union": "^3.1.0", + "define-property": "^0.2.5", + "isobject": "^3.0.0", + "static-extend": "^0.1.1" + }, + "dependencies": { + "define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "dev": true, + "requires": { + "is-descriptor": "^0.1.0" + } + }, + "isobject": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", + "dev": true + } + } + }, "cli-boxes": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/cli-boxes/-/cli-boxes-1.0.0.tgz", @@ -539,13 +1401,73 @@ "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-2.2.0.tgz", "integrity": "sha1-/xnt6Kml5XkyQUewwR8PvLq+1jk=" }, + "cliui": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-4.1.0.tgz", + "integrity": "sha512-4FG+RSG9DL7uEwRUZXZn3SS34DiDPfzP0VOiEwtUWlE+AR2EIg+hSyvrIgUUfhdgR/UkAeW2QHgeP+hWrXs7jQ==", + "dev": true, + "requires": { + "string-width": "^2.1.1", + "strip-ansi": "^4.0.0", + "wrap-ansi": "^2.0.0" + }, + "dependencies": { + "ansi-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", + "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", + "dev": true + }, + "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=", + "dev": true + }, + "string-width": { + "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" + } + }, + "strip-ansi": { + "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" + } + } + } + }, + "co": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz", + "integrity": "sha1-bqa989hTrlTMuOR7+gvz+QMfsYQ=", + "dev": true + }, "code-point-at": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz", "integrity": "sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c=" }, - "color-convert": { - "version": "1.9.3", + "collection-visit": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/collection-visit/-/collection-visit-1.0.0.tgz", + "integrity": "sha1-S8A3PBZLwykbTTaMgpzxqApZ3KA=", + "dev": true, + "requires": { + "map-visit": "^1.0.0", + "object-visit": "^1.0.0" + } + }, + "color-convert": { + "version": "1.9.3", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", "requires": { @@ -643,6 +1565,15 @@ "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.4.tgz", "integrity": "sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA==" }, + "convert-source-map": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.6.0.tgz", + "integrity": "sha512-eFu7XigvxdZ1ETfbgPBohgyQ/Z++C0eEhTor0qRwBw9unw+L0/6V8wkSuGgzdThkiS5lSpdptOQPD8Ak40a+7A==", + "dev": true, + "requires": { + "safe-buffer": "~5.1.1" + } + }, "cookie": { "version": "0.3.1", "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.3.1.tgz", @@ -658,6 +1589,12 @@ "resolved": "https://registry.npmjs.org/cookiejar/-/cookiejar-2.1.2.tgz", "integrity": "sha512-Mw+adcfzPxcPeI+0WlvRrr/3lGVO0bD75SxX6811cxSh1Wbxx7xZBGK1eVtDf6si8rg2lhnUjsVLMFMfbRIuwA==" }, + "copy-descriptor": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/copy-descriptor/-/copy-descriptor-0.1.1.tgz", + "integrity": "sha1-Z29us8OZl8LuGsOpJP1hJHSPV40=", + "dev": true + }, "core-js": { "version": "2.5.7", "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.5.7.tgz", @@ -717,6 +1654,54 @@ "resolved": "https://registry.npmjs.org/crypto-random-string/-/crypto-random-string-1.0.0.tgz", "integrity": "sha1-ojD2T1aDEOFJgAmUB5DsmVRbyn4=" }, + "cssom": { + "version": "0.3.4", + "resolved": "https://registry.npmjs.org/cssom/-/cssom-0.3.4.tgz", + "integrity": "sha512-+7prCSORpXNeR4/fUP3rL+TzqtiFfhMvTd7uEqMdgPvLPt4+uzFUeufx5RHjGTACCargg/DiEt/moMQmvnfkog==", + "dev": true + }, + "cssstyle": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/cssstyle/-/cssstyle-1.1.1.tgz", + "integrity": "sha512-364AI1l/M5TYcFH83JnOH/pSqgaNnKmYgKrm0didZMGKWjQB60dymwWy1rKUgL3J1ffdq9xVi2yGLHdSjjSNog==", + "dev": true, + "requires": { + "cssom": "0.3.x" + } + }, + "dashdash": { + "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" + } + }, + "data-urls": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/data-urls/-/data-urls-1.0.1.tgz", + "integrity": "sha512-0HdcMZzK6ubMUnsMmQmG0AcLQPvbvb47R0+7CCZQCYgcd8OUWG91CG7sM6GoXgjz+WLl4ArFzHtBMy/QqSF4eg==", + "dev": true, + "requires": { + "abab": "^2.0.0", + "whatwg-mimetype": "^2.1.0", + "whatwg-url": "^7.0.0" + }, + "dependencies": { + "whatwg-url": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-7.0.0.tgz", + "integrity": "sha512-37GeVSIJ3kn1JgKyjiYNmSLP1yzbpb29jdmwBSgkD9h40/hyrR/OifpVUndji3tmwGgD8qpw7iQu3RSbCrBpsQ==", + "dev": true, + "requires": { + "lodash.sortby": "^4.7.0", + "tr46": "^1.0.1", + "webidl-conversions": "^4.0.2" + } + } + } + }, "debug": { "version": "2.6.9", "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", @@ -725,6 +1710,18 @@ "ms": "2.0.0" } }, + "decamelize": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", + "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=", + "dev": true + }, + "decode-uri-component": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.0.tgz", + "integrity": "sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU=", + "dev": true + }, "decompress": { "version": "4.2.0", "resolved": "https://registry.npmjs.org/decompress/-/decompress-4.2.0.tgz", @@ -817,6 +1814,26 @@ "integrity": "sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ=", "dev": true }, + "default-require-extensions": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/default-require-extensions/-/default-require-extensions-1.0.0.tgz", + "integrity": "sha1-836hXT4T/9m0N9M+GnW1+5eHTLg=", + "dev": true, + "requires": { + "strip-bom": "^2.0.0" + }, + "dependencies": { + "strip-bom": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-2.0.0.tgz", + "integrity": "sha1-YhmoVhZSBJHzV4i9vxRHqZx+aw4=", + "dev": true, + "requires": { + "is-utf8": "^0.2.0" + } + } + } + }, "define-properties": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz", @@ -826,6 +1843,59 @@ "object-keys": "^1.0.12" } }, + "define-property": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-2.0.2.tgz", + "integrity": "sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==", + "dev": true, + "requires": { + "is-descriptor": "^1.0.2", + "isobject": "^3.0.1" + }, + "dependencies": { + "is-accessor-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", + "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", + "dev": true, + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-data-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", + "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", + "dev": true, + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-descriptor": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", + "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", + "dev": true, + "requires": { + "is-accessor-descriptor": "^1.0.0", + "is-data-descriptor": "^1.0.0", + "kind-of": "^6.0.2" + } + }, + "isobject": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", + "dev": true + }, + "kind-of": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz", + "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==", + "dev": true + } + } + }, "del": { "version": "2.2.2", "resolved": "https://registry.npmjs.org/del/-/del-2.2.2.tgz", @@ -877,6 +1947,27 @@ "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.0.4.tgz", "integrity": "sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA=" }, + "detect-indent": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/detect-indent/-/detect-indent-4.0.0.tgz", + "integrity": "sha1-920GQ1LN9Docts5hnE7jqUdd4gg=", + "dev": true, + "requires": { + "repeating": "^2.0.0" + } + }, + "detect-newline": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/detect-newline/-/detect-newline-2.1.0.tgz", + "integrity": "sha1-9B8cEL5LAOh7XxPaaAdZ8sW/0+I=", + "dev": true + }, + "diff": { + "version": "3.5.0", + "resolved": "https://registry.npmjs.org/diff/-/diff-3.5.0.tgz", + "integrity": "sha512-A46qtFgd+g7pDZinpnwiRJtxbC1hpgf0uzP3iG89scHk0AUC7A1TGxf5OiiOUv/JMZR8GOt8hL900hV0bOy5xA==", + "dev": true + }, "doctrine": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", @@ -886,6 +1977,15 @@ "esutils": "^2.0.2" } }, + "domexception": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/domexception/-/domexception-1.0.1.tgz", + "integrity": "sha512-raigMkn7CJNNo6Ihro1fzG7wr3fHuYVytzquZKX5n0yizGsTcYgzdIUwj1X9pK0VvjeihV+XiclP+DjwbsSKug==", + "dev": true, + "requires": { + "webidl-conversions": "^4.0.2" + } + }, "dot-prop": { "version": "4.2.0", "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-4.2.0.tgz", @@ -913,6 +2013,16 @@ "resolved": "https://registry.npmjs.org/duplexer3/-/duplexer3-0.1.4.tgz", "integrity": "sha1-7gHdHKwO08vH/b6jfcCo8c4ALOI=" }, + "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" + } + }, "ee-first": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", @@ -995,6 +2105,27 @@ "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=" }, + "escodegen": { + "version": "1.11.0", + "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-1.11.0.tgz", + "integrity": "sha512-IeMV45ReixHS53K/OmfKAIztN/igDHzTJUhZM3k1jMhIZWjk45SMwAtBsEXiJp3vSPmTcu6CXn7mDvFHRN66fw==", + "dev": true, + "requires": { + "esprima": "^3.1.3", + "estraverse": "^4.2.0", + "esutils": "^2.0.2", + "optionator": "^0.8.1", + "source-map": "~0.6.1" + }, + "dependencies": { + "esprima": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-3.1.3.tgz", + "integrity": "sha1-/cpRzuYTOJXjyI1TXOSdv/YqRjM=", + "dev": true + } + } + }, "eslint": { "version": "5.7.0", "resolved": "https://registry.npmjs.org/eslint/-/eslint-5.7.0.tgz", @@ -1279,6 +2410,12 @@ } } }, + "eslint-plugin-jest": { + "version": "21.25.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-jest/-/eslint-plugin-jest-21.25.1.tgz", + "integrity": "sha512-mmphmAD/WihjFGq1IUHLSZWQPcd8U9w/SeFCHf3p0V3Q3MBxmj1ZKnh41hID44guIACLuwos/LhVWIr4phN4yg==", + "dev": true + }, "eslint-plugin-prettier": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/eslint-plugin-prettier/-/eslint-plugin-prettier-3.0.0.tgz", @@ -1371,6 +2508,15 @@ "resolved": "https://registry.npmjs.org/events/-/events-1.1.1.tgz", "integrity": "sha1-nr23Y1rQmccNzEwqH1AEKI6L2SQ=" }, + "exec-sh": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/exec-sh/-/exec-sh-0.2.2.tgz", + "integrity": "sha512-FIUCJz1RbuS0FKTdaAafAByGS0CPvU3R0MeHxgtl+djzCc//F8HakL8GzmVNZanasTbTAY/3DRFA0KpVqj/eAw==", + "dev": true, + "requires": { + "merge": "^1.2.0" + } + }, "execa": { "version": "0.7.0", "resolved": "https://registry.npmjs.org/execa/-/execa-0.7.0.tgz", @@ -1385,11 +2531,49 @@ "strip-eof": "^1.0.0" } }, + "exit": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/exit/-/exit-0.1.2.tgz", + "integrity": "sha1-BjJjj42HfMghB9MKD/8aF8uhzQw=", + "dev": true + }, "exit-hook": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/exit-hook/-/exit-hook-1.1.1.tgz", "integrity": "sha1-8FyiM7SMBdVP/wd2XfhQfpXAL/g=" }, + "expand-brackets": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-0.1.5.tgz", + "integrity": "sha1-3wcoTjQqgHzXM6xa9yQR5YHRF3s=", + "dev": true, + "requires": { + "is-posix-bracket": "^0.1.0" + } + }, + "expand-range": { + "version": "1.8.2", + "resolved": "https://registry.npmjs.org/expand-range/-/expand-range-1.8.2.tgz", + "integrity": "sha1-opnv/TNf4nIeuujiV+x5ZE/IUzc=", + "dev": true, + "requires": { + "fill-range": "^2.1.0" + } + }, + "expect": { + "version": "23.6.0", + "resolved": "https://registry.npmjs.org/expect/-/expect-23.6.0.tgz", + "integrity": "sha512-dgSoOHgmtn/aDGRVFWclQyPDKl2CQRq0hmIEoUAuQs/2rn2NcvCWcSCovm6BLeuB/7EZuLGu2QfnR+qRt5OM4w==", + "dev": true, + "requires": { + "ansi-styles": "^3.2.0", + "jest-diff": "^23.6.0", + "jest-get-type": "^22.1.0", + "jest-matcher-utils": "^23.6.0", + "jest-message-util": "^23.4.0", + "jest-regex-util": "^23.3.0" + } + }, "express": { "version": "4.16.3", "resolved": "https://registry.npmjs.org/express/-/express-4.16.3.tgz", @@ -1500,6 +2684,27 @@ "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==" }, + "extend-shallow": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", + "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=", + "dev": true, + "requires": { + "assign-symbols": "^1.0.0", + "is-extendable": "^1.0.1" + }, + "dependencies": { + "is-extendable": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", + "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", + "dev": true, + "requires": { + "is-plain-object": "^2.0.4" + } + } + } + }, "external-editor": { "version": "1.1.1", "resolved": "http://registry.npmjs.org/external-editor/-/external-editor-1.1.1.tgz", @@ -1510,6 +2715,21 @@ "tmp": "^0.0.29" } }, + "extglob": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/extglob/-/extglob-0.3.2.tgz", + "integrity": "sha1-Lhj/PS9JqydlzskCPwEdqo2DSaE=", + "dev": true, + "requires": { + "is-extglob": "^1.0.0" + } + }, + "extsprintf": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz", + "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", @@ -1533,6 +2753,15 @@ "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=" }, + "fb-watchman": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/fb-watchman/-/fb-watchman-2.0.0.tgz", + "integrity": "sha1-VOmr99+i8mzZsWNsWIwa/AXeXVg=", + "dev": true, + "requires": { + "bser": "^2.0.0" + } + }, "fd-slicer": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/fd-slicer/-/fd-slicer-1.1.0.tgz", @@ -1565,6 +2794,12 @@ "resolved": "https://registry.npmjs.org/file-type/-/file-type-5.2.0.tgz", "integrity": "sha1-LdvqfHP/42No365J3DOMBYwritY=" }, + "filename-regex": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/filename-regex/-/filename-regex-2.0.1.tgz", + "integrity": "sha1-wcS5vuPglyXdsQa3XB4wH+LxiyY=", + "dev": true + }, "filename-reserved-regex": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/filename-reserved-regex/-/filename-reserved-regex-2.0.0.tgz", @@ -1580,11 +2815,34 @@ "trim-repeated": "^1.0.0" } }, + "fileset": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/fileset/-/fileset-2.0.3.tgz", + "integrity": "sha1-jnVIqW08wjJ+5eZ0FocjozO7oqA=", + "dev": true, + "requires": { + "glob": "^7.0.3", + "minimatch": "^3.0.3" + } + }, "filesize": { "version": "3.6.1", "resolved": "https://registry.npmjs.org/filesize/-/filesize-3.6.1.tgz", "integrity": "sha512-7KjR1vv6qnicaPMi1iiTcI85CyYwRO/PSFCu6SvqL8jN2Wjt/NIYQTFtFs7fSDCYOstUkEWIQGFUg5YZQfjlcg==" }, + "fill-range": { + "version": "2.2.4", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-2.2.4.tgz", + "integrity": "sha512-cnrcCbj01+j2gTG921VZPnHbjmdAf8oQV/iGeV2kZxGSyfYjjTyY79ErsK1WJWMpw6DaApEX72binqJE+/d+5Q==", + "dev": true, + "requires": { + "is-number": "^2.1.0", + "isobject": "^2.0.0", + "randomatic": "^3.0.0", + "repeat-element": "^1.1.2", + "repeat-string": "^1.5.2" + } + }, "finalhandler": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.1.tgz", @@ -1628,6 +2886,27 @@ "write": "^0.2.1" } }, + "for-in": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz", + "integrity": "sha1-gQaNKVqBQuwKxybG4iAMMPttXoA=", + "dev": true + }, + "for-own": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/for-own/-/for-own-0.1.5.tgz", + "integrity": "sha1-UmXGgaTylNq78XyVCbZ2OqhFEM4=", + "dev": true, + "requires": { + "for-in": "^1.0.1" + } + }, + "forever-agent": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", + "integrity": "sha1-+8cfDEGt6zf5bFd60e1C2P2sypE=", + "dev": true + }, "form-data": { "version": "2.3.2", "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.2.tgz", @@ -1648,6 +2927,15 @@ "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.1.2.tgz", "integrity": "sha1-mMI9qxF1ZXuMBXPozszZGw/xjIQ=" }, + "fragment-cache": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/fragment-cache/-/fragment-cache-0.2.1.tgz", + "integrity": "sha1-QpD60n8T6Jvn8zeZxrxaCr//DRk=", + "dev": true, + "requires": { + "map-cache": "^0.2.2" + } + }, "fresh": { "version": "0.5.2", "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", @@ -1675,475 +2963,1955 @@ "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=" }, - "function-bind": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", - "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", - "dev": true - }, - "functional-red-black-tree": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz", - "integrity": "sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc=", - "dev": true - }, - "gauge": { - "version": "1.2.7", - "resolved": "https://registry.npmjs.org/gauge/-/gauge-1.2.7.tgz", - "integrity": "sha1-6c7FSD09TuDvRLYKfZnkk14TbZM=", - "requires": { - "ansi": "^0.3.0", - "has-unicode": "^2.0.0", - "lodash.pad": "^4.1.0", - "lodash.padend": "^4.1.0", - "lodash.padstart": "^4.1.0" - } - }, - "get-proxy": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/get-proxy/-/get-proxy-2.1.0.tgz", - "integrity": "sha512-zmZIaQTWnNQb4R4fJUEp/FC51eZsc6EkErspy3xtIYStaq8EB/hDIWipxsal+E8rz0qD7f2sL/NA9Xee4RInJw==", - "requires": { - "npm-conf": "^1.1.0" - } - }, - "get-stdin": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-5.0.1.tgz", - "integrity": "sha1-Ei4WFZHiH/TFJTAwVpPyDmOTo5g=" - }, - "get-stream": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-3.0.0.tgz", - "integrity": "sha1-jpQ9E1jcN1VQVOy+LtsFqhdO3hQ=" - }, - "glob": { - "version": "7.1.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.3.tgz", - "integrity": "sha512-vcfuiIxogLV4DlGBHIUOwI0IbrJ8HWPc4MU7HzviGeNho/UJDfi6B5p3sHeWIQ0KGIU0Jpxi5ZHxemQfLkkAwQ==", - "requires": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.0.4", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - } - }, - "global-dirs": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/global-dirs/-/global-dirs-0.1.1.tgz", - "integrity": "sha1-sxnA3UYH81PzvpzKTHL8FIxJ9EU=", - "requires": { - "ini": "^1.3.4" - } - }, - "globals": { - "version": "11.8.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-11.8.0.tgz", - "integrity": "sha512-io6LkyPVuzCHBSQV9fmOwxZkUk6nIaGmxheLDgmuFv89j0fm2aqDbIXKAGfzCMHqz3HLF2Zf8WSG6VqMh2qFmA==", - "dev": true - }, - "globby": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/globby/-/globby-6.1.0.tgz", - "integrity": "sha1-9abXDoOV4hyFj7BInWTfAkJNUGw=", + "fsevents": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.2.4.tgz", + "integrity": "sha512-z8H8/diyk76B7q5wg+Ud0+CqzcAF3mBBI/bA5ne5zrRUUIvNkJY//D3BqyH571KuAC4Nr7Rw7CjWX4r0y9DvNg==", + "dev": true, + "optional": true, "requires": { - "array-union": "^1.0.1", - "glob": "^7.0.3", + "nan": "^2.9.2", + "node-pre-gyp": "^0.10.0" + }, + "dependencies": { + "abbrev": { + "version": "1.1.1", + "bundled": true, + "dev": true, + "optional": true + }, + "ansi-regex": { + "version": "2.1.1", + "bundled": true, + "dev": true + }, + "aproba": { + "version": "1.2.0", + "bundled": true, + "dev": true, + "optional": true + }, + "are-we-there-yet": { + "version": "1.1.4", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "delegates": "^1.0.0", + "readable-stream": "^2.0.6" + } + }, + "balanced-match": { + "version": "1.0.0", + "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" + } + }, + "chownr": { + "version": "1.0.1", + "bundled": true, + "dev": true, + "optional": true + }, + "code-point-at": { + "version": "1.1.0", + "bundled": true, + "dev": true + }, + "concat-map": { + "version": "0.0.1", + "bundled": true, + "dev": true + }, + "console-control-strings": { + "version": "1.1.0", + "bundled": true, + "dev": true + }, + "core-util-is": { + "version": "1.0.2", + "bundled": true, + "dev": true, + "optional": true + }, + "debug": { + "version": "2.6.9", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "ms": "2.0.0" + } + }, + "deep-extend": { + "version": "0.5.1", + "bundled": true, + "dev": true, + "optional": true + }, + "delegates": { + "version": "1.0.0", + "bundled": true, + "dev": true, + "optional": true + }, + "detect-libc": { + "version": "1.0.3", + "bundled": true, + "dev": true, + "optional": true + }, + "fs-minipass": { + "version": "1.2.5", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "minipass": "^2.2.1" + } + }, + "fs.realpath": { + "version": "1.0.0", + "bundled": true, + "dev": true, + "optional": true + }, + "gauge": { + "version": "2.7.4", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "aproba": "^1.0.3", + "console-control-strings": "^1.0.0", + "has-unicode": "^2.0.0", + "object-assign": "^4.1.0", + "signal-exit": "^3.0.0", + "string-width": "^1.0.1", + "strip-ansi": "^3.0.1", + "wide-align": "^1.1.0" + } + }, + "glob": { + "version": "7.1.2", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + } + }, + "has-unicode": { + "version": "2.0.1", + "bundled": true, + "dev": true, + "optional": true + }, + "iconv-lite": { + "version": "0.4.21", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "safer-buffer": "^2.1.0" + } + }, + "ignore-walk": { + "version": "3.0.1", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "minimatch": "^3.0.4" + } + }, + "inflight": { + "version": "1.0.6", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "inherits": { + "version": "2.0.3", + "bundled": true, + "dev": true + }, + "ini": { + "version": "1.3.5", + "bundled": true, + "dev": true, + "optional": true + }, + "is-fullwidth-code-point": { + "version": "1.0.0", + "bundled": true, + "dev": true, + "requires": { + "number-is-nan": "^1.0.0" + } + }, + "isarray": { + "version": "1.0.0", + "bundled": true, + "dev": true, + "optional": true + }, + "minimatch": { + "version": "3.0.4", + "bundled": true, + "dev": true, + "requires": { + "brace-expansion": "^1.1.7" + } + }, + "minimist": { + "version": "0.0.8", + "bundled": true, + "dev": true + }, + "minipass": { + "version": "2.2.4", + "bundled": true, + "dev": true, + "requires": { + "safe-buffer": "^5.1.1", + "yallist": "^3.0.0" + } + }, + "minizlib": { + "version": "1.1.0", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "minipass": "^2.2.1" + } + }, + "mkdirp": { + "version": "0.5.1", + "bundled": true, + "dev": true, + "requires": { + "minimist": "0.0.8" + } + }, + "ms": { + "version": "2.0.0", + "bundled": true, + "dev": true, + "optional": true + }, + "needle": { + "version": "2.2.0", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "debug": "^2.1.2", + "iconv-lite": "^0.4.4", + "sax": "^1.2.4" + } + }, + "node-pre-gyp": { + "version": "0.10.0", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "detect-libc": "^1.0.2", + "mkdirp": "^0.5.1", + "needle": "^2.2.0", + "nopt": "^4.0.1", + "npm-packlist": "^1.1.6", + "npmlog": "^4.0.2", + "rc": "^1.1.7", + "rimraf": "^2.6.1", + "semver": "^5.3.0", + "tar": "^4" + } + }, + "nopt": { + "version": "4.0.1", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "abbrev": "1", + "osenv": "^0.1.4" + } + }, + "npm-bundled": { + "version": "1.0.3", + "bundled": true, + "dev": true, + "optional": true + }, + "npm-packlist": { + "version": "1.1.10", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "ignore-walk": "^3.0.1", + "npm-bundled": "^1.0.1" + } + }, + "npmlog": { + "version": "4.1.2", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "are-we-there-yet": "~1.1.2", + "console-control-strings": "~1.1.0", + "gauge": "~2.7.3", + "set-blocking": "~2.0.0" + } + }, + "number-is-nan": { + "version": "1.0.1", + "bundled": true, + "dev": true + }, + "object-assign": { + "version": "4.1.1", + "bundled": true, + "dev": true, + "optional": true + }, + "once": { + "version": "1.4.0", + "bundled": true, + "dev": true, + "requires": { + "wrappy": "1" + } + }, + "os-homedir": { + "version": "1.0.2", + "bundled": true, + "dev": true, + "optional": true + }, + "os-tmpdir": { + "version": "1.0.2", + "bundled": true, + "dev": true, + "optional": true + }, + "osenv": { + "version": "0.1.5", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "os-homedir": "^1.0.0", + "os-tmpdir": "^1.0.0" + } + }, + "path-is-absolute": { + "version": "1.0.1", + "bundled": true, + "dev": true, + "optional": true + }, + "process-nextick-args": { + "version": "2.0.0", + "bundled": true, + "dev": true, + "optional": true + }, + "rc": { + "version": "1.2.7", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "deep-extend": "^0.5.1", + "ini": "~1.3.0", + "minimist": "^1.2.0", + "strip-json-comments": "~2.0.1" + }, + "dependencies": { + "minimist": { + "version": "1.2.0", + "bundled": true, + "dev": true, + "optional": true + } + } + }, + "readable-stream": { + "version": "2.3.6", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "rimraf": { + "version": "2.6.2", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "glob": "^7.0.5" + } + }, + "safe-buffer": { + "version": "5.1.1", + "bundled": true, + "dev": true + }, + "safer-buffer": { + "version": "2.1.2", + "bundled": true, + "dev": true, + "optional": true + }, + "sax": { + "version": "1.2.4", + "bundled": true, + "dev": true, + "optional": true + }, + "semver": { + "version": "5.5.0", + "bundled": true, + "dev": true, + "optional": true + }, + "set-blocking": { + "version": "2.0.0", + "bundled": true, + "dev": true, + "optional": true + }, + "signal-exit": { + "version": "3.0.2", + "bundled": true, + "dev": true, + "optional": true + }, + "string-width": { + "version": "1.0.2", + "bundled": true, + "dev": true, + "requires": { + "code-point-at": "^1.0.0", + "is-fullwidth-code-point": "^1.0.0", + "strip-ansi": "^3.0.0" + } + }, + "string_decoder": { + "version": "1.1.1", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "safe-buffer": "~5.1.0" + } + }, + "strip-ansi": { + "version": "3.0.1", + "bundled": true, + "dev": true, + "requires": { + "ansi-regex": "^2.0.0" + } + }, + "strip-json-comments": { + "version": "2.0.1", + "bundled": true, + "dev": true, + "optional": true + }, + "tar": { + "version": "4.4.1", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "chownr": "^1.0.1", + "fs-minipass": "^1.2.5", + "minipass": "^2.2.4", + "minizlib": "^1.1.0", + "mkdirp": "^0.5.0", + "safe-buffer": "^5.1.1", + "yallist": "^3.0.2" + } + }, + "util-deprecate": { + "version": "1.0.2", + "bundled": true, + "dev": true, + "optional": true + }, + "wide-align": { + "version": "1.1.2", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "string-width": "^1.0.2" + } + }, + "wrappy": { + "version": "1.0.2", + "bundled": true, + "dev": true + }, + "yallist": { + "version": "3.0.2", + "bundled": true, + "dev": true + } + } + }, + "function-bind": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", + "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", + "dev": true + }, + "functional-red-black-tree": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz", + "integrity": "sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc=", + "dev": true + }, + "gauge": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/gauge/-/gauge-1.2.7.tgz", + "integrity": "sha1-6c7FSD09TuDvRLYKfZnkk14TbZM=", + "requires": { + "ansi": "^0.3.0", + "has-unicode": "^2.0.0", + "lodash.pad": "^4.1.0", + "lodash.padend": "^4.1.0", + "lodash.padstart": "^4.1.0" + } + }, + "get-caller-file": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-1.0.3.tgz", + "integrity": "sha512-3t6rVToeoZfYSGd8YoLFR2DJkiQrIiUrGcjvFX2mDw3bn6k2OtwHN0TNCLbBO+w8qTvimhDkv+LSscbJY1vE6w==", + "dev": true + }, + "get-proxy": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/get-proxy/-/get-proxy-2.1.0.tgz", + "integrity": "sha512-zmZIaQTWnNQb4R4fJUEp/FC51eZsc6EkErspy3xtIYStaq8EB/hDIWipxsal+E8rz0qD7f2sL/NA9Xee4RInJw==", + "requires": { + "npm-conf": "^1.1.0" + } + }, + "get-stdin": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-5.0.1.tgz", + "integrity": "sha1-Ei4WFZHiH/TFJTAwVpPyDmOTo5g=" + }, + "get-stream": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-3.0.0.tgz", + "integrity": "sha1-jpQ9E1jcN1VQVOy+LtsFqhdO3hQ=" + }, + "get-value": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/get-value/-/get-value-2.0.6.tgz", + "integrity": "sha1-3BXKHGcjh8p2vTesCjlbogQqLCg=", + "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" + } + }, + "glob": { + "version": "7.1.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.3.tgz", + "integrity": "sha512-vcfuiIxogLV4DlGBHIUOwI0IbrJ8HWPc4MU7HzviGeNho/UJDfi6B5p3sHeWIQ0KGIU0Jpxi5ZHxemQfLkkAwQ==", + "requires": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + } + }, + "glob-base": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/glob-base/-/glob-base-0.3.0.tgz", + "integrity": "sha1-27Fk9iIbHAscz4Kuoyi0l98Oo8Q=", + "dev": true, + "requires": { + "glob-parent": "^2.0.0", + "is-glob": "^2.0.0" + } + }, + "glob-parent": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-2.0.0.tgz", + "integrity": "sha1-gTg9ctsFT8zPUzbaqQLxgvbtuyg=", + "dev": true, + "requires": { + "is-glob": "^2.0.0" + } + }, + "global-dirs": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/global-dirs/-/global-dirs-0.1.1.tgz", + "integrity": "sha1-sxnA3UYH81PzvpzKTHL8FIxJ9EU=", + "requires": { + "ini": "^1.3.4" + } + }, + "globals": { + "version": "11.8.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-11.8.0.tgz", + "integrity": "sha512-io6LkyPVuzCHBSQV9fmOwxZkUk6nIaGmxheLDgmuFv89j0fm2aqDbIXKAGfzCMHqz3HLF2Zf8WSG6VqMh2qFmA==", + "dev": true + }, + "globby": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/globby/-/globby-6.1.0.tgz", + "integrity": "sha1-9abXDoOV4hyFj7BInWTfAkJNUGw=", + "requires": { + "array-union": "^1.0.1", + "glob": "^7.0.3", "object-assign": "^4.0.1", "pify": "^2.0.0", "pinkie-promise": "^2.0.0" } }, - "got": { - "version": "6.7.1", - "resolved": "http://registry.npmjs.org/got/-/got-6.7.1.tgz", - "integrity": "sha1-JAzQV4WpoY5WHcG0S0HHY+8ejbA=", + "got": { + "version": "6.7.1", + "resolved": "http://registry.npmjs.org/got/-/got-6.7.1.tgz", + "integrity": "sha1-JAzQV4WpoY5WHcG0S0HHY+8ejbA=", + "requires": { + "create-error-class": "^3.0.0", + "duplexer3": "^0.1.4", + "get-stream": "^3.0.0", + "is-redirect": "^1.0.0", + "is-retry-allowed": "^1.0.0", + "is-stream": "^1.0.0", + "lowercase-keys": "^1.0.0", + "safe-buffer": "^5.0.1", + "timed-out": "^4.0.0", + "unzip-response": "^2.0.1", + "url-parse-lax": "^1.0.0" + } + }, + "graceful-fs": { + "version": "4.1.11", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.11.tgz", + "integrity": "sha1-Dovf5NHduIVNZOBOp8AOKgJuVlg=" + }, + "graceful-readlink": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/graceful-readlink/-/graceful-readlink-1.0.1.tgz", + "integrity": "sha1-TK+tdrxi8C+gObL5Tpo906ORpyU=" + }, + "graphlib": { + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/graphlib/-/graphlib-2.1.5.tgz", + "integrity": "sha512-XvtbqCcw+EM5SqQrIetIKKD+uZVNQtDPD1goIg7K73RuRZtVI5rYMdcCVSHm/AS1sCBZ7vt0p5WgXouucHQaOA==", + "requires": { + "lodash": "^4.11.1" + } + }, + "growly": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/growly/-/growly-1.3.0.tgz", + "integrity": "sha1-8QdIy+dq+WS3yWyTxrzCivEgwIE=", + "dev": true + }, + "handlebars": { + "version": "4.0.12", + "resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.0.12.tgz", + "integrity": "sha512-RhmTekP+FZL+XNhwS1Wf+bTTZpdLougwt5pcgA1tuz6Jcx0fpH/7z0qd71RKnZHBCxIRBHfBOnio4gViPemNzA==", + "dev": true, + "requires": { + "async": "^2.5.0", + "optimist": "^0.6.1", + "source-map": "^0.6.1", + "uglify-js": "^3.1.4" + }, + "dependencies": { + "async": { + "version": "2.6.1", + "resolved": "https://registry.npmjs.org/async/-/async-2.6.1.tgz", + "integrity": "sha512-fNEiL2+AZt6AlAw/29Cr0UDe4sRAHCpEHh54WMz+Bb7QfNcFw4h3loofyJpLeQs4Yx7yuqu/2dLgM5hKOs6HlQ==", + "dev": true, + "requires": { + "lodash": "^4.17.10" + } + } + } + }, + "har-schema": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz", + "integrity": "sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI=", + "dev": true + }, + "har-validator": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.1.0.tgz", + "integrity": "sha512-+qnmNjI4OfH2ipQ9VQOw23bBd/ibtfbVdK2fYbY4acTDqKTW/YDp9McimZdDbG8iV9fZizUqQMD5xvriB146TA==", + "dev": true, + "requires": { + "ajv": "^5.3.0", + "har-schema": "^2.0.0" + }, + "dependencies": { + "ajv": { + "version": "5.5.2", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-5.5.2.tgz", + "integrity": "sha1-c7Xuyj+rZT49P5Qis0GtQiBdyWU=", + "dev": true, + "requires": { + "co": "^4.6.0", + "fast-deep-equal": "^1.0.0", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.3.0" + } + }, + "fast-deep-equal": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-1.1.0.tgz", + "integrity": "sha1-wFNHeBfIa1HaqFPIHgWbcz0CNhQ=", + "dev": true + }, + "json-schema-traverse": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.3.1.tgz", + "integrity": "sha1-NJptRMU6Ud6JtAgFxdXlm0F9M0A=", + "dev": true + } + } + }, + "has": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", + "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", + "dev": true, + "requires": { + "function-bind": "^1.1.1" + } + }, + "has-ansi": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz", + "integrity": "sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE=", + "requires": { + "ansi-regex": "^2.0.0" + } + }, + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=" + }, + "has-symbol-support-x": { + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/has-symbol-support-x/-/has-symbol-support-x-1.4.2.tgz", + "integrity": "sha512-3ToOva++HaW+eCpgqZrCfN51IPB+7bJNVT6CUATzueB5Heb8o6Nam0V3HG5dlDvZU1Gn5QLcbahiKw/XVk5JJw==" + }, + "has-symbols": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.0.tgz", + "integrity": "sha1-uhqPGvKg/DllD1yFA2dwQSIGO0Q=", + "dev": true + }, + "has-to-string-tag-x": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/has-to-string-tag-x/-/has-to-string-tag-x-1.4.1.tgz", + "integrity": "sha512-vdbKfmw+3LoOYVr+mtxHaX5a96+0f3DljYd8JOqvOLsf5mw2Otda2qCDT9qRqLAhrjyQ0h7ual5nOiASpsGNFw==", + "requires": { + "has-symbol-support-x": "^1.4.1" + } + }, + "has-unicode": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz", + "integrity": "sha1-4Ob+aijPUROIVeCG0Wkedx3iqLk=" + }, + "has-value": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-value/-/has-value-1.0.0.tgz", + "integrity": "sha1-GLKB2lhbHFxR3vJMkw7SmgvmsXc=", + "dev": true, + "requires": { + "get-value": "^2.0.6", + "has-values": "^1.0.0", + "isobject": "^3.0.0" + }, + "dependencies": { + "isobject": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", + "dev": true + } + } + }, + "has-values": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-values/-/has-values-1.0.0.tgz", + "integrity": "sha1-lbC2P+whRmGab+V/51Yo1aOe/k8=", + "dev": true, + "requires": { + "is-number": "^3.0.0", + "kind-of": "^4.0.0" + }, + "dependencies": { + "is-number": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", + "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", + "dev": true, + "requires": { + "kind-of": "^3.0.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "kind-of": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-4.0.0.tgz", + "integrity": "sha1-IIE989cSkosgc3hpGkUGb65y3Vc=", + "dev": true, + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "home-or-tmp": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/home-or-tmp/-/home-or-tmp-2.0.0.tgz", + "integrity": "sha1-42w/LSyufXRqhX440Y1fMqeILbg=", + "dev": true, + "requires": { + "os-homedir": "^1.0.0", + "os-tmpdir": "^1.0.1" + } + }, + "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==", + "dev": true + }, + "html-encoding-sniffer": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/html-encoding-sniffer/-/html-encoding-sniffer-1.0.2.tgz", + "integrity": "sha512-71lZziiDnsuabfdYiUeWdCVyKuqwWi23L8YeIgV9jSSZHCtb6wB1BKWooH7L3tn4/FuZJMVWyNaIDr4RGmaSYw==", + "dev": true, + "requires": { + "whatwg-encoding": "^1.0.1" + } + }, + "http-errors": { + "version": "1.6.3", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.6.3.tgz", + "integrity": "sha1-i1VoC7S+KDoLW/TqLjhYC+HZMg0=", + "requires": { + "depd": "~1.1.2", + "inherits": "2.0.3", + "setprototypeof": "1.1.0", + "statuses": ">= 1.4.0 < 2" + } + }, + "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", + "sshpk": "^1.7.0" + } + }, + "https-proxy-agent": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-2.2.1.tgz", + "integrity": "sha512-HPCTS1LW51bcyMYbxUIOO4HEOlQ1/1qRaFWcyxvwaqUS9TY88aoEuHUY33kuAh1YhVVaDQhLZsnPd+XNARWZlQ==", + "requires": { + "agent-base": "^4.1.0", + "debug": "^3.1.0" + }, + "dependencies": { + "debug": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", + "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", + "requires": { + "ms": "2.0.0" + } + } + } + }, + "iconv-lite": { + "version": "0.4.23", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.23.tgz", + "integrity": "sha512-neyTUVFtahjf0mB3dZT77u+8O0QB89jFdnBkd5P1JgYPbPaia3gXXOVL2fq8VyU2gMMD7SaN7QukTB/pmXYvDA==", + "requires": { + "safer-buffer": ">= 2.1.2 < 3" + } + }, + "ieee754": { + "version": "1.1.12", + "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.1.12.tgz", + "integrity": "sha512-GguP+DRY+pJ3soyIiGPTvdiVXjZ+DbXOxGpXn3eMvNW4x4irjqXm4wHKscC+TfxSJ0yw/S1F24tqdMNsMZTiLA==" + }, + "ignore": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz", + "integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==", + "dev": true + }, + "import-lazy": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/import-lazy/-/import-lazy-2.1.0.tgz", + "integrity": "sha1-BWmOPUXIjo1+nZLLBYTnfwlvPkM=" + }, + "import-local": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/import-local/-/import-local-1.0.0.tgz", + "integrity": "sha512-vAaZHieK9qjGo58agRBg+bhHX3hoTZU/Oa3GESWLz7t1U62fk63aHuDJJEteXoDeTCcPmUT+z38gkHPZkkmpmQ==", + "dev": true, + "requires": { + "pkg-dir": "^2.0.0", + "resolve-cwd": "^2.0.0" + }, + "dependencies": { + "find-up": { + "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" + } + }, + "pkg-dir": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-2.0.0.tgz", + "integrity": "sha1-9tXREJ4Z1j7fQo4L1X4Sd3YVM0s=", + "dev": true, + "requires": { + "find-up": "^2.1.0" + } + } + } + }, + "imurmurhash": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", + "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=" + }, + "inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", + "requires": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "inherits": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=" + }, + "ini": { + "version": "1.3.5", + "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.5.tgz", + "integrity": "sha512-RZY5huIKCMRWDUqZlEi72f/lmXKMvuszcMBduliQ3nnWbx9X/ZBQO7DijMEYS9EhHBb2qacRUMtC7svLwe0lcw==" + }, + "inquirer": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-1.2.3.tgz", + "integrity": "sha1-TexvMvN+97sLLtPx0aXD9UUHSRg=", + "requires": { + "ansi-escapes": "^1.1.0", + "chalk": "^1.0.0", + "cli-cursor": "^1.0.1", + "cli-width": "^2.0.0", + "external-editor": "^1.1.0", + "figures": "^1.3.5", + "lodash": "^4.3.0", + "mute-stream": "0.0.6", + "pinkie-promise": "^2.0.0", + "run-async": "^2.2.0", + "rx": "^4.1.0", + "string-width": "^1.0.1", + "strip-ansi": "^3.0.0", + "through": "^2.3.6" + }, + "dependencies": { + "ansi-styles": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", + "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=" + }, + "chalk": { + "version": "1.1.3", + "resolved": "http://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", + "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", + "requires": { + "ansi-styles": "^2.2.1", + "escape-string-regexp": "^1.0.2", + "has-ansi": "^2.0.0", + "strip-ansi": "^3.0.0", + "supports-color": "^2.0.0" + } + }, + "supports-color": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", + "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=" + } + } + }, + "invariant": { + "version": "2.2.4", + "resolved": "https://registry.npmjs.org/invariant/-/invariant-2.2.4.tgz", + "integrity": "sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA==", + "dev": true, "requires": { - "create-error-class": "^3.0.0", - "duplexer3": "^0.1.4", - "get-stream": "^3.0.0", - "is-redirect": "^1.0.0", - "is-retry-allowed": "^1.0.0", - "is-stream": "^1.0.0", - "lowercase-keys": "^1.0.0", - "safe-buffer": "^5.0.1", - "timed-out": "^4.0.0", - "unzip-response": "^2.0.1", - "url-parse-lax": "^1.0.0" + "loose-envify": "^1.0.0" + } + }, + "invert-kv": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/invert-kv/-/invert-kv-1.0.0.tgz", + "integrity": "sha1-EEqOSqym09jNFXqO+L+rLXo//bY=", + "dev": true + }, + "ipaddr.js": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.8.0.tgz", + "integrity": "sha1-6qM9bd16zo9/b+DJygRA5wZzix4=" + }, + "is-accessor-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", + "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", + "dev": true, + "requires": { + "kind-of": "^3.0.2" + } + }, + "is-arrayish": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", + "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=", + "dev": true + }, + "is-buffer": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", + "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==", + "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" + } + }, + "is-callable": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.1.4.tgz", + "integrity": "sha512-r5p9sxJjYnArLjObpjA4xu5EKI3CuKHkJXMhT7kwbpUyIFD1n5PMAsoPvWnvtZiNz7LjkYDRZhd7FlI0eMijEA==", + "dev": true + }, + "is-ci": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/is-ci/-/is-ci-1.2.0.tgz", + "integrity": "sha512-plgvKjQtalH2P3Gytb7L61Lmz95g2DlpzFiQyRSFew8WoJKxtKRzrZMeyRN2supblm3Psc8OQGy7Xjb6XG11jw==", + "requires": { + "ci-info": "^1.3.0" + } + }, + "is-data-descriptor": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", + "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", + "dev": true, + "requires": { + "kind-of": "^3.0.2" + } + }, + "is-date-object": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.1.tgz", + "integrity": "sha1-mqIOtq7rv/d/vTPnTKAbM1gdOhY=", + "dev": true + }, + "is-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", + "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", + "dev": true, + "requires": { + "is-accessor-descriptor": "^0.1.6", + "is-data-descriptor": "^0.1.4", + "kind-of": "^5.0.0" + }, + "dependencies": { + "kind-of": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", + "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", + "dev": true + } + } + }, + "is-docker": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-1.1.0.tgz", + "integrity": "sha1-8EN01O7lMQ6ajhE78UlUEeRhdqE=" + }, + "is-dotfile": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/is-dotfile/-/is-dotfile-1.0.3.tgz", + "integrity": "sha1-pqLzL/0t+wT1yiXs0Pa4PPeYoeE=", + "dev": true + }, + "is-equal-shallow": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/is-equal-shallow/-/is-equal-shallow-0.1.3.tgz", + "integrity": "sha1-IjgJj8Ih3gvPpdnqxMRdY4qhxTQ=", + "dev": true, + "requires": { + "is-primitive": "^2.0.0" + } + }, + "is-extendable": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", + "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=", + "dev": true + }, + "is-extglob": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-1.0.0.tgz", + "integrity": "sha1-rEaBd8SUNAWgkvyPKXYMb/xiBsA=", + "dev": true + }, + "is-finite": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-finite/-/is-finite-1.0.2.tgz", + "integrity": "sha1-zGZ3aVYCvlUO8R6LSqYwU0K20Ko=", + "dev": true, + "requires": { + "number-is-nan": "^1.0.0" + } + }, + "is-fullwidth-code-point": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", + "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", + "requires": { + "number-is-nan": "^1.0.0" + } + }, + "is-generator-fn": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-generator-fn/-/is-generator-fn-1.0.0.tgz", + "integrity": "sha1-lp1J4bszKfa7fwkIm+JleLLd1Go=", + "dev": true + }, + "is-glob": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-2.0.1.tgz", + "integrity": "sha1-0Jb5JqPe1WAPP9/ZEZjLCIjC2GM=", + "dev": true, + "requires": { + "is-extglob": "^1.0.0" + } + }, + "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=", + "requires": { + "global-dirs": "^0.1.0", + "is-path-inside": "^1.0.0" + } + }, + "is-natural-number": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/is-natural-number/-/is-natural-number-4.0.1.tgz", + "integrity": "sha1-q5124dtM7VHjXeDHLr7PCfc0zeg=" + }, + "is-npm": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-npm/-/is-npm-1.0.0.tgz", + "integrity": "sha1-8vtjpl5JBbQGyGBydloaTceTufQ=" + }, + "is-number": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-2.1.0.tgz", + "integrity": "sha1-Afy7s5NGOlSPL0ZszhbezknbkI8=", + "dev": true, + "requires": { + "kind-of": "^3.0.2" + } + }, + "is-obj": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-1.0.1.tgz", + "integrity": "sha1-PkcprB9f3gJc19g6iW2rn09n2w8=" + }, + "is-object": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-object/-/is-object-1.0.1.tgz", + "integrity": "sha1-iVJojF7C/9awPsyF52ngKQMINHA=" + }, + "is-path-cwd": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-path-cwd/-/is-path-cwd-1.0.0.tgz", + "integrity": "sha1-0iXsIxMuie3Tj9p2dHLmLmXxEG0=", + "dev": true + }, + "is-path-in-cwd": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-path-in-cwd/-/is-path-in-cwd-1.0.1.tgz", + "integrity": "sha512-FjV1RTW48E7CWM7eE/J2NJvAEEVektecDBVBE5Hh3nM1Jd0kvhHtX68Pr3xsDf857xt3Y4AkwVULK1Vku62aaQ==", + "dev": true, + "requires": { + "is-path-inside": "^1.0.0" + } + }, + "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=", + "requires": { + "path-is-inside": "^1.0.1" + } + }, + "is-plain-object": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", + "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", + "dev": true, + "requires": { + "isobject": "^3.0.1" + }, + "dependencies": { + "isobject": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", + "dev": true + } + } + }, + "is-posix-bracket": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/is-posix-bracket/-/is-posix-bracket-0.1.1.tgz", + "integrity": "sha1-MzTceXdDaOkvAW5vvAqI9c1ua8Q=", + "dev": true + }, + "is-primitive": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-primitive/-/is-primitive-2.0.0.tgz", + "integrity": "sha1-IHurkWOEmcB7Kt8kCkGochADRXU=", + "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=" + }, + "is-redirect": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-redirect/-/is-redirect-1.0.0.tgz", + "integrity": "sha1-HQPd7VO9jbDzDCbk+V02/HyH3CQ=" + }, + "is-regex": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.0.4.tgz", + "integrity": "sha1-VRdIm1RwkbCTDglWVM7SXul+lJE=", + "dev": true, + "requires": { + "has": "^1.0.1" } }, - "graceful-fs": { - "version": "4.1.11", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.11.tgz", - "integrity": "sha1-Dovf5NHduIVNZOBOp8AOKgJuVlg=" + "is-resolvable": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-resolvable/-/is-resolvable-1.1.0.tgz", + "integrity": "sha512-qgDYXFSR5WvEfuS5dMj6oTMEbrrSaM0CrFk2Yiq/gXnBvD9pMa2jGXxyhGLfvhZpuMZe18CJpFxAt3CRs42NMg==", + "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=" }, - "graceful-readlink": { + "is-stream": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", + "integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ=" + }, + "is-symbol": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/graceful-readlink/-/graceful-readlink-1.0.1.tgz", - "integrity": "sha1-TK+tdrxi8C+gObL5Tpo906ORpyU=" + "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.1.tgz", + "integrity": "sha1-PMWfAAJRlLarLjjbrmaJJWtmBXI=", + "dev": true }, - "graphlib": { - "version": "2.1.5", - "resolved": "https://registry.npmjs.org/graphlib/-/graphlib-2.1.5.tgz", - "integrity": "sha512-XvtbqCcw+EM5SqQrIetIKKD+uZVNQtDPD1goIg7K73RuRZtVI5rYMdcCVSHm/AS1sCBZ7vt0p5WgXouucHQaOA==", - "requires": { - "lodash": "^4.11.1" - } + "is-typedarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", + "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=", + "dev": true }, - "has": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", - "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", + "is-utf8": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/is-utf8/-/is-utf8-0.2.1.tgz", + "integrity": "sha1-Sw2hRCEE0bM2NA6AeX6GXPOffXI=", + "dev": true + }, + "is-windows": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz", + "integrity": "sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==", + "dev": true + }, + "is-wsl": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-1.1.0.tgz", + "integrity": "sha1-HxbkqiKwTRM2tmGIpmrzxgDDpm0=" + }, + "isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=" + }, + "isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=" + }, + "isobject": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz", + "integrity": "sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=", "dev": true, "requires": { - "function-bind": "^1.1.1" + "isarray": "1.0.0" } }, - "has-ansi": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz", - "integrity": "sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE=", + "isomorphic-fetch": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/isomorphic-fetch/-/isomorphic-fetch-2.2.1.tgz", + "integrity": "sha1-YRrhrPFPXoH3KVB0coGf6XM1WKk=", "requires": { - "ansi-regex": "^2.0.0" + "node-fetch": "^1.0.1", + "whatwg-fetch": ">=0.10.0" } }, - "has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=" + "isstream": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", + "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=", + "dev": true }, - "has-symbol-support-x": { - "version": "1.4.2", - "resolved": "https://registry.npmjs.org/has-symbol-support-x/-/has-symbol-support-x-1.4.2.tgz", - "integrity": "sha512-3ToOva++HaW+eCpgqZrCfN51IPB+7bJNVT6CUATzueB5Heb8o6Nam0V3HG5dlDvZU1Gn5QLcbahiKw/XVk5JJw==" + "istanbul-api": { + "version": "1.3.7", + "resolved": "https://registry.npmjs.org/istanbul-api/-/istanbul-api-1.3.7.tgz", + "integrity": "sha512-4/ApBnMVeEPG3EkSzcw25wDe4N66wxwn+KKn6b47vyek8Xb3NBAcg4xfuQbS7BqcZuTX4wxfD5lVagdggR3gyA==", + "dev": true, + "requires": { + "async": "^2.1.4", + "fileset": "^2.0.2", + "istanbul-lib-coverage": "^1.2.1", + "istanbul-lib-hook": "^1.2.2", + "istanbul-lib-instrument": "^1.10.2", + "istanbul-lib-report": "^1.1.5", + "istanbul-lib-source-maps": "^1.2.6", + "istanbul-reports": "^1.5.1", + "js-yaml": "^3.7.0", + "mkdirp": "^0.5.1", + "once": "^1.4.0" + }, + "dependencies": { + "async": { + "version": "2.6.1", + "resolved": "https://registry.npmjs.org/async/-/async-2.6.1.tgz", + "integrity": "sha512-fNEiL2+AZt6AlAw/29Cr0UDe4sRAHCpEHh54WMz+Bb7QfNcFw4h3loofyJpLeQs4Yx7yuqu/2dLgM5hKOs6HlQ==", + "dev": true, + "requires": { + "lodash": "^4.17.10" + } + } + } }, - "has-symbols": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.0.tgz", - "integrity": "sha1-uhqPGvKg/DllD1yFA2dwQSIGO0Q=", + "istanbul-lib-coverage": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-1.2.1.tgz", + "integrity": "sha512-PzITeunAgyGbtY1ibVIUiV679EFChHjoMNRibEIobvmrCRaIgwLxNucOSimtNWUhEib/oO7QY2imD75JVgCJWQ==", "dev": true }, - "has-to-string-tag-x": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/has-to-string-tag-x/-/has-to-string-tag-x-1.4.1.tgz", - "integrity": "sha512-vdbKfmw+3LoOYVr+mtxHaX5a96+0f3DljYd8JOqvOLsf5mw2Otda2qCDT9qRqLAhrjyQ0h7ual5nOiASpsGNFw==", + "istanbul-lib-hook": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/istanbul-lib-hook/-/istanbul-lib-hook-1.2.2.tgz", + "integrity": "sha512-/Jmq7Y1VeHnZEQ3TL10VHyb564mn6VrQXHchON9Jf/AEcmQ3ZIiyD1BVzNOKTZf/G3gE+kiGK6SmpF9y3qGPLw==", + "dev": true, "requires": { - "has-symbol-support-x": "^1.4.1" + "append-transform": "^0.4.0" } }, - "has-unicode": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz", - "integrity": "sha1-4Ob+aijPUROIVeCG0Wkedx3iqLk=" - }, - "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==", - "dev": true + "istanbul-lib-instrument": { + "version": "1.10.2", + "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-1.10.2.tgz", + "integrity": "sha512-aWHxfxDqvh/ZlxR8BBaEPVSWDPUkGD63VjGQn3jcw8jCp7sHEMKcrj4xfJn/ABzdMEHiQNyvDQhqm5o8+SQg7A==", + "dev": true, + "requires": { + "babel-generator": "^6.18.0", + "babel-template": "^6.16.0", + "babel-traverse": "^6.18.0", + "babel-types": "^6.18.0", + "babylon": "^6.18.0", + "istanbul-lib-coverage": "^1.2.1", + "semver": "^5.3.0" + } }, - "http-errors": { - "version": "1.6.3", - "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.6.3.tgz", - "integrity": "sha1-i1VoC7S+KDoLW/TqLjhYC+HZMg0=", + "istanbul-lib-report": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-1.1.5.tgz", + "integrity": "sha512-UsYfRMoi6QO/doUshYNqcKJqVmFe9w51GZz8BS3WB0lYxAllQYklka2wP9+dGZeHYaWIdcXUx8JGdbqaoXRXzw==", + "dev": true, "requires": { - "depd": "~1.1.2", - "inherits": "2.0.3", - "setprototypeof": "1.1.0", - "statuses": ">= 1.4.0 < 2" + "istanbul-lib-coverage": "^1.2.1", + "mkdirp": "^0.5.1", + "path-parse": "^1.0.5", + "supports-color": "^3.1.2" + }, + "dependencies": { + "has-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz", + "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=", + "dev": true + }, + "supports-color": { + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz", + "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=", + "dev": true, + "requires": { + "has-flag": "^1.0.0" + } + } } }, - "https-proxy-agent": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-2.2.1.tgz", - "integrity": "sha512-HPCTS1LW51bcyMYbxUIOO4HEOlQ1/1qRaFWcyxvwaqUS9TY88aoEuHUY33kuAh1YhVVaDQhLZsnPd+XNARWZlQ==", + "istanbul-lib-source-maps": { + "version": "1.2.6", + "resolved": "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-1.2.6.tgz", + "integrity": "sha512-TtbsY5GIHgbMsMiRw35YBHGpZ1DVFEO19vxxeiDMYaeOFOCzfnYVxvl6pOUIZR4dtPhAGpSMup8OyF8ubsaqEg==", + "dev": true, "requires": { - "agent-base": "^4.1.0", - "debug": "^3.1.0" + "debug": "^3.1.0", + "istanbul-lib-coverage": "^1.2.1", + "mkdirp": "^0.5.1", + "rimraf": "^2.6.1", + "source-map": "^0.5.3" }, "dependencies": { "debug": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", - "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", + "version": "3.2.6", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz", + "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==", + "dev": true, "requires": { - "ms": "2.0.0" + "ms": "^2.1.1" } + }, + "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==", + "dev": true + }, + "source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", + "dev": true } } }, - "iconv-lite": { - "version": "0.4.23", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.23.tgz", - "integrity": "sha512-neyTUVFtahjf0mB3dZT77u+8O0QB89jFdnBkd5P1JgYPbPaia3gXXOVL2fq8VyU2gMMD7SaN7QukTB/pmXYvDA==", + "istanbul-reports": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-1.5.1.tgz", + "integrity": "sha512-+cfoZ0UXzWjhAdzosCPP3AN8vvef8XDkWtTfgaN+7L3YTpNYITnCaEkceo5SEYy644VkHka/P1FvkWvrG/rrJw==", + "dev": true, "requires": { - "safer-buffer": ">= 2.1.2 < 3" + "handlebars": "^4.0.3" } }, - "ieee754": { - "version": "1.1.12", - "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.1.12.tgz", - "integrity": "sha512-GguP+DRY+pJ3soyIiGPTvdiVXjZ+DbXOxGpXn3eMvNW4x4irjqXm4wHKscC+TfxSJ0yw/S1F24tqdMNsMZTiLA==" - }, - "ignore": { - "version": "4.0.6", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz", - "integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==", - "dev": true - }, - "import-lazy": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/import-lazy/-/import-lazy-2.1.0.tgz", - "integrity": "sha1-BWmOPUXIjo1+nZLLBYTnfwlvPkM=" - }, - "imurmurhash": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", - "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=" - }, - "inflight": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", - "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", + "isurl": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isurl/-/isurl-1.0.0.tgz", + "integrity": "sha512-1P/yWsxPlDtn7QeRD+ULKQPaIaN6yF368GZ2vDfv0AL0NwpStafjWCDDdn0k8wgFMWpVAqG7oJhxHnlud42i9w==", "requires": { - "once": "^1.3.0", - "wrappy": "1" + "has-to-string-tag-x": "^1.2.0", + "is-object": "^1.0.1" } }, - "inherits": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", - "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=" - }, - "ini": { - "version": "1.3.5", - "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.5.tgz", - "integrity": "sha512-RZY5huIKCMRWDUqZlEi72f/lmXKMvuszcMBduliQ3nnWbx9X/ZBQO7DijMEYS9EhHBb2qacRUMtC7svLwe0lcw==" - }, - "inquirer": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-1.2.3.tgz", - "integrity": "sha1-TexvMvN+97sLLtPx0aXD9UUHSRg=", + "jest": { + "version": "23.6.0", + "resolved": "https://registry.npmjs.org/jest/-/jest-23.6.0.tgz", + "integrity": "sha512-lWzcd+HSiqeuxyhG+EnZds6iO3Y3ZEnMrfZq/OTGvF/C+Z4fPMCdhWTGSAiO2Oym9rbEXfwddHhh6jqrTF3+Lw==", + "dev": true, "requires": { - "ansi-escapes": "^1.1.0", - "chalk": "^1.0.0", - "cli-cursor": "^1.0.1", - "cli-width": "^2.0.0", - "external-editor": "^1.1.0", - "figures": "^1.3.5", - "lodash": "^4.3.0", - "mute-stream": "0.0.6", - "pinkie-promise": "^2.0.0", - "run-async": "^2.2.0", - "rx": "^4.1.0", - "string-width": "^1.0.1", - "strip-ansi": "^3.0.0", - "through": "^2.3.6" + "import-local": "^1.0.0", + "jest-cli": "^23.6.0" }, "dependencies": { - "ansi-styles": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", - "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=" + "ansi-escapes": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-3.1.0.tgz", + "integrity": "sha512-UgAb8H9D41AQnu/PbWlCofQVcnV4Gs2bBJi9eZPxfU/hgglFh3SMDMENRIqdr7H6XFnXdoknctFByVsCOotTVw==", + "dev": true }, - "chalk": { - "version": "1.1.3", - "resolved": "http://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", - "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", - "requires": { - "ansi-styles": "^2.2.1", - "escape-string-regexp": "^1.0.2", - "has-ansi": "^2.0.0", - "strip-ansi": "^3.0.0", - "supports-color": "^2.0.0" + "ansi-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", + "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", + "dev": true + }, + "jest-cli": { + "version": "23.6.0", + "resolved": "https://registry.npmjs.org/jest-cli/-/jest-cli-23.6.0.tgz", + "integrity": "sha512-hgeD1zRUp1E1zsiyOXjEn4LzRLWdJBV//ukAHGlx6s5mfCNJTbhbHjgxnDUXA8fsKWN/HqFFF6X5XcCwC/IvYQ==", + "dev": true, + "requires": { + "ansi-escapes": "^3.0.0", + "chalk": "^2.0.1", + "exit": "^0.1.2", + "glob": "^7.1.2", + "graceful-fs": "^4.1.11", + "import-local": "^1.0.0", + "is-ci": "^1.0.10", + "istanbul-api": "^1.3.1", + "istanbul-lib-coverage": "^1.2.0", + "istanbul-lib-instrument": "^1.10.1", + "istanbul-lib-source-maps": "^1.2.4", + "jest-changed-files": "^23.4.2", + "jest-config": "^23.6.0", + "jest-environment-jsdom": "^23.4.0", + "jest-get-type": "^22.1.0", + "jest-haste-map": "^23.6.0", + "jest-message-util": "^23.4.0", + "jest-regex-util": "^23.3.0", + "jest-resolve-dependencies": "^23.6.0", + "jest-runner": "^23.6.0", + "jest-runtime": "^23.6.0", + "jest-snapshot": "^23.6.0", + "jest-util": "^23.4.0", + "jest-validate": "^23.6.0", + "jest-watcher": "^23.4.0", + "jest-worker": "^23.2.0", + "micromatch": "^2.3.11", + "node-notifier": "^5.2.1", + "prompts": "^0.1.9", + "realpath-native": "^1.0.0", + "rimraf": "^2.5.4", + "slash": "^1.0.0", + "string-length": "^2.0.0", + "strip-ansi": "^4.0.0", + "which": "^1.2.12", + "yargs": "^11.0.0" } }, - "supports-color": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", - "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=" + "strip-ansi": { + "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" + } } } }, - "ipaddr.js": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.8.0.tgz", - "integrity": "sha1-6qM9bd16zo9/b+DJygRA5wZzix4=" + "jest-changed-files": { + "version": "23.4.2", + "resolved": "https://registry.npmjs.org/jest-changed-files/-/jest-changed-files-23.4.2.tgz", + "integrity": "sha512-EyNhTAUWEfwnK0Is/09LxoqNDOn7mU7S3EHskG52djOFS/z+IT0jT3h3Ql61+dklcG7bJJitIWEMB4Sp1piHmA==", + "dev": true, + "requires": { + "throat": "^4.0.0" + } }, - "is-arrayish": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", - "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=", - "dev": true + "jest-config": { + "version": "23.6.0", + "resolved": "https://registry.npmjs.org/jest-config/-/jest-config-23.6.0.tgz", + "integrity": "sha512-i8V7z9BeDXab1+VNo78WM0AtWpBRXJLnkT+lyT+Slx/cbP5sZJ0+NDuLcmBE5hXAoK0aUp7vI+MOxR+R4d8SRQ==", + "dev": true, + "requires": { + "babel-core": "^6.0.0", + "babel-jest": "^23.6.0", + "chalk": "^2.0.1", + "glob": "^7.1.1", + "jest-environment-jsdom": "^23.4.0", + "jest-environment-node": "^23.4.0", + "jest-get-type": "^22.1.0", + "jest-jasmine2": "^23.6.0", + "jest-regex-util": "^23.3.0", + "jest-resolve": "^23.6.0", + "jest-util": "^23.4.0", + "jest-validate": "^23.6.0", + "micromatch": "^2.3.11", + "pretty-format": "^23.6.0" + } + }, + "jest-diff": { + "version": "23.6.0", + "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-23.6.0.tgz", + "integrity": "sha512-Gz9l5Ov+X3aL5L37IT+8hoCUsof1CVYBb2QEkOupK64XyRR3h+uRpYIm97K7sY8diFxowR8pIGEdyfMKTixo3g==", + "dev": true, + "requires": { + "chalk": "^2.0.1", + "diff": "^3.2.0", + "jest-get-type": "^22.1.0", + "pretty-format": "^23.6.0" + } }, - "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=", + "jest-docblock": { + "version": "23.2.0", + "resolved": "https://registry.npmjs.org/jest-docblock/-/jest-docblock-23.2.0.tgz", + "integrity": "sha1-8IXh8YVI2Z/dabICB+b9VdkTg6c=", "dev": true, "requires": { - "builtin-modules": "^1.0.0" + "detect-newline": "^2.1.0" } }, - "is-callable": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.1.4.tgz", - "integrity": "sha512-r5p9sxJjYnArLjObpjA4xu5EKI3CuKHkJXMhT7kwbpUyIFD1n5PMAsoPvWnvtZiNz7LjkYDRZhd7FlI0eMijEA==", - "dev": true + "jest-each": { + "version": "23.6.0", + "resolved": "https://registry.npmjs.org/jest-each/-/jest-each-23.6.0.tgz", + "integrity": "sha512-x7V6M/WGJo6/kLoissORuvLIeAoyo2YqLOoCDkohgJ4XOXSqOtyvr8FbInlAWS77ojBsZrafbozWoKVRdtxFCg==", + "dev": true, + "requires": { + "chalk": "^2.0.1", + "pretty-format": "^23.6.0" + } }, - "is-ci": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/is-ci/-/is-ci-1.2.0.tgz", - "integrity": "sha512-plgvKjQtalH2P3Gytb7L61Lmz95g2DlpzFiQyRSFew8WoJKxtKRzrZMeyRN2supblm3Psc8OQGy7Xjb6XG11jw==", + "jest-environment-jsdom": { + "version": "23.4.0", + "resolved": "https://registry.npmjs.org/jest-environment-jsdom/-/jest-environment-jsdom-23.4.0.tgz", + "integrity": "sha1-BWp5UrP+pROsYqFAosNox52eYCM=", + "dev": true, "requires": { - "ci-info": "^1.3.0" + "jest-mock": "^23.2.0", + "jest-util": "^23.4.0", + "jsdom": "^11.5.1" } }, - "is-date-object": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.1.tgz", - "integrity": "sha1-mqIOtq7rv/d/vTPnTKAbM1gdOhY=", - "dev": true + "jest-environment-node": { + "version": "23.4.0", + "resolved": "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-23.4.0.tgz", + "integrity": "sha1-V+gO0IQd6jAxZ8zozXlSHeuv3hA=", + "dev": true, + "requires": { + "jest-mock": "^23.2.0", + "jest-util": "^23.4.0" + } }, - "is-docker": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-1.1.0.tgz", - "integrity": "sha1-8EN01O7lMQ6ajhE78UlUEeRhdqE=" + "jest-get-type": { + "version": "22.4.3", + "resolved": "http://registry.npmjs.org/jest-get-type/-/jest-get-type-22.4.3.tgz", + "integrity": "sha512-/jsz0Y+V29w1chdXVygEKSz2nBoHoYqNShPe+QgxSNjAuP1i8+k4LbQNrfoliKej0P45sivkSCh7yiD6ubHS3w==", + "dev": true }, - "is-fullwidth-code-point": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", - "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", + "jest-haste-map": { + "version": "23.6.0", + "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-23.6.0.tgz", + "integrity": "sha512-uyNhMyl6dr6HaXGHp8VF7cK6KpC6G9z9LiMNsst+rJIZ8l7wY0tk8qwjPmEghczojZ2/ZhtEdIabZ0OQRJSGGg==", + "dev": true, "requires": { - "number-is-nan": "^1.0.0" + "fb-watchman": "^2.0.0", + "graceful-fs": "^4.1.11", + "invariant": "^2.2.4", + "jest-docblock": "^23.2.0", + "jest-serializer": "^23.0.1", + "jest-worker": "^23.2.0", + "micromatch": "^2.3.11", + "sane": "^2.0.0" + } + }, + "jest-jasmine2": { + "version": "23.6.0", + "resolved": "https://registry.npmjs.org/jest-jasmine2/-/jest-jasmine2-23.6.0.tgz", + "integrity": "sha512-pe2Ytgs1nyCs8IvsEJRiRTPC0eVYd8L/dXJGU08GFuBwZ4sYH/lmFDdOL3ZmvJR8QKqV9MFuwlsAi/EWkFUbsQ==", + "dev": true, + "requires": { + "babel-traverse": "^6.0.0", + "chalk": "^2.0.1", + "co": "^4.6.0", + "expect": "^23.6.0", + "is-generator-fn": "^1.0.0", + "jest-diff": "^23.6.0", + "jest-each": "^23.6.0", + "jest-matcher-utils": "^23.6.0", + "jest-message-util": "^23.4.0", + "jest-snapshot": "^23.6.0", + "jest-util": "^23.4.0", + "pretty-format": "^23.6.0" + } + }, + "jest-leak-detector": { + "version": "23.6.0", + "resolved": "https://registry.npmjs.org/jest-leak-detector/-/jest-leak-detector-23.6.0.tgz", + "integrity": "sha512-f/8zA04rsl1Nzj10HIyEsXvYlMpMPcy0QkQilVZDFOaPbv2ur71X5u2+C4ZQJGyV/xvVXtCCZ3wQ99IgQxftCg==", + "dev": true, + "requires": { + "pretty-format": "^23.6.0" } }, - "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=", + "jest-matcher-utils": { + "version": "23.6.0", + "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-23.6.0.tgz", + "integrity": "sha512-rosyCHQfBcol4NsckTn01cdelzWLU9Cq7aaigDf8VwwpIRvWE/9zLgX2bON+FkEW69/0UuYslUe22SOdEf2nog==", + "dev": true, "requires": { - "global-dirs": "^0.1.0", - "is-path-inside": "^1.0.0" + "chalk": "^2.0.1", + "jest-get-type": "^22.1.0", + "pretty-format": "^23.6.0" } }, - "is-natural-number": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/is-natural-number/-/is-natural-number-4.0.1.tgz", - "integrity": "sha1-q5124dtM7VHjXeDHLr7PCfc0zeg=" - }, - "is-npm": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-npm/-/is-npm-1.0.0.tgz", - "integrity": "sha1-8vtjpl5JBbQGyGBydloaTceTufQ=" - }, - "is-obj": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-1.0.1.tgz", - "integrity": "sha1-PkcprB9f3gJc19g6iW2rn09n2w8=" + "jest-message-util": { + "version": "23.4.0", + "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-23.4.0.tgz", + "integrity": "sha1-F2EMUJQjSVCNAaPR4L2iwHkIap8=", + "dev": true, + "requires": { + "@babel/code-frame": "^7.0.0-beta.35", + "chalk": "^2.0.1", + "micromatch": "^2.3.11", + "slash": "^1.0.0", + "stack-utils": "^1.0.1" + } }, - "is-object": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-object/-/is-object-1.0.1.tgz", - "integrity": "sha1-iVJojF7C/9awPsyF52ngKQMINHA=" + "jest-mock": { + "version": "23.2.0", + "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-23.2.0.tgz", + "integrity": "sha1-rRxg8p6HGdR8JuETgJi20YsmETQ=", + "dev": true }, - "is-path-cwd": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-path-cwd/-/is-path-cwd-1.0.0.tgz", - "integrity": "sha1-0iXsIxMuie3Tj9p2dHLmLmXxEG0=", + "jest-regex-util": { + "version": "23.3.0", + "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-23.3.0.tgz", + "integrity": "sha1-X4ZylUfCeFxAAs6qj4Sf6MpHG8U=", "dev": true }, - "is-path-in-cwd": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-path-in-cwd/-/is-path-in-cwd-1.0.1.tgz", - "integrity": "sha512-FjV1RTW48E7CWM7eE/J2NJvAEEVektecDBVBE5Hh3nM1Jd0kvhHtX68Pr3xsDf857xt3Y4AkwVULK1Vku62aaQ==", + "jest-resolve": { + "version": "23.6.0", + "resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-23.6.0.tgz", + "integrity": "sha512-XyoRxNtO7YGpQDmtQCmZjum1MljDqUCob7XlZ6jy9gsMugHdN2hY4+Acz9Qvjz2mSsOnPSH7skBmDYCHXVZqkA==", "dev": true, "requires": { - "is-path-inside": "^1.0.0" + "browser-resolve": "^1.11.3", + "chalk": "^2.0.1", + "realpath-native": "^1.0.0" } }, - "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=", + "jest-resolve-dependencies": { + "version": "23.6.0", + "resolved": "https://registry.npmjs.org/jest-resolve-dependencies/-/jest-resolve-dependencies-23.6.0.tgz", + "integrity": "sha512-EkQWkFWjGKwRtRyIwRwI6rtPAEyPWlUC2MpzHissYnzJeHcyCn1Hc8j7Nn1xUVrS5C6W5+ZL37XTem4D4pLZdA==", + "dev": true, "requires": { - "path-is-inside": "^1.0.1" + "jest-regex-util": "^23.3.0", + "jest-snapshot": "^23.6.0" } }, - "is-promise": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-promise/-/is-promise-2.1.0.tgz", - "integrity": "sha1-eaKp7OfwlugPNtKy87wWwf9L8/o=" - }, - "is-redirect": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-redirect/-/is-redirect-1.0.0.tgz", - "integrity": "sha1-HQPd7VO9jbDzDCbk+V02/HyH3CQ=" - }, - "is-regex": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.0.4.tgz", - "integrity": "sha1-VRdIm1RwkbCTDglWVM7SXul+lJE=", + "jest-runner": { + "version": "23.6.0", + "resolved": "https://registry.npmjs.org/jest-runner/-/jest-runner-23.6.0.tgz", + "integrity": "sha512-kw0+uj710dzSJKU6ygri851CObtCD9cN8aNkg8jWJf4ewFyEa6kwmiH/r/M1Ec5IL/6VFa0wnAk6w+gzUtjJzA==", "dev": true, "requires": { - "has": "^1.0.1" + "exit": "^0.1.2", + "graceful-fs": "^4.1.11", + "jest-config": "^23.6.0", + "jest-docblock": "^23.2.0", + "jest-haste-map": "^23.6.0", + "jest-jasmine2": "^23.6.0", + "jest-leak-detector": "^23.6.0", + "jest-message-util": "^23.4.0", + "jest-runtime": "^23.6.0", + "jest-util": "^23.4.0", + "jest-worker": "^23.2.0", + "source-map-support": "^0.5.6", + "throat": "^4.0.0" + } + }, + "jest-runtime": { + "version": "23.6.0", + "resolved": "https://registry.npmjs.org/jest-runtime/-/jest-runtime-23.6.0.tgz", + "integrity": "sha512-ycnLTNPT2Gv+TRhnAYAQ0B3SryEXhhRj1kA6hBPSeZaNQkJ7GbZsxOLUkwg6YmvWGdX3BB3PYKFLDQCAE1zNOw==", + "dev": true, + "requires": { + "babel-core": "^6.0.0", + "babel-plugin-istanbul": "^4.1.6", + "chalk": "^2.0.1", + "convert-source-map": "^1.4.0", + "exit": "^0.1.2", + "fast-json-stable-stringify": "^2.0.0", + "graceful-fs": "^4.1.11", + "jest-config": "^23.6.0", + "jest-haste-map": "^23.6.0", + "jest-message-util": "^23.4.0", + "jest-regex-util": "^23.3.0", + "jest-resolve": "^23.6.0", + "jest-snapshot": "^23.6.0", + "jest-util": "^23.4.0", + "jest-validate": "^23.6.0", + "micromatch": "^2.3.11", + "realpath-native": "^1.0.0", + "slash": "^1.0.0", + "strip-bom": "3.0.0", + "write-file-atomic": "^2.1.0", + "yargs": "^11.0.0" } }, - "is-resolvable": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-resolvable/-/is-resolvable-1.1.0.tgz", - "integrity": "sha512-qgDYXFSR5WvEfuS5dMj6oTMEbrrSaM0CrFk2Yiq/gXnBvD9pMa2jGXxyhGLfvhZpuMZe18CJpFxAt3CRs42NMg==", - "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=" - }, - "is-stream": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", - "integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ=" - }, - "is-symbol": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.1.tgz", - "integrity": "sha1-PMWfAAJRlLarLjjbrmaJJWtmBXI=", + "jest-serializer": { + "version": "23.0.1", + "resolved": "https://registry.npmjs.org/jest-serializer/-/jest-serializer-23.0.1.tgz", + "integrity": "sha1-o3dq6zEekP6D+rnlM+hRAr0WQWU=", "dev": true }, - "is-wsl": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-1.1.0.tgz", - "integrity": "sha1-HxbkqiKwTRM2tmGIpmrzxgDDpm0=" + "jest-snapshot": { + "version": "23.6.0", + "resolved": "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-23.6.0.tgz", + "integrity": "sha512-tM7/Bprftun6Cvj2Awh/ikS7zV3pVwjRYU2qNYS51VZHgaAMBs5l4o/69AiDHhQrj5+LA2Lq4VIvK7zYk/bswg==", + "dev": true, + "requires": { + "babel-types": "^6.0.0", + "chalk": "^2.0.1", + "jest-diff": "^23.6.0", + "jest-matcher-utils": "^23.6.0", + "jest-message-util": "^23.4.0", + "jest-resolve": "^23.6.0", + "mkdirp": "^0.5.1", + "natural-compare": "^1.4.0", + "pretty-format": "^23.6.0", + "semver": "^5.5.0" + } }, - "isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=" + "jest-util": { + "version": "23.4.0", + "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-23.4.0.tgz", + "integrity": "sha1-TQY8uSe68KI4Mf9hvsLLv0l5NWE=", + "dev": true, + "requires": { + "callsites": "^2.0.0", + "chalk": "^2.0.1", + "graceful-fs": "^4.1.11", + "is-ci": "^1.0.10", + "jest-message-util": "^23.4.0", + "mkdirp": "^0.5.1", + "slash": "^1.0.0", + "source-map": "^0.6.0" + }, + "dependencies": { + "callsites": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-2.0.0.tgz", + "integrity": "sha1-BuuE8A7qQT2oav/vrL/7Ngk7PFA=", + "dev": true + } + } }, - "isexe": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=" + "jest-validate": { + "version": "23.6.0", + "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-23.6.0.tgz", + "integrity": "sha512-OFKapYxe72yz7agrDAWi8v2WL8GIfVqcbKRCLbRG9PAxtzF9b1SEDdTpytNDN12z2fJynoBwpMpvj2R39plI2A==", + "dev": true, + "requires": { + "chalk": "^2.0.1", + "jest-get-type": "^22.1.0", + "leven": "^2.1.0", + "pretty-format": "^23.6.0" + } }, - "isomorphic-fetch": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/isomorphic-fetch/-/isomorphic-fetch-2.2.1.tgz", - "integrity": "sha1-YRrhrPFPXoH3KVB0coGf6XM1WKk=", + "jest-watcher": { + "version": "23.4.0", + "resolved": "https://registry.npmjs.org/jest-watcher/-/jest-watcher-23.4.0.tgz", + "integrity": "sha1-0uKM50+NrWxq/JIrksq+9u0FyRw=", + "dev": true, "requires": { - "node-fetch": "^1.0.1", - "whatwg-fetch": ">=0.10.0" + "ansi-escapes": "^3.0.0", + "chalk": "^2.0.1", + "string-length": "^2.0.0" + }, + "dependencies": { + "ansi-escapes": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-3.1.0.tgz", + "integrity": "sha512-UgAb8H9D41AQnu/PbWlCofQVcnV4Gs2bBJi9eZPxfU/hgglFh3SMDMENRIqdr7H6XFnXdoknctFByVsCOotTVw==", + "dev": true + } } }, - "isurl": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isurl/-/isurl-1.0.0.tgz", - "integrity": "sha512-1P/yWsxPlDtn7QeRD+ULKQPaIaN6yF368GZ2vDfv0AL0NwpStafjWCDDdn0k8wgFMWpVAqG7oJhxHnlud42i9w==", + "jest-worker": { + "version": "23.2.0", + "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-23.2.0.tgz", + "integrity": "sha1-+vcGqNo2+uYOsmlXJX+ntdjqArk=", + "dev": true, "requires": { - "has-to-string-tag-x": "^1.2.0", - "is-object": "^1.0.1" + "merge-stream": "^1.0.1" } }, "jmespath": { @@ -2166,6 +4934,60 @@ "esprima": "^4.0.0" } }, + "jsbn": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz", + "integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM=", + "dev": true + }, + "jsdom": { + "version": "11.12.0", + "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-11.12.0.tgz", + "integrity": "sha512-y8Px43oyiBM13Zc1z780FrfNLJCXTL40EWlty/LXUtcjykRBNgLlCjWXpfSPBl2iv+N7koQN+dvqszHZgT/Fjw==", + "dev": true, + "requires": { + "abab": "^2.0.0", + "acorn": "^5.5.3", + "acorn-globals": "^4.1.0", + "array-equal": "^1.0.0", + "cssom": ">= 0.3.2 < 0.4.0", + "cssstyle": "^1.0.0", + "data-urls": "^1.0.0", + "domexception": "^1.0.1", + "escodegen": "^1.9.1", + "html-encoding-sniffer": "^1.0.2", + "left-pad": "^1.3.0", + "nwsapi": "^2.0.7", + "parse5": "4.0.0", + "pn": "^1.1.0", + "request": "^2.87.0", + "request-promise-native": "^1.0.5", + "sax": "^1.2.4", + "symbol-tree": "^3.2.2", + "tough-cookie": "^2.3.4", + "w3c-hr-time": "^1.0.1", + "webidl-conversions": "^4.0.2", + "whatwg-encoding": "^1.0.3", + "whatwg-mimetype": "^2.1.0", + "whatwg-url": "^6.4.1", + "ws": "^5.2.0", + "xml-name-validator": "^3.0.0" + }, + "dependencies": { + "sax": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz", + "integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==", + "dev": true + } + } + }, + "jsesc": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-1.3.0.tgz", + "integrity": "sha1-RsP+yMGJKxKwgz25vHYiF226s0s=", + "dev": true + }, "json-cycle": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/json-cycle/-/json-cycle-1.3.0.tgz", @@ -2192,6 +5014,12 @@ } } }, + "json-schema": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.2.3.tgz", + "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", @@ -2209,6 +5037,12 @@ "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", "integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=" }, + "json5": { + "version": "0.5.1", + "resolved": "http://registry.npmjs.org/json5/-/json5-0.5.1.tgz", + "integrity": "sha1-Hq3nrMASA0rYTiOWdn6tn6VJWCE=", + "dev": true + }, "jsonfile": { "version": "2.4.0", "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-2.4.0.tgz", @@ -2217,11 +5051,32 @@ "graceful-fs": "^4.1.6" } }, + "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", + "json-schema": "0.2.3", + "verror": "1.10.0" + } + }, "jwt-decode": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/jwt-decode/-/jwt-decode-2.2.0.tgz", "integrity": "sha1-fYa9VmefWM5qhHBKZX3TkruoGnk=" }, + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "^1.1.5" + } + }, "klaw": { "version": "1.3.1", "resolved": "https://registry.npmjs.org/klaw/-/klaw-1.3.1.tgz", @@ -2230,6 +5085,12 @@ "graceful-fs": "^4.1.9" } }, + "kleur": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/kleur/-/kleur-2.0.2.tgz", + "integrity": "sha512-77XF9iTllATmG9lSlIv0qdQ2BQ/h9t0bJllHlbvsQ0zUWfU7Yi0S8L5JXzPZgkefIiajLmBJJ4BsMJmqcf7oxQ==", + "dev": true + }, "latest-version": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/latest-version/-/latest-version-3.1.0.tgz", @@ -2246,6 +5107,27 @@ "readable-stream": "^2.0.5" } }, + "lcid": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/lcid/-/lcid-1.0.0.tgz", + "integrity": "sha1-MIrMr6C8SDo4Z7S28rlQYlHRuDU=", + "dev": true, + "requires": { + "invert-kv": "^1.0.0" + } + }, + "left-pad": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/left-pad/-/left-pad-1.3.0.tgz", + "integrity": "sha512-XI5MPzVNApjAyhQzphX8BkmKsKUxD4LdyK24iZeQGinBN9yTQT3bFlCBy/aVx2HrNcqQGsdot8ghrjyrvMCoEA==", + "dev": true + }, + "leven": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/leven/-/leven-2.1.0.tgz", + "integrity": "sha1-wuep93IJTe6dNCAq6KzORoeHVYA=", + "dev": true + }, "levn": { "version": "0.3.0", "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz", @@ -2311,11 +5193,26 @@ "resolved": "https://registry.npmjs.org/lodash.padstart/-/lodash.padstart-4.6.1.tgz", "integrity": "sha1-0uPuv/DZ05rVD1y9G1KnvOa7YRs=" }, + "lodash.sortby": { + "version": "4.7.0", + "resolved": "https://registry.npmjs.org/lodash.sortby/-/lodash.sortby-4.7.0.tgz", + "integrity": "sha1-7dFMgk4sycHgsKG0K7UhBRakJDg=", + "dev": true + }, "lodash.uniq": { "version": "4.5.0", "resolved": "https://registry.npmjs.org/lodash.uniq/-/lodash.uniq-4.5.0.tgz", "integrity": "sha1-0CJTc662Uq3BvILklFM5qEJ1R3M=" }, + "loose-envify": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", + "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==", + "dev": true, + "requires": { + "js-tokens": "^3.0.0 || ^4.0.0" + } + }, "lowercase-keys": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-1.0.1.tgz", @@ -2350,21 +5247,96 @@ } } }, + "makeerror": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/makeerror/-/makeerror-1.0.11.tgz", + "integrity": "sha1-4BpckQnyr3lmDk6LlYd5AYT1qWw=", + "dev": true, + "requires": { + "tmpl": "1.0.x" + } + }, + "map-cache": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/map-cache/-/map-cache-0.2.2.tgz", + "integrity": "sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8=", + "dev": true + }, + "map-visit": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/map-visit/-/map-visit-1.0.0.tgz", + "integrity": "sha1-7Nyo8TFE5mDxtb1B8S80edmN+48=", + "dev": true, + "requires": { + "object-visit": "^1.0.0" + } + }, + "math-random": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/math-random/-/math-random-1.0.1.tgz", + "integrity": "sha1-izqsWIuKZuSXXjzepn97sylgH6w=", + "dev": true + }, "media-typer": { "version": "0.3.0", "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", "integrity": "sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g=" }, + "mem": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/mem/-/mem-1.1.0.tgz", + "integrity": "sha1-Xt1StIXKHZAP5kiVUFOZoN+kX3Y=", + "dev": true, + "requires": { + "mimic-fn": "^1.0.0" + } + }, + "merge": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/merge/-/merge-1.2.0.tgz", + "integrity": "sha1-dTHjnUlJwoGma4xabgJl6LBYlNo=", + "dev": true + }, "merge-descriptors": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", "integrity": "sha1-sAqqVW3YtEVoFQ7J0blT8/kMu2E=" }, + "merge-stream": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-1.0.1.tgz", + "integrity": "sha1-QEEgLVCKNCugAXQAjfDCUbjBNeE=", + "dev": true, + "requires": { + "readable-stream": "^2.0.1" + } + }, "methods": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", "integrity": "sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4=" }, + "micromatch": { + "version": "2.3.11", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-2.3.11.tgz", + "integrity": "sha1-hmd8l9FyCzY0MdBNDRUpO9OMFWU=", + "dev": true, + "requires": { + "arr-diff": "^2.0.0", + "array-unique": "^0.2.1", + "braces": "^1.8.2", + "expand-brackets": "^0.1.4", + "extglob": "^0.3.1", + "filename-regex": "^2.0.0", + "is-extglob": "^1.0.0", + "is-glob": "^2.0.1", + "kind-of": "^3.0.2", + "normalize-path": "^2.0.1", + "object.omit": "^2.0.0", + "parse-glob": "^3.0.4", + "regex-cache": "^0.4.2" + } + }, "mime": { "version": "1.4.1", "resolved": "https://registry.npmjs.org/mime/-/mime-1.4.1.tgz", @@ -2402,6 +5374,27 @@ "resolved": "http://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=" }, + "mixin-deep": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/mixin-deep/-/mixin-deep-1.3.1.tgz", + "integrity": "sha512-8ZItLHeEgaqEvd5lYBXfm4EZSFCX29Jb9K+lAHhDKzReKBQKj3R+7NOF6tjqYi9t4oI8VUfaWITJQm86wnXGNQ==", + "dev": true, + "requires": { + "for-in": "^1.0.2", + "is-extendable": "^1.0.1" + }, + "dependencies": { + "is-extendable": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", + "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", + "dev": true, + "requires": { + "is-plain-object": "^2.0.4" + } + } + } + }, "mkdirp": { "version": "0.5.1", "resolved": "http://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz", @@ -2432,6 +5425,52 @@ "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.6.tgz", "integrity": "sha1-SJYrGeFp/R38JAs/HnMXYnu8R9s=" }, + "nan": { + "version": "2.11.1", + "resolved": "https://registry.npmjs.org/nan/-/nan-2.11.1.tgz", + "integrity": "sha512-iji6k87OSXa0CcrLl9z+ZiYSuR2o+c0bGuNmXdrhTQTakxytAFsC56SArGYoiHlJlFoHSnvmhpceZJaXkVuOtA==", + "dev": true, + "optional": true + }, + "nanomatch": { + "version": "1.2.13", + "resolved": "https://registry.npmjs.org/nanomatch/-/nanomatch-1.2.13.tgz", + "integrity": "sha512-fpoe2T0RbHwBTBUOftAfBPaDEi06ufaUai0mE6Yn1kacc3SnTErfb/h+X94VXzI64rKFHYImXSvdwGGCmwOqCA==", + "dev": true, + "requires": { + "arr-diff": "^4.0.0", + "array-unique": "^0.3.2", + "define-property": "^2.0.2", + "extend-shallow": "^3.0.2", + "fragment-cache": "^0.2.1", + "is-windows": "^1.0.2", + "kind-of": "^6.0.2", + "object.pick": "^1.3.0", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.1" + }, + "dependencies": { + "arr-diff": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz", + "integrity": "sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA=", + "dev": true + }, + "array-unique": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz", + "integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=", + "dev": true + }, + "kind-of": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz", + "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==", + "dev": true + } + } + }, "native-promise-only": { "version": "0.8.1", "resolved": "https://registry.npmjs.org/native-promise-only/-/native-promise-only-0.8.1.tgz", @@ -2463,6 +5502,24 @@ "is-stream": "^1.0.1" } }, + "node-int64": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/node-int64/-/node-int64-0.4.0.tgz", + "integrity": "sha1-h6kGXNs1XTGC2PlM4RGIuCXGijs=", + "dev": true + }, + "node-notifier": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/node-notifier/-/node-notifier-5.3.0.tgz", + "integrity": "sha512-AhENzCSGZnZJgBARsUjnQ7DnZbzyP+HxlVXuD0xqAnvL8q+OqtSX7lGg9e8nHzwXkMMXNdVeqq4E2M3EUAqX6Q==", + "dev": true, + "requires": { + "growly": "^1.3.0", + "semver": "^5.5.0", + "shellwords": "^0.1.1", + "which": "^1.3.0" + } + }, "normalize-package-data": { "version": "2.4.0", "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.4.0.tgz", @@ -2522,11 +5579,45 @@ "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz", "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=" }, + "nwsapi": { + "version": "2.0.9", + "resolved": "https://registry.npmjs.org/nwsapi/-/nwsapi-2.0.9.tgz", + "integrity": "sha512-nlWFSCTYQcHk/6A9FFnfhKc14c3aFhfdNBXgo8Qgi9QTBu/qg3Ww+Uiz9wMzXd1T8GFxPc2QIHB6Qtf2XFryFQ==", + "dev": true + }, + "oauth-sign": { + "version": "0.9.0", + "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.9.0.tgz", + "integrity": "sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ==", + "dev": true + }, "object-assign": { "version": "4.1.1", "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=" }, + "object-copy": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/object-copy/-/object-copy-0.1.0.tgz", + "integrity": "sha1-fn2Fi3gb18mRpBupde04EnVOmYw=", + "dev": true, + "requires": { + "copy-descriptor": "^0.1.0", + "define-property": "^0.2.5", + "kind-of": "^3.0.3" + }, + "dependencies": { + "define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "dev": true, + "requires": { + "is-descriptor": "^0.1.0" + } + } + } + }, "object-hash": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/object-hash/-/object-hash-1.3.0.tgz", @@ -2538,6 +5629,23 @@ "integrity": "sha512-FTMyFUm2wBcGHnH2eXmz7tC6IwlqQZ6mVZ+6dm6vZ4IQIHjs6FdNsQBuKGPuUUUY6NfJw2PshC08Tn6LzLDOag==", "dev": true }, + "object-visit": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/object-visit/-/object-visit-1.0.1.tgz", + "integrity": "sha1-95xEk68MU3e1n+OdOV5BBC3QRbs=", + "dev": true, + "requires": { + "isobject": "^3.0.0" + }, + "dependencies": { + "isobject": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", + "dev": true + } + } + }, "object.assign": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.0.tgz", @@ -2562,6 +5670,43 @@ "has": "^1.0.1" } }, + "object.getownpropertydescriptors": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.0.3.tgz", + "integrity": "sha1-h1jIRvW0B62rDyNuCYbxSwUcqhY=", + "dev": true, + "requires": { + "define-properties": "^1.1.2", + "es-abstract": "^1.5.1" + } + }, + "object.omit": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/object.omit/-/object.omit-2.0.1.tgz", + "integrity": "sha1-Gpx0SCnznbuFjHbKNXmuKlTr0fo=", + "dev": true, + "requires": { + "for-own": "^0.1.4", + "is-extendable": "^0.1.1" + } + }, + "object.pick": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/object.pick/-/object.pick-1.3.0.tgz", + "integrity": "sha1-h6EKxMFpS9Lhy/U1kaZhQftd10c=", + "dev": true, + "requires": { + "isobject": "^3.0.1" + }, + "dependencies": { + "isobject": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", + "dev": true + } + } + }, "on-finished": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz", @@ -2591,6 +5736,30 @@ "is-wsl": "^1.1.0" } }, + "optimist": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/optimist/-/optimist-0.6.1.tgz", + "integrity": "sha1-2j6nRob6IaGaERwybpDrFaAZZoY=", + "dev": true, + "requires": { + "minimist": "~0.0.1", + "wordwrap": "~0.0.2" + }, + "dependencies": { + "minimist": { + "version": "0.0.10", + "resolved": "http://registry.npmjs.org/minimist/-/minimist-0.0.10.tgz", + "integrity": "sha1-3j+YVD2/lggr5IrRoMfNqDYwHc8=", + "dev": true + }, + "wordwrap": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-0.0.3.tgz", + "integrity": "sha1-o9XabNXAvAAI03I0u68b7WMFkQc=", + "dev": true + } + } + }, "optionator": { "version": "0.8.2", "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.2.tgz", @@ -2605,6 +5774,23 @@ "wordwrap": "~1.0.0" } }, + "os-homedir": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/os-homedir/-/os-homedir-1.0.2.tgz", + "integrity": "sha1-/7xJiDNuDoM94MFox+8VISGqf7M=", + "dev": true + }, + "os-locale": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/os-locale/-/os-locale-2.1.0.tgz", + "integrity": "sha512-3sslG3zJbEYcaC4YVAvDorjGxc7tv6KVATnLPZONiljsUncvihe9BQoVCEs0RZ1kmf4Hk9OBqlZfJZWI4GanKA==", + "dev": true, + "requires": { + "execa": "^0.7.0", + "lcid": "^1.0.0", + "mem": "^1.1.0" + } + }, "os-shim": { "version": "0.1.3", "resolved": "https://registry.npmjs.org/os-shim/-/os-shim-0.1.3.tgz", @@ -2655,6 +5841,18 @@ "semver": "^5.1.0" } }, + "parse-glob": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/parse-glob/-/parse-glob-3.0.4.tgz", + "integrity": "sha1-ssN2z7EfNVE7rdFz7wu246OIORw=", + "dev": true, + "requires": { + "glob-base": "^0.3.0", + "is-dotfile": "^1.0.0", + "is-extglob": "^1.0.0", + "is-glob": "^2.0.0" + } + }, "parse-json": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-2.2.0.tgz", @@ -2664,11 +5862,23 @@ "error-ex": "^1.2.0" } }, + "parse5": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/parse5/-/parse5-4.0.0.tgz", + "integrity": "sha512-VrZ7eOd3T1Fk4XWNXMgiGBK/z0MG48BWG2uQNU4I72fkQuKUTZpl+u9k+CxEG0twMVzSmXEEz12z5Fnw1jIQFA==", + "dev": true + }, "parseurl": { "version": "1.3.2", "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.2.tgz", "integrity": "sha1-/CidTtiZMRlGDBViUyYs3I3mW/M=" }, + "pascalcase": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/pascalcase/-/pascalcase-0.1.1.tgz", + "integrity": "sha1-s2PlXoAGym/iF4TS2yK9FdeRfxQ=", + "dev": true + }, "path-exists": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-2.1.0.tgz", @@ -2727,6 +5937,12 @@ "resolved": "https://registry.npmjs.org/pend/-/pend-1.2.0.tgz", "integrity": "sha1-elfrVQpng/kRUzH89GY9XI4AelA=" }, + "performance-now": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz", + "integrity": "sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns=", + "dev": true + }, "pify": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", @@ -2760,6 +5976,18 @@ "integrity": "sha512-ARhBOdzS3e41FbkW/XWrTEtukqqLoK5+Z/4UeDaLuSW+39JPeFgs4gCGqsrJHVZX0fUrx//4OF0K1CUGwlIFow==", "dev": true }, + "pn": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/pn/-/pn-1.1.0.tgz", + "integrity": "sha512-2qHaIQr2VLRFoxe2nASzsV6ef4yOOH+Fi9FBOVH6cqeSgUnoyySPZkxzLuzd+RYOQTRpROA0ztTMqxROKSb/nA==", + "dev": true + }, + "posix-character-classes": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/posix-character-classes/-/posix-character-classes-0.1.1.tgz", + "integrity": "sha1-AerA/jta9xoqbAL+q7jB/vfgDqs=", + "dev": true + }, "prelude-ls": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz", @@ -2771,6 +5999,12 @@ "resolved": "https://registry.npmjs.org/prepend-http/-/prepend-http-1.0.4.tgz", "integrity": "sha1-1PRWKwzjaW5BrFLQ4ALlemNdxtw=" }, + "preserve": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/preserve/-/preserve-0.2.0.tgz", + "integrity": "sha1-gV7R9uvGWSb4ZbMQwHE7yzMVzks=", + "dev": true + }, "prettier": { "version": "1.14.3", "resolved": "https://registry.npmjs.org/prettier/-/prettier-1.14.3.tgz", @@ -2786,6 +6020,30 @@ "fast-diff": "^1.1.2" } }, + "pretty-format": { + "version": "23.6.0", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-23.6.0.tgz", + "integrity": "sha512-zf9NV1NSlDLDjycnwm6hpFATCGl/K1lt0R/GdkAK2O5LN/rwJoB+Mh93gGJjut4YbmecbfgLWVGSTCr0Ewvvbw==", + "dev": true, + "requires": { + "ansi-regex": "^3.0.0", + "ansi-styles": "^3.2.0" + }, + "dependencies": { + "ansi-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", + "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", + "dev": true + } + } + }, + "private": { + "version": "0.1.8", + "resolved": "https://registry.npmjs.org/private/-/private-0.1.8.tgz", + "integrity": "sha512-VvivMrbvd2nKkiG38qjULzlc+4Vx4wm/whI9pQD35YrARNnhxeiRktSOhSukRLFNlzg6Br/cJPet5J/u19r/mg==", + "dev": true + }, "process-nextick-args": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.0.tgz", @@ -2802,6 +6060,16 @@ "resolved": "https://registry.npmjs.org/promise-queue/-/promise-queue-2.2.5.tgz", "integrity": "sha1-L29ffA9tCBCelnZZx5uIqe1ek7Q=" }, + "prompts": { + "version": "0.1.14", + "resolved": "https://registry.npmjs.org/prompts/-/prompts-0.1.14.tgz", + "integrity": "sha512-rxkyiE9YH6zAz/rZpywySLKkpaj0NMVyNw1qhsubdbjjSgcayjTShDreZGlFMcGSu5sab3bAKPfFk78PB90+8w==", + "dev": true, + "requires": { + "kleur": "^2.0.1", + "sisteransi": "^0.1.1" + } + }, "proto-list": { "version": "1.2.4", "resolved": "https://registry.npmjs.org/proto-list/-/proto-list-1.2.4.tgz", @@ -2821,6 +6089,12 @@ "resolved": "https://registry.npmjs.org/pseudomap/-/pseudomap-1.0.2.tgz", "integrity": "sha1-8FKijacOYYkX7wqKw0wa5aaChrM=" }, + "psl": { + "version": "1.1.29", + "resolved": "https://registry.npmjs.org/psl/-/psl-1.1.29.tgz", + "integrity": "sha512-AeUmQ0oLN02flVHXWh9sSJF7mcdFq0ppid/JkErufc3hGIV/AMa8Fo9VgDo/cT2jFdOWoFvHp90qqBH54W+gjQ==", + "dev": true + }, "punycode": { "version": "1.3.2", "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.3.2.tgz", @@ -2841,6 +6115,31 @@ "resolved": "https://registry.npmjs.org/ramda/-/ramda-0.25.0.tgz", "integrity": "sha512-GXpfrYVPwx3K7RQ6aYT8KPS8XViSXUVJT1ONhoKPE9VAleW42YE+U+8VEyGWt41EnEQW7gwecYJriTI0pKoecQ==" }, + "randomatic": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/randomatic/-/randomatic-3.1.0.tgz", + "integrity": "sha512-KnGPVE0lo2WoXxIZ7cPR8YBpiol4gsSuOwDSg410oHh80ZMp5EiypNqL2K4Z77vJn6lB5rap7IkAmcUlalcnBQ==", + "dev": true, + "requires": { + "is-number": "^4.0.0", + "kind-of": "^6.0.0", + "math-random": "^1.0.1" + }, + "dependencies": { + "is-number": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-4.0.0.tgz", + "integrity": "sha512-rSklcAIlf1OmFdyAqbnWTLVelsQ58uvZ66S/ZyawjWqIviTWCjg2PzVGw8WUA+nNuPTqb4wgA+NszrJ+08LlgQ==", + "dev": true + }, + "kind-of": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz", + "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==", + "dev": true + } + } + }, "range-parser": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.0.tgz", @@ -2933,11 +6232,39 @@ "util-deprecate": "~1.0.1" } }, + "realpath-native": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/realpath-native/-/realpath-native-1.0.2.tgz", + "integrity": "sha512-+S3zTvVt9yTntFrBpm7TQmQ3tzpCrnA1a/y+3cUHAc9ZR6aIjG0WNLR+Rj79QpJktY+VeW/TQtFlQ1bzsehI8g==", + "dev": true, + "requires": { + "util.promisify": "^1.0.0" + } + }, "regenerator-runtime": { "version": "0.10.5", "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.10.5.tgz", "integrity": "sha1-M2w+/BIgrc7dosn6tntaeVWjNlg=" }, + "regex-cache": { + "version": "0.4.4", + "resolved": "https://registry.npmjs.org/regex-cache/-/regex-cache-0.4.4.tgz", + "integrity": "sha512-nVIZwtCjkC9YgvWkpM55B5rBhBYRZhAaJbgcFYXXsHnbZ9UZI9nnVWYZpBlCqv9ho2eZryPnWrZGsOdPwVWXWQ==", + "dev": true, + "requires": { + "is-equal-shallow": "^0.1.3" + } + }, + "regex-not": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/regex-not/-/regex-not-1.0.2.tgz", + "integrity": "sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A==", + "dev": true, + "requires": { + "extend-shallow": "^3.0.2", + "safe-regex": "^1.1.0" + } + }, "regexpp": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-2.0.1.tgz", @@ -2966,11 +6293,106 @@ "resolved": "https://registry.npmjs.org/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz", "integrity": "sha1-wkvOKig62tW8P1jg1IJJuSN52O8=" }, + "repeat-element": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/repeat-element/-/repeat-element-1.1.3.tgz", + "integrity": "sha512-ahGq0ZnV5m5XtZLMb+vP76kcAM5nkLqk0lpqAuojSKGgQtn4eRi4ZZGm2olo2zKFH+sMsWaqOCW1dqAnOru72g==", + "dev": true + }, + "repeat-string": { + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz", + "integrity": "sha1-jcrkcOHIirwtYA//Sndihtp15jc=", + "dev": true + }, + "repeating": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/repeating/-/repeating-2.0.1.tgz", + "integrity": "sha1-UhTFOpJtNVJwdSf7q0FdvAjQbdo=", + "dev": true, + "requires": { + "is-finite": "^1.0.0" + } + }, "replaceall": { "version": "0.1.6", "resolved": "https://registry.npmjs.org/replaceall/-/replaceall-0.1.6.tgz", "integrity": "sha1-gdgax663LX9cSUKt8ml6MiBojY4=" }, + "request": { + "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", + "caseless": "~0.12.0", + "combined-stream": "~1.0.6", + "extend": "~3.0.2", + "forever-agent": "~0.6.1", + "form-data": "~2.3.2", + "har-validator": "~5.1.0", + "http-signature": "~1.2.0", + "is-typedarray": "~1.0.0", + "isstream": "~0.1.2", + "json-stringify-safe": "~5.0.1", + "mime-types": "~2.1.19", + "oauth-sign": "~0.9.0", + "performance-now": "^2.1.0", + "qs": "~6.5.2", + "safe-buffer": "^5.1.2", + "tough-cookie": "~2.4.3", + "tunnel-agent": "^0.6.0", + "uuid": "^3.3.2" + }, + "dependencies": { + "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==", + "dev": true + }, + "uuid": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.3.2.tgz", + "integrity": "sha512-yXJmeNaw3DnnKAOKJE51sL/ZaYfWJRl1pK9dr19YFCu0ObS231AB1/LbqTKRAQ5kw8A90rA6fr4riOUpTZvQZA==", + "dev": true + } + } + }, + "request-promise-core": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/request-promise-core/-/request-promise-core-1.1.1.tgz", + "integrity": "sha1-Pu4AssWqgyOc+wTFcA2jb4HNCLY=", + "dev": true, + "requires": { + "lodash": "^4.13.1" + } + }, + "request-promise-native": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/request-promise-native/-/request-promise-native-1.0.5.tgz", + "integrity": "sha1-UoF3D2jgyXGeUWP9P6tIIhX0/aU=", + "dev": true, + "requires": { + "request-promise-core": "1.1.1", + "stealthy-require": "^1.1.0", + "tough-cookie": ">=2.3.3" + } + }, + "require-directory": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", + "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=", + "dev": true + }, + "require-main-filename": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-1.0.1.tgz", + "integrity": "sha1-l/cXtp1IeE9fUmpsWqj/3aBVpNE=", + "dev": true + }, "require-uncached": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/require-uncached/-/require-uncached-1.0.3.tgz", @@ -2990,12 +6412,35 @@ "path-parse": "^1.0.5" } }, + "resolve-cwd": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/resolve-cwd/-/resolve-cwd-2.0.0.tgz", + "integrity": "sha1-AKn3OHVW4nA46uIyyqNypqWbZlo=", + "dev": true, + "requires": { + "resolve-from": "^3.0.0" + }, + "dependencies": { + "resolve-from": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-3.0.0.tgz", + "integrity": "sha1-six699nWiBvItuZTM17rywoYh0g=", + "dev": true + } + } + }, "resolve-from": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-1.0.1.tgz", "integrity": "sha1-Jsv+k10a7uq7Kbw/5a6wHpPUQiY=", "dev": true }, + "resolve-url": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/resolve-url/-/resolve-url-0.2.1.tgz", + "integrity": "sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo=", + "dev": true + }, "restore-cursor": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-1.0.1.tgz", @@ -3005,6 +6450,12 @@ "onetime": "^1.0.0" } }, + "ret": { + "version": "0.1.15", + "resolved": "https://registry.npmjs.org/ret/-/ret-0.1.15.tgz", + "integrity": "sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg==", + "dev": true + }, "rimraf": { "version": "2.6.2", "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.2.tgz", @@ -3013,6 +6464,12 @@ "glob": "^7.0.5" } }, + "rsvp": { + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/rsvp/-/rsvp-3.6.2.tgz", + "integrity": "sha512-OfWGQTb9vnwRjwtA2QwpG2ICclHC3pgXZO5xt8H2EfgDquO0qVdSb5T88L4qJVAEugbS56pAuV4XZM58UX8ulw==", + "dev": true + }, "run-async": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/run-async/-/run-async-2.3.0.tgz", @@ -3040,11 +6497,313 @@ "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.1.tgz", "integrity": "sha512-kKvNJn6Mm93gAczWVJg7wH+wGYWNrDHdWvpUmHyEsgCtIwwo3bqPtV4tR5tuPaUhTOo/kvhVwd8XwwOllGYkbg==" }, + "safe-regex": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/safe-regex/-/safe-regex-1.1.0.tgz", + "integrity": "sha1-QKNmnzsHfR6UPURinhV91IAjvy4=", + "dev": true, + "requires": { + "ret": "~0.1.10" + } + }, "safer-buffer": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" }, + "sane": { + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/sane/-/sane-2.5.2.tgz", + "integrity": "sha1-tNwYYcIbQn6SlQej51HiosuKs/o=", + "dev": true, + "requires": { + "anymatch": "^2.0.0", + "capture-exit": "^1.2.0", + "exec-sh": "^0.2.0", + "fb-watchman": "^2.0.0", + "fsevents": "^1.2.3", + "micromatch": "^3.1.4", + "minimist": "^1.1.1", + "walker": "~1.0.5", + "watch": "~0.18.0" + }, + "dependencies": { + "arr-diff": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz", + "integrity": "sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA=", + "dev": true + }, + "array-unique": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz", + "integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=", + "dev": true + }, + "braces": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", + "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", + "dev": true, + "requires": { + "arr-flatten": "^1.1.0", + "array-unique": "^0.3.2", + "extend-shallow": "^2.0.1", + "fill-range": "^4.0.0", + "isobject": "^3.0.1", + "repeat-element": "^1.1.2", + "snapdragon": "^0.8.1", + "snapdragon-node": "^2.0.1", + "split-string": "^3.0.2", + "to-regex": "^3.0.1" + }, + "dependencies": { + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "requires": { + "is-extendable": "^0.1.0" + } + } + } + }, + "expand-brackets": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-2.1.4.tgz", + "integrity": "sha1-t3c14xXOMPa27/D4OwQVGiJEliI=", + "dev": true, + "requires": { + "debug": "^2.3.3", + "define-property": "^0.2.5", + "extend-shallow": "^2.0.1", + "posix-character-classes": "^0.1.0", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.1" + }, + "dependencies": { + "define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "dev": true, + "requires": { + "is-descriptor": "^0.1.0" + } + }, + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "requires": { + "is-extendable": "^0.1.0" + } + }, + "is-accessor-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", + "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", + "dev": true, + "requires": { + "kind-of": "^3.0.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "is-data-descriptor": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", + "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", + "dev": true, + "requires": { + "kind-of": "^3.0.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "is-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", + "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", + "dev": true, + "requires": { + "is-accessor-descriptor": "^0.1.6", + "is-data-descriptor": "^0.1.4", + "kind-of": "^5.0.0" + } + }, + "kind-of": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", + "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", + "dev": true + } + } + }, + "extglob": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/extglob/-/extglob-2.0.4.tgz", + "integrity": "sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==", + "dev": true, + "requires": { + "array-unique": "^0.3.2", + "define-property": "^1.0.0", + "expand-brackets": "^2.1.4", + "extend-shallow": "^2.0.1", + "fragment-cache": "^0.2.1", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.1" + }, + "dependencies": { + "define-property": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", + "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", + "dev": true, + "requires": { + "is-descriptor": "^1.0.0" + } + }, + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "requires": { + "is-extendable": "^0.1.0" + } + } + } + }, + "fill-range": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", + "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=", + "dev": true, + "requires": { + "extend-shallow": "^2.0.1", + "is-number": "^3.0.0", + "repeat-string": "^1.6.1", + "to-regex-range": "^2.1.0" + }, + "dependencies": { + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "requires": { + "is-extendable": "^0.1.0" + } + } + } + }, + "is-accessor-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", + "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", + "dev": true, + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-data-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", + "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", + "dev": true, + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-descriptor": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", + "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", + "dev": true, + "requires": { + "is-accessor-descriptor": "^1.0.0", + "is-data-descriptor": "^1.0.0", + "kind-of": "^6.0.2" + } + }, + "is-number": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", + "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", + "dev": true, + "requires": { + "kind-of": "^3.0.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "isobject": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", + "dev": true + }, + "kind-of": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz", + "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==", + "dev": true + }, + "micromatch": { + "version": "3.1.10", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", + "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", + "dev": true, + "requires": { + "arr-diff": "^4.0.0", + "array-unique": "^0.3.2", + "braces": "^2.3.1", + "define-property": "^2.0.2", + "extend-shallow": "^3.0.2", + "extglob": "^2.0.4", + "fragment-cache": "^0.2.1", + "kind-of": "^6.0.2", + "nanomatch": "^1.2.9", + "object.pick": "^1.3.0", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.2" + } + } + } + }, "sax": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.1.tgz", @@ -3157,6 +6916,35 @@ "yaml-ast-parser": "0.0.34" } }, + "set-blocking": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", + "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=", + "dev": true + }, + "set-value": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/set-value/-/set-value-2.0.0.tgz", + "integrity": "sha512-hw0yxk9GT/Hr5yJEYnHNKYXkIA8mVJgd9ditYZCe16ZczcaELYYcfvaXesNACk2O8O0nTiPQcQhGUQj8JLzeeg==", + "dev": true, + "requires": { + "extend-shallow": "^2.0.1", + "is-extendable": "^0.1.1", + "is-plain-object": "^2.0.3", + "split-string": "^3.0.1" + }, + "dependencies": { + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "requires": { + "is-extendable": "^0.1.0" + } + } + } + }, "setprototypeof": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.0.tgz", @@ -3175,11 +6963,23 @@ "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz", "integrity": "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=" }, + "shellwords": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/shellwords/-/shellwords-0.1.1.tgz", + "integrity": "sha512-vFwSUfQvqybiICwZY5+DAWIPLKsWO31Q91JSKl3UYv+K5c2QRPzn0qzec6QPu1Qc9eHYItiP3NdJqNVqetYAww==", + "dev": true + }, "signal-exit": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.2.tgz", "integrity": "sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0=" }, + "sisteransi": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/sisteransi/-/sisteransi-0.1.1.tgz", + "integrity": "sha512-PmGOd02bM9YO5ifxpw36nrNMBTptEtfRl4qUYl9SndkolplkrZZOW7PGHjrZL53QvMVj9nQ+TKqUnRsw4tJa4g==", + "dev": true + }, "slash": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/slash/-/slash-1.0.0.tgz", @@ -3202,11 +7002,138 @@ } } }, + "snapdragon": { + "version": "0.8.2", + "resolved": "https://registry.npmjs.org/snapdragon/-/snapdragon-0.8.2.tgz", + "integrity": "sha512-FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg==", + "dev": true, + "requires": { + "base": "^0.11.1", + "debug": "^2.2.0", + "define-property": "^0.2.5", + "extend-shallow": "^2.0.1", + "map-cache": "^0.2.2", + "source-map": "^0.5.6", + "source-map-resolve": "^0.5.0", + "use": "^3.1.0" + }, + "dependencies": { + "define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "dev": true, + "requires": { + "is-descriptor": "^0.1.0" + } + }, + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "requires": { + "is-extendable": "^0.1.0" + } + }, + "source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", + "dev": true + } + } + }, + "snapdragon-node": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/snapdragon-node/-/snapdragon-node-2.1.1.tgz", + "integrity": "sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw==", + "dev": true, + "requires": { + "define-property": "^1.0.0", + "isobject": "^3.0.0", + "snapdragon-util": "^3.0.1" + }, + "dependencies": { + "define-property": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", + "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", + "dev": true, + "requires": { + "is-descriptor": "^1.0.0" + } + }, + "is-accessor-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", + "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", + "dev": true, + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-data-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", + "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", + "dev": true, + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-descriptor": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", + "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", + "dev": true, + "requires": { + "is-accessor-descriptor": "^1.0.0", + "is-data-descriptor": "^1.0.0", + "kind-of": "^6.0.2" + } + }, + "isobject": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", + "dev": true + }, + "kind-of": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz", + "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==", + "dev": true + } + } + }, + "snapdragon-util": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/snapdragon-util/-/snapdragon-util-3.0.1.tgz", + "integrity": "sha512-mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ==", + "dev": true, + "requires": { + "kind-of": "^3.2.0" + } + }, "source-map": { "version": "0.6.1", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" }, + "source-map-resolve": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/source-map-resolve/-/source-map-resolve-0.5.2.tgz", + "integrity": "sha512-MjqsvNwyz1s0k81Goz/9vRBe9SZdB09Bdw+/zYyO+3CuPk6fouTaxscHkgtE8jKvf01kVfl8riHzERQ/kefaSA==", + "dev": true, + "requires": { + "atob": "^2.1.1", + "decode-uri-component": "^0.2.0", + "resolve-url": "^0.2.1", + "source-map-url": "^0.4.0", + "urix": "^0.1.0" + } + }, "source-map-support": { "version": "0.5.9", "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.9.tgz", @@ -3216,6 +7143,12 @@ "source-map": "^0.6.0" } }, + "source-map-url": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/source-map-url/-/source-map-url-0.4.0.tgz", + "integrity": "sha1-PpNdfd1zYxuXZZlW1VEo6HtQhKM=", + "dev": true + }, "spawn-sync": { "version": "1.0.15", "resolved": "https://registry.npmjs.org/spawn-sync/-/spawn-sync-1.0.15.tgz", @@ -3257,21 +7190,107 @@ "integrity": "sha512-2+EPwgbnmOIl8HjGBXXMd9NAu02vLjOO1nWw4kmeRDFyHn+M/ETfHxQUK0oXg8ctgVnl9t3rosNVsZ1jG61nDA==", "dev": true }, + "split-string": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/split-string/-/split-string-3.1.0.tgz", + "integrity": "sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw==", + "dev": true, + "requires": { + "extend-shallow": "^3.0.0" + } + }, "sprintf-js": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=" }, + "sshpk": { + "version": "1.15.1", + "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.15.1.tgz", + "integrity": "sha512-mSdgNUaidk+dRU5MhYtN9zebdzF2iG0cNPWy8HG+W8y+fT1JnSkh0fzzpjOa0L7P8i1Rscz38t0h4gPcKz43xA==", + "dev": true, + "requires": { + "asn1": "~0.2.3", + "assert-plus": "^1.0.0", + "bcrypt-pbkdf": "^1.0.0", + "dashdash": "^1.12.0", + "ecc-jsbn": "~0.1.1", + "getpass": "^0.1.1", + "jsbn": "~0.1.0", + "safer-buffer": "^2.0.2", + "tweetnacl": "~0.14.0" + } + }, "stack-trace": { "version": "0.0.9", "resolved": "https://registry.npmjs.org/stack-trace/-/stack-trace-0.0.9.tgz", "integrity": "sha1-qPbq7KkGdMMz58Q5U/J1tFFRBpU=" }, + "stack-utils": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/stack-utils/-/stack-utils-1.0.1.tgz", + "integrity": "sha1-1PM6tU6OOHeLDKXP07OvsS22hiA=", + "dev": true + }, + "static-extend": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/static-extend/-/static-extend-0.1.2.tgz", + "integrity": "sha1-YICcOcv/VTNyJv1eC1IPNB8ftcY=", + "dev": true, + "requires": { + "define-property": "^0.2.5", + "object-copy": "^0.1.0" + }, + "dependencies": { + "define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "dev": true, + "requires": { + "is-descriptor": "^0.1.0" + } + } + } + }, "statuses": { "version": "1.5.0", "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", "integrity": "sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow=" }, + "stealthy-require": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/stealthy-require/-/stealthy-require-1.1.1.tgz", + "integrity": "sha1-NbCYdbT/SfJqd35QmzCQoyJr8ks=", + "dev": true + }, + "string-length": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/string-length/-/string-length-2.0.0.tgz", + "integrity": "sha1-1A27aGo6zpYMHP/KVivyxF+DY+0=", + "dev": true, + "requires": { + "astral-regex": "^1.0.0", + "strip-ansi": "^4.0.0" + }, + "dependencies": { + "ansi-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", + "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", + "dev": true + }, + "strip-ansi": { + "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" + } + } + } + }, "string-width": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", @@ -3365,6 +7384,12 @@ "has-flag": "^3.0.0" } }, + "symbol-tree": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/symbol-tree/-/symbol-tree-3.2.2.tgz", + "integrity": "sha1-rifbOPZgp64uHDt9G8KQgZuFGeY=", + "dev": true + }, "table": { "version": "5.1.0", "resolved": "https://registry.npmjs.org/table/-/table-5.1.0.tgz", @@ -3444,7 +7469,76 @@ "resolved": "https://registry.npmjs.org/term-size/-/term-size-1.2.0.tgz", "integrity": "sha1-RYuDiH8oj8Vtb/+/rSYuJmOO+mk=", "requires": { - "execa": "^0.7.0" + "execa": "^0.7.0" + } + }, + "test-exclude": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/test-exclude/-/test-exclude-4.2.3.tgz", + "integrity": "sha512-SYbXgY64PT+4GAL2ocI3HwPa4Q4TBKm0cwAVeKOt/Aoc0gSpNRjJX8w0pA1LMKZ3LBmd8pYBqApFNQLII9kavA==", + "dev": true, + "requires": { + "arrify": "^1.0.1", + "micromatch": "^2.3.11", + "object-assign": "^4.1.0", + "read-pkg-up": "^1.0.1", + "require-main-filename": "^1.0.1" + }, + "dependencies": { + "load-json-file": { + "version": "1.1.0", + "resolved": "http://registry.npmjs.org/load-json-file/-/load-json-file-1.1.0.tgz", + "integrity": "sha1-lWkFcI1YtLq0wiYbBPWfMcmTdMA=", + "dev": true, + "requires": { + "graceful-fs": "^4.1.2", + "parse-json": "^2.2.0", + "pify": "^2.0.0", + "pinkie-promise": "^2.0.0", + "strip-bom": "^2.0.0" + } + }, + "path-type": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-1.1.0.tgz", + "integrity": "sha1-WcRPfuSR2nBNpBXaWkBwuk+P5EE=", + "dev": true, + "requires": { + "graceful-fs": "^4.1.2", + "pify": "^2.0.0", + "pinkie-promise": "^2.0.0" + } + }, + "read-pkg": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-1.1.0.tgz", + "integrity": "sha1-9f+qXs0pyzHAR0vKfXVra7KePyg=", + "dev": true, + "requires": { + "load-json-file": "^1.0.0", + "normalize-package-data": "^2.3.2", + "path-type": "^1.0.0" + } + }, + "read-pkg-up": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-1.0.1.tgz", + "integrity": "sha1-nWPBMnbAZZGNV/ACpX9AobZD+wI=", + "dev": true, + "requires": { + "find-up": "^1.0.0", + "read-pkg": "^1.0.0" + } + }, + "strip-bom": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-2.0.0.tgz", + "integrity": "sha1-YhmoVhZSBJHzV4i9vxRHqZx+aw4=", + "dev": true, + "requires": { + "is-utf8": "^0.2.0" + } + } } }, "text-table": { @@ -3453,6 +7547,12 @@ "integrity": "sha1-f17oI66AUgfACvLfSoTsP8+lcLQ=", "dev": true }, + "throat": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/throat/-/throat-4.1.0.tgz", + "integrity": "sha1-iQN8vJLFarGJJua6TLsgDhVnKmo=", + "dev": true + }, "through": { "version": "2.3.8", "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", @@ -3471,11 +7571,100 @@ "os-tmpdir": "~1.0.1" } }, + "tmpl": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/tmpl/-/tmpl-1.0.4.tgz", + "integrity": "sha1-I2QN17QtAEM5ERQIIOXPRA5SHdE=", + "dev": true + }, "to-buffer": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/to-buffer/-/to-buffer-1.1.1.tgz", "integrity": "sha512-lx9B5iv7msuFYE3dytT+KE5tap+rNYw+K4jVkb9R/asAb+pbBSM17jtunHplhBe6RRJdZx3Pn2Jph24O32mOVg==" }, + "to-fast-properties": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-1.0.3.tgz", + "integrity": "sha1-uDVx+k2MJbguIxsG46MFXeTKGkc=", + "dev": true + }, + "to-object-path": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/to-object-path/-/to-object-path-0.3.0.tgz", + "integrity": "sha1-KXWIt7Dn4KwI4E5nL4XB9JmeF68=", + "dev": true, + "requires": { + "kind-of": "^3.0.2" + } + }, + "to-regex": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/to-regex/-/to-regex-3.0.2.tgz", + "integrity": "sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw==", + "dev": true, + "requires": { + "define-property": "^2.0.2", + "extend-shallow": "^3.0.2", + "regex-not": "^1.0.2", + "safe-regex": "^1.1.0" + } + }, + "to-regex-range": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz", + "integrity": "sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=", + "dev": true, + "requires": { + "is-number": "^3.0.0", + "repeat-string": "^1.6.1" + }, + "dependencies": { + "is-number": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", + "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", + "dev": true, + "requires": { + "kind-of": "^3.0.2" + } + } + } + }, + "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" + }, + "dependencies": { + "punycode": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz", + "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4=", + "dev": true + } + } + }, + "tr46": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-1.0.1.tgz", + "integrity": "sha1-qLE/1r/SSJUZZ0zN5VujaTtwbQk=", + "dev": true, + "requires": { + "punycode": "^2.1.0" + }, + "dependencies": { + "punycode": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", + "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==", + "dev": true + } + } + }, "trim-repeated": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/trim-repeated/-/trim-repeated-1.0.0.tgz", @@ -3484,6 +7673,12 @@ "escape-string-regexp": "^1.0.2" } }, + "trim-right": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/trim-right/-/trim-right-1.0.1.tgz", + "integrity": "sha1-yy4SAwZ+DI3h9hQJS5/kVwTqYAM=", + "dev": true + }, "tslib": { "version": "1.9.3", "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.9.3.tgz", @@ -3498,6 +7693,12 @@ "safe-buffer": "^5.0.1" } }, + "tweetnacl": { + "version": "0.14.5", + "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz", + "integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=", + "dev": true + }, "type-check": { "version": "0.3.2", "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz", @@ -3521,6 +7722,26 @@ "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz", "integrity": "sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c=" }, + "uglify-js": { + "version": "3.4.9", + "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.4.9.tgz", + "integrity": "sha512-8CJsbKOtEbnJsTyv6LE6m6ZKniqMiFWmm9sRbopbkGs3gMPPfd3Fh8iIA4Ykv5MgaTbqHr4BaoGLJLZNhsrW1Q==", + "dev": true, + "optional": true, + "requires": { + "commander": "~2.17.1", + "source-map": "~0.6.1" + }, + "dependencies": { + "commander": { + "version": "2.17.1", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.17.1.tgz", + "integrity": "sha512-wPMUt6FnH2yzG95SA6mzjQOEKUU3aLaDEmzs1ti+1E9h+CsrZghRlqEM/EJ4KscsQVG8uNN4uVreUeT8+drlgg==", + "dev": true, + "optional": true + } + } + }, "unbzip2-stream": { "version": "1.2.5", "resolved": "https://registry.npmjs.org/unbzip2-stream/-/unbzip2-stream-1.2.5.tgz", @@ -3547,6 +7768,41 @@ } } }, + "union-value": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/union-value/-/union-value-1.0.0.tgz", + "integrity": "sha1-XHHDTLW61dzr4+oM0IIHulqhrqQ=", + "dev": true, + "requires": { + "arr-union": "^3.1.0", + "get-value": "^2.0.6", + "is-extendable": "^0.1.1", + "set-value": "^0.4.3" + }, + "dependencies": { + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "requires": { + "is-extendable": "^0.1.0" + } + }, + "set-value": { + "version": "0.4.3", + "resolved": "https://registry.npmjs.org/set-value/-/set-value-0.4.3.tgz", + "integrity": "sha1-fbCPnT0i3H945Trzw79GZuzfzPE=", + "dev": true, + "requires": { + "extend-shallow": "^2.0.1", + "is-extendable": "^0.1.1", + "is-plain-object": "^2.0.1", + "to-object-path": "^0.3.0" + } + } + } + }, "unique-string": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/unique-string/-/unique-string-1.0.0.tgz", @@ -3560,6 +7816,52 @@ "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", "integrity": "sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw=" }, + "unset-value": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/unset-value/-/unset-value-1.0.0.tgz", + "integrity": "sha1-g3aHP30jNRef+x5vw6jtDfyKtVk=", + "dev": true, + "requires": { + "has-value": "^0.3.1", + "isobject": "^3.0.0" + }, + "dependencies": { + "has-value": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/has-value/-/has-value-0.3.1.tgz", + "integrity": "sha1-ex9YutpiyoJ+wKIHgCVlSEWZXh8=", + "dev": true, + "requires": { + "get-value": "^2.0.3", + "has-values": "^0.1.4", + "isobject": "^2.0.0" + }, + "dependencies": { + "isobject": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz", + "integrity": "sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=", + "dev": true, + "requires": { + "isarray": "1.0.0" + } + } + } + }, + "has-values": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/has-values/-/has-values-0.1.4.tgz", + "integrity": "sha1-bWHeldkd/Km5oCCJrThL/49it3E=", + "dev": true + }, + "isobject": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", + "dev": true + } + } + }, "unzip-response": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/unzip-response/-/unzip-response-2.0.1.tgz", @@ -3597,6 +7899,12 @@ } } }, + "urix": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/urix/-/urix-0.1.0.tgz", + "integrity": "sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI=", + "dev": true + }, "url": { "version": "0.10.3", "resolved": "https://registry.npmjs.org/url/-/url-0.10.3.tgz", @@ -3619,11 +7927,27 @@ "resolved": "https://registry.npmjs.org/url-to-options/-/url-to-options-1.0.1.tgz", "integrity": "sha1-FQWgOiiaSMvXpDTvuu7FBV9WM6k=" }, + "use": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/use/-/use-3.1.1.tgz", + "integrity": "sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ==", + "dev": true + }, "util-deprecate": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=" }, + "util.promisify": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/util.promisify/-/util.promisify-1.0.0.tgz", + "integrity": "sha512-i+6qA2MPhvoKLuxnJNpXAGhg7HphQOSUq2LKMZD0m15EiskXUkMvKdF4Uui0WYeCUGea+o2cw/ZuwehtfsrNkA==", + "dev": true, + "requires": { + "define-properties": "^1.1.2", + "object.getownpropertydescriptors": "^2.0.3" + } + }, "utils-merge": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", @@ -3649,16 +7973,98 @@ "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", "integrity": "sha1-IpnwLG3tMNSllhsLn3RSShj2NPw=" }, + "verror": { + "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", + "extsprintf": "^1.2.0" + } + }, + "w3c-hr-time": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/w3c-hr-time/-/w3c-hr-time-1.0.1.tgz", + "integrity": "sha1-gqwr/2PZUOqeMYmlimViX+3xkEU=", + "dev": true, + "requires": { + "browser-process-hrtime": "^0.1.2" + } + }, "walkdir": { "version": "0.0.11", "resolved": "https://registry.npmjs.org/walkdir/-/walkdir-0.0.11.tgz", "integrity": "sha1-oW0CXrkxvQO1LzCMrtD0D86+lTI=" }, + "walker": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/walker/-/walker-1.0.7.tgz", + "integrity": "sha1-L3+bj9ENZ3JisYqITijRlhjgKPs=", + "dev": true, + "requires": { + "makeerror": "1.0.x" + } + }, + "watch": { + "version": "0.18.0", + "resolved": "https://registry.npmjs.org/watch/-/watch-0.18.0.tgz", + "integrity": "sha1-KAlUdsbffJDJYxOJkMClQj60uYY=", + "dev": true, + "requires": { + "exec-sh": "^0.2.0", + "minimist": "^1.2.0" + } + }, + "webidl-conversions": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-4.0.2.tgz", + "integrity": "sha512-YQ+BmxuTgd6UXZW3+ICGfyqRyHXVlD5GtQr5+qjiNW7bF0cqrzX500HVXPBOvgXb5YnzDd+h0zqyv61KUD7+Sg==", + "dev": true + }, + "whatwg-encoding": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/whatwg-encoding/-/whatwg-encoding-1.0.5.tgz", + "integrity": "sha512-b5lim54JOPN9HtzvK9HFXvBma/rnfFeqsic0hSpjtDbVxR3dJKLc+KB4V6GgiGOvl7CY/KNh8rxSo9DKQrnUEw==", + "dev": true, + "requires": { + "iconv-lite": "0.4.24" + }, + "dependencies": { + "iconv-lite": { + "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" + } + } + } + }, "whatwg-fetch": { "version": "2.0.4", "resolved": "https://registry.npmjs.org/whatwg-fetch/-/whatwg-fetch-2.0.4.tgz", "integrity": "sha512-dcQ1GWpOD/eEQ97k66aiEVpNnapVj90/+R+SXTPYGHpYBBypfKJEQjLrvMZ7YXbKm21gXd4NcuxUTjiv1YtLng==" }, + "whatwg-mimetype": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/whatwg-mimetype/-/whatwg-mimetype-2.2.0.tgz", + "integrity": "sha512-5YSO1nMd5D1hY3WzAQV3PzZL83W3YeyR1yW9PcH26Weh1t+Vzh9B6XkDh7aXm83HBZ4nSMvkjvN2H2ySWIvBgw==", + "dev": true + }, + "whatwg-url": { + "version": "6.5.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-6.5.0.tgz", + "integrity": "sha512-rhRZRqx/TLJQWUpQ6bmrt2UV4f0HCQ463yQuONJqC6fO2VoEb1pTYddbe59SkYq87aoM5A3bdhMZiUiVws+fzQ==", + "dev": true, + "requires": { + "lodash.sortby": "^4.7.0", + "tr46": "^1.0.1", + "webidl-conversions": "^4.0.2" + } + }, "which": { "version": "1.3.1", "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", @@ -3667,6 +8073,12 @@ "isexe": "^2.0.0" } }, + "which-module": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.0.tgz", + "integrity": "sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho=", + "dev": true + }, "widest-line": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/widest-line/-/widest-line-2.0.0.tgz", @@ -3710,6 +8122,16 @@ "integrity": "sha1-J1hIEIkUVqQXHI0CJkQa3pDLyus=", "dev": true }, + "wrap-ansi": { + "version": "2.1.0", + "resolved": "http://registry.npmjs.org/wrap-ansi/-/wrap-ansi-2.1.0.tgz", + "integrity": "sha1-2Pw9KE3QV5T+hJc8rs3Rz4JP3YU=", + "dev": true, + "requires": { + "string-width": "^1.0.1", + "strip-ansi": "^3.0.1" + } + }, "wrappy": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", @@ -3734,11 +8156,26 @@ "signal-exit": "^3.0.2" } }, + "ws": { + "version": "5.2.2", + "resolved": "https://registry.npmjs.org/ws/-/ws-5.2.2.tgz", + "integrity": "sha512-jaHFD6PFv6UgoIVda6qZllptQsMlDEJkTQcybzzXDYM1XO9Y8em691FGMPmM46WGyLU4z9KMgQN+qrux/nhlHA==", + "dev": true, + "requires": { + "async-limiter": "~1.0.0" + } + }, "xdg-basedir": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/xdg-basedir/-/xdg-basedir-3.0.0.tgz", "integrity": "sha1-SWsswQnsqNus/i3HK2A8F8WHCtQ=" }, + "xml-name-validator": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/xml-name-validator/-/xml-name-validator-3.0.0.tgz", + "integrity": "sha512-A5CUptxDsvxKJEU3yO6DuWBSJz/qizqzJKOMIfUJHETbBw/sFaDxgd6fxm1ewUaM0jZ444Fc5vC5ROYurg/4Pw==", + "dev": true + }, "xml2js": { "version": "0.4.19", "resolved": "https://registry.npmjs.org/xml2js/-/xml2js-0.4.19.tgz", @@ -3758,6 +8195,12 @@ "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.1.tgz", "integrity": "sha1-pcbVMr5lbiPbgg77lDofBJmNY68=" }, + "y18n": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-3.2.1.tgz", + "integrity": "sha1-bRX7qITAhnnA136I53WegR4H+kE=", + "dev": true + }, "yallist": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz", @@ -3768,6 +8211,77 @@ "resolved": "https://registry.npmjs.org/yaml-ast-parser/-/yaml-ast-parser-0.0.34.tgz", "integrity": "sha1-0A88+ddztyQUCa6SpnQNHbGfSeY=" }, + "yargs": { + "version": "11.1.0", + "resolved": "http://registry.npmjs.org/yargs/-/yargs-11.1.0.tgz", + "integrity": "sha512-NwW69J42EsCSanF8kyn5upxvjp5ds+t3+udGBeTbFnERA+lF541DDpMawzo4z6W/QrzNM18D+BPMiOBibnFV5A==", + "dev": true, + "requires": { + "cliui": "^4.0.0", + "decamelize": "^1.1.1", + "find-up": "^2.1.0", + "get-caller-file": "^1.0.1", + "os-locale": "^2.0.0", + "require-directory": "^2.1.1", + "require-main-filename": "^1.0.1", + "set-blocking": "^2.0.0", + "string-width": "^2.0.0", + "which-module": "^2.0.0", + "y18n": "^3.2.1", + "yargs-parser": "^9.0.2" + }, + "dependencies": { + "ansi-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", + "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", + "dev": true + }, + "find-up": { + "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" + } + }, + "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=", + "dev": true + }, + "string-width": { + "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" + } + }, + "strip-ansi": { + "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" + } + } + } + }, + "yargs-parser": { + "version": "9.0.2", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-9.0.2.tgz", + "integrity": "sha1-nM9qQ0YP5O1Aqbto9I1DuKaMwHc=", + "dev": true, + "requires": { + "camelcase": "^4.1.0" + } + }, "yauzl": { "version": "2.10.0", "resolved": "https://registry.npmjs.org/yauzl/-/yauzl-2.10.0.tgz", diff --git a/lambdas/package.json b/lambdas/package.json index 34754d93..d618f973 100644 --- a/lambdas/package.json +++ b/lambdas/package.json @@ -9,6 +9,7 @@ "private": true, "scripts": { "lint": "eslint .", + "test": "jest --env node", "meetupcom:deploy": "cd meetupcom && serverless deploy -v --aws-profile meetupcomEvents", "meetupcom:producer:update": "cd meetupcom && serverless deploy function -f produce --aws-profile meetupcomEvents", "meetupcom:producer:invoke": "cd meetupcom && serverless invoke -f produce -l --aws-profile meetupcomEvents", @@ -45,7 +46,9 @@ "eslint-config-airbnb-base": "^13.1.0", "eslint-config-prettier": "^3.1.0", "eslint-plugin-import": "^2.14.0", + "eslint-plugin-jest": "^21.25.1", "eslint-plugin-prettier": "^3.0.0", + "jest": "^23.6.0", "prettier": "^1.14.3" } } diff --git a/lambdas/tests/eventbrite/handlers/producer.test.js b/lambdas/tests/eventbrite/handlers/producer.test.js new file mode 100644 index 00000000..0d8cb720 --- /dev/null +++ b/lambdas/tests/eventbrite/handlers/producer.test.js @@ -0,0 +1,211 @@ +process.env.EVENTBRITE_API_TOKEN = "eventbrite-token-abc123"; + +const { prefix, resolved, resolvedResponse } = require("../test-utils"); +const { getFromWeb } = require(`${prefix}/node_modules/aws-lambda-data-utils`); +const { uploadTo } = require(`${prefix}/utils`); +const producer = require(`${prefix}/handlers/producer`); + +const apiCallPage = page => + `https://www.eventbriteapi.com/v3/events/search/?page=${page}&sort_by=date&location.longitude=-6.762739&location.latitude=54.6425126&location.within=60mi&expand=logo,venue,organizer,format,category,subcategory,bookmark_info,refund_policy,ticket_availability&categories=102&token=eventbrite-token-abc123`; + +const errorResponse = data => resolvedResponse(data, { error: "test error" }); + +const singleResponse = data => + resolvedResponse(data, { + pagination: { has_more_items: false, page_count: 1 } + }); + +const initialResponse = data => + resolvedResponse(data, { + pagination: { has_more_items: true, page_count: 3 } + }); + +const finalResponse = data => + resolvedResponse(data, { + pagination: { has_more_items: false, page_count: 3 } + }); + +const event = null; +const context = null; + +describe("Eventbrite Producer", function() { + beforeEach(function() { + jest.clearAllMocks(); + uploadTo.mockImplementation(resolved({ key: "path/to/new/file.json" })); + }); + + it("is a lambda handler", function() { + expect(typeof producer).toBe("object"); + expect(typeof producer.produce).toBe("function"); + }); + + describe("when an error is returned", function() { + beforeEach(function() { + getFromWeb.mockImplementation(() => errorResponse()); + }); + + it("returns an error", function(done) { + producer.produce(event, context, function(err, response) { + expect(err).toEqual([{ error: "test error" }]); + expect(response).toBe(null); + done(); + }); + }); + + it("makes a request to the API", function(done) { + producer.produce(event, context, function() { + expect(getFromWeb).toHaveBeenCalledTimes(1); + expect(getFromWeb).toHaveBeenCalledWith(apiCallPage(1)); + done(); + }); + }); + + it("does not upload data", function(done) { + producer.produce(event, context, function() { + expect(uploadTo).not.toHaveBeenCalled(); + done(); + }); + }); + }); + + describe("when the results list is paginated on a single page", function() { + beforeEach(function() { + getFromWeb.mockImplementation(() => singleResponse()); + }); + + it("does not return an error and returns message", function(done) { + producer.produce(event, context, function(err, response) { + expect(err).toBe(null); + expect(response).toEqual({ message: ["path/to/new/file.json"] }); + done(); + }); + }); + + it("makes a request to the API", function(done) { + producer.produce(event, context, function() { + expect(getFromWeb).toHaveBeenCalledTimes(1); + expect(getFromWeb).toHaveBeenCalledWith(apiCallPage(1)); + done(); + }); + }); + + it("uploads data", function(done) { + producer.produce(event, context, function() { + expect(uploadTo).toHaveBeenCalledTimes(1); + expect(uploadTo).toHaveBeenCalledWith( + "muxer-produced-events-eventbrite", + expect.any(Function), + { pagination: { has_more_items: false, page_count: 1 } } + ); + done(); + }); + }); + }); + + describe("when the results list is paginated into multiple pages", function() { + beforeEach(function() { + getFromWeb + .mockReturnValueOnce( + initialResponse({ events: [{ name: "First Event" }] }) + ) + .mockReturnValueOnce( + initialResponse({ events: [{ name: "Second Event" }] }) + ) + .mockReturnValue(finalResponse({ events: [{ name: "Last Event" }] })); + }); + + it("does not return an error and returns message", function(done) { + producer.produce(event, context, function(err, response) { + expect(err).toBe(null); + expect(response).toEqual({ + message: [ + "path/to/new/file.json", + "path/to/new/file.json", + "path/to/new/file.json" + ] + }); + done(); + }); + }); + + it("makes a request to the API", function(done) { + producer.produce(event, context, function() { + expect(getFromWeb).toHaveBeenCalledTimes(3); + expect(getFromWeb).toHaveBeenCalledWith(apiCallPage(1)); + expect(getFromWeb).toHaveBeenCalledWith(apiCallPage(2)); + expect(getFromWeb).toHaveBeenCalledWith(apiCallPage(3)); + done(); + }); + }); + + it("uploads data", function(done) { + producer.produce(event, context, function() { + expect(uploadTo).toHaveBeenCalledTimes(3); + expect(uploadTo).toHaveBeenCalledWith( + "muxer-produced-events-eventbrite", + expect.any(Function), + { + events: [{ name: "First Event" }], + pagination: { has_more_items: true, page_count: 3 } + } + ); + expect(uploadTo).toHaveBeenCalledWith( + "muxer-produced-events-eventbrite", + expect.any(Function), + { + events: [{ name: "Second Event" }], + pagination: { has_more_items: true, page_count: 3 } + } + ); + expect(uploadTo).toHaveBeenCalledWith( + "muxer-produced-events-eventbrite", + expect.any(Function), + { + events: [{ name: "Last Event" }], + pagination: { has_more_items: false, page_count: 3 } + } + ); + done(); + }); + }); + }); + + describe("when the results list is paginated but there are errors on subsequent requests", function() { + beforeEach(function() { + getFromWeb + .mockReturnValueOnce( + initialResponse({ events: [{ name: "First Event" }] }) + ) + .mockReturnValueOnce(errorResponse({ page: 2 })) + .mockReturnValue(errorResponse({ page: 3 })); + }); + + it("return the errors", function(done) { + producer.produce(event, context, function(err, response) { + expect(err).toEqual([ + { error: "test error", page: 2 }, + { error: "test error", page: 3 } + ]); + expect(response).toBe(null); + done(); + }); + }); + + it("makes a request to the API", function(done) { + producer.produce(event, context, function() { + expect(getFromWeb).toHaveBeenCalledTimes(3); + expect(getFromWeb).toHaveBeenCalledWith(apiCallPage(1)); + expect(getFromWeb).toHaveBeenCalledWith(apiCallPage(2)); + expect(getFromWeb).toHaveBeenCalledWith(apiCallPage(3)); + done(); + }); + }); + + it("does not upload data", function(done) { + producer.produce(event, context, function() { + expect(uploadTo).not.toHaveBeenCalled(); + done(); + }); + }); + }); +}); diff --git a/lambdas/tests/eventbrite/handlers/test-data/events-payload-empty.json b/lambdas/tests/eventbrite/handlers/test-data/events-payload-empty.json new file mode 100644 index 00000000..36ad94bb --- /dev/null +++ b/lambdas/tests/eventbrite/handlers/test-data/events-payload-empty.json @@ -0,0 +1,15 @@ +{ + "pagination": { + "object_count": 0, + "page_number": 1, + "page_size": 0, + "page_count": 1, + "has_more_items": false + }, + "events": [], + "location": { + "latitude": "54.642513", + "within": "96.5606400369", + "longitude": "-6.762739" + } +} diff --git a/lambdas/tests/eventbrite/handlers/test-data/events-payload-incomplete.json b/lambdas/tests/eventbrite/handlers/test-data/events-payload-incomplete.json new file mode 100644 index 00000000..0833f9e3 --- /dev/null +++ b/lambdas/tests/eventbrite/handlers/test-data/events-payload-incomplete.json @@ -0,0 +1,877 @@ +{ + "pagination": { + "object_count": 5, + "page_number": 1, + "page_size": 5, + "page_count": 1, + "has_more_items": false + }, + "events": [ + { + "name": { + "text": "Farset Labs Dojo 2018", + "html": "Farset Labs Dojo 2018" + }, + "description": { + "text": "CoderDojo is a movement orientated around running free not-for-profit coding clubs and regular sessions for young people. Farset Labs’ CoderDojo is run by volunteers from the Farset community and offers a range of computer skills, from web application development to scratch.\nAt a CoderDojo, young people learn how to code, develop websites, apps, programs, games and more. Dojos are set up, run by and taught at by volunteers. In addition to learning to code, members meet like minded people, show off what they’ve been working on and so on. CoderDojo makes development and learning to code a fun, sociable, kick ass experience.\nCoderDojo also puts a strong emphasis on open source and free software, and has a strong network of members and volunteers globally. CoderDojo has just one rule: “Above All: Be Cool“, bullying, lying, wasting people’s time and so on is uncool.\nIt also provides essential teaching and mentorship experience for budding software developers; after all, to teach is to learn twice! And you don’t have to be a hardcore code-hacker to mentor; anyone can help to guide these kids through the processes of problem solving, breaking down tasks, thinking in a stepwise fashion, or just picking out the killer-spelling-mistakes like variable names or missing semi-colons!\nFor more information about Coder Dojo, check out the CoderDojo global webpage.\nYou can also follow us on Twitter and Facebook\n\nWhat should I bring to the event?\nIf you can, please bring your own laptop.\nCan I join as a mentor/volunteer?\nYes! We always appreciate more hands on deck, but we do need to put people through a short induction/training programme first, so get in touch with us on dojo@farsetlabs.org.uk and we can add you to the next induction stream.\nI can’t make it, what can I do to help?\nIf you can’t make it to our Dojo, consider some of the other Dojos in Northern Ireland, like at BMC in Belfast,Ballymena, or the brand new Dojo in Newry.\nIf you just want to support our event here at Farset Labs, please consider making a donation to the charity and mention in your donation that you wish it to go to fund refreshments, resources, materials, and equipment for the Dojo.\nIs there an age limit to enter the event?\nCoderDojo is aimed loosely at the under 18’s, but any child younger than 14 must be accompanied by a parent or guardian and that guardian must stay on-site for the duration of the event\nWhat are my transport/parking options getting to the event?\nWe’re 5 minutes walk from Europa Bus Centre, and Parking is available all across the Weavers Court Campus\nIs there a charge for the event\nFarset Labs’ members operate the CoderDojo for free for all attendees, but donations to cover operating costs are greatly appreciated.\nWhat Child Protection Policies are in place?\nOnly those registered may attend, including mentors. For full details, see Farset Labs’ Child Protection Policy. At the lead mentors’ discretion, the event space may be sealed off from the rest of the space.", + "html": "

CoderDojo is a movement orientated around running free not-for-profit coding clubs and regular sessions for young people. Farset Labs’ CoderDojo is run by volunteers from the Farset community and offers a range of computer skills, from web application development to scratch.

\n

At a CoderDojo, young people learn how to code, develop websites, apps, programs, games and more. Dojos are set up, run by and taught at by volunteers. In addition to learning to code, members meet like minded people, show off what they’ve been working on and so on. CoderDojo makes development and learning to code a fun, sociable, kick ass experience.

\n

CoderDojo also puts a strong emphasis on open source and free software, and has a strong network of members and volunteers globally. CoderDojo has just one rule: “Above All: Be Cool“, bullying, lying, wasting people’s time and so on is uncool.

\n

It also provides essential teaching and mentorship experience for budding software developers; after all, to teach is to learn twice! And you don’t have to be a hardcore code-hacker to mentor; anyone can help to guide these kids through the processes of problem solving, breaking down tasks, thinking in a stepwise fashion, or just picking out the killer-spelling-mistakes like variable names or missing semi-colons!

\n

For more information about Coder Dojo, check out the CoderDojo global webpage.

\n

You can also follow us on Twitter and Facebook

\n


\n

What should I bring to the event?

\n

If you can, please bring your own laptop.

\n

Can I join as a mentor/volunteer?

\n

Yes! We always appreciate more hands on deck, but we do need to put people through a short induction/training programme first, so get in touch with us on dojo@farsetlabs.org.uk and we can add you to the next induction stream.

\n

I can’t make it, what can I do to help?

\n

If you can’t make it to our Dojo, consider some of the other Dojos in Northern Ireland, like at BMC in Belfast,Ballymena, or the brand new Dojo in Newry.

\n

If you just want to support our event here at Farset Labs, please consider making a donation to the charity and mention in your donation that you wish it to go to fund refreshments, resources, materials, and equipment for the Dojo.

\n

Is there an age limit to enter the event?

\n

CoderDojo is aimed loosely at the under 18’s, but any child younger than 14 must be accompanied by a parent or guardian and that guardian must stay on-site for the duration of the event

\n

What are my transport/parking options getting to the event?

\n

We’re 5 minutes walk from Europa Bus Centre, and Parking is available all across the Weavers Court Campus

\n

Is there a charge for the event

\n

Farset Labs’ members operate the CoderDojo for free for all attendees, but donations to cover operating costs are greatly appreciated.

\n

What Child Protection Policies are in place?

\n

Only those registered may attend, including mentors. For full details, see Farset Labs’ Child Protection Policy. At the lead mentors’ discretion, the event space may be sealed off from the rest of the space.

" + }, + "id": "42152220426", + "url": "https://www.eventbrite.co.uk/e/farset-labs-dojo-2018-tickets-42152220426?aff=ebapi", + "start": { + "timezone": "Europe/London", + "local": "2018-11-02T19:00:00", + "utc": "2018-11-02T19:00:00Z" + }, + "end": { + "timezone": "Europe/London", + "local": "2018-11-02T21:00:00", + "utc": "2018-11-02T21:00:00Z" + }, + "organization_id": "32416783101", + "created": "2018-01-13T13:42:41Z", + "changed": "2018-01-13T13:42:44Z", + "capacity": null, + "capacity_is_custom": null, + "status": "live", + "currency": "GBP", + "listed": true, + "shareable": true, + "online_event": false, + "tx_time_limit": 480, + "hide_start_date": false, + "hide_end_date": false, + "locale": "en_GB", + "is_locked": false, + "privacy_setting": "unlocked", + "is_series": true, + "is_series_parent": false, + "is_reserved_seating": false, + "show_pick_a_seat": false, + "show_seatmap_thumbnail": false, + "show_colors_in_seatmap_thumbnail": false, + "source": "create_2.0", + "is_free": false, + "version": "3.0.0", + "logo_id": "39574425", + "organizer_id": "2238451237", + "venue_id": "22807212", + "category_id": "102", + "subcategory_id": null, + "format_id": "9", + "resource_uri": "https://www.eventbriteapi.com/v3/events/42152220426/", + "is_externally_ticketed": false, + "series_id": "42152165261", + "category": { + "resource_uri": "https://www.eventbriteapi.com/v3/categories/102/", + "id": "102", + "name": "Science & Technology", + "name_localized": "Science & Technology", + "short_name": "Science & Tech", + "short_name_localized": "Science & Tech" + }, + "subcategory": null, + "format": { + "resource_uri": "https://www.eventbriteapi.com/v3/formats/9/", + "id": "9", + "name": "Class, Training, or Workshop", + "name_localized": "Class, Training, or Workshop", + "short_name": "Class", + "short_name_localized": "Class" + }, + "venue": { + "address": { + "address_1": "Weavers Court", + "address_2": "Linfield Industrial Estate", + "city": "", + "region": "Co Antrim", + "postal_code": "BT12 5GH", + "country": "", + "latitude": "54.591804", + "longitude": "-5.942264000000023", + "localized_address_display": "Weavers Court Linfield Industrial Estate, Belfast, BT12 5GH", + "localized_area_display": "Belfast", + "localized_multi_line_address_display": [ + "Weavers Court", + "Linfield Industrial Estate", + "Belfast", + "BT12 5GH" + ] + }, + "resource_uri": "https://www.eventbriteapi.com/v3/venues/22807212/", + "id": "22807212", + "age_restriction": null, + "capacity": null, + "name": "", + "latitude": "54.591804", + "longitude": "-5.942264000000023" + }, + "refund_policy": { + "refund_policy": "not_defined" + }, + "bookmark_info": { + "bookmarked": false + }, + "organizer": { + "description": { + "text": "Farset Labs is a makerspace that provides a hub of creativity, technological innovation and entrepreneurship for local professionals, students and interested hobbyists in Belfast City Centre.\r\nFor a low membership fee, students, professionals, and all members of the local community will be able to congregate at their convenience at the Farset Labs premises, to discuss ideas and concepts with fellow members, and use communal manufacturing equipment, computing facilities and electronic resources to help bring their ideas to fruition.", + "html": "

Farset Labs is a makerspace that provides a hub of creativity, technological innovation and entrepreneurship for local professionals, students and interested hobbyists in Belfast City Centre.

\r\n

For a low membership fee, students, professionals, and all members of the local community will be able to congregate at their convenience at the Farset Labs premises, to discuss ideas and concepts with fellow members, and use communal manufacturing equipment, computing facilities and electronic resources to help bring their ideas to fruition.

" + }, + "long_description": { + "text": "Farset Labs is a makerspace that provides a hub of creativity, technological innovation and entrepreneurship for local professionals, students and interested hobbyists in Belfast City Centre.\r\nFor a low membership fee, students, professionals, and all members of the local community will be able to congregate at their convenience at the Farset Labs premises, to discuss ideas and concepts with fellow members, and use communal manufacturing equipment, computing facilities and electronic resources to help bring their ideas to fruition.", + "html": "

Farset Labs is a makerspace that provides a hub of creativity, technological innovation and entrepreneurship for local professionals, students and interested hobbyists in Belfast City Centre.

\r\n

For a low membership fee, students, professionals, and all members of the local community will be able to congregate at their convenience at the Farset Labs premises, to discuss ideas and concepts with fellow members, and use communal manufacturing equipment, computing facilities and electronic resources to help bring their ideas to fruition.

" + }, + "logo": { + "crop_mask": null, + "original": null, + "id": "482310", + "url": "https://cdn.evbuc.com/images/482310/32416783101/2/logo.png", + "aspect_ratio": null, + "edge_color": null, + "edge_color_set": null + }, + "resource_uri": "https://www.eventbriteapi.com/v3/organizers/2238451237/", + "id": "2238451237", + "name": "Farset Labs", + "url": "https://www.eventbrite.co.uk/o/farset-labs-2238451237", + "vanity_url": "http://farsetlabs.eventbrite.com", + "num_past_events": 59, + "num_future_events": 2, + "twitter": "FarsetLabs", + "facebook": "farsetlabs", + "instagram": "2238205448", + "logo_id": "482310" + }, + "ticket_availability": { + "has_available_tickets": true, + "minimum_ticket_price": { + "currency": "GBP", + "value": 0, + "major_value": "0.00", + "display": "0.00 GBP" + }, + "maximum_ticket_price": { + "currency": "GBP", + "value": 0, + "major_value": "0.00", + "display": "0.00 GBP" + }, + "is_sold_out": false, + "start_sales_date": null + }, + "logo": { + "crop_mask": { + "top_left": { + "x": 0, + "y": 66 + }, + "width": 800, + "height": 400 + }, + "original": { + "url": "https://img.evbuc.com/https%3A%2F%2Fcdn.evbuc.com%2Fimages%2F39574425%2F32416783101%2F1%2Foriginal.jpg?auto=compress&s=4855c40b0a3657500da81dbc0538485a", + "width": null, + "height": null + }, + "id": "39574425", + "url": "https://img.evbuc.com/https%3A%2F%2Fcdn.evbuc.com%2Fimages%2F39574425%2F32416783101%2F1%2Foriginal.jpg?h=200&w=450&auto=compress&rect=0%2C66%2C800%2C400&s=bd31fd7b61b36c0b8b61d2d1e03154d0", + "aspect_ratio": "2", + "edge_color": "#776656", + "edge_color_set": true + } + }, + { + "name": { + "text": "Northern Ireland Raspberry Jam - November 2018 - 6th Birthday!", + "html": "Northern Ireland Raspberry Jam - November 2018 - 6th Birthday!" + }, + "description": { + "text": "It's our Birthday! The NI Raspberry Jam is turning 6!\n\nCome one, come all to the Northern Ireland Raspberry Jam!\nIn collaboration with the School of Physics and Mathematics at Queens, Farset Labs and the Northern Ireland Raspberry Jam team, these free monthly events involve tinkering, coding, electronics and generally just having a stack of fun making stuff!Whether you want to try out computer programming for the first time, hack some electronics or just generally have some fun inventing, we have something for everyone!All equipment is provided and we have activities for ages 6-106, from complete beginners right up to seasoned Pi experts. Plus, like all our Raspberry Jam events, it is completely free!So what are you waiting for?\n\nFAQ\nWhat is a Raspberry Jam?\nA Raspberry Jam is an event for kids/adults of all ages to come together and learn a bit more about the Raspberry Pi and coding/electronics in general.\nI have no previous experience with coding/electronics/Raspberry Pi?\nThat is no problem! All our Raspberry Jams are suited for beginners, right up to Pi exports, plus all equipment is provided. All you need to bring is yourself.\nHow can I get there? Can I take public transport?\nThe new Maths and Physics Teaching Building is very easy to get to by car, or by public transport.\nBy car\nPark at the McClay Library car pack. If it is full, then there is plenty of additional car parking in the surrounding side streets.\n\nBy train\nTravel to Botanic station, then walk up Botanic street towards Queens University. The new Physics Teaching Building is directly opposite the entrance to the McClay library.\n\nHow often to do these Raspberry Jam events run?\nThe Northern Ireland Raspberry Jam runs on the 2nd Saturday of every month (excluding July/August) throughout the year. They are free as well and involve new workshops/activities each month. Details - https://niraspberryjam.eventbrite.co.uk.\nYou can also add our provisional future Jams calendar to yours by clicking here (or simply view it here).\n\nWhat age range is this event suitable for?\nAll of our Raspberry Jam events are suitable for kids as young as 6, right up to adults of 106! Although the majority of the attendees at the Raspberry Jam events are young people, they are open to adults as well, especially parents of kids attending.\nNote - By attending this event, you provide express permission to photographs/videos being taken and used by the Northern Ireland Raspberry Jam team. If this is an issue, please inform one of the team on your arrival.\n\n\nNote that normal Farset Labs Child Protection policy applies. This includes that all children under the age of 14 must have a designated guardian in on site for the entire event.\nWe also require children aged between 14 and 17 (inclusive) parents are within 10 minutes from venue and can be easily contactable in event of an emergency.\n\nThis event is run in collaboration with the School of Mathematics and Physics at Queens University and the School of Electronics, Electrical Engineering and Computer Science at Queens University.\nThe Northern Ireland Raspberry Jam wouldn't be possible without support from Institution of Engineering and Technology, Institution of Mechanical Engineers, Northern Ireland Department of Communities, Nitec Solutions and Farset Labs.", + "html": "

It's our Birthday! The NI Raspberry Jam is turning 6!

\n


\n

Come one, come all to the Northern Ireland Raspberry Jam!

\n

In collaboration with the School of Physics and Mathematics at Queens, Farset Labs and the Northern Ireland Raspberry Jam team, these free monthly events involve tinkering, coding, electronics and generally just having a stack of fun making stuff!
Whether you want to try out computer programming for the first time, hack some electronics or just generally have some fun inventing, we have something for everyone!

All equipment is provided and we have activities for ages 6-106, from complete beginners right up to seasoned Pi experts. Plus, like all our Raspberry Jam events, it is completely free!
So what are you waiting for?

\n

\"Young

\n

FAQ

\n

What is a Raspberry Jam?

\n

A Raspberry Jam is an event for kids/adults of all ages to come together and learn a bit more about the Raspberry Pi and coding/electronics in general.

\n

I have no previous experience with coding/electronics/Raspberry Pi?

\n

That is no problem! All our Raspberry Jams are suited for beginners, right up to Pi exports, plus all equipment is provided. All you need to bring is yourself.

\n

How can I get there? Can I take public transport?

\n

The new Maths and Physics Teaching Building is very easy to get to by car, or by public transport.

\n

By car

\n

Park at the McClay Library car pack. If it is full, then there is plenty of additional car parking in the surrounding side streets.

\n

\"Car

\n

By train

\n

Travel to Botanic station, then walk up Botanic street towards Queens University. The new Physics Teaching Building is directly opposite the entrance to the McClay library.

\n

\"Public

\n

How often to do these Raspberry Jam events run?

\n

The Northern Ireland Raspberry Jam runs on the 2nd Saturday of every month (excluding July/August) throughout the year. They are free as well and involve new workshops/activities each month. Details - https://niraspberryjam.eventbrite.co.uk.

\n

You can also add our provisional future Jams calendar to yours by clicking here (or simply view it here).

\n

\"Adult

\n

What age range is this event suitable for?

\n

All of our Raspberry Jam events are suitable for kids as young as 6, right up to adults of 106! Although the majority of the attendees at the Raspberry Jam events are young people, they are open to adults as well, especially parents of kids attending.

\n

Note - By attending this event, you provide express permission to photographs/videos being taken and used by the Northern Ireland Raspberry Jam team. If this is an issue, please inform one of the team on your arrival.

\n

\"Young

\n


\n

Note that normal Farset Labs Child Protection policy applies. This includes that all children under the age of 14 must have a designated guardian in on site for the entire event.

\n

We also require children aged between 14 and 17 (inclusive) parents are within 10 minutes from venue and can be easily contactable in event of an emergency.

\n


\n

This event is run in collaboration with the School of Mathematics and Physics at Queens University and the School of Electronics, Electrical Engineering and Computer Science at Queens University.

\n

The Northern Ireland Raspberry Jam wouldn't be possible without support from Institution of Engineering and Technology, Institution of Mechanical EngineersNorthern Ireland Department of Communities, Nitec Solutions and Farset Labs.

" + }, + "id": "51292098046", + "url": null, + "vanity_url": "https://niraspberryjam-november-2018.eventbrite.co.uk", + "start": { + "timezone": "Europe/London", + "local": "2018-11-10T13:00:00", + "utc": "2018-11-10T13:00:00Z" + }, + "end": { + "timezone": "Europe/London", + "local": "2018-11-10T17:00:00", + "utc": "2018-11-10T17:00:00Z" + }, + "organization_id": "200379386367", + "created": "2018-10-11T14:15:46Z", + "changed": "2018-10-11T14:21:59Z", + "capacity": null, + "capacity_is_custom": null, + "status": "live", + "currency": "GBP", + "listed": true, + "shareable": true, + "online_event": false, + "tx_time_limit": 480, + "hide_start_date": false, + "hide_end_date": false, + "locale": "en_GB", + "is_locked": false, + "privacy_setting": "unlocked", + "is_series": false, + "is_series_parent": false, + "is_reserved_seating": false, + "show_pick_a_seat": false, + "show_seatmap_thumbnail": false, + "show_colors_in_seatmap_thumbnail": false, + "source": "create_2.0", + "is_free": true, + "version": "3.0.0", + "logo_id": "51160475", + "organizer_id": "12781086687", + "venue_id": "18130630", + "category_id": "102", + "subcategory_id": null, + "format_id": "9", + "resource_uri": "https://www.eventbriteapi.com/v3/events/51292098046/", + "is_externally_ticketed": false, + "category": { + "resource_uri": "https://www.eventbriteapi.com/v3/categories/102/", + "id": "102", + "name": "Science & Technology", + "name_localized": "Science & Technology", + "short_name": "Science & Tech", + "short_name_localized": "Science & Tech" + }, + "subcategory": null, + "format": { + "resource_uri": "https://www.eventbriteapi.com/v3/formats/9/", + "id": "9", + "name": "Class, Training, or Workshop", + "name_localized": "Class, Training, or Workshop", + "short_name": "Class", + "short_name_localized": "Class" + }, + "venue": { + "address": { + "address_1": "Queens University", + "address_2": "7-9 College Park E,", + "city": "Belfast", + "region": "Northern Ireland", + "postal_code": "BT7 1PS", + "country": "GB", + "latitude": "54.58392929999999", + "longitude": "-5.931720000000041", + "localized_address_display": "Queens University 7-9 College Park E,, Belfast, BT7 1PS", + "localized_area_display": "Belfast", + "localized_multi_line_address_display": [ + "Queens University", + "7-9 College Park E", + "Belfast", + "BT7 1PS" + ] + }, + "resource_uri": "https://www.eventbriteapi.com/v3/venues/18130630/", + "id": "18130630", + "age_restriction": null, + "capacity": null, + "name": "School of Maths and Physics Teaching Centre", + "latitude": "54.58392929999999", + "longitude": "-5.931720000000041" + }, + "refund_policy": { + "refund_policy": "not_defined" + }, + "bookmark_info": { + "bookmarked": false + }, + "organizer": { + "description": { + "text": " The Northern Ireland Raspberry Jam is a volunteer group of makers, tinkerers and inventors who in collaboration with Farset Labs, Queens University and a number of other organisations, run regular and free Raspberry Jams (coding/tinkering events using the Raspberry Pi computer) in Northern Ireland.\r\n ", + "html": "

The Northern Ireland Raspberry Jam is a volunteer group of makers, tinkerers and inventors who in collaboration with Farset Labs, Queens University and a number of other organisations, run regular and free Raspberry Jams (coding/tinkering events using the Raspberry Pi computer) in Northern Ireland.

\r\n " + }, + "long_description": { + "text": "The Northern Ireland Raspberry Jam is a volunteer group of makers, tinkerers and inventors who in collaboration with Farset Labs, Queens University and a number of other organisations, run regular and free Raspberry Jams (coding/tinkering events using the Raspberry Pi computer) in Northern Ireland.", + "html": "

The Northern Ireland Raspberry Jam is a volunteer group of makers, tinkerers and inventors who in collaboration with Farset Labs, Queens University and a number of other organisations, run regular and free Raspberry Jams (coding/tinkering events using the Raspberry Pi computer) in Northern Ireland.

" + }, + "logo": { + "crop_mask": null, + "original": null, + "id": "27794517", + "url": "https://cdn.evbuc.com/images/27794517/200379386367/2/logo.jpg", + "aspect_ratio": null, + "edge_color": null, + "edge_color_set": null + }, + "resource_uri": "https://www.eventbriteapi.com/v3/organizers/12781086687/", + "id": "12781086687", + "name": "Northern Ireland Raspberry Jam", + "url": "https://www.eventbrite.co.uk/o/northern-ireland-raspberry-jam-12781086687", + "vanity_url": "http://nijam.eventbrite.com", + "num_past_events": 19, + "num_future_events": 2, + "twitter": "niraspjam", + "logo_id": "27794517" + }, + "ticket_availability": { + "has_available_tickets": true, + "minimum_ticket_price": { + "currency": "GBP", + "value": 0, + "major_value": "0.00", + "display": "0.00 GBP" + }, + "maximum_ticket_price": { + "currency": "GBP", + "value": 0, + "major_value": "0.00", + "display": "0.00 GBP" + }, + "is_sold_out": false, + "start_sales_date": { + "timezone": "Europe/London", + "local": "2018-10-13T15:00:00", + "utc": "2018-10-13T14:00:00Z" + } + }, + "logo": { + "crop_mask": { + "top_left": { + "x": 0, + "y": 145 + }, + "width": 3000, + "height": 1500 + }, + "original": { + "url": "https://img.evbuc.com/https%3A%2F%2Fcdn.evbuc.com%2Fimages%2F51160475%2F200379386367%2F1%2Foriginal.jpg?auto=compress&s=ceea246e5556a880a8396ccabf646b92", + "width": 3000, + "height": 2000 + }, + "id": "51160475", + "url": "https://img.evbuc.com/https%3A%2F%2Fcdn.evbuc.com%2Fimages%2F51160475%2F200379386367%2F1%2Foriginal.jpg?h=200&w=450&auto=compress&rect=0%2C145%2C3000%2C1500&s=295a58b4c6582d863fc1d57495ed1d49", + "aspect_ratio": "2", + "edge_color": "#847672", + "edge_color_set": true + } + }, + { + "name": { + "text": "Holywood Code Club - Saturday 10th November", + "html": "Holywood Code Club - Saturday 10th November" + }, + "description": { + "text": "Come join us at CodeClub Holywood!\nLet your creativity have a stretch…… CodeClub is a volunteer lead, global movement running free coding clubs for young people. \n7-17 year olds of all abilities welcome. All young people must be accompanied by a responsible adult for the duration of the session.\n\n\nLearn to Code\n\n\n\nBuild websites\n\n\nMake games\n\n\nCreate apps for your phone\n\n\n\nFun & Social\n\n\nMake Friends\n\n\nGet inspired by technology\n\n\nMentors there to help\n\n\nFree\n\n\nPlease bring:\n\n\na laptop if you have one but don't worry if you don't as one can be provided on the day\n\n\na set of headphones\n\n", + "html": "

Come join us at CodeClub Holywood!

\n

Let your creativity have a stretch…… CodeClub is a volunteer lead, global movement running free coding clubs for young people. 

\n

7-17 year olds of all abilities welcome. All young people must be accompanied by a responsible adult for the duration of the session.

\n\n

Please bring:

\n" + }, + "id": "47149148372", + "url": "https://www.eventbrite.co.uk/e/holywood-code-club-saturday-10th-november-registration-47149148372?aff=ebapi", + "start": { + "timezone": "Europe/London", + "local": "2018-11-10T13:30:00", + "utc": "2018-11-10T13:30:00Z" + }, + "end": { + "timezone": "Europe/London", + "local": "2018-11-10T15:00:00", + "utc": "2018-11-10T15:00:00Z" + }, + "organization_id": "202325275908", + "created": "2018-06-17T21:28:44Z", + "changed": "2018-06-17T21:29:45Z", + "capacity": null, + "capacity_is_custom": null, + "status": "live", + "currency": "GBP", + "listed": true, + "shareable": true, + "online_event": false, + "tx_time_limit": 480, + "hide_start_date": false, + "hide_end_date": false, + "locale": "en_GB", + "is_locked": false, + "privacy_setting": "unlocked", + "is_series": false, + "is_series_parent": false, + "is_reserved_seating": false, + "show_pick_a_seat": false, + "show_seatmap_thumbnail": false, + "show_colors_in_seatmap_thumbnail": false, + "source": "create_2.0", + "is_free": true, + "version": "3.0.0", + "logo_id": "46203979", + "organizer_id": "12884057472", + "venue_id": "18686663", + "category_id": "102", + "subcategory_id": null, + "format_id": "9", + "resource_uri": "https://www.eventbriteapi.com/v3/events/47149148372/", + "is_externally_ticketed": false, + "category": { + "resource_uri": "https://www.eventbriteapi.com/v3/categories/102/", + "id": "102", + "name": "Science & Technology", + "name_localized": "Science & Technology", + "short_name": "Science & Tech", + "short_name_localized": "Science & Tech" + }, + "subcategory": null, + "format": { + "resource_uri": "https://www.eventbriteapi.com/v3/formats/9/", + "id": "9", + "name": "Class, Training, or Workshop", + "name_localized": "Class, Training, or Workshop", + "short_name": "Class", + "short_name_localized": "Class" + }, + "venue": { + "address": { + "address_1": "Knocknagoney Rd ", + "address_2": null, + "city": "Belfast", + "region": "Antrim", + "postal_code": "BT4 2PW", + "country": "GB", + "latitude": "54.6176244", + "longitude": "-5.8542112999999745", + "localized_address_display": "Knocknagoney Rd , Belfast, BT4 2PW", + "localized_area_display": "Belfast", + "localized_multi_line_address_display": [ + "Knocknagoney Rd", + "Belfast", + "BT4 2PW" + ] + }, + "resource_uri": "https://www.eventbriteapi.com/v3/venues/18686663/", + "id": "18686663", + "age_restriction": null, + "capacity": null, + "name": "Community Room - Tesco Extra Knocknagoney", + "latitude": "54.6176244", + "longitude": "-5.8542112999999745" + }, + "refund_policy": { + "refund_policy": "not_defined" + }, + "bookmark_info": { + "bookmarked": false + }, + "organizer": { + "description": { + "text": "CodeClub Holywood is a new group of volunteers who are all keen to help children and young people aware of the value and fun of being able to code.", + "html": "

CodeClub Holywood is a new group of volunteers who are all keen to help children and young people aware of the value and fun of being able to code.

" + }, + "long_description": { + "text": "Come join us at CodeClub Holywood!Let your creativity have a stretch…… CodeClub is a volunteer lead, global movement running free coding clubs for young people.7-17 year olds of all abilities welcome. All young people under the age of 15 must be accompanied by a responsible adult for the duration of the session.\r\n\r\nLearn to Code\r\nBuild websites\r\nMake games\r\nCreate apps for your phone\r\nFun & Social\r\nMake Friends\r\nGet inspired by technology\r\nMentors there to help\r\nFree\r\n\r\n \r\nPlease bring:\r\n\r\na laptop if you have one but don't worry if you don't as one can be provided on the day\r\na set of headphones\r\n\r\n \r\nVisit our facebook page to see more information about what we get up to and for our data processing policy.\r\n \r\n \r\n ", + "html": "

Come join us at CodeClub Holywood!

Let your creativity have a stretch…… CodeClub is a volunteer lead, global movement running free coding clubs for young people.

7-17 year olds of all abilities welcome. All young people under the age of 15 must be accompanied by a responsible adult for the duration of the session.

\r\n\r\n

 

\r\n

Please bring:

\r\n\r\n

 

\r\n

Visit our facebook page to see more information about what we get up to and for our data processing policy.

\r\n

 

\r\n

 

\r\n

 

" + }, + "logo": null, + "resource_uri": "https://www.eventbriteapi.com/v3/organizers/12884057472/", + "id": "12884057472", + "name": "Code Club Holywood", + "url": "https://www.eventbrite.co.uk/o/code-club-holywood-12884057472", + "num_past_events": 30, + "num_future_events": 4, + "twitter": "codeclubhwood", + "facebook": "codeclubholywood", + "logo_id": null + }, + "ticket_availability": { + "has_available_tickets": true, + "minimum_ticket_price": { + "currency": "GBP", + "value": 0, + "major_value": "0.00", + "display": "0.00 GBP" + }, + "maximum_ticket_price": { + "currency": "GBP", + "value": 0, + "major_value": "0.00", + "display": "0.00 GBP" + }, + "is_sold_out": false, + "start_sales_date": { + "timezone": "Europe/London", + "local": "2018-10-22T09:30:00", + "utc": "2018-10-22T08:30:00Z" + } + }, + "logo": { + "crop_mask": { + "top_left": { + "x": 23, + "y": 135 + }, + "width": 446, + "height": 223 + }, + "original": { + "url": "https://img.evbuc.com/https%3A%2F%2Fcdn.evbuc.com%2Fimages%2F46203979%2F202325275908%2F1%2Foriginal.jpg?auto=compress&s=6243ca54da44a4d699eef8fdcd5154f3", + "width": 500, + "height": 500 + }, + "id": "46203979", + "url": "https://img.evbuc.com/https%3A%2F%2Fcdn.evbuc.com%2Fimages%2F46203979%2F202325275908%2F1%2Foriginal.jpg?h=200&w=450&auto=compress&rect=23%2C135%2C446%2C223&s=d7955c91802a83c7da2e4289dcd01d6d", + "aspect_ratio": "2", + "edge_color": null, + "edge_color_set": true + } + }, + { + "name": { + "text": "Product Management Essentials 102 Training Workshop - Belfast", + "html": "Product Management Essentials 102 Training Workshop - Belfast" + }, + "description": { + "text": "Increasing your strategic impact as a product manager\nTraining Workshop Overview\nEssentials 102  is an overview course intended for confident product managers who are looking to increase their strategic skills and influence. The intention of this course is to help product managers build a strategic layer onto their core product practices, and focus on the soft skills and influencing tactics that are often needed to ensure effective product delivery.  It seeks to answer the questions:\n\nHow can product managers increase organisational understanding of product practice?\nWhat parts of their process can be used as tools for increased alignment?\nHow can product teams craft an evidence-driven product vision and ensure buy-in?\n\nThis course is centered on the senior product manager’s role between the product team and the broader business. In order for teams to deliver effectively, they need buy-in and support from their stakeholders. Participants will gain an understanding of how to sharpen their product practice so that it becomes an alignment and educational tool.  \n\nWhat we’ll cover on the day\nEssentials 102 is a full-day workshop comprised of six modules. Each module includes a lecture component on theory and practice interspersed with up to three hands-on activities. This ensures that participants have an opportunity to apply and work with concepts in a setting that will answer questions and facilitate critical thinking. The following modules will be covered:\n\nEvaluating opportunity: Understanding how to unpack product assumptions and line up macro data to establish product viability and the foundations for product/market fit\nImplementing user research: Breaks down the components of running a user research round and what is needed to ensure maximum value of the time invested\nResearch techniques: Reviewing a range of research methodologies, beyond the classic interview, that help product teams validate problem and solution\nSynthesis: Distilling insights from research and how to collaborate with stakeholders to deepen user understanding and influence\nPrioritisation: Covering a range of techniques and their uses for alignment at points of product development lifecycle\nStakeholder management: A deep-dive into organizational relationships and understanding how to build a communication strategy\n\n\n\nMind the Product Trainers\nEvery Mind the Product trainer is a working product manager who has worked with multiple products and domains. Your trainer’s product management experience enriches the curriculum by delivering diverse perspectives on best practice in different scenarios. You will hear about the products they have worked on in the past, what went well, what didn’t go so well, and how they tried to make improvements. Our trainers’ main goal is not to provide participants with all of the answers, but help facilitate them in asking the right questions.  \n\nAbout Your Trainers\n\nEmma Mulholland, Senior Product Manager\nEmma has over 11 years' experience in Product. Recently joining ShopKeep as a Product Manager, Emma previously worked in an XP (extreme programming) lab for Allstate where she has used lean techniques and Design Thinking to solve business problems across the enterprise. Prior to that Emma worked as a Product Manager in eCommerce, working on the Search and User Experience for Marks and Spencer, and Tesco. She's a founder/organiser of ProductTank Belfast, and in her spare time loves being outdoors running, cycling and hiking. \nGraeme Stuart, Head of Product\nGraeme has over 14 years core product experience from startups through scale-ups to enterprise. He currently works as VP Product at Deep-Labs.com where his team is building a platform next generation risk mitigation & hyper-personalized consumer experiences through deep identity management. He loves bringing new initiatives to market and at the same time, building out product expertise in companies who hadn’t valued it before. He’s passionate in telling anyone who will listen that Belfast can provide global product expertise not only talented, well-priced engineers. Graeme advises startups wanting to scale & wanting to dip their toe into product management. He is a co-founder & organiser of ProductTank Belfast. He also tries to spend quality time with his family & play any sport in the little spare time he has.\n\n\nAgenda\n\n\nRegistration will begin at 9.00\n\n\nClass will start at 9.30 sharp and end at 17.00\n\n\nWe'll also provide a light breakfast, buffet lunch and plenty of tea and coffee to fuel you through the day.\n\n\n\nFrequently Asked Questions\nCan I change the name or other details on my tickets?Yes, but only the person who purchased the ticket can make these changes on Eventbrite. You are free to change your ticket details up to two days before the event, including name, title, etc. Please make sure these details are correct as they will be what we show on your badge! Just login to Eventbrite and make the changes, following these instructions. If you can’t reach the person who purchased the ticket in order to get them to change the information please contact us on tickets@mindtheproduct.com and we will help you make the updates.\nCan I get a refund?We offer a full refund up to one month before the event. Simply log in to Eventbrite and request the refund following these instructions. As with changes, only the person who purchased the tickets can request a refund.\nCan I pay by invoice?As we are a small team we only offer payment by invoice if you are buying 5 tickets or more due to the additional overhead. Early Bird conference tickets cannot be purchased by invoice. Please also note that no tickets are held/issued until payment of the invoice has been received.  Request to pay by invoice by emailing tickets@mindtheproduct.com\n\nTickets are not held until payment has been made – there are no exceptions to this.\nWe cannot agree to any terms and conditions associated with Purchase Order numbers or other supplier agreements.\nWe do not fill in supplier detail forms for ticket invoices – if you cannot find details you require on our website – please ask.\n\n\nFrequently Asked Questions | Terms & Conditions  |  Code of Conduct  |  Privacy Policy\n\n", + "html": "

Increasing your strategic impact as a product manager

\n

Training Workshop Overview

\n

Essentials 102  is an overview course intended for confident product managers who are looking to increase their strategic skills and influence. The intention of this course is to help product managers build a strategic layer onto their core product practices, and focus on the soft skills and influencing tactics that are often needed to ensure effective product delivery.  It seeks to answer the questions:

\n\n

This course is centered on the senior product manager’s role between the product team and the broader business. In order for teams to deliver effectively, they need buy-in and support from their stakeholders. Participants will gain an understanding of how to sharpen their product practice so that it becomes an alignment and educational tool.  

\n


\n

What we’ll cover on the day

\n

Essentials 102 is a full-day workshop comprised of six modules. Each module includes a lecture component on theory and practice interspersed with up to three hands-on activities. This ensures that participants have an opportunity to apply and work with concepts in a setting that will answer questions and facilitate critical thinking. The following modules will be covered:

\n\n


\n
\n

Mind the Product Trainers

\n

Every Mind the Product trainer is a working product manager who has worked with multiple products and domains. Your trainer’s product management experience enriches the curriculum by delivering diverse perspectives on best practice in different scenarios. You will hear about the products they have worked on in the past, what went well, what didn’t go so well, and how they tried to make improvements. Our trainers’ main goal is not to provide participants with all of the answers, but help facilitate them in asking the right questions.  

\n


\n

About Your Trainers

\n
\n

Emma Mulholland, Senior Product Manager

\n

Emma has over 11 years' experience in Product. Recently joining ShopKeep as a Product Manager, Emma previously worked in an XP (extreme programming) lab for Allstate where she has used lean techniques and Design Thinking to solve business problems across the enterprise. Prior to that Emma worked as a Product Manager in eCommerce, working on the Search and User Experience for Marks and Spencer, and Tesco. She's a founder/organiser of ProductTank Belfast, and in her spare time loves being outdoors running, cycling and hiking. 

\n

Graeme Stuart, Head of Product

\n

Graeme has over 14 years core product experience from startups through scale-ups to enterprise. He currently works as VP Product at Deep-Labs.com where his team is building a platform next generation risk mitigation & hyper-personalized consumer experiences through deep identity management. He loves bringing new initiatives to market and at the same time, building out product expertise in companies who hadn’t valued it before. He’s passionate in telling anyone who will listen that Belfast can provide global product expertise not only talented, well-priced engineers. Graeme advises startups wanting to scale & wanting to dip their toe into product management. He is a co-founder & organiser of ProductTank Belfast. He also tries to spend quality time with his family & play any sport in the little spare time he has.

\n


\n
\n

Agenda

\n\n

We'll also provide a light breakfast, buffet lunch and plenty of tea and coffee to fuel you through the day.

\n


\n


\n
\n

Frequently Asked Questions

\n

Can I change the name or other details on my tickets?
Yes, but only the person who purchased the ticket can make these changes on Eventbrite. You are free to change your ticket details up to two days before the event, including name, title, etc. Please make sure these details are correct as they will be what we show on your badge! Just login to Eventbrite and make the changes, following these instructions. If you can’t reach the person who purchased the ticket in order to get them to change the information please contact us on tickets@mindtheproduct.com and we will help you make the updates.

\n

Can I get a refund?
We offer a full refund up to one month before the event. Simply log in to Eventbrite and request the refund following these instructions. As with changes, only the person who purchased the tickets can request a refund.

\n

Can I pay by invoice?
As we are a small team we only offer payment by invoice if you are buying 5 tickets or more due to the additional overhead. Early Bird conference tickets cannot be purchased by invoice. Please also note that no tickets are held/issued until payment of the invoice has been received.  Request to pay by invoice by emailing tickets@mindtheproduct.com

\n\n


\n

Frequently Asked Questions | Terms & Conditions  |  Code of Conduct  |  Privacy Policy

\n


\n
" + }, + "id": "49693729282", + "url": "https://www.eventbrite.com/e/product-management-essentials-102-training-workshop-belfast-tickets-49693729282?aff=ebapi", + "start": { + "timezone": "Europe/London", + "local": "2018-11-12T09:30:00", + "utc": "2018-11-12T09:30:00Z" + }, + "end": { + "timezone": "Europe/London", + "local": "2018-11-12T17:00:00", + "utc": "2018-11-12T17:00:00Z" + }, + "organization_id": "27734885637", + "created": "2018-08-30T13:47:45Z", + "changed": "2018-10-19T09:27:43Z", + "capacity": null, + "capacity_is_custom": null, + "status": "live", + "currency": "GBP", + "listed": true, + "shareable": true, + "online_event": false, + "tx_time_limit": 900, + "hide_start_date": false, + "hide_end_date": false, + "locale": "en_US", + "is_locked": false, + "privacy_setting": "unlocked", + "is_series": false, + "is_series_parent": false, + "is_reserved_seating": false, + "show_pick_a_seat": false, + "show_seatmap_thumbnail": false, + "show_colors_in_seatmap_thumbnail": false, + "source": "create_2.0", + "is_free": false, + "version": "3.0.0", + "logo_id": "49107020", + "organizer_id": "1962515111", + "venue_id": "25589156", + "category_id": "102", + "subcategory_id": null, + "format_id": "9", + "resource_uri": "https://www.eventbriteapi.com/v3/events/49693729282/", + "is_externally_ticketed": false, + "category": { + "resource_uri": "https://www.eventbriteapi.com/v3/categories/102/", + "id": "102", + "name": "Science & Technology", + "name_localized": "Science & Technology", + "short_name": "Science & Tech", + "short_name_localized": "Science & Tech" + }, + "subcategory": null, + "format": { + "resource_uri": "https://www.eventbriteapi.com/v3/formats/9/", + "id": "9", + "name": "Class, Training, or Workshop", + "name_localized": "Class, Training, or Workshop", + "short_name": "Class", + "short_name_localized": "Class" + }, + "venue": { + "address": { + "address_1": "10 Exchange Street West", + "address_2": null, + "city": "Belfast", + "region": null, + "postal_code": "BT1 2NJ", + "country": "GB", + "latitude": "54.6035924", + "longitude": "-5.9275539999999864", + "localized_address_display": "10 Exchange Street West, Belfast, BT1 2NJ", + "localized_area_display": "Belfast", + "localized_multi_line_address_display": [ + "10 Exchange Street West", + "Belfast", + "BT1 2NJ" + ] + }, + "resource_uri": "https://www.eventbriteapi.com/v3/venues/25589156/", + "id": "25589156", + "age_restriction": null, + "capacity": null, + "name": "The MAC", + "latitude": "54.6035924", + "longitude": "-5.9275539999999864" + }, + "refund_policy": { + "refund_policy": "not_defined" + }, + "bookmark_info": { + "bookmarked": false + }, + "organizer": { + "description": { + "text": "Mind the Product is the world’s largest product management community, with regular local ProductTank meetups in over 150 cities around the world, as well as the biggest and best training events, workshops, and conferences in the world - with annual events in London, San Francisco, Hamburg, and more. These are the go-to events for meeting other product managers, designers, and developers and honing your product craft.", + "html": "

Mind the Product is the world’s largest product management community, with regular local ProductTank meetups in over 150 cities around the world, as well as the biggest and best training events, workshops, and conferences in the world - with annual events in London, San Francisco, Hamburg, and more. These are the go-to events for meeting other product managers, designers, and developers and honing your product craft.

" + }, + "long_description": { + "text": "Mind the Product is the world’s largest product management community, with regular local ProductTank meetups in over 150 cities around the world, as well as the biggest and best training events, workshops, and conferences in the world - with annual events in London, San Francisco, Hamburg, and more. These are the go-to events for meeting other product managers, designers, and developers and honing your product craft.", + "html": "

Mind the Product is the world’s largest product management community, with regular local ProductTank meetups in over 150 cities around the world, as well as the biggest and best training events, workshops, and conferences in the world - with annual events in London, San Francisco, Hamburg, and more. These are the go-to events for meeting other product managers, designers, and developers and honing your product craft.

" + }, + "logo": { + "crop_mask": null, + "original": null, + "id": "139997", + "url": "https://cdn.evbuc.com/images/139997/27734885637/1/logo.png", + "aspect_ratio": null, + "edge_color": null, + "edge_color_set": null + }, + "resource_uri": "https://www.eventbriteapi.com/v3/organizers/1962515111/", + "id": "1962515111", + "name": "Mind the Product", + "url": "https://www.eventbrite.com/o/mind-the-product-1962515111", + "vanity_url": "http://mindtheproduct.eventbrite.com", + "num_past_events": 79, + "num_future_events": 24, + "website": "http://www.mindtheproduct.com", + "twitter": "mindtheproduct", + "facebook": "mindtheproduct", + "logo_id": "139997" + }, + "ticket_availability": { + "has_available_tickets": true, + "minimum_ticket_price": { + "currency": "GBP", + "value": 54900, + "major_value": "549.00", + "display": "549.00 GBP" + }, + "maximum_ticket_price": { + "currency": "GBP", + "value": 54900, + "major_value": "549.00", + "display": "549.00 GBP" + }, + "is_sold_out": false, + "start_sales_date": { + "timezone": "Europe/London", + "local": "2018-09-05T10:00:00", + "utc": "2018-09-05T09:00:00Z" + } + }, + "logo": { + "crop_mask": { + "top_left": { + "x": 0, + "y": 0 + }, + "width": 2160, + "height": 1080 + }, + "original": { + "url": "https://img.evbuc.com/https%3A%2F%2Fcdn.evbuc.com%2Fimages%2F49107020%2F27734885637%2F1%2Foriginal.jpg?auto=compress&s=3d789447b422260a386e5f3600feabb4", + "width": 2160, + "height": 1080 + }, + "id": "49107020", + "url": "https://img.evbuc.com/https%3A%2F%2Fcdn.evbuc.com%2Fimages%2F49107020%2F27734885637%2F1%2Foriginal.jpg?h=200&w=450&auto=compress&rect=0%2C0%2C2160%2C1080&s=92599c1e149e13a4d708209286a479ef", + "aspect_ratio": "2", + "edge_color": null, + "edge_color_set": true + } + }, + { + "name": { + "text": "Zombie Science: Worst Case Scenario ,13th Nov 7pm Market House, Monaghan ", + "html": "Zombie Science: Worst Case Scenario ,13th Nov 7pm Market House, Monaghan " + }, + "description": { + "text": "Zombie Science returns with a spoof tutorial on the real science behind a Zombie epidemic. Join Theoretical Zombiologist Doctor Smith as he puts you at the heart of a hypothetical Zombieism outbreak and teaches you what to do when the inevitable Zombie pandemic occurs.  \nWorst Case Scenario is the second show in the Zombie Science spoof lecture series which has attracted audiences of over 36,000 at more than 400 lectures across the UK and Ireland performances at the London Horror Festival and Green Man Festival.       \n Zombie Science: Worst Case Scenario focuses on identifying, containing and controlling disease, and at key points in the show, the audience is invited to vote on courses of action that will determine the outcome of the show.  Only science can save you from the worst case scenario.", + "html": "

Zombie Science returns with a spoof tutorial on the real science behind a Zombie epidemic. Join Theoretical Zombiologist Doctor Smith as he puts you at the heart of a hypothetical Zombieism outbreak and teaches you what to do when the inevitable Zombie pandemic occurs. 

\n

Worst Case Scenario is the second show in the Zombie Science spoof lecture series which has attracted audiences of over 36,000 at more than 400 lectures across the UK and Ireland performances at the London Horror Festival and Green Man Festival.      

\n

 Zombie Science: Worst Case Scenario focuses on identifying, containing and controlling disease, and at key points in the show, the audience is invited to vote on courses of action that will determine the outcome of the show.  Only science can save you from the worst case scenario.

" + }, + "id": "50982052692", + "url": "https://www.eventbrite.ie/e/zombie-science-worst-case-scenario-13th-nov-7pm-market-house-monaghan-tickets-50982052692?aff=ebapi", + "start": { + "timezone": "Europe/Dublin", + "local": "2018-11-13T19:00:00", + "utc": "2018-11-13T19:00:00Z" + }, + "end": { + "timezone": "Europe/Dublin", + "local": "2018-11-13T20:30:00", + "utc": "2018-11-13T20:30:00Z" + }, + "organization_id": "187206852598", + "created": "2018-10-03T21:17:54Z", + "changed": "2018-10-19T14:35:10Z", + "capacity": null, + "capacity_is_custom": null, + "status": "live", + "currency": "EUR", + "listed": true, + "shareable": true, + "online_event": false, + "tx_time_limit": 480, + "hide_start_date": false, + "hide_end_date": false, + "locale": "en_IE", + "is_locked": false, + "privacy_setting": "unlocked", + "is_series": false, + "is_series_parent": false, + "is_reserved_seating": false, + "show_pick_a_seat": false, + "show_seatmap_thumbnail": false, + "show_colors_in_seatmap_thumbnail": false, + "source": "create_2.0", + "is_free": true, + "version": "3.0.0", + "logo_id": "50771832", + "organizer_id": "11479577453", + "venue_id": "16952913", + "category_id": "102", + "subcategory_id": null, + "format_id": "2", + "resource_uri": "https://www.eventbriteapi.com/v3/events/50982052692/", + "is_externally_ticketed": false, + "category": { + "resource_uri": "https://www.eventbriteapi.com/v3/categories/102/", + "id": "102", + "name": "Science & Technology", + "name_localized": "Science & Technology", + "short_name": "Science & Tech", + "short_name_localized": "Science & Tech" + }, + "subcategory": null, + "format": { + "resource_uri": "https://www.eventbriteapi.com/v3/formats/2/", + "id": "2", + "name": "Seminar or Talk", + "name_localized": "Seminar or Talk", + "short_name": "Seminar", + "short_name_localized": "Seminar" + }, + "venue": { + "address": { + "address_1": "Market Street", + "address_2": null, + "city": "Monaghan", + "region": "County Monaghan", + "postal_code": null, + "country": "IE", + "latitude": "54.247567", + "longitude": "-6.972217999999998", + "localized_address_display": "Market Street, Monaghan", + "localized_area_display": "Monaghan", + "localized_multi_line_address_display": [ + "Market Street", + "Monaghan" + ] + }, + "resource_uri": "https://www.eventbriteapi.com/v3/venues/16952913/", + "id": "16952913", + "age_restriction": null, + "capacity": null, + "name": "The Market House Monaghan", + "latitude": "54.247567", + "longitude": "-6.972217999999998" + }, + "refund_policy": { + "refund_policy": "not_defined" + }, + "bookmark_info": { + "bookmarked": false + }, + "organizer": { + "description": { + "text": "Now in it's 3rd year, the Cavan Monaghan Science Festival is lead by Monaghan County Council in partnership with Cavan County Council and Cavan Monaghan Education and Training Board,  funded by SFI. This  innovative festival will run from 10th - 24th November 2018 with hundreds of events planned to take place across the two counties in libraries, museums, schools, community centres and art centres.  \r\nMost Events are Free but Booking is essential", + "html": "

Now in it's 3rd year, the Cavan Monaghan Science Festival is lead by Monaghan County Council in partnership with Cavan County Council and Cavan Monaghan Education and Training Board,  funded by SFI. This  innovative festival will run from 10th - 24th November 2018 with hundreds of events planned to take place across the two counties in libraries, museums, schools, community centres and art centres.  

\r\n

Most Events are Free but Booking is essential

" + }, + "long_description": { + "text": "Now in it's 3rd year, the Cavan Monaghan Science Festival is lead by Monaghan County Council in partnership with Cavan County Council and Cavan Monaghan Education and Training Board,  funded by SFI. This  innovative festival will run from 10th - 24th November 2018 with hundreds of events planned to take place across the two counties in libraries, museums, schools, community centres and art centres.  \r\nMost Events are Free but Booking is essential", + "html": "

Now in it's 3rd year, the Cavan Monaghan Science Festival is lead by Monaghan County Council in partnership with Cavan County Council and Cavan Monaghan Education and Training Board,  funded by SFI. This  innovative festival will run from 10th - 24th November 2018 with hundreds of events planned to take place across the two counties in libraries, museums, schools, community centres and art centres.  

\r\n

Most Events are Free but Booking is essential

" + }, + "logo": { + "crop_mask": null, + "original": null, + "id": "36168369", + "url": "https://cdn.evbuc.com/images/36168369/187206852598/2/logo.jpg", + "aspect_ratio": null, + "edge_color": null, + "edge_color_set": null + }, + "resource_uri": "https://www.eventbriteapi.com/v3/organizers/11479577453/", + "id": "11479577453", + "name": "Cavan Monaghan Science Festival", + "url": "https://www.eventbrite.ie/o/cavan-monaghan-science-festival-11479577453", + "num_past_events": 108, + "num_future_events": 65, + "website": "http://www.cavanmonaghansciencefestival.ie", + "twitter": "@CMSciFest", + "facebook": "CavanMonaghanScienceFestival", + "logo_id": "36168369" + }, + "ticket_availability": { + "has_available_tickets": true, + "minimum_ticket_price": { + "currency": "EUR", + "value": 0, + "major_value": "0.00", + "display": "0.00 EUR" + }, + "maximum_ticket_price": { + "currency": "EUR", + "value": 0, + "major_value": "0.00", + "display": "0.00 EUR" + }, + "is_sold_out": false, + "start_sales_date": { + "timezone": "Europe/Dublin", + "local": "2018-10-19T09:00:00", + "utc": "2018-10-19T08:00:00Z" + } + }, + "logo": { + "crop_mask": { + "top_left": { + "x": 0, + "y": 19 + }, + "width": 1600, + "height": 800 + }, + "original": { + "url": "https://img.evbuc.com/https%3A%2F%2Fcdn.evbuc.com%2Fimages%2F50771832%2F187206852598%2F1%2Foriginal.jpg?auto=compress&s=ebafa8d1e125b7ff41fcb42f65fc424f", + "width": 1600, + "height": 1067 + }, + "id": "50771832", + "url": "https://img.evbuc.com/https%3A%2F%2Fcdn.evbuc.com%2Fimages%2F50771832%2F187206852598%2F1%2Foriginal.jpg?h=200&w=450&auto=compress&rect=0%2C19%2C1600%2C800&s=550f0f4c371ad9a2ec60248021d9fafd", + "aspect_ratio": "2", + "edge_color": "#4b4e31", + "edge_color_set": true + } + } + ], + "location": { + "latitude": "54.642513", + "within": "96.5606400369", + "longitude": "-6.762739" + } +} diff --git a/lambdas/tests/eventbrite/handlers/test-data/events-payload-invalid.json b/lambdas/tests/eventbrite/handlers/test-data/events-payload-invalid.json new file mode 100644 index 00000000..bdf13d3a --- /dev/null +++ b/lambdas/tests/eventbrite/handlers/test-data/events-payload-invalid.json @@ -0,0 +1,15 @@ +{ + "pagination": { + "object_count": 0, + "page_number": 1, + "page_size": 0, + "page_count": 1, + "has_more_items": false + }, + "events": [{ "invalid": true }], + "location": { + "latitude": "54.642513", + "within": "96.5606400369", + "longitude": "-6.762739" + } +} diff --git a/lambdas/tests/eventbrite/handlers/test-data/events-payload-populated.json b/lambdas/tests/eventbrite/handlers/test-data/events-payload-populated.json new file mode 100644 index 00000000..3e9d587e --- /dev/null +++ b/lambdas/tests/eventbrite/handlers/test-data/events-payload-populated.json @@ -0,0 +1,877 @@ +{ + "pagination": { + "object_count": 5, + "page_number": 1, + "page_size": 5, + "page_count": 1, + "has_more_items": false + }, + "events": [ + { + "name": { + "text": "Farset Labs Dojo 2018", + "html": "Farset Labs Dojo 2018" + }, + "description": { + "text": "CoderDojo is a movement orientated around running free not-for-profit coding clubs and regular sessions for young people. Farset Labs’ CoderDojo is run by volunteers from the Farset community and offers a range of computer skills, from web application development to scratch.\nAt a CoderDojo, young people learn how to code, develop websites, apps, programs, games and more. Dojos are set up, run by and taught at by volunteers. In addition to learning to code, members meet like minded people, show off what they’ve been working on and so on. CoderDojo makes development and learning to code a fun, sociable, kick ass experience.\nCoderDojo also puts a strong emphasis on open source and free software, and has a strong network of members and volunteers globally. CoderDojo has just one rule: “Above All: Be Cool“, bullying, lying, wasting people’s time and so on is uncool.\nIt also provides essential teaching and mentorship experience for budding software developers; after all, to teach is to learn twice! And you don’t have to be a hardcore code-hacker to mentor; anyone can help to guide these kids through the processes of problem solving, breaking down tasks, thinking in a stepwise fashion, or just picking out the killer-spelling-mistakes like variable names or missing semi-colons!\nFor more information about Coder Dojo, check out the CoderDojo global webpage.\nYou can also follow us on Twitter and Facebook\n\nWhat should I bring to the event?\nIf you can, please bring your own laptop.\nCan I join as a mentor/volunteer?\nYes! We always appreciate more hands on deck, but we do need to put people through a short induction/training programme first, so get in touch with us on dojo@farsetlabs.org.uk and we can add you to the next induction stream.\nI can’t make it, what can I do to help?\nIf you can’t make it to our Dojo, consider some of the other Dojos in Northern Ireland, like at BMC in Belfast,Ballymena, or the brand new Dojo in Newry.\nIf you just want to support our event here at Farset Labs, please consider making a donation to the charity and mention in your donation that you wish it to go to fund refreshments, resources, materials, and equipment for the Dojo.\nIs there an age limit to enter the event?\nCoderDojo is aimed loosely at the under 18’s, but any child younger than 14 must be accompanied by a parent or guardian and that guardian must stay on-site for the duration of the event\nWhat are my transport/parking options getting to the event?\nWe’re 5 minutes walk from Europa Bus Centre, and Parking is available all across the Weavers Court Campus\nIs there a charge for the event\nFarset Labs’ members operate the CoderDojo for free for all attendees, but donations to cover operating costs are greatly appreciated.\nWhat Child Protection Policies are in place?\nOnly those registered may attend, including mentors. For full details, see Farset Labs’ Child Protection Policy. At the lead mentors’ discretion, the event space may be sealed off from the rest of the space.", + "html": "

CoderDojo is a movement orientated around running free not-for-profit coding clubs and regular sessions for young people. Farset Labs’ CoderDojo is run by volunteers from the Farset community and offers a range of computer skills, from web application development to scratch.

\n

At a CoderDojo, young people learn how to code, develop websites, apps, programs, games and more. Dojos are set up, run by and taught at by volunteers. In addition to learning to code, members meet like minded people, show off what they’ve been working on and so on. CoderDojo makes development and learning to code a fun, sociable, kick ass experience.

\n

CoderDojo also puts a strong emphasis on open source and free software, and has a strong network of members and volunteers globally. CoderDojo has just one rule: “Above All: Be Cool“, bullying, lying, wasting people’s time and so on is uncool.

\n

It also provides essential teaching and mentorship experience for budding software developers; after all, to teach is to learn twice! And you don’t have to be a hardcore code-hacker to mentor; anyone can help to guide these kids through the processes of problem solving, breaking down tasks, thinking in a stepwise fashion, or just picking out the killer-spelling-mistakes like variable names or missing semi-colons!

\n

For more information about Coder Dojo, check out the CoderDojo global webpage.

\n

You can also follow us on Twitter and Facebook

\n


\n

What should I bring to the event?

\n

If you can, please bring your own laptop.

\n

Can I join as a mentor/volunteer?

\n

Yes! We always appreciate more hands on deck, but we do need to put people through a short induction/training programme first, so get in touch with us on dojo@farsetlabs.org.uk and we can add you to the next induction stream.

\n

I can’t make it, what can I do to help?

\n

If you can’t make it to our Dojo, consider some of the other Dojos in Northern Ireland, like at BMC in Belfast,Ballymena, or the brand new Dojo in Newry.

\n

If you just want to support our event here at Farset Labs, please consider making a donation to the charity and mention in your donation that you wish it to go to fund refreshments, resources, materials, and equipment for the Dojo.

\n

Is there an age limit to enter the event?

\n

CoderDojo is aimed loosely at the under 18’s, but any child younger than 14 must be accompanied by a parent or guardian and that guardian must stay on-site for the duration of the event

\n

What are my transport/parking options getting to the event?

\n

We’re 5 minutes walk from Europa Bus Centre, and Parking is available all across the Weavers Court Campus

\n

Is there a charge for the event

\n

Farset Labs’ members operate the CoderDojo for free for all attendees, but donations to cover operating costs are greatly appreciated.

\n

What Child Protection Policies are in place?

\n

Only those registered may attend, including mentors. For full details, see Farset Labs’ Child Protection Policy. At the lead mentors’ discretion, the event space may be sealed off from the rest of the space.

" + }, + "id": "42152220426", + "url": "https://www.eventbrite.co.uk/e/farset-labs-dojo-2018-tickets-42152220426?aff=ebapi", + "start": { + "timezone": "Europe/London", + "local": "2018-11-02T19:00:00", + "utc": "2018-11-02T19:00:00Z" + }, + "end": { + "timezone": "Europe/London", + "local": "2018-11-02T21:00:00", + "utc": "2018-11-02T21:00:00Z" + }, + "organization_id": "32416783101", + "created": "2018-01-13T13:42:41Z", + "changed": "2018-01-13T13:42:44Z", + "capacity": null, + "capacity_is_custom": null, + "status": "live", + "currency": "GBP", + "listed": true, + "shareable": true, + "online_event": false, + "tx_time_limit": 480, + "hide_start_date": false, + "hide_end_date": false, + "locale": "en_GB", + "is_locked": false, + "privacy_setting": "unlocked", + "is_series": true, + "is_series_parent": false, + "is_reserved_seating": false, + "show_pick_a_seat": false, + "show_seatmap_thumbnail": false, + "show_colors_in_seatmap_thumbnail": false, + "source": "create_2.0", + "is_free": false, + "version": "3.0.0", + "logo_id": "39574425", + "organizer_id": "2238451237", + "venue_id": "22807212", + "category_id": "102", + "subcategory_id": null, + "format_id": "9", + "resource_uri": "https://www.eventbriteapi.com/v3/events/42152220426/", + "is_externally_ticketed": false, + "series_id": "42152165261", + "category": { + "resource_uri": "https://www.eventbriteapi.com/v3/categories/102/", + "id": "102", + "name": "Science & Technology", + "name_localized": "Science & Technology", + "short_name": "Science & Tech", + "short_name_localized": "Science & Tech" + }, + "subcategory": null, + "format": { + "resource_uri": "https://www.eventbriteapi.com/v3/formats/9/", + "id": "9", + "name": "Class, Training, or Workshop", + "name_localized": "Class, Training, or Workshop", + "short_name": "Class", + "short_name_localized": "Class" + }, + "venue": { + "address": { + "address_1": "Weavers Court", + "address_2": "Linfield Industrial Estate", + "city": "Belfast", + "region": "Co Antrim", + "postal_code": "BT12 5GH", + "country": "GB", + "latitude": "54.591804", + "longitude": "-5.942264000000023", + "localized_address_display": "Weavers Court Linfield Industrial Estate, Belfast, BT12 5GH", + "localized_area_display": "Belfast", + "localized_multi_line_address_display": [ + "Weavers Court", + "Linfield Industrial Estate", + "Belfast", + "BT12 5GH" + ] + }, + "resource_uri": "https://www.eventbriteapi.com/v3/venues/22807212/", + "id": "22807212", + "age_restriction": null, + "capacity": null, + "name": "Farset Labs,", + "latitude": "54.591804", + "longitude": "-5.942264000000023" + }, + "refund_policy": { + "refund_policy": "not_defined" + }, + "bookmark_info": { + "bookmarked": false + }, + "organizer": { + "description": { + "text": "Farset Labs is a makerspace that provides a hub of creativity, technological innovation and entrepreneurship for local professionals, students and interested hobbyists in Belfast City Centre.\r\nFor a low membership fee, students, professionals, and all members of the local community will be able to congregate at their convenience at the Farset Labs premises, to discuss ideas and concepts with fellow members, and use communal manufacturing equipment, computing facilities and electronic resources to help bring their ideas to fruition.", + "html": "

Farset Labs is a makerspace that provides a hub of creativity, technological innovation and entrepreneurship for local professionals, students and interested hobbyists in Belfast City Centre.

\r\n

For a low membership fee, students, professionals, and all members of the local community will be able to congregate at their convenience at the Farset Labs premises, to discuss ideas and concepts with fellow members, and use communal manufacturing equipment, computing facilities and electronic resources to help bring their ideas to fruition.

" + }, + "long_description": { + "text": "Farset Labs is a makerspace that provides a hub of creativity, technological innovation and entrepreneurship for local professionals, students and interested hobbyists in Belfast City Centre.\r\nFor a low membership fee, students, professionals, and all members of the local community will be able to congregate at their convenience at the Farset Labs premises, to discuss ideas and concepts with fellow members, and use communal manufacturing equipment, computing facilities and electronic resources to help bring their ideas to fruition.", + "html": "

Farset Labs is a makerspace that provides a hub of creativity, technological innovation and entrepreneurship for local professionals, students and interested hobbyists in Belfast City Centre.

\r\n

For a low membership fee, students, professionals, and all members of the local community will be able to congregate at their convenience at the Farset Labs premises, to discuss ideas and concepts with fellow members, and use communal manufacturing equipment, computing facilities and electronic resources to help bring their ideas to fruition.

" + }, + "logo": { + "crop_mask": null, + "original": null, + "id": "482310", + "url": "https://cdn.evbuc.com/images/482310/32416783101/2/logo.png", + "aspect_ratio": null, + "edge_color": null, + "edge_color_set": null + }, + "resource_uri": "https://www.eventbriteapi.com/v3/organizers/2238451237/", + "id": "2238451237", + "name": "Farset Labs", + "url": "https://www.eventbrite.co.uk/o/farset-labs-2238451237", + "vanity_url": "http://farsetlabs.eventbrite.com", + "num_past_events": 59, + "num_future_events": 2, + "twitter": "FarsetLabs", + "facebook": "farsetlabs", + "instagram": "2238205448", + "logo_id": "482310" + }, + "ticket_availability": { + "has_available_tickets": true, + "minimum_ticket_price": { + "currency": "GBP", + "value": 0, + "major_value": "0.00", + "display": "0.00 GBP" + }, + "maximum_ticket_price": { + "currency": "GBP", + "value": 0, + "major_value": "0.00", + "display": "0.00 GBP" + }, + "is_sold_out": false, + "start_sales_date": null + }, + "logo": { + "crop_mask": { + "top_left": { + "x": 0, + "y": 66 + }, + "width": 800, + "height": 400 + }, + "original": { + "url": "https://img.evbuc.com/https%3A%2F%2Fcdn.evbuc.com%2Fimages%2F39574425%2F32416783101%2F1%2Foriginal.jpg?auto=compress&s=4855c40b0a3657500da81dbc0538485a", + "width": null, + "height": null + }, + "id": "39574425", + "url": "https://img.evbuc.com/https%3A%2F%2Fcdn.evbuc.com%2Fimages%2F39574425%2F32416783101%2F1%2Foriginal.jpg?h=200&w=450&auto=compress&rect=0%2C66%2C800%2C400&s=bd31fd7b61b36c0b8b61d2d1e03154d0", + "aspect_ratio": "2", + "edge_color": "#776656", + "edge_color_set": true + } + }, + { + "name": { + "text": "Northern Ireland Raspberry Jam - November 2018 - 6th Birthday!", + "html": "Northern Ireland Raspberry Jam - November 2018 - 6th Birthday!" + }, + "description": { + "text": "It's our Birthday! The NI Raspberry Jam is turning 6!\n\nCome one, come all to the Northern Ireland Raspberry Jam!\nIn collaboration with the School of Physics and Mathematics at Queens, Farset Labs and the Northern Ireland Raspberry Jam team, these free monthly events involve tinkering, coding, electronics and generally just having a stack of fun making stuff!Whether you want to try out computer programming for the first time, hack some electronics or just generally have some fun inventing, we have something for everyone!All equipment is provided and we have activities for ages 6-106, from complete beginners right up to seasoned Pi experts. Plus, like all our Raspberry Jam events, it is completely free!So what are you waiting for?\n\nFAQ\nWhat is a Raspberry Jam?\nA Raspberry Jam is an event for kids/adults of all ages to come together and learn a bit more about the Raspberry Pi and coding/electronics in general.\nI have no previous experience with coding/electronics/Raspberry Pi?\nThat is no problem! All our Raspberry Jams are suited for beginners, right up to Pi exports, plus all equipment is provided. All you need to bring is yourself.\nHow can I get there? Can I take public transport?\nThe new Maths and Physics Teaching Building is very easy to get to by car, or by public transport.\nBy car\nPark at the McClay Library car pack. If it is full, then there is plenty of additional car parking in the surrounding side streets.\n\nBy train\nTravel to Botanic station, then walk up Botanic street towards Queens University. The new Physics Teaching Building is directly opposite the entrance to the McClay library.\n\nHow often to do these Raspberry Jam events run?\nThe Northern Ireland Raspberry Jam runs on the 2nd Saturday of every month (excluding July/August) throughout the year. They are free as well and involve new workshops/activities each month. Details - https://niraspberryjam.eventbrite.co.uk.\nYou can also add our provisional future Jams calendar to yours by clicking here (or simply view it here).\n\nWhat age range is this event suitable for?\nAll of our Raspberry Jam events are suitable for kids as young as 6, right up to adults of 106! Although the majority of the attendees at the Raspberry Jam events are young people, they are open to adults as well, especially parents of kids attending.\nNote - By attending this event, you provide express permission to photographs/videos being taken and used by the Northern Ireland Raspberry Jam team. If this is an issue, please inform one of the team on your arrival.\n\n\nNote that normal Farset Labs Child Protection policy applies. This includes that all children under the age of 14 must have a designated guardian in on site for the entire event.\nWe also require children aged between 14 and 17 (inclusive) parents are within 10 minutes from venue and can be easily contactable in event of an emergency.\n\nThis event is run in collaboration with the School of Mathematics and Physics at Queens University and the School of Electronics, Electrical Engineering and Computer Science at Queens University.\nThe Northern Ireland Raspberry Jam wouldn't be possible without support from Institution of Engineering and Technology, Institution of Mechanical Engineers, Northern Ireland Department of Communities, Nitec Solutions and Farset Labs.", + "html": "

It's our Birthday! The NI Raspberry Jam is turning 6!

\n


\n

Come one, come all to the Northern Ireland Raspberry Jam!

\n

In collaboration with the School of Physics and Mathematics at Queens, Farset Labs and the Northern Ireland Raspberry Jam team, these free monthly events involve tinkering, coding, electronics and generally just having a stack of fun making stuff!
Whether you want to try out computer programming for the first time, hack some electronics or just generally have some fun inventing, we have something for everyone!

All equipment is provided and we have activities for ages 6-106, from complete beginners right up to seasoned Pi experts. Plus, like all our Raspberry Jam events, it is completely free!
So what are you waiting for?

\n

\"Young

\n

FAQ

\n

What is a Raspberry Jam?

\n

A Raspberry Jam is an event for kids/adults of all ages to come together and learn a bit more about the Raspberry Pi and coding/electronics in general.

\n

I have no previous experience with coding/electronics/Raspberry Pi?

\n

That is no problem! All our Raspberry Jams are suited for beginners, right up to Pi exports, plus all equipment is provided. All you need to bring is yourself.

\n

How can I get there? Can I take public transport?

\n

The new Maths and Physics Teaching Building is very easy to get to by car, or by public transport.

\n

By car

\n

Park at the McClay Library car pack. If it is full, then there is plenty of additional car parking in the surrounding side streets.

\n

\"Car

\n

By train

\n

Travel to Botanic station, then walk up Botanic street towards Queens University. The new Physics Teaching Building is directly opposite the entrance to the McClay library.

\n

\"Public

\n

How often to do these Raspberry Jam events run?

\n

The Northern Ireland Raspberry Jam runs on the 2nd Saturday of every month (excluding July/August) throughout the year. They are free as well and involve new workshops/activities each month. Details - https://niraspberryjam.eventbrite.co.uk.

\n

You can also add our provisional future Jams calendar to yours by clicking here (or simply view it here).

\n

\"Adult

\n

What age range is this event suitable for?

\n

All of our Raspberry Jam events are suitable for kids as young as 6, right up to adults of 106! Although the majority of the attendees at the Raspberry Jam events are young people, they are open to adults as well, especially parents of kids attending.

\n

Note - By attending this event, you provide express permission to photographs/videos being taken and used by the Northern Ireland Raspberry Jam team. If this is an issue, please inform one of the team on your arrival.

\n

\"Young

\n


\n

Note that normal Farset Labs Child Protection policy applies. This includes that all children under the age of 14 must have a designated guardian in on site for the entire event.

\n

We also require children aged between 14 and 17 (inclusive) parents are within 10 minutes from venue and can be easily contactable in event of an emergency.

\n


\n

This event is run in collaboration with the School of Mathematics and Physics at Queens University and the School of Electronics, Electrical Engineering and Computer Science at Queens University.

\n

The Northern Ireland Raspberry Jam wouldn't be possible without support from Institution of Engineering and Technology, Institution of Mechanical EngineersNorthern Ireland Department of Communities, Nitec Solutions and Farset Labs.

" + }, + "id": "51292098046", + "url": "https://www.eventbrite.co.uk/e/northern-ireland-raspberry-jam-november-2018-6th-birthday-tickets-51292098046?aff=ebapi", + "vanity_url": "https://niraspberryjam-november-2018.eventbrite.co.uk", + "start": { + "timezone": "Europe/London", + "local": "2018-11-10T13:00:00", + "utc": "2018-11-10T13:00:00Z" + }, + "end": { + "timezone": "Europe/London", + "local": "2018-11-10T17:00:00", + "utc": "2018-11-10T17:00:00Z" + }, + "organization_id": "200379386367", + "created": "2018-10-11T14:15:46Z", + "changed": "2018-10-11T14:21:59Z", + "capacity": null, + "capacity_is_custom": null, + "status": "live", + "currency": "GBP", + "listed": true, + "shareable": true, + "online_event": false, + "tx_time_limit": 480, + "hide_start_date": false, + "hide_end_date": false, + "locale": "en_GB", + "is_locked": false, + "privacy_setting": "unlocked", + "is_series": false, + "is_series_parent": false, + "is_reserved_seating": false, + "show_pick_a_seat": false, + "show_seatmap_thumbnail": false, + "show_colors_in_seatmap_thumbnail": false, + "source": "create_2.0", + "is_free": true, + "version": "3.0.0", + "logo_id": "51160475", + "organizer_id": "12781086687", + "venue_id": "18130630", + "category_id": "102", + "subcategory_id": null, + "format_id": "9", + "resource_uri": "https://www.eventbriteapi.com/v3/events/51292098046/", + "is_externally_ticketed": false, + "category": { + "resource_uri": "https://www.eventbriteapi.com/v3/categories/102/", + "id": "102", + "name": "Science & Technology", + "name_localized": "Science & Technology", + "short_name": "Science & Tech", + "short_name_localized": "Science & Tech" + }, + "subcategory": null, + "format": { + "resource_uri": "https://www.eventbriteapi.com/v3/formats/9/", + "id": "9", + "name": "Class, Training, or Workshop", + "name_localized": "Class, Training, or Workshop", + "short_name": "Class", + "short_name_localized": "Class" + }, + "venue": { + "address": { + "address_1": "Queens University", + "address_2": "7-9 College Park E,", + "city": "Belfast", + "region": "Northern Ireland", + "postal_code": "BT7 1PS", + "country": "GB", + "latitude": "54.58392929999999", + "longitude": "-5.931720000000041", + "localized_address_display": "Queens University 7-9 College Park E,, Belfast, BT7 1PS", + "localized_area_display": "Belfast", + "localized_multi_line_address_display": [ + "Queens University", + "7-9 College Park E", + "Belfast", + "BT7 1PS" + ] + }, + "resource_uri": "https://www.eventbriteapi.com/v3/venues/18130630/", + "id": "18130630", + "age_restriction": null, + "capacity": null, + "name": "School of Maths and Physics Teaching Centre", + "latitude": "54.58392929999999", + "longitude": "-5.931720000000041" + }, + "refund_policy": { + "refund_policy": "not_defined" + }, + "bookmark_info": { + "bookmarked": false + }, + "organizer": { + "description": { + "text": " The Northern Ireland Raspberry Jam is a volunteer group of makers, tinkerers and inventors who in collaboration with Farset Labs, Queens University and a number of other organisations, run regular and free Raspberry Jams (coding/tinkering events using the Raspberry Pi computer) in Northern Ireland.\r\n ", + "html": "

The Northern Ireland Raspberry Jam is a volunteer group of makers, tinkerers and inventors who in collaboration with Farset Labs, Queens University and a number of other organisations, run regular and free Raspberry Jams (coding/tinkering events using the Raspberry Pi computer) in Northern Ireland.

\r\n " + }, + "long_description": { + "text": "The Northern Ireland Raspberry Jam is a volunteer group of makers, tinkerers and inventors who in collaboration with Farset Labs, Queens University and a number of other organisations, run regular and free Raspberry Jams (coding/tinkering events using the Raspberry Pi computer) in Northern Ireland.", + "html": "

The Northern Ireland Raspberry Jam is a volunteer group of makers, tinkerers and inventors who in collaboration with Farset Labs, Queens University and a number of other organisations, run regular and free Raspberry Jams (coding/tinkering events using the Raspberry Pi computer) in Northern Ireland.

" + }, + "logo": { + "crop_mask": null, + "original": null, + "id": "27794517", + "url": "https://cdn.evbuc.com/images/27794517/200379386367/2/logo.jpg", + "aspect_ratio": null, + "edge_color": null, + "edge_color_set": null + }, + "resource_uri": "https://www.eventbriteapi.com/v3/organizers/12781086687/", + "id": "12781086687", + "name": "Northern Ireland Raspberry Jam", + "url": "https://www.eventbrite.co.uk/o/northern-ireland-raspberry-jam-12781086687", + "vanity_url": "http://nijam.eventbrite.com", + "num_past_events": 19, + "num_future_events": 2, + "twitter": "niraspjam", + "logo_id": "27794517" + }, + "ticket_availability": { + "has_available_tickets": true, + "minimum_ticket_price": { + "currency": "GBP", + "value": 0, + "major_value": "0.00", + "display": "0.00 GBP" + }, + "maximum_ticket_price": { + "currency": "GBP", + "value": 0, + "major_value": "0.00", + "display": "0.00 GBP" + }, + "is_sold_out": false, + "start_sales_date": { + "timezone": "Europe/London", + "local": "2018-10-13T15:00:00", + "utc": "2018-10-13T14:00:00Z" + } + }, + "logo": { + "crop_mask": { + "top_left": { + "x": 0, + "y": 145 + }, + "width": 3000, + "height": 1500 + }, + "original": { + "url": "https://img.evbuc.com/https%3A%2F%2Fcdn.evbuc.com%2Fimages%2F51160475%2F200379386367%2F1%2Foriginal.jpg?auto=compress&s=ceea246e5556a880a8396ccabf646b92", + "width": 3000, + "height": 2000 + }, + "id": "51160475", + "url": "https://img.evbuc.com/https%3A%2F%2Fcdn.evbuc.com%2Fimages%2F51160475%2F200379386367%2F1%2Foriginal.jpg?h=200&w=450&auto=compress&rect=0%2C145%2C3000%2C1500&s=295a58b4c6582d863fc1d57495ed1d49", + "aspect_ratio": "2", + "edge_color": "#847672", + "edge_color_set": true + } + }, + { + "name": { + "text": "Holywood Code Club - Saturday 10th November", + "html": "Holywood Code Club - Saturday 10th November" + }, + "description": { + "text": "Come join us at CodeClub Holywood!\nLet your creativity have a stretch…… CodeClub is a volunteer lead, global movement running free coding clubs for young people. \n7-17 year olds of all abilities welcome. All young people must be accompanied by a responsible adult for the duration of the session.\n\n\nLearn to Code\n\n\n\nBuild websites\n\n\nMake games\n\n\nCreate apps for your phone\n\n\n\nFun & Social\n\n\nMake Friends\n\n\nGet inspired by technology\n\n\nMentors there to help\n\n\nFree\n\n\nPlease bring:\n\n\na laptop if you have one but don't worry if you don't as one can be provided on the day\n\n\na set of headphones\n\n", + "html": "

Come join us at CodeClub Holywood!

\n

Let your creativity have a stretch…… CodeClub is a volunteer lead, global movement running free coding clubs for young people. 

\n

7-17 year olds of all abilities welcome. All young people must be accompanied by a responsible adult for the duration of the session.

\n\n

Please bring:

\n" + }, + "id": "47149148372", + "url": "https://www.eventbrite.co.uk/e/holywood-code-club-saturday-10th-november-registration-47149148372?aff=ebapi", + "start": { + "timezone": "Europe/London", + "local": "2018-11-10T13:30:00", + "utc": "2018-11-10T13:30:00Z" + }, + "end": { + "timezone": "Europe/London", + "local": "2018-11-10T15:00:00", + "utc": "2018-11-10T15:00:00Z" + }, + "organization_id": "202325275908", + "created": "2018-06-17T21:28:44Z", + "changed": "2018-06-17T21:29:45Z", + "capacity": null, + "capacity_is_custom": null, + "status": "live", + "currency": "GBP", + "listed": true, + "shareable": true, + "online_event": false, + "tx_time_limit": 480, + "hide_start_date": false, + "hide_end_date": false, + "locale": "en_GB", + "is_locked": false, + "privacy_setting": "unlocked", + "is_series": false, + "is_series_parent": false, + "is_reserved_seating": false, + "show_pick_a_seat": false, + "show_seatmap_thumbnail": false, + "show_colors_in_seatmap_thumbnail": false, + "source": "create_2.0", + "is_free": true, + "version": "3.0.0", + "logo_id": "46203979", + "organizer_id": "12884057472", + "venue_id": "18686663", + "category_id": "102", + "subcategory_id": null, + "format_id": "9", + "resource_uri": "https://www.eventbriteapi.com/v3/events/47149148372/", + "is_externally_ticketed": false, + "category": { + "resource_uri": "https://www.eventbriteapi.com/v3/categories/102/", + "id": "102", + "name": "Science & Technology", + "name_localized": "Science & Technology", + "short_name": "Science & Tech", + "short_name_localized": "Science & Tech" + }, + "subcategory": null, + "format": { + "resource_uri": "https://www.eventbriteapi.com/v3/formats/9/", + "id": "9", + "name": "Class, Training, or Workshop", + "name_localized": "Class, Training, or Workshop", + "short_name": "Class", + "short_name_localized": "Class" + }, + "venue": { + "address": { + "address_1": "Knocknagoney Rd ", + "address_2": null, + "city": "Belfast", + "region": "Antrim", + "postal_code": "BT4 2PW", + "country": "GB", + "latitude": "54.6176244", + "longitude": "-5.8542112999999745", + "localized_address_display": "Knocknagoney Rd , Belfast, BT4 2PW", + "localized_area_display": "Belfast", + "localized_multi_line_address_display": [ + "Knocknagoney Rd", + "Belfast", + "BT4 2PW" + ] + }, + "resource_uri": "https://www.eventbriteapi.com/v3/venues/18686663/", + "id": "18686663", + "age_restriction": null, + "capacity": null, + "name": "Community Room - Tesco Extra Knocknagoney", + "latitude": "54.6176244", + "longitude": "-5.8542112999999745" + }, + "refund_policy": { + "refund_policy": "not_defined" + }, + "bookmark_info": { + "bookmarked": false + }, + "organizer": { + "description": { + "text": "CodeClub Holywood is a new group of volunteers who are all keen to help children and young people aware of the value and fun of being able to code.", + "html": "

CodeClub Holywood is a new group of volunteers who are all keen to help children and young people aware of the value and fun of being able to code.

" + }, + "long_description": { + "text": "Come join us at CodeClub Holywood!Let your creativity have a stretch…… CodeClub is a volunteer lead, global movement running free coding clubs for young people.7-17 year olds of all abilities welcome. All young people under the age of 15 must be accompanied by a responsible adult for the duration of the session.\r\n\r\nLearn to Code\r\nBuild websites\r\nMake games\r\nCreate apps for your phone\r\nFun & Social\r\nMake Friends\r\nGet inspired by technology\r\nMentors there to help\r\nFree\r\n\r\n \r\nPlease bring:\r\n\r\na laptop if you have one but don't worry if you don't as one can be provided on the day\r\na set of headphones\r\n\r\n \r\nVisit our facebook page to see more information about what we get up to and for our data processing policy.\r\n \r\n \r\n ", + "html": "

Come join us at CodeClub Holywood!

Let your creativity have a stretch…… CodeClub is a volunteer lead, global movement running free coding clubs for young people.

7-17 year olds of all abilities welcome. All young people under the age of 15 must be accompanied by a responsible adult for the duration of the session.

\r\n\r\n

 

\r\n

Please bring:

\r\n\r\n

 

\r\n

Visit our facebook page to see more information about what we get up to and for our data processing policy.

\r\n

 

\r\n

 

\r\n

 

" + }, + "logo": null, + "resource_uri": "https://www.eventbriteapi.com/v3/organizers/12884057472/", + "id": "12884057472", + "name": "Code Club Holywood", + "url": "https://www.eventbrite.co.uk/o/code-club-holywood-12884057472", + "num_past_events": 30, + "num_future_events": 4, + "twitter": "codeclubhwood", + "facebook": "codeclubholywood", + "logo_id": null + }, + "ticket_availability": { + "has_available_tickets": true, + "minimum_ticket_price": { + "currency": "GBP", + "value": 0, + "major_value": "0.00", + "display": "0.00 GBP" + }, + "maximum_ticket_price": { + "currency": "GBP", + "value": 0, + "major_value": "0.00", + "display": "0.00 GBP" + }, + "is_sold_out": false, + "start_sales_date": { + "timezone": "Europe/London", + "local": "2018-10-22T09:30:00", + "utc": "2018-10-22T08:30:00Z" + } + }, + "logo": { + "crop_mask": { + "top_left": { + "x": 23, + "y": 135 + }, + "width": 446, + "height": 223 + }, + "original": { + "url": "https://img.evbuc.com/https%3A%2F%2Fcdn.evbuc.com%2Fimages%2F46203979%2F202325275908%2F1%2Foriginal.jpg?auto=compress&s=6243ca54da44a4d699eef8fdcd5154f3", + "width": 500, + "height": 500 + }, + "id": "46203979", + "url": "https://img.evbuc.com/https%3A%2F%2Fcdn.evbuc.com%2Fimages%2F46203979%2F202325275908%2F1%2Foriginal.jpg?h=200&w=450&auto=compress&rect=23%2C135%2C446%2C223&s=d7955c91802a83c7da2e4289dcd01d6d", + "aspect_ratio": "2", + "edge_color": null, + "edge_color_set": true + } + }, + { + "name": { + "text": "Product Management Essentials 102 Training Workshop - Belfast", + "html": "Product Management Essentials 102 Training Workshop - Belfast" + }, + "description": { + "text": "Increasing your strategic impact as a product manager\nTraining Workshop Overview\nEssentials 102  is an overview course intended for confident product managers who are looking to increase their strategic skills and influence. The intention of this course is to help product managers build a strategic layer onto their core product practices, and focus on the soft skills and influencing tactics that are often needed to ensure effective product delivery.  It seeks to answer the questions:\n\nHow can product managers increase organisational understanding of product practice?\nWhat parts of their process can be used as tools for increased alignment?\nHow can product teams craft an evidence-driven product vision and ensure buy-in?\n\nThis course is centered on the senior product manager’s role between the product team and the broader business. In order for teams to deliver effectively, they need buy-in and support from their stakeholders. Participants will gain an understanding of how to sharpen their product practice so that it becomes an alignment and educational tool.  \n\nWhat we’ll cover on the day\nEssentials 102 is a full-day workshop comprised of six modules. Each module includes a lecture component on theory and practice interspersed with up to three hands-on activities. This ensures that participants have an opportunity to apply and work with concepts in a setting that will answer questions and facilitate critical thinking. The following modules will be covered:\n\nEvaluating opportunity: Understanding how to unpack product assumptions and line up macro data to establish product viability and the foundations for product/market fit\nImplementing user research: Breaks down the components of running a user research round and what is needed to ensure maximum value of the time invested\nResearch techniques: Reviewing a range of research methodologies, beyond the classic interview, that help product teams validate problem and solution\nSynthesis: Distilling insights from research and how to collaborate with stakeholders to deepen user understanding and influence\nPrioritisation: Covering a range of techniques and their uses for alignment at points of product development lifecycle\nStakeholder management: A deep-dive into organizational relationships and understanding how to build a communication strategy\n\n\n\nMind the Product Trainers\nEvery Mind the Product trainer is a working product manager who has worked with multiple products and domains. Your trainer’s product management experience enriches the curriculum by delivering diverse perspectives on best practice in different scenarios. You will hear about the products they have worked on in the past, what went well, what didn’t go so well, and how they tried to make improvements. Our trainers’ main goal is not to provide participants with all of the answers, but help facilitate them in asking the right questions.  \n\nAbout Your Trainers\n\nEmma Mulholland, Senior Product Manager\nEmma has over 11 years' experience in Product. Recently joining ShopKeep as a Product Manager, Emma previously worked in an XP (extreme programming) lab for Allstate where she has used lean techniques and Design Thinking to solve business problems across the enterprise. Prior to that Emma worked as a Product Manager in eCommerce, working on the Search and User Experience for Marks and Spencer, and Tesco. She's a founder/organiser of ProductTank Belfast, and in her spare time loves being outdoors running, cycling and hiking. \nGraeme Stuart, Head of Product\nGraeme has over 14 years core product experience from startups through scale-ups to enterprise. He currently works as VP Product at Deep-Labs.com where his team is building a platform next generation risk mitigation & hyper-personalized consumer experiences through deep identity management. He loves bringing new initiatives to market and at the same time, building out product expertise in companies who hadn’t valued it before. He’s passionate in telling anyone who will listen that Belfast can provide global product expertise not only talented, well-priced engineers. Graeme advises startups wanting to scale & wanting to dip their toe into product management. He is a co-founder & organiser of ProductTank Belfast. He also tries to spend quality time with his family & play any sport in the little spare time he has.\n\n\nAgenda\n\n\nRegistration will begin at 9.00\n\n\nClass will start at 9.30 sharp and end at 17.00\n\n\nWe'll also provide a light breakfast, buffet lunch and plenty of tea and coffee to fuel you through the day.\n\n\n\nFrequently Asked Questions\nCan I change the name or other details on my tickets?Yes, but only the person who purchased the ticket can make these changes on Eventbrite. You are free to change your ticket details up to two days before the event, including name, title, etc. Please make sure these details are correct as they will be what we show on your badge! Just login to Eventbrite and make the changes, following these instructions. If you can’t reach the person who purchased the ticket in order to get them to change the information please contact us on tickets@mindtheproduct.com and we will help you make the updates.\nCan I get a refund?We offer a full refund up to one month before the event. Simply log in to Eventbrite and request the refund following these instructions. As with changes, only the person who purchased the tickets can request a refund.\nCan I pay by invoice?As we are a small team we only offer payment by invoice if you are buying 5 tickets or more due to the additional overhead. Early Bird conference tickets cannot be purchased by invoice. Please also note that no tickets are held/issued until payment of the invoice has been received.  Request to pay by invoice by emailing tickets@mindtheproduct.com\n\nTickets are not held until payment has been made – there are no exceptions to this.\nWe cannot agree to any terms and conditions associated with Purchase Order numbers or other supplier agreements.\nWe do not fill in supplier detail forms for ticket invoices – if you cannot find details you require on our website – please ask.\n\n\nFrequently Asked Questions | Terms & Conditions  |  Code of Conduct  |  Privacy Policy\n\n", + "html": "

Increasing your strategic impact as a product manager

\n

Training Workshop Overview

\n

Essentials 102  is an overview course intended for confident product managers who are looking to increase their strategic skills and influence. The intention of this course is to help product managers build a strategic layer onto their core product practices, and focus on the soft skills and influencing tactics that are often needed to ensure effective product delivery.  It seeks to answer the questions:

\n\n

This course is centered on the senior product manager’s role between the product team and the broader business. In order for teams to deliver effectively, they need buy-in and support from their stakeholders. Participants will gain an understanding of how to sharpen their product practice so that it becomes an alignment and educational tool.  

\n


\n

What we’ll cover on the day

\n

Essentials 102 is a full-day workshop comprised of six modules. Each module includes a lecture component on theory and practice interspersed with up to three hands-on activities. This ensures that participants have an opportunity to apply and work with concepts in a setting that will answer questions and facilitate critical thinking. The following modules will be covered:

\n\n


\n
\n

Mind the Product Trainers

\n

Every Mind the Product trainer is a working product manager who has worked with multiple products and domains. Your trainer’s product management experience enriches the curriculum by delivering diverse perspectives on best practice in different scenarios. You will hear about the products they have worked on in the past, what went well, what didn’t go so well, and how they tried to make improvements. Our trainers’ main goal is not to provide participants with all of the answers, but help facilitate them in asking the right questions.  

\n


\n

About Your Trainers

\n
\n

Emma Mulholland, Senior Product Manager

\n

Emma has over 11 years' experience in Product. Recently joining ShopKeep as a Product Manager, Emma previously worked in an XP (extreme programming) lab for Allstate where she has used lean techniques and Design Thinking to solve business problems across the enterprise. Prior to that Emma worked as a Product Manager in eCommerce, working on the Search and User Experience for Marks and Spencer, and Tesco. She's a founder/organiser of ProductTank Belfast, and in her spare time loves being outdoors running, cycling and hiking. 

\n

Graeme Stuart, Head of Product

\n

Graeme has over 14 years core product experience from startups through scale-ups to enterprise. He currently works as VP Product at Deep-Labs.com where his team is building a platform next generation risk mitigation & hyper-personalized consumer experiences through deep identity management. He loves bringing new initiatives to market and at the same time, building out product expertise in companies who hadn’t valued it before. He’s passionate in telling anyone who will listen that Belfast can provide global product expertise not only talented, well-priced engineers. Graeme advises startups wanting to scale & wanting to dip their toe into product management. He is a co-founder & organiser of ProductTank Belfast. He also tries to spend quality time with his family & play any sport in the little spare time he has.

\n


\n
\n

Agenda

\n\n

We'll also provide a light breakfast, buffet lunch and plenty of tea and coffee to fuel you through the day.

\n


\n


\n
\n

Frequently Asked Questions

\n

Can I change the name or other details on my tickets?
Yes, but only the person who purchased the ticket can make these changes on Eventbrite. You are free to change your ticket details up to two days before the event, including name, title, etc. Please make sure these details are correct as they will be what we show on your badge! Just login to Eventbrite and make the changes, following these instructions. If you can’t reach the person who purchased the ticket in order to get them to change the information please contact us on tickets@mindtheproduct.com and we will help you make the updates.

\n

Can I get a refund?
We offer a full refund up to one month before the event. Simply log in to Eventbrite and request the refund following these instructions. As with changes, only the person who purchased the tickets can request a refund.

\n

Can I pay by invoice?
As we are a small team we only offer payment by invoice if you are buying 5 tickets or more due to the additional overhead. Early Bird conference tickets cannot be purchased by invoice. Please also note that no tickets are held/issued until payment of the invoice has been received.  Request to pay by invoice by emailing tickets@mindtheproduct.com

\n\n


\n

Frequently Asked Questions | Terms & Conditions  |  Code of Conduct  |  Privacy Policy

\n


\n
" + }, + "id": "49693729282", + "url": "https://www.eventbrite.com/e/product-management-essentials-102-training-workshop-belfast-tickets-49693729282?aff=ebapi", + "start": { + "timezone": "Europe/London", + "local": "2018-11-12T09:30:00", + "utc": "2018-11-12T09:30:00Z" + }, + "end": { + "timezone": "Europe/London", + "local": "2018-11-12T17:00:00", + "utc": "2018-11-12T17:00:00Z" + }, + "organization_id": "27734885637", + "created": "2018-08-30T13:47:45Z", + "changed": "2018-10-19T09:27:43Z", + "capacity": null, + "capacity_is_custom": null, + "status": "live", + "currency": "GBP", + "listed": true, + "shareable": true, + "online_event": false, + "tx_time_limit": 900, + "hide_start_date": false, + "hide_end_date": false, + "locale": "en_US", + "is_locked": false, + "privacy_setting": "unlocked", + "is_series": false, + "is_series_parent": false, + "is_reserved_seating": false, + "show_pick_a_seat": false, + "show_seatmap_thumbnail": false, + "show_colors_in_seatmap_thumbnail": false, + "source": "create_2.0", + "is_free": false, + "version": "3.0.0", + "logo_id": "49107020", + "organizer_id": "1962515111", + "venue_id": "25589156", + "category_id": "102", + "subcategory_id": null, + "format_id": "9", + "resource_uri": "https://www.eventbriteapi.com/v3/events/49693729282/", + "is_externally_ticketed": false, + "category": { + "resource_uri": "https://www.eventbriteapi.com/v3/categories/102/", + "id": "102", + "name": "Science & Technology", + "name_localized": "Science & Technology", + "short_name": "Science & Tech", + "short_name_localized": "Science & Tech" + }, + "subcategory": null, + "format": { + "resource_uri": "https://www.eventbriteapi.com/v3/formats/9/", + "id": "9", + "name": "Class, Training, or Workshop", + "name_localized": "Class, Training, or Workshop", + "short_name": "Class", + "short_name_localized": "Class" + }, + "venue": { + "address": { + "address_1": "10 Exchange Street West", + "address_2": null, + "city": "Belfast", + "region": null, + "postal_code": "BT1 2NJ", + "country": "GB", + "latitude": "54.6035924", + "longitude": "-5.9275539999999864", + "localized_address_display": "10 Exchange Street West, Belfast, BT1 2NJ", + "localized_area_display": "Belfast", + "localized_multi_line_address_display": [ + "10 Exchange Street West", + "Belfast", + "BT1 2NJ" + ] + }, + "resource_uri": "https://www.eventbriteapi.com/v3/venues/25589156/", + "id": "25589156", + "age_restriction": null, + "capacity": null, + "name": "The MAC", + "latitude": "54.6035924", + "longitude": "-5.9275539999999864" + }, + "refund_policy": { + "refund_policy": "not_defined" + }, + "bookmark_info": { + "bookmarked": false + }, + "organizer": { + "description": { + "text": "Mind the Product is the world’s largest product management community, with regular local ProductTank meetups in over 150 cities around the world, as well as the biggest and best training events, workshops, and conferences in the world - with annual events in London, San Francisco, Hamburg, and more. These are the go-to events for meeting other product managers, designers, and developers and honing your product craft.", + "html": "

Mind the Product is the world’s largest product management community, with regular local ProductTank meetups in over 150 cities around the world, as well as the biggest and best training events, workshops, and conferences in the world - with annual events in London, San Francisco, Hamburg, and more. These are the go-to events for meeting other product managers, designers, and developers and honing your product craft.

" + }, + "long_description": { + "text": "Mind the Product is the world’s largest product management community, with regular local ProductTank meetups in over 150 cities around the world, as well as the biggest and best training events, workshops, and conferences in the world - with annual events in London, San Francisco, Hamburg, and more. These are the go-to events for meeting other product managers, designers, and developers and honing your product craft.", + "html": "

Mind the Product is the world’s largest product management community, with regular local ProductTank meetups in over 150 cities around the world, as well as the biggest and best training events, workshops, and conferences in the world - with annual events in London, San Francisco, Hamburg, and more. These are the go-to events for meeting other product managers, designers, and developers and honing your product craft.

" + }, + "logo": { + "crop_mask": null, + "original": null, + "id": "139997", + "url": "https://cdn.evbuc.com/images/139997/27734885637/1/logo.png", + "aspect_ratio": null, + "edge_color": null, + "edge_color_set": null + }, + "resource_uri": "https://www.eventbriteapi.com/v3/organizers/1962515111/", + "id": "1962515111", + "name": "Mind the Product", + "url": "https://www.eventbrite.com/o/mind-the-product-1962515111", + "vanity_url": "http://mindtheproduct.eventbrite.com", + "num_past_events": 79, + "num_future_events": 24, + "website": "http://www.mindtheproduct.com", + "twitter": "mindtheproduct", + "facebook": "mindtheproduct", + "logo_id": "139997" + }, + "ticket_availability": { + "has_available_tickets": true, + "minimum_ticket_price": { + "currency": "GBP", + "value": 54900, + "major_value": "549.00", + "display": "549.00 GBP" + }, + "maximum_ticket_price": { + "currency": "GBP", + "value": 54900, + "major_value": "549.00", + "display": "549.00 GBP" + }, + "is_sold_out": false, + "start_sales_date": { + "timezone": "Europe/London", + "local": "2018-09-05T10:00:00", + "utc": "2018-09-05T09:00:00Z" + } + }, + "logo": { + "crop_mask": { + "top_left": { + "x": 0, + "y": 0 + }, + "width": 2160, + "height": 1080 + }, + "original": { + "url": "https://img.evbuc.com/https%3A%2F%2Fcdn.evbuc.com%2Fimages%2F49107020%2F27734885637%2F1%2Foriginal.jpg?auto=compress&s=3d789447b422260a386e5f3600feabb4", + "width": 2160, + "height": 1080 + }, + "id": "49107020", + "url": "https://img.evbuc.com/https%3A%2F%2Fcdn.evbuc.com%2Fimages%2F49107020%2F27734885637%2F1%2Foriginal.jpg?h=200&w=450&auto=compress&rect=0%2C0%2C2160%2C1080&s=92599c1e149e13a4d708209286a479ef", + "aspect_ratio": "2", + "edge_color": null, + "edge_color_set": true + } + }, + { + "name": { + "text": "Zombie Science: Worst Case Scenario ,13th Nov 7pm Market House, Monaghan ", + "html": "Zombie Science: Worst Case Scenario ,13th Nov 7pm Market House, Monaghan " + }, + "description": { + "text": "Zombie Science returns with a spoof tutorial on the real science behind a Zombie epidemic. Join Theoretical Zombiologist Doctor Smith as he puts you at the heart of a hypothetical Zombieism outbreak and teaches you what to do when the inevitable Zombie pandemic occurs.  \nWorst Case Scenario is the second show in the Zombie Science spoof lecture series which has attracted audiences of over 36,000 at more than 400 lectures across the UK and Ireland performances at the London Horror Festival and Green Man Festival.       \n Zombie Science: Worst Case Scenario focuses on identifying, containing and controlling disease, and at key points in the show, the audience is invited to vote on courses of action that will determine the outcome of the show.  Only science can save you from the worst case scenario.", + "html": "

Zombie Science returns with a spoof tutorial on the real science behind a Zombie epidemic. Join Theoretical Zombiologist Doctor Smith as he puts you at the heart of a hypothetical Zombieism outbreak and teaches you what to do when the inevitable Zombie pandemic occurs. 

\n

Worst Case Scenario is the second show in the Zombie Science spoof lecture series which has attracted audiences of over 36,000 at more than 400 lectures across the UK and Ireland performances at the London Horror Festival and Green Man Festival.      

\n

 Zombie Science: Worst Case Scenario focuses on identifying, containing and controlling disease, and at key points in the show, the audience is invited to vote on courses of action that will determine the outcome of the show.  Only science can save you from the worst case scenario.

" + }, + "id": "50982052692", + "url": "https://www.eventbrite.ie/e/zombie-science-worst-case-scenario-13th-nov-7pm-market-house-monaghan-tickets-50982052692?aff=ebapi", + "start": { + "timezone": "Europe/Dublin", + "local": "2018-11-13T19:00:00", + "utc": "2018-11-13T19:00:00Z" + }, + "end": { + "timezone": "Europe/Dublin", + "local": "2018-11-13T20:30:00", + "utc": "2018-11-13T20:30:00Z" + }, + "organization_id": "187206852598", + "created": "2018-10-03T21:17:54Z", + "changed": "2018-10-19T14:35:10Z", + "capacity": null, + "capacity_is_custom": null, + "status": "live", + "currency": "EUR", + "listed": true, + "shareable": true, + "online_event": false, + "tx_time_limit": 480, + "hide_start_date": false, + "hide_end_date": false, + "locale": "en_IE", + "is_locked": false, + "privacy_setting": "unlocked", + "is_series": false, + "is_series_parent": false, + "is_reserved_seating": false, + "show_pick_a_seat": false, + "show_seatmap_thumbnail": false, + "show_colors_in_seatmap_thumbnail": false, + "source": "create_2.0", + "is_free": true, + "version": "3.0.0", + "logo_id": "50771832", + "organizer_id": "11479577453", + "venue_id": "16952913", + "category_id": "102", + "subcategory_id": null, + "format_id": "2", + "resource_uri": "https://www.eventbriteapi.com/v3/events/50982052692/", + "is_externally_ticketed": false, + "category": { + "resource_uri": "https://www.eventbriteapi.com/v3/categories/102/", + "id": "102", + "name": "Science & Technology", + "name_localized": "Science & Technology", + "short_name": "Science & Tech", + "short_name_localized": "Science & Tech" + }, + "subcategory": null, + "format": { + "resource_uri": "https://www.eventbriteapi.com/v3/formats/2/", + "id": "2", + "name": "Seminar or Talk", + "name_localized": "Seminar or Talk", + "short_name": "Seminar", + "short_name_localized": "Seminar" + }, + "venue": { + "address": { + "address_1": "Market Street", + "address_2": null, + "city": "Monaghan", + "region": "County Monaghan", + "postal_code": null, + "country": "IE", + "latitude": "54.247567", + "longitude": "-6.972217999999998", + "localized_address_display": "Market Street, Monaghan", + "localized_area_display": "Monaghan", + "localized_multi_line_address_display": [ + "Market Street", + "Monaghan" + ] + }, + "resource_uri": "https://www.eventbriteapi.com/v3/venues/16952913/", + "id": "16952913", + "age_restriction": null, + "capacity": null, + "name": "The Market House Monaghan", + "latitude": "54.247567", + "longitude": "-6.972217999999998" + }, + "refund_policy": { + "refund_policy": "not_defined" + }, + "bookmark_info": { + "bookmarked": false + }, + "organizer": { + "description": { + "text": "Now in it's 3rd year, the Cavan Monaghan Science Festival is lead by Monaghan County Council in partnership with Cavan County Council and Cavan Monaghan Education and Training Board,  funded by SFI. This  innovative festival will run from 10th - 24th November 2018 with hundreds of events planned to take place across the two counties in libraries, museums, schools, community centres and art centres.  \r\nMost Events are Free but Booking is essential", + "html": "

Now in it's 3rd year, the Cavan Monaghan Science Festival is lead by Monaghan County Council in partnership with Cavan County Council and Cavan Monaghan Education and Training Board,  funded by SFI. This  innovative festival will run from 10th - 24th November 2018 with hundreds of events planned to take place across the two counties in libraries, museums, schools, community centres and art centres.  

\r\n

Most Events are Free but Booking is essential

" + }, + "long_description": { + "text": "Now in it's 3rd year, the Cavan Monaghan Science Festival is lead by Monaghan County Council in partnership with Cavan County Council and Cavan Monaghan Education and Training Board,  funded by SFI. This  innovative festival will run from 10th - 24th November 2018 with hundreds of events planned to take place across the two counties in libraries, museums, schools, community centres and art centres.  \r\nMost Events are Free but Booking is essential", + "html": "

Now in it's 3rd year, the Cavan Monaghan Science Festival is lead by Monaghan County Council in partnership with Cavan County Council and Cavan Monaghan Education and Training Board,  funded by SFI. This  innovative festival will run from 10th - 24th November 2018 with hundreds of events planned to take place across the two counties in libraries, museums, schools, community centres and art centres.  

\r\n

Most Events are Free but Booking is essential

" + }, + "logo": { + "crop_mask": null, + "original": null, + "id": "36168369", + "url": "https://cdn.evbuc.com/images/36168369/187206852598/2/logo.jpg", + "aspect_ratio": null, + "edge_color": null, + "edge_color_set": null + }, + "resource_uri": "https://www.eventbriteapi.com/v3/organizers/11479577453/", + "id": "11479577453", + "name": "Cavan Monaghan Science Festival", + "url": "https://www.eventbrite.ie/o/cavan-monaghan-science-festival-11479577453", + "num_past_events": 108, + "num_future_events": 65, + "website": "http://www.cavanmonaghansciencefestival.ie", + "twitter": "@CMSciFest", + "facebook": "CavanMonaghanScienceFestival", + "logo_id": "36168369" + }, + "ticket_availability": { + "has_available_tickets": true, + "minimum_ticket_price": { + "currency": "EUR", + "value": 0, + "major_value": "0.00", + "display": "0.00 EUR" + }, + "maximum_ticket_price": { + "currency": "EUR", + "value": 0, + "major_value": "0.00", + "display": "0.00 EUR" + }, + "is_sold_out": false, + "start_sales_date": { + "timezone": "Europe/Dublin", + "local": "2018-10-19T09:00:00", + "utc": "2018-10-19T08:00:00Z" + } + }, + "logo": { + "crop_mask": { + "top_left": { + "x": 0, + "y": 19 + }, + "width": 1600, + "height": 800 + }, + "original": { + "url": "https://img.evbuc.com/https%3A%2F%2Fcdn.evbuc.com%2Fimages%2F50771832%2F187206852598%2F1%2Foriginal.jpg?auto=compress&s=ebafa8d1e125b7ff41fcb42f65fc424f", + "width": 1600, + "height": 1067 + }, + "id": "50771832", + "url": "https://img.evbuc.com/https%3A%2F%2Fcdn.evbuc.com%2Fimages%2F50771832%2F187206852598%2F1%2Foriginal.jpg?h=200&w=450&auto=compress&rect=0%2C19%2C1600%2C800&s=550f0f4c371ad9a2ec60248021d9fafd", + "aspect_ratio": "2", + "edge_color": "#4b4e31", + "edge_color_set": true + } + } + ], + "location": { + "latitude": "54.642513", + "within": "96.5606400369", + "longitude": "-6.762739" + } +} diff --git a/lambdas/tests/eventbrite/handlers/tranformer.test.js b/lambdas/tests/eventbrite/handlers/tranformer.test.js new file mode 100644 index 00000000..c074d75d --- /dev/null +++ b/lambdas/tests/eventbrite/handlers/tranformer.test.js @@ -0,0 +1,9 @@ +const { prefix } = require("../test-utils"); +const transformer = require(`${prefix}/handlers/transformer`); + +describe("Eventbrite transformer", function() { + it("is a lambda handler", function() { + expect(typeof transformer).toBe("object"); + expect(typeof transformer.transform).toBe("function"); + }); +}); diff --git a/lambdas/tests/eventbrite/test-utils.js b/lambdas/tests/eventbrite/test-utils.js new file mode 100644 index 00000000..230ab935 --- /dev/null +++ b/lambdas/tests/eventbrite/test-utils.js @@ -0,0 +1,23 @@ +jest.mock("../../eventbrite/node_modules/aws-lambda-data-utils", () => ({ + getFromWeb: jest.fn(), + getFromS3: jest.fn() +})); + +jest.mock("../../eventbrite/utils", () => + Object.assign(require.requireActual("../../eventbrite/utils"), { + uploadTo: jest.fn() + }) +); + +const prefix = "../../../eventbrite"; + +const resolved = data => () => Promise.resolve(data); + +const resolvedResponse = (data = {}, overrides) => + Promise.resolve(JSON.stringify(Object.assign(data, overrides))); + +module.exports = { + prefix, + resolved, + resolvedResponse +}; diff --git a/lambdas/tests/farsetlabs/handlers/producer.test.js b/lambdas/tests/farsetlabs/handlers/producer.test.js new file mode 100644 index 00000000..8d8c8c2f --- /dev/null +++ b/lambdas/tests/farsetlabs/handlers/producer.test.js @@ -0,0 +1,8 @@ +const producer = require("../../../farsetlabs/handlers/producer"); + +describe("Farsetlabs Producer", function() { + it("is a lambda handler", function() { + expect(typeof producer).toBe("object"); + expect(typeof producer.produce).toBe("function"); + }); +}); diff --git a/lambdas/tests/farsetlabs/handlers/tranformer.test.js b/lambdas/tests/farsetlabs/handlers/tranformer.test.js new file mode 100644 index 00000000..dbc41b25 --- /dev/null +++ b/lambdas/tests/farsetlabs/handlers/tranformer.test.js @@ -0,0 +1,8 @@ +const transformer = require("../../../farsetlabs/handlers/transformer"); + +describe("Farsetlabs transformer", function() { + it("is a lambda handler", function() { + expect(typeof transformer).toBe("object"); + expect(typeof transformer.transform).toBe("function"); + }); +}); diff --git a/lambdas/tests/meetupcom/handlers/producer.test.js b/lambdas/tests/meetupcom/handlers/producer.test.js new file mode 100644 index 00000000..678cca4f --- /dev/null +++ b/lambdas/tests/meetupcom/handlers/producer.test.js @@ -0,0 +1,8 @@ +const producer = require("../../../meetupcom/handlers/producer"); + +describe("Meetup.com Producer", function() { + it("is a lambda handler", function() { + expect(typeof producer).toBe("object"); + expect(typeof producer.produce).toBe("function"); + }); +}); diff --git a/lambdas/tests/meetupcom/handlers/tranformer.test.js b/lambdas/tests/meetupcom/handlers/tranformer.test.js new file mode 100644 index 00000000..ec3e2e99 --- /dev/null +++ b/lambdas/tests/meetupcom/handlers/tranformer.test.js @@ -0,0 +1,8 @@ +const transformer = require("../../../meetupcom/handlers/transformer"); + +describe("Meetup.com transformer", function() { + it("is a lambda handler", function() { + expect(typeof transformer).toBe("object"); + expect(typeof transformer.transform).toBe("function"); + }); +}); diff --git a/test.sh b/test.sh index 376368d3..c89d133a 100755 --- a/test.sh +++ b/test.sh @@ -48,6 +48,8 @@ inspect $? client-test docker-compose -f $file build lambdas-test docker-compose -f $file run lambdas-test npm run lint inspect $? lambdas-lint +docker-compose -f $file run lambdas-test npm test +inspect $? lambdas-test # Integration tests if [[ "${env}" != "stage" ]]; then