diff --git a/content/api/1-pool.mdx b/content/api/1-pool.mdx index 9ad28f1..4c8872b 100644 --- a/content/api/1-pool.mdx +++ b/content/api/1-pool.mdx @@ -26,6 +26,17 @@ config = { // maximum number of clients the pool should contain // by default this is set to 10. max?: int, + + // Default behavior is the pool will keep clients open & connected to the backend + // until idleTimeoutMillis expire for each client and node will maintain a ref + // to the socket on the client, keeping the event loop alive until all clients are closed + // after being idle or the pool is manually shutdown with `pool.end()`. + // + // Setting `allowExitOnIdle: true` in the config will allow the node event loop to exit + // as soon as all clients in the pool are idle, even if their socket is still open + // to the postgres server. This can be handy in scripts & tests + // where you don't want to wait for your clients to go idle before your process exits. + allowExitOnIdle?: boolean } ``` diff --git a/content/api/2-client.mdx b/content/api/2-client.mdx index 8dcc741..e54241f 100644 --- a/content/api/2-client.mdx +++ b/content/api/2-client.mdx @@ -12,16 +12,18 @@ Every field of the `config` object is entirely optional. A `Client` instance wil ```flow config = { user?: string, // default process.env.PGUSER || process.env.USER - password?: string, //default process.env.PGPASSWORD + password?: string or function, //default process.env.PGPASSWORD host?: string, // default process.env.PGHOST - database?: string, // default process.env.PGDATABASE || process.env.USER + database?: string, // default process.env.PGDATABASE || user port?: number, // default process.env.PGPORT connectionString?: string, // e.g. postgres://user:password@host:5432/database ssl?: any, // passed directly to node.TLSSocket, supports all tls.connect options types?: any, // custom type parsers statement_timeout?: number, // number of milliseconds before a statement in query will time out, default is no timeout query_timeout?: number, // number of milliseconds before a query call will timeout, default is no timeout + application_name?: string, // The name of the application that created this Client instance connectionTimeoutMillis?: number, // number of milliseconds to wait for connection, default is no timeout + idle_in_transaction_session_timeout?: number // number of milliseconds before terminating any session with an open idle transaction, default is no timeout } ``` diff --git a/content/api/3-result.mdx b/content/api/3-result.mdx index 73fc4a0..a0ef7dd 100644 --- a/content/api/3-result.mdx +++ b/content/api/3-result.mdx @@ -15,7 +15,7 @@ Every result will have a rows array. If no rows are returned the array will be e ### `result.fields: Array` -Every result will have a fields array. This array contains the `name` and `dataTypeId` of each field in the result. These fields are ordered in the same order as the columns if you are using `arrayMode` for the query: +Every result will have a fields array. This array contains the `name` and `dataTypeID` of each field in the result. These fields are ordered in the same order as the columns if you are using `arrayMode` for the query: ```js const { Pool } = require('pg') diff --git a/content/api/5-cursor.mdx b/content/api/5-cursor.mdx index daabf3e..aa4b781 100644 --- a/content/api/5-cursor.mdx +++ b/content/api/5-cursor.mdx @@ -76,6 +76,6 @@ cursor.read(100, (err, rows) => { ## close -### `cursor.close(callback: (err: Error) => void) => void` +### `cursor.close(callback: () => void) => void` Used to close the cursor early. If you want to stop reading from the cursor before you get all of the rows returned, call this. diff --git a/content/features/1-connecting.mdx b/content/features/1-connecting.mdx index 7aa9770..aaed8ed 100644 --- a/content/features/1-connecting.mdx +++ b/content/features/1-connecting.mdx @@ -90,6 +90,36 @@ client.query('SELECT NOW()', (err, res) => { }) ``` +Many cloud providers include alternative methods for connecting to database instances using short-lived authentication tokens. node-postgres supports dynamic passwords via a callback function, either synchronous or asynchronous. The callback function must resolve to a string. + +```js +const { Pool } = require('pg') +const { RDS } = require('aws-sdk') + +const signerOptions = { + credentials: { + accessKeyId: 'YOUR-ACCESS-KEY', + secretAccessKey: 'YOUR-SECRET-ACCESS-KEY', + }, + region: 'us-east-1', + hostname: 'example.aslfdewrlk.us-east-1.rds.amazonaws.com', + port: 5432, + username: 'api-user', +} + +const signer = new RDS.Signer() + +const getPassword = () => signer.getAuthToken(signerOptions) + +const pool = new Pool({ + host: signerOptions.hostname, + port: signerOptions.port, + user: signerOptions.username, + database: 'my-db', + password: getPassword, +}) +``` + ### Programmatic Connection to Sockets Connections to unix sockets can also be made. This can be useful on distros like Ubuntu, where authentication is managed via the socket connection instead of a password. @@ -106,14 +136,14 @@ client = new Client({ ## Connection URI -You can initialize both a pool and a client with a connection string URI as well. This is common in environments like Heroku where the database connection string is supplied to your application dyno through an environment variable. Connection string parsing brought to you by [pg-connection-string](https://github.com/iceddev/pg-connection-string). +You can initialize both a pool and a client with a connection string URI as well. This is common in environments like Heroku where the database connection string is supplied to your application dyno through an environment variable. Connection string parsing brought to you by [pg-connection-string](https://github.com/brianc/node-postgres/tree/master/packages/pg-connection-string). ```js const { Pool, Client } = require('pg') const connectionString = 'postgresql://dbuser:secretpassword@database.server.com:3211/mydb' const pool = new Pool({ - connectionString: connectionString, + connectionString, }) pool.query('SELECT NOW()', (err, res) => { @@ -122,7 +152,7 @@ pool.query('SELECT NOW()', (err, res) => { }) const client = new Client({ - connectionString: connectionString, + connectionString, }) client.connect() diff --git a/content/features/2-queries.mdx b/content/features/2-queries.mdx index 4153d67..0deef0d 100644 --- a/content/features/2-queries.mdx +++ b/content/features/2-queries.mdx @@ -172,7 +172,7 @@ By default node-postgres reads rows and collects them into JavaScript objects wi ```js const query = { - text: 'SELECT $1::text as first_name, select $2::text as last_name', + text: 'SELECT $1::text as first_name, $2::text as last_name', values: ['Brian', 'Carlson'], rowMode: 'array', } diff --git a/content/features/3-pooling.mdx b/content/features/3-pooling.mdx index 96a36b3..9928848 100644 --- a/content/features/3-pooling.mdx +++ b/content/features/3-pooling.mdx @@ -73,12 +73,12 @@ pool try { const res = await client.query('SELECT * FROM users WHERE id = $1', [1]) console.log(res.rows[0]) + } catch (err) { + console.log(err.stack) } finally { - // Make sure to release the client before any error handling, - // just in case the error handling itself throws an error. client.release() } -})().catch(err => console.log(err.stack)) +})() ```
diff --git a/content/features/5-types.mdx b/content/features/5-types.mdx index 28d6503..929b971 100644 --- a/content/features/5-types.mdx +++ b/content/features/5-types.mdx @@ -59,7 +59,7 @@ const createTableText = ` CREATE TEMP TABLE dates( date_col DATE, timestamp_col TIMESTAMP, - timestamptz_col TIMESTAMPTZ, + timestamptz_col TIMESTAMPTZ ); ` // create our temp table diff --git a/content/features/6-ssl.mdx b/content/features/6-ssl.mdx index 4d1aeea..0428d05 100644 --- a/content/features/6-ssl.mdx +++ b/content/features/6-ssl.mdx @@ -44,3 +44,18 @@ pool .catch(err => console.error('error connecting', err.stack)) .then(() => pool.end()) ``` + +## Usage with `connectionString` + +If you plan to use a combination of a database connection string from the environment and SSL settings in the config object directly, then you must avoid including any of `sslcert`, `sslkey`, `sslrootcert`, or `sslmode` in the connection string. If any of these options are used then the `ssl` object is replaced and any additional options provided there will be lost. + +```js +const config = { + connectionString: 'postgres://user:password@host:port/db?sslmode=require', + // Beware! The ssl object is overwritten when parsing the connectionString + ssl: { + rejectUnauthorized: false, + ca: fs.readFileSync('/path/to/server-certificates/root.crt').toString(), + }, +} +``` diff --git a/content/guides/1-project-structure.md b/content/guides/1-project-structure.md index 06281c8..95d9ea9 100644 --- a/content/guides/1-project-structure.md +++ b/content/guides/1-project-structure.md @@ -49,11 +49,11 @@ That's it. But now everywhere else in my application instead of requiring `pg` d const db = require('../db') app.get('/:id', (req, res, next) => { - db.query('SELECT * FROM users WHERE id = $1', [req.params.id], (err, res) => { + db.query('SELECT * FROM users WHERE id = $1', [req.params.id], (err, result) => { if (err) { return next(err) } - res.send(res.rows[0]) + res.send(result.rows[0]) }) }) @@ -156,4 +156,42 @@ module.exports = { } ``` +Using async/await: + +``` +module.exports = { + async query(text, params) { + const start = Date.now() + const res = await pool.query(text, params) + const duration = Date.now() - start + console.log('executed query', { text, duration, rows: res.rowCount }) + return res + }, + + async getClient() { + const client = await pool.connect() + const query = client.query + const release = client.release + // set a timeout of 5 seconds, after which we will log this client's last query + const timeout = setTimeout(() => { + console.error('A client has been checked out for more than 5 seconds!') + console.error(`The last executed query on this client was: ${client.lastQuery}`) + }, 5000) + // monkey patch the query method to keep track of the last query executed + client.query = (...args) => { + client.lastQuery = args + return query.apply(client, args) + } + client.release = () => { + // clear our timeout + clearTimeout(timeout) + // set the methods back to their old un-monkey-patched version + client.query = query + client.release = release + return release.apply(client) + } + return client + } +} +``` That should hopefully give us enough diagnostic information to track down any leaks. diff --git a/content/guides/3-upgrading.md b/content/guides/3-upgrading.md index 8d426c8..2a1d311 100644 --- a/content/guides/3-upgrading.md +++ b/content/guides/3-upgrading.md @@ -1,8 +1,26 @@ --- -title: Upgrading to 7.0 +title: Upgrading slug: /guides/upgrading --- +# Upgrading to 8.0 + +node-postgres at 8.0 introduces a breaking change to ssl-verified connections. If you connect with ssl and use + +``` +const client = new Client({ ssl: true }) +``` + +and the server's SSL certificate is self-signed, connections will fail as of node-postgres 8.0. To keep the existing behavior, modify the invocation to + +``` +const client = new Client({ ssl: { rejectUnauthorized: false } }) +``` + +The rest of the changes are relatively minor and unlikely to cause issues; see [the announcement](/announcements#2020-02-25) for full details. + +# Upgrading to 7.0 + node-postgres at 7.0 introduces somewhat significant breaking changes to the public API. ## node version support diff --git a/content/welcome.mdx b/content/welcome.mdx index 2c4d9a9..a345900 100644 --- a/content/welcome.mdx +++ b/content/welcome.mdx @@ -18,14 +18,22 @@ node-postgres continued development and support is made possible by the many [su - If you or your company would like to sponsor node-postgres stop by [github sponsors](https://github.com/sponsors/brianc) and sign up or feel free to [email me](mailto:brian@pecanware.com) if you want to add your logo to the documentation or discuss higher tiers of sponsorship! +# Version compatibility + +node-postgres strives to be compatible with all recent lts versions of node & the most recent "stable" version. At the time of this writing node-postgres is compatible with node 8.x, 10.x, 12.x and 14.x To use node >= 14.x you will need to install `pg@8.2.x` or later due to some internal stream changes on the node 14 branch. Dropping support for an old node lts version will always be considered a breaking change in node-postgres and will be done on _major_ version number changes only, and we will try to keep support for 8.x for as long as reasonably possible. + ## Getting started This is the simplest possible way to connect, query, and disconnect with async/await: @@ -33,14 +41,11 @@ This is the simplest possible way to connect, query, and disconnect with async/a ```js const { Client } = require('pg') const client = new Client() +await client.connect() -;(async () => { - await client.connect() - - const res = await client.query('SELECT $1::text as message', ['Hello world!']) - console.log(res.rows[0].message) // Hello world! - await client.end() -})() +const res = await client.query('SELECT $1::text as message', ['Hello world!']) +console.log(res.rows[0].message) // Hello world! +await client.end() ``` And here's the same thing with callbacks: diff --git a/static/crate-io.png b/static/crate-io.png index 6956a6d..00753f3 100755 Binary files a/static/crate-io.png and b/static/crate-io.png differ diff --git a/static/eaze.png b/static/eaze.png new file mode 100644 index 0000000..1466d62 Binary files /dev/null and b/static/eaze.png differ diff --git a/static/timescale.svg b/static/timescale.svg deleted file mode 100644 index fb21f0f..0000000 --- a/static/timescale.svg +++ /dev/null @@ -1 +0,0 @@ -20190510_Timescale_Logo_Horizontal_WEB \ No newline at end of file diff --git a/yarn.lock b/yarn.lock index 5b5812c..2049c64 100644 --- a/yarn.lock +++ b/yarn.lock @@ -3257,9 +3257,9 @@ binary-extensions@^1.0.0: integrity sha512-Un7MIEDdUC5gNpcGDV97op1Ywk748MpHcFTHoYs6qnj1Z3j7I53VG3nwZhKzoBZmbdRNnb6WRdFlwl7tSDuZGw== bl@^1.0.0: - version "1.2.2" - resolved "https://registry.yarnpkg.com/bl/-/bl-1.2.2.tgz#a160911717103c07410cef63ef51b397c025af9c" - integrity sha512-e8tQYnZodmebYDWGH7KMRvtzKXaJHx3BbilrgZCfvyLUYdKpK1t5PSPmpkny/SgiTSCnjfLW7v5rlONXVFkQEA== + version "1.2.3" + resolved "https://registry.yarnpkg.com/bl/-/bl-1.2.3.tgz#1e8dd80142eac80d7158c9dccc047fb620e035e7" + integrity sha512-pvcNpa0UU69UT341rO6AYy4FVAIkUHuZXRIWbq+zHnsVcRzDDjIAhGuuYoi0d//cwIwtt4pkpKycWEfjdV+vww== dependencies: readable-stream "^2.3.5" safe-buffer "^5.1.1" @@ -3904,9 +3904,9 @@ chokidar@^2.0.2, chokidar@^2.1.6: fsevents "^1.2.7" chownr@^1.0.1, chownr@^1.1.1: - version "1.1.2" - resolved "https://registry.yarnpkg.com/chownr/-/chownr-1.1.2.tgz#a18f1e0b269c8a6a5d3c86eb298beb14c3dd7bf6" - integrity sha512-GkfeAQh+QNy3wquu9oIZr6SS5x7wGdSgNQvD10X3r+AZr1Oys22HW8kAmDMvNg2+Dm0TeGaEuO8gFwdBXxwO8A== + version "1.1.4" + resolved "https://registry.yarnpkg.com/chownr/-/chownr-1.1.4.tgz#6fc9d7b42d32a583596337666e7d08084da2cc6b" + integrity sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg== chrome-trace-event@^1.0.0: version "1.0.2" @@ -5748,11 +5748,16 @@ event-source-polyfill@^1.0.5: resolved "https://registry.yarnpkg.com/event-source-polyfill/-/event-source-polyfill-1.0.7.tgz#79a0a432e00ef53387309d6213d98332bab0a4ea" integrity sha512-TPbIjt4c3dlO7WTdsaTdwcxD1jKl+2gGD6dfauEmGqRNtpoB9ith/c4qa+X8XbTV5FsvTrkjepXfamWxntklVA== -eventemitter3@^3.0.0, eventemitter3@^3.1.0: +eventemitter3@^3.1.0: version "3.1.2" resolved "https://registry.yarnpkg.com/eventemitter3/-/eventemitter3-3.1.2.tgz#2d3d48f9c346698fce83a85d7d664e98535df6e7" integrity sha512-tvtQIeLVHjDkJYnzf2dgVMxfuSGJeM/7UCG17TT4EumTfNtF+0nebF/4zWOIkCreAbtNqhGEboB6BWrwqNaw4Q== +eventemitter3@^4.0.0: + version "4.0.7" + resolved "https://registry.yarnpkg.com/eventemitter3/-/eventemitter3-4.0.7.tgz#2de9b68f6528d5644ef5c59526a1b4a07306169f" + integrity sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw== + events@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/events/-/events-3.0.0.tgz#9a0a0dfaf62893d92b875b8f2698ca4114973e88" @@ -6329,11 +6334,9 @@ flush-write-stream@^1.0.0: readable-stream "^2.3.6" follow-redirects@^1.0.0: - version "1.7.0" - resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.7.0.tgz#489ebc198dc0e7f64167bd23b03c4c19b5784c76" - integrity sha512-m/pZQy4Gj287eNy94nivy5wchN3Kp+Q5WgUPNy5lJSZ3sgkVKSYV/ZChMAQVIgx1SqfZ2zBZtPA2YlXIWxxJOQ== - dependencies: - debug "^3.2.6" + version "1.13.0" + resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.13.0.tgz#b42e8d93a2a7eea5ed88633676d6597bc8e384db" + integrity sha512-aq6gF1BEKje4a9i9+5jimNFIpq4Q1WiwBToeRK5NvZBd/TRsmW8BsJfOEGkr76TbOyPVD3OVDN910EcUNtRYEA== for-each@^0.3.3: version "0.3.3" @@ -6438,11 +6441,11 @@ fs-extra@^8.1.0: universalify "^0.1.0" fs-minipass@^1.2.5: - version "1.2.6" - resolved "https://registry.yarnpkg.com/fs-minipass/-/fs-minipass-1.2.6.tgz#2c5cc30ded81282bfe8a0d7c7c1853ddeb102c07" - integrity sha512-crhvyXcMejjv3Z5d2Fa9sf5xLYVCF5O1c71QxbVnbLsmYMBEvDAftewesN/HhY03YRoA7zOMxjNGrF5svGaaeQ== + version "1.2.7" + resolved "https://registry.yarnpkg.com/fs-minipass/-/fs-minipass-1.2.7.tgz#ccff8570841e7fe4265693da88936c55aed7f7c7" + integrity sha512-GWSSJGFy4e9GUeCcbIkED+bgAoFyj7XF1mV8rma3QW4NIqX9Kyx79N/PF61H5udOV3aY1IaMLs6pGbH71nlCTA== dependencies: - minipass "^2.2.1" + minipass "^2.6.0" fs-write-stream-atomic@^1.0.8: version "1.0.10" @@ -7817,11 +7820,11 @@ http-proxy-middleware@^0.19.1: micromatch "^3.1.10" http-proxy@^1.17.0: - version "1.17.0" - resolved "https://registry.yarnpkg.com/http-proxy/-/http-proxy-1.17.0.tgz#7ad38494658f84605e2f6db4436df410f4e5be9a" - integrity sha512-Taqn+3nNvYRfJ3bGvKfBSRwy1v6eePlm3oc/aWVxZp57DQr5Eq3xhKJi7Z4hZpS8PC3H4qI+Yly5EmFacGuA/g== + version "1.18.1" + resolved "https://registry.yarnpkg.com/http-proxy/-/http-proxy-1.18.1.tgz#401541f0534884bbf95260334e72f88ee3976549" + integrity sha512-7mz/721AbnJwIVbnaSv1Cz3Am0ZLT/UBwkC92VlxhXv/k/BBQfM2fXElQNC27BVGr0uwUpplYPQM9LnaBMR5NQ== dependencies: - eventemitter3 "^3.0.0" + eventemitter3 "^4.0.0" follow-redirects "^1.0.0" requires-port "^1.0.0" @@ -9713,20 +9716,20 @@ minimist@~0.0.8: resolved "https://registry.yarnpkg.com/minimist/-/minimist-0.0.10.tgz#de3f98543dbf96082be48ad1a0c7cda836301dcf" integrity sha1-3j+YVD2/lggr5IrRoMfNqDYwHc8= -minipass@^2.2.1, minipass@^2.3.5: - version "2.3.5" - resolved "https://registry.yarnpkg.com/minipass/-/minipass-2.3.5.tgz#cacebe492022497f656b0f0f51e2682a9ed2d848" - integrity sha512-Gi1W4k059gyRbyVUZQ4mEqLm0YIUiGYfvxhF6SIlk3ui1WVxMTGfGdQ2SInh3PDrRTVvPKgULkpJtT4RH10+VA== +minipass@^2.6.0, minipass@^2.8.6, minipass@^2.9.0: + version "2.9.0" + resolved "https://registry.yarnpkg.com/minipass/-/minipass-2.9.0.tgz#e713762e7d3e32fed803115cf93e04bca9fcc9a6" + integrity sha512-wxfUjg9WebH+CUDX/CdbRlh5SmfZiy/hpkxaRI16Y9W56Pa75sWgd/rvFilSgrauD9NyFymP/+JFV3KwzIsJeg== dependencies: safe-buffer "^5.1.2" yallist "^3.0.0" minizlib@^1.2.1: - version "1.2.1" - resolved "https://registry.yarnpkg.com/minizlib/-/minizlib-1.2.1.tgz#dd27ea6136243c7c880684e8672bb3a45fd9b614" - integrity sha512-7+4oTUOWKg7AuL3vloEWekXY2/D20cevzsrNT2kGWm+39J9hGTCBv8VI5Pm5lXZ/o3/mdR4f8rflAPhnQb8mPA== + version "1.3.3" + resolved "https://registry.yarnpkg.com/minizlib/-/minizlib-1.3.3.tgz#2290de96818a34c29551c8a8d301216bd65a861d" + integrity sha512-6ZYMOEnmVsdCeTJVE0W9ZD+pVnE8h9Hma/iOwwRDsdQoePpoX56/8B6z3P9VNwppJuBKNRuFDRNRqRWexT9G9Q== dependencies: - minipass "^2.2.1" + minipass "^2.9.0" mississippi@^3.0.0: version "3.0.0" @@ -9757,13 +9760,20 @@ mixin-deep@^1.2.0: for-in "^1.0.2" is-extendable "^1.0.1" -mkdirp@0.5.1, mkdirp@0.5.x, mkdirp@^0.5.0, mkdirp@^0.5.1, mkdirp@~0.5.0, mkdirp@~0.5.1: +mkdirp@0.5.1: version "0.5.1" resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.1.tgz#30057438eac6cf7f8c4767f38648d6697d75c903" integrity sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM= dependencies: minimist "0.0.8" +mkdirp@0.5.x, mkdirp@^0.5.0, mkdirp@^0.5.1, mkdirp@~0.5.0, mkdirp@~0.5.1: + version "0.5.5" + resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.5.tgz#d91cefd62d1436ca0f41620e251288d420099def" + integrity sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ== + dependencies: + minimist "^1.2.5" + moment@^2.21.0: version "2.24.0" resolved "https://registry.yarnpkg.com/moment/-/moment-2.24.0.tgz#0d055d53f5052aa653c9f6eb68bb5d12bf5c2b5b" @@ -10221,9 +10231,9 @@ object-keys@~0.4.0: integrity sha1-KKaq50KN0sOpLz2V8hM13SBOAzY= object-path@^0.11.2, object-path@^0.11.4: - version "0.11.4" - resolved "https://registry.yarnpkg.com/object-path/-/object-path-0.11.4.tgz#370ae752fbf37de3ea70a861c23bba8915691949" - integrity sha1-NwrnUvvzfePqcKhhwju6iRVpGUk= + version "0.11.5" + resolved "https://registry.yarnpkg.com/object-path/-/object-path-0.11.5.tgz#d4e3cf19601a5140a55a16ad712019a9c50b577a" + integrity sha512-jgSbThcoR/s+XumvGMTMf81QVBmah+/Q7K7YduKeKVWL7N111unR2d6pZZarSk6kY/caeNxUDyxOvMWyzoU2eg== object-visit@^1.0.0: version "1.0.1" @@ -11623,9 +11633,9 @@ querystring@0.2.0, querystring@^0.2.0: integrity sha1-sgmEkgO7Jd+CDadW50cAWHhSFiA= querystringify@^2.1.1: - version "2.1.1" - resolved "https://registry.yarnpkg.com/querystringify/-/querystringify-2.1.1.tgz#60e5a5fd64a7f8bfa4d2ab2ed6fdf4c85bad154e" - integrity sha512-w7fLxIRCRT7U8Qu53jQnJyPkYZIaR4n5151KMfcJlO/A9397Wxb1amJvROTK6TOnp7PfoAmg/qXiNHI+08jRfA== + version "2.2.0" + resolved "https://registry.yarnpkg.com/querystringify/-/querystringify-2.2.0.tgz#3345941b4153cb9d082d8eee4cda2016a9aef7f6" + integrity sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ== randombytes@^2.0.0, randombytes@^2.0.1, randombytes@^2.0.5: version "2.1.0" @@ -11877,9 +11887,9 @@ read@^1.0.7: mute-stream "~0.0.4" "readable-stream@1 || 2", readable-stream@^2.0.0, readable-stream@^2.0.1, readable-stream@^2.0.2, readable-stream@^2.0.6, readable-stream@^2.1.5, readable-stream@^2.2.2, readable-stream@^2.3.0, readable-stream@^2.3.3, readable-stream@^2.3.5, readable-stream@^2.3.6, readable-stream@~2.3.6: - version "2.3.6" - resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.6.tgz#b11c27d88b8ff1fbe070643cf94b0c79ae1b0aaf" - integrity sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw== + version "2.3.7" + resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.7.tgz#1eca1cf711aef814c04f62252a36a62f6cb23b57" + integrity sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw== dependencies: core-util-is "~1.0.0" inherits "~2.0.3" @@ -12436,9 +12446,9 @@ safe-buffer@5.1.2, safe-buffer@~5.1.0, safe-buffer@~5.1.1: integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g== safe-buffer@>=5.1.0, safe-buffer@^5.0.1, safe-buffer@^5.1.0, safe-buffer@^5.1.1, safe-buffer@^5.1.2: - version "5.2.0" - resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.0.tgz#b74daec49b1148f88c64b68d49b1e815c1f2f519" - integrity sha512-fZEwUGbVl7kouZs1jCdMLdt95hdIv0ZeHg6L7qPeciMZhZ+/gdesW4wgTARkrFWEpspjEATAzUGPG8N2jJiwbg== + version "5.2.1" + resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6" + integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ== safe-regex@^1.1.0: version "1.1.0" @@ -13491,13 +13501,13 @@ tar-stream@^1.1.2, tar-stream@^1.5.2: xtend "^4.0.0" tar@^4, tar@^4.4.8: - version "4.4.10" - resolved "https://registry.yarnpkg.com/tar/-/tar-4.4.10.tgz#946b2810b9a5e0b26140cf78bea6b0b0d689eba1" - integrity sha512-g2SVs5QIxvo6OLp0GudTqEf05maawKUxXru104iaayWA09551tFCTI8f1Asb4lPfkBr91k07iL4c11XO3/b0tA== + version "4.4.15" + resolved "https://registry.yarnpkg.com/tar/-/tar-4.4.15.tgz#3caced4f39ebd46ddda4d6203d48493a919697f8" + integrity sha512-ItbufpujXkry7bHH9NpQyTXPbJ72iTlXgkBAYsAjDXk3Ds8t/3NfO5P4xZGy7u+sYuQUbimgzswX4uQIEeNVOA== dependencies: chownr "^1.1.1" fs-minipass "^1.2.5" - minipass "^2.3.5" + minipass "^2.8.6" minizlib "^1.2.1" mkdirp "^0.5.0" safe-buffer "^5.1.2" @@ -14184,9 +14194,9 @@ url-parse-lax@^3.0.0: prepend-http "^2.0.0" url-parse@^1.1.8, url-parse@^1.4.3: - version "1.4.7" - resolved "https://registry.yarnpkg.com/url-parse/-/url-parse-1.4.7.tgz#a8a83535e8c00a316e403a5db4ac1b9b853ae278" - integrity sha512-d3uaVyzDB9tQoSXFvuSUNFibTd9zxd2bkVrDRvF5TmvWWQwqE4lgYJ5m+x1DbecWkw+LK4RNl2CU1hHuOKPVlg== + version "1.5.3" + resolved "https://registry.yarnpkg.com/url-parse/-/url-parse-1.5.3.tgz#71c1303d38fb6639ade183c2992c8cc0686df862" + integrity sha512-IIORyIQD9rvj0A4CLWsHkBBJuNqWpFQe224b6j9t/ABmquIS0qDU2pY6kl6AuOrL5OkCXHMCFNe1jBcuAggjvQ== dependencies: querystringify "^2.1.1" requires-port "^1.0.0" @@ -14736,9 +14746,9 @@ yallist@^2.0.0, yallist@^2.1.2: integrity sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI= yallist@^3.0.0, yallist@^3.0.2, yallist@^3.0.3: - version "3.0.3" - resolved "https://registry.yarnpkg.com/yallist/-/yallist-3.0.3.tgz#b4b049e314be545e3ce802236d6cd22cd91c3de9" - integrity sha512-S+Zk8DEWE6oKpV+vI3qWkaK+jSbIK86pCwe2IF/xwIpQ8jEuxpw9NyaGjmp9+BoJv5FV2piqCDcoCtStppiq2A== + version "3.1.1" + resolved "https://registry.yarnpkg.com/yallist/-/yallist-3.1.1.tgz#dbb7daf9bfd8bac9ab45ebf602b8cbad0d5d08fd" + integrity sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g== yaml-loader@^0.5.0: version "0.5.0"