diff --git a/packages/cubejs-clickhouse-driver/.gitignore b/packages/cubejs-clickhouse-driver/.gitignore new file mode 100644 index 0000000000000..1269488f7fb1f --- /dev/null +++ b/packages/cubejs-clickhouse-driver/.gitignore @@ -0,0 +1 @@ +data diff --git a/packages/cubejs-clickhouse-driver/README.md b/packages/cubejs-clickhouse-driver/README.md index 9df649095f0f5..c937c537551b7 100644 --- a/packages/cubejs-clickhouse-driver/README.md +++ b/packages/cubejs-clickhouse-driver/README.md @@ -4,6 +4,17 @@ Pure Javascript ClickHouse driver. [Learn more](https://github.com/statsbotco/cube.js#getting-started) +### Testing + +To test follow the following steps + +``` +$ yarn +$ docker-compose up -d +$ yarn test +$ docker-compose stop +``` + ### License Cube.js ClickHouse Database Driver is [Apache 2.0 licensed](./LICENSE). \ No newline at end of file diff --git a/packages/cubejs-clickhouse-driver/driver/ClickHouseDriver.js b/packages/cubejs-clickhouse-driver/driver/ClickHouseDriver.js index 5598090a9b679..9196e20760d92 100644 --- a/packages/cubejs-clickhouse-driver/driver/ClickHouseDriver.js +++ b/packages/cubejs-clickhouse-driver/driver/ClickHouseDriver.js @@ -1,4 +1,4 @@ -const ClickHouse = require('clickhouse'); +const ClickHouse = require('@apla/clickhouse'); const genericPool = require('generic-pool'); const BaseDriver = require('@cubejs-backend/query-orchestrator/driver/BaseDriver'); @@ -8,9 +8,9 @@ class ClickHouseDriver extends BaseDriver { this.config = { host: process.env.CUBEJS_DB_HOST, port: process.env.CUBEJS_DB_PORT, - auth: process.env.CUBEJS_DB_USER + ":" + process.env.CUBEJS_DB_PASS, + auth: process.env.CUBEJS_DB_USER || process.env.CUBEJS_DB_PASS ? process.env.CUBEJS_DB_USER + ":" + process.env.CUBEJS_DB_PASS : '', queryOptions: { - database: process.env.CUBEJS_DB_NAME + database: process.env.CUBEJS_DB_NAME || config.database }, ...config }; @@ -76,21 +76,16 @@ class ClickHouseDriver extends BaseDriver { return promise; } - async testConnection() { - const conn = await this.pool._factory.create(); - try { - return await conn.querying('SELECT 1'); - } finally { - await this.pool._factory.destroy(conn); - } + testConnection() { + return this.query("SELECT 1") } query(query, values) { // TODO: handle values const self = this; return this.withConnection(connection => { - return connection.querying(query) - .then(res => res); + return connection.querying(query, {dataObjects:true}) + .then(res => res.data); }); } @@ -109,6 +104,18 @@ class ClickHouseDriver extends BaseDriver { WHERE database = '${this.config.database}' `; } + + async createSchemaIfNotExists(schemaName) { + let schemas = await this.query(`SELECT name FROM system.databases WHERE name = '${schemaName}'`) + if (schemas.length === 0) { + await this.query(`CREATE DATABASE ${schemaName}`); + } + } + + getTablesQuery(schemaName) { + return this.query(`SELECT name as table_name FROM system.tables WHERE database = '${schemaName}'`) + } + } module.exports = ClickHouseDriver; \ No newline at end of file diff --git a/packages/cubejs-clickhouse-driver/package.json b/packages/cubejs-clickhouse-driver/package.json index 3f48edf980f38..924d26b6fe50d 100644 --- a/packages/cubejs-clickhouse-driver/package.json +++ b/packages/cubejs-clickhouse-driver/package.json @@ -15,5 +15,10 @@ "@cubejs-backend/query-orchestrator": "^0.0.21", "generic-pool": "^3.6.0" }, - "license": "Apache-2.0" + "license": "Apache-2.0", + "devDependencies": { + "should": "^13.2.3", + "mocha": "^5.2.0", + "testcontainers": "^1.1.10" + } } diff --git a/packages/cubejs-clickhouse-driver/test/ClickHouseDriverTest.js b/packages/cubejs-clickhouse-driver/test/ClickHouseDriverTest.js new file mode 100644 index 0000000000000..ebe044f5ac599 --- /dev/null +++ b/packages/cubejs-clickhouse-driver/test/ClickHouseDriverTest.js @@ -0,0 +1,107 @@ +const ClickHouseDriver = require('../driver/ClickHouseDriver'); +require('should'); +const { GenericContainer } = require("testcontainers"); + + +describe('ClickHouseDriver', () => { + + + let container, config + before(async function() { + this.timeout(20000); + + container = await new GenericContainer("yandex/clickhouse-server") + .withExposedPorts(8123) + .start(); + + config = { + host:'localhost', + port:container.getMappedPort(8123), + } + + }) + + after(async ()=>{ + if (container) { + await container.stop() + } + }) + + async function doWithDriver(callback) { + let driver = new ClickHouseDriver(config) + try { + await callback(driver) + } + finally { + await driver.release() + } + } + + it('should construct', async () => { + await doWithDriver(driver=>{}) + }) + it('should test connection', async () => { + await doWithDriver(async (driver) => { + await driver.testConnection() + }) + }) + it('should select raw sql', async () => { + await doWithDriver(async (driver) => { + let numbers = await driver.query("SELECT number FROM system.numbers LIMIT 10") + numbers.should.be.deepEqual([ + { number: '0' }, + { number: '1' }, + { number: '2' }, + { number: '3' }, + { number: '4' }, + { number: '5' }, + { number: '6' }, + { number: '7' }, + { number: '8' }, + { number: '9' }, + ]) + }) + }) + it('should select raw sql multiple times', async () => { + await doWithDriver(async (driver) => { + let numbers = await driver.query("SELECT number FROM system.numbers LIMIT 5") + numbers.should.be.deepEqual([ + { number: '0' }, + { number: '1' }, + { number: '2' }, + { number: '3' }, + { number: '4' }, + ]) + numbers = await driver.query("SELECT number FROM system.numbers LIMIT 5") + numbers.should.be.deepEqual([ + { number: '0' }, + { number: '1' }, + { number: '2' }, + { number: '3' }, + { number: '4' }, + ]) + }) + }) + it('should get tables', async () => { + await doWithDriver(async (driver) => { + let tables = await driver.getTablesQuery("system") + tables.should.containDeep([ + {table_name:"numbers"}, + ]) + }) + }) + + it('should create schema if not exists', async () => { + await doWithDriver(async (driver) => { + let name = `temp_${Date.now()}` + try { + await driver.createSchemaIfNotExists(name) + } + finally { + await driver.query(`drop database ${name}`) + } + }) + }) + + + }) \ No newline at end of file diff --git a/packages/cubejs-clickhouse-driver/yarn.lock b/packages/cubejs-clickhouse-driver/yarn.lock index c4f78a491adfb..46cae0791721a 100644 --- a/packages/cubejs-clickhouse-driver/yarn.lock +++ b/packages/cubejs-clickhouse-driver/yarn.lock @@ -17,26 +17,296 @@ redis "^2.8.0" util-promisifyall "^1.0.4" +JSONStream@1.3.2: + version "1.3.2" + resolved "https://nexus.drivenow.com.au/repository/npm/JSONStream/-/JSONStream-1.3.2.tgz#c102371b6ec3a7cf3b847ca00c20bb0fce4c6dea" + dependencies: + jsonparse "^1.2.0" + through ">=2.2.7 <3" + +any-promise@^1.1.0: + version "1.3.0" + resolved "https://nexus.drivenow.com.au/repository/npm/any-promise/-/any-promise-1.3.0.tgz#abc6afeedcea52e809cdc0376aed3ce39635d17f" + +balanced-match@^1.0.0: + version "1.0.0" + resolved "https://nexus.drivenow.com.au/repository/npm/balanced-match/-/balanced-match-1.0.0.tgz#89b4d199ab2bee49de164ea02b89ce462d71b767" + +bl@^1.0.0: + version "1.2.2" + resolved "https://nexus.drivenow.com.au/repository/npm/bl/-/bl-1.2.2.tgz#a160911717103c07410cef63ef51b397c025af9c" + dependencies: + readable-stream "^2.3.5" + safe-buffer "^5.1.1" + +brace-expansion@^1.1.7: + version "1.1.11" + resolved "https://nexus.drivenow.com.au/repository/npm/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd" + dependencies: + balanced-match "^1.0.0" + concat-map "0.0.1" + +browser-stdout@1.3.1: + version "1.3.1" + resolved "https://nexus.drivenow.com.au/repository/npm/browser-stdout/-/browser-stdout-1.3.1.tgz#baa559ee14ced73452229bad7326467c61fabd60" + +buffer-alloc-unsafe@^1.1.0: + version "1.1.0" + resolved "https://nexus.drivenow.com.au/repository/npm/buffer-alloc-unsafe/-/buffer-alloc-unsafe-1.1.0.tgz#bd7dc26ae2972d0eda253be061dba992349c19f0" + +buffer-alloc@^1.2.0: + version "1.2.0" + resolved "https://nexus.drivenow.com.au/repository/npm/buffer-alloc/-/buffer-alloc-1.2.0.tgz#890dd90d923a873e08e10e5fd51a57e5b7cce0ec" + dependencies: + buffer-alloc-unsafe "^1.1.0" + buffer-fill "^1.0.0" + +buffer-fill@^1.0.0: + version "1.0.0" + resolved "https://nexus.drivenow.com.au/repository/npm/buffer-fill/-/buffer-fill-1.0.0.tgz#f8f78b76789888ef39f205cd637f68e702122b2c" + +buffer-from@^1.0.0: + version "1.1.1" + resolved "https://nexus.drivenow.com.au/repository/npm/buffer-from/-/buffer-from-1.1.1.tgz#32713bc028f75c02fdb710d7c7bcec1f2c6070ef" + buffer-indexof-polyfill@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/buffer-indexof-polyfill/-/buffer-indexof-polyfill-1.0.1.tgz#a9fb806ce8145d5428510ce72f278bb363a638bf" +chownr@^1.0.1: + version "1.1.1" + resolved "https://nexus.drivenow.com.au/repository/npm/chownr/-/chownr-1.1.1.tgz#54726b8b8fff4df053c42187e801fb4412df1494" + +commander@2.15.1: + version "2.15.1" + resolved "https://nexus.drivenow.com.au/repository/npm/commander/-/commander-2.15.1.tgz#df46e867d0fc2aec66a34662b406a9ccafff5b0f" + +concat-map@0.0.1: + version "0.0.1" + resolved "https://nexus.drivenow.com.au/repository/npm/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" + +concat-stream@~1.6.2: + version "1.6.2" + resolved "https://nexus.drivenow.com.au/repository/npm/concat-stream/-/concat-stream-1.6.2.tgz#904bdf194cd3122fc675c77fc4ac3d4ff0fd1a34" + dependencies: + buffer-from "^1.0.0" + inherits "^2.0.3" + readable-stream "^2.2.2" + typedarray "^0.0.6" + +core-util-is@~1.0.0: + version "1.0.2" + resolved "https://nexus.drivenow.com.au/repository/npm/core-util-is/-/core-util-is-1.0.2.tgz#b5fd54220aa2bc5ab57aab7140c940754503c1a7" + +debug@3.1.0: + version "3.1.0" + resolved "https://nexus.drivenow.com.au/repository/npm/debug/-/debug-3.1.0.tgz#5bb5a0672628b64149566ba16819e61518c67261" + dependencies: + ms "2.0.0" + +debug@^3.2.6: + version "3.2.6" + resolved "https://nexus.drivenow.com.au/repository/npm/debug/-/debug-3.2.6.tgz#e83d17de16d8a7efb7717edbe5fb10135eee629b" + dependencies: + ms "^2.1.1" + +debug@^4.1.1: + version "4.1.1" + resolved "https://nexus.drivenow.com.au/repository/npm/debug/-/debug-4.1.1.tgz#3b72260255109c6b589cee050f1d516139664791" + dependencies: + ms "^2.1.1" + +diff@3.5.0: + version "3.5.0" + resolved "https://nexus.drivenow.com.au/repository/npm/diff/-/diff-3.5.0.tgz#800c0dd1e0a8bfbc95835c202ad220fe317e5a12" + +docker-modem@^1.0.8: + version "1.0.9" + resolved "https://nexus.drivenow.com.au/repository/npm/docker-modem/-/docker-modem-1.0.9.tgz#a1f13e50e6afb6cf3431b2d5e7aac589db6aaba8" + dependencies: + JSONStream "1.3.2" + debug "^3.2.6" + readable-stream "~1.0.26-4" + split-ca "^1.0.0" + +dockerode@^2.5.8: + version "2.5.8" + resolved "https://nexus.drivenow.com.au/repository/npm/dockerode/-/dockerode-2.5.8.tgz#1b661e36e1e4f860e25f56e0deabe9f87f1d0acc" + dependencies: + concat-stream "~1.6.2" + docker-modem "^1.0.8" + tar-fs "~1.16.3" + double-ended-queue@^2.1.0-0: version "2.1.0-0" resolved "https://registry.yarnpkg.com/double-ended-queue/-/double-ended-queue-2.1.0-0.tgz#103d3527fd31528f40188130c841efdd78264e5c" +end-of-stream@^1.0.0, end-of-stream@^1.1.0: + version "1.4.1" + resolved "https://nexus.drivenow.com.au/repository/npm/end-of-stream/-/end-of-stream-1.4.1.tgz#ed29634d19baba463b6ce6b80a37213eab71ec43" + dependencies: + once "^1.4.0" + +escape-string-regexp@1.0.5: + version "1.0.5" + resolved "https://nexus.drivenow.com.au/repository/npm/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4" + +fs-constants@^1.0.0: + version "1.0.0" + resolved "https://nexus.drivenow.com.au/repository/npm/fs-constants/-/fs-constants-1.0.0.tgz#6be0de9be998ce16af8afc24497b9ee9b7ccd9ad" + +fs.realpath@^1.0.0: + version "1.0.0" + resolved "https://nexus.drivenow.com.au/repository/npm/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" + generic-pool@^3.6.0: version "3.6.0" resolved "https://registry.yarnpkg.com/generic-pool/-/generic-pool-3.6.0.tgz#34e3124d9af754c8bfee7c15906e7347dc543afc" +get-port@^4.1.0: + version "4.2.0" + resolved "https://nexus.drivenow.com.au/repository/npm/get-port/-/get-port-4.2.0.tgz#e37368b1e863b7629c43c5a323625f95cf24b119" + +glob@7.1.2: + version "7.1.2" + resolved "https://nexus.drivenow.com.au/repository/npm/glob/-/glob-7.1.2.tgz#c19c9df9a028702d678612384a6552404c636d15" + dependencies: + 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" + +growl@1.10.5: + version "1.10.5" + resolved "https://nexus.drivenow.com.au/repository/npm/growl/-/growl-1.10.5.tgz#f2735dc2283674fa67478b10181059355c369e5e" + +has-flag@^3.0.0: + version "3.0.0" + resolved "https://nexus.drivenow.com.au/repository/npm/has-flag/-/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd" + +he@1.1.1: + version "1.1.1" + resolved "https://nexus.drivenow.com.au/repository/npm/he/-/he-1.1.1.tgz#93410fd21b009735151f8868c2f271f3427e23fd" + +inflight@^1.0.4: + version "1.0.6" + resolved "https://nexus.drivenow.com.au/repository/npm/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9" + dependencies: + once "^1.3.0" + wrappy "1" + +inherits@2, inherits@^2.0.3, inherits@~2.0.1, inherits@~2.0.3: + version "2.0.3" + resolved "https://nexus.drivenow.com.au/repository/npm/inherits/-/inherits-2.0.3.tgz#633c2c83e3da42a502f52466022480f4208261de" + +isarray@0.0.1: + version "0.0.1" + resolved "https://nexus.drivenow.com.au/repository/npm/isarray/-/isarray-0.0.1.tgz#8a18acfca9a8f4177e09abfc6038939b05d1eedf" + +isarray@~1.0.0: + version "1.0.0" + resolved "https://nexus.drivenow.com.au/repository/npm/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11" + +jsonparse@^1.2.0: + version "1.3.1" + resolved "https://nexus.drivenow.com.au/repository/npm/jsonparse/-/jsonparse-1.3.1.tgz#3f4dae4a91fac315f71062f8521cc239f1366280" + +minimatch@3.0.4, minimatch@^3.0.4: + version "3.0.4" + resolved "https://nexus.drivenow.com.au/repository/npm/minimatch/-/minimatch-3.0.4.tgz#5166e286457f03306064be5497e8dbb0c3d32083" + dependencies: + brace-expansion "^1.1.7" + +minimist@0.0.8: + version "0.0.8" + resolved "https://nexus.drivenow.com.au/repository/npm/minimist/-/minimist-0.0.8.tgz#857fcabfc3397d2625b8228262e86aa7a011b05d" + +mkdirp@0.5.1, mkdirp@^0.5.1: + version "0.5.1" + resolved "https://nexus.drivenow.com.au/repository/npm/mkdirp/-/mkdirp-0.5.1.tgz#30057438eac6cf7f8c4767f38648d6697d75c903" + dependencies: + minimist "0.0.8" + +mocha@^5.2.0: + version "5.2.0" + resolved "https://nexus.drivenow.com.au/repository/npm/mocha/-/mocha-5.2.0.tgz#6d8ae508f59167f940f2b5b3c4a612ae50c90ae6" + dependencies: + browser-stdout "1.3.1" + commander "2.15.1" + debug "3.1.0" + diff "3.5.0" + escape-string-regexp "1.0.5" + glob "7.1.2" + growl "1.10.5" + he "1.1.1" + minimatch "3.0.4" + mkdirp "0.5.1" + supports-color "5.4.0" + +ms@2.0.0: + version "2.0.0" + resolved "https://nexus.drivenow.com.au/repository/npm/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8" + +ms@^2.1.1: + version "2.1.1" + resolved "https://nexus.drivenow.com.au/repository/npm/ms/-/ms-2.1.1.tgz#30a5864eb3ebb0a66f2ebe6d727af06a09d86e0a" + +node-duration@^1.0.2: + version "1.0.4" + resolved "https://nexus.drivenow.com.au/repository/npm/node-duration/-/node-duration-1.0.4.tgz#3e94ecc0e473691c89c4560074503362071cecac" + object-assign@^4.1.0: version "4.1.1" resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863" +once@^1.3.0, once@^1.3.1, once@^1.4.0: + version "1.4.0" + resolved "https://nexus.drivenow.com.au/repository/npm/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" + dependencies: + wrappy "1" + +path-is-absolute@^1.0.0: + version "1.0.1" + resolved "https://nexus.drivenow.com.au/repository/npm/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" + +process-nextick-args@~2.0.0: + version "2.0.0" + resolved "https://nexus.drivenow.com.au/repository/npm/process-nextick-args/-/process-nextick-args-2.0.0.tgz#a37d732f4271b4ab1ad070d35508e8290788ffaa" + +pump@^1.0.0: + version "1.0.3" + resolved "https://nexus.drivenow.com.au/repository/npm/pump/-/pump-1.0.3.tgz#5dfe8311c33bbf6fc18261f9f34702c47c08a954" + dependencies: + end-of-stream "^1.1.0" + once "^1.3.1" + ramda@^0.24.1: version "0.24.1" resolved "https://registry.yarnpkg.com/ramda/-/ramda-0.24.1.tgz#c3b7755197f35b8dc3502228262c4c91ddb6b857" +readable-stream@^2.2.2, readable-stream@^2.3.0, readable-stream@^2.3.5: + version "2.3.6" + resolved "https://nexus.drivenow.com.au/repository/npm/readable-stream/-/readable-stream-2.3.6.tgz#b11c27d88b8ff1fbe070643cf94b0c79ae1b0aaf" + dependencies: + 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" + +readable-stream@~1.0.26-4: + version "1.0.34" + resolved "https://nexus.drivenow.com.au/repository/npm/readable-stream/-/readable-stream-1.0.34.tgz#125820e34bc842d2f2aaafafe4c2916ee32c157c" + dependencies: + core-util-is "~1.0.0" + inherits "~2.0.1" + isarray "0.0.1" + string_decoder "~0.10.x" + redis-commands@^1.2.0: version "1.4.0" resolved "https://registry.yarnpkg.com/redis-commands/-/redis-commands-1.4.0.tgz#52f9cf99153efcce56a8f86af986bd04e988602f" @@ -53,10 +323,129 @@ redis@^2.8.0: redis-commands "^1.2.0" redis-parser "^2.6.0" +safe-buffer@^5.1.1, safe-buffer@~5.1.0, safe-buffer@~5.1.1: + version "5.1.2" + resolved "https://nexus.drivenow.com.au/repository/npm/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d" + +should-equal@^2.0.0: + version "2.0.0" + resolved "https://nexus.drivenow.com.au/repository/npm/should-equal/-/should-equal-2.0.0.tgz#6072cf83047360867e68e98b09d71143d04ee0c3" + dependencies: + should-type "^1.4.0" + +should-format@^3.0.3: + version "3.0.3" + resolved "https://nexus.drivenow.com.au/repository/npm/should-format/-/should-format-3.0.3.tgz#9bfc8f74fa39205c53d38c34d717303e277124f1" + dependencies: + should-type "^1.3.0" + should-type-adaptors "^1.0.1" + +should-type-adaptors@^1.0.1: + version "1.1.0" + resolved "https://nexus.drivenow.com.au/repository/npm/should-type-adaptors/-/should-type-adaptors-1.1.0.tgz#401e7f33b5533033944d5cd8bf2b65027792e27a" + dependencies: + should-type "^1.3.0" + should-util "^1.0.0" + +should-type@^1.3.0, should-type@^1.4.0: + version "1.4.0" + resolved "https://nexus.drivenow.com.au/repository/npm/should-type/-/should-type-1.4.0.tgz#0756d8ce846dfd09843a6947719dfa0d4cff5cf3" + +should-util@^1.0.0: + version "1.0.0" + resolved "https://nexus.drivenow.com.au/repository/npm/should-util/-/should-util-1.0.0.tgz#c98cda374aa6b190df8ba87c9889c2b4db620063" + +should@^13.2.3: + version "13.2.3" + resolved "https://nexus.drivenow.com.au/repository/npm/should/-/should-13.2.3.tgz#96d8e5acf3e97b49d89b51feaa5ae8d07ef58f10" + dependencies: + should-equal "^2.0.0" + should-format "^3.0.3" + should-type "^1.4.0" + should-type-adaptors "^1.0.1" + should-util "^1.0.0" + +split-ca@^1.0.0: + version "1.0.1" + resolved "https://nexus.drivenow.com.au/repository/npm/split-ca/-/split-ca-1.0.1.tgz#6c83aff3692fa61256e0cd197e05e9de157691a6" + +stream-to-array@^2.3.0: + version "2.3.0" + resolved "https://nexus.drivenow.com.au/repository/npm/stream-to-array/-/stream-to-array-2.3.0.tgz#bbf6b39f5f43ec30bc71babcb37557acecf34353" + dependencies: + any-promise "^1.1.0" + +string_decoder@~0.10.x: + version "0.10.31" + resolved "https://nexus.drivenow.com.au/repository/npm/string_decoder/-/string_decoder-0.10.31.tgz#62e203bc41766c6c28c9fc84301dab1c5310fa94" + +string_decoder@~1.1.1: + version "1.1.1" + resolved "https://nexus.drivenow.com.au/repository/npm/string_decoder/-/string_decoder-1.1.1.tgz#9cf1611ba62685d7030ae9e4ba34149c3af03fc8" + dependencies: + safe-buffer "~5.1.0" + +supports-color@5.4.0: + version "5.4.0" + resolved "https://nexus.drivenow.com.au/repository/npm/supports-color/-/supports-color-5.4.0.tgz#1c6b337402c2137605efe19f10fec390f6faab54" + dependencies: + has-flag "^3.0.0" + +tar-fs@~1.16.3: + version "1.16.3" + resolved "https://nexus.drivenow.com.au/repository/npm/tar-fs/-/tar-fs-1.16.3.tgz#966a628841da2c4010406a82167cbd5e0c72d509" + dependencies: + chownr "^1.0.1" + mkdirp "^0.5.1" + pump "^1.0.0" + tar-stream "^1.1.2" + +tar-stream@^1.1.2: + version "1.6.2" + resolved "https://nexus.drivenow.com.au/repository/npm/tar-stream/-/tar-stream-1.6.2.tgz#8ea55dab37972253d9a9af90fdcd559ae435c555" + dependencies: + bl "^1.0.0" + buffer-alloc "^1.2.0" + end-of-stream "^1.0.0" + fs-constants "^1.0.0" + readable-stream "^2.3.0" + to-buffer "^1.1.1" + xtend "^4.0.0" + +testcontainers@^1.1.10: + version "1.1.10" + resolved "https://nexus.drivenow.com.au/repository/npm/testcontainers/-/testcontainers-1.1.10.tgz#9507a5ec4fddbff506721a7e2a523e356f4fe1b0" + dependencies: + debug "^4.1.1" + dockerode "^2.5.8" + get-port "^4.1.0" + node-duration "^1.0.2" + stream-to-array "^2.3.0" + +"through@>=2.2.7 <3": + version "2.3.8" + resolved "https://nexus.drivenow.com.au/repository/npm/through/-/through-2.3.8.tgz#0dd4c9ffaabc357960b1b724115d7e0e86a2e1f5" + +to-buffer@^1.1.1: + version "1.1.1" + resolved "https://nexus.drivenow.com.au/repository/npm/to-buffer/-/to-buffer-1.1.1.tgz#493bd48f62d7c43fcded313a03dcadb2e1213a80" + +typedarray@^0.0.6: + version "0.0.6" + resolved "https://nexus.drivenow.com.au/repository/npm/typedarray/-/typedarray-0.0.6.tgz#867ac74e3864187b1d3d47d996a78ec5c8830777" + +util-deprecate@~1.0.1: + version "1.0.2" + resolved "https://nexus.drivenow.com.au/repository/npm/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" + util-promisifyall@^1.0.4: version "1.0.4" resolved "https://registry.yarnpkg.com/util-promisifyall/-/util-promisifyall-1.0.4.tgz#82047e87e0637ca799b3480cd6ede3ddeedadf09" -yarn@^1.15.2: - version "1.15.2" - resolved "https://registry.yarnpkg.com/yarn/-/yarn-1.15.2.tgz#7a064ca81ca34235f16376ad2f796ed432f9e285" +wrappy@1: + version "1.0.2" + resolved "https://nexus.drivenow.com.au/repository/npm/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" + +xtend@^4.0.0: + version "4.0.1" + resolved "https://nexus.drivenow.com.au/repository/npm/xtend/-/xtend-4.0.1.tgz#a5c6d532be656e23db820efb943a1f04998d63af"