diff --git a/.gitignore b/.gitignore index 8b7594f6c..d9487025d 100644 --- a/.gitignore +++ b/.gitignore @@ -8,6 +8,9 @@ node_modules .npm .released-packages +# Integration tests dependencies cache +integration-tests/package-lock.json + # Build artifacts _book .changelog @@ -19,4 +22,4 @@ coverage .DS_Store # IDE tools -.idea \ No newline at end of file +.idea diff --git a/integration-tests/package-lock.json b/integration-tests/package-lock.json deleted file mode 100644 index 17bd9a81d..000000000 --- a/integration-tests/package-lock.json +++ /dev/null @@ -1,1796 +0,0 @@ -{ - "name": "@commercetools/integration-tests", - "version": "1.0.0", - "lockfileVersion": 1, - "requires": true, - "dependencies": { - "@commercetools/api-request-builder": { - "version": "file:../packages/api-request-builder/commercetools-api-request-builder-3.2.0.tgz", - "integrity": "sha1-6SbtA9wrqyf/n3EIYtDFGC2wxYg=" - }, - "@commercetools/csv-parser-discount-code": { - "version": "file:../packages/csv-parser-discount-code/commercetools-csv-parser-discount-code-1.1.2.tgz", - "integrity": "sha1-Yr1W92jMn2ZgBxz/jjmqUy8mVdg=", - "requires": { - "csv-parser": "1.11.0", - "flat": "2.0.1", - "highland": "2.11.1", - "JSONStream": "1.3.1", - "lodash": "4.17.4", - "npmlog": "4.1.2", - "pretty-error": "2.1.1", - "tmp": "0.0.31", - "yargs": "8.0.2" - }, - "dependencies": { - "tmp": { - "version": "0.0.31", - "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.31.tgz", - "integrity": "sha1-jzirlDjhcxXl29izZX6L+yd65Kc=", - "requires": { - "os-tmpdir": "1.0.2" - } - } - } - }, - "@commercetools/csv-parser-orders": { - "version": "file:../packages/csv-parser-orders/commercetools-csv-parser-orders-1.2.4.tgz", - "integrity": "sha1-O8LkyYwOu6rFIxR5jMkM99UoJPs=", - "requires": { - "csv-parser": "1.11.0", - "highland": "2.11.1", - "JSONStream": "1.3.1", - "lodash": "4.17.4", - "npmlog": "4.1.2", - "object-path": "0.11.4", - "pretty-error": "2.1.1", - "yargs": "8.0.2" - } - }, - "@commercetools/csv-parser-price": { - "version": "file:../packages/csv-parser-price/commercetools-csv-parser-price-2.1.6.tgz", - "integrity": "sha1-vYbJYk+ibrZN++wpzydTNYC1wQE=", - "requires": { - "@commercetools/api-request-builder": "2.4.0", - "@commercetools/get-credentials": "file:../packages/get-credentials/commercetools-get-credentials-2.1.0.tgz", - "@commercetools/sdk-client": "file:../packages/sdk-client/commercetools-sdk-client-1.4.1.tgz", - "@commercetools/sdk-middleware-auth": "file:../packages/sdk-middleware-auth/commercetools-sdk-middleware-auth-3.4.0.tgz", - "@commercetools/sdk-middleware-http": "file:../packages/sdk-middleware-http/commercetools-sdk-middleware-http-2.2.0.tgz", - "@commercetools/sdk-middleware-user-agent": "file:../packages/sdk-middleware-user-agent/commercetools-sdk-middleware-user-agent-1.2.0.tgz", - "bluebird": "3.5.0", - "csv-parser": "1.11.0", - "flat": "2.0.1", - "highland": "2.11.1", - "JSONStream": "1.3.1", - "lodash.mapvalues": "4.6.0", - "lodash.memoize": "4.1.2", - "npmlog": "4.1.2", - "pretty-error": "2.1.1", - "yargs": "6.6.0" - }, - "dependencies": { - "@commercetools/api-request-builder": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/@commercetools/api-request-builder/-/api-request-builder-2.4.0.tgz", - "integrity": "sha1-KZ26PHxcrRcoC167cxYfNEVArCA=" - }, - "bluebird": { - "version": "3.5.0", - "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.5.0.tgz", - "integrity": "sha1-eRQg1/VR7qKJdFOop3ZT+WYG1nw=" - }, - "camelcase": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-3.0.0.tgz", - "integrity": "sha1-MvxLn82vhF/N9+c7uXysImHwqwo=" - }, - "find-up": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-1.1.2.tgz", - "integrity": "sha1-ay6YIrGizgpgq2TWEOzK1TyyTQ8=", - "requires": { - "path-exists": "2.1.0", - "pinkie-promise": "2.0.1" - } - }, - "load-json-file": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-1.1.0.tgz", - "integrity": "sha1-lWkFcI1YtLq0wiYbBPWfMcmTdMA=", - "requires": { - "graceful-fs": "4.1.11", - "parse-json": "2.2.0", - "pify": "2.3.0", - "pinkie-promise": "2.0.1", - "strip-bom": "2.0.0" - } - }, - "os-locale": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/os-locale/-/os-locale-1.4.0.tgz", - "integrity": "sha1-IPnxeuKe00XoveWDsT0gCYA8FNk=", - "requires": { - "lcid": "1.0.0" - } - }, - "path-exists": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-2.1.0.tgz", - "integrity": "sha1-D+tsZPD8UY2adU3V77YscCJ2H0s=", - "requires": { - "pinkie-promise": "2.0.1" - } - }, - "path-type": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-1.1.0.tgz", - "integrity": "sha1-WcRPfuSR2nBNpBXaWkBwuk+P5EE=", - "requires": { - "graceful-fs": "4.1.11", - "pify": "2.3.0", - "pinkie-promise": "2.0.1" - } - }, - "read-pkg": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-1.1.0.tgz", - "integrity": "sha1-9f+qXs0pyzHAR0vKfXVra7KePyg=", - "requires": { - "load-json-file": "1.1.0", - "normalize-package-data": "2.4.0", - "path-type": "1.1.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=", - "requires": { - "find-up": "1.1.2", - "read-pkg": "1.1.0" - } - }, - "strip-bom": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-2.0.0.tgz", - "integrity": "sha1-YhmoVhZSBJHzV4i9vxRHqZx+aw4=", - "requires": { - "is-utf8": "0.2.1" - } - }, - "which-module": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/which-module/-/which-module-1.0.0.tgz", - "integrity": "sha1-u6Y8qGGUiZT/MHc2CJ47lgJsKk8=" - }, - "yargs": { - "version": "6.6.0", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-6.6.0.tgz", - "integrity": "sha1-eC7CHvQDNF+DCoCMo9UTr1YGUgg=", - "requires": { - "camelcase": "3.0.0", - "cliui": "3.2.0", - "decamelize": "1.2.0", - "get-caller-file": "1.0.2", - "os-locale": "1.4.0", - "read-pkg-up": "1.0.1", - "require-directory": "2.1.1", - "require-main-filename": "1.0.1", - "set-blocking": "2.0.0", - "string-width": "1.0.2", - "which-module": "1.0.0", - "y18n": "3.2.1", - "yargs-parser": "4.2.1" - } - }, - "yargs-parser": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-4.2.1.tgz", - "integrity": "sha1-KczqwNxPA8bIe0qfIX3RjJ90hxw=", - "requires": { - "camelcase": "3.0.0" - } - } - } - }, - "@commercetools/discount-code-exporter": { - "version": "file:../packages/discount-code-exporter/commercetools-discount-code-exporter-1.0.0.tgz", - "integrity": "sha1-8C5bwLRhAl+bSaEkAZHaPf4w+J0=", - "requires": { - "@commercetools/api-request-builder": "file:../packages/api-request-builder/commercetools-api-request-builder-3.2.0.tgz", - "@commercetools/get-credentials": "file:../packages/get-credentials/commercetools-get-credentials-2.1.0.tgz", - "@commercetools/sdk-client": "file:../packages/sdk-client/commercetools-sdk-client-1.4.1.tgz", - "@commercetools/sdk-middleware-auth": "file:../packages/sdk-middleware-auth/commercetools-sdk-middleware-auth-3.4.0.tgz", - "@commercetools/sdk-middleware-http": "file:../packages/sdk-middleware-http/commercetools-sdk-middleware-http-2.2.0.tgz", - "@commercetools/sdk-middleware-user-agent": "file:../packages/sdk-middleware-user-agent/commercetools-sdk-middleware-user-agent-1.2.0.tgz", - "fast-csv": "2.4.0", - "flat": "2.0.1", - "JSONStream": "1.3.1", - "npmlog": "4.1.2", - "pretty-error": "2.1.1", - "yargs": "8.0.2" - } - }, - "@commercetools/discount-code-generator": { - "version": "file:../packages/discount-code-generator/commercetools-discount-code-generator-1.1.1.tgz", - "integrity": "sha1-nPjb/xxsGDMY+217OJTLH7dzm4A=", - "requires": { - "csv-parser": "1.11.0", - "flat": "2.0.1", - "json2csv": "3.11.1", - "npmlog": "4.1.2", - "pretty-error": "2.1.1", - "tokgen": "1.0.0", - "yargs": "7.1.0" - }, - "dependencies": { - "camelcase": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-3.0.0.tgz", - "integrity": "sha1-MvxLn82vhF/N9+c7uXysImHwqwo=" - }, - "find-up": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-1.1.2.tgz", - "integrity": "sha1-ay6YIrGizgpgq2TWEOzK1TyyTQ8=", - "requires": { - "path-exists": "2.1.0", - "pinkie-promise": "2.0.1" - } - }, - "load-json-file": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-1.1.0.tgz", - "integrity": "sha1-lWkFcI1YtLq0wiYbBPWfMcmTdMA=", - "requires": { - "graceful-fs": "4.1.11", - "parse-json": "2.2.0", - "pify": "2.3.0", - "pinkie-promise": "2.0.1", - "strip-bom": "2.0.0" - } - }, - "os-locale": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/os-locale/-/os-locale-1.4.0.tgz", - "integrity": "sha1-IPnxeuKe00XoveWDsT0gCYA8FNk=", - "requires": { - "lcid": "1.0.0" - } - }, - "path-exists": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-2.1.0.tgz", - "integrity": "sha1-D+tsZPD8UY2adU3V77YscCJ2H0s=", - "requires": { - "pinkie-promise": "2.0.1" - } - }, - "path-type": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-1.1.0.tgz", - "integrity": "sha1-WcRPfuSR2nBNpBXaWkBwuk+P5EE=", - "requires": { - "graceful-fs": "4.1.11", - "pify": "2.3.0", - "pinkie-promise": "2.0.1" - } - }, - "read-pkg": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-1.1.0.tgz", - "integrity": "sha1-9f+qXs0pyzHAR0vKfXVra7KePyg=", - "requires": { - "load-json-file": "1.1.0", - "normalize-package-data": "2.4.0", - "path-type": "1.1.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=", - "requires": { - "find-up": "1.1.2", - "read-pkg": "1.1.0" - } - }, - "strip-bom": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-2.0.0.tgz", - "integrity": "sha1-YhmoVhZSBJHzV4i9vxRHqZx+aw4=", - "requires": { - "is-utf8": "0.2.1" - } - }, - "which-module": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/which-module/-/which-module-1.0.0.tgz", - "integrity": "sha1-u6Y8qGGUiZT/MHc2CJ47lgJsKk8=" - }, - "yargs": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-7.1.0.tgz", - "integrity": "sha1-a6MY6xaWFyf10oT46gA+jWFU0Mg=", - "requires": { - "camelcase": "3.0.0", - "cliui": "3.2.0", - "decamelize": "1.2.0", - "get-caller-file": "1.0.2", - "os-locale": "1.4.0", - "read-pkg-up": "1.0.1", - "require-directory": "2.1.1", - "require-main-filename": "1.0.1", - "set-blocking": "2.0.0", - "string-width": "1.0.2", - "which-module": "1.0.0", - "y18n": "3.2.1", - "yargs-parser": "5.0.0" - } - }, - "yargs-parser": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-5.0.0.tgz", - "integrity": "sha1-J17PDX/+Bcd+ZOfIbkzZS/DhIoo=", - "requires": { - "camelcase": "3.0.0" - } - } - } - }, - "@commercetools/discount-code-importer": { - "version": "file:../packages/discount-code-importer/commercetools-discount-code-importer-1.0.0.tgz", - "integrity": "sha1-RM0zspnQPCVhrzD+hkhQlnDyMWs=", - "requires": { - "@commercetools/api-request-builder": "file:../packages/api-request-builder/commercetools-api-request-builder-3.2.0.tgz", - "@commercetools/sdk-client": "file:../packages/sdk-client/commercetools-sdk-client-1.4.1.tgz", - "@commercetools/sdk-middleware-auth": "file:../packages/sdk-middleware-auth/commercetools-sdk-middleware-auth-3.4.0.tgz", - "@commercetools/sdk-middleware-http": "file:../packages/sdk-middleware-http/commercetools-sdk-middleware-http-2.2.0.tgz", - "@commercetools/sdk-middleware-queue": "file:../packages/sdk-middleware-queue/commercetools-sdk-middleware-queue-1.1.0.tgz", - "@commercetools/sdk-middleware-user-agent": "file:../packages/sdk-middleware-user-agent/commercetools-sdk-middleware-user-agent-1.2.0.tgz", - "@commercetools/sync-actions": "file:../packages/sync-actions/commercetools-sync-actions-1.9.0.tgz", - "bluebird": "3.5.0", - "lodash": "4.17.4", - "npmlog": "4.1.2" - }, - "dependencies": { - "bluebird": { - "version": "3.5.0", - "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.5.0.tgz", - "integrity": "sha1-eRQg1/VR7qKJdFOop3ZT+WYG1nw=" - } - } - }, - "@commercetools/get-credentials": { - "version": "file:../packages/get-credentials/commercetools-get-credentials-2.1.0.tgz", - "integrity": "sha1-8nV6e3NKXYefy/gy1XVpL1TamVo=", - "requires": { - "dotenv": "4.0.0" - } - }, - "@commercetools/http-user-agent": { - "version": "file:../packages/http-user-agent/commercetools-http-user-agent-1.1.0.tgz", - "integrity": "sha1-XTJaRKuZOLxbPY82yUfh9YzRajE=" - }, - "@commercetools/inventories-exporter": { - "version": "file:../packages/inventories-exporter/commercetools-inventories-exporter-1.0.2.tgz", - "integrity": "sha1-OJjN3bt0CyknsNMiUxk5oAiP9cU=", - "requires": { - "@commercetools/api-request-builder": "file:../packages/api-request-builder/commercetools-api-request-builder-3.2.0.tgz", - "@commercetools/get-credentials": "file:../packages/get-credentials/commercetools-get-credentials-2.1.0.tgz", - "@commercetools/sdk-client": "file:../packages/sdk-client/commercetools-sdk-client-1.4.1.tgz", - "@commercetools/sdk-middleware-auth": "file:../packages/sdk-middleware-auth/commercetools-sdk-middleware-auth-3.4.0.tgz", - "@commercetools/sdk-middleware-http": "file:../packages/sdk-middleware-http/commercetools-sdk-middleware-http-2.2.0.tgz", - "@commercetools/sdk-middleware-user-agent": "file:../packages/sdk-middleware-user-agent/commercetools-sdk-middleware-user-agent-1.2.0.tgz", - "fast-csv": "2.4.0", - "JSONStream": "1.3.1", - "npmlog": "4.1.2", - "pretty-error": "2.1.1", - "yargs": "8.0.2" - } - }, - "@commercetools/price-exporter": { - "version": "file:../packages/price-exporter/commercetools-price-exporter-1.0.1.tgz", - "integrity": "sha1-oiYS9UFaEeaPl41SGIMxi/MzL0Q=", - "requires": { - "@commercetools/api-request-builder": "file:../packages/api-request-builder/commercetools-api-request-builder-3.2.0.tgz", - "@commercetools/get-credentials": "file:../packages/get-credentials/commercetools-get-credentials-2.1.0.tgz", - "@commercetools/sdk-client": "file:../packages/sdk-client/commercetools-sdk-client-1.4.1.tgz", - "@commercetools/sdk-middleware-auth": "file:../packages/sdk-middleware-auth/commercetools-sdk-middleware-auth-3.4.0.tgz", - "@commercetools/sdk-middleware-http": "file:../packages/sdk-middleware-http/commercetools-sdk-middleware-http-2.2.0.tgz", - "@commercetools/sdk-middleware-user-agent": "file:../packages/sdk-middleware-user-agent/commercetools-sdk-middleware-user-agent-1.2.0.tgz", - "bluebird": "3.5.0", - "fast-csv": "2.4.0", - "flat": "4.0.0", - "JSONStream": "1.3.1", - "lodash": "4.17.4", - "npmlog": "4.1.2", - "pretty-error": "2.1.1", - "yargs": "8.0.2" - }, - "dependencies": { - "bluebird": { - "version": "3.5.0", - "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.5.0.tgz", - "integrity": "sha1-eRQg1/VR7qKJdFOop3ZT+WYG1nw=" - }, - "flat": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/flat/-/flat-4.0.0.tgz", - "integrity": "sha512-ji/WMv2jdsE+LaznpkIF9Haax0sdpTBozrz/Dtg4qSRMfbs8oVg4ypJunIRYPiMLvH/ed6OflXbnbTIKJhtgeg==", - "requires": { - "is-buffer": "1.1.5" - } - } - } - }, - "@commercetools/sdk-client": { - "version": "file:../packages/sdk-client/commercetools-sdk-client-1.4.1.tgz", - "integrity": "sha1-mlnEk5jI31VMy1DBs5ze/TbSdG4=" - }, - "@commercetools/sdk-middleware-auth": { - "version": "file:../packages/sdk-middleware-auth/commercetools-sdk-middleware-auth-3.4.0.tgz", - "integrity": "sha1-4OZ+3WJ9gRLZcynQsJrQtBuRDDk=", - "requires": { - "isomorphic-fetch": "2.2.1" - }, - "dependencies": { - "isomorphic-fetch": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/isomorphic-fetch/-/isomorphic-fetch-2.2.1.tgz", - "integrity": "sha1-YRrhrPFPXoH3KVB0coGf6XM1WKk=", - "requires": { - "node-fetch": "1.7.2", - "whatwg-fetch": "2.0.3" - } - } - } - }, - "@commercetools/sdk-middleware-http": { - "version": "file:../packages/sdk-middleware-http/commercetools-sdk-middleware-http-2.2.0.tgz", - "integrity": "sha1-RqItKUHvcvt+GUT7rhPQO9azUEs=", - "requires": { - "isomorphic-fetch": "2.2.1" - }, - "dependencies": { - "isomorphic-fetch": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/isomorphic-fetch/-/isomorphic-fetch-2.2.1.tgz", - "integrity": "sha1-YRrhrPFPXoH3KVB0coGf6XM1WKk=", - "requires": { - "node-fetch": "1.7.2", - "whatwg-fetch": "2.0.3" - } - } - } - }, - "@commercetools/sdk-middleware-logger": { - "version": "file:../packages/sdk-middleware-logger/commercetools-sdk-middleware-logger-1.0.0.tgz", - "integrity": "sha1-Q9pTFI5ywtvRjpg0h/JGO1cASdk=" - }, - "@commercetools/sdk-middleware-queue": { - "version": "file:../packages/sdk-middleware-queue/commercetools-sdk-middleware-queue-1.1.0.tgz", - "integrity": "sha1-4TVlpWyadORzvdgcRMcESmSGYSg=" - }, - "@commercetools/sdk-middleware-user-agent": { - "version": "file:../packages/sdk-middleware-user-agent/commercetools-sdk-middleware-user-agent-1.2.0.tgz", - "integrity": "sha1-8uPBxlgd9d2nDCtyRvCOCuKU3q4=", - "requires": { - "@commercetools/http-user-agent": "file:../packages/http-user-agent/commercetools-http-user-agent-1.1.0.tgz" - } - }, - "@commercetools/sync-actions": { - "version": "file:../packages/sync-actions/commercetools-sync-actions-1.9.0.tgz", - "integrity": "sha1-70tvonKKYhasXd4/V1eMoZP3sVY=", - "requires": { - "jsondiffpatch": "0.2.4", - "lodash.flatten": "4.4.0", - "lodash.foreach": "4.5.0", - "lodash.isnil": "4.0.0", - "lodash.uniqwith": "4.5.0" - } - }, - "ansi-regex": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", - "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=" - }, - "ansi-styles": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-1.1.0.tgz", - "integrity": "sha1-6uy/Zs1waIJ2Cy9GkVgrj1XXp94=" - }, - "aproba": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/aproba/-/aproba-1.1.2.tgz", - "integrity": "sha512-ZpYajIfO0j2cOFTO955KUMIKNmj6zhX8kVztMAxFsDaMwz+9Z9SV0uou2pC9HJqcfpffOsjnbrDMvkNy+9RXPw==" - }, - "are-we-there-yet": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-1.1.4.tgz", - "integrity": "sha1-u13KOCu5TwXhUZQ3PRb9O6HKEQ0=", - "requires": { - "delegates": "1.0.0", - "readable-stream": "2.3.3" - } - }, - "arguments-extended": { - "version": "0.0.3", - "resolved": "https://registry.npmjs.org/arguments-extended/-/arguments-extended-0.0.3.tgz", - "integrity": "sha1-YQfkkX0OtvCk3WYyD8Fa/HLvSUY=", - "requires": { - "extended": "0.0.6", - "is-extended": "0.0.10" - } - }, - "array-extended": { - "version": "0.0.11", - "resolved": "https://registry.npmjs.org/array-extended/-/array-extended-0.0.11.tgz", - "integrity": "sha1-1xRK50jek8pybxIQCdv/FibRZL0=", - "requires": { - "arguments-extended": "0.0.3", - "extended": "0.0.6", - "is-extended": "0.0.10" - } - }, - "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.5.1", - "regenerator-runtime": "0.11.0" - } - }, - "bluebird": { - "version": "3.5.0", - "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.5.0.tgz", - "integrity": "sha1-eRQg1/VR7qKJdFOop3ZT+WYG1nw=" - }, - "boolbase": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz", - "integrity": "sha1-aN/1++YMUes3cl6p4+0xDcwed24=" - }, - "builtin-modules": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-1.1.1.tgz", - "integrity": "sha1-Jw8HbFpywC9bZaR9+Uxf46J4iS8=" - }, - "camelcase": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-4.1.0.tgz", - "integrity": "sha1-1UVjW+HjPFQmScaRc+Xeas+uNN0=" - }, - "chalk": { - "version": "0.5.1", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-0.5.1.tgz", - "integrity": "sha1-Zjs6ZItotV0EaQ1JFnqoN4WPIXQ=", - "requires": { - "ansi-styles": "1.1.0", - "escape-string-regexp": "1.0.5", - "has-ansi": "0.1.0", - "strip-ansi": "0.3.0", - "supports-color": "0.2.0" - }, - "dependencies": { - "ansi-regex": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-0.2.1.tgz", - "integrity": "sha1-DY6UaWej2BQ/k+JOKYUl/BsiNfk=" - }, - "strip-ansi": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-0.3.0.tgz", - "integrity": "sha1-JfSOoiynkYfzF0pNuHWTR7sSYiA=", - "requires": { - "ansi-regex": "0.2.1" - } - } - } - }, - "cli-table": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/cli-table/-/cli-table-0.3.1.tgz", - "integrity": "sha1-9TsFJmqLGguTSz0IIebi3FkUriM=", - "requires": { - "colors": "1.0.3" - } - }, - "cliui": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-3.2.0.tgz", - "integrity": "sha1-EgYBU3qRbSmUD5NNo7SNWFo5IT0=", - "requires": { - "string-width": "1.0.2", - "strip-ansi": "3.0.1", - "wrap-ansi": "2.1.0" - } - }, - "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=" - }, - "colors": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/colors/-/colors-1.0.3.tgz", - "integrity": "sha1-BDP0TYCWgP3rYO0mDxsMJi6CpAs=" - }, - "commander": { - "version": "2.11.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.11.0.tgz", - "integrity": "sha512-b0553uYA5YAEGgyYIGYROzKQ7X5RAqedkfjiZxwi0kL1g3bOaBNNZfYkzt/CL0umgD5wc9Jec2FbB98CjkMRvQ==" - }, - "common-tags": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/common-tags/-/common-tags-1.4.0.tgz", - "integrity": "sha1-EYe+Tz1M8MBCfUP3Tu8fc1AWFMA=", - "requires": { - "babel-runtime": "6.26.0" - } - }, - "console-control-strings": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz", - "integrity": "sha1-PXz0Rk22RG6mRL9LOVB/mFEAjo4=" - }, - "core-js": { - "version": "2.5.1", - "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.5.1.tgz", - "integrity": "sha1-rmh03GaTd4m4B1T/VCjfZoGcpQs=" - }, - "core-util-is": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", - "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=" - }, - "cross-spawn": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-5.1.0.tgz", - "integrity": "sha1-6L0O/uWPz/b4+UUQoKVUu/ojVEk=", - "requires": { - "lru-cache": "4.1.1", - "shebang-command": "1.2.0", - "which": "1.3.0" - } - }, - "css-select": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/css-select/-/css-select-1.2.0.tgz", - "integrity": "sha1-KzoRBTnFNV8c2NMUYj6HCxIeyFg=", - "requires": { - "boolbase": "1.0.0", - "css-what": "2.1.0", - "domutils": "1.5.1", - "nth-check": "1.0.1" - } - }, - "css-what": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/css-what/-/css-what-2.1.0.tgz", - "integrity": "sha1-lGfQMsOM+u+58teVASUwYvh/ob0=" - }, - "csv-parser": { - "version": "1.11.0", - "resolved": "https://registry.npmjs.org/csv-parser/-/csv-parser-1.11.0.tgz", - "integrity": "sha1-zZLD9JiVo8FZFZEDXL++a1HFWrE=", - "requires": { - "generate-function": "1.1.0", - "generate-object-property": "1.2.0", - "inherits": "2.0.3", - "minimist": "1.2.0", - "ndjson": "1.5.0" - } - }, - "csvtojson": { - "version": "1.1.7", - "resolved": "https://registry.npmjs.org/csvtojson/-/csvtojson-1.1.7.tgz", - "integrity": "sha1-F97QeuwNjAHy1vaHHPo2q4ixSbE=", - "requires": { - "lodash": "4.17.4", - "strip-bom": "1.0.0" - }, - "dependencies": { - "strip-bom": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-1.0.0.tgz", - "integrity": "sha1-hbiGLzhEtabV7IRnqTWYFzo295Q=", - "requires": { - "first-chunk-stream": "1.0.0", - "is-utf8": "0.2.1" - } - } - } - }, - "date-extended": { - "version": "0.0.6", - "resolved": "https://registry.npmjs.org/date-extended/-/date-extended-0.0.6.tgz", - "integrity": "sha1-I4AtV90b94GIE/4MMuhRqG2iZ8k=", - "requires": { - "array-extended": "0.0.11", - "extended": "0.0.6", - "is-extended": "0.0.10" - } - }, - "debug": { - "version": "2.6.8", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.8.tgz", - "integrity": "sha1-5zFTHKLt4n0YgiJCfaF4IdaP9Pw=", - "requires": { - "ms": "2.0.0" - } - }, - "decamelize": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", - "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=" - }, - "declare.js": { - "version": "0.0.8", - "resolved": "https://registry.npmjs.org/declare.js/-/declare.js-0.0.8.tgz", - "integrity": "sha1-BHit/5VkwAT1Hfc9i8E0AZ0o3N4=" - }, - "delegates": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz", - "integrity": "sha1-hMbhWbgZBP3KWaDvRM2HDTElD5o=" - }, - "dom-converter": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/dom-converter/-/dom-converter-0.1.4.tgz", - "integrity": "sha1-pF71cnuJDJv/5tfIduexnLDhfzs=", - "requires": { - "utila": "0.3.3" - }, - "dependencies": { - "utila": { - "version": "0.3.3", - "resolved": "https://registry.npmjs.org/utila/-/utila-0.3.3.tgz", - "integrity": "sha1-1+jn1+MJEHCSsF+NloiCTWM6QiY=" - } - } - }, - "dom-serializer": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-0.1.0.tgz", - "integrity": "sha1-BzxpdUbOB4DOI75KKOKT5AvDDII=", - "requires": { - "domelementtype": "1.1.3", - "entities": "1.1.1" - }, - "dependencies": { - "domelementtype": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-1.1.3.tgz", - "integrity": "sha1-vSh3PiZCiBrsUVRJJCmcXNgiGFs=" - } - } - }, - "domelementtype": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-1.3.0.tgz", - "integrity": "sha1-sXrtguirWeUt2cGbF1bg/BhyBMI=" - }, - "domhandler": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-2.1.0.tgz", - "integrity": "sha1-0mRvXlf2w7qxHPbLBdPArPdBJZQ=", - "requires": { - "domelementtype": "1.3.0" - } - }, - "domutils": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/domutils/-/domutils-1.5.1.tgz", - "integrity": "sha1-3NhIiib1Y9YQeeSMn3t+Mjc2gs8=", - "requires": { - "dom-serializer": "0.1.0", - "domelementtype": "1.3.0" - } - }, - "dotenv": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-4.0.0.tgz", - "integrity": "sha1-hk7xN5rO1Vzm+V3r7NzhefegzR0=" - }, - "encoding": { - "version": "0.1.12", - "resolved": "https://registry.npmjs.org/encoding/-/encoding-0.1.12.tgz", - "integrity": "sha1-U4tm8+5izRq1HsMjgp0flIDHS+s=", - "requires": { - "iconv-lite": "0.4.18" - } - }, - "entities": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/entities/-/entities-1.1.1.tgz", - "integrity": "sha1-blwtClYhtdra7O+AuQ7ftc13cvA=" - }, - "error-ex": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.1.tgz", - "integrity": "sha1-+FWobOYa3E6GIcPNoh56dhLDqNw=", - "requires": { - "is-arrayish": "0.2.1" - } - }, - "escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=" - }, - "execa": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/execa/-/execa-0.7.0.tgz", - "integrity": "sha1-lEvs00zEHuMqY6n68nrVpl/Fl3c=", - "requires": { - "cross-spawn": "5.1.0", - "get-stream": "3.0.0", - "is-stream": "1.1.0", - "npm-run-path": "2.0.2", - "p-finally": "1.0.0", - "signal-exit": "3.0.2", - "strip-eof": "1.0.0" - } - }, - "expand-string": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/expand-string/-/expand-string-1.1.1.tgz", - "integrity": "sha1-fBHCis10tezZkluPKezSeT+HFU4=", - "requires": { - "lodash.defaults": "4.2.0" - } - }, - "extended": { - "version": "0.0.6", - "resolved": "https://registry.npmjs.org/extended/-/extended-0.0.6.tgz", - "integrity": "sha1-f7i/e52uOXWG5IVwrP1kLHjlBmk=", - "requires": { - "extender": "0.0.10" - } - }, - "extender": { - "version": "0.0.10", - "resolved": "https://registry.npmjs.org/extender/-/extender-0.0.10.tgz", - "integrity": "sha1-WJwHSCvmGhRgttgfnCSqZ+jzJM0=", - "requires": { - "declare.js": "0.0.8" - } - }, - "fast-csv": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/fast-csv/-/fast-csv-2.4.0.tgz", - "integrity": "sha1-9ukxhbbSkOWAiUiGnD/Qn2T7yEI=", - "requires": { - "extended": "0.0.6", - "is-extended": "0.0.10", - "object-extended": "0.0.7", - "string-extended": "0.0.8" - } - }, - "find-up": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz", - "integrity": "sha1-RdG35QbHF93UgndaK3eSCjwMV6c=", - "requires": { - "locate-path": "2.0.0" - } - }, - "first-chunk-stream": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/first-chunk-stream/-/first-chunk-stream-1.0.0.tgz", - "integrity": "sha1-Wb+1DNkF9g18OUzT2ayqtOatk04=" - }, - "flat": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/flat/-/flat-2.0.1.tgz", - "integrity": "sha1-cOKRiKdL4MPIlAnu0fqVd5B64y8=", - "requires": { - "is-buffer": "1.1.5" - } - }, - "gauge": { - "version": "2.7.4", - "resolved": "https://registry.npmjs.org/gauge/-/gauge-2.7.4.tgz", - "integrity": "sha1-LANAXHU4w51+s3sxcCLjJfsBi/c=", - "requires": { - "aproba": "1.1.2", - "console-control-strings": "1.1.0", - "has-unicode": "2.0.1", - "object-assign": "4.1.1", - "signal-exit": "3.0.2", - "string-width": "1.0.2", - "strip-ansi": "3.0.1", - "wide-align": "1.1.2" - } - }, - "generate-function": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/generate-function/-/generate-function-1.1.0.tgz", - "integrity": "sha1-VMIbCAGSsW2Yd3ecW7gWZudyNl8=" - }, - "generate-object-property": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/generate-object-property/-/generate-object-property-1.2.0.tgz", - "integrity": "sha1-nA4cQDCM6AT0eDYYuTf6iPmdUNA=", - "requires": { - "is-property": "1.0.2" - } - }, - "get-caller-file": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-1.0.2.tgz", - "integrity": "sha1-9wLmMSfn4jHBYKgMFVSstw1QR+U=" - }, - "get-stream": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-3.0.0.tgz", - "integrity": "sha1-jpQ9E1jcN1VQVOy+LtsFqhdO3hQ=" - }, - "graceful-fs": { - "version": "4.1.11", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.11.tgz", - "integrity": "sha1-Dovf5NHduIVNZOBOp8AOKgJuVlg=" - }, - "has-ansi": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-0.1.0.tgz", - "integrity": "sha1-hPJlqujA5qiKEtcCKJS3VoiUxi4=", - "requires": { - "ansi-regex": "0.2.1" - }, - "dependencies": { - "ansi-regex": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-0.2.1.tgz", - "integrity": "sha1-DY6UaWej2BQ/k+JOKYUl/BsiNfk=" - } - } - }, - "has-unicode": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz", - "integrity": "sha1-4Ob+aijPUROIVeCG0Wkedx3iqLk=" - }, - "highland": { - "version": "2.11.1", - "resolved": "https://registry.npmjs.org/highland/-/highland-2.11.1.tgz", - "integrity": "sha1-ObTZKZtuB9o9FeeveypvEnUirK8=", - "requires": { - "util-deprecate": "1.0.2" - } - }, - "hosted-git-info": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.5.0.tgz", - "integrity": "sha512-pNgbURSuab90KbTqvRPsseaTxOJCZBD0a7t+haSN33piP9cCM4l0CqdzAif2hUqm716UovKB2ROmiabGAKVXyg==" - }, - "htmlparser2": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-3.3.0.tgz", - "integrity": "sha1-zHDQWln2VC5D8OaFyYLhTJJKnv4=", - "requires": { - "domelementtype": "1.3.0", - "domhandler": "2.1.0", - "domutils": "1.1.6", - "readable-stream": "1.0.34" - }, - "dependencies": { - "domutils": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/domutils/-/domutils-1.1.6.tgz", - "integrity": "sha1-vdw94Jm5ou+sxRxiPyj0FuzFdIU=", - "requires": { - "domelementtype": "1.3.0" - } - }, - "isarray": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", - "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=" - }, - "readable-stream": { - "version": "1.0.34", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.0.34.tgz", - "integrity": "sha1-Elgg40vIQtLyqq+v5MKRbuMsFXw=", - "requires": { - "core-util-is": "1.0.2", - "inherits": "2.0.3", - "isarray": "0.0.1", - "string_decoder": "0.10.31" - } - }, - "string_decoder": { - "version": "0.10.31", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", - "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=" - } - } - }, - "iconv-lite": { - "version": "0.4.18", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.18.tgz", - "integrity": "sha512-sr1ZQph3UwHTR0XftSbK85OvBbxe/abLGzEnPENCQwmHf7sck8Oyu4ob3LgBxWWxRoM+QszeUyl7jbqapu2TqA==" - }, - "inherits": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", - "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=" - }, - "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=" - }, - "is-arrayish": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", - "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=" - }, - "is-buffer": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.5.tgz", - "integrity": "sha1-Hzsm72E7IUuIy8ojzGwB2Hlh7sw=" - }, - "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=", - "requires": { - "builtin-modules": "1.1.1" - } - }, - "is-extended": { - "version": "0.0.10", - "resolved": "https://registry.npmjs.org/is-extended/-/is-extended-0.0.10.tgz", - "integrity": "sha1-JE4UDfdbscmjEG9BL/GC+1NKbWI=", - "requires": { - "extended": "0.0.6" - } - }, - "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.1" - } - }, - "is-property": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-property/-/is-property-1.0.2.tgz", - "integrity": "sha1-V/4cTkhHTt1lsJkR8msc1Ald2oQ=" - }, - "is-stream": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", - "integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ=" - }, - "is-utf8": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/is-utf8/-/is-utf8-0.2.1.tgz", - "integrity": "sha1-Sw2hRCEE0bM2NA6AeX6GXPOffXI=" - }, - "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=" - }, - "isomorphic-fetch": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/isomorphic-fetch/-/isomorphic-fetch-2.2.1.tgz", - "integrity": "sha1-YRrhrPFPXoH3KVB0coGf6XM1WKk=", - "requires": { - "node-fetch": "1.7.2", - "whatwg-fetch": "2.0.3" - } - }, - "isuuid": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/isuuid/-/isuuid-0.1.0.tgz", - "integrity": "sha1-UIEJrBQNbeQ7P4RlBs22Zd0+hzM=" - }, - "json-stringify-safe": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", - "integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=" - }, - "json2csv": { - "version": "3.11.1", - "resolved": "https://registry.npmjs.org/json2csv/-/json2csv-3.11.1.tgz", - "integrity": "sha1-NHdWVmkQzLMjBiqUNssTcXuB+bc=", - "requires": { - "cli-table": "0.3.1", - "commander": "2.11.0", - "debug": "2.6.8", - "flat": "2.0.1", - "lodash.clonedeep": "4.5.0", - "lodash.flatten": "4.4.0", - "lodash.get": "4.4.2", - "lodash.set": "4.3.2", - "lodash.uniq": "4.5.0", - "path-is-absolute": "1.0.1" - } - }, - "jsondiffpatch": { - "version": "0.2.4", - "resolved": "https://registry.npmjs.org/jsondiffpatch/-/jsondiffpatch-0.2.4.tgz", - "integrity": "sha1-1LbFOz/H2htLkcHCrsi5MrdRHVw=", - "requires": { - "chalk": "0.5.1" - } - }, - "jsonparse": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/jsonparse/-/jsonparse-1.3.1.tgz", - "integrity": "sha1-P02uSpH6wxX3EGL4UhzCOfE2YoA=" - }, - "JSONStream": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/JSONStream/-/JSONStream-1.3.1.tgz", - "integrity": "sha1-cH92HgHa6eFvG8+TcDt4xwlmV5o=", - "requires": { - "jsonparse": "1.3.1", - "through": "2.3.8" - } - }, - "lcid": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/lcid/-/lcid-1.0.0.tgz", - "integrity": "sha1-MIrMr6C8SDo4Z7S28rlQYlHRuDU=", - "requires": { - "invert-kv": "1.0.0" - } - }, - "load-json-file": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-2.0.0.tgz", - "integrity": "sha1-eUfkIUmvgNaWy/eXvKq8/h/inKg=", - "requires": { - "graceful-fs": "4.1.11", - "parse-json": "2.2.0", - "pify": "2.3.0", - "strip-bom": "3.0.0" - } - }, - "locate-path": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz", - "integrity": "sha1-K1aLJl7slExtnA3pw9u7ygNUzY4=", - "requires": { - "p-locate": "2.0.0", - "path-exists": "3.0.0" - } - }, - "lodash": { - "version": "4.17.4", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.4.tgz", - "integrity": "sha1-eCA6TRwyiuHYbcpkYONptX9AVa4=" - }, - "lodash.clonedeep": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz", - "integrity": "sha1-4j8/nE+Pvd6HJSnBBxhXoIblzO8=" - }, - "lodash.defaults": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/lodash.defaults/-/lodash.defaults-4.2.0.tgz", - "integrity": "sha1-0JF4cW/+pN3p5ft7N/bwgCJ0WAw=" - }, - "lodash.flatten": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/lodash.flatten/-/lodash.flatten-4.4.0.tgz", - "integrity": "sha1-8xwiIlqWMtK7+OSt2+8kCqdlph8=" - }, - "lodash.foreach": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/lodash.foreach/-/lodash.foreach-4.5.0.tgz", - "integrity": "sha1-Gmo16s5AEoDH8G3d7DUWWrJ+PlM=" - }, - "lodash.get": { - "version": "4.4.2", - "resolved": "https://registry.npmjs.org/lodash.get/-/lodash.get-4.4.2.tgz", - "integrity": "sha1-LRd/ZS+jHpObRDjVNBSZ36OCXpk=" - }, - "lodash.isnil": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/lodash.isnil/-/lodash.isnil-4.0.0.tgz", - "integrity": "sha1-SeKM1VkBNFjIFMVHnTxmOiG/qmw=" - }, - "lodash.mapvalues": { - "version": "4.6.0", - "resolved": "https://registry.npmjs.org/lodash.mapvalues/-/lodash.mapvalues-4.6.0.tgz", - "integrity": "sha1-G6+lAF3p3W9PJmaMMMo3IwzJaJw=" - }, - "lodash.memoize": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/lodash.memoize/-/lodash.memoize-4.1.2.tgz", - "integrity": "sha1-vMbEmkKihA7Zl/Mj6tpezRguC/4=" - }, - "lodash.omit": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/lodash.omit/-/lodash.omit-4.5.0.tgz", - "integrity": "sha1-brGa5aHuHdnfC5aeZs4Lf6MLXmA=" - }, - "lodash.set": { - "version": "4.3.2", - "resolved": "https://registry.npmjs.org/lodash.set/-/lodash.set-4.3.2.tgz", - "integrity": "sha1-2HV7HagH3eJIFrDWqEvqGnYjCyM=" - }, - "lodash.uniq": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/lodash.uniq/-/lodash.uniq-4.5.0.tgz", - "integrity": "sha1-0CJTc662Uq3BvILklFM5qEJ1R3M=" - }, - "lodash.uniqwith": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/lodash.uniqwith/-/lodash.uniqwith-4.5.0.tgz", - "integrity": "sha1-egy/ZfQ7WShiWp1NDcVLGMrcfvM=" - }, - "lru-cache": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.1.tgz", - "integrity": "sha512-q4spe4KTfsAS1SUHLO0wz8Qiyf1+vMIAgpRYioFYDMNqKfHQbg+AVDH3i4fvpl71/P1L0dBl+fQi+P37UYf0ew==", - "requires": { - "pseudomap": "1.0.2", - "yallist": "2.1.2" - } - }, - "mem": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/mem/-/mem-1.1.0.tgz", - "integrity": "sha1-Xt1StIXKHZAP5kiVUFOZoN+kX3Y=", - "requires": { - "mimic-fn": "1.1.0" - } - }, - "mimic-fn": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-1.1.0.tgz", - "integrity": "sha1-5md4PZLonb00KBi1IwudYqZyrRg=" - }, - "minimist": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", - "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=" - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" - }, - "ndjson": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/ndjson/-/ndjson-1.5.0.tgz", - "integrity": "sha1-rmA7NrE0vOw0e0UkIrC/mNWDLsg=", - "requires": { - "json-stringify-safe": "5.0.1", - "minimist": "1.2.0", - "split2": "2.1.1", - "through2": "2.0.3" - } - }, - "node-fetch": { - "version": "1.7.2", - "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-1.7.2.tgz", - "integrity": "sha512-xZZUq2yDhKMIn/UgG5q//IZSNLJIwW2QxS14CNH5spuiXkITM2pUitjdq58yLSaU7m4M0wBNaM2Gh/ggY4YJig==", - "requires": { - "encoding": "0.1.12", - "is-stream": "1.1.0" - } - }, - "normalize-package-data": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.4.0.tgz", - "integrity": "sha512-9jjUFbTPfEy3R/ad/2oNbKtW9Hgovl5O1FvFWKkKblNXoN/Oou6+9+KKohPK13Yc3/TyunyWhJp6gvRNR/PPAw==", - "requires": { - "hosted-git-info": "2.5.0", - "is-builtin-module": "1.0.0", - "semver": "5.4.1", - "validate-npm-package-license": "3.0.1" - } - }, - "npm-run-path": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-2.0.2.tgz", - "integrity": "sha1-NakjLfo11wZ7TLLd8jV7GHFTbF8=", - "requires": { - "path-key": "2.0.1" - } - }, - "npmlog": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-4.1.2.tgz", - "integrity": "sha512-2uUqazuKlTaSI/dC8AzicUck7+IrEaOnN/e0jd3Xtt1KcGpwx30v50mL7oPyr/h9bL3E4aZccVwpwP+5W9Vjkg==", - "requires": { - "are-we-there-yet": "1.1.4", - "console-control-strings": "1.1.0", - "gauge": "2.7.4", - "set-blocking": "2.0.0" - } - }, - "nth-check": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-1.0.1.tgz", - "integrity": "sha1-mSms32KPwsQQmN6rgqxYDPFJquQ=", - "requires": { - "boolbase": "1.0.0" - } - }, - "number-is-nan": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz", - "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=" - }, - "object-assign": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", - "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=" - }, - "object-extended": { - "version": "0.0.7", - "resolved": "https://registry.npmjs.org/object-extended/-/object-extended-0.0.7.tgz", - "integrity": "sha1-hP0j9WsVWCrrPoiwXLVdJDLWijM=", - "requires": { - "array-extended": "0.0.11", - "extended": "0.0.6", - "is-extended": "0.0.10" - } - }, - "object-path": { - "version": "0.11.4", - "resolved": "https://registry.npmjs.org/object-path/-/object-path-0.11.4.tgz", - "integrity": "sha1-NwrnUvvzfePqcKhhwju6iRVpGUk=" - }, - "os-locale": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/os-locale/-/os-locale-2.1.0.tgz", - "integrity": "sha512-3sslG3zJbEYcaC4YVAvDorjGxc7tv6KVATnLPZONiljsUncvihe9BQoVCEs0RZ1kmf4Hk9OBqlZfJZWI4GanKA==", - "requires": { - "execa": "0.7.0", - "lcid": "1.0.0", - "mem": "1.1.0" - } - }, - "os-tmpdir": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", - "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=" - }, - "p-finally": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz", - "integrity": "sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4=" - }, - "p-limit": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.1.0.tgz", - "integrity": "sha1-sH/y2aXYi+yAYDWJWiurZqJ5iLw=" - }, - "p-locate": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-2.0.0.tgz", - "integrity": "sha1-IKAQOyIqcMj9OcwuWAaA893l7EM=", - "requires": { - "p-limit": "1.1.0" - } - }, - "parse-json": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-2.2.0.tgz", - "integrity": "sha1-9ID0BDTvgHQfhGkJn43qGPVaTck=", - "requires": { - "error-ex": "1.3.1" - } - }, - "path-exists": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", - "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=" - }, - "path-is-absolute": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", - "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=" - }, - "path-key": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz", - "integrity": "sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=" - }, - "path-type": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-2.0.0.tgz", - "integrity": "sha1-8BLMuEFbcJb8LaoQVMPXI4lZTHM=", - "requires": { - "pify": "2.3.0" - } - }, - "pify": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", - "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=" - }, - "pinkie": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz", - "integrity": "sha1-clVrgM+g1IqXToDnckjoDtT3+HA=" - }, - "pinkie-promise": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz", - "integrity": "sha1-ITXW36ejWMBprJsXh3YogihFD/o=", - "requires": { - "pinkie": "2.0.4" - } - }, - "pretty-error": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/pretty-error/-/pretty-error-2.1.1.tgz", - "integrity": "sha1-X0+HyPkeWuPzuoerTPXgOxoX8aM=", - "requires": { - "renderkid": "2.0.1", - "utila": "0.4.0" - } - }, - "process-nextick-args": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-1.0.7.tgz", - "integrity": "sha1-FQ4gt1ZZCtP5EJPyWk8q2L/zC6M=" - }, - "pseudomap": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/pseudomap/-/pseudomap-1.0.2.tgz", - "integrity": "sha1-8FKijacOYYkX7wqKw0wa5aaChrM=" - }, - "read-pkg": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-2.0.0.tgz", - "integrity": "sha1-jvHAYjxqbbDcZxPEv6xGMysjaPg=", - "requires": { - "load-json-file": "2.0.0", - "normalize-package-data": "2.4.0", - "path-type": "2.0.0" - } - }, - "read-pkg-up": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-2.0.0.tgz", - "integrity": "sha1-a3KoBImE4MQeeVEP1en6mbO1Sb4=", - "requires": { - "find-up": "2.1.0", - "read-pkg": "2.0.0" - } - }, - "readable-stream": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.3.tgz", - "integrity": "sha512-m+qzzcn7KUxEmd1gMbchF+Y2eIUbieUaxkWtptyHywrX0rE8QEYqPC07Vuy4Wm32/xE16NcdBctb8S0Xe/5IeQ==", - "requires": { - "core-util-is": "1.0.2", - "inherits": "2.0.3", - "isarray": "1.0.0", - "process-nextick-args": "1.0.7", - "safe-buffer": "5.1.1", - "string_decoder": "1.0.3", - "util-deprecate": "1.0.2" - } - }, - "regenerator-runtime": { - "version": "0.11.0", - "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.11.0.tgz", - "integrity": "sha512-/aA0kLeRb5N9K0d4fw7ooEbI+xDe+DKD499EQqygGqeS8N3xto15p09uY2xj7ixP81sNPXvRLnAQIqdVStgb1A==" - }, - "renderkid": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/renderkid/-/renderkid-2.0.1.tgz", - "integrity": "sha1-iYyr/Ivt5Le5ETWj/9Mj5YwNsxk=", - "requires": { - "css-select": "1.2.0", - "dom-converter": "0.1.4", - "htmlparser2": "3.3.0", - "strip-ansi": "3.0.1", - "utila": "0.3.3" - }, - "dependencies": { - "utila": { - "version": "0.3.3", - "resolved": "https://registry.npmjs.org/utila/-/utila-0.3.3.tgz", - "integrity": "sha1-1+jn1+MJEHCSsF+NloiCTWM6QiY=" - } - } - }, - "require-directory": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", - "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=" - }, - "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=" - }, - "safe-buffer": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.1.tgz", - "integrity": "sha512-kKvNJn6Mm93gAczWVJg7wH+wGYWNrDHdWvpUmHyEsgCtIwwo3bqPtV4tR5tuPaUhTOo/kvhVwd8XwwOllGYkbg==" - }, - "semver": { - "version": "5.4.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.4.1.tgz", - "integrity": "sha512-WfG/X9+oATh81XtllIo/I8gOiY9EXRdv1cQdyykeXK17YcUW3EXUAi2To4pcH6nZtJPr7ZOpM5OMyWJZm+8Rsg==" - }, - "set-blocking": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", - "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=" - }, - "shebang-command": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", - "integrity": "sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=", - "requires": { - "shebang-regex": "1.0.0" - } - }, - "shebang-regex": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz", - "integrity": "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=" - }, - "signal-exit": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.2.tgz", - "integrity": "sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0=" - }, - "spdx-correct": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-1.0.2.tgz", - "integrity": "sha1-SzBz2TP/UfORLwOsVRlJikFQ20A=", - "requires": { - "spdx-license-ids": "1.2.2" - } - }, - "spdx-expression-parse": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-1.0.4.tgz", - "integrity": "sha1-m98vIOH0DtRH++JzJmGR/O1RYmw=" - }, - "spdx-license-ids": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-1.2.2.tgz", - "integrity": "sha1-yd96NCRZSt5r0RkA1ZZpbcBrrFc=" - }, - "split2": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/split2/-/split2-2.1.1.tgz", - "integrity": "sha1-eh9VHhdqkOzTNF9yRqDP4XXvT9A=", - "requires": { - "through2": "2.0.3" - } - }, - "streamtest": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/streamtest/-/streamtest-1.2.2.tgz", - "integrity": "sha1-jBjeFv0keEvLcmTFcEOlYYpZkgI=", - "requires": { - "readable-stream": "2.3.3" - } - }, - "string_decoder": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.0.3.tgz", - "integrity": "sha512-4AH6Z5fzNNBcH+6XDMfA/BTt87skxqJlO0lAh3Dker5zThcAxG6mKz+iGu308UKoPPQ8Dcqx/4JhujzltRa+hQ==", - "requires": { - "safe-buffer": "5.1.1" - } - }, - "string-extended": { - "version": "0.0.8", - "resolved": "https://registry.npmjs.org/string-extended/-/string-extended-0.0.8.tgz", - "integrity": "sha1-dBlX3/SHsCcqee7FpE8jnubxfM0=", - "requires": { - "array-extended": "0.0.11", - "date-extended": "0.0.6", - "extended": "0.0.6", - "is-extended": "0.0.10" - } - }, - "string-width": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", - "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", - "requires": { - "code-point-at": "1.1.0", - "is-fullwidth-code-point": "1.0.0", - "strip-ansi": "3.0.1" - } - }, - "strip-ansi": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", - "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", - "requires": { - "ansi-regex": "2.1.1" - } - }, - "strip-bom": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", - "integrity": "sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=" - }, - "strip-eof": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/strip-eof/-/strip-eof-1.0.0.tgz", - "integrity": "sha1-u0P/VZim6wXYm1n80SnJgzE2Br8=" - }, - "supports-color": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-0.2.0.tgz", - "integrity": "sha1-2S3iaU6z9nMjlz1649i1W0wiGQo=" - }, - "through": { - "version": "2.3.8", - "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", - "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=" - }, - "through2": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.3.tgz", - "integrity": "sha1-AARWmzfHx0ujnEPzzteNGtlBQL4=", - "requires": { - "readable-stream": "2.3.3", - "xtend": "4.0.1" - } - }, - "tmp": { - "version": "0.0.31", - "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.31.tgz", - "integrity": "sha1-jzirlDjhcxXl29izZX6L+yd65Kc=", - "requires": { - "os-tmpdir": "1.0.2" - } - }, - "tokgen": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/tokgen/-/tokgen-1.0.0.tgz", - "integrity": "sha1-5wmIWfbnzKXwGSoFW0GN6kJQBOM=", - "requires": { - "expand-string": "1.1.1", - "lodash.defaults": "4.2.0" - } - }, - "util-deprecate": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", - "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=" - }, - "utila": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/utila/-/utila-0.4.0.tgz", - "integrity": "sha1-ihagXURWV6Oupe7MWxKk+lN5dyw=" - }, - "validate-npm-package-license": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.1.tgz", - "integrity": "sha1-KAS6vnEq0zeUWaz74kdGqywwP7w=", - "requires": { - "spdx-correct": "1.0.2", - "spdx-expression-parse": "1.0.4" - } - }, - "whatwg-fetch": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/whatwg-fetch/-/whatwg-fetch-2.0.3.tgz", - "integrity": "sha1-nITsLc9oGH/wC8ZOEnS0QhduHIQ=" - }, - "which": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/which/-/which-1.3.0.tgz", - "integrity": "sha512-xcJpopdamTuY5duC/KnTTNBraPK54YwpenP4lzxU8H91GudWpFv38u0CKjclE1Wi2EH2EDz5LRcHcKbCIzqGyg==", - "requires": { - "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=" - }, - "wide-align": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.2.tgz", - "integrity": "sha512-ijDLlyQ7s6x1JgCLur53osjm/UXUYD9+0PbYKrBsYisYXzCxN+HC3mYDNy/dWdmf3AwqwU3CXwDCvsNgGK1S0w==", - "requires": { - "string-width": "1.0.2" - } - }, - "wrap-ansi": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-2.1.0.tgz", - "integrity": "sha1-2Pw9KE3QV5T+hJc8rs3Rz4JP3YU=", - "requires": { - "string-width": "1.0.2", - "strip-ansi": "3.0.1" - } - }, - "xtend": { - "version": "4.0.1", - "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=" - }, - "yallist": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz", - "integrity": "sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI=" - }, - "yargs": { - "version": "8.0.2", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-8.0.2.tgz", - "integrity": "sha1-YpmpBVsc78lp/355wdkY3Osiw2A=", - "requires": { - "camelcase": "4.1.0", - "cliui": "3.2.0", - "decamelize": "1.2.0", - "get-caller-file": "1.0.2", - "os-locale": "2.1.0", - "read-pkg-up": "2.0.0", - "require-directory": "2.1.1", - "require-main-filename": "1.0.1", - "set-blocking": "2.0.0", - "string-width": "2.1.1", - "which-module": "2.0.0", - "y18n": "3.2.1", - "yargs-parser": "7.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=" - }, - "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=" - }, - "string-width": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", - "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", - "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=", - "requires": { - "ansi-regex": "3.0.0" - } - } - } - }, - "yargs-parser": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-7.0.0.tgz", - "integrity": "sha1-jQrELxbqVd69MyyvTEA4s+P139k=", - "requires": { - "camelcase": "4.1.0" - } - } - } -} diff --git a/packages/sync-actions/src/product-actions.js b/packages/sync-actions/src/product-actions.js index 4c79ad96f..5f6be13a1 100644 --- a/packages/sync-actions/src/product-actions.js +++ b/packages/sync-actions/src/product-actions.js @@ -61,9 +61,9 @@ export function actionsMapVariants (diff, oldObj, newObj) { ...newObject, action: 'addVariant', }), - [REMOVE_ACTIONS]: objectToRemove => ({ + [REMOVE_ACTIONS]: ({ id }) => ({ action: 'removeVariant', - id: objectToRemove.id, + id, }), }) @@ -137,29 +137,7 @@ export function actionsMapAttributes ( sameForAllAttributeNames = [], ) { let actions = [] - const { masterVariant, variants } = diff - - if (masterVariant) { - const skuAction = _buildSkuActions( - masterVariant, - oldObj.masterVariant, - ) - const keyAction = _buildKeyActions( - masterVariant, - oldObj.masterVariant, - ) - if (skuAction) actions.push(skuAction) - if (keyAction) actions.push(keyAction) - - const { attributes } = masterVariant - const attrActions = _buildVariantAttributesActions( - attributes, - oldObj.masterVariant, - newObj.masterVariant, - sameForAllAttributeNames, - ) - actions = actions.concat(attrActions) - } + const { variants } = diff if (variants) forEach(variants, (variant, key) => { @@ -172,6 +150,7 @@ export function actionsMapAttributes ( if (keyAction) actions.push(keyAction) const { attributes } = variant + const attrActions = _buildVariantAttributesActions( attributes, oldObj.variants[key], @@ -196,16 +175,7 @@ export function actionsMapAttributes ( export function actionsMapImages (diff, oldObj, newObj) { let actions = [] - const { masterVariant, variants } = diff - - if (masterVariant) { - const mActions = _buildVariantImagesAction( - masterVariant.images, - oldObj.masterVariant, - newObj.masterVariant, - ) - actions = actions.concat(mActions) - } + const { variants } = diff if (variants) forEach(variants, (variant, key) => { @@ -225,18 +195,7 @@ export function actionsMapPrices (diff, oldObj, newObj) { let changePriceActions = [] let removePriceActions = [] - const { masterVariant, variants } = diff - - if (masterVariant) { - const [ a, c, r ] = _buildVariantPricesAction( - masterVariant.prices, - oldObj.masterVariant, - newObj.masterVariant, - ) - addPriceActions = addPriceActions.concat(a) - changePriceActions = changePriceActions.concat(c) - removePriceActions = removePriceActions.concat(r) - } + const { variants } = diff if (variants) forEach(variants, (variant, key) => { @@ -256,6 +215,27 @@ export function actionsMapPrices (diff, oldObj, newObj) { .concat(addPriceActions) } +export function actionsMapMasterVariant (oldObj, newObj) { + const createChangeMasterVariantAction = variantId => ({ + action: 'changeMasterVariant', + variantId, + }) + const extractMasterVariantId = (fromObj) => { + const variants = Array.isArray(fromObj.variants) ? fromObj.variants : [] + + return variants[0] ? variants[0].id : undefined + } + + const newMasterVariantId = extractMasterVariantId(newObj) + const oldMasterVariantId = extractMasterVariantId(oldObj) + + // Old and new master master variant differ and a new master variant id exists + if (newMasterVariantId && oldMasterVariantId !== newMasterVariantId) + return [createChangeMasterVariantAction(newMasterVariantId)] + + return [] +} + /** * HELPER FUNCTIONS @@ -542,7 +522,6 @@ function _buildVariantPricesAction (diffedPrices, oldVariant, newVariant) { } } else if (REGEX_UNDERSCORE_NUMBER.test(key)) { const index = key.substring(1) - removePriceActions.push({ action: 'removePrice', priceId: oldVariant.prices[index].id, }) diff --git a/packages/sync-actions/src/products.js b/packages/sync-actions/src/products.js index a341991a1..32c9ba3b2 100644 --- a/packages/sync-actions/src/products.js +++ b/packages/sync-actions/src/products.js @@ -38,6 +38,8 @@ function createProductMapActions (mapActionGroup) { allActions.push(mapActionGroup('variants', () => productActions.actionsMapVariants(diff, oldObj, newObj))) + allActions.push(productActions.actionsMapMasterVariant(oldObj, newObj)) + allActions.push(mapActionGroup('attributes', () => productActions.actionsMapAttributes(diff, oldObj, newObj, sameForAllAttributeNames || []))) @@ -58,10 +60,32 @@ function createProductMapActions (mapActionGroup) { } } +function moveMasterVariantsIntoVariants (before, now) { + const move = obj => ({ + ...obj, + masterVariant: undefined, + variants: [ + obj.masterVariant, + ...obj.variants || [], + ], + }) + const hasMasterVariant = obj => obj && obj.masterVariant + + return [ + hasMasterVariant(before) ? move(before) : before, + hasMasterVariant(now) ? move(now) : now, + ] +} + export default (config: Array): SyncAction => { const mapActionGroup = createMapActionGroup(config) const doMapActions = createProductMapActions(mapActionGroup) - const buildActions = createBuildActions(diffpatcher.diff, doMapActions) + + const buildActions = createBuildActions( + diffpatcher.diff, + doMapActions, + moveMasterVariantsIntoVariants, + ) return { buildActions } } diff --git a/packages/sync-actions/src/utils/create-build-actions.js b/packages/sync-actions/src/utils/create-build-actions.js index 5a45c00f9..9a866c488 100644 --- a/packages/sync-actions/src/utils/create-build-actions.js +++ b/packages/sync-actions/src/utils/create-build-actions.js @@ -1,13 +1,23 @@ -export default function createBuildActions (diff, doMapActions) { +function applyOnBeforeDiff (before, now, fn) { + return fn && typeof fn === 'function' ? fn(before, now) : [before, now] +} + +export default function createBuildActions ( + differ, doMapActions, onBeforeDiff, +) { return function buildActions (now, before, options = {}) { if (!now || !before) throw new Error('Missing either `newObj` or `oldObj` ' + 'in order to build update actions') - // diff 'em - const diffed = diff(before, now) + const [ + processedBefore, processedNow, + ] = applyOnBeforeDiff(before, now, onBeforeDiff) + + const diffed = differ(processedBefore, processedNow) + if (!diffed) return [] - return doMapActions(diffed, now, before, options) + return doMapActions(diffed, processedNow, processedBefore, options) } } diff --git a/packages/sync-actions/src/utils/create-build-array-actions.js b/packages/sync-actions/src/utils/create-build-array-actions.js index 2f90cac80..333c9f35a 100644 --- a/packages/sync-actions/src/utils/create-build-array-actions.js +++ b/packages/sync-actions/src/utils/create-build-array-actions.js @@ -23,26 +23,42 @@ export default function createBuildArrayActions (key, config) { if (diff[key]) { const arrayDelta = diff[key] + Object.keys(arrayDelta).forEach((index) => { - if (config[ADD_ACTIONS] && isCreateAction(arrayDelta, index)) - addActions.push( - // When adding a new element you don't need the oldObj - config[ADD_ACTIONS](newObj[key][index]), + if (config[ADD_ACTIONS] && isCreateAction(arrayDelta, index)) { + const actionGenerator = config[ADD_ACTIONS] + // When adding a new element you don't need the oldObj + const action = actionGenerator( + newObj[key][index], + parseInt(index, 10), ) - else if (config[CHANGE_ACTIONS] && isChangeAction(arrayDelta, index)) - changeActions.push( - // When changing an existing element you need both old + new - config[CHANGE_ACTIONS](oldObj[key][index], newObj[key][index]), + + if (action) addActions.push(action) + } else if ( + config[CHANGE_ACTIONS] && isChangeAction(arrayDelta, index) + ) { + const actionGenerator = config[CHANGE_ACTIONS] + // When changing an existing element you need both old + new + const action = actionGenerator( + oldObj[key][index], + newObj[key][index], + parseInt(index, 10), ) - else if ( + + if (action) changeActions.push(action) + } else if ( config[REMOVE_ACTIONS] && isRemoveAction(arrayDelta, index) ) { const realIndex = index.replace('_', '') - removeActions.push( - // When removing an existing element you don't need the newObj - config[REMOVE_ACTIONS](oldObj[key][realIndex]), + const actionGenerator = config[REMOVE_ACTIONS] + // When removing an existing element you don't need the newObj + const action = actionGenerator( + oldObj[key][realIndex], + parseInt(realIndex, 10), ) + + if (action) removeActions.push(action) } }) } diff --git a/packages/sync-actions/test/product-sync-variants.spec.js b/packages/sync-actions/test/product-sync-variants.spec.js index af2f51b30..171849dc9 100644 --- a/packages/sync-actions/test/product-sync-variants.spec.js +++ b/packages/sync-actions/test/product-sync-variants.spec.js @@ -270,7 +270,7 @@ describe('Actions', () => { const now = { id: '123', masterVariant: { - sku: 'v1', key: 'v2', attributes: [{ name: 'foo', value: 'new value' }], + id: 1, sku: 'v1', key: 'v2', attributes: [{ name: 'foo', value: 'new value' }], }, variants: [ { id: 2, sku: 'v2', key: 'v2', attributes: [{ name: 'foo', value: 'another value' }] }, @@ -291,42 +291,225 @@ describe('Actions', () => { ]) }) - it('should handle mapping actions for new variants without masterVariant', - () => { - const before = { - id: '123', - version: 1, - masterVariant: { - id: 1, - sku: 'v1', - attributes: [{ name: 'foo', value: 'bar' }], - }, - variants: [ - { id: 2, sku: 'v2', key: 'v2', attributes: [{ name: 'foo', value: 'qux' }] }, - { id: 3, sku: 'v3', key: 'v3', attributes: [{ name: 'foo', value: 'baz' }] }, - ], - } + describe('without master variant in `now`', () => { + describe('with master variant in `before`', () => { + const before = { + id: '123', + version: 1, + masterVariant: { + id: 1, + sku: 'v1', + attributes: [{ name: 'foo', value: 'bar' }], + }, + variants: [], + } + + const now = { + id: '123', + // <-- no masterVariant + variants: [], + } + + it('should generate update action to remove variant', + () => { + const actions = productsSync.buildActions(now, before) + expect(actions).toEqual([{ action: 'removeVariant', id: 1 }]) + }) + }) - const now = { - id: '123', - // <-- no masterVariant - variants: [ - // changed - { id: 2, sku: 'v2', key: 'v2', attributes: [{ name: 'foo', value: 'another value' }] }, - // changed - { id: 3, sku: 'v3', key: 'v3', attributes: [{ name: 'foo', value: 'i dont care' }] }, - // new - { sku: 'v4', key: 'v4', attributes: [{ name: 'foo', value: 'yet another' }] }, - ], - } + describe('with variants in `now`', () => { + const before = { + id: '123', + version: 1, + variants: [ + { id: 2, sku: 'v2', key: 'v2', attributes: [{ name: 'foo', value: 'qux' }] }, + { id: 3, sku: 'v3', key: 'v3', attributes: [{ name: 'foo', value: 'baz' }] }, + ], + } - const actions = productsSync.buildActions(now, before) + const now = { + id: '123', + variants: [ + // changed + { id: 2, sku: 'v2', key: 'v2', attributes: [{ name: 'foo', value: 'another value' }] }, + // changed + { id: 3, sku: 'v3', key: 'v3', attributes: [{ name: 'foo', value: 'i dont care' }] }, + // new + { sku: 'v4', key: 'v4', attributes: [{ name: 'foo', value: 'yet another' }] }, + ], + } + + it('should generate `addVariant` and `setAttribute` actions', + () => { + const actions = productsSync.buildActions(now, before) + + expect(actions).toEqual([ + { action: 'addVariant', sku: 'v4', key: 'v4', attributes: [{ name: 'foo', value: 'yet another' }] }, + { action: 'setAttribute', variantId: 2, name: 'foo', value: 'another value' }, + { action: 'setAttribute', variantId: 3, name: 'foo', value: 'i dont care' }, + ]) + }) + }) - expect(actions).toEqual([ - { action: 'addVariant', sku: 'v4', key: 'v4', attributes: [{ name: 'foo', value: 'yet another' }] }, - { action: 'setAttribute', variantId: 2, name: 'foo', value: 'another value' }, - { action: 'setAttribute', variantId: 3, name: 'foo', value: 'i dont care' }, - ]) + describe('when changing master variant', () => { + describe('when moving master variant to variants', () => { + const before = { + id: '123', + version: 1, + masterVariant: { + id: 1, + sku: 'v1', + attributes: [{ name: 'foo', value: 'bar' }], + }, + variants: [], + } + + const now = { + id: '123', + version: 1, + masterVariant: { + id: 2, + sku: 'v1', + attributes: [{ name: 'foo', value: 'bar' }], + }, + variants: [{ + id: 1, + sku: 'v1', + attributes: [{ name: 'foo', value: 'bar' }], + }], + } + + it('should generate `changeMasterVariant` and `addVariant` action', + () => { + const actions = productsSync.buildActions(now, before) + + expect(actions).toEqual([ + { action: 'addVariant', attributes: [{ name: 'foo', value: 'bar' }], id: 2, sku: 'v1' }, + { action: 'changeMasterVariant', variantId: 2 }, + ]) + }) + }) + + describe('when adding new master variant (without moving)', () => { + const before = { + id: '123', + version: 1, + masterVariant: { + id: 1, + sku: 'v1', + attributes: [{ name: 'foo', value: 'bar' }], + }, + variants: [], + } + + const now = { + id: '123', + version: 1, + masterVariant: { + id: 2, + sku: 'v1', + attributes: [{ name: 'foo', value: 'bar' }], + }, + variants: [], + } + + it('should generate `changeMasterVariant`, `addVariant` and `removeVariant` action', + () => { + const actions = productsSync.buildActions(now, before) + + expect(actions).toEqual([ + { action: 'removeVariant', id: 1 }, + { action: 'addVariant', attributes: [{ name: 'foo', value: 'bar' }], id: 2, sku: 'v1' }, + { action: 'changeMasterVariant', variantId: 2 }, + ]) + }) + }) + + describe('with existing variant in `now` and `before`', () => { + describe('without changes to attributes', () => { + const before = { + id: '123', + version: 1, + masterVariant: { + id: 2, + sku: 'v1', + attributes: [{ name: 'foo', value: 'bar' }], + }, + variants: [{ + id: 1, + sku: 'v1', + attributes: [{ name: 'foo-2', value: 'bar-2' }], + }], + } + + const now = { + id: '123', + version: 1, + masterVariant: { + id: 1, + sku: 'v1', + attributes: [{ name: 'foo-2', value: 'bar-2' }], + }, + variants: [{ + id: 2, + sku: 'v1', + attributes: [{ name: 'foo', value: 'bar' }], + }], + } + + it('should generate `changeMasterVariant` action', + () => { + const actions = productsSync.buildActions(now, before) + + expect(actions).toEqual([ + { action: 'changeMasterVariant', variantId: 1 }, + ]) + }) + }) + + describe('with changes to attributes', () => { + const before = { + id: '123', + version: 1, + masterVariant: { + id: 2, + sku: 'v1', + attributes: [{ name: 'foo', value: 'bar' }], + }, + variants: [{ + id: 1, + sku: 'v1', + attributes: [{ name: 'foo-2', value: 'bar-2' }], + }], + } + + const now = { + id: '123', + version: 1, + masterVariant: { + id: 1, + sku: 'v1', + attributes: [{ name: 'foo-2', value: 'bar-3' }], + }, + variants: [{ + id: 2, + sku: 'v1', + attributes: [{ name: 'foo', value: 'bar' }], + }], + } + + it('should generate `changeMasterVariant` and `setAttribute` actions', + () => { + const actions = productsSync.buildActions(now, before) + + expect(actions).toEqual([ + { action: 'changeMasterVariant', variantId: 1 }, + { action: 'setAttribute', name: 'foo-2', value: 'bar-3', variantId: 2 }, + ]) + }) + }) + }) + }) }) it('should handle unsetting the sku of a variant', () => { @@ -340,7 +523,7 @@ describe('Actions', () => { const now = { id: '123', masterVariant: { - sku: '', attributes: [{ name: 'foo', value: 'bar' }], + id: 1, sku: '', attributes: [{ name: 'foo', value: 'bar' }], }, } @@ -361,7 +544,7 @@ describe('Actions', () => { const now = { id: '123', masterVariant: { - key: '', attributes: [{ name: 'foo', value: 'bar' }], + id: 1, key: '', attributes: [{ name: 'foo', value: 'bar' }], }, } diff --git a/packages/sync-actions/test/utils/create-build-array-actions.spec.js b/packages/sync-actions/test/utils/create-build-array-actions.spec.js index eb3b97c70..20b9b3cef 100644 --- a/packages/sync-actions/test/utils/create-build-array-actions.spec.js +++ b/packages/sync-actions/test/utils/create-build-array-actions.spec.js @@ -24,7 +24,15 @@ describe('createBuildArrayActions', () => { handler(diff(before, now), before, now) - expect(addActionSpy).toHaveBeenCalledWith({ name: 'a new object' }) + expect(addActionSpy).toHaveBeenCalledWith( + { name: 'a new object' }, + expect.any(Number), + ) + + expect(addActionSpy).toHaveBeenCalledWith( + expect.any(Object), + 0, + ) }) it('correctly detects change actions', () => { @@ -41,6 +49,13 @@ describe('createBuildArrayActions', () => { expect(changeActionSpy).toHaveBeenCalledWith( { name: 'a new object' }, { name: 'a changed object' }, + expect.any(Number), + ) + + expect(changeActionSpy).toHaveBeenCalledWith( + expect.any(Object), + expect.any(Object), + 0, ) }) @@ -55,6 +70,14 @@ describe('createBuildArrayActions', () => { handler(diff(before, now), before, now) - expect(removeActionSpy).toHaveBeenCalledWith({ name: 'an object' }) + expect(removeActionSpy).toHaveBeenCalledWith( + { name: 'an object' }, + expect.any(Number), + ) + + expect(removeActionSpy).toHaveBeenCalledWith( + expect.any(Object), + 0, + ) }) }) diff --git a/packages/sync-actions/test/utils/create-map-action-group.spec.js b/packages/sync-actions/test/utils/create-map-action-group.spec.js new file mode 100644 index 000000000..a40eb7890 --- /dev/null +++ b/packages/sync-actions/test/utils/create-map-action-group.spec.js @@ -0,0 +1,89 @@ +import createMapActionGroup from '../../src/utils/create-map-action-group' + +describe('createMapActionGroup', () => { + describe('without actionGroups', () => { + const fn = jest.fn() + let mapActionGroup + + beforeEach(() => { + mapActionGroup = createMapActionGroup([]) + mapActionGroup('foo-type', fn) + }) + + it('should invoke the `fn` (callback)', () => { + expect(fn).toHaveBeenCalled() + }) + }) + + describe('with found `actionGroup` (type)', () => { + describe('with `group` being `white`', () => { + const fn = jest.fn() + const actionGroups = [{ type: 'base', group: 'white' }] + let mapActionGroup + + beforeEach(() => { + mapActionGroup = createMapActionGroup(actionGroups) + mapActionGroup(actionGroups[0].type, fn) + }) + + it('should invoke the `fn` (callback)', () => { + expect(fn).toHaveBeenCalled() + }) + }) + + describe('with `group` being `black`', () => { + const fn = jest.fn() + const actionGroups = [{ type: 'base', group: 'black' }] + let mapActionGroup + + beforeEach(() => { + mapActionGroup = createMapActionGroup(actionGroups) + mapActionGroup(actionGroups[0].type, fn) + }) + + it('should not invoke the `fn` (callback)', () => { + expect(fn).not.toHaveBeenCalled() + }) + }) + + describe('without `group`', () => { + const fn = jest.fn() + const actionGroups = [{ type: 'base', group: 'grey' }] + let mapActionGroup + + beforeEach(() => { + mapActionGroup = createMapActionGroup(actionGroups) + }) + + it('should throw an error', () => { + expect(() => { + mapActionGroup(actionGroups[0].type, fn) + }).toThrow() + }) + + it('should throw an error with message', () => { + expect(() => { + mapActionGroup(actionGroups[0].type, fn) + }).toThrowError( + `Action group '${actionGroups[0].group}' ` + + 'not supported. Please use black or white.', + ) + }) + }) + }) + + describe('with non found `actionGroup` (type)', () => { + const fn = jest.fn() + const actionGroups = [{ type: 'base', group: 'white' }] + let mapActionGroup + + beforeEach(() => { + mapActionGroup = createMapActionGroup(actionGroups) + mapActionGroup('foo-non-existent-type', fn) + }) + + it('should not invoke the `fn` (callback)', () => { + expect(fn).not.toHaveBeenCalled() + }) + }) +})