+node-postgres's continued development has been made possible in part by generous financial support from [the community](https://github.com/brianc/node-postgres/blob/master/SPONSORS.md).
If you or your company are benefiting from node-postgres and would like to help keep the project financially sustainable [please consider supporting](https://github.com/sponsors/brianc) its development.
+### Featured sponsor
+
+Special thanks to [medplum](https://medplum.com) for their generous and thoughtful support of node-postgres!
+
+
+
## Contributing
**:heart: contributions!**
@@ -87,10 +87,11 @@ If your change involves breaking backwards compatibility please please point tha
### Setting up for local development
1. Clone the repo
-2. From your workspace root run `yarn` and then `yarn lerna bootstrap`
-3. Ensure you have a PostgreSQL instance running with SSL enabled and an empty database for tests
-4. Ensure you have the proper environment variables configured for connecting to the instance
-5. Run `yarn test` to run all the tests
+2. Ensure you have installed libpq-dev in your system (the native bindings are built in the test process)
+3. From your workspace root run `yarn` and then `yarn lerna bootstrap`
+4. Ensure you have a PostgreSQL instance running with SSL enabled and an empty database for tests. _note: you can skip the tests requring SSL by setting the environment variable `PGTESTNOSSL=1` if you're not changing any SSL related code_.
+5. Ensure you have the proper environment variables configured for connecting to your postgres instance. Using the standard `PG*` environment variables like `PGUSER` and `PGPASSWORD` etc...
+6. Run `yarn test` to run all the tests.
## Troubleshooting and FAQ
diff --git a/SPONSORS.md b/SPONSORS.md
index 3bebb01eb..b482f3678 100644
--- a/SPONSORS.md
+++ b/SPONSORS.md
@@ -15,7 +15,12 @@ node-postgres is made possible by the helpful contributors from the community as
- [mpirik](https://github.com/mpirik)
- [@BLUE-DEVIL1134](https://github.com/BLUE-DEVIL1134)
- [bubble.io](https://bubble.io/)
-- GitHub[https://github.com/github]
+- [GitHub](https://github.com/github)
+- [n8n](https://n8n.io/)
+- [loveland](https://github.com/loveland)
+- [gajus](https://github.com/gajus)
+- [thirdiron](https://github.com/thirdiron)
+- [kiwicopple](https://github.com/kiwicopple)
# Supporters
@@ -48,3 +53,5 @@ node-postgres is made possible by the helpful contributors from the community as
- [Scout APM](https://github.com/scoutapm-sponsorships)
- [Sideline Sports](https://github.com/SidelineSports)
- [Gadget](https://github.com/gadget-inc)
+- [Sentry](https://sentry.io/welcome/)
+- [devlikeapro](https://github.com/devlikepro)
diff --git a/docs/README.md b/docs/README.md
new file mode 100644
index 000000000..d19c590b9
--- /dev/null
+++ b/docs/README.md
@@ -0,0 +1,20 @@
+# node-postgres docs website
+
+This is the documentation for node-postgres which is currently hosted at [https://node-postgres.com](https://node-postgres.com).
+
+## Development
+
+To run the documentation locally, you need to have [Node.js](https://nodejs.org) installed. Then, you can clone the repository and install the dependencies:
+
+```bash
+cd docs
+yarn
+```
+
+Once you've installed the deps, you can run the development server:
+
+```bash
+yarn dev
+```
+
+This will start a local server at [http://localhost:3000](http://localhost:3000) where you can view the documentation and see your changes.
diff --git a/docs/components/alert.tsx b/docs/components/alert.tsx
index 7bf2237ca..9a3ed7359 100644
--- a/docs/components/alert.tsx
+++ b/docs/components/alert.tsx
@@ -1,5 +1,4 @@
-import React from 'react'
-import { Callout } from 'nextra-theme-docs'
+import { Callout } from 'nextra/components'
export const Alert = ({ children }) => {
return (
diff --git a/docs/components/info.tsx b/docs/components/info.tsx
index a61e17fb2..79f11a7d6 100644
--- a/docs/components/info.tsx
+++ b/docs/components/info.tsx
@@ -1,5 +1,4 @@
-import React from 'react'
-import { Callout } from 'nextra-theme-docs'
+import { Callout } from 'nextra/components'
export const Info = ({ children }) => {
return {children}
diff --git a/docs/components/logo.tsx b/docs/components/logo.tsx
new file mode 100644
index 000000000..5252b4442
--- /dev/null
+++ b/docs/components/logo.tsx
@@ -0,0 +1,9 @@
+type Props = {
+ src: string
+ alt?: string
+}
+
+export function Logo(props: Props) {
+ const alt = props.alt || 'Logo'
+ return
+}
diff --git a/docs/next.config.js b/docs/next.config.js
index 45a998c7c..57793f96c 100644
--- a/docs/next.config.js
+++ b/docs/next.config.js
@@ -1,8 +1,11 @@
-// next.config.js
-const withNextra = require('nextra')({
+import nextra from 'nextra'
+
+const withNextra = nextra({
theme: 'nextra-theme-docs',
themeConfig: './theme.config.js',
- // optional: add `unstable_staticImage: true` to enable Nextra's auto image import
})
-module.exports = withNextra()
+export default withNextra({
+ output: 'export',
+ images: { unoptimized: true },
+})
diff --git a/docs/package.json b/docs/package.json
index dec5cceb2..a3bdb4f9f 100644
--- a/docs/package.json
+++ b/docs/package.json
@@ -3,18 +3,20 @@
"version": "1.0.0",
"description": "",
"main": "next.config.js",
+ "type": "module",
"scripts": {
- "start": "next dev",
- "build": "next build && next export"
+ "dev": "next dev",
+ "build": "next build"
},
"keywords": [],
"author": "",
"license": "ISC",
"dependencies": {
- "next": "^12.3.1",
- "nextra": "2.0.0-beta.29",
- "nextra-theme-docs": "2.0.0-beta.29",
- "react": "^17.0.1",
- "react-dom": "^17.0.1"
+ "next": "^13.5.11",
+ "nextra": "^3.3.1",
+ "nextra-theme-docs": "^3.3.1",
+ "react": "^18.3.1",
+ "react-dom": "^18.3.1",
+ "typescript": "^5.0.2"
}
}
diff --git a/docs/pages/_app.js b/docs/pages/_app.js
index 19532b06e..3e7701bf0 100644
--- a/docs/pages/_app.js
+++ b/docs/pages/_app.js
@@ -1,9 +1,5 @@
import 'nextra-theme-docs/style.css'
export default function Nextra({ Component, pageProps }) {
- return (
- <>
-
- >
- )
+ return
}
diff --git a/docs/pages/_meta.js b/docs/pages/_meta.js
new file mode 100644
index 000000000..adf56009b
--- /dev/null
+++ b/docs/pages/_meta.js
@@ -0,0 +1,5 @@
+export default {
+ index: 'Welcome',
+ announcements: 'Announcements',
+ apis: 'API',
+}
diff --git a/docs/pages/_meta.json b/docs/pages/_meta.json
deleted file mode 100644
index dd241d886..000000000
--- a/docs/pages/_meta.json
+++ /dev/null
@@ -1,5 +0,0 @@
-{
- "index": "Welcome",
- "announcements": "Announcements",
- "apis": "API"
-}
diff --git a/docs/pages/announcements.mdx b/docs/pages/announcements.mdx
index 6fec81ca3..d6a17c244 100644
--- a/docs/pages/announcements.mdx
+++ b/docs/pages/announcements.mdx
@@ -47,11 +47,11 @@ new Client({
- drop support for versions of node older than 8.0
-Node@6.0 has been out of LTS for quite some time now, and I've removed it from our test matrix. `pg@8.0` _may_ still work on older versions of node, but it isn't a goal of the project anymore. Node@8.0 is actually no longer in the LTS support line, but pg will continue to test against and support 8.0 until there is a compelling reason to drop support for it. Any security vulnerability issues which come up I will back-port fixes to the `pg@7.x` line and do a release, but any other fixes or improvments will not be back ported.
+Node@6.0 has been out of LTS for quite some time now, and I've removed it from our test matrix. `pg@8.0` _may_ still work on older versions of node, but it isn't a goal of the project anymore. Node@8.0 is actually no longer in the LTS support line, but pg will continue to test against and support 8.0 until there is a compelling reason to drop support for it. Any security vulnerability issues which come up I will back-port fixes to the `pg@7.x` line and do a release, but any other fixes or improvements will not be back ported.
- prevent password from being logged accidentally
-`pg@8.0` makes the password field on the pool and client non-enumerable. This means when you do `console.log(client)` you wont have your database password printed out unintenionally. You can still do `console.log(client.password)` if you really want to see it!
+`pg@8.0` makes the password field on the pool and client non-enumerable. This means when you do `console.log(client)` you wont have your database password printed out unintentionally. You can still do `console.log(client.password)` if you really want to see it!
- make `pg.native` non-enumerable
@@ -79,7 +79,7 @@ _If you find `pg` valuable to you or your business please consider [supporting](
After a _very_ long time on my todo list I've ported the docs from my old hand-rolled webapp running on route53 + elb + ec2 + dokku (I know, I went overboard!) to [gatsby](https://www.gatsbyjs.org/) hosted on [netlify](https://www.netlify.com/) which is _so_ much easier to manage. I've released the code at [https://github.com/brianc/node-postgres-docs](https://github.com/brianc/node-postgres-docs) and invite your contributions! Let's make this documentation better together. Any time changes are merged to master on the documentation repo it will automatically deploy.
-If you see an error in the docs, big or small, use the "edit on github" button to edit the page & submit a pull request right there. I'll get a new version out ASAP with your changes! If you want to add new pages of documentation open an issue if you need guidance, and I'll help you get started.
+If you see an error in the docs, big or small, use the "edit on GitHub" button to edit the page & submit a pull request right there. I'll get a new version out ASAP with your changes! If you want to add new pages of documentation open an issue if you need guidance, and I'll help you get started.
I want to extend a special **thank you** to all the [supporters](https://github.com/brianc/node-postgres/blob/master/SPONSORS.md) and [contributors](https://github.com/brianc/node-postgres/graphs/contributors) to the project that have helped keep me going through times of burnout or life "getting in the way." ❤️
@@ -113,10 +113,11 @@ pg@7.1.2
### Example
-To demonstrate the issue & see if you are vunerable execute the following in node:
+To demonstrate the issue & see if you are vulnerable execute the following in node:
```js
-const { Client } = require('pg')
+import pg from 'pg'
+const { Client } = pg
const client = new Client()
client.connect()
diff --git a/docs/pages/apis/_meta.js b/docs/pages/apis/_meta.js
new file mode 100644
index 000000000..94b8802ed
--- /dev/null
+++ b/docs/pages/apis/_meta.js
@@ -0,0 +1,8 @@
+export default {
+ client: 'pg.Client',
+ pool: 'pg.Pool',
+ result: 'pg.Result',
+ types: 'pg.Types',
+ cursor: 'Cursor',
+ utilities: 'Utilities',
+}
diff --git a/docs/pages/apis/_meta.json b/docs/pages/apis/_meta.json
deleted file mode 100644
index 0b6a193c7..000000000
--- a/docs/pages/apis/_meta.json
+++ /dev/null
@@ -1,7 +0,0 @@
-{
- "client": "pg.Client",
- "pool": "pg.Pool",
- "result": "pg.Result",
- "types": "pg.Types",
- "cursor": "Cursor"
-}
diff --git a/docs/pages/apis/client.mdx b/docs/pages/apis/client.mdx
index c983859b6..ecfd67fca 100644
--- a/docs/pages/apis/client.mdx
+++ b/docs/pages/apis/client.mdx
@@ -13,171 +13,115 @@ type Config = {
user?: string, // default process.env.PGUSER || process.env.USER
password?: string or function, //default process.env.PGPASSWORD
host?: string, // default process.env.PGHOST
- database?: string, // default process.env.PGDATABASE || user
port?: number, // default process.env.PGPORT
+ database?: string, // default process.env.PGDATABASE || user
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
+ lock_timeout?: number, // number of milliseconds a query is allowed to be en lock state before it's cancelled due to lock 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
+ keepAlive?: boolean, // if true, enable keepalive on the `net.Socket`
+ keepAliveInitialDelayMillis?: number, // number of milliseconds between last data packet received and first keepalive probe, default is 0 (keep existing value);
+ // no effect unless `keepAlive` is true
+ idle_in_transaction_session_timeout?: number, // number of milliseconds before terminating any session with an open idle transaction, default is no timeout
+ client_encoding?: string, // specifies the character set encoding that the database uses for sending data to the client
+ fallback_application_name?: string, // provide an application name to use if application_name is not set
+ options?: string // command-line options to be sent to the server
}
```
example to create a client with specific connection information:
```js
-const { Client } = require('pg')
+import { Client } from 'pg'
const client = new Client({
- host: 'my.database-server.com',
- port: 5334,
user: 'database-user',
password: 'secretpassword!!',
+ host: 'my.database-server.com',
+ port: 5334,
+ database: 'database-name',
})
```
## client.connect
-### `client.connect(callback: (err: Error) => void) => void`
-
-Calling `client.connect` with a callback:
-
```js
-const { Client } = require('pg')
+import { Client } from 'pg'
const client = new Client()
-client.connect((err) => {
- if (err) {
- console.error('connection error', err.stack)
- } else {
- console.log('connected')
- }
-})
-```
-
-### `client.connect() => Promise`
-Calling `client.connect` without a callback yields a promise:
-
-```js
-const { Client } = require('pg')
-const client = new Client()
-client
- .connect()
- .then(() => console.log('connected'))
- .catch((err) => console.error('connection error', err.stack))
+await client.connect()
```
-_note: connect returning a promise only available in pg@7.0 or above_
-
## client.query
-### `client.query` - text, optional values, and callback.
+### QueryConfig
-Passing query text, optional query parameters, and a callback to `client.query` results in a type-signature of:
+You can pass an object to `client.query` with the signature of:
```ts
-client.query(
- text: string,
- values?: Array,
- callback: (err: Error, result: Result) => void
-) => void
-```
+type QueryConfig {
+ // the raw query text
+ text: string;
-That is a kinda gross type signature but it translates out to this:
+ // an array of query parameters
+ values?: Array;
-**Plain text query with a callback:**
+ // name of the query - used for prepared statements
+ name?: string;
-```js
-const { Client } = require('pg')
-const client = new Client()
-client.connect()
-client.query('SELECT NOW()', (err, res) => {
- if (err) throw err
- console.log(res)
- client.end()
-})
-```
+ // by default rows come out as a key/value pair for each row
+ // pass the string 'array' here to receive rows as an array of values
+ rowMode?: string;
-**Parameterized query with a callback:**
+ // custom type parsers just for this query result
+ types?: Types;
-```js
-const { Client } = require('pg')
-const client = new Client()
-client.connect()
-client.query('SELECT $1::text as name', ['brianc'], (err, res) => {
- if (err) throw err
- console.log(res)
- client.end()
-})
+ // TODO: document
+ queryMode?: string;
+}
```
-### `client.query` - text, optional values: Promise
-
-If you call `client.query` with query text and optional parameters but **don't** pass a callback, then you will receive a `Promise` for a query result.
-
```ts
-client.query(
- text: string,
- values?: Array
-) => Promise
+client.query(text: string, values?: any[]) => Promise
```
-**Plain text query with a promise**
+**Plain text query**
```js
-const { Client } = require('pg')
+import { Client } from 'pg'
const client = new Client()
-client.connect()
-client
- .query('SELECT NOW()')
- .then((result) => console.log(result))
- .catch((e) => console.error(e.stack))
- .then(() => client.end())
+
+await client.connect()
+
+const result = await client.query('SELECT NOW()')
+console.log(result)
+
+await client.end()
```
-**Parameterized query with a promise**
+**Parameterized query**
```js
-const { Client } = require('pg')
+import { Client } from 'pg'
const client = new Client()
-client.connect()
-client
- .query('SELECT $1::text as name', ['brianc'])
- .then((result) => console.log(result))
- .catch((e) => console.error(e.stack))
- .then(() => client.end())
-```
-### `client.query(config: QueryConfig, callback: (err?: Error, result?: Result) => void) => void`
+await client.connect()
-### `client.query(config: QueryConfig) => Promise`
+const result = await client.query('SELECT $1::text as name', ['brianc'])
+console.log(result)
-You can pass an object to `client.query` with the signature of:
+await client.end()
+```
```ts
-type QueryConfig {
- // the raw query text
- text: string;
-
- // an array of query parameters
- values?: Array;
-
- // name of the query - used for prepared statements
- name?: string;
-
- // by default rows come out as a key/value pair for each row
- // pass the string 'array' here to receive rows as an array of values
- rowMode?: string;
-
- // custom type parsers just for this query result
- types?: Types;
-}
+client.query(config: QueryConfig) => Promise
```
-**client.query with a QueryConfig and a callback**
+**client.query with a QueryConfig**
If you pass a `name` parameter to the `client.query` method, the client will create a [prepared statement](/features/queries#prepared-statements).
@@ -189,34 +133,10 @@ const query = {
rowMode: 'array',
}
-client.query(query, (err, res) => {
- if (err) {
- console.error(err.stack)
- } else {
- console.log(res.rows) // ['brianc']
- }
-})
-```
-
-**client.query with a QueryConfig and a Promise**
+const result = await client.query(query)
+console.log(result.rows) // ['brianc']
-```js
-const query = {
- name: 'get-name',
- text: 'SELECT $1::text',
- values: ['brianc'],
- rowMode: 'array',
-}
-
-// promise
-client
- .query(query)
- .then((res) => {
- console.log(res.rows) // ['brianc']
- })
- .catch((e) => {
- console.error(e.stack)
- })
+await client.end()
```
**client.query with a `Submittable`**
@@ -224,7 +144,7 @@ client
If you pass an object to `client.query` and the object has a `.submit` function on it, the client will pass it's PostgreSQL server connection to the object and delegate query dispatching to the supplied object. This is an advanced feature mostly intended for library authors. It is incidentally also currently how the callback and promise based queries above are handled internally, but this is subject to change. It is also how [pg-cursor](https://github.com/brianc/node-pg-cursor) and [pg-query-stream](https://github.com/brianc/node-pg-query-stream) work.
```js
-const Query = require('pg').Query
+import { Query } from 'pg'
const query = new Query('select $1::text as name', ['brianc'])
const result = client.query(query)
@@ -234,9 +154,11 @@ assert(query === result) // true
query.on('row', (row) => {
console.log('row!', row) // { name: 'brianc' }
})
+
query.on('end', () => {
console.log('query done')
})
+
query.on('error', (err) => {
console.error(err.stack)
})
@@ -246,37 +168,77 @@ query.on('error', (err) => {
## client.end
-### client.end(cb?: (err?: Error) => void) => void
-
Disconnects the client from the PostgreSQL server.
```js
-client.end((err) => {
- console.log('client has disconnected')
- if (err) {
- console.log('error during disconnection', err.stack)
- }
-})
+await client.end()
+console.log('client has disconnected')
```
-### `client.end() => Promise`
+## client.getTransactionStatus
+
+`client.getTransactionStatus() => string | null`
-Calling end without a callback yields a promise:
+Returns the current transaction status of the client connection. This can be useful for debugging transaction state issues or implementing custom transaction management logic.
+
+**Return values:**
+
+- `'I'` - Idle (not in a transaction)
+- `'T'` - Transaction active (BEGIN has been issued)
+- `'E'` - Error (transaction aborted, requires ROLLBACK)
+- `null` - Initial state (before first query)
+
+The transaction status is updated after each query completes based on the PostgreSQL backend's `ReadyForQuery` message.
+
+**Example: Checking transaction state**
```js
-client
- .end()
- .then(() => console.log('client has disconnected'))
- .catch((err) => console.error('error during disconnection', err.stack))
+import { Client } from 'pg'
+const client = new Client()
+await client.connect()
+
+await client.query('BEGIN')
+console.log(client.getTransactionStatus()) // 'T' - in transaction
+
+await client.query('SELECT * FROM users')
+console.log(client.getTransactionStatus()) // 'T' - still in transaction
+
+await client.query('COMMIT')
+console.log(client.getTransactionStatus()) // 'I' - idle
+
+await client.end()
```
-_note: end returning a promise is only available in pg7.0 and above_
+**Example: Handling transaction errors**
+
+```js
+import { Client } from 'pg'
+const client = new Client()
+await client.connect()
+
+await client.query('BEGIN')
+try {
+ await client.query('INVALID SQL')
+} catch (err) {
+ console.log(client.getTransactionStatus()) // 'E' - error state
+
+ // Must rollback to recover
+ await client.query('ROLLBACK')
+ console.log(client.getTransactionStatus()) // 'I' - idle again
+}
+
+await client.end()
+```
## events
-### client.on('error', (err: Error) => void) => void
+### error
-When the client is in the process of connecting, dispatching a query, or disconnecting it will catch and foward errors from the PostgreSQL server to the respective `client.connect` `client.query` or `client.end` callback/promise; however, the client maintains a long-lived connection to the PostgreSQL back-end and due to network partitions, back-end crashes, fail-overs, etc the client can (and over a long enough time period _will_) eventually be disconnected while it is idle. To handle this you may want to attach an error listener to a client to catch errors. Here's a contrived example:
+```ts
+client.on('error', (err: Error) => void) => void
+```
+
+When the client is in the process of connecting, dispatching a query, or disconnecting it will catch and forward errors from the PostgreSQL server to the respective `client.connect` `client.query` or `client.end` promise; however, the client maintains a long-lived connection to the PostgreSQL back-end and due to network partitions, back-end crashes, fail-overs, etc the client can (and over a long enough time period _will_) eventually be disconnected while it is idle. To handle this you may want to attach an error listener to a client to catch errors. Here's a contrived example:
```js
const client = new pg.Client()
@@ -291,11 +253,15 @@ client.on('error', (err) => {
// process output: 'something bad has happened!' followed by stacktrace :P
```
-### client.on('end') => void
+### end
+
+```ts
+client.on('end') => void
+```
When the client disconnects from the PostgreSQL server it will emit an end event once.
-### client.on('notification', (notification: Notification) => void) => void
+### notification
Used for `listen/notify` events:
@@ -309,7 +275,7 @@ type Notification {
```js
const client = new pg.Client()
-client.connect()
+await client.connect()
client.query('LISTEN foo')
@@ -321,7 +287,11 @@ client.on('notification', (msg) => {
client.query(`NOTIFY foo, 'bar!'`)
```
-### client.on('notice', (notice: Error) => void) => void
+### notice
+
+```ts
+client.on('notice', (notice: Error) => void) => void
+```
Used to log out [notice messages](https://www.postgresql.org/docs/9.6/static/plpgsql-errors-and-messages.html) from the PostgreSQL server.
diff --git a/docs/pages/apis/cursor.mdx b/docs/pages/apis/cursor.mdx
index c4a6928c7..810bccdd3 100644
--- a/docs/pages/apis/cursor.mdx
+++ b/docs/pages/apis/cursor.mdx
@@ -1,6 +1,6 @@
---
title: pg.Cursor
-slug: /api/cursor
+slug: /apis/cursor
---
A cursor can be used to efficiently read through large result sets without loading the entire result-set into memory ahead of time. It's useful to simulate a 'streaming' style read of data, or exit early from a large result set. The cursor is passed to `client.query` and is dispatched internally in a way very similar to how normal queries are sent, but the API it presents for consuming the result set is different.
@@ -18,8 +18,8 @@ $ npm install pg pg-cursor
Instantiates a new Cursor. A cursor is an instance of `Submittable` and should be passed directly to the `client.query` method.
```js
-const { Pool } = require('pg')
-const Cursor = require('pg-cursor')
+import { Pool } from 'pg'
+import Cursor from 'pg-cursor'
const pool = new Pool()
const client = await pool.connect()
@@ -28,11 +28,9 @@ const values = [10]
const cursor = client.query(new Cursor(text, values))
-cursor.read(100, (err, rows) => {
- cursor.close(() => {
- client.release()
- })
-})
+const { rows } = await cursor.read(100)
+console.log(rows.length) // 100 (unless the table has fewer than 100 rows)
+client.release()
```
```ts
@@ -48,7 +46,7 @@ type CursorQueryConfig {
## read
-### `cursor.read(rowCount: Number, callback: (err: Error, rows: Row[], result: pg.Result) => void) => void`
+### `cursor.read(rowCount: Number) => Promise`
Read `rowCount` rows from the cursor instance. The callback will be called when the rows are available, loaded into memory, parsed, and converted to JavaScript types.
@@ -57,25 +55,22 @@ If the cursor has read to the end of the result sets all subsequent calls to cur
Here is an example of reading to the end of a cursor:
```js
-const { Pool } = require('pg')
-const Cursor = require('pg-cursor')
+import { Pool } from 'pg'
+import Cursor from 'pg-cursor'
const pool = new Pool()
const client = await pool.connect()
const cursor = client.query(new Cursor('select * from generate_series(0, 5)'))
-cursor.read(100, (err, rows) => {
- if (err) {
- throw err
- }
- assert(rows.length == 6)
- cursor.read(100, (err, rows) => {
- assert(rows.length == 0)
- })
-})
+
+let rows = await cursor.read(100)
+assert(rows.length == 6)
+
+rows = await cursor.read(100)
+assert(rows.length == 0)
```
## close
-### `cursor.close(callback: () => void) => void`
+### `cursor.close() => Promise`
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/docs/pages/apis/pool.mdx b/docs/pages/apis/pool.mdx
index 6ebc19044..123bc8ba4 100644
--- a/docs/pages/apis/pool.mdx
+++ b/docs/pages/apis/pool.mdx
@@ -16,22 +16,30 @@ The pool is initially created empty and will create new clients lazily as they a
```ts
type Config = {
- // all valid client config options are also valid here
- // in addition here are the pool specific configuration parameters:
+ // All valid client config options are also valid here.
+ // In addition here are the pool specific configuration parameters:
- // number of milliseconds to wait before timing out when connecting a new client
- // by default this is 0 which means no timeout
+ // Number of milliseconds to wait before timing out when connecting a new client.
+ // By default this is 0 which means no timeout.
connectionTimeoutMillis?: number
- // number of milliseconds a client must sit idle in the pool and not be checked out
- // before it is disconnected from the backend and discarded
- // default is 10000 (10 seconds) - set to 0 to disable auto-disconnection of idle clients
+ // Number of milliseconds a client must sit idle in the pool and not be checked out
+ // before it is disconnected from the backend and discarded.
+ // Default is 10000 (10 seconds) - set to 0 to disable auto-disconnection of idle clients.
idleTimeoutMillis?: number
- // maximum number of clients the pool should contain
- // by default this is set to 10.
+ // Maximum number of clients the pool should contain.
+ // By default this is set to 10. There is some nuance to setting the maximum size of your pool.
+ // See https://node-postgres.com/guides/pool-sizing for more information.
max?: number
+ // Minimum number of clients the pool should hold on to and _not_ destroy with the idleTimeoutMillis.
+ // This can be useful if you get very bursty traffic and want to keep a few clients around.
+ // Note: currently the pool will not automatically create and connect new clients up to the min, it will
+ // only not evict and close clients except those which exceed the min count.
+ // The default is 0 which disables this behavior.
+ min?: number
+
// 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
@@ -39,16 +47,35 @@ type Config = {
//
// 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
+ // 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
+
+ // Number of times a client can be checked out from the pool before it is
+ // disconnected and a new client is created in its place.
+ // The default is Infinity which means a client will never be automatically destroyed
+ // outside of other lifecycle events like manually removing it, it timing out due to idleness, etc.
+ maxUses?: number
+
+ // Sets a max overall life for the connection.
+ // A value of 60 would evict connections that have been around for over 60 seconds,
+ // regardless of whether they are idle. It's useful to force rotation of connection pools through
+ // middleware so that you can rotate the underlying servers. The default is disabled (value of zero).
+ maxLifetimeSeconds?: number
+
+ // Called once when a new client is created, before it is made available to the pool.
+ // The client is fully connected and queryable at this point.
+ // Can be a regular function or an async function.
+ // If the function throws or returns a promise that rejects, the client is destroyed
+ // and the error is returned to the caller requesting the connection.
+ onConnect?: (client: Client) => void | Promise
}
```
example to create a new pool with configuration:
```js
-const { Pool } = require('pg')
+import { Pool } from 'pg'
const pool = new Pool({
host: 'localhost',
@@ -56,44 +83,40 @@ const pool = new Pool({
max: 20,
idleTimeoutMillis: 30000,
connectionTimeoutMillis: 2000,
+ maxLifetimeSeconds: 60,
})
```
-## pool.query
-
-Often we only need to run a single query on the database, so as convenience the pool has a method to run a query on the first available idle client and return its result.
-
-`pool.query() => Promise`
+example using `onConnect` to run setup commands on each new client:
```js
-const { Pool } = require('pg')
+import { Pool } from 'pg'
-const pool = new Pool()
-
-pool
- .query('SELECT $1::text as name', ['brianc'])
- .then((res) => console.log(res.rows[0].name)) // brianc
- .catch((err) => console.error('Error executing query', err.stack))
+const pool = new Pool({
+ onConnect: async (client) => {
+ await client.query('SET search_path TO my_schema')
+ },
+})
```
-Callbacks are also supported:
+## pool.query
-`pool.query(callback: (err?: Error, result: pg.Result)) => void`
+Often we only need to run a single query on the database, so as convenience the pool has a method to run a query on the first available idle client and return its result.
+
+```ts
+pool.query(text: string, values?: any[]) => Promise
+```
```js
-const { Pool } = require('pg')
+import { Pool } from 'pg'
const pool = new Pool()
-pool.query('SELECT $1::text as name', ['brianc'], (err, result) => {
- if (err) {
- return console.error('Error executing query', err.stack)
- }
- console.log(result.rows[0].name) // brianc
-})
+const result = await pool.query('SELECT $1::text as name', ['brianc'])
+console.log(result.rows[0].name) // brianc
```
-Notice in the example above there is no need to check out or release a client. The pool is doing the acquiring and releasing internally. I find `pool.query` to be a handy shortcut many situations and use it exclusively unless I need a transaction.
+Notice in the example above there is no need to check out or release a client. The pool is doing the acquiring and releasing internally. I find `pool.query` to be a handy shortcut in many situations and I use it exclusively unless I need a transaction.
@@ -108,67 +131,46 @@ Notice in the example above there is no need to check out or release a client. T
## pool.connect
-`pool.connect(callback: (err?: Error, client?: pg.Client, release?: releaseCallback) => void) => void`
+`pool.connect() => Promise`
Acquires a client from the pool.
- If there are idle clients in the pool one will be returned to the callback on `process.nextTick`.
- If the pool is not full but all current clients are checked out a new client will be created & returned to this callback.
-- If the pool is 'full' and all clients are currently checked out will wait in a FIFO queue until a client becomes available by it being released back to the pool.
-
-```js
-const { Pool } = require('pg')
-
-const pool = new Pool()
-
-pool.connect((err, client, release) => {
- if (err) {
- return console.error('Error acquiring client', err.stack)
- }
- client.query('SELECT NOW()', (err, result) => {
- release()
- if (err) {
- return console.error('Error executing query', err.stack)
- }
- console.log(result.rows)
- })
-})
-```
-
-`pool.connect() => Promise`
+- If the pool is 'full' and all clients are currently checked out, requests will wait in a FIFO queue until a client becomes available by being released back to the pool.
```js
-const { Pool } = require('pg')
+import { Pool } from 'pg'
const pool = new Pool()
-;(async function () {
- const client = await pool.connect()
- await client.query('SELECT NOW()')
- client.release()
-})()
+const client = await pool.connect()
+await client.query('SELECT NOW()')
+client.release()
```
### releasing clients
-`release: (err?: Error)`
+`client.release(destroy?: boolean) => void`
Client instances returned from `pool.connect` will have a `release` method which will release them from the pool.
-The `release` method on an acquired client returns it back to the pool. If you pass a truthy value in the `err` position to the callback, instead of releasing the client to the pool, the pool will be instructed to disconnect and destroy this client, leaving a space within itself for a new client.
+The `release` method on an acquired client returns it back to the pool. If you pass a truthy value in the `destroy` parameter, instead of releasing the client to the pool, the pool will be instructed to disconnect and destroy this client, leaving a space within itself for a new client.
```js
-const { Pool } = require('pg')
+import { Pool } from 'pg'
const pool = new Pool()
+
// check out a single client
const client = await pool.connect()
+
// release the client
client.release()
```
```js
-const { Pool } = require('pg')
+import { Pool } from 'pg'
const pool = new Pool()
assert(pool.totalCount === 0)
@@ -180,7 +182,7 @@ assert(pool.totalCount === 1)
assert(pool.idleCount === 0)
// tell the pool to destroy this client
-client.release(true)
+await client.release(true)
assert(pool.idleCount === 0)
assert(pool.totalCount === 0)
```
@@ -201,17 +203,11 @@ Calling `pool.end` will drain the pool of all active clients, disconnect them, a
```js
// again both promises and callbacks are supported:
-const { Pool } = require('pg')
+import { Pool } from 'pg'
const pool = new Pool()
-// either this:
-pool.end(() => {
- console.log('pool has ended')
-})
-
-// or this:
-pool.end().then(() => console.log('pool has ended'))
+await pool.end()
```
## properties
@@ -236,14 +232,11 @@ The number of queued requests waiting on a client when all clients are checked o
`pool.on('connect', (client: Client) => void) => void`
-Whenever the pool establishes a new client connection to the PostgreSQL backend it will emit the `connect` event with the newly connected client. This presents an opportunity for you to run setup commands on a client.
+Whenever the pool establishes a new client connection to the PostgreSQL backend it will emit the `connect` event with the newly connected client.
-```js
-const pool = new Pool()
-pool.on('connect', (client) => {
- client.query('SET DATESTYLE = iso, mdy')
-})
-```
+
+ The event listener does not wait for promises or async functions. If you want to run setup commands on each new client, use the `onConnect` option. (See documentation above.)
+
### acquire
@@ -262,11 +255,17 @@ If the backend goes down or a network partition is encountered all the idle, con
The error listener is passed the error as the first argument and the client upon which the error occurred as the 2nd argument. The client will be automatically terminated and removed from the pool, it is only passed to the error handler in case you want to inspect it.
-
You probably want to add an event listener to the pool to catch background errors errors!
+
You probably want to add an event listener to the pool to catch background errors!
Just like other event emitters, if a pool emits an error event and no listeners are added node will emit an
uncaught error and potentially crash your node process.
+### release
+
+`pool.on('release', (err: Error, client: Client) => void) => void`
+
+Whenever a client is released back into the pool, the pool will emit the `release` event.
+
### remove
`pool.on('remove', (client: Client) => void) => void`
diff --git a/docs/pages/apis/result.mdx b/docs/pages/apis/result.mdx
index a0ef7ddb8..da26adc70 100644
--- a/docs/pages/apis/result.mdx
+++ b/docs/pages/apis/result.mdx
@@ -1,6 +1,6 @@
---
title: pg.Result
-slug: /api/result
+slug: /apis/result
---
The `pg.Result` shape is returned for every successful query.
@@ -18,7 +18,8 @@ Every result will have a rows array. If no rows are returned the array will be e
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')
+import pg from 'pg'
+const { Pool } = pg
const pool = new Pool()
@@ -37,11 +38,11 @@ await client.end()
The command type last executed: `INSERT` `UPDATE` `CREATE` `SELECT` etc.
-### `result.rowCount: int`
+### `result.rowCount: int | null`
-The number of rows processed by the last command.
+The number of rows processed by the last command. Can be `null` for commands that never affect rows, such as the `LOCK`-command. More specifically, some commands, including `LOCK`, only return a command tag of the form `COMMAND`, without any `[ROWS]`-field to parse. For such commands `rowCount` will be `null`.
-_note: this does not reflect the number of rows __returned__ from a query. e.g. an update statement could update many rows (so high `result.rowCount` value) but `result.rows.length` would be zero. To check for an empty query reponse on a `SELECT` query use `result.rows.length === 0`_.
+_note: this does not reflect the number of rows __returned__ from a query. e.g. an update statement could update many rows (so high `result.rowCount` value) but `result.rows.length` would be zero. To check for an empty query response on a `SELECT` query use `result.rows.length === 0`_.
[@sehrope](https://github.com/brianc/node-postgres/issues/2182#issuecomment-620553915) has a good explanation:
diff --git a/docs/pages/apis/types.mdx b/docs/pages/apis/types.mdx
index 55f3b0009..cc8e4c1e3 100644
--- a/docs/pages/apis/types.mdx
+++ b/docs/pages/apis/types.mdx
@@ -1,6 +1,6 @@
---
title: Types
-slug: /api/types
+slug: /apis/types
---
These docs are incomplete, for now please reference [pg-types docs](https://github.com/brianc/node-pg-types).
diff --git a/docs/pages/apis/utilities.mdx b/docs/pages/apis/utilities.mdx
new file mode 100644
index 000000000..10d9a0108
--- /dev/null
+++ b/docs/pages/apis/utilities.mdx
@@ -0,0 +1,33 @@
+---
+title: Utilities
+---
+import { Alert } from '/components/alert.tsx'
+
+## Utility Functions
+### pg.escapeIdentifier
+
+Escapes a string as a [SQL identifier](https://www.postgresql.org/docs/current/sql-syntax-lexical.html#SQL-SYNTAX-IDENTIFIERS).
+
+```js
+import { escapeIdentifier } from 'pg';
+const escapedIdentifier = escapeIdentifier('FooIdentifier')
+console.log(escapedIdentifier) // '"FooIdentifier"'
+```
+
+
+ **Note**: When using an identifier that is the result of this function in an operation like `CREATE TABLE ${escapedIdentifier(identifier)}`, the table that is created will be CASE SENSITIVE. If you use any capital letters in the escaped identifier, you must always refer to the created table like `SELECT * from "MyCaseSensitiveTable"`; queries like `SELECT * FROM MyCaseSensitiveTable` will result in a "Non-existent table" error since case information is stripped from the query.
+
+
+### pg.escapeLiteral
+
+
+ **Note**: Instead of manually escaping SQL literals, it is recommended to use parameterized queries. Refer to [parameterized queries](/features/queries#parameterized-query) and the [client.query](/apis/client#clientquery) API for more information.
+
+
+Escapes a string as a [SQL literal](https://www.postgresql.org/docs/current/sql-syntax-lexical.html#SQL-SYNTAX-CONSTANTS).
+
+```js
+import { escapeLiteral } from 'pg';
+const escapedLiteral = escapeLiteral("hello 'world'")
+console.log(escapedLiteral) // "'hello ''world'''"
+```
diff --git a/docs/pages/features/_meta.js b/docs/pages/features/_meta.js
new file mode 100644
index 000000000..62f1660ca
--- /dev/null
+++ b/docs/pages/features/_meta.js
@@ -0,0 +1,11 @@
+export default {
+ connecting: 'Connecting',
+ queries: 'Queries',
+ pooling: 'Pooling',
+ transactions: 'Transactions',
+ types: 'Data Types',
+ ssl: 'SSL',
+ native: 'Native',
+ esm: 'ESM',
+ callbacks: 'Callbacks',
+}
diff --git a/docs/pages/features/_meta.json b/docs/pages/features/_meta.json
deleted file mode 100644
index a2f5e340a..000000000
--- a/docs/pages/features/_meta.json
+++ /dev/null
@@ -1,9 +0,0 @@
-{
- "connecting": "Connecting",
- "queries": "Queries",
- "pooling": "Pooling",
- "transactions": "Transactions",
- "types": "Data Types",
- "ssl": "SSL",
- "native": "Native"
-}
diff --git a/docs/pages/features/callbacks.mdx b/docs/pages/features/callbacks.mdx
new file mode 100644
index 000000000..8a6e2a525
--- /dev/null
+++ b/docs/pages/features/callbacks.mdx
@@ -0,0 +1,39 @@
+---
+title: Callbacks
+---
+
+## Callback Support
+
+`async` / `await` is the preferred way to write async code these days with node, but callbacks are supported in the `pg` module and the `pg-pool` module. To use them, pass a callback function as the last argument to the following methods & it will be called and a promise will not be returned:
+
+
+```js
+const { Pool, Client } = require('pg')
+
+// pool
+const pool = new Pool()
+// run a query on an available client
+pool.query('SELECT NOW()', (err, res) => {
+ console.log(err, res)
+})
+
+// check out a client to do something more complex like a transaction
+pool.connect((err, client, release) => {
+ client.query('SELECT NOW()', (err, res) => {
+ release()
+ console.log(err, res)
+ pool.end()
+ })
+
+})
+
+// single client
+const client = new Client()
+client.connect((err) => {
+ if (err) throw err
+ client.query('SELECT NOW()', (err, res) => {
+ console.log(err, res)
+ client.end()
+ })
+})
+```
diff --git a/docs/pages/features/connecting.mdx b/docs/pages/features/connecting.mdx
index b3c5ecc40..97b5c779f 100644
--- a/docs/pages/features/connecting.mdx
+++ b/docs/pages/features/connecting.mdx
@@ -7,17 +7,13 @@ title: Connecting
node-postgres uses the same [environment variables](https://www.postgresql.org/docs/9.1/static/libpq-envars.html) as libpq and psql to connect to a PostgreSQL server. Both individual clients & pools will use these environment variables. Here's a tiny program connecting node.js to the PostgreSQL server:
```js
-const { Pool, Client } = require('pg')
+import pg from 'pg'
+const { Pool, Client } = pg
// pools will use environment variables
// for connection information
const pool = new Pool()
-pool.query('SELECT NOW()', (err, res) => {
- console.log(err, res)
- pool.end()
-})
-
// you can also use async/await
const res = await pool.query('SELECT NOW()')
await pool.end()
@@ -35,10 +31,10 @@ To run the above program and specify which database to connect to we can invoke
```sh
$ PGUSER=dbuser \
- PGHOST=database.server.com \
PGPASSWORD=secretpassword \
- PGDATABASE=mydb \
+ PGHOST=database.server.com \
PGPORT=3211 \
+ PGDATABASE=mydb \
node script.js
```
@@ -47,11 +43,11 @@ This allows us to write our programs without having to specify connection inform
The default values for the environment variables used are:
```
-PGHOST=localhost
PGUSER=process.env.USER
-PGDATABASE=process.env.USER
PGPASSWORD=null
+PGHOST=localhost
PGPORT=5432
+PGDATABASE=process.env.USER
```
## Programmatic
@@ -59,41 +55,40 @@ PGPORT=5432
node-postgres also supports configuring a pool or client programmatically with connection information. Here's our same script from above modified to use programmatic (hard-coded in this case) values. This can be useful if your application already has a way to manage config values or you don't want to use environment variables.
```js
-const { Pool, Client } = require('pg')
+import pg from 'pg'
+const { Pool, Client } = pg
const pool = new Pool({
user: 'dbuser',
- host: 'database.server.com',
- database: 'mydb',
password: 'secretpassword',
+ host: 'database.server.com',
port: 3211,
+ database: 'mydb',
})
-pool.query('SELECT NOW()', (err, res) => {
- console.log(err, res)
- pool.end()
-})
+console.log(await pool.query('SELECT NOW()'))
const client = new Client({
user: 'dbuser',
- host: 'database.server.com',
- database: 'mydb',
password: 'secretpassword',
+ host: 'database.server.com',
port: 3211,
+ database: 'mydb',
})
-client.connect()
-client.query('SELECT NOW()', (err, res) => {
- console.log(err, res)
- client.end()
-})
+await client.connect()
+
+console.log(await client.query('SELECT NOW()'))
+
+await client.end()
```
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')
+import pg from 'pg'
+const { Pool } = pg
+import { RDS } from 'aws-sdk'
const signerOptions = {
credentials: {
@@ -106,16 +101,16 @@ const signerOptions = {
username: 'api-user',
}
-const signer = new RDS.Signer()
+const signer = new RDS.Signer(signerOptions)
-const getPassword = () => signer.getAuthToken(signerOptions)
+const getPassword = () => signer.getAuthToken()
const pool = new Pool({
+ user: signerOptions.username,
+ password: getPassword,
host: signerOptions.hostname,
port: signerOptions.port,
- user: signerOptions.username,
database: 'my-db',
- password: getPassword,
})
```
@@ -124,39 +119,39 @@ const pool = new Pool({
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.
```js
-const { Client } = require('pg')
+import pg from 'pg'
+const { Client } = pg
client = new Client({
- host: '/cloudsql/myproject:zone:mydb',
user: 'username',
password: 'password',
+ host: '/cloudsql/myproject:zone:mydb',
database: 'database_name',
})
```
## 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')
+import pg from 'pg'
+const { Pool, Client } = pg
const connectionString = 'postgresql://dbuser:secretpassword@database.server.com:3211/mydb'
const pool = new Pool({
connectionString,
})
-pool.query('SELECT NOW()', (err, res) => {
- console.log(err, res)
- pool.end()
-})
+await pool.query('SELECT NOW()')
+await pool.end()
const client = new Client({
connectionString,
})
-client.connect()
-client.query('SELECT NOW()', (err, res) => {
- console.log(err, res)
- client.end()
-})
+await client.connect()
+
+await client.query('SELECT NOW()')
+
+await client.end()
```
diff --git a/docs/pages/features/esm.mdx b/docs/pages/features/esm.mdx
new file mode 100644
index 000000000..7aac546a7
--- /dev/null
+++ b/docs/pages/features/esm.mdx
@@ -0,0 +1,37 @@
+---
+title: ESM
+---
+
+## ESM Support
+
+As of v8.15.x node-postgres supporters the __ECMAScript Module__ (ESM) format. This means you can use `import` statements instead of `require` or `import pg from 'pg'`.
+
+CommonJS modules are still supported. The ESM format is an opt-in feature and will not affect existing codebases that use CommonJS.
+
+The docs have been changed to show ESM usage, but in a CommonJS context you can still use the same code, you just need to change the import format.
+
+If you're using CommonJS, you can use the following code to import the `pg` module:
+
+```js
+ const pg = require('pg')
+ const { Client } = pg
+ // etc...
+```
+
+### ESM Usage
+
+If you're using ESM, you can use the following code to import the `pg` module:
+
+```js
+ import { Client } from 'pg'
+ // etc...
+```
+
+
+Previously if you were using ESM you would have to use the following code:
+
+```js
+ import pg from 'pg'
+ const { Client } = pg
+ // etc...
+```
diff --git a/docs/pages/features/native.mdx b/docs/pages/features/native.mdx
index 698d6817b..a4febc7e6 100644
--- a/docs/pages/features/native.mdx
+++ b/docs/pages/features/native.mdx
@@ -6,7 +6,20 @@ metaTitle: bar
Native bindings between node.js & [libpq](https://www.postgresql.org/docs/9.5/static/libpq.html) are provided by the [node-pg-native](https://github.com/brianc/node-pg-native) package. node-postgres can consume this package & use the native bindings to access the PostgreSQL server while giving you the same interface that is used with the JavaScript version of the library.
-To use the native bindings first you'll need to install them:
+You need PostgreSQL client libraries & tools installed. An easy way to check is to type `pg_config`. If `pg_config` is in your path, you should be good to go. If it's not in your path you'll need to consult operating specific instructions on how to go about getting it there.
+
+Some ways I've done it in the past:
+
+- On macOS: `brew install libpq`
+- On Ubuntu/Debian and Debian-based Node images: `apt-get install libpq-dev python3 g++ make`
+- On RHEL/CentOS: `yum install postgresql-devel`
+- On Windows:
+ 1. Install Visual Studio C++ (successfully built with Express 2010). Express is free.
+ 2. Install PostgreSQL (`http://www.postgresql.org/download/windows/`)
+ 3. Add your Postgre Installation's `bin` folder to the system path (i.e. `C:\Program Files\PostgreSQL\9.3\bin`).
+ 4. Make sure that both `libpq.dll` and `pg_config.exe` are in that folder.
+
+Install `pg` and `pg-native` them:
```sh
$ npm install pg pg-native
@@ -15,10 +28,12 @@ $ npm install pg pg-native
Once `pg-native` is installed instead of requiring a `Client` or `Pool` constructor from `pg` you do the following:
```js
-const { Client, Pool } = require('pg').native
+import pg from 'pg'
+const { native } = pg
+const { Client, Pool } = native
```
-When you access the `.native` property on `require('pg')` it will automatically require the `pg-native` package and wrap it in the same API.
+When you access the `.native` property on `'pg'` it will automatically require the `pg-native` package and wrap it in the same API.
Care has been taken to normalize between the two, but there might still be edge cases where things behave subtly differently due to the nature of using libpq over handling the binary protocol directly in JavaScript, so it's recommended you chose to either use the JavaScript driver or the native bindings both in development and production. For what its worth: I use the pure JavaScript driver because the JavaScript driver is more portable (doesn't need a compiler), and the pure JavaScript driver is plenty fast.
diff --git a/docs/pages/features/pooling.mdx b/docs/pages/features/pooling.mdx
index 4719150be..ebe2844bc 100644
--- a/docs/pages/features/pooling.mdx
+++ b/docs/pages/features/pooling.mdx
@@ -19,7 +19,7 @@ The easiest and by far most common way to use node-postgres is through a connect
### Good news
-node-postgres ships with built-in connection pooling via the [pg-pool](/api/pool) module.
+node-postgres ships with built-in connection pooling via the [pg-pool](/apis/pool) module.
## Examples
@@ -28,7 +28,8 @@ The client pool allows you to have a reusable pool of clients you can check out,
### Checkout, use, and return
```js
-const { Pool } = require('pg')
+import pg from 'pg'
+const { Pool } = pg
const pool = new Pool()
@@ -39,46 +40,11 @@ pool.on('error', (err, client) => {
process.exit(-1)
})
-// callback - checkout a client
-pool.connect((err, client, done) => {
- if (err) throw err
- client.query('SELECT * FROM users WHERE id = $1', [1], (err, res) => {
- done()
-
- if (err) {
- console.log(err.stack)
- } else {
- console.log(res.rows[0])
- }
- })
-})
-
-// promise - checkout a client
-pool.connect().then((client) => {
- return client
- .query('SELECT * FROM users WHERE id = $1', [1])
- .then((res) => {
- client.release()
- console.log(res.rows[0])
- })
- .catch((err) => {
- client.release()
- console.log(err.stack)
- })
-})
+const client = await pool.connect()
+const res = await client.query('SELECT * FROM users WHERE id = $1', [1])
+console.log(res.rows[0])
-// async/await - check out a client
-;(async () => {
- const client = await pool.connect()
- 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 {
- client.release()
- }
-})()
+client.release()
```
@@ -95,44 +61,13 @@ pool.connect().then((client) => {
If you don't need a transaction or you just need to run a single query, the pool has a convenience method to run a query on any available client in the pool. This is the preferred way to query with node-postgres if you can as it removes the risk of leaking a client.
```js
-const { Pool } = require('pg')
-
-const pool = new Pool()
-
-pool.query('SELECT * FROM users WHERE id = $1', [1], (err, res) => {
- if (err) {
- throw err
- }
-
- console.log('user:', res.rows[0])
-})
-```
-
-node-postgres also has built-in support for promises throughout all of its async APIs.
-
-```js
-const { Pool } = require('pg')
-
-const pool = new Pool()
+import pg from 'pg'
+const { Pool } = pg
-pool
- .query('SELECT * FROM users WHERE id = $1', [1])
- .then((res) => console.log('user:', res.rows[0]))
- .catch((err) =>
- setImmediate(() => {
- throw err
- })
- )
-```
-
-Promises allow us to use `async`/`await` in node v8.0 and above (or earlier if you're using babel).
-
-```js
-const { Pool } = require('pg')
const pool = new Pool()
-const { rows } = await pool.query('SELECT * FROM users WHERE id = $1', [1])
-console.log('user:', rows[0])
+const res = await pool.query('SELECT * FROM users WHERE id = $1', [1])
+console.log('user:', res.rows[0])
```
### Shutdown
@@ -140,7 +75,8 @@ console.log('user:', rows[0])
To shut down a pool call `pool.end()` on the pool. This will wait for all checked-out clients to be returned and then shut down all the clients and the pool timers.
```js
-const { Pool } = require('pg')
+import pg from 'pg'
+const { Pool } = pg
const pool = new Pool()
console.log('starting async query')
diff --git a/docs/pages/features/queries.mdx b/docs/pages/features/queries.mdx
index 0deef0d0d..63ecdde1e 100644
--- a/docs/pages/features/queries.mdx
+++ b/docs/pages/features/queries.mdx
@@ -3,27 +3,14 @@ title: Queries
slug: /features/queries
---
-The api for executing queries supports both callbacks and promises. I'll provide an example for both _styles_ here. For the sake of brevity I am using the `client.query` method instead of the `pool.query` method - both methods support the same API. In fact, `pool.query` delegates directly to `client.query` internally.
+For the sake of brevity I am using the `client.query` method instead of the `pool.query` method - both methods support the same API. In fact, `pool.query` delegates directly to `client.query` internally.
## Text only
If your query has no parameters you do not need to include them to the query method:
```js
-// callback
-client.query('SELECT NOW() as now', (err, res) => {
- if (err) {
- console.log(err.stack)
- } else {
- console.log(res.rows[0])
- }
-})
-
-// promise
-client
- .query('SELECT NOW() as now')
- .then(res => console.log(res.rows[0]))
- .catch(e => console.error(e.stack))
+await client.query('SELECT NOW() as now')
```
## Parameterized query
@@ -34,37 +21,13 @@ If you are passing parameters to your queries you will want to avoid string conc
const text = 'INSERT INTO users(name, email) VALUES($1, $2) RETURNING *'
const values = ['brianc', 'brian.m.carlson@gmail.com']
-// callback
-client.query(text, values, (err, res) => {
- if (err) {
- console.log(err.stack)
- } else {
- console.log(res.rows[0])
- // { name: 'brianc', email: 'brian.m.carlson@gmail.com' }
- }
-})
-
-// promise
-client
- .query(text, values)
- .then(res => {
- console.log(res.rows[0])
- // { name: 'brianc', email: 'brian.m.carlson@gmail.com' }
- })
- .catch(e => console.error(e.stack))
-
-// async/await
-try {
- const res = await client.query(text, values)
- console.log(res.rows[0])
- // { name: 'brianc', email: 'brian.m.carlson@gmail.com' }
-} catch (err) {
- console.log(err.stack)
-}
+const res = await client.query(text, values)
+console.log(res.rows[0])
+// { name: 'brianc', email: 'brian.m.carlson@gmail.com' }
```
-
- PostgreSQL does not support parameters for identifiers. If you need to have dynamic database, schema, table, or column names (e.g. in DDL statements) use pg-format package for handling escaping these values to ensure you do not have SQL injection!
+
+ PostgreSQL does not support parameters for identifiers. If you need to have dynamic database, schema, table, or column names (e.g. in DDL statements) use [pg-format](https://www.npmjs.com/package/pg-format) package for handling escaping these values to ensure you do not have SQL injection!
Parameters passed as the second argument to `query()` will be converted to raw data types using the following rules:
@@ -112,20 +75,8 @@ const query = {
values: ['brianc', 'brian.m.carlson@gmail.com'],
}
-// callback
-client.query(query, (err, res) => {
- if (err) {
- console.log(err.stack)
- } else {
- console.log(res.rows[0])
- }
-})
-
-// promise
-client
- .query(query)
- .then(res => console.log(res.rows[0]))
- .catch(e => console.error(e.stack))
+const res = await client.query(query)
+console.log(res.rows[0])
```
The query config object allows for a few more advanced scenarios:
@@ -142,26 +93,14 @@ const query = {
values: [1],
}
-// callback
-client.query(query, (err, res) => {
- if (err) {
- console.log(err.stack)
- } else {
- console.log(res.rows[0])
- }
-})
-
-// promise
-client
- .query(query)
- .then(res => console.log(res.rows[0]))
- .catch(e => console.error(e.stack))
+const res = await client.query(query)
+console.log(res.rows[0])
```
In the above example the first time the client sees a query with the name `'fetch-user'` it will send a 'parse' request to the PostgreSQL server & execute the query as normal. The second time, it will skip the 'parse' request and send the _name_ of the query to the PostgreSQL server.
-
-
+
+
Be careful not to fall into the trap of premature optimization. Most of your queries will likely not benefit much, if at all, from using prepared statements. This is a somewhat "power user" feature of PostgreSQL that is best used when you know how to use it - namely with very complex queries with lots of joins and advanced operations like union and switch statements. I rarely use this feature in my own apps unless writing complex aggregate queries for reports and I know the reports are going to be executed very frequently.
@@ -177,29 +116,14 @@ const query = {
rowMode: 'array',
}
-// callback
-client.query(query, (err, res) => {
- if (err) {
- console.log(err.stack)
- } else {
- console.log(res.fields.map(field => field.name)) // ['first_name', 'last_name']
- console.log(res.rows[0]) // ['Brian', 'Carlson']
- }
-})
-
-// promise
-client
- .query(query)
- .then(res => {
- console.log(res.fields.map(field => field.name)) // ['first_name', 'last_name']
- console.log(res.rows[0]) // ['Brian', 'Carlson']
- })
- .catch(e => console.error(e.stack))
+const res = await client.query(query)
+console.log(res.fields.map(field => field.name)) // ['first_name', 'last_name']
+console.log(res.rows[0]) // ['Brian', 'Carlson']
```
### Types
-You can pass in a custom set of type parsers to use when parsing the results of a particular query. The `types` property must conform to the [Types](/api/types) API. Here is an example in which every value is returned as a string:
+You can pass in a custom set of type parsers to use when parsing the results of a particular query. The `types` property must conform to the [Types](/apis/types) API. Here is an example in which every value is returned as a string:
```js
const query = {
diff --git a/docs/pages/features/ssl.mdx b/docs/pages/features/ssl.mdx
index 0428d0549..9983c0434 100644
--- a/docs/pages/features/ssl.mdx
+++ b/docs/pages/features/ssl.mdx
@@ -15,34 +15,24 @@ const config = {
host: 'host-or-ip',
// this object will be passed to the TLSSocket constructor
ssl: {
- rejectUnauthorized: false,
- ca: fs.readFileSync('/path/to/server-certificates/root.crt').toString(),
- key: fs.readFileSync('/path/to/client-key/postgresql.key').toString(),
- cert: fs.readFileSync('/path/to/client-certificates/postgresql.crt').toString(),
+ ca: fs.readFileSync('/path/to/server-certificates/root.crt'),
+ key: fs.readFileSync('/path/to/client-key/postgresql.key'),
+ cert: fs.readFileSync('/path/to/client-certificates/postgresql.crt'),
},
}
import { Client, Pool } from 'pg'
const client = new Client(config)
-client.connect(err => {
- if (err) {
- console.error('error connecting', err.stack)
- } else {
- console.log('connected')
- client.end()
- }
-})
+await client.connect()
+console.log('connected')
+await client.end()
const pool = new Pool(config)
-pool
- .connect()
- .then(client => {
- console.log('connected')
- client.release()
- })
- .catch(err => console.error('error connecting', err.stack))
- .then(() => pool.end())
+const pooledClient = await pool.connect()
+console.log('connected')
+pooledClient.release()
+await pool.end()
```
## Usage with `connectionString`
@@ -54,8 +44,21 @@ 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(),
+ ca: fs.readFileSync('/path/to/server-certificates/root.crt'),
},
}
```
+
+## Channel binding
+
+If the PostgreSQL server offers SCRAM-SHA-256-PLUS (i.e. channel binding) for TLS/SSL connections, you can enable this as follows:
+
+```js
+const client = new Client({ ...config, enableChannelBinding: true})
+```
+
+or
+
+```js
+const pool = new Pool({ ...config, enableChannelBinding: true})
+```
diff --git a/docs/pages/features/transactions.mdx b/docs/pages/features/transactions.mdx
index 408db52f8..4433bd3e4 100644
--- a/docs/pages/features/transactions.mdx
+++ b/docs/pages/features/transactions.mdx
@@ -15,16 +15,10 @@ To execute a transaction with node-postgres you simply execute `BEGIN / COMMIT /
## Examples
-### async/await
-
-Things are considerably more straightforward if you're using async/await:
-
```js
-const { Pool } = require('pg')
+import { Pool } from 'pg'
const pool = new Pool()
-// note: we don't try/catch this because if connecting throws an exception
-// we don't need to dispose of the client (it will be undefined)
const client = await pool.connect()
try {
@@ -43,51 +37,3 @@ try {
client.release()
}
```
-
-### callbacks
-
-node-postgres is a very old library, and still has an optional callback API. Here's an example of doing the same code above, but with callbacks:
-
-```js
-const { Pool } = require('pg')
-const pool = new Pool()
-
-pool.connect((err, client, done) => {
- const shouldAbort = (err) => {
- if (err) {
- console.error('Error in transaction', err.stack)
- client.query('ROLLBACK', (err) => {
- if (err) {
- console.error('Error rolling back client', err.stack)
- }
- // release the client back to the pool
- done()
- })
- }
- return !!err
- }
-
- client.query('BEGIN', (err) => {
- if (shouldAbort(err)) return
- const queryText = 'INSERT INTO users(name) VALUES($1) RETURNING id'
- client.query(queryText, ['brianc'], (err, res) => {
- if (shouldAbort(err)) return
-
- const insertPhotoText = 'INSERT INTO photos(user_id, photo_url) VALUES ($1, $2)'
- const insertPhotoValues = [res.rows[0].id, 's3.bucket.foo']
- client.query(insertPhotoText, insertPhotoValues, (err, res) => {
- if (shouldAbort(err)) return
-
- client.query('COMMIT', (err) => {
- if (err) {
- console.error('Error committing transaction', err.stack)
- }
- done()
- })
- })
- })
- })
-})
-```
-
-..thank goodness for `async/await` yeah?
diff --git a/docs/pages/features/types.mdx b/docs/pages/features/types.mdx
index 65c814bae..36e8b7035 100644
--- a/docs/pages/features/types.mdx
+++ b/docs/pages/features/types.mdx
@@ -4,7 +4,7 @@ title: Data Types
import { Alert } from '/components/alert.tsx'
-PostgreSQL has a rich system of supported [data types](https://www.postgresql.org/docs/9.5/static/datatype.html). node-postgres does its best to support the most common data types out of the box and supplies an extensible type parser to allow for custom type serialization and parsing.
+PostgreSQL has a rich system of supported [data types](https://www.postgresql.org/docs/current/datatype.html). node-postgres does its best to support the most common data types out of the box and supplies an extensible type parser to allow for custom type serialization and parsing.
## strings by default
@@ -21,7 +21,7 @@ console.log(result.rows[0]) // will contain the unparsed string value of each co
### uuid + json / jsonb
-There is no data type in JavaScript for a uuid/guid so node-postgres converts a uuid to a string. JavaScript has great support for JSON and node-postgres converts json/jsonb objects directly into their JavaScript object via [`JSON.parse`](https://github.com/brianc/node-pg-types/blob/master/lib/textParsers.js#L193). Likewise sending an object to the PostgreSQL server via a query from node-postgres, node-posgres will call [`JSON.stringify`](https://github.com/brianc/node-postgres/blob/e5f0e5d36a91a72dda93c74388ac890fa42b3be0/lib/utils.js#L47) on your outbound value, automatically converting it to json for the server.
+There is no data type in JavaScript for a uuid/guid so node-postgres converts a uuid to a string. JavaScript has great support for JSON and node-postgres converts json/jsonb objects directly into their JavaScript object via [`JSON.parse`](https://github.com/brianc/node-pg-types/blob/master/lib/textParsers.js#L193). Likewise sending an object to the PostgreSQL server via a query from node-postgres, node-postgres will call [`JSON.stringify`](https://github.com/brianc/node-postgres/blob/e5f0e5d36a91a72dda93c74388ac890fa42b3be0/lib/utils.js#L47) on your outbound value, automatically converting it to json for the server.
```js
const createTableText = `
diff --git a/docs/pages/guides/_meta.js b/docs/pages/guides/_meta.js
new file mode 100644
index 000000000..2f13073d5
--- /dev/null
+++ b/docs/pages/guides/_meta.js
@@ -0,0 +1,6 @@
+export default {
+ 'project-structure': 'Suggested Code Structure',
+ 'async-express': 'Express with Async/Await',
+ 'pool-sizing': 'Pool Sizing',
+ upgrading: 'Upgrading',
+}
diff --git a/docs/pages/guides/_meta.json b/docs/pages/guides/_meta.json
deleted file mode 100644
index 3889a0992..000000000
--- a/docs/pages/guides/_meta.json
+++ /dev/null
@@ -1,5 +0,0 @@
-{
- "project-structure": "Suggested Code Structure",
- "async-express": "Express with Async/Await",
- "upgrading": "Upgrading"
-}
diff --git a/docs/pages/guides/async-express.md b/docs/pages/guides/async-express.md
index 3be6d955a..a44c15289 100644
--- a/docs/pages/guides/async-express.md
+++ b/docs/pages/guides/async-express.md
@@ -22,21 +22,18 @@ That's the same structure I used in the [project structure](/guides/project-stru
My `db/index.js` file usually starts out like this:
```js
-const { Pool } = require('pg')
+import { Pool } from 'pg'
const pool = new Pool()
-module.exports = {
- query: (text, params) => pool.query(text, params),
-}
+export const query = (text, params) => pool.query(text, params)
```
Then I will install [express-promise-router](https://www.npmjs.com/package/express-promise-router) and use it to define my routes. Here is my `routes/user.js` file:
```js
-const Router = require('express-promise-router')
-
-const db = require('../db')
+import Router from 'express-promise-router'
+import db from '../db.js'
// create a new express-promise-router
// this has the same API as the normal express router except
@@ -44,7 +41,7 @@ const db = require('../db')
const router = new Router()
// export our router to be mounted by the parent application
-module.exports = router
+export default router
router.get('/:id', async (req, res) => {
const { id } = req.params
@@ -57,22 +54,24 @@ Then in my `routes/index.js` file I'll have something like this which mounts eac
```js
// ./routes/index.js
-const users = require('./user')
-const photos = require('./photos')
+import users from './user.js'
+import photos from './photos.js'
-module.exports = (app) => {
+const mountRoutes = (app) => {
app.use('/users', users)
app.use('/photos', photos)
// etc..
}
+
+export default mountRoutes
```
And finally in my `app.js` file where I bootstrap express I will have my `routes/index.js` file mount all my routes. The routes know they're using async functions but because of express-promise-router the main express app doesn't know and doesn't care!
```js
// ./app.js
-const express = require('express')
-const mountRoutes = require('./routes')
+import express from 'express'
+import mountRoutes from './routes.js'
const app = express()
mountRoutes(app)
diff --git a/docs/pages/guides/pool-sizing.md b/docs/pages/guides/pool-sizing.md
new file mode 100644
index 000000000..430e69190
--- /dev/null
+++ b/docs/pages/guides/pool-sizing.md
@@ -0,0 +1,37 @@
+---
+title: Pool Sizing
+---
+
+If you're using a [pool](/apis/pool) in an application with multiple instances of your service running (common in most cloud/container environments currently), you'll need to think a bit about the `max` parameter of your pool across all services and all _instances_ of all services which are connecting to your Postgres server.
+
+This can get pretty complex depending on your cloud environment. Further nuance is introduced with things like pg-bouncer, RDS connection proxies, etc., which will do some forms of connection pooling and connection multiplexing. So, it's definitely worth thinking about. Let's run through a few setups. While certainly not exhaustive, these examples hopefully prompt you into thinking about what's right for your setup.
+
+## Simple apps, dev mode, fixed instance counts, etc.
+
+If your app isn't running in a k8s style env with containers scaling automatically or lambdas or cloud functions etc., you can do some "napkin math" for the `max` pool config you can use. Let's assume your Postgres instance is configured to have a maximum of 200 connections at any one time. You know your service is going to run on 4 instances. You can set the `max` pool size to 50, but if all your services are saturated waiting on database connections, you won't be able to connect to the database from any mgmt tools or scale up your services without changing config/code to adjust the max size.
+
+In this situation, I'd probably set the `max` to 20 or 25. This lets you have plenty of headroom for scaling more instances and realistically, if your app is starved for db connections, you probably want to take a look at your queries and make them execute faster, or cache, or something else to reduce the load on the database. I worked on a more reporting-heavy application with limited users, but each running 5-6 queries at a time which all took 100-200 milliseconds to run. In that situation, I upped the `max` to 50. Typically, though, I don't bother setting it to anything other than the default of `10` as that's usually _fine_.
+
+## Auto-scaling, cloud-functions, multi-tenancy, etc.
+
+If the number of instances of your services which connect to your database is more dynamic and based on things like load, auto-scaling containers, or running in cloud-functions, you need to be a bit more thoughtful about what your max might be. Often in these environments, there will be another database pooling proxy in front of the database like pg-bouncer or the RDS-proxy, etc. I'm not sure how all these function exactly, and they all have some trade-offs, but let's assume you're not using a proxy. Then I'd be pretty cautious about how large you set any individual pool. If you're running an application under pretty serious load where you need dynamic scaling or lots of lambdas spinning up and sending queries, your queries are likely fast and you should be fine setting the `max` to a low value like 10 -- or just leave it alone, since `10` is the default.
+
+### Vercel
+
+If you're running on Vercel with [fluid compute](https://vercel.com/kb/guide/efficiently-manage-database-connection-pools-with-fluid-compute), your serverless functions can handle multiple requests concurrently and stick around between invocations. In this case, you can treat it similarly to a traditional long-lived process and use a default-ish pool size of `10`. The pool will stay warm across requests and you'll get the benefits of connection reuse. You'll probably need to put pgBouncer (or some kind of pooler like what is offered with Supabase, RDS, GCP, etc.) in front of your database, as Vercel worker count can grow quite a bit larger than the number of reasonable max connections Postgres can handle.
+
+### Cloudflare workers
+
+In a fully stateless serverless environment like Cloudflare Workers where your worker is killed, suspended, moved to a new compute node, or shut down at the end of every request, you'll still probably be okay with a pool size `max` of `10`, though you can lower it if you start hitting connection exhaustion limits on your pooler. In Cloudflare the pooler is Hyperdrive, and in my experience it works fantastically with their workers setup. Make sure at the end of your serverless handler, after everything is done, you close and dispose of the pool by calling `pool.end()`. Setting the pool to a size larger than 1 is still recommended, as things like tRPC and other server-side routing & request batching code could result in multiple independent queries executing at the same time. With a pool size of `1` you are turning what is "a few things at once" into all things waiting in line one after another on the one available client in the pool.
+
+## pg-bouncer, RDS-proxy, etc.
+
+I'm not sure of all the pooling services for Postgres. I haven't used any myself. Throughout the years of working on `pg`, I've addressed issues caused by various proxies behaving differently than an actual Postgres backend. There are also gotchas with things like transactions. On the other hand, plenty of people run these with much success. In this situation, I would just recommend using some small but reasonable `max` value like the default value of `10` as it can still be helpful to keep a few TCP sockets from your services to the Postgres proxy open.
+
+## Conclusion, tl;dr
+
+It's a bit of a complicated topic and doesn't have much impact on things until you need to start scaling. At that point, your number of connections _still_ probably won't be your scaling bottleneck. It's worth thinking about a bit, but mostly I'd just leave the pool size to the default of `10` until you run into troubles: hopefully you never do!
+
+## Need help?
+
+In my career, this has been the most error-prone thing related to running Postgres & Node, particularly with the differences in various serverless providers (Cloudflare, Vercel, Lambda, etc.) versus more traditional hosting. If you have any questions or need help, please don't hesitate to email me at [brian.m.carlson@gmail.com](mailto:brian.m.carlson@gmail.com) or reach out on GitHub.
diff --git a/docs/pages/guides/project-structure.md b/docs/pages/guides/project-structure.md
index 742451daa..5f53a4183 100644
--- a/docs/pages/guides/project-structure.md
+++ b/docs/pages/guides/project-structure.md
@@ -11,8 +11,6 @@ Whenever I am writing a project & using node-postgres I like to create a file wi
## example
-_note: I am using callbacks in this example to introduce as few concepts as possible at a time, but the same is doable with promises or async/await_
-
The location doesn't really matter - I've found it usually ends up being somewhat app specific and in line with whatever folder structure conventions you're using. For this example I'll use an express app structured like so:
```
@@ -29,14 +27,12 @@ The location doesn't really matter - I've found it usually ends up being somewha
Typically I'll start out my `db/index.js` file like so:
```js
-const { Pool } = require('pg')
+import { Pool } from 'pg'
const pool = new Pool()
-module.exports = {
- query: (text, params, callback) => {
- return pool.query(text, params, callback)
- },
+export const query = (text, params) => {
+ return pool.query(text, params)
}
```
@@ -45,15 +41,11 @@ That's it. But now everywhere else in my application instead of requiring `pg` d
```js
// notice here I'm requiring my database adapter file
// and not requiring node-postgres directly
-const db = require('../db')
-
-app.get('/:id', (req, res, next) => {
- db.query('SELECT * FROM users WHERE id = $1', [req.params.id], (err, result) => {
- if (err) {
- return next(err)
- }
- res.send(result.rows[0])
- })
+import * as db from '../db/index.js'
+
+app.get('/:id', async (req, res, next) => {
+ const result = await db.query('SELECT * FROM users WHERE id = $1', [req.params.id])
+ res.send(result.rows[0])
})
// ... many other routes in this file
@@ -62,19 +54,16 @@ app.get('/:id', (req, res, next) => {
Imagine we have lots of routes scattered throughout many files under our `routes/` directory. We now want to go back and log every single query that's executed, how long it took, and the number of rows it returned. If we had required node-postgres directly in every route file we'd have to go edit every single route - that would take forever & be really error prone! But thankfully we put our data access into `db/index.js`. Let's go add some logging:
```js
-const { Pool } = require('pg')
+import { Pool } from 'pg'
const pool = new Pool()
-module.exports = {
- query: (text, params, callback) => {
- const start = Date.now()
- return pool.query(text, params, (err, res) => {
- const duration = Date.now() - start
- console.log('executed query', { text, duration, rows: res.rowCount })
- callback(err, res)
- })
- },
+export const query = async (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
}
```
@@ -85,112 +74,57 @@ _note: I didn't log the query parameters. Depending on your application you migh
Now what if we need to check out a client from the pool to run several queries in a row in a transaction? We can add another method to our `db/index.js` file when we need to do this:
```js
-const { Pool } = require('pg')
+import { Pool } from 'pg'
const pool = new Pool()
-module.exports = {
- query: (text, params, callback) => {
- const start = Date.now()
- return pool.query(text, params, (err, res) => {
- const duration = Date.now() - start
- console.log('executed query', { text, duration, rows: res.rowCount })
- callback(err, res)
- })
- },
- getClient: (callback) => {
- pool.connect((err, client, done) => {
- callback(err, client, done)
- })
- },
+export const query = async (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
}
-```
-
-Okay. Great - the simplest thing that could possibly work. It seems like one of our routes that checks out a client to run a transaction is forgetting to call `done` in some situation! Oh no! We are leaking a client & have hundreds of these routes to go audit. Good thing we have all our client access going through this single file. Lets add some deeper diagnostic information here to help us track down where the client leak is happening.
-
-```js
-const { Pool } = require('pg')
-
-const pool = new Pool()
-module.exports = {
- query: (text, params, callback) => {
- const start = Date.now()
- return pool.query(text, params, (err, res) => {
- const duration = Date.now() - start
- console.log('executed query', { text, duration, rows: res.rowCount })
- callback(err, res)
- })
- },
- getClient: (callback) => {
- pool.connect((err, client, done) => {
- const query = client.query
-
- // monkey patch the query method to keep track of the last query executed
- client.query = (...args) => {
- client.lastQuery = args
- return query.apply(client, args)
- }
-
- // 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)
-
- const release = (err) => {
- // call the actual 'done' method, returning this client to the pool
- done(err)
-
- // clear our timeout
- clearTimeout(timeout)
-
- // set the query method back to its old un-monkey-patched version
- client.query = query
- }
-
- callback(err, client, release)
- })
- },
+export const getClient = () => {
+ return pool.connect()
}
```
-Using async/await:
+Okay. Great - the simplest thing that could possibly work. It seems like one of our routes that checks out a client to run a transaction is forgetting to call `release` in some situation! Oh no! We are leaking a client & have hundreds of these routes to go audit. Good thing we have all our client access going through this single file. Lets add some deeper diagnostic information here to help us track down where the client leak is happening.
```js
-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
- },
+export const query = async (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
+}
+
+export const getClient = async () => {
+ 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
}
```
diff --git a/docs/pages/guides/upgrading.md b/docs/pages/guides/upgrading.md
index 2a1d311a2..14e7042b8 100644
--- a/docs/pages/guides/upgrading.md
+++ b/docs/pages/guides/upgrading.md
@@ -3,15 +3,19 @@ title: Upgrading
slug: /guides/upgrading
---
+## node version support
+
+I have maintained legacy apps in production for many years. I get it...upgrading node and your entire dependency tree is rough, but so is missing out on critical fixes. I've taken pride over the years in not introducing breaking changes without a need because I've spent too much of my own time in my own apps upgrading a semver major version of a library with many breaking changes. That being said: node-postgres only _officially_ supports node versions which are still under the [LTS lifetime](https://nodejs.org/en/about/previous-releases). The [CI matrix](https://github.com/brianc/node-postgres/blob/master/.github/workflows/ci.yml#L39) is the most official and enforced compatiblity matrix; however, I may drop support for node versions outside of node's LTS lifetime at any time, with any semver minor release, if it is required to land new features or bug fixes on supported versions of node. I recommend in general to use a lockfile, and, if you're on an older version of node nearing EOL use absolutely pinned versions for as many of your modules as you can, including this one.
+
# Upgrading to 8.0
-node-postgres at 8.0 introduces a breaking change to ssl-verified connections. If you connect with ssl and use
+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
+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 } })
@@ -23,10 +27,6 @@ The rest of the changes are relatively minor and unlikely to cause issues; see [
node-postgres at 7.0 introduces somewhat significant breaking changes to the public API.
-## node version support
-
-Starting with `pg@7.0` the earliest version of node supported will be `node@4.x LTS`. Support for `node@0.12.x` and `node@.10.x` is dropped, and the module wont work as it relies on new es6 features not available in older versions of node.
-
## pg singleton
In the past there was a singleton pool manager attached to the root `pg` object in the package. This singleton could be used to provision connection pools automatically by calling `pg.connect`. This API caused a lot of confusion for users. It also introduced a opaque module-managed singleton which was difficult to reason about, debug, error-prone, and inflexible. Starting in pg@6.0 the methods' documentation was removed, and starting in pg@6.3 the methods were deprecated with a warning message.
@@ -37,7 +37,7 @@ If your application still relies on these they will be _gone_ in `pg@7.0`. In or
// old way, deprecated in 6.3.0:
// connection using global singleton
-pg.connect(function(err, client, done) {
+pg.connect(function (err, client, done) {
client.query(/* etc, etc */)
done()
})
@@ -50,10 +50,10 @@ pg.end()
// new way, available since 6.0.0:
// create a pool
-var pool = new pg.Pool()
+const pool = new pg.Pool()
// connection using created pool
-pool.connect(function(err, client, done) {
+pool.connect(function (err, client, done) {
client.query(/* etc, etc */)
done()
})
@@ -102,11 +102,12 @@ If you do **not** pass a callback `client.query` will return an instance of a `P
`client.query` has always accepted any object that has a `.submit` method on it. In this scenario the client calls `.submit` on the object, delegating execution responsibility to it. In this situation the client also **returns the instance it was passed**. This is how [pg-cursor](https://github.com/brianc/node-pg-cursor) and [pg-query-stream](https://github.com/brianc/node-pg-query-stream) work. So, if you need the event emitter functionality on your queries for some reason, it is still possible because `Query` is an instance of `Submittable`:
```js
-const { Client, Query } = require('pg')
+import pg from 'pg'
+const { Client, Query } = pg
const query = client.query(new Query('SELECT NOW()'))
-query.on('row', row => {})
-query.on('end', res => {})
-query.on('error', res => {})
+query.on('row', (row) => {})
+query.on('end', (res) => {})
+query.on('error', (res) => {})
```
`Query` is considered a public, documented part of the API of node-postgres and this form will be supported indefinitely.
diff --git a/docs/pages/index.mdx b/docs/pages/index.mdx
index 234cf11e1..ff27662e6 100644
--- a/docs/pages/index.mdx
+++ b/docs/pages/index.mdx
@@ -3,6 +3,8 @@ title: Welcome
slug: /
---
+import { Logo } from '/components/logo.tsx'
+
node-postgres is a collection of node.js modules for interfacing with your PostgreSQL database. It has support for callbacks, promises, async/await, connection pooling, prepared statements, cursors, streaming results, C/C++ bindings, rich type parsing, and more! Just like PostgreSQL itself there are a lot of features: this documentation aims to get you up and running quickly and in the right direction. It also tries to provide guides for more advanced & edge-case topics allowing you to tap into the full power of PostgreSQL from node.js.
## Install
@@ -13,53 +15,69 @@ $ npm install pg
## Supporters
-node-postgres continued development and support is made possible by the many [supporters](https://github.com/brianc/node-postgres/blob/master/SPONSORS.md) with a special thanks to our featured supporters:
+node-postgres continued development and support is made possible by the many [supporters](https://github.com/brianc/node-postgres/blob/master/SPONSORS.md).
+
+Special thanks to [Medplum](https://www.medplum.com/) for sponsoring node-postgres for a whole year!
-
-
-
-
+If you or your company are benefiting from node-postgres and would like to help keep the project financially sustainable [please consider supporting](https://github.com/sponsors/brianc) its development.
-
-
-
-
-
+### Featured sponsor
-If you or your company are benefiting from node-postgres and would like to help keep the project financially sustainable [please consider supporting](https://github.com/sponsors/brianc) its development.
+Special thanks to [medplum](https://medplum.com) for their generous and thoughtful support of node-postgres!
+
+
## Contributing
diff --git a/packages/pg/bench.js b/packages/pg/bench.js
index 5cb42ac78..57cbe94d8 100644
--- a/packages/pg/bench.js
+++ b/packages/pg/bench.js
@@ -1,8 +1,7 @@
const pg = require('./lib')
const params = {
- text:
- 'select typname, typnamespace, typowner, typlen, typbyval, typcategory, typispreferred, typisdefined, typdelim, typrelid, typelem, typarray from pg_type where typtypmod = $1 and typisdefined = $2',
+ text: 'select typname, typnamespace, typowner, typlen, typbyval, typcategory, typispreferred, typisdefined, typdelim, typrelid, typelem, typarray from pg_type where typtypmod = $1 and typisdefined = $2',
values: [-1, true],
}
@@ -24,12 +23,13 @@ const exec = async (client, q) => {
}
const bench = async (client, q, time) => {
- let start = Date.now()
+ const start = performance.now()
let count = 0
+ // eslint-disable-next-line no-constant-condition
while (true) {
await exec(client, q)
count++
- if (Date.now() - start > time) {
+ if (performance.now() - start > time) {
return count
}
}
@@ -48,21 +48,27 @@ const run = async () => {
for (let i = 0; i < 4; i++) {
let queries = await bench(client, params, seconds * 1000)
console.log('')
- console.log('little queries:', queries)
+ console.log('param queries:', queries)
console.log('qps', queries / seconds)
- console.log('on my laptop best so far seen 733 qps')
+ console.log('on my laptop best so far seen 987 qps')
+
+ queries = await bench(client, { ...params, name: 'params' }, seconds * 1000)
+ console.log('')
+ console.log('named queries:', queries)
+ console.log('qps', queries / seconds)
+ console.log('on my laptop best so far seen 937 qps')
console.log('')
queries = await bench(client, seq, seconds * 1000)
console.log('sequence queries:', queries)
console.log('qps', queries / seconds)
- console.log('on my laptop best so far seen 1309 qps')
+ console.log('on my laptop best so far seen 2725 qps')
console.log('')
queries = await bench(client, insert, seconds * 1000)
console.log('insert queries:', queries)
console.log('qps', queries / seconds)
- console.log('on my laptop best so far seen 6445 qps')
+ console.log('on my laptop best so far seen 27383 qps')
console.log('')
console.log('Warming up bytea test')
@@ -71,12 +77,12 @@ const run = async () => {
values: ['test', Buffer.allocUnsafe(104857600)],
})
console.log('bytea warmup done')
- const start = Date.now()
+ const start = performance.now()
const results = await client.query('SELECT * FROM buf')
- const time = Date.now() - start
+ const time = performance.now() - start
console.log('bytea time:', time, 'ms')
console.log('bytea length:', results.rows[0].data.byteLength, 'bytes')
- console.log('on my laptop best so far seen 1107ms and 104857600 bytes')
+ console.log('on my laptop best so far seen 1407ms and 104857600 bytes')
await new Promise((resolve) => setTimeout(resolve, 250))
}
diff --git a/packages/pg/esm/index.mjs b/packages/pg/esm/index.mjs
new file mode 100644
index 000000000..587d80c1e
--- /dev/null
+++ b/packages/pg/esm/index.mjs
@@ -0,0 +1,20 @@
+// ESM wrapper for pg
+import pg from '../lib/index.js'
+
+// Re-export all the properties
+export const Client = pg.Client
+export const Pool = pg.Pool
+export const Connection = pg.Connection
+export const types = pg.types
+export const Query = pg.Query
+export const DatabaseError = pg.DatabaseError
+export const escapeIdentifier = pg.escapeIdentifier
+export const escapeLiteral = pg.escapeLiteral
+export const Result = pg.Result
+export const TypeOverrides = pg.TypeOverrides
+
+// Also export the defaults
+export const defaults = pg.defaults
+
+// Re-export the default
+export default pg
diff --git a/packages/pg/lib/client.js b/packages/pg/lib/client.js
index 82d571d8a..d6c57194c 100644
--- a/packages/pg/lib/client.js
+++ b/packages/pg/lib/client.js
@@ -1,15 +1,51 @@
-'use strict'
-
-var EventEmitter = require('events').EventEmitter
-var utils = require('./utils')
-var sasl = require('./sasl')
-var pgPass = require('pgpass')
-var TypeOverrides = require('./type-overrides')
-
-var ConnectionParameters = require('./connection-parameters')
-var Query = require('./query')
-var defaults = require('./defaults')
-var Connection = require('./connection')
+const EventEmitter = require('events').EventEmitter
+const utils = require('./utils')
+const nodeUtils = require('util')
+const sasl = require('./crypto/sasl')
+const TypeOverrides = require('./type-overrides')
+
+const ConnectionParameters = require('./connection-parameters')
+const Query = require('./query')
+const defaults = require('./defaults')
+const Connection = require('./connection')
+const crypto = require('./crypto/utils')
+
+const activeQueryDeprecationNotice = nodeUtils.deprecate(
+ () => {},
+ 'Client.activeQuery is deprecated and will be removed in pg@9.0'
+)
+
+const queryQueueDeprecationNotice = nodeUtils.deprecate(
+ () => {},
+ 'Client.queryQueue is deprecated and will be removed in pg@9.0.'
+)
+
+const pgPassDeprecationNotice = nodeUtils.deprecate(
+ () => {},
+ 'pgpass support is deprecated and will be removed in pg@9.0. ' +
+ 'You can provide an async function as the password property to the Client/Pool constructor that returns a password instead. Within this function you can call the pgpass module in your own code.'
+)
+
+const byoPromiseDeprecationNotice = nodeUtils.deprecate(
+ () => {},
+ 'Passing a custom Promise implementation to the Client/Pool constructor is deprecated and will be removed in pg@9.0.'
+)
+
+const queryQueueLengthDeprecationNotice = nodeUtils.deprecate(
+ () => {},
+ 'Calling client.query() when the client is already executing a query is deprecated and will be removed in pg@9.0. Use async/await or an external async flow control mechanism instead.'
+)
+
+function coerceNumberOrDefault(value, defaultValue) {
+ if (typeof value === 'number') {
+ return Number.isFinite(value) ? value : defaultValue
+ }
+ if (typeof value === 'string' && value.trim() !== '') {
+ const n = Number(value)
+ return Number.isFinite(n) ? n : defaultValue
+ }
+ return defaultValue
+}
class Client extends EventEmitter {
constructor(config) {
@@ -32,16 +68,24 @@ class Client extends EventEmitter {
this.replication = this.connectionParameters.replication
- var c = config || {}
+ const c = config || {}
+ if (c.Promise) {
+ byoPromiseDeprecationNotice()
+ }
this._Promise = c.Promise || global.Promise
this._types = new TypeOverrides(c.types)
this._ending = false
+ this._ended = false
this._connecting = false
this._connected = false
this._connectionError = false
this._queryable = true
+ this._activeQuery = null
+ this._txStatus = null
+ this.enableChannelBinding = Boolean(c.enableChannelBinding) // set true to use SCRAM-SHA-256-PLUS when offered
+ this.scramMaxIterations = coerceNumberOrDefault(c.scramMaxIterations, sasl.DEFAULT_MAX_SCRAM_ITERATIONS)
this.connection =
c.connection ||
new Connection({
@@ -51,7 +95,7 @@ class Client extends EventEmitter {
keepAliveInitialDelayMillis: c.keepAliveInitialDelayMillis || 0,
encoding: this.connectionParameters.client_encoding || 'utf8',
})
- this.queryQueue = []
+ this._queryQueue = []
this.binary = c.binary || defaults.binary
this.processID = null
this.secretKey = null
@@ -68,6 +112,20 @@ class Client extends EventEmitter {
this._connectionTimeoutMillis = c.connectionTimeoutMillis || 0
}
+ get activeQuery() {
+ activeQueryDeprecationNotice()
+ return this._activeQuery
+ }
+
+ set activeQuery(val) {
+ activeQueryDeprecationNotice()
+ this._activeQuery = val
+ }
+
+ _getActiveQuery() {
+ return this._activeQuery
+ }
+
_errorAllQueries(err) {
const enqueueError = (query) => {
process.nextTick(() => {
@@ -75,18 +133,19 @@ class Client extends EventEmitter {
})
}
- if (this.activeQuery) {
- enqueueError(this.activeQuery)
- this.activeQuery = null
+ const activeQuery = this._getActiveQuery()
+ if (activeQuery) {
+ enqueueError(activeQuery)
+ this._activeQuery = null
}
- this.queryQueue.forEach(enqueueError)
- this.queryQueue.length = 0
+ this._queryQueue.forEach(enqueueError)
+ this._queryQueue.length = 0
}
_connect(callback) {
- var self = this
- var con = this.connection
+ const self = this
+ const con = this.connection
this._connectionCallback = callback
if (this._connecting || this._connected) {
@@ -98,12 +157,15 @@ class Client extends EventEmitter {
}
this._connecting = true
- this.connectionTimeoutHandle
if (this._connectionTimeoutMillis > 0) {
this.connectionTimeoutHandle = setTimeout(() => {
con._ending = true
con.stream.destroy(new Error('timeout expired'))
}, this._connectionTimeoutMillis)
+
+ if (this.connectionTimeoutHandle.unref) {
+ this.connectionTimeoutHandle.unref()
+ }
}
if (this.host && this.host.indexOf('/') === 0) {
@@ -132,6 +194,7 @@ class Client extends EventEmitter {
clearTimeout(this.connectionTimeoutHandle)
this._errorAllQueries(error)
+ this._ended = true
if (!this._ending) {
// if the connection is ended without us calling .end()
@@ -166,7 +229,7 @@ class Client extends EventEmitter {
if (error) {
reject(error)
} else {
- resolve()
+ resolve(this)
}
})
})
@@ -197,14 +260,12 @@ class Client extends EventEmitter {
con.on('notification', this._handleNotification.bind(this))
}
- // TODO(bmc): deprecate pgpass "built in" integration since this.password can be a function
- // it can be supplied by the user if required - this is a breaking change!
- _checkPgPass(cb) {
+ _getPassword(cb) {
const con = this.connection
if (typeof this.password === 'function') {
this._Promise
.resolve()
- .then(() => this.password())
+ .then(() => this.password(this.connectionParameters))
.then((pass) => {
if (pass !== undefined) {
if (typeof pass !== 'string') {
@@ -223,43 +284,74 @@ class Client extends EventEmitter {
} else if (this.password !== null) {
cb()
} else {
- pgPass(this.connectionParameters, (pass) => {
- if (undefined !== pass) {
- this.connectionParameters.password = this.password = pass
- }
- cb()
- })
+ try {
+ const pgPass = require('pgpass')
+ pgPass(this.connectionParameters, (pass) => {
+ if (undefined !== pass) {
+ pgPassDeprecationNotice()
+ this.connectionParameters.password = this.password = pass
+ }
+ cb()
+ })
+ } catch (e) {
+ this.emit('error', e)
+ }
}
}
_handleAuthCleartextPassword(msg) {
- this._checkPgPass(() => {
+ this._getPassword(() => {
this.connection.password(this.password)
})
}
_handleAuthMD5Password(msg) {
- this._checkPgPass(() => {
- const hashedPassword = utils.postgresMd5PasswordHash(this.user, this.password, msg.salt)
- this.connection.password(hashedPassword)
+ this._getPassword(async () => {
+ try {
+ const hashedPassword = await crypto.postgresMd5PasswordHash(this.user, this.password, msg.salt)
+ this.connection.password(hashedPassword)
+ } catch (e) {
+ this.emit('error', e)
+ }
})
}
_handleAuthSASL(msg) {
- this._checkPgPass(() => {
- this.saslSession = sasl.startSession(msg.mechanisms)
- this.connection.sendSASLInitialResponseMessage(this.saslSession.mechanism, this.saslSession.response)
+ this._getPassword(() => {
+ try {
+ this.saslSession = sasl.startSession(
+ msg.mechanisms,
+ this.enableChannelBinding && this.connection.stream,
+ this.scramMaxIterations
+ )
+ this.connection.sendSASLInitialResponseMessage(this.saslSession.mechanism, this.saslSession.response)
+ } catch (err) {
+ this.connection.emit('error', err)
+ }
})
}
- _handleAuthSASLContinue(msg) {
- sasl.continueSession(this.saslSession, this.password, msg.data)
- this.connection.sendSCRAMClientFinalMessage(this.saslSession.response)
+ async _handleAuthSASLContinue(msg) {
+ try {
+ await sasl.continueSession(
+ this.saslSession,
+ this.password,
+ msg.data,
+ this.enableChannelBinding && this.connection.stream
+ )
+ this.connection.sendSCRAMClientFinalMessage(this.saslSession.response)
+ } catch (err) {
+ this.connection.emit('error', err)
+ }
}
_handleAuthSASLFinal(msg) {
- sasl.finalizeSession(this.saslSession, msg.data)
- this.saslSession = null
+ try {
+ sasl.finalizeSession(this.saslSession, msg.data)
+ this.saslSession = null
+ } catch (err) {
+ this.connection.emit('error', err)
+ }
}
_handleBackendKeyData(msg) {
@@ -282,8 +374,9 @@ class Client extends EventEmitter {
}
this.emit('connect')
}
- const { activeQuery } = this
- this.activeQuery = null
+ const activeQuery = this._getActiveQuery()
+ this._activeQuery = null
+ this._txStatus = msg?.status ?? null
this.readyForQuery = true
if (activeQuery) {
activeQuery.handleReadyForQuery(this.connection)
@@ -291,7 +384,7 @@ class Client extends EventEmitter {
this._pulseQueryQueue()
}
- // if we receieve an error event or error message
+ // if we receive an error event or error message
// during the connection process we handle it here
_handleErrorWhileConnecting(err) {
if (this._connectionError) {
@@ -323,57 +416,105 @@ class Client extends EventEmitter {
if (this._connecting) {
return this._handleErrorWhileConnecting(msg)
}
- const activeQuery = this.activeQuery
+ const activeQuery = this._getActiveQuery()
if (!activeQuery) {
this._handleErrorEvent(msg)
return
}
- this.activeQuery = null
+ this._activeQuery = null
activeQuery.handleError(msg, this.connection)
}
_handleRowDescription(msg) {
+ const activeQuery = this._getActiveQuery()
+ if (activeQuery == null) {
+ const error = new Error('Received unexpected rowDescription message from backend.')
+ this._handleErrorEvent(error)
+ return
+ }
// delegate rowDescription to active query
- this.activeQuery.handleRowDescription(msg)
+ activeQuery.handleRowDescription(msg)
}
_handleDataRow(msg) {
+ const activeQuery = this._getActiveQuery()
+ if (activeQuery == null) {
+ const error = new Error('Received unexpected dataRow message from backend.')
+ this._handleErrorEvent(error)
+ return
+ }
// delegate dataRow to active query
- this.activeQuery.handleDataRow(msg)
+ activeQuery.handleDataRow(msg)
}
_handlePortalSuspended(msg) {
+ const activeQuery = this._getActiveQuery()
+ if (activeQuery == null) {
+ const error = new Error('Received unexpected portalSuspended message from backend.')
+ this._handleErrorEvent(error)
+ return
+ }
// delegate portalSuspended to active query
- this.activeQuery.handlePortalSuspended(this.connection)
+ activeQuery.handlePortalSuspended(this.connection)
}
_handleEmptyQuery(msg) {
+ const activeQuery = this._getActiveQuery()
+ if (activeQuery == null) {
+ const error = new Error('Received unexpected emptyQuery message from backend.')
+ this._handleErrorEvent(error)
+ return
+ }
// delegate emptyQuery to active query
- this.activeQuery.handleEmptyQuery(this.connection)
+ activeQuery.handleEmptyQuery(this.connection)
}
_handleCommandComplete(msg) {
+ const activeQuery = this._getActiveQuery()
+ if (activeQuery == null) {
+ const error = new Error('Received unexpected commandComplete message from backend.')
+ this._handleErrorEvent(error)
+ return
+ }
// delegate commandComplete to active query
- this.activeQuery.handleCommandComplete(msg, this.connection)
+ activeQuery.handleCommandComplete(msg, this.connection)
}
- _handleParseComplete(msg) {
+ _handleParseComplete() {
+ const activeQuery = this._getActiveQuery()
+ if (activeQuery == null) {
+ const error = new Error('Received unexpected parseComplete message from backend.')
+ this._handleErrorEvent(error)
+ return
+ }
// if a prepared statement has a name and properly parses
// we track that its already been executed so we don't parse
// it again on the same client
- if (this.activeQuery.name) {
- this.connection.parsedStatements[this.activeQuery.name] = this.activeQuery.text
+ if (activeQuery.name) {
+ this.connection.parsedStatements[activeQuery.name] = activeQuery.text
}
}
_handleCopyInResponse(msg) {
- this.activeQuery.handleCopyInResponse(this.connection)
+ const activeQuery = this._getActiveQuery()
+ if (activeQuery == null) {
+ const error = new Error('Received unexpected copyInResponse message from backend.')
+ this._handleErrorEvent(error)
+ return
+ }
+ activeQuery.handleCopyInResponse(this.connection)
}
_handleCopyData(msg) {
- this.activeQuery.handleCopyData(msg, this.connection)
+ const activeQuery = this._getActiveQuery()
+ if (activeQuery == null) {
+ const error = new Error('Received unexpected copyData message from backend.')
+ this._handleErrorEvent(error)
+ return
+ }
+ activeQuery.handleCopyData(msg, this.connection)
}
_handleNotification(msg) {
@@ -385,14 +526,14 @@ class Client extends EventEmitter {
}
getStartupConf() {
- var params = this.connectionParameters
+ const params = this.connectionParameters
- var data = {
+ const data = {
user: params.user,
database: params.database,
}
- var appName = params.application_name || params.fallback_application_name
+ const appName = params.application_name || params.fallback_application_name
if (appName) {
data.application_name = appName
}
@@ -417,7 +558,7 @@ class Client extends EventEmitter {
cancel(client, query) {
if (client.activeQuery === query) {
- var con = this.connection
+ const con = this.connection
if (this.host && this.host.indexOf('/') === 0) {
con.connect(this.host + '/.s.PGSQL.' + this.port)
@@ -429,8 +570,8 @@ class Client extends EventEmitter {
con.on('connect', function () {
con.cancel(client.processID, client.secretKey)
})
- } else if (client.queryQueue.indexOf(query) !== -1) {
- client.queryQueue.splice(client.queryQueue.indexOf(query), 1)
+ } else if (client._queryQueue.indexOf(query) !== -1) {
+ client._queryQueue.splice(client._queryQueue.indexOf(query), 1)
}
}
@@ -442,54 +583,35 @@ class Client extends EventEmitter {
return this._types.getTypeParser(oid, format)
}
- // Ported from PostgreSQL 9.2.4 source code in src/interfaces/libpq/fe-exec.c
+ // escapeIdentifier and escapeLiteral moved to utility functions & exported
+ // on PG
+ // re-exported here for backwards compatibility
escapeIdentifier(str) {
- return '"' + str.replace(/"/g, '""') + '"'
+ return utils.escapeIdentifier(str)
}
- // Ported from PostgreSQL 9.2.4 source code in src/interfaces/libpq/fe-exec.c
escapeLiteral(str) {
- var hasBackslash = false
- var escaped = "'"
-
- for (var i = 0; i < str.length; i++) {
- var c = str[i]
- if (c === "'") {
- escaped += c + c
- } else if (c === '\\') {
- escaped += c + c
- hasBackslash = true
- } else {
- escaped += c
- }
- }
-
- escaped += "'"
-
- if (hasBackslash === true) {
- escaped = ' E' + escaped
- }
-
- return escaped
+ return utils.escapeLiteral(str)
}
_pulseQueryQueue() {
if (this.readyForQuery === true) {
- this.activeQuery = this.queryQueue.shift()
- if (this.activeQuery) {
+ this._activeQuery = this._queryQueue.shift()
+ const activeQuery = this._getActiveQuery()
+ if (activeQuery) {
this.readyForQuery = false
this.hasExecuted = true
- const queryError = this.activeQuery.submit(this.connection)
+ const queryError = activeQuery.submit(this.connection)
if (queryError) {
process.nextTick(() => {
- this.activeQuery.handleError(queryError, this.connection)
+ activeQuery.handleError(queryError, this.connection)
this.readyForQuery = true
this._pulseQueryQueue()
})
}
} else if (this.hasExecuted) {
- this.activeQuery = null
+ this._activeQuery = null
this.emit('drain')
}
}
@@ -497,35 +619,44 @@ class Client extends EventEmitter {
query(config, values, callback) {
// can take in strings, config object or query object
- var query
- var result
- var readTimeout
- var readTimeoutTimer
- var queryCallback
+ let query
+ let result
- if (config === null || config === undefined) {
+ if (config == null) {
throw new TypeError('Client was passed a null or undefined query')
- } else if (typeof config.submit === 'function') {
- readTimeout = config.query_timeout || this.connectionParameters.query_timeout
+ }
+
+ if (typeof config.submit === 'function') {
result = query = config
- if (typeof values === 'function') {
- query.callback = query.callback || values
+ if (!query.callback) {
+ if (typeof values === 'function') {
+ query.callback = values
+ } else if (callback) {
+ query.callback = callback
+ }
}
} else {
- readTimeout = this.connectionParameters.query_timeout
query = new Query(config, values, callback)
if (!query.callback) {
result = new this._Promise((resolve, reject) => {
query.callback = (err, res) => (err ? reject(err) : resolve(res))
+ }).catch((err) => {
+ // replace the stack trace that leads to `TCP.onStreamRead` with one that leads back to the
+ // application that created the query
+ Error.captureStackTrace(err)
+ throw err
})
+ } else if (typeof query.callback !== 'function') {
+ throw new TypeError('callback is not a function')
}
}
+ const readTimeout = config.query_timeout || this.connectionParameters.query_timeout
if (readTimeout) {
- queryCallback = query.callback
+ const queryCallback = query.callback || (() => {})
- readTimeoutTimer = setTimeout(() => {
- var error = new Error('Query read timeout')
+ const readTimeoutTimer = setTimeout(() => {
+ const error = new Error('Query read timeout')
process.nextTick(() => {
query.handleError(error, this.connection)
@@ -538,9 +669,9 @@ class Client extends EventEmitter {
query.callback = () => {}
// Remove from queue
- var index = this.queryQueue.indexOf(query)
+ const index = this._queryQueue.indexOf(query)
if (index > -1) {
- this.queryQueue.splice(index, 1)
+ this._queryQueue.splice(index, 1)
}
this._pulseQueryQueue()
@@ -574,7 +705,10 @@ class Client extends EventEmitter {
return result
}
- this.queryQueue.push(query)
+ if (this._queryQueue.length > 0) {
+ queryQueueLengthDeprecationNotice()
+ }
+ this._queryQueue.push(query)
this._pulseQueryQueue()
return result
}
@@ -587,19 +721,24 @@ class Client extends EventEmitter {
this.connection.unref()
}
+ getTransactionStatus() {
+ return this._txStatus
+ }
+
end(cb) {
this._ending = true
// if we have never connected, then end is a noop, callback immediately
- if (!this.connection._connecting) {
+ if (!this.connection._connecting || this._ended) {
if (cb) {
cb()
+ return
} else {
return this._Promise.resolve()
}
}
- if (this.activeQuery || !this._queryable) {
+ if (this._getActiveQuery() || !this._queryable) {
// if we have an active query we need to force a disconnect
// on the socket - otherwise a hung query could block end forever
this.connection.stream.destroy()
@@ -615,6 +754,10 @@ class Client extends EventEmitter {
})
}
}
+ get queryQueue() {
+ queryQueueDeprecationNotice()
+ return this._queryQueue
+ }
}
// expose a Query constructor
diff --git a/packages/pg/lib/connection-parameters.js b/packages/pg/lib/connection-parameters.js
index 6a535a820..c153932bb 100644
--- a/packages/pg/lib/connection-parameters.js
+++ b/packages/pg/lib/connection-parameters.js
@@ -1,12 +1,16 @@
'use strict'
-var dns = require('dns')
+const dns = require('dns')
-var defaults = require('./defaults')
+const defaults = require('./defaults')
-var parse = require('pg-connection-string').parse // parses a connection string
+const parse = require('pg-connection-string').parse // parses a connection string
+
+const val = function (key, config, envVar) {
+ if (config[key]) {
+ return config[key]
+ }
-var val = function (key, config, envVar) {
if (envVar === undefined) {
envVar = process.env['PG' + key.toUpperCase()]
} else if (envVar === false) {
@@ -15,10 +19,10 @@ var val = function (key, config, envVar) {
envVar = process.env[envVar]
}
- return config[key] || envVar || defaults[key]
+ return envVar || defaults[key]
}
-var readSSLConfigFromEnvironment = function () {
+const readSSLConfigFromEnvironment = function () {
switch (process.env.PGSSLMODE) {
case 'disable':
return false
@@ -34,12 +38,12 @@ var readSSLConfigFromEnvironment = function () {
}
// Convert arg to a string, surround in single quotes, and escape single quotes and backslashes
-var quoteParamValue = function (value) {
+const quoteParamValue = function (value) {
return "'" + ('' + value).replace(/\\/g, '\\\\').replace(/'/g, "\\'") + "'"
}
-var add = function (params, config, paramName) {
- var value = config[paramName]
+const add = function (params, config, paramName) {
+ const value = config[paramName]
if (value !== undefined && value !== null) {
params.push(paramName + '=' + quoteParamValue(value))
}
@@ -125,7 +129,7 @@ class ConnectionParameters {
}
getLibpqConnectionString(cb) {
- var params = []
+ const params = []
add(params, this, 'user')
add(params, this, 'password')
add(params, this, 'port')
@@ -134,7 +138,7 @@ class ConnectionParameters {
add(params, this, 'connect_timeout')
add(params, this, 'options')
- var ssl = typeof this.ssl === 'object' ? this.ssl : this.ssl ? { sslmode: this.ssl } : {}
+ const ssl = typeof this.ssl === 'object' ? this.ssl : this.ssl ? { sslmode: this.ssl } : {}
add(params, ssl, 'sslmode')
add(params, ssl, 'sslca')
add(params, ssl, 'sslkey')
diff --git a/packages/pg/lib/connection.js b/packages/pg/lib/connection.js
index fe04efb6b..027f93935 100644
--- a/packages/pg/lib/connection.js
+++ b/packages/pg/lib/connection.js
@@ -1,9 +1,9 @@
'use strict'
-var net = require('net')
-var EventEmitter = require('events').EventEmitter
+const EventEmitter = require('events').EventEmitter
const { parse, serialize } = require('pg-protocol')
+const { getStream, getSecureStream } = require('./stream')
const flushBuffer = serialize.flush()
const syncBuffer = serialize.sync()
@@ -14,15 +14,19 @@ class Connection extends EventEmitter {
constructor(config) {
super()
config = config || {}
- this.stream = config.stream || new net.Socket()
+
+ this.stream = config.stream || getStream(config.ssl)
+ if (typeof this.stream === 'function') {
+ this.stream = this.stream(config)
+ }
+
this._keepAlive = config.keepAlive
this._keepAliveInitialDelayMillis = config.keepAliveInitialDelayMillis
- this.lastBuffer = false
this.parsedStatements = {}
this.ssl = config.ssl || false
this._ending = false
this._emitMessage = false
- var self = this
+ const self = this
this.on('newListener', function (eventName) {
if (eventName === 'message') {
self._emitMessage = true
@@ -31,7 +35,7 @@ class Connection extends EventEmitter {
}
connect(port, host) {
- var self = this
+ const self = this
this._connecting = true
this.stream.setNoDelay(true)
@@ -62,7 +66,7 @@ class Connection extends EventEmitter {
}
this.stream.once('data', function (buffer) {
- var responseCode = buffer.toString('utf8')
+ const responseCode = buffer.toString('utf8')
switch (responseCode) {
case 'S': // Server supports SSL connections, continue with a secure connection
break
@@ -74,7 +78,6 @@ class Connection extends EventEmitter {
self.stream.end()
return self.emit('error', new Error('There was an error establishing an SSL connection'))
}
- var tls = require('tls')
const options = {
socket: self.stream,
}
@@ -87,11 +90,12 @@ class Connection extends EventEmitter {
}
}
- if (net.isIP(host) === 0) {
+ const net = require('net')
+ if (net.isIP && net.isIP(host) === 0) {
options.servername = host
}
try {
- self.stream = tls.connect(options)
+ self.stream = getSecureStream(options)
} catch (err) {
return self.emit('error', err)
}
@@ -103,11 +107,8 @@ class Connection extends EventEmitter {
}
attachListeners(stream) {
- stream.on('end', () => {
- this.emit('end')
- })
parse(stream, (msg) => {
- var eventName = msg.name === 'error' ? 'errorMessage' : msg.name
+ const eventName = msg.name === 'error' ? 'errorMessage' : msg.name
if (this._emitMessage) {
this.emit('message', msg)
}
diff --git a/packages/pg/lib/crypto/cert-signatures.js b/packages/pg/lib/crypto/cert-signatures.js
new file mode 100644
index 000000000..8d8df3425
--- /dev/null
+++ b/packages/pg/lib/crypto/cert-signatures.js
@@ -0,0 +1,122 @@
+function x509Error(msg, cert) {
+ return new Error('SASL channel binding: ' + msg + ' when parsing public certificate ' + cert.toString('base64'))
+}
+
+function readASN1Length(data, index) {
+ let length = data[index++]
+ if (length < 0x80) return { length, index }
+
+ const lengthBytes = length & 0x7f
+ if (lengthBytes > 4) throw x509Error('bad length', data)
+
+ length = 0
+ for (let i = 0; i < lengthBytes; i++) {
+ length = (length << 8) | data[index++]
+ }
+
+ return { length, index }
+}
+
+function readASN1OID(data, index) {
+ if (data[index++] !== 0x6) throw x509Error('non-OID data', data) // 6 = OID
+
+ const { length: OIDLength, index: indexAfterOIDLength } = readASN1Length(data, index)
+ index = indexAfterOIDLength
+ const lastIndex = index + OIDLength
+
+ const byte1 = data[index++]
+ let oid = ((byte1 / 40) >> 0) + '.' + (byte1 % 40)
+
+ while (index < lastIndex) {
+ // loop over numbers in OID
+ let value = 0
+ while (index < lastIndex) {
+ // loop over bytes in number
+ const nextByte = data[index++]
+ value = (value << 7) | (nextByte & 0x7f)
+ if (nextByte < 0x80) break
+ }
+ oid += '.' + value
+ }
+
+ return { oid, index }
+}
+
+function expectASN1Seq(data, index) {
+ if (data[index++] !== 0x30) throw x509Error('non-sequence data', data) // 30 = Sequence
+ return readASN1Length(data, index)
+}
+
+function signatureAlgorithmHashFromCertificate(data, index) {
+ // read this thread: https://www.postgresql.org/message-id/17760-b6c61e752ec07060%40postgresql.org
+ if (index === undefined) index = 0
+ index = expectASN1Seq(data, index).index
+ const { length: certInfoLength, index: indexAfterCertInfoLength } = expectASN1Seq(data, index)
+ index = indexAfterCertInfoLength + certInfoLength // skip over certificate info
+ index = expectASN1Seq(data, index).index // skip over signature length field
+ const { oid, index: indexAfterOID } = readASN1OID(data, index)
+ switch (oid) {
+ // RSA
+ case '1.2.840.113549.1.1.4':
+ return 'MD5'
+ case '1.2.840.113549.1.1.5':
+ return 'SHA-1'
+ case '1.2.840.113549.1.1.11':
+ return 'SHA-256'
+ case '1.2.840.113549.1.1.12':
+ return 'SHA-384'
+ case '1.2.840.113549.1.1.13':
+ return 'SHA-512'
+ case '1.2.840.113549.1.1.14':
+ return 'SHA-224'
+ case '1.2.840.113549.1.1.15':
+ return 'SHA512-224'
+ case '1.2.840.113549.1.1.16':
+ return 'SHA512-256'
+ // ECDSA
+ case '1.2.840.10045.4.1':
+ return 'SHA-1'
+ case '1.2.840.10045.4.3.1':
+ return 'SHA-224'
+ case '1.2.840.10045.4.3.2':
+ return 'SHA-256'
+ case '1.2.840.10045.4.3.3':
+ return 'SHA-384'
+ case '1.2.840.10045.4.3.4':
+ return 'SHA-512'
+ // RSASSA-PSS: hash is indicated separately
+ case '1.2.840.113549.1.1.10': {
+ index = indexAfterOID
+ index = expectASN1Seq(data, index).index
+ if (data[index++] !== 0xa0) throw x509Error('non-tag data', data) // a0 = constructed tag 0
+ index = readASN1Length(data, index).index // skip over tag length field
+ index = expectASN1Seq(data, index).index // skip over sequence length field
+ const { oid: hashOID } = readASN1OID(data, index)
+ switch (hashOID) {
+ // standalone hash OIDs
+ case '1.2.840.113549.2.5':
+ return 'MD5'
+ case '1.3.14.3.2.26':
+ return 'SHA-1'
+ case '2.16.840.1.101.3.4.2.1':
+ return 'SHA-256'
+ case '2.16.840.1.101.3.4.2.2':
+ return 'SHA-384'
+ case '2.16.840.1.101.3.4.2.3':
+ return 'SHA-512'
+ }
+ throw x509Error('unknown hash OID ' + hashOID, data)
+ }
+ // Ed25519 -- see https: return//github.com/openssl/openssl/issues/15477
+ case '1.3.101.110':
+ case '1.3.101.112': // ph
+ return 'SHA-512'
+ // Ed448 -- still not in pg 17.2 (if supported, digest would be SHAKE256 x 64 bytes)
+ case '1.3.101.111':
+ case '1.3.101.113': // ph
+ throw x509Error('Ed448 certificate channel binding is not currently supported by Postgres')
+ }
+ throw x509Error('unknown OID ' + oid, data)
+}
+
+module.exports = { signatureAlgorithmHashFromCertificate }
diff --git a/packages/pg/lib/crypto/sasl.js b/packages/pg/lib/crypto/sasl.js
new file mode 100644
index 000000000..ea63b2413
--- /dev/null
+++ b/packages/pg/lib/crypto/sasl.js
@@ -0,0 +1,262 @@
+'use strict'
+const crypto = require('./utils')
+const { signatureAlgorithmHashFromCertificate } = require('./cert-signatures')
+
+// SASLprep (RFC 4013) — minimal in-tree implementation.
+//
+// Per RFC 5802 §2.2, the SCRAM-SHA-256 client must normalize the password via
+// SASLprep before feeding it into PBKDF2. PostgreSQL's server applies the same
+// SASLprep when computing the stored verifier, and libpq does the same client
+// side, so passwords whose NFKC form differs from the raw form
+// would otherwise authenticate against psql/libpq but fail against pg with `28P01`.
+//
+// We deliberately implement only the three steps that change the byte content:
+// 1. RFC 3454 Table C.1.2 (non-ASCII space) → U+0020 SPACE.
+// 2. RFC 3454 Table B.1 (commonly mapped to nothing) → empty.
+// 3. NFKC normalization.
+// We skip the prohibition (RFC 4013 §2.3) and bidi (RFC 3454 §6) checks.
+// libpq is forgiving on those paths and Postgres's own SASLprep matches that
+// leniency for legacy roles, so omitting the rejection logic keeps existing
+// roles working without adding complexity.
+function saslprep(password) {
+ // RFC 3454 Table C.1.2 — non-ASCII space characters, mapped to U+0020.
+ const nonAsciiSpace = /[\u00A0\u1680\u2000-\u200B\u202F\u205F\u3000]/g
+ // RFC 3454 Table B.1 — "commonly mapped to nothing". The set intentionally
+ // contains zero-width joiners and variation selectors — the very characters
+ // ESLint's no-misleading-character-class warns about — because they combine
+ // with their neighbors and the RFC strips them for that reason.
+ // eslint-disable-next-line no-misleading-character-class
+ const mappedToNothing = /[\u00AD\u034F\u1806\u180B\u180C\u180D\u200C\u200D\u2060\uFE00-\uFE0F\uFEFF]/g
+ return password.replace(nonAsciiSpace, ' ').replace(mappedToNothing, '').normalize('NFKC')
+}
+
+const DEFAULT_MAX_SCRAM_ITERATIONS = 100000
+
+function startSession(mechanisms, stream, scramMaxIterations = DEFAULT_MAX_SCRAM_ITERATIONS) {
+ const candidates = ['SCRAM-SHA-256']
+ if (stream) candidates.unshift('SCRAM-SHA-256-PLUS') // higher-priority, so placed first
+
+ const mechanism = candidates.find((candidate) => mechanisms.includes(candidate))
+
+ if (!mechanism) {
+ throw new Error('SASL: Only mechanism(s) ' + candidates.join(' and ') + ' are supported')
+ }
+
+ if (mechanism === 'SCRAM-SHA-256-PLUS' && typeof stream.getPeerCertificate !== 'function') {
+ // this should never happen if we are really talking to a Postgres server
+ throw new Error('SASL: Mechanism SCRAM-SHA-256-PLUS requires a certificate')
+ }
+
+ const clientNonce = crypto.randomBytes(18).toString('base64')
+ const gs2Header = mechanism === 'SCRAM-SHA-256-PLUS' ? 'p=tls-server-end-point' : stream ? 'y' : 'n'
+
+ return {
+ mechanism,
+ clientNonce,
+ response: gs2Header + ',,n=*,r=' + clientNonce,
+ message: 'SASLInitialResponse',
+ scramMaxIterations,
+ }
+}
+
+async function continueSession(session, password, serverData, stream) {
+ if (session.message !== 'SASLInitialResponse') {
+ throw new Error('SASL: Last message was not SASLInitialResponse')
+ }
+ if (typeof password !== 'string') {
+ throw new Error('SASL: SCRAM-SERVER-FIRST-MESSAGE: client password must be a string')
+ }
+ if (password === '') {
+ throw new Error('SASL: SCRAM-SERVER-FIRST-MESSAGE: client password must be a non-empty string')
+ }
+ if (typeof serverData !== 'string') {
+ throw new Error('SASL: SCRAM-SERVER-FIRST-MESSAGE: serverData must be a string')
+ }
+
+ const sv = parseServerFirstMessage(serverData)
+
+ if (!sv.nonce.startsWith(session.clientNonce)) {
+ throw new Error('SASL: SCRAM-SERVER-FIRST-MESSAGE: server nonce does not start with client nonce')
+ } else if (sv.nonce.length === session.clientNonce.length) {
+ throw new Error('SASL: SCRAM-SERVER-FIRST-MESSAGE: server nonce is too short')
+ }
+
+ const scramMaxIterations =
+ typeof session.scramMaxIterations === 'number' ? session.scramMaxIterations : DEFAULT_MAX_SCRAM_ITERATIONS
+ // a value of 0 disables the iteration count check
+ if (scramMaxIterations !== 0 && sv.iteration > scramMaxIterations) {
+ throw new Error(
+ 'SASL: SCRAM-SERVER-FIRST-MESSAGE: iteration count ' +
+ sv.iteration +
+ ' exceeds scramMaxIterations of ' +
+ scramMaxIterations
+ )
+ }
+
+ const clientFirstMessageBare = 'n=*,r=' + session.clientNonce
+ const serverFirstMessage = 'r=' + sv.nonce + ',s=' + sv.salt + ',i=' + sv.iteration
+
+ // without channel binding:
+ let channelBinding = stream ? 'eSws' : 'biws' // 'y,,' or 'n,,', base64-encoded
+
+ // override if channel binding is in use:
+ if (session.mechanism === 'SCRAM-SHA-256-PLUS') {
+ const peerCert = stream.getPeerCertificate().raw
+ let hashName = signatureAlgorithmHashFromCertificate(peerCert)
+ if (hashName === 'MD5' || hashName === 'SHA-1') hashName = 'SHA-256'
+ const certHash = await crypto.hashByName(hashName, peerCert)
+ const bindingData = Buffer.concat([Buffer.from('p=tls-server-end-point,,'), Buffer.from(certHash)])
+ channelBinding = bindingData.toString('base64')
+ }
+
+ const clientFinalMessageWithoutProof = 'c=' + channelBinding + ',r=' + sv.nonce
+ const authMessage = clientFirstMessageBare + ',' + serverFirstMessage + ',' + clientFinalMessageWithoutProof
+
+ const saltBytes = Buffer.from(sv.salt, 'base64')
+ const saltedPassword = await crypto.deriveKey(saslprep(password), saltBytes, sv.iteration)
+ const clientKey = await crypto.hmacSha256(saltedPassword, 'Client Key')
+ const storedKey = await crypto.sha256(clientKey)
+ const clientSignature = await crypto.hmacSha256(storedKey, authMessage)
+ const clientProof = xorBuffers(Buffer.from(clientKey), Buffer.from(clientSignature)).toString('base64')
+ const serverKey = await crypto.hmacSha256(saltedPassword, 'Server Key')
+ const serverSignatureBytes = await crypto.hmacSha256(serverKey, authMessage)
+
+ session.message = 'SASLResponse'
+ session.serverSignature = Buffer.from(serverSignatureBytes).toString('base64')
+ session.response = clientFinalMessageWithoutProof + ',p=' + clientProof
+}
+
+function finalizeSession(session, serverData) {
+ if (session.message !== 'SASLResponse') {
+ throw new Error('SASL: Last message was not SASLResponse')
+ }
+ if (typeof serverData !== 'string') {
+ throw new Error('SASL: SCRAM-SERVER-FINAL-MESSAGE: serverData must be a string')
+ }
+
+ const { serverSignature } = parseServerFinalMessage(serverData)
+
+ if (serverSignature !== session.serverSignature) {
+ throw new Error('SASL: SCRAM-SERVER-FINAL-MESSAGE: server signature does not match')
+ }
+}
+
+/**
+ * printable = %x21-2B / %x2D-7E
+ * ;; Printable ASCII except ",".
+ * ;; Note that any "printable" is also
+ * ;; a valid "value".
+ */
+function isPrintableChars(text) {
+ if (typeof text !== 'string') {
+ throw new TypeError('SASL: text must be a string')
+ }
+ return text
+ .split('')
+ .map((_, i) => text.charCodeAt(i))
+ .every((c) => (c >= 0x21 && c <= 0x2b) || (c >= 0x2d && c <= 0x7e))
+}
+
+/**
+ * base64-char = ALPHA / DIGIT / "/" / "+"
+ *
+ * base64-4 = 4base64-char
+ *
+ * base64-3 = 3base64-char "="
+ *
+ * base64-2 = 2base64-char "=="
+ *
+ * base64 = *base64-4 [base64-3 / base64-2]
+ */
+function isBase64(text) {
+ return /^(?:[a-zA-Z0-9+/]{4})*(?:[a-zA-Z0-9+/]{2}==|[a-zA-Z0-9+/]{3}=)?$/.test(text)
+}
+
+function parseAttributePairs(text) {
+ if (typeof text !== 'string') {
+ throw new TypeError('SASL: attribute pairs text must be a string')
+ }
+
+ return new Map(
+ text.split(',').map((attrValue) => {
+ if (!/^.=/.test(attrValue)) {
+ throw new Error('SASL: Invalid attribute pair entry')
+ }
+ const name = attrValue[0]
+ const value = attrValue.substring(2)
+ return [name, value]
+ })
+ )
+}
+
+function parseServerFirstMessage(data) {
+ const attrPairs = parseAttributePairs(data)
+
+ const nonce = attrPairs.get('r')
+ if (!nonce) {
+ throw new Error('SASL: SCRAM-SERVER-FIRST-MESSAGE: nonce missing')
+ } else if (!isPrintableChars(nonce)) {
+ throw new Error('SASL: SCRAM-SERVER-FIRST-MESSAGE: nonce must only contain printable characters')
+ }
+ const salt = attrPairs.get('s')
+ if (!salt) {
+ throw new Error('SASL: SCRAM-SERVER-FIRST-MESSAGE: salt missing')
+ } else if (!isBase64(salt)) {
+ throw new Error('SASL: SCRAM-SERVER-FIRST-MESSAGE: salt must be base64')
+ }
+ const iterationText = attrPairs.get('i')
+ if (!iterationText) {
+ throw new Error('SASL: SCRAM-SERVER-FIRST-MESSAGE: iteration missing')
+ } else if (!/^[1-9][0-9]*$/.test(iterationText)) {
+ throw new Error('SASL: SCRAM-SERVER-FIRST-MESSAGE: invalid iteration count')
+ }
+ const iteration = parseInt(iterationText, 10)
+
+ return {
+ nonce,
+ salt,
+ iteration,
+ }
+}
+
+function parseServerFinalMessage(serverData) {
+ const attrPairs = parseAttributePairs(serverData)
+ const error = attrPairs.get('e')
+ const serverSignature = attrPairs.get('v')
+
+ if (error) {
+ throw new Error(`SASL: SCRAM-SERVER-FINAL-MESSAGE: server returned error: "${error}"`)
+ }
+
+ if (!serverSignature) {
+ throw new Error('SASL: SCRAM-SERVER-FINAL-MESSAGE: server signature is missing')
+ } else if (!isBase64(serverSignature)) {
+ throw new Error('SASL: SCRAM-SERVER-FINAL-MESSAGE: server signature must be base64')
+ }
+ return {
+ serverSignature,
+ }
+}
+
+function xorBuffers(a, b) {
+ if (!Buffer.isBuffer(a)) {
+ throw new TypeError('first argument must be a Buffer')
+ }
+ if (!Buffer.isBuffer(b)) {
+ throw new TypeError('second argument must be a Buffer')
+ }
+ if (a.length !== b.length) {
+ throw new Error('Buffer lengths must match')
+ }
+ if (a.length === 0) {
+ throw new Error('Buffers cannot be empty')
+ }
+ return Buffer.from(a.map((_, i) => a[i] ^ b[i]))
+}
+
+module.exports = {
+ startSession,
+ continueSession,
+ finalizeSession,
+ DEFAULT_MAX_SCRAM_ITERATIONS,
+}
diff --git a/packages/pg/lib/crypto/utils.js b/packages/pg/lib/crypto/utils.js
new file mode 100644
index 000000000..65aa4a182
--- /dev/null
+++ b/packages/pg/lib/crypto/utils.js
@@ -0,0 +1,89 @@
+const nodeCrypto = require('crypto')
+
+module.exports = {
+ postgresMd5PasswordHash,
+ randomBytes,
+ deriveKey,
+ sha256,
+ hashByName,
+ hmacSha256,
+ md5,
+}
+
+/**
+ * The Web Crypto API - grabbed from the Node.js library or the global
+ * @type Crypto
+ */
+// eslint-disable-next-line no-undef
+const webCrypto = nodeCrypto.webcrypto || globalThis.crypto
+/**
+ * The SubtleCrypto API for low level crypto operations.
+ * @type SubtleCrypto
+ */
+const subtleCrypto = webCrypto.subtle
+const textEncoder = new TextEncoder()
+
+/**
+ *
+ * @param {*} length
+ * @returns
+ */
+function randomBytes(length) {
+ return webCrypto.getRandomValues(Buffer.alloc(length))
+}
+
+async function md5(string) {
+ try {
+ return nodeCrypto.createHash('md5').update(string, 'utf-8').digest('hex')
+ } catch (e) {
+ // `createHash()` failed so we are probably not in Node.js, use the WebCrypto API instead.
+ // Note that the MD5 algorithm on WebCrypto is not available in Node.js.
+ // This is why we cannot just use WebCrypto in all environments.
+ const data = typeof string === 'string' ? textEncoder.encode(string) : string
+ const hash = await subtleCrypto.digest('MD5', data)
+ return Array.from(new Uint8Array(hash))
+ .map((b) => b.toString(16).padStart(2, '0'))
+ .join('')
+ }
+}
+
+// See AuthenticationMD5Password at https://www.postgresql.org/docs/current/static/protocol-flow.html
+async function postgresMd5PasswordHash(user, password, salt) {
+ const inner = await md5(password + user)
+ const outer = await md5(Buffer.concat([Buffer.from(inner), salt]))
+ return 'md5' + outer
+}
+
+/**
+ * Create a SHA-256 digest of the given data
+ * @param {Buffer} data
+ */
+async function sha256(text) {
+ return await subtleCrypto.digest('SHA-256', text)
+}
+
+async function hashByName(hashName, text) {
+ return await subtleCrypto.digest(hashName, text)
+}
+
+/**
+ * Sign the message with the given key
+ * @param {ArrayBuffer} keyBuffer
+ * @param {string} msg
+ */
+async function hmacSha256(keyBuffer, msg) {
+ const key = await subtleCrypto.importKey('raw', keyBuffer, { name: 'HMAC', hash: 'SHA-256' }, false, ['sign'])
+ return await subtleCrypto.sign('HMAC', key, textEncoder.encode(msg))
+}
+
+/**
+ * Derive a key from the password and salt
+ * @param {string} password
+ * @param {Uint8Array} salt
+ * @param {number} iterations
+ */
+async function deriveKey(password, salt, iterations) {
+ const key = await subtleCrypto.importKey('raw', textEncoder.encode(password), 'PBKDF2', false, ['deriveBits'])
+ const params = { name: 'PBKDF2', hash: 'SHA-256', salt: salt, iterations: iterations }
+ return await subtleCrypto.deriveBits(params, key, 32 * 8, ['deriveBits'])
+}
diff --git a/packages/pg/lib/defaults.js b/packages/pg/lib/defaults.js
index 5c5d997d2..673696f79 100644
--- a/packages/pg/lib/defaults.js
+++ b/packages/pg/lib/defaults.js
@@ -1,11 +1,18 @@
'use strict'
+let user
+try {
+ user = process.platform === 'win32' ? process.env.USERNAME : process.env.USER
+} catch {
+ // ignore, e.g., Deno without --allow-env
+}
+
module.exports = {
// database host. defaults to localhost
host: 'localhost',
// database user's name
- user: process.platform === 'win32' ? process.env.USERNAME : process.env.USER,
+ user,
// name of database to connect
database: undefined,
@@ -72,10 +79,10 @@ module.exports = {
keepalives_idle: 0,
}
-var pgTypes = require('pg-types')
+const pgTypes = require('pg-types')
// save default parsers
-var parseBigInteger = pgTypes.getTypeParser(20, 'text')
-var parseBigIntegerArray = pgTypes.getTypeParser(1016, 'text')
+const parseBigInteger = pgTypes.getTypeParser(20, 'text')
+const parseBigIntegerArray = pgTypes.getTypeParser(1016, 'text')
// parse int8 so you can get your count values as actual numbers
module.exports.__defineSetter__('parseInt8', function (val) {
diff --git a/packages/pg/lib/index.js b/packages/pg/lib/index.js
index 7f02abab5..e8b746149 100644
--- a/packages/pg/lib/index.js
+++ b/packages/pg/lib/index.js
@@ -1,10 +1,14 @@
'use strict'
-var Client = require('./client')
-var defaults = require('./defaults')
-var Connection = require('./connection')
-var Pool = require('pg-pool')
+const Client = require('./client')
+const defaults = require('./defaults')
+const Connection = require('./connection')
+const Result = require('./result')
+const utils = require('./utils')
+const Pool = require('pg-pool')
+const TypeOverrides = require('./type-overrides')
const { DatabaseError } = require('pg-protocol')
+const { escapeIdentifier, escapeLiteral } = require('./utils')
const poolFactory = (Client) => {
return class BoundPool extends Pool {
@@ -14,7 +18,7 @@ const poolFactory = (Client) => {
}
}
-var PG = function (clientConstructor) {
+const PG = function (clientConstructor) {
this.defaults = defaults
this.Client = clientConstructor
this.Query = this.Client.Query
@@ -23,33 +27,47 @@ var PG = function (clientConstructor) {
this.Connection = Connection
this.types = require('pg-types')
this.DatabaseError = DatabaseError
+ this.TypeOverrides = TypeOverrides
+ this.escapeIdentifier = escapeIdentifier
+ this.escapeLiteral = escapeLiteral
+ this.Result = Result
+ this.utils = utils
}
-if (typeof process.env.NODE_PG_FORCE_NATIVE !== 'undefined') {
- module.exports = new PG(require('./native'))
-} else {
- module.exports = new PG(Client)
-
- // lazy require native module...the native module may not have installed
- Object.defineProperty(module.exports, 'native', {
- configurable: true,
- enumerable: false,
- get() {
- var native = null
- try {
- native = new PG(require('./native'))
- } catch (err) {
- if (err.code !== 'MODULE_NOT_FOUND') {
- throw err
- }
- }
+let clientConstructor = Client
- // overwrite module.exports.native so that getter is never called again
- Object.defineProperty(module.exports, 'native', {
- value: native,
- })
+let forceNative = false
+try {
+ forceNative = !!process.env.NODE_PG_FORCE_NATIVE
+} catch {
+ // ignore, e.g., Deno without --allow-env
+}
- return native
- },
- })
+if (forceNative) {
+ clientConstructor = require('./native')
}
+
+module.exports = new PG(clientConstructor)
+
+// lazy require native module...the native module may not have installed
+Object.defineProperty(module.exports, 'native', {
+ configurable: true,
+ enumerable: false,
+ get() {
+ let native = null
+ try {
+ native = new PG(require('./native'))
+ } catch (err) {
+ if (err.code !== 'MODULE_NOT_FOUND') {
+ throw err
+ }
+ }
+
+ // overwrite module.exports.native so that getter is never called again
+ Object.defineProperty(module.exports, 'native', {
+ value: native,
+ })
+
+ return native
+ },
+})
diff --git a/packages/pg/lib/native/client.js b/packages/pg/lib/native/client.js
index 58fc4aeaa..fa17d9f65 100644
--- a/packages/pg/lib/native/client.js
+++ b/packages/pg/lib/native/client.js
@@ -1,15 +1,26 @@
-'use strict'
-
+const nodeUtils = require('util')
// eslint-disable-next-line
-var Native = require('pg-native')
-var TypeOverrides = require('../type-overrides')
-var EventEmitter = require('events').EventEmitter
-var util = require('util')
-var ConnectionParameters = require('../connection-parameters')
+var Native
+// eslint-disable-next-line no-useless-catch
+try {
+ // Wrap this `require()` in a try-catch to avoid upstream bundlers from complaining that this might not be available since it is an optional import
+ Native = require('pg-native')
+} catch (e) {
+ throw e
+}
+const TypeOverrides = require('../type-overrides')
+const EventEmitter = require('events').EventEmitter
+const util = require('util')
+const ConnectionParameters = require('../connection-parameters')
-var NativeQuery = require('./query')
+const NativeQuery = require('./query')
-var Client = (module.exports = function (config) {
+const queryQueueLengthDeprecationNotice = nodeUtils.deprecate(
+ () => {},
+ 'Calling client.query() when the client is already executing a query is deprecated and will be removed in pg@9.0. Use async/await or an external async flow control mechanism instead.'
+)
+
+const Client = (module.exports = function (config) {
EventEmitter.call(this)
config = config || {}
@@ -28,7 +39,8 @@ var Client = (module.exports = function (config) {
// keep these on the object for legacy reasons
// for the time being. TODO: deprecate all this jazz
- var cp = (this.connectionParameters = new ConnectionParameters(config))
+ const cp = (this.connectionParameters = new ConnectionParameters(config))
+ if (config.nativeConnectionString) cp.nativeConnectionString = config.nativeConnectionString
this.user = cp.user
// "hiding" the password so it doesn't show up in stack traces
@@ -72,7 +84,7 @@ Client.prototype._errorAllQueries = function (err) {
// pass an optional callback to be called once connected
// or with an error if there was a connection error
Client.prototype._connect = function (cb) {
- var self = this
+ const self = this
if (this._connecting) {
process.nextTick(() => cb(new Error('Client has already been connected. You cannot reuse a client.')))
@@ -82,6 +94,7 @@ Client.prototype._connect = function (cb) {
this._connecting = true
this.connectionParameters.getLibpqConnectionString(function (err, conString) {
+ if (self.connectionParameters.nativeConnectionString) conString = self.connectionParameters.nativeConnectionString
if (err) return cb(err)
self.native.connect(conString, function (err) {
if (err) {
@@ -110,7 +123,7 @@ Client.prototype._connect = function (cb) {
self.emit('connect')
self._pulseQueryQueue(true)
- cb()
+ cb(null, this)
})
})
}
@@ -126,7 +139,7 @@ Client.prototype.connect = function (callback) {
if (error) {
reject(error)
} else {
- resolve()
+ resolve(this)
}
})
})
@@ -143,11 +156,11 @@ Client.prototype.connect = function (callback) {
// optional string rowMode = 'array' for an array of results
// }
Client.prototype.query = function (config, values, callback) {
- var query
- var result
- var readTimeout
- var readTimeoutTimer
- var queryCallback
+ let query
+ let result
+ let readTimeout
+ let readTimeoutTimer
+ let queryCallback
if (config === null || config === undefined) {
throw new TypeError('Client was passed a null or undefined query')
@@ -159,23 +172,26 @@ Client.prototype.query = function (config, values, callback) {
config.callback = values
}
} else {
- readTimeout = this.connectionParameters.query_timeout
+ readTimeout = config.query_timeout || this.connectionParameters.query_timeout
query = new NativeQuery(config, values, callback)
if (!query.callback) {
let resolveOut, rejectOut
result = new this._Promise((resolve, reject) => {
resolveOut = resolve
rejectOut = reject
+ }).catch((err) => {
+ Error.captureStackTrace(err)
+ throw err
})
query.callback = (err, res) => (err ? rejectOut(err) : resolveOut(res))
}
}
if (readTimeout) {
- queryCallback = query.callback
+ queryCallback = query.callback || (() => {})
readTimeoutTimer = setTimeout(() => {
- var error = new Error('Query read timeout')
+ const error = new Error('Query read timeout')
process.nextTick(() => {
query.handleError(error, this.connection)
@@ -188,7 +204,7 @@ Client.prototype.query = function (config, values, callback) {
query.callback = () => {}
// Remove from queue
- var index = this._queryQueue.indexOf(query)
+ const index = this._queryQueue.indexOf(query)
if (index > -1) {
this._queryQueue.splice(index, 1)
}
@@ -218,6 +234,10 @@ Client.prototype.query = function (config, values, callback) {
return result
}
+ if (this._queryQueue.length > 0) {
+ queryQueueLengthDeprecationNotice()
+ }
+
this._queryQueue.push(query)
this._pulseQueryQueue()
return result
@@ -225,20 +245,25 @@ Client.prototype.query = function (config, values, callback) {
// disconnect from the backend server
Client.prototype.end = function (cb) {
- var self = this
+ const self = this
this._ending = true
- if (!this._connected) {
- this.once('connect', this.end.bind(this, cb))
+ if (this._connecting && !this._connected) {
+ this.once('connect', () => {
+ this.end(() => {})
+ })
}
- var result
+ let result
if (!cb) {
result = new this._Promise(function (resolve, reject) {
cb = (err) => (err ? reject(err) : resolve())
})
}
+
this.native.end(function () {
+ self._connected = false
+
self._errorAllQueries(new Error('Connection terminated'))
process.nextTick(() => {
@@ -260,7 +285,7 @@ Client.prototype._pulseQueryQueue = function (initialConnection) {
if (this._hasActiveQuery()) {
return
}
- var query = this._queryQueue.shift()
+ const query = this._queryQueue.shift()
if (!query) {
if (!initialConnection) {
this.emit('drain')
@@ -269,7 +294,7 @@ Client.prototype._pulseQueryQueue = function (initialConnection) {
}
this._activeQuery = query
query.submit(this)
- var self = this
+ const self = this
query.once('_done', function () {
self._pulseQueryQueue()
})
@@ -294,3 +319,11 @@ Client.prototype.setTypeParser = function (oid, format, parseFn) {
Client.prototype.getTypeParser = function (oid, format) {
return this._types.getTypeParser(oid, format)
}
+
+Client.prototype.isConnected = function () {
+ return this._connected
+}
+
+Client.prototype.getTransactionStatus = function () {
+ return this.native.getTransactionStatus()
+}
diff --git a/packages/pg/lib/native/query.js b/packages/pg/lib/native/query.js
index d06db43ca..e02294f63 100644
--- a/packages/pg/lib/native/query.js
+++ b/packages/pg/lib/native/query.js
@@ -1,15 +1,16 @@
'use strict'
-var EventEmitter = require('events').EventEmitter
-var util = require('util')
-var utils = require('../utils')
+const EventEmitter = require('events').EventEmitter
+const util = require('util')
+const utils = require('../utils')
-var NativeQuery = (module.exports = function (config, values, callback) {
+const NativeQuery = (module.exports = function (config, values, callback) {
EventEmitter.call(this)
config = utils.normalizeQueryConfig(config, values, callback)
this.text = config.text
this.values = config.values
this.name = config.name
+ this.queryMode = config.queryMode
this.callback = config.callback
this.state = 'new'
this._arrayMode = config.rowMode === 'array'
@@ -18,7 +19,7 @@ var NativeQuery = (module.exports = function (config, values, callback) {
// then emit them as they come in
// without setting singleRowMode to true
// this has almost no meaning because libpq
- // reads all rows into memory befor returning any
+ // reads all rows into memory before returning any
this._emitRowEvents = false
this.on(
'newListener',
@@ -30,8 +31,7 @@ var NativeQuery = (module.exports = function (config, values, callback) {
util.inherits(NativeQuery, EventEmitter)
-var errorFieldMap = {
- /* eslint-disable quote-props */
+const errorFieldMap = {
sqlState: 'code',
statementPosition: 'position',
messagePrimary: 'message',
@@ -48,10 +48,10 @@ var errorFieldMap = {
NativeQuery.prototype.handleError = function (err) {
// copy pq error fields into the error object
- var fields = this.native.pq.resultErrorFields()
+ const fields = this.native.pq.resultErrorFields()
if (fields) {
- for (var key in fields) {
- var normalizedFieldName = errorFieldMap[key] || key
+ for (const key in fields) {
+ const normalizedFieldName = errorFieldMap[key] || key
err[normalizedFieldName] = fields[key]
}
}
@@ -84,11 +84,11 @@ NativeQuery.prototype._getPromise = function () {
NativeQuery.prototype.submit = function (client) {
this.state = 'running'
- var self = this
+ const self = this
this.native = client.native
client.native.arrayMode = this._arrayMode
- var after = function (err, rows, results) {
+ let after = function (err, rows, results) {
client.native.arrayMode = false
setImmediate(function () {
self.emit('_done')
@@ -129,13 +129,11 @@ NativeQuery.prototype.submit = function (client) {
// named query
if (this.name) {
if (this.name.length > 63) {
- /* eslint-disable no-console */
console.error('Warning! Postgres only supports 63 characters for query names.')
console.error('You supplied %s (%s)', this.name, this.name.length)
console.error('This can cause conflicts and silent errors executing queries')
- /* eslint-enable no-console */
}
- var values = (this.values || []).map(utils.prepareValue)
+ const values = (this.values || []).map(utils.prepareValue)
// check if the client has already executed this named query
// if so...just execute it again - skip the planning phase
@@ -157,8 +155,10 @@ NativeQuery.prototype.submit = function (client) {
const err = new Error('Query values must be an array')
return after(err)
}
- var vals = this.values.map(utils.prepareValue)
+ const vals = this.values.map(utils.prepareValue)
client.native.query(this.text, vals, after)
+ } else if (this.queryMode === 'extended') {
+ client.native.query(this.text, [], after)
} else {
client.native.query(this.text, after)
}
diff --git a/packages/pg/lib/query.js b/packages/pg/lib/query.js
index 6655a0e69..64aab5ff2 100644
--- a/packages/pg/lib/query.js
+++ b/packages/pg/lib/query.js
@@ -16,6 +16,7 @@ class Query extends EventEmitter {
this.rows = config.rows
this.types = config.types
this.name = config.name
+ this.queryMode = config.queryMode
this.binary = config.binary
// use unique portal name each time
this.portal = config.portal || ''
@@ -28,12 +29,14 @@ class Query extends EventEmitter {
// potential for multiple results
this._results = this._result
- this.isPreparedStatement = false
this._canceledDueToError = false
- this._promise = null
}
requiresPreparation() {
+ if (this.queryMode === 'extended') {
+ return true
+ }
+
// named queries must always be prepared
if (this.name) {
return true
@@ -62,7 +65,7 @@ class Query extends EventEmitter {
if (!Array.isArray(this._results)) {
this._results = [this._result]
}
- this._result = new Result(this._rowMode, this.types)
+ this._result = new Result(this._rowMode, this._result._types)
this._results.push(this._result)
}
}
@@ -109,7 +112,7 @@ class Query extends EventEmitter {
// if a named prepared statement is created with empty query text
// the backend will send an emptyQuery message but *not* a command complete message
// since we pipeline sync immediately after execute we don't need to do anything here
- // unless we have rows specified, in which case we did not pipeline the intial sync call
+ // unless we have rows specified, in which case we did not pipeline the initial sync call
handleEmptyQuery(connection) {
if (this.rows) {
connection.sync()
@@ -137,8 +140,7 @@ class Query extends EventEmitter {
if (this.callback) {
try {
this.callback(null, this._results)
- }
- catch(err) {
+ } catch (err) {
process.nextTick(() => {
throw err
})
@@ -159,7 +161,21 @@ class Query extends EventEmitter {
return new Error('Query values must be an array')
}
if (this.requiresPreparation()) {
- this.prepare(connection)
+ // If we're using the extended query protocol we fire off several separate commands
+ // to the backend. On some versions of node & some operating system versions
+ // the network stack writes each message separately instead of buffering them together
+ // causing the client & network to send more slowly. Corking & uncorking the stream
+ // allows node to buffer up the messages internally before sending them all off at once.
+ // note: we're checking for existence of cork/uncork because some versions of streams
+ // might not have this (cloudflare?)
+ connection.stream.cork && connection.stream.cork()
+ try {
+ this.prepare(connection)
+ } finally {
+ // while unlikely for this.prepare to throw, if it does & we don't uncork this stream
+ // this client becomes unresponsive, so put in finally block "just in case"
+ connection.stream.uncork && connection.stream.uncork()
+ }
} else {
connection.query(this.text)
}
@@ -191,10 +207,6 @@ class Query extends EventEmitter {
// http://developer.postgresql.org/pgdocs/postgres/protocol-flow.html#PROTOCOL-FLOW-EXT-QUERY
prepare(connection) {
- // prepared statements need sync to be called after each command
- // complete or when an error is encountered
- this.isPreparedStatement = true
-
// TODO refactor this poor encapsulation
if (!this.hasBeenParsed(connection)) {
connection.parse({
@@ -232,7 +244,6 @@ class Query extends EventEmitter {
connection.sendCopyFail('No source stream defined')
}
- // eslint-disable-next-line no-unused-vars
handleCopyData(msg, connection) {
// noop
}
diff --git a/packages/pg/lib/result.js b/packages/pg/lib/result.js
index 350609743..329fbf9fc 100644
--- a/packages/pg/lib/result.js
+++ b/packages/pg/lib/result.js
@@ -1,8 +1,8 @@
'use strict'
-var types = require('pg-types')
+const types = require('pg-types')
-var matchRegexp = /^([A-Za-z]+)(?: (\d+))?(?: (\d+))?/
+const matchRegexp = /^([A-Za-z]+)(?: (\d+))?(?: (\d+))?/
// result object returned from query
// in the 'end' event and also
@@ -21,11 +21,12 @@ class Result {
if (this.rowAsArray) {
this.parseRow = this._parseRowAsArray
}
+ this._prebuiltEmptyResultObject = null
}
// adds a command complete message
addCommandComplete(msg) {
- var match
+ let match
if (msg.text) {
// pure javascript
match = matchRegexp.exec(msg.text)
@@ -36,7 +37,7 @@ class Result {
if (match) {
this.command = match[1]
if (match[3]) {
- // COMMMAND OID ROWS
+ // COMMAND OID ROWS
this.oid = parseInt(match[2], 10)
this.rowCount = parseInt(match[3], 10)
} else if (match[2]) {
@@ -47,9 +48,9 @@ class Result {
}
_parseRowAsArray(rowData) {
- var row = new Array(rowData.length)
- for (var i = 0, len = rowData.length; i < len; i++) {
- var rawValue = rowData[i]
+ const row = new Array(rowData.length)
+ for (let i = 0, len = rowData.length; i < len; i++) {
+ const rawValue = rowData[i]
if (rawValue !== null) {
row[i] = this._parsers[i](rawValue)
} else {
@@ -60,12 +61,13 @@ class Result {
}
parseRow(rowData) {
- var row = {}
- for (var i = 0, len = rowData.length; i < len; i++) {
- var rawValue = rowData[i]
- var field = this.fields[i].name
+ const row = { ...this._prebuiltEmptyResultObject }
+ for (let i = 0, len = rowData.length; i < len; i++) {
+ const rawValue = rowData[i]
+ const field = this.fields[i].name
if (rawValue !== null) {
- row[field] = this._parsers[i](rawValue)
+ const v = this.fields[i].format === 'binary' ? Buffer.from(rawValue) : rawValue
+ row[field] = this._parsers[i](v)
} else {
row[field] = null
}
@@ -86,14 +88,21 @@ class Result {
if (this.fields.length) {
this._parsers = new Array(fieldDescriptions.length)
}
- for (var i = 0; i < fieldDescriptions.length; i++) {
- var desc = fieldDescriptions[i]
+
+ const row = Object.create(null)
+
+ for (let i = 0; i < fieldDescriptions.length; i++) {
+ const desc = fieldDescriptions[i]
+ row[desc.name] = null
+
if (this._types) {
this._parsers[i] = this._types.getTypeParser(desc.dataTypeID, desc.format || 'text')
} else {
this._parsers[i] = types.getTypeParser(desc.dataTypeID, desc.format || 'text')
}
}
+
+ this._prebuiltEmptyResultObject = { ...row }
}
}
diff --git a/packages/pg/lib/sasl.js b/packages/pg/lib/sasl.js
deleted file mode 100644
index fb703b270..000000000
--- a/packages/pg/lib/sasl.js
+++ /dev/null
@@ -1,198 +0,0 @@
-'use strict'
-const crypto = require('crypto')
-
-function startSession(mechanisms) {
- if (mechanisms.indexOf('SCRAM-SHA-256') === -1) {
- throw new Error('SASL: Only mechanism SCRAM-SHA-256 is currently supported')
- }
-
- const clientNonce = crypto.randomBytes(18).toString('base64')
-
- return {
- mechanism: 'SCRAM-SHA-256',
- clientNonce,
- response: 'n,,n=*,r=' + clientNonce,
- message: 'SASLInitialResponse',
- }
-}
-
-function continueSession(session, password, serverData) {
- if (session.message !== 'SASLInitialResponse') {
- throw new Error('SASL: Last message was not SASLInitialResponse')
- }
- if (typeof password !== 'string') {
- throw new Error('SASL: SCRAM-SERVER-FIRST-MESSAGE: client password must be a string')
- }
- if (typeof serverData !== 'string') {
- throw new Error('SASL: SCRAM-SERVER-FIRST-MESSAGE: serverData must be a string')
- }
-
- const sv = parseServerFirstMessage(serverData)
-
- if (!sv.nonce.startsWith(session.clientNonce)) {
- throw new Error('SASL: SCRAM-SERVER-FIRST-MESSAGE: server nonce does not start with client nonce')
- } else if (sv.nonce.length === session.clientNonce.length) {
- throw new Error('SASL: SCRAM-SERVER-FIRST-MESSAGE: server nonce is too short')
- }
-
- var saltBytes = Buffer.from(sv.salt, 'base64')
-
- var saltedPassword = crypto.pbkdf2Sync(password, saltBytes, sv.iteration, 32, 'sha256')
-
- var clientKey = hmacSha256(saltedPassword, 'Client Key')
- var storedKey = sha256(clientKey)
-
- var clientFirstMessageBare = 'n=*,r=' + session.clientNonce
- var serverFirstMessage = 'r=' + sv.nonce + ',s=' + sv.salt + ',i=' + sv.iteration
-
- var clientFinalMessageWithoutProof = 'c=biws,r=' + sv.nonce
-
- var authMessage = clientFirstMessageBare + ',' + serverFirstMessage + ',' + clientFinalMessageWithoutProof
-
- var clientSignature = hmacSha256(storedKey, authMessage)
- var clientProofBytes = xorBuffers(clientKey, clientSignature)
- var clientProof = clientProofBytes.toString('base64')
-
- var serverKey = hmacSha256(saltedPassword, 'Server Key')
- var serverSignatureBytes = hmacSha256(serverKey, authMessage)
-
- session.message = 'SASLResponse'
- session.serverSignature = serverSignatureBytes.toString('base64')
- session.response = clientFinalMessageWithoutProof + ',p=' + clientProof
-}
-
-function finalizeSession(session, serverData) {
- if (session.message !== 'SASLResponse') {
- throw new Error('SASL: Last message was not SASLResponse')
- }
- if (typeof serverData !== 'string') {
- throw new Error('SASL: SCRAM-SERVER-FINAL-MESSAGE: serverData must be a string')
- }
-
- const { serverSignature } = parseServerFinalMessage(serverData)
-
- if (serverSignature !== session.serverSignature) {
- throw new Error('SASL: SCRAM-SERVER-FINAL-MESSAGE: server signature does not match')
- }
-}
-
-/**
- * printable = %x21-2B / %x2D-7E
- * ;; Printable ASCII except ",".
- * ;; Note that any "printable" is also
- * ;; a valid "value".
- */
-function isPrintableChars(text) {
- if (typeof text !== 'string') {
- throw new TypeError('SASL: text must be a string')
- }
- return text
- .split('')
- .map((_, i) => text.charCodeAt(i))
- .every((c) => (c >= 0x21 && c <= 0x2b) || (c >= 0x2d && c <= 0x7e))
-}
-
-/**
- * base64-char = ALPHA / DIGIT / "/" / "+"
- *
- * base64-4 = 4base64-char
- *
- * base64-3 = 3base64-char "="
- *
- * base64-2 = 2base64-char "=="
- *
- * base64 = *base64-4 [base64-3 / base64-2]
- */
-function isBase64(text) {
- return /^(?:[a-zA-Z0-9+/]{4})*(?:[a-zA-Z0-9+/]{2}==|[a-zA-Z0-9+/]{3}=)?$/.test(text)
-}
-
-function parseAttributePairs(text) {
- if (typeof text !== 'string') {
- throw new TypeError('SASL: attribute pairs text must be a string')
- }
-
- return new Map(
- text.split(',').map((attrValue) => {
- if (!/^.=/.test(attrValue)) {
- throw new Error('SASL: Invalid attribute pair entry')
- }
- const name = attrValue[0]
- const value = attrValue.substring(2)
- return [name, value]
- })
- )
-}
-
-function parseServerFirstMessage(data) {
- const attrPairs = parseAttributePairs(data)
-
- const nonce = attrPairs.get('r')
- if (!nonce) {
- throw new Error('SASL: SCRAM-SERVER-FIRST-MESSAGE: nonce missing')
- } else if (!isPrintableChars(nonce)) {
- throw new Error('SASL: SCRAM-SERVER-FIRST-MESSAGE: nonce must only contain printable characters')
- }
- const salt = attrPairs.get('s')
- if (!salt) {
- throw new Error('SASL: SCRAM-SERVER-FIRST-MESSAGE: salt missing')
- } else if (!isBase64(salt)) {
- throw new Error('SASL: SCRAM-SERVER-FIRST-MESSAGE: salt must be base64')
- }
- const iterationText = attrPairs.get('i')
- if (!iterationText) {
- throw new Error('SASL: SCRAM-SERVER-FIRST-MESSAGE: iteration missing')
- } else if (!/^[1-9][0-9]*$/.test(iterationText)) {
- throw new Error('SASL: SCRAM-SERVER-FIRST-MESSAGE: invalid iteration count')
- }
- const iteration = parseInt(iterationText, 10)
-
- return {
- nonce,
- salt,
- iteration,
- }
-}
-
-function parseServerFinalMessage(serverData) {
- const attrPairs = parseAttributePairs(serverData)
- const serverSignature = attrPairs.get('v')
- if (!serverSignature) {
- throw new Error('SASL: SCRAM-SERVER-FINAL-MESSAGE: server signature is missing')
- } else if (!isBase64(serverSignature)) {
- throw new Error('SASL: SCRAM-SERVER-FINAL-MESSAGE: server signature must be base64')
- }
- return {
- serverSignature,
- }
-}
-
-function xorBuffers(a, b) {
- if (!Buffer.isBuffer(a)) {
- throw new TypeError('first argument must be a Buffer')
- }
- if (!Buffer.isBuffer(b)) {
- throw new TypeError('second argument must be a Buffer')
- }
- if (a.length !== b.length) {
- throw new Error('Buffer lengths must match')
- }
- if (a.length === 0) {
- throw new Error('Buffers cannot be empty')
- }
- return Buffer.from(a.map((_, i) => a[i] ^ b[i]))
-}
-
-function sha256(text) {
- return crypto.createHash('sha256').update(text).digest()
-}
-
-function hmacSha256(key, msg) {
- return crypto.createHmac('sha256', key).update(msg).digest()
-}
-
-module.exports = {
- startSession,
- continueSession,
- finalizeSession,
-}
diff --git a/packages/pg/lib/stream.js b/packages/pg/lib/stream.js
new file mode 100644
index 000000000..edc301833
--- /dev/null
+++ b/packages/pg/lib/stream.js
@@ -0,0 +1,83 @@
+const { getStream, getSecureStream } = getStreamFuncs()
+
+module.exports = {
+ /**
+ * Get a socket stream compatible with the current runtime environment.
+ * @returns {Duplex}
+ */
+ getStream,
+ /**
+ * Get a TLS secured socket, compatible with the current environment,
+ * using the socket and other settings given in `options`.
+ * @returns {Duplex}
+ */
+ getSecureStream,
+}
+
+/**
+ * The stream functions that work in Node.js
+ */
+function getNodejsStreamFuncs() {
+ function getStream(ssl) {
+ const net = require('net')
+ return new net.Socket()
+ }
+
+ function getSecureStream(options) {
+ const tls = require('tls')
+ return tls.connect(options)
+ }
+ return {
+ getStream,
+ getSecureStream,
+ }
+}
+
+/**
+ * The stream functions that work in Cloudflare Workers
+ */
+function getCloudflareStreamFuncs() {
+ function getStream(ssl) {
+ const { CloudflareSocket } = require('pg-cloudflare')
+ return new CloudflareSocket(ssl)
+ }
+
+ function getSecureStream(options) {
+ options.socket.startTls(options)
+ return options.socket
+ }
+ return {
+ getStream,
+ getSecureStream,
+ }
+}
+
+/**
+ * Are we running in a Cloudflare Worker?
+ *
+ * @returns true if the code is currently running inside a Cloudflare Worker.
+ */
+function isCloudflareRuntime() {
+ // Since 2022-03-21 the `global_navigator` compatibility flag is on for Cloudflare Workers
+ // which means that `navigator.userAgent` will be defined.
+ // eslint-disable-next-line no-undef
+ if (typeof navigator === 'object' && navigator !== null && typeof navigator.userAgent === 'string') {
+ // eslint-disable-next-line no-undef
+ return navigator.userAgent === 'Cloudflare-Workers'
+ }
+ // In case `navigator` or `navigator.userAgent` is not defined then try a more sneaky approach
+ if (typeof Response === 'function') {
+ const resp = new Response(null, { cf: { thing: true } })
+ if (typeof resp.cf === 'object' && resp.cf !== null && resp.cf.thing) {
+ return true
+ }
+ }
+ return false
+}
+
+function getStreamFuncs() {
+ if (isCloudflareRuntime()) {
+ return getCloudflareStreamFuncs()
+ }
+ return getNodejsStreamFuncs()
+}
diff --git a/packages/pg/lib/type-overrides.js b/packages/pg/lib/type-overrides.js
index 66693482b..9d219e525 100644
--- a/packages/pg/lib/type-overrides.js
+++ b/packages/pg/lib/type-overrides.js
@@ -1,6 +1,6 @@
'use strict'
-var types = require('pg-types')
+const types = require('pg-types')
function TypeOverrides(userTypes) {
this._types = userTypes || types
diff --git a/packages/pg/lib/utils.js b/packages/pg/lib/utils.js
index d63fe68f1..638b43970 100644
--- a/packages/pg/lib/utils.js
+++ b/packages/pg/lib/utils.js
@@ -1,11 +1,11 @@
'use strict'
-const crypto = require('crypto')
-
const defaults = require('./defaults')
+const { isDate } = require('util/types')
+
function escapeElement(elementRepresentation) {
- var escaped = elementRepresentation.replace(/\\/g, '\\\\').replace(/"/g, '\\"')
+ const escaped = elementRepresentation.replace(/\\/g, '\\\\').replace(/"/g, '\\"')
return '"' + escaped + '"'
}
@@ -14,22 +14,26 @@ function escapeElement(elementRepresentation) {
// uses comma separator so won't work for types like box that use
// a different array separator.
function arrayString(val) {
- var result = '{'
- for (var i = 0; i < val.length; i++) {
+ let result = '{'
+ for (let i = 0; i < val.length; i++) {
if (i > 0) {
- result = result + ','
+ result += ','
}
- if (val[i] === null || typeof val[i] === 'undefined') {
- result = result + 'NULL'
- } else if (Array.isArray(val[i])) {
- result = result + arrayString(val[i])
- } else if (val[i] instanceof Buffer) {
- result += '\\\\x' + val[i].toString('hex')
+ let item = val[i]
+ if (item == null) {
+ result += 'NULL'
+ } else if (Array.isArray(item)) {
+ result += arrayString(item)
+ } else if (ArrayBuffer.isView(item)) {
+ if (!(item instanceof Buffer)) {
+ item = Buffer.from(item.buffer, item.byteOffset, item.byteLength)
+ }
+ result += '\\\\x' + item.toString('hex')
} else {
- result += escapeElement(prepareValue(val[i]))
+ result += escapeElement(prepareValue(item))
}
}
- result = result + '}'
+ result += '}'
return result
}
@@ -37,32 +41,29 @@ function arrayString(val) {
// to their 'raw' counterparts for use as a postgres parameter
// note: you can override this function to provide your own conversion mechanism
// for complex types, etc...
-var prepareValue = function (val, seen) {
+const prepareValue = function (val, seen) {
// null and undefined are both null for postgres
if (val == null) {
return null
}
- if (val instanceof Buffer) {
- return val
- }
- if (ArrayBuffer.isView(val)) {
- var buf = Buffer.from(val.buffer, val.byteOffset, val.byteLength)
- if (buf.length === val.byteLength) {
- return buf
+ if (typeof val === 'object') {
+ if (val instanceof Buffer) {
+ return val
}
- return buf.slice(val.byteOffset, val.byteOffset + val.byteLength) // Node.js v4 does not support those Buffer.from params
- }
- if (val instanceof Date) {
- if (defaults.parseInputDatesAsUTC) {
- return dateToStringUTC(val)
- } else {
- return dateToString(val)
+ if (ArrayBuffer.isView(val)) {
+ return Buffer.from(val.buffer, val.byteOffset, val.byteLength)
}
- }
- if (Array.isArray(val)) {
- return arrayString(val)
- }
- if (typeof val === 'object') {
+ if (isDate(val)) {
+ if (defaults.parseInputDatesAsUTC) {
+ return dateToStringUTC(val)
+ } else {
+ return dateToString(val)
+ }
+ }
+ if (Array.isArray(val)) {
+ return arrayString(val)
+ }
+
return prepareObject(val, seen)
}
return val.toString()
@@ -81,35 +82,27 @@ function prepareObject(val, seen) {
return JSON.stringify(val)
}
-function pad(number, digits) {
- number = '' + number
- while (number.length < digits) {
- number = '0' + number
- }
- return number
-}
-
function dateToString(date) {
- var offset = -date.getTimezoneOffset()
+ let offset = -date.getTimezoneOffset()
- var year = date.getFullYear()
- var isBCYear = year < 1
+ let year = date.getFullYear()
+ const isBCYear = year < 1
if (isBCYear) year = Math.abs(year) + 1 // negative years are 1 off their BC representation
- var ret =
- pad(year, 4) +
+ let ret =
+ String(year).padStart(4, '0') +
'-' +
- pad(date.getMonth() + 1, 2) +
+ String(date.getMonth() + 1).padStart(2, '0') +
'-' +
- pad(date.getDate(), 2) +
+ String(date.getDate()).padStart(2, '0') +
'T' +
- pad(date.getHours(), 2) +
+ String(date.getHours()).padStart(2, '0') +
':' +
- pad(date.getMinutes(), 2) +
+ String(date.getMinutes()).padStart(2, '0') +
':' +
- pad(date.getSeconds(), 2) +
+ String(date.getSeconds()).padStart(2, '0') +
'.' +
- pad(date.getMilliseconds(), 3)
+ String(date.getMilliseconds()).padStart(3, '0')
if (offset < 0) {
ret += '-'
@@ -118,30 +111,30 @@ function dateToString(date) {
ret += '+'
}
- ret += pad(Math.floor(offset / 60), 2) + ':' + pad(offset % 60, 2)
+ ret += String(Math.floor(offset / 60)).padStart(2, '0') + ':' + String(offset % 60).padStart(2, '0')
if (isBCYear) ret += ' BC'
return ret
}
function dateToStringUTC(date) {
- var year = date.getUTCFullYear()
- var isBCYear = year < 1
+ let year = date.getUTCFullYear()
+ const isBCYear = year < 1
if (isBCYear) year = Math.abs(year) + 1 // negative years are 1 off their BC representation
- var ret =
- pad(year, 4) +
+ let ret =
+ String(year).padStart(4, '0') +
'-' +
- pad(date.getUTCMonth() + 1, 2) +
+ String(date.getUTCMonth() + 1).padStart(2, '0') +
'-' +
- pad(date.getUTCDate(), 2) +
+ String(date.getUTCDate()).padStart(2, '0') +
'T' +
- pad(date.getUTCHours(), 2) +
+ String(date.getUTCHours()).padStart(2, '0') +
':' +
- pad(date.getUTCMinutes(), 2) +
+ String(date.getUTCMinutes()).padStart(2, '0') +
':' +
- pad(date.getUTCSeconds(), 2) +
+ String(date.getUTCSeconds()).padStart(2, '0') +
'.' +
- pad(date.getUTCMilliseconds(), 3)
+ String(date.getUTCMilliseconds()).padStart(3, '0')
ret += '+00:00'
if (isBCYear) ret += ' BC'
@@ -164,15 +157,42 @@ function normalizeQueryConfig(config, values, callback) {
return config
}
-const md5 = function (string) {
- return crypto.createHash('md5').update(string, 'utf-8').digest('hex')
+// Ported from PostgreSQL 9.2.4 source code in src/interfaces/libpq/fe-exec.c
+const escapeIdentifier = function (str) {
+ return '"' + str.replace(/"/g, '""') + '"'
}
-// See AuthenticationMD5Password at https://www.postgresql.org/docs/current/static/protocol-flow.html
-const postgresMd5PasswordHash = function (user, password, salt) {
- var inner = md5(password + user)
- var outer = md5(Buffer.concat([Buffer.from(inner), salt]))
- return 'md5' + outer
+const escapeLiteral = function (str) {
+ let hasBackslash = false
+ let escaped = "'"
+
+ if (str == null) {
+ return "''"
+ }
+
+ if (typeof str !== 'string') {
+ return "''"
+ }
+
+ for (let i = 0; i < str.length; i++) {
+ const c = str[i]
+ if (c === "'") {
+ escaped += c + c
+ } else if (c === '\\') {
+ escaped += c + c
+ hasBackslash = true
+ } else {
+ escaped += c
+ }
+ }
+
+ escaped += "'"
+
+ if (hasBackslash === true) {
+ escaped = ' E' + escaped
+ }
+
+ return escaped
}
module.exports = {
@@ -182,6 +202,6 @@ module.exports = {
return prepareValue(value)
},
normalizeQueryConfig,
- postgresMd5PasswordHash,
- md5,
+ escapeIdentifier,
+ escapeLiteral,
}
diff --git a/packages/pg/package.json b/packages/pg/package.json
index 37afe6149..61f9b7ede 100644
--- a/packages/pg/package.json
+++ b/packages/pg/package.json
@@ -1,6 +1,6 @@
{
"name": "pg",
- "version": "8.8.0",
+ "version": "8.21.0",
"description": "PostgreSQL client - pure javascript & libpq with the same API",
"keywords": [
"database",
@@ -19,20 +19,38 @@
},
"author": "Brian Carlson ",
"main": "./lib",
+ "exports": {
+ ".": {
+ "import": "./esm/index.mjs",
+ "require": "./lib/index.js",
+ "default": "./lib/index.js"
+ },
+ "./package.json": {
+ "default": "./package.json"
+ },
+ "./lib/*": "./lib/*.js",
+ "./lib/*.js": "./lib/*.js"
+ },
"dependencies": {
- "buffer-writer": "2.0.0",
- "packet-reader": "1.0.0",
- "pg-connection-string": "^2.5.0",
- "pg-pool": "^3.5.2",
- "pg-protocol": "^1.5.0",
- "pg-types": "^2.1.0",
- "pgpass": "1.x"
+ "pg-connection-string": "^2.13.0",
+ "pg-pool": "^3.14.0",
+ "pg-protocol": "^1.14.0",
+ "pg-types": "2.2.0",
+ "pgpass": "1.0.5"
},
"devDependencies": {
+ "@cloudflare/vitest-pool-workers": "0.8.23",
+ "@cloudflare/workers-types": "^4.20230404.0",
"async": "2.6.4",
- "bluebird": "3.5.2",
+ "bluebird": "3.7.2",
"co": "4.6.0",
- "pg-copy-streams": "0.3.0"
+ "pg-copy-streams": "0.3.0",
+ "typescript": "^6.0.3",
+ "vitest": "~3.0.9",
+ "wrangler": "^3.x"
+ },
+ "optionalDependencies": {
+ "pg-cloudflare": "^1.4.0"
},
"peerDependencies": {
"pg-native": ">=3.0.1"
@@ -47,10 +65,11 @@
},
"files": [
"lib",
+ "esm",
"SPONSORS.md"
],
"license": "MIT",
"engines": {
- "node": ">= 8.0.0"
+ "node": ">= 16.0.0"
}
}
diff --git a/packages/pg/script/create-test-tables.js b/packages/pg/script/create-test-tables.js
deleted file mode 100644
index c7b2ff9e0..000000000
--- a/packages/pg/script/create-test-tables.js
+++ /dev/null
@@ -1,71 +0,0 @@
-'use strict'
-var args = require('../test/cli')
-var pg = require('../lib')
-
-var people = [
- { name: 'Aaron', age: 10 },
- { name: 'Brian', age: 20 },
- { name: 'Chris', age: 30 },
- { name: 'David', age: 40 },
- { name: 'Elvis', age: 50 },
- { name: 'Frank', age: 60 },
- { name: 'Grace', age: 70 },
- { name: 'Haley', age: 80 },
- { name: 'Irma', age: 90 },
- { name: 'Jenny', age: 100 },
- { name: 'Kevin', age: 110 },
- { name: 'Larry', age: 120 },
- { name: 'Michelle', age: 130 },
- { name: 'Nancy', age: 140 },
- { name: 'Olivia', age: 150 },
- { name: 'Peter', age: 160 },
- { name: 'Quinn', age: 170 },
- { name: 'Ronda', age: 180 },
- { name: 'Shelley', age: 190 },
- { name: 'Tobias', age: 200 },
- { name: 'Uma', age: 210 },
- { name: 'Veena', age: 220 },
- { name: 'Wanda', age: 230 },
- { name: 'Xavier', age: 240 },
- { name: 'Yoyo', age: 250 },
- { name: 'Zanzabar', age: 260 },
-]
-
-var con = new pg.Client({
- host: args.host,
- port: args.port,
- user: args.user,
- password: args.password,
- database: args.database,
-})
-
-con.connect((err) => {
- if (err) {
- throw err
- }
-
- con.query(
- 'DROP TABLE IF EXISTS person;' + ' CREATE TABLE person (id serial, name varchar(10), age integer)',
- (err) => {
- if (err) {
- throw err
- }
-
- console.log('Created table person')
- console.log('Filling it with people')
-
- con.query(
- 'INSERT INTO person (name, age) VALUES' +
- people.map((person) => ` ('${person.name}', ${person.age})`).join(','),
- (err, result) => {
- if (err) {
- throw err
- }
-
- console.log(`Inserted ${result.rowCount} people`)
- con.end()
- }
- )
- }
- )
-})
diff --git a/packages/pg/script/dump-db-types.js b/packages/pg/script/dump-db-types.js
index f76249483..46d1d1867 100644
--- a/packages/pg/script/dump-db-types.js
+++ b/packages/pg/script/dump-db-types.js
@@ -1,11 +1,11 @@
'use strict'
-var pg = require('../lib')
-var args = require('../test/cli')
+const pg = require('../lib')
+const args = require('../test/cli')
-var queries = ['select CURRENT_TIMESTAMP', "select interval '1 day' + interval '1 hour'", "select TIMESTAMP 'today'"]
+const queries = ['select CURRENT_TIMESTAMP', "select interval '1 day' + interval '1 hour'", "select TIMESTAMP 'today'"]
queries.forEach(function (query) {
- var client = new pg.Client({
+ const client = new pg.Client({
user: args.user,
database: args.database,
password: args.password,
diff --git a/packages/pg/script/list-db-types.js b/packages/pg/script/list-db-types.js
deleted file mode 100644
index df179afaf..000000000
--- a/packages/pg/script/list-db-types.js
+++ /dev/null
@@ -1,10 +0,0 @@
-'use strict'
-var helper = require('../test/integration/test-helper')
-var pg = helper.pg
-pg.connect(
- helper.config,
- assert.success(function (client) {
- var query = client.query("select oid, typname from pg_type where typtype = 'b' order by oid")
- query.on('row', console.log)
- })
-)
diff --git a/packages/pg/test/buffer-list.js b/packages/pg/test/buffer-list.js
index ec48b6ad6..f776f4bcf 100644
--- a/packages/pg/test/buffer-list.js
+++ b/packages/pg/test/buffer-list.js
@@ -3,7 +3,7 @@
const BufferList = function () {
this.buffers = []
}
-var p = BufferList.prototype
+const p = BufferList.prototype
p.add = function (buffer, front) {
this.buffers[front ? 'unshift' : 'push'](buffer)
@@ -14,10 +14,10 @@ p.addInt16 = function (val, front) {
return this.add(Buffer.from([val >>> 8, val >>> 0]), front)
}
-p.getByteLength = function (initial) {
+p.getByteLength = function () {
return this.buffers.reduce(function (previous, current) {
return previous + current.length
- }, initial || 0)
+ }, 0)
}
p.addInt32 = function (val, first) {
@@ -28,16 +28,16 @@ p.addInt32 = function (val, first) {
}
p.addCString = function (val, front) {
- var len = Buffer.byteLength(val)
- var buffer = Buffer.alloc(len + 1)
+ const len = Buffer.byteLength(val)
+ const buffer = Buffer.alloc(len + 1)
buffer.write(val)
buffer[len] = 0
return this.add(buffer, front)
}
p.addString = function (val, front) {
- var len = Buffer.byteLength(val)
- var buffer = Buffer.alloc(len)
+ const len = Buffer.byteLength(val)
+ const buffer = Buffer.alloc(len)
buffer.write(val)
return this.add(buffer, front)
}
@@ -47,7 +47,7 @@ p.addChar = function (char, first) {
}
p.join = function (appendLength, char) {
- var length = this.getByteLength()
+ let length = this.getByteLength()
if (appendLength) {
this.addInt32(length + 4, true)
return this.join(false, char)
@@ -56,8 +56,8 @@ p.join = function (appendLength, char) {
this.addChar(char, true)
length++
}
- var result = Buffer.alloc(length)
- var index = 0
+ const result = Buffer.alloc(length)
+ let index = 0
this.buffers.forEach(function (buffer) {
buffer.copy(result, index, 0)
index += buffer.length
@@ -65,12 +65,4 @@ p.join = function (appendLength, char) {
return result
}
-BufferList.concat = function () {
- var total = new BufferList()
- for (var i = 0; i < arguments.length; i++) {
- total.add(arguments[i])
- }
- return total.join()
-}
-
module.exports = BufferList
diff --git a/packages/pg/test/cli.js b/packages/pg/test/cli.js
deleted file mode 100644
index 03699b9ba..000000000
--- a/packages/pg/test/cli.js
+++ /dev/null
@@ -1,25 +0,0 @@
-'use strict'
-var ConnectionParameters = require('../lib/connection-parameters')
-var config = new ConnectionParameters(process.argv[2])
-
-for (var i = 0; i < process.argv.length; i++) {
- switch (process.argv[i].toLowerCase()) {
- case 'native':
- config.native = true
- break
- case 'binary':
- config.binary = true
- break
- case 'down':
- config.down = true
- break
- default:
- break
- }
-}
-
-if (process.env['PG_TEST_NATIVE']) {
- config.native = true
-}
-
-module.exports = config
diff --git a/packages/pg/test/cloudflare/vitest-cf.test.ts b/packages/pg/test/cloudflare/vitest-cf.test.ts
new file mode 100644
index 000000000..c71e01961
--- /dev/null
+++ b/packages/pg/test/cloudflare/vitest-cf.test.ts
@@ -0,0 +1,10 @@
+import { Pool } from 'pg'
+import { test } from 'vitest'
+import assert from 'assert'
+
+test('default', async () => {
+ const pool = new Pool()
+ const result = await pool.query('SELECT $1::text as name', ['cloudflare'])
+ assert(result.rows[0].name === 'cloudflare')
+ pool.end()
+})
diff --git a/packages/pg/test/integration/client/api-tests.js b/packages/pg/test/integration/client/api-tests.js
index abaab69fb..2b0c3f85b 100644
--- a/packages/pg/test/integration/client/api-tests.js
+++ b/packages/pg/test/integration/client/api-tests.js
@@ -1,8 +1,9 @@
'use strict'
-var helper = require('../test-helper')
-var pg = helper.pg
+const helper = require('../test-helper')
+const pg = helper.pg
+const assert = require('assert')
-var suite = new helper.Suite()
+const suite = new helper.Suite()
suite.test('null and undefined are both inserted as NULL', function (done) {
const pool = new pg.Pool()
@@ -102,6 +103,21 @@ suite.test('query no timeout', (cb) => {
})
})
+suite.test('query with timeout on query basis', (cb) => {
+ const pool = new pg.Pool()
+ pool.connect().then((client) => {
+ client.query(
+ { text: 'SELECT pg_sleep(20)', query_timeout: 1000 },
+ assert.calls(function (err, result) {
+ assert(err)
+ assert(err.message === 'Query read timeout')
+ client.release()
+ pool.end(cb)
+ })
+ )
+ })
+})
+
suite.test('callback API', (done) => {
const client = new helper.Client()
client.query('CREATE TEMP TABLE peep(name text)')
@@ -164,7 +180,7 @@ suite.test('executing nested queries', function (done) {
})
suite.test('raises error if cannot connect', function () {
- var connectionString = 'pg://sfalsdkf:asdf@localhost/ieieie'
+ const connectionString = 'pg://sfalsdkf:asdf@localhost/ieieie'
const pool = new pg.Pool({ connectionString: connectionString })
pool.connect(
assert.calls(function (err, client, done) {
@@ -197,7 +213,7 @@ suite.test('callback is fired once and only once', function (done) {
assert.calls(function (err, client, release) {
assert(!err)
client.query('CREATE TEMP TABLE boom(name varchar(10))')
- var callCount = 0
+ let callCount = 0
client.query(
[
"INSERT INTO boom(name) VALUES('hai')",
@@ -214,6 +230,21 @@ suite.test('callback is fired once and only once', function (done) {
)
})
+suite.test('no-op Client#end callback is called exactly once', (done) => {
+ const client = new helper.Client()
+ let called = false
+
+ client.end(() => {
+ assert(!called)
+ called = true
+
+ client.connect((err) => {
+ assert.ifError(err)
+ client.end(done)
+ })
+ })
+})
+
suite.test('can provide callback and config object', function (done) {
const pool = new pg.Pool()
pool.connect(
@@ -240,7 +271,7 @@ suite.test('can provide callback and config and parameters', function (done) {
pool.connect(
assert.calls(function (err, client, release) {
assert(!err)
- var config = {
+ const config = {
text: 'select $1::text as val',
}
client.query(
diff --git a/packages/pg/test/integration/client/appname-tests.js b/packages/pg/test/integration/client/appname-tests.js
index ab7202a9b..b091a7835 100644
--- a/packages/pg/test/integration/client/appname-tests.js
+++ b/packages/pg/test/integration/client/appname-tests.js
@@ -1,23 +1,24 @@
'use strict'
-var helper = require('./test-helper')
-var Client = helper.Client
+const helper = require('./test-helper')
+const Client = helper.Client
+const assert = require('assert')
-var suite = new helper.Suite()
+const suite = new helper.Suite()
-var conInfo = helper.config
+const conInfo = helper.config
function getConInfo(override) {
return Object.assign({}, conInfo, override)
}
function getAppName(conf, cb) {
- var client = new Client(conf)
+ const client = new Client(conf)
client.connect(
assert.success(function () {
client.query(
'SHOW application_name',
assert.success(function (res) {
- var appName = res.rows[0].application_name
+ const appName = res.rows[0].application_name
cb(appName)
client.end()
})
@@ -27,7 +28,6 @@ function getAppName(conf, cb) {
}
suite.test('No default appliation_name ', function (done) {
- var conf = getConInfo()
getAppName({}, function (res) {
assert.strictEqual(res, '')
done()
@@ -35,8 +35,8 @@ suite.test('No default appliation_name ', function (done) {
})
suite.test('fallback_application_name is used', function (done) {
- var fbAppName = 'this is my app'
- var conf = getConInfo({
+ const fbAppName = 'this is my app'
+ const conf = getConInfo({
fallback_application_name: fbAppName,
})
getAppName(conf, function (res) {
@@ -46,8 +46,8 @@ suite.test('fallback_application_name is used', function (done) {
})
suite.test('application_name is used', function (done) {
- var appName = 'some wired !@#$% application_name'
- var conf = getConInfo({
+ const appName = 'some wired !@#$% application_name'
+ const conf = getConInfo({
application_name: appName,
})
getAppName(conf, function (res) {
@@ -57,9 +57,9 @@ suite.test('application_name is used', function (done) {
})
suite.test('application_name has precedence over fallback_application_name', function (done) {
- var appName = 'some wired !@#$% application_name'
- var fbAppName = 'some other strange $$test$$ appname'
- var conf = getConInfo({
+ const appName = 'some wired !@#$% application_name'
+ const fbAppName = 'some other strange $$test$$ appname'
+ const conf = getConInfo({
application_name: appName,
fallback_application_name: fbAppName,
})
@@ -70,9 +70,9 @@ suite.test('application_name has precedence over fallback_application_name', fun
})
suite.test('application_name from connection string', function (done) {
- var appName = 'my app'
- var conParams = require('../../../lib/connection-parameters')
- var conf
+ const appName = 'my app'
+ const conParams = require('../../../lib/connection-parameters')
+ let conf
if (process.argv[2]) {
conf = new conParams(process.argv[2] + '?application_name=' + appName)
} else {
@@ -87,7 +87,7 @@ suite.test('application_name from connection string', function (done) {
// TODO: make the test work for native client too
if (!helper.args.native) {
suite.test('application_name is read from the env', function (done) {
- var appName = (process.env.PGAPPNAME = 'testest')
+ const appName = (process.env.PGAPPNAME = 'testest')
getAppName({}, function (res) {
delete process.env.PGAPPNAME
assert.strictEqual(res, appName)
diff --git a/packages/pg/test/integration/client/array-tests.js b/packages/pg/test/integration/client/array-tests.js
index a32139646..24814be91 100644
--- a/packages/pg/test/integration/client/array-tests.js
+++ b/packages/pg/test/integration/client/array-tests.js
@@ -1,8 +1,9 @@
'use strict'
-var helper = require('./test-helper')
-var pg = helper.pg
+const helper = require('./test-helper')
+const pg = helper.pg
+const assert = require('assert')
-var suite = new helper.Suite()
+const suite = new helper.Suite()
const pool = new pg.Pool()
@@ -15,7 +16,7 @@ pool.connect(
'SELECT $1::text[] as array',
[[null]],
assert.success(function (result) {
- var array = result.rows[0].array
+ const array = result.rows[0].array
assert.lengthIs(array, 1)
assert.isNull(array[0])
done()
@@ -24,9 +25,9 @@ pool.connect(
})
suite.test('elements containing JSON-escaped characters', function (done) {
- var param = '\\"\\"'
+ let param = '\\"\\"'
- for (var i = 1; i <= 0x1f; i++) {
+ for (let i = 1; i <= 0x1f; i++) {
param += String.fromCharCode(i)
}
@@ -34,7 +35,7 @@ pool.connect(
'SELECT $1::text[] as array',
[[param]],
assert.success(function (result) {
- var array = result.rows[0].array
+ const array = result.rows[0].array
assert.lengthIs(array, 1)
assert.equal(array[0], param)
done()
@@ -69,7 +70,7 @@ pool.connect(
client.query(
'SELECT names FROM why',
assert.success(function (result) {
- var names = result.rows[0].names
+ const names = result.rows[0].names
assert.lengthIs(names, 3)
assert.equal(names[0], 'aaron')
assert.equal(names[1], 'brian')
@@ -83,7 +84,7 @@ pool.connect(
client.query(
"SELECT '{}'::text[] as names",
assert.success(function (result) {
- var names = result.rows[0].names
+ const names = result.rows[0].names
assert.lengthIs(names, 0)
done()
})
@@ -94,7 +95,7 @@ pool.connect(
client.query(
'SELECT \'{"joe,bob",jim}\'::text[] as names',
assert.success(function (result) {
- var names = result.rows[0].names
+ const names = result.rows[0].names
assert.lengthIs(names, 2)
assert.equal(names[0], 'joe,bob')
assert.equal(names[1], 'jim')
@@ -107,7 +108,7 @@ pool.connect(
client.query(
'SELECT \'{"{","}"}\'::text[] as names',
assert.success(function (result) {
- var names = result.rows[0].names
+ const names = result.rows[0].names
assert.lengthIs(names, 2)
assert.equal(names[0], '{')
assert.equal(names[1], '}')
@@ -120,7 +121,7 @@ pool.connect(
client.query(
'SELECT \'{joe,null,bob,"NULL"}\'::text[] as names',
assert.success(function (result) {
- var names = result.rows[0].names
+ const names = result.rows[0].names
assert.lengthIs(names, 4)
assert.equal(names[0], 'joe')
assert.equal(names[1], null)
@@ -135,7 +136,7 @@ pool.connect(
client.query(
"SELECT ARRAY['joe''', 'jim', 'bob\"'] AS names",
assert.success(function (result) {
- var names = result.rows[0].names
+ const names = result.rows[0].names
assert.lengthIs(names, 3)
assert.equal(names[0], "joe'")
assert.equal(names[1], 'jim')
@@ -149,7 +150,7 @@ pool.connect(
client.query(
"SELECT '{{1,joe},{2,bob}}'::text[] as names",
assert.success(function (result) {
- var names = result.rows[0].names
+ const names = result.rows[0].names
assert.lengthIs(names, 2)
assert.lengthIs(names[0], 2)
@@ -168,7 +169,7 @@ pool.connect(
client.query(
"SELECT '{1,2,3}'::integer[] as names",
assert.success(function (result) {
- var names = result.rows[0].names
+ const names = result.rows[0].names
assert.lengthIs(names, 3)
assert.equal(names[0], 1)
assert.equal(names[1], 2)
@@ -182,7 +183,7 @@ pool.connect(
client.query(
"SELECT '{{1,100},{2,100},{3,100}}'::integer[] as names",
assert.success(function (result) {
- var names = result.rows[0].names
+ const names = result.rows[0].names
assert.lengthIs(names, 3)
assert.equal(names[0][0], 1)
assert.equal(names[0][1], 100)
@@ -208,7 +209,7 @@ pool.connect(
],
],
assert.success(function (result) {
- var names = result.rows[0].names
+ const names = result.rows[0].names
assert.lengthIs(names, 3)
assert.equal(names[0][0], 1)
assert.equal(names[0][1], 100)
diff --git a/packages/pg/test/integration/client/async-stack-trace-tests.js b/packages/pg/test/integration/client/async-stack-trace-tests.js
new file mode 100644
index 000000000..567851a72
--- /dev/null
+++ b/packages/pg/test/integration/client/async-stack-trace-tests.js
@@ -0,0 +1,42 @@
+'use strict'
+const helper = require('../test-helper')
+const pg = helper.pg
+
+const suite = new helper.Suite()
+
+suite.test('promise API async stack trace in pool', async function outerFunction() {
+ async function innerFunction() {
+ const pool = new pg.Pool()
+ await pool.query('SELECT test from nonexistent')
+ }
+ try {
+ await innerFunction()
+ throw Error('should have errored')
+ } catch (e) {
+ const stack = e.stack
+ if (!e.stack.includes('innerFunction') || !e.stack.includes('outerFunction')) {
+ throw Error('async stack trace does not contain wanted values: ' + stack, { cause: e })
+ }
+ }
+})
+
+suite.test('promise API async stack trace in client', async function outerFunction() {
+ async function innerFunction() {
+ const client = new pg.Client()
+ await client.connect()
+ try {
+ await client.query('SELECT test from nonexistent')
+ } finally {
+ client.end()
+ }
+ }
+ try {
+ await innerFunction()
+ throw Error('should have errored')
+ } catch (e) {
+ const stack = e.stack
+ if (!e.stack.includes('innerFunction') || !e.stack.includes('outerFunction')) {
+ throw Error('async stack trace does not contain wanted values: ' + stack, { cause: e })
+ }
+ }
+})
diff --git a/packages/pg/test/integration/client/big-simple-query-tests.js b/packages/pg/test/integration/client/big-simple-query-tests.js
index b0dc252f6..0948d1178 100644
--- a/packages/pg/test/integration/client/big-simple-query-tests.js
+++ b/packages/pg/test/integration/client/big-simple-query-tests.js
@@ -1,6 +1,7 @@
'use strict'
-var helper = require('./test-helper')
-var Query = helper.pg.Query
+const helper = require('./test-helper')
+const Query = helper.pg.Query
+const assert = require('assert')
const suite = new helper.Suite()
@@ -12,76 +13,85 @@ const suite = new helper.Suite()
*/
// Big query with a where clouse from supplied value
-var big_query_rows_1 = []
-var big_query_rows_2 = []
-var big_query_rows_3 = []
+const big_query_rows_1 = []
+const big_query_rows_2 = []
+const big_query_rows_3 = []
// Works
-suite.test('big simple query 1', function (done) {
- var client = helper.client()
- client
- .query(
- new Query(
- "select 'aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa' as bla from person where name = '' or 1 = 1"
+suite.test('big simple query 1', async function () {
+ const client = helper.client()
+ await helper.createPersonTable(client)
+ return new Promise((resolve) => {
+ client
+ .query(
+ new Query(
+ "select 'aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa' as bla from person where name = '' or 1 = 1"
+ )
)
- )
- .on('row', function (row) {
- big_query_rows_1.push(row)
+ .on('row', function (row) {
+ big_query_rows_1.push(row)
+ })
+ .on('error', function (error) {
+ console.log('big simple query 1 error')
+ console.log(error)
+ })
+ client.on('drain', () => {
+ client.end()
+ resolve()
})
- .on('error', function (error) {
- console.log('big simple query 1 error')
- console.log(error)
- })
- client.on('drain', () => {
- client.end()
- done()
})
})
// Works
-suite.test('big simple query 2', function (done) {
- var client = helper.client()
- client
- .query(
- new Query(
- "select 'aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa' as bla from person where name = $1 or 1 = 1",
- ['']
+suite.test('big simple query 2', async function () {
+ const client = helper.client()
+ await helper.createPersonTable(client)
+ return new Promise((resolve) => {
+ client
+ .query(
+ new Query(
+ "select 'aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa' as bla from person where name = $1 or 1 = 1",
+ ['']
+ )
)
- )
- .on('row', function (row) {
- big_query_rows_2.push(row)
- })
- .on('error', function (error) {
- console.log('big simple query 2 error')
- console.log(error)
+ .on('row', function (row) {
+ big_query_rows_2.push(row)
+ })
+ .on('error', function (error) {
+ console.log('big simple query 2 error')
+ console.log(error)
+ })
+ client.on('drain', () => {
+ client.end()
+ resolve()
})
- client.on('drain', () => {
- client.end()
- done()
})
})
// Fails most of the time with 'invalid byte sequence for encoding "UTF8": 0xb9' or 'insufficient data left in message'
// If test 1 and 2 are commented out it works
-suite.test('big simple query 3', function (done) {
- var client = helper.client()
- client
- .query(
- new Query(
- "select 'aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa' as bla from person where name = $1 or 1 = 1",
- ['']
+suite.test('big simple query 3', async function () {
+ const client = helper.client()
+ await helper.createPersonTable(client)
+ return new Promise((resolve) => {
+ client
+ .query(
+ new Query(
+ "select 'aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa' as bla from person where name = $1 or 1 = 1",
+ ['']
+ )
)
- )
- .on('row', function (row) {
- big_query_rows_3.push(row)
- })
- .on('error', function (error) {
- console.log('big simple query 3 error')
- console.log(error)
+ .on('row', function (row) {
+ big_query_rows_3.push(row)
+ })
+ .on('error', function (error) {
+ console.log('big simple query 3 error')
+ console.log(error)
+ })
+ client.on('drain', () => {
+ client.end()
+ resolve()
})
- client.on('drain', () => {
- client.end()
- done()
})
})
@@ -91,31 +101,33 @@ process.on('exit', function () {
assert.equal(big_query_rows_3.length, 26, 'big simple query 3 should return 26 rows')
})
-var runBigQuery = function (client) {
- var rows = []
- var q = client.query(
+const runBigQuery = function (client) {
+ client.query(
"select 'aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa' as bla from person where name = $1 or 1 = 1",
[''],
function (err, result) {
if (err != null) {
console.log(err)
- throw Err
+ throw err
}
assert.lengthIs(result.rows, 26)
}
)
}
-suite.test('many times', function (done) {
- var client = helper.client()
- for (var i = 0; i < 20; i++) {
- runBigQuery(client)
- }
- client.on('drain', function () {
- client.end()
- setTimeout(function () {
- done()
- // let client disconnect fully
- }, 100)
+suite.test('many times', async function () {
+ const client = helper.client()
+ await helper.createPersonTable(client)
+ return new Promise((resolve) => {
+ for (let i = 0; i < 20; i++) {
+ runBigQuery(client)
+ }
+ client.on('drain', function () {
+ client.end()
+ setTimeout(function () {
+ resolve()
+ // let client disconnect fully
+ }, 100)
+ })
})
})
diff --git a/packages/pg/test/integration/client/configuration-tests.js b/packages/pg/test/integration/client/configuration-tests.js
index 0737a79c3..a5a11560d 100644
--- a/packages/pg/test/integration/client/configuration-tests.js
+++ b/packages/pg/test/integration/client/configuration-tests.js
@@ -1,12 +1,14 @@
'use strict'
-var helper = require('./test-helper')
-var pg = helper.pg
+const helper = require('./test-helper')
+const pg = helper.pg
+const assert = require('assert')
+const { Client } = helper
-var suite = new helper.Suite()
+const suite = new helper.Suite()
// clear process.env
-var realEnv = {}
-for (var key in process.env) {
+const realEnv = {}
+for (const key in process.env) {
realEnv[key] = process.env[key]
if (!key.indexOf('PG')) delete process.env[key]
}
@@ -28,29 +30,29 @@ suite.test('default values are used in new clients', function () {
parseInputDatesAsUTC: false,
})
- var client = new pg.Client()
+ const client = new pg.Client()
assert.same(client, {
user: process.env.USER,
- database: process.env.USER,
password: null,
port: 5432,
+ database: process.env.USER,
})
})
suite.test('modified values are passed to created clients', function () {
pg.defaults.user = 'boom'
pg.defaults.password = 'zap'
- pg.defaults.database = 'pow'
- pg.defaults.port = 1234
pg.defaults.host = 'blam'
+ pg.defaults.port = 1234
+ pg.defaults.database = 'pow'
- var client = new Client()
+ const client = new Client()
assert.same(client, {
user: 'boom',
password: 'zap',
- database: 'pow',
- port: 1234,
host: 'blam',
+ port: 1234,
+ database: 'pow',
})
})
@@ -78,7 +80,7 @@ suite.test('database defaults to user when user is non-default', () => {
suite.test('cleanup', () => {
// restore process.env
- for (var key in realEnv) {
+ for (const key in realEnv) {
process.env[key] = realEnv[key]
}
})
diff --git a/packages/pg/test/integration/client/connection-timeout-tests.js b/packages/pg/test/integration/client/connection-timeout-tests.js
index 316e0768b..3d6b83664 100644
--- a/packages/pg/test/integration/client/connection-timeout-tests.js
+++ b/packages/pg/test/integration/client/connection-timeout-tests.js
@@ -2,6 +2,7 @@
const net = require('net')
const buffers = require('../../test-buffers')
const helper = require('./test-helper')
+const assert = require('assert')
const suite = new helper.Suite()
diff --git a/packages/pg/test/integration/client/custom-types-tests.js b/packages/pg/test/integration/client/custom-types-tests.js
index d1dd2eec0..eb5fa892c 100644
--- a/packages/pg/test/integration/client/custom-types-tests.js
+++ b/packages/pg/test/integration/client/custom-types-tests.js
@@ -2,6 +2,7 @@
const helper = require('./test-helper')
const Client = helper.pg.Client
const suite = new helper.Suite()
+const assert = require('assert')
const customTypes = {
getTypeParser: () => () => 'okay!',
@@ -21,6 +22,21 @@ suite.test('custom type parser in client config', (done) => {
})
})
+suite.test('custom type parser in client config with multiple results', (done) => {
+ const client = new Client({ types: customTypes })
+
+ client.connect().then(() => {
+ client.query(
+ `SELECT 'foo'::text as name; SELECT 'bar'::text as baz`,
+ assert.success(function (res) {
+ assert.equal(res[0].rows[0].name, 'okay!')
+ assert.equal(res[1].rows[0].baz, 'okay!')
+ client.end().then(done)
+ })
+ )
+ })
+})
+
// Custom type-parsers per query are not supported in native
if (!helper.args.native) {
suite.test('custom type parser in query', (done) => {
diff --git a/packages/pg/test/integration/client/empty-query-tests.js b/packages/pg/test/integration/client/empty-query-tests.js
index d887885c7..61d46512e 100644
--- a/packages/pg/test/integration/client/empty-query-tests.js
+++ b/packages/pg/test/integration/client/empty-query-tests.js
@@ -1,6 +1,7 @@
'use strict'
-var helper = require('./test-helper')
+const helper = require('./test-helper')
const suite = new helper.Suite()
+const assert = require('assert')
suite.test('empty query message handling', function (done) {
const client = helper.client()
diff --git a/packages/pg/test/integration/client/error-handling-tests.js b/packages/pg/test/integration/client/error-handling-tests.js
index 4e879c9e0..848839287 100644
--- a/packages/pg/test/integration/client/error-handling-tests.js
+++ b/packages/pg/test/integration/client/error-handling-tests.js
@@ -1,14 +1,14 @@
'use strict'
-var helper = require('./test-helper')
-var util = require('util')
+const helper = require('./test-helper')
-var pg = helper.pg
+const pg = helper.pg
+const assert = require('assert')
const Client = pg.Client
const DatabaseError = pg.DatabaseError
-var createErorrClient = function () {
- var client = helper.client()
+const createErorrClient = function () {
+ const client = helper.client()
client.once('error', function (err) {
assert.fail('Client shoud not throw error during query execution')
})
@@ -47,14 +47,11 @@ suite.test('re-using connections results in error callback', (done) => {
})
})
-suite.testAsync('re-using connections results in promise rejection', () => {
+suite.test('re-using connections results in promise rejection', async () => {
const client = new Client()
- return client.connect().then(() => {
- return helper.rejection(client.connect()).then((err) => {
- assert(err instanceof Error)
- return client.end()
- })
- })
+ await client.connect()
+ await assert.rejects(client.connect(), Error)
+ await client.end()
})
suite.test('using a client after closing it results in error', (done) => {
@@ -78,7 +75,7 @@ suite.test('using a client after closing it results in error', (done) => {
})
suite.test('query receives error on client shutdown', function (done) {
- var client = new Client()
+ const client = new Client()
client.connect(
assert.success(function () {
const config = {
@@ -102,8 +99,8 @@ suite.test('query receives error on client shutdown', function (done) {
)
})
-var ensureFuture = function (testClient, done) {
- var goodQuery = testClient.query(new pg.Query('select age from boom'))
+const ensureFuture = function (testClient, done) {
+ const goodQuery = testClient.query(new pg.Query('select age from boom'))
assert.emits(goodQuery, 'row', function (row) {
assert.equal(row.age, 28)
done()
@@ -111,12 +108,12 @@ var ensureFuture = function (testClient, done) {
}
suite.test('when query is parsing', (done) => {
- var client = createErorrClient()
+ const client = createErorrClient()
- var q = client.query({ text: 'CREATE TEMP TABLE boom(age integer); INSERT INTO boom (age) VALUES (28);' })
+ client.query({ text: 'CREATE TEMP TABLE boom(age integer); INSERT INTO boom (age) VALUES (28);' })
// this query wont parse since there isn't a table named bang
- var query = client.query(
+ const query = client.query(
new pg.Query({
text: 'select * from bang where name = $1',
values: ['0'],
@@ -129,11 +126,11 @@ suite.test('when query is parsing', (done) => {
})
suite.test('when a query is binding', function (done) {
- var client = createErorrClient()
+ const client = createErorrClient()
- var q = client.query({ text: 'CREATE TEMP TABLE boom(age integer); INSERT INTO boom (age) VALUES (28);' })
+ client.query({ text: 'CREATE TEMP TABLE boom(age integer); INSERT INTO boom (age) VALUES (28);' })
- var query = client.query(
+ const query = client.query(
new pg.Query({
text: 'select * from boom where age = $1',
values: ['asldkfjasdf'],
@@ -150,7 +147,7 @@ suite.test('when a query is binding', function (done) {
})
suite.test('non-query error with callback', function (done) {
- var client = new Client({
+ const client = new Client({
user: 'asldkfjsadlfkj',
})
client.connect(
@@ -162,7 +159,7 @@ suite.test('non-query error with callback', function (done) {
})
suite.test('non-error calls supplied callback', function (done) {
- var client = new Client({
+ const client = new Client({
user: helper.args.user,
password: helper.args.password,
host: helper.args.host,
@@ -179,7 +176,7 @@ suite.test('non-error calls supplied callback', function (done) {
})
suite.test('when connecting to an invalid host with callback', function (done) {
- var client = new Client({
+ const client = new Client({
user: 'very invalid username',
})
client.on('error', () => {
@@ -192,7 +189,7 @@ suite.test('when connecting to an invalid host with callback', function (done) {
})
suite.test('when connecting to invalid host with promise', function (done) {
- var client = new Client({
+ const client = new Client({
user: 'very invalid username',
})
client.on('error', () => {
@@ -202,7 +199,7 @@ suite.test('when connecting to invalid host with promise', function (done) {
})
suite.test('non-query error', function (done) {
- var client = new Client({
+ const client = new Client({
user: 'asldkfjsadlfkj',
})
client.connect().catch((e) => {
@@ -212,9 +209,9 @@ suite.test('non-query error', function (done) {
})
suite.test('within a simple query', (done) => {
- var client = createErorrClient()
+ const client = createErorrClient()
- var query = client.query(new pg.Query("select eeeee from yodas_dsflsd where pixistix = 'zoiks!!!'"))
+ const query = client.query(new pg.Query("select eeeee from yodas_dsflsd where pixistix = 'zoiks!!!'"))
assert.emits(query, 'error', function (error) {
if (!helper.config.native) {
diff --git a/packages/pg/test/integration/client/field-name-escape-tests.js b/packages/pg/test/integration/client/field-name-escape-tests.js
index 146ad1b68..4261c198e 100644
--- a/packages/pg/test/integration/client/field-name-escape-tests.js
+++ b/packages/pg/test/integration/client/field-name-escape-tests.js
@@ -1,8 +1,8 @@
-var pg = require('./test-helper').pg
+const pg = require('./test-helper').pg
-var sql = 'SELECT 1 AS "\\\'/*", 2 AS "\\\'*/\n + process.exit(-1)] = null;\n//"'
+const sql = 'SELECT 1 AS "\\\'/*", 2 AS "\\\'*/\n + process.exit(-1)] = null;\n//"'
-var client = new pg.Client()
+const client = new pg.Client()
client.connect()
client.query(sql, function (err, res) {
if (err) throw err
diff --git a/packages/pg/test/integration/client/huge-numeric-tests.js b/packages/pg/test/integration/client/huge-numeric-tests.js
index bdbfac261..fd4c28295 100644
--- a/packages/pg/test/integration/client/huge-numeric-tests.js
+++ b/packages/pg/test/integration/client/huge-numeric-tests.js
@@ -1,10 +1,11 @@
'use strict'
-var helper = require('./test-helper')
+const helper = require('./test-helper')
const pool = new helper.pg.Pool()
+const assert = require('assert')
pool.connect(
assert.success(function (client, done) {
- var types = require('pg-types')
+ const types = require('pg-types')
// 1231 = numericOID
types.setTypeParser(1700, function () {
return 'yes'
@@ -12,7 +13,7 @@ pool.connect(
types.setTypeParser(1700, 'binary', function () {
return 'yes'
})
- var bignum = '294733346389144765940638005275322203805'
+ const bignum = '294733346389144765940638005275322203805'
client.query('CREATE TEMP TABLE bignumz(id numeric)')
client.query('INSERT INTO bignumz(id) VALUES ($1)', [bignum])
client.query(
diff --git a/packages/pg/test/integration/client/idle_in_transaction_session_timeout-tests.js b/packages/pg/test/integration/client/idle_in_transaction_session_timeout-tests.js
index f970faaf2..933542600 100644
--- a/packages/pg/test/integration/client/idle_in_transaction_session_timeout-tests.js
+++ b/packages/pg/test/integration/client/idle_in_transaction_session_timeout-tests.js
@@ -1,17 +1,18 @@
'use strict'
-var helper = require('./test-helper')
-var Client = helper.Client
+const helper = require('./test-helper')
+const Client = helper.Client
+const assert = require('assert')
-var suite = new helper.Suite()
+const suite = new helper.Suite()
-var conInfo = helper.config
+const conInfo = helper.config
function getConInfo(override) {
return Object.assign({}, conInfo, override)
}
function testClientVersion(cb) {
- var client = new Client({})
+ const client = new Client({})
client.connect(
assert.success(function () {
helper.versionGTE(
@@ -36,13 +37,13 @@ function testClientVersion(cb) {
}
function getIdleTransactionSessionTimeout(conf, cb) {
- var client = new Client(conf)
+ const client = new Client(conf)
client.connect(
assert.success(function () {
client.query(
'SHOW idle_in_transaction_session_timeout',
assert.success(function (res) {
- var timeout = res.rows[0].idle_in_transaction_session_timeout
+ const timeout = res.rows[0].idle_in_transaction_session_timeout
cb(timeout)
client.end()
})
@@ -63,7 +64,7 @@ if (!helper.args.native) {
})
suite.test('idle_in_transaction_session_timeout integer is used', function (done) {
- var conf = getConInfo({
+ const conf = getConInfo({
idle_in_transaction_session_timeout: 3000,
})
getIdleTransactionSessionTimeout(conf, function (res) {
@@ -73,7 +74,7 @@ if (!helper.args.native) {
})
suite.test('idle_in_transaction_session_timeout float is used', function (done) {
- var conf = getConInfo({
+ const conf = getConInfo({
idle_in_transaction_session_timeout: 3000.7,
})
getIdleTransactionSessionTimeout(conf, function (res) {
@@ -83,7 +84,7 @@ if (!helper.args.native) {
})
suite.test('idle_in_transaction_session_timeout string is used', function (done) {
- var conf = getConInfo({
+ const conf = getConInfo({
idle_in_transaction_session_timeout: '3000',
})
getIdleTransactionSessionTimeout(conf, function (res) {
diff --git a/packages/pg/test/integration/client/json-type-parsing-tests.js b/packages/pg/test/integration/client/json-type-parsing-tests.js
index ba7696020..c5882e9d8 100644
--- a/packages/pg/test/integration/client/json-type-parsing-tests.js
+++ b/packages/pg/test/integration/client/json-type-parsing-tests.js
@@ -1,6 +1,6 @@
'use strict'
-var helper = require('./test-helper')
-var assert = require('assert')
+const helper = require('./test-helper')
+const assert = require('assert')
const pool = new helper.pg.Pool()
pool.connect(
@@ -15,14 +15,14 @@ pool.connect(
return pool.end()
}
client.query('CREATE TEMP TABLE stuff(id SERIAL PRIMARY KEY, data JSON)')
- var value = { name: 'Brian', age: 250, alive: true, now: new Date() }
+ const value = { name: 'Brian', age: 250, alive: true, now: new Date() }
client.query('INSERT INTO stuff (data) VALUES ($1)', [value])
client.query(
'SELECT * FROM stuff',
assert.success(function (result) {
assert.equal(result.rows.length, 1)
assert.equal(typeof result.rows[0].data, 'object')
- var row = result.rows[0].data
+ const row = result.rows[0].data
assert.strictEqual(row.name, value.name)
assert.strictEqual(row.age, value.age)
assert.strictEqual(row.alive, value.alive)
diff --git a/packages/pg/test/integration/client/multiple-results-tests.js b/packages/pg/test/integration/client/multiple-results-tests.js
index addca9b68..89c9f0057 100644
--- a/packages/pg/test/integration/client/multiple-results-tests.js
+++ b/packages/pg/test/integration/client/multiple-results-tests.js
@@ -25,6 +25,31 @@ suite.test(
})
)
+suite.test(
+ 'throws if queryMode set to "extended"',
+ co.wrap(function* () {
+ const client = new helper.Client()
+ yield client.connect()
+
+ // TODO should be text or sql?
+ try {
+ yield client.query({
+ text: `SELECT 'foo'::text as name; SELECT 'bar'::text as baz`,
+ queryMode: 'extended',
+ })
+ assert.fail('Should have thrown')
+ } catch (err) {
+ if (err instanceof assert.AssertionError) throw err
+
+ assert.equal(err.severity, 'ERROR')
+ assert.equal(err.code, '42601')
+ assert.equal(err.message, 'cannot insert multiple commands into a prepared statement')
+ }
+
+ return client.end()
+ })
+)
+
suite.test(
'multiple selects work',
co.wrap(function* () {
diff --git a/packages/pg/test/integration/client/network-partition-tests.js b/packages/pg/test/integration/client/network-partition-tests.js
index 8397821a8..6ebdb8b45 100644
--- a/packages/pg/test/integration/client/network-partition-tests.js
+++ b/packages/pg/test/integration/client/network-partition-tests.js
@@ -1,11 +1,12 @@
'use strict'
-var buffers = require('../../test-buffers')
-var helper = require('./test-helper')
-var suite = new helper.Suite()
+const buffers = require('../../test-buffers')
+const helper = require('./test-helper')
+const suite = new helper.Suite()
+const assert = require('assert')
-var net = require('net')
+const net = require('net')
-var Server = function (response) {
+const Server = function (response) {
this.server = undefined
this.socket = undefined
this.response = response
@@ -57,11 +58,11 @@ Server.prototype.close = function (cb) {
this.server.close(cb)
}
-var testServer = function (server, cb) {
+const testServer = function (server, cb) {
// wait for our server to start
server.start(function (options) {
// connect a client to it
- var client = new helper.Client(options)
+ const client = new helper.Client(options)
client.connect().catch((err) => {
assert(err instanceof Error)
clearTimeout(timeoutId)
@@ -76,7 +77,7 @@ var testServer = function (server, cb) {
})
// blow up if we don't receive an error
- var timeoutId = setTimeout(function () {
+ const timeoutId = setTimeout(function () {
throw new Error('Client should have emitted an error but it did not.')
}, 5000)
})
diff --git a/packages/pg/test/integration/client/no-data-tests.js b/packages/pg/test/integration/client/no-data-tests.js
index ad0f22be3..bf61d6d13 100644
--- a/packages/pg/test/integration/client/no-data-tests.js
+++ b/packages/pg/test/integration/client/no-data-tests.js
@@ -1,11 +1,12 @@
'use strict'
-var helper = require('./test-helper')
+const helper = require('./test-helper')
const suite = new helper.Suite()
+const assert = require('assert')
suite.test('noData message handling', function () {
- var client = helper.client()
+ const client = helper.client()
- var q = client.query({
+ client.query({
name: 'boom',
text: 'create temp table boom(id serial, size integer)',
})
@@ -29,14 +30,14 @@ suite.test('noData message handling', function () {
values: [101],
})
- var query = client.query(
+ client.query(
{
name: 'fetch',
text: 'select size from boom where size < $1',
values: [101],
},
(err, res) => {
- var row = res.rows[0]
+ const row = res.rows[0]
assert.strictEqual(row.size, 100)
}
)
diff --git a/packages/pg/test/integration/client/no-row-result-tests.js b/packages/pg/test/integration/client/no-row-result-tests.js
index 6e8f52cf0..d53470040 100644
--- a/packages/pg/test/integration/client/no-row-result-tests.js
+++ b/packages/pg/test/integration/client/no-row-result-tests.js
@@ -1,11 +1,12 @@
'use strict'
-var helper = require('./test-helper')
-var pg = helper.pg
+const helper = require('./test-helper')
+const pg = helper.pg
const suite = new helper.Suite()
const pool = new pg.Pool()
+const assert = require('assert')
suite.test('can access results when no rows are returned', function (done) {
- var checkResult = function (result) {
+ const checkResult = function (result) {
assert(result.fields, 'should have fields definition')
assert.equal(result.fields.length, 1)
assert.equal(result.fields[0].name, 'val')
@@ -15,7 +16,7 @@ suite.test('can access results when no rows are returned', function (done) {
pool.connect(
assert.success(function (client, release) {
const q = new pg.Query('select $1::text as val limit 0', ['hi'])
- var query = client.query(
+ const query = client.query(
q,
assert.success(function (result) {
checkResult(result)
diff --git a/packages/pg/test/integration/client/parse-int-8-tests.js b/packages/pg/test/integration/client/parse-int-8-tests.js
index 9f251de69..114fd8227 100644
--- a/packages/pg/test/integration/client/parse-int-8-tests.js
+++ b/packages/pg/test/integration/client/parse-int-8-tests.js
@@ -1,8 +1,9 @@
'use strict'
-var helper = require('../test-helper')
-var pg = helper.pg
+const helper = require('../test-helper')
+const pg = helper.pg
const suite = new helper.Suite()
+const assert = require('assert')
const pool = new pg.Pool(helper.config)
suite.test('ability to turn on and off parser', function () {
diff --git a/packages/pg/test/integration/client/prepared-statement-tests.js b/packages/pg/test/integration/client/prepared-statement-tests.js
index ebc1f7380..5c102eb13 100644
--- a/packages/pg/test/integration/client/prepared-statement-tests.js
+++ b/packages/pg/test/integration/client/prepared-statement-tests.js
@@ -1,137 +1,179 @@
'use strict'
-var helper = require('./test-helper')
-var Query = helper.pg.Query
+const helper = require('./test-helper')
+const Query = helper.pg.Query
-var suite = new helper.Suite()
+const assert = require('assert')
+const suite = new helper.Suite()
;(function () {
- var client = helper.client()
- client.on('drain', client.end.bind(client))
-
- var queryName = 'user by age and like name'
- var parseCount = 0
-
- suite.test('first named prepared statement', function (done) {
- var query = client.query(
- new Query({
- text: 'select name from person where age <= $1 and name LIKE $2',
- values: [20, 'Bri%'],
- name: queryName,
+ const queryName = 'user by age and like name'
+
+ suite.test('first named prepared statement', async function () {
+ const client = helper.client()
+ await helper.createPersonTable(client)
+ return new Promise((resolve) => {
+ const query = client.query(
+ new Query({
+ text: 'select name from person where age <= $1 and name LIKE $2',
+ values: [20, 'Bri%'],
+ name: queryName,
+ })
+ )
+
+ assert.emits(query, 'row', function (row) {
+ assert.equal(row.name, 'Brian')
})
- )
- assert.emits(query, 'row', function (row) {
- assert.equal(row.name, 'Brian')
+ query.on('end', () => {
+ client.end(resolve)
+ })
})
-
- query.on('end', () => done())
})
- suite.test('second named prepared statement with same name & text', function (done) {
- var cachedQuery = client.query(
- new Query({
- text: 'select name from person where age <= $1 and name LIKE $2',
- name: queryName,
- values: [10, 'A%'],
+ suite.test('second named prepared statement with same name & text', async function () {
+ const client = helper.client()
+ await helper.createPersonTable(client)
+ return new Promise((resolve) => {
+ const cachedQuery = client.query(
+ new Query({
+ text: 'select name from person where age <= $1 and name LIKE $2',
+ name: queryName,
+ values: [10, 'A%'],
+ })
+ )
+
+ assert.emits(cachedQuery, 'row', function (row) {
+ assert.equal(row.name, 'Aaron')
})
- )
- assert.emits(cachedQuery, 'row', function (row) {
- assert.equal(row.name, 'Aaron')
+ cachedQuery.on('end', () => {
+ client.end(resolve)
+ })
})
-
- cachedQuery.on('end', () => done())
})
- suite.test('with same name, but without query text', function (done) {
- var q = client.query(
- new Query({
- name: queryName,
- values: [30, '%n%'],
- })
- )
-
- assert.emits(q, 'row', function (row) {
- assert.equal(row.name, 'Aaron')
+ suite.test('with same name, but without query text', async function () {
+ const client = helper.client()
+ await helper.createPersonTable(client)
+ // First, register the named statement
+ await new Promise((resolve) => {
+ const reg = client.query(
+ new Query({
+ text: 'select name from person where age <= $1 and name LIKE $2',
+ name: queryName,
+ values: [20, 'Bri%'],
+ })
+ )
+ reg.on('end', resolve)
+ })
+ return new Promise((resolve) => {
+ const q = client.query(
+ new Query({
+ name: queryName,
+ values: [30, '%n%'],
+ })
+ )
- // test second row is emitted as well
assert.emits(q, 'row', function (row) {
- assert.equal(row.name, 'Brian')
+ assert.equal(row.name, 'Aaron')
+
+ // test second row is emitted as well
+ assert.emits(q, 'row', function (row) {
+ assert.equal(row.name, 'Brian')
+ })
})
- })
- q.on('end', () => done())
+ q.on('end', () => {
+ client.end(resolve)
+ })
+ })
})
- suite.test('with same name, but with different text', function (done) {
- client.query(
- new Query({
- text: 'select name from person where age >= $1 and name LIKE $2',
- name: queryName,
- values: [30, '%n%'],
- }),
- assert.calls((err) => {
- assert.equal(
- err.message,
- `Prepared statements must be unique - '${queryName}' was used for a different statement`
- )
- done()
- })
- )
+ suite.test('with same name, but with different text', async function () {
+ const client = helper.client()
+ await helper.createPersonTable(client)
+ // First, register the named statement
+ await new Promise((resolve) => {
+ const reg = client.query(
+ new Query({
+ text: 'select name from person where age <= $1 and name LIKE $2',
+ name: queryName,
+ values: [20, 'Bri%'],
+ })
+ )
+ reg.on('end', resolve)
+ })
+ return new Promise((resolve) => {
+ client.query(
+ new Query({
+ text: 'select name from person where age >= $1 and name LIKE $2',
+ name: queryName,
+ values: [30, '%n%'],
+ }),
+ assert.calls((err) => {
+ assert.equal(
+ err.message,
+ `Prepared statements must be unique - '${queryName}' was used for a different statement`
+ )
+ client.end(resolve)
+ })
+ )
+ })
})
})()
;(function () {
- var statementName = 'differ'
- var statement1 = 'select count(*)::int4 as count from person'
- var statement2 = 'select count(*)::int4 as count from person where age < $1'
-
- var client1 = helper.client()
- var client2 = helper.client()
-
- suite.test('client 1 execution', function (done) {
- var query = client1.query(
- {
- name: statementName,
- text: statement1,
- },
- (err, res) => {
- assert(!err)
- assert.equal(res.rows[0].count, 26)
- done()
- }
- )
+ const statementName = 'differ'
+ const statement1 = 'select count(*)::int4 as count from person'
+ const statement2 = 'select count(*)::int4 as count from person where age < $1'
+
+ suite.test('client 1 execution', async function () {
+ const client1 = helper.client()
+ await helper.createPersonTable(client1)
+ return new Promise((resolve) => {
+ client1.query(
+ {
+ name: statementName,
+ text: statement1,
+ },
+ (err, res) => {
+ assert(!err)
+ assert.equal(res.rows[0].count, 26)
+ client1.end(resolve)
+ }
+ )
+ })
})
- suite.test('client 2 execution', function (done) {
- var query = client2.query(
- new Query({
- name: statementName,
- text: statement2,
- values: [11],
- })
- )
+ suite.test('client 2 execution', async function () {
+ const client2 = helper.client()
+ await helper.createPersonTable(client2)
+ return new Promise((resolve) => {
+ const query = client2.query(
+ new Query({
+ name: statementName,
+ text: statement2,
+ values: [11],
+ })
+ )
- assert.emits(query, 'row', function (row) {
- assert.equal(row.count, 1)
- })
+ assert.emits(query, 'row', function (row) {
+ assert.equal(row.count, 1)
+ })
- assert.emits(query, 'end', function () {
- done()
+ assert.emits(query, 'end', function () {
+ client2.end(resolve)
+ })
})
})
-
- suite.test('clean up clients', () => {
- return client1.end().then(() => client2.end())
- })
})()
;(function () {
- var client = helper.client()
+ const client = helper.client()
client.query('CREATE TEMP TABLE zoom(name varchar(100));')
client.query("INSERT INTO zoom (name) VALUES ('zed')")
client.query("INSERT INTO zoom (name) VALUES ('postgres')")
client.query("INSERT INTO zoom (name) VALUES ('node postgres')")
- var checkForResults = function (q) {
+ const checkForResults = function (q) {
assert.emits(q, 'row', function (row) {
assert.equal(row.name, 'node postgres')
@@ -146,7 +188,7 @@ var suite = new helper.Suite()
}
suite.test('with small row count', function (done) {
- var query = client.query(
+ const query = client.query(
new Query(
{
name: 'get names',
@@ -161,7 +203,7 @@ var suite = new helper.Suite()
})
suite.test('with large row count', function (done) {
- var query = client.query(
+ const query = client.query(
new Query(
{
name: 'get names',
@@ -174,7 +216,7 @@ var suite = new helper.Suite()
checkForResults(query)
})
- suite.testAsync('with no data response and rows', async function () {
+ suite.test('with no data response and rows', async function () {
const result = await client.query({
name: 'some insert',
text: '',
diff --git a/packages/pg/test/integration/client/promise-api-tests.js b/packages/pg/test/integration/client/promise-api-tests.js
index d8128cf8b..8c3cd076b 100644
--- a/packages/pg/test/integration/client/promise-api-tests.js
+++ b/packages/pg/test/integration/client/promise-api-tests.js
@@ -2,6 +2,7 @@
const helper = require('./test-helper')
const pg = helper.pg
+const assert = require('assert')
const suite = new helper.Suite()
@@ -12,32 +13,15 @@ suite.test('valid connection completes promise', () => {
})
})
-suite.test('valid connection completes promise', () => {
+suite.test('valid connection returns the client in a promise', () => {
const client = new pg.Client()
- return client.connect().then(() => {
+ return client.connect().then((clientInside) => {
+ assert.equal(client, clientInside)
return client.end().then(() => {})
})
})
-suite.test('invalid connection rejects promise', (done) => {
+suite.test('invalid connection rejects promise', async () => {
const client = new pg.Client({ host: 'alksdjflaskdfj', port: 1234 })
- return client.connect().catch((e) => {
- assert(e instanceof Error)
- done()
- })
-})
-
-suite.test('connected client does not reject promise after connection', (done) => {
- const client = new pg.Client()
- return client.connect().then(() => {
- setTimeout(() => {
- client.on('error', (e) => {
- assert(e instanceof Error)
- client.end()
- done()
- })
- // manually kill the connection
- client.emit('error', new Error('something bad happened...but not really'))
- }, 50)
- })
+ await assert.rejects(client.connect(), Error)
})
diff --git a/packages/pg/test/integration/client/query-as-promise-tests.js b/packages/pg/test/integration/client/query-as-promise-tests.js
index 30c106f0b..8c0fcae72 100644
--- a/packages/pg/test/integration/client/query-as-promise-tests.js
+++ b/packages/pg/test/integration/client/query-as-promise-tests.js
@@ -1,12 +1,8 @@
'use strict'
-var bluebird = require('bluebird')
-var helper = require('../test-helper')
-var pg = helper.pg
-
-process.on('unhandledRejection', function (e) {
- console.error(e, e.stack)
- process.exit(1)
-})
+const bluebird = require('bluebird')
+const helper = require('../test-helper')
+const pg = helper.pg
+const assert = require('assert')
const suite = new helper.Suite()
diff --git a/packages/pg/test/integration/client/query-column-names-tests.js b/packages/pg/test/integration/client/query-column-names-tests.js
index a109209b1..d64e876b8 100644
--- a/packages/pg/test/integration/client/query-column-names-tests.js
+++ b/packages/pg/test/integration/client/query-column-names-tests.js
@@ -1,6 +1,7 @@
'use strict'
-var helper = require('../test-helper')
-var pg = helper.pg
+const helper = require('../test-helper')
+const pg = helper.pg
+const assert = require('assert')
new helper.Suite().test('support for complex column names', function () {
const pool = new pg.Pool()
diff --git a/packages/pg/test/integration/client/query-error-handling-prepared-statement-tests.js b/packages/pg/test/integration/client/query-error-handling-prepared-statement-tests.js
index adef58d16..13ecf4b53 100644
--- a/packages/pg/test/integration/client/query-error-handling-prepared-statement-tests.js
+++ b/packages/pg/test/integration/client/query-error-handling-prepared-statement-tests.js
@@ -1,23 +1,24 @@
'use strict'
-var helper = require('./test-helper')
-var Query = helper.pg.Query
-var util = require('util')
+const helper = require('./test-helper')
+const Query = helper.pg.Query
+const { Client } = helper
+const assert = require('assert')
-var suite = new helper.Suite()
+const suite = new helper.Suite()
suite.test('client end during query execution of prepared statement', function (done) {
- var client = new Client()
+ const client = new Client()
client.connect(
assert.success(function () {
- var sleepQuery = 'select pg_sleep($1)'
+ const sleepQuery = 'select pg_sleep($1)'
- var queryConfig = {
+ const queryConfig = {
name: 'sleep query',
text: sleepQuery,
values: [5],
}
- var queryInstance = new Query(
+ const queryInstance = new Query(
queryConfig,
assert.calls(function (err, result) {
assert.equal(err.message, 'Connection terminated')
@@ -25,7 +26,7 @@ suite.test('client end during query execution of prepared statement', function (
})
)
- var query1 = client.query(queryInstance)
+ const query1 = client.query(queryInstance)
query1.on('error', function (err) {
assert.fail('Prepared statement should not emit error')
@@ -45,9 +46,9 @@ suite.test('client end during query execution of prepared statement', function (
})
function killIdleQuery(targetQuery, cb) {
- var client2 = new Client(helper.args)
- var pidColName = 'procpid'
- var queryColName = 'current_query'
+ const client2 = new Client(helper.args)
+ let pidColName = 'procpid'
+ let queryColName = 'current_query'
client2.connect(
assert.success(function () {
helper.versionGTE(
@@ -58,7 +59,7 @@ function killIdleQuery(targetQuery, cb) {
pidColName = 'pid'
queryColName = 'query'
}
- var killIdleQuery =
+ const killIdleQuery =
'SELECT ' +
pidColName +
', (SELECT pg_terminate_backend(' +
@@ -86,10 +87,10 @@ suite.test('query killed during query execution of prepared statement', function
if (helper.args.native) {
return done()
}
- var client = new Client(helper.args)
+ const client = new Client(helper.args)
client.connect(
assert.success(function () {
- var sleepQuery = 'select pg_sleep($1)'
+ const sleepQuery = 'select pg_sleep($1)'
const queryConfig = {
name: 'sleep query',
@@ -100,7 +101,7 @@ suite.test('query killed during query execution of prepared statement', function
// client should emit an error because it is unexpectedly disconnected
assert.emits(client, 'error')
- var query1 = client.query(
+ const query1 = client.query(
new Query(queryConfig),
assert.calls(function (err, result) {
assert.equal(err.message, 'terminating connection due to administrator command')
diff --git a/packages/pg/test/integration/client/query-error-handling-tests.js b/packages/pg/test/integration/client/query-error-handling-tests.js
index 3ede5d972..eaceec03e 100644
--- a/packages/pg/test/integration/client/query-error-handling-tests.js
+++ b/packages/pg/test/integration/client/query-error-handling-tests.js
@@ -1,17 +1,19 @@
'use strict'
-var helper = require('./test-helper')
-var util = require('util')
-var Query = helper.pg.Query
-var DatabaseError = helper.pg.DatabaseError
+const helper = require('./test-helper')
+const Query = helper.pg.Query
+const DatabaseError = helper.pg.DatabaseError
+const assert = require('assert')
+const { Client } = helper
+const suite = new helper.Suite()
-test('error during query execution', function () {
- var client = new Client(helper.args)
+suite.test('error during query execution', function () {
+ const client = new Client(helper.args)
client.connect(
assert.success(function () {
- var queryText = 'select pg_sleep(10)'
- var sleepQuery = new Query(queryText)
- var pidColName = 'procpid'
- var queryColName = 'current_query'
+ const queryText = 'select pg_sleep(10)'
+ const sleepQuery = new Query(queryText)
+ let pidColName = 'procpid'
+ let queryColName = 'current_query'
helper.versionGTE(
client,
90200,
@@ -20,7 +22,7 @@ test('error during query execution', function () {
pidColName = 'pid'
queryColName = 'query'
}
- var query1 = client.query(
+ const query1 = client.query(
sleepQuery,
assert.calls(function (err, result) {
assert(err)
@@ -34,10 +36,10 @@ test('error during query execution', function () {
assert.fail('Query with an error should not emit "end" event')
})
setTimeout(function () {
- var client2 = new Client(helper.args)
+ const client2 = new Client(helper.args)
client2.connect(
assert.success(function () {
- var killIdleQuery = `SELECT ${pidColName}, (SELECT pg_cancel_backend(${pidColName})) AS killed FROM pg_stat_activity WHERE ${queryColName} LIKE $1`
+ const killIdleQuery = `SELECT ${pidColName}, (SELECT pg_cancel_backend(${pidColName})) AS killed FROM pg_stat_activity WHERE ${queryColName} LIKE $1`
client2.query(
killIdleQuery,
[queryText],
@@ -61,8 +63,8 @@ if (helper.config.native) {
return
}
-test('9.3 column error fields', function () {
- var client = new Client(helper.args)
+suite.test('9.3 column error fields', function () {
+ const client = new Client(helper.args)
client.connect(
assert.success(function () {
helper.versionGTE(
@@ -90,8 +92,8 @@ test('9.3 column error fields', function () {
)
})
-test('9.3 constraint error fields', function () {
- var client = new Client(helper.args)
+suite.test('9.3 constraint error fields', function () {
+ const client = new Client(helper.args)
client.connect(
assert.success(function () {
helper.versionGTE(
diff --git a/packages/pg/test/integration/client/quick-disconnect-tests.js b/packages/pg/test/integration/client/quick-disconnect-tests.js
index 066411fc8..8c14214da 100644
--- a/packages/pg/test/integration/client/quick-disconnect-tests.js
+++ b/packages/pg/test/integration/client/quick-disconnect-tests.js
@@ -1,8 +1,8 @@
'use strict'
// test for issue #320
//
-var helper = require('./test-helper')
+const helper = require('./test-helper')
-var client = new helper.pg.Client(helper.config)
+const client = new helper.pg.Client(helper.config)
client.connect()
client.end()
diff --git a/packages/pg/test/integration/client/result-metadata-tests.js b/packages/pg/test/integration/client/result-metadata-tests.js
index 66d9ac4ae..fe6eaf919 100644
--- a/packages/pg/test/integration/client/result-metadata-tests.js
+++ b/packages/pg/test/integration/client/result-metadata-tests.js
@@ -1,6 +1,7 @@
'use strict'
-var helper = require('./test-helper')
-var pg = helper.pg
+const helper = require('./test-helper')
+const pg = helper.pg
+const assert = require('assert')
const pool = new pg.Pool()
new helper.Suite().test('should return insert metadata', function () {
@@ -19,7 +20,7 @@ new helper.Suite().test('should return insert metadata', function () {
assert.equal(result.oid, null)
assert.equal(result.command, 'CREATE')
- var q = client.query(
+ client.query(
"INSERT INTO zugzug(name) VALUES('more work?')",
assert.calls(function (err, result) {
assert(!err)
diff --git a/packages/pg/test/integration/client/results-as-array-tests.js b/packages/pg/test/integration/client/results-as-array-tests.js
index 5ebb2a9d5..cdc04b9fb 100644
--- a/packages/pg/test/integration/client/results-as-array-tests.js
+++ b/packages/pg/test/integration/client/results-as-array-tests.js
@@ -1,15 +1,16 @@
'use strict'
-var util = require('util')
-var helper = require('./test-helper')
+const helper = require('./test-helper')
+const assert = require('assert')
+const suite = new helper.Suite()
-var Client = helper.Client
+const Client = helper.Client
-var conInfo = helper.config
+const conInfo = helper.config
-test('returns results as array', function () {
- var client = new Client(conInfo)
- var checkRow = function (row) {
- assert(util.isArray(row), 'row should be an array')
+suite.test('returns results as array', function () {
+ const client = new Client(conInfo)
+ const checkRow = function (row) {
+ assert(Array.isArray(row), 'row should be an array')
assert.equal(row.length, 4)
assert.equal(row[0].getFullYear(), new Date().getFullYear())
assert.strictEqual(row[1], 1)
@@ -18,12 +19,12 @@ test('returns results as array', function () {
}
client.connect(
assert.success(function () {
- var config = {
+ const config = {
text: 'SELECT NOW(), 1::int, $1::text, null',
values: ['hai'],
rowMode: 'array',
}
- var query = client.query(
+ client.query(
config,
assert.success(function (result) {
assert.equal(result.rows.length, 1)
diff --git a/packages/pg/test/integration/client/row-description-on-results-tests.js b/packages/pg/test/integration/client/row-description-on-results-tests.js
index 688b96e6c..728e0b96f 100644
--- a/packages/pg/test/integration/client/row-description-on-results-tests.js
+++ b/packages/pg/test/integration/client/row-description-on-results-tests.js
@@ -1,14 +1,16 @@
'use strict'
-var helper = require('./test-helper')
+const helper = require('./test-helper')
+const assert = require('assert')
+const suite = new helper.Suite()
-var Client = helper.Client
+const Client = helper.Client
-var conInfo = helper.config
+const conInfo = helper.config
-var checkResult = function (result) {
+const checkResult = function (result) {
assert(result.fields)
assert.equal(result.fields.length, 3)
- var fields = result.fields
+ const fields = result.fields
assert.equal(fields[0].name, 'now')
assert.equal(fields[1].name, 'num')
assert.equal(fields[2].name, 'texty')
@@ -17,8 +19,8 @@ var checkResult = function (result) {
assert.equal(fields[2].dataTypeID, 25)
}
-test('row descriptions on result object', function () {
- var client = new Client(conInfo)
+suite.test('row descriptions on result object', function () {
+ const client = new Client(conInfo)
client.connect(
assert.success(function () {
client.query(
@@ -33,8 +35,8 @@ test('row descriptions on result object', function () {
)
})
-test('row description on no rows', function () {
- var client = new Client(conInfo)
+suite.test('row description on no rows', function () {
+ const client = new Client(conInfo)
client.connect(
assert.success(function () {
client.query(
diff --git a/packages/pg/test/integration/client/sasl-scram-tests.js b/packages/pg/test/integration/client/sasl-scram-tests.js
index debc28685..bf1dfcb0d 100644
--- a/packages/pg/test/integration/client/sasl-scram-tests.js
+++ b/packages/pg/test/integration/client/sasl-scram-tests.js
@@ -3,6 +3,7 @@ const helper = require('./../test-helper')
const pg = helper.pg
const suite = new helper.Suite()
const { native } = helper.args
+const assert = require('assert')
/**
* This test only executes if the env variables SCRAM_TEST_PGUSER and
@@ -36,26 +37,39 @@ const config = {
}
if (native) {
- suite.testAsync('skipping SCRAM tests (on native)', () => {})
+ suite.test('skipping SCRAM tests (on native)', () => {})
return
}
if (!config.user || !config.password) {
- suite.testAsync('skipping SCRAM tests (missing env)', () => {})
+ suite.test('skipping SCRAM tests (missing env)', () => {})
return
}
-suite.testAsync('can connect using sasl/scram', async () => {
- const client = new pg.Client(config)
- let usingSasl = false
- client.connection.once('authenticationSASL', () => {
- usingSasl = true
+suite.test('can connect using sasl/scram with channel binding enabled (if using SSL)', async () => {
+ const client = new pg.Client({ ...config, enableChannelBinding: true })
+ let usingChannelBinding = false
+ let hasPeerCert = false
+ client.connection.once('authenticationSASLContinue', () => {
+ hasPeerCert = client.connection.stream.getPeerCertificate === 'function'
+ usingChannelBinding = client.saslSession.mechanism === 'SCRAM-SHA-256-PLUS'
})
await client.connect()
- assert.ok(usingSasl, 'Should be using SASL for authentication')
+ assert.ok(usingChannelBinding || !hasPeerCert, 'Should be using SCRAM-SHA-256-PLUS for authentication if using SSL')
await client.end()
})
-suite.testAsync('sasl/scram fails when password is wrong', async () => {
+suite.test('can connect using sasl/scram with channel binding disabled', async () => {
+ const client = new pg.Client({ ...config, enableChannelBinding: false })
+ let usingSASLWithoutChannelBinding = false
+ client.connection.once('authenticationSASLContinue', () => {
+ usingSASLWithoutChannelBinding = client.saslSession.mechanism === 'SCRAM-SHA-256'
+ })
+ await client.connect()
+ assert.ok(usingSASLWithoutChannelBinding, 'Should be using SCRAM-SHA-256 (no channel binding) for authentication')
+ await client.end()
+})
+
+suite.test('sasl/scram fails when password is wrong', async () => {
const client = new pg.Client({
...config,
password: config.password + 'append-something-to-make-it-bad',
@@ -73,3 +87,103 @@ suite.testAsync('sasl/scram fails when password is wrong', async () => {
)
assert.ok(usingSasl, 'Should be using SASL for authentication')
})
+
+suite.test('sasl/scram fails when password is empty', async () => {
+ const client = new pg.Client({
+ ...config,
+ // We use a password function here so the connection defaults do not
+ // override the empty string value with one from process.env.PGPASSWORD
+ password: () => '',
+ })
+ let usingSasl = false
+ client.connection.once('authenticationSASL', () => {
+ usingSasl = true
+ })
+ await assert.rejects(
+ () => client.connect(),
+ {
+ message: 'SASL: SCRAM-SERVER-FIRST-MESSAGE: client password must be a non-empty string',
+ },
+ 'Error code should be for a password error'
+ )
+ assert.ok(usingSasl, 'Should be using SASL for authentication')
+})
+
+/**
+ * SASLprep regression coverage. RFC 5802 / RFC 4013 require the SCRAM client
+ * to normalize the password (B.1 mapping → NFKC → prohibition + bidi check)
+ * before feeding it into PBKDF2. PostgreSQL's server applies the same
+ * SASLprep when computing the verifier, so any password whose NFKC form
+ * differs from the raw form would otherwise authenticate against psql/libpq
+ * but fail against pg with `28P01`.
+ *
+ * To exercise these tests, provision a role whose password contains an
+ * NFKC-asymmetric character. For example, in psql:
+ *
+ * SET password_encryption = 'scram-sha-256';
+ * CREATE ROLE scram_unicode_test LOGIN PASSWORD U&'IX-\2168';
+ *
+ * `\2168` is ROMAN NUMERAL IX; the server SASLprep-normalizes this to
+ * `IX-IX` when computing the verifier. Then export:
+ *
+ * SCRAM_TEST_PGUSER_UNICODE=scram_unicode_test
+ * SCRAM_TEST_PGPASSWORD_UNICODE='IX-\u2168' (i.e. the raw form)
+ *
+ * If either env var is unset the suite is skipped, matching the convention
+ * of the ASCII SCRAM block above.
+ */
+const unicodeConfig = {
+ user: process.env.SCRAM_TEST_PGUSER_UNICODE,
+ password: process.env.SCRAM_TEST_PGPASSWORD_UNICODE,
+ host: process.env.SCRAM_TEST_PGHOST,
+ port: process.env.SCRAM_TEST_PGPORT,
+ database: process.env.SCRAM_TEST_PGDATABASE,
+}
+
+if (!unicodeConfig.user || !unicodeConfig.password) {
+ suite.test('skipping SCRAM unicode tests (missing env)', () => {})
+} else {
+ suite.test('sasl/scram authenticates a password requiring SASLprep (raw form)', async () => {
+ const client = new pg.Client(unicodeConfig)
+ let usingSasl = false
+ client.connection.once('authenticationSASL', () => {
+ usingSasl = true
+ })
+ await client.connect()
+ assert.ok(usingSasl, 'Should be using SASL for authentication')
+ await client.end()
+ })
+
+ suite.test('sasl/scram authenticates the NFKC-equivalent ASCII form of the same password', async () => {
+ // The unicode password contains a codepoint that NFKC-decomposes to ASCII
+ // (e.g. U+2168 → "IX"). The server stored the verifier from the
+ // SASLprep'd ASCII form, so feeding the client the ASCII form directly
+ // must also authenticate. This proves that the prep step is symmetric:
+ // any NFKC-equivalent representation reaches the same PBKDF2 input.
+ const client = new pg.Client({
+ ...unicodeConfig,
+ password: unicodeConfig.password.normalize('NFKC'),
+ })
+ await client.connect()
+ await client.end()
+ })
+
+ suite.test('sasl/scram fails when unicode password is wrong', async () => {
+ const client = new pg.Client({
+ ...unicodeConfig,
+ password: unicodeConfig.password + 'append-something-to-make-it-bad',
+ })
+ let usingSasl = false
+ client.connection.once('authenticationSASL', () => {
+ usingSasl = true
+ })
+ await assert.rejects(
+ () => client.connect(),
+ {
+ code: '28P01',
+ },
+ 'Error code should be for a password error'
+ )
+ assert.ok(usingSasl, 'Should be using SASL for authentication')
+ })
+}
diff --git a/packages/pg/test/integration/client/simple-query-tests.js b/packages/pg/test/integration/client/simple-query-tests.js
index d22d74742..d295abfa1 100644
--- a/packages/pg/test/integration/client/simple-query-tests.js
+++ b/packages/pg/test/integration/client/simple-query-tests.js
@@ -1,77 +1,73 @@
'use strict'
-var helper = require('./test-helper')
-var Query = helper.pg.Query
+const helper = require('./test-helper')
+const Query = helper.pg.Query
+const assert = require('assert')
+const suite = new helper.Suite()
+const test = suite.test.bind(suite)
-// before running this test make sure you run the script create-test-tables
-test('simple query interface', function () {
- var client = helper.client()
+test('simple query interface', async function () {
+ const client = helper.client()
+ await helper.createPersonTable(client)
- var query = client.query(new Query('select name from person order by name collate "C"'))
+ return new Promise((resolve) => {
+ const query = client.query(new Query('select name from person order by name collate "C"'))
- client.on('drain', client.end.bind(client))
-
- var rows = []
- query.on('row', function (row, result) {
- assert.ok(result)
- rows.push(row['name'])
- })
- query.once('row', function (row) {
- test('Can iterate through columns', function () {
- var columnCount = 0
- for (var column in row) {
- columnCount++
- }
- if ('length' in row) {
- assert.lengthIs(
- row,
- columnCount,
- 'Iterating through the columns gives a different length from calling .length.'
- )
- }
+ const rows = []
+ query.on('row', function (row, result) {
+ assert.ok(result)
+ rows.push(row['name'])
})
- })
-
- assert.emits(query, 'end', function () {
- test('returned right number of rows', function () {
- assert.lengthIs(rows, 26)
+ query.once('row', function (row) {
+ test('returned right columns', function () {
+ assert.deepStrictEqual(row, { name: row.name })
+ })
})
- test('row ordering', function () {
- assert.equal(rows[0], 'Aaron')
- assert.equal(rows[25], 'Zanzabar')
+
+ assert.emits(query, 'end', function () {
+ test('returned right number of rows', function () {
+ assert.lengthIs(rows, 26)
+ })
+ test('row ordering', function () {
+ assert.equal(rows[0], 'Aaron')
+ assert.equal(rows[25], 'Zanzabar')
+ })
+ client.end(resolve)
})
})
})
-test('prepared statements do not mutate params', function () {
- var client = helper.client()
+test('prepared statements do not mutate params', async function () {
+ const client = helper.client()
+ await helper.createPersonTable(client)
- var params = [1]
+ return new Promise((resolve) => {
+ const params = [1]
- var query = client.query(new Query('select name from person where $1 = 1 order by name collate "C"', params))
+ const query = client.query(new Query('select name from person where $1 = 1 order by name collate "C"', params))
- assert.deepEqual(params, [1])
+ assert.deepEqual(params, [1])
- client.on('drain', client.end.bind(client))
-
- const rows = []
- query.on('row', function (row, result) {
- assert.ok(result)
- rows.push(row)
- })
+ const rows = []
+ query.on('row', function (row, result) {
+ assert.ok(result)
+ rows.push(row)
+ })
- query.on('end', function (result) {
- assert.lengthIs(rows, 26, 'result returned wrong number of rows')
- assert.lengthIs(rows, result.rowCount)
- assert.equal(rows[0].name, 'Aaron')
- assert.equal(rows[25].name, 'Zanzabar')
+ query.on('end', function (result) {
+ assert.lengthIs(rows, 26, 'result returned wrong number of rows')
+ assert.lengthIs(rows, result.rowCount)
+ assert.equal(rows[0].name, 'Aaron')
+ assert.equal(rows[25].name, 'Zanzabar')
+ client.end(resolve)
+ })
})
})
test('multiple simple queries', function () {
- var client = helper.client()
+ const client = helper.client()
client.query({ text: "create temp table bang(id serial, name varchar(5));insert into bang(name) VALUES('boom');" })
client.query("insert into bang(name) VALUES ('yes');")
- var query = client.query(new Query('select name from bang'))
+ const query = client.query(new Query('select name from bang'))
assert.emits(query, 'row', function (row) {
assert.equal(row['name'], 'boom')
assert.emits(query, 'row', function (row) {
@@ -82,12 +78,12 @@ test('multiple simple queries', function () {
})
test('multiple select statements', function () {
- var client = helper.client()
+ const client = helper.client()
client.query(
'create temp table boom(age integer); insert into boom(age) values(1); insert into boom(age) values(2); insert into boom(age) values(3)'
)
client.query({ text: "create temp table bang(name varchar(5)); insert into bang(name) values('zoom');" })
- var result = client.query(new Query({ text: 'select age from boom where age < 2; select name from bang' }))
+ const result = client.query(new Query({ text: 'select age from boom where age < 2; select name from bang' }))
assert.emits(result, 'row', function (row) {
assert.strictEqual(row['age'], 1)
assert.emits(result, 'row', function (row) {
diff --git a/packages/pg/test/integration/client/ssl-tests.js b/packages/pg/test/integration/client/ssl-tests.js
index 97aa59492..33919cdf8 100644
--- a/packages/pg/test/integration/client/ssl-tests.js
+++ b/packages/pg/test/integration/client/ssl-tests.js
@@ -1,19 +1,22 @@
'use strict'
-var pg = require('../../../lib')
-var config = require('./test-helper').config
-test('can connect with ssl', function () {
- return false
- config.ssl = {
- rejectUnauthorized: false,
+const helper = require('./test-helper')
+const assert = require('assert')
+const suite = new helper.Suite()
+
+suite.test('can connect with ssl', function (done) {
+ const config = {
+ ...helper.config,
+ ssl: {
+ rejectUnauthorized: false,
+ },
}
- pg.connect(
- config,
- assert.success(function (client) {
- return false
+ const client = new helper.pg.Client(config)
+ client.connect(
+ assert.success(function () {
client.query(
'SELECT NOW()',
assert.success(function () {
- pg.end()
+ client.end(done)
})
)
})
diff --git a/packages/pg/test/integration/client/statement_timeout-tests.js b/packages/pg/test/integration/client/statement_timeout-tests.js
index e0898ccee..b45c71fcc 100644
--- a/packages/pg/test/integration/client/statement_timeout-tests.js
+++ b/packages/pg/test/integration/client/statement_timeout-tests.js
@@ -1,23 +1,24 @@
'use strict'
-var helper = require('./test-helper')
-var Client = helper.Client
+const helper = require('./test-helper')
+const Client = helper.Client
-var suite = new helper.Suite()
+const assert = require('assert')
+const suite = new helper.Suite()
-var conInfo = helper.config
+const conInfo = helper.config
function getConInfo(override) {
return Object.assign({}, conInfo, override)
}
function getStatementTimeout(conf, cb) {
- var client = new Client(conf)
+ const client = new Client(conf)
client.connect(
assert.success(function () {
client.query(
'SHOW statement_timeout',
assert.success(function (res) {
- var statementTimeout = res.rows[0].statement_timeout
+ const statementTimeout = res.rows[0].statement_timeout
cb(statementTimeout)
client.end()
})
@@ -37,7 +38,7 @@ if (!helper.args.native) {
})
suite.test('statement_timeout integer is used', function (done) {
- var conf = getConInfo({
+ const conf = getConInfo({
statement_timeout: 3000,
})
getStatementTimeout(conf, function (res) {
@@ -47,7 +48,7 @@ if (!helper.args.native) {
})
suite.test('statement_timeout float is used', function (done) {
- var conf = getConInfo({
+ const conf = getConInfo({
statement_timeout: 3000.7,
})
getStatementTimeout(conf, function (res) {
@@ -57,7 +58,7 @@ if (!helper.args.native) {
})
suite.test('statement_timeout string is used', function (done) {
- var conf = getConInfo({
+ const conf = getConInfo({
statement_timeout: '3000',
})
getStatementTimeout(conf, function (res) {
@@ -67,10 +68,10 @@ if (!helper.args.native) {
})
suite.test('statement_timeout actually cancels long running queries', function (done) {
- var conf = getConInfo({
+ const conf = getConInfo({
statement_timeout: '10', // 10ms to keep tests running fast
})
- var client = new Client(conf)
+ const client = new Client(conf)
client.connect(
assert.success(function () {
client.query('SELECT pg_sleep( 1 )', function (error) {
diff --git a/packages/pg/test/integration/client/test-helper.js b/packages/pg/test/integration/client/test-helper.js
index 14f8134eb..c915ce09b 100644
--- a/packages/pg/test/integration/client/test-helper.js
+++ b/packages/pg/test/integration/client/test-helper.js
@@ -1,4 +1,4 @@
'use strict'
-var helper = require('./../test-helper')
+const helper = require('./../test-helper')
module.exports = helper
diff --git a/packages/pg/test/integration/client/timezone-tests.js b/packages/pg/test/integration/client/timezone-tests.js
index c9f6a8c83..c7edbbb56 100644
--- a/packages/pg/test/integration/client/timezone-tests.js
+++ b/packages/pg/test/integration/client/timezone-tests.js
@@ -1,11 +1,11 @@
'use strict'
-var helper = require('./../test-helper')
-var exec = require('child_process').exec
+const helper = require('./../test-helper')
+const assert = require('assert')
-var oldTz = process.env.TZ
+const oldTz = process.env.TZ
process.env.TZ = 'Europe/Berlin'
-var date = new Date()
+const date = new Date()
const pool = new helper.pg.Pool()
const suite = new helper.Suite()
@@ -21,6 +21,11 @@ pool.connect(function (err, client, done) {
})
})
+ suite.test('date comes out as a date', async function () {
+ const { rows } = await client.query('SELECT NOW()::DATE AS date')
+ assert(rows[0].date instanceof Date)
+ })
+
suite.test('timestamp with time zone', function (cb) {
client.query('SELECT CAST($1 AS TIMESTAMP WITH TIME ZONE) AS "val"', [date], function (err, result) {
assert(!err)
diff --git a/packages/pg/test/integration/client/transaction-tests.js b/packages/pg/test/integration/client/transaction-tests.js
index 18f8ff095..7e0b36964 100644
--- a/packages/pg/test/integration/client/transaction-tests.js
+++ b/packages/pg/test/integration/client/transaction-tests.js
@@ -1,67 +1,41 @@
'use strict'
-var helper = require('./test-helper')
+const helper = require('./test-helper')
const suite = new helper.Suite()
const pg = helper.pg
+const assert = require('assert')
-const client = new pg.Client()
-client.connect(
- assert.success(function () {
- client.query('begin')
+suite.test('transactions', async function () {
+ const client = new pg.Client()
+ await client.connect()
+ await helper.createPersonTable(client)
- var getZed = {
- text: 'SELECT * FROM person WHERE name = $1',
- values: ['Zed'],
- }
+ await client.query('begin')
- suite.test('name should not exist in the database', function (done) {
- client.query(
- getZed,
- assert.calls(function (err, result) {
- assert(!err)
- assert.empty(result.rows)
- done()
- })
- )
- })
+ const getZed = {
+ text: 'SELECT * FROM person WHERE name = $1',
+ values: ['Zed'],
+ }
- suite.test('can insert name', (done) => {
- client.query(
- 'INSERT INTO person(name, age) VALUES($1, $2)',
- ['Zed', 270],
- assert.calls(function (err, result) {
- assert(!err)
- done()
- })
- )
- })
+ // name should not exist
+ const r1 = await client.query(getZed)
+ assert.empty(r1.rows)
- suite.test('name should exist in the database', function (done) {
- client.query(
- getZed,
- assert.calls(function (err, result) {
- assert(!err)
- assert.equal(result.rows[0].name, 'Zed')
- done()
- })
- )
- })
+ // insert name
+ await client.query('INSERT INTO person(name, age) VALUES($1, $2)', ['Zed', 270])
- suite.test('rollback', (done) => {
- client.query('rollback', done)
- })
+ // name should exist
+ const r2 = await client.query(getZed)
+ assert.equal(r2.rows[0].name, 'Zed')
- suite.test('name should not exist in the database', function (done) {
- client.query(
- getZed,
- assert.calls(function (err, result) {
- assert(!err)
- assert.empty(result.rows)
- client.end(done)
- })
- )
- })
- })
-)
+ // rollback
+ await client.query('rollback')
+
+ // name should not exist after rollback
+ const r3 = await client.query(getZed)
+ assert.empty(r3.rows)
+
+ await client.end()
+})
suite.test('gh#36', function (cb) {
const pool = new pg.Pool()
diff --git a/packages/pg/test/integration/client/txstatus-tests.js b/packages/pg/test/integration/client/txstatus-tests.js
new file mode 100644
index 000000000..cb8b740f8
--- /dev/null
+++ b/packages/pg/test/integration/client/txstatus-tests.js
@@ -0,0 +1,82 @@
+'use strict'
+const helper = require('./test-helper')
+const suite = new helper.Suite()
+const pg = helper.pg
+const assert = require('assert')
+
+suite.test('txStatus tracking', function (done) {
+ const client = new pg.Client()
+ client.connect(
+ assert.success(function () {
+ // Run a simple query to initialize txStatus
+ client.query(
+ 'SELECT 1',
+ assert.success(function () {
+ // Test 1: Initial state after query (should be idle)
+ assert.equal(client.getTransactionStatus(), 'I', 'should start in idle state')
+
+ // Test 2: BEGIN transaction
+ client.query(
+ 'BEGIN',
+ assert.success(function () {
+ assert.equal(client.getTransactionStatus(), 'T', 'should be in transaction state')
+
+ // Test 3: COMMIT
+ client.query(
+ 'COMMIT',
+ assert.success(function () {
+ assert.equal(client.getTransactionStatus(), 'I', 'should return to idle after commit')
+
+ client.end(done)
+ })
+ )
+ })
+ )
+ })
+ )
+ })
+ )
+})
+
+suite.test('txStatus error state', function (done) {
+ const client = new pg.Client()
+ client.connect(
+ assert.success(function () {
+ // Run a simple query to initialize txStatus
+ client.query(
+ 'SELECT 1',
+ assert.success(function () {
+ client.query(
+ 'BEGIN',
+ assert.success(function () {
+ // Execute invalid SQL to trigger error state
+ client.query('INVALID SQL SYNTAX', function (err) {
+ assert(err, 'should receive error from invalid query')
+
+ // Issue a sync query to ensure ReadyForQuery has been processed
+ // This guarantees transaction status has been updated
+ client.query('SELECT 1', function () {
+ // This callback fires after ReadyForQuery is processed
+ assert.equal(client.getTransactionStatus(), 'E', 'should be in error state')
+
+ // Rollback to recover
+ client.query(
+ 'ROLLBACK',
+ assert.success(function () {
+ assert.equal(
+ client.getTransactionStatus(),
+ 'I',
+ 'should return to idle after rollback from error'
+ )
+ client.end(done)
+ })
+ )
+ })
+ })
+ })
+ )
+ })
+ )
+ })
+ )
+})
diff --git a/packages/pg/test/integration/client/type-coercion-tests.js b/packages/pg/test/integration/client/type-coercion-tests.js
index 3bc6273c4..705ff0946 100644
--- a/packages/pg/test/integration/client/type-coercion-tests.js
+++ b/packages/pg/test/integration/client/type-coercion-tests.js
@@ -1,9 +1,10 @@
'use strict'
-var helper = require('./test-helper')
-var pg = helper.pg
+const helper = require('./test-helper')
+const pg = helper.pg
const suite = new helper.Suite()
+const assert = require('assert')
-var testForTypeCoercion = function (type) {
+const testForTypeCoercion = function (type) {
const pool = new pg.Pool()
suite.test(`test type coercion ${type.name}`, (cb) => {
pool.connect(function (err, client, done) {
@@ -14,7 +15,7 @@ var testForTypeCoercion = function (type) {
assert(!err)
type.values.forEach(function (val) {
- var insertQuery = client.query(
+ client.query(
'insert into test_type(col) VALUES($1)',
[val],
assert.calls(function (err, result) {
@@ -22,7 +23,7 @@ var testForTypeCoercion = function (type) {
})
)
- var query = client.query(
+ const query = client.query(
new pg.Query({
name: 'get type ' + type.name,
text: 'select col from test_type',
@@ -38,8 +39,8 @@ var testForTypeCoercion = function (type) {
query,
'row',
function (row) {
- var expected = val + ' (' + typeof val + ')'
- var returned = row.col + ' (' + typeof row.col + ')'
+ const expected = val + ' (' + typeof val + ')'
+ const returned = row.col + ' (' + typeof row.col + ')'
assert.strictEqual(row.col, val, 'expected ' + type.name + ' of ' + expected + ' but got ' + returned)
},
'row should have been called for ' + type.name + ' of ' + val
@@ -58,7 +59,7 @@ var testForTypeCoercion = function (type) {
})
}
-var types = [
+let types = [
{
name: 'integer',
values: [-2147483648, -1, 0, 1, 2147483647, null],
@@ -135,22 +136,20 @@ if (helper.config.binary) {
})
}
-var valueCount = 0
-
types.forEach(function (type) {
testForTypeCoercion(type)
})
-suite.test('timestampz round trip', function (cb) {
- var now = new Date()
- var client = helper.client()
+suite.test('timestamptz round trip', function (cb) {
+ const now = new Date()
+ const client = helper.client()
client.query('create temp table date_tests(name varchar(10), tstz timestamptz(3))')
client.query({
text: 'insert into date_tests(name, tstz)VALUES($1, $2)',
name: 'add date',
values: ['now', now],
})
- var result = client.query(
+ const result = client.query(
new pg.Query({
name: 'get date',
text: 'select * from date_tests where name = $1',
@@ -159,7 +158,7 @@ suite.test('timestampz round trip', function (cb) {
)
assert.emits(result, 'row', function (row) {
- var date = row.tstz
+ const date = row.tstz
assert.equal(date.getYear(), now.getYear())
assert.equal(date.getMonth(), now.getMonth())
assert.equal(date.getDate(), now.getDate())
@@ -197,7 +196,7 @@ suite.test('selecting nulls', (cb) => {
})
suite.test('date range extremes', function (done) {
- var client = helper.client()
+ const client = helper.client()
// Set the server timeszone to the same as used for the test,
// otherwise (if server's timezone is ahead of GMT) in
diff --git a/packages/pg/test/integration/client/type-parser-override-tests.js b/packages/pg/test/integration/client/type-parser-override-tests.js
index 42c3dafba..883e61bad 100644
--- a/packages/pg/test/integration/client/type-parser-override-tests.js
+++ b/packages/pg/test/integration/client/type-parser-override-tests.js
@@ -1,8 +1,9 @@
'use strict'
-var helper = require('./test-helper')
+const helper = require('./test-helper')
+const assert = require('assert')
function testTypeParser(client, expectedResult, done) {
- var boolValue = true
+ const boolValue = true
client.query('CREATE TEMP TABLE parserOverrideTest(id bool)')
client.query('INSERT INTO parserOverrideTest(id) VALUES ($1)', [boolValue])
client.query(
@@ -19,7 +20,7 @@ pool.connect(
assert.success(function (client1, done1) {
pool.connect(
assert.success(function (client2, done2) {
- var boolTypeOID = 16
+ const boolTypeOID = 16
client1.setTypeParser(boolTypeOID, function () {
return 'first client'
})
diff --git a/packages/pg/test/integration/connection-pool/connection-pool-size-tests.js b/packages/pg/test/integration/connection-pool/connection-pool-size-tests.js
index 1d87584e6..402fc5910 100644
--- a/packages/pg/test/integration/connection-pool/connection-pool-size-tests.js
+++ b/packages/pg/test/integration/connection-pool/connection-pool-size-tests.js
@@ -5,13 +5,13 @@ const assert = require('assert')
const suite = new helper.Suite()
const testPoolSize = function (max) {
- suite.testAsync(`test ${max} queries executed on a pool rapidly`, () => {
+ suite.test(`test ${max} queries executed on a pool rapidly`, async () => {
const pool = new helper.pg.Pool({ max: 10 })
let count = 0
return new Promise((resolve) => {
- for (var i = 0; i < max; i++) {
+ for (let i = 0; i < max; i++) {
pool.connect(function (err, client, release) {
assert(!err)
client.query('SELECT * FROM NOW()')
diff --git a/packages/pg/test/integration/connection-pool/error-tests.js b/packages/pg/test/integration/connection-pool/error-tests.js
index f3f9cdcaa..d5857b583 100644
--- a/packages/pg/test/integration/connection-pool/error-tests.js
+++ b/packages/pg/test/integration/connection-pool/error-tests.js
@@ -1,7 +1,8 @@
'use strict'
-var helper = require('./test-helper')
+const helper = require('./test-helper')
const pg = helper.pg
const native = helper.args.native
+const assert = require('assert')
const suite = new helper.Suite()
suite.test('connecting to invalid port', (cb) => {
@@ -18,14 +19,13 @@ suite.test('errors emitted on checked-out clients', (cb) => {
client.query('SELECT NOW()', function () {
pool.connect(
assert.success(function (client2, done2) {
- var pidColName = 'procpid'
helper.versionGTE(
client2,
90200,
assert.success(function (isGreater) {
- var killIdleQuery =
+ let killIdleQuery =
'SELECT pid, (SELECT pg_terminate_backend(pid)) AS killed FROM pg_stat_activity WHERE state = $1'
- var params = ['idle']
+ let params = ['idle']
if (!isGreater) {
killIdleQuery =
'SELECT procpid, (SELECT pg_terminate_backend(procpid)) AS killed FROM pg_stat_activity WHERE current_query LIKE $1'
diff --git a/packages/pg/test/integration/connection-pool/idle-timeout-tests.js b/packages/pg/test/integration/connection-pool/idle-timeout-tests.js
index f36b6938e..bc67f856f 100644
--- a/packages/pg/test/integration/connection-pool/idle-timeout-tests.js
+++ b/packages/pg/test/integration/connection-pool/idle-timeout-tests.js
@@ -1,5 +1,6 @@
'use strict'
-var helper = require('./test-helper')
+const helper = require('./test-helper')
+const assert = require('assert')
new helper.Suite().test('idle timeout', function () {
const config = Object.assign({}, helper.config, { idleTimeoutMillis: 50 })
diff --git a/packages/pg/test/integration/connection-pool/native-instance-tests.js b/packages/pg/test/integration/connection-pool/native-instance-tests.js
index a981503e8..ae49813d0 100644
--- a/packages/pg/test/integration/connection-pool/native-instance-tests.js
+++ b/packages/pg/test/integration/connection-pool/native-instance-tests.js
@@ -1,12 +1,14 @@
'use strict'
-var helper = require('./../test-helper')
-var pg = helper.pg
-var native = helper.args.native
+const helper = require('./../test-helper')
+const pg = helper.pg
+const native = helper.args.native
+const assert = require('assert')
-var pool = new pg.Pool()
+const pool = new pg.Pool()
pool.connect(
assert.calls(function (err, client, done) {
+ console.log('native?', native)
if (native) {
assert(client.native)
} else {
diff --git a/packages/pg/test/integration/connection-pool/test-helper.js b/packages/pg/test/integration/connection-pool/test-helper.js
index 14f8134eb..c915ce09b 100644
--- a/packages/pg/test/integration/connection-pool/test-helper.js
+++ b/packages/pg/test/integration/connection-pool/test-helper.js
@@ -1,4 +1,4 @@
'use strict'
-var helper = require('./../test-helper')
+const helper = require('./../test-helper')
module.exports = helper
diff --git a/packages/pg/test/integration/connection-pool/tls-tests.js b/packages/pg/test/integration/connection-pool/tls-tests.js
index f85941d45..950f2acf3 100644
--- a/packages/pg/test/integration/connection-pool/tls-tests.js
+++ b/packages/pg/test/integration/connection-pool/tls-tests.js
@@ -8,7 +8,7 @@ const pg = helper.pg
const suite = new helper.Suite()
if (process.env.PG_CLIENT_CERT_TEST) {
- suite.testAsync('client certificate', async () => {
+ suite.test('client certificate', async () => {
const pool = new pg.Pool({
ssl: {
ca: fs.readFileSync(process.env.PGSSLROOTCERT),
diff --git a/packages/pg/test/integration/connection-pool/yield-support-tests.js b/packages/pg/test/integration/connection-pool/yield-support-tests.js
index 00508f5d6..d3b33cc21 100644
--- a/packages/pg/test/integration/connection-pool/yield-support-tests.js
+++ b/packages/pg/test/integration/connection-pool/yield-support-tests.js
@@ -1,16 +1,17 @@
'use strict'
-var helper = require('./test-helper')
-var co = require('co')
+const helper = require('./test-helper')
+const co = require('co')
+const assert = require('assert')
const pool = new helper.pg.Pool()
new helper.Suite().test(
'using coroutines works with promises',
co.wrap(function* () {
- var client = yield pool.connect()
- var res = yield client.query('SELECT $1::text as name', ['foo'])
+ const client = yield pool.connect()
+ const res = yield client.query('SELECT $1::text as name', ['foo'])
assert.equal(res.rows[0].name, 'foo')
- var threw = false
+ let threw = false
try {
yield client.query('SELECT LKDSJDSLKFJ')
} catch (e) {
diff --git a/packages/pg/test/integration/connection/bound-command-tests.js b/packages/pg/test/integration/connection/bound-command-tests.js
deleted file mode 100644
index 15f4f791e..000000000
--- a/packages/pg/test/integration/connection/bound-command-tests.js
+++ /dev/null
@@ -1,58 +0,0 @@
-'use strict'
-var helper = require('./test-helper')
-// http://developer.postgresql.org/pgdocs/postgres/protocol-flow.html#PROTOCOL-FLOW-EXT-QUERY
-
-test('flushing once', function () {
- helper.connect(function (con) {
- con.parse({
- text: 'select * from ids',
- })
-
- con.bind()
- con.execute()
- con.flush()
-
- assert.emits(con, 'parseComplete')
- assert.emits(con, 'bindComplete')
- assert.emits(con, 'dataRow')
- assert.emits(con, 'commandComplete', function () {
- con.sync()
- })
- assert.emits(con, 'readyForQuery', function () {
- con.end()
- })
- })
-})
-
-test('sending many flushes', function () {
- helper.connect(function (con) {
- assert.emits(con, 'parseComplete', function () {
- con.bind()
- con.flush()
- })
-
- assert.emits(con, 'bindComplete', function () {
- con.execute()
- con.flush()
- })
-
- assert.emits(con, 'dataRow', function (msg) {
- assert.equal(msg.fields[0], 1)
- assert.emits(con, 'dataRow', function (msg) {
- assert.equal(msg.fields[0], 2)
- assert.emits(con, 'commandComplete', function () {
- con.sync()
- })
- assert.emits(con, 'readyForQuery', function () {
- con.end()
- })
- })
- })
-
- con.parse({
- text: 'select * from ids order by id',
- })
-
- con.flush()
- })
-})
diff --git a/packages/pg/test/integration/connection/copy-tests.js b/packages/pg/test/integration/connection/copy-tests.js
deleted file mode 100644
index 177009d00..000000000
--- a/packages/pg/test/integration/connection/copy-tests.js
+++ /dev/null
@@ -1,43 +0,0 @@
-'use strict'
-var helper = require('./test-helper')
-var assert = require('assert')
-
-test('COPY FROM events check', function () {
- helper.connect(function (con) {
- var stdinStream = con.query('COPY person FROM STDIN')
- con.on('copyInResponse', function () {
- con.endCopyFrom()
- })
- assert.emits(
- con,
- 'copyInResponse',
- function () {
- con.endCopyFrom()
- },
- 'backend should emit copyInResponse after COPY FROM query'
- )
- assert.emits(
- con,
- 'commandComplete',
- function () {
- con.end()
- },
- 'backend should emit commandComplete after COPY FROM stream ends'
- )
- })
-})
-test('COPY TO events check', function () {
- helper.connect(function (con) {
- var stdoutStream = con.query('COPY person TO STDOUT')
- assert.emits(con, 'copyOutResponse', function () {}, 'backend should emit copyOutResponse after COPY TO query')
- assert.emits(con, 'copyData', function () {}, 'backend should emit copyData on every data row')
- assert.emits(
- con,
- 'copyDone',
- function () {
- con.end()
- },
- 'backend should emit copyDone after all data rows'
- )
- })
-})
diff --git a/packages/pg/test/integration/connection/dynamic-password-tests.js b/packages/pg/test/integration/connection/dynamic-password-tests.js
deleted file mode 100644
index 3ab39d0bc..000000000
--- a/packages/pg/test/integration/connection/dynamic-password-tests.js
+++ /dev/null
@@ -1,119 +0,0 @@
-'use strict'
-const assert = require('assert')
-const helper = require('./../test-helper')
-const suite = new helper.Suite()
-const pg = require('../../../lib/index')
-const Client = pg.Client
-
-const password = process.env.PGPASSWORD || null
-const sleep = (millis) => new Promise((resolve) => setTimeout(resolve, millis))
-
-if (!password) {
- // skip these tests; no password will be requested
- return
-}
-
-suite.testAsync('Get password from a sync function', () => {
- let wasCalled = false
- function getPassword() {
- wasCalled = true
- return password
- }
- const client = new Client({
- password: getPassword,
- })
- return client.connect().then(() => {
- assert.ok(wasCalled, 'Our password function should have been called')
- return client.end()
- })
-})
-
-suite.testAsync('Throw error from a sync function', () => {
- let wasCalled = false
- const myError = new Error('Oops!')
- function getPassword() {
- wasCalled = true
- throw myError
- }
- const client = new Client({
- password: getPassword,
- })
- let wasThrown = false
- return client
- .connect()
- .catch((err) => {
- assert.equal(err, myError, 'Our sync error should have been thrown')
- wasThrown = true
- })
- .then(() => {
- assert.ok(wasCalled, 'Our password function should have been called')
- assert.ok(wasThrown, 'Our error should have been thrown')
- return client.end()
- })
-})
-
-suite.testAsync('Get password from a function asynchronously', () => {
- let wasCalled = false
- function getPassword() {
- wasCalled = true
- return sleep(100).then(() => password)
- }
- const client = new Client({
- password: getPassword,
- })
- return client.connect().then(() => {
- assert.ok(wasCalled, 'Our password function should have been called')
- return client.end()
- })
-})
-
-suite.testAsync('Throw error from an async function', () => {
- let wasCalled = false
- const myError = new Error('Oops!')
- function getPassword() {
- wasCalled = true
- return sleep(100).then(() => {
- throw myError
- })
- }
- const client = new Client({
- password: getPassword,
- })
- let wasThrown = false
- return client
- .connect()
- .catch((err) => {
- assert.equal(err, myError, 'Our async error should have been thrown')
- wasThrown = true
- })
- .then(() => {
- assert.ok(wasCalled, 'Our password function should have been called')
- assert.ok(wasThrown, 'Our error should have been thrown')
- return client.end()
- })
-})
-
-suite.testAsync('Password function must return a string', () => {
- let wasCalled = false
- function getPassword() {
- wasCalled = true
- // Return a password that is not a string
- return 12345
- }
- const client = new Client({
- password: getPassword,
- })
- let wasThrown = false
- return client
- .connect()
- .catch((err) => {
- assert.ok(err instanceof TypeError, 'A TypeError should have been thrown')
- assert.equal(err.message, 'Password must be a string')
- wasThrown = true
- })
- .then(() => {
- assert.ok(wasCalled, 'Our password function should have been called')
- assert.ok(wasThrown, 'Our error should have been thrown')
- return client.end()
- })
-})
diff --git a/packages/pg/test/integration/connection/notification-tests.js b/packages/pg/test/integration/connection/notification-tests.js
deleted file mode 100644
index 534106d4b..000000000
--- a/packages/pg/test/integration/connection/notification-tests.js
+++ /dev/null
@@ -1,16 +0,0 @@
-'use strict'
-var helper = require('./test-helper')
-// http://www.postgresql.org/docs/8.3/static/libpq-notify.html
-test('recieves notification from same connection with no payload', function () {
- helper.connect(function (con) {
- con.query('LISTEN boom')
- assert.emits(con, 'readyForQuery', function () {
- con.query('NOTIFY boom')
- assert.emits(con, 'notification', function (msg) {
- assert.equal(msg.payload, '')
- assert.equal(msg.channel, 'boom')
- con.end()
- })
- })
- })
-})
diff --git a/packages/pg/test/integration/connection/query-tests.js b/packages/pg/test/integration/connection/query-tests.js
deleted file mode 100644
index 4105bb719..000000000
--- a/packages/pg/test/integration/connection/query-tests.js
+++ /dev/null
@@ -1,26 +0,0 @@
-'use strict'
-var helper = require('./test-helper')
-var assert = require('assert')
-
-var rows = []
-// testing the low level 1-1 mapping api of client to postgres messages
-// it's cumbersome to use the api this way
-test('simple query', function () {
- helper.connect(function (con) {
- con.query('select * from ids')
- assert.emits(con, 'dataRow')
- con.on('dataRow', function (msg) {
- rows.push(msg.fields)
- })
- assert.emits(con, 'readyForQuery', function () {
- con.end()
- })
- })
-})
-
-process.on('exit', function () {
- assert.equal(rows.length, 2)
- assert.equal(rows[0].length, 1)
- assert.strictEqual(String(rows[0][0]), '1')
- assert.strictEqual(String(rows[1][0]), '2')
-})
diff --git a/packages/pg/test/integration/connection/test-helper.js b/packages/pg/test/integration/connection/test-helper.js
deleted file mode 100644
index a94c64be5..000000000
--- a/packages/pg/test/integration/connection/test-helper.js
+++ /dev/null
@@ -1,40 +0,0 @@
-'use strict'
-var net = require('net')
-var helper = require('../test-helper')
-var Connection = require('../../../lib/connection')
-var utils = require('../../../lib/utils')
-var connect = function (callback) {
- var username = helper.args.user
- var database = helper.args.database
- var con = new Connection({ stream: new net.Stream() })
- con.on('error', function (error) {
- console.log(error)
- throw new Error('Connection error')
- })
- con.connect(helper.args.port || '5432', helper.args.host || 'localhost')
- con.once('connect', function () {
- con.startup({
- user: username,
- database: database,
- })
- con.once('authenticationCleartextPassword', function () {
- con.password(helper.args.password)
- })
- con.once('authenticationMD5Password', function (msg) {
- con.password(utils.postgresMd5PasswordHash(helper.args.user, helper.args.password, msg.salt))
- })
- con.once('readyForQuery', function () {
- con.query('create temp table ids(id integer)')
- con.once('readyForQuery', function () {
- con.query('insert into ids(id) values(1); insert into ids(id) values(2);')
- con.once('readyForQuery', function () {
- callback(con)
- })
- })
- })
- })
-}
-
-module.exports = {
- connect: connect,
-}
diff --git a/packages/pg/test/integration/domain-tests.js b/packages/pg/test/integration/domain-tests.js
index ce46eb8a4..ae63a4a8e 100644
--- a/packages/pg/test/integration/domain-tests.js
+++ b/packages/pg/test/integration/domain-tests.js
@@ -1,10 +1,10 @@
'use strict'
-var async = require('async')
-var helper = require('./test-helper')
-var Query = helper.pg.Query
-var suite = new helper.Suite()
+const helper = require('./test-helper')
+const Query = helper.pg.Query
+const suite = new helper.Suite()
+const assert = require('assert')
const Pool = helper.pg.Pool
suite.test('no domain', function (cb) {
@@ -22,15 +22,15 @@ suite.test('no domain', function (cb) {
suite.test('with domain', function (cb) {
assert(!process.domain)
const pool = new Pool()
- var domain = require('domain').create()
+ const domain = require('domain').create()
domain.run(function () {
- var startingDomain = process.domain
+ const startingDomain = process.domain
assert(startingDomain)
pool.connect(
assert.success(function (client, done) {
assert(process.domain, 'no domain exists in connect callback')
assert.equal(startingDomain, process.domain, 'domain was lost when checking out a client')
- var query = client.query(
+ client.query(
'SELECT NOW()',
assert.success(function () {
assert(process.domain, 'no domain exists in query callback')
@@ -46,7 +46,7 @@ suite.test('with domain', function (cb) {
})
suite.test('error on domain', function (cb) {
- var domain = require('domain').create()
+ const domain = require('domain').create()
const pool = new Pool()
domain.on('error', function () {
pool.end(cb)
diff --git a/packages/pg/test/integration/gh-issues/1105-tests.js b/packages/pg/test/integration/gh-issues/1105-tests.js
index d9885f8a7..eb3acbe96 100644
--- a/packages/pg/test/integration/gh-issues/1105-tests.js
+++ b/packages/pg/test/integration/gh-issues/1105-tests.js
@@ -1,8 +1,7 @@
-const pg = require('../../../lib')
const helper = require('../test-helper')
const suite = new helper.Suite()
-suite.testAsync('timeout causing query crashes', async () => {
+suite.test('timeout causing query crashes', async () => {
const client = new helper.Client()
await client.connect()
await client.query('CREATE TEMP TABLE foobar( name TEXT NOT NULL, id SERIAL)')
diff --git a/packages/pg/test/integration/gh-issues/130-tests.js b/packages/pg/test/integration/gh-issues/130-tests.js
index fb86b5ba3..88c4dfb79 100644
--- a/packages/pg/test/integration/gh-issues/130-tests.js
+++ b/packages/pg/test/integration/gh-issues/130-tests.js
@@ -1,6 +1,7 @@
'use strict'
-var helper = require('../test-helper')
-var exec = require('child_process').exec
+const helper = require('../test-helper')
+const exec = require('child_process').exec
+const assert = require('assert')
helper.pg.defaults.poolIdleTimeout = 1000
@@ -13,8 +14,8 @@ pool.connect(function (err, client, done) {
})
client.query('SELECT pg_backend_pid()', function (err, result) {
assert.ifError(err)
- var pid = result.rows[0].pg_backend_pid
- var psql = 'psql'
+ const pid = result.rows[0].pg_backend_pid
+ let psql = 'psql'
if (helper.args.host) psql = psql + ' -h ' + helper.args.host
if (helper.args.port) psql = psql + ' -p ' + helper.args.port
if (helper.args.user) psql = psql + ' -U ' + helper.args.user
diff --git a/packages/pg/test/integration/gh-issues/131-tests.js b/packages/pg/test/integration/gh-issues/131-tests.js
index 5838067fc..b2144e6f4 100644
--- a/packages/pg/test/integration/gh-issues/131-tests.js
+++ b/packages/pg/test/integration/gh-issues/131-tests.js
@@ -1,8 +1,9 @@
'use strict'
-var helper = require('../test-helper')
-var pg = helper.pg
+const helper = require('../test-helper')
+const pg = helper.pg
+const assert = require('assert')
-var suite = new helper.Suite()
+const suite = new helper.Suite()
suite.test('parsing array decimal results', function (done) {
const pool = new pg.Pool()
diff --git a/packages/pg/test/integration/gh-issues/1382-tests.js b/packages/pg/test/integration/gh-issues/1382-tests.js
index e80924c64..ea2a60f77 100644
--- a/packages/pg/test/integration/gh-issues/1382-tests.js
+++ b/packages/pg/test/integration/gh-issues/1382-tests.js
@@ -1,5 +1,5 @@
'use strict'
-var helper = require('./../test-helper')
+const helper = require('./../test-helper')
const suite = new helper.Suite()
diff --git a/packages/pg/test/integration/gh-issues/1542-tests.js b/packages/pg/test/integration/gh-issues/1542-tests.js
index f65aa3fb6..b38866109 100644
--- a/packages/pg/test/integration/gh-issues/1542-tests.js
+++ b/packages/pg/test/integration/gh-issues/1542-tests.js
@@ -4,7 +4,7 @@ const assert = require('assert')
const suite = new helper.Suite()
-suite.testAsync('BoundPool can be subclassed', async () => {
+suite.test('BoundPool can be subclassed', async () => {
const Pool = helper.pg.Pool
class SubPool extends Pool {}
const subPool = new SubPool()
@@ -17,6 +17,6 @@ suite.testAsync('BoundPool can be subclassed', async () => {
suite.test('calling pg.Pool without new throws', () => {
const Pool = helper.pg.Pool
assert.throws(() => {
- const pool = Pool()
+ Pool()
})
})
diff --git a/packages/pg/test/integration/gh-issues/1854-tests.js b/packages/pg/test/integration/gh-issues/1854-tests.js
index 92ac6ec35..6e345f4cf 100644
--- a/packages/pg/test/integration/gh-issues/1854-tests.js
+++ b/packages/pg/test/integration/gh-issues/1854-tests.js
@@ -1,5 +1,5 @@
'use strict'
-var helper = require('./../test-helper')
+const helper = require('./../test-helper')
const suite = new helper.Suite()
diff --git a/packages/pg/test/integration/gh-issues/199-tests.js b/packages/pg/test/integration/gh-issues/199-tests.js
index 2710020c5..10246eb98 100644
--- a/packages/pg/test/integration/gh-issues/199-tests.js
+++ b/packages/pg/test/integration/gh-issues/199-tests.js
@@ -1,11 +1,12 @@
'use strict'
-var helper = require('../test-helper')
-var client = helper.client()
+const helper = require('../test-helper')
+const client = helper.client()
+const assert = require('assert')
client.query('CREATE TEMP TABLE arrtest (n integer, s varchar)')
client.query("INSERT INTO arrtest VALUES (4, 'foo'), (5, 'bar'), (6, 'baz');")
-var qText =
+const qText =
"SELECT \
ARRAY[1, 2, 3] AS b,\
ARRAY['xx', 'yy', 'zz'] AS c,\
@@ -14,8 +15,8 @@ ARRAY(SELECT s FROM arrtest) AS e;"
client.query(qText, function (err, result) {
if (err) throw err
- var row = result.rows[0]
- for (var key in row) {
+ const row = result.rows[0]
+ for (const key in row) {
assert.equal(typeof row[key], 'object')
assert.equal(row[key].length, 3)
}
diff --git a/packages/pg/test/integration/gh-issues/2056-tests.js b/packages/pg/test/integration/gh-issues/2056-tests.js
index 2a12678b9..cf1be338f 100644
--- a/packages/pg/test/integration/gh-issues/2056-tests.js
+++ b/packages/pg/test/integration/gh-issues/2056-tests.js
@@ -1,6 +1,6 @@
'use strict'
-var helper = require('./../test-helper')
-var assert = require('assert')
+const helper = require('./../test-helper')
+const assert = require('assert')
const suite = new helper.Suite()
diff --git a/packages/pg/test/integration/gh-issues/2064-tests.js b/packages/pg/test/integration/gh-issues/2064-tests.js
index 6118ca2f4..0878b7941 100644
--- a/packages/pg/test/integration/gh-issues/2064-tests.js
+++ b/packages/pg/test/integration/gh-issues/2064-tests.js
@@ -25,7 +25,6 @@ suite.test('Password should not exist in util.inspect output', () => {
suite.test('Password should not exist in json.stringfy output', () => {
const pool = new helper.pg.Pool({ password })
const client = new helper.pg.Client({ password })
- const depth = 20
assert(JSON.stringify(pool).indexOf(password) === -1)
assert(JSON.stringify(client).indexOf(password) === -1)
})
diff --git a/packages/pg/test/integration/gh-issues/2079-tests.js b/packages/pg/test/integration/gh-issues/2079-tests.js
index ad1c82aac..5c31b83d2 100644
--- a/packages/pg/test/integration/gh-issues/2079-tests.js
+++ b/packages/pg/test/integration/gh-issues/2079-tests.js
@@ -1,11 +1,11 @@
'use strict'
-var helper = require('./../test-helper')
-var assert = require('assert')
+const helper = require('./../test-helper')
+const assert = require('assert')
const suite = new helper.Suite()
// makes a backend server that responds with a non 'S' ssl response buffer
-let makeTerminatingBackend = (byte) => {
+const makeTerminatingBackend = (byte) => {
const { createServer } = require('net')
const server = createServer((socket) => {
diff --git a/packages/pg/test/integration/gh-issues/2085-tests.js b/packages/pg/test/integration/gh-issues/2085-tests.js
index 2536bba82..80bc7f33a 100644
--- a/packages/pg/test/integration/gh-issues/2085-tests.js
+++ b/packages/pg/test/integration/gh-issues/2085-tests.js
@@ -1,6 +1,6 @@
'use strict'
-var helper = require('./../test-helper')
-var assert = require('assert')
+const helper = require('./../test-helper')
+const assert = require('assert')
const suite = new helper.Suite()
@@ -10,7 +10,7 @@ if (process.env.PGTESTNOSSL) {
return
}
-suite.testAsync('it should connect over ssl', async () => {
+suite.test('it should connect over ssl', async () => {
const ssl = helper.args.native
? 'require'
: {
@@ -23,7 +23,7 @@ suite.testAsync('it should connect over ssl', async () => {
await client.end()
})
-suite.testAsync('it should fail with self-signed cert error w/o rejectUnauthorized being passed', async () => {
+suite.test('it should fail with self-signed cert error w/o rejectUnauthorized being passed', async () => {
const ssl = helper.args.native ? 'verify-ca' : {}
const client = new helper.pg.Client({ ssl })
try {
diff --git a/packages/pg/test/integration/gh-issues/2108-tests.js b/packages/pg/test/integration/gh-issues/2108-tests.js
index cbf2caabd..22c97ef7d 100644
--- a/packages/pg/test/integration/gh-issues/2108-tests.js
+++ b/packages/pg/test/integration/gh-issues/2108-tests.js
@@ -1,5 +1,5 @@
'use strict'
-var helper = require('./../test-helper')
+const helper = require('./../test-helper')
const suite = new helper.Suite()
suite.test('Closing an unconnected client calls callback', (done) => {
@@ -7,7 +7,7 @@ suite.test('Closing an unconnected client calls callback', (done) => {
client.end(done)
})
-suite.testAsync('Closing an unconnected client resolves promise', () => {
+suite.test('Closing an unconnected client resolves promise', () => {
const client = new helper.pg.Client()
return client.end()
})
diff --git a/packages/pg/test/integration/gh-issues/2303-tests.js b/packages/pg/test/integration/gh-issues/2303-tests.js
index 7496a6f6c..533ae1645 100644
--- a/packages/pg/test/integration/gh-issues/2303-tests.js
+++ b/packages/pg/test/integration/gh-issues/2303-tests.js
@@ -25,7 +25,6 @@ suite.test('SSL Key should not exist in util.inspect output', () => {
suite.test('SSL Key should not exist in json.stringfy output', () => {
const pool = new helper.pg.Pool({ ssl: { key: secret_value } })
const client = new helper.pg.Client({ ssl: { key: secret_value } })
- const depth = 20
assert(JSON.stringify(pool).indexOf(secret_value) === -1)
assert(JSON.stringify(client).indexOf(secret_value) === -1)
})
diff --git a/packages/pg/test/integration/gh-issues/2307-tests.js b/packages/pg/test/integration/gh-issues/2307-tests.js
index d5f7c059d..240ac13f1 100644
--- a/packages/pg/test/integration/gh-issues/2307-tests.js
+++ b/packages/pg/test/integration/gh-issues/2307-tests.js
@@ -2,6 +2,7 @@
const pg = require('../../../lib')
const helper = require('../test-helper')
+const assert = require('assert')
const suite = new helper.Suite()
diff --git a/packages/pg/test/integration/gh-issues/2416-tests.js b/packages/pg/test/integration/gh-issues/2416-tests.js
index 669eb7789..88dbd13c8 100644
--- a/packages/pg/test/integration/gh-issues/2416-tests.js
+++ b/packages/pg/test/integration/gh-issues/2416-tests.js
@@ -1,8 +1,9 @@
const helper = require('../test-helper')
+const assert = require('assert')
const suite = new helper.Suite()
-suite.testAsync('it sets search_path on connection', async () => {
+suite.test('it sets search_path on connection', async () => {
const client = new helper.pg.Client({
options: '--search_path=foo',
})
diff --git a/packages/pg/test/integration/gh-issues/2556-tests.js b/packages/pg/test/integration/gh-issues/2556-tests.js
index 13fdf80eb..7ba0a0ade 100644
--- a/packages/pg/test/integration/gh-issues/2556-tests.js
+++ b/packages/pg/test/integration/gh-issues/2556-tests.js
@@ -1,15 +1,15 @@
'use strict'
-var helper = require('./../test-helper')
-var assert = require('assert')
+const helper = require('./../test-helper')
+const assert = require('assert')
-var callbackError = new Error('TEST: Throw in callback')
+const callbackError = new Error('TEST: Throw in callback')
const suite = new helper.Suite()
suite.test('it should cleanup client even if an error is thrown in a callback', (done) => {
// temporarily replace the test framework's uncaughtException handlers
// with a custom one that ignores the callbackError
- let original_handlers = process.listeners('uncaughtException')
+ const original_handlers = process.listeners('uncaughtException')
process.removeAllListeners('uncaughtException')
process.on('uncaughtException', (err) => {
if (err != callbackError) {
@@ -18,7 +18,7 @@ suite.test('it should cleanup client even if an error is thrown in a callback',
})
// throw an error in a callback and verify that a subsequent query works without error
- var client = helper.client()
+ const client = helper.client()
client.query('SELECT NOW()', (err) => {
assert(!err)
setTimeout(reuseClient, 50)
@@ -30,7 +30,7 @@ suite.test('it should cleanup client even if an error is thrown in a callback',
assert(!err)
// restore the test framework's uncaughtException handlers
- for (let handler of original_handlers) {
+ for (const handler of original_handlers) {
process.on('uncaughtException', handler)
}
diff --git a/packages/pg/test/integration/gh-issues/2627-tests.js b/packages/pg/test/integration/gh-issues/2627-tests.js
new file mode 100644
index 000000000..19f07f8af
--- /dev/null
+++ b/packages/pg/test/integration/gh-issues/2627-tests.js
@@ -0,0 +1,64 @@
+'use strict'
+const net = require('net')
+const helper = require('./../test-helper')
+const assert = require('assert')
+
+const suite = new helper.Suite()
+
+const options = {
+ host: 'localhost',
+ port: Math.floor(Math.random() * 2000) + 2000,
+ connectionTimeoutMillis: 2000,
+ user: 'not',
+ database: 'existing',
+}
+
+// This is the content of the packets sent by a MySQL server during the handshake.
+// Those were captured with the `mysql:8.0.33` docker image.
+const MySqlHandshake = Buffer.from(
+ 'SgAAAAo4LjAuMjgAHwAAAB4dKyUJZ2p6AP///wIA/98VAAAAAAAAAAAA' +
+ 'AAo1YiNJajgKKGkpfgBjYWNoaW5nX3NoYTJfcGFzc3dvcmQAIQAAAf+EBC' +
+ 'MwOFMwMUdvdCBwYWNrZXRzIG91dCBvZiBvcmRlcg==',
+ 'base64'
+)
+
+const serverWithInvalidResponse = (port, callback) => {
+ const sockets = new Set()
+
+ const server = net.createServer((socket) => {
+ socket.write(MySqlHandshake)
+
+ // This server sends an invalid response which should throw in pg-protocol
+ sockets.add(socket)
+ })
+
+ let closing = false
+ const closeServer = (done) => {
+ if (closing) return
+ closing = true
+
+ server.close(done)
+ for (const socket of sockets) {
+ socket.destroy()
+ }
+ }
+
+ server.listen(port, options.host, () => callback(closeServer))
+}
+
+suite.test('client should fail to connect', (done) => {
+ serverWithInvalidResponse(options.port, (closeServer) => {
+ const client = new helper.Client(options)
+
+ client
+ .connect()
+ .then(() => {
+ done(new Error('Expected client.connect() to fail'))
+ })
+ .catch((err) => {
+ assert(err)
+ assert(err.message.includes('invalid response'))
+ closeServer(done)
+ })
+ })
+})
diff --git a/packages/pg/test/integration/gh-issues/2716-tests.js b/packages/pg/test/integration/gh-issues/2716-tests.js
new file mode 100644
index 000000000..87bcc3032
--- /dev/null
+++ b/packages/pg/test/integration/gh-issues/2716-tests.js
@@ -0,0 +1,38 @@
+'use strict'
+const helper = require('../test-helper')
+
+const suite = new helper.Suite()
+
+// https://github.com/brianc/node-postgres/issues/2716
+suite.test('client.end() should resolve if already ended', async () => {
+ const client = new helper.pg.Client()
+ await client.connect()
+
+ // this should resolve only when the underlying socket is fully closed, both
+ // the readable part ("end" event) & writable part ("close" event).
+
+ // https://nodejs.org/docs/latest-v16.x/api/net.html#event-end
+ // > Emitted when the other end of the socket signals the end of
+ // > transmission, thus ending the readable side of the socket.
+
+ // https://nodejs.org/docs/latest-v16.x/api/net.html#event-close_1
+ // > Emitted once the socket is fully closed.
+
+ // here: stream = socket
+
+ await client.end()
+ // connection.end()
+ // stream.end()
+ // ...
+ // stream emits "end"
+ // not listening to this event anymore so the promise doesn't resolve yet
+ // stream emits "close"; no more events will be emitted from the stream
+ // connection emits "end"
+ // promise resolved
+
+ // This should now resolve immediately, rather than wait for connection.on('end')
+ await client.end()
+
+ // this should resolve immediately, rather than waiting forever
+ await client.end()
+})
diff --git a/packages/pg/test/integration/gh-issues/2862-tests.js b/packages/pg/test/integration/gh-issues/2862-tests.js
new file mode 100644
index 000000000..8c55bbd9d
--- /dev/null
+++ b/packages/pg/test/integration/gh-issues/2862-tests.js
@@ -0,0 +1,23 @@
+'use strict'
+
+const helper = require('../test-helper')
+const assert = require('assert')
+const vm = require('vm')
+
+const suite = new helper.Suite()
+
+suite.test('Handle date objects as Date', async () => {
+ const crossRealmDate = await vm.runInNewContext('new Date()')
+ assert(!(crossRealmDate instanceof Date))
+ const date = new Date(crossRealmDate.getTime())
+ const client = new helper.pg.Client()
+ await client.connect()
+
+ await client.query('CREATE TEMP TABLE foo(bar timestamptz, bar2 timestamptz)')
+ await client.query('INSERT INTO foo(bar, bar2) VALUES($1, $2)', [date, crossRealmDate])
+ const results = await client.query('SELECT * FROM foo')
+ const row = results.rows[0]
+ assert.deepStrictEqual(row.bar, date)
+ assert.deepStrictEqual(row.bar2, date)
+ await client.end()
+})
diff --git a/packages/pg/test/integration/gh-issues/3062-tests.js b/packages/pg/test/integration/gh-issues/3062-tests.js
new file mode 100644
index 000000000..40f4dbc73
--- /dev/null
+++ b/packages/pg/test/integration/gh-issues/3062-tests.js
@@ -0,0 +1,27 @@
+'use strict'
+const helper = require('../test-helper')
+const assert = require('assert')
+const suite = new helper.Suite()
+
+// https://github.com/brianc/node-postgres/issues/3062
+suite.test('result fields with the same name should pick the last value', async () => {
+ const client = new helper.pg.Client()
+ await client.connect()
+
+ const {
+ rows: [shouldBeNullRow],
+ } = await client.query('SELECT NULL AS test, 10 AS test, NULL AS test')
+ assert.equal(shouldBeNullRow.test, null)
+
+ const {
+ rows: [shouldBeTwelveRow],
+ } = await client.query('SELECT NULL AS test, 10 AS test, 12 AS test')
+ assert.equal(shouldBeTwelveRow.test, 12)
+
+ const {
+ rows: [shouldBeAbcRow],
+ } = await client.query(`SELECT NULL AS test, 10 AS test, 12 AS test, 'ABC' AS test`)
+ assert.equal(shouldBeAbcRow.test, 'ABC')
+
+ await client.end()
+})
diff --git a/packages/pg/test/integration/gh-issues/3174-tests.js b/packages/pg/test/integration/gh-issues/3174-tests.js
new file mode 100644
index 000000000..cd920346a
--- /dev/null
+++ b/packages/pg/test/integration/gh-issues/3174-tests.js
@@ -0,0 +1,178 @@
+const net = require('net')
+const buffers = require('../../test-buffers')
+const helper = require('../test-helper')
+const assert = require('assert')
+const cli = helper.args
+
+const suite = new helper.Suite()
+
+const options = {
+ host: 'localhost',
+ port: Math.floor(Math.random() * 2000) + 2000,
+ connectionTimeoutMillis: 2000,
+ user: 'not',
+ database: 'existing',
+}
+
+const startMockServer = (port, badBuffer, callback) => {
+ const sockets = new Set()
+
+ const server = net.createServer((socket) => {
+ sockets.add(socket)
+ socket.once('end', () => sockets.delete(socket))
+
+ socket.on('data', (data) => {
+ // deny request for SSL
+ if (data.length === 8) {
+ socket.write(Buffer.from('N', 'utf8'))
+ return
+ // consider all authentication requests as good
+ }
+ // the initial message coming in has a 0 message type for authentication negotiation
+ if (!data[0]) {
+ socket.write(buffers.authenticationOk())
+ // send ReadyForQuery `timeout` ms after authentication
+ socket.write(buffers.readyForQuery())
+ return
+ // respond with our canned response
+ }
+ const code = data.toString('utf8', 0, 1)
+ switch (code) {
+ // parse
+ case 'P':
+ socket.write(buffers.parseComplete())
+ socket.write(buffers.bindComplete())
+ socket.write(buffers.rowDescription())
+ socket.write(buffers.dataRow())
+ socket.write(buffers.commandComplete('FOO BAR'))
+ socket.write(buffers.readyForQuery())
+ // this message is invalid, but sometimes sent out of order when using proxies or pg-bouncer
+ setImmediate(() => {
+ socket.write(badBuffer)
+ })
+ break
+ case 'Q':
+ socket.write(buffers.rowDescription())
+ socket.write(buffers.dataRow())
+ socket.write(buffers.commandComplete('FOO BAR'))
+ socket.write(buffers.readyForQuery())
+ // this message is invalid, but sometimes sent out of order when using proxies or pg-bouncer
+ setImmediate(() => {
+ socket.write(badBuffer)
+ })
+ break
+ default:
+ // console.log('got code', code)
+ }
+ })
+ })
+
+ const closeServer = () => {
+ for (const socket of sockets) {
+ socket.destroy()
+ }
+ return new Promise((resolve) => {
+ server.close(resolve)
+ })
+ }
+
+ server.listen(port, options.host, () => callback(closeServer))
+}
+
+const delay = (ms) =>
+ new Promise((resolve) => {
+ setTimeout(resolve, ms)
+ })
+
+const testErrorBuffer = (bufferName, errorBuffer) => {
+ suite.test(`Out of order ${bufferName} on simple query is catchable`, async () => {
+ const closeServer = await new Promise((resolve, reject) => {
+ return startMockServer(options.port, errorBuffer, (closeServer) => resolve(closeServer))
+ })
+ const client = new helper.Client(options)
+ await client.connect()
+
+ let errorHit = false
+ client.on('error', () => {
+ errorHit = true
+ })
+
+ await client.query('SELECT NOW()')
+ await delay(50)
+
+ // the native client only emits a notice message and keeps on its merry way
+ if (!cli.native) {
+ assert(errorHit)
+ // further queries on the client should fail since its in an invalid state
+ await assert.rejects(client.query('SELECT NOW()'), {
+ message: 'Client has encountered a connection error and is not queryable',
+ })
+ }
+
+ await closeServer()
+ })
+
+ suite.test(`Out of order ${bufferName} on extended query is catchable`, async () => {
+ const closeServer = await new Promise((resolve, reject) => {
+ return startMockServer(options.port, errorBuffer, (closeServer) => resolve(closeServer))
+ })
+ const client = new helper.Client(options)
+ await client.connect()
+
+ let errorHit = false
+ client.on('error', () => {
+ errorHit = true
+ })
+
+ await client.query('SELECT $1', ['foo'])
+ await delay(40)
+
+ // the native client only emits a notice message and keeps on its merry way
+ if (!cli.native) {
+ assert(errorHit)
+ // further queries on the client should fail since its in an invalid state
+ await assert.rejects(client.query('SELECT NOW()'), {
+ message: 'Client has encountered a connection error and is not queryable',
+ })
+ }
+
+ await client.end()
+
+ await closeServer()
+ })
+
+ suite.test(`Out of order ${bufferName} on pool is catchable`, async () => {
+ const closeServer = await new Promise((resolve, reject) => {
+ return startMockServer(options.port, errorBuffer, (closeServer) => resolve(closeServer))
+ })
+ const pool = new helper.pg.Pool(options)
+
+ let errorHit = false
+ pool.on('error', () => {
+ errorHit = true
+ })
+
+ await pool.query('SELECT $1', ['foo'])
+ await delay(100)
+
+ if (!cli.native) {
+ assert(errorHit)
+ assert.strictEqual(pool.idleCount, 0, 'Pool should have no idle clients')
+ assert.strictEqual(pool.totalCount, 0, 'Pool should have no connected clients')
+ }
+
+ await pool.end()
+ await closeServer()
+ })
+}
+
+if (!helper.args.native) {
+ testErrorBuffer('parseComplete', buffers.parseComplete())
+ testErrorBuffer('commandComplete', buffers.commandComplete('f'))
+ testErrorBuffer('rowDescription', buffers.rowDescription())
+ testErrorBuffer('dataRow', buffers.dataRow())
+ testErrorBuffer('portalSuspended', buffers.portalSuspended())
+ testErrorBuffer('emptyQuery', buffers.emptyQuery())
+ testErrorBuffer('copyIn', buffers.copyIn(0))
+ testErrorBuffer('copyData', buffers.copyData(Buffer.from([1, 2, 3])))
+}
diff --git a/packages/pg/test/integration/gh-issues/3487-tests.js b/packages/pg/test/integration/gh-issues/3487-tests.js
new file mode 100644
index 000000000..8d187ea25
--- /dev/null
+++ b/packages/pg/test/integration/gh-issues/3487-tests.js
@@ -0,0 +1,25 @@
+const helper = require('../test-helper')
+const assert = require('assert')
+
+const suite = new helper.Suite()
+
+suite.test('allows you to switch between format modes for arrays', async () => {
+ const client = new helper.pg.Client()
+ await client.connect()
+
+ const r1 = await client.query({
+ text: 'SELECT CAST($1 AS INT[]) as a',
+ values: [[1, 2, 8]],
+ binary: false,
+ })
+ assert.deepEqual([1, 2, 8], r1.rows[0].a)
+
+ const r2 = await client.query({
+ text: 'SELECT CAST($1 AS INT[]) as a',
+ values: [[4, 5, 6]],
+ binary: true,
+ })
+ assert.deepEqual([4, 5, 6], r2.rows[0].a)
+
+ await client.end()
+})
diff --git a/packages/pg/test/integration/gh-issues/507-tests.js b/packages/pg/test/integration/gh-issues/507-tests.js
index f77d1f842..1486bcd34 100644
--- a/packages/pg/test/integration/gh-issues/507-tests.js
+++ b/packages/pg/test/integration/gh-issues/507-tests.js
@@ -1,6 +1,7 @@
'use strict'
-var helper = require('../test-helper')
-var pg = helper.pg
+const helper = require('../test-helper')
+const pg = helper.pg
+const assert = require('assert')
new helper.Suite().test('parsing array results', function (cb) {
const pool = new pg.Pool()
diff --git a/packages/pg/test/integration/gh-issues/600-tests.js b/packages/pg/test/integration/gh-issues/600-tests.js
index af679ee8e..f477e8499 100644
--- a/packages/pg/test/integration/gh-issues/600-tests.js
+++ b/packages/pg/test/integration/gh-issues/600-tests.js
@@ -1,9 +1,10 @@
'use strict'
-var async = require('async')
-var helper = require('../test-helper')
+const async = require('async')
+const helper = require('../test-helper')
const suite = new helper.Suite()
+const assert = require('assert')
-var db = helper.client()
+const db = helper.client()
function createTableFoo(callback) {
db.query('create temp table foo(column1 int, column2 int)', callback)
@@ -54,7 +55,7 @@ function doTransaction(callback) {
})
}
-var steps = [createTableFoo, createTableBar, doTransaction, insertDataBar]
+const steps = [createTableFoo, createTableBar, doTransaction, insertDataBar]
suite.test('test if query fails', function (done) {
async.series(
@@ -67,8 +68,8 @@ suite.test('test if query fails', function (done) {
})
suite.test('test if prepare works but bind fails', function (done) {
- var client = helper.client()
- var q = {
+ const client = helper.client()
+ const q = {
text: 'SELECT $1::int as name',
values: ['brian'],
name: 'test',
diff --git a/packages/pg/test/integration/gh-issues/675-tests.js b/packages/pg/test/integration/gh-issues/675-tests.js
index 2e281ecc6..8517fdbef 100644
--- a/packages/pg/test/integration/gh-issues/675-tests.js
+++ b/packages/pg/test/integration/gh-issues/675-tests.js
@@ -1,19 +1,19 @@
'use strict'
-var helper = require('../test-helper')
-var assert = require('assert')
+const helper = require('../test-helper')
+const assert = require('assert')
const pool = new helper.pg.Pool()
pool.connect(function (err, client, done) {
if (err) throw err
- var c = 'CREATE TEMP TABLE posts (body TEXT)'
+ let c = 'CREATE TEMP TABLE posts (body TEXT)'
client.query(c, function (err) {
if (err) throw err
c = 'INSERT INTO posts (body) VALUES ($1) RETURNING *'
- var body = Buffer.from('foo')
+ let body = Buffer.from('foo')
client.query(c, [body], function (err) {
if (err) throw err
diff --git a/packages/pg/test/integration/gh-issues/699-tests.js b/packages/pg/test/integration/gh-issues/699-tests.js
index c9be63bfa..7af83b8fd 100644
--- a/packages/pg/test/integration/gh-issues/699-tests.js
+++ b/packages/pg/test/integration/gh-issues/699-tests.js
@@ -1,7 +1,6 @@
'use strict'
-var helper = require('../test-helper')
-var assert = require('assert')
-var copyFrom = require('pg-copy-streams').from
+const helper = require('../test-helper')
+const copyFrom = require('pg-copy-streams').from
if (helper.args.native) return
@@ -9,12 +8,12 @@ const pool = new helper.pg.Pool()
pool.connect(function (err, client, done) {
if (err) throw err
- var c = 'CREATE TEMP TABLE employee (id integer, fname varchar(400), lname varchar(400))'
+ const c = 'CREATE TEMP TABLE employee (id integer, fname varchar(400), lname varchar(400))'
client.query(c, function (err) {
if (err) throw err
- var stream = client.query(copyFrom('COPY employee FROM STDIN'))
+ const stream = client.query(copyFrom('COPY employee FROM STDIN'))
stream.on('end', function () {
done()
setTimeout(() => {
@@ -22,8 +21,8 @@ pool.connect(function (err, client, done) {
}, 50)
})
- for (var i = 1; i <= 5; i++) {
- var line = ['1\ttest', i, '\tuser', i, '\n']
+ for (let i = 1; i <= 5; i++) {
+ const line = ['1\ttest', i, '\tuser', i, '\n']
stream.write(line.join(''))
}
stream.end()
diff --git a/packages/pg/test/integration/gh-issues/787-tests.js b/packages/pg/test/integration/gh-issues/787-tests.js
index 9a3198f52..5d518475b 100644
--- a/packages/pg/test/integration/gh-issues/787-tests.js
+++ b/packages/pg/test/integration/gh-issues/787-tests.js
@@ -1,11 +1,10 @@
'use strict'
-var helper = require('../test-helper')
+const helper = require('../test-helper')
const pool = new helper.pg.Pool()
pool.connect(function (err, client) {
- var q = {
- name:
- 'This is a super long query name just so I can test that an error message is properly spit out to console.error without throwing an exception or anything',
+ const q = {
+ name: 'This is a super long query name just so I can test that an error message is properly spit out to console.error without throwing an exception or anything',
text: 'SELECT NOW()',
}
client.query(q, function () {
diff --git a/packages/pg/test/integration/gh-issues/882-tests.js b/packages/pg/test/integration/gh-issues/882-tests.js
index 4a8ef6474..17d7aafcf 100644
--- a/packages/pg/test/integration/gh-issues/882-tests.js
+++ b/packages/pg/test/integration/gh-issues/882-tests.js
@@ -1,7 +1,7 @@
'use strict'
// client should not hang on an empty query
-var helper = require('../test-helper')
-var client = helper.client()
+const helper = require('../test-helper')
+const client = helper.client()
client.query({ name: 'foo1', text: null })
client.query({ name: 'foo2', text: ' ' })
client.query({ name: 'foo3', text: '' }, function (err, res) {
diff --git a/packages/pg/test/integration/gh-issues/981-tests.js b/packages/pg/test/integration/gh-issues/981-tests.js
index 998adea3a..68cfb0b1f 100644
--- a/packages/pg/test/integration/gh-issues/981-tests.js
+++ b/packages/pg/test/integration/gh-issues/981-tests.js
@@ -1,17 +1,17 @@
'use strict'
-var helper = require('./../test-helper')
+const helper = require('./../test-helper')
//native bindings are only installed for native tests
if (!helper.args.native) {
return
}
-var assert = require('assert')
-var pg = require('../../../lib')
-var native = require('../../../lib').native
+const assert = require('assert')
+const pg = require('../../../lib')
+const native = require('../../../lib').native
-var JsClient = require('../../../lib/client')
-var NativeClient = require('../../../lib/native')
+const JsClient = require('../../../lib/client')
+const NativeClient = require('../../../lib/native')
assert(pg.Client === JsClient)
assert(native.Client === NativeClient)
diff --git a/packages/pg/test/integration/test-helper.js b/packages/pg/test/integration/test-helper.js
index 9b8b58c60..9dab8843a 100644
--- a/packages/pg/test/integration/test-helper.js
+++ b/packages/pg/test/integration/test-helper.js
@@ -1,15 +1,17 @@
'use strict'
-var helper = require('./../test-helper')
+const helper = require('./../test-helper')
+let { Client } = helper
+const assert = require('assert')
if (helper.args.native) {
Client = require('./../../lib/native')
helper.Client = Client
- helper.pg = helper.pg.native
+ helper.pg = require('../../lib').native
}
// creates a client from cli parameters
helper.client = function (cb) {
- var client = new Client()
+ const client = new Client()
client.connect(cb)
return client
}
@@ -19,7 +21,7 @@ helper.versionGTE = function (client, testVersion, callback) {
'SHOW server_version_num',
assert.calls(function (err, result) {
if (err) return callback(err)
- var version = parseInt(result.rows[0].server_version_num, 10)
+ const version = parseInt(result.rows[0].server_version_num, 10)
return callback(null, version >= testVersion)
})
)
diff --git a/packages/pg/test/native/callback-api-tests.js b/packages/pg/test/native/callback-api-tests.js
index 80fdcdf56..8ff2063e5 100644
--- a/packages/pg/test/native/callback-api-tests.js
+++ b/packages/pg/test/native/callback-api-tests.js
@@ -1,36 +1,40 @@
'use strict'
-var domain = require('domain')
-var helper = require('./../test-helper')
-var Client = require('./../../lib/native')
+const domain = require('domain')
+const helper = require('./../test-helper')
+const Client = require('./../../lib/native')
const suite = new helper.Suite()
+const assert = require('assert')
-suite.test('fires callback with results', function (done) {
- var client = new Client(helper.config)
+suite.test('fires callback with results', async function () {
+ const client = new Client(helper.config)
client.connect()
- client.query(
- 'SELECT 1 as num',
- assert.calls(function (err, result) {
- assert(!err)
- assert.equal(result.rows[0].num, 1)
- assert.strictEqual(result.rowCount, 1)
- client.query(
- 'SELECT * FROM person WHERE name = $1',
- ['Brian'],
- assert.calls(function (err, result) {
- assert(!err)
- assert.equal(result.rows[0].name, 'Brian')
- client.end(done)
- })
- )
- })
- )
+ await helper.createPersonTable(client)
+ return new Promise((resolve) => {
+ client.query(
+ 'SELECT 1 as num',
+ assert.calls(function (err, result) {
+ assert(!err)
+ assert.equal(result.rows[0].num, 1)
+ assert.strictEqual(result.rowCount, 1)
+ client.query(
+ 'SELECT * FROM person WHERE name = $1',
+ ['Brian'],
+ assert.calls(function (err, result) {
+ assert(!err)
+ assert.equal(result.rows[0].name, 'Brian')
+ client.end(resolve)
+ })
+ )
+ })
+ )
+ })
})
suite.test('preserves domain', function (done) {
- var dom = domain.create()
+ const dom = domain.create()
dom.run(function () {
- var client = new Client(helper.config)
+ const client = new Client(helper.config)
assert.ok(dom === require('domain').active, 'domain is active')
client.connect()
client.query('select 1', function () {
diff --git a/packages/pg/test/native/evented-api-tests.js b/packages/pg/test/native/evented-api-tests.js
index ba0496eff..220fcaece 100644
--- a/packages/pg/test/native/evented-api-tests.js
+++ b/packages/pg/test/native/evented-api-tests.js
@@ -1,10 +1,13 @@
'use strict'
-var helper = require('../test-helper')
-var Client = require('../../lib/native')
-var Query = Client.Query
+const helper = require('../test-helper')
+const Client = require('../../lib/native')
+const Query = Client.Query
+const assert = require('assert')
+const suite = new helper.Suite()
+const test = suite.test.bind(suite)
-var setupClient = function () {
- var client = new Client(helper.config)
+const setupClient = function () {
+ const client = new Client(helper.config)
client.connect()
client.query('CREATE TEMP TABLE boom(name varchar(10), age integer)')
client.query("INSERT INTO boom(name, age) VALUES('Aaron', 26)")
@@ -14,8 +17,8 @@ var setupClient = function () {
test('multiple results', function () {
test('queued queries', function () {
- var client = setupClient()
- var q = client.query(new Query('SELECT name FROM BOOM'))
+ const client = setupClient()
+ const q = client.query(new Query('SELECT name FROM BOOM'))
assert.emits(q, 'row', function (row) {
assert.equal(row.name, 'Aaron')
assert.emits(q, 'row', function (row) {
@@ -24,7 +27,7 @@ test('multiple results', function () {
})
assert.emits(q, 'end', function () {
test('query with config', function () {
- var q2 = client.query(new Query({ text: 'SELECT 1 as num' }))
+ const q2 = client.query(new Query({ text: 'SELECT 1 as num' }))
assert.emits(q2, 'row', function (row) {
assert.strictEqual(row.num, 1)
assert.emits(q2, 'end', function () {
@@ -38,8 +41,8 @@ test('multiple results', function () {
test('parameterized queries', function () {
test('with a single string param', function () {
- var client = setupClient()
- var q = client.query(new Query('SELECT * FROM boom WHERE name = $1', ['Aaron']))
+ const client = setupClient()
+ const q = client.query(new Query('SELECT * FROM boom WHERE name = $1', ['Aaron']))
assert.emits(q, 'row', function (row) {
assert.equal(row.name, 'Aaron')
})
@@ -49,8 +52,8 @@ test('parameterized queries', function () {
})
test('with object config for query', function () {
- var client = setupClient()
- var q = client.query(
+ const client = setupClient()
+ const q = client.query(
new Query({
text: 'SELECT name FROM boom WHERE name = $1',
values: ['Brian'],
@@ -65,8 +68,8 @@ test('parameterized queries', function () {
})
test('multiple parameters', function () {
- var client = setupClient()
- var q = client.query(
+ const client = setupClient()
+ const q = client.query(
new Query('SELECT name FROM boom WHERE name = $1 or name = $2 ORDER BY name COLLATE "C"', ['Aaron', 'Brian'])
)
assert.emits(q, 'row', function (row) {
@@ -81,8 +84,8 @@ test('parameterized queries', function () {
})
test('integer parameters', function () {
- var client = setupClient()
- var q = client.query(new Query('SELECT * FROM boom WHERE age > $1', [27]))
+ const client = setupClient()
+ const q = client.query(new Query('SELECT * FROM boom WHERE age > $1', [27]))
assert.emits(q, 'row', function (row) {
assert.equal(row.name, 'Brian')
assert.equal(row.age, 28)
diff --git a/packages/pg/test/native/missing-native.js b/packages/pg/test/native/missing-native.js
deleted file mode 100644
index 35dad3f0b..000000000
--- a/packages/pg/test/native/missing-native.js
+++ /dev/null
@@ -1,7 +0,0 @@
-'use strict'
-// this test assumes it has been run from the Makefile
-// and that node_modules/pg-native has been deleted
-
-var assert = require('assert')
-
-assert.equal(require('../../lib').native, null)
diff --git a/packages/pg/test/native/native-connection-string-tests.js b/packages/pg/test/native/native-connection-string-tests.js
new file mode 100644
index 000000000..506a45551
--- /dev/null
+++ b/packages/pg/test/native/native-connection-string-tests.js
@@ -0,0 +1,51 @@
+'use strict'
+const helper = require('../test-helper')
+const Client = require('../../lib/native')
+const suite = new helper.Suite()
+const assert = require('assert')
+
+suite.test('respects nativeConnectionString in config', function (done) {
+ const realPort = helper.config.port
+ const nativeConnectionString = `host=${helper.config.host} port=${helper.config.port} dbname=${helper.config.database} user=${helper.config.user} password=${helper.config.password}`
+
+ // setting wrong port to make sure config is take from nativeConnectionString and not env
+ helper.config.port = '90929'
+
+ const client = new Client({
+ ...helper.config,
+ nativeConnectionString,
+ })
+
+ client.connect(function (err) {
+ assert(!err)
+ client.query(
+ 'SELECT 1 as num',
+ assert.calls(function (err, result) {
+ assert(!err)
+ assert.equal(result.rows[0].num, 1)
+ assert.strictEqual(result.rowCount, 1)
+ // restore post in case helper config will be reused
+ helper.config.port = realPort
+ client.end(done)
+ })
+ )
+ })
+})
+
+suite.test('respects nativeConnectionString in config even when it is corrupted', function (done) {
+ const nativeConnectionString = `foobar`
+
+ const client = new Client({
+ nativeConnectionString,
+ })
+
+ client.connect(function (err) {
+ assert(err)
+ assert.equal(
+ err.message,
+ 'missing "=" after "foobar" in connection info string\n',
+ 'Connection error should have been thrown'
+ )
+ client.end(done)
+ })
+})
diff --git a/packages/pg/test/native/native-vs-js-error-tests.js b/packages/pg/test/native/native-vs-js-error-tests.js
index 842e01aae..d61b0c69d 100644
--- a/packages/pg/test/native/native-vs-js-error-tests.js
+++ b/packages/pg/test/native/native-vs-js-error-tests.js
@@ -1,10 +1,10 @@
'use strict'
-var assert = require('assert')
-var Client = require('../../lib/client')
-var NativeClient = require('../../lib/native')
+const assert = require('assert')
+const Client = require('../../lib/client')
+const NativeClient = require('../../lib/native')
-var client = new Client()
-var nativeClient = new NativeClient()
+const client = new Client()
+const nativeClient = new NativeClient()
client.connect()
nativeClient.connect((err) => {
@@ -12,7 +12,7 @@ nativeClient.connect((err) => {
client.end()
nativeClient.query('SELECT lkdasjfasd', (nativeErr) => {
- for (var key in nativeErr) {
+ for (const key in nativeErr) {
assert.equal(err[key], nativeErr[key], `Expected err.${key} to equal nativeErr.${key}`)
}
nativeClient.end()
diff --git a/packages/pg/test/native/stress-tests.js b/packages/pg/test/native/stress-tests.js
index 9d1287750..8496abe80 100644
--- a/packages/pg/test/native/stress-tests.js
+++ b/packages/pg/test/native/stress-tests.js
@@ -1,13 +1,16 @@
'use strict'
-var helper = require('../test-helper')
-var Client = require('../../lib/native')
-var Query = Client.Query
+const helper = require('../test-helper')
+const Client = require('../../lib/native')
+const Query = Client.Query
+const assert = require('assert')
+const suite = new helper.Suite()
-test('many rows', function () {
- var client = new Client(helper.config)
+suite.test('many rows', async function () {
+ const client = new Client(helper.config)
client.connect()
- var q = client.query(new Query('SELECT * FROM person'))
- var rows = []
+ await helper.createPersonTable(client)
+ const q = client.query(new Query('SELECT * FROM person'))
+ const rows = []
q.on('row', function (row) {
rows.push(row)
})
@@ -17,13 +20,14 @@ test('many rows', function () {
})
})
-test('many queries', function () {
- var client = new Client(helper.config)
+suite.test('many queries', async function () {
+ const client = new Client(helper.config)
client.connect()
- var count = 0
- var expected = 100
- for (var i = 0; i < expected; i++) {
- var q = client.query(new Query('SELECT * FROM person'))
+ await helper.createPersonTable(client)
+ let count = 0
+ const expected = 100
+ for (let i = 0; i < expected; i++) {
+ const q = client.query(new Query('SELECT * FROM person'))
assert.emits(q, 'end', function () {
count++
})
@@ -34,18 +38,20 @@ test('many queries', function () {
})
})
-test('many clients', function () {
- var clients = []
- for (var i = 0; i < 10; i++) {
+suite.test('many clients', async function () {
+ const clients = []
+ for (let i = 0; i < 10; i++) {
clients.push(new Client(helper.config))
}
- clients.forEach(function (client) {
- client.connect()
- for (var i = 0; i < 20; i++) {
- client.query('SELECT * FROM person')
- }
- assert.emits(client, 'drain', function () {
+ await Promise.all(
+ clients.map(async function (client) {
+ client.connect()
+ await helper.createPersonTable(client)
+ for (let i = 0; i < 20; i++) {
+ await client.query('SELECT * FROM person')
+ }
+
client.end()
})
- })
+ )
})
diff --git a/packages/pg/test/suite.js b/packages/pg/test/suite.js
index 7d19edbb0..e8d9d0834 100644
--- a/packages/pg/test/suite.js
+++ b/packages/pg/test/suite.js
@@ -29,7 +29,7 @@ class Test {
}
result.then(() => cb()).catch((err) => cb(err || new Error('Unhandled promise rejection')))
} else {
- this.action.call(this, cb)
+ this.action(cb)
}
}
}
@@ -70,27 +70,6 @@ class Suite {
const test = new Test(name, cb)
this._queue.push(test)
}
-
- /**
- * Run an async test that can return a Promise. If the Promise resolves
- * successfully then the test will pass. If the Promise rejects with an
- * error then the test will be considered failed.
- */
- testAsync(name, action) {
- const test = new Test(name, (cb) => {
- Promise.resolve()
- .then(action)
- .then(() => cb(null), cb)
- })
- this._queue.push(test)
- }
}
-process.on('unhandledRejection', (e) => {
- setImmediate(() => {
- console.error('Unhandled promise rejection')
- throw e
- })
-})
-
module.exports = Suite
diff --git a/packages/pg/test/test-buffers.js b/packages/pg/test/test-buffers.js
index 2989434d4..8beee33ec 100644
--- a/packages/pg/test/test-buffers.js
+++ b/packages/pg/test/test-buffers.js
@@ -3,7 +3,7 @@ require('./test-helper')
const BufferList = require('./buffer-list')
// http://developer.postgresql.org/pgdocs/postgres/protocol-message-formats.html
-var buffers = {}
+const buffers = {}
buffers.readyForQuery = function () {
return new BufferList().add(Buffer.from('I')).join(true, 'Z')
}
@@ -49,7 +49,7 @@ buffers.commandComplete = function (string) {
buffers.rowDescription = function (fields) {
fields = fields || []
- var buf = new BufferList()
+ const buf = new BufferList()
buf.addInt16(fields.length)
fields.forEach(function (field) {
buf
@@ -66,13 +66,13 @@ buffers.rowDescription = function (fields) {
buffers.dataRow = function (columns) {
columns = columns || []
- var buf = new BufferList()
+ const buf = new BufferList()
buf.addInt16(columns.length)
columns.forEach(function (col) {
if (col == null) {
buf.addInt32(-1)
} else {
- var strBuf = Buffer.from(col, 'utf8')
+ const strBuf = Buffer.from(col, 'utf8')
buf.addInt32(strBuf.length)
buf.add(strBuf)
}
@@ -88,9 +88,9 @@ buffers.notice = function (fields) {
return errorOrNotice(fields).join(true, 'N')
}
-var errorOrNotice = function (fields) {
+const errorOrNotice = function (fields) {
fields = fields || []
- var buf = new BufferList()
+ const buf = new BufferList()
fields.forEach(function (field) {
buf.addChar(field.type)
buf.addCString(field.value)
@@ -118,4 +118,20 @@ buffers.portalSuspended = function () {
return new BufferList().join(true, 's')
}
+buffers.copyIn = function (cols) {
+ const list = new BufferList()
+ // text mode
+ .add(Buffer.from([0]))
+ // column count
+ .addInt16(cols)
+ for (let i = 0; i < cols; i++) {
+ list.addInt16(i)
+ }
+ return list.join(true, 'G')
+}
+
+buffers.copyData = function (bytes) {
+ return new BufferList().add(bytes).join(true, 'd')
+}
+
module.exports = buffers
diff --git a/packages/pg/test/test-helper.js b/packages/pg/test/test-helper.js
index 15abcd465..3d2d4d4d8 100644
--- a/packages/pg/test/test-helper.js
+++ b/packages/pg/test/test-helper.js
@@ -1,12 +1,18 @@
'use strict'
-// make assert a global...
-global.assert = require('assert')
-var sys = require('util')
+const assert = require('assert')
+const sys = require('util')
const Suite = require('./suite')
-const args = require('./cli')
-
-global.Client = require('./../lib').Client
+const Client = require('./../lib').Client
+
+let isNativeMode = false
+for (let i = 0; i < process.argv.length; i++) {
+ switch (process.argv[i].toLowerCase()) {
+ case 'native':
+ isNativeMode = true
+ break
+ }
+}
process.on('uncaughtException', function (d) {
if ('stack' in d && 'message' in d) {
@@ -15,110 +21,13 @@ process.on('uncaughtException', function (d) {
} else {
console.log(d)
}
- process.exit(-1)
+ // causes xargs to abort right away
+ process.exit(255)
})
-
-assert.same = function (actual, expected) {
- for (var key in expected) {
- assert.equal(actual[key], expected[key])
- }
-}
-
-assert.emits = function (item, eventName, callback, message) {
- var called = false
- var id = setTimeout(function () {
- test("Should have called '" + eventName + "' event", function () {
- assert.ok(called, message || "Expected '" + eventName + "' to be called.")
- })
- }, 5000)
-
- item.once(eventName, function () {
- if (eventName === 'error') {
- // belt and braces test to ensure all error events return an error
- assert.ok(
- arguments[0] instanceof Error,
- 'Expected error events to throw instances of Error but found: ' + sys.inspect(arguments[0])
- )
- }
- called = true
- clearTimeout(id)
- assert.ok(true)
- if (callback) {
- callback.apply(item, arguments)
- }
- })
-}
-
-assert.UTCDate = function (actual, year, month, day, hours, min, sec, milisecond) {
- var actualYear = actual.getUTCFullYear()
- assert.equal(actualYear, year, 'expected year ' + year + ' but got ' + actualYear)
-
- var actualMonth = actual.getUTCMonth()
- assert.equal(actualMonth, month, 'expected month ' + month + ' but got ' + actualMonth)
-
- var actualDate = actual.getUTCDate()
- assert.equal(actualDate, day, 'expected day ' + day + ' but got ' + actualDate)
-
- var actualHours = actual.getUTCHours()
- assert.equal(actualHours, hours, 'expected hours ' + hours + ' but got ' + actualHours)
-
- var actualMin = actual.getUTCMinutes()
- assert.equal(actualMin, min, 'expected min ' + min + ' but got ' + actualMin)
-
- var actualSec = actual.getUTCSeconds()
- assert.equal(actualSec, sec, 'expected sec ' + sec + ' but got ' + actualSec)
-
- var actualMili = actual.getUTCMilliseconds()
- assert.equal(actualMili, milisecond, 'expected milisecond ' + milisecond + ' but got ' + actualMili)
-}
-
-assert.equalBuffers = function (actual, expected) {
- if (actual.length != expected.length) {
- spit(actual, expected)
- assert.equal(actual.length, expected.length)
- }
- for (var i = 0; i < actual.length; i++) {
- if (actual[i] != expected[i]) {
- spit(actual, expected)
- }
- assert.equal(actual[i], expected[i])
- }
-}
-
-assert.empty = function (actual) {
- assert.lengthIs(actual, 0)
-}
-
-assert.success = function (callback) {
- if (callback.length === 1 || callback.length === 0) {
- return assert.calls(function (err, arg) {
- if (err) {
- console.log(err)
- }
- assert(!err)
- callback(arg)
- })
- } else if (callback.length === 2) {
- return assert.calls(function (err, arg1, arg2) {
- if (err) {
- console.log(err)
- }
- assert(!err)
- callback(arg1, arg2)
- })
- } else {
- throw new Error('need to preserve arrity of wrapped function')
- }
-}
-
-assert.lengthIs = function (actual, expectedLength) {
- assert.equal(actual.length, expectedLength)
-}
-
-var expect = function (callback, timeout) {
- var executed = false
+const expect = function (callback, timeout) {
+ const executed = false
timeout = timeout || parseInt(process.env.TEST_TIMEOUT) || 5000
- var id = setTimeout(function () {
+ const id = setTimeout(function () {
assert.ok(
executed,
'Expected execution of function to be fired within ' +
@@ -150,67 +59,147 @@ var expect = function (callback, timeout) {
throw new Error('Unsupported arrity ' + callback.length)
}
}
-assert.calls = expect
-
-assert.isNull = function (item, message) {
- message = message || 'expected ' + item + ' to be null'
- assert.ok(item === null, message)
-}
-
-global.test = function (name, action) {
- test.testCount++
- test[name] = action
- var result = test[name]()
- if (result === false) {
- process.stdout.write('?')
- } else {
- process.stdout.write('.')
- }
-}
-
// print out the filename
process.stdout.write(require('path').basename(process.argv[1]))
-if (args.binary) process.stdout.write(' (binary)')
-if (args.native) process.stdout.write(' (native)')
+if (isNativeMode) process.stdout.write(' (native)')
process.on('exit', function () {
console.log('')
})
-process.on('uncaughtException', function (err) {
- console.error('\n %s', err.stack || err.toString())
- // causes xargs to abort right away
- process.exit(255)
-})
+const getTimezoneOffset = Date.prototype.getTimezoneOffset
-var getTimezoneOffset = Date.prototype.getTimezoneOffset
-
-var setTimezoneOffset = function (minutesOffset) {
+const setTimezoneOffset = function (minutesOffset) {
Date.prototype.getTimezoneOffset = function () {
return minutesOffset
}
}
-var resetTimezoneOffset = function () {
+const resetTimezoneOffset = function () {
Date.prototype.getTimezoneOffset = getTimezoneOffset
}
-const rejection = (promise) =>
- promise.then(
- (value) => {
- throw new Error(`Promise resolved when rejection was expected; value: ${sys.inspect(value)}`)
- },
- (error) => error
+if (Object.isExtensible(assert)) {
+ assert.same = function (actual, expected) {
+ for (const key in expected) {
+ assert.equal(actual[key], expected[key])
+ }
+ }
+
+ assert.emits = function (item, eventName, callback, message) {
+ let called = false
+ const id = setTimeout(function () {
+ test("Should have called '" + eventName + "' event", function () {
+ assert.ok(called, message || "Expected '" + eventName + "' to be called.")
+ })
+ }, 5000)
+
+ item.once(eventName, function () {
+ if (eventName === 'error') {
+ // belt and braces test to ensure all error events return an error
+ assert.ok(
+ arguments[0] instanceof Error,
+ 'Expected error events to throw instances of Error but found: ' + sys.inspect(arguments[0])
+ )
+ }
+ called = true
+ clearTimeout(id)
+ assert.ok(true)
+ if (callback) {
+ callback.apply(item, arguments)
+ }
+ })
+ }
+
+ assert.empty = function (actual) {
+ assert.lengthIs(actual, 0)
+ }
+
+ assert.success = function (callback) {
+ if (callback.length === 1 || callback.length === 0) {
+ return assert.calls(function (err, arg) {
+ if (err) {
+ console.log(err)
+ }
+ assert(!err)
+ callback(arg)
+ })
+ } else if (callback.length === 2) {
+ return assert.calls(function (err, arg1, arg2) {
+ if (err) {
+ console.log(err)
+ }
+ assert(!err)
+ callback(arg1, arg2)
+ })
+ } else {
+ throw new Error('need to preserve arrity of wrapped function')
+ }
+ }
+
+ assert.lengthIs = function (actual, expectedLength) {
+ assert.equal(actual.length, expectedLength)
+ }
+
+ assert.calls = expect
+
+ assert.isNull = function (item, message) {
+ message = message || 'expected ' + item + ' to be null'
+ assert.ok(item === null, message)
+ }
+}
+
+const names = [
+ 'Aaron',
+ 'Brian',
+ 'Chris',
+ 'David',
+ 'Elvis',
+ 'Frank',
+ 'Grace',
+ 'Haley',
+ 'Irma',
+ 'Jenny',
+ 'Kevin',
+ 'Larry',
+ 'Michelle',
+ 'Nancy',
+ 'Olivia',
+ 'Peter',
+ 'Quinn',
+ 'Ronda',
+ 'Shelley',
+ 'Tobias',
+ 'Uma',
+ 'Veena',
+ 'Wanda',
+ 'Xavier',
+ 'Yoyo',
+ 'Zanzabar',
+]
+
+const createPersonTable = async (client) => {
+ await client.query('CREATE TEMP TABLE person (id serial, name varchar(10), age integer)')
+ await client.query(
+ 'INSERT INTO person (name, age) VALUES' + names.map((name, i) => ` ('${name}', ${(i + 1) * 10})`).join(',')
)
+}
module.exports = {
Suite: Suite,
pg: require('./../lib/'),
- args: args,
- config: args,
+ args: { native: isNativeMode },
+ config: {
+ native: isNativeMode,
+ host: process.env.PGHOST || 'localhost',
+ port: process.env.PGPORT || 5432,
+ user: process.env.PGUSER || 'postgres',
+ password: process.env.PGPASSWORD || '',
+ database: process.env.PGDATABASE || 'postgres',
+ },
sys: sys,
Client: Client,
setTimezoneOffset: setTimezoneOffset,
resetTimezoneOffset: resetTimezoneOffset,
- rejection: rejection,
+ createPersonTable: createPersonTable,
}
diff --git a/packages/pg/test/unit/client/cleartext-password-tests.js b/packages/pg/test/unit/client/cleartext-password-tests.js
index 49db22d00..b844db5e6 100644
--- a/packages/pg/test/unit/client/cleartext-password-tests.js
+++ b/packages/pg/test/unit/client/cleartext-password-tests.js
@@ -2,29 +2,30 @@
const helper = require('./test-helper')
const createClient = require('./test-helper').createClient
+const assert = require('assert')
+const suite = new helper.Suite()
+const { MemoryStream } = helper
-test('cleartext password authentication', function () {
- test('responds with password', function () {
- var client = createClient()
- client.password = '!'
- client.connection.stream.packets = []
- client.connection.emit('authenticationCleartextPassword')
- var packets = client.connection.stream.packets
- assert.lengthIs(packets, 1)
- var packet = packets[0]
- assert.equalBuffers(packet, [0x70, 0, 0, 0, 6, 33, 0])
- })
+suite.test('cleartext password auth responds with password', function () {
+ const client = createClient()
+ client.password = '!'
+ client.connection.stream.packets = []
+ client.connection.emit('authenticationCleartextPassword')
+ const packets = client.connection.stream.packets
+ assert.lengthIs(packets, 1)
+ const packet = packets[0]
+ assert.deepStrictEqual(packet, Buffer.from([0x70, 0, 0, 0, 6, 33, 0]))
+})
- test('does not crash with null password using pg-pass', function () {
- process.env.PGPASSFILE = `${__dirname}/pgpass.file`
- var client = new helper.Client({
- host: 'foo',
- port: 5432,
- database: 'bar',
- user: 'baz',
- stream: new MemoryStream(),
- })
- client.connect()
- client.connection.emit('authenticationCleartextPassword')
+suite.test('cleartext password auth does not crash with null password using pg-pass', function () {
+ process.env.PGPASSFILE = `${__dirname}/pgpass.file`
+ const client = new helper.Client({
+ host: 'foo',
+ port: 5432,
+ database: 'bar',
+ user: 'baz',
+ stream: new MemoryStream(),
})
+ client.connect()
+ client.connection.emit('authenticationCleartextPassword')
})
diff --git a/packages/pg/test/unit/client/configuration-tests.js b/packages/pg/test/unit/client/configuration-tests.js
index 19a1da800..63d4ea649 100644
--- a/packages/pg/test/unit/client/configuration-tests.js
+++ b/packages/pg/test/unit/client/configuration-tests.js
@@ -1,14 +1,17 @@
'use strict'
-require('./test-helper')
-var assert = require('assert')
+const helper = require('./test-helper')
+const { Client } = helper
+const assert = require('assert')
+const suite = new helper.Suite()
+const test = suite.test.bind(suite)
-var pguser = process.env['PGUSER'] || process.env.USER
-var pgdatabase = process.env['PGDATABASE'] || process.env.USER
-var pgport = process.env['PGPORT'] || 5432
+const pguser = process.env['PGUSER'] || process.env.USER
+const pgdatabase = process.env['PGDATABASE'] || process.env.USER
+const pgport = process.env['PGPORT'] || 5432
test('client settings', function () {
test('defaults', function () {
- var client = new Client()
+ const client = new Client()
assert.equal(client.user, pguser)
assert.equal(client.database, pgdatabase)
assert.equal(client.port, pgport)
@@ -16,10 +19,10 @@ test('client settings', function () {
})
test('custom', function () {
- var user = 'brian'
- var database = 'pgjstest'
- var password = 'boom'
- var client = new Client({
+ const user = 'brian'
+ const database = 'pgjstest'
+ const password = 'boom'
+ const client = new Client({
user: user,
database: database,
port: 321,
@@ -35,20 +38,20 @@ test('client settings', function () {
})
test('custom ssl default on', function () {
- var old = process.env.PGSSLMODE
+ const old = process.env.PGSSLMODE
process.env.PGSSLMODE = 'prefer'
- var client = new Client()
+ const client = new Client()
process.env.PGSSLMODE = old
assert.equal(client.ssl, true)
})
test('custom ssl force off', function () {
- var old = process.env.PGSSLMODE
+ const old = process.env.PGSSLMODE
process.env.PGSSLMODE = 'prefer'
- var client = new Client({
+ const client = new Client({
ssl: false,
})
process.env.PGSSLMODE = old
@@ -59,7 +62,7 @@ test('client settings', function () {
test('initializing from a config string', function () {
test('uses connectionString property', function () {
- var client = new Client({
+ const client = new Client({
connectionString: 'postgres://brian:pass@host1:333/databasename',
})
assert.equal(client.user, 'brian')
@@ -70,7 +73,7 @@ test('initializing from a config string', function () {
})
test('uses the correct values from the config string', function () {
- var client = new Client('postgres://brian:pass@host1:333/databasename')
+ const client = new Client('postgres://brian:pass@host1:333/databasename')
assert.equal(client.user, 'brian')
assert.equal(client.password, 'pass')
assert.equal(client.host, 'host1')
@@ -79,7 +82,7 @@ test('initializing from a config string', function () {
})
test('uses the correct values from the config string with space in password', function () {
- var client = new Client('postgres://brian:pass word@host1:333/databasename')
+ const client = new Client('postgres://brian:pass word@host1:333/databasename')
assert.equal(client.user, 'brian')
assert.equal(client.password, 'pass word')
assert.equal(client.host, 'host1')
@@ -88,7 +91,7 @@ test('initializing from a config string', function () {
})
test('when not including all values the defaults are used', function () {
- var client = new Client('postgres://host1')
+ const client = new Client('postgres://host1')
assert.equal(client.user, process.env['PGUSER'] || process.env.USER)
assert.equal(client.password, process.env['PGPASSWORD'] || null)
assert.equal(client.host, 'host1')
@@ -97,25 +100,25 @@ test('initializing from a config string', function () {
})
test('when not including all values the environment variables are used', function () {
- var envUserDefined = process.env['PGUSER'] !== undefined
- var envPasswordDefined = process.env['PGPASSWORD'] !== undefined
- var envDBDefined = process.env['PGDATABASE'] !== undefined
- var envHostDefined = process.env['PGHOST'] !== undefined
- var envPortDefined = process.env['PGPORT'] !== undefined
-
- var savedEnvUser = process.env['PGUSER']
- var savedEnvPassword = process.env['PGPASSWORD']
- var savedEnvDB = process.env['PGDATABASE']
- var savedEnvHost = process.env['PGHOST']
- var savedEnvPort = process.env['PGPORT']
+ const envUserDefined = process.env['PGUSER'] !== undefined
+ const envPasswordDefined = process.env['PGPASSWORD'] !== undefined
+ const envHostDefined = process.env['PGHOST'] !== undefined
+ const envPortDefined = process.env['PGPORT'] !== undefined
+ const envDBDefined = process.env['PGDATABASE'] !== undefined
+
+ const savedEnvUser = process.env['PGUSER']
+ const savedEnvPassword = process.env['PGPASSWORD']
+ const savedEnvHost = process.env['PGHOST']
+ const savedEnvPort = process.env['PGPORT']
+ const savedEnvDB = process.env['PGDATABASE']
process.env['PGUSER'] = 'utUser1'
process.env['PGPASSWORD'] = 'utPass1'
- process.env['PGDATABASE'] = 'utDB1'
process.env['PGHOST'] = 'utHost1'
process.env['PGPORT'] = 5464
+ process.env['PGDATABASE'] = 'utDB1'
- var client = new Client('postgres://host1')
+ const client = new Client('postgres://host1')
assert.equal(client.user, process.env['PGUSER'])
assert.equal(client.password, process.env['PGPASSWORD'])
assert.equal(client.host, 'host1')
@@ -155,9 +158,9 @@ test('initializing from a config string', function () {
})
test('calls connect correctly on connection', function () {
- var client = new Client('/tmp')
- var usedPort = ''
- var usedHost = ''
+ const client = new Client('/tmp')
+ let usedPort = ''
+ let usedHost = ''
client.connection.connect = function (port, host) {
usedPort = port
usedHost = host
diff --git a/packages/pg/test/unit/client/early-disconnect-tests.js b/packages/pg/test/unit/client/early-disconnect-tests.js
index 494482845..f62ce62d1 100644
--- a/packages/pg/test/unit/client/early-disconnect-tests.js
+++ b/packages/pg/test/unit/client/early-disconnect-tests.js
@@ -1,16 +1,17 @@
'use strict'
-var helper = require('./test-helper')
-var net = require('net')
-var pg = require('../../../lib/index.js')
+require('./test-helper')
+const net = require('net')
+const pg = require('../../../lib/index.js')
+const assert = require('assert')
/* console.log() messages show up in `make test` output. TODO: fix it. */
-var server = net.createServer(function (c) {
+const server = net.createServer(function (c) {
c.destroy()
server.close()
})
server.listen(7777, function () {
- var client = new pg.Client('postgres://localhost:7777')
+ const client = new pg.Client('postgres://localhost:7777')
client.connect(
assert.calls(function (err) {
assert(err)
diff --git a/packages/pg/test/unit/client/escape-tests.js b/packages/pg/test/unit/client/escape-tests.js
index 721b04b49..e19ef14be 100644
--- a/packages/pg/test/unit/client/escape-tests.js
+++ b/packages/pg/test/unit/client/escape-tests.js
@@ -1,25 +1,43 @@
'use strict'
-var helper = require('./test-helper')
+const helper = require('./test-helper')
+const utils = require('../../../lib/utils')
+const assert = require('assert')
+const { Client, Suite } = helper
+const suite = new Suite()
+const test = suite.test.bind(suite)
+
+const testLit = function (testName, input, expected) {
+ test(testName, function () {
+ const client = new Client(helper.config)
+ const actual = client.escapeLiteral(input)
+ assert.equal(expected, actual)
+ })
-function createClient(callback) {
- var client = new Client(helper.config)
- client.connect(function (err) {
- return callback(client)
+ test('Client.prototype.' + testName, function () {
+ const actual = Client.prototype.escapeLiteral(input)
+ assert.equal(expected, actual)
})
-}
-var testLit = function (testName, input, expected) {
- test(testName, function () {
- var client = new Client(helper.config)
- var actual = client.escapeLiteral(input)
+ test('utils.' + testName, function () {
+ const actual = utils.escapeLiteral(input)
assert.equal(expected, actual)
})
}
-var testIdent = function (testName, input, expected) {
+const testIdent = function (testName, input, expected) {
test(testName, function () {
- var client = new Client(helper.config)
- var actual = client.escapeIdentifier(input)
+ const client = new Client(helper.config)
+ const actual = client.escapeIdentifier(input)
+ assert.equal(expected, actual)
+ })
+
+ test('Client.prototype.' + testName, function () {
+ const actual = Client.prototype.escapeIdentifier(input)
+ assert.equal(expected, actual)
+ })
+
+ test('utils.' + testName, function () {
+ const actual = utils.escapeIdentifier(input)
assert.equal(expected, actual)
})
}
diff --git a/packages/pg/test/unit/client/md5-password-tests.js b/packages/pg/test/unit/client/md5-password-tests.js
index 71f502087..a00b15b1f 100644
--- a/packages/pg/test/unit/client/md5-password-tests.js
+++ b/packages/pg/test/unit/client/md5-password-tests.js
@@ -1,24 +1,32 @@
'use strict'
-var helper = require('./test-helper')
+const helper = require('./test-helper')
const BufferList = require('../../buffer-list')
-var utils = require('../../../lib/utils')
+const crypto = require('../../../lib/crypto/utils')
+const assert = require('assert')
+const suite = new helper.Suite()
+const test = suite.test.bind(suite)
-test('md5 authentication', function () {
- var client = helper.createClient()
+test('md5 authentication', async function () {
+ const client = helper.createClient()
client.password = '!'
- var salt = Buffer.from([1, 2, 3, 4])
- client.connection.emit('authenticationMD5Password', { salt: salt })
+ const salt = Buffer.from([1, 2, 3, 4])
+ await client.connection.emit('authenticationMD5Password', { salt: salt })
- test('responds', function () {
- assert.lengthIs(client.connection.stream.packets, 1)
- test('should have correct encrypted data', function () {
- var password = utils.postgresMd5PasswordHash(client.user, client.password, salt)
- // how do we want to test this?
- assert.equalBuffers(client.connection.stream.packets[0], new BufferList().addCString(password).join(true, 'p'))
+ setTimeout(() =>
+ test('responds', function () {
+ assert.lengthIs(client.connection.stream.packets, 1)
+ test('should have correct encrypted data', async function () {
+ const password = await crypto.postgresMd5PasswordHash(client.user, client.password, salt)
+ // how do we want to test this?
+ assert.deepStrictEqual(
+ client.connection.stream.packets[0],
+ new BufferList().addCString(password).join(true, 'p')
+ )
+ })
})
- })
+ )
})
-test('md5 of utf-8 strings', function () {
- assert.equal(utils.md5('😊'), '5deda34cd95f304948d2bc1b4a62c11e')
+test('md5 of utf-8 strings', async function () {
+ assert.equal(await crypto.md5('😊'), '5deda34cd95f304948d2bc1b4a62c11e')
})
diff --git a/packages/pg/test/unit/client/notification-tests.js b/packages/pg/test/unit/client/notification-tests.js
index 7143acaba..55efdbad8 100644
--- a/packages/pg/test/unit/client/notification-tests.js
+++ b/packages/pg/test/unit/client/notification-tests.js
@@ -1,8 +1,10 @@
'use strict'
-var helper = require('./test-helper')
+const helper = require('./test-helper')
+const assert = require('assert')
+const suite = new helper.Suite()
-test('passes connection notification', function () {
- var client = helper.client()
+suite.test('passes connection notification', function () {
+ const client = helper.client()
assert.emits(client, 'notice', function (msg) {
assert.equal(msg, 'HAY!!')
})
diff --git a/packages/pg/test/unit/client/password-callback-tests.js b/packages/pg/test/unit/client/password-callback-tests.js
new file mode 100644
index 000000000..bf1885e94
--- /dev/null
+++ b/packages/pg/test/unit/client/password-callback-tests.js
@@ -0,0 +1,70 @@
+const helper = require('./test-helper')
+const assert = require('assert')
+const suite = new helper.Suite()
+const pgpass = require('pgpass')
+
+class Wait {
+ constructor() {
+ this.promise = new Promise((resolve) => {
+ this.resolve = resolve
+ })
+ }
+
+ until() {
+ return this.promise
+ }
+
+ done(time) {
+ if (time) {
+ setTimeout(this.resolve.bind(this), time)
+ } else {
+ this.resolve()
+ }
+ }
+}
+
+suite.test('password callback is called with conenction params', async function () {
+ const wait = new Wait()
+ const client = helper.client({
+ user: 'foo',
+ database: 'bar',
+ host: 'baz',
+ password: async (params) => {
+ assert.equal(params.user, 'foo')
+ assert.equal(params.database, 'bar')
+ assert.equal(params.host, 'baz')
+ wait.done(10)
+ return 'password'
+ },
+ })
+ client.connection.emit('authenticationCleartextPassword')
+ await wait.until()
+ assert.equal(client.user, 'foo')
+ assert.equal(client.database, 'bar')
+ assert.equal(client.host, 'baz')
+ assert.equal(client.connectionParameters.password, 'password')
+})
+
+suite.test('cleartext password auth does not crash with null password using pg-pass', async function () {
+ process.env.PGPASSFILE = `${__dirname}/pgpass.file`
+ // set this to undefined so pgpass will use the file
+ delete process.env.PGPASSWORD
+ const wait = new Wait()
+ const client = helper.client({
+ host: 'foo',
+ port: 5432,
+ database: 'bar',
+ user: 'baz',
+ password: (params) => {
+ return new Promise((resolve) => {
+ pgpass(params, (pass) => {
+ wait.done(10)
+ resolve(pass)
+ })
+ })
+ },
+ })
+ client.connection.emit('authenticationCleartextPassword')
+ await wait.until()
+ assert.equal(client.password, 'quz')
+})
diff --git a/packages/pg/test/unit/client/prepared-statement-tests.js b/packages/pg/test/unit/client/prepared-statement-tests.js
index 2499808f7..71f9d094b 100644
--- a/packages/pg/test/unit/client/prepared-statement-tests.js
+++ b/packages/pg/test/unit/client/prepared-statement-tests.js
@@ -1,10 +1,13 @@
'use strict'
-var helper = require('./test-helper')
-var Query = require('../../../lib/query')
-
-var client = helper.client()
-var con = client.connection
-var parseArg = null
+const helper = require('./test-helper')
+const Query = require('../../../lib/query')
+const assert = require('assert')
+const client = helper.client()
+const suite = new helper.Suite()
+const test = suite.test.bind(suite)
+
+const con = client.connection
+let parseArg = null
con.parse = function (arg) {
parseArg = arg
process.nextTick(function () {
@@ -12,7 +15,7 @@ con.parse = function (arg) {
})
}
-var bindArg = null
+let bindArg = null
con.bind = function (arg) {
bindArg = arg
process.nextTick(function () {
@@ -20,7 +23,7 @@ con.bind = function (arg) {
})
}
-var executeArg = null
+let executeArg = null
con.execute = function (arg) {
executeArg = arg
process.nextTick(function () {
@@ -29,7 +32,7 @@ con.execute = function (arg) {
})
}
-var describeArg = null
+let describeArg = null
con.describe = function (arg) {
describeArg = arg
process.nextTick(function () {
@@ -37,7 +40,7 @@ con.describe = function (arg) {
})
}
-var syncCalled = false
+let syncCalled = false
con.flush = function () {}
con.sync = function () {
syncCalled = true
@@ -50,7 +53,7 @@ test('bound command', function () {
test('simple, unnamed bound command', function () {
assert.ok(client.connection.emit('readyForQuery'))
- var query = client.query(
+ const query = client.query(
new Query({
text: 'select * from X where name = $1',
values: ['hi'],
@@ -88,17 +91,15 @@ test('bound command', function () {
})
})
-var portalClient = helper.client()
-var portalCon = portalClient.connection
-var portalParseArg = null
+const portalClient = helper.client()
+const portalCon = portalClient.connection
portalCon.parse = function (arg) {
- portalParseArg = arg
process.nextTick(function () {
portalCon.emit('parseComplete')
})
}
-var portalBindArg = null
+let portalBindArg = null
portalCon.bind = function (arg) {
portalBindArg = arg
process.nextTick(function () {
@@ -106,7 +107,7 @@ portalCon.bind = function (arg) {
})
}
-var portalExecuteArg = null
+let portalExecuteArg = null
portalCon.execute = function (arg) {
portalExecuteArg = arg
process.nextTick(function () {
@@ -115,7 +116,7 @@ portalCon.execute = function (arg) {
})
}
-var portalDescribeArg = null
+let portalDescribeArg = null
portalCon.describe = function (arg) {
portalDescribeArg = arg
process.nextTick(function () {
@@ -133,7 +134,7 @@ portalCon.sync = function () {
test('prepared statement with explicit portal', function () {
assert.ok(portalClient.connection.emit('readyForQuery'))
- var query = portalClient.query(
+ const query = portalClient.query(
new Query({
text: 'select * from X where name = $1',
portal: 'myportal',
diff --git a/packages/pg/test/unit/client/query-queue-tests.js b/packages/pg/test/unit/client/query-queue-tests.js
index 0b5eaa564..1566afc43 100644
--- a/packages/pg/test/unit/client/query-queue-tests.js
+++ b/packages/pg/test/unit/client/query-queue-tests.js
@@ -1,17 +1,21 @@
'use strict'
-var helper = require('./test-helper')
-var Connection = require('../../../lib/connection')
+const helper = require('./test-helper')
+const { Client } = helper
+const Connection = require('../../../lib/connection')
+const assert = require('assert')
+const suite = new helper.Suite()
+const test = suite.test.bind(suite)
test('drain', function () {
- var con = new Connection({ stream: 'NO' })
- var client = new Client({ connection: con })
+ const con = new Connection({ stream: 'NO' })
+ const client = new Client({ connection: con })
con.connect = function () {
con.emit('connect')
}
con.query = function () {}
client.connect()
- var raisedDrain = false
+ let raisedDrain = false
client.on('drain', function () {
raisedDrain = true
})
@@ -19,34 +23,16 @@ test('drain', function () {
client.query('hello')
client.query('sup')
client.query('boom')
+ assert.equal(raisedDrain, false)
+ con.emit('readyForQuery')
- test('with pending queries', function () {
- test('does not emit drain', function () {
- assert.equal(raisedDrain, false)
- })
- })
-
- test('after some queries executed', function () {
- con.emit('readyForQuery')
- test('does not emit drain', function () {
- assert.equal(raisedDrain, false)
- })
- })
-
- test('when all queries are sent', function () {
- con.emit('readyForQuery')
- con.emit('readyForQuery')
- test('does not emit drain', function () {
- assert.equal(raisedDrain, false)
- })
- })
+ assert.equal(raisedDrain, false)
+ con.emit('readyForQuery')
+ con.emit('readyForQuery')
+ assert.equal(raisedDrain, false)
+ con.emit('readyForQuery')
- test('after last query finishes', function () {
- con.emit('readyForQuery')
- test('emits drain', function () {
- process.nextTick(function () {
- assert.ok(raisedDrain)
- })
- })
+ process.nextTick(function () {
+ assert.ok(raisedDrain)
})
})
diff --git a/packages/pg/test/unit/client/query-timeout-tests.js b/packages/pg/test/unit/client/query-timeout-tests.js
new file mode 100644
index 000000000..dbf20cf1f
--- /dev/null
+++ b/packages/pg/test/unit/client/query-timeout-tests.js
@@ -0,0 +1,34 @@
+'use strict'
+
+const helper = require('./test-helper')
+const Query = require('../../../lib/query')
+const assert = require('assert')
+const suite = new helper.Suite()
+const test = suite.test.bind(suite)
+
+test('query timeout with Submittable without callback delivers error via handleError', function (done) {
+ const client = helper.client()
+ client.connectionParameters = { query_timeout: 10 }
+
+ const query = new Query({ text: 'SELECT 1' })
+ query.handleError = (err) => {
+ assert.equal(err.message, 'Query read timeout')
+ done()
+ }
+
+ client.connection.emit('readyForQuery')
+ client.query(query)
+})
+
+test('query timeout with Submittable with callback delivers error via callback', function (done) {
+ const client = helper.client()
+ client.connectionParameters = { query_timeout: 10 }
+
+ const query = new Query({ text: 'SELECT 1' })
+ client.connection.emit('readyForQuery')
+
+ client.query(query, (err) => {
+ assert.equal(err.message, 'Query read timeout')
+ done()
+ })
+})
diff --git a/packages/pg/test/unit/client/result-metadata-tests.js b/packages/pg/test/unit/client/result-metadata-tests.js
index a5e6542c8..bbc85c7af 100644
--- a/packages/pg/test/unit/client/result-metadata-tests.js
+++ b/packages/pg/test/unit/client/result-metadata-tests.js
@@ -1,12 +1,15 @@
'use strict'
-var helper = require('./test-helper')
+const helper = require('./test-helper')
+const assert = require('assert')
+const suite = new helper.Suite()
+const test = suite.test.bind(suite)
-var testForTag = function (tagText, callback) {
+const testForTag = function (tagText, callback) {
test('includes command tag data for tag ' + tagText, function () {
- var client = helper.client()
+ const client = helper.client()
client.connection.emit('readyForQuery')
- var query = client.query(
+ client.query(
'whatever',
assert.calls((err, result) => {
assert.ok(result != null, 'should pass something to this event')
@@ -23,7 +26,7 @@ var testForTag = function (tagText, callback) {
})
}
-var check = function (oid, rowCount, command) {
+const check = function (oid, rowCount, command) {
return function (result) {
if (oid != null) {
assert.equal(result.oid, oid)
diff --git a/packages/pg/test/unit/client/sasl-scram-tests.js b/packages/pg/test/unit/client/sasl-scram-tests.js
index e53448bdf..02b0d4e6d 100644
--- a/packages/pg/test/unit/client/sasl-scram-tests.js
+++ b/packages/pg/test/unit/client/sasl-scram-tests.js
@@ -1,137 +1,377 @@
'use strict'
-require('./test-helper')
+const helper = require('./test-helper')
+const assert = require('assert')
-var sasl = require('../../../lib/sasl')
+const sasl = require('../../../lib/crypto/sasl')
-test('sasl/scram', function () {
- test('startSession', function () {
- test('fails when mechanisms does not include SCRAM-SHA-256', function () {
+const suite = new helper.Suite()
+
+suite.test('sasl/scram', function () {
+ suite.test('startSession', function () {
+ suite.test('fails when mechanisms does not include SCRAM-SHA-256', function () {
assert.throws(
function () {
sasl.startSession([])
},
{
- message: 'SASL: Only mechanism SCRAM-SHA-256 is currently supported',
+ message: 'SASL: Only mechanism(s) SCRAM-SHA-256 are supported',
}
)
})
- test('returns expected session data', function () {
- const session = sasl.startSession(['SCRAM-SHA-256'])
+ suite.test('returns expected session data for SCRAM-SHA-256 (channel binding disabled, offered)', function () {
+ const session = sasl.startSession(['SCRAM-SHA-256', 'SCRAM-SHA-256-PLUS'])
+
+ assert.equal(session.mechanism, 'SCRAM-SHA-256')
+ assert.equal(String(session.clientNonce).length, 24)
+ assert.equal(session.message, 'SASLInitialResponse')
+
+ assert(session.response.match(/^n,,n=\*,r=.{24}$/))
+ })
+
+ suite.test('returns expected session data for SCRAM-SHA-256 (channel binding enabled, not offered)', function () {
+ const session = sasl.startSession(['SCRAM-SHA-256'], { getPeerCertificate() {} })
assert.equal(session.mechanism, 'SCRAM-SHA-256')
assert.equal(String(session.clientNonce).length, 24)
assert.equal(session.message, 'SASLInitialResponse')
- assert(session.response.match(/^n,,n=\*,r=.{24}/))
+ assert(session.response.match(/^y,,n=\*,r=.{24}$/))
})
- test('creates random nonces', function () {
+ suite.test('returns expected session data for SCRAM-SHA-256 (channel binding enabled, offered)', function () {
+ const session = sasl.startSession(['SCRAM-SHA-256', 'SCRAM-SHA-256-PLUS'], { getPeerCertificate() {} })
+
+ assert.equal(session.mechanism, 'SCRAM-SHA-256-PLUS')
+ assert.equal(String(session.clientNonce).length, 24)
+ assert.equal(session.message, 'SASLInitialResponse')
+
+ assert(session.response.match(/^p=tls-server-end-point,,n=\*,r=.{24}$/))
+ })
+
+ suite.test('creates random nonces', function () {
const session1 = sasl.startSession(['SCRAM-SHA-256'])
const session2 = sasl.startSession(['SCRAM-SHA-256'])
assert(session1.clientNonce != session2.clientNonce)
})
+
+ suite.test('defaults scramMaxIterations to 100000', function () {
+ const session = sasl.startSession(['SCRAM-SHA-256'])
+
+ assert.equal(session.scramMaxIterations, 100000)
+ })
+
+ suite.test('honors a custom scramMaxIterations', function () {
+ const session = sasl.startSession(['SCRAM-SHA-256'], null, 50)
+
+ assert.equal(session.scramMaxIterations, 50)
+ })
})
- test('continueSession', function () {
- test('fails when last session message was not SASLInitialResponse', function () {
- assert.throws(
- function () {
- sasl.continueSession({}, '', '')
- },
+ suite.test('continueSession', function () {
+ suite.test('fails when last session message was not SASLInitialResponse', async () => {
+ await assert.rejects(sasl.continueSession({}, '', ''), {
+ message: 'SASL: Last message was not SASLInitialResponse',
+ })
+ })
+
+ suite.test('fails when nonce is missing in server message', async () => {
+ await assert.rejects(
+ sasl.continueSession(
+ {
+ message: 'SASLInitialResponse',
+ },
+ 'bad-password',
+ 's=1,i=1'
+ ),
{
- message: 'SASL: Last message was not SASLInitialResponse',
+ message: 'SASL: SCRAM-SERVER-FIRST-MESSAGE: nonce missing',
}
)
})
- test('fails when nonce is missing in server message', function () {
- assert.throws(
- function () {
- sasl.continueSession(
- {
- message: 'SASLInitialResponse',
- },
- 'bad-password',
- 's=1,i=1'
- )
- },
+ suite.test('fails when salt is missing in server message', async () => {
+ await assert.rejects(
+ sasl.continueSession(
+ {
+ message: 'SASLInitialResponse',
+ },
+ 'bad-password',
+ 'r=1,i=1'
+ ),
{
- message: 'SASL: SCRAM-SERVER-FIRST-MESSAGE: nonce missing',
+ message: 'SASL: SCRAM-SERVER-FIRST-MESSAGE: salt missing',
}
)
})
- test('fails when salt is missing in server message', function () {
- assert.throws(
- function () {
+ suite.test('fails when client password is not a string', async () => {
+ for (const badPasswordValue of [null, undefined, 123, new Date(), {}]) {
+ await assert.rejects(
sasl.continueSession(
{
message: 'SASLInitialResponse',
+ clientNonce: 'a',
},
- 'bad-password',
+ badPasswordValue,
'r=1,i=1'
- )
- },
+ ),
+ {
+ message: 'SASL: SCRAM-SERVER-FIRST-MESSAGE: client password must be a string',
+ }
+ )
+ }
+ })
+
+ suite.test('fails when client password is an empty string', async () => {
+ await assert.rejects(
+ sasl.continueSession(
+ {
+ message: 'SASLInitialResponse',
+ clientNonce: 'a',
+ },
+ '',
+ 'r=1,i=1'
+ ),
{
- message: 'SASL: SCRAM-SERVER-FIRST-MESSAGE: salt missing',
+ message: 'SASL: SCRAM-SERVER-FIRST-MESSAGE: client password must be a non-empty string',
}
)
})
- test('fails when iteration is missing in server message', function () {
- assert.throws(
+ suite.test('fails when iteration is missing in server message', async () => {
+ await assert.rejects(
+ sasl.continueSession(
+ {
+ message: 'SASLInitialResponse',
+ },
+ 'bad-password',
+ 'r=1,s=abcd'
+ ),
+ {
+ message: 'SASL: SCRAM-SERVER-FIRST-MESSAGE: iteration missing',
+ }
+ )
+ })
+
+ suite.test('fails when server nonce does not start with client nonce', async () => {
+ await assert.rejects(
+ sasl.continueSession(
+ {
+ message: 'SASLInitialResponse',
+ clientNonce: '2',
+ },
+ 'bad-password',
+ 'r=1,s=abcd,i=1'
+ ),
+ {
+ message: 'SASL: SCRAM-SERVER-FIRST-MESSAGE: server nonce does not start with client nonce',
+ }
+ )
+ })
+
+ suite.test('fails when iteration count exceeds default scramMaxIterations', async function () {
+ await assert.rejects(
function () {
- sasl.continueSession(
+ return sasl.continueSession(
{
message: 'SASLInitialResponse',
+ clientNonce: 'a',
+ scramMaxIterations: 100000,
},
- 'bad-password',
- 'r=1,s=abcd'
+ 'password',
+ 'r=ab,s=abcd,i=100001'
)
},
{
- message: 'SASL: SCRAM-SERVER-FIRST-MESSAGE: iteration missing',
+ message: 'SASL: SCRAM-SERVER-FIRST-MESSAGE: iteration count 100001 exceeds scramMaxIterations of 100000',
}
)
})
- test('fails when server nonce does not start with client nonce', function () {
- assert.throws(
+ suite.test('fails when iteration count exceeds a custom scramMaxIterations', async function () {
+ await assert.rejects(
function () {
- sasl.continueSession(
+ return sasl.continueSession(
{
message: 'SASLInitialResponse',
- clientNonce: '2',
+ clientNonce: 'a',
+ scramMaxIterations: 10,
},
- 'bad-password',
- 'r=1,s=abcd,i=1'
+ 'password',
+ 'r=ab,s=abcd,i=11'
)
},
{
- message: 'SASL: SCRAM-SERVER-FIRST-MESSAGE: server nonce does not start with client nonce',
+ message: 'SASL: SCRAM-SERVER-FIRST-MESSAGE: iteration count 11 exceeds scramMaxIterations of 10',
}
)
})
- test('sets expected session data', function () {
+ suite.test('allows iteration count at the scramMaxIterations limit', async function () {
const session = {
message: 'SASLInitialResponse',
clientNonce: 'a',
+ scramMaxIterations: 5,
}
- sasl.continueSession(session, 'password', 'r=ab,s=abcd,i=1')
+ await sasl.continueSession(session, 'password', 'r=ab,s=abcd,i=5')
+
+ assert.equal(session.message, 'SASLResponse')
+ })
+
+ suite.test('disables the iteration count check when scramMaxIterations is 0', async function () {
+ const session = {
+ message: 'SASLInitialResponse',
+ clientNonce: 'a',
+ scramMaxIterations: 0,
+ }
+
+ await sasl.continueSession(session, 'password', 'r=ab,s=abcd,i=999999')
+
+ assert.equal(session.message, 'SASLResponse')
+ })
+
+ suite.test('sets expected session data (SCRAM-SHA-256)', async function () {
+ const session = {
+ message: 'SASLInitialResponse',
+ clientNonce: 'a',
+ }
+
+ await sasl.continueSession(session, 'password', 'r=ab,s=abcd,i=1')
assert.equal(session.message, 'SASLResponse')
assert.equal(session.serverSignature, 'jwt97IHWFn7FEqHykPTxsoQrKGOMXJl/PJyJ1JXTBKc=')
assert.equal(session.response, 'c=biws,r=ab,p=mU8grLfTjDrJer9ITsdHk0igMRDejG10EJPFbIBL3D0=')
})
+
+ suite.test('sets expected session data (SCRAM-SHA-256, channel binding enabled)', async function () {
+ const session = {
+ message: 'SASLInitialResponse',
+ clientNonce: 'a',
+ }
+
+ await sasl.continueSession(session, 'password', 'r=ab,s=abcd,i=1', { getPeerCertificate() {} })
+
+ assert.equal(session.message, 'SASLResponse')
+ assert.equal(session.serverSignature, 'ETpURSc5OpddrPRSW3LaDPJzUzhh+rciM4uYwXSsohU=')
+
+ assert.equal(session.response, 'c=eSws,r=ab,p=YVTEOwOD7khu/NulscjFegHrZoTXJBFI/7L61AN9khc=')
+ })
+
+ suite.test('SASLprep maps non-ASCII space characters (RFC 3454 C.1.2) to U+0020 SPACE', async function () {
+ // SASLprep probably misuses the C.1.2 table; U+200B, in particular, is listed in both the C.1.2 and B.1 tables. We treat it as a space for compatibility with PostgreSQL.
+ const sessionPrepped = { message: 'SASLInitialResponse', clientNonce: 'a' }
+ const sessionRef = { message: 'SASLInitialResponse', clientNonce: 'a' }
+
+ await sasl.continueSession(sessionPrepped, '\u200bfoo\xa0bar', 'r=ab,s=abcd,i=1')
+ await sasl.continueSession(sessionRef, ' foo bar', 'r=ab,s=abcd,i=1')
+
+ assert.equal(sessionPrepped.serverSignature, sessionRef.serverSignature)
+ assert.equal(sessionPrepped.response, sessionRef.response)
+ })
+
+ suite.test('SASLprep maps mapped-to-nothing characters before PBKDF2 (RFC 3454 B.1)', async function () {
+ // Soft hyphen U+00AD is mapped to nothing by SASLprep, so 'I\u00ADX'
+ // must produce identical SCRAM output to 'IX'. This proves the prep
+ // step is engaged on the SCRAM derivation path. Without the fix the
+ // two would diverge and this assertion would fail.
+ const sessionPrepped = { message: 'SASLInitialResponse', clientNonce: 'a' }
+ const sessionRef = { message: 'SASLInitialResponse', clientNonce: 'a' }
+
+ await sasl.continueSession(sessionPrepped, 'I\u00ADX', 'r=ab,s=abcd,i=1')
+ await sasl.continueSession(sessionRef, 'IX', 'r=ab,s=abcd,i=1')
+
+ assert.equal(sessionPrepped.serverSignature, sessionRef.serverSignature)
+ assert.equal(sessionPrepped.response, sessionRef.response)
+ })
+
+ suite.test('SASLprep NFKC-normalizes passwords before PBKDF2 (RFC 4013 §2.2)', async function () {
+ // ROMAN NUMERAL IX (U+2168) NFKC-decomposes to the ASCII letters 'IX'.
+ // PostgreSQL's server applies SASLprep when computing the verifier, so
+ // a role created with U+2168 is stored as if it were 'IX'. The client
+ // must do the same.
+ const sessionPrepped = { message: 'SASLInitialResponse', clientNonce: 'a' }
+ const sessionRef = { message: 'SASLInitialResponse', clientNonce: 'a' }
+
+ await sasl.continueSession(sessionPrepped, '\u2168', 'r=ab,s=abcd,i=1')
+ await sasl.continueSession(sessionRef, 'IX', 'r=ab,s=abcd,i=1')
+
+ assert.equal(sessionPrepped.serverSignature, sessionRef.serverSignature)
+ assert.equal(sessionPrepped.response, sessionRef.response)
+ })
+
+ suite.test('passes ASCII control characters through normalization unchanged', async function () {
+ // BEL (U+0007) is an ASCII control character. The minimal SASLprep
+ // implementation (B.1 mapping → C.1.2 mapping → NFKC) is the identity
+ // on ASCII control codes, so the bytes fed to PBKDF2 are exactly the
+ // raw password. We snapshot the resulting SCRAM output as a regression
+ // guard: if anyone ever swaps the order of operations, removes the
+ // NFKC step, or accidentally strips ASCII bytes, this assertion trips.
+ const session = { message: 'SASLInitialResponse', clientNonce: 'a' }
+
+ await sasl.continueSession(session, '\u0007abc', 'r=ab,s=abcd,i=1')
+
+ assert.equal(session.message, 'SASLResponse')
+ assert.equal(session.serverSignature, 'ytJN8GA+9TeZpeS28ix+u0cwaIB7iFlWgpAsmy+MmP0=')
+ assert.equal(session.response, 'c=biws,r=ab,p=04HAPnY4K2UhwiD2RJtFw9sU81SLcas8B1Uqdqv8SeQ=')
+ })
+
+ suite.test('sets expected session data (SCRAM-SHA-256-PLUS)', async function () {
+ const session = {
+ message: 'SASLInitialResponse',
+ mechanism: 'SCRAM-SHA-256-PLUS',
+ clientNonce: 'a',
+ }
+
+ await sasl.continueSession(session, 'password', 'r=ab,s=abcd,i=1', {
+ getPeerCertificate() {
+ return {
+ raw: Buffer.from([
+ // a minimal ASN.1 certificate structure which can be parsed for a hash type
+ 0x30, // cert ASN.1 seq
+ 0x16, // cert length (all bytes below)
+ 0x30, // cert info ASN.1 seq
+ 0x01, // cert info length
+ 0x00, // cert info (skipped)
+ 0x30, // signature algorithm ASN.1 seq
+ 0x0d, // signature algorithm length
+ 0x06, // ASN.1 OID
+ 0x09, // OID length
+ 0x2a, // OID: 1.2.840.113549.1.1.11 (RSASSA-PKCS1-v1_5 / SHA-256)
+ 0x86,
+ 0x48,
+ 0x86,
+ 0xf7,
+ 0x0d,
+ 0x01,
+ 0x01,
+ 0x0b,
+ 0x05, // ASN.1 null (no algorithm parameters)
+ 0x00, // null length
+ 0x03, // ASN.1 bitstring (signature)
+ 0x02, // bitstring length
+ 0x00, // zero right-padding bits
+ 0xff, // one-byte signature
+ ]),
+ }
+ },
+ })
+
+ assert.equal(session.message, 'SASLResponse')
+ assert.equal(session.serverSignature, 'pU1hc6JkjvjO8Wd+o0/jyGjc1DpITtsx1UF+ZPa5u5M=')
+
+ assert.equal(
+ session.response,
+ 'c=cD10bHMtc2VydmVyLWVuZC1wb2ludCwsmwepqKDDRcOvo3BN0rplYMfLUTpbaf38btkM5aAXBhQ=,r=ab,p=j0v2LsthoNaIBrKV4YipskF/lV8zWEt6acNRtt99MA4='
+ )
+ })
})
- test('continueSession', function () {
- test('fails when last session message was not SASLResponse', function () {
+ suite.test('finalizeSession', function () {
+ suite.test('fails when last session message was not SASLResponse', function () {
assert.throws(
function () {
sasl.finalizeSession({})
@@ -142,7 +382,7 @@ test('sasl/scram', function () {
)
})
- test('fails when server signature is not valid base64', function () {
+ suite.test('fails when server signature is not valid base64', function () {
assert.throws(
function () {
sasl.finalizeSession(
@@ -159,7 +399,24 @@ test('sasl/scram', function () {
)
})
- test('fails when server signature does not match', function () {
+ suite.test('fails when server returns an error', function () {
+ assert.throws(
+ function () {
+ sasl.finalizeSession(
+ {
+ message: 'SASLResponse',
+ serverSignature: 'abcd',
+ },
+ 'e=no-resources'
+ )
+ },
+ {
+ message: 'SASL: SCRAM-SERVER-FINAL-MESSAGE: server returned error: "no-resources"',
+ }
+ )
+ })
+
+ suite.test('fails when server signature does not match', function () {
assert.throws(
function () {
sasl.finalizeSession(
@@ -176,7 +433,7 @@ test('sasl/scram', function () {
)
})
- test('does not fail when eveything is ok', function () {
+ suite.test('does not fail when eveything is ok', function () {
sasl.finalizeSession(
{
message: 'SASLResponse',
diff --git a/packages/pg/test/unit/client/set-keepalives-tests.js b/packages/pg/test/unit/client/set-keepalives-tests.js
index 3fef0c055..cae6846e3 100644
--- a/packages/pg/test/unit/client/set-keepalives-tests.js
+++ b/packages/pg/test/unit/client/set-keepalives-tests.js
@@ -2,6 +2,7 @@
const net = require('net')
const pg = require('../../../lib/index.js')
const helper = require('./test-helper')
+const assert = require('assert')
const suite = new helper.Suite()
diff --git a/packages/pg/test/unit/client/simple-query-tests.js b/packages/pg/test/unit/client/simple-query-tests.js
index 2c3ea5e4e..8cc550830 100644
--- a/packages/pg/test/unit/client/simple-query-tests.js
+++ b/packages/pg/test/unit/client/simple-query-tests.js
@@ -1,11 +1,14 @@
'use strict'
-var helper = require('./test-helper')
-var Query = require('../../../lib/query')
+const helper = require('./test-helper')
+const Query = require('../../../lib/query')
+const assert = require('assert')
+const suite = new helper.Suite()
+const test = suite.test.bind(suite)
test('executing query', function () {
test('queing query', function () {
test('when connection is ready', function () {
- var client = helper.client()
+ const client = helper.client()
assert.empty(client.connection.queries)
client.connection.emit('readyForQuery')
client.query('yes')
@@ -14,7 +17,7 @@ test('executing query', function () {
})
test('when connection is not ready', function () {
- var client = helper.client()
+ const client = helper.client()
test('query is not sent', function () {
client.query('boom')
@@ -29,9 +32,9 @@ test('executing query', function () {
})
test('multiple in the queue', function () {
- var client = helper.client()
- var connection = client.connection
- var queries = connection.queries
+ const client = helper.client()
+ const connection = client.connection
+ const queries = connection.queries
client.query('one')
client.query('two')
client.query('three')
@@ -61,9 +64,9 @@ test('executing query', function () {
})
test('query event binding and flow', function () {
- var client = helper.client()
- var con = client.connection
- var query = client.query(new Query('whatever'))
+ const client = helper.client()
+ const con = client.connection
+ const query = client.query(new Query('whatever'))
test('has no queries sent before ready', function () {
assert.empty(con.queries)
@@ -76,7 +79,7 @@ test('executing query', function () {
})
test('handles rowDescription message', function () {
- var handled = con.emit('rowDescription', {
+ const handled = con.emit('rowDescription', {
fields: [
{
name: 'boom',
@@ -91,14 +94,14 @@ test('executing query', function () {
assert.equal(row['boom'], 'hi')
})
- var handled = con.emit('dataRow', { fields: ['hi'] })
+ const handled = con.emit('dataRow', { fields: ['hi'] })
assert.ok(handled, 'should have handled first data row message')
assert.emits(query, 'row', function (row) {
assert.equal(row['boom'], 'bye')
})
- var handledAgain = con.emit('dataRow', { fields: ['bye'] })
+ const handledAgain = con.emit('dataRow', { fields: ['bye'] })
assert.ok(handledAgain, 'should have handled seciond data row message')
})
@@ -109,45 +112,42 @@ test('executing query', function () {
text: 'INSERT 31 1',
})
})
-
- test('removes itself after another readyForQuery message', function () {
- return false
- assert.emits(query, 'end', function (msg) {
- // TODO do we want to check the complete messages?
- })
- con.emit('readyForQuery')
- // this would never actually happen
- ;['dataRow', 'rowDescription', 'commandComplete'].forEach(function (msg) {
- assert.equal(con.emit(msg), false, "Should no longer be picking up '" + msg + "' messages")
- })
- })
})
test('handles errors', function () {
- var client = helper.client()
+ const client = helper.client()
test('throws an error when config is null', function () {
- try {
- client.query(null, undefined)
- } catch (error) {
- assert.equal(
- error.message,
- 'Client was passed a null or undefined query',
- 'Should have thrown an Error for null queries'
- )
- }
+ assert.throws(
+ () => {
+ client.query(null, undefined)
+ },
+ {
+ message: 'Client was passed a null or undefined query',
+ }
+ )
})
test('throws an error when config is undefined', function () {
- try {
- client.query()
- } catch (error) {
- assert.equal(
- error.message,
- 'Client was passed a null or undefined query',
- 'Should have thrown an Error for null queries'
- )
- }
+ assert.throws(
+ () => {
+ client.query()
+ },
+ {
+ message: 'Client was passed a null or undefined query',
+ }
+ )
+ })
+
+ test('throws an error when callback is not a function', function () {
+ assert.throws(
+ () => {
+ client.query('SELECT $1', [1], 'notafunction')
+ },
+ {
+ message: 'callback is not a function',
+ }
+ )
})
})
})
diff --git a/packages/pg/test/unit/client/stream-and-query-error-interaction-tests.js b/packages/pg/test/unit/client/stream-and-query-error-interaction-tests.js
index 892d2e87a..166cd9f35 100644
--- a/packages/pg/test/unit/client/stream-and-query-error-interaction-tests.js
+++ b/packages/pg/test/unit/client/stream-and-query-error-interaction-tests.js
@@ -1,10 +1,12 @@
'use strict'
-var helper = require('./test-helper')
-var Connection = require('../../../lib/connection')
-var Client = require('../../../lib/client')
+const helper = require('./test-helper')
+const Connection = require('../../../lib/connection')
+const Client = require('../../../lib/client')
+const assert = require('assert')
+const suite = new helper.Suite()
-test('emits end when not in query', function () {
- var stream = new (require('events').EventEmitter)()
+suite.test('emits end when not in query', function () {
+ const stream = new (require('events').EventEmitter)()
stream.setNoDelay = () => {}
stream.connect = function () {
// NOOP
@@ -13,7 +15,7 @@ test('emits end when not in query', function () {
// NOOP
}
- var client = new Client({ connection: new Connection({ stream: stream }) })
+ const client = new Client({ connection: new Connection({ stream: stream }) })
client.connect(
assert.calls(function () {
client.query(
@@ -29,8 +31,6 @@ test('emits end when not in query', function () {
client.connection.emit('connect')
process.nextTick(function () {
client.connection.emit('readyForQuery')
- assert.equal(client.queryQueue.length, 0)
- assert(client.activeQuery, 'client should have issued query')
process.nextTick(function () {
stream.emit('close')
})
diff --git a/packages/pg/test/unit/client/test-helper.js b/packages/pg/test/unit/client/test-helper.js
index 8d1859033..4a3fa9687 100644
--- a/packages/pg/test/unit/client/test-helper.js
+++ b/packages/pg/test/unit/client/test-helper.js
@@ -1,16 +1,17 @@
'use strict'
-var helper = require('../test-helper')
-var Connection = require('../../../lib/connection')
+const helper = require('../test-helper')
+const Connection = require('../../../lib/connection')
+const { Client } = helper
-var makeClient = function () {
- var connection = new Connection({ stream: 'no' })
+const makeClient = function (config) {
+ const connection = new Connection({ stream: 'no' })
connection.startup = function () {}
connection.connect = function () {}
connection.query = function (text) {
this.queries.push(text)
}
connection.queries = []
- var client = new Client({ connection: connection })
+ const client = new Client({ connection: connection, ...config })
client.connect()
client.connection.emit('connect')
return client
diff --git a/packages/pg/test/unit/client/throw-in-type-parser-tests.js b/packages/pg/test/unit/client/throw-in-type-parser-tests.js
index 8f71fdc02..2428a121b 100644
--- a/packages/pg/test/unit/client/throw-in-type-parser-tests.js
+++ b/packages/pg/test/unit/client/throw-in-type-parser-tests.js
@@ -1,11 +1,12 @@
'use strict'
-var helper = require('./test-helper')
-var Query = require('../../../lib/query')
-var types = require('pg-types')
+const helper = require('./test-helper')
+const Query = require('../../../lib/query')
+const types = require('pg-types')
+const assert = require('assert')
const suite = new helper.Suite()
-var typeParserError = new Error('TEST: Throw in type parsers')
+const typeParserError = new Error('TEST: Throw in type parsers')
types.setTypeParser('special oid that will throw', function () {
throw typeParserError
@@ -32,10 +33,9 @@ const emitFakeEvents = (con) => {
}
suite.test('emits error', function (done) {
- var handled
- var client = helper.client()
- var con = client.connection
- var query = client.query(new Query('whatever'))
+ const client = helper.client()
+ const con = client.connection
+ const query = client.query(new Query('whatever'))
emitFakeEvents(con)
assert.emits(query, 'error', function (err) {
@@ -45,22 +45,18 @@ suite.test('emits error', function (done) {
})
suite.test('calls callback with error', function (done) {
- var handled
-
- var callbackCalled = 0
-
- var client = helper.client()
- var con = client.connection
+ const client = helper.client()
+ const con = client.connection
emitFakeEvents(con)
- var query = client.query('whatever', function (err) {
+ client.query('whatever', function (err) {
assert.equal(err, typeParserError)
done()
})
})
suite.test('rejects promise with error', function (done) {
- var client = helper.client()
- var con = client.connection
+ const client = helper.client()
+ const con = client.connection
emitFakeEvents(con)
client.query('whatever').catch((err) => {
assert.equal(err, typeParserError)
diff --git a/packages/pg/test/unit/connection-parameters/creation-tests.js b/packages/pg/test/unit/connection-parameters/creation-tests.js
index cd27d5011..bb6f815a0 100644
--- a/packages/pg/test/unit/connection-parameters/creation-tests.js
+++ b/packages/pg/test/unit/connection-parameters/creation-tests.js
@@ -6,7 +6,7 @@ const defaults = require('../../../lib').defaults
const dns = require('dns')
// clear process.env
-for (var key in process.env) {
+for (const key in process.env) {
delete process.env[key]
}
@@ -18,7 +18,7 @@ suite.test('ConnectionParameters construction', function () {
assert.ok(new ConnectionParameters('postgres://localhost/postgres'), 'with connection string')
})
-var compare = function (actual, expected, type) {
+const compare = function (actual, expected, type) {
const expectedDatabase = expected.database === undefined ? expected.user : expected.database
assert.equal(actual.user, expected.user, type + ' user')
@@ -38,13 +38,13 @@ var compare = function (actual, expected, type) {
}
suite.test('ConnectionParameters initializing from defaults', function () {
- var subject = new ConnectionParameters()
+ const subject = new ConnectionParameters()
compare(subject, defaults, 'defaults')
assert.ok(subject.isDomainSocket === false)
})
suite.test('ConnectionParameters initializing from defaults with connectionString set', function () {
- var config = {
+ const config = {
user: 'brians-are-the-best',
database: 'scoobysnacks',
port: 7777,
@@ -57,18 +57,18 @@ suite.test('ConnectionParameters initializing from defaults with connectionStrin
options: '-c geqo=off',
}
- var original_value = defaults.connectionString
+ const original_value = defaults.connectionString
// Just changing this here doesn't actually work because it's no longer in scope when viewed inside of
// of ConnectionParameters() so we have to pass in the defaults explicitly to test it
defaults.connectionString =
'postgres://brians-are-the-best:mypassword@foo.bar.net:7777/scoobysnacks?options=-c geqo=off'
- var subject = new ConnectionParameters(defaults)
+ const subject = new ConnectionParameters(defaults)
defaults.connectionString = original_value
compare(subject, config, 'defaults-connectionString')
})
suite.test('ConnectionParameters initializing from config', function () {
- var config = {
+ const config = {
user: 'brian',
database: 'home',
port: 7777,
@@ -84,23 +84,23 @@ suite.test('ConnectionParameters initializing from config', function () {
idle_in_transaction_session_timeout: 15000,
options: '-c geqo=off',
}
- var subject = new ConnectionParameters(config)
+ const subject = new ConnectionParameters(config)
compare(subject, config, 'config')
assert.ok(subject.isDomainSocket === false)
})
suite.test('ConnectionParameters initializing from config and config.connectionString', function () {
- var subject1 = new ConnectionParameters({
+ const subject1 = new ConnectionParameters({
connectionString: 'postgres://test@host/db',
})
- var subject2 = new ConnectionParameters({
+ const subject2 = new ConnectionParameters({
connectionString: 'postgres://test@host/db?ssl=1',
})
- var subject3 = new ConnectionParameters({
+ const subject3 = new ConnectionParameters({
connectionString: 'postgres://test@host/db',
ssl: true,
})
- var subject4 = new ConnectionParameters({
+ const subject4 = new ConnectionParameters({
connectionString: 'postgres://test@host/db?ssl=1',
ssl: false,
})
@@ -112,31 +112,31 @@ suite.test('ConnectionParameters initializing from config and config.connectionS
})
suite.test('escape spaces if present', function () {
- var subject = new ConnectionParameters('postgres://localhost/post gres')
+ const subject = new ConnectionParameters('postgres://localhost/post gres')
assert.equal(subject.database, 'post gres')
})
suite.test('do not double escape spaces', function () {
- var subject = new ConnectionParameters('postgres://localhost/post%20gres')
+ const subject = new ConnectionParameters('postgres://localhost/post%20gres')
assert.equal(subject.database, 'post gres')
})
suite.test('initializing with unix domain socket', function () {
- var subject = new ConnectionParameters('/var/run/')
+ const subject = new ConnectionParameters('/var/run/')
assert.ok(subject.isDomainSocket)
assert.equal(subject.host, '/var/run/')
assert.equal(subject.database, defaults.user)
})
suite.test('initializing with unix domain socket and a specific database, the simple way', function () {
- var subject = new ConnectionParameters('/var/run/ mydb')
+ const subject = new ConnectionParameters('/var/run/ mydb')
assert.ok(subject.isDomainSocket)
assert.equal(subject.host, '/var/run/')
assert.equal(subject.database, 'mydb')
})
suite.test('initializing with unix domain socket, the health way', function () {
- var subject = new ConnectionParameters('socket:/some path/?db=my[db]&encoding=utf8')
+ const subject = new ConnectionParameters('socket:/some path/?db=my[db]&encoding=utf8')
assert.ok(subject.isDomainSocket)
assert.equal(subject.host, '/some path/')
assert.equal(subject.database, 'my[db]', 'must to be escaped and unescaped trough "my%5Bdb%5D"')
@@ -144,14 +144,14 @@ suite.test('initializing with unix domain socket, the health way', function () {
})
suite.test('initializing with unix domain socket, the escaped health way', function () {
- var subject = new ConnectionParameters('socket:/some%20path/?db=my%2Bdb&encoding=utf8')
+ const subject = new ConnectionParameters('socket:/some%20path/?db=my%2Bdb&encoding=utf8')
assert.ok(subject.isDomainSocket)
assert.equal(subject.host, '/some path/')
assert.equal(subject.database, 'my+db')
assert.equal(subject.client_encoding, 'utf8')
})
-var checkForPart = function (array, part) {
+const checkForPart = function (array, part) {
assert.ok(array.indexOf(part) > -1, array.join(' ') + ' did not contain ' + part)
}
@@ -163,24 +163,24 @@ const getDNSHost = async function (host) {
})
}
-suite.testAsync('builds simple string', async function () {
- var config = {
+suite.test('builds simple string', async function () {
+ const config = {
user: 'brian',
password: 'xyz',
- port: 888,
host: 'localhost',
+ port: 888,
database: 'bam',
}
- var subject = new ConnectionParameters(config)
+ const subject = new ConnectionParameters(config)
const dnsHost = await getDNSHost(config.host)
return new Promise((resolve) => {
subject.getLibpqConnectionString(function (err, constring) {
assert(!err)
- var parts = constring.split(' ')
+ const parts = constring.split(' ')
checkForPart(parts, "user='brian'")
checkForPart(parts, "password='xyz'")
- checkForPart(parts, "port='888'")
checkForPart(parts, `hostaddr='${dnsHost}'`)
+ checkForPart(parts, "port='888'")
checkForPart(parts, "dbname='bam'")
resolve()
})
@@ -188,18 +188,18 @@ suite.testAsync('builds simple string', async function () {
})
suite.test('builds dns string', async function () {
- var config = {
+ const config = {
user: 'brian',
password: 'asdf',
- port: 5432,
host: 'localhost',
+ port: 5432,
}
- var subject = new ConnectionParameters(config)
+ const subject = new ConnectionParameters(config)
const dnsHost = await getDNSHost(config.host)
return new Promise((resolve) => {
subject.getLibpqConnectionString(function (err, constring) {
assert(!err)
- var parts = constring.split(' ')
+ const parts = constring.split(' ')
checkForPart(parts, "user='brian'")
checkForPart(parts, `hostaddr='${dnsHost}'`)
resolve()
@@ -208,13 +208,13 @@ suite.test('builds dns string', async function () {
})
suite.test('error when dns fails', function () {
- var config = {
+ const config = {
user: 'brian',
password: 'asf',
- port: 5432,
host: 'asdlfkjasldfkksfd#!$!!!!..com',
+ port: 5432,
}
- var subject = new ConnectionParameters(config)
+ const subject = new ConnectionParameters(config)
subject.getLibpqConnectionString(
assert.calls(function (err, constring) {
assert.ok(err)
@@ -224,17 +224,17 @@ suite.test('error when dns fails', function () {
})
suite.test('connecting to unix domain socket', function () {
- var config = {
+ const config = {
user: 'brian',
password: 'asf',
- port: 5432,
host: '/tmp/',
+ port: 5432,
}
- var subject = new ConnectionParameters(config)
+ const subject = new ConnectionParameters(config)
subject.getLibpqConnectionString(
assert.calls(function (err, constring) {
assert(!err)
- var parts = constring.split(' ')
+ const parts = constring.split(' ')
checkForPart(parts, "user='brian'")
checkForPart(parts, "host='/tmp/'")
})
@@ -242,17 +242,17 @@ suite.test('connecting to unix domain socket', function () {
})
suite.test('config contains quotes and backslashes', function () {
- var config = {
+ const config = {
user: 'not\\brian',
password: "bad'chars",
- port: 5432,
host: '/tmp/',
+ port: 5432,
}
- var subject = new ConnectionParameters(config)
+ const subject = new ConnectionParameters(config)
subject.getLibpqConnectionString(
assert.calls(function (err, constring) {
assert(!err)
- var parts = constring.split(' ')
+ const parts = constring.split(' ')
checkForPart(parts, "user='not\\\\brian'")
checkForPart(parts, "password='bad\\'chars'")
})
@@ -260,28 +260,28 @@ suite.test('config contains quotes and backslashes', function () {
})
suite.test('encoding can be specified by config', function () {
- var config = {
+ const config = {
client_encoding: 'utf-8',
}
- var subject = new ConnectionParameters(config)
+ const subject = new ConnectionParameters(config)
subject.getLibpqConnectionString(
assert.calls(function (err, constring) {
assert(!err)
- var parts = constring.split(' ')
+ const parts = constring.split(' ')
checkForPart(parts, "client_encoding='utf-8'")
})
)
})
suite.test('password contains < and/or > characters', function () {
- var sourceConfig = {
+ const sourceConfig = {
user: 'brian',
password: 'helloe',
- port: 5432,
host: 'localhost',
+ port: 5432,
database: 'postgres',
}
- var connectionString =
+ const connectionString =
'postgres://' +
sourceConfig.user +
':' +
@@ -292,15 +292,15 @@ suite.test('password contains < and/or > characters', function () {
sourceConfig.port +
'/' +
sourceConfig.database
- var subject = new ConnectionParameters(connectionString)
+ const subject = new ConnectionParameters(connectionString)
assert.equal(subject.password, sourceConfig.password)
})
suite.test('username or password contains weird characters', function () {
- var defaults = require('../../../lib/defaults')
+ const defaults = require('../../../lib/defaults')
defaults.ssl = true
- var strang = 'pg://my f%irst name:is&%awesome!@localhost:9000'
- var subject = new ConnectionParameters(strang)
+ const strang = 'pg://my f%irst name:is&%awesome!@localhost:9000'
+ const subject = new ConnectionParameters(strang)
assert.equal(subject.user, 'my f%irst name')
assert.equal(subject.password, 'is&%awesome!')
assert.equal(subject.host, 'localhost')
@@ -308,8 +308,8 @@ suite.test('username or password contains weird characters', function () {
})
suite.test('url is properly encoded', function () {
- var encoded = 'pg://bi%25na%25%25ry%20:s%40f%23@localhost/%20u%2520rl'
- var subject = new ConnectionParameters(encoded)
+ const encoded = 'pg://bi%25na%25%25ry%20:s%40f%23@localhost/%20u%2520rl'
+ const subject = new ConnectionParameters(encoded)
assert.equal(subject.user, 'bi%na%%ry ')
assert.equal(subject.password, 's@f#')
assert.equal(subject.host, 'localhost')
@@ -317,10 +317,10 @@ suite.test('url is properly encoded', function () {
})
suite.test('ssl is set on client', function () {
- var Client = require('../../../lib/client')
- var defaults = require('../../../lib/defaults')
+ const Client = require('../../../lib/client')
+ const defaults = require('../../../lib/defaults')
defaults.ssl = true
- var c = new Client('postgres://user@password:host/database')
+ const c = new Client('postgres://user:password@host/database')
assert(c.ssl, 'Client should have ssl enabled via defaults')
})
@@ -330,11 +330,11 @@ suite.test('coercing string "true" to boolean', function () {
})
suite.test('ssl is set on client', function () {
- var sourceConfig = {
+ const sourceConfig = {
user: 'brian',
password: 'helloe',
- port: 5432,
host: 'localhost',
+ port: 5432,
database: 'postgres',
ssl: {
sslmode: 'verify-ca',
@@ -344,10 +344,9 @@ suite.test('ssl is set on client', function () {
sslrootcert: '/path/root.crt',
},
}
- var Client = require('../../../lib/client')
- var defaults = require('../../../lib/defaults')
+ const defaults = require('../../../lib/defaults')
defaults.ssl = true
- var c = new ConnectionParameters(sourceConfig)
+ const c = new ConnectionParameters(sourceConfig)
c.getLibpqConnectionString(
assert.calls(function (err, pgCString) {
assert(!err)
diff --git a/packages/pg/test/unit/connection-parameters/environment-variable-tests.js b/packages/pg/test/unit/connection-parameters/environment-variable-tests.js
index b20a7934b..068814365 100644
--- a/packages/pg/test/unit/connection-parameters/environment-variable-tests.js
+++ b/packages/pg/test/unit/connection-parameters/environment-variable-tests.js
@@ -1,14 +1,13 @@
'use strict'
-var helper = require('../test-helper')
const Suite = require('../../suite')
-var assert = require('assert')
-var ConnectionParameters = require('../../../lib/connection-parameters')
-var defaults = require('../../../lib').defaults
+const assert = require('assert')
+const ConnectionParameters = require('../../../lib/connection-parameters')
+const defaults = require('../../../lib').defaults
// clear process.env
-var realEnv = {}
-for (var key in process.env) {
+const realEnv = {}
+for (const key in process.env) {
realEnv[key] = process.env[key]
delete process.env[key]
}
@@ -17,7 +16,7 @@ const suite = new Suite('ConnectionParameters')
const clearEnv = () => {
// clear process.env
- for (var key in process.env) {
+ for (const key in process.env) {
delete process.env[key]
}
}
@@ -30,7 +29,7 @@ suite.test('ConnectionParameters initialized from environment variables', functi
process.env['PGDATABASE'] = 'allyerbase'
process.env['PGPASSWORD'] = 'open'
- var subject = new ConnectionParameters()
+ const subject = new ConnectionParameters()
assert.equal(subject.host, 'local', 'env host')
assert.equal(subject.user, 'bmc2', 'env user')
assert.equal(subject.port, 7890, 'env port')
@@ -47,7 +46,7 @@ suite.test('ConnectionParameters initialized from mix', function () {
process.env['PGPASSWORD'] = 'open'
delete process.env['PGPASSWORD']
delete process.env['PGDATABASE']
- var subject = new ConnectionParameters({
+ const subject = new ConnectionParameters({
user: 'testing',
database: 'zugzug',
})
@@ -60,8 +59,8 @@ suite.test('ConnectionParameters initialized from mix', function () {
suite.test('connection string parsing', function () {
clearEnv()
- var string = 'postgres://brian:pw@boom:381/lala'
- var subject = new ConnectionParameters(string)
+ const string = 'postgres://brian:pw@boom:381/lala'
+ const subject = new ConnectionParameters(string)
assert.equal(subject.host, 'boom', 'string host')
assert.equal(subject.user, 'brian', 'string user')
assert.equal(subject.password, 'pw', 'string password')
@@ -73,8 +72,8 @@ suite.test('connection string parsing - ssl', function () {
// clear process.env
clearEnv()
- var string = 'postgres://brian:pw@boom:381/lala?ssl=true'
- var subject = new ConnectionParameters(string)
+ let string = 'postgres://brian:pw@boom:381/lala?ssl=true'
+ let subject = new ConnectionParameters(string)
assert.equal(subject.ssl, true, 'ssl')
string = 'postgres://brian:pw@boom:381/lala?ssl=1'
@@ -100,15 +99,15 @@ suite.test('connection string parsing - ssl', function () {
suite.test('ssl is false by default', function () {
clearEnv()
- var subject = new ConnectionParameters()
+ const subject = new ConnectionParameters()
assert.equal(subject.ssl, false)
})
-var testVal = function (mode, expected) {
+const testVal = function (mode, expected) {
suite.test('ssl is ' + expected + ' when $PGSSLMODE=' + mode, function () {
clearEnv()
process.env.PGSSLMODE = mode
- var subject = new ConnectionParameters()
+ const subject = new ConnectionParameters()
assert.deepStrictEqual(subject.ssl, expected)
})
}
@@ -123,6 +122,6 @@ testVal('verify-full', true)
testVal('no-verify', { rejectUnauthorized: false })
// restore process.env
-for (var key in realEnv) {
+for (const key in realEnv) {
process.env[key] = realEnv[key]
}
diff --git a/packages/pg/test/unit/connection-pool/configuration-tests.js b/packages/pg/test/unit/connection-pool/configuration-tests.js
index 10c991839..cfd8f0eec 100644
--- a/packages/pg/test/unit/connection-pool/configuration-tests.js
+++ b/packages/pg/test/unit/connection-pool/configuration-tests.js
@@ -2,8 +2,9 @@
const assert = require('assert')
const helper = require('../test-helper')
+const suite = new helper.Suite()
-test('pool with copied settings includes password', () => {
+suite.test('pool with copied settings includes password', () => {
const original = new helper.pg.Pool({
password: 'original',
})
diff --git a/packages/pg/test/unit/connection/error-tests.js b/packages/pg/test/unit/connection/error-tests.js
index 091c13e2c..2171a25b6 100644
--- a/packages/pg/test/unit/connection/error-tests.js
+++ b/packages/pg/test/unit/connection/error-tests.js
@@ -1,12 +1,14 @@
'use strict'
-var helper = require('./test-helper')
-var Connection = require('../../../lib/connection')
-var net = require('net')
+const helper = require('./test-helper')
+const Connection = require('../../../lib/connection')
+const net = require('net')
+const assert = require('assert')
const suite = new helper.Suite()
+const { MemoryStream } = helper
suite.test('connection emits stream errors', function (done) {
- var con = new Connection({ stream: new MemoryStream() })
+ const con = new Connection({ stream: new MemoryStream() })
assert.emits(con, 'error', function (err) {
assert.equal(err.message, 'OMG!')
done()
@@ -16,28 +18,28 @@ suite.test('connection emits stream errors', function (done) {
})
suite.test('connection emits ECONNRESET errors during normal operation', function (done) {
- var con = new Connection({ stream: new MemoryStream() })
+ const con = new Connection({ stream: new MemoryStream() })
con.connect()
assert.emits(con, 'error', function (err) {
assert.equal(err.code, 'ECONNRESET')
done()
})
- var e = new Error('Connection Reset')
+ const e = new Error('Connection Reset')
e.code = 'ECONNRESET'
con.stream.emit('error', e)
})
suite.test('connection does not emit ECONNRESET errors during disconnect', function (done) {
- var con = new Connection({ stream: new MemoryStream() })
+ const con = new Connection({ stream: new MemoryStream() })
con.connect()
- var e = new Error('Connection Reset')
+ const e = new Error('Connection Reset')
e.code = 'ECONNRESET'
con.end()
con.stream.emit('error', e)
done()
})
-var SSLNegotiationPacketTests = [
+const SSLNegotiationPacketTests = [
{
testName: 'connection does not emit ECONNRESET errors during disconnect also when using SSL',
errorMessage: null,
@@ -61,8 +63,8 @@ var SSLNegotiationPacketTests = [
for (const tc of SSLNegotiationPacketTests) {
suite.test(tc.testName, function (done) {
// our fake postgres server
- var socket
- var server = net.createServer(function (c) {
+ let socket
+ const server = net.createServer(function (c) {
socket = c
c.once('data', function (data) {
c.write(Buffer.from(tc.response))
@@ -70,7 +72,7 @@ for (const tc of SSLNegotiationPacketTests) {
})
server.listen(7778, function () {
- var con = new Connection({ ssl: true })
+ const con = new Connection({ ssl: true })
con.connect(7778, 'localhost')
assert.emits(con, tc.responseType, function (err) {
if (tc.errorMessage !== null || err) {
diff --git a/packages/pg/test/unit/connection/inbound-parser-tests.js b/packages/pg/test/unit/connection/inbound-parser-tests.js
deleted file mode 100644
index af9385c40..000000000
--- a/packages/pg/test/unit/connection/inbound-parser-tests.js
+++ /dev/null
@@ -1,510 +0,0 @@
-'use strict'
-require('./test-helper')
-const BufferList = require('../../buffer-list')
-var Connection = require('../../../lib/connection')
-var buffers = require('../../test-buffers')
-var PARSE = function (buffer) {
- return new Parser(buffer).parse()
-}
-
-var authOkBuffer = buffers.authenticationOk()
-var paramStatusBuffer = buffers.parameterStatus('client_encoding', 'UTF8')
-var readyForQueryBuffer = buffers.readyForQuery()
-var backendKeyDataBuffer = buffers.backendKeyData(1, 2)
-var commandCompleteBuffer = buffers.commandComplete('SELECT 3')
-var parseCompleteBuffer = buffers.parseComplete()
-var bindCompleteBuffer = buffers.bindComplete()
-var portalSuspendedBuffer = buffers.portalSuspended()
-
-var addRow = function (bufferList, name, offset) {
- return bufferList
- .addCString(name) // field name
- .addInt32(offset++) // table id
- .addInt16(offset++) // attribute of column number
- .addInt32(offset++) // objectId of field's data type
- .addInt16(offset++) // datatype size
- .addInt32(offset++) // type modifier
- .addInt16(0) // format code, 0 => text
-}
-
-var row1 = {
- name: 'id',
- tableID: 1,
- attributeNumber: 2,
- dataTypeID: 3,
- dataTypeSize: 4,
- typeModifier: 5,
- formatCode: 0,
-}
-var oneRowDescBuff = new buffers.rowDescription([row1])
-row1.name = 'bang'
-
-var twoRowBuf = new buffers.rowDescription([
- row1,
- {
- name: 'whoah',
- tableID: 10,
- attributeNumber: 11,
- dataTypeID: 12,
- dataTypeSize: 13,
- typeModifier: 14,
- formatCode: 0,
- },
-])
-
-var emptyRowFieldBuf = new BufferList().addInt16(0).join(true, 'D')
-
-var emptyRowFieldBuf = buffers.dataRow()
-
-var oneFieldBuf = new BufferList()
- .addInt16(1) // number of fields
- .addInt32(5) // length of bytes of fields
- .addCString('test')
- .join(true, 'D')
-
-var oneFieldBuf = buffers.dataRow(['test'])
-
-var expectedAuthenticationOkayMessage = {
- name: 'authenticationOk',
- length: 8,
-}
-
-var expectedParameterStatusMessage = {
- name: 'parameterStatus',
- parameterName: 'client_encoding',
- parameterValue: 'UTF8',
- length: 25,
-}
-
-var expectedBackendKeyDataMessage = {
- name: 'backendKeyData',
- processID: 1,
- secretKey: 2,
-}
-
-var expectedReadyForQueryMessage = {
- name: 'readyForQuery',
- length: 5,
- status: 'I',
-}
-
-var expectedCommandCompleteMessage = {
- length: 13,
- text: 'SELECT 3',
-}
-var emptyRowDescriptionBuffer = new BufferList()
- .addInt16(0) // number of fields
- .join(true, 'T')
-
-var expectedEmptyRowDescriptionMessage = {
- name: 'rowDescription',
- length: 6,
- fieldCount: 0,
-}
-var expectedOneRowMessage = {
- name: 'rowDescription',
- length: 27,
- fieldCount: 1,
-}
-
-var expectedTwoRowMessage = {
- name: 'rowDescription',
- length: 53,
- fieldCount: 2,
-}
-
-var testForMessage = function (buffer, expectedMessage) {
- var lastMessage = {}
- test('recieves and parses ' + expectedMessage.name, function () {
- var stream = new MemoryStream()
- var client = new Connection({
- stream: stream,
- })
- client.connect()
-
- client.on('message', function (msg) {
- lastMessage = msg
- })
-
- client.on(expectedMessage.name, function () {
- client.removeAllListeners(expectedMessage.name)
- })
-
- stream.emit('data', buffer)
- assert.same(lastMessage, expectedMessage)
- })
- return lastMessage
-}
-
-var plainPasswordBuffer = buffers.authenticationCleartextPassword()
-var md5PasswordBuffer = buffers.authenticationMD5Password()
-var SASLBuffer = buffers.authenticationSASL()
-var SASLContinueBuffer = buffers.authenticationSASLContinue()
-var SASLFinalBuffer = buffers.authenticationSASLFinal()
-
-var expectedPlainPasswordMessage = {
- name: 'authenticationCleartextPassword',
-}
-
-var expectedMD5PasswordMessage = {
- name: 'authenticationMD5Password',
-}
-
-var expectedSASLMessage = {
- name: 'authenticationSASL',
-}
-
-var expectedSASLContinueMessage = {
- name: 'authenticationSASLContinue',
- data: 'data',
-}
-
-var expectedSASLFinalMessage = {
- name: 'authenticationSASLFinal',
- data: 'data',
-}
-
-var notificationResponseBuffer = buffers.notification(4, 'hi', 'boom')
-var expectedNotificationResponseMessage = {
- name: 'notification',
- processId: 4,
- channel: 'hi',
- payload: 'boom',
-}
-
-test('Connection', function () {
- testForMessage(authOkBuffer, expectedAuthenticationOkayMessage)
- testForMessage(plainPasswordBuffer, expectedPlainPasswordMessage)
- var msgMD5 = testForMessage(md5PasswordBuffer, expectedMD5PasswordMessage)
- test('md5 has right salt', function () {
- assert.equalBuffers(msgMD5.salt, Buffer.from([1, 2, 3, 4]))
- })
-
- var msgSASL = testForMessage(SASLBuffer, expectedSASLMessage)
- test('SASL has the right mechanisms', function () {
- assert.deepStrictEqual(msgSASL.mechanisms, ['SCRAM-SHA-256'])
- })
- testForMessage(SASLContinueBuffer, expectedSASLContinueMessage)
- testForMessage(SASLFinalBuffer, expectedSASLFinalMessage)
-
- testForMessage(paramStatusBuffer, expectedParameterStatusMessage)
- testForMessage(backendKeyDataBuffer, expectedBackendKeyDataMessage)
- testForMessage(readyForQueryBuffer, expectedReadyForQueryMessage)
- testForMessage(commandCompleteBuffer, expectedCommandCompleteMessage)
- testForMessage(notificationResponseBuffer, expectedNotificationResponseMessage)
- test('empty row message', function () {
- var message = testForMessage(emptyRowDescriptionBuffer, expectedEmptyRowDescriptionMessage)
- test('has no fields', function () {
- assert.equal(message.fields.length, 0)
- })
- })
-
- test('no data message', function () {
- testForMessage(Buffer.from([0x6e, 0, 0, 0, 4]), {
- name: 'noData',
- })
- })
-
- test('one row message', function () {
- var message = testForMessage(oneRowDescBuff, expectedOneRowMessage)
- test('has one field', function () {
- assert.equal(message.fields.length, 1)
- })
- test('has correct field info', function () {
- assert.same(message.fields[0], {
- name: 'id',
- tableID: 1,
- columnID: 2,
- dataTypeID: 3,
- dataTypeSize: 4,
- dataTypeModifier: 5,
- format: 'text',
- })
- })
- })
-
- test('two row message', function () {
- var message = testForMessage(twoRowBuf, expectedTwoRowMessage)
- test('has two fields', function () {
- assert.equal(message.fields.length, 2)
- })
- test('has correct first field', function () {
- assert.same(message.fields[0], {
- name: 'bang',
- tableID: 1,
- columnID: 2,
- dataTypeID: 3,
- dataTypeSize: 4,
- dataTypeModifier: 5,
- format: 'text',
- })
- })
- test('has correct second field', function () {
- assert.same(message.fields[1], {
- name: 'whoah',
- tableID: 10,
- columnID: 11,
- dataTypeID: 12,
- dataTypeSize: 13,
- dataTypeModifier: 14,
- format: 'text',
- })
- })
- })
-
- test('parsing rows', function () {
- test('parsing empty row', function () {
- var message = testForMessage(emptyRowFieldBuf, {
- name: 'dataRow',
- fieldCount: 0,
- })
- test('has 0 fields', function () {
- assert.equal(message.fields.length, 0)
- })
- })
-
- test('parsing data row with fields', function () {
- var message = testForMessage(oneFieldBuf, {
- name: 'dataRow',
- fieldCount: 1,
- })
- test('has 1 field', function () {
- assert.equal(message.fields.length, 1)
- })
-
- test('field is correct', function () {
- assert.equal(message.fields[0], 'test')
- })
- })
- })
-
- test('notice message', function () {
- // this uses the same logic as error message
- var buff = buffers.notice([{ type: 'C', value: 'code' }])
- testForMessage(buff, {
- name: 'notice',
- code: 'code',
- })
- })
-
- test('error messages', function () {
- test('with no fields', function () {
- var msg = testForMessage(buffers.error(), {
- name: 'error',
- })
- })
-
- test('with all the fields', function () {
- var buffer = buffers.error([
- {
- type: 'S',
- value: 'ERROR',
- },
- {
- type: 'C',
- value: 'code',
- },
- {
- type: 'M',
- value: 'message',
- },
- {
- type: 'D',
- value: 'details',
- },
- {
- type: 'H',
- value: 'hint',
- },
- {
- type: 'P',
- value: '100',
- },
- {
- type: 'p',
- value: '101',
- },
- {
- type: 'q',
- value: 'query',
- },
- {
- type: 'W',
- value: 'where',
- },
- {
- type: 'F',
- value: 'file',
- },
- {
- type: 'L',
- value: 'line',
- },
- {
- type: 'R',
- value: 'routine',
- },
- {
- type: 'Z', // ignored
- value: 'alsdkf',
- },
- ])
-
- testForMessage(buffer, {
- name: 'error',
- severity: 'ERROR',
- code: 'code',
- message: 'message',
- detail: 'details',
- hint: 'hint',
- position: '100',
- internalPosition: '101',
- internalQuery: 'query',
- where: 'where',
- file: 'file',
- line: 'line',
- routine: 'routine',
- })
- })
- })
-
- test('parses parse complete command', function () {
- testForMessage(parseCompleteBuffer, {
- name: 'parseComplete',
- })
- })
-
- test('parses bind complete command', function () {
- testForMessage(bindCompleteBuffer, {
- name: 'bindComplete',
- })
- })
-
- test('parses portal suspended message', function () {
- testForMessage(portalSuspendedBuffer, {
- name: 'portalSuspended',
- })
- })
-
- test('parses replication start message', function () {
- testForMessage(Buffer.from([0x57, 0x00, 0x00, 0x00, 0x04]), {
- name: 'replicationStart',
- length: 4,
- })
- })
-})
-
-// since the data message on a stream can randomly divide the incomming
-// tcp packets anywhere, we need to make sure we can parse every single
-// split on a tcp message
-test('split buffer, single message parsing', function () {
- var fullBuffer = buffers.dataRow([null, 'bang', 'zug zug', null, '!'])
- var stream = new MemoryStream()
- var client = new Connection({
- stream: stream,
- })
- client.connect()
- var message = null
- client.on('message', function (msg) {
- message = msg
- })
-
- test('parses when full buffer comes in', function () {
- stream.emit('data', fullBuffer)
- assert.lengthIs(message.fields, 5)
- assert.equal(message.fields[0], null)
- assert.equal(message.fields[1], 'bang')
- assert.equal(message.fields[2], 'zug zug')
- assert.equal(message.fields[3], null)
- assert.equal(message.fields[4], '!')
- })
-
- var testMessageRecievedAfterSpiltAt = function (split) {
- var firstBuffer = Buffer.alloc(fullBuffer.length - split)
- var secondBuffer = Buffer.alloc(fullBuffer.length - firstBuffer.length)
- fullBuffer.copy(firstBuffer, 0, 0)
- fullBuffer.copy(secondBuffer, 0, firstBuffer.length)
- stream.emit('data', firstBuffer)
- stream.emit('data', secondBuffer)
- assert.lengthIs(message.fields, 5)
- assert.equal(message.fields[0], null)
- assert.equal(message.fields[1], 'bang')
- assert.equal(message.fields[2], 'zug zug')
- assert.equal(message.fields[3], null)
- assert.equal(message.fields[4], '!')
- }
-
- test('parses when split in the middle', function () {
- testMessageRecievedAfterSpiltAt(6)
- })
-
- test('parses when split at end', function () {
- testMessageRecievedAfterSpiltAt(2)
- })
-
- test('parses when split at beginning', function () {
- testMessageRecievedAfterSpiltAt(fullBuffer.length - 2)
- testMessageRecievedAfterSpiltAt(fullBuffer.length - 1)
- testMessageRecievedAfterSpiltAt(fullBuffer.length - 5)
- })
-})
-
-test('split buffer, multiple message parsing', function () {
- var dataRowBuffer = buffers.dataRow(['!'])
- var readyForQueryBuffer = buffers.readyForQuery()
- var fullBuffer = Buffer.alloc(dataRowBuffer.length + readyForQueryBuffer.length)
- dataRowBuffer.copy(fullBuffer, 0, 0)
- readyForQueryBuffer.copy(fullBuffer, dataRowBuffer.length, 0)
-
- var messages = []
- var stream = new MemoryStream()
- var client = new Connection({
- stream: stream,
- })
- client.connect()
- client.on('message', function (msg) {
- messages.push(msg)
- })
-
- var verifyMessages = function () {
- assert.lengthIs(messages, 2)
- assert.same(messages[0], {
- name: 'dataRow',
- fieldCount: 1,
- })
- assert.equal(messages[0].fields[0], '!')
- assert.same(messages[1], {
- name: 'readyForQuery',
- })
- messages = []
- }
- // sanity check
- test('recieves both messages when packet is not split', function () {
- stream.emit('data', fullBuffer)
- verifyMessages()
- })
- var splitAndVerifyTwoMessages = function (split) {
- var firstBuffer = Buffer.alloc(fullBuffer.length - split)
- var secondBuffer = Buffer.alloc(fullBuffer.length - firstBuffer.length)
- fullBuffer.copy(firstBuffer, 0, 0)
- fullBuffer.copy(secondBuffer, 0, firstBuffer.length)
- stream.emit('data', firstBuffer)
- stream.emit('data', secondBuffer)
- }
-
- test('recieves both messages when packet is split', function () {
- test('in the middle', function () {
- splitAndVerifyTwoMessages(11)
- })
- test('at the front', function () {
- splitAndVerifyTwoMessages(fullBuffer.length - 1)
- splitAndVerifyTwoMessages(fullBuffer.length - 4)
- splitAndVerifyTwoMessages(fullBuffer.length - 6)
- })
-
- test('at the end', function () {
- splitAndVerifyTwoMessages(8)
- splitAndVerifyTwoMessages(1)
- })
- })
-})
diff --git a/packages/pg/test/unit/connection/startup-tests.js b/packages/pg/test/unit/connection/startup-tests.js
index e2eb6ee99..65cc0c0aa 100644
--- a/packages/pg/test/unit/connection/startup-tests.js
+++ b/packages/pg/test/unit/connection/startup-tests.js
@@ -1,15 +1,31 @@
'use strict'
-require('./test-helper')
-var Connection = require('../../../lib/connection')
+const helper = require('./test-helper')
+const assert = require('assert')
+const Connection = require('../../../lib/connection')
+const suite = new helper.Suite()
+const test = suite.test.bind(suite)
+const { MemoryStream } = helper
test('connection can take existing stream', function () {
- var stream = new MemoryStream()
- var con = new Connection({ stream: stream })
+ const stream = new MemoryStream()
+ const con = new Connection({ stream: stream })
+ assert.equal(con.stream, stream)
+})
+
+test('connection can take stream factory method', function () {
+ const stream = new MemoryStream()
+ const connectionOpts = {}
+ const makeStream = function (opts) {
+ assert.equal(connectionOpts, opts)
+ return stream
+ }
+ connectionOpts.stream = makeStream
+ const con = new Connection(connectionOpts)
assert.equal(con.stream, stream)
})
test('using any stream', function () {
- var makeStream = function () {
- var stream = new MemoryStream()
+ const makeStream = function () {
+ const stream = new MemoryStream()
stream.connect = function (port, host) {
this.connectCalled = true
this.port = port
@@ -18,9 +34,9 @@ test('using any stream', function () {
return stream
}
- var stream = makeStream()
+ const stream = makeStream()
- var con = new Connection({ stream: stream })
+ const con = new Connection({ stream: stream })
con.connect(1234, 'bang')
@@ -37,7 +53,7 @@ test('using any stream', function () {
})
test('after stream connects client emits connected event', function () {
- var hit = false
+ let hit = false
con.once('connect', function () {
hit = true
@@ -48,11 +64,11 @@ test('using any stream', function () {
})
test('after stream emits connected event init TCP-keepalive', function () {
- var stream = makeStream()
- var con = new Connection({ stream: stream, keepAlive: true })
+ const stream = makeStream()
+ const con = new Connection({ stream: stream, keepAlive: true })
con.connect(123, 'test')
- var res = false
+ let res = false
stream.setKeepAlive = function (bit) {
res = bit
diff --git a/packages/pg/test/unit/result-tests.js b/packages/pg/test/unit/result-tests.js
new file mode 100644
index 000000000..5135723ed
--- /dev/null
+++ b/packages/pg/test/unit/result-tests.js
@@ -0,0 +1,111 @@
+'use strict'
+const helper = require('./test-helper')
+const assert = require('assert')
+const suite = new helper.Suite()
+const test = suite.test.bind(suite)
+
+const Result = require('../../lib/result')
+
+test('__proto__ column name does not pollute prototype', function () {
+ const result = new Result()
+ result.addFields([
+ { name: '__proto__', dataTypeID: 25, format: 'text' },
+ { name: 'id', dataTypeID: 23, format: 'text' },
+ ])
+ const row = result.parseRow(['malicious', '1'])
+
+ // __proto__ should be a regular property, not affect prototype chain
+ assert.strictEqual(row['__proto__'], 'malicious')
+ assert.strictEqual(row.id, 1)
+
+ // global Object.prototype should not be affected
+ assert.strictEqual({}.malicious, undefined)
+ assert.strictEqual(Object.prototype.malicious, undefined)
+})
+
+test('__proto__ column with object value does not inject prototype', function () {
+ // custom type parser that returns objects (like JSON)
+ const customTypes = {
+ getTypeParser: () => (val) => JSON.parse(val),
+ }
+ const result = new Result('object', customTypes)
+ result.addFields([
+ { name: '__proto__', dataTypeID: 114, format: 'text' },
+ { name: 'id', dataTypeID: 23, format: 'text' },
+ ])
+
+ const maliciousPayload = JSON.stringify({ isAdmin: true, role: 'admin' })
+ const row = result.parseRow([maliciousPayload, '1'])
+
+ // __proto__ should be stored as a regular property
+ assert.deepStrictEqual(row['__proto__'], { isAdmin: true, role: 'admin' })
+
+ // the row should NOT inherit from the malicious payload
+ assert.strictEqual('isAdmin' in row, false)
+ assert.strictEqual('role' in row, false)
+})
+
+test('constructor column name is safely stored as property', function () {
+ const result = new Result()
+ result.addFields([
+ { name: 'constructor', dataTypeID: 25, format: 'text' },
+ { name: 'id', dataTypeID: 23, format: 'text' },
+ ])
+ const row = result.parseRow(['malicious', '1'])
+
+ assert.strictEqual(row.constructor, 'malicious')
+ assert.strictEqual(row.id, 1)
+})
+
+test('hasOwnProperty column name is safely stored as property', function () {
+ const result = new Result()
+ result.addFields([
+ { name: 'hasOwnProperty', dataTypeID: 25, format: 'text' },
+ { name: 'data', dataTypeID: 25, format: 'text' },
+ ])
+ const row = result.parseRow(['not_a_function', 'value'])
+
+ assert.strictEqual(row.hasOwnProperty, 'not_a_function')
+ assert.strictEqual(row.data, 'value')
+
+ // can still check properties using Object.prototype.hasOwnProperty.call
+ assert.strictEqual(Object.prototype.hasOwnProperty.call(row, 'data'), true)
+})
+
+test('toString column name is safely stored as property', function () {
+ const result = new Result()
+ result.addFields([{ name: 'toString', dataTypeID: 25, format: 'text' }])
+ const row = result.parseRow(['not_a_function'])
+
+ assert.strictEqual(row.toString, 'not_a_function')
+})
+
+test('prototype column name is safely stored as property', function () {
+ const result = new Result()
+ result.addFields([
+ { name: 'prototype', dataTypeID: 25, format: 'text' },
+ { name: 'id', dataTypeID: 23, format: 'text' },
+ ])
+ const row = result.parseRow(['value', '1'])
+
+ assert.strictEqual(row.prototype, 'value')
+ assert.strictEqual(row.id, 1)
+})
+
+test('multiple dangerous column names handled safely', function () {
+ const result = new Result()
+ result.addFields([
+ { name: '__proto__', dataTypeID: 25, format: 'text' },
+ { name: 'constructor', dataTypeID: 25, format: 'text' },
+ { name: 'prototype', dataTypeID: 25, format: 'text' },
+ { name: '__defineGetter__', dataTypeID: 25, format: 'text' },
+ { name: 'id', dataTypeID: 23, format: 'text' },
+ ])
+ const row = result.parseRow(['a', 'b', 'c', 'd', '1'])
+
+ assert.strictEqual(row['__proto__'], 'a')
+ assert.strictEqual(row.constructor, 'b')
+ assert.strictEqual(row.prototype, 'c')
+ assert.strictEqual(row['__defineGetter__'], 'd')
+ assert.strictEqual(row.id, 1)
+})
diff --git a/packages/pg/test/unit/test-helper.js b/packages/pg/test/unit/test-helper.js
index 407dbf247..618866920 100644
--- a/packages/pg/test/unit/test-helper.js
+++ b/packages/pg/test/unit/test-helper.js
@@ -1,17 +1,18 @@
'use strict'
-var EventEmitter = require('events').EventEmitter
+const EventEmitter = require('events').EventEmitter
-var helper = require('../test-helper')
-var Connection = require('../../lib/connection')
+const helper = require('../test-helper')
+const Connection = require('../../lib/connection')
+const { Client } = helper
-global.MemoryStream = function () {
+const MemoryStream = function () {
EventEmitter.call(this)
this.packets = []
}
helper.sys.inherits(MemoryStream, EventEmitter)
-var p = MemoryStream.prototype
+const p = MemoryStream.prototype
p.connect = function () {
// NOOP
@@ -35,8 +36,8 @@ p.closed = false
p.writable = true
const createClient = function () {
- var stream = new MemoryStream()
- var client = new Client({
+ const stream = new MemoryStream()
+ const client = new Client({
connection: new Connection({ stream: stream }),
})
client.connect()
@@ -45,4 +46,5 @@ const createClient = function () {
module.exports = Object.assign({}, helper, {
createClient: createClient,
+ MemoryStream: MemoryStream,
})
diff --git a/packages/pg/test/unit/utils-tests.js b/packages/pg/test/unit/utils-tests.js
index 3d087ad0d..5f75f6c2d 100644
--- a/packages/pg/test/unit/utils-tests.js
+++ b/packages/pg/test/unit/utils-tests.js
@@ -1,35 +1,21 @@
'use strict'
-var helper = require('./test-helper')
-var utils = require('./../../lib/utils')
-var defaults = require('./../../lib').defaults
+const helper = require('./test-helper')
+const utils = require('./../../lib/utils')
+const defaults = require('./../../lib').defaults
+const assert = require('assert')
+const suite = new helper.Suite()
+const test = suite.test.bind(suite)
test('ensure types is exported on root object', function () {
- var pg = require('../../lib')
+ const pg = require('../../lib')
assert(pg.types)
assert(pg.types.getTypeParser)
assert(pg.types.setTypeParser)
})
-// this tests the monkey patching
-// to ensure comptability with older
-// versions of node
-test('EventEmitter.once', function (t) {
- // an event emitter
- var stream = new MemoryStream()
-
- var callCount = 0
- stream.once('single', function () {
- callCount++
- })
-
- stream.emit('single')
- stream.emit('single')
- assert.equal(callCount, 1)
-})
-
test('normalizing query configs', function () {
- var config
- var callback = function () {}
+ let config
+ const callback = function () {}
config = utils.normalizeQueryConfig({ text: 'TEXT' })
assert.same(config, { text: 'TEXT' })
@@ -48,14 +34,14 @@ test('normalizing query configs', function () {
})
test('prepareValues: buffer prepared properly', function () {
- var buf = Buffer.from('quack')
- var out = utils.prepareValue(buf)
+ const buf = Buffer.from('quack')
+ const out = utils.prepareValue(buf)
assert.strictEqual(buf, out)
})
test('prepareValues: Uint8Array prepared properly', function () {
- var buf = new Uint8Array([1, 2, 3]).subarray(1, 2)
- var out = utils.prepareValue(buf)
+ const buf = new Uint8Array([1, 2, 3]).subarray(1, 2)
+ const out = utils.prepareValue(buf)
assert.ok(Buffer.isBuffer(out))
assert.equal(out.length, 1)
assert.deepEqual(out[0], 2)
@@ -64,8 +50,8 @@ test('prepareValues: Uint8Array prepared properly', function () {
test('prepareValues: date prepared properly', function () {
helper.setTimezoneOffset(-330)
- var date = new Date(2014, 1, 1, 11, 11, 1, 7)
- var out = utils.prepareValue(date)
+ const date = new Date(2014, 1, 1, 11, 11, 1, 7)
+ const out = utils.prepareValue(date)
assert.strictEqual(out, '2014-02-01T11:11:01.007+05:30')
helper.resetTimezoneOffset()
@@ -75,8 +61,8 @@ test('prepareValues: date prepared properly as UTC', function () {
defaults.parseInputDatesAsUTC = true
// make a date in the local timezone that represents a specific UTC point in time
- var date = new Date(Date.UTC(2014, 1, 1, 11, 11, 1, 7))
- var out = utils.prepareValue(date)
+ const date = new Date(Date.UTC(2014, 1, 1, 11, 11, 1, 7))
+ const out = utils.prepareValue(date)
assert.strictEqual(out, '2014-02-01T11:11:01.007+00:00')
defaults.parseInputDatesAsUTC = false
@@ -85,8 +71,8 @@ test('prepareValues: date prepared properly as UTC', function () {
test('prepareValues: BC date prepared properly', function () {
helper.setTimezoneOffset(-330)
- var date = new Date(-3245, 1, 1, 11, 11, 1, 7)
- var out = utils.prepareValue(date)
+ const date = new Date(-3245, 1, 1, 11, 11, 1, 7)
+ const out = utils.prepareValue(date)
assert.strictEqual(out, '3246-02-01T11:11:01.007+05:30 BC')
helper.resetTimezoneOffset()
@@ -96,98 +82,104 @@ test('prepareValues: 1 BC date prepared properly', function () {
helper.setTimezoneOffset(-330)
// can't use the multi-argument constructor as year 0 would be interpreted as 1900
- var date = new Date('0000-02-01T11:11:01.007')
- var out = utils.prepareValue(date)
+ const date = new Date('0000-02-01T11:11:01.007')
+ const out = utils.prepareValue(date)
assert.strictEqual(out, '0001-02-01T11:11:01.007+05:30 BC')
helper.resetTimezoneOffset()
})
test('prepareValues: undefined prepared properly', function () {
- var out = utils.prepareValue(void 0)
+ const out = utils.prepareValue(void 0)
assert.strictEqual(out, null)
})
test('prepareValue: null prepared properly', function () {
- var out = utils.prepareValue(null)
+ const out = utils.prepareValue(null)
assert.strictEqual(out, null)
})
test('prepareValue: true prepared properly', function () {
- var out = utils.prepareValue(true)
+ const out = utils.prepareValue(true)
assert.strictEqual(out, 'true')
})
test('prepareValue: false prepared properly', function () {
- var out = utils.prepareValue(false)
+ const out = utils.prepareValue(false)
assert.strictEqual(out, 'false')
})
test('prepareValue: number prepared properly', function () {
- var out = utils.prepareValue(3.042)
+ const out = utils.prepareValue(3.042)
assert.strictEqual(out, '3.042')
})
test('prepareValue: string prepared properly', function () {
- var out = utils.prepareValue('big bad wolf')
+ const out = utils.prepareValue('big bad wolf')
assert.strictEqual(out, 'big bad wolf')
})
test('prepareValue: simple array prepared properly', function () {
- var out = utils.prepareValue([1, null, 3, undefined, [5, 6, 'squ,awk']])
+ const out = utils.prepareValue([1, null, 3, undefined, [5, 6, 'squ,awk']])
assert.strictEqual(out, '{"1",NULL,"3",NULL,{"5","6","squ,awk"}}')
})
test('prepareValue: complex array prepared properly', function () {
- var out = utils.prepareValue([{ x: 42 }, { y: 84 }])
+ const out = utils.prepareValue([{ x: 42 }, { y: 84 }])
assert.strictEqual(out, '{"{\\"x\\":42}","{\\"y\\":84}"}')
})
test('prepareValue: date array prepared properly', function () {
helper.setTimezoneOffset(-330)
- var date = new Date(2014, 1, 1, 11, 11, 1, 7)
- var out = utils.prepareValue([date])
+ const date = new Date(2014, 1, 1, 11, 11, 1, 7)
+ const out = utils.prepareValue([date])
assert.strictEqual(out, '{"2014-02-01T11:11:01.007+05:30"}')
helper.resetTimezoneOffset()
})
test('prepareValue: arbitrary objects prepared properly', function () {
- var out = utils.prepareValue({ x: 42 })
+ const out = utils.prepareValue({ x: 42 })
assert.strictEqual(out, '{"x":42}')
})
test('prepareValue: objects with simple toPostgres prepared properly', function () {
- var customType = {
+ const customType = {
toPostgres: function () {
return 'zomgcustom!'
},
}
- var out = utils.prepareValue(customType)
+ const out = utils.prepareValue(customType)
assert.strictEqual(out, 'zomgcustom!')
})
test('prepareValue: buffer array prepared properly', function () {
- var buffer1 = Buffer.from('dead', 'hex')
- var buffer2 = Buffer.from('beef', 'hex')
- var out = utils.prepareValue([buffer1, buffer2])
+ const buffer1 = Buffer.from('dead', 'hex')
+ const buffer2 = Buffer.from('beef', 'hex')
+ const out = utils.prepareValue([buffer1, buffer2])
+ assert.strictEqual(out, '{\\\\xdead,\\\\xbeef}')
+})
+
+test('prepareValue: Uint8Array array prepared properly', function () {
+ const buffer1 = Uint8Array.from(Buffer.from('dead', 'hex'))
+ const buffer2 = Uint8Array.from(Buffer.from('beef', 'hex'))
+ const out = utils.prepareValue([buffer1, buffer2])
assert.strictEqual(out, '{\\\\xdead,\\\\xbeef}')
})
test('prepareValue: objects with complex toPostgres prepared properly', function () {
- var buf = Buffer.from('zomgcustom!')
- var customType = {
+ const customType = {
toPostgres: function () {
return [1, 2]
},
}
- var out = utils.prepareValue(customType)
+ const out = utils.prepareValue(customType)
assert.strictEqual(out, '{"1","2"}')
})
test('prepareValue: objects with toPostgres receive prepareValue', function () {
- var customRange = {
+ const customRange = {
lower: {
toPostgres: function () {
return 5
@@ -202,13 +194,12 @@ test('prepareValue: objects with toPostgres receive prepareValue', function () {
return '[' + prepare(this.lower) + ',' + prepare(this.upper) + ']'
},
}
- var out = utils.prepareValue(customRange)
+ const out = utils.prepareValue(customRange)
assert.strictEqual(out, '[5,10]')
})
test('prepareValue: objects with circular toPostgres rejected', function () {
- var buf = Buffer.from('zomgcustom!')
- var customType = {
+ const customType = {
toPostgres: function () {
return {
toPostgres: function () {
@@ -230,12 +221,96 @@ test('prepareValue: objects with circular toPostgres rejected', function () {
})
test('prepareValue: can safely be used to map an array of values including those with toPostgres functions', function () {
- var customType = {
+ const customType = {
toPostgres: function () {
return 'zomgcustom!'
},
}
- var values = [1, 'test', customType]
- var out = values.map(utils.prepareValue)
+ const values = [1, 'test', customType]
+ const out = values.map(utils.prepareValue)
assert.deepEqual(out, [1, 'test', 'zomgcustom!'])
})
+
+const testEscapeLiteral = function (testName, input, expected) {
+ test(`escapeLiteral: ${testName}`, function () {
+ const actual = utils.escapeLiteral(input)
+ assert.equal(expected, actual)
+ })
+}
+
+testEscapeLiteral('no special characters', 'hello world', "'hello world'")
+
+testEscapeLiteral('contains double quotes only', 'hello " world', "'hello \" world'")
+
+testEscapeLiteral('contains single quotes only', "hello ' world", "'hello '' world'")
+
+testEscapeLiteral('contains backslashes only', 'hello \\ world', " E'hello \\\\ world'")
+
+testEscapeLiteral('contains single quotes and double quotes', 'hello \' " world', "'hello '' \" world'")
+
+testEscapeLiteral('date', new Date(), "''")
+
+testEscapeLiteral('null', null, "''")
+
+testEscapeLiteral('undefined', undefined, "''")
+
+testEscapeLiteral('boolean', false, "''")
+
+testEscapeLiteral('number', 1, "''")
+
+testEscapeLiteral('number', 1, "''")
+
+testEscapeLiteral('boolean', true, "''")
+
+testEscapeLiteral('array', [1, 2, 3], "''")
+
+testEscapeLiteral('object', { x: 42 }, "''")
+
+testEscapeLiteral('contains double quotes and backslashes', 'hello \\ " world', " E'hello \\\\ \" world'")
+
+testEscapeLiteral('contains single quotes and backslashes', "hello \\ ' world", " E'hello \\\\ '' world'")
+
+testEscapeLiteral(
+ 'contains single quotes, double quotes, and backslashes',
+ 'hello \\ \' " world',
+ " E'hello \\\\ '' \" world'"
+)
+
+const testEscapeIdentifier = function (testName, input, expected) {
+ test(testName, function () {
+ const actual = utils.escapeIdentifier(input)
+ assert.equal(expected, actual)
+ })
+}
+
+testEscapeIdentifier('escapeIdentifier: no special characters', 'hello world', '"hello world"')
+
+testEscapeIdentifier('escapeIdentifier: contains double quotes only', 'hello " world', '"hello "" world"')
+
+testEscapeIdentifier('escapeIdentifier: contains single quotes only', "hello ' world", '"hello \' world"')
+
+testEscapeIdentifier('escapeIdentifier: contains backslashes only', 'hello \\ world', '"hello \\ world"')
+
+testEscapeIdentifier(
+ 'escapeIdentifier: contains single quotes and double quotes',
+ 'hello \' " world',
+ '"hello \' "" world"'
+)
+
+testEscapeIdentifier(
+ 'escapeIdentifier: contains double quotes and backslashes',
+ 'hello \\ " world',
+ '"hello \\ "" world"'
+)
+
+testEscapeIdentifier(
+ 'escapeIdentifier: contains single quotes and backslashes',
+ "hello \\ ' world",
+ '"hello \\ \' world"'
+)
+
+testEscapeIdentifier(
+ 'escapeIdentifier: contains single quotes, double quotes, and backslashes',
+ 'hello \\ \' " world',
+ '"hello \\ \' "" world"'
+)
diff --git a/packages/pg/test/vitest.config.mts b/packages/pg/test/vitest.config.mts
new file mode 100644
index 000000000..735cae839
--- /dev/null
+++ b/packages/pg/test/vitest.config.mts
@@ -0,0 +1,12 @@
+import { defineWorkersConfig } from '@cloudflare/vitest-pool-workers/config'
+
+export default defineWorkersConfig({
+ test: {
+ watch: false,
+ poolOptions: {
+ workers: {
+ wrangler: { configPath: './wrangler.jsonc' },
+ },
+ },
+ },
+})
diff --git a/packages/pg/test/wrangler.jsonc b/packages/pg/test/wrangler.jsonc
new file mode 100644
index 000000000..c821f3002
--- /dev/null
+++ b/packages/pg/test/wrangler.jsonc
@@ -0,0 +1,48 @@
+/**
+ * For more details on how to configure Wrangler, refer to:
+ * https://developers.cloudflare.com/workers/wrangler/configuration/
+ */
+ {
+ "$schema": "node_modules/wrangler/config-schema.json",
+ "name": "my-first-worker",
+ "main": "src/index.ts",
+ "compatibility_date": "2025-04-07",
+ "compatibility_flags": ["nodejs_compat"],
+ "observability": {
+ "enabled": true
+ }
+ /**
+ * t
+ * Docs: https://developers.cloudflare.com/workers/configuration/smart-placement/#smart-placement
+ */
+ // "placement": { "mode": "smart" },
+
+ /**
+ * Bindings
+ * Bindings allow your Worker to interact with resources on the Cloudflare Developer Platform, including
+ * databases, object storage, AI inference, real-time communication and more.
+ * https://developers.cloudflare.com/workers/runtime-apis/bindings/
+ */
+
+ /**
+ * Environment Variables
+ * https://developers.cloudflare.com/workers/wrangler/configuration/#environment-variables
+ */
+ // "vars": { "MY_VARIABLE": "production_value" },
+ /**
+ * Note: Use secrets to store sensitive data.
+ * https://developers.cloudflare.com/workers/configuration/secrets/
+ */
+
+ /**
+ * Static Assets
+ * https://developers.cloudflare.com/workers/static-assets/binding/
+ */
+ // "assets": { "directory": "./public/", "binding": "ASSETS" },
+
+ /**
+ * Service Bindings (communicate between multiple Workers)
+ * https://developers.cloudflare.com/workers/wrangler/configuration/#service-bindings
+ */
+ // "services": [{ "binding": "MY_SERVICE", "service": "my-service" }]
+}
diff --git a/tea.yaml b/tea.yaml
new file mode 100644
index 000000000..aae1dfbf5
--- /dev/null
+++ b/tea.yaml
@@ -0,0 +1,6 @@
+# https://tea.xyz/what-is-this-file
+---
+version: 1.0.0
+codeOwners:
+ - '0x7e65e980B1409f21E2eb2FF341B2235A8B615122'
+quorum: 1
diff --git a/tsconfig.json b/tsconfig.json
index 53fb70c6e..2730aa9a8 100644
--- a/tsconfig.json
+++ b/tsconfig.json
@@ -6,6 +6,7 @@
},
"include": [],
"references": [
+ {"path": "./packages/pg-cloudflare"},
{"path": "./packages/pg-query-stream"},
{"path": "./packages/pg-protocol"}
]
diff --git a/yarn.lock b/yarn.lock
index 3a4d75a98..92028ecc8 100644
--- a/yarn.lock
+++ b/yarn.lock
@@ -2,46 +2,736 @@
# yarn lockfile v1
+"@aashutoshrathi/word-wrap@^1.2.3":
+ version "1.2.6"
+ resolved "https://registry.yarnpkg.com/@aashutoshrathi/word-wrap/-/word-wrap-1.2.6.tgz#bd9154aec9983f77b3a034ecaa015c2e4201f6cf"
+ integrity sha512-1Yjs2SvM8TflER/OD3cOjhWWOZb58A2t7wpE2S9XfBYTiIl+XFhQG2bjy4Pu1I+EAlCNUzRDYDdFwFYUKvXcIA==
+
+"@ampproject/remapping@^2.2.0":
+ version "2.3.0"
+ resolved "https://registry.yarnpkg.com/@ampproject/remapping/-/remapping-2.3.0.tgz#ed441b6fa600072520ce18b43d2c8cc8caecc7f4"
+ integrity sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==
+ dependencies:
+ "@jridgewell/gen-mapping" "^0.3.5"
+ "@jridgewell/trace-mapping" "^0.3.24"
+
"@babel/code-frame@^7.0.0":
version "7.10.4"
- resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.10.4.tgz#168da1a36e90da68ae8d49c0f1b48c7c6249213a"
+ resolved "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.10.4.tgz"
integrity sha512-vG6SvB6oYEhvgisZNFRmRCUkLz11c7rp+tbNTynGqc6mS1d5ATd/sGyV6W0KZZnXRKMTzZDRgQT3Ou9jhpAfUg==
dependencies:
"@babel/highlight" "^7.10.4"
+"@babel/code-frame@^7.27.1":
+ version "7.27.1"
+ resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.27.1.tgz#200f715e66d52a23b221a9435534a91cc13ad5be"
+ integrity sha512-cjQ7ZlQ0Mv3b47hABuTevyTuYN4i+loJKGeV9flcCgIK37cCXRh+L1bd3iBHlynerhQ7BhCkn2BPbQUL+rGqFg==
+ dependencies:
+ "@babel/helper-validator-identifier" "^7.27.1"
+ js-tokens "^4.0.0"
+ picocolors "^1.1.1"
+
+"@babel/compat-data@^7.27.1":
+ version "7.27.1"
+ resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.27.1.tgz#db7cf122745e0a332c44e847ddc4f5e5221a43f6"
+ integrity sha512-Q+E+rd/yBzNQhXkG+zQnF58e4zoZfBedaxwzPmicKsiK3nt8iJYrSrDbjwFFDGC4f+rPafqRaPH6TsDoSvMf7A==
+
+"@babel/core@^7.7.5":
+ version "7.27.1"
+ resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.27.1.tgz#89de51e86bd12246003e3524704c49541b16c3e6"
+ integrity sha512-IaaGWsQqfsQWVLqMn9OB92MNN7zukfVA4s7KKAI0KfrrDsZ0yhi5uV4baBuLuN7n3vsZpwP8asPPcVwApxvjBQ==
+ dependencies:
+ "@ampproject/remapping" "^2.2.0"
+ "@babel/code-frame" "^7.27.1"
+ "@babel/generator" "^7.27.1"
+ "@babel/helper-compilation-targets" "^7.27.1"
+ "@babel/helper-module-transforms" "^7.27.1"
+ "@babel/helpers" "^7.27.1"
+ "@babel/parser" "^7.27.1"
+ "@babel/template" "^7.27.1"
+ "@babel/traverse" "^7.27.1"
+ "@babel/types" "^7.27.1"
+ convert-source-map "^2.0.0"
+ debug "^4.1.0"
+ gensync "^1.0.0-beta.2"
+ json5 "^2.2.3"
+ semver "^6.3.1"
+
+"@babel/generator@^7.27.1":
+ version "7.27.1"
+ resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.27.1.tgz#862d4fad858f7208edd487c28b58144036b76230"
+ integrity sha512-UnJfnIpc/+JO0/+KRVQNGU+y5taA5vCbwN8+azkX6beii/ZF+enZJSOKo11ZSzGJjlNfJHfQtmQT8H+9TXPG2w==
+ dependencies:
+ "@babel/parser" "^7.27.1"
+ "@babel/types" "^7.27.1"
+ "@jridgewell/gen-mapping" "^0.3.5"
+ "@jridgewell/trace-mapping" "^0.3.25"
+ jsesc "^3.0.2"
+
+"@babel/helper-compilation-targets@^7.27.1":
+ version "7.27.1"
+ resolved "https://registry.yarnpkg.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.27.1.tgz#eac1096c7374f161e4f33fc8ae38f4ddf122087a"
+ integrity sha512-2YaDd/Rd9E598B5+WIc8wJPmWETiiJXFYVE60oX8FDohv7rAUU3CQj+A1MgeEmcsk2+dQuEjIe/GDvig0SqL4g==
+ dependencies:
+ "@babel/compat-data" "^7.27.1"
+ "@babel/helper-validator-option" "^7.27.1"
+ browserslist "^4.24.0"
+ lru-cache "^5.1.1"
+ semver "^6.3.1"
+
+"@babel/helper-module-imports@^7.27.1":
+ version "7.27.1"
+ resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.27.1.tgz#7ef769a323e2655e126673bb6d2d6913bbead204"
+ integrity sha512-0gSFWUPNXNopqtIPQvlD5WgXYI5GY2kP2cCvoT8kczjbfcfuIljTbcWrulD1CIPIX2gt1wghbDy08yE1p+/r3w==
+ dependencies:
+ "@babel/traverse" "^7.27.1"
+ "@babel/types" "^7.27.1"
+
+"@babel/helper-module-transforms@^7.27.1":
+ version "7.27.1"
+ resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.27.1.tgz#e1663b8b71d2de948da5c4fb2a20ca4f3ec27a6f"
+ integrity sha512-9yHn519/8KvTU5BjTVEEeIM3w9/2yXNKoD82JifINImhpKkARMJKPP59kLo+BafpdN5zgNeIcS4jsGDmd3l58g==
+ dependencies:
+ "@babel/helper-module-imports" "^7.27.1"
+ "@babel/helper-validator-identifier" "^7.27.1"
+ "@babel/traverse" "^7.27.1"
+
+"@babel/helper-string-parser@^7.27.1":
+ version "7.27.1"
+ resolved "https://registry.yarnpkg.com/@babel/helper-string-parser/-/helper-string-parser-7.27.1.tgz#54da796097ab19ce67ed9f88b47bb2ec49367687"
+ integrity sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA==
+
"@babel/helper-validator-identifier@^7.10.4":
version "7.10.4"
- resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.10.4.tgz#a78c7a7251e01f616512d31b10adcf52ada5e0d2"
+ resolved "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.10.4.tgz"
integrity sha512-3U9y+43hz7ZM+rzG24Qe2mufW5KhvFg/NhnNph+i9mgCtdTCtMJuI1TMkrIUiK7Ix4PYlRF9I5dhqaLYA/ADXw==
+"@babel/helper-validator-identifier@^7.27.1":
+ version "7.27.1"
+ resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.27.1.tgz#a7054dcc145a967dd4dc8fee845a57c1316c9df8"
+ integrity sha512-D2hP9eA+Sqx1kBZgzxZh0y1trbuU+JoDkiEwqhQ36nodYqJwyEIhPSdMNd7lOm/4io72luTPWH20Yda0xOuUow==
+
+"@babel/helper-validator-option@^7.27.1":
+ version "7.27.1"
+ resolved "https://registry.yarnpkg.com/@babel/helper-validator-option/-/helper-validator-option-7.27.1.tgz#fa52f5b1e7db1ab049445b421c4471303897702f"
+ integrity sha512-YvjJow9FxbhFFKDSuFnVCe2WxXk1zWc22fFePVNEaWJEu8IrZVlda6N0uHwzZrUM1il7NC9Mlp4MaJYbYd9JSg==
+
+"@babel/helpers@^7.27.1":
+ version "7.27.1"
+ resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.27.1.tgz#ffc27013038607cdba3288e692c3611c06a18aa4"
+ integrity sha512-FCvFTm0sWV8Fxhpp2McP5/W53GPllQ9QeQ7SiqGWjMf/LVG07lFa5+pgK05IRhVwtvafT22KF+ZSnM9I545CvQ==
+ dependencies:
+ "@babel/template" "^7.27.1"
+ "@babel/types" "^7.27.1"
+
"@babel/highlight@^7.10.4":
version "7.10.4"
- resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.10.4.tgz#7d1bdfd65753538fabe6c38596cdb76d9ac60143"
+ resolved "https://registry.npmjs.org/@babel/highlight/-/highlight-7.10.4.tgz"
integrity sha512-i6rgnR/YgPEQzZZnbTHHuZdlE8qyoBNalD6F+q4vAFlcMEcqmkoG+mPqJYJCo63qPf74+Y1UZsl3l6f7/RIkmA==
dependencies:
"@babel/helper-validator-identifier" "^7.10.4"
chalk "^2.0.0"
js-tokens "^4.0.0"
-"@eslint/eslintrc@^0.1.3":
- version "0.1.3"
- resolved "https://registry.yarnpkg.com/@eslint/eslintrc/-/eslintrc-0.1.3.tgz#7d1a2b2358552cc04834c0979bd4275362e37085"
- integrity sha512-4YVwPkANLeNtRjMekzux1ci8hIaH5eGKktGqR0d3LWsKNn5B2X/1Z6Trxy7jQXl9EBGE6Yj02O+t09FMeRllaA==
+"@babel/parser@^7.27.1":
+ version "7.27.1"
+ resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.27.1.tgz#c55d5bed74449d1223701f1869b9ee345cc94cc9"
+ integrity sha512-I0dZ3ZpCrJ1c04OqlNsQcKiZlsrXf/kkE4FXzID9rIOYICsAbA8mMDzhW/luRNAHdCNt7os/u8wenklZDlUVUQ==
dependencies:
- ajv "^6.12.4"
- debug "^4.1.1"
- espree "^7.3.0"
- globals "^12.1.0"
- ignore "^4.0.6"
+ "@babel/types" "^7.27.1"
+
+"@babel/template@^7.27.1":
+ version "7.27.1"
+ resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.27.1.tgz#b9e4f55c17a92312774dfbdde1b3c01c547bbae2"
+ integrity sha512-Fyo3ghWMqkHHpHQCoBs2VnYjR4iWFFjguTDEqA5WgZDOrFesVjMhMM2FSqTKSoUSDO1VQtavj8NFpdRBEvJTtg==
+ dependencies:
+ "@babel/code-frame" "^7.27.1"
+ "@babel/parser" "^7.27.1"
+ "@babel/types" "^7.27.1"
+
+"@babel/traverse@^7.27.1":
+ version "7.27.1"
+ resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.27.1.tgz#4db772902b133bbddd1c4f7a7ee47761c1b9f291"
+ integrity sha512-ZCYtZciz1IWJB4U61UPu4KEaqyfj+r5T1Q5mqPo+IBpcG9kHv30Z0aD8LXPgC1trYa6rK0orRyAhqUgk4MjmEg==
+ dependencies:
+ "@babel/code-frame" "^7.27.1"
+ "@babel/generator" "^7.27.1"
+ "@babel/parser" "^7.27.1"
+ "@babel/template" "^7.27.1"
+ "@babel/types" "^7.27.1"
+ debug "^4.3.1"
+ globals "^11.1.0"
+
+"@babel/types@^7.27.1":
+ version "7.27.1"
+ resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.27.1.tgz#9defc53c16fc899e46941fc6901a9eea1c9d8560"
+ integrity sha512-+EzkxvLNfiUeKMgy/3luqfsCWFRXLb7U6wNQTk60tovuckwB15B191tJWvpp4HjiQWdJkCxO3Wbvc6jlk3Xb2Q==
+ dependencies:
+ "@babel/helper-string-parser" "^7.27.1"
+ "@babel/helper-validator-identifier" "^7.27.1"
+
+"@cloudflare/kv-asset-handler@0.3.4":
+ version "0.3.4"
+ resolved "https://registry.yarnpkg.com/@cloudflare/kv-asset-handler/-/kv-asset-handler-0.3.4.tgz#5cc152847c8ae4d280ec5d7f4f6ba8c976b585c3"
+ integrity sha512-YLPHc8yASwjNkmcDMQMY35yiWjoKAKnhUbPRszBRS0YgH+IXtsMp61j+yTcnCE3oO2DgP0U3iejLC8FTtKDC8Q==
+ dependencies:
+ mime "^3.0.0"
+
+"@cloudflare/kv-asset-handler@0.4.0":
+ version "0.4.0"
+ resolved "https://registry.yarnpkg.com/@cloudflare/kv-asset-handler/-/kv-asset-handler-0.4.0.tgz#a8588c6a2e89bb3e87fb449295a901c9f6d3e1bf"
+ integrity sha512-+tv3z+SPp+gqTIcImN9o0hqE9xyfQjI1XD9pL6NuKjua9B1y7mNYv0S9cP+QEbA4ppVgGZEmKOvHX5G5Ei1CVA==
+ dependencies:
+ mime "^3.0.0"
+
+"@cloudflare/unenv-preset@2.0.2":
+ version "2.0.2"
+ resolved "https://registry.yarnpkg.com/@cloudflare/unenv-preset/-/unenv-preset-2.0.2.tgz#8be39f5bd5127345bc2541cf3617bffa8d6e6335"
+ integrity sha512-nyzYnlZjjV5xT3LizahG1Iu6mnrCaxglJ04rZLpDwlDVDZ7v46lNsfxhV3A/xtfgQuSHmLnc6SVI+KwBpc3Lwg==
+
+"@cloudflare/unenv-preset@2.3.1":
+ version "2.3.1"
+ resolved "https://registry.yarnpkg.com/@cloudflare/unenv-preset/-/unenv-preset-2.3.1.tgz#63c6af2b92adf904f25a10e3957df0db7f161622"
+ integrity sha512-Xq57Qd+ADpt6hibcVBO0uLG9zzRgyRhfCUgBT9s+g3+3Ivg5zDyVgLFy40ES1VdNcu8rPNSivm9A+kGP5IVaPg==
+
+"@cloudflare/vitest-pool-workers@0.8.23":
+ version "0.8.23"
+ resolved "https://registry.yarnpkg.com/@cloudflare/vitest-pool-workers/-/vitest-pool-workers-0.8.23.tgz#293db4fe50d7455c4de16ebb854813b2299fac35"
+ integrity sha512-ShtHzbO7i29d6yVTdLVVBbo2XHQQVDt0+c5JgC5Hviuclqferg+OyXspMKrW+XIhFeylRhylLSSmOrLHM5i4Ug==
+ dependencies:
+ birpc "0.2.14"
+ cjs-module-lexer "^1.2.3"
+ devalue "^4.3.0"
+ miniflare "4.20250428.0"
+ semver "^7.7.1"
+ wrangler "4.14.0"
+ zod "^3.22.3"
+
+"@cloudflare/workerd-darwin-64@1.20250408.0":
+ version "1.20250408.0"
+ resolved "https://registry.yarnpkg.com/@cloudflare/workerd-darwin-64/-/workerd-darwin-64-1.20250408.0.tgz#0bf43cf52391a736716328b220dbdf34a8fcc095"
+ integrity sha512-bxhIwBWxaNItZLXDNOKY2dCv0FHjDiDkfJFpwv4HvtvU5MKcrivZHVmmfDzLW85rqzfcDOmKbZeMPVfiKxdBZw==
+
+"@cloudflare/workerd-darwin-64@1.20250428.0":
+ version "1.20250428.0"
+ resolved "https://registry.yarnpkg.com/@cloudflare/workerd-darwin-64/-/workerd-darwin-64-1.20250428.0.tgz#2f82e35116876ee487a945294a31828f3d0c92b7"
+ integrity sha512-6nVe9oV4Hdec6ctzMtW80TiDvNTd2oFPi3VsKqSDVaJSJbL+4b6seyJ7G/UEPI+si6JhHBSLV2/9lNXNGLjClA==
+
+"@cloudflare/workerd-darwin-arm64@1.20250408.0":
+ version "1.20250408.0"
+ resolved "https://registry.yarnpkg.com/@cloudflare/workerd-darwin-arm64/-/workerd-darwin-arm64-1.20250408.0.tgz#61dc224e97601850e453484998221e35b73974b8"
+ integrity sha512-5XZ2Oykr8bSo7zBmERtHh18h5BZYC/6H1YFWVxEj3PtalF3+6SHsO4KZsbGvDml9Pu7sHV277jiZE5eny8Hlyw==
+
+"@cloudflare/workerd-darwin-arm64@1.20250428.0":
+ version "1.20250428.0"
+ resolved "https://registry.yarnpkg.com/@cloudflare/workerd-darwin-arm64/-/workerd-darwin-arm64-1.20250428.0.tgz#a7177f9dacf5988e0d56ce6a1704b05752a16686"
+ integrity sha512-/TB7bh7SIJ5f+6r4PHsAz7+9Qal/TK1cJuKFkUno1kqGlZbdrMwH0ATYwlWC/nBFeu2FB3NUolsTntEuy23hnQ==
+
+"@cloudflare/workerd-linux-64@1.20250408.0":
+ version "1.20250408.0"
+ resolved "https://registry.yarnpkg.com/@cloudflare/workerd-linux-64/-/workerd-linux-64-1.20250408.0.tgz#1e1e28b15a085aaf47f356fe9b2f8934fbf7d88e"
+ integrity sha512-WbgItXWln6G5d7GvYLWcuOzAVwafysZaWunH3UEfsm95wPuRofpYnlDD861gdWJX10IHSVgMStGESUcs7FLerQ==
+
+"@cloudflare/workerd-linux-64@1.20250428.0":
+ version "1.20250428.0"
+ resolved "https://registry.yarnpkg.com/@cloudflare/workerd-linux-64/-/workerd-linux-64-1.20250428.0.tgz#95ada0885392675f4c907a799dafa361e90ed912"
+ integrity sha512-9eCbj+R3CKqpiXP6DfAA20DxKge+OTj7Hyw3ZewiEhWH9INIHiJwJQYybu4iq9kJEGjnGvxgguLFjSCWm26hgg==
+
+"@cloudflare/workerd-linux-arm64@1.20250408.0":
+ version "1.20250408.0"
+ resolved "https://registry.yarnpkg.com/@cloudflare/workerd-linux-arm64/-/workerd-linux-arm64-1.20250408.0.tgz#74b87896b1a73a35d202eb90c4a7eb51f779f8cd"
+ integrity sha512-pAhEywPPvr92SLylnQfZEPgXz+9pOG9G9haAPLpEatncZwYiYd9yiR6HYWhKp2erzCoNrOqKg9IlQwU3z1IDiw==
+
+"@cloudflare/workerd-linux-arm64@1.20250428.0":
+ version "1.20250428.0"
+ resolved "https://registry.yarnpkg.com/@cloudflare/workerd-linux-arm64/-/workerd-linux-arm64-1.20250428.0.tgz#562faf22e754c0acebf17476aefe1afe96f523c6"
+ integrity sha512-D9NRBnW46nl1EQsP13qfkYb5lbt4C6nxl38SBKY/NOcZAUoHzNB5K0GaK8LxvpkM7X/97ySojlMfR5jh5DNXYQ==
+
+"@cloudflare/workerd-windows-64@1.20250408.0":
+ version "1.20250408.0"
+ resolved "https://registry.yarnpkg.com/@cloudflare/workerd-windows-64/-/workerd-windows-64-1.20250408.0.tgz#4a7a6ab7d39bb45f4078f39a2186f13eddaead41"
+ integrity sha512-nJ3RjMKGae2aF2rZ/CNeBvQPM+W5V1SUK0FYWG/uomyr7uQ2l4IayHna1ODg/OHHTEgIjwom0Mbn58iXb0WOcQ==
+
+"@cloudflare/workerd-windows-64@1.20250428.0":
+ version "1.20250428.0"
+ resolved "https://registry.yarnpkg.com/@cloudflare/workerd-windows-64/-/workerd-windows-64-1.20250428.0.tgz#445f4aa95adb073016c6b802bee0077d0c66e925"
+ integrity sha512-RQCRj28eitjKD0tmei6iFOuWqMuHMHdNGEigRmbkmuTlpbWHNAoHikgCzZQ/dkKDdatA76TmcpbyECNf31oaTA==
+
+"@cloudflare/workers-types@^4.20230404.0":
+ version "4.20230404.0"
+ resolved "https://registry.npmjs.org/@cloudflare/workers-types/-/workers-types-4.20230404.0.tgz"
+ integrity sha512-fG3oaJX1icfsGV74nhx1+AC6opvZsGqnpx6FvrcVqQaBmCNkjKNqDRFrpasXWFiOIvysBXHKQAzsAJkBZgnM+A==
+
+"@cspotcode/source-map-support@0.8.1":
+ version "0.8.1"
+ resolved "https://registry.yarnpkg.com/@cspotcode/source-map-support/-/source-map-support-0.8.1.tgz#00629c35a688e05a88b1cda684fb9d5e73f000a1"
+ integrity sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==
+ dependencies:
+ "@jridgewell/trace-mapping" "0.3.9"
+
+"@discoveryjs/json-ext@^0.6.1":
+ version "0.6.3"
+ resolved "https://registry.yarnpkg.com/@discoveryjs/json-ext/-/json-ext-0.6.3.tgz#f13c7c205915eb91ae54c557f5e92bddd8be0e83"
+ integrity sha512-4B4OijXeVNOPZlYA2oEwWOTkzyltLao+xbotHQeqN++Rv27Y6s818+n2Qkp8q+Fxhn0t/5lA5X1Mxktud8eayQ==
+
+"@emnapi/runtime@^1.2.0":
+ version "1.4.3"
+ resolved "https://registry.yarnpkg.com/@emnapi/runtime/-/runtime-1.4.3.tgz#c0564665c80dc81c448adac23f9dfbed6c838f7d"
+ integrity sha512-pBPWdu6MLKROBX05wSNKcNb++m5Er+KQ9QkB+WVM+pW2Kx9hoSrVTnu3BdkI5eBLZoKu/J6mW/B6i6bJB2ytXQ==
+ dependencies:
+ tslib "^2.4.0"
+
+"@esbuild-plugins/node-globals-polyfill@0.2.3":
+ version "0.2.3"
+ resolved "https://registry.yarnpkg.com/@esbuild-plugins/node-globals-polyfill/-/node-globals-polyfill-0.2.3.tgz#0e4497a2b53c9e9485e149bc92ddb228438d6bcf"
+ integrity sha512-r3MIryXDeXDOZh7ih1l/yE9ZLORCd5e8vWg02azWRGj5SPTuoh69A2AIyn0Z31V/kHBfZ4HgWJ+OK3GTTwLmnw==
+
+"@esbuild-plugins/node-modules-polyfill@0.2.2":
+ version "0.2.2"
+ resolved "https://registry.yarnpkg.com/@esbuild-plugins/node-modules-polyfill/-/node-modules-polyfill-0.2.2.tgz#cefa3dc0bd1c16277a8338b52833420c94987327"
+ integrity sha512-LXV7QsWJxRuMYvKbiznh+U1ilIop3g2TeKRzUxOG5X3YITc8JyyTa90BmLwqqv0YnX4v32CSlG+vsziZp9dMvA==
+ dependencies:
+ escape-string-regexp "^4.0.0"
+ rollup-plugin-node-polyfills "^0.2.1"
+
+"@esbuild/aix-ppc64@0.25.2":
+ version "0.25.2"
+ resolved "https://registry.yarnpkg.com/@esbuild/aix-ppc64/-/aix-ppc64-0.25.2.tgz#b87036f644f572efb2b3c75746c97d1d2d87ace8"
+ integrity sha512-wCIboOL2yXZym2cgm6mlA742s9QeJ8DjGVaL39dLN4rRwrOgOyYSnOaFPhKZGLb2ngj4EyfAFjsNJwPXZvseag==
+
+"@esbuild/aix-ppc64@0.25.5":
+ version "0.25.5"
+ resolved "https://registry.yarnpkg.com/@esbuild/aix-ppc64/-/aix-ppc64-0.25.5.tgz#4e0f91776c2b340e75558f60552195f6fad09f18"
+ integrity sha512-9o3TMmpmftaCMepOdA5k/yDw8SfInyzWWTjYTFCX3kPSDJMROQTb8jg+h9Cnwnmm1vOzvxN7gIfB5V2ewpjtGA==
+
+"@esbuild/android-arm64@0.17.19":
+ version "0.17.19"
+ resolved "https://registry.yarnpkg.com/@esbuild/android-arm64/-/android-arm64-0.17.19.tgz#bafb75234a5d3d1b690e7c2956a599345e84a2fd"
+ integrity sha512-KBMWvEZooR7+kzY0BtbTQn0OAYY7CsiydT63pVEaPtVYF0hXbUaOyZog37DKxK7NF3XacBJOpYT4adIJh+avxA==
+
+"@esbuild/android-arm64@0.25.2":
+ version "0.25.2"
+ resolved "https://registry.yarnpkg.com/@esbuild/android-arm64/-/android-arm64-0.25.2.tgz#5ca7dc20a18f18960ad8d5e6ef5cf7b0a256e196"
+ integrity sha512-5ZAX5xOmTligeBaeNEPnPaeEuah53Id2tX4c2CVP3JaROTH+j4fnfHCkr1PjXMd78hMst+TlkfKcW/DlTq0i4w==
+
+"@esbuild/android-arm64@0.25.5":
+ version "0.25.5"
+ resolved "https://registry.yarnpkg.com/@esbuild/android-arm64/-/android-arm64-0.25.5.tgz#bc766407f1718923f6b8079c8c61bf86ac3a6a4f"
+ integrity sha512-VGzGhj4lJO+TVGV1v8ntCZWJktV7SGCs3Pn1GRWI1SBFtRALoomm8k5E9Pmwg3HOAal2VDc2F9+PM/rEY6oIDg==
+
+"@esbuild/android-arm@0.17.19":
+ version "0.17.19"
+ resolved "https://registry.yarnpkg.com/@esbuild/android-arm/-/android-arm-0.17.19.tgz#5898f7832c2298bc7d0ab53701c57beb74d78b4d"
+ integrity sha512-rIKddzqhmav7MSmoFCmDIb6e2W57geRsM94gV2l38fzhXMwq7hZoClug9USI2pFRGL06f4IOPHHpFNOkWieR8A==
+
+"@esbuild/android-arm@0.25.2":
+ version "0.25.2"
+ resolved "https://registry.yarnpkg.com/@esbuild/android-arm/-/android-arm-0.25.2.tgz#3c49f607b7082cde70c6ce0c011c362c57a194ee"
+ integrity sha512-NQhH7jFstVY5x8CKbcfa166GoV0EFkaPkCKBQkdPJFvo5u+nGXLEH/ooniLb3QI8Fk58YAx7nsPLozUWfCBOJA==
+
+"@esbuild/android-arm@0.25.5":
+ version "0.25.5"
+ resolved "https://registry.yarnpkg.com/@esbuild/android-arm/-/android-arm-0.25.5.tgz#4290d6d3407bae3883ad2cded1081a234473ce26"
+ integrity sha512-AdJKSPeEHgi7/ZhuIPtcQKr5RQdo6OO2IL87JkianiMYMPbCtot9fxPbrMiBADOWWm3T2si9stAiVsGbTQFkbA==
+
+"@esbuild/android-x64@0.17.19":
+ version "0.17.19"
+ resolved "https://registry.yarnpkg.com/@esbuild/android-x64/-/android-x64-0.17.19.tgz#658368ef92067866d95fb268719f98f363d13ae1"
+ integrity sha512-uUTTc4xGNDT7YSArp/zbtmbhO0uEEK9/ETW29Wk1thYUJBz3IVnvgEiEwEa9IeLyvnpKrWK64Utw2bgUmDveww==
+
+"@esbuild/android-x64@0.25.2":
+ version "0.25.2"
+ resolved "https://registry.yarnpkg.com/@esbuild/android-x64/-/android-x64-0.25.2.tgz#8a00147780016aff59e04f1036e7cb1b683859e2"
+ integrity sha512-Ffcx+nnma8Sge4jzddPHCZVRvIfQ0kMsUsCMcJRHkGJ1cDmhe4SsrYIjLUKn1xpHZybmOqCWwB0zQvsjdEHtkg==
+
+"@esbuild/android-x64@0.25.5":
+ version "0.25.5"
+ resolved "https://registry.yarnpkg.com/@esbuild/android-x64/-/android-x64-0.25.5.tgz#40c11d9cbca4f2406548c8a9895d321bc3b35eff"
+ integrity sha512-D2GyJT1kjvO//drbRT3Hib9XPwQeWd9vZoBJn+bu/lVsOZ13cqNdDeqIF/xQ5/VmWvMduP6AmXvylO/PIc2isw==
+
+"@esbuild/darwin-arm64@0.17.19":
+ version "0.17.19"
+ resolved "https://registry.yarnpkg.com/@esbuild/darwin-arm64/-/darwin-arm64-0.17.19.tgz#584c34c5991b95d4d48d333300b1a4e2ff7be276"
+ integrity sha512-80wEoCfF/hFKM6WE1FyBHc9SfUblloAWx6FJkFWTWiCoht9Mc0ARGEM47e67W9rI09YoUxJL68WHfDRYEAvOhg==
+
+"@esbuild/darwin-arm64@0.25.2":
+ version "0.25.2"
+ resolved "https://registry.yarnpkg.com/@esbuild/darwin-arm64/-/darwin-arm64-0.25.2.tgz#486efe7599a8d90a27780f2bb0318d9a85c6c423"
+ integrity sha512-MpM6LUVTXAzOvN4KbjzU/q5smzryuoNjlriAIx+06RpecwCkL9JpenNzpKd2YMzLJFOdPqBpuub6eVRP5IgiSA==
+
+"@esbuild/darwin-arm64@0.25.5":
+ version "0.25.5"
+ resolved "https://registry.yarnpkg.com/@esbuild/darwin-arm64/-/darwin-arm64-0.25.5.tgz#49d8bf8b1df95f759ac81eb1d0736018006d7e34"
+ integrity sha512-GtaBgammVvdF7aPIgH2jxMDdivezgFu6iKpmT+48+F8Hhg5J/sfnDieg0aeG/jfSvkYQU2/pceFPDKlqZzwnfQ==
+
+"@esbuild/darwin-x64@0.17.19":
+ version "0.17.19"
+ resolved "https://registry.yarnpkg.com/@esbuild/darwin-x64/-/darwin-x64-0.17.19.tgz#7751d236dfe6ce136cce343dce69f52d76b7f6cb"
+ integrity sha512-IJM4JJsLhRYr9xdtLytPLSH9k/oxR3boaUIYiHkAawtwNOXKE8KoU8tMvryogdcT8AU+Bflmh81Xn6Q0vTZbQw==
+
+"@esbuild/darwin-x64@0.25.2":
+ version "0.25.2"
+ resolved "https://registry.yarnpkg.com/@esbuild/darwin-x64/-/darwin-x64-0.25.2.tgz#95ee222aacf668c7a4f3d7ee87b3240a51baf374"
+ integrity sha512-5eRPrTX7wFyuWe8FqEFPG2cU0+butQQVNcT4sVipqjLYQjjh8a8+vUTfgBKM88ObB85ahsnTwF7PSIt6PG+QkA==
+
+"@esbuild/darwin-x64@0.25.5":
+ version "0.25.5"
+ resolved "https://registry.yarnpkg.com/@esbuild/darwin-x64/-/darwin-x64-0.25.5.tgz#e27a5d92a14886ef1d492fd50fc61a2d4d87e418"
+ integrity sha512-1iT4FVL0dJ76/q1wd7XDsXrSW+oLoquptvh4CLR4kITDtqi2e/xwXwdCVH8hVHU43wgJdsq7Gxuzcs6Iq/7bxQ==
+
+"@esbuild/freebsd-arm64@0.17.19":
+ version "0.17.19"
+ resolved "https://registry.yarnpkg.com/@esbuild/freebsd-arm64/-/freebsd-arm64-0.17.19.tgz#cacd171665dd1d500f45c167d50c6b7e539d5fd2"
+ integrity sha512-pBwbc7DufluUeGdjSU5Si+P3SoMF5DQ/F/UmTSb8HXO80ZEAJmrykPyzo1IfNbAoaqw48YRpv8shwd1NoI0jcQ==
+
+"@esbuild/freebsd-arm64@0.25.2":
+ version "0.25.2"
+ resolved "https://registry.yarnpkg.com/@esbuild/freebsd-arm64/-/freebsd-arm64-0.25.2.tgz#67efceda8554b6fc6a43476feba068fb37fa2ef6"
+ integrity sha512-mLwm4vXKiQ2UTSX4+ImyiPdiHjiZhIaE9QvC7sw0tZ6HoNMjYAqQpGyui5VRIi5sGd+uWq940gdCbY3VLvsO1w==
+
+"@esbuild/freebsd-arm64@0.25.5":
+ version "0.25.5"
+ resolved "https://registry.yarnpkg.com/@esbuild/freebsd-arm64/-/freebsd-arm64-0.25.5.tgz#97cede59d638840ca104e605cdb9f1b118ba0b1c"
+ integrity sha512-nk4tGP3JThz4La38Uy/gzyXtpkPW8zSAmoUhK9xKKXdBCzKODMc2adkB2+8om9BDYugz+uGV7sLmpTYzvmz6Sw==
+
+"@esbuild/freebsd-x64@0.17.19":
+ version "0.17.19"
+ resolved "https://registry.yarnpkg.com/@esbuild/freebsd-x64/-/freebsd-x64-0.17.19.tgz#0769456eee2a08b8d925d7c00b79e861cb3162e4"
+ integrity sha512-4lu+n8Wk0XlajEhbEffdy2xy53dpR06SlzvhGByyg36qJw6Kpfk7cp45DR/62aPH9mtJRmIyrXAS5UWBrJT6TQ==
+
+"@esbuild/freebsd-x64@0.25.2":
+ version "0.25.2"
+ resolved "https://registry.yarnpkg.com/@esbuild/freebsd-x64/-/freebsd-x64-0.25.2.tgz#88a9d7ecdd3adadbfe5227c2122d24816959b809"
+ integrity sha512-6qyyn6TjayJSwGpm8J9QYYGQcRgc90nmfdUb0O7pp1s4lTY+9D0H9O02v5JqGApUyiHOtkz6+1hZNvNtEhbwRQ==
+
+"@esbuild/freebsd-x64@0.25.5":
+ version "0.25.5"
+ resolved "https://registry.yarnpkg.com/@esbuild/freebsd-x64/-/freebsd-x64-0.25.5.tgz#71c77812042a1a8190c3d581e140d15b876b9c6f"
+ integrity sha512-PrikaNjiXdR2laW6OIjlbeuCPrPaAl0IwPIaRv+SMV8CiM8i2LqVUHFC1+8eORgWyY7yhQY+2U2fA55mBzReaw==
+
+"@esbuild/linux-arm64@0.17.19":
+ version "0.17.19"
+ resolved "https://registry.yarnpkg.com/@esbuild/linux-arm64/-/linux-arm64-0.17.19.tgz#38e162ecb723862c6be1c27d6389f48960b68edb"
+ integrity sha512-ct1Tg3WGwd3P+oZYqic+YZF4snNl2bsnMKRkb3ozHmnM0dGWuxcPTTntAF6bOP0Sp4x0PjSF+4uHQ1xvxfRKqg==
+
+"@esbuild/linux-arm64@0.25.2":
+ version "0.25.2"
+ resolved "https://registry.yarnpkg.com/@esbuild/linux-arm64/-/linux-arm64-0.25.2.tgz#87be1099b2bbe61282333b084737d46bc8308058"
+ integrity sha512-gq/sjLsOyMT19I8obBISvhoYiZIAaGF8JpeXu1u8yPv8BE5HlWYobmlsfijFIZ9hIVGYkbdFhEqC0NvM4kNO0g==
+
+"@esbuild/linux-arm64@0.25.5":
+ version "0.25.5"
+ resolved "https://registry.yarnpkg.com/@esbuild/linux-arm64/-/linux-arm64-0.25.5.tgz#f7b7c8f97eff8ffd2e47f6c67eb5c9765f2181b8"
+ integrity sha512-Z9kfb1v6ZlGbWj8EJk9T6czVEjjq2ntSYLY2cw6pAZl4oKtfgQuS4HOq41M/BcoLPzrUbNd+R4BXFyH//nHxVg==
+
+"@esbuild/linux-arm@0.17.19":
+ version "0.17.19"
+ resolved "https://registry.yarnpkg.com/@esbuild/linux-arm/-/linux-arm-0.17.19.tgz#1a2cd399c50040184a805174a6d89097d9d1559a"
+ integrity sha512-cdmT3KxjlOQ/gZ2cjfrQOtmhG4HJs6hhvm3mWSRDPtZ/lP5oe8FWceS10JaSJC13GBd4eH/haHnqf7hhGNLerA==
+
+"@esbuild/linux-arm@0.25.2":
+ version "0.25.2"
+ resolved "https://registry.yarnpkg.com/@esbuild/linux-arm/-/linux-arm-0.25.2.tgz#72a285b0fe64496e191fcad222185d7bf9f816f6"
+ integrity sha512-UHBRgJcmjJv5oeQF8EpTRZs/1knq6loLxTsjc3nxO9eXAPDLcWW55flrMVc97qFPbmZP31ta1AZVUKQzKTzb0g==
+
+"@esbuild/linux-arm@0.25.5":
+ version "0.25.5"
+ resolved "https://registry.yarnpkg.com/@esbuild/linux-arm/-/linux-arm-0.25.5.tgz#2a0be71b6cd8201fa559aea45598dffabc05d911"
+ integrity sha512-cPzojwW2okgh7ZlRpcBEtsX7WBuqbLrNXqLU89GxWbNt6uIg78ET82qifUy3W6OVww6ZWobWub5oqZOVtwolfw==
+
+"@esbuild/linux-ia32@0.17.19":
+ version "0.17.19"
+ resolved "https://registry.yarnpkg.com/@esbuild/linux-ia32/-/linux-ia32-0.17.19.tgz#e28c25266b036ce1cabca3c30155222841dc035a"
+ integrity sha512-w4IRhSy1VbsNxHRQpeGCHEmibqdTUx61Vc38APcsRbuVgK0OPEnQ0YD39Brymn96mOx48Y2laBQGqgZ0j9w6SQ==
+
+"@esbuild/linux-ia32@0.25.2":
+ version "0.25.2"
+ resolved "https://registry.yarnpkg.com/@esbuild/linux-ia32/-/linux-ia32-0.25.2.tgz#337a87a4c4dd48a832baed5cbb022be20809d737"
+ integrity sha512-bBYCv9obgW2cBP+2ZWfjYTU+f5cxRoGGQ5SeDbYdFCAZpYWrfjjfYwvUpP8MlKbP0nwZ5gyOU/0aUzZ5HWPuvQ==
+
+"@esbuild/linux-ia32@0.25.5":
+ version "0.25.5"
+ resolved "https://registry.yarnpkg.com/@esbuild/linux-ia32/-/linux-ia32-0.25.5.tgz#763414463cd9ea6fa1f96555d2762f9f84c61783"
+ integrity sha512-sQ7l00M8bSv36GLV95BVAdhJ2QsIbCuCjh/uYrWiMQSUuV+LpXwIqhgJDcvMTj+VsQmqAHL2yYaasENvJ7CDKA==
+
+"@esbuild/linux-loong64@0.17.19":
+ version "0.17.19"
+ resolved "https://registry.yarnpkg.com/@esbuild/linux-loong64/-/linux-loong64-0.17.19.tgz#0f887b8bb3f90658d1a0117283e55dbd4c9dcf72"
+ integrity sha512-2iAngUbBPMq439a+z//gE+9WBldoMp1s5GWsUSgqHLzLJ9WoZLZhpwWuym0u0u/4XmZ3gpHmzV84PonE+9IIdQ==
+
+"@esbuild/linux-loong64@0.25.2":
+ version "0.25.2"
+ resolved "https://registry.yarnpkg.com/@esbuild/linux-loong64/-/linux-loong64-0.25.2.tgz#1b81aa77103d6b8a8cfa7c094ed3d25c7579ba2a"
+ integrity sha512-SHNGiKtvnU2dBlM5D8CXRFdd+6etgZ9dXfaPCeJtz+37PIUlixvlIhI23L5khKXs3DIzAn9V8v+qb1TRKrgT5w==
+
+"@esbuild/linux-loong64@0.25.5":
+ version "0.25.5"
+ resolved "https://registry.yarnpkg.com/@esbuild/linux-loong64/-/linux-loong64-0.25.5.tgz#428cf2213ff786a502a52c96cf29d1fcf1eb8506"
+ integrity sha512-0ur7ae16hDUC4OL5iEnDb0tZHDxYmuQyhKhsPBV8f99f6Z9KQM02g33f93rNH5A30agMS46u2HP6qTdEt6Q1kg==
+
+"@esbuild/linux-mips64el@0.17.19":
+ version "0.17.19"
+ resolved "https://registry.yarnpkg.com/@esbuild/linux-mips64el/-/linux-mips64el-0.17.19.tgz#f5d2a0b8047ea9a5d9f592a178ea054053a70289"
+ integrity sha512-LKJltc4LVdMKHsrFe4MGNPp0hqDFA1Wpt3jE1gEyM3nKUvOiO//9PheZZHfYRfYl6AwdTH4aTcXSqBerX0ml4A==
+
+"@esbuild/linux-mips64el@0.25.2":
+ version "0.25.2"
+ resolved "https://registry.yarnpkg.com/@esbuild/linux-mips64el/-/linux-mips64el-0.25.2.tgz#afbe380b6992e7459bf7c2c3b9556633b2e47f30"
+ integrity sha512-hDDRlzE6rPeoj+5fsADqdUZl1OzqDYow4TB4Y/3PlKBD0ph1e6uPHzIQcv2Z65u2K0kpeByIyAjCmjn1hJgG0Q==
+
+"@esbuild/linux-mips64el@0.25.5":
+ version "0.25.5"
+ resolved "https://registry.yarnpkg.com/@esbuild/linux-mips64el/-/linux-mips64el-0.25.5.tgz#5cbcc7fd841b4cd53358afd33527cd394e325d96"
+ integrity sha512-kB/66P1OsHO5zLz0i6X0RxlQ+3cu0mkxS3TKFvkb5lin6uwZ/ttOkP3Z8lfR9mJOBk14ZwZ9182SIIWFGNmqmg==
+
+"@esbuild/linux-ppc64@0.17.19":
+ version "0.17.19"
+ resolved "https://registry.yarnpkg.com/@esbuild/linux-ppc64/-/linux-ppc64-0.17.19.tgz#876590e3acbd9fa7f57a2c7d86f83717dbbac8c7"
+ integrity sha512-/c/DGybs95WXNS8y3Ti/ytqETiW7EU44MEKuCAcpPto3YjQbyK3IQVKfF6nbghD7EcLUGl0NbiL5Rt5DMhn5tg==
+
+"@esbuild/linux-ppc64@0.25.2":
+ version "0.25.2"
+ resolved "https://registry.yarnpkg.com/@esbuild/linux-ppc64/-/linux-ppc64-0.25.2.tgz#6bf8695cab8a2b135cca1aa555226dc932d52067"
+ integrity sha512-tsHu2RRSWzipmUi9UBDEzc0nLc4HtpZEI5Ba+Omms5456x5WaNuiG3u7xh5AO6sipnJ9r4cRWQB2tUjPyIkc6g==
+
+"@esbuild/linux-ppc64@0.25.5":
+ version "0.25.5"
+ resolved "https://registry.yarnpkg.com/@esbuild/linux-ppc64/-/linux-ppc64-0.25.5.tgz#0d954ab39ce4f5e50f00c4f8c4fd38f976c13ad9"
+ integrity sha512-UZCmJ7r9X2fe2D6jBmkLBMQetXPXIsZjQJCjgwpVDz+YMcS6oFR27alkgGv3Oqkv07bxdvw7fyB71/olceJhkQ==
+
+"@esbuild/linux-riscv64@0.17.19":
+ version "0.17.19"
+ resolved "https://registry.yarnpkg.com/@esbuild/linux-riscv64/-/linux-riscv64-0.17.19.tgz#7f49373df463cd9f41dc34f9b2262d771688bf09"
+ integrity sha512-FC3nUAWhvFoutlhAkgHf8f5HwFWUL6bYdvLc/TTuxKlvLi3+pPzdZiFKSWz/PF30TB1K19SuCxDTI5KcqASJqA==
+
+"@esbuild/linux-riscv64@0.25.2":
+ version "0.25.2"
+ resolved "https://registry.yarnpkg.com/@esbuild/linux-riscv64/-/linux-riscv64-0.25.2.tgz#43c2d67a1a39199fb06ba978aebb44992d7becc3"
+ integrity sha512-k4LtpgV7NJQOml/10uPU0s4SAXGnowi5qBSjaLWMojNCUICNu7TshqHLAEbkBdAszL5TabfvQ48kK84hyFzjnw==
+
+"@esbuild/linux-riscv64@0.25.5":
+ version "0.25.5"
+ resolved "https://registry.yarnpkg.com/@esbuild/linux-riscv64/-/linux-riscv64-0.25.5.tgz#0e7dd30730505abd8088321e8497e94b547bfb1e"
+ integrity sha512-kTxwu4mLyeOlsVIFPfQo+fQJAV9mh24xL+y+Bm6ej067sYANjyEw1dNHmvoqxJUCMnkBdKpvOn0Ahql6+4VyeA==
+
+"@esbuild/linux-s390x@0.17.19":
+ version "0.17.19"
+ resolved "https://registry.yarnpkg.com/@esbuild/linux-s390x/-/linux-s390x-0.17.19.tgz#e2afd1afcaf63afe2c7d9ceacd28ec57c77f8829"
+ integrity sha512-IbFsFbxMWLuKEbH+7sTkKzL6NJmG2vRyy6K7JJo55w+8xDk7RElYn6xvXtDW8HCfoKBFK69f3pgBJSUSQPr+4Q==
+
+"@esbuild/linux-s390x@0.25.2":
+ version "0.25.2"
+ resolved "https://registry.yarnpkg.com/@esbuild/linux-s390x/-/linux-s390x-0.25.2.tgz#419e25737ec815c6dce2cd20d026e347cbb7a602"
+ integrity sha512-GRa4IshOdvKY7M/rDpRR3gkiTNp34M0eLTaC1a08gNrh4u488aPhuZOCpkF6+2wl3zAN7L7XIpOFBhnaE3/Q8Q==
+
+"@esbuild/linux-s390x@0.25.5":
+ version "0.25.5"
+ resolved "https://registry.yarnpkg.com/@esbuild/linux-s390x/-/linux-s390x-0.25.5.tgz#5669af81327a398a336d7e40e320b5bbd6e6e72d"
+ integrity sha512-K2dSKTKfmdh78uJ3NcWFiqyRrimfdinS5ErLSn3vluHNeHVnBAFWC8a4X5N+7FgVE1EjXS1QDZbpqZBjfrqMTQ==
+
+"@esbuild/linux-x64@0.17.19":
+ version "0.17.19"
+ resolved "https://registry.yarnpkg.com/@esbuild/linux-x64/-/linux-x64-0.17.19.tgz#8a0e9738b1635f0c53389e515ae83826dec22aa4"
+ integrity sha512-68ngA9lg2H6zkZcyp22tsVt38mlhWde8l3eJLWkyLrp4HwMUr3c1s/M2t7+kHIhvMjglIBrFpncX1SzMckomGw==
+
+"@esbuild/linux-x64@0.25.2":
+ version "0.25.2"
+ resolved "https://registry.yarnpkg.com/@esbuild/linux-x64/-/linux-x64-0.25.2.tgz#22451f6edbba84abe754a8cbd8528ff6e28d9bcb"
+ integrity sha512-QInHERlqpTTZ4FRB0fROQWXcYRD64lAoiegezDunLpalZMjcUcld3YzZmVJ2H/Cp0wJRZ8Xtjtj0cEHhYc/uUg==
+
+"@esbuild/linux-x64@0.25.5":
+ version "0.25.5"
+ resolved "https://registry.yarnpkg.com/@esbuild/linux-x64/-/linux-x64-0.25.5.tgz#b2357dd153aa49038967ddc1ffd90c68a9d2a0d4"
+ integrity sha512-uhj8N2obKTE6pSZ+aMUbqq+1nXxNjZIIjCjGLfsWvVpy7gKCOL6rsY1MhRh9zLtUtAI7vpgLMK6DxjO8Qm9lJw==
+
+"@esbuild/netbsd-arm64@0.25.2":
+ version "0.25.2"
+ resolved "https://registry.yarnpkg.com/@esbuild/netbsd-arm64/-/netbsd-arm64-0.25.2.tgz#744affd3b8d8236b08c5210d828b0698a62c58ac"
+ integrity sha512-talAIBoY5M8vHc6EeI2WW9d/CkiO9MQJ0IOWX8hrLhxGbro/vBXJvaQXefW2cP0z0nQVTdQ/eNyGFV1GSKrxfw==
+
+"@esbuild/netbsd-arm64@0.25.5":
+ version "0.25.5"
+ resolved "https://registry.yarnpkg.com/@esbuild/netbsd-arm64/-/netbsd-arm64-0.25.5.tgz#53b4dfb8fe1cee93777c9e366893bd3daa6ba63d"
+ integrity sha512-pwHtMP9viAy1oHPvgxtOv+OkduK5ugofNTVDilIzBLpoWAM16r7b/mxBvfpuQDpRQFMfuVr5aLcn4yveGvBZvw==
+
+"@esbuild/netbsd-x64@0.17.19":
+ version "0.17.19"
+ resolved "https://registry.yarnpkg.com/@esbuild/netbsd-x64/-/netbsd-x64-0.17.19.tgz#c29fb2453c6b7ddef9a35e2c18b37bda1ae5c462"
+ integrity sha512-CwFq42rXCR8TYIjIfpXCbRX0rp1jo6cPIUPSaWwzbVI4aOfX96OXY8M6KNmtPcg7QjYeDmN+DD0Wp3LaBOLf4Q==
+
+"@esbuild/netbsd-x64@0.25.2":
+ version "0.25.2"
+ resolved "https://registry.yarnpkg.com/@esbuild/netbsd-x64/-/netbsd-x64-0.25.2.tgz#dbbe7521fd6d7352f34328d676af923fc0f8a78f"
+ integrity sha512-voZT9Z+tpOxrvfKFyfDYPc4DO4rk06qamv1a/fkuzHpiVBMOhpjK+vBmWM8J1eiB3OLSMFYNaOaBNLXGChf5tg==
+
+"@esbuild/netbsd-x64@0.25.5":
+ version "0.25.5"
+ resolved "https://registry.yarnpkg.com/@esbuild/netbsd-x64/-/netbsd-x64-0.25.5.tgz#a0206f6314ce7dc8713b7732703d0f58de1d1e79"
+ integrity sha512-WOb5fKrvVTRMfWFNCroYWWklbnXH0Q5rZppjq0vQIdlsQKuw6mdSihwSo4RV/YdQ5UCKKvBy7/0ZZYLBZKIbwQ==
+
+"@esbuild/openbsd-arm64@0.25.2":
+ version "0.25.2"
+ resolved "https://registry.yarnpkg.com/@esbuild/openbsd-arm64/-/openbsd-arm64-0.25.2.tgz#f9caf987e3e0570500832b487ce3039ca648ce9f"
+ integrity sha512-dcXYOC6NXOqcykeDlwId9kB6OkPUxOEqU+rkrYVqJbK2hagWOMrsTGsMr8+rW02M+d5Op5NNlgMmjzecaRf7Tg==
+
+"@esbuild/openbsd-arm64@0.25.5":
+ version "0.25.5"
+ resolved "https://registry.yarnpkg.com/@esbuild/openbsd-arm64/-/openbsd-arm64-0.25.5.tgz#2a796c87c44e8de78001d808c77d948a21ec22fd"
+ integrity sha512-7A208+uQKgTxHd0G0uqZO8UjK2R0DDb4fDmERtARjSHWxqMTye4Erz4zZafx7Di9Cv+lNHYuncAkiGFySoD+Mw==
+
+"@esbuild/openbsd-x64@0.17.19":
+ version "0.17.19"
+ resolved "https://registry.yarnpkg.com/@esbuild/openbsd-x64/-/openbsd-x64-0.17.19.tgz#95e75a391403cb10297280d524d66ce04c920691"
+ integrity sha512-cnq5brJYrSZ2CF6c35eCmviIN3k3RczmHz8eYaVlNasVqsNY+JKohZU5MKmaOI+KkllCdzOKKdPs762VCPC20g==
+
+"@esbuild/openbsd-x64@0.25.2":
+ version "0.25.2"
+ resolved "https://registry.yarnpkg.com/@esbuild/openbsd-x64/-/openbsd-x64-0.25.2.tgz#d2bb6a0f8ffea7b394bb43dfccbb07cabd89f768"
+ integrity sha512-t/TkWwahkH0Tsgoq1Ju7QfgGhArkGLkF1uYz8nQS/PPFlXbP5YgRpqQR3ARRiC2iXoLTWFxc6DJMSK10dVXluw==
+
+"@esbuild/openbsd-x64@0.25.5":
+ version "0.25.5"
+ resolved "https://registry.yarnpkg.com/@esbuild/openbsd-x64/-/openbsd-x64-0.25.5.tgz#28d0cd8909b7fa3953af998f2b2ed34f576728f0"
+ integrity sha512-G4hE405ErTWraiZ8UiSoesH8DaCsMm0Cay4fsFWOOUcz8b8rC6uCvnagr+gnioEjWn0wC+o1/TAHt+It+MpIMg==
+
+"@esbuild/sunos-x64@0.17.19":
+ version "0.17.19"
+ resolved "https://registry.yarnpkg.com/@esbuild/sunos-x64/-/sunos-x64-0.17.19.tgz#722eaf057b83c2575937d3ffe5aeb16540da7273"
+ integrity sha512-vCRT7yP3zX+bKWFeP/zdS6SqdWB8OIpaRq/mbXQxTGHnIxspRtigpkUcDMlSCOejlHowLqII7K2JKevwyRP2rg==
+
+"@esbuild/sunos-x64@0.25.2":
+ version "0.25.2"
+ resolved "https://registry.yarnpkg.com/@esbuild/sunos-x64/-/sunos-x64-0.25.2.tgz#49b437ed63fe333b92137b7a0c65a65852031afb"
+ integrity sha512-cfZH1co2+imVdWCjd+D1gf9NjkchVhhdpgb1q5y6Hcv9TP6Zi9ZG/beI3ig8TvwT9lH9dlxLq5MQBBgwuj4xvA==
+
+"@esbuild/sunos-x64@0.25.5":
+ version "0.25.5"
+ resolved "https://registry.yarnpkg.com/@esbuild/sunos-x64/-/sunos-x64-0.25.5.tgz#a28164f5b997e8247d407e36c90d3fd5ddbe0dc5"
+ integrity sha512-l+azKShMy7FxzY0Rj4RCt5VD/q8mG/e+mDivgspo+yL8zW7qEwctQ6YqKX34DTEleFAvCIUviCFX1SDZRSyMQA==
+
+"@esbuild/win32-arm64@0.17.19":
+ version "0.17.19"
+ resolved "https://registry.yarnpkg.com/@esbuild/win32-arm64/-/win32-arm64-0.17.19.tgz#9aa9dc074399288bdcdd283443e9aeb6b9552b6f"
+ integrity sha512-yYx+8jwowUstVdorcMdNlzklLYhPxjniHWFKgRqH7IFlUEa0Umu3KuYplf1HUZZ422e3NU9F4LGb+4O0Kdcaag==
+
+"@esbuild/win32-arm64@0.25.2":
+ version "0.25.2"
+ resolved "https://registry.yarnpkg.com/@esbuild/win32-arm64/-/win32-arm64-0.25.2.tgz#081424168463c7d6c7fb78f631aede0c104373cf"
+ integrity sha512-7Loyjh+D/Nx/sOTzV8vfbB3GJuHdOQyrOryFdZvPHLf42Tk9ivBU5Aedi7iyX+x6rbn2Mh68T4qq1SDqJBQO5Q==
+
+"@esbuild/win32-arm64@0.25.5":
+ version "0.25.5"
+ resolved "https://registry.yarnpkg.com/@esbuild/win32-arm64/-/win32-arm64-0.25.5.tgz#6eadbead38e8bd12f633a5190e45eff80e24007e"
+ integrity sha512-O2S7SNZzdcFG7eFKgvwUEZ2VG9D/sn/eIiz8XRZ1Q/DO5a3s76Xv0mdBzVM5j5R639lXQmPmSo0iRpHqUUrsxw==
+
+"@esbuild/win32-ia32@0.17.19":
+ version "0.17.19"
+ resolved "https://registry.yarnpkg.com/@esbuild/win32-ia32/-/win32-ia32-0.17.19.tgz#95ad43c62ad62485e210f6299c7b2571e48d2b03"
+ integrity sha512-eggDKanJszUtCdlVs0RB+h35wNlb5v4TWEkq4vZcmVt5u/HiDZrTXe2bWFQUez3RgNHwx/x4sk5++4NSSicKkw==
+
+"@esbuild/win32-ia32@0.25.2":
+ version "0.25.2"
+ resolved "https://registry.yarnpkg.com/@esbuild/win32-ia32/-/win32-ia32-0.25.2.tgz#3f9e87143ddd003133d21384944a6c6cadf9693f"
+ integrity sha512-WRJgsz9un0nqZJ4MfhabxaD9Ft8KioqU3JMinOTvobbX6MOSUigSBlogP8QB3uxpJDsFS6yN+3FDBdqE5lg9kg==
+
+"@esbuild/win32-ia32@0.25.5":
+ version "0.25.5"
+ resolved "https://registry.yarnpkg.com/@esbuild/win32-ia32/-/win32-ia32-0.25.5.tgz#bab6288005482f9ed2adb9ded7e88eba9a62cc0d"
+ integrity sha512-onOJ02pqs9h1iMJ1PQphR+VZv8qBMQ77Klcsqv9CNW2w6yLqoURLcgERAIurY6QE63bbLuqgP9ATqajFLK5AMQ==
+
+"@esbuild/win32-x64@0.17.19":
+ version "0.17.19"
+ resolved "https://registry.yarnpkg.com/@esbuild/win32-x64/-/win32-x64-0.17.19.tgz#8cfaf2ff603e9aabb910e9c0558c26cf32744061"
+ integrity sha512-lAhycmKnVOuRYNtRtatQR1LPQf2oYCkRGkSFnseDAKPl8lu5SOsK/e1sXe5a0Pc5kHIHe6P2I/ilntNv2xf3cA==
+
+"@esbuild/win32-x64@0.25.2":
+ version "0.25.2"
+ resolved "https://registry.yarnpkg.com/@esbuild/win32-x64/-/win32-x64-0.25.2.tgz#839f72c2decd378f86b8f525e1979a97b920c67d"
+ integrity sha512-kM3HKb16VIXZyIeVrM1ygYmZBKybX8N4p754bw390wGO3Tf2j4L2/WYL+4suWujpgf6GBYs3jv7TyUivdd05JA==
+
+"@esbuild/win32-x64@0.25.5":
+ version "0.25.5"
+ resolved "https://registry.yarnpkg.com/@esbuild/win32-x64/-/win32-x64-0.25.5.tgz#7fc114af5f6563f19f73324b5d5ff36ece0803d1"
+ integrity sha512-TXv6YnJ8ZMVdX+SXWVBo/0p8LTcrUYngpWjvm91TMjjBQii7Oz11Lw5lbDV5Y0TzuhSJHwiH4hEtC1I42mMS0g==
+
+"@eslint-community/eslint-utils@^4.4.0":
+ version "4.4.0"
+ resolved "https://registry.yarnpkg.com/@eslint-community/eslint-utils/-/eslint-utils-4.4.0.tgz#a23514e8fb9af1269d5f7788aa556798d61c6b59"
+ integrity sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==
+ dependencies:
+ eslint-visitor-keys "^3.3.0"
+
+"@eslint-community/eslint-utils@^4.8.0", "@eslint-community/eslint-utils@^4.9.1":
+ version "4.9.1"
+ resolved "https://registry.yarnpkg.com/@eslint-community/eslint-utils/-/eslint-utils-4.9.1.tgz#4e90af67bc51ddee6cdef5284edf572ec376b595"
+ integrity sha512-phrYmNiYppR7znFEdqgfWHXR6NCkZEK7hwWDHZUjit/2/U0r6XvkDl0SYnoM51Hq7FhCGdLDT6zxCCOY1hexsQ==
+ dependencies:
+ eslint-visitor-keys "^3.4.3"
+
+"@eslint-community/regexpp@^4.12.2":
+ version "4.12.2"
+ resolved "https://registry.yarnpkg.com/@eslint-community/regexpp/-/regexpp-4.12.2.tgz#bccdf615bcf7b6e8db830ec0b8d21c9a25de597b"
+ integrity sha512-EriSTlt5OC9/7SXkRSCAhfSxxoSUgBm33OH+IkwbdpgoqsSsUg7y3uh+IICI/Qg4BBWr3U2i39RpmycbxMq4ew==
+
+"@eslint/config-array@^0.23.5":
+ version "0.23.5"
+ resolved "https://registry.yarnpkg.com/@eslint/config-array/-/config-array-0.23.5.tgz#56e86d243049195d8acc0c06a1b3dfdc3fa3de95"
+ integrity sha512-Y3kKLvC1dvTOT+oGlqNQ1XLqK6D1HU2YXPc52NmAlJZbMMWDzGYXMiPRJ8TYD39muD/OTjlZmNJ4ib7dvSrMBA==
+ dependencies:
+ "@eslint/object-schema" "^3.0.5"
+ debug "^4.3.1"
+ minimatch "^10.2.4"
+
+"@eslint/config-helpers@^0.5.5":
+ version "0.5.5"
+ resolved "https://registry.yarnpkg.com/@eslint/config-helpers/-/config-helpers-0.5.5.tgz#ae16134e4792ac5fbdc533548a24ac1ea9f7f3ae"
+ integrity sha512-eIJYKTCECbP/nsKaaruF6LW967mtbQbsw4JTtSVkUQc9MneSkbrgPJAbKl9nWr0ZeowV8BfsarBmPpBzGelA2w==
+ dependencies:
+ "@eslint/core" "^1.2.1"
+
+"@eslint/core@^1.2.1":
+ version "1.2.1"
+ resolved "https://registry.yarnpkg.com/@eslint/core/-/core-1.2.1.tgz#c1da7cd1b82fa8787f98b5629fb811848a1b63ce"
+ integrity sha512-MwcE1P+AZ4C6DWlpin/OmOA54mmIZ/+xZuJiQd4SyB29oAJjN30UW9wkKNptW2ctp4cEsvhlLY/CsQ1uoHDloQ==
+ dependencies:
+ "@types/json-schema" "^7.0.15"
+
+"@eslint/eslintrc@^3.3.5":
+ version "3.3.5"
+ resolved "https://registry.yarnpkg.com/@eslint/eslintrc/-/eslintrc-3.3.5.tgz#c131793cfc1a7b96f24a83e0a8bbd4b881558c60"
+ integrity sha512-4IlJx0X0qftVsN5E+/vGujTRIFtwuLbNsVUe7TO6zYPDR1O6nFwvwhIKEKSrl6dZchmYBITazxKoUYOjdtjlRg==
+ dependencies:
+ ajv "^6.14.0"
+ debug "^4.3.2"
+ espree "^10.0.1"
+ globals "^14.0.0"
+ ignore "^5.2.0"
import-fresh "^3.2.1"
- js-yaml "^3.13.1"
- lodash "^4.17.19"
- minimatch "^3.0.4"
+ js-yaml "^4.1.1"
+ minimatch "^3.1.5"
strip-json-comments "^3.1.1"
+"@eslint/js@^10.0.1":
+ version "10.0.1"
+ resolved "https://registry.yarnpkg.com/@eslint/js/-/js-10.0.1.tgz#1e8a876f50117af8ab67e47d5ad94d38d6622583"
+ integrity sha512-zeR9k5pd4gxjZ0abRoIaxdc7I3nDktoXZk2qOv9gCNWx3mVwEn32VRhyLaRsDiJjTs0xq/T8mfPtyuXu7GWBcA==
+
+"@eslint/object-schema@^3.0.5":
+ version "3.0.5"
+ resolved "https://registry.yarnpkg.com/@eslint/object-schema/-/object-schema-3.0.5.tgz#88e9bf4d11d2b19c082e78ebe7ce88724a5eb091"
+ integrity sha512-vqTaUEgxzm+YDSdElad6PiRoX4t8VGDjCtt05zn4nU810UIx/uNEV7/lZJ6KwFThKZOzOxzXy48da+No7HZaMw==
+
+"@eslint/plugin-kit@^0.7.1":
+ version "0.7.1"
+ resolved "https://registry.yarnpkg.com/@eslint/plugin-kit/-/plugin-kit-0.7.1.tgz#c4125fd015eceeb09b793109fdbcd4dd0a02d346"
+ integrity sha512-rZAP3aVgB9ds9KOeUSL+zZ21hPmo8dh6fnIFwRQj5EAZl9gzR7wxYbYXYysAM8CTqGmUGyp2S4kUdV17MnGuWQ==
+ dependencies:
+ "@eslint/core" "^1.2.1"
+ levn "^0.4.1"
+
"@evocateur/libnpmaccess@^3.1.2":
version "3.1.2"
- resolved "https://registry.yarnpkg.com/@evocateur/libnpmaccess/-/libnpmaccess-3.1.2.tgz#ecf7f6ce6b004e9f942b098d92200be4a4b1c845"
+ resolved "https://registry.npmjs.org/@evocateur/libnpmaccess/-/libnpmaccess-3.1.2.tgz"
integrity sha512-KSCAHwNWro0CF2ukxufCitT9K5LjL/KuMmNzSu8wuwN2rjyKHD8+cmOsiybK+W5hdnwc5M1SmRlVCaMHQo+3rg==
dependencies:
"@evocateur/npm-registry-fetch" "^4.0.0"
@@ -52,7 +742,7 @@
"@evocateur/libnpmpublish@^1.2.2":
version "1.2.2"
- resolved "https://registry.yarnpkg.com/@evocateur/libnpmpublish/-/libnpmpublish-1.2.2.tgz#55df09d2dca136afba9c88c759ca272198db9f1a"
+ resolved "https://registry.npmjs.org/@evocateur/libnpmpublish/-/libnpmpublish-1.2.2.tgz"
integrity sha512-MJrrk9ct1FeY9zRlyeoyMieBjGDG9ihyyD9/Ft6MMrTxql9NyoEx2hw9casTIP4CdqEVu+3nQ2nXxoJ8RCXyFg==
dependencies:
"@evocateur/npm-registry-fetch" "^4.0.0"
@@ -67,7 +757,7 @@
"@evocateur/npm-registry-fetch@^4.0.0":
version "4.0.0"
- resolved "https://registry.yarnpkg.com/@evocateur/npm-registry-fetch/-/npm-registry-fetch-4.0.0.tgz#8c4c38766d8d32d3200fcb0a83f064b57365ed66"
+ resolved "https://registry.npmjs.org/@evocateur/npm-registry-fetch/-/npm-registry-fetch-4.0.0.tgz"
integrity sha512-k1WGfKRQyhJpIr+P17O5vLIo2ko1PFLKwoetatdduUSt/aQ4J2sJrJwwatdI5Z3SiYk/mRH9S3JpdmMFd/IK4g==
dependencies:
JSONStream "^1.3.4"
@@ -80,7 +770,7 @@
"@evocateur/pacote@^9.6.3":
version "9.6.5"
- resolved "https://registry.yarnpkg.com/@evocateur/pacote/-/pacote-9.6.5.tgz#33de32ba210b6f17c20ebab4d497efc6755f4ae5"
+ resolved "https://registry.npmjs.org/@evocateur/pacote/-/pacote-9.6.5.tgz"
integrity sha512-EI552lf0aG2nOV8NnZpTxNo2PcXKPmDbF9K8eCBFQdIZwHNGN/mi815fxtmUMa2wTa1yndotICIDt/V0vpEx2w==
dependencies:
"@evocateur/npm-registry-fetch" "^4.0.0"
@@ -113,9 +803,246 @@
unique-filename "^1.1.1"
which "^1.3.1"
+"@fastify/busboy@^2.0.0":
+ version "2.1.1"
+ resolved "https://registry.yarnpkg.com/@fastify/busboy/-/busboy-2.1.1.tgz#b9da6a878a371829a0502c9b6c1c143ef6663f4d"
+ integrity sha512-vBZP4NlzfOlerQTnba4aqZoMhE/a9HY7HRqoOPaETQcSQuWEIyZMHGfVu6w9wGtGK5fED5qRs2DteVCjOH60sA==
+
+"@humanfs/core@^0.19.2":
+ version "0.19.2"
+ resolved "https://registry.yarnpkg.com/@humanfs/core/-/core-0.19.2.tgz#a8272ca03b2acf492670222b2320b6c421bfde60"
+ integrity sha512-UhXNm+CFMWcbChXywFwkmhqjs3PRCmcSa/hfBgLIb7oQ5HNb1wS0icWsGtSAUNgefHeI+eBrA8I1fxmbHsGdvA==
+ dependencies:
+ "@humanfs/types" "^0.15.0"
+
+"@humanfs/node@^0.16.6":
+ version "0.16.8"
+ resolved "https://registry.yarnpkg.com/@humanfs/node/-/node-0.16.8.tgz#8f800cccc13f4f8cd3116e2d9c0a94939da3e3ed"
+ integrity sha512-gE1eQNZ3R++kTzFUpdGlpmy8kDZD/MLyHqDwqjkVQI0JMdI1D51sy1H958PNXYkM2rAac7e5/CnIKZrHtPh3BQ==
+ dependencies:
+ "@humanfs/core" "^0.19.2"
+ "@humanfs/types" "^0.15.0"
+ "@humanwhocodes/retry" "^0.4.0"
+
+"@humanfs/types@^0.15.0":
+ version "0.15.0"
+ resolved "https://registry.yarnpkg.com/@humanfs/types/-/types-0.15.0.tgz#f2a09f62012390b2bff3fc6fb248ddec8c09a090"
+ integrity sha512-ZZ1w0aoQkwuUuC7Yf+7sdeaNfqQiiLcSRbfI08oAxqLtpXQr9AIVX7Ay7HLDuiLYAaFPu8oBYNq/QIi9URHJ3Q==
+
+"@humanwhocodes/module-importer@^1.0.1":
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz#af5b2691a22b44be847b0ca81641c5fb6ad0172c"
+ integrity sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==
+
+"@humanwhocodes/retry@^0.4.0", "@humanwhocodes/retry@^0.4.2":
+ version "0.4.3"
+ resolved "https://registry.yarnpkg.com/@humanwhocodes/retry/-/retry-0.4.3.tgz#c2b9d2e374ee62c586d3adbea87199b1d7a7a6ba"
+ integrity sha512-bV0Tgo9K4hfPCek+aMAn81RppFKv2ySDQeMoSZuvTASywNTnVJCArCZE2FWqpvIatKu7VMRLWlR1EazvVhDyhQ==
+
+"@img/sharp-darwin-arm64@0.33.5":
+ version "0.33.5"
+ resolved "https://registry.yarnpkg.com/@img/sharp-darwin-arm64/-/sharp-darwin-arm64-0.33.5.tgz#ef5b5a07862805f1e8145a377c8ba6e98813ca08"
+ integrity sha512-UT4p+iz/2H4twwAoLCqfA9UH5pI6DggwKEGuaPy7nCVQ8ZsiY5PIcrRvD1DzuY3qYL07NtIQcWnBSY/heikIFQ==
+ optionalDependencies:
+ "@img/sharp-libvips-darwin-arm64" "1.0.4"
+
+"@img/sharp-darwin-x64@0.33.5":
+ version "0.33.5"
+ resolved "https://registry.yarnpkg.com/@img/sharp-darwin-x64/-/sharp-darwin-x64-0.33.5.tgz#e03d3451cd9e664faa72948cc70a403ea4063d61"
+ integrity sha512-fyHac4jIc1ANYGRDxtiqelIbdWkIuQaI84Mv45KvGRRxSAa7o7d1ZKAOBaYbnepLC1WqxfpimdeWfvqqSGwR2Q==
+ optionalDependencies:
+ "@img/sharp-libvips-darwin-x64" "1.0.4"
+
+"@img/sharp-libvips-darwin-arm64@1.0.4":
+ version "1.0.4"
+ resolved "https://registry.yarnpkg.com/@img/sharp-libvips-darwin-arm64/-/sharp-libvips-darwin-arm64-1.0.4.tgz#447c5026700c01a993c7804eb8af5f6e9868c07f"
+ integrity sha512-XblONe153h0O2zuFfTAbQYAX2JhYmDHeWikp1LM9Hul9gVPjFY427k6dFEcOL72O01QxQsWi761svJ/ev9xEDg==
+
+"@img/sharp-libvips-darwin-x64@1.0.4":
+ version "1.0.4"
+ resolved "https://registry.yarnpkg.com/@img/sharp-libvips-darwin-x64/-/sharp-libvips-darwin-x64-1.0.4.tgz#e0456f8f7c623f9dbfbdc77383caa72281d86062"
+ integrity sha512-xnGR8YuZYfJGmWPvmlunFaWJsb9T/AO2ykoP3Fz/0X5XV2aoYBPkX6xqCQvUTKKiLddarLaxpzNe+b1hjeWHAQ==
+
+"@img/sharp-libvips-linux-arm64@1.0.4":
+ version "1.0.4"
+ resolved "https://registry.yarnpkg.com/@img/sharp-libvips-linux-arm64/-/sharp-libvips-linux-arm64-1.0.4.tgz#979b1c66c9a91f7ff2893556ef267f90ebe51704"
+ integrity sha512-9B+taZ8DlyyqzZQnoeIvDVR/2F4EbMepXMc/NdVbkzsJbzkUjhXv/70GQJ7tdLA4YJgNP25zukcxpX2/SueNrA==
+
+"@img/sharp-libvips-linux-arm@1.0.5":
+ version "1.0.5"
+ resolved "https://registry.yarnpkg.com/@img/sharp-libvips-linux-arm/-/sharp-libvips-linux-arm-1.0.5.tgz#99f922d4e15216ec205dcb6891b721bfd2884197"
+ integrity sha512-gvcC4ACAOPRNATg/ov8/MnbxFDJqf/pDePbBnuBDcjsI8PssmjoKMAz4LtLaVi+OnSb5FK/yIOamqDwGmXW32g==
+
+"@img/sharp-libvips-linux-s390x@1.0.4":
+ version "1.0.4"
+ resolved "https://registry.yarnpkg.com/@img/sharp-libvips-linux-s390x/-/sharp-libvips-linux-s390x-1.0.4.tgz#f8a5eb1f374a082f72b3f45e2fb25b8118a8a5ce"
+ integrity sha512-u7Wz6ntiSSgGSGcjZ55im6uvTrOxSIS8/dgoVMoiGE9I6JAfU50yH5BoDlYA1tcuGS7g/QNtetJnxA6QEsCVTA==
+
+"@img/sharp-libvips-linux-x64@1.0.4":
+ version "1.0.4"
+ resolved "https://registry.yarnpkg.com/@img/sharp-libvips-linux-x64/-/sharp-libvips-linux-x64-1.0.4.tgz#d4c4619cdd157774906e15770ee119931c7ef5e0"
+ integrity sha512-MmWmQ3iPFZr0Iev+BAgVMb3ZyC4KeFc3jFxnNbEPas60e1cIfevbtuyf9nDGIzOaW9PdnDciJm+wFFaTlj5xYw==
+
+"@img/sharp-libvips-linuxmusl-arm64@1.0.4":
+ version "1.0.4"
+ resolved "https://registry.yarnpkg.com/@img/sharp-libvips-linuxmusl-arm64/-/sharp-libvips-linuxmusl-arm64-1.0.4.tgz#166778da0f48dd2bded1fa3033cee6b588f0d5d5"
+ integrity sha512-9Ti+BbTYDcsbp4wfYib8Ctm1ilkugkA/uscUn6UXK1ldpC1JjiXbLfFZtRlBhjPZ5o1NCLiDbg8fhUPKStHoTA==
+
+"@img/sharp-libvips-linuxmusl-x64@1.0.4":
+ version "1.0.4"
+ resolved "https://registry.yarnpkg.com/@img/sharp-libvips-linuxmusl-x64/-/sharp-libvips-linuxmusl-x64-1.0.4.tgz#93794e4d7720b077fcad3e02982f2f1c246751ff"
+ integrity sha512-viYN1KX9m+/hGkJtvYYp+CCLgnJXwiQB39damAO7WMdKWlIhmYTfHjwSbQeUK/20vY154mwezd9HflVFM1wVSw==
+
+"@img/sharp-linux-arm64@0.33.5":
+ version "0.33.5"
+ resolved "https://registry.yarnpkg.com/@img/sharp-linux-arm64/-/sharp-linux-arm64-0.33.5.tgz#edb0697e7a8279c9fc829a60fc35644c4839bb22"
+ integrity sha512-JMVv+AMRyGOHtO1RFBiJy/MBsgz0x4AWrT6QoEVVTyh1E39TrCUpTRI7mx9VksGX4awWASxqCYLCV4wBZHAYxA==
+ optionalDependencies:
+ "@img/sharp-libvips-linux-arm64" "1.0.4"
+
+"@img/sharp-linux-arm@0.33.5":
+ version "0.33.5"
+ resolved "https://registry.yarnpkg.com/@img/sharp-linux-arm/-/sharp-linux-arm-0.33.5.tgz#422c1a352e7b5832842577dc51602bcd5b6f5eff"
+ integrity sha512-JTS1eldqZbJxjvKaAkxhZmBqPRGmxgu+qFKSInv8moZ2AmT5Yib3EQ1c6gp493HvrvV8QgdOXdyaIBrhvFhBMQ==
+ optionalDependencies:
+ "@img/sharp-libvips-linux-arm" "1.0.5"
+
+"@img/sharp-linux-s390x@0.33.5":
+ version "0.33.5"
+ resolved "https://registry.yarnpkg.com/@img/sharp-linux-s390x/-/sharp-linux-s390x-0.33.5.tgz#f5c077926b48e97e4a04d004dfaf175972059667"
+ integrity sha512-y/5PCd+mP4CA/sPDKl2961b+C9d+vPAveS33s6Z3zfASk2j5upL6fXVPZi7ztePZ5CuH+1kW8JtvxgbuXHRa4Q==
+ optionalDependencies:
+ "@img/sharp-libvips-linux-s390x" "1.0.4"
+
+"@img/sharp-linux-x64@0.33.5":
+ version "0.33.5"
+ resolved "https://registry.yarnpkg.com/@img/sharp-linux-x64/-/sharp-linux-x64-0.33.5.tgz#d806e0afd71ae6775cc87f0da8f2d03a7c2209cb"
+ integrity sha512-opC+Ok5pRNAzuvq1AG0ar+1owsu842/Ab+4qvU879ippJBHvyY5n2mxF1izXqkPYlGuP/M556uh53jRLJmzTWA==
+ optionalDependencies:
+ "@img/sharp-libvips-linux-x64" "1.0.4"
+
+"@img/sharp-linuxmusl-arm64@0.33.5":
+ version "0.33.5"
+ resolved "https://registry.yarnpkg.com/@img/sharp-linuxmusl-arm64/-/sharp-linuxmusl-arm64-0.33.5.tgz#252975b915894fb315af5deea174651e208d3d6b"
+ integrity sha512-XrHMZwGQGvJg2V/oRSUfSAfjfPxO+4DkiRh6p2AFjLQztWUuY/o8Mq0eMQVIY7HJ1CDQUJlxGGZRw1a5bqmd1g==
+ optionalDependencies:
+ "@img/sharp-libvips-linuxmusl-arm64" "1.0.4"
+
+"@img/sharp-linuxmusl-x64@0.33.5":
+ version "0.33.5"
+ resolved "https://registry.yarnpkg.com/@img/sharp-linuxmusl-x64/-/sharp-linuxmusl-x64-0.33.5.tgz#3f4609ac5d8ef8ec7dadee80b560961a60fd4f48"
+ integrity sha512-WT+d/cgqKkkKySYmqoZ8y3pxx7lx9vVejxW/W4DOFMYVSkErR+w7mf2u8m/y4+xHe7yY9DAXQMWQhpnMuFfScw==
+ optionalDependencies:
+ "@img/sharp-libvips-linuxmusl-x64" "1.0.4"
+
+"@img/sharp-wasm32@0.33.5":
+ version "0.33.5"
+ resolved "https://registry.yarnpkg.com/@img/sharp-wasm32/-/sharp-wasm32-0.33.5.tgz#6f44f3283069d935bb5ca5813153572f3e6f61a1"
+ integrity sha512-ykUW4LVGaMcU9lu9thv85CbRMAwfeadCJHRsg2GmeRa/cJxsVY9Rbd57JcMxBkKHag5U/x7TSBpScF4U8ElVzg==
+ dependencies:
+ "@emnapi/runtime" "^1.2.0"
+
+"@img/sharp-win32-ia32@0.33.5":
+ version "0.33.5"
+ resolved "https://registry.yarnpkg.com/@img/sharp-win32-ia32/-/sharp-win32-ia32-0.33.5.tgz#1a0c839a40c5351e9885628c85f2e5dfd02b52a9"
+ integrity sha512-T36PblLaTwuVJ/zw/LaH0PdZkRz5rd3SmMHX8GSmR7vtNSP5Z6bQkExdSK7xGWyxLw4sUknBuugTelgw2faBbQ==
+
+"@img/sharp-win32-x64@0.33.5":
+ version "0.33.5"
+ resolved "https://registry.yarnpkg.com/@img/sharp-win32-x64/-/sharp-win32-x64-0.33.5.tgz#56f00962ff0c4e0eb93d34a047d29fa995e3e342"
+ integrity sha512-MpY/o8/8kj+EcnxwvrP4aTJSWw/aZ7JIGR4aBeZkZw5B7/Jn+tY9/VNwtcoGmdT7GfggGIU4kygOMSbYnOrAbg==
+
+"@isaacs/cliui@^8.0.2":
+ version "8.0.2"
+ resolved "https://registry.yarnpkg.com/@isaacs/cliui/-/cliui-8.0.2.tgz#b37667b7bc181c168782259bab42474fbf52b550"
+ integrity sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==
+ dependencies:
+ string-width "^5.1.2"
+ string-width-cjs "npm:string-width@^4.2.0"
+ strip-ansi "^7.0.1"
+ strip-ansi-cjs "npm:strip-ansi@^6.0.1"
+ wrap-ansi "^8.1.0"
+ wrap-ansi-cjs "npm:wrap-ansi@^7.0.0"
+
+"@isaacs/fs-minipass@^4.0.0":
+ version "4.0.1"
+ resolved "https://registry.yarnpkg.com/@isaacs/fs-minipass/-/fs-minipass-4.0.1.tgz#2d59ae3ab4b38fb4270bfa23d30f8e2e86c7fe32"
+ integrity sha512-wgm9Ehl2jpeqP3zw/7mo3kRHFp5MEDhqAdwy1fTGkHAwnkGOVsgpvQhL8B5n1qlb01jV3n/bI0ZfZp5lWA1k4w==
+ dependencies:
+ minipass "^7.0.4"
+
+"@istanbuljs/load-nyc-config@^1.0.0":
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/@istanbuljs/load-nyc-config/-/load-nyc-config-1.1.0.tgz#fd3db1d59ecf7cf121e80650bb86712f9b55eced"
+ integrity sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ==
+ dependencies:
+ camelcase "^5.3.1"
+ find-up "^4.1.0"
+ get-package-type "^0.1.0"
+ js-yaml "^3.13.1"
+ resolve-from "^5.0.0"
+
+"@istanbuljs/schema@^0.1.2":
+ version "0.1.3"
+ resolved "https://registry.yarnpkg.com/@istanbuljs/schema/-/schema-0.1.3.tgz#e45e384e4b8ec16bce2fd903af78450f6bf7ec98"
+ integrity sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==
+
+"@jridgewell/gen-mapping@^0.3.5":
+ version "0.3.8"
+ resolved "https://registry.yarnpkg.com/@jridgewell/gen-mapping/-/gen-mapping-0.3.8.tgz#4f0e06362e01362f823d348f1872b08f666d8142"
+ integrity sha512-imAbBGkb+ebQyxKgzv5Hu2nmROxoDOXHh80evxdoXNOrvAnVx7zimzc1Oo5h9RlfV4vPXaE2iM5pOFbvOCClWA==
+ dependencies:
+ "@jridgewell/set-array" "^1.2.1"
+ "@jridgewell/sourcemap-codec" "^1.4.10"
+ "@jridgewell/trace-mapping" "^0.3.24"
+
+"@jridgewell/resolve-uri@^3.0.3", "@jridgewell/resolve-uri@^3.1.0":
+ version "3.1.2"
+ resolved "https://registry.yarnpkg.com/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz#7a0ee601f60f99a20c7c7c5ff0c80388c1189bd6"
+ integrity sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==
+
+"@jridgewell/set-array@^1.2.1":
+ version "1.2.1"
+ resolved "https://registry.yarnpkg.com/@jridgewell/set-array/-/set-array-1.2.1.tgz#558fb6472ed16a4c850b889530e6b36438c49280"
+ integrity sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==
+
+"@jridgewell/source-map@^0.3.3":
+ version "0.3.6"
+ resolved "https://registry.yarnpkg.com/@jridgewell/source-map/-/source-map-0.3.6.tgz#9d71ca886e32502eb9362c9a74a46787c36df81a"
+ integrity sha512-1ZJTZebgqllO79ue2bm3rIGud/bOe0pP5BjSRCRxxYkEZS8STV7zN84UBbiYu7jy+eCKSnVIUgoWWE/tt+shMQ==
+ dependencies:
+ "@jridgewell/gen-mapping" "^0.3.5"
+ "@jridgewell/trace-mapping" "^0.3.25"
+
+"@jridgewell/sourcemap-codec@^1.4.10":
+ version "1.4.15"
+ resolved "https://registry.yarnpkg.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz#d7c6e6755c78567a951e04ab52ef0fd26de59f32"
+ integrity sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==
+
+"@jridgewell/sourcemap-codec@^1.4.14", "@jridgewell/sourcemap-codec@^1.5.0":
+ version "1.5.0"
+ resolved "https://registry.yarnpkg.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.0.tgz#3188bcb273a414b0d215fd22a58540b989b9409a"
+ integrity sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==
+
+"@jridgewell/trace-mapping@0.3.9":
+ version "0.3.9"
+ resolved "https://registry.yarnpkg.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.9.tgz#6534fd5933a53ba7cbf3a17615e273a0d1273ff9"
+ integrity sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==
+ dependencies:
+ "@jridgewell/resolve-uri" "^3.0.3"
+ "@jridgewell/sourcemap-codec" "^1.4.10"
+
+"@jridgewell/trace-mapping@^0.3.24", "@jridgewell/trace-mapping@^0.3.25":
+ version "0.3.25"
+ resolved "https://registry.yarnpkg.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz#15f190e98895f3fc23276ee14bc76b675c2e50f0"
+ integrity sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==
+ dependencies:
+ "@jridgewell/resolve-uri" "^3.1.0"
+ "@jridgewell/sourcemap-codec" "^1.4.14"
+
"@lerna/add@3.21.0":
version "3.21.0"
- resolved "https://registry.yarnpkg.com/@lerna/add/-/add-3.21.0.tgz#27007bde71cc7b0a2969ab3c2f0ae41578b4577b"
+ resolved "https://registry.npmjs.org/@lerna/add/-/add-3.21.0.tgz"
integrity sha512-vhUXXF6SpufBE1EkNEXwz1VLW03f177G9uMOFMQkp6OJ30/PWg4Ekifuz9/3YfgB2/GH8Tu4Lk3O51P2Hskg/A==
dependencies:
"@evocateur/pacote" "^9.6.3"
@@ -131,7 +1058,7 @@
"@lerna/bootstrap@3.21.0":
version "3.21.0"
- resolved "https://registry.yarnpkg.com/@lerna/bootstrap/-/bootstrap-3.21.0.tgz#bcd1b651be5b0970b20d8fae04c864548123aed6"
+ resolved "https://registry.npmjs.org/@lerna/bootstrap/-/bootstrap-3.21.0.tgz"
integrity sha512-mtNHlXpmvJn6JTu0KcuTTPl2jLsDNud0QacV/h++qsaKbhAaJr/FElNZ5s7MwZFUM3XaDmvWzHKaszeBMHIbBw==
dependencies:
"@lerna/command" "3.21.0"
@@ -160,7 +1087,7 @@
"@lerna/changed@3.21.0":
version "3.21.0"
- resolved "https://registry.yarnpkg.com/@lerna/changed/-/changed-3.21.0.tgz#108e15f679bfe077af500f58248c634f1044ea0b"
+ resolved "https://registry.npmjs.org/@lerna/changed/-/changed-3.21.0.tgz"
integrity sha512-hzqoyf8MSHVjZp0gfJ7G8jaz+++mgXYiNs9iViQGA8JlN/dnWLI5sWDptEH3/B30Izo+fdVz0S0s7ydVE3pWIw==
dependencies:
"@lerna/collect-updates" "3.20.0"
@@ -170,7 +1097,7 @@
"@lerna/check-working-tree@3.16.5":
version "3.16.5"
- resolved "https://registry.yarnpkg.com/@lerna/check-working-tree/-/check-working-tree-3.16.5.tgz#b4f8ae61bb4523561dfb9f8f8d874dd46bb44baa"
+ resolved "https://registry.npmjs.org/@lerna/check-working-tree/-/check-working-tree-3.16.5.tgz"
integrity sha512-xWjVBcuhvB8+UmCSb5tKVLB5OuzSpw96WEhS2uz6hkWVa/Euh1A0/HJwn2cemyK47wUrCQXtczBUiqnq9yX5VQ==
dependencies:
"@lerna/collect-uncommitted" "3.16.5"
@@ -179,7 +1106,7 @@
"@lerna/child-process@3.16.5":
version "3.16.5"
- resolved "https://registry.yarnpkg.com/@lerna/child-process/-/child-process-3.16.5.tgz#38fa3c18064aa4ac0754ad80114776a7b36a69b2"
+ resolved "https://registry.npmjs.org/@lerna/child-process/-/child-process-3.16.5.tgz"
integrity sha512-vdcI7mzei9ERRV4oO8Y1LHBZ3A5+ampRKg1wq5nutLsUA4mEBN6H7JqjWOMY9xZemv6+kATm2ofjJ3lW5TszQg==
dependencies:
chalk "^2.3.1"
@@ -188,7 +1115,7 @@
"@lerna/clean@3.21.0":
version "3.21.0"
- resolved "https://registry.yarnpkg.com/@lerna/clean/-/clean-3.21.0.tgz#c0b46b5300cc3dae2cda3bec14b803082da3856d"
+ resolved "https://registry.npmjs.org/@lerna/clean/-/clean-3.21.0.tgz"
integrity sha512-b/L9l+MDgE/7oGbrav6rG8RTQvRiZLO1zTcG17zgJAAuhlsPxJExMlh2DFwJEVi2les70vMhHfST3Ue1IMMjpg==
dependencies:
"@lerna/command" "3.21.0"
@@ -202,7 +1129,7 @@
"@lerna/cli@3.18.5":
version "3.18.5"
- resolved "https://registry.yarnpkg.com/@lerna/cli/-/cli-3.18.5.tgz#c90c461542fcd35b6d5b015a290fb0dbfb41d242"
+ resolved "https://registry.npmjs.org/@lerna/cli/-/cli-3.18.5.tgz"
integrity sha512-erkbxkj9jfc89vVs/jBLY/fM0I80oLmJkFUV3Q3wk9J3miYhP14zgVEBsPZY68IZlEjT6T3Xlq2xO1AVaatHsA==
dependencies:
"@lerna/global-options" "3.13.0"
@@ -212,7 +1139,7 @@
"@lerna/collect-uncommitted@3.16.5":
version "3.16.5"
- resolved "https://registry.yarnpkg.com/@lerna/collect-uncommitted/-/collect-uncommitted-3.16.5.tgz#a494d61aac31cdc7aec4bbe52c96550274132e63"
+ resolved "https://registry.npmjs.org/@lerna/collect-uncommitted/-/collect-uncommitted-3.16.5.tgz"
integrity sha512-ZgqnGwpDZiWyzIQVZtQaj9tRizsL4dUOhuOStWgTAw1EMe47cvAY2kL709DzxFhjr6JpJSjXV5rZEAeU3VE0Hg==
dependencies:
"@lerna/child-process" "3.16.5"
@@ -222,7 +1149,7 @@
"@lerna/collect-updates@3.20.0":
version "3.20.0"
- resolved "https://registry.yarnpkg.com/@lerna/collect-updates/-/collect-updates-3.20.0.tgz#62f9d76ba21a25b7d9fbf31c02de88744a564bd1"
+ resolved "https://registry.npmjs.org/@lerna/collect-updates/-/collect-updates-3.20.0.tgz"
integrity sha512-qBTVT5g4fupVhBFuY4nI/3FSJtQVcDh7/gEPOpRxoXB/yCSnT38MFHXWl+y4einLciCjt/+0x6/4AG80fjay2Q==
dependencies:
"@lerna/child-process" "3.16.5"
@@ -233,7 +1160,7 @@
"@lerna/command@3.21.0":
version "3.21.0"
- resolved "https://registry.yarnpkg.com/@lerna/command/-/command-3.21.0.tgz#9a2383759dc7b700dacfa8a22b2f3a6e190121f7"
+ resolved "https://registry.npmjs.org/@lerna/command/-/command-3.21.0.tgz"
integrity sha512-T2bu6R8R3KkH5YoCKdutKv123iUgUbW8efVjdGCDnCMthAQzoentOJfDeodBwn0P2OqCl3ohsiNVtSn9h78fyQ==
dependencies:
"@lerna/child-process" "3.16.5"
@@ -249,7 +1176,7 @@
"@lerna/conventional-commits@3.22.0":
version "3.22.0"
- resolved "https://registry.yarnpkg.com/@lerna/conventional-commits/-/conventional-commits-3.22.0.tgz#2798f4881ee2ef457bdae027ab7d0bf0af6f1e09"
+ resolved "https://registry.npmjs.org/@lerna/conventional-commits/-/conventional-commits-3.22.0.tgz"
integrity sha512-z4ZZk1e8Mhz7+IS8NxHr64wyklHctCJyWpJKEZZPJiLFJ8yKto/x38O80R10pIzC0rr8Sy/OsjSH4bl0TbbgqA==
dependencies:
"@lerna/validation-error" "3.13.0"
@@ -266,7 +1193,7 @@
"@lerna/create-symlink@3.16.2":
version "3.16.2"
- resolved "https://registry.yarnpkg.com/@lerna/create-symlink/-/create-symlink-3.16.2.tgz#412cb8e59a72f5a7d9463e4e4721ad2070149967"
+ resolved "https://registry.npmjs.org/@lerna/create-symlink/-/create-symlink-3.16.2.tgz"
integrity sha512-pzXIJp6av15P325sgiIRpsPXLFmkisLhMBCy4764d+7yjf2bzrJ4gkWVMhsv4AdF0NN3OyZ5jjzzTtLNqfR+Jw==
dependencies:
"@zkochan/cmd-shim" "^3.1.0"
@@ -275,7 +1202,7 @@
"@lerna/create@3.22.0":
version "3.22.0"
- resolved "https://registry.yarnpkg.com/@lerna/create/-/create-3.22.0.tgz#d6bbd037c3dc5b425fe5f6d1b817057c278f7619"
+ resolved "https://registry.npmjs.org/@lerna/create/-/create-3.22.0.tgz"
integrity sha512-MdiQQzCcB4E9fBF1TyMOaAEz9lUjIHp1Ju9H7f3lXze5JK6Fl5NYkouAvsLgY6YSIhXMY8AHW2zzXeBDY4yWkw==
dependencies:
"@evocateur/pacote" "^9.6.3"
@@ -299,7 +1226,7 @@
"@lerna/describe-ref@3.16.5":
version "3.16.5"
- resolved "https://registry.yarnpkg.com/@lerna/describe-ref/-/describe-ref-3.16.5.tgz#a338c25aaed837d3dc70b8a72c447c5c66346ac0"
+ resolved "https://registry.npmjs.org/@lerna/describe-ref/-/describe-ref-3.16.5.tgz"
integrity sha512-c01+4gUF0saOOtDBzbLMFOTJDHTKbDFNErEY6q6i9QaXuzy9LNN62z+Hw4acAAZuJQhrVWncVathcmkkjvSVGw==
dependencies:
"@lerna/child-process" "3.16.5"
@@ -307,7 +1234,7 @@
"@lerna/diff@3.21.0":
version "3.21.0"
- resolved "https://registry.yarnpkg.com/@lerna/diff/-/diff-3.21.0.tgz#e6df0d8b9916167ff5a49fcb02ac06424280a68d"
+ resolved "https://registry.npmjs.org/@lerna/diff/-/diff-3.21.0.tgz"
integrity sha512-5viTR33QV3S7O+bjruo1SaR40m7F2aUHJaDAC7fL9Ca6xji+aw1KFkpCtVlISS0G8vikUREGMJh+c/VMSc8Usw==
dependencies:
"@lerna/child-process" "3.16.5"
@@ -317,7 +1244,7 @@
"@lerna/exec@3.21.0":
version "3.21.0"
- resolved "https://registry.yarnpkg.com/@lerna/exec/-/exec-3.21.0.tgz#17f07533893cb918a17b41bcc566dc437016db26"
+ resolved "https://registry.npmjs.org/@lerna/exec/-/exec-3.21.0.tgz"
integrity sha512-iLvDBrIE6rpdd4GIKTY9mkXyhwsJ2RvQdB9ZU+/NhR3okXfqKc6py/24tV111jqpXTtZUW6HNydT4dMao2hi1Q==
dependencies:
"@lerna/child-process" "3.16.5"
@@ -330,7 +1257,7 @@
"@lerna/filter-options@3.20.0":
version "3.20.0"
- resolved "https://registry.yarnpkg.com/@lerna/filter-options/-/filter-options-3.20.0.tgz#0f0f5d5a4783856eece4204708cc902cbc8af59b"
+ resolved "https://registry.npmjs.org/@lerna/filter-options/-/filter-options-3.20.0.tgz"
integrity sha512-bmcHtvxn7SIl/R9gpiNMVG7yjx7WyT0HSGw34YVZ9B+3xF/83N3r5Rgtjh4hheLZ+Q91Or0Jyu5O3Nr+AwZe2g==
dependencies:
"@lerna/collect-updates" "3.20.0"
@@ -341,7 +1268,7 @@
"@lerna/filter-packages@3.18.0":
version "3.18.0"
- resolved "https://registry.yarnpkg.com/@lerna/filter-packages/-/filter-packages-3.18.0.tgz#6a7a376d285208db03a82958cfb8172e179b4e70"
+ resolved "https://registry.npmjs.org/@lerna/filter-packages/-/filter-packages-3.18.0.tgz"
integrity sha512-6/0pMM04bCHNATIOkouuYmPg6KH3VkPCIgTfQmdkPJTullERyEQfNUKikrefjxo1vHOoCACDpy65JYyKiAbdwQ==
dependencies:
"@lerna/validation-error" "3.13.0"
@@ -350,14 +1277,14 @@
"@lerna/get-npm-exec-opts@3.13.0":
version "3.13.0"
- resolved "https://registry.yarnpkg.com/@lerna/get-npm-exec-opts/-/get-npm-exec-opts-3.13.0.tgz#d1b552cb0088199fc3e7e126f914e39a08df9ea5"
+ resolved "https://registry.npmjs.org/@lerna/get-npm-exec-opts/-/get-npm-exec-opts-3.13.0.tgz"
integrity sha512-Y0xWL0rg3boVyJk6An/vurKzubyJKtrxYv2sj4bB8Mc5zZ3tqtv0ccbOkmkXKqbzvNNF7VeUt1OJ3DRgtC/QZw==
dependencies:
npmlog "^4.1.2"
"@lerna/get-packed@3.16.0":
version "3.16.0"
- resolved "https://registry.yarnpkg.com/@lerna/get-packed/-/get-packed-3.16.0.tgz#1b316b706dcee86c7baa55e50b087959447852ff"
+ resolved "https://registry.npmjs.org/@lerna/get-packed/-/get-packed-3.16.0.tgz"
integrity sha512-AjsFiaJzo1GCPnJUJZiTW6J1EihrPkc2y3nMu6m3uWFxoleklsSCyImumzVZJssxMi3CPpztj8LmADLedl9kXw==
dependencies:
fs-extra "^8.1.0"
@@ -366,7 +1293,7 @@
"@lerna/github-client@3.22.0":
version "3.22.0"
- resolved "https://registry.yarnpkg.com/@lerna/github-client/-/github-client-3.22.0.tgz#5d816aa4f76747ed736ae64ff962b8f15c354d95"
+ resolved "https://registry.npmjs.org/@lerna/github-client/-/github-client-3.22.0.tgz"
integrity sha512-O/GwPW+Gzr3Eb5bk+nTzTJ3uv+jh5jGho9BOqKlajXaOkMYGBELEAqV5+uARNGWZFvYAiF4PgqHb6aCUu7XdXg==
dependencies:
"@lerna/child-process" "3.16.5"
@@ -377,7 +1304,7 @@
"@lerna/gitlab-client@3.15.0":
version "3.15.0"
- resolved "https://registry.yarnpkg.com/@lerna/gitlab-client/-/gitlab-client-3.15.0.tgz#91f4ec8c697b5ac57f7f25bd50fe659d24aa96a6"
+ resolved "https://registry.npmjs.org/@lerna/gitlab-client/-/gitlab-client-3.15.0.tgz"
integrity sha512-OsBvRSejHXUBMgwWQqNoioB8sgzL/Pf1pOUhHKtkiMl6aAWjklaaq5HPMvTIsZPfS6DJ9L5OK2GGZuooP/5c8Q==
dependencies:
node-fetch "^2.5.0"
@@ -386,12 +1313,12 @@
"@lerna/global-options@3.13.0":
version "3.13.0"
- resolved "https://registry.yarnpkg.com/@lerna/global-options/-/global-options-3.13.0.tgz#217662290db06ad9cf2c49d8e3100ee28eaebae1"
+ resolved "https://registry.npmjs.org/@lerna/global-options/-/global-options-3.13.0.tgz"
integrity sha512-SlZvh1gVRRzYLVluz9fryY1nJpZ0FHDGB66U9tFfvnnxmueckRQxLopn3tXj3NU1kc3QANT2I5BsQkOqZ4TEFQ==
"@lerna/has-npm-version@3.16.5":
version "3.16.5"
- resolved "https://registry.yarnpkg.com/@lerna/has-npm-version/-/has-npm-version-3.16.5.tgz#ab83956f211d8923ea6afe9b979b38cc73b15326"
+ resolved "https://registry.npmjs.org/@lerna/has-npm-version/-/has-npm-version-3.16.5.tgz"
integrity sha512-WL7LycR9bkftyqbYop5rEGJ9sRFIV55tSGmbN1HLrF9idwOCD7CLrT64t235t3t4O5gehDnwKI5h2U3oxTrF8Q==
dependencies:
"@lerna/child-process" "3.16.5"
@@ -399,7 +1326,7 @@
"@lerna/import@3.22.0":
version "3.22.0"
- resolved "https://registry.yarnpkg.com/@lerna/import/-/import-3.22.0.tgz#1a5f0394f38e23c4f642a123e5e1517e70d068d2"
+ resolved "https://registry.npmjs.org/@lerna/import/-/import-3.22.0.tgz"
integrity sha512-uWOlexasM5XR6tXi4YehODtH9Y3OZrFht3mGUFFT3OIl2s+V85xIGFfqFGMTipMPAGb2oF1UBLL48kR43hRsOg==
dependencies:
"@lerna/child-process" "3.16.5"
@@ -413,7 +1340,7 @@
"@lerna/info@3.21.0":
version "3.21.0"
- resolved "https://registry.yarnpkg.com/@lerna/info/-/info-3.21.0.tgz#76696b676fdb0f35d48c83c63c1e32bb5e37814f"
+ resolved "https://registry.npmjs.org/@lerna/info/-/info-3.21.0.tgz"
integrity sha512-0XDqGYVBgWxUquFaIptW2bYSIu6jOs1BtkvRTWDDhw4zyEdp6q4eaMvqdSap1CG+7wM5jeLCi6z94wS0AuiuwA==
dependencies:
"@lerna/command" "3.21.0"
@@ -422,7 +1349,7 @@
"@lerna/init@3.21.0":
version "3.21.0"
- resolved "https://registry.yarnpkg.com/@lerna/init/-/init-3.21.0.tgz#1e810934dc8bf4e5386c031041881d3b4096aa5c"
+ resolved "https://registry.npmjs.org/@lerna/init/-/init-3.21.0.tgz"
integrity sha512-6CM0z+EFUkFfurwdJCR+LQQF6MqHbYDCBPyhu/d086LRf58GtYZYj49J8mKG9ktayp/TOIxL/pKKjgLD8QBPOg==
dependencies:
"@lerna/child-process" "3.16.5"
@@ -433,7 +1360,7 @@
"@lerna/link@3.21.0":
version "3.21.0"
- resolved "https://registry.yarnpkg.com/@lerna/link/-/link-3.21.0.tgz#8be68ff0ccee104b174b5bbd606302c2f06e9d9b"
+ resolved "https://registry.npmjs.org/@lerna/link/-/link-3.21.0.tgz"
integrity sha512-tGu9GxrX7Ivs+Wl3w1+jrLi1nQ36kNI32dcOssij6bg0oZ2M2MDEFI9UF2gmoypTaN9uO5TSsjCFS7aR79HbdQ==
dependencies:
"@lerna/command" "3.21.0"
@@ -444,7 +1371,7 @@
"@lerna/list@3.21.0":
version "3.21.0"
- resolved "https://registry.yarnpkg.com/@lerna/list/-/list-3.21.0.tgz#42f76fafa56dea13b691ec8cab13832691d61da2"
+ resolved "https://registry.npmjs.org/@lerna/list/-/list-3.21.0.tgz"
integrity sha512-KehRjE83B1VaAbRRkRy6jLX1Cin8ltsrQ7FHf2bhwhRHK0S54YuA6LOoBnY/NtA8bHDX/Z+G5sMY78X30NS9tg==
dependencies:
"@lerna/command" "3.21.0"
@@ -454,7 +1381,7 @@
"@lerna/listable@3.18.5":
version "3.18.5"
- resolved "https://registry.yarnpkg.com/@lerna/listable/-/listable-3.18.5.tgz#e82798405b5ed8fc51843c8ef1e7a0e497388a1a"
+ resolved "https://registry.npmjs.org/@lerna/listable/-/listable-3.18.5.tgz"
integrity sha512-Sdr3pVyaEv5A7ZkGGYR7zN+tTl2iDcinryBPvtuv20VJrXBE8wYcOks1edBTcOWsPjCE/rMP4bo1pseyk3UTsg==
dependencies:
"@lerna/query-graph" "3.18.5"
@@ -463,7 +1390,7 @@
"@lerna/log-packed@3.16.0":
version "3.16.0"
- resolved "https://registry.yarnpkg.com/@lerna/log-packed/-/log-packed-3.16.0.tgz#f83991041ee77b2495634e14470b42259fd2bc16"
+ resolved "https://registry.npmjs.org/@lerna/log-packed/-/log-packed-3.16.0.tgz"
integrity sha512-Fp+McSNBV/P2mnLUYTaSlG8GSmpXM7krKWcllqElGxvAqv6chk2K3c2k80MeVB4WvJ9tRjUUf+i7HUTiQ9/ckQ==
dependencies:
byte-size "^5.0.1"
@@ -473,7 +1400,7 @@
"@lerna/npm-conf@3.16.0":
version "3.16.0"
- resolved "https://registry.yarnpkg.com/@lerna/npm-conf/-/npm-conf-3.16.0.tgz#1c10a89ae2f6c2ee96962557738685300d376827"
+ resolved "https://registry.npmjs.org/@lerna/npm-conf/-/npm-conf-3.16.0.tgz"
integrity sha512-HbO3DUrTkCAn2iQ9+FF/eisDpWY5POQAOF1m7q//CZjdC2HSW3UYbKEGsSisFxSfaF9Z4jtrV+F/wX6qWs3CuA==
dependencies:
config-chain "^1.1.11"
@@ -481,7 +1408,7 @@
"@lerna/npm-dist-tag@3.18.5":
version "3.18.5"
- resolved "https://registry.yarnpkg.com/@lerna/npm-dist-tag/-/npm-dist-tag-3.18.5.tgz#9ef9abb7c104077b31f6fab22cc73b314d54ac55"
+ resolved "https://registry.npmjs.org/@lerna/npm-dist-tag/-/npm-dist-tag-3.18.5.tgz"
integrity sha512-xw0HDoIG6HreVsJND9/dGls1c+lf6vhu7yJoo56Sz5bvncTloYGLUppIfDHQr4ZvmPCK8rsh0euCVh2giPxzKQ==
dependencies:
"@evocateur/npm-registry-fetch" "^4.0.0"
@@ -492,7 +1419,7 @@
"@lerna/npm-install@3.16.5":
version "3.16.5"
- resolved "https://registry.yarnpkg.com/@lerna/npm-install/-/npm-install-3.16.5.tgz#d6bfdc16f81285da66515ae47924d6e278d637d3"
+ resolved "https://registry.npmjs.org/@lerna/npm-install/-/npm-install-3.16.5.tgz"
integrity sha512-hfiKk8Eku6rB9uApqsalHHTHY+mOrrHeWEs+gtg7+meQZMTS3kzv4oVp5cBZigndQr3knTLjwthT/FX4KvseFg==
dependencies:
"@lerna/child-process" "3.16.5"
@@ -505,7 +1432,7 @@
"@lerna/npm-publish@3.18.5":
version "3.18.5"
- resolved "https://registry.yarnpkg.com/@lerna/npm-publish/-/npm-publish-3.18.5.tgz#240e4039959fd9816b49c5b07421e11b5cb000af"
+ resolved "https://registry.npmjs.org/@lerna/npm-publish/-/npm-publish-3.18.5.tgz"
integrity sha512-3etLT9+2L8JAx5F8uf7qp6iAtOLSMj+ZYWY6oUgozPi/uLqU0/gsMsEXh3F0+YVW33q0M61RpduBoAlOOZnaTg==
dependencies:
"@evocateur/libnpmpublish" "^1.2.2"
@@ -520,7 +1447,7 @@
"@lerna/npm-run-script@3.16.5":
version "3.16.5"
- resolved "https://registry.yarnpkg.com/@lerna/npm-run-script/-/npm-run-script-3.16.5.tgz#9c2ec82453a26c0b46edc0bb7c15816c821f5c15"
+ resolved "https://registry.npmjs.org/@lerna/npm-run-script/-/npm-run-script-3.16.5.tgz"
integrity sha512-1asRi+LjmVn3pMjEdpqKJZFT/3ZNpb+VVeJMwrJaV/3DivdNg7XlPK9LTrORuKU4PSvhdEZvJmSlxCKyDpiXsQ==
dependencies:
"@lerna/child-process" "3.16.5"
@@ -529,7 +1456,7 @@
"@lerna/otplease@3.18.5":
version "3.18.5"
- resolved "https://registry.yarnpkg.com/@lerna/otplease/-/otplease-3.18.5.tgz#b77b8e760b40abad9f7658d988f3ea77d4fd0231"
+ resolved "https://registry.npmjs.org/@lerna/otplease/-/otplease-3.18.5.tgz"
integrity sha512-S+SldXAbcXTEDhzdxYLU0ZBKuYyURP/ND2/dK6IpKgLxQYh/z4ScljPDMyKymmEvgiEJmBsPZAAPfmNPEzxjog==
dependencies:
"@lerna/prompt" "3.18.5"
@@ -537,14 +1464,14 @@
"@lerna/output@3.13.0":
version "3.13.0"
- resolved "https://registry.yarnpkg.com/@lerna/output/-/output-3.13.0.tgz#3ded7cc908b27a9872228a630d950aedae7a4989"
+ resolved "https://registry.npmjs.org/@lerna/output/-/output-3.13.0.tgz"
integrity sha512-7ZnQ9nvUDu/WD+bNsypmPG5MwZBwu86iRoiW6C1WBuXXDxM5cnIAC1m2WxHeFnjyMrYlRXM9PzOQ9VDD+C15Rg==
dependencies:
npmlog "^4.1.2"
"@lerna/pack-directory@3.16.4":
version "3.16.4"
- resolved "https://registry.yarnpkg.com/@lerna/pack-directory/-/pack-directory-3.16.4.tgz#3eae5f91bdf5acfe0384510ed53faddc4c074693"
+ resolved "https://registry.npmjs.org/@lerna/pack-directory/-/pack-directory-3.16.4.tgz"
integrity sha512-uxSF0HZeGyKaaVHz5FroDY9A5NDDiCibrbYR6+khmrhZtY0Bgn6hWq8Gswl9iIlymA+VzCbshWIMX4o2O8C8ng==
dependencies:
"@lerna/get-packed" "3.16.0"
@@ -558,7 +1485,7 @@
"@lerna/package-graph@3.18.5":
version "3.18.5"
- resolved "https://registry.yarnpkg.com/@lerna/package-graph/-/package-graph-3.18.5.tgz#c740e2ea3578d059e551633e950690831b941f6b"
+ resolved "https://registry.npmjs.org/@lerna/package-graph/-/package-graph-3.18.5.tgz"
integrity sha512-8QDrR9T+dBegjeLr+n9WZTVxUYUhIUjUgZ0gvNxUBN8S1WB9r6H5Yk56/MVaB64tA3oGAN9IIxX6w0WvTfFudA==
dependencies:
"@lerna/prerelease-id-from-version" "3.16.0"
@@ -569,7 +1496,7 @@
"@lerna/package@3.16.0":
version "3.16.0"
- resolved "https://registry.yarnpkg.com/@lerna/package/-/package-3.16.0.tgz#7e0a46e4697ed8b8a9c14d59c7f890e0d38ba13c"
+ resolved "https://registry.npmjs.org/@lerna/package/-/package-3.16.0.tgz"
integrity sha512-2lHBWpaxcBoiNVbtyLtPUuTYEaB/Z+eEqRS9duxpZs6D+mTTZMNy6/5vpEVSCBmzvdYpyqhqaYjjSLvjjr5Riw==
dependencies:
load-json-file "^5.3.0"
@@ -578,14 +1505,14 @@
"@lerna/prerelease-id-from-version@3.16.0":
version "3.16.0"
- resolved "https://registry.yarnpkg.com/@lerna/prerelease-id-from-version/-/prerelease-id-from-version-3.16.0.tgz#b24bfa789f5e1baab914d7b08baae9b7bd7d83a1"
+ resolved "https://registry.npmjs.org/@lerna/prerelease-id-from-version/-/prerelease-id-from-version-3.16.0.tgz"
integrity sha512-qZyeUyrE59uOK8rKdGn7jQz+9uOpAaF/3hbslJVFL1NqF9ELDTqjCPXivuejMX/lN4OgD6BugTO4cR7UTq/sZA==
dependencies:
semver "^6.2.0"
"@lerna/profiler@3.20.0":
version "3.20.0"
- resolved "https://registry.yarnpkg.com/@lerna/profiler/-/profiler-3.20.0.tgz#0f6dc236f4ea8f9ea5f358c6703305a4f32ad051"
+ resolved "https://registry.npmjs.org/@lerna/profiler/-/profiler-3.20.0.tgz"
integrity sha512-bh8hKxAlm6yu8WEOvbLENm42i2v9SsR4WbrCWSbsmOElx3foRnMlYk7NkGECa+U5c3K4C6GeBbwgqs54PP7Ljg==
dependencies:
figgy-pudding "^3.5.1"
@@ -595,7 +1522,7 @@
"@lerna/project@3.21.0":
version "3.21.0"
- resolved "https://registry.yarnpkg.com/@lerna/project/-/project-3.21.0.tgz#5d784d2d10c561a00f20320bcdb040997c10502d"
+ resolved "https://registry.npmjs.org/@lerna/project/-/project-3.21.0.tgz"
integrity sha512-xT1mrpET2BF11CY32uypV2GPtPVm6Hgtha7D81GQP9iAitk9EccrdNjYGt5UBYASl4CIDXBRxwmTTVGfrCx82A==
dependencies:
"@lerna/package" "3.16.0"
@@ -613,7 +1540,7 @@
"@lerna/prompt@3.18.5":
version "3.18.5"
- resolved "https://registry.yarnpkg.com/@lerna/prompt/-/prompt-3.18.5.tgz#628cd545f225887d060491ab95df899cfc5218a1"
+ resolved "https://registry.npmjs.org/@lerna/prompt/-/prompt-3.18.5.tgz"
integrity sha512-rkKj4nm1twSbBEb69+Em/2jAERK8htUuV8/xSjN0NPC+6UjzAwY52/x9n5cfmpa9lyKf/uItp7chCI7eDmNTKQ==
dependencies:
inquirer "^6.2.0"
@@ -621,7 +1548,7 @@
"@lerna/publish@3.22.1":
version "3.22.1"
- resolved "https://registry.yarnpkg.com/@lerna/publish/-/publish-3.22.1.tgz#b4f7ce3fba1e9afb28be4a1f3d88222269ba9519"
+ resolved "https://registry.npmjs.org/@lerna/publish/-/publish-3.22.1.tgz"
integrity sha512-PG9CM9HUYDreb1FbJwFg90TCBQooGjj+n/pb3gw/eH5mEDq0p8wKdLFe0qkiqUkm/Ub5C8DbVFertIo0Vd0zcw==
dependencies:
"@evocateur/libnpmaccess" "^3.1.2"
@@ -657,14 +1584,14 @@
"@lerna/pulse-till-done@3.13.0":
version "3.13.0"
- resolved "https://registry.yarnpkg.com/@lerna/pulse-till-done/-/pulse-till-done-3.13.0.tgz#c8e9ce5bafaf10d930a67d7ed0ccb5d958fe0110"
+ resolved "https://registry.npmjs.org/@lerna/pulse-till-done/-/pulse-till-done-3.13.0.tgz"
integrity sha512-1SOHpy7ZNTPulzIbargrgaJX387csN7cF1cLOGZiJQA6VqnS5eWs2CIrG8i8wmaUavj2QlQ5oEbRMVVXSsGrzA==
dependencies:
npmlog "^4.1.2"
"@lerna/query-graph@3.18.5":
version "3.18.5"
- resolved "https://registry.yarnpkg.com/@lerna/query-graph/-/query-graph-3.18.5.tgz#df4830bb5155273003bf35e8dda1c32d0927bd86"
+ resolved "https://registry.npmjs.org/@lerna/query-graph/-/query-graph-3.18.5.tgz"
integrity sha512-50Lf4uuMpMWvJ306be3oQDHrWV42nai9gbIVByPBYJuVW8dT8O8pA3EzitNYBUdLL9/qEVbrR0ry1HD7EXwtRA==
dependencies:
"@lerna/package-graph" "3.18.5"
@@ -672,7 +1599,7 @@
"@lerna/resolve-symlink@3.16.0":
version "3.16.0"
- resolved "https://registry.yarnpkg.com/@lerna/resolve-symlink/-/resolve-symlink-3.16.0.tgz#37fc7095fabdbcf317c26eb74e0d0bde8efd2386"
+ resolved "https://registry.npmjs.org/@lerna/resolve-symlink/-/resolve-symlink-3.16.0.tgz"
integrity sha512-Ibj5e7njVHNJ/NOqT4HlEgPFPtPLWsO7iu59AM5bJDcAJcR96mLZ7KGVIsS2tvaO7akMEJvt2P+ErwCdloG3jQ==
dependencies:
fs-extra "^8.1.0"
@@ -681,7 +1608,7 @@
"@lerna/rimraf-dir@3.16.5":
version "3.16.5"
- resolved "https://registry.yarnpkg.com/@lerna/rimraf-dir/-/rimraf-dir-3.16.5.tgz#04316ab5ffd2909657aaf388ea502cb8c2f20a09"
+ resolved "https://registry.npmjs.org/@lerna/rimraf-dir/-/rimraf-dir-3.16.5.tgz"
integrity sha512-bQlKmO0pXUsXoF8lOLknhyQjOZsCc0bosQDoX4lujBXSWxHVTg1VxURtWf2lUjz/ACsJVDfvHZbDm8kyBk5okA==
dependencies:
"@lerna/child-process" "3.16.5"
@@ -691,7 +1618,7 @@
"@lerna/run-lifecycle@3.16.2":
version "3.16.2"
- resolved "https://registry.yarnpkg.com/@lerna/run-lifecycle/-/run-lifecycle-3.16.2.tgz#67b288f8ea964db9ea4fb1fbc7715d5bbb0bce00"
+ resolved "https://registry.npmjs.org/@lerna/run-lifecycle/-/run-lifecycle-3.16.2.tgz"
integrity sha512-RqFoznE8rDpyyF0rOJy3+KjZCeTkO8y/OB9orPauR7G2xQ7PTdCpgo7EO6ZNdz3Al+k1BydClZz/j78gNCmL2A==
dependencies:
"@lerna/npm-conf" "3.16.0"
@@ -701,7 +1628,7 @@
"@lerna/run-topologically@3.18.5":
version "3.18.5"
- resolved "https://registry.yarnpkg.com/@lerna/run-topologically/-/run-topologically-3.18.5.tgz#3cd639da20e967d7672cb88db0f756b92f2fdfc3"
+ resolved "https://registry.npmjs.org/@lerna/run-topologically/-/run-topologically-3.18.5.tgz"
integrity sha512-6N1I+6wf4hLOnPW+XDZqwufyIQ6gqoPfHZFkfWlvTQ+Ue7CuF8qIVQ1Eddw5HKQMkxqN10thKOFfq/9NQZ4NUg==
dependencies:
"@lerna/query-graph" "3.18.5"
@@ -710,7 +1637,7 @@
"@lerna/run@3.21.0":
version "3.21.0"
- resolved "https://registry.yarnpkg.com/@lerna/run/-/run-3.21.0.tgz#2a35ec84979e4d6e42474fe148d32e5de1cac891"
+ resolved "https://registry.npmjs.org/@lerna/run/-/run-3.21.0.tgz"
integrity sha512-fJF68rT3veh+hkToFsBmUJ9MHc9yGXA7LSDvhziAojzOb0AI/jBDp6cEcDQyJ7dbnplba2Lj02IH61QUf9oW0Q==
dependencies:
"@lerna/command" "3.21.0"
@@ -725,7 +1652,7 @@
"@lerna/symlink-binary@3.17.0":
version "3.17.0"
- resolved "https://registry.yarnpkg.com/@lerna/symlink-binary/-/symlink-binary-3.17.0.tgz#8f8031b309863814883d3f009877f82e38aef45a"
+ resolved "https://registry.npmjs.org/@lerna/symlink-binary/-/symlink-binary-3.17.0.tgz"
integrity sha512-RLpy9UY6+3nT5J+5jkM5MZyMmjNHxZIZvXLV+Q3MXrf7Eaa1hNqyynyj4RO95fxbS+EZc4XVSk25DGFQbcRNSQ==
dependencies:
"@lerna/create-symlink" "3.16.2"
@@ -735,7 +1662,7 @@
"@lerna/symlink-dependencies@3.17.0":
version "3.17.0"
- resolved "https://registry.yarnpkg.com/@lerna/symlink-dependencies/-/symlink-dependencies-3.17.0.tgz#48d6360e985865a0e56cd8b51b308a526308784a"
+ resolved "https://registry.npmjs.org/@lerna/symlink-dependencies/-/symlink-dependencies-3.17.0.tgz"
integrity sha512-KmjU5YT1bpt6coOmdFueTJ7DFJL4H1w5eF8yAQ2zsGNTtZ+i5SGFBWpb9AQaw168dydc3s4eu0W0Sirda+F59Q==
dependencies:
"@lerna/create-symlink" "3.16.2"
@@ -748,19 +1675,19 @@
"@lerna/timer@3.13.0":
version "3.13.0"
- resolved "https://registry.yarnpkg.com/@lerna/timer/-/timer-3.13.0.tgz#bcd0904551db16e08364d6c18e5e2160fc870781"
+ resolved "https://registry.npmjs.org/@lerna/timer/-/timer-3.13.0.tgz"
integrity sha512-RHWrDl8U4XNPqY5MQHkToWS9jHPnkLZEt5VD+uunCKTfzlxGnRCr3/zVr8VGy/uENMYpVP3wJa4RKGY6M0vkRw==
"@lerna/validation-error@3.13.0":
version "3.13.0"
- resolved "https://registry.yarnpkg.com/@lerna/validation-error/-/validation-error-3.13.0.tgz#c86b8f07c5ab9539f775bd8a54976e926f3759c3"
+ resolved "https://registry.npmjs.org/@lerna/validation-error/-/validation-error-3.13.0.tgz"
integrity sha512-SiJP75nwB8GhgwLKQfdkSnDufAaCbkZWJqEDlKOUPUvVOplRGnfL+BPQZH5nvq2BYSRXsksXWZ4UHVnQZI/HYA==
dependencies:
npmlog "^4.1.2"
"@lerna/version@3.22.1":
version "3.22.1"
- resolved "https://registry.yarnpkg.com/@lerna/version/-/version-3.22.1.tgz#9805a9247a47ee62d6b81bd9fa5fb728b24b59e2"
+ resolved "https://registry.npmjs.org/@lerna/version/-/version-3.22.1.tgz"
integrity sha512-PSGt/K1hVqreAFoi3zjD0VEDupQ2WZVlVIwesrE5GbrL2BjXowjCsTDPqblahDUPy0hp6h7E2kG855yLTp62+g==
dependencies:
"@lerna/check-working-tree" "3.16.5"
@@ -792,7 +1719,7 @@
"@lerna/write-log-file@3.13.0":
version "3.13.0"
- resolved "https://registry.yarnpkg.com/@lerna/write-log-file/-/write-log-file-3.13.0.tgz#b78d9e4cfc1349a8be64d91324c4c8199e822a26"
+ resolved "https://registry.npmjs.org/@lerna/write-log-file/-/write-log-file-3.13.0.tgz"
integrity sha512-RibeMnDPvlL8bFYW5C8cs4mbI3AHfQef73tnJCQ/SgrXZHehmHnsyWUiE7qDQCAo+B1RfTapvSyFF69iPj326A==
dependencies:
npmlog "^4.1.2"
@@ -800,48 +1727,45 @@
"@mrmlnc/readdir-enhanced@^2.2.1":
version "2.2.1"
- resolved "https://registry.yarnpkg.com/@mrmlnc/readdir-enhanced/-/readdir-enhanced-2.2.1.tgz#524af240d1a360527b730475ecfa1344aa540dde"
+ resolved "https://registry.npmjs.org/@mrmlnc/readdir-enhanced/-/readdir-enhanced-2.2.1.tgz"
integrity sha512-bPHp6Ji8b41szTOcaP63VlnbbO5Ny6dwAATtY6JTjh5N2OLrb5Qk/Th5cRkRQhkWCt+EJsYrNB0MiL+Gpn6e3g==
dependencies:
call-me-maybe "^1.0.1"
glob-to-regexp "^0.3.0"
-"@nodelib/fs.scandir@2.1.3":
- version "2.1.3"
- resolved "https://registry.yarnpkg.com/@nodelib/fs.scandir/-/fs.scandir-2.1.3.tgz#3a582bdb53804c6ba6d146579c46e52130cf4a3b"
- integrity sha512-eGmwYQn3gxo4r7jdQnkrrN6bY478C3P+a/y72IJukF8LjB6ZHeB3c+Ehacj3sYeSmUXGlnA67/PmbM9CVwL7Dw==
- dependencies:
- "@nodelib/fs.stat" "2.0.3"
- run-parallel "^1.1.9"
-
-"@nodelib/fs.stat@2.0.3", "@nodelib/fs.stat@^2.0.2":
- version "2.0.3"
- resolved "https://registry.yarnpkg.com/@nodelib/fs.stat/-/fs.stat-2.0.3.tgz#34dc5f4cabbc720f4e60f75a747e7ecd6c175bd3"
- integrity sha512-bQBFruR2TAwoevBEd/NWMoAAtNGzTRgdrqnYCc7dhzfoNvqPzLyqlEQnzZ3kVnNrSp25iyxE00/3h2fqGAGArA==
-
"@nodelib/fs.stat@^1.1.2":
version "1.1.3"
- resolved "https://registry.yarnpkg.com/@nodelib/fs.stat/-/fs.stat-1.1.3.tgz#2b5a3ab3f918cca48a8c754c08168e3f03eba61b"
+ resolved "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-1.1.3.tgz"
integrity sha512-shAmDyaQC4H92APFoIaVDHCx5bStIocgvbwQyxPRrbUY20V1EYTbSDchWbuwlMG3V17cprZhA6+78JfB+3DTPw==
-"@nodelib/fs.walk@^1.2.3":
- version "1.2.4"
- resolved "https://registry.yarnpkg.com/@nodelib/fs.walk/-/fs.walk-1.2.4.tgz#011b9202a70a6366e436ca5c065844528ab04976"
- integrity sha512-1V9XOY4rDW0rehzbrcqAmHnz8e7SKvX27gh8Gt2WgB0+pdzdiLV83p72kZPU+jvMbS1qU5mauP2iOvO8rhmurQ==
+"@npmcli/agent@^3.0.0":
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/@npmcli/agent/-/agent-3.0.0.tgz#1685b1fbd4a1b7bb4f930cbb68ce801edfe7aa44"
+ integrity sha512-S79NdEgDQd/NGCay6TCoVzXSj74skRZIKJcpJjC5lOq34SZzyI6MqtiiWoiVWoVrTcGjNeC4ipbh1VIHlpfF5Q==
dependencies:
- "@nodelib/fs.scandir" "2.1.3"
- fastq "^1.6.0"
+ agent-base "^7.1.0"
+ http-proxy-agent "^7.0.0"
+ https-proxy-agent "^7.0.1"
+ lru-cache "^10.0.1"
+ socks-proxy-agent "^8.0.3"
+
+"@npmcli/fs@^4.0.0":
+ version "4.0.0"
+ resolved "https://registry.yarnpkg.com/@npmcli/fs/-/fs-4.0.0.tgz#a1eb1aeddefd2a4a347eca0fab30bc62c0e1c0f2"
+ integrity sha512-/xGlezI6xfGO9NwuJlnwz/K14qD1kCSAGtacBHnGzeAIuJGazcp45KP5NuyARXoKb7cwulAGWVsbeSxdG/cb0Q==
+ dependencies:
+ semver "^7.3.5"
"@octokit/auth-token@^2.4.0":
version "2.4.2"
- resolved "https://registry.yarnpkg.com/@octokit/auth-token/-/auth-token-2.4.2.tgz#10d0ae979b100fa6b72fa0e8e63e27e6d0dbff8a"
+ resolved "https://registry.npmjs.org/@octokit/auth-token/-/auth-token-2.4.2.tgz"
integrity sha512-jE/lE/IKIz2v1+/P0u4fJqv0kYwXOTujKemJMFr6FeopsxlIK3+wKDCJGnysg81XID5TgZQbIfuJ5J0lnTiuyQ==
dependencies:
"@octokit/types" "^5.0.0"
"@octokit/endpoint@^6.0.1":
version "6.0.8"
- resolved "https://registry.yarnpkg.com/@octokit/endpoint/-/endpoint-6.0.8.tgz#91b07e236fdb69929c678c6439f7a560dc6058ac"
+ resolved "https://registry.npmjs.org/@octokit/endpoint/-/endpoint-6.0.8.tgz"
integrity sha512-MuRrgv+bM4Q+e9uEvxAB/Kf+Sj0O2JAOBA131uo1o6lgdq1iS8ejKwtqHgdfY91V3rN9R/hdGKFiQYMzVzVBEQ==
dependencies:
"@octokit/types" "^5.0.0"
@@ -850,24 +1774,24 @@
"@octokit/plugin-enterprise-rest@^6.0.1":
version "6.0.1"
- resolved "https://registry.yarnpkg.com/@octokit/plugin-enterprise-rest/-/plugin-enterprise-rest-6.0.1.tgz#e07896739618dab8da7d4077c658003775f95437"
+ resolved "https://registry.npmjs.org/@octokit/plugin-enterprise-rest/-/plugin-enterprise-rest-6.0.1.tgz"
integrity sha512-93uGjlhUD+iNg1iWhUENAtJata6w5nE+V4urXOAlIXdco6xNZtUSfYY8dzp3Udy74aqO/B5UZL80x/YMa5PKRw==
"@octokit/plugin-paginate-rest@^1.1.1":
version "1.1.2"
- resolved "https://registry.yarnpkg.com/@octokit/plugin-paginate-rest/-/plugin-paginate-rest-1.1.2.tgz#004170acf8c2be535aba26727867d692f7b488fc"
+ resolved "https://registry.npmjs.org/@octokit/plugin-paginate-rest/-/plugin-paginate-rest-1.1.2.tgz"
integrity sha512-jbsSoi5Q1pj63sC16XIUboklNw+8tL9VOnJsWycWYR78TKss5PVpIPb1TUUcMQ+bBh7cY579cVAWmf5qG+dw+Q==
dependencies:
"@octokit/types" "^2.0.1"
"@octokit/plugin-request-log@^1.0.0":
version "1.0.0"
- resolved "https://registry.yarnpkg.com/@octokit/plugin-request-log/-/plugin-request-log-1.0.0.tgz#eef87a431300f6148c39a7f75f8cfeb218b2547e"
+ resolved "https://registry.npmjs.org/@octokit/plugin-request-log/-/plugin-request-log-1.0.0.tgz"
integrity sha512-ywoxP68aOT3zHCLgWZgwUJatiENeHE7xJzYjfz8WI0goynp96wETBF+d95b8g/uL4QmS6owPVlaxiz3wyMAzcw==
"@octokit/plugin-rest-endpoint-methods@2.4.0":
version "2.4.0"
- resolved "https://registry.yarnpkg.com/@octokit/plugin-rest-endpoint-methods/-/plugin-rest-endpoint-methods-2.4.0.tgz#3288ecf5481f68c494dd0602fc15407a59faf61e"
+ resolved "https://registry.npmjs.org/@octokit/plugin-rest-endpoint-methods/-/plugin-rest-endpoint-methods-2.4.0.tgz"
integrity sha512-EZi/AWhtkdfAYi01obpX0DF7U6b1VRr30QNQ5xSFPITMdLSfhcBqjamE3F+sKcxPbD7eZuMHu3Qkk2V+JGxBDQ==
dependencies:
"@octokit/types" "^2.0.1"
@@ -875,7 +1799,7 @@
"@octokit/request-error@^1.0.2":
version "1.2.1"
- resolved "https://registry.yarnpkg.com/@octokit/request-error/-/request-error-1.2.1.tgz#ede0714c773f32347576c25649dc013ae6b31801"
+ resolved "https://registry.npmjs.org/@octokit/request-error/-/request-error-1.2.1.tgz"
integrity sha512-+6yDyk1EES6WK+l3viRDElw96MvwfJxCt45GvmjDUKWjYIb3PJZQkq3i46TwGwoPD4h8NmTrENmtyA1FwbmhRA==
dependencies:
"@octokit/types" "^2.0.0"
@@ -884,7 +1808,7 @@
"@octokit/request-error@^2.0.0":
version "2.0.2"
- resolved "https://registry.yarnpkg.com/@octokit/request-error/-/request-error-2.0.2.tgz#0e76b83f5d8fdda1db99027ea5f617c2e6ba9ed0"
+ resolved "https://registry.npmjs.org/@octokit/request-error/-/request-error-2.0.2.tgz"
integrity sha512-2BrmnvVSV1MXQvEkrb9zwzP0wXFNbPJij922kYBTLIlIafukrGOb+ABBT2+c6wZiuyWDH1K1zmjGQ0toN/wMWw==
dependencies:
"@octokit/types" "^5.0.1"
@@ -893,7 +1817,7 @@
"@octokit/request@^5.2.0":
version "5.4.9"
- resolved "https://registry.yarnpkg.com/@octokit/request/-/request-5.4.9.tgz#0a46f11b82351b3416d3157261ad9b1558c43365"
+ resolved "https://registry.npmjs.org/@octokit/request/-/request-5.4.9.tgz"
integrity sha512-CzwVvRyimIM1h2n9pLVYfTDmX9m+KHSgCpqPsY8F1NdEK8IaWqXhSBXsdjOBFZSpEcxNEeg4p0UO9cQ8EnOCLA==
dependencies:
"@octokit/endpoint" "^6.0.1"
@@ -907,7 +1831,7 @@
"@octokit/rest@^16.28.4":
version "16.43.2"
- resolved "https://registry.yarnpkg.com/@octokit/rest/-/rest-16.43.2.tgz#c53426f1e1d1044dee967023e3279c50993dd91b"
+ resolved "https://registry.npmjs.org/@octokit/rest/-/rest-16.43.2.tgz"
integrity sha512-ngDBevLbBTFfrHZeiS7SAMAZ6ssuVmXuya+F/7RaVvlysgGa1JKJkKWY+jV6TCJYcW0OALfJ7nTIGXcBXzycfQ==
dependencies:
"@octokit/auth-token" "^2.4.0"
@@ -929,263 +1853,695 @@
"@octokit/types@^2.0.0", "@octokit/types@^2.0.1":
version "2.16.2"
- resolved "https://registry.yarnpkg.com/@octokit/types/-/types-2.16.2.tgz#4c5f8da3c6fecf3da1811aef678fda03edac35d2"
+ resolved "https://registry.npmjs.org/@octokit/types/-/types-2.16.2.tgz"
integrity sha512-O75k56TYvJ8WpAakWwYRN8Bgu60KrmX0z1KqFp1kNiFNkgW+JW+9EBKZ+S33PU6SLvbihqd+3drvPxKK68Ee8Q==
dependencies:
"@types/node" ">= 8"
"@octokit/types@^5.0.0", "@octokit/types@^5.0.1":
version "5.5.0"
- resolved "https://registry.yarnpkg.com/@octokit/types/-/types-5.5.0.tgz#e5f06e8db21246ca102aa28444cdb13ae17a139b"
+ resolved "https://registry.npmjs.org/@octokit/types/-/types-5.5.0.tgz"
integrity sha512-UZ1pErDue6bZNjYOotCNveTXArOMZQFG6hKJfOnGnulVCMcVVi7YIIuuR4WfBhjo7zgpmzn/BkPDnUXtNx+PcQ==
dependencies:
"@types/node" ">= 8"
+"@pkgjs/parseargs@^0.11.0":
+ version "0.11.0"
+ resolved "https://registry.yarnpkg.com/@pkgjs/parseargs/-/parseargs-0.11.0.tgz#a77ea742fab25775145434eb1d2328cf5013ac33"
+ integrity sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==
+
+"@pkgr/core@^0.2.9":
+ version "0.2.9"
+ resolved "https://registry.yarnpkg.com/@pkgr/core/-/core-0.2.9.tgz#d229a7b7f9dac167a156992ef23c7f023653f53b"
+ integrity sha512-QNqXyfVS2wm9hweSYD2O7F0G06uurj9kZ96TRQE5Y9hU7+tgdZwIkbAKc5Ocy1HxEY2kuDQa6cQ1WRs/O5LFKA==
+
+"@rollup/plugin-commonjs@^28.0.3":
+ version "28.0.3"
+ resolved "https://registry.yarnpkg.com/@rollup/plugin-commonjs/-/plugin-commonjs-28.0.3.tgz#44c2cc7c955c6113b96696b55e6bc2446bd67913"
+ integrity sha512-pyltgilam1QPdn+Zd9gaCfOLcnjMEJ9gV+bTw6/r73INdvzf1ah9zLIJBm+kW7R6IUFIQ1YO+VqZtYxZNWFPEQ==
+ dependencies:
+ "@rollup/pluginutils" "^5.0.1"
+ commondir "^1.0.1"
+ estree-walker "^2.0.2"
+ fdir "^6.2.0"
+ is-reference "1.2.1"
+ magic-string "^0.30.3"
+ picomatch "^4.0.2"
+
+"@rollup/plugin-node-resolve@^16.0.1":
+ version "16.0.1"
+ resolved "https://registry.yarnpkg.com/@rollup/plugin-node-resolve/-/plugin-node-resolve-16.0.1.tgz#2fc6b54ca3d77e12f3fb45b2a55b50720de4c95d"
+ integrity sha512-tk5YCxJWIG81umIvNkSod2qK5KyQW19qcBF/B78n1bjtOON6gzKoVeSzAE8yHCZEDmqkHKkxplExA8KzdJLJpA==
+ dependencies:
+ "@rollup/pluginutils" "^5.0.1"
+ "@types/resolve" "1.20.2"
+ deepmerge "^4.2.2"
+ is-module "^1.0.0"
+ resolve "^1.22.1"
+
+"@rollup/pluginutils@^5.0.1":
+ version "5.1.4"
+ resolved "https://registry.yarnpkg.com/@rollup/pluginutils/-/pluginutils-5.1.4.tgz#bb94f1f9eaaac944da237767cdfee6c5b2262d4a"
+ integrity sha512-USm05zrsFxYLPdWWq+K3STlWiT/3ELn3RcV5hJMghpeAIhxfsUIg6mt12CBJBInWMV4VneoV7SfGv8xIwo2qNQ==
+ dependencies:
+ "@types/estree" "^1.0.0"
+ estree-walker "^2.0.2"
+ picomatch "^4.0.2"
+
+"@rollup/rollup-android-arm-eabi@4.52.3":
+ version "4.52.3"
+ resolved "https://registry.yarnpkg.com/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.52.3.tgz#7050c2acdc1214a730058e21f613ab0e1fe1ced9"
+ integrity sha512-h6cqHGZ6VdnwliFG1NXvMPTy/9PS3h8oLh7ImwR+kl+oYnQizgjxsONmmPSb2C66RksfkfIxEVtDSEcJiO0tqw==
+
+"@rollup/rollup-android-arm64@4.52.3":
+ version "4.52.3"
+ resolved "https://registry.yarnpkg.com/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.52.3.tgz#3f5b2afbfcbe9021649701cf6ff0d54b1fb7e4a5"
+ integrity sha512-wd+u7SLT/u6knklV/ifG7gr5Qy4GUbH2hMWcDauPFJzmCZUAJ8L2bTkVXC2niOIxp8lk3iH/QX8kSrUxVZrOVw==
+
+"@rollup/rollup-darwin-arm64@4.52.3":
+ version "4.52.3"
+ resolved "https://registry.yarnpkg.com/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.52.3.tgz#70a1679fb4393ba7bafb730ee56a5278cbcdafb0"
+ integrity sha512-lj9ViATR1SsqycwFkJCtYfQTheBdvlWJqzqxwc9f2qrcVrQaF/gCuBRTiTolkRWS6KvNxSk4KHZWG7tDktLgjg==
+
+"@rollup/rollup-darwin-x64@4.52.3":
+ version "4.52.3"
+ resolved "https://registry.yarnpkg.com/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.52.3.tgz#ae75aec88fa72069de9bca3a3ec22bf4e6a962bf"
+ integrity sha512-+Dyo7O1KUmIsbzx1l+4V4tvEVnVQqMOIYtrxK7ncLSknl1xnMHLgn7gddJVrYPNZfEB8CIi3hK8gq8bDhb3h5A==
+
+"@rollup/rollup-freebsd-arm64@4.52.3":
+ version "4.52.3"
+ resolved "https://registry.yarnpkg.com/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.52.3.tgz#8a2bda997faa1d7e335ce1961ce71d1a76ac6288"
+ integrity sha512-u9Xg2FavYbD30g3DSfNhxgNrxhi6xVG4Y6i9Ur1C7xUuGDW3banRbXj+qgnIrwRN4KeJ396jchwy9bCIzbyBEQ==
+
+"@rollup/rollup-freebsd-x64@4.52.3":
+ version "4.52.3"
+ resolved "https://registry.yarnpkg.com/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.52.3.tgz#fc287bcc39b9a9c0df97336d68fd5f4458f87977"
+ integrity sha512-5M8kyi/OX96wtD5qJR89a/3x5x8x5inXBZO04JWhkQb2JWavOWfjgkdvUqibGJeNNaz1/Z1PPza5/tAPXICI6A==
+
+"@rollup/rollup-linux-arm-gnueabihf@4.52.3":
+ version "4.52.3"
+ resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.52.3.tgz#5b5a2a55dffaa64d7c7a231e80e491219e33d4f3"
+ integrity sha512-IoerZJ4l1wRMopEHRKOO16e04iXRDyZFZnNZKrWeNquh5d6bucjezgd+OxG03mOMTnS1x7hilzb3uURPkJ0OfA==
+
+"@rollup/rollup-linux-arm-musleabihf@4.52.3":
+ version "4.52.3"
+ resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.52.3.tgz#979eab95003c21837ea0fdd8a721aa3e69fa4aa3"
+ integrity sha512-ZYdtqgHTDfvrJHSh3W22TvjWxwOgc3ThK/XjgcNGP2DIwFIPeAPNsQxrJO5XqleSlgDux2VAoWQ5iJrtaC1TbA==
+
+"@rollup/rollup-linux-arm64-gnu@4.52.3":
+ version "4.52.3"
+ resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.52.3.tgz#53b89f1289cbeca5ed9b6ca1602a6fe1a29dd4e2"
+ integrity sha512-NcViG7A0YtuFDA6xWSgmFb6iPFzHlf5vcqb2p0lGEbT+gjrEEz8nC/EeDHvx6mnGXnGCC1SeVV+8u+smj0CeGQ==
+
+"@rollup/rollup-linux-arm64-musl@4.52.3":
+ version "4.52.3"
+ resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.52.3.tgz#3bbcf5e13c09d0c4c55bd9c75ec6a7aeee56fe28"
+ integrity sha512-d3pY7LWno6SYNXRm6Ebsq0DJGoiLXTb83AIPCXl9fmtIQs/rXoS8SJxxUNtFbJ5MiOvs+7y34np77+9l4nfFMw==
+
+"@rollup/rollup-linux-loong64-gnu@4.52.3":
+ version "4.52.3"
+ resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-loong64-gnu/-/rollup-linux-loong64-gnu-4.52.3.tgz#1cc71838465a8297f92ccc5cc9c29756b71f6e73"
+ integrity sha512-3y5GA0JkBuirLqmjwAKwB0keDlI6JfGYduMlJD/Rl7fvb4Ni8iKdQs1eiunMZJhwDWdCvrcqXRY++VEBbvk6Eg==
+
+"@rollup/rollup-linux-ppc64-gnu@4.52.3":
+ version "4.52.3"
+ resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-ppc64-gnu/-/rollup-linux-ppc64-gnu-4.52.3.tgz#fe3fdf2ef57dc2d58fedd4f1e0678660772c843a"
+ integrity sha512-AUUH65a0p3Q0Yfm5oD2KVgzTKgwPyp9DSXc3UA7DtxhEb/WSPfbG4wqXeSN62OG5gSo18em4xv6dbfcUGXcagw==
+
+"@rollup/rollup-linux-riscv64-gnu@4.52.3":
+ version "4.52.3"
+ resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.52.3.tgz#eebc99e75832891d58532501879ca749b1592f93"
+ integrity sha512-1makPhFFVBqZE+XFg3Dkq+IkQ7JvmUrwwqaYBL2CE+ZpxPaqkGaiWFEWVGyvTwZace6WLJHwjVh/+CXbKDGPmg==
+
+"@rollup/rollup-linux-riscv64-musl@4.52.3":
+ version "4.52.3"
+ resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-riscv64-musl/-/rollup-linux-riscv64-musl-4.52.3.tgz#9a2df234d61763a44601eba17c36844a18f20539"
+ integrity sha512-OOFJa28dxfl8kLOPMUOQBCO6z3X2SAfzIE276fwT52uXDWUS178KWq0pL7d6p1kz7pkzA0yQwtqL0dEPoVcRWg==
+
+"@rollup/rollup-linux-s390x-gnu@4.52.3":
+ version "4.52.3"
+ resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.52.3.tgz#f0e45ea7e41ee473c85458b1ec8fab9572cc1834"
+ integrity sha512-jMdsML2VI5l+V7cKfZx3ak+SLlJ8fKvLJ0Eoa4b9/vCUrzXKgoKxvHqvJ/mkWhFiyp88nCkM5S2v6nIwRtPcgg==
+
+"@rollup/rollup-linux-x64-gnu@4.52.3":
+ version "4.52.3"
+ resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.52.3.tgz#ed63dec576799fa5571eee5b2040f65faa82b49b"
+ integrity sha512-tPgGd6bY2M2LJTA1uGq8fkSPK8ZLYjDjY+ZLK9WHncCnfIz29LIXIqUgzCR0hIefzy6Hpbe8Th5WOSwTM8E7LA==
+
+"@rollup/rollup-linux-x64-musl@4.52.3":
+ version "4.52.3"
+ resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.52.3.tgz#755c56ac79b17fbdf0359bce7e2293a11de30ad0"
+ integrity sha512-BCFkJjgk+WFzP+tcSMXq77ymAPIxsX9lFJWs+2JzuZTLtksJ2o5hvgTdIcZ5+oKzUDMwI0PfWzRBYAydAHF2Mw==
+
+"@rollup/rollup-openharmony-arm64@4.52.3":
+ version "4.52.3"
+ resolved "https://registry.yarnpkg.com/@rollup/rollup-openharmony-arm64/-/rollup-openharmony-arm64-4.52.3.tgz#84b4170fe28c2b41e406add6ccf8513bf91195ea"
+ integrity sha512-KTD/EqjZF3yvRaWUJdD1cW+IQBk4fbQaHYJUmP8N4XoKFZilVL8cobFSTDnjTtxWJQ3JYaMgF4nObY/+nYkumA==
+
+"@rollup/rollup-win32-arm64-msvc@4.52.3":
+ version "4.52.3"
+ resolved "https://registry.yarnpkg.com/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.52.3.tgz#4fb0cd004183da819bec804eba70f1ef6936ccbf"
+ integrity sha512-+zteHZdoUYLkyYKObGHieibUFLbttX2r+58l27XZauq0tcWYYuKUwY2wjeCN9oK1Um2YgH2ibd6cnX/wFD7DuA==
+
+"@rollup/rollup-win32-ia32-msvc@4.52.3":
+ version "4.52.3"
+ resolved "https://registry.yarnpkg.com/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.52.3.tgz#1788ba80313477a31e6214390906201604ee38eb"
+ integrity sha512-of1iHkTQSo3kr6dTIRX6t81uj/c/b15HXVsPcEElN5sS859qHrOepM5p9G41Hah+CTqSh2r8Bm56dL2z9UQQ7g==
+
+"@rollup/rollup-win32-x64-gnu@4.52.3":
+ version "4.52.3"
+ resolved "https://registry.yarnpkg.com/@rollup/rollup-win32-x64-gnu/-/rollup-win32-x64-gnu-4.52.3.tgz#867222f288a9557487900c7836998123ebbadc9d"
+ integrity sha512-s0hybmlHb56mWVZQj8ra9048/WZTPLILKxcvcq+8awSZmyiSUZjjem1AhU3Tf4ZKpYhK4mg36HtHDOe8QJS5PQ==
+
+"@rollup/rollup-win32-x64-msvc@4.52.3":
+ version "4.52.3"
+ resolved "https://registry.yarnpkg.com/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.52.3.tgz#3f55b6e8fe809a7d29959d6bc686cce1804581f0"
+ integrity sha512-zGIbEVVXVtauFgl3MRwGWEN36P5ZGenHRMgNw88X5wEhEBpq0XrMEZwOn07+ICrwM17XO5xfMZqh0OldCH5VTA==
+
"@types/chai@^4.2.13", "@types/chai@^4.2.7":
version "4.3.3"
- resolved "https://registry.yarnpkg.com/@types/chai/-/chai-4.3.3.tgz#3c90752792660c4b562ad73b3fbd68bf3bc7ae07"
+ resolved "https://registry.npmjs.org/@types/chai/-/chai-4.3.3.tgz"
integrity sha512-hC7OMnszpxhZPduX+m+nrx+uFoLkWOMiR4oa/AZF3MuSETYTZmFfJAHqZEM8MVlvfG7BEUcgvtwoCTxBp6hm3g==
+"@types/eslint-scope@^3.7.7":
+ version "3.7.7"
+ resolved "https://registry.yarnpkg.com/@types/eslint-scope/-/eslint-scope-3.7.7.tgz#3108bd5f18b0cdb277c867b3dd449c9ed7079ac5"
+ integrity sha512-MzMFlSLBqNF2gcHWO0G1vP/YQyfvrxZ0bF+u7mzUdZ1/xK4A4sru+nraZz5i3iEIk1l1uyicaDVTB4QbbEkAYg==
+ dependencies:
+ "@types/eslint" "*"
+ "@types/estree" "*"
+
+"@types/eslint@*":
+ version "9.6.1"
+ resolved "https://registry.yarnpkg.com/@types/eslint/-/eslint-9.6.1.tgz#d5795ad732ce81715f27f75da913004a56751584"
+ integrity sha512-FXx2pKgId/WyYo2jXw63kk7/+TY7u7AziEJxJAnSFzHlqTAS3Ync6SvgYAN/k4/PQpnnVuzoMuVnByKK2qp0ag==
+ dependencies:
+ "@types/estree" "*"
+ "@types/json-schema" "*"
+
+"@types/esrecurse@^4.3.1":
+ version "4.3.1"
+ resolved "https://registry.yarnpkg.com/@types/esrecurse/-/esrecurse-4.3.1.tgz#6f636af962fbe6191b830bd676ba5986926bccec"
+ integrity sha512-xJBAbDifo5hpffDBuHl0Y8ywswbiAp/Wi7Y/GtAgSlZyIABppyurxVueOPE8LUQOxdlgi6Zqce7uoEpqNTeiUw==
+
+"@types/estree@*", "@types/estree@^1.0.0", "@types/estree@^1.0.6":
+ version "1.0.7"
+ resolved "https://registry.yarnpkg.com/@types/estree/-/estree-1.0.7.tgz#4158d3105276773d5b7695cd4834b1722e4f37a8"
+ integrity sha512-w28IoSUCJpidD/TGviZwwMJckNESJZXFu7NBZ5YJ4mEUnNraUn9Pm8HSZm/jDF1pDWYKspWE7oVphigUPRakIQ==
+
+"@types/estree@1.0.8", "@types/estree@^1.0.8":
+ version "1.0.8"
+ resolved "https://registry.yarnpkg.com/@types/estree/-/estree-1.0.8.tgz#958b91c991b1867ced318bedea0e215ee050726e"
+ integrity sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==
+
"@types/glob@^7.1.1":
version "7.1.3"
- resolved "https://registry.yarnpkg.com/@types/glob/-/glob-7.1.3.tgz#e6ba80f36b7daad2c685acd9266382e68985c183"
+ resolved "https://registry.npmjs.org/@types/glob/-/glob-7.1.3.tgz"
integrity sha512-SEYeGAIQIQX8NN6LDKprLjbrd5dARM5EXsd8GI/A5l0apYI1fGMWgPHSe4ZKL4eozlAyI+doUE9XbYS4xCkQ1w==
dependencies:
"@types/minimatch" "*"
"@types/node" "*"
-"@types/json-schema@^7.0.7":
- version "7.0.11"
- resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.11.tgz#d421b6c527a3037f7c84433fd2c4229e016863d3"
- integrity sha512-wOuvG1SN4Us4rez+tylwwwCV1psiNVOkJeM3AUWUNWg/jDQY2+HE/444y5gc+jBmRqASOm2Oeh5c1axHobwRKQ==
+"@types/json-schema@*", "@types/json-schema@^7.0.15", "@types/json-schema@^7.0.9":
+ version "7.0.15"
+ resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.15.tgz#596a1747233694d50f6ad8a7869fcb6f56cf5841"
+ integrity sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==
"@types/minimatch@*":
version "3.0.3"
- resolved "https://registry.yarnpkg.com/@types/minimatch/-/minimatch-3.0.3.tgz#3dca0e3f33b200fc7d1139c0cd96c1268cadfd9d"
+ resolved "https://registry.npmjs.org/@types/minimatch/-/minimatch-3.0.3.tgz"
integrity sha512-tHq6qdbT9U1IRSGf14CL0pUlULksvY9OZ+5eEgl1N7t+OA3tGvNpxJCzuKQlsNgCVwbAs670L1vcVQi8j9HjnA==
"@types/minimist@^1.2.0":
version "1.2.0"
- resolved "https://registry.yarnpkg.com/@types/minimist/-/minimist-1.2.0.tgz#69a23a3ad29caf0097f06eda59b361ee2f0639f6"
+ resolved "https://registry.npmjs.org/@types/minimist/-/minimist-1.2.0.tgz"
integrity sha1-aaI6OtKcrwCX8G7aWbNh7i8GOfY=
-"@types/mocha@^5.2.7":
- version "5.2.7"
- resolved "https://registry.yarnpkg.com/@types/mocha/-/mocha-5.2.7.tgz#315d570ccb56c53452ff8638738df60726d5b6ea"
- integrity sha512-NYrtPht0wGzhwe9+/idPaBB+TqkY9AhTvOLMkThm0IoEfLaiVQZwBwyJ5puCkO3AUCWrmcoePjp2mbFocKy4SQ==
-
-"@types/mocha@^8.0.3":
- version "8.0.3"
- resolved "https://registry.yarnpkg.com/@types/mocha/-/mocha-8.0.3.tgz#51b21b6acb6d1b923bbdc7725c38f9f455166402"
- integrity sha512-vyxR57nv8NfcU0GZu8EUXZLTbCMupIUwy95LJ6lllN+JRPG25CwMHoB1q5xKh8YKhQnHYRAn4yW2yuHbf/5xgg==
+"@types/mocha@^10.0.10":
+ version "10.0.10"
+ resolved "https://registry.yarnpkg.com/@types/mocha/-/mocha-10.0.10.tgz#91f62905e8d23cbd66225312f239454a23bebfa0"
+ integrity sha512-xPyYSz1cMPnJQhl0CLMH68j3gprKZaTjG3s5Vi+fDgx+uhG9NOXwbVt52eFS8ECyXhyKcjDLCBEqBExKuiZb7Q==
"@types/node@*", "@types/node@>= 8":
version "12.12.21"
- resolved "https://registry.yarnpkg.com/@types/node/-/node-12.12.21.tgz#aa44a6363291c7037111c47e4661ad210aded23f"
+ resolved "https://registry.npmjs.org/@types/node/-/node-12.12.21.tgz"
integrity sha512-8sRGhbpU+ck1n0PGAUgVrWrWdjSW2aqNeyC15W88GRsMpSwzv6RJGlLhE7s2RhVSOdyDmxbqlWSeThq4/7xqlA==
-"@types/node@^12.12.21":
- version "12.12.67"
- resolved "https://registry.yarnpkg.com/@types/node/-/node-12.12.67.tgz#4f86badb292e822e3b13730a1f9713ed2377f789"
- integrity sha512-R48tgL2izApf+9rYNH+3RBMbRpPeW3N8f0I9HMhggeq4UXwBDqumJ14SDs4ctTMhG11pIOduZ4z3QWGOiMc9Vg==
-
-"@types/node@^14.0.0":
- version "14.11.8"
- resolved "https://registry.yarnpkg.com/@types/node/-/node-14.11.8.tgz#fe2012f2355e4ce08bca44aeb3abbb21cf88d33f"
- integrity sha512-KPcKqKm5UKDkaYPTuXSx8wEP7vE9GnuaXIZKijwRYcePpZFDVuy2a57LarFKiORbHOuTOOwYzxVxcUzsh2P2Pw==
+"@types/node@^16", "@types/node@^16.0.0":
+ version "16.18.126"
+ resolved "https://registry.yarnpkg.com/@types/node/-/node-16.18.126.tgz#27875faa2926c0f475b39a8bb1e546c0176f8d4b"
+ integrity sha512-OTcgaiwfGFBKacvfwuHzzn1KLxH/er8mluiy8/uM3sGXHaRe73RrSIj01jow9t4kJEW633Ov+cOexXeiApTyAw==
"@types/normalize-package-data@^2.4.0":
version "2.4.0"
- resolved "https://registry.yarnpkg.com/@types/normalize-package-data/-/normalize-package-data-2.4.0.tgz#e486d0d97396d79beedd0a6e33f4534ff6b4973e"
+ resolved "https://registry.npmjs.org/@types/normalize-package-data/-/normalize-package-data-2.4.0.tgz"
integrity sha512-f5j5b/Gf71L+dbqxIpQ4Z2WlmI/mPJ0fOkGGmFgtb6sAu97EPczzbS3/tJKxmcYDj55OX6ssqwDAWOHIYDRDGA==
"@types/pg-types@*":
version "1.11.5"
- resolved "https://registry.yarnpkg.com/@types/pg-types/-/pg-types-1.11.5.tgz#1eebbe62b6772fcc75c18957a90f933d155e005b"
+ resolved "https://registry.npmjs.org/@types/pg-types/-/pg-types-1.11.5.tgz"
integrity sha512-L8ogeT6vDzT1vxlW3KITTCt+BVXXVkLXfZ/XNm6UqbcJgxf+KPO7yjWx7dQQE8RW07KopL10x2gNMs41+IkMGQ==
"@types/pg@^7.14.5":
version "7.14.5"
- resolved "https://registry.yarnpkg.com/@types/pg/-/pg-7.14.5.tgz#07638c7aa69061abe4be31267028cc5c3fc35f98"
+ resolved "https://registry.npmjs.org/@types/pg/-/pg-7.14.5.tgz"
integrity sha512-wqTKZmqkqXd1YiVRBT2poRrMIojwEi2bKTAAjUX6nEbzr98jc3cfR/7o7ZtubhH5xT7YJ6LRdRr1GZOgs8OUjg==
dependencies:
"@types/node" "*"
"@types/pg-types" "*"
-"@typescript-eslint/eslint-plugin@^4.4.0":
- version "4.33.0"
- resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-4.33.0.tgz#c24dc7c8069c7706bc40d99f6fa87edcb2005276"
- integrity sha512-aINiAxGVdOl1eJyVjaWn/YcVAq4Gi/Yo35qHGCnqbWVz61g39D0h23veY/MA0rFFGfxK7TySg2uwDeNv+JgVpg==
+"@types/pg@^8.12.0":
+ version "8.12.0"
+ resolved "https://registry.yarnpkg.com/@types/pg/-/pg-8.12.0.tgz#d0f3bf131ae3ee54c510fb3c9cfcedb493b5106c"
+ integrity sha512-a9Z11ecnpNPFu2iT4Qo9SSYgM2r1l4UqLIQ454zhCDRzxqOh/vsi57FFovbc64oBGPBotXw5cRhUQtJEHCb/OA==
dependencies:
- "@typescript-eslint/experimental-utils" "4.33.0"
- "@typescript-eslint/scope-manager" "4.33.0"
- debug "^4.3.1"
- functional-red-black-tree "^1.0.1"
- ignore "^5.1.8"
- regexpp "^3.1.0"
- semver "^7.3.5"
- tsutils "^3.21.0"
+ "@types/node" "*"
+ pg-protocol "*"
+ pg-types "^4.0.1"
+
+"@types/resolve@1.20.2":
+ version "1.20.2"
+ resolved "https://registry.yarnpkg.com/@types/resolve/-/resolve-1.20.2.tgz#97d26e00cd4a0423b4af620abecf3e6f442b7975"
+ integrity sha512-60BCwRFOZCQhDncwQdxxeOEEkbc5dIMccYLwbxsS4TUNeVECQ/pBJ0j09mrHOl/JJvpRPGwO9SvE4nR2Nb/a4Q==
+
+"@typescript-eslint/eslint-plugin@^8.58.0":
+ version "8.59.0"
+ resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.59.0.tgz#fcbe76b693ce2412410cf4d48aefd617d345f2d9"
+ integrity sha512-HyAZtpdkgZwpq8Sz3FSUvCR4c+ScbuWa9AksK2Jweub7w4M3yTz4O11AqVJzLYjy/B9ZWPyc81I+mOdJU/bDQw==
+ dependencies:
+ "@eslint-community/regexpp" "^4.12.2"
+ "@typescript-eslint/scope-manager" "8.59.0"
+ "@typescript-eslint/type-utils" "8.59.0"
+ "@typescript-eslint/utils" "8.59.0"
+ "@typescript-eslint/visitor-keys" "8.59.0"
+ ignore "^7.0.5"
+ natural-compare "^1.4.0"
+ ts-api-utils "^2.5.0"
+
+"@typescript-eslint/parser@^8.58.0":
+ version "8.59.0"
+ resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-8.59.0.tgz#57a138280b3ceaf07904fbd62c433d5cc1ee1573"
+ integrity sha512-TI1XGwKbDpo9tRW8UDIXCOeLk55qe9ZFGs8MTKU6/M08HWTw52DD/IYhfQtOEhEdPhLMT26Ka/x7p70nd3dzDg==
+ dependencies:
+ "@typescript-eslint/scope-manager" "8.59.0"
+ "@typescript-eslint/types" "8.59.0"
+ "@typescript-eslint/typescript-estree" "8.59.0"
+ "@typescript-eslint/visitor-keys" "8.59.0"
+ debug "^4.4.3"
+
+"@typescript-eslint/project-service@8.59.0":
+ version "8.59.0"
+ resolved "https://registry.yarnpkg.com/@typescript-eslint/project-service/-/project-service-8.59.0.tgz#914bf62069d870faa0389ffd725774a200f511bf"
+ integrity sha512-Lw5ITrR5s5TbC19YSvlr63ZfLaJoU6vtKTHyB0GQOpX0W7d5/Ir6vUahWi/8Sps/nOukZQ0IB3SmlxZnjaKVnw==
+ dependencies:
+ "@typescript-eslint/tsconfig-utils" "^8.59.0"
+ "@typescript-eslint/types" "^8.59.0"
+ debug "^4.4.3"
+
+"@typescript-eslint/scope-manager@8.59.0":
+ version "8.59.0"
+ resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-8.59.0.tgz#f71be268bd31da1c160815c689e4dde7c9bc9e8e"
+ integrity sha512-UzR16Ut8IpA3Mc4DbgAShlPPkVm8xXMWafXxB0BocaVRHs8ZGakAxGRskF7FId3sdk9lgGD73GSFaWmWFDE4dg==
+ dependencies:
+ "@typescript-eslint/types" "8.59.0"
+ "@typescript-eslint/visitor-keys" "8.59.0"
+
+"@typescript-eslint/tsconfig-utils@8.59.0", "@typescript-eslint/tsconfig-utils@^8.59.0":
+ version "8.59.0"
+ resolved "https://registry.yarnpkg.com/@typescript-eslint/tsconfig-utils/-/tsconfig-utils-8.59.0.tgz#1276077f5ad77e384446ea28a2474e8f8be1af41"
+ integrity sha512-91Sbl3s4Kb3SybliIY6muFBmHVv+pYXfybC4Oolp3dvk8BvIE3wOPc+403CWIT7mJNkfQRGtdqghzs2+Z91Tqg==
+
+"@typescript-eslint/type-utils@8.59.0":
+ version "8.59.0"
+ resolved "https://registry.yarnpkg.com/@typescript-eslint/type-utils/-/type-utils-8.59.0.tgz#2834ea3b179cedfc9244dcd4f74105a27751a439"
+ integrity sha512-3TRiZaQSltGqGeNrJzzr1+8YcEobKH9rHnqIp/1psfKFmhRQDNMGP5hBufanYTGznwShzVLs3Mz+gDN7HkWfXg==
+ dependencies:
+ "@typescript-eslint/types" "8.59.0"
+ "@typescript-eslint/typescript-estree" "8.59.0"
+ "@typescript-eslint/utils" "8.59.0"
+ debug "^4.4.3"
+ ts-api-utils "^2.5.0"
+
+"@typescript-eslint/types@8.59.0", "@typescript-eslint/types@^8.59.0":
+ version "8.59.0"
+ resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-8.59.0.tgz#cfcc643c6e879016479775850d86d84c14492738"
+ integrity sha512-nLzdsT1gdOgFxxxwrlNVUBzSNBEEHJ86bblmk4QAS6stfig7rcJzWKqCyxFy3YRRHXDWEkb2NralA1nOYkkm/A==
+
+"@typescript-eslint/typescript-estree@8.59.0":
+ version "8.59.0"
+ resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-8.59.0.tgz#feba58a70ab6ea7ac53a2f3ae900db28ce3454c2"
+ integrity sha512-O9Re9P1BmBLFJyikRbQpLku/QA3/AueZNO9WePLBwQrvkixTmDe8u76B6CYUAITRl/rHawggEqUGn5QIkVRLMw==
+ dependencies:
+ "@typescript-eslint/project-service" "8.59.0"
+ "@typescript-eslint/tsconfig-utils" "8.59.0"
+ "@typescript-eslint/types" "8.59.0"
+ "@typescript-eslint/visitor-keys" "8.59.0"
+ debug "^4.4.3"
+ minimatch "^10.2.2"
+ semver "^7.7.3"
+ tinyglobby "^0.2.15"
+ ts-api-utils "^2.5.0"
+
+"@typescript-eslint/utils@8.59.0":
+ version "8.59.0"
+ resolved "https://registry.yarnpkg.com/@typescript-eslint/utils/-/utils-8.59.0.tgz#f50df9bd6967881ef64fba62230111153179ead5"
+ integrity sha512-I1R/K7V07XsMJ12Oaxg/O9GfrysGTmCRhvZJBv0RE0NcULMzjqVpR5kRRQjHsz3J/bElU7HwCO7zkqL+MSUz+g==
+ dependencies:
+ "@eslint-community/eslint-utils" "^4.9.1"
+ "@typescript-eslint/scope-manager" "8.59.0"
+ "@typescript-eslint/types" "8.59.0"
+ "@typescript-eslint/typescript-estree" "8.59.0"
+
+"@typescript-eslint/visitor-keys@8.59.0":
+ version "8.59.0"
+ resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-8.59.0.tgz#2e80de30e7e944ed4bd47d751e37dcb04db03795"
+ integrity sha512-/uejZt4dSere1bx12WLlPfv8GktzcaDtuJ7s42/HEZ5zGj9oxRaD4bj7qwSunXkf+pbAhFt2zjpHYUiT5lHf0Q==
+ dependencies:
+ "@typescript-eslint/types" "8.59.0"
+ eslint-visitor-keys "^5.0.0"
+
+"@vitest/expect@3.0.9":
+ version "3.0.9"
+ resolved "https://registry.yarnpkg.com/@vitest/expect/-/expect-3.0.9.tgz#b0cb9cd798a131423097cc5a777b699675405fcf"
+ integrity sha512-5eCqRItYgIML7NNVgJj6TVCmdzE7ZVgJhruW0ziSQV4V7PvLkDL1bBkBdcTs/VuIz0IxPb5da1IDSqc1TR9eig==
+ dependencies:
+ "@vitest/spy" "3.0.9"
+ "@vitest/utils" "3.0.9"
+ chai "^5.2.0"
+ tinyrainbow "^2.0.0"
+
+"@vitest/mocker@3.0.9":
+ version "3.0.9"
+ resolved "https://registry.yarnpkg.com/@vitest/mocker/-/mocker-3.0.9.tgz#75d176745131caf40810d3a3a73491595fce46e6"
+ integrity sha512-ryERPIBOnvevAkTq+L1lD+DTFBRcjueL9lOUfXsLfwP92h4e+Heb+PjiqS3/OURWPtywfafK0kj++yDFjWUmrA==
+ dependencies:
+ "@vitest/spy" "3.0.9"
+ estree-walker "^3.0.3"
+ magic-string "^0.30.17"
+
+"@vitest/pretty-format@3.0.9":
+ version "3.0.9"
+ resolved "https://registry.yarnpkg.com/@vitest/pretty-format/-/pretty-format-3.0.9.tgz#d9c88fe64b4edcdbc88e5bd92c39f9cc8d40930d"
+ integrity sha512-OW9F8t2J3AwFEwENg3yMyKWweF7oRJlMyHOMIhO5F3n0+cgQAJZBjNgrF8dLwFTEXl5jUqBLXd9QyyKv8zEcmA==
+ dependencies:
+ tinyrainbow "^2.0.0"
+
+"@vitest/pretty-format@^3.0.9":
+ version "3.1.2"
+ resolved "https://registry.yarnpkg.com/@vitest/pretty-format/-/pretty-format-3.1.2.tgz#689b0604c0b73fdccb144f11b64d70c9233b23b8"
+ integrity sha512-R0xAiHuWeDjTSB3kQ3OQpT8Rx3yhdOAIm/JM4axXxnG7Q/fS8XUwggv/A4xzbQA+drYRjzkMnpYnOGAc4oeq8w==
+ dependencies:
+ tinyrainbow "^2.0.0"
-"@typescript-eslint/experimental-utils@4.33.0":
- version "4.33.0"
- resolved "https://registry.yarnpkg.com/@typescript-eslint/experimental-utils/-/experimental-utils-4.33.0.tgz#6f2a786a4209fa2222989e9380b5331b2810f7fd"
- integrity sha512-zeQjOoES5JFjTnAhI5QY7ZviczMzDptls15GFsI6jyUOq0kOf9+WonkhtlIhh0RgHRnqj5gdNxW5j1EvAyYg6Q==
+"@vitest/runner@3.0.9":
+ version "3.0.9"
+ resolved "https://registry.yarnpkg.com/@vitest/runner/-/runner-3.0.9.tgz#92b7f37f65825105dbfdc07196b90dd8c20547d8"
+ integrity sha512-NX9oUXgF9HPfJSwl8tUZCMP1oGx2+Sf+ru6d05QjzQz4OwWg0psEzwY6VexP2tTHWdOkhKHUIZH+fS6nA7jfOw==
dependencies:
- "@types/json-schema" "^7.0.7"
- "@typescript-eslint/scope-manager" "4.33.0"
- "@typescript-eslint/types" "4.33.0"
- "@typescript-eslint/typescript-estree" "4.33.0"
- eslint-scope "^5.1.1"
- eslint-utils "^3.0.0"
+ "@vitest/utils" "3.0.9"
+ pathe "^2.0.3"
-"@typescript-eslint/parser@^4.4.0":
- version "4.4.0"
- resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-4.4.0.tgz#65974db9a75f23b036f17b37e959b5f99b659ec0"
- integrity sha512-yc14iEItCxoGb7W4Nx30FlTyGpU9r+j+n1LUK/exlq2eJeFxczrz/xFRZUk2f6yzWfK+pr1DOTyQnmDkcC4TnA==
+"@vitest/snapshot@3.0.9":
+ version "3.0.9"
+ resolved "https://registry.yarnpkg.com/@vitest/snapshot/-/snapshot-3.0.9.tgz#2ab878b3590b2daef1798b645a9d9e72a0eb258d"
+ integrity sha512-AiLUiuZ0FuA+/8i19mTYd+re5jqjEc2jZbgJ2up0VY0Ddyyxg/uUtBDpIFAy4uzKaQxOW8gMgBdAJJ2ydhu39A==
dependencies:
- "@typescript-eslint/scope-manager" "4.4.0"
- "@typescript-eslint/types" "4.4.0"
- "@typescript-eslint/typescript-estree" "4.4.0"
- debug "^4.1.1"
+ "@vitest/pretty-format" "3.0.9"
+ magic-string "^0.30.17"
+ pathe "^2.0.3"
-"@typescript-eslint/scope-manager@4.33.0":
- version "4.33.0"
- resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-4.33.0.tgz#d38e49280d983e8772e29121cf8c6e9221f280a3"
- integrity sha512-5IfJHpgTsTZuONKbODctL4kKuQje/bzBRkwHE8UOZ4f89Zeddg+EGZs8PD8NcN4LdM3ygHWYB3ukPAYjvl/qbQ==
+"@vitest/spy@3.0.9":
+ version "3.0.9"
+ resolved "https://registry.yarnpkg.com/@vitest/spy/-/spy-3.0.9.tgz#c3e5d47ceff7c1cb9fdfb9b2f168056bbc625534"
+ integrity sha512-/CcK2UDl0aQ2wtkp3YVWldrpLRNCfVcIOFGlVGKO4R5eajsH393Z1yiXLVQ7vWsj26JOEjeZI0x5sm5P4OGUNQ==
dependencies:
- "@typescript-eslint/types" "4.33.0"
- "@typescript-eslint/visitor-keys" "4.33.0"
+ tinyspy "^3.0.2"
-"@typescript-eslint/scope-manager@4.4.0":
- version "4.4.0"
- resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-4.4.0.tgz#2f3dd27692a12cc9a046a90ba6a9d8cb7731190a"
- integrity sha512-r2FIeeU1lmW4K3CxgOAt8djI5c6Q/5ULAgdVo9AF3hPMpu0B14WznBAtxrmB/qFVbVIB6fSx2a+EVXuhSVMEyA==
+"@vitest/utils@3.0.9":
+ version "3.0.9"
+ resolved "https://registry.yarnpkg.com/@vitest/utils/-/utils-3.0.9.tgz#15da261d8cacd6035dc28a8d3ba38ee39545f82b"
+ integrity sha512-ilHM5fHhZ89MCp5aAaM9uhfl1c2JdxVxl3McqsdVyVNN6JffnEen8UMCdRTzOhGXNQGo5GNL9QugHrz727Wnng==
dependencies:
- "@typescript-eslint/types" "4.4.0"
- "@typescript-eslint/visitor-keys" "4.4.0"
+ "@vitest/pretty-format" "3.0.9"
+ loupe "^3.1.3"
+ tinyrainbow "^2.0.0"
-"@typescript-eslint/types@4.33.0":
- version "4.33.0"
- resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-4.33.0.tgz#a1e59036a3b53ae8430ceebf2a919dc7f9af6d72"
- integrity sha512-zKp7CjQzLQImXEpLt2BUw1tvOMPfNoTAfb8l51evhYbOEEzdWyQNmHWWGPR6hwKJDAi+1VXSBmnhL9kyVTTOuQ==
+"@webassemblyjs/ast@1.14.1", "@webassemblyjs/ast@^1.14.1":
+ version "1.14.1"
+ resolved "https://registry.yarnpkg.com/@webassemblyjs/ast/-/ast-1.14.1.tgz#a9f6a07f2b03c95c8d38c4536a1fdfb521ff55b6"
+ integrity sha512-nuBEDgQfm1ccRp/8bCQrx1frohyufl4JlbMMZ4P1wpeOfDhF6FQkxZJ1b/e+PLwr6X1Nhw6OLme5usuBWYBvuQ==
+ dependencies:
+ "@webassemblyjs/helper-numbers" "1.13.2"
+ "@webassemblyjs/helper-wasm-bytecode" "1.13.2"
-"@typescript-eslint/types@4.4.0":
- version "4.4.0"
- resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-4.4.0.tgz#63440ef87a54da7399a13bdd4b82060776e9e621"
- integrity sha512-nU0VUpzanFw3jjX+50OTQy6MehVvf8pkqFcURPAE06xFNFenMj1GPEI6IESvp7UOHAnq+n/brMirZdR+7rCrlA==
+"@webassemblyjs/floating-point-hex-parser@1.13.2":
+ version "1.13.2"
+ resolved "https://registry.yarnpkg.com/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.13.2.tgz#fcca1eeddb1cc4e7b6eed4fc7956d6813b21b9fb"
+ integrity sha512-6oXyTOzbKxGH4steLbLNOu71Oj+C8Lg34n6CqRvqfS2O71BxY6ByfMDRhBytzknj9yGUPVJ1qIKhRlAwO1AovA==
-"@typescript-eslint/typescript-estree@4.33.0":
- version "4.33.0"
- resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-4.33.0.tgz#0dfb51c2908f68c5c08d82aefeaf166a17c24609"
- integrity sha512-rkWRY1MPFzjwnEVHsxGemDzqqddw2QbTJlICPD9p9I9LfsO8fdmfQPOX3uKfUaGRDFJbfrtm/sXhVXN4E+bzCA==
+"@webassemblyjs/helper-api-error@1.13.2":
+ version "1.13.2"
+ resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-api-error/-/helper-api-error-1.13.2.tgz#e0a16152248bc38daee76dd7e21f15c5ef3ab1e7"
+ integrity sha512-U56GMYxy4ZQCbDZd6JuvvNV/WFildOjsaWD3Tzzvmw/mas3cXzRJPMjP83JqEsgSbyrmaGjBfDtV7KDXV9UzFQ==
+
+"@webassemblyjs/helper-buffer@1.14.1":
+ version "1.14.1"
+ resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-buffer/-/helper-buffer-1.14.1.tgz#822a9bc603166531f7d5df84e67b5bf99b72b96b"
+ integrity sha512-jyH7wtcHiKssDtFPRB+iQdxlDf96m0E39yb0k5uJVhFGleZFoNw1c4aeIcVUPPbXUVJ94wwnMOAqUHyzoEPVMA==
+
+"@webassemblyjs/helper-numbers@1.13.2":
+ version "1.13.2"
+ resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-numbers/-/helper-numbers-1.13.2.tgz#dbd932548e7119f4b8a7877fd5a8d20e63490b2d"
+ integrity sha512-FE8aCmS5Q6eQYcV3gI35O4J789wlQA+7JrqTTpJqn5emA4U2hvwJmvFRC0HODS+3Ye6WioDklgd6scJ3+PLnEA==
dependencies:
- "@typescript-eslint/types" "4.33.0"
- "@typescript-eslint/visitor-keys" "4.33.0"
- debug "^4.3.1"
- globby "^11.0.3"
- is-glob "^4.0.1"
- semver "^7.3.5"
- tsutils "^3.21.0"
+ "@webassemblyjs/floating-point-hex-parser" "1.13.2"
+ "@webassemblyjs/helper-api-error" "1.13.2"
+ "@xtuc/long" "4.2.2"
-"@typescript-eslint/typescript-estree@4.4.0":
- version "4.4.0"
- resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-4.4.0.tgz#16a2df7c16710ddd5406b32b86b9c1124b1ca526"
- integrity sha512-Fh85feshKXwki4nZ1uhCJHmqKJqCMba+8ZicQIhNi5d5jSQFteWiGeF96DTjO8br7fn+prTP+t3Cz/a/3yOKqw==
+"@webassemblyjs/helper-wasm-bytecode@1.13.2":
+ version "1.13.2"
+ resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.13.2.tgz#e556108758f448aae84c850e593ce18a0eb31e0b"
+ integrity sha512-3QbLKy93F0EAIXLh0ogEVR6rOubA9AoZ+WRYhNbFyuB70j3dRdwH9g+qXhLAO0kiYGlg3TxDV+I4rQTr/YNXkA==
+
+"@webassemblyjs/helper-wasm-section@1.14.1":
+ version "1.14.1"
+ resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.14.1.tgz#9629dda9c4430eab54b591053d6dc6f3ba050348"
+ integrity sha512-ds5mXEqTJ6oxRoqjhWDU83OgzAYjwsCV8Lo/N+oRsNDmx/ZDpqalmrtgOMkHwxsG0iI//3BwWAErYRHtgn0dZw==
dependencies:
- "@typescript-eslint/types" "4.4.0"
- "@typescript-eslint/visitor-keys" "4.4.0"
- debug "^4.1.1"
- globby "^11.0.1"
- is-glob "^4.0.1"
- lodash "^4.17.15"
- semver "^7.3.2"
- tsutils "^3.17.1"
+ "@webassemblyjs/ast" "1.14.1"
+ "@webassemblyjs/helper-buffer" "1.14.1"
+ "@webassemblyjs/helper-wasm-bytecode" "1.13.2"
+ "@webassemblyjs/wasm-gen" "1.14.1"
-"@typescript-eslint/visitor-keys@4.33.0":
- version "4.33.0"
- resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-4.33.0.tgz#2a22f77a41604289b7a186586e9ec48ca92ef1dd"
- integrity sha512-uqi/2aSz9g2ftcHWf8uLPJA70rUv6yuMW5Bohw+bwcuzaxQIHaKFZCKGoGXIrc9vkTJ3+0txM73K0Hq3d5wgIg==
+"@webassemblyjs/ieee754@1.13.2":
+ version "1.13.2"
+ resolved "https://registry.yarnpkg.com/@webassemblyjs/ieee754/-/ieee754-1.13.2.tgz#1c5eaace1d606ada2c7fd7045ea9356c59ee0dba"
+ integrity sha512-4LtOzh58S/5lX4ITKxnAK2USuNEvpdVV9AlgGQb8rJDHaLeHciwG4zlGr0j/SNWlr7x3vO1lDEsuePvtcDNCkw==
dependencies:
- "@typescript-eslint/types" "4.33.0"
- eslint-visitor-keys "^2.0.0"
+ "@xtuc/ieee754" "^1.2.0"
-"@typescript-eslint/visitor-keys@4.4.0":
- version "4.4.0"
- resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-4.4.0.tgz#0a9118344082f14c0f051342a74b42dfdb012640"
- integrity sha512-oBWeroUZCVsHLiWRdcTXJB7s1nB3taFY8WGvS23tiAlT6jXVvsdAV4rs581bgdEjOhn43q6ro7NkOiLKu6kFqA==
+"@webassemblyjs/leb128@1.13.2":
+ version "1.13.2"
+ resolved "https://registry.yarnpkg.com/@webassemblyjs/leb128/-/leb128-1.13.2.tgz#57c5c3deb0105d02ce25fa3fd74f4ebc9fd0bbb0"
+ integrity sha512-Lde1oNoIdzVzdkNEAWZ1dZ5orIbff80YPdHx20mrHwHrVNNTjNr8E3xz9BdpcGqRQbAEa+fkrCb+fRFTl/6sQw==
+ dependencies:
+ "@xtuc/long" "4.2.2"
+
+"@webassemblyjs/utf8@1.13.2":
+ version "1.13.2"
+ resolved "https://registry.yarnpkg.com/@webassemblyjs/utf8/-/utf8-1.13.2.tgz#917a20e93f71ad5602966c2d685ae0c6c21f60f1"
+ integrity sha512-3NQWGjKTASY1xV5m7Hr0iPeXD9+RDobLll3T9d2AO+g3my8xy5peVyjSag4I50mR1bBSN/Ct12lo+R9tJk0NZQ==
+
+"@webassemblyjs/wasm-edit@^1.14.1":
+ version "1.14.1"
+ resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-edit/-/wasm-edit-1.14.1.tgz#ac6689f502219b59198ddec42dcd496b1004d597"
+ integrity sha512-RNJUIQH/J8iA/1NzlE4N7KtyZNHi3w7at7hDjvRNm5rcUXa00z1vRz3glZoULfJ5mpvYhLybmVcwcjGrC1pRrQ==
+ dependencies:
+ "@webassemblyjs/ast" "1.14.1"
+ "@webassemblyjs/helper-buffer" "1.14.1"
+ "@webassemblyjs/helper-wasm-bytecode" "1.13.2"
+ "@webassemblyjs/helper-wasm-section" "1.14.1"
+ "@webassemblyjs/wasm-gen" "1.14.1"
+ "@webassemblyjs/wasm-opt" "1.14.1"
+ "@webassemblyjs/wasm-parser" "1.14.1"
+ "@webassemblyjs/wast-printer" "1.14.1"
+
+"@webassemblyjs/wasm-gen@1.14.1":
+ version "1.14.1"
+ resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-gen/-/wasm-gen-1.14.1.tgz#991e7f0c090cb0bb62bbac882076e3d219da9570"
+ integrity sha512-AmomSIjP8ZbfGQhumkNvgC33AY7qtMCXnN6bL2u2Js4gVCg8fp735aEiMSBbDR7UQIj90n4wKAFUSEd0QN2Ukg==
+ dependencies:
+ "@webassemblyjs/ast" "1.14.1"
+ "@webassemblyjs/helper-wasm-bytecode" "1.13.2"
+ "@webassemblyjs/ieee754" "1.13.2"
+ "@webassemblyjs/leb128" "1.13.2"
+ "@webassemblyjs/utf8" "1.13.2"
+
+"@webassemblyjs/wasm-opt@1.14.1":
+ version "1.14.1"
+ resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-opt/-/wasm-opt-1.14.1.tgz#e6f71ed7ccae46781c206017d3c14c50efa8106b"
+ integrity sha512-PTcKLUNvBqnY2U6E5bdOQcSM+oVP/PmrDY9NzowJjislEjwP/C4an2303MCVS2Mg9d3AJpIGdUFIQQWbPds0Sw==
dependencies:
- "@typescript-eslint/types" "4.4.0"
- eslint-visitor-keys "^2.0.0"
+ "@webassemblyjs/ast" "1.14.1"
+ "@webassemblyjs/helper-buffer" "1.14.1"
+ "@webassemblyjs/wasm-gen" "1.14.1"
+ "@webassemblyjs/wasm-parser" "1.14.1"
+
+"@webassemblyjs/wasm-parser@1.14.1", "@webassemblyjs/wasm-parser@^1.14.1":
+ version "1.14.1"
+ resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-parser/-/wasm-parser-1.14.1.tgz#b3e13f1893605ca78b52c68e54cf6a865f90b9fb"
+ integrity sha512-JLBl+KZ0R5qB7mCnud/yyX08jWFw5MsoalJ1pQ4EdFlgj9VdXKGuENGsiCIjegI1W7p91rUlcB/LB5yRJKNTcQ==
+ dependencies:
+ "@webassemblyjs/ast" "1.14.1"
+ "@webassemblyjs/helper-api-error" "1.13.2"
+ "@webassemblyjs/helper-wasm-bytecode" "1.13.2"
+ "@webassemblyjs/ieee754" "1.13.2"
+ "@webassemblyjs/leb128" "1.13.2"
+ "@webassemblyjs/utf8" "1.13.2"
+
+"@webassemblyjs/wast-printer@1.14.1":
+ version "1.14.1"
+ resolved "https://registry.yarnpkg.com/@webassemblyjs/wast-printer/-/wast-printer-1.14.1.tgz#3bb3e9638a8ae5fdaf9610e7a06b4d9f9aa6fe07"
+ integrity sha512-kPSSXE6De1XOR820C90RIo2ogvZG+c3KiHzqUoO/F34Y2shGzesfqv7o57xrxovZJH/MetF5UjroJ/R/3isoiw==
+ dependencies:
+ "@webassemblyjs/ast" "1.14.1"
+ "@xtuc/long" "4.2.2"
+
+"@webpack-cli/configtest@^3.0.1":
+ version "3.0.1"
+ resolved "https://registry.yarnpkg.com/@webpack-cli/configtest/-/configtest-3.0.1.tgz#76ac285b9658fa642ce238c276264589aa2b6b57"
+ integrity sha512-u8d0pJ5YFgneF/GuvEiDA61Tf1VDomHHYMjv/wc9XzYj7nopltpG96nXN5dJRstxZhcNpV1g+nT6CydO7pHbjA==
+
+"@webpack-cli/info@^3.0.1":
+ version "3.0.1"
+ resolved "https://registry.yarnpkg.com/@webpack-cli/info/-/info-3.0.1.tgz#3cff37fabb7d4ecaab6a8a4757d3826cf5888c63"
+ integrity sha512-coEmDzc2u/ffMvuW9aCjoRzNSPDl/XLuhPdlFRpT9tZHmJ/039az33CE7uH+8s0uL1j5ZNtfdv0HkfaKRBGJsQ==
+
+"@webpack-cli/serve@^3.0.1":
+ version "3.0.1"
+ resolved "https://registry.yarnpkg.com/@webpack-cli/serve/-/serve-3.0.1.tgz#bd8b1f824d57e30faa19eb78e4c0951056f72f00"
+ integrity sha512-sbgw03xQaCLiT6gcY/6u3qBDn01CWw/nbaXl3gTdTFuJJ75Gffv3E3DBpgvY2fkkrdS1fpjaXNOmJlnbtKauKg==
+
+"@xtuc/ieee754@^1.2.0":
+ version "1.2.0"
+ resolved "https://registry.yarnpkg.com/@xtuc/ieee754/-/ieee754-1.2.0.tgz#eef014a3145ae477a1cbc00cd1e552336dceb790"
+ integrity sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==
+
+"@xtuc/long@4.2.2":
+ version "4.2.2"
+ resolved "https://registry.yarnpkg.com/@xtuc/long/-/long-4.2.2.tgz#d291c6a4e97989b5c61d9acf396ae4fe133a718d"
+ integrity sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==
"@zkochan/cmd-shim@^3.1.0":
version "3.1.0"
- resolved "https://registry.yarnpkg.com/@zkochan/cmd-shim/-/cmd-shim-3.1.0.tgz#2ab8ed81f5bb5452a85f25758eb9b8681982fd2e"
+ resolved "https://registry.npmjs.org/@zkochan/cmd-shim/-/cmd-shim-3.1.0.tgz"
integrity sha512-o8l0+x7C7sMZU3v9GuJIAU10qQLtwR1dtRQIOmlNMtyaqhmpXOzx1HWiYoWfmmf9HHZoAkXpc9TM9PQYF9d4Jg==
dependencies:
is-windows "^1.0.0"
mkdirp-promise "^5.0.1"
mz "^2.5.0"
-JSONStream@^1.0.4, JSONStream@^1.3.4:
+JSONStream@^1.0.4, JSONStream@^1.3.4, JSONStream@~1.3.5:
version "1.3.5"
- resolved "https://registry.yarnpkg.com/JSONStream/-/JSONStream-1.3.5.tgz#3208c1f08d3a4d99261ab64f92302bc15e111ca0"
+ resolved "https://registry.npmjs.org/JSONStream/-/JSONStream-1.3.5.tgz"
integrity sha512-E+iruNOY8VV9s4JEbe1aNEm6MiszPRr/UfcHMz0TQh1BXSxHK+ASV1R6W4HpjBhSeS+54PIsAMCBmwD06LLsqQ==
dependencies:
jsonparse "^1.2.0"
through ">=2.2.7 <3"
-JSONStream@~0.7.1:
- version "0.7.4"
- resolved "https://registry.yarnpkg.com/JSONStream/-/JSONStream-0.7.4.tgz#734290e41511eea7c2cfe151fbf9a563a97b9786"
- integrity sha1-c0KQ5BUR7qfCz+FR+/mlY6l7l4Y=
- dependencies:
- jsonparse "0.0.5"
- through ">=2.2.7 <3"
-
abbrev@1:
version "1.1.1"
- resolved "https://registry.yarnpkg.com/abbrev/-/abbrev-1.1.1.tgz#f8f2c887ad10bf67f634f005b6987fed3179aac8"
+ resolved "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz"
integrity sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==
abbrev@1.0.x:
version "1.0.9"
- resolved "https://registry.yarnpkg.com/abbrev/-/abbrev-1.0.9.tgz#91b4792588a7738c25f35dd6f63752a2f8776135"
+ resolved "https://registry.npmjs.org/abbrev/-/abbrev-1.0.9.tgz"
integrity sha1-kbR5JYinc4wl813W9jdSovh3YTU=
-acorn-jsx@^5.2.0:
- version "5.3.1"
- resolved "https://registry.yarnpkg.com/acorn-jsx/-/acorn-jsx-5.3.1.tgz#fc8661e11b7ac1539c47dbfea2e72b3af34d267b"
- integrity sha512-K0Ptm/47OKfQRpNQ2J/oIN/3QYiK6FwW+eJbILhsdxh2WTLdl+30o8aGdTbm5JbffpFFAg/g+zi1E+jvJha5ng==
-
-acorn@^7.4.0:
- version "7.4.1"
- resolved "https://registry.yarnpkg.com/acorn/-/acorn-7.4.1.tgz#feaed255973d2e77555b83dbc08851a6c63520fa"
- integrity sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==
+abbrev@^3.0.0:
+ version "3.0.1"
+ resolved "https://registry.yarnpkg.com/abbrev/-/abbrev-3.0.1.tgz#8ac8b3b5024d31464fe2a5feeea9f4536bf44025"
+ integrity sha512-AO2ac6pjRB3SJmGJo+v5/aK6Omggp6fsLrs6wN9bd35ulu4cCwaAU9+7ZhXjeqHVkaHThLuzH0nZr0YpCDhygg==
+
+acorn-jsx@^5.3.2:
+ version "5.3.2"
+ resolved "https://registry.yarnpkg.com/acorn-jsx/-/acorn-jsx-5.3.2.tgz#7ed5bb55908b3b2f1bc55c6af1653bada7f07937"
+ integrity sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==
+
+acorn-walk@8.3.2:
+ version "8.3.2"
+ resolved "https://registry.yarnpkg.com/acorn-walk/-/acorn-walk-8.3.2.tgz#7703af9415f1b6db9315d6895503862e231d34aa"
+ integrity sha512-cjkyv4OtNCIeqhHrfS81QWXoCBPExR/J62oyEqepVw8WaQeSqpW2uhuLPh1m9eWhDuOo/jUXVTlifvesOWp/4A==
+
+acorn@8.14.0:
+ version "8.14.0"
+ resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.14.0.tgz#063e2c70cac5fb4f6467f0b11152e04c682795b0"
+ integrity sha512-cl669nCJTZBsL97OF4kUQm5g5hC2uihk0NxY3WENAC0TYdILVkAyHymAntgxGkl7K+t0cXIrH5siy5S4XkFycA==
+
+acorn@^8.14.0:
+ version "8.14.1"
+ resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.14.1.tgz#721d5dc10f7d5b5609a891773d47731796935dfb"
+ integrity sha512-OvQ/2pUDKmgfCg++xsTX1wGxfTaszcHVcTctW4UJB4hibJx2HXxxO5UmVgyjMa+ZDsiaf5wWLXYpRWMmBI0QHg==
+
+acorn@^8.15.0, acorn@^8.16.0:
+ version "8.16.0"
+ resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.16.0.tgz#4ce79c89be40afe7afe8f3adb902a1f1ce9ac08a"
+ integrity sha512-UVJyE9MttOsBQIDKw1skb9nAwQuR5wuGD3+82K6JgJlm/Y+KI92oNsMNGZCYdDsVtRHSak0pcV5Dno5+4jh9sw==
agent-base@4, agent-base@^4.3.0:
version "4.3.0"
- resolved "https://registry.yarnpkg.com/agent-base/-/agent-base-4.3.0.tgz#8165f01c436009bccad0b1d122f05ed770efc6ee"
+ resolved "https://registry.npmjs.org/agent-base/-/agent-base-4.3.0.tgz"
integrity sha512-salcGninV0nPrwpGNn4VTXBb1SOuXQBiqbrNXoeizJsHrsL6ERFM2Ne3JUSBWRE6aeNJI2ROP/WEEIDUiDe3cg==
dependencies:
es6-promisify "^5.0.0"
+agent-base@^7.0.2, agent-base@^7.1.0, agent-base@^7.1.1:
+ version "7.1.1"
+ resolved "https://registry.yarnpkg.com/agent-base/-/agent-base-7.1.1.tgz#bdbded7dfb096b751a2a087eeeb9664725b2e317"
+ integrity sha512-H0TSyFNDMomMNJQBn8wFV5YC/2eJ+VXECwOadZJT554xP6cODZHPX3H9QMQECxvrgiSOP1pHjy1sMWQVYJOUOA==
+ dependencies:
+ debug "^4.3.4"
+
agent-base@~4.2.1:
version "4.2.1"
- resolved "https://registry.yarnpkg.com/agent-base/-/agent-base-4.2.1.tgz#d89e5999f797875674c07d87f260fc41e83e8ca9"
+ resolved "https://registry.npmjs.org/agent-base/-/agent-base-4.2.1.tgz"
integrity sha512-JVwXMr9nHYTUXsBFKUqhJwvlcYU/blreOEUkhNR2eXZIvwd+c+o5V4MgDPKWnMS/56awN3TRzIP+KoPn+roQtg==
dependencies:
es6-promisify "^5.0.0"
agentkeepalive@^3.4.1:
version "3.5.2"
- resolved "https://registry.yarnpkg.com/agentkeepalive/-/agentkeepalive-3.5.2.tgz#a113924dd3fa24a0bc3b78108c450c2abee00f67"
+ resolved "https://registry.npmjs.org/agentkeepalive/-/agentkeepalive-3.5.2.tgz"
integrity sha512-e0L/HNe6qkQ7H19kTlRRqUibEAwDK5AFk6y3PtMsuut2VAH6+Q4xZml1tNDJD7kSAyqmbG/K08K5WEJYtUrSlQ==
dependencies:
humanize-ms "^1.2.1"
-ajv@^6.10.0, ajv@^6.10.2, ajv@^6.12.3, ajv@^6.12.4:
+aggregate-error@^3.0.0:
+ version "3.1.0"
+ resolved "https://registry.yarnpkg.com/aggregate-error/-/aggregate-error-3.1.0.tgz#92670ff50f5359bdb7a3e0d40d0ec30c5737687a"
+ integrity sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==
+ dependencies:
+ clean-stack "^2.0.0"
+ indent-string "^4.0.0"
+
+ajv-formats@^2.1.1:
+ version "2.1.1"
+ resolved "https://registry.yarnpkg.com/ajv-formats/-/ajv-formats-2.1.1.tgz#6e669400659eb74973bbf2e33327180a0996b520"
+ integrity sha512-Wx0Kx52hxE7C18hkMEggYlEifqWZtYaRgouJor+WMdPnQyEK13vgEWyVNup7SoeeoLMsr4kf5h6dOW11I15MUA==
+ dependencies:
+ ajv "^8.0.0"
+
+ajv-keywords@^5.1.0:
+ version "5.1.0"
+ resolved "https://registry.yarnpkg.com/ajv-keywords/-/ajv-keywords-5.1.0.tgz#69d4d385a4733cdbeab44964a1170a88f87f0e16"
+ integrity sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw==
+ dependencies:
+ fast-deep-equal "^3.1.3"
+
+ajv@^6.12.3:
version "6.12.6"
- resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.12.6.tgz#baf5a62e802b07d977034586f8c3baf5adf26df4"
+ resolved "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz"
integrity sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==
dependencies:
fast-deep-equal "^3.1.1"
@@ -1193,86 +2549,110 @@ ajv@^6.10.0, ajv@^6.10.2, ajv@^6.12.3, ajv@^6.12.4:
json-schema-traverse "^0.4.1"
uri-js "^4.2.2"
+ajv@^6.14.0:
+ version "6.15.0"
+ resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.15.0.tgz#07e982c74626167aa7a2495c53817892d7139492"
+ integrity sha512-fgFx7Hfoq60ytK2c7DhnF8jIvzYgOMxfugjLOSMHjLIPgenqa7S7oaagATUq99mV6IYvN2tRmC0wnTYX6iPbMw==
+ dependencies:
+ fast-deep-equal "^3.1.1"
+ fast-json-stable-stringify "^2.0.0"
+ json-schema-traverse "^0.4.1"
+ uri-js "^4.2.2"
+
+ajv@^8.0.0, ajv@^8.9.0:
+ version "8.17.1"
+ resolved "https://registry.yarnpkg.com/ajv/-/ajv-8.17.1.tgz#37d9a5c776af6bc92d7f4f9510eba4c0a60d11a6"
+ integrity sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==
+ dependencies:
+ fast-deep-equal "^3.1.3"
+ fast-uri "^3.0.1"
+ json-schema-traverse "^1.0.0"
+ require-from-string "^2.0.2"
+
amdefine@>=0.0.4:
version "1.0.1"
- resolved "https://registry.yarnpkg.com/amdefine/-/amdefine-1.0.1.tgz#4a5282ac164729e93619bcfd3ad151f817ce91f5"
+ resolved "https://registry.npmjs.org/amdefine/-/amdefine-1.0.1.tgz"
integrity sha1-SlKCrBZHKek2Gbz9OtFR+BfOkfU=
-ansi-colors@3.2.3:
- version "3.2.3"
- resolved "https://registry.yarnpkg.com/ansi-colors/-/ansi-colors-3.2.3.tgz#57d35b8686e851e2cc04c403f1c00203976a1813"
- integrity sha512-LEHHyuhlPY3TmuUYMh2oz89lTShfvgbmzaBcxve9t/9Wuy7Dwf4yoAKcND7KFT1HAQfqZ12qtc+DUrBMeKF9nw==
-
-ansi-colors@^4.1.1:
- version "4.1.1"
- resolved "https://registry.yarnpkg.com/ansi-colors/-/ansi-colors-4.1.1.tgz#cbb9ae256bf750af1eab344f229aa27fe94ba348"
- integrity sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA==
-
ansi-escapes@^3.2.0:
version "3.2.0"
- resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-3.2.0.tgz#8780b98ff9dbf5638152d1f1fe5c1d7b4442976b"
+ resolved "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-3.2.0.tgz"
integrity sha512-cBhpre4ma+U0T1oM5fXg7Dy1Jw7zzwv7lt/GoCpr+hDQJoYnKVPLL4dCvSEFMmQurOQvSrwT7SL/DAlhBI97RQ==
ansi-regex@^2.0.0:
version "2.1.1"
- resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-2.1.1.tgz#c3b33ab5ee360d86e0e628f0468ae7ef27d654df"
+ resolved "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz"
integrity sha1-w7M6te42DYbg5ijwRorn7yfWVN8=
ansi-regex@^3.0.0:
version "3.0.0"
- resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-3.0.0.tgz#ed0317c322064f79466c02966bddb605ab37d998"
+ resolved "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz"
integrity sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=
ansi-regex@^4.1.0:
version "4.1.0"
- resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-4.1.0.tgz#8b9f8f08cf1acb843756a839ca8c7e3168c51997"
+ resolved "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz"
integrity sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==
-ansi-regex@^5.0.0:
- version "5.0.0"
- resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-5.0.0.tgz#388539f55179bf39339c81af30a654d69f87cb75"
- integrity sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==
+ansi-regex@^5.0.1:
+ version "5.0.1"
+ resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-5.0.1.tgz#082cb2c89c9fe8659a311a53bd6a4dc5301db304"
+ integrity sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==
+
+ansi-regex@^6.0.1:
+ version "6.0.1"
+ resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-6.0.1.tgz#3183e38fae9a65d7cb5e53945cd5897d0260a06a"
+ integrity sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==
ansi-styles@^3.2.0, ansi-styles@^3.2.1:
version "3.2.1"
- resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-3.2.1.tgz#41fbb20243e50b12be0f04b8dedbf07520ce841d"
+ resolved "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz"
integrity sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==
dependencies:
color-convert "^1.9.0"
-ansi-styles@^4.1.0:
+ansi-styles@^4.0.0, ansi-styles@^4.1.0:
version "4.3.0"
- resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-4.3.0.tgz#edd803628ae71c04c85ae7a0906edad34b648937"
+ resolved "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz"
integrity sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==
dependencies:
color-convert "^2.0.1"
+ansi-styles@^6.1.0:
+ version "6.2.1"
+ resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-6.2.1.tgz#0e62320cf99c21afff3b3012192546aacbfb05c5"
+ integrity sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==
+
any-promise@^1.0.0:
version "1.3.0"
- resolved "https://registry.yarnpkg.com/any-promise/-/any-promise-1.3.0.tgz#abc6afeedcea52e809cdc0376aed3ce39635d17f"
+ resolved "https://registry.npmjs.org/any-promise/-/any-promise-1.3.0.tgz"
integrity sha1-q8av7tzqUugJzcA3au0845Y10X8=
-anymatch@~3.1.1:
- version "3.1.1"
- resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-3.1.1.tgz#c55ecf02185e2469259399310c173ce31233b142"
- integrity sha512-mM8522psRCqzV+6LhomX5wgp25YVibjh8Wj23I5RPkPppSVSjyKD2A2mBJmWGa+KN7f2D6LNh9jkBCeyLktzjg==
+append-transform@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/append-transform/-/append-transform-2.0.0.tgz#99d9d29c7b38391e6f428d28ce136551f0b77e12"
+ integrity sha512-7yeyCEurROLQJFv5Xj4lEGTy0borxepjFv1g22oAdqFu//SrAlDl1O1Nxx15SH1RoliUml6p8dwJW9jvZughhg==
dependencies:
- normalize-path "^3.0.0"
- picomatch "^2.0.4"
+ default-require-extensions "^3.0.0"
aproba@^1.0.3, aproba@^1.1.1:
version "1.2.0"
- resolved "https://registry.yarnpkg.com/aproba/-/aproba-1.2.0.tgz#6802e6264efd18c790a1b0d517f0f2627bf2c94a"
+ resolved "https://registry.npmjs.org/aproba/-/aproba-1.2.0.tgz"
integrity sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw==
aproba@^2.0.0:
version "2.0.0"
- resolved "https://registry.yarnpkg.com/aproba/-/aproba-2.0.0.tgz#52520b8ae5b569215b354efc0caa3fe1e45a8adc"
+ resolved "https://registry.npmjs.org/aproba/-/aproba-2.0.0.tgz"
integrity sha512-lYe4Gx7QT+MKGbDsA+Z+he/Wtef0BiwDOlK/XkBrdfsh9J/jPPXbX0tE9x9cl27Tmu5gg3QUbUrQYa/y+KOHPQ==
+archy@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/archy/-/archy-1.0.0.tgz#f9c8c13757cc1dd7bc379ac77b2c62a5c2868c40"
+ integrity sha512-Xg+9RwCg/0p32teKdGMPTPnVXKD0w3DfHnFTficozsAgsvq2XenPJq/MYpzzQ/v8zrOyJn6Ds39VA4JIDwFfqw==
+
are-we-there-yet@~1.1.2:
version "1.1.5"
- resolved "https://registry.yarnpkg.com/are-we-there-yet/-/are-we-there-yet-1.1.5.tgz#4b35c2944f062a8bfcda66410760350fe9ddfc21"
+ resolved "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-1.1.5.tgz"
integrity sha512-5hYdAkZlcG8tOLujVDTgCT+uPX0VnpAH28gWsLfzpXYm7wP6mp5Q/gYyR7YQ0cKVJcXJnl3j2kpBan13PtQf6w==
dependencies:
delegates "^1.0.0"
@@ -1280,155 +2660,172 @@ are-we-there-yet@~1.1.2:
arg@^4.1.0:
version "4.1.3"
- resolved "https://registry.yarnpkg.com/arg/-/arg-4.1.3.tgz#269fc7ad5b8e42cb63c896d5666017261c144089"
+ resolved "https://registry.npmjs.org/arg/-/arg-4.1.3.tgz"
integrity sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==
argparse@^1.0.7:
version "1.0.10"
- resolved "https://registry.yarnpkg.com/argparse/-/argparse-1.0.10.tgz#bcd6791ea5ae09725e17e5ad988134cd40b3d911"
+ resolved "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz"
integrity sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==
dependencies:
sprintf-js "~1.0.2"
+argparse@^2.0.1:
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/argparse/-/argparse-2.0.1.tgz#246f50f3ca78a3240f6c997e8a9bd1eac49e4b38"
+ integrity sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==
+
arr-diff@^4.0.0:
version "4.0.0"
- resolved "https://registry.yarnpkg.com/arr-diff/-/arr-diff-4.0.0.tgz#d6461074febfec71e7e15235761a329a5dc7c520"
+ resolved "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz"
integrity sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA=
arr-flatten@^1.1.0:
version "1.1.0"
- resolved "https://registry.yarnpkg.com/arr-flatten/-/arr-flatten-1.1.0.tgz#36048bbff4e7b47e136644316c99669ea5ae91f1"
+ resolved "https://registry.npmjs.org/arr-flatten/-/arr-flatten-1.1.0.tgz"
integrity sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg==
arr-union@^3.1.0:
version "3.1.0"
- resolved "https://registry.yarnpkg.com/arr-union/-/arr-union-3.1.0.tgz#e39b09aea9def866a8f206e288af63919bae39c4"
+ resolved "https://registry.npmjs.org/arr-union/-/arr-union-3.1.0.tgz"
integrity sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ=
array-differ@^2.0.3:
version "2.1.0"
- resolved "https://registry.yarnpkg.com/array-differ/-/array-differ-2.1.0.tgz#4b9c1c3f14b906757082925769e8ab904f4801b1"
+ resolved "https://registry.npmjs.org/array-differ/-/array-differ-2.1.0.tgz"
integrity sha512-KbUpJgx909ZscOc/7CLATBFam7P1Z1QRQInvgT0UztM9Q72aGKCunKASAl7WNW0tnPmPyEMeMhdsfWhfmW037w==
array-find-index@^1.0.1:
version "1.0.2"
- resolved "https://registry.yarnpkg.com/array-find-index/-/array-find-index-1.0.2.tgz#df010aa1287e164bbda6f9723b0a96a1ec4187a1"
+ resolved "https://registry.npmjs.org/array-find-index/-/array-find-index-1.0.2.tgz"
integrity sha1-3wEKoSh+Fku9pvlyOwqWoexBh6E=
array-ify@^1.0.0:
version "1.0.0"
- resolved "https://registry.yarnpkg.com/array-ify/-/array-ify-1.0.0.tgz#9e528762b4a9066ad163a6962a364418e9626ece"
+ resolved "https://registry.npmjs.org/array-ify/-/array-ify-1.0.0.tgz"
integrity sha1-nlKHYrSpBmrRY6aWKjZEGOlibs4=
array-union@^1.0.2:
version "1.0.2"
- resolved "https://registry.yarnpkg.com/array-union/-/array-union-1.0.2.tgz#9a34410e4f4e3da23dea375be5be70f24778ec39"
+ resolved "https://registry.npmjs.org/array-union/-/array-union-1.0.2.tgz"
integrity sha1-mjRBDk9OPaI96jdb5b5w8kd47Dk=
dependencies:
array-uniq "^1.0.1"
-array-union@^2.1.0:
- version "2.1.0"
- resolved "https://registry.yarnpkg.com/array-union/-/array-union-2.1.0.tgz#b798420adbeb1de828d84acd8a2e23d3efe85e8d"
- integrity sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==
-
array-uniq@^1.0.1:
version "1.0.3"
- resolved "https://registry.yarnpkg.com/array-uniq/-/array-uniq-1.0.3.tgz#af6ac877a25cc7f74e058894753858dfdb24fdb6"
+ resolved "https://registry.npmjs.org/array-uniq/-/array-uniq-1.0.3.tgz"
integrity sha1-r2rId6Jcx/dOBYiUdThY39sk/bY=
array-unique@^0.3.2:
version "0.3.2"
- resolved "https://registry.yarnpkg.com/array-unique/-/array-unique-0.3.2.tgz#a894b75d4bc4f6cd679ef3244a9fd8f46ae2d428"
+ resolved "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz"
integrity sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=
arrify@^1.0.1:
version "1.0.1"
- resolved "https://registry.yarnpkg.com/arrify/-/arrify-1.0.1.tgz#898508da2226f380df904728456849c1501a4b0d"
+ resolved "https://registry.npmjs.org/arrify/-/arrify-1.0.1.tgz"
integrity sha1-iYUI2iIm84DfkEcoRWhJwVAaSw0=
+as-table@^1.0.36:
+ version "1.0.55"
+ resolved "https://registry.yarnpkg.com/as-table/-/as-table-1.0.55.tgz#dc984da3937745de902cea1d45843c01bdbbec4f"
+ integrity sha512-xvsWESUJn0JN421Xb9MQw6AsMHRCUknCe0Wjlxvjud80mU4E6hQf1A6NzQKcYNmYw62MfzEtXc+badstZP3JpQ==
+ dependencies:
+ printable-characters "^1.0.42"
+
asap@^2.0.0:
version "2.0.6"
- resolved "https://registry.yarnpkg.com/asap/-/asap-2.0.6.tgz#e50347611d7e690943208bbdafebcbc2fb866d46"
+ resolved "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz"
integrity sha1-5QNHYR1+aQlDIIu9r+vLwvuGbUY=
asn1@~0.2.3:
version "0.2.4"
- resolved "https://registry.yarnpkg.com/asn1/-/asn1-0.2.4.tgz#8d2475dfab553bb33e77b54e59e880bb8ce23136"
+ resolved "https://registry.npmjs.org/asn1/-/asn1-0.2.4.tgz"
integrity sha512-jxwzQpLQjSmWXgwaCZE9Nz+glAG01yF1QnWgbhGwHI5A6FRIEY6IVqtHhIepHqI7/kyEyQEagBC5mBEFlIYvdg==
dependencies:
safer-buffer "~2.1.0"
assert-plus@1.0.0, assert-plus@^1.0.0:
version "1.0.0"
- resolved "https://registry.yarnpkg.com/assert-plus/-/assert-plus-1.0.0.tgz#f12e0f3c5d77b0b1cdd9146942e4e96c1e4dd525"
+ resolved "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz"
integrity sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=
assertion-error@^1.1.0:
version "1.1.0"
- resolved "https://registry.yarnpkg.com/assertion-error/-/assertion-error-1.1.0.tgz#e60b6b0e8f301bd97e5375215bda406c85118c0b"
+ resolved "https://registry.npmjs.org/assertion-error/-/assertion-error-1.1.0.tgz"
integrity sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw==
+assertion-error@^2.0.1:
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/assertion-error/-/assertion-error-2.0.1.tgz#f641a196b335690b1070bf00b6e7593fec190bf7"
+ integrity sha512-Izi8RQcffqCeNVgFigKli1ssklIbpHnCYc6AknXGYoB6grJqyeby7jv12JUQgmTAnIDnbck1uxksT4dzN3PWBA==
+
assign-symbols@^1.0.0:
version "1.0.0"
- resolved "https://registry.yarnpkg.com/assign-symbols/-/assign-symbols-1.0.0.tgz#59667f41fadd4f20ccbc2bb96b8d4f7f78ec0367"
+ resolved "https://registry.npmjs.org/assign-symbols/-/assign-symbols-1.0.0.tgz"
integrity sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c=
-astral-regex@^1.0.0:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/astral-regex/-/astral-regex-1.0.0.tgz#6c8c3fb827dd43ee3918f27b82782ab7658a6fd9"
- integrity sha512-+Ryf6g3BKoRc7jfp7ad8tM4TtMiaWvbF/1/sQcZPkkS7ag3D5nMBCe2UfOTONtAkaG0tO0ij3C5Lwmf1EiyjHg==
-
async@1.x:
version "1.5.2"
- resolved "https://registry.yarnpkg.com/async/-/async-1.5.2.tgz#ec6a61ae56480c0c3cb241c95618e20892f9672a"
+ resolved "https://registry.npmjs.org/async/-/async-1.5.2.tgz"
integrity sha1-7GphrlZIDAw8skHJVhjiCJL5Zyo=
async@2.6.4:
version "2.6.4"
- resolved "https://registry.yarnpkg.com/async/-/async-2.6.4.tgz#706b7ff6084664cd7eae713f6f965433b5504221"
+ resolved "https://registry.npmjs.org/async/-/async-2.6.4.tgz"
integrity sha512-mzo5dfJYwAn29PeiJ0zvwTo04zj8HDJj0Mn8TD7sno7q12prdbnasKJHhkm2c1LgrhlJ0teaea8860oxi51mGA==
dependencies:
lodash "^4.17.14"
+async@^0.9.0:
+ version "0.9.2"
+ resolved "https://registry.yarnpkg.com/async/-/async-0.9.2.tgz#aea74d5e61c1f899613bf64bda66d4c78f2fd17d"
+ integrity sha512-l6ToIJIotphWahxxHyzK9bnLR6kM4jJIIgLShZeqLY7iboHoGkdgFl7W2/Ivi4SkMJYGKqW8vSuk0uKUj6qsSw==
+
asynckit@^0.4.0:
version "0.4.0"
- resolved "https://registry.yarnpkg.com/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79"
+ resolved "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz"
integrity sha1-x57Zf380y48robyXkLzDZkdLS3k=
atob-lite@^2.0.0:
version "2.0.0"
- resolved "https://registry.yarnpkg.com/atob-lite/-/atob-lite-2.0.0.tgz#0fef5ad46f1bd7a8502c65727f0367d5ee43d696"
+ resolved "https://registry.npmjs.org/atob-lite/-/atob-lite-2.0.0.tgz"
integrity sha1-D+9a1G8b16hQLGVyfwNn1e5D1pY=
atob@^2.1.2:
version "2.1.2"
- resolved "https://registry.yarnpkg.com/atob/-/atob-2.1.2.tgz#6d9517eb9e030d2436666651e86bd9f6f13533c9"
+ resolved "https://registry.npmjs.org/atob/-/atob-2.1.2.tgz"
integrity sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg==
aws-sign2@~0.7.0:
version "0.7.0"
- resolved "https://registry.yarnpkg.com/aws-sign2/-/aws-sign2-0.7.0.tgz#b46e890934a9591f2d2f6f86d7e6a9f1b3fe76a8"
+ resolved "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz"
integrity sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg=
aws4@^1.8.0:
version "1.10.1"
- resolved "https://registry.yarnpkg.com/aws4/-/aws4-1.10.1.tgz#e1e82e4f3e999e2cfd61b161280d16a111f86428"
+ resolved "https://registry.npmjs.org/aws4/-/aws4-1.10.1.tgz"
integrity sha512-zg7Hz2k5lI8kb7U32998pRRFin7zJlkfezGJjUc2heaD4Pw2wObakCDVzkKztTm/Ln7eiVvYsjqak0Ed4LkMDA==
balanced-match@^1.0.0:
version "1.0.0"
- resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.0.tgz#89b4d199ab2bee49de164ea02b89ce462d71b767"
+ resolved "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz"
integrity sha1-ibTRmasr7kneFk6gK4nORi1xt2c=
+balanced-match@^4.0.2:
+ version "4.0.4"
+ resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-4.0.4.tgz#bfb10662feed8196a2c62e7c68e17720c274179a"
+ integrity sha512-BLrgEcRTwX2o6gGxGOCNyMvGSp35YofuYzw9h1IMTRmKqttAZZVU67bdb9Pr2vUHA8+j3i2tJfjO6C6+4myGTA==
+
base64-js@0.0.2:
version "0.0.2"
- resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-0.0.2.tgz#024f0f72afa25b75f9c0ee73cd4f55ec1bed9784"
+ resolved "https://registry.npmjs.org/base64-js/-/base64-js-0.0.2.tgz"
integrity sha1-Ak8Pcq+iW3X5wO5zzU9V7Bvtl4Q=
base@^0.11.1:
version "0.11.2"
- resolved "https://registry.yarnpkg.com/base/-/base-0.11.2.tgz#7bde5ced145b6d551a90db87f83c558b4eb48a8f"
+ resolved "https://registry.npmjs.org/base/-/base-0.11.2.tgz"
integrity sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg==
dependencies:
cache-base "^1.0.1"
@@ -1441,39 +2838,41 @@ base@^0.11.1:
bcrypt-pbkdf@^1.0.0:
version "1.0.2"
- resolved "https://registry.yarnpkg.com/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz#a4301d389b6a43f9b67ff3ca11a3f6637e360e9e"
+ resolved "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz"
integrity sha1-pDAdOJtqQ/m2f/PKEaP2Y342Dp4=
dependencies:
tweetnacl "^0.14.3"
before-after-hook@^2.0.0:
version "2.1.0"
- resolved "https://registry.yarnpkg.com/before-after-hook/-/before-after-hook-2.1.0.tgz#b6c03487f44e24200dd30ca5e6a1979c5d2fb635"
+ resolved "https://registry.npmjs.org/before-after-hook/-/before-after-hook-2.1.0.tgz"
integrity sha512-IWIbu7pMqyw3EAJHzzHbWa85b6oud/yfKYg5rqB5hNE8CeMi3nX+2C2sj0HswfblST86hpVEOAb9x34NZd6P7A==
-binary-extensions@^2.0.0:
- version "2.1.0"
- resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-2.1.0.tgz#30fa40c9e7fe07dbc895678cd287024dea241dd9"
- integrity sha512-1Yj8h9Q+QDF5FzhMs/c9+6UntbD5MkRfRwac8DoEm9ZfUBZ7tZ55YcGVAzEe4bXsdQHEk+s9S5wsOKVdZrw0tQ==
+bindings@1.5.0:
+ version "1.5.0"
+ resolved "https://registry.yarnpkg.com/bindings/-/bindings-1.5.0.tgz#10353c9e945334bc0511a6d90b38fbc7c9c504df"
+ integrity sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ==
+ dependencies:
+ file-uri-to-path "1.0.0"
-bluebird@3.4.1:
- version "3.4.1"
- resolved "https://registry.yarnpkg.com/bluebird/-/bluebird-3.4.1.tgz#b731ddf48e2dd3bedac2e75e1215a11bcb91fa07"
- integrity sha1-tzHd9I4t077awudeEhWhG8uR+gc=
+birpc@0.2.14:
+ version "0.2.14"
+ resolved "https://registry.yarnpkg.com/birpc/-/birpc-0.2.14.tgz#4a5498771e6ff24cf8ae5f47faf90e76ca2fce03"
+ integrity sha512-37FHE8rqsYM5JEKCnXFyHpBCzvgHEExwVVTq+nUmloInU7l8ezD1TpOhKpS8oe1DTYFqEK27rFZVKG43oTqXRA==
-bluebird@3.5.2:
- version "3.5.2"
- resolved "https://registry.yarnpkg.com/bluebird/-/bluebird-3.5.2.tgz#1be0908e054a751754549c270489c1505d4ab15a"
- integrity sha512-dhHTWMI7kMx5whMQntl7Vr9C6BvV10lFXDAasnqnrMYhXVCzzk6IO9Fo2L75jXHT07WrOngL1WDXOp+yYS91Yg==
+blake3-wasm@2.1.5:
+ version "2.1.5"
+ resolved "https://registry.yarnpkg.com/blake3-wasm/-/blake3-wasm-2.1.5.tgz#b22dbb84bc9419ed0159caa76af4b1b132e6ba52"
+ integrity sha512-F1+K8EbfOZE49dtoPtmxUQrpXaBIl3ICvasLh+nJta0xkz+9kF/7uet9fLnwKqhDrmj6g+6K3Tw9yQPUg2ka5g==
-bluebird@^3.5.1, bluebird@^3.5.3, bluebird@^3.5.5:
+bluebird@3.7.2, bluebird@^3.5.1, bluebird@^3.5.3, bluebird@^3.5.5:
version "3.7.2"
- resolved "https://registry.yarnpkg.com/bluebird/-/bluebird-3.7.2.tgz#9f229c15be272454ffa973ace0dbee79a1b0c36f"
+ resolved "https://registry.npmjs.org/bluebird/-/bluebird-3.7.2.tgz"
integrity sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==
bops@0.0.6:
version "0.0.6"
- resolved "https://registry.yarnpkg.com/bops/-/bops-0.0.6.tgz#082d1d55fa01e60dbdc2ebc2dba37f659554cf3a"
+ resolved "https://registry.npmjs.org/bops/-/bops-0.0.6.tgz"
integrity sha1-CC0dVfoB5g29wuvC26N/ZZVUzzo=
dependencies:
base64-js "0.0.2"
@@ -1481,15 +2880,36 @@ bops@0.0.6:
brace-expansion@^1.1.7:
version "1.1.11"
- resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd"
+ resolved "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz"
integrity sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==
dependencies:
balanced-match "^1.0.0"
concat-map "0.0.1"
+brace-expansion@^2.0.1:
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-2.0.1.tgz#1edc459e0f0c548486ecf9fc99f2221364b9a0ae"
+ integrity sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==
+ dependencies:
+ balanced-match "^1.0.0"
+
+brace-expansion@^5.0.2:
+ version "5.0.3"
+ resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-5.0.3.tgz#6a9c6c268f85b53959ec527aeafe0f7300258eef"
+ integrity sha512-fy6KJm2RawA5RcHkLa1z/ScpBeA762UF9KmZQxwIbDtRJrgLzM10depAiEQ+CXYcoiqW1/m96OAAoke2nE9EeA==
+ dependencies:
+ balanced-match "^4.0.2"
+
+brace-expansion@^5.0.5:
+ version "5.0.5"
+ resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-5.0.5.tgz#dcc3a37116b79f3e1b46db994ced5d570e930fdb"
+ integrity sha512-VZznLgtwhn+Mact9tfiwx64fA9erHH/MCXEUfB/0bX/6Fz6ny5EGTXYltMocqg4xFAQZtnO3DHWWXi8RiuN7cQ==
+ dependencies:
+ balanced-match "^4.0.2"
+
braces@^2.3.1:
version "2.3.2"
- resolved "https://registry.yarnpkg.com/braces/-/braces-2.3.2.tgz#5979fd3f14cd531565e5fa2df1abfff1dfaee729"
+ resolved "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz"
integrity sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==
dependencies:
arr-flatten "^1.1.0"
@@ -1503,51 +2923,54 @@ braces@^2.3.1:
split-string "^3.0.2"
to-regex "^3.0.1"
-braces@^3.0.1, braces@^3.0.2, braces@~3.0.2:
- version "3.0.2"
- resolved "https://registry.yarnpkg.com/braces/-/braces-3.0.2.tgz#3454e1a462ee8d599e236df336cd9ea4f8afe107"
- integrity sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==
- dependencies:
- fill-range "^7.0.1"
-
-browser-stdout@1.3.1:
+browser-stdout@^1.3.1:
version "1.3.1"
- resolved "https://registry.yarnpkg.com/browser-stdout/-/browser-stdout-1.3.1.tgz#baa559ee14ced73452229bad7326467c61fabd60"
+ resolved "https://registry.npmjs.org/browser-stdout/-/browser-stdout-1.3.1.tgz"
integrity sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw==
+browserslist@^4.24.0:
+ version "4.24.5"
+ resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.24.5.tgz#aa0f5b8560fe81fde84c6dcb38f759bafba0e11b"
+ integrity sha512-FDToo4Wo82hIdgc1CQ+NQD0hEhmpPjrZ3hiUgwgOG6IuTdlpr8jdjyG24P6cNP1yJpTLzS5OcGgSw0xmDU1/Tw==
+ dependencies:
+ caniuse-lite "^1.0.30001716"
+ electron-to-chromium "^1.5.149"
+ node-releases "^2.0.19"
+ update-browserslist-db "^1.1.3"
+
btoa-lite@^1.0.0:
version "1.0.0"
- resolved "https://registry.yarnpkg.com/btoa-lite/-/btoa-lite-1.0.0.tgz#337766da15801210fdd956c22e9c6891ab9d0337"
+ resolved "https://registry.npmjs.org/btoa-lite/-/btoa-lite-1.0.0.tgz"
integrity sha1-M3dm2hWAEhD92VbCLpxokaudAzc=
buffer-from@^1.0.0:
version "1.1.1"
- resolved "https://registry.yarnpkg.com/buffer-from/-/buffer-from-1.1.1.tgz#32713bc028f75c02fdb710d7c7bcec1f2c6070ef"
+ resolved "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.1.tgz"
integrity sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A==
-buffer-writer@2.0.0:
- version "2.0.0"
- resolved "https://registry.yarnpkg.com/buffer-writer/-/buffer-writer-2.0.0.tgz#ce7eb81a38f7829db09c873f2fbb792c0c98ec04"
- integrity sha512-a7ZpuTZU1TRtnwyCNW3I5dc0wWNC3VR9S++Ewyk2HHZdrO3CQJqSpd+95Us590V6AL7JqUAH2IwZ/398PmNFgw==
-
builtins@^1.0.3:
version "1.0.3"
- resolved "https://registry.yarnpkg.com/builtins/-/builtins-1.0.3.tgz#cb94faeb61c8696451db36534e1422f94f0aee88"
+ resolved "https://registry.npmjs.org/builtins/-/builtins-1.0.3.tgz"
integrity sha1-y5T662HIaWRR2zZTThQi+U8K7og=
byline@^5.0.0:
version "5.0.0"
- resolved "https://registry.yarnpkg.com/byline/-/byline-5.0.0.tgz#741c5216468eadc457b03410118ad77de8c1ddb1"
+ resolved "https://registry.npmjs.org/byline/-/byline-5.0.0.tgz"
integrity sha1-dBxSFkaOrcRXsDQQEYrXfejB3bE=
byte-size@^5.0.1:
version "5.0.1"
- resolved "https://registry.yarnpkg.com/byte-size/-/byte-size-5.0.1.tgz#4b651039a5ecd96767e71a3d7ed380e48bed4191"
+ resolved "https://registry.npmjs.org/byte-size/-/byte-size-5.0.1.tgz"
integrity sha512-/XuKeqWocKsYa/cBY1YbSJSWWqTi4cFgr9S6OyM7PBaPbr9zvNGwWP33vt0uqGhwDdN+y3yhbXVILEUpnwEWGw==
+cac@^6.7.14:
+ version "6.7.14"
+ resolved "https://registry.yarnpkg.com/cac/-/cac-6.7.14.tgz#804e1e6f506ee363cb0e3ccbb09cad5dd9870959"
+ integrity sha512-b6Ilus+c3RrdDk+JhLKUAQfzzgLEPy6wcXqS7f/xe1EETvsDP6GORG7SFuOs6cID5YkqchW/LXZbX5bc8j7ZcQ==
+
cacache@^12.0.0, cacache@^12.0.3:
version "12.0.4"
- resolved "https://registry.yarnpkg.com/cacache/-/cacache-12.0.4.tgz#668bcbd105aeb5f1d92fe25570ec9525c8faa40c"
+ resolved "https://registry.npmjs.org/cacache/-/cacache-12.0.4.tgz"
integrity sha512-a0tMB40oefvuInr4Cwb3GerbL9xTj1D5yg0T5xrjGCGyfvbxseIXX7BAO/u/hIXdafzOI5JC3wDwHyf24buOAQ==
dependencies:
bluebird "^3.5.5"
@@ -1566,9 +2989,27 @@ cacache@^12.0.0, cacache@^12.0.3:
unique-filename "^1.1.1"
y18n "^4.0.0"
+cacache@^19.0.1:
+ version "19.0.1"
+ resolved "https://registry.yarnpkg.com/cacache/-/cacache-19.0.1.tgz#3370cc28a758434c85c2585008bd5bdcff17d6cd"
+ integrity sha512-hdsUxulXCi5STId78vRVYEtDAjq99ICAUktLTeTYsLoTE6Z8dS0c8pWNCxwdrk9YfJeobDZc2Y186hD/5ZQgFQ==
+ dependencies:
+ "@npmcli/fs" "^4.0.0"
+ fs-minipass "^3.0.0"
+ glob "^10.2.2"
+ lru-cache "^10.0.1"
+ minipass "^7.0.3"
+ minipass-collect "^2.0.1"
+ minipass-flush "^1.0.5"
+ minipass-pipeline "^1.2.4"
+ p-map "^7.0.2"
+ ssri "^12.0.0"
+ tar "^7.4.3"
+ unique-filename "^4.0.0"
+
cache-base@^1.0.1:
version "1.0.1"
- resolved "https://registry.yarnpkg.com/cache-base/-/cache-base-1.0.1.tgz#0a7f46416831c8b662ee36fe4e7c59d76f666ab2"
+ resolved "https://registry.npmjs.org/cache-base/-/cache-base-1.0.1.tgz"
integrity sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ==
dependencies:
collection-visit "^1.0.0"
@@ -1581,28 +3022,38 @@ cache-base@^1.0.1:
union-value "^1.0.0"
unset-value "^1.0.0"
+caching-transform@^4.0.0:
+ version "4.0.0"
+ resolved "https://registry.yarnpkg.com/caching-transform/-/caching-transform-4.0.0.tgz#00d297a4206d71e2163c39eaffa8157ac0651f0f"
+ integrity sha512-kpqOvwXnjjN44D89K5ccQC+RUrsy7jB/XLlRrx0D7/2HNcTPqzsb6XgYoErwko6QsV184CA2YgS1fxDiiDZMWA==
+ dependencies:
+ hasha "^5.0.0"
+ make-dir "^3.0.0"
+ package-hash "^4.0.0"
+ write-file-atomic "^3.0.0"
+
call-me-maybe@^1.0.1:
version "1.0.1"
- resolved "https://registry.yarnpkg.com/call-me-maybe/-/call-me-maybe-1.0.1.tgz#26d208ea89e37b5cbde60250a15f031c16a4d66b"
+ resolved "https://registry.npmjs.org/call-me-maybe/-/call-me-maybe-1.0.1.tgz"
integrity sha1-JtII6onje1y95gJQoV8DHBak1ms=
caller-callsite@^2.0.0:
version "2.0.0"
- resolved "https://registry.yarnpkg.com/caller-callsite/-/caller-callsite-2.0.0.tgz#847e0fce0a223750a9a027c54b33731ad3154134"
+ resolved "https://registry.npmjs.org/caller-callsite/-/caller-callsite-2.0.0.tgz"
integrity sha1-hH4PzgoiN1CpoCfFSzNzGtMVQTQ=
dependencies:
callsites "^2.0.0"
caller-path@^2.0.0:
version "2.0.0"
- resolved "https://registry.yarnpkg.com/caller-path/-/caller-path-2.0.0.tgz#468f83044e369ab2010fac5f06ceee15bb2cb1f4"
+ resolved "https://registry.npmjs.org/caller-path/-/caller-path-2.0.0.tgz"
integrity sha1-Ro+DBE42mrIBD6xfBs7uFbsssfQ=
dependencies:
caller-callsite "^2.0.0"
callsites@^2.0.0:
version "2.0.0"
- resolved "https://registry.yarnpkg.com/callsites/-/callsites-2.0.0.tgz#06eb84f00eea413da86affefacbffb36093b3c50"
+ resolved "https://registry.npmjs.org/callsites/-/callsites-2.0.0.tgz"
integrity sha1-BuuE8A7qQT2oav/vrL/7Ngk7PFA=
callsites@^3.0.0:
@@ -1612,7 +3063,7 @@ callsites@^3.0.0:
camelcase-keys@^2.0.0:
version "2.1.0"
- resolved "https://registry.yarnpkg.com/camelcase-keys/-/camelcase-keys-2.1.0.tgz#308beeaffdf28119051efa1d932213c91b8f92e7"
+ resolved "https://registry.npmjs.org/camelcase-keys/-/camelcase-keys-2.1.0.tgz"
integrity sha1-MIvur/3ygRkFHvodkyITyRuPkuc=
dependencies:
camelcase "^2.0.0"
@@ -1620,7 +3071,7 @@ camelcase-keys@^2.0.0:
camelcase-keys@^4.0.0:
version "4.2.0"
- resolved "https://registry.yarnpkg.com/camelcase-keys/-/camelcase-keys-4.2.0.tgz#a2aa5fb1af688758259c32c141426d78923b9b77"
+ resolved "https://registry.npmjs.org/camelcase-keys/-/camelcase-keys-4.2.0.tgz"
integrity sha1-oqpfsa9oh1glnDLBQUJteJI7m3c=
dependencies:
camelcase "^4.1.0"
@@ -1629,7 +3080,7 @@ camelcase-keys@^4.0.0:
camelcase-keys@^6.2.2:
version "6.2.2"
- resolved "https://registry.yarnpkg.com/camelcase-keys/-/camelcase-keys-6.2.2.tgz#5e755d6ba51aa223ec7d3d52f25778210f9dc3c0"
+ resolved "https://registry.npmjs.org/camelcase-keys/-/camelcase-keys-6.2.2.tgz"
integrity sha512-YrwaA0vEKazPBkn0ipTiMpSajYDSe+KjQfrjhcBMxJt/znbvlHd8Pw/Vamaz5EB4Wfhs3SUR3Z9mwRu/P3s3Yg==
dependencies:
camelcase "^5.3.1"
@@ -1638,27 +3089,37 @@ camelcase-keys@^6.2.2:
camelcase@^2.0.0:
version "2.1.1"
- resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-2.1.1.tgz#7c1d16d679a1bbe59ca02cacecfb011e201f5a1f"
+ resolved "https://registry.npmjs.org/camelcase/-/camelcase-2.1.1.tgz"
integrity sha1-fB0W1nmhu+WcoCys7PsBHiAfWh8=
camelcase@^4.1.0:
version "4.1.0"
- resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-4.1.0.tgz#d545635be1e33c542649c69173e5de6acfae34dd"
+ resolved "https://registry.npmjs.org/camelcase/-/camelcase-4.1.0.tgz"
integrity sha1-1UVjW+HjPFQmScaRc+Xeas+uNN0=
camelcase@^5.0.0, camelcase@^5.3.1:
version "5.3.1"
- resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-5.3.1.tgz#e3c9b31569e106811df242f715725a1f4c494320"
+ resolved "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz"
integrity sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==
+camelcase@^6.0.0:
+ version "6.3.0"
+ resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-6.3.0.tgz#5685b95eb209ac9c0c177467778c9c84df58ba9a"
+ integrity sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==
+
+caniuse-lite@^1.0.30001716:
+ version "1.0.30001717"
+ resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001717.tgz#5d9fec5ce09796a1893013825510678928aca129"
+ integrity sha512-auPpttCq6BDEG8ZAuHJIplGw6GODhjw+/11e7IjpnYCxZcW/ONgPs0KVBJ0d1bY3e2+7PRe5RCLyP+PfwVgkYw==
+
caseless@~0.12.0:
version "0.12.0"
- resolved "https://registry.yarnpkg.com/caseless/-/caseless-0.12.0.tgz#1b681c21ff84033c826543090689420d187151dc"
+ resolved "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz"
integrity sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=
chai@^4.1.1, chai@^4.2.0:
version "4.3.6"
- resolved "https://registry.yarnpkg.com/chai/-/chai-4.3.6.tgz#ffe4ba2d9fa9d6680cc0b370adae709ec9011e9c"
+ resolved "https://registry.npmjs.org/chai/-/chai-4.3.6.tgz"
integrity sha512-bbcp3YfHCUzMOvKqsztczerVgBKSsEijCySNlHHbX3VG1nskvqjz5Rfso1gGwD6w6oOV3eI60pKuMOV5MV7p3Q==
dependencies:
assertion-error "^1.1.0"
@@ -1669,66 +3130,89 @@ chai@^4.1.1, chai@^4.2.0:
pathval "^1.1.1"
type-detect "^4.0.5"
+chai@^5.2.0:
+ version "5.2.0"
+ resolved "https://registry.yarnpkg.com/chai/-/chai-5.2.0.tgz#1358ee106763624114addf84ab02697e411c9c05"
+ integrity sha512-mCuXncKXk5iCLhfhwTc0izo0gtEmpz5CtG2y8GiOINBlMVS6v8TMRc5TaLWKS6692m9+dVVfzgeVxR5UxWHTYw==
+ dependencies:
+ assertion-error "^2.0.1"
+ check-error "^2.1.1"
+ deep-eql "^5.0.1"
+ loupe "^3.1.0"
+ pathval "^2.0.0"
+
chalk@^2.0.0, chalk@^2.3.1, chalk@^2.4.2:
version "2.4.2"
- resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424"
+ resolved "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz"
integrity sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==
dependencies:
ansi-styles "^3.2.1"
escape-string-regexp "^1.0.5"
supports-color "^5.3.0"
-chalk@^4.0.0:
- version "4.1.0"
- resolved "https://registry.yarnpkg.com/chalk/-/chalk-4.1.0.tgz#4e14870a618d9e2edd97dd8345fd9d9dc315646a"
- integrity sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==
+chalk@^4.1.0:
+ version "4.1.2"
+ resolved "https://registry.yarnpkg.com/chalk/-/chalk-4.1.2.tgz#aac4e2b7734a740867aeb16bf02aad556a1e7a01"
+ integrity sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==
dependencies:
ansi-styles "^4.1.0"
supports-color "^7.1.0"
chardet@^0.7.0:
version "0.7.0"
- resolved "https://registry.yarnpkg.com/chardet/-/chardet-0.7.0.tgz#90094849f0937f2eedc2425d0d28a9e5f0cbad9e"
+ resolved "https://registry.npmjs.org/chardet/-/chardet-0.7.0.tgz"
integrity sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==
check-error@^1.0.2:
version "1.0.2"
- resolved "https://registry.yarnpkg.com/check-error/-/check-error-1.0.2.tgz#574d312edd88bb5dd8912e9286dd6c0aed4aac82"
+ resolved "https://registry.npmjs.org/check-error/-/check-error-1.0.2.tgz"
integrity sha1-V00xLt2Iu13YkS6Sht1sCu1KrII=
-chokidar@3.3.0:
- version "3.3.0"
- resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.3.0.tgz#12c0714668c55800f659e262d4962a97faf554a6"
- integrity sha512-dGmKLDdT3Gdl7fBUe8XK+gAtGmzy5Fn0XkkWQuYxGIgWVPPse2CxFA5mtrlD0TOHaHjEUqkWNyP1XdHoJES/4A==
- dependencies:
- anymatch "~3.1.1"
- braces "~3.0.2"
- glob-parent "~5.1.0"
- is-binary-path "~2.1.0"
- is-glob "~4.0.1"
- normalize-path "~3.0.0"
- readdirp "~3.2.0"
- optionalDependencies:
- fsevents "~2.1.1"
+check-error@^2.1.1:
+ version "2.1.1"
+ resolved "https://registry.yarnpkg.com/check-error/-/check-error-2.1.1.tgz#87eb876ae71ee388fa0471fe423f494be1d96ccc"
+ integrity sha512-OAlb+T7V4Op9OwdkjmguYRqncdlx5JiofwOAUkmTF+jNdHwzTaTs4sRAGpzLF3oOz5xAyDGrPgeIDFQmDOTiJw==
+
+chokidar@^4.0.1:
+ version "4.0.3"
+ resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-4.0.3.tgz#7be37a4c03c9aee1ecfe862a4a23b2c70c205d30"
+ integrity sha512-Qgzu8kfBvo+cA4962jnP1KkS6Dop5NS6g7R5LFYJr4b8Ub94PPQXUksCw9PvXoeXPRRddRNC5C1JQUR2SMGtnA==
+ dependencies:
+ readdirp "^4.0.1"
chownr@^1.1.1, chownr@^1.1.2, chownr@^1.1.4:
version "1.1.4"
- resolved "https://registry.yarnpkg.com/chownr/-/chownr-1.1.4.tgz#6fc9d7b42d32a583596337666e7d08084da2cc6b"
+ resolved "https://registry.npmjs.org/chownr/-/chownr-1.1.4.tgz"
integrity sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==
+chownr@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/chownr/-/chownr-3.0.0.tgz#9855e64ecd240a9cc4267ce8a4aa5d24a1da15e4"
+ integrity sha512-+IxzY9BZOQd/XuYPRmrvEVjF/nqj5kgT4kEq7VofrDoM1MxoRjEWkrCC3EtLi59TVawxTAn+orJwFQcrqEN1+g==
+
+chrome-trace-event@^1.0.2:
+ version "1.0.4"
+ resolved "https://registry.yarnpkg.com/chrome-trace-event/-/chrome-trace-event-1.0.4.tgz#05bffd7ff928465093314708c93bdfa9bd1f0f5b"
+ integrity sha512-rNjApaLzuwaOTjCiT8lSDdGN1APCiqkChLMJxJPWLunPAt5fy8xgU9/jNOchV84wfIxrA0lRQB7oCT8jrn/wrQ==
+
chunky@^0.0.0:
version "0.0.0"
- resolved "https://registry.yarnpkg.com/chunky/-/chunky-0.0.0.tgz#1e7580a23c083897d2ad662459e7efd8465f608a"
+ resolved "https://registry.npmjs.org/chunky/-/chunky-0.0.0.tgz"
integrity sha1-HnWAojwIOJfSrWYkWefv2EZfYIo=
ci-info@^2.0.0:
version "2.0.0"
- resolved "https://registry.yarnpkg.com/ci-info/-/ci-info-2.0.0.tgz#67a9e964be31a51e15e5010d58e6f12834002f46"
+ resolved "https://registry.npmjs.org/ci-info/-/ci-info-2.0.0.tgz"
integrity sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ==
+cjs-module-lexer@^1.2.3:
+ version "1.4.3"
+ resolved "https://registry.yarnpkg.com/cjs-module-lexer/-/cjs-module-lexer-1.4.3.tgz#0f79731eb8cfe1ec72acd4066efac9d61991b00d"
+ integrity sha512-9z8TZaGM1pfswYeXrUpzPrkx8UnWYdhJclsiYMm6x/w5+nN+8Tf/LnAgfLGQCm59qAOxU8WwHEq2vNwF6i4j+Q==
+
class-utils@^0.3.5:
version "0.3.6"
- resolved "https://registry.yarnpkg.com/class-utils/-/class-utils-0.3.6.tgz#f93369ae8b9a7ce02fd41faad0ca83033190c463"
+ resolved "https://registry.npmjs.org/class-utils/-/class-utils-0.3.6.tgz"
integrity sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg==
dependencies:
arr-union "^3.1.0"
@@ -1736,30 +3220,53 @@ class-utils@^0.3.5:
isobject "^3.0.0"
static-extend "^0.1.1"
+clean-stack@^2.0.0:
+ version "2.2.0"
+ resolved "https://registry.yarnpkg.com/clean-stack/-/clean-stack-2.2.0.tgz#ee8472dbb129e727b31e8a10a427dee9dfe4008b"
+ integrity sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==
+
cli-cursor@^2.1.0:
version "2.1.0"
- resolved "https://registry.yarnpkg.com/cli-cursor/-/cli-cursor-2.1.0.tgz#b35dac376479facc3e94747d41d0d0f5238ffcb5"
+ resolved "https://registry.npmjs.org/cli-cursor/-/cli-cursor-2.1.0.tgz"
integrity sha1-s12sN2R5+sw+lHR9QdDQ9SOP/LU=
dependencies:
restore-cursor "^2.0.0"
cli-width@^2.0.0:
version "2.2.1"
- resolved "https://registry.yarnpkg.com/cli-width/-/cli-width-2.2.1.tgz#b0433d0b4e9c847ef18868a4ef16fd5fc8271c48"
+ resolved "https://registry.npmjs.org/cli-width/-/cli-width-2.2.1.tgz"
integrity sha512-GRMWDxpOB6Dgk2E5Uo+3eEBvtOOlimMmpbFiKuLFnQzYDavtLFY3K5ona41jgN/WdRZtG7utuVSVTL4HbZHGkw==
cliui@^5.0.0:
version "5.0.0"
- resolved "https://registry.yarnpkg.com/cliui/-/cliui-5.0.0.tgz#deefcfdb2e800784aa34f46fa08e06851c7bbbc5"
+ resolved "https://registry.npmjs.org/cliui/-/cliui-5.0.0.tgz"
integrity sha512-PYeGSEmmHM6zvoef2w8TPzlrnNpXIjTipYK780YswmIP9vjxmd6Y2a3CB2Ks6/AU8NHjZugXvo8w3oWM2qnwXA==
dependencies:
string-width "^3.1.0"
strip-ansi "^5.2.0"
wrap-ansi "^5.1.0"
+cliui@^6.0.0:
+ version "6.0.0"
+ resolved "https://registry.yarnpkg.com/cliui/-/cliui-6.0.0.tgz#511d702c0c4e41ca156d7d0e96021f23e13225b1"
+ integrity sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ==
+ dependencies:
+ string-width "^4.2.0"
+ strip-ansi "^6.0.0"
+ wrap-ansi "^6.2.0"
+
+cliui@^8.0.1:
+ version "8.0.1"
+ resolved "https://registry.yarnpkg.com/cliui/-/cliui-8.0.1.tgz#0c04b075db02cbfe60dc8e6cf2f5486b1a3608aa"
+ integrity sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==
+ dependencies:
+ string-width "^4.2.0"
+ strip-ansi "^6.0.1"
+ wrap-ansi "^7.0.0"
+
clone-deep@^4.0.1:
version "4.0.1"
- resolved "https://registry.yarnpkg.com/clone-deep/-/clone-deep-4.0.1.tgz#c19fd9bdbbf85942b4fd979c84dcf7d5f07c2387"
+ resolved "https://registry.npmjs.org/clone-deep/-/clone-deep-4.0.1.tgz"
integrity sha512-neHB9xuzh/wk0dIHweyAXv2aPGZIVk3pLMe+/RNzINf17fe0OG96QroktYAUm7SM1PBnzTabaLboqqxDyMU+SQ==
dependencies:
is-plain-object "^2.0.4"
@@ -1768,22 +3275,22 @@ clone-deep@^4.0.1:
clone@^1.0.2:
version "1.0.4"
- resolved "https://registry.yarnpkg.com/clone/-/clone-1.0.4.tgz#da309cc263df15994c688ca902179ca3c7cd7c7e"
+ resolved "https://registry.npmjs.org/clone/-/clone-1.0.4.tgz"
integrity sha1-2jCcwmPfFZlMaIypAheco8fNfH4=
co@4.6.0:
version "4.6.0"
- resolved "https://registry.yarnpkg.com/co/-/co-4.6.0.tgz#6ea6bdf3d853ae54ccb8e47bfa0bf3f9031fb184"
+ resolved "https://registry.npmjs.org/co/-/co-4.6.0.tgz"
integrity sha1-bqa989hTrlTMuOR7+gvz+QMfsYQ=
code-point-at@^1.0.0:
version "1.1.0"
- resolved "https://registry.yarnpkg.com/code-point-at/-/code-point-at-1.1.0.tgz#0d070b4d043a5bea33a2f1a40e2edb3d9a4ccf77"
+ resolved "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz"
integrity sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c=
collection-visit@^1.0.0:
version "1.0.0"
- resolved "https://registry.yarnpkg.com/collection-visit/-/collection-visit-1.0.0.tgz#4bc0373c164bc3291b4d368c829cf1a80a59dca0"
+ resolved "https://registry.npmjs.org/collection-visit/-/collection-visit-1.0.0.tgz"
integrity sha1-S8A3PBZLwykbTTaMgpzxqApZ3KA=
dependencies:
map-visit "^1.0.0"
@@ -1791,31 +3298,52 @@ collection-visit@^1.0.0:
color-convert@^1.9.0:
version "1.9.3"
- resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-1.9.3.tgz#bb71850690e1f136567de629d2d5471deda4c1e8"
+ resolved "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz"
integrity sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==
dependencies:
color-name "1.1.3"
color-convert@^2.0.1:
version "2.0.1"
- resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-2.0.1.tgz#72d3a68d598c9bdb3af2ad1e84f21d896abd4de3"
+ resolved "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz"
integrity sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==
dependencies:
color-name "~1.1.4"
color-name@1.1.3:
version "1.1.3"
- resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.3.tgz#a7d0558bd89c42f795dd42328f740831ca53bc25"
+ resolved "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz"
integrity sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=
-color-name@~1.1.4:
+color-name@^1.0.0, color-name@~1.1.4:
version "1.1.4"
- resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2"
+ resolved "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz"
integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==
+color-string@^1.9.0:
+ version "1.9.1"
+ resolved "https://registry.yarnpkg.com/color-string/-/color-string-1.9.1.tgz#4467f9146f036f855b764dfb5bf8582bf342c7a4"
+ integrity sha512-shrVawQFojnZv6xM40anx4CkoDP+fZsw/ZerEMsW/pyzsRbElpsL/DBVW7q3ExxwusdNXI3lXpuhEZkzs8p5Eg==
+ dependencies:
+ color-name "^1.0.0"
+ simple-swizzle "^0.2.2"
+
+color@^4.2.3:
+ version "4.2.3"
+ resolved "https://registry.yarnpkg.com/color/-/color-4.2.3.tgz#d781ecb5e57224ee43ea9627560107c0e0c6463a"
+ integrity sha512-1rXeuUUiGGrykh+CeBdu5Ie7OJwinCgQY0bc7GCRxy5xVHy+moaqkpL/jqQq0MtQOeYcrqEz4abc5f0KtU7W4A==
+ dependencies:
+ color-convert "^2.0.1"
+ color-string "^1.9.0"
+
+colorette@^2.0.14:
+ version "2.0.20"
+ resolved "https://registry.yarnpkg.com/colorette/-/colorette-2.0.20.tgz#9eb793e6833067f7235902fcd3b09917a000a95a"
+ integrity sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w==
+
columnify@^1.5.4:
version "1.5.4"
- resolved "https://registry.yarnpkg.com/columnify/-/columnify-1.5.4.tgz#4737ddf1c7b69a8a7c340570782e947eec8e78bb"
+ resolved "https://registry.npmjs.org/columnify/-/columnify-1.5.4.tgz"
integrity sha1-Rzfd8ce2mop8NAVweC6UfuyOeLs=
dependencies:
strip-ansi "^3.0.0"
@@ -1823,14 +3351,29 @@ columnify@^1.5.4:
combined-stream@^1.0.6, combined-stream@~1.0.6:
version "1.0.8"
- resolved "https://registry.yarnpkg.com/combined-stream/-/combined-stream-1.0.8.tgz#c3d45a8b34fd730631a110a8a2520682b31d5a7f"
+ resolved "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz"
integrity sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==
dependencies:
delayed-stream "~1.0.0"
+commander@^12.1.0:
+ version "12.1.0"
+ resolved "https://registry.yarnpkg.com/commander/-/commander-12.1.0.tgz#01423b36f501259fdaac4d0e4d60c96c991585d3"
+ integrity sha512-Vw8qHK3bZM9y/P10u3Vib8o/DdkvA2OtPtZvD871QKjy74Wj1WSKFILMPRPSdUSx5RFK1arlJzEtA4PkFgnbuA==
+
+commander@^2.20.0:
+ version "2.20.3"
+ resolved "https://registry.yarnpkg.com/commander/-/commander-2.20.3.tgz#fd485e84c03eb4881c20722ba48035e8531aeb33"
+ integrity sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==
+
+commondir@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/commondir/-/commondir-1.0.1.tgz#ddd800da0c66127393cca5950ea968a3aaf1253b"
+ integrity sha512-W9pAhw0ja1Edb5GVdIF1mjZw/ASI0AlShXM83UUGe2DVr5TdAPEA1OA8m/g8zWp9x6On7gqufY+FatDbC3MDQg==
+
compare-func@^2.0.0:
version "2.0.0"
- resolved "https://registry.yarnpkg.com/compare-func/-/compare-func-2.0.0.tgz#fb65e75edbddfd2e568554e8b5b05fff7a51fcb3"
+ resolved "https://registry.npmjs.org/compare-func/-/compare-func-2.0.0.tgz"
integrity sha512-zHig5N+tPWARooBnb0Zx1MFcdfpyJrfTJ3Y5L+IFvUm8rM74hHz66z0gw0x4tijh5CorKkKUCnW82R2vmpeCRA==
dependencies:
array-ify "^1.0.0"
@@ -1838,17 +3381,17 @@ compare-func@^2.0.0:
component-emitter@^1.2.1:
version "1.3.0"
- resolved "https://registry.yarnpkg.com/component-emitter/-/component-emitter-1.3.0.tgz#16e4070fba8ae29b679f2215853ee181ab2eabc0"
+ resolved "https://registry.npmjs.org/component-emitter/-/component-emitter-1.3.0.tgz"
integrity sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg==
concat-map@0.0.1:
version "0.0.1"
- resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b"
+ resolved "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz"
integrity sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=
-concat-stream@^1.5.0:
+concat-stream@^1.4.6, concat-stream@^1.5.0:
version "1.6.2"
- resolved "https://registry.yarnpkg.com/concat-stream/-/concat-stream-1.6.2.tgz#904bdf194cd3122fc675c77fc4ac3d4ff0fd1a34"
+ resolved "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.2.tgz"
integrity sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==
dependencies:
buffer-from "^1.0.0"
@@ -1858,7 +3401,7 @@ concat-stream@^1.5.0:
concat-stream@^2.0.0:
version "2.0.0"
- resolved "https://registry.yarnpkg.com/concat-stream/-/concat-stream-2.0.0.tgz#414cf5af790a48c60ab9be4527d56d5e41133cb1"
+ resolved "https://registry.npmjs.org/concat-stream/-/concat-stream-2.0.0.tgz"
integrity sha512-MWufYdFw53ccGjCA+Ol7XJYpAlW6/prSMzuPOTRnJGcGzuhLn4Scrz7qf6o8bROZ514ltazcIFJZevcfbo0x7A==
dependencies:
buffer-from "^1.0.0"
@@ -1868,14 +3411,14 @@ concat-stream@^2.0.0:
concat-stream@~1.0.1:
version "1.0.1"
- resolved "https://registry.yarnpkg.com/concat-stream/-/concat-stream-1.0.1.tgz#018b18bc1c7d073a2dc82aa48442341a2c4dd79f"
+ resolved "https://registry.npmjs.org/concat-stream/-/concat-stream-1.0.1.tgz"
integrity sha1-AYsYvBx9BzotyCqkhEI0GixN158=
dependencies:
bops "0.0.6"
config-chain@^1.1.11:
version "1.1.12"
- resolved "https://registry.yarnpkg.com/config-chain/-/config-chain-1.1.12.tgz#0fde8d091200eb5e808caf25fe618c02f48e4efa"
+ resolved "https://registry.npmjs.org/config-chain/-/config-chain-1.1.12.tgz"
integrity sha512-a1eOIcu8+7lUInge4Rpf/n4Krkf3Dd9lqhljRzII1/Zno/kRtUWnznPO3jOKBmTEktkt3fkxisUcivoj0ebzoA==
dependencies:
ini "^1.3.4"
@@ -1883,12 +3426,12 @@ config-chain@^1.1.11:
console-control-strings@^1.0.0, console-control-strings@~1.1.0:
version "1.1.0"
- resolved "https://registry.yarnpkg.com/console-control-strings/-/console-control-strings-1.1.0.tgz#3d7cf4464db6446ea644bf4b39507f9851008e8e"
+ resolved "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz"
integrity sha1-PXz0Rk22RG6mRL9LOVB/mFEAjo4=
conventional-changelog-angular@^5.0.3:
version "5.0.11"
- resolved "https://registry.yarnpkg.com/conventional-changelog-angular/-/conventional-changelog-angular-5.0.11.tgz#99a3ca16e4a5305e0c2c2fae3ef74fd7631fc3fb"
+ resolved "https://registry.npmjs.org/conventional-changelog-angular/-/conventional-changelog-angular-5.0.11.tgz"
integrity sha512-nSLypht/1yEflhuTogC03i7DX7sOrXGsRn14g131Potqi6cbGbGEE9PSDEHKldabB6N76HiSyw9Ph+kLmC04Qw==
dependencies:
compare-func "^2.0.0"
@@ -1896,7 +3439,7 @@ conventional-changelog-angular@^5.0.3:
conventional-changelog-core@^3.1.6:
version "3.2.3"
- resolved "https://registry.yarnpkg.com/conventional-changelog-core/-/conventional-changelog-core-3.2.3.tgz#b31410856f431c847086a7dcb4d2ca184a7d88fb"
+ resolved "https://registry.npmjs.org/conventional-changelog-core/-/conventional-changelog-core-3.2.3.tgz"
integrity sha512-LMMX1JlxPIq/Ez5aYAYS5CpuwbOk6QFp8O4HLAcZxe3vxoCtABkhfjetk8IYdRB9CDQGwJFLR3Dr55Za6XKgUQ==
dependencies:
conventional-changelog-writer "^4.0.6"
@@ -1915,12 +3458,12 @@ conventional-changelog-core@^3.1.6:
conventional-changelog-preset-loader@^2.1.1:
version "2.3.4"
- resolved "https://registry.yarnpkg.com/conventional-changelog-preset-loader/-/conventional-changelog-preset-loader-2.3.4.tgz#14a855abbffd59027fd602581f1f34d9862ea44c"
+ resolved "https://registry.npmjs.org/conventional-changelog-preset-loader/-/conventional-changelog-preset-loader-2.3.4.tgz"
integrity sha512-GEKRWkrSAZeTq5+YjUZOYxdHq+ci4dNwHvpaBC3+ENalzFWuCWa9EZXSuZBpkr72sMdKB+1fyDV4takK1Lf58g==
conventional-changelog-writer@^4.0.6:
version "4.0.17"
- resolved "https://registry.yarnpkg.com/conventional-changelog-writer/-/conventional-changelog-writer-4.0.17.tgz#4753aaa138bf5aa59c0b274cb5937efcd2722e21"
+ resolved "https://registry.npmjs.org/conventional-changelog-writer/-/conventional-changelog-writer-4.0.17.tgz"
integrity sha512-IKQuK3bib/n032KWaSb8YlBFds+aLmzENtnKtxJy3+HqDq5kohu3g/UdNbIHeJWygfnEbZjnCKFxAW0y7ArZAw==
dependencies:
compare-func "^2.0.0"
@@ -1936,7 +3479,7 @@ conventional-changelog-writer@^4.0.6:
conventional-commits-filter@^2.0.2, conventional-commits-filter@^2.0.6:
version "2.0.6"
- resolved "https://registry.yarnpkg.com/conventional-commits-filter/-/conventional-commits-filter-2.0.6.tgz#0935e1240c5ca7698329affee1b6a46d33324c4c"
+ resolved "https://registry.npmjs.org/conventional-commits-filter/-/conventional-commits-filter-2.0.6.tgz"
integrity sha512-4g+sw8+KA50/Qwzfr0hL5k5NWxqtrOVw4DDk3/h6L85a9Gz0/Eqp3oP+CWCNfesBvZZZEFHF7OTEbRe+yYSyKw==
dependencies:
lodash.ismatch "^4.4.0"
@@ -1944,7 +3487,7 @@ conventional-commits-filter@^2.0.2, conventional-commits-filter@^2.0.6:
conventional-commits-parser@^3.0.3:
version "3.1.0"
- resolved "https://registry.yarnpkg.com/conventional-commits-parser/-/conventional-commits-parser-3.1.0.tgz#10140673d5e7ef5572633791456c5d03b69e8be4"
+ resolved "https://registry.npmjs.org/conventional-commits-parser/-/conventional-commits-parser-3.1.0.tgz"
integrity sha512-RSo5S0WIwXZiRxUGTPuYFbqvrR4vpJ1BDdTlthFgvHt5kEdnd1+pdvwWphWn57/oIl4V72NMmOocFqqJ8mFFhA==
dependencies:
JSONStream "^1.0.4"
@@ -1957,7 +3500,7 @@ conventional-commits-parser@^3.0.3:
conventional-recommended-bump@^5.0.0:
version "5.0.1"
- resolved "https://registry.yarnpkg.com/conventional-recommended-bump/-/conventional-recommended-bump-5.0.1.tgz#5af63903947b6e089e77767601cb592cabb106ba"
+ resolved "https://registry.npmjs.org/conventional-recommended-bump/-/conventional-recommended-bump-5.0.1.tgz"
integrity sha512-RVdt0elRcCxL90IrNP0fYCpq1uGt2MALko0eyeQ+zQuDVWtMGAy9ng6yYn3kax42lCj9+XBxQ8ZN6S9bdKxDhQ==
dependencies:
concat-stream "^2.0.0"
@@ -1969,9 +3512,24 @@ conventional-recommended-bump@^5.0.0:
meow "^4.0.0"
q "^1.5.1"
+convert-source-map@^1.7.0:
+ version "1.9.0"
+ resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-1.9.0.tgz#7faae62353fb4213366d0ca98358d22e8368b05f"
+ integrity sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==
+
+convert-source-map@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-2.0.0.tgz#4b560f649fc4e918dd0ab75cf4961e8bc882d82a"
+ integrity sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==
+
+cookie@^0.7.1:
+ version "0.7.2"
+ resolved "https://registry.yarnpkg.com/cookie/-/cookie-0.7.2.tgz#556369c472a2ba910f2979891b526b3436237ed7"
+ integrity sha512-yki5XnKuf750l50uGTllt6kKILY4nQ1eNIQatoXEByZ5dWgnKqbnqmTrBE5B4N7lrMJKQ2ytWMiTO2o0v6Ew/w==
+
copy-concurrently@^1.0.0:
version "1.0.5"
- resolved "https://registry.yarnpkg.com/copy-concurrently/-/copy-concurrently-1.0.5.tgz#92297398cae34937fcafd6ec8139c18051f0b5e0"
+ resolved "https://registry.npmjs.org/copy-concurrently/-/copy-concurrently-1.0.5.tgz"
integrity sha512-f2domd9fsVDFtaFcbaRZuYXwtdmnzqbADSwhSWYxYB/Q8zsdUUFMXVRwXGDMWmbEzAn1kdRrtI1T/KTFOL4X2A==
dependencies:
aproba "^1.1.1"
@@ -1983,17 +3541,17 @@ copy-concurrently@^1.0.0:
copy-descriptor@^0.1.0:
version "0.1.1"
- resolved "https://registry.yarnpkg.com/copy-descriptor/-/copy-descriptor-0.1.1.tgz#676f6eb3c39997c2ee1ac3a924fd6124748f578d"
+ resolved "https://registry.npmjs.org/copy-descriptor/-/copy-descriptor-0.1.1.tgz"
integrity sha1-Z29us8OZl8LuGsOpJP1hJHSPV40=
core-util-is@1.0.2, core-util-is@~1.0.0:
version "1.0.2"
- resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.2.tgz#b5fd54220aa2bc5ab57aab7140c940754503c1a7"
+ resolved "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz"
integrity sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=
cosmiconfig@^5.1.0:
version "5.2.1"
- resolved "https://registry.yarnpkg.com/cosmiconfig/-/cosmiconfig-5.2.1.tgz#040f726809c591e77a17c0a3626ca45b4f168b1a"
+ resolved "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-5.2.1.tgz"
integrity sha512-H65gsXo1SKjf8zmrJ67eJk8aIRKV5ff2D4uKZIBZShbhGSpEmsQOPW/SKMKYhSTrqR7ufy6RP69rPogdaPh/kA==
dependencies:
import-fresh "^2.0.0"
@@ -2003,7 +3561,7 @@ cosmiconfig@^5.1.0:
coveralls@^3.0.4:
version "3.1.1"
- resolved "https://registry.yarnpkg.com/coveralls/-/coveralls-3.1.1.tgz#f5d4431d8b5ae69c5079c8f8ca00d64ac77cf081"
+ resolved "https://registry.npmjs.org/coveralls/-/coveralls-3.1.1.tgz"
integrity sha512-+dxnG2NHncSD1NrqbSM3dn/lE57O6Qf/koe9+I7c+wzkqRmEvcp0kgJdxKInzYzkICKkFMZsX3Vct3++tsF9ww==
dependencies:
js-yaml "^3.13.1"
@@ -2014,7 +3572,7 @@ coveralls@^3.0.4:
cross-spawn@^6.0.0:
version "6.0.5"
- resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-6.0.5.tgz#4a5ec7c64dfae22c3a14124dbacdee846d80cbc4"
+ resolved "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz"
integrity sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==
dependencies:
nice-try "^1.0.4"
@@ -2023,82 +3581,110 @@ cross-spawn@^6.0.0:
shebang-command "^1.2.0"
which "^1.2.9"
-cross-spawn@^7.0.2:
+cross-spawn@^7.0.0:
version "7.0.3"
- resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-7.0.3.tgz#f73a85b9d5d41d045551c177e2882d4ac85728a6"
+ resolved "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz"
integrity sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==
dependencies:
path-key "^3.1.0"
shebang-command "^2.0.0"
which "^2.0.1"
+cross-spawn@^7.0.3, cross-spawn@^7.0.6:
+ version "7.0.6"
+ resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-7.0.6.tgz#8a58fe78f00dcd70c370451759dfbfaf03e8ee9f"
+ integrity sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==
+ dependencies:
+ path-key "^3.1.0"
+ shebang-command "^2.0.0"
+ which "^2.0.1"
+
currently-unhandled@^0.4.1:
version "0.4.1"
- resolved "https://registry.yarnpkg.com/currently-unhandled/-/currently-unhandled-0.4.1.tgz#988df33feab191ef799a61369dd76c17adf957ea"
+ resolved "https://registry.npmjs.org/currently-unhandled/-/currently-unhandled-0.4.1.tgz"
integrity sha1-mI3zP+qxke95mmE2nddsF635V+o=
dependencies:
array-find-index "^1.0.1"
cyclist@^1.0.1:
version "1.0.1"
- resolved "https://registry.yarnpkg.com/cyclist/-/cyclist-1.0.1.tgz#596e9698fd0c80e12038c2b82d6eb1b35b6224d9"
+ resolved "https://registry.npmjs.org/cyclist/-/cyclist-1.0.1.tgz"
integrity sha1-WW6WmP0MgOEgOMK4LW6xs1tiJNk=
dargs@^4.0.1:
version "4.1.0"
- resolved "https://registry.yarnpkg.com/dargs/-/dargs-4.1.0.tgz#03a9dbb4b5c2f139bf14ae53f0b8a2a6a86f4e17"
+ resolved "https://registry.npmjs.org/dargs/-/dargs-4.1.0.tgz"
integrity sha1-A6nbtLXC8Tm/FK5T8LiipqhvThc=
dependencies:
number-is-nan "^1.0.0"
dashdash@^1.12.0:
version "1.14.1"
- resolved "https://registry.yarnpkg.com/dashdash/-/dashdash-1.14.1.tgz#853cfa0f7cbe2fed5de20326b8dd581035f6e2f0"
+ resolved "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz"
integrity sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=
dependencies:
assert-plus "^1.0.0"
+data-uri-to-buffer@^2.0.0:
+ version "2.0.2"
+ resolved "https://registry.yarnpkg.com/data-uri-to-buffer/-/data-uri-to-buffer-2.0.2.tgz#d296973d5a4897a5dbe31716d118211921f04770"
+ integrity sha512-ND9qDTLc6diwj+Xe5cdAgVTbLVdXbtxTJRXRhli8Mowuaan+0EJOtdqJ0QCHNSSPyoXGx9HX2/VMnKeC34AChA==
+
dateformat@^3.0.0:
version "3.0.3"
- resolved "https://registry.yarnpkg.com/dateformat/-/dateformat-3.0.3.tgz#a6e37499a4d9a9cf85ef5872044d62901c9889ae"
+ resolved "https://registry.npmjs.org/dateformat/-/dateformat-3.0.3.tgz"
integrity sha512-jyCETtSl3VMZMWeRo7iY1FL19ges1t55hMo5yaam4Jrsm5EPL89UQkoQRyiI+Yf4k8r2ZpdngkV8hr1lIdjb3Q==
debug@3.1.0:
version "3.1.0"
- resolved "https://registry.yarnpkg.com/debug/-/debug-3.1.0.tgz#5bb5a0672628b64149566ba16819e61518c67261"
+ resolved "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz"
integrity sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==
dependencies:
ms "2.0.0"
-debug@3.2.6, debug@^3.1.0:
- version "3.2.6"
- resolved "https://registry.yarnpkg.com/debug/-/debug-3.2.6.tgz#e83d17de16d8a7efb7717edbe5fb10135eee629b"
- integrity sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==
+debug@4, debug@^4.3.1, debug@^4.3.2, debug@^4.3.4:
+ version "4.3.4"
+ resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.4.tgz#1319f6579357f2338d3337d2cdd4914bb5dcc865"
+ integrity sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==
dependencies:
- ms "^2.1.1"
+ ms "2.1.2"
debug@^2.2.0, debug@^2.3.3:
version "2.6.9"
- resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f"
+ resolved "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz"
integrity sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==
dependencies:
ms "2.0.0"
-debug@^4.0.1, debug@^4.1.1, debug@^4.3.1:
- version "4.3.4"
- resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.4.tgz#1319f6579357f2338d3337d2cdd4914bb5dcc865"
- integrity sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==
+debug@^3.1.0:
+ version "3.2.6"
+ resolved "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz"
+ integrity sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==
dependencies:
- ms "2.1.2"
+ ms "^2.1.1"
+
+debug@^4.1.0, debug@^4.1.1, debug@^4.4.0:
+ version "4.4.0"
+ resolved "https://registry.yarnpkg.com/debug/-/debug-4.4.0.tgz#2b3f2aea2ffeb776477460267377dc8710faba8a"
+ integrity sha512-6WTZ/IxCY/T6BALoZHaE4ctp9xm+Z5kY/pzYaCHRFeyVhojxlrm+46y68HA6hr0TcwEssoxNiDEUJQjfPZ/RYA==
+ dependencies:
+ ms "^2.1.3"
+
+debug@^4.3.5, debug@^4.4.3:
+ version "4.4.3"
+ resolved "https://registry.yarnpkg.com/debug/-/debug-4.4.3.tgz#c6ae432d9bd9662582fce08709b038c58e9e3d6a"
+ integrity sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==
+ dependencies:
+ ms "^2.1.3"
debuglog@^1.0.1:
version "1.0.1"
- resolved "https://registry.yarnpkg.com/debuglog/-/debuglog-1.0.1.tgz#aa24ffb9ac3df9a2351837cfb2d279360cd78492"
+ resolved "https://registry.npmjs.org/debuglog/-/debuglog-1.0.1.tgz"
integrity sha1-qiT/uaw9+aI1GDfPstJ5NgzXhJI=
decamelize-keys@^1.0.0, decamelize-keys@^1.1.0:
version "1.1.0"
- resolved "https://registry.yarnpkg.com/decamelize-keys/-/decamelize-keys-1.1.0.tgz#d171a87933252807eb3cb61dc1c1445d078df2d9"
+ resolved "https://registry.npmjs.org/decamelize-keys/-/decamelize-keys-1.1.0.tgz"
integrity sha1-0XGoeTMlKAfrPLYdwcFEXQeN8tk=
dependencies:
decamelize "^1.1.0"
@@ -2106,148 +3692,171 @@ decamelize-keys@^1.0.0, decamelize-keys@^1.1.0:
decamelize@^1.1.0, decamelize@^1.1.2, decamelize@^1.2.0:
version "1.2.0"
- resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-1.2.0.tgz#f6534d15148269b20352e7bee26f501f9a191290"
+ resolved "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz"
integrity sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=
+decamelize@^4.0.0:
+ version "4.0.0"
+ resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-4.0.0.tgz#aa472d7bf660eb15f3494efd531cab7f2a709837"
+ integrity sha512-9iE1PgSik9HeIIw2JO94IidnE3eBoQrFJ3w7sFuzSX4DpmZ3v5sZpUiV5Swcf6mQEF+Y0ru8Neo+p+nyh2J+hQ==
+
decode-uri-component@^0.2.0:
version "0.2.0"
- resolved "https://registry.yarnpkg.com/decode-uri-component/-/decode-uri-component-0.2.0.tgz#eb3913333458775cb84cd1a1fae062106bb87545"
+ resolved "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.0.tgz"
integrity sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU=
dedent@^0.7.0:
version "0.7.0"
- resolved "https://registry.yarnpkg.com/dedent/-/dedent-0.7.0.tgz#2495ddbaf6eb874abb0e1be9df22d2e5a544326c"
+ resolved "https://registry.npmjs.org/dedent/-/dedent-0.7.0.tgz"
integrity sha1-JJXduvbrh0q7Dhvp3yLS5aVEMmw=
deep-eql@^3.0.1:
version "3.0.1"
- resolved "https://registry.yarnpkg.com/deep-eql/-/deep-eql-3.0.1.tgz#dfc9404400ad1c8fe023e7da1df1c147c4b444df"
+ resolved "https://registry.npmjs.org/deep-eql/-/deep-eql-3.0.1.tgz"
integrity sha512-+QeIQyN5ZuO+3Uk5DYh6/1eKO0m0YmJFGNmFHGACpf1ClL1nmlV/p4gNgbl2pJGxgXb4faqo6UE+M5ACEMyVcw==
dependencies:
type-detect "^4.0.0"
+deep-eql@^5.0.1:
+ version "5.0.2"
+ resolved "https://registry.yarnpkg.com/deep-eql/-/deep-eql-5.0.2.tgz#4b756d8d770a9257300825d52a2c2cff99c3a341"
+ integrity sha512-h5k/5U50IJJFpzfL6nO9jaaumfjO/f2NjK/oYB2Djzm4p9L+3T9qWpZqZ2hAbLPuuYq9wrU08WQyBTL5GbPk5Q==
+
deep-is@^0.1.3, deep-is@~0.1.3:
version "0.1.3"
- resolved "https://registry.yarnpkg.com/deep-is/-/deep-is-0.1.3.tgz#b369d6fb5dbc13eecf524f91b070feedc357cf34"
+ resolved "https://registry.npmjs.org/deep-is/-/deep-is-0.1.3.tgz"
integrity sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ=
+deepmerge@^4.2.2:
+ version "4.3.1"
+ resolved "https://registry.yarnpkg.com/deepmerge/-/deepmerge-4.3.1.tgz#44b5f2147cd3b00d4b56137685966f26fd25dd4a"
+ integrity sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==
+
+default-require-extensions@^3.0.0:
+ version "3.0.1"
+ resolved "https://registry.yarnpkg.com/default-require-extensions/-/default-require-extensions-3.0.1.tgz#bfae00feeaeada68c2ae256c62540f60b80625bd"
+ integrity sha512-eXTJmRbm2TIt9MgWTsOH1wEuhew6XGZcMeGKCtLedIg/NCsg1iBePXkceTdK4Fii7pzmN9tGsZhKzZ4h7O/fxw==
+ dependencies:
+ strip-bom "^4.0.0"
+
defaults@^1.0.3:
version "1.0.3"
- resolved "https://registry.yarnpkg.com/defaults/-/defaults-1.0.3.tgz#c656051e9817d9ff08ed881477f3fe4019f3ef7d"
+ resolved "https://registry.npmjs.org/defaults/-/defaults-1.0.3.tgz"
integrity sha1-xlYFHpgX2f8I7YgUd/P+QBnz730=
dependencies:
clone "^1.0.2"
-define-properties@^1.1.2, define-properties@^1.1.3:
+define-properties@^1.1.3:
version "1.1.3"
- resolved "https://registry.yarnpkg.com/define-properties/-/define-properties-1.1.3.tgz#cf88da6cbee26fe6db7094f61d870cbd84cee9f1"
+ resolved "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz"
integrity sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==
dependencies:
object-keys "^1.0.12"
define-property@^0.2.5:
version "0.2.5"
- resolved "https://registry.yarnpkg.com/define-property/-/define-property-0.2.5.tgz#c35b1ef918ec3c990f9a5bc57be04aacec5c8116"
+ resolved "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz"
integrity sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=
dependencies:
is-descriptor "^0.1.0"
define-property@^1.0.0:
version "1.0.0"
- resolved "https://registry.yarnpkg.com/define-property/-/define-property-1.0.0.tgz#769ebaaf3f4a63aad3af9e8d304c9bbe79bfb0e6"
+ resolved "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz"
integrity sha1-dp66rz9KY6rTr56NMEybvnm/sOY=
dependencies:
is-descriptor "^1.0.0"
define-property@^2.0.2:
version "2.0.2"
- resolved "https://registry.yarnpkg.com/define-property/-/define-property-2.0.2.tgz#d459689e8d654ba77e02a817f8710d702cb16e9d"
+ resolved "https://registry.npmjs.org/define-property/-/define-property-2.0.2.tgz"
integrity sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==
dependencies:
is-descriptor "^1.0.2"
isobject "^3.0.1"
+defu@^6.1.4:
+ version "6.1.4"
+ resolved "https://registry.yarnpkg.com/defu/-/defu-6.1.4.tgz#4e0c9cf9ff68fe5f3d7f2765cc1a012dfdcb0479"
+ integrity sha512-mEQCMmwJu317oSz8CwdIOdwf3xMif1ttiM8LTufzc3g6kR+9Pe236twL8j3IYT1F7GfRgGcW6MWxzZjLIkuHIg==
+
delayed-stream@~1.0.0:
version "1.0.0"
- resolved "https://registry.yarnpkg.com/delayed-stream/-/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619"
+ resolved "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz"
integrity sha1-3zrhmayt+31ECqrgsp4icrJOxhk=
delegates@^1.0.0:
version "1.0.0"
- resolved "https://registry.yarnpkg.com/delegates/-/delegates-1.0.0.tgz#84c6e159b81904fdca59a0ef44cd870d31250f9a"
+ resolved "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz"
integrity sha1-hMbhWbgZBP3KWaDvRM2HDTElD5o=
deprecation@^2.0.0, deprecation@^2.3.1:
version "2.3.1"
- resolved "https://registry.yarnpkg.com/deprecation/-/deprecation-2.3.1.tgz#6368cbdb40abf3373b525ac87e4a260c3a700919"
+ resolved "https://registry.npmjs.org/deprecation/-/deprecation-2.3.1.tgz"
integrity sha512-xmHIy4F3scKVwMsQ4WnVaS8bHOx0DmVwRywosKhaILI0ywMDWPtBSku2HNxRvF7jtwDRsoEwYQSfbxj8b7RlJQ==
detect-indent@^5.0.0:
version "5.0.0"
- resolved "https://registry.yarnpkg.com/detect-indent/-/detect-indent-5.0.0.tgz#3871cc0a6a002e8c3e5b3cf7f336264675f06b9d"
+ resolved "https://registry.npmjs.org/detect-indent/-/detect-indent-5.0.0.tgz"
integrity sha1-OHHMCmoALow+Wzz38zYmRnXwa50=
+detect-libc@^2.0.3:
+ version "2.0.3"
+ resolved "https://registry.yarnpkg.com/detect-libc/-/detect-libc-2.0.3.tgz#f0cd503b40f9939b894697d19ad50895e30cf700"
+ integrity sha512-bwy0MGW55bG41VqxxypOsdSdGqLwXPI/focwgTYCFMbdUiBAxLg9CFzG08sz2aqzknwiX7Hkl0bQENjg8iLByw==
+
+devalue@^4.3.0:
+ version "4.3.3"
+ resolved "https://registry.yarnpkg.com/devalue/-/devalue-4.3.3.tgz#e35df3bdc49136837e77986f629b9fa6fef50726"
+ integrity sha512-UH8EL6H2ifcY8TbD2QsxwCC/pr5xSwPvv85LrLXVihmHVC3T3YqTCIwnR5ak0yO1KYqlxrPVOA/JVZJYPy2ATg==
+
dezalgo@^1.0.0:
version "1.0.3"
- resolved "https://registry.yarnpkg.com/dezalgo/-/dezalgo-1.0.3.tgz#7f742de066fc748bc8db820569dddce49bf0d456"
+ resolved "https://registry.npmjs.org/dezalgo/-/dezalgo-1.0.3.tgz"
integrity sha1-f3Qt4Gb8dIvI24IFad3c5Jvw1FY=
dependencies:
asap "^2.0.0"
wrappy "1"
-diff@3.5.0:
- version "3.5.0"
- resolved "https://registry.yarnpkg.com/diff/-/diff-3.5.0.tgz#800c0dd1e0a8bfbc95835c202ad220fe317e5a12"
- integrity sha512-A46qtFgd+g7pDZinpnwiRJtxbC1hpgf0uzP3iG89scHk0AUC7A1TGxf5OiiOUv/JMZR8GOt8hL900hV0bOy5xA==
-
diff@^4.0.1:
version "4.0.2"
- resolved "https://registry.yarnpkg.com/diff/-/diff-4.0.2.tgz#60f3aecb89d5fae520c11aa19efc2bb982aade7d"
+ resolved "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz"
integrity sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==
+diff@^7.0.0:
+ version "7.0.0"
+ resolved "https://registry.yarnpkg.com/diff/-/diff-7.0.0.tgz#3fb34d387cd76d803f6eebea67b921dab0182a9a"
+ integrity sha512-PJWHUb1RFevKCwaFA9RlG5tCd+FO5iRh9A8HEtkmBH2Li03iJriB6m6JIN4rGz3K3JLawI7/veA1xzRKP6ISBw==
+
dir-glob@^2.2.2:
version "2.2.2"
- resolved "https://registry.yarnpkg.com/dir-glob/-/dir-glob-2.2.2.tgz#fa09f0694153c8918b18ba0deafae94769fc50c4"
+ resolved "https://registry.npmjs.org/dir-glob/-/dir-glob-2.2.2.tgz"
integrity sha512-f9LBi5QWzIW3I6e//uxZoLBlUt9kcp66qo0sSCxL6YZKc75R1c4MFCoe/LaZiBGmgujvQdxc5Bn3QhfyvK5Hsw==
dependencies:
path-type "^3.0.0"
-dir-glob@^3.0.1:
- version "3.0.1"
- resolved "https://registry.yarnpkg.com/dir-glob/-/dir-glob-3.0.1.tgz#56dbf73d992a4a93ba1584f4534063fd2e41717f"
- integrity sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==
- dependencies:
- path-type "^4.0.0"
-
-doctrine@^3.0.0:
- version "3.0.0"
- resolved "https://registry.yarnpkg.com/doctrine/-/doctrine-3.0.0.tgz#addebead72a6574db783639dc87a121773973961"
- integrity sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==
- dependencies:
- esutils "^2.0.2"
-
dot-prop@^4.2.0:
version "4.2.1"
- resolved "https://registry.yarnpkg.com/dot-prop/-/dot-prop-4.2.1.tgz#45884194a71fc2cda71cbb4bceb3a4dd2f433ba4"
+ resolved "https://registry.npmjs.org/dot-prop/-/dot-prop-4.2.1.tgz"
integrity sha512-l0p4+mIuJIua0mhxGoh4a+iNL9bmeK5DvnSVQa6T0OhrVmaEa1XScX5Etc673FePCJOArq/4Pa2cLGODUWTPOQ==
dependencies:
is-obj "^1.0.0"
dot-prop@^5.1.0:
version "5.3.0"
- resolved "https://registry.yarnpkg.com/dot-prop/-/dot-prop-5.3.0.tgz#90ccce708cd9cd82cc4dc8c3ddd9abdd55b20e88"
+ resolved "https://registry.npmjs.org/dot-prop/-/dot-prop-5.3.0.tgz"
integrity sha512-QM8q3zDe58hqUqjraQOmzZ1LIH9SWQJTlEKCH4kJ2oQvLZk7RbQXvtDM2XEq3fwkV9CCvvH4LA0AV+ogFsBM2Q==
dependencies:
is-obj "^2.0.0"
duplexer@^0.1.1:
version "0.1.2"
- resolved "https://registry.yarnpkg.com/duplexer/-/duplexer-0.1.2.tgz#3abe43aef3835f8ae077d136ddce0f276b0400e6"
+ resolved "https://registry.npmjs.org/duplexer/-/duplexer-0.1.2.tgz"
integrity sha512-jtD6YG370ZCIi/9GTaJKQxWTZD045+4R4hTk/x1UyoqadyJ9x9CgSi1RlVDQF8U2sxLLSnFkCaMihqljHIWgMg==
duplexify@^3.4.2, duplexify@^3.6.0:
version "3.7.1"
- resolved "https://registry.yarnpkg.com/duplexify/-/duplexify-3.7.1.tgz#2a4df5317f6ccfd91f86d6fd25d8d8a103b88309"
+ resolved "https://registry.npmjs.org/duplexify/-/duplexify-3.7.1.tgz"
integrity sha512-07z8uv2wMyS51kKhD1KsdXJg5WQ6t93RneqRxUHnskXVtlYYkLqM0gqStQZ3pj073g687jPCHrqNfCzawLYh5g==
dependencies:
end-of-stream "^1.0.0"
@@ -2255,65 +3864,96 @@ duplexify@^3.4.2, duplexify@^3.6.0:
readable-stream "^2.0.0"
stream-shift "^1.0.0"
+eastasianwidth@^0.2.0:
+ version "0.2.0"
+ resolved "https://registry.yarnpkg.com/eastasianwidth/-/eastasianwidth-0.2.0.tgz#696ce2ec0aa0e6ea93a397ffcf24aa7840c827cb"
+ integrity sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==
+
ecc-jsbn@~0.1.1:
version "0.1.2"
- resolved "https://registry.yarnpkg.com/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz#3a83a904e54353287874c564b7549386849a98c9"
+ resolved "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz"
integrity sha1-OoOpBOVDUyh4dMVkt1SThoSamMk=
dependencies:
jsbn "~0.1.0"
safer-buffer "^2.1.0"
+electron-to-chromium@^1.5.149:
+ version "1.5.150"
+ resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.5.150.tgz#3120bf34453a7a82cb4d9335df20680b2bb40649"
+ integrity sha512-rOOkP2ZUMx1yL4fCxXQKDHQ8ZXwisb2OycOQVKHgvB3ZI4CvehOd4y2tfnnLDieJ3Zs1RL1Dlp3cMkyIn7nnXA==
+
emoji-regex@^7.0.1:
version "7.0.3"
- resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-7.0.3.tgz#933a04052860c85e83c122479c4748a8e4c72156"
+ resolved "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz"
integrity sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==
-encoding@^0.1.11:
+emoji-regex@^8.0.0:
+ version "8.0.0"
+ resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-8.0.0.tgz#e818fd69ce5ccfcb404594f842963bf53164cc37"
+ integrity sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==
+
+emoji-regex@^9.2.2:
+ version "9.2.2"
+ resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-9.2.2.tgz#840c8803b0d8047f4ff0cf963176b32d4ef3ed72"
+ integrity sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==
+
+encoding@^0.1.11, encoding@^0.1.13:
version "0.1.13"
- resolved "https://registry.yarnpkg.com/encoding/-/encoding-0.1.13.tgz#56574afdd791f54a8e9b2785c0582a2d26210fa9"
+ resolved "https://registry.npmjs.org/encoding/-/encoding-0.1.13.tgz"
integrity sha512-ETBauow1T35Y/WZMkio9jiM0Z5xjHHmJ4XmjZOq1l/dXz3lr2sRn87nJy20RupqSh1F2m3HHPSp8ShIPQJrJ3A==
dependencies:
iconv-lite "^0.6.2"
end-of-stream@^1.0.0, end-of-stream@^1.1.0:
version "1.4.4"
- resolved "https://registry.yarnpkg.com/end-of-stream/-/end-of-stream-1.4.4.tgz#5ae64a5f45057baf3626ec14da0ca5e4b2431eb0"
+ resolved "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz"
integrity sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==
dependencies:
once "^1.4.0"
-enquirer@^2.3.5:
- version "2.3.6"
- resolved "https://registry.yarnpkg.com/enquirer/-/enquirer-2.3.6.tgz#2a7fe5dd634a1e4125a975ec994ff5456dc3734d"
- integrity sha512-yjNnPr315/FjS4zIsUxYguYUPP2e1NK4d7E7ZOLiyYCcbFBiTMyID+2wvm2w6+pZ/odMA7cRkjhsPbltwBOrLg==
+enhanced-resolve@^5.17.1:
+ version "5.18.1"
+ resolved "https://registry.yarnpkg.com/enhanced-resolve/-/enhanced-resolve-5.18.1.tgz#728ab082f8b7b6836de51f1637aab5d3b9568faf"
+ integrity sha512-ZSW3ma5GkcQBIpwZTSRAI8N71Uuwgs93IezB7mf7R60tC8ZbJideoDNKjHn2O9KIlx6rkGTTEk1xUCK2E1Y2Yg==
dependencies:
- ansi-colors "^4.1.1"
+ graceful-fs "^4.2.4"
+ tapable "^2.2.0"
env-paths@^2.2.0:
version "2.2.0"
- resolved "https://registry.yarnpkg.com/env-paths/-/env-paths-2.2.0.tgz#cdca557dc009152917d6166e2febe1f039685e43"
+ resolved "https://registry.npmjs.org/env-paths/-/env-paths-2.2.0.tgz"
integrity sha512-6u0VYSCo/OW6IoD5WCLLy9JUGARbamfSavcNXry/eu8aHVFei6CD3Sw+VGX5alea1i9pgPHW0mbu6Xj0uBh7gA==
+envinfo@^7.14.0:
+ version "7.14.0"
+ resolved "https://registry.yarnpkg.com/envinfo/-/envinfo-7.14.0.tgz#26dac5db54418f2a4c1159153a0b2ae980838aae"
+ integrity sha512-CO40UI41xDQzhLB1hWyqUKgFhs250pNcGbyGKe1l/e4FSaI/+YE4IMG76GDt0In67WLPACIITC+sOi08x4wIvg==
+
envinfo@^7.3.1:
version "7.7.3"
- resolved "https://registry.yarnpkg.com/envinfo/-/envinfo-7.7.3.tgz#4b2d8622e3e7366afb8091b23ed95569ea0208cc"
+ resolved "https://registry.npmjs.org/envinfo/-/envinfo-7.7.3.tgz"
integrity sha512-46+j5QxbPWza0PB1i15nZx0xQ4I/EfQxg9J8Had3b408SV63nEtor2e+oiY63amTo9KTuh2a3XLObNwduxYwwA==
err-code@^1.0.0:
version "1.1.2"
- resolved "https://registry.yarnpkg.com/err-code/-/err-code-1.1.2.tgz#06e0116d3028f6aef4806849eb0ea6a748ae6960"
+ resolved "https://registry.npmjs.org/err-code/-/err-code-1.1.2.tgz"
integrity sha1-BuARbTAo9q70gGhJ6w6mp0iuaWA=
+err-code@^2.0.2:
+ version "2.0.3"
+ resolved "https://registry.yarnpkg.com/err-code/-/err-code-2.0.3.tgz#23c2f3b756ffdfc608d30e27c9a941024807e7f9"
+ integrity sha512-2bmlRpNKBxT/CRmPOlyISQpNj+qSeYvcym/uT0Jx2bMOlKLtSy1ZmLuVxSEKKyor/N5yhvp/ZiG1oE3DEYMSFA==
+
error-ex@^1.2.0, error-ex@^1.3.1:
version "1.3.2"
- resolved "https://registry.yarnpkg.com/error-ex/-/error-ex-1.3.2.tgz#b4ac40648107fdcdcfae242f428bea8a14d4f1bf"
+ resolved "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz"
integrity sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==
dependencies:
is-arrayish "^0.2.1"
es-abstract@^1.17.0-next.1, es-abstract@^1.17.5:
version "1.17.7"
- resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.17.7.tgz#a4de61b2f66989fc7421676c1cb9787573ace54c"
+ resolved "https://registry.npmjs.org/es-abstract/-/es-abstract-1.17.7.tgz"
integrity sha512-VBl/gnfcJ7OercKA9MVaegWsBHFjV492syMudcnQZvt/Dw8ezpcOHYZXa/J96O8vx+g4x65YKhxOwDUh63aS5g==
dependencies:
es-to-primitive "^1.2.1"
@@ -2330,7 +3970,7 @@ es-abstract@^1.17.0-next.1, es-abstract@^1.17.5:
es-abstract@^1.18.0-next.0:
version "1.18.0-next.1"
- resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.18.0-next.1.tgz#6e3a0a4bda717e5023ab3b8e90bec36108d22c68"
+ resolved "https://registry.npmjs.org/es-abstract/-/es-abstract-1.18.0-next.1.tgz"
integrity sha512-I4UGspA0wpZXWENrdA0uHbnhte683t3qT/1VFH9aX2dA5PPSf6QW5HHXf5HImaqPmjXaVeVk4RGWnaylmV7uAA==
dependencies:
es-to-primitive "^1.2.1"
@@ -2346,35 +3986,155 @@ es-abstract@^1.18.0-next.0:
string.prototype.trimend "^1.0.1"
string.prototype.trimstart "^1.0.1"
+es-module-lexer@^1.2.1:
+ version "1.7.0"
+ resolved "https://registry.yarnpkg.com/es-module-lexer/-/es-module-lexer-1.7.0.tgz#9159601561880a85f2734560a9099b2c31e5372a"
+ integrity sha512-jEQoCwk8hyb2AZziIOLhDqpm5+2ww5uIE6lkO/6jcOCusfk6LhMHpXXfBLXTZ7Ydyt0j4VoUQv6uGNYbdW+kBA==
+
+es-module-lexer@^1.6.0:
+ version "1.6.0"
+ resolved "https://registry.yarnpkg.com/es-module-lexer/-/es-module-lexer-1.6.0.tgz#da49f587fd9e68ee2404fe4e256c0c7d3a81be21"
+ integrity sha512-qqnD1yMU6tk/jnaMosogGySTZP8YtUgAffA9nMN+E/rjxcfRQ6IEk7IiozUjgxKoFHBGjTLnrHB/YC45r/59EQ==
+
es-to-primitive@^1.2.1:
version "1.2.1"
- resolved "https://registry.yarnpkg.com/es-to-primitive/-/es-to-primitive-1.2.1.tgz#e55cd4c9cdc188bcefb03b366c736323fc5c898a"
+ resolved "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz"
integrity sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==
dependencies:
is-callable "^1.1.4"
is-date-object "^1.0.1"
is-symbol "^1.0.2"
+es6-error@^4.0.1:
+ version "4.1.1"
+ resolved "https://registry.yarnpkg.com/es6-error/-/es6-error-4.1.1.tgz#9e3af407459deed47e9a91f9b885a84eb05c561d"
+ integrity sha512-Um/+FxMr9CISWh0bi5Zv0iOD+4cFh5qLeks1qhAopKVAJw3drgKbKySikp7wGhDL0HPeaja0P5ULZrxLkniUVg==
+
es6-promise@^4.0.3:
version "4.2.8"
- resolved "https://registry.yarnpkg.com/es6-promise/-/es6-promise-4.2.8.tgz#4eb21594c972bc40553d276e510539143db53e0a"
+ resolved "https://registry.npmjs.org/es6-promise/-/es6-promise-4.2.8.tgz"
integrity sha512-HJDGx5daxeIvxdBxvG2cb9g4tEvwIk3i8+nhX0yGrYmZUzbkdg8QbDevheDB8gd0//uPj4c1EQua8Q+MViT0/w==
es6-promisify@^5.0.0:
version "5.0.0"
- resolved "https://registry.yarnpkg.com/es6-promisify/-/es6-promisify-5.0.0.tgz#5109d62f3e56ea967c4b63505aef08291c8a5203"
+ resolved "https://registry.npmjs.org/es6-promisify/-/es6-promisify-5.0.0.tgz"
integrity sha1-UQnWLz5W6pZ8S2NQWu8IKRyKUgM=
dependencies:
es6-promise "^4.0.3"
-escape-string-regexp@1.0.5, escape-string-regexp@^1.0.5:
+esbuild@0.17.19:
+ version "0.17.19"
+ resolved "https://registry.yarnpkg.com/esbuild/-/esbuild-0.17.19.tgz#087a727e98299f0462a3d0bcdd9cd7ff100bd955"
+ integrity sha512-XQ0jAPFkK/u3LcVRcvVHQcTIqD6E2H1fvZMA5dQPSOWb3suUbWbfbRf94pjc0bNzRYLfIrDRQXr7X+LHIm5oHw==
+ optionalDependencies:
+ "@esbuild/android-arm" "0.17.19"
+ "@esbuild/android-arm64" "0.17.19"
+ "@esbuild/android-x64" "0.17.19"
+ "@esbuild/darwin-arm64" "0.17.19"
+ "@esbuild/darwin-x64" "0.17.19"
+ "@esbuild/freebsd-arm64" "0.17.19"
+ "@esbuild/freebsd-x64" "0.17.19"
+ "@esbuild/linux-arm" "0.17.19"
+ "@esbuild/linux-arm64" "0.17.19"
+ "@esbuild/linux-ia32" "0.17.19"
+ "@esbuild/linux-loong64" "0.17.19"
+ "@esbuild/linux-mips64el" "0.17.19"
+ "@esbuild/linux-ppc64" "0.17.19"
+ "@esbuild/linux-riscv64" "0.17.19"
+ "@esbuild/linux-s390x" "0.17.19"
+ "@esbuild/linux-x64" "0.17.19"
+ "@esbuild/netbsd-x64" "0.17.19"
+ "@esbuild/openbsd-x64" "0.17.19"
+ "@esbuild/sunos-x64" "0.17.19"
+ "@esbuild/win32-arm64" "0.17.19"
+ "@esbuild/win32-ia32" "0.17.19"
+ "@esbuild/win32-x64" "0.17.19"
+
+esbuild@0.25.2:
+ version "0.25.2"
+ resolved "https://registry.yarnpkg.com/esbuild/-/esbuild-0.25.2.tgz#55a1d9ebcb3aa2f95e8bba9e900c1a5061bc168b"
+ integrity sha512-16854zccKPnC+toMywC+uKNeYSv+/eXkevRAfwRD/G9Cleq66m8XFIrigkbvauLLlCfDL45Q2cWegSg53gGBnQ==
+ optionalDependencies:
+ "@esbuild/aix-ppc64" "0.25.2"
+ "@esbuild/android-arm" "0.25.2"
+ "@esbuild/android-arm64" "0.25.2"
+ "@esbuild/android-x64" "0.25.2"
+ "@esbuild/darwin-arm64" "0.25.2"
+ "@esbuild/darwin-x64" "0.25.2"
+ "@esbuild/freebsd-arm64" "0.25.2"
+ "@esbuild/freebsd-x64" "0.25.2"
+ "@esbuild/linux-arm" "0.25.2"
+ "@esbuild/linux-arm64" "0.25.2"
+ "@esbuild/linux-ia32" "0.25.2"
+ "@esbuild/linux-loong64" "0.25.2"
+ "@esbuild/linux-mips64el" "0.25.2"
+ "@esbuild/linux-ppc64" "0.25.2"
+ "@esbuild/linux-riscv64" "0.25.2"
+ "@esbuild/linux-s390x" "0.25.2"
+ "@esbuild/linux-x64" "0.25.2"
+ "@esbuild/netbsd-arm64" "0.25.2"
+ "@esbuild/netbsd-x64" "0.25.2"
+ "@esbuild/openbsd-arm64" "0.25.2"
+ "@esbuild/openbsd-x64" "0.25.2"
+ "@esbuild/sunos-x64" "0.25.2"
+ "@esbuild/win32-arm64" "0.25.2"
+ "@esbuild/win32-ia32" "0.25.2"
+ "@esbuild/win32-x64" "0.25.2"
+
+esbuild@^0.25.0, esbuild@^0.25.5, esbuild@~0.25.0:
+ version "0.25.5"
+ resolved "https://registry.yarnpkg.com/esbuild/-/esbuild-0.25.5.tgz#71075054993fdfae76c66586f9b9c1f8d7edd430"
+ integrity sha512-P8OtKZRv/5J5hhz0cUAdu/cLuPIKXpQl1R9pZtvmHWQvrAUVd0UNIPT4IB4W3rNOqVO0rlqHmCIbSwxh/c9yUQ==
+ optionalDependencies:
+ "@esbuild/aix-ppc64" "0.25.5"
+ "@esbuild/android-arm" "0.25.5"
+ "@esbuild/android-arm64" "0.25.5"
+ "@esbuild/android-x64" "0.25.5"
+ "@esbuild/darwin-arm64" "0.25.5"
+ "@esbuild/darwin-x64" "0.25.5"
+ "@esbuild/freebsd-arm64" "0.25.5"
+ "@esbuild/freebsd-x64" "0.25.5"
+ "@esbuild/linux-arm" "0.25.5"
+ "@esbuild/linux-arm64" "0.25.5"
+ "@esbuild/linux-ia32" "0.25.5"
+ "@esbuild/linux-loong64" "0.25.5"
+ "@esbuild/linux-mips64el" "0.25.5"
+ "@esbuild/linux-ppc64" "0.25.5"
+ "@esbuild/linux-riscv64" "0.25.5"
+ "@esbuild/linux-s390x" "0.25.5"
+ "@esbuild/linux-x64" "0.25.5"
+ "@esbuild/netbsd-arm64" "0.25.5"
+ "@esbuild/netbsd-x64" "0.25.5"
+ "@esbuild/openbsd-arm64" "0.25.5"
+ "@esbuild/openbsd-x64" "0.25.5"
+ "@esbuild/sunos-x64" "0.25.5"
+ "@esbuild/win32-arm64" "0.25.5"
+ "@esbuild/win32-ia32" "0.25.5"
+ "@esbuild/win32-x64" "0.25.5"
+
+escalade@^3.1.1:
+ version "3.1.2"
+ resolved "https://registry.yarnpkg.com/escalade/-/escalade-3.1.2.tgz#54076e9ab29ea5bf3d8f1ed62acffbb88272df27"
+ integrity sha512-ErCHMCae19vR8vQGe50xIsVomy19rg6gFu3+r3jkEO46suLMWBksvVyoGgQV+jOfl84ZSOSlmv6Gxa89PmTGmA==
+
+escalade@^3.2.0:
+ version "3.2.0"
+ resolved "https://registry.yarnpkg.com/escalade/-/escalade-3.2.0.tgz#011a3f69856ba189dffa7dc8fcce99d2a87903e5"
+ integrity sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==
+
+escape-string-regexp@^1.0.5:
version "1.0.5"
- resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4"
+ resolved "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz"
integrity sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=
+escape-string-regexp@^4.0.0:
+ version "4.0.0"
+ resolved "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz"
+ integrity sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==
+
escodegen@1.8.x:
version "1.8.1"
- resolved "https://registry.yarnpkg.com/escodegen/-/escodegen-1.8.1.tgz#5a5b53af4693110bebb0867aa3430dd3b70a1018"
+ resolved "https://registry.npmjs.org/escodegen/-/escodegen-1.8.1.tgz"
integrity sha1-WltTr0aTEQvrsIZ6o0MN07cKEBg=
dependencies:
esprima "^2.7.1"
@@ -2384,16 +4144,14 @@ escodegen@1.8.x:
optionalDependencies:
source-map "~0.2.0"
-eslint-config-prettier@^6.12.0:
- version "6.12.0"
- resolved "https://registry.yarnpkg.com/eslint-config-prettier/-/eslint-config-prettier-6.12.0.tgz#9eb2bccff727db1c52104f0b49e87ea46605a0d2"
- integrity sha512-9jWPlFlgNwRUYVoujvWTQ1aMO8o6648r+K7qU7K5Jmkbyqav1fuEZC0COYpGBxyiAJb65Ra9hrmFx19xRGwXWw==
- dependencies:
- get-stdin "^6.0.0"
+eslint-config-prettier@^10.1.2:
+ version "10.1.2"
+ resolved "https://registry.yarnpkg.com/eslint-config-prettier/-/eslint-config-prettier-10.1.2.tgz#31a4b393c40c4180202c27e829af43323bf85276"
+ integrity sha512-Epgp/EofAUeEpIdZkW60MHKvPyru1ruQJxPL+WIycnaPApuseK0Zpkrh/FwL9oIpQvIhJwV7ptOy0DWUjTlCiA==
eslint-plugin-es@^3.0.0:
version "3.0.1"
- resolved "https://registry.yarnpkg.com/eslint-plugin-es/-/eslint-plugin-es-3.0.1.tgz#75a7cdfdccddc0589934aeeb384175f221c57893"
+ resolved "https://registry.npmjs.org/eslint-plugin-es/-/eslint-plugin-es-3.0.1.tgz"
integrity sha512-GUmAsJaN4Fc7Gbtl8uOBlayo2DqhwWvEzykMHSCZHU3XdJ+NSzzZcVhXh3VxX5icqQ+oQdIEawXX8xkR3mIFmQ==
dependencies:
eslint-utils "^2.0.0"
@@ -2401,7 +4159,7 @@ eslint-plugin-es@^3.0.0:
eslint-plugin-node@^11.1.0:
version "11.1.0"
- resolved "https://registry.yarnpkg.com/eslint-plugin-node/-/eslint-plugin-node-11.1.0.tgz#c95544416ee4ada26740a30474eefc5402dc671d"
+ resolved "https://registry.npmjs.org/eslint-plugin-node/-/eslint-plugin-node-11.1.0.tgz"
integrity sha512-oUwtPJ1W0SKD0Tr+wqu92c5xuCeQqB3hSCHasn/ZgjFdA9iDGNkNf2Zi9ztY7X+hNuMib23LNGRm6+uN+KLE3g==
dependencies:
eslint-plugin-es "^3.0.0"
@@ -2411,19 +4169,22 @@ eslint-plugin-node@^11.1.0:
resolve "^1.10.1"
semver "^6.1.0"
-eslint-plugin-prettier@^3.1.4:
- version "3.1.4"
- resolved "https://registry.yarnpkg.com/eslint-plugin-prettier/-/eslint-plugin-prettier-3.1.4.tgz#168ab43154e2ea57db992a2cd097c828171f75c2"
- integrity sha512-jZDa8z76klRqo+TdGDTFJSavwbnWK2ZpqGKNZ+VvweMW516pDUMmQ2koXvxEE4JhzNvTv+radye/bWGBmA6jmg==
+eslint-plugin-prettier@^5.1.2:
+ version "5.5.5"
+ resolved "https://registry.yarnpkg.com/eslint-plugin-prettier/-/eslint-plugin-prettier-5.5.5.tgz#9eae11593faa108859c26f9a9c367d619a0769c0"
+ integrity sha512-hscXkbqUZ2sPithAuLm5MXL+Wph+U7wHngPBv9OMWwlP8iaflyxpjTYZkmdgB4/vPIhemRlBEoLrH7UC1n7aUw==
dependencies:
- prettier-linter-helpers "^1.0.0"
+ prettier-linter-helpers "^1.0.1"
+ synckit "^0.11.12"
-eslint-plugin-promise@^6.0.1:
- version "6.0.1"
- resolved "https://registry.yarnpkg.com/eslint-plugin-promise/-/eslint-plugin-promise-6.0.1.tgz#a8cddf96a67c4059bdabf4d724a29572188ae423"
- integrity sha512-uM4Tgo5u3UWQiroOyDEsYcVMOo7re3zmno0IZmB5auxoaQNIceAbXEkSt8RNrKtaYehARHG06pYK6K1JhtP0Zw==
+eslint-plugin-promise@^7.3.0:
+ version "7.3.0"
+ resolved "https://registry.yarnpkg.com/eslint-plugin-promise/-/eslint-plugin-promise-7.3.0.tgz#7c61e117f5db8d7a300bd5143c15d1d828e4c124"
+ integrity sha512-6uGiOR0INuujr6PEQmeSSP7GbIMJ/ebEXXiEzb/nOj68LknH5Pxzb/AbZivmr6VE6TkTE8rTjRK9zhKpK6HsRA==
+ dependencies:
+ "@eslint-community/eslint-utils" "^4.4.0"
-eslint-scope@^5.1.1:
+eslint-scope@5.1.1:
version "5.1.1"
resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-5.1.1.tgz#e786e59a66cb92b3f6c1fb0d508aab174848f48c"
integrity sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==
@@ -2431,109 +4192,124 @@ eslint-scope@^5.1.1:
esrecurse "^4.3.0"
estraverse "^4.1.1"
-eslint-utils@^2.0.0, eslint-utils@^2.1.0:
+eslint-scope@^9.1.2:
+ version "9.1.2"
+ resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-9.1.2.tgz#b9de6ace2fab1cff24d2e58d85b74c8fcea39802"
+ integrity sha512-xS90H51cKw0jltxmvmHy2Iai1LIqrfbw57b79w/J7MfvDfkIkFZ+kj6zC3BjtUwh150HsSSdxXZcsuv72miDFQ==
+ dependencies:
+ "@types/esrecurse" "^4.3.1"
+ "@types/estree" "^1.0.8"
+ esrecurse "^4.3.0"
+ estraverse "^5.2.0"
+
+eslint-utils@^2.0.0:
version "2.1.0"
- resolved "https://registry.yarnpkg.com/eslint-utils/-/eslint-utils-2.1.0.tgz#d2de5e03424e707dc10c74068ddedae708741b27"
+ resolved "https://registry.npmjs.org/eslint-utils/-/eslint-utils-2.1.0.tgz"
integrity sha512-w94dQYoauyvlDc43XnGB8lU3Zt713vNChgt4EWwhXAP2XkBvndfxF0AgIqKOOasjPIPzj9JqgwkwbCYD0/V3Zg==
dependencies:
eslint-visitor-keys "^1.1.0"
-eslint-utils@^3.0.0:
- version "3.0.0"
- resolved "https://registry.yarnpkg.com/eslint-utils/-/eslint-utils-3.0.0.tgz#8aebaface7345bb33559db0a1f13a1d2d48c3672"
- integrity sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA==
- dependencies:
- eslint-visitor-keys "^2.0.0"
-
-eslint-visitor-keys@^1.1.0, eslint-visitor-keys@^1.3.0:
+eslint-visitor-keys@^1.1.0:
version "1.3.0"
- resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz#30ebd1ef7c2fdff01c3a4f151044af25fab0523e"
+ resolved "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz"
integrity sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==
-eslint-visitor-keys@^2.0.0:
- version "2.0.0"
- resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-2.0.0.tgz#21fdc8fbcd9c795cc0321f0563702095751511a8"
- integrity sha512-QudtT6av5WXels9WjIM7qz1XD1cWGvX4gGXvp/zBn9nXG02D0utdU3Em2m/QjTnrsk6bBjmCygl3rmj118msQQ==
+eslint-visitor-keys@^3.3.0, eslint-visitor-keys@^3.4.3:
+ version "3.4.3"
+ resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz#0cd72fe8550e3c2eae156a96a4dddcd1c8ac5800"
+ integrity sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==
-eslint@^7.11.0:
- version "7.11.0"
- resolved "https://registry.yarnpkg.com/eslint/-/eslint-7.11.0.tgz#aaf2d23a0b5f1d652a08edacea0c19f7fadc0b3b"
- integrity sha512-G9+qtYVCHaDi1ZuWzBsOWo2wSwd70TXnU6UHA3cTYHp7gCTXZcpggWFoUVAMRarg68qtPoNfFbzPh+VdOgmwmw==
- dependencies:
- "@babel/code-frame" "^7.0.0"
- "@eslint/eslintrc" "^0.1.3"
- ajv "^6.10.0"
- chalk "^4.0.0"
- cross-spawn "^7.0.2"
- debug "^4.0.1"
- doctrine "^3.0.0"
- enquirer "^2.3.5"
- eslint-scope "^5.1.1"
- eslint-utils "^2.1.0"
- eslint-visitor-keys "^2.0.0"
- espree "^7.3.0"
- esquery "^1.2.0"
+eslint-visitor-keys@^4.2.1:
+ version "4.2.1"
+ resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-4.2.1.tgz#4cfea60fe7dd0ad8e816e1ed026c1d5251b512c1"
+ integrity sha512-Uhdk5sfqcee/9H/rCOJikYz67o0a2Tw2hGRPOG2Y1R2dg7brRe1uG0yaNQDHu+TO/uQPF/5eCapvYSmHUjt7JQ==
+
+eslint-visitor-keys@^5.0.0, eslint-visitor-keys@^5.0.1:
+ version "5.0.1"
+ resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-5.0.1.tgz#9e3c9489697824d2d4ce3a8ad12628f91e9f59be"
+ integrity sha512-tD40eHxA35h0PEIZNeIjkHoDR4YjjJp34biM0mDvplBe//mB+IHCqHDGV7pxF+7MklTvighcCPPZC7ynWyjdTA==
+
+eslint@^10.2.1:
+ version "10.2.1"
+ resolved "https://registry.yarnpkg.com/eslint/-/eslint-10.2.1.tgz#224b2a6caeb34473eddcf918762363e2e063222a"
+ integrity sha512-wiyGaKsDgqXvF40P8mDwiUp/KQjE1FdrIEJsM8PZ3XCiniTMXS3OHWWUe5FI5agoCnr8x4xPrTDZuxsBlNHl+Q==
+ dependencies:
+ "@eslint-community/eslint-utils" "^4.8.0"
+ "@eslint-community/regexpp" "^4.12.2"
+ "@eslint/config-array" "^0.23.5"
+ "@eslint/config-helpers" "^0.5.5"
+ "@eslint/core" "^1.2.1"
+ "@eslint/plugin-kit" "^0.7.1"
+ "@humanfs/node" "^0.16.6"
+ "@humanwhocodes/module-importer" "^1.0.1"
+ "@humanwhocodes/retry" "^0.4.2"
+ "@types/estree" "^1.0.6"
+ ajv "^6.14.0"
+ cross-spawn "^7.0.6"
+ debug "^4.3.2"
+ escape-string-regexp "^4.0.0"
+ eslint-scope "^9.1.2"
+ eslint-visitor-keys "^5.0.1"
+ espree "^11.2.0"
+ esquery "^1.7.0"
esutils "^2.0.2"
- file-entry-cache "^5.0.1"
- functional-red-black-tree "^1.0.1"
- glob-parent "^5.0.0"
- globals "^12.1.0"
- ignore "^4.0.6"
- import-fresh "^3.0.0"
+ fast-deep-equal "^3.1.3"
+ file-entry-cache "^8.0.0"
+ find-up "^5.0.0"
+ glob-parent "^6.0.2"
+ ignore "^5.2.0"
imurmurhash "^0.1.4"
is-glob "^4.0.0"
- js-yaml "^3.13.1"
json-stable-stringify-without-jsonify "^1.0.1"
- levn "^0.4.1"
- lodash "^4.17.19"
- minimatch "^3.0.4"
+ minimatch "^10.2.4"
natural-compare "^1.4.0"
- optionator "^0.9.1"
- progress "^2.0.0"
- regexpp "^3.1.0"
- semver "^7.2.1"
- strip-ansi "^6.0.0"
- strip-json-comments "^3.1.0"
- table "^5.2.3"
- text-table "^0.2.0"
- v8-compile-cache "^2.0.3"
+ optionator "^0.9.3"
-espree@^7.3.0:
- version "7.3.0"
- resolved "https://registry.yarnpkg.com/espree/-/espree-7.3.0.tgz#dc30437cf67947cf576121ebd780f15eeac72348"
- integrity sha512-dksIWsvKCixn1yrEXO8UosNSxaDoSYpq9reEjZSbHLpT5hpaCAKTLBwq0RHtLrIr+c0ByiYzWT8KTMRzoRCNlw==
+espree@^10.0.1:
+ version "10.4.0"
+ resolved "https://registry.yarnpkg.com/espree/-/espree-10.4.0.tgz#d54f4949d4629005a1fa168d937c3ff1f7e2a837"
+ integrity sha512-j6PAQ2uUr79PZhBjP5C5fhl8e39FmRnOjsD5lGnWrFU8i2G776tBK7+nP8KuQUTTyAZUwfQqXAgrVH5MbH9CYQ==
+ dependencies:
+ acorn "^8.15.0"
+ acorn-jsx "^5.3.2"
+ eslint-visitor-keys "^4.2.1"
+
+espree@^11.2.0:
+ version "11.2.0"
+ resolved "https://registry.yarnpkg.com/espree/-/espree-11.2.0.tgz#01d5e47dc332aaba3059008362454a8cc34ccaa5"
+ integrity sha512-7p3DrVEIopW1B1avAGLuCSh1jubc01H2JHc8B4qqGblmg5gI9yumBgACjWo4JlIc04ufug4xJ3SQI8HkS/Rgzw==
dependencies:
- acorn "^7.4.0"
- acorn-jsx "^5.2.0"
- eslint-visitor-keys "^1.3.0"
+ acorn "^8.16.0"
+ acorn-jsx "^5.3.2"
+ eslint-visitor-keys "^5.0.1"
esprima@2.7.x, esprima@^2.7.1:
version "2.7.3"
- resolved "https://registry.yarnpkg.com/esprima/-/esprima-2.7.3.tgz#96e3b70d5779f6ad49cd032673d1c312767ba581"
+ resolved "https://registry.npmjs.org/esprima/-/esprima-2.7.3.tgz"
integrity sha1-luO3DVd59q1JzQMmc9HDEnZ7pYE=
esprima@^4.0.0:
version "4.0.1"
- resolved "https://registry.yarnpkg.com/esprima/-/esprima-4.0.1.tgz#13b04cdb3e6c5d19df91ab6987a8695619b0aa71"
+ resolved "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz"
integrity sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==
-esquery@^1.2.0:
- version "1.3.1"
- resolved "https://registry.yarnpkg.com/esquery/-/esquery-1.3.1.tgz#b78b5828aa8e214e29fb74c4d5b752e1c033da57"
- integrity sha512-olpvt9QG0vniUBZspVRN6lwB7hOZoTRtT+jzR+tS4ffYx2mzbw+z0XCOk44aaLYKApNX5nMm+E+P6o25ip/DHQ==
+esquery@^1.7.0:
+ version "1.7.0"
+ resolved "https://registry.yarnpkg.com/esquery/-/esquery-1.7.0.tgz#08d048f261f0ddedb5bae95f46809463d9c9496d"
+ integrity sha512-Ap6G0WQwcU/LHsvLwON1fAQX9Zp0A2Y6Y/cJBl9r/JbW90Zyg4/zbG6zzKa2OTALELarYHmKu0GhpM5EO+7T0g==
dependencies:
estraverse "^5.1.0"
esrecurse@^4.3.0:
version "4.3.0"
- resolved "https://registry.yarnpkg.com/esrecurse/-/esrecurse-4.3.0.tgz#7ad7964d679abb28bee72cec63758b1c5d2c9921"
+ resolved "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz"
integrity sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==
dependencies:
estraverse "^5.2.0"
estraverse@^1.9.1:
version "1.9.3"
- resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-1.9.3.tgz#af67f2dc922582415950926091a4005d29c9bb44"
+ resolved "https://registry.npmjs.org/estraverse/-/estraverse-1.9.3.tgz"
integrity sha1-r2fy3JIlgkFZUJJgkaQAXSnJu0Q=
estraverse@^4.1.1:
@@ -2543,22 +4319,44 @@ estraverse@^4.1.1:
estraverse@^5.1.0, estraverse@^5.2.0:
version "5.2.0"
- resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-5.2.0.tgz#307df42547e6cc7324d3cf03c155d5cdb8c53880"
+ resolved "https://registry.npmjs.org/estraverse/-/estraverse-5.2.0.tgz"
integrity sha512-BxbNGGNm0RyRYvUdHpIwv9IWzeM9XClbOxwoATuFdOE7ZE6wHL+HQ5T8hoPM+zHvmKzzsEqhgy0GrQ5X13afiQ==
+estree-walker@^0.6.1:
+ version "0.6.1"
+ resolved "https://registry.yarnpkg.com/estree-walker/-/estree-walker-0.6.1.tgz#53049143f40c6eb918b23671d1fe3219f3a1b362"
+ integrity sha512-SqmZANLWS0mnatqbSfRP5g8OXZC12Fgg1IwNtLsyHDzJizORW4khDfjPqJZsemPWBB2uqykUah5YpQ6epsqC/w==
+
+estree-walker@^2.0.2:
+ version "2.0.2"
+ resolved "https://registry.yarnpkg.com/estree-walker/-/estree-walker-2.0.2.tgz#52f010178c2a4c117a7757cfe942adb7d2da4cac"
+ integrity sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==
+
+estree-walker@^3.0.3:
+ version "3.0.3"
+ resolved "https://registry.yarnpkg.com/estree-walker/-/estree-walker-3.0.3.tgz#67c3e549ec402a487b4fc193d1953a524752340d"
+ integrity sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==
+ dependencies:
+ "@types/estree" "^1.0.0"
+
esutils@^2.0.2:
version "2.0.3"
- resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.3.tgz#74d2eb4de0b8da1293711910d50775b9b710ef64"
+ resolved "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz"
integrity sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==
eventemitter3@^3.1.0:
version "3.1.2"
- resolved "https://registry.yarnpkg.com/eventemitter3/-/eventemitter3-3.1.2.tgz#2d3d48f9c346698fce83a85d7d664e98535df6e7"
+ resolved "https://registry.npmjs.org/eventemitter3/-/eventemitter3-3.1.2.tgz"
integrity sha512-tvtQIeLVHjDkJYnzf2dgVMxfuSGJeM/7UCG17TT4EumTfNtF+0nebF/4zWOIkCreAbtNqhGEboB6BWrwqNaw4Q==
+events@^3.2.0:
+ version "3.3.0"
+ resolved "https://registry.yarnpkg.com/events/-/events-3.3.0.tgz#31a95ad0a924e2d2c419a813aeb2c4e878ea7400"
+ integrity sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==
+
execa@^1.0.0:
version "1.0.0"
- resolved "https://registry.yarnpkg.com/execa/-/execa-1.0.0.tgz#c6236a5bb4df6d6f15e88e7f017798216749ddd8"
+ resolved "https://registry.npmjs.org/execa/-/execa-1.0.0.tgz"
integrity sha512-adbxcyWV46qiHyvSp50TKt05tB4tK3HcmF7/nxfAdhnox83seTDbwnaqKO4sXRy7roHAIFqJP/Rw/AuEbX61LA==
dependencies:
cross-spawn "^6.0.0"
@@ -2569,9 +4367,14 @@ execa@^1.0.0:
signal-exit "^3.0.0"
strip-eof "^1.0.0"
+exit-hook@2.2.1:
+ version "2.2.1"
+ resolved "https://registry.yarnpkg.com/exit-hook/-/exit-hook-2.2.1.tgz#007b2d92c6428eda2b76e7016a34351586934593"
+ integrity sha512-eNTPlAD67BmP31LDINZ3U7HSF8l57TxOY2PmBJ1shpCvpnxBF93mWCE8YHBnXs8qiUZJc9WDcWIeC3a2HIAMfw==
+
expand-brackets@^2.1.4:
version "2.1.4"
- resolved "https://registry.yarnpkg.com/expand-brackets/-/expand-brackets-2.1.4.tgz#b77735e315ce30f6b6eff0f83b04151a22449622"
+ resolved "https://registry.npmjs.org/expand-brackets/-/expand-brackets-2.1.4.tgz"
integrity sha1-t3c14xXOMPa27/D4OwQVGiJEliI=
dependencies:
debug "^2.3.3"
@@ -2582,21 +4385,36 @@ expand-brackets@^2.1.4:
snapdragon "^0.8.1"
to-regex "^3.0.1"
+expect-type@^1.1.0:
+ version "1.2.1"
+ resolved "https://registry.yarnpkg.com/expect-type/-/expect-type-1.2.1.tgz#af76d8b357cf5fa76c41c09dafb79c549e75f71f"
+ integrity sha512-/kP8CAwxzLVEeFrMm4kMmy4CCDlpipyA7MYLVrdJIkV0fYF0UaigQHRsxHiuY/GEea+bh4KSv3TIlgr+2UL6bw==
+
expect.js@0.3.1:
version "0.3.1"
- resolved "https://registry.yarnpkg.com/expect.js/-/expect.js-0.3.1.tgz#b0a59a0d2eff5437544ebf0ceaa6015841d09b5b"
+ resolved "https://registry.npmjs.org/expect.js/-/expect.js-0.3.1.tgz"
integrity sha1-sKWaDS7/VDdUTr8M6qYBWEHQm1s=
+exponential-backoff@^3.1.1:
+ version "3.1.1"
+ resolved "https://registry.yarnpkg.com/exponential-backoff/-/exponential-backoff-3.1.1.tgz#64ac7526fe341ab18a39016cd22c787d01e00bf6"
+ integrity sha512-dX7e/LHVJ6W3DE1MHWi9S1EYzDESENfLrYohG2G++ovZrYOkm4Knwa0mc1cn84xJOR4KEU0WSchhLbd0UklbHw==
+
+exsolve@^1.0.1, exsolve@^1.0.4:
+ version "1.0.5"
+ resolved "https://registry.yarnpkg.com/exsolve/-/exsolve-1.0.5.tgz#1f5b6b4fe82ad6b28a173ccb955a635d77859dcf"
+ integrity sha512-pz5dvkYYKQ1AHVrgOzBKWeP4u4FRb3a6DNK2ucr0OoNwYIU4QWsJ+NM36LLzORT+z845MzKHHhpXiUF5nvQoJg==
+
extend-shallow@^2.0.1:
version "2.0.1"
- resolved "https://registry.yarnpkg.com/extend-shallow/-/extend-shallow-2.0.1.tgz#51af7d614ad9a9f610ea1bafbb989d6b1c56890f"
+ resolved "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz"
integrity sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=
dependencies:
is-extendable "^0.1.0"
extend-shallow@^3.0.0, extend-shallow@^3.0.2:
version "3.0.2"
- resolved "https://registry.yarnpkg.com/extend-shallow/-/extend-shallow-3.0.2.tgz#26a71aaf073b39fb2127172746131c2704028db8"
+ resolved "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz"
integrity sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=
dependencies:
assign-symbols "^1.0.0"
@@ -2604,12 +4422,12 @@ extend-shallow@^3.0.0, extend-shallow@^3.0.2:
extend@~3.0.2:
version "3.0.2"
- resolved "https://registry.yarnpkg.com/extend/-/extend-3.0.2.tgz#f8b1136b4071fbd8eb140aff858b1019ec2915fa"
+ resolved "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz"
integrity sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==
external-editor@^3.0.3:
version "3.1.0"
- resolved "https://registry.yarnpkg.com/external-editor/-/external-editor-3.1.0.tgz#cb03f740befae03ea4d283caed2741a83f335495"
+ resolved "https://registry.npmjs.org/external-editor/-/external-editor-3.1.0.tgz"
integrity sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew==
dependencies:
chardet "^0.7.0"
@@ -2618,7 +4436,7 @@ external-editor@^3.0.3:
extglob@^2.0.4:
version "2.0.4"
- resolved "https://registry.yarnpkg.com/extglob/-/extglob-2.0.4.tgz#ad00fe4dc612a9232e8718711dc5cb5ab0285543"
+ resolved "https://registry.npmjs.org/extglob/-/extglob-2.0.4.tgz"
integrity sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==
dependencies:
array-unique "^0.3.2"
@@ -2632,27 +4450,27 @@ extglob@^2.0.4:
extsprintf@1.3.0:
version "1.3.0"
- resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.3.0.tgz#96918440e3041a7a414f8c52e3c574eb3c3e1e05"
+ resolved "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz"
integrity sha1-lpGEQOMEGnpBT4xS48V06zw+HgU=
extsprintf@^1.2.0:
version "1.4.0"
- resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.4.0.tgz#e2689f8f356fad62cca65a3a91c5df5f9551692f"
+ resolved "https://registry.npmjs.org/extsprintf/-/extsprintf-1.4.0.tgz"
integrity sha1-4mifjzVvrWLMplo6kcXfX5VRaS8=
-fast-deep-equal@^3.1.1:
+fast-deep-equal@^3.1.1, fast-deep-equal@^3.1.3:
version "3.1.3"
- resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz#3a7d56b559d6cbc3eb512325244e619a65c6c525"
+ resolved "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz"
integrity sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==
fast-diff@^1.1.2:
version "1.2.0"
- resolved "https://registry.yarnpkg.com/fast-diff/-/fast-diff-1.2.0.tgz#73ee11982d86caaf7959828d519cfe927fac5f03"
+ resolved "https://registry.npmjs.org/fast-diff/-/fast-diff-1.2.0.tgz"
integrity sha512-xJuoT5+L99XlZ8twedaRf6Ax2TgQVxvgZOYoPKqZufmJib0tL2tegPBOZb1pVNgIhlqDlA0eO0c3wBvQcmzx4w==
fast-glob@^2.2.6:
version "2.2.7"
- resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-2.2.7.tgz#6953857c3afa475fff92ee6015d52da70a4cd39d"
+ resolved "https://registry.npmjs.org/fast-glob/-/fast-glob-2.2.7.tgz"
integrity sha512-g1KuQwHOZAmOZMuBtHdxDtju+T2RT8jgCC9aANsbpdiDDTSnjgfuVsIBNKbUeJI3oKMRExcfNDtJl4OhbffMsw==
dependencies:
"@mrmlnc/readdir-enhanced" "^2.2.1"
@@ -2662,68 +4480,58 @@ fast-glob@^2.2.6:
merge2 "^1.2.3"
micromatch "^3.1.10"
-fast-glob@^3.1.1:
- version "3.2.4"
- resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-3.2.4.tgz#d20aefbf99579383e7f3cc66529158c9b98554d3"
- integrity sha512-kr/Oo6PX51265qeuCYsyGypiO5uJFgBS0jksyG7FUeCyQzNwYnzrNIMR1NXfkZXsMYXYLRAHgISHBz8gQcxKHQ==
- dependencies:
- "@nodelib/fs.stat" "^2.0.2"
- "@nodelib/fs.walk" "^1.2.3"
- glob-parent "^5.1.0"
- merge2 "^1.3.0"
- micromatch "^4.0.2"
- picomatch "^2.2.1"
-
-fast-glob@^3.2.9:
- version "3.2.12"
- resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-3.2.12.tgz#7f39ec99c2e6ab030337142da9e0c18f37afae80"
- integrity sha512-DVj4CQIYYow0BlaelwK1pHl5n5cRSJfM60UA0zK891sVInoPri2Ekj7+e1CT3/3qxXenpI+nBBmQAcJPJgaj4w==
- dependencies:
- "@nodelib/fs.stat" "^2.0.2"
- "@nodelib/fs.walk" "^1.2.3"
- glob-parent "^5.1.2"
- merge2 "^1.3.0"
- micromatch "^4.0.4"
-
fast-json-stable-stringify@^2.0.0:
version "2.1.0"
- resolved "https://registry.yarnpkg.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz#874bf69c6f404c2b5d99c481341399fd55892633"
+ resolved "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz"
integrity sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==
fast-levenshtein@^2.0.6, fast-levenshtein@~2.0.6:
version "2.0.6"
- resolved "https://registry.yarnpkg.com/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz#3d8a5c66883a16a30ca8643e851f19baa7797917"
+ resolved "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz"
integrity sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=
-fastq@^1.6.0:
- version "1.8.0"
- resolved "https://registry.yarnpkg.com/fastq/-/fastq-1.8.0.tgz#550e1f9f59bbc65fe185cb6a9b4d95357107f481"
- integrity sha512-SMIZoZdLh/fgofivvIkmknUXyPnvxRE3DhtZ5Me3Mrsk5gyPL42F0xr51TdRXskBxHfMp+07bcYzfsYEsSQA9Q==
- dependencies:
- reusify "^1.0.4"
+fast-uri@^3.0.1:
+ version "3.0.6"
+ resolved "https://registry.yarnpkg.com/fast-uri/-/fast-uri-3.0.6.tgz#88f130b77cfaea2378d56bf970dea21257a68748"
+ integrity sha512-Atfo14OibSv5wAp4VWNsFYE1AchQRTv9cBGWET4pZWHzYshFSS9NQI6I57rdKn9croWVMbYFbLhJ+yJvmZIIHw==
+
+fastest-levenshtein@^1.0.12:
+ version "1.0.16"
+ resolved "https://registry.yarnpkg.com/fastest-levenshtein/-/fastest-levenshtein-1.0.16.tgz#210e61b6ff181de91ea9b3d1b84fdedd47e034e5"
+ integrity sha512-eRnCtTTtGZFpQCwhJiUOuxPQWRXVKYDn0b2PeHfXL6/Zi53SLAzAHfVhVWK2AryC/WH05kGfxhFIPvTF0SXQzg==
+
+fdir@^6.2.0, fdir@^6.4.3, fdir@^6.5.0:
+ version "6.5.0"
+ resolved "https://registry.yarnpkg.com/fdir/-/fdir-6.5.0.tgz#ed2ab967a331ade62f18d077dae192684d50d350"
+ integrity sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==
figgy-pudding@^3.4.1, figgy-pudding@^3.5.1:
version "3.5.2"
- resolved "https://registry.yarnpkg.com/figgy-pudding/-/figgy-pudding-3.5.2.tgz#b4eee8148abb01dcf1d1ac34367d59e12fa61d6e"
+ resolved "https://registry.npmjs.org/figgy-pudding/-/figgy-pudding-3.5.2.tgz"
integrity sha512-0btnI/H8f2pavGMN8w40mlSKOfTK2SVJmBfBeVIj3kNw0swwgzyRq0d5TJVOwodFmtvpPeWPN/MCcfuWF0Ezbw==
figures@^2.0.0:
version "2.0.0"
- resolved "https://registry.yarnpkg.com/figures/-/figures-2.0.0.tgz#3ab1a2d2a62c8bfb431a0c94cb797a2fce27c962"
+ resolved "https://registry.npmjs.org/figures/-/figures-2.0.0.tgz"
integrity sha1-OrGi0qYsi/tDGgyUy3l6L84nyWI=
dependencies:
escape-string-regexp "^1.0.5"
-file-entry-cache@^5.0.1:
- version "5.0.1"
- resolved "https://registry.yarnpkg.com/file-entry-cache/-/file-entry-cache-5.0.1.tgz#ca0f6efa6dd3d561333fb14515065c2fafdf439c"
- integrity sha512-bCg29ictuBaKUwwArK4ouCaqDgLZcysCFLmM/Yn/FDoqndh/9vNuQfXRDvTuXKLxfD/JtZQGKFT8MGcJBK644g==
+file-entry-cache@^8.0.0:
+ version "8.0.0"
+ resolved "https://registry.yarnpkg.com/file-entry-cache/-/file-entry-cache-8.0.0.tgz#7787bddcf1131bffb92636c69457bbc0edd6d81f"
+ integrity sha512-XXTUwCvisa5oacNGRP9SfNtYBNAMi+RPwBFmblZEF7N7swHYQS6/Zfk7SRwx4D5j3CH211YNRco1DEMNVfZCnQ==
dependencies:
- flat-cache "^2.0.1"
+ flat-cache "^4.0.0"
+
+file-uri-to-path@1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz#553a7b8446ff6f684359c445f1e37a05dacc33dd"
+ integrity sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==
fill-range@^4.0.0:
version "4.0.0"
- resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-4.0.0.tgz#d544811d428f98eb06a63dc402d2403c328c38f7"
+ resolved "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz"
integrity sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=
dependencies:
extend-shallow "^2.0.1"
@@ -2731,23 +4539,18 @@ fill-range@^4.0.0:
repeat-string "^1.6.1"
to-regex-range "^2.1.0"
-fill-range@^7.0.1:
- version "7.0.1"
- resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-7.0.1.tgz#1919a6a7c75fe38b2c7c77e5198535da9acdda40"
- integrity sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==
- dependencies:
- to-regex-range "^5.0.1"
-
-find-up@3.0.0, find-up@^3.0.0:
- version "3.0.0"
- resolved "https://registry.yarnpkg.com/find-up/-/find-up-3.0.0.tgz#49169f1d7993430646da61ecc5ae355c21c97b73"
- integrity sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==
+find-cache-dir@^3.2.0:
+ version "3.3.2"
+ resolved "https://registry.yarnpkg.com/find-cache-dir/-/find-cache-dir-3.3.2.tgz#b30c5b6eff0730731aea9bbd9dbecbd80256d64b"
+ integrity sha512-wXZV5emFEjrridIgED11OoUKLxiYjAcqot/NJdAkOhlJ+vGzwhOAfcG5OX1jP+S0PcjEn8bdMJv+g2jwQ3Onig==
dependencies:
- locate-path "^3.0.0"
+ commondir "^1.0.1"
+ make-dir "^3.0.2"
+ pkg-dir "^4.1.0"
find-up@^1.0.0:
version "1.1.2"
- resolved "https://registry.yarnpkg.com/find-up/-/find-up-1.1.2.tgz#6b2e9822b1a2ce0a60ab64d610eccad53cb24d0f"
+ resolved "https://registry.npmjs.org/find-up/-/find-up-1.1.2.tgz"
integrity sha1-ay6YIrGizgpgq2TWEOzK1TyyTQ8=
dependencies:
path-exists "^2.0.0"
@@ -2755,43 +4558,55 @@ find-up@^1.0.0:
find-up@^2.0.0:
version "2.1.0"
- resolved "https://registry.yarnpkg.com/find-up/-/find-up-2.1.0.tgz#45d1b7e506c717ddd482775a2b77920a3c0c57a7"
+ resolved "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz"
integrity sha1-RdG35QbHF93UgndaK3eSCjwMV6c=
dependencies:
locate-path "^2.0.0"
-find-up@^4.1.0:
+find-up@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz"
+ integrity sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==
+ dependencies:
+ locate-path "^3.0.0"
+
+find-up@^4.0.0, find-up@^4.1.0:
version "4.1.0"
- resolved "https://registry.yarnpkg.com/find-up/-/find-up-4.1.0.tgz#97afe7d6cdc0bc5928584b7c8d7b16e8a9aa5d19"
+ resolved "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz"
integrity sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==
dependencies:
locate-path "^5.0.0"
path-exists "^4.0.0"
-flat-cache@^2.0.1:
- version "2.0.1"
- resolved "https://registry.yarnpkg.com/flat-cache/-/flat-cache-2.0.1.tgz#5d296d6f04bda44a4630a301413bdbc2ec085ec0"
- integrity sha512-LoQe6yDuUMDzQAEH8sgmh4Md6oZnc/7PjtwjNFSzveXqSHt6ka9fPBuso7IGf9Rz4uqnSnWiFH2B/zj24a5ReA==
+find-up@^5.0.0:
+ version "5.0.0"
+ resolved "https://registry.yarnpkg.com/find-up/-/find-up-5.0.0.tgz#4c92819ecb7083561e4f4a240a86be5198f536fc"
+ integrity sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==
dependencies:
- flatted "^2.0.0"
- rimraf "2.6.3"
- write "1.0.3"
+ locate-path "^6.0.0"
+ path-exists "^4.0.0"
-flat@^4.1.0:
- version "4.1.0"
- resolved "https://registry.yarnpkg.com/flat/-/flat-4.1.0.tgz#090bec8b05e39cba309747f1d588f04dbaf98db2"
- integrity sha512-Px/TiLIznH7gEDlPXcUD4KnBusa6kR6ayRUVcnEAbreRIuhkqow/mun59BuRXwoYk7ZQOLW1ZM05ilIvK38hFw==
+flat-cache@^4.0.0:
+ version "4.0.1"
+ resolved "https://registry.yarnpkg.com/flat-cache/-/flat-cache-4.0.1.tgz#0ece39fcb14ee012f4b0410bd33dd9c1f011127c"
+ integrity sha512-f7ccFPK3SXFHpx15UIGyRJ/FJQctuKZ0zVuN3frBo4HnK3cay9VEW0R6yPYFHC0AgqhukPzKjq22t5DmAyqGyw==
dependencies:
- is-buffer "~2.0.3"
+ flatted "^3.2.9"
+ keyv "^4.5.4"
-flatted@^2.0.0:
- version "2.0.2"
- resolved "https://registry.yarnpkg.com/flatted/-/flatted-2.0.2.tgz#4575b21e2bcee7434aa9be662f4b7b5f9c2b5138"
- integrity sha512-r5wGx7YeOwNWNlCA0wQ86zKyDLMQr+/RB8xy74M4hTphfmjlijTSSXGuH8rnvKZnfT9i+75zmd8jcKdMR4O6jA==
+flat@^5.0.2:
+ version "5.0.2"
+ resolved "https://registry.yarnpkg.com/flat/-/flat-5.0.2.tgz#8ca6fe332069ffa9d324c327198c598259ceb241"
+ integrity sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==
+
+flatted@^3.2.9:
+ version "3.2.9"
+ resolved "https://registry.yarnpkg.com/flatted/-/flatted-3.2.9.tgz#7eb4c67ca1ba34232ca9d2d93e9886e611ad7daf"
+ integrity sha512-36yxDn5H7OFZQla0/jFJmbIKTdZAQHngCedGxiMmpNfEZM0sdEeT+WczLQrjK6D7o2aiyLYDnkw0R3JK0Qv1RQ==
flush-write-stream@^1.0.0:
version "1.1.1"
- resolved "https://registry.yarnpkg.com/flush-write-stream/-/flush-write-stream-1.1.1.tgz#8dd7d873a1babc207d94ead0c2e0e44276ebf2e8"
+ resolved "https://registry.npmjs.org/flush-write-stream/-/flush-write-stream-1.1.1.tgz"
integrity sha512-3Z4XhFZ3992uIq0XOqb9AreonueSYphE6oYbpt5+3u06JWklbsPkNv3ZKkP9Bz/r+1MWCaMoSQ28P85+1Yc77w==
dependencies:
inherits "^2.0.3"
@@ -2799,17 +4614,33 @@ flush-write-stream@^1.0.0:
for-in@^1.0.2:
version "1.0.2"
- resolved "https://registry.yarnpkg.com/for-in/-/for-in-1.0.2.tgz#81068d295a8142ec0ac726c6e2200c30fb6d5e80"
+ resolved "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz"
integrity sha1-gQaNKVqBQuwKxybG4iAMMPttXoA=
+foreground-child@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/foreground-child/-/foreground-child-2.0.0.tgz#71b32800c9f15aa8f2f83f4a6bd9bff35d861a53"
+ integrity sha512-dCIq9FpEcyQyXKCkyzmlPTFNgrCzPudOe+mhvJU5zAtlBnGVy2yKxtfsxK2tQBThwq225jcvBjpw1Gr40uzZCA==
+ dependencies:
+ cross-spawn "^7.0.0"
+ signal-exit "^3.0.2"
+
+foreground-child@^3.1.0:
+ version "3.1.1"
+ resolved "https://registry.yarnpkg.com/foreground-child/-/foreground-child-3.1.1.tgz#1d173e776d75d2772fed08efe4a0de1ea1b12d0d"
+ integrity sha512-TMKDUnIte6bfb5nWv7V/caI169OHgvwjb7V4WkeUvbQQdjr5rWKqHFiKWb/fcOwB+CzBT+qbWjvj+DVwRskpIg==
+ dependencies:
+ cross-spawn "^7.0.0"
+ signal-exit "^4.0.1"
+
forever-agent@~0.6.1:
version "0.6.1"
- resolved "https://registry.yarnpkg.com/forever-agent/-/forever-agent-0.6.1.tgz#fbc71f0c41adeb37f96c577ad1ed42d8fdacca91"
+ resolved "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz"
integrity sha1-+8cfDEGt6zf5bFd60e1C2P2sypE=
form-data@~2.3.2:
version "2.3.3"
- resolved "https://registry.yarnpkg.com/form-data/-/form-data-2.3.3.tgz#dcce52c05f644f298c6a7ab936bd724ceffbf3a6"
+ resolved "https://registry.npmjs.org/form-data/-/form-data-2.3.3.tgz"
integrity sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==
dependencies:
asynckit "^0.4.0"
@@ -2818,22 +4649,27 @@ form-data@~2.3.2:
fragment-cache@^0.2.1:
version "0.2.1"
- resolved "https://registry.yarnpkg.com/fragment-cache/-/fragment-cache-0.2.1.tgz#4290fad27f13e89be7f33799c6bc5a0abfff0d19"
+ resolved "https://registry.npmjs.org/fragment-cache/-/fragment-cache-0.2.1.tgz"
integrity sha1-QpD60n8T6Jvn8zeZxrxaCr//DRk=
dependencies:
map-cache "^0.2.2"
from2@^2.1.0:
version "2.3.0"
- resolved "https://registry.yarnpkg.com/from2/-/from2-2.3.0.tgz#8bfb5502bde4a4d36cfdeea007fcca21d7e382af"
+ resolved "https://registry.npmjs.org/from2/-/from2-2.3.0.tgz"
integrity sha1-i/tVAr3kpNNs/e6gB/zKIdfjgq8=
dependencies:
inherits "^2.0.1"
readable-stream "^2.0.0"
+fromentries@^1.2.0:
+ version "1.3.2"
+ resolved "https://registry.yarnpkg.com/fromentries/-/fromentries-1.3.2.tgz#e4bca6808816bf8f93b52750f1127f5a6fd86e3a"
+ integrity sha512-cHEpEQHUg0f8XdtZCc2ZAhrHzKzT0MrFUTcvx+hfxYu7rGMDc5SKoXFh+n4YigxsHXRzc6OrCshdR1bWH6HHyg==
+
fs-extra@^8.1.0:
version "8.1.0"
- resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-8.1.0.tgz#49d43c45a88cd9677668cb7be1b46efdb8d2e1c0"
+ resolved "https://registry.npmjs.org/fs-extra/-/fs-extra-8.1.0.tgz"
integrity sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==
dependencies:
graceful-fs "^4.2.0"
@@ -2842,14 +4678,21 @@ fs-extra@^8.1.0:
fs-minipass@^1.2.7:
version "1.2.7"
- resolved "https://registry.yarnpkg.com/fs-minipass/-/fs-minipass-1.2.7.tgz#ccff8570841e7fe4265693da88936c55aed7f7c7"
+ resolved "https://registry.npmjs.org/fs-minipass/-/fs-minipass-1.2.7.tgz"
integrity sha512-GWSSJGFy4e9GUeCcbIkED+bgAoFyj7XF1mV8rma3QW4NIqX9Kyx79N/PF61H5udOV3aY1IaMLs6pGbH71nlCTA==
dependencies:
minipass "^2.6.0"
+fs-minipass@^3.0.0:
+ version "3.0.3"
+ resolved "https://registry.yarnpkg.com/fs-minipass/-/fs-minipass-3.0.3.tgz#79a85981c4dc120065e96f62086bf6f9dc26cc54"
+ integrity sha512-XUBA9XClHbnJWSfBzjkm6RvPsyg3sryZt06BEQoXcF7EK/xpGaQYJgQKDJSUH5SGZ76Y7pFx1QBnXz09rU5Fbw==
+ dependencies:
+ minipass "^7.0.3"
+
fs-write-stream-atomic@^1.0.8:
version "1.0.10"
- resolved "https://registry.yarnpkg.com/fs-write-stream-atomic/-/fs-write-stream-atomic-1.0.10.tgz#b47df53493ef911df75731e70a9ded0189db40c9"
+ resolved "https://registry.npmjs.org/fs-write-stream-atomic/-/fs-write-stream-atomic-1.0.10.tgz"
integrity sha1-tH31NJPvkR33VzHnCp3tAYnbQMk=
dependencies:
graceful-fs "^4.1.2"
@@ -2859,27 +4702,32 @@ fs-write-stream-atomic@^1.0.8:
fs.realpath@^1.0.0:
version "1.0.0"
- resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f"
+ resolved "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz"
integrity sha1-FQStJSMVjKpA20onh8sBQRmU6k8=
-fsevents@~2.1.1:
- version "2.1.3"
- resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.1.3.tgz#fb738703ae8d2f9fe900c33836ddebee8b97f23e"
- integrity sha512-Auw9a4AxqWpa9GUfj370BMPzzyncfBABW8Mab7BGWBYDj4Isgq+cDKtx0i6u9jcX9pQDnswsaaOTgTmA5pEjuQ==
+fsevents@~2.3.2:
+ version "2.3.2"
+ resolved "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz"
+ integrity sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==
+
+fsevents@~2.3.3:
+ version "2.3.3"
+ resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.3.3.tgz#cac6407785d03675a2a5e1a5305c697b347d90d6"
+ integrity sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==
function-bind@^1.1.1:
version "1.1.1"
- resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.1.tgz#a56899d3ea3c9bab874bb9773b7c5ede92f4895d"
+ resolved "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz"
integrity sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==
-functional-red-black-tree@^1.0.1:
- version "1.0.1"
- resolved "https://registry.yarnpkg.com/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz#1b0ab3bd553b2a0d6399d29c0e3ea0b252078327"
- integrity sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc=
+function-bind@^1.1.2:
+ version "1.1.2"
+ resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.2.tgz#2c02d864d97f3ea6c8830c464cbd11ab6eab7a1c"
+ integrity sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==
gauge@~2.7.3:
version "2.7.4"
- resolved "https://registry.yarnpkg.com/gauge/-/gauge-2.7.4.tgz#2c03405c7538c39d7eb37b317022e325fb018bf7"
+ resolved "https://registry.npmjs.org/gauge/-/gauge-2.7.4.tgz"
integrity sha1-LANAXHU4w51+s3sxcCLjJfsBi/c=
dependencies:
aproba "^1.0.3"
@@ -2891,24 +4739,39 @@ gauge@~2.7.3:
strip-ansi "^3.0.1"
wide-align "^1.1.0"
+generic-pool@^2.1.1:
+ version "2.5.4"
+ resolved "https://registry.yarnpkg.com/generic-pool/-/generic-pool-2.5.4.tgz#38c6188513e14030948ec6e5cf65523d9779299b"
+ integrity sha512-K2jozechYi0U3CNYlCWFGccmgjYhyqxOQVehL03l+gJ75LWDocM2qJeAaIneFd30ncD965WXnyM04jDgXzTMPw==
+
genfun@^5.0.0:
version "5.0.0"
- resolved "https://registry.yarnpkg.com/genfun/-/genfun-5.0.0.tgz#9dd9710a06900a5c4a5bf57aca5da4e52fe76537"
+ resolved "https://registry.npmjs.org/genfun/-/genfun-5.0.0.tgz"
integrity sha512-KGDOARWVga7+rnB3z9Sd2Letx515owfk0hSxHGuqjANb1M+x2bGZGqHLiozPsYMdM2OubeMni/Hpwmjq6qIUhA==
-get-caller-file@^2.0.1:
+gensync@^1.0.0-beta.2:
+ version "1.0.0-beta.2"
+ resolved "https://registry.yarnpkg.com/gensync/-/gensync-1.0.0-beta.2.tgz#32a6ee76c3d7f52d46b2b1ae5d93fea8580a25e0"
+ integrity sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==
+
+get-caller-file@^2.0.1, get-caller-file@^2.0.5:
version "2.0.5"
- resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-2.0.5.tgz#4f94412a82db32f36e3b0b9741f8a97feb031f7e"
+ resolved "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz"
integrity sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==
get-func-name@^2.0.0:
version "2.0.0"
- resolved "https://registry.yarnpkg.com/get-func-name/-/get-func-name-2.0.0.tgz#ead774abee72e20409433a066366023dd6887a41"
+ resolved "https://registry.npmjs.org/get-func-name/-/get-func-name-2.0.0.tgz"
integrity sha1-6td0q+5y4gQJQzoGY2YCPdaIekE=
+get-package-type@^0.1.0:
+ version "0.1.0"
+ resolved "https://registry.yarnpkg.com/get-package-type/-/get-package-type-0.1.0.tgz#8de2d803cff44df3bc6c456e6668b36c3926e11a"
+ integrity sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q==
+
get-pkg-repo@^1.0.0:
version "1.4.0"
- resolved "https://registry.yarnpkg.com/get-pkg-repo/-/get-pkg-repo-1.4.0.tgz#c73b489c06d80cc5536c2c853f9e05232056972d"
+ resolved "https://registry.npmjs.org/get-pkg-repo/-/get-pkg-repo-1.4.0.tgz"
integrity sha1-xztInAbYDMVTbCyFP54FIyBWly0=
dependencies:
hosted-git-info "^2.1.4"
@@ -2919,41 +4782,51 @@ get-pkg-repo@^1.0.0:
get-port@^4.2.0:
version "4.2.0"
- resolved "https://registry.yarnpkg.com/get-port/-/get-port-4.2.0.tgz#e37368b1e863b7629c43c5a323625f95cf24b119"
+ resolved "https://registry.npmjs.org/get-port/-/get-port-4.2.0.tgz"
integrity sha512-/b3jarXkH8KJoOMQc3uVGHASwGLPq3gSFJ7tgJm2diza+bydJPTGOibin2steecKeOylE8oY2JERlVWkAJO6yw==
+get-source@^2.0.12:
+ version "2.0.12"
+ resolved "https://registry.yarnpkg.com/get-source/-/get-source-2.0.12.tgz#0b47d57ea1e53ce0d3a69f4f3d277eb8047da944"
+ integrity sha512-X5+4+iD+HoSeEED+uwrQ07BOQr0kEDFMVqqpBuI+RaZBpBpHCuXxo70bjar6f0b0u/DQJsJ7ssurpP0V60Az+w==
+ dependencies:
+ data-uri-to-buffer "^2.0.0"
+ source-map "^0.6.1"
+
get-stdin@^4.0.1:
version "4.0.1"
- resolved "https://registry.yarnpkg.com/get-stdin/-/get-stdin-4.0.1.tgz#b968c6b0a04384324902e8bf1a5df32579a450fe"
+ resolved "https://registry.npmjs.org/get-stdin/-/get-stdin-4.0.1.tgz"
integrity sha1-uWjGsKBDhDJJAui/Gl3zJXmkUP4=
-get-stdin@^6.0.0:
- version "6.0.0"
- resolved "https://registry.yarnpkg.com/get-stdin/-/get-stdin-6.0.0.tgz#9e09bf712b360ab9225e812048f71fde9c89657b"
- integrity sha512-jp4tHawyV7+fkkSKyvjuLZswblUtz+SQKzSWnBbii16BuZksJlU1wuBYXY75r+duh/llF1ur6oNwi+2ZzjKZ7g==
-
get-stream@^4.0.0, get-stream@^4.1.0:
version "4.1.0"
- resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-4.1.0.tgz#c1b255575f3dc21d59bfc79cd3d2b46b1c3a54b5"
+ resolved "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz"
integrity sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==
dependencies:
pump "^3.0.0"
+get-tsconfig@^4.7.5:
+ version "4.10.0"
+ resolved "https://registry.yarnpkg.com/get-tsconfig/-/get-tsconfig-4.10.0.tgz#403a682b373a823612475a4c2928c7326fc0f6bb"
+ integrity sha512-kGzZ3LWWQcGIAmg6iWvXn0ei6WDtV26wzHRMwDSzmAbcXrTEXxHy6IehI6/4eT6VRKyMP1eF1VqwrVUmE/LR7A==
+ dependencies:
+ resolve-pkg-maps "^1.0.0"
+
get-value@^2.0.3, get-value@^2.0.6:
version "2.0.6"
- resolved "https://registry.yarnpkg.com/get-value/-/get-value-2.0.6.tgz#dc15ca1c672387ca76bd37ac0a395ba2042a2c28"
+ resolved "https://registry.npmjs.org/get-value/-/get-value-2.0.6.tgz"
integrity sha1-3BXKHGcjh8p2vTesCjlbogQqLCg=
getpass@^0.1.1:
version "0.1.7"
- resolved "https://registry.yarnpkg.com/getpass/-/getpass-0.1.7.tgz#5eff8e3e684d569ae4cb2b1282604e8ba62149fa"
+ resolved "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz"
integrity sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=
dependencies:
assert-plus "^1.0.0"
git-raw-commits@2.0.0:
version "2.0.0"
- resolved "https://registry.yarnpkg.com/git-raw-commits/-/git-raw-commits-2.0.0.tgz#d92addf74440c14bcc5c83ecce3fb7f8a79118b5"
+ resolved "https://registry.npmjs.org/git-raw-commits/-/git-raw-commits-2.0.0.tgz"
integrity sha512-w4jFEJFgKXMQJ0H0ikBk2S+4KP2VEjhCvLCNqbNRQC8BgGWgLKNCO7a9K9LI+TVT7Gfoloje502sEnctibffgg==
dependencies:
dargs "^4.0.1"
@@ -2964,7 +4837,7 @@ git-raw-commits@2.0.0:
git-remote-origin-url@^2.0.0:
version "2.0.0"
- resolved "https://registry.yarnpkg.com/git-remote-origin-url/-/git-remote-origin-url-2.0.0.tgz#5282659dae2107145a11126112ad3216ec5fa65f"
+ resolved "https://registry.npmjs.org/git-remote-origin-url/-/git-remote-origin-url-2.0.0.tgz"
integrity sha1-UoJlna4hBxRaERJhEq0yFuxfpl8=
dependencies:
gitconfiglocal "^1.0.0"
@@ -2972,7 +4845,7 @@ git-remote-origin-url@^2.0.0:
git-semver-tags@^2.0.3:
version "2.0.3"
- resolved "https://registry.yarnpkg.com/git-semver-tags/-/git-semver-tags-2.0.3.tgz#48988a718acf593800f99622a952a77c405bfa34"
+ resolved "https://registry.npmjs.org/git-semver-tags/-/git-semver-tags-2.0.3.tgz"
integrity sha512-tj4FD4ww2RX2ae//jSrXZzrocla9db5h0V7ikPl1P/WwoZar9epdUhwR7XHXSgc+ZkNq72BEEerqQuicoEQfzA==
dependencies:
meow "^4.0.0"
@@ -2980,7 +4853,7 @@ git-semver-tags@^2.0.3:
git-up@^4.0.0:
version "4.0.2"
- resolved "https://registry.yarnpkg.com/git-up/-/git-up-4.0.2.tgz#10c3d731051b366dc19d3df454bfca3f77913a7c"
+ resolved "https://registry.npmjs.org/git-up/-/git-up-4.0.2.tgz"
integrity sha512-kbuvus1dWQB2sSW4cbfTeGpCMd8ge9jx9RKnhXhuJ7tnvT+NIrTVfYZxjtflZddQYcmdOTlkAcjmx7bor+15AQ==
dependencies:
is-ssh "^1.3.0"
@@ -2988,60 +4861,76 @@ git-up@^4.0.0:
git-url-parse@^11.1.2:
version "11.3.0"
- resolved "https://registry.yarnpkg.com/git-url-parse/-/git-url-parse-11.3.0.tgz#1515b4574c4eb2efda7d25cc50b29ce8beaefaae"
+ resolved "https://registry.npmjs.org/git-url-parse/-/git-url-parse-11.3.0.tgz"
integrity sha512-i3XNa8IKmqnUqWBcdWBjOcnyZYfN3C1WRvnKI6ouFWwsXCZEnlgbwbm55ZpJ3OJMhfEP/ryFhqW8bBhej3C5Ug==
dependencies:
git-up "^4.0.0"
gitconfiglocal@^1.0.0:
version "1.0.0"
- resolved "https://registry.yarnpkg.com/gitconfiglocal/-/gitconfiglocal-1.0.0.tgz#41d045f3851a5ea88f03f24ca1c6178114464b9b"
+ resolved "https://registry.npmjs.org/gitconfiglocal/-/gitconfiglocal-1.0.0.tgz"
integrity sha1-QdBF84UaXqiPA/JMocYXgRRGS5s=
dependencies:
ini "^1.3.2"
glob-parent@^3.1.0:
version "3.1.0"
- resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-3.1.0.tgz#9e6af6299d8d3bd2bd40430832bd113df906c5ae"
+ resolved "https://registry.npmjs.org/glob-parent/-/glob-parent-3.1.0.tgz"
integrity sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4=
dependencies:
is-glob "^3.1.0"
path-dirname "^1.0.0"
-glob-parent@^5.0.0, glob-parent@^5.1.0, glob-parent@~5.1.0:
- version "5.1.1"
- resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-5.1.1.tgz#b6c1ef417c4e5663ea498f1c45afac6916bbc229"
- integrity sha512-FnI+VGOpnlGHWZxthPGR+QhR78fuiK0sNLkHQv+bL9fQi57lNNdquIbna/WrfROrolq8GK5Ek6BiMwqL/voRYQ==
- dependencies:
- is-glob "^4.0.1"
-
-glob-parent@^5.1.2:
+glob-parent@^5.0.0:
version "5.1.2"
- resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-5.1.2.tgz#869832c58034fe68a4093c17dc15e8340d8401c4"
+ resolved "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz"
integrity sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==
dependencies:
is-glob "^4.0.1"
+glob-parent@^6.0.2:
+ version "6.0.2"
+ resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-6.0.2.tgz#6d237d99083950c79290f24c7642a3de9a28f9e3"
+ integrity sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==
+ dependencies:
+ is-glob "^4.0.3"
+
+glob-to-regexp@0.4.1, glob-to-regexp@^0.4.1:
+ version "0.4.1"
+ resolved "https://registry.yarnpkg.com/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz#c75297087c851b9a578bd217dd59a92f59fe546e"
+ integrity sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==
+
glob-to-regexp@^0.3.0:
version "0.3.0"
- resolved "https://registry.yarnpkg.com/glob-to-regexp/-/glob-to-regexp-0.3.0.tgz#8c5a1494d2066c570cc3bfe4496175acc4d502ab"
+ resolved "https://registry.npmjs.org/glob-to-regexp/-/glob-to-regexp-0.3.0.tgz"
integrity sha1-jFoUlNIGbFcMw7/kSWF1rMTVAqs=
-glob@7.1.3:
- version "7.1.3"
- resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.3.tgz#3960832d3f1574108342dafd3a67b332c0969df1"
- integrity sha512-vcfuiIxogLV4DlGBHIUOwI0IbrJ8HWPc4MU7HzviGeNho/UJDfi6B5p3sHeWIQ0KGIU0Jpxi5ZHxemQfLkkAwQ==
- 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"
+glob@^10.2.2:
+ version "10.4.1"
+ resolved "https://registry.yarnpkg.com/glob/-/glob-10.4.1.tgz#0cfb01ab6a6b438177bfe6a58e2576f6efe909c2"
+ integrity sha512-2jelhlq3E4ho74ZyVLN03oKdAZVUa6UDZzFLVH1H7dnoax+y9qyaq8zBkfDIggjniU19z0wU18y16jMB2eyVIw==
+ dependencies:
+ foreground-child "^3.1.0"
+ jackspeak "^3.1.2"
+ minimatch "^9.0.4"
+ minipass "^7.1.2"
+ path-scurry "^1.11.1"
+
+glob@^10.4.5:
+ version "10.5.0"
+ resolved "https://registry.yarnpkg.com/glob/-/glob-10.5.0.tgz#8ec0355919cd3338c28428a23d4f24ecc5fe738c"
+ integrity sha512-DfXN8DfhJ7NH3Oe7cFmu3NCu1wKbkReJ8TorzSAFbSKrlNaQSKfIzqYqVY8zlbs2NLBbWpRiU52GX2PbaBVNkg==
+ dependencies:
+ foreground-child "^3.1.0"
+ jackspeak "^3.1.2"
+ minimatch "^9.0.4"
+ minipass "^7.1.2"
+ package-json-from-dist "^1.0.0"
+ path-scurry "^1.11.1"
glob@^5.0.15:
version "5.0.15"
- resolved "https://registry.yarnpkg.com/glob/-/glob-5.0.15.tgz#1bc936b9e02f4a603fcc222ecf7633d30b8b93b1"
+ resolved "https://registry.npmjs.org/glob/-/glob-5.0.15.tgz"
integrity sha1-G8k2ueAvSmA/zCIuz3Yz0wuLk7E=
dependencies:
inflight "^1.0.4"
@@ -3050,52 +4939,31 @@ glob@^5.0.15:
once "^1.3.0"
path-is-absolute "^1.0.0"
-glob@^7.1.1, glob@^7.1.3, glob@^7.1.4:
- version "7.1.6"
- resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.6.tgz#141f33b81a7c2492e125594307480c46679278a6"
- integrity sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==
+glob@^7.1.1, glob@^7.1.3, glob@^7.1.4, glob@^7.1.6:
+ version "7.2.3"
+ resolved "https://registry.yarnpkg.com/glob/-/glob-7.2.3.tgz#b8df0fb802bbfa8e89bd1d938b4e16578ed44f2b"
+ integrity sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==
dependencies:
fs.realpath "^1.0.0"
inflight "^1.0.4"
inherits "2"
- minimatch "^3.0.4"
+ minimatch "^3.1.1"
once "^1.3.0"
path-is-absolute "^1.0.0"
-globals@^12.1.0:
- version "12.4.0"
- resolved "https://registry.yarnpkg.com/globals/-/globals-12.4.0.tgz#a18813576a41b00a24a97e7f815918c2e19925f8"
- integrity sha512-BWICuzzDvDoH54NHKCseDanAhE3CeDorgDL5MT6LMXXj2WCnd9UC2szdk4AWLfjdgNBCXLUanXYcpBBKOSWGwg==
- dependencies:
- type-fest "^0.8.1"
-
-globby@^11.0.1:
- version "11.0.1"
- resolved "https://registry.yarnpkg.com/globby/-/globby-11.0.1.tgz#9a2bf107a068f3ffeabc49ad702c79ede8cfd357"
- integrity sha512-iH9RmgwCmUJHi2z5o2l3eTtGBtXek1OYlHrbcxOYugyHLmAsZrPj43OtHThd62Buh/Vv6VyCBD2bdyWcGNQqoQ==
- dependencies:
- array-union "^2.1.0"
- dir-glob "^3.0.1"
- fast-glob "^3.1.1"
- ignore "^5.1.4"
- merge2 "^1.3.0"
- slash "^3.0.0"
+globals@^11.1.0:
+ version "11.12.0"
+ resolved "https://registry.yarnpkg.com/globals/-/globals-11.12.0.tgz#ab8795338868a0babd8525758018c2a7eb95c42e"
+ integrity sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==
-globby@^11.0.3:
- version "11.1.0"
- resolved "https://registry.yarnpkg.com/globby/-/globby-11.1.0.tgz#bd4be98bb042f83d796f7e3811991fbe82a0d34b"
- integrity sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==
- dependencies:
- array-union "^2.1.0"
- dir-glob "^3.0.1"
- fast-glob "^3.2.9"
- ignore "^5.2.0"
- merge2 "^1.4.1"
- slash "^3.0.0"
+globals@^14.0.0:
+ version "14.0.0"
+ resolved "https://registry.yarnpkg.com/globals/-/globals-14.0.0.tgz#898d7413c29babcf6bafe56fcadded858ada724e"
+ integrity sha512-oahGvuMGQlPw/ivIYBjVSrWAfWLBeku5tpPE2fOPLi+WHffIWbuh2tCjhyQhTBPMf5E9jDEH4FOmTYgYwbKwtQ==
globby@^9.2.0:
version "9.2.0"
- resolved "https://registry.yarnpkg.com/globby/-/globby-9.2.0.tgz#fd029a706c703d29bdd170f4b6db3a3f7a7cb63d"
+ resolved "https://registry.npmjs.org/globby/-/globby-9.2.0.tgz"
integrity sha512-ollPHROa5mcxDEkwg6bPt3QbEf4pDQSNtd6JPL1YvOvAo/7/0VAm9TccUeoTmarjPw4pfUthSCqcyfNB1I3ZSg==
dependencies:
"@types/glob" "^7.1.1"
@@ -3107,19 +4975,14 @@ globby@^9.2.0:
pify "^4.0.1"
slash "^2.0.0"
-graceful-fs@^4.1.11, graceful-fs@^4.1.15, graceful-fs@^4.1.2, graceful-fs@^4.1.6, graceful-fs@^4.2.0, graceful-fs@^4.2.2:
- version "4.2.4"
- resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.4.tgz#2256bde14d3632958c465ebc96dc467ca07a29fb"
- integrity sha512-WjKPNJF79dtJAVniUlGGWHYGz2jWxT6VhN/4m1NdkbZ2nOsEF+cI1Edgql5zCRhs/VsQYRvrXctxktVXZUkixw==
-
-growl@1.10.5:
- version "1.10.5"
- resolved "https://registry.yarnpkg.com/growl/-/growl-1.10.5.tgz#f2735dc2283674fa67478b10181059355c369e5e"
- integrity sha512-qBr4OuELkhPenW6goKVXiv47US3clb3/IbuWF9KNKEijAy9oeHxU9IgzjvJhHkUzhaj7rOUD7+YGWqUjLp5oSA==
+graceful-fs@^4.1.11, graceful-fs@^4.1.15, graceful-fs@^4.1.2, graceful-fs@^4.1.6, graceful-fs@^4.2.0, graceful-fs@^4.2.11, graceful-fs@^4.2.2, graceful-fs@^4.2.4, graceful-fs@^4.2.6:
+ version "4.2.11"
+ resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.11.tgz#4183e4e8bf08bb6e05bbb2f7d2e0c8f712ca40e3"
+ integrity sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==
handlebars@^4.0.1, handlebars@^4.7.6:
version "4.7.7"
- resolved "https://registry.yarnpkg.com/handlebars/-/handlebars-4.7.7.tgz#9ce33416aad02dbd6c8fafa8240d5d98004945a1"
+ resolved "https://registry.npmjs.org/handlebars/-/handlebars-4.7.7.tgz"
integrity sha512-aAcXm5OAfE/8IXkcZvCepKU3VzW1/39Fb5ZuqMtgI/hT8X2YgoMvBY5dLhq/cpOvw7Lk1nK/UF71aLG/ZnVYRA==
dependencies:
minimist "^1.2.5"
@@ -3131,12 +4994,12 @@ handlebars@^4.0.1, handlebars@^4.7.6:
har-schema@^2.0.0:
version "2.0.0"
- resolved "https://registry.yarnpkg.com/har-schema/-/har-schema-2.0.0.tgz#a94c2224ebcac04782a0d9035521f24735b7ec92"
+ resolved "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz"
integrity sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI=
har-validator@~5.1.3:
version "5.1.5"
- resolved "https://registry.yarnpkg.com/har-validator/-/har-validator-5.1.5.tgz#1f0803b9f8cb20c0fa13822df1ecddb36bde1efd"
+ resolved "https://registry.npmjs.org/har-validator/-/har-validator-5.1.5.tgz"
integrity sha512-nmT2T0lljbxdQZfspsno9hgrG3Uir6Ks5afism62poxqBM6sDnMEuPmzTq8XN0OEwqKLLdh1jQI3qyE66Nzb3w==
dependencies:
ajv "^6.12.3"
@@ -3144,37 +5007,37 @@ har-validator@~5.1.3:
hard-rejection@^2.1.0:
version "2.1.0"
- resolved "https://registry.yarnpkg.com/hard-rejection/-/hard-rejection-2.1.0.tgz#1c6eda5c1685c63942766d79bb40ae773cecd883"
+ resolved "https://registry.npmjs.org/hard-rejection/-/hard-rejection-2.1.0.tgz"
integrity sha512-VIZB+ibDhx7ObhAe7OVtoEbuP4h/MuOTHJ+J8h/eBXotJYl0fBgR72xDFCKgIh22OJZIOVNxBMWuhAr10r8HdA==
has-flag@^1.0.0:
version "1.0.0"
- resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-1.0.0.tgz#9d9e793165ce017a00f00418c43f942a7b1d11fa"
+ resolved "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz"
integrity sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=
has-flag@^3.0.0:
version "3.0.0"
- resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd"
+ resolved "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz"
integrity sha1-tdRU3CGZriJWmfNGfloH87lVuv0=
has-flag@^4.0.0:
version "4.0.0"
- resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-4.0.0.tgz#944771fd9c81c81265c4d6941860da06bb59479b"
+ resolved "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz"
integrity sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==
-has-symbols@^1.0.0, has-symbols@^1.0.1:
+has-symbols@^1.0.1:
version "1.0.1"
- resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.0.1.tgz#9f5214758a44196c406d9bd76cebf81ec2dd31e8"
+ resolved "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.1.tgz"
integrity sha512-PLcsoqu++dmEIZB+6totNFKq/7Do+Z0u4oT0zKOJNl3lYK6vGwwu2hjHs+68OEZbTjiUE9bgOABXbP/GvrS0Kg==
has-unicode@^2.0.0, has-unicode@^2.0.1:
version "2.0.1"
- resolved "https://registry.yarnpkg.com/has-unicode/-/has-unicode-2.0.1.tgz#e0e6fe6a28cf51138855e086d1691e771de2a8b9"
+ resolved "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz"
integrity sha1-4Ob+aijPUROIVeCG0Wkedx3iqLk=
has-value@^0.3.1:
version "0.3.1"
- resolved "https://registry.yarnpkg.com/has-value/-/has-value-0.3.1.tgz#7b1f58bada62ca827ec0a2078025654845995e1f"
+ resolved "https://registry.npmjs.org/has-value/-/has-value-0.3.1.tgz"
integrity sha1-ex9YutpiyoJ+wKIHgCVlSEWZXh8=
dependencies:
get-value "^2.0.3"
@@ -3183,7 +5046,7 @@ has-value@^0.3.1:
has-value@^1.0.0:
version "1.0.0"
- resolved "https://registry.yarnpkg.com/has-value/-/has-value-1.0.0.tgz#18b281da585b1c5c51def24c930ed29a0be6b177"
+ resolved "https://registry.npmjs.org/has-value/-/has-value-1.0.0.tgz"
integrity sha1-GLKB2lhbHFxR3vJMkw7SmgvmsXc=
dependencies:
get-value "^2.0.6"
@@ -3192,12 +5055,12 @@ has-value@^1.0.0:
has-values@^0.1.4:
version "0.1.4"
- resolved "https://registry.yarnpkg.com/has-values/-/has-values-0.1.4.tgz#6d61de95d91dfca9b9a02089ad384bff8f62b771"
+ resolved "https://registry.npmjs.org/has-values/-/has-values-0.1.4.tgz"
integrity sha1-bWHeldkd/Km5oCCJrThL/49it3E=
has-values@^1.0.0:
version "1.0.0"
- resolved "https://registry.yarnpkg.com/has-values/-/has-values-1.0.0.tgz#95b0b63fec2146619a6fe57fe75628d5a39efe4f"
+ resolved "https://registry.npmjs.org/has-values/-/has-values-1.0.0.tgz"
integrity sha1-lbC2P+whRmGab+V/51Yo1aOe/k8=
dependencies:
is-number "^3.0.0"
@@ -3205,37 +5068,70 @@ has-values@^1.0.0:
has@^1.0.3:
version "1.0.3"
- resolved "https://registry.yarnpkg.com/has/-/has-1.0.3.tgz#722d7cbfc1f6aa8241f16dd814e011e1f41e8796"
+ resolved "https://registry.npmjs.org/has/-/has-1.0.3.tgz"
integrity sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==
dependencies:
function-bind "^1.1.1"
-he@1.2.0:
+hasha@^5.0.0:
+ version "5.2.2"
+ resolved "https://registry.yarnpkg.com/hasha/-/hasha-5.2.2.tgz#a48477989b3b327aea3c04f53096d816d97522a1"
+ integrity sha512-Hrp5vIK/xr5SkeN2onO32H0MgNZ0f17HRNH39WfL0SYUNOTZ5Lz1TJ8Pajo/87dYGEFlLMm7mIc/k/s6Bvz9HQ==
+ dependencies:
+ is-stream "^2.0.0"
+ type-fest "^0.8.0"
+
+hasown@^2.0.2:
+ version "2.0.2"
+ resolved "https://registry.yarnpkg.com/hasown/-/hasown-2.0.2.tgz#003eaf91be7adc372e84ec59dc37252cedb80003"
+ integrity sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==
+ dependencies:
+ function-bind "^1.1.2"
+
+he@^1.2.0:
version "1.2.0"
- resolved "https://registry.yarnpkg.com/he/-/he-1.2.0.tgz#84ae65fa7eafb165fddb61566ae14baf05664f0f"
+ resolved "https://registry.npmjs.org/he/-/he-1.2.0.tgz"
integrity sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==
hosted-git-info@^2.1.4, hosted-git-info@^2.7.1:
version "2.8.8"
- resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-2.8.8.tgz#7539bd4bc1e0e0a895815a2e0262420b12858488"
+ resolved "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.8.tgz"
integrity sha512-f/wzC2QaWBs7t9IYqB4T3sR1xviIViXJRJTWBlx2Gf3g0Xi5vI7Yy4koXQ1c9OYDGHN9sBy1DQ2AB8fqZBWhUg==
+html-escaper@^2.0.0:
+ version "2.0.2"
+ resolved "https://registry.yarnpkg.com/html-escaper/-/html-escaper-2.0.2.tgz#dfd60027da36a36dfcbe236262c00a5822681453"
+ integrity sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==
+
http-cache-semantics@^3.8.1:
version "3.8.1"
- resolved "https://registry.yarnpkg.com/http-cache-semantics/-/http-cache-semantics-3.8.1.tgz#39b0e16add9b605bf0a9ef3d9daaf4843b4cacd2"
+ resolved "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-3.8.1.tgz"
integrity sha512-5ai2iksyV8ZXmnZhHH4rWPoxxistEexSi5936zIQ1bnNTW5VnA85B6P/VpXiRM017IgRvb2kKo1a//y+0wSp3w==
+http-cache-semantics@^4.1.1:
+ version "4.1.1"
+ resolved "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.1.1.tgz"
+ integrity sha512-er295DKPVsV82j5kw1Gjt+ADA/XYHsajl82cGNQG2eyoPkvgUhX+nDIyelzhIWbbsXP39EHcI6l5tYs2FYqYXQ==
+
http-proxy-agent@^2.1.0:
version "2.1.0"
- resolved "https://registry.yarnpkg.com/http-proxy-agent/-/http-proxy-agent-2.1.0.tgz#e4821beef5b2142a2026bd73926fe537631c5405"
+ resolved "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-2.1.0.tgz"
integrity sha512-qwHbBLV7WviBl0rQsOzH6o5lwyOIvwp/BdFnvVxXORldu5TmjFfjzBcWUWS5kWAZhmv+JtiDhSuQCp4sBfbIgg==
dependencies:
agent-base "4"
debug "3.1.0"
+http-proxy-agent@^7.0.0:
+ version "7.0.2"
+ resolved "https://registry.yarnpkg.com/http-proxy-agent/-/http-proxy-agent-7.0.2.tgz#9a8b1f246866c028509486585f62b8f2c18c270e"
+ integrity sha512-T1gkAiYYDWYx3V5Bmyu7HcfcvL7mUrTWiM6yOfa3PIphViJ/gFPbvidQ+veqSOHci/PxBcDabeUNCzpOODJZig==
+ dependencies:
+ agent-base "^7.1.0"
+ debug "^4.3.4"
+
http-signature@~1.2.0:
version "1.2.0"
- resolved "https://registry.yarnpkg.com/http-signature/-/http-signature-1.2.0.tgz#9aecd925114772f3d95b65a60abb8f7c18fbace1"
+ resolved "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz"
integrity sha1-muzZJRFHcvPZW2WmCruPfBj7rOE=
dependencies:
assert-plus "^1.0.0"
@@ -3244,109 +5140,130 @@ http-signature@~1.2.0:
https-proxy-agent@^2.2.3:
version "2.2.4"
- resolved "https://registry.yarnpkg.com/https-proxy-agent/-/https-proxy-agent-2.2.4.tgz#4ee7a737abd92678a293d9b34a1af4d0d08c787b"
+ resolved "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-2.2.4.tgz"
integrity sha512-OmvfoQ53WLjtA9HeYP9RNrWMJzzAz1JGaSFr1nijg0PVR1JaD/xbJq1mdEIIlxGpXp9eSe/O2LgU9DJmTPd0Eg==
dependencies:
agent-base "^4.3.0"
debug "^3.1.0"
+https-proxy-agent@^7.0.1:
+ version "7.0.4"
+ resolved "https://registry.yarnpkg.com/https-proxy-agent/-/https-proxy-agent-7.0.4.tgz#8e97b841a029ad8ddc8731f26595bad868cb4168"
+ integrity sha512-wlwpilI7YdjSkWaQ/7omYBMTliDcmCN8OLihO6I9B86g06lMyAoqgoDpV0XqoaPOKj+0DIdAvnsWfyAAhmimcg==
+ dependencies:
+ agent-base "^7.0.2"
+ debug "4"
+
humanize-ms@^1.2.1:
version "1.2.1"
- resolved "https://registry.yarnpkg.com/humanize-ms/-/humanize-ms-1.2.1.tgz#c46e3159a293f6b896da29316d8b6fe8bb79bbed"
+ resolved "https://registry.npmjs.org/humanize-ms/-/humanize-ms-1.2.1.tgz"
integrity sha1-xG4xWaKT9riW2ikxbYtv6Lt5u+0=
dependencies:
ms "^2.0.0"
iconv-lite@^0.4.24:
version "0.4.24"
- resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.24.tgz#2022b4b25fbddc21d2f524974a474aafe733908b"
+ resolved "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz"
integrity sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==
dependencies:
safer-buffer ">= 2.1.2 < 3"
iconv-lite@^0.6.2:
version "0.6.2"
- resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.6.2.tgz#ce13d1875b0c3a674bd6a04b7f76b01b1b6ded01"
+ resolved "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.2.tgz"
integrity sha512-2y91h5OpQlolefMPmUlivelittSWy0rP+oYVpn6A7GwVHNE8AWzoYOBNmlwks3LobaJxgHCYZAnyNo2GgpNRNQ==
dependencies:
safer-buffer ">= 2.1.2 < 3.0.0"
iferr@^0.1.5:
version "0.1.5"
- resolved "https://registry.yarnpkg.com/iferr/-/iferr-0.1.5.tgz#c60eed69e6d8fdb6b3104a1fcbca1c192dc5b501"
+ resolved "https://registry.npmjs.org/iferr/-/iferr-0.1.5.tgz"
integrity sha1-xg7taebY/bazEEofy8ocGS3FtQE=
ignore-walk@^3.0.1:
version "3.0.3"
- resolved "https://registry.yarnpkg.com/ignore-walk/-/ignore-walk-3.0.3.tgz#017e2447184bfeade7c238e4aefdd1e8f95b1e37"
+ resolved "https://registry.npmjs.org/ignore-walk/-/ignore-walk-3.0.3.tgz"
integrity sha512-m7o6xuOaT1aqheYHKf8W6J5pYH85ZI9w077erOzLje3JsB1gkafkAhHHY19dqjulgIZHFm32Cp5uNZgcQqdJKw==
dependencies:
minimatch "^3.0.4"
-ignore@^4.0.3, ignore@^4.0.6:
+ignore@^4.0.3:
version "4.0.6"
- resolved "https://registry.yarnpkg.com/ignore/-/ignore-4.0.6.tgz#750e3db5862087b4737ebac8207ffd1ef27b25fc"
+ resolved "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz"
integrity sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==
-ignore@^5.1.1, ignore@^5.1.4, ignore@^5.1.8, ignore@^5.2.0:
- version "5.2.0"
- resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.2.0.tgz#6d3bac8fa7fe0d45d9f9be7bac2fc279577e345a"
- integrity sha512-CmxgYGiEPCLhfLnpPp1MoRmifwEIOgjcHXxOBjv7mY96c+eWScsOP9c112ZyLdWHi0FxHjI+4uVhKYp/gcdRmQ==
+ignore@^5.1.1, ignore@^5.2.0:
+ version "5.3.0"
+ resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.3.0.tgz#67418ae40d34d6999c95ff56016759c718c82f78"
+ integrity sha512-g7dmpshy+gD7mh88OC9NwSGTKoc3kyLAZQRU1mt53Aw/vnvfXnbC+F/7F7QoYVKbV+KNvJx8wArewKy1vXMtlg==
+
+ignore@^7.0.5:
+ version "7.0.5"
+ resolved "https://registry.yarnpkg.com/ignore/-/ignore-7.0.5.tgz#4cb5f6cd7d4c7ab0365738c7aea888baa6d7efd9"
+ integrity sha512-Hs59xBNfUIunMFgWAbGX5cq6893IbWg4KnrjbYwX3tx0ztorVgTDA6B2sxf8ejHJ4wz8BqGUMYlnzNBer5NvGg==
import-fresh@^2.0.0:
version "2.0.0"
- resolved "https://registry.yarnpkg.com/import-fresh/-/import-fresh-2.0.0.tgz#d81355c15612d386c61f9ddd3922d4304822a546"
+ resolved "https://registry.npmjs.org/import-fresh/-/import-fresh-2.0.0.tgz"
integrity sha1-2BNVwVYS04bGH53dOSLUMEgipUY=
dependencies:
caller-path "^2.0.0"
resolve-from "^3.0.0"
-import-fresh@^3.0.0, import-fresh@^3.2.1:
- version "3.2.1"
- resolved "https://registry.yarnpkg.com/import-fresh/-/import-fresh-3.2.1.tgz#633ff618506e793af5ac91bf48b72677e15cbe66"
- integrity sha512-6e1q1cnWP2RXD9/keSkxHScg508CdXqXWgWBaETNhyuBFz+kUZlKboh+ISK+bU++DmbHimVBrOz/zzPe0sZ3sQ==
+import-fresh@^3.2.1:
+ version "3.3.1"
+ resolved "https://registry.yarnpkg.com/import-fresh/-/import-fresh-3.3.1.tgz#9cecb56503c0ada1f2741dbbd6546e4b13b57ccf"
+ integrity sha512-TR3KfrTZTYLPB6jUjfx6MF9WcWrHL9su5TObK4ZkYgBdWKPOFoSoQIdEuTuR82pmtxH2spWG9h6etwfr1pLBqQ==
dependencies:
parent-module "^1.0.0"
resolve-from "^4.0.0"
import-local@^2.0.0:
version "2.0.0"
- resolved "https://registry.yarnpkg.com/import-local/-/import-local-2.0.0.tgz#55070be38a5993cf18ef6db7e961f5bee5c5a09d"
+ resolved "https://registry.npmjs.org/import-local/-/import-local-2.0.0.tgz"
integrity sha512-b6s04m3O+s3CGSbqDIyP4R6aAwAeYlVq9+WUWep6iHa8ETRf9yei1U48C5MmfJmV9AiLYYBKPMq/W+/WRpQmCQ==
dependencies:
pkg-dir "^3.0.0"
resolve-cwd "^2.0.0"
+import-local@^3.0.2:
+ version "3.2.0"
+ resolved "https://registry.yarnpkg.com/import-local/-/import-local-3.2.0.tgz#c3d5c745798c02a6f8b897726aba5100186ee260"
+ integrity sha512-2SPlun1JUPWoM6t3F0dw0FkCF/jWY8kttcY4f599GLTSjh2OCuuhdTkJQsEcZzBqbXZGKMK2OqW1oZsjtf/gQA==
+ dependencies:
+ pkg-dir "^4.2.0"
+ resolve-cwd "^3.0.0"
+
imurmurhash@^0.1.4:
version "0.1.4"
- resolved "https://registry.yarnpkg.com/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea"
+ resolved "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz"
integrity sha1-khi5srkoojixPcT7a21XbyMUU+o=
indent-string@^2.1.0:
version "2.1.0"
- resolved "https://registry.yarnpkg.com/indent-string/-/indent-string-2.1.0.tgz#8e2d48348742121b4a8218b7a137e9a52049dc80"
+ resolved "https://registry.npmjs.org/indent-string/-/indent-string-2.1.0.tgz"
integrity sha1-ji1INIdCEhtKghi3oTfppSBJ3IA=
dependencies:
repeating "^2.0.0"
indent-string@^3.0.0:
version "3.2.0"
- resolved "https://registry.yarnpkg.com/indent-string/-/indent-string-3.2.0.tgz#4a5fd6d27cc332f37e5419a504dbb837105c9289"
+ resolved "https://registry.npmjs.org/indent-string/-/indent-string-3.2.0.tgz"
integrity sha1-Sl/W0nzDMvN+VBmlBNu4NxBckok=
indent-string@^4.0.0:
version "4.0.0"
- resolved "https://registry.yarnpkg.com/indent-string/-/indent-string-4.0.0.tgz#624f8f4497d619b2d9768531d58f4122854d7251"
+ resolved "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz"
integrity sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==
infer-owner@^1.0.3, infer-owner@^1.0.4:
version "1.0.4"
- resolved "https://registry.yarnpkg.com/infer-owner/-/infer-owner-1.0.4.tgz#c4cefcaa8e51051c2a40ba2ce8a3d27295af9467"
+ resolved "https://registry.npmjs.org/infer-owner/-/infer-owner-1.0.4.tgz"
integrity sha512-IClj+Xz94+d7irH5qRyfJonOdfTzuDaifE6ZPWfx0N0+/ATZCbuTPq2prFl526urkQd90WyUKIh1DfBQ2hMz9A==
inflight@^1.0.4:
version "1.0.6"
- resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9"
+ resolved "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz"
integrity sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=
dependencies:
once "^1.3.0"
@@ -3354,17 +5271,17 @@ inflight@^1.0.4:
inherits@2, inherits@^2.0.1, inherits@^2.0.3, inherits@^2.0.4, inherits@~2.0.3:
version "2.0.4"
- resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c"
+ resolved "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz"
integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==
ini@^1.3.2, ini@^1.3.4:
version "1.3.8"
- resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.8.tgz#a29da425b48806f34767a4efce397269af28432c"
+ resolved "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz"
integrity sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==
init-package-json@^1.10.3:
version "1.10.3"
- resolved "https://registry.yarnpkg.com/init-package-json/-/init-package-json-1.10.3.tgz#45ffe2f610a8ca134f2bd1db5637b235070f6cbe"
+ resolved "https://registry.npmjs.org/init-package-json/-/init-package-json-1.10.3.tgz"
integrity sha512-zKSiXKhQveNteyhcj1CoOP8tqp1QuxPIPBl8Bid99DGLFqA1p87M6lNgfjJHSBoWJJlidGOv5rWjyYKEB3g2Jw==
dependencies:
glob "^7.1.1"
@@ -3378,7 +5295,7 @@ init-package-json@^1.10.3:
inquirer@^6.2.0:
version "6.5.2"
- resolved "https://registry.yarnpkg.com/inquirer/-/inquirer-6.5.2.tgz#ad50942375d036d327ff528c08bd5fab089928ca"
+ resolved "https://registry.npmjs.org/inquirer/-/inquirer-6.5.2.tgz"
integrity sha512-cntlB5ghuB0iuO65Ovoi8ogLHiWGs/5yNrtUcKjFhSSiVeAIVpD7koaSU9RM8mpXw5YDi9RdYXGQMaOURB7ycQ==
dependencies:
ansi-escapes "^3.2.0"
@@ -3395,81 +5312,94 @@ inquirer@^6.2.0:
strip-ansi "^5.1.0"
through "^2.3.6"
+interpret@^3.1.1:
+ version "3.1.1"
+ resolved "https://registry.yarnpkg.com/interpret/-/interpret-3.1.1.tgz#5be0ceed67ca79c6c4bc5cf0d7ee843dcea110c4"
+ integrity sha512-6xwYfHbajpoF0xLW+iwLkhwgvLoZDfjYfoFNu8ftMoXINzwuymNLd9u/KmwtdT2GbR+/Cz66otEGEVVUHX9QLQ==
+
+ip-address@^9.0.5:
+ version "9.0.5"
+ resolved "https://registry.yarnpkg.com/ip-address/-/ip-address-9.0.5.tgz#117a960819b08780c3bd1f14ef3c1cc1d3f3ea5a"
+ integrity sha512-zHtQzGojZXTwZTHQqra+ETKd4Sn3vgi7uBmlPoXVWZqYvuKmtI0l/VZTjqGmJY9x88GGOaZ9+G9ES8hC4T4X8g==
+ dependencies:
+ jsbn "1.1.0"
+ sprintf-js "^1.1.3"
+
ip@1.1.5:
version "1.1.5"
- resolved "https://registry.yarnpkg.com/ip/-/ip-1.1.5.tgz#bdded70114290828c0a039e72ef25f5aaec4354a"
+ resolved "https://registry.npmjs.org/ip/-/ip-1.1.5.tgz"
integrity sha1-vd7XARQpCCjAoDnnLvJfWq7ENUo=
is-accessor-descriptor@^0.1.6:
version "0.1.6"
- resolved "https://registry.yarnpkg.com/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz#a9e12cb3ae8d876727eeef3843f8a0897b5c98d6"
+ resolved "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz"
integrity sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=
dependencies:
kind-of "^3.0.2"
is-accessor-descriptor@^1.0.0:
version "1.0.0"
- resolved "https://registry.yarnpkg.com/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz#169c2f6d3df1f992618072365c9b0ea1f6878656"
+ resolved "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz"
integrity sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==
dependencies:
kind-of "^6.0.0"
is-arrayish@^0.2.1:
version "0.2.1"
- resolved "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.2.1.tgz#77c99840527aa8ecb1a8ba697b80645a7a926a9d"
+ resolved "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz"
integrity sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=
-is-binary-path@~2.1.0:
- version "2.1.0"
- resolved "https://registry.yarnpkg.com/is-binary-path/-/is-binary-path-2.1.0.tgz#ea1f7f3b80f064236e83470f86c09c254fb45b09"
- integrity sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==
- dependencies:
- binary-extensions "^2.0.0"
+is-arrayish@^0.3.1:
+ version "0.3.2"
+ resolved "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.3.2.tgz#4574a2ae56f7ab206896fb431eaeed066fdf8f03"
+ integrity sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ==
is-buffer@^1.1.5:
version "1.1.6"
- resolved "https://registry.yarnpkg.com/is-buffer/-/is-buffer-1.1.6.tgz#efaa2ea9daa0d7ab2ea13a97b2b8ad51fefbe8be"
+ resolved "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz"
integrity sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==
-is-buffer@~2.0.3:
- version "2.0.4"
- resolved "https://registry.yarnpkg.com/is-buffer/-/is-buffer-2.0.4.tgz#3e572f23c8411a5cfd9557c849e3665e0b290623"
- integrity sha512-Kq1rokWXOPXWuaMAqZiJW4XxsmD9zGx9q4aePabbn3qCRGedtH7Cm+zV8WETitMfu1wdh+Rvd6w5egwSngUX2A==
-
is-callable@^1.1.4, is-callable@^1.2.2:
version "1.2.2"
- resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.2.2.tgz#c7c6715cd22d4ddb48d3e19970223aceabb080d9"
+ resolved "https://registry.npmjs.org/is-callable/-/is-callable-1.2.2.tgz"
integrity sha512-dnMqspv5nU3LoewK2N/y7KLtxtakvTuaCsU9FU50/QDmdbHNy/4/JuRtMHqRU22o3q+W89YQndQEeCVwK+3qrA==
is-ci@^2.0.0:
version "2.0.0"
- resolved "https://registry.yarnpkg.com/is-ci/-/is-ci-2.0.0.tgz#6bc6334181810e04b5c22b3d589fdca55026404c"
+ resolved "https://registry.npmjs.org/is-ci/-/is-ci-2.0.0.tgz"
integrity sha512-YfJT7rkpQB0updsdHLGWrvhBJfcfzNNawYDNIyQXJz0IViGf75O8EBPKSdvw2rF+LGCsX4FZ8tcr3b19LcZq4w==
dependencies:
ci-info "^2.0.0"
+is-core-module@^2.16.0:
+ version "2.16.1"
+ resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.16.1.tgz#2a98801a849f43e2add644fbb6bc6229b19a4ef4"
+ integrity sha512-UfoeMA6fIJ8wTYFEUjelnaGI67v6+N7qXJEvQuIGa99l4xsCruSYOVSQ0uPANn4dAzm8lkYPaKLrrijLq7x23w==
+ dependencies:
+ hasown "^2.0.2"
+
is-data-descriptor@^0.1.4:
version "0.1.4"
- resolved "https://registry.yarnpkg.com/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz#0b5ee648388e2c860282e793f1856fec3f301b56"
+ resolved "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz"
integrity sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=
dependencies:
kind-of "^3.0.2"
is-data-descriptor@^1.0.0:
version "1.0.0"
- resolved "https://registry.yarnpkg.com/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz#d84876321d0e7add03990406abbbbd36ba9268c7"
+ resolved "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz"
integrity sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==
dependencies:
kind-of "^6.0.0"
is-date-object@^1.0.1:
version "1.0.2"
- resolved "https://registry.yarnpkg.com/is-date-object/-/is-date-object-1.0.2.tgz#bda736f2cd8fd06d32844e7743bfa7494c3bfd7e"
+ resolved "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.2.tgz"
integrity sha512-USlDT524woQ08aoZFzh3/Z6ch9Y/EWXEHQ/AaRN0SkKq4t2Jw2R2339tSXmwuVoY7LLlBCbOIlx2myP/L5zk0g==
is-descriptor@^0.1.0:
version "0.1.6"
- resolved "https://registry.yarnpkg.com/is-descriptor/-/is-descriptor-0.1.6.tgz#366d8240dde487ca51823b1ab9f07a10a78251ca"
+ resolved "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz"
integrity sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==
dependencies:
is-accessor-descriptor "^0.1.6"
@@ -3478,7 +5408,7 @@ is-descriptor@^0.1.0:
is-descriptor@^1.0.0, is-descriptor@^1.0.2:
version "1.0.2"
- resolved "https://registry.yarnpkg.com/is-descriptor/-/is-descriptor-1.0.2.tgz#3b159746a66604b04f8c81524ba365c5f14d86ec"
+ resolved "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz"
integrity sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==
dependencies:
is-accessor-descriptor "^1.0.0"
@@ -3487,179 +5417,276 @@ is-descriptor@^1.0.0, is-descriptor@^1.0.2:
is-directory@^0.3.1:
version "0.3.1"
- resolved "https://registry.yarnpkg.com/is-directory/-/is-directory-0.3.1.tgz#61339b6f2475fc772fd9c9d83f5c8575dc154ae1"
+ resolved "https://registry.npmjs.org/is-directory/-/is-directory-0.3.1.tgz"
integrity sha1-YTObbyR1/Hcv2cnYP1yFddwVSuE=
is-extendable@^0.1.0, is-extendable@^0.1.1:
version "0.1.1"
- resolved "https://registry.yarnpkg.com/is-extendable/-/is-extendable-0.1.1.tgz#62b110e289a471418e3ec36a617d472e301dfc89"
+ resolved "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz"
integrity sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=
is-extendable@^1.0.1:
version "1.0.1"
- resolved "https://registry.yarnpkg.com/is-extendable/-/is-extendable-1.0.1.tgz#a7470f9e426733d81bd81e1155264e3a3507cab4"
+ resolved "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz"
integrity sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==
dependencies:
is-plain-object "^2.0.4"
is-extglob@^2.1.0, is-extglob@^2.1.1:
version "2.1.1"
- resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2"
+ resolved "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz"
integrity sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=
is-finite@^1.0.0:
version "1.1.0"
- resolved "https://registry.yarnpkg.com/is-finite/-/is-finite-1.1.0.tgz#904135c77fb42c0641d6aa1bcdbc4daa8da082f3"
+ resolved "https://registry.npmjs.org/is-finite/-/is-finite-1.1.0.tgz"
integrity sha512-cdyMtqX/BOqqNBBiKlIVkytNHm49MtMlYyn1zxzvJKWmFMlGzm+ry5BBfYyeY9YmNKbRSo/o7OX9w9ale0wg3w==
is-fullwidth-code-point@^1.0.0:
version "1.0.0"
- resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz#ef9e31386f031a7f0d643af82fde50c457ef00cb"
+ resolved "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz"
integrity sha1-754xOG8DGn8NZDr4L95QxFfvAMs=
dependencies:
number-is-nan "^1.0.0"
is-fullwidth-code-point@^2.0.0:
version "2.0.0"
- resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz#a3b30a5c4f199183167aaab93beefae3ddfb654f"
+ resolved "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz"
integrity sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=
+is-fullwidth-code-point@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz#f116f8064fe90b3f7844a38997c0b75051269f1d"
+ integrity sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==
+
is-glob@^3.1.0:
version "3.1.0"
- resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-3.1.0.tgz#7ba5ae24217804ac70707b96922567486cc3e84a"
+ resolved "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz"
integrity sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=
dependencies:
is-extglob "^2.1.0"
-is-glob@^4.0.0, is-glob@^4.0.1, is-glob@~4.0.1:
- version "4.0.1"
- resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.1.tgz#7567dbe9f2f5e2467bc77ab83c4a29482407a5dc"
- integrity sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg==
+is-glob@^4.0.0, is-glob@^4.0.1, is-glob@^4.0.3:
+ version "4.0.3"
+ resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.3.tgz#64f61e42cbbb2eec2071a9dac0b28ba1e65d5084"
+ integrity sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==
dependencies:
is-extglob "^2.1.1"
+is-module@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/is-module/-/is-module-1.0.0.tgz#3258fb69f78c14d5b815d664336b4cffb6441591"
+ integrity sha512-51ypPSPCoTEIN9dy5Oy+h4pShgJmPCygKfyRCISBI+JoWT/2oJvK8QPxmwv7b/p239jXrm9M1mlQbyKJ5A152g==
+
is-negative-zero@^2.0.0:
version "2.0.0"
- resolved "https://registry.yarnpkg.com/is-negative-zero/-/is-negative-zero-2.0.0.tgz#9553b121b0fac28869da9ed459e20c7543788461"
+ resolved "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.0.tgz"
integrity sha1-lVOxIbD6wohp2p7UWeIMdUN4hGE=
is-number@^3.0.0:
version "3.0.0"
- resolved "https://registry.yarnpkg.com/is-number/-/is-number-3.0.0.tgz#24fd6201a4782cf50561c810276afc7d12d71195"
+ resolved "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz"
integrity sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=
dependencies:
kind-of "^3.0.2"
-is-number@^7.0.0:
- version "7.0.0"
- resolved "https://registry.yarnpkg.com/is-number/-/is-number-7.0.0.tgz#7535345b896734d5f80c4d06c50955527a14f12b"
- integrity sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==
-
is-obj@^1.0.0:
version "1.0.1"
- resolved "https://registry.yarnpkg.com/is-obj/-/is-obj-1.0.1.tgz#3e4729ac1f5fde025cd7d83a896dab9f4f67db0f"
+ resolved "https://registry.npmjs.org/is-obj/-/is-obj-1.0.1.tgz"
integrity sha1-PkcprB9f3gJc19g6iW2rn09n2w8=
is-obj@^2.0.0:
version "2.0.0"
- resolved "https://registry.yarnpkg.com/is-obj/-/is-obj-2.0.0.tgz#473fb05d973705e3fd9620545018ca8e22ef4982"
+ resolved "https://registry.npmjs.org/is-obj/-/is-obj-2.0.0.tgz"
integrity sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w==
+is-path-inside@^3.0.3:
+ version "3.0.3"
+ resolved "https://registry.yarnpkg.com/is-path-inside/-/is-path-inside-3.0.3.tgz#d231362e53a07ff2b0e0ea7fed049161ffd16283"
+ integrity sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==
+
is-plain-obj@^1.0.0, is-plain-obj@^1.1.0:
version "1.1.0"
- resolved "https://registry.yarnpkg.com/is-plain-obj/-/is-plain-obj-1.1.0.tgz#71a50c8429dfca773c92a390a4a03b39fcd51d3e"
+ resolved "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-1.1.0.tgz"
integrity sha1-caUMhCnfync8kqOQpKA7OfzVHT4=
+is-plain-obj@^2.1.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/is-plain-obj/-/is-plain-obj-2.1.0.tgz#45e42e37fccf1f40da8e5f76ee21515840c09287"
+ integrity sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==
+
is-plain-object@^2.0.3, is-plain-object@^2.0.4:
version "2.0.4"
- resolved "https://registry.yarnpkg.com/is-plain-object/-/is-plain-object-2.0.4.tgz#2c163b3fafb1b606d9d17928f05c2a1c38e07677"
+ resolved "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz"
integrity sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==
dependencies:
isobject "^3.0.1"
is-plain-object@^5.0.0:
version "5.0.0"
- resolved "https://registry.yarnpkg.com/is-plain-object/-/is-plain-object-5.0.0.tgz#4427f50ab3429e9025ea7d52e9043a9ef4159344"
+ resolved "https://registry.npmjs.org/is-plain-object/-/is-plain-object-5.0.0.tgz"
integrity sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q==
+is-reference@1.2.1:
+ version "1.2.1"
+ resolved "https://registry.yarnpkg.com/is-reference/-/is-reference-1.2.1.tgz#8b2dac0b371f4bc994fdeaba9eb542d03002d0b7"
+ integrity sha512-U82MsXXiFIrjCK4otLT+o2NA2Cd2g5MLoOVXUZjIOhLurrRxpEXzI8O0KZHr3IjLvlAH1kTPYSuqer5T9ZVBKQ==
+ dependencies:
+ "@types/estree" "*"
+
is-regex@^1.1.1:
version "1.1.1"
- resolved "https://registry.yarnpkg.com/is-regex/-/is-regex-1.1.1.tgz#c6f98aacc546f6cec5468a07b7b153ab564a57b9"
+ resolved "https://registry.npmjs.org/is-regex/-/is-regex-1.1.1.tgz"
integrity sha512-1+QkEcxiLlB7VEyFtyBg94e08OAsvq7FUBgApTq/w2ymCLyKJgDPsybBENVtA7XCQEgEXxKPonG+mvYRxh/LIg==
dependencies:
has-symbols "^1.0.1"
is-ssh@^1.3.0:
version "1.3.2"
- resolved "https://registry.yarnpkg.com/is-ssh/-/is-ssh-1.3.2.tgz#a4b82ab63d73976fd8263cceee27f99a88bdae2b"
+ resolved "https://registry.npmjs.org/is-ssh/-/is-ssh-1.3.2.tgz"
integrity sha512-elEw0/0c2UscLrNG+OAorbP539E3rhliKPg+hDMWN9VwrDXfYK+4PBEykDPfxlYYtQvl84TascnQyobfQLHEhQ==
dependencies:
protocols "^1.1.0"
is-stream@^1.1.0:
version "1.1.0"
- resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-1.1.0.tgz#12d4a3dd4e68e0b79ceb8dbc84173ae80d91ca44"
+ resolved "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz"
integrity sha1-EtSj3U5o4Lec6428hBc66A2RykQ=
+is-stream@^2.0.0:
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-2.0.1.tgz#fac1e3d53b97ad5a9d0ae9cef2389f5810a5c077"
+ integrity sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==
+
is-symbol@^1.0.2:
version "1.0.3"
- resolved "https://registry.yarnpkg.com/is-symbol/-/is-symbol-1.0.3.tgz#38e1014b9e6329be0de9d24a414fd7441ec61937"
+ resolved "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.3.tgz"
integrity sha512-OwijhaRSgqvhm/0ZdAcXNZt9lYdKFpcRDT5ULUuYXPoT794UNOdU+gpT6Rzo7b4V2HUl/op6GqY894AZwv9faQ==
dependencies:
has-symbols "^1.0.1"
is-text-path@^1.0.1:
version "1.0.1"
- resolved "https://registry.yarnpkg.com/is-text-path/-/is-text-path-1.0.1.tgz#4e1aa0fb51bfbcb3e92688001397202c1775b66e"
+ resolved "https://registry.npmjs.org/is-text-path/-/is-text-path-1.0.1.tgz"
integrity sha1-Thqg+1G/vLPpJogAE5cgLBd1tm4=
dependencies:
text-extensions "^1.0.0"
-is-typedarray@~1.0.0:
+is-typedarray@^1.0.0, is-typedarray@~1.0.0:
version "1.0.0"
- resolved "https://registry.yarnpkg.com/is-typedarray/-/is-typedarray-1.0.0.tgz#e479c80858df0c1b11ddda6940f96011fcda4a9a"
+ resolved "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz"
integrity sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=
+is-unicode-supported@^0.1.0:
+ version "0.1.0"
+ resolved "https://registry.yarnpkg.com/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz#3f26c76a809593b52bfa2ecb5710ed2779b522a7"
+ integrity sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==
+
is-utf8@^0.2.0:
version "0.2.1"
- resolved "https://registry.yarnpkg.com/is-utf8/-/is-utf8-0.2.1.tgz#4b0da1442104d1b336340e80797e865cf39f7d72"
+ resolved "https://registry.npmjs.org/is-utf8/-/is-utf8-0.2.1.tgz"
integrity sha1-Sw2hRCEE0bM2NA6AeX6GXPOffXI=
is-windows@^1.0.0, is-windows@^1.0.2:
version "1.0.2"
- resolved "https://registry.yarnpkg.com/is-windows/-/is-windows-1.0.2.tgz#d1850eb9791ecd18e6182ce12a30f396634bb19d"
+ resolved "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz"
integrity sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==
isarray@1.0.0, isarray@~1.0.0:
version "1.0.0"
- resolved "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11"
+ resolved "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz"
integrity sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=
isexe@^2.0.0:
version "2.0.0"
- resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10"
+ resolved "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz"
integrity sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=
+isexe@^3.1.1:
+ version "3.1.1"
+ resolved "https://registry.yarnpkg.com/isexe/-/isexe-3.1.1.tgz#4a407e2bd78ddfb14bea0c27c6f7072dde775f0d"
+ integrity sha512-LpB/54B+/2J5hqQ7imZHfdU31OlgQqx7ZicVlkm9kzg9/w8GKLEcFfJl/t7DCEDueOyBAD6zCCwTO6Fzs0NoEQ==
+
isobject@^2.0.0:
version "2.1.0"
- resolved "https://registry.yarnpkg.com/isobject/-/isobject-2.1.0.tgz#f065561096a3f1da2ef46272f815c840d87e0c89"
+ resolved "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz"
integrity sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=
dependencies:
isarray "1.0.0"
isobject@^3.0.0, isobject@^3.0.1:
version "3.0.1"
- resolved "https://registry.yarnpkg.com/isobject/-/isobject-3.0.1.tgz#4e431e92b11a9731636aa1f9c8d1ccbcfdab78df"
+ resolved "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz"
integrity sha1-TkMekrEalzFjaqH5yNHMvP2reN8=
isstream@~0.1.2:
version "0.1.2"
- resolved "https://registry.yarnpkg.com/isstream/-/isstream-0.1.2.tgz#47e63f7af55afa6f92e1500e690eb8b8529c099a"
+ resolved "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz"
integrity sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=
+istanbul-lib-coverage@^3.0.0, istanbul-lib-coverage@^3.2.0:
+ version "3.2.2"
+ resolved "https://registry.yarnpkg.com/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.2.tgz#2d166c4b0644d43a39f04bf6c2edd1e585f31756"
+ integrity sha512-O8dpsF+r0WV/8MNRKfnmrtCWhuKjxrq2w+jpzBL5UZKTi2LeVWnWOmWRxFlesJONmc+wLAGvKQZEOanko0LFTg==
+
+istanbul-lib-hook@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/istanbul-lib-hook/-/istanbul-lib-hook-3.0.0.tgz#8f84c9434888cc6b1d0a9d7092a76d239ebf0cc6"
+ integrity sha512-Pt/uge1Q9s+5VAZ+pCo16TYMWPBIl+oaNIjgLQxcX0itS6ueeaA+pEfThZpH8WxhFgCiEb8sAJY6MdUKgiIWaQ==
+ dependencies:
+ append-transform "^2.0.0"
+
+istanbul-lib-instrument@^4.0.0:
+ version "4.0.3"
+ resolved "https://registry.yarnpkg.com/istanbul-lib-instrument/-/istanbul-lib-instrument-4.0.3.tgz#873c6fff897450118222774696a3f28902d77c1d"
+ integrity sha512-BXgQl9kf4WTCPCCpmFGoJkz/+uhvm7h7PFKUYxh7qarQd3ER33vHG//qaE8eN25l07YqZPpHXU9I09l/RD5aGQ==
+ dependencies:
+ "@babel/core" "^7.7.5"
+ "@istanbuljs/schema" "^0.1.2"
+ istanbul-lib-coverage "^3.0.0"
+ semver "^6.3.0"
+
+istanbul-lib-processinfo@^2.0.2:
+ version "2.0.3"
+ resolved "https://registry.yarnpkg.com/istanbul-lib-processinfo/-/istanbul-lib-processinfo-2.0.3.tgz#366d454cd0dcb7eb6e0e419378e60072c8626169"
+ integrity sha512-NkwHbo3E00oybX6NGJi6ar0B29vxyvNwoC7eJ4G4Yq28UfY758Hgn/heV8VRFhevPED4LXfFz0DQ8z/0kw9zMg==
+ dependencies:
+ archy "^1.0.0"
+ cross-spawn "^7.0.3"
+ istanbul-lib-coverage "^3.2.0"
+ p-map "^3.0.0"
+ rimraf "^3.0.0"
+ uuid "^8.3.2"
+
+istanbul-lib-report@^3.0.0:
+ version "3.0.1"
+ resolved "https://registry.yarnpkg.com/istanbul-lib-report/-/istanbul-lib-report-3.0.1.tgz#908305bac9a5bd175ac6a74489eafd0fc2445a7d"
+ integrity sha512-GCfE1mtsHGOELCU8e/Z7YWzpmybrx/+dSTfLrvY8qRmaY6zXTKWn6WQIjaAFw069icm6GVMNkgu0NzI4iPZUNw==
+ dependencies:
+ istanbul-lib-coverage "^3.0.0"
+ make-dir "^4.0.0"
+ supports-color "^7.1.0"
+
+istanbul-lib-source-maps@^4.0.0:
+ version "4.0.1"
+ resolved "https://registry.yarnpkg.com/istanbul-lib-source-maps/-/istanbul-lib-source-maps-4.0.1.tgz#895f3a709fcfba34c6de5a42939022f3e4358551"
+ integrity sha512-n3s8EwkdFIJCG3BPKBYvskgXGoy88ARzvegkitk60NxRdwltLOTaH7CUiMRXvwYorl0Q712iEjcWB+fK/MrWVw==
+ dependencies:
+ debug "^4.1.1"
+ istanbul-lib-coverage "^3.0.0"
+ source-map "^0.6.1"
+
+istanbul-reports@^3.0.2:
+ version "3.1.7"
+ resolved "https://registry.yarnpkg.com/istanbul-reports/-/istanbul-reports-3.1.7.tgz#daed12b9e1dca518e15c056e1e537e741280fa0b"
+ integrity sha512-BewmUXImeuRk2YY0PVbxgKAysvhRPUQE0h5QRM++nVWyubKGV0l8qQ5op8+B2DOmwSe63Jivj0BjkPQVf8fP5g==
+ dependencies:
+ html-escaper "^2.0.0"
+ istanbul-lib-report "^3.0.0"
+
istanbul@^0.4.5:
version "0.4.5"
- resolved "https://registry.yarnpkg.com/istanbul/-/istanbul-0.4.5.tgz#65c7d73d4c4da84d4f3ac310b918fb0b8033733b"
+ resolved "https://registry.npmjs.org/istanbul/-/istanbul-0.4.5.tgz"
integrity sha1-ZcfXPUxNqE1POsMQuRj7C4Azczs=
dependencies:
abbrev "1.0.x"
@@ -3677,82 +5704,126 @@ istanbul@^0.4.5:
which "^1.1.1"
wordwrap "^1.0.0"
+jackspeak@^3.1.2:
+ version "3.1.2"
+ resolved "https://registry.yarnpkg.com/jackspeak/-/jackspeak-3.1.2.tgz#eada67ea949c6b71de50f1b09c92a961897b90ab"
+ integrity sha512-kWmLKn2tRtfYMF/BakihVVRzBKOxz4gJMiL2Rj91WnAB5TPZumSH99R/Yf1qE1u4uRimvCSJfm6hnxohXeEXjQ==
+ dependencies:
+ "@isaacs/cliui" "^8.0.2"
+ optionalDependencies:
+ "@pkgjs/parseargs" "^0.11.0"
+
+jest-worker@^27.4.5:
+ version "27.5.1"
+ resolved "https://registry.yarnpkg.com/jest-worker/-/jest-worker-27.5.1.tgz#8d146f0900e8973b106b6f73cc1e9a8cb86f8db0"
+ integrity sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg==
+ dependencies:
+ "@types/node" "*"
+ merge-stream "^2.0.0"
+ supports-color "^8.0.0"
+
js-tokens@^4.0.0:
version "4.0.0"
- resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499"
+ resolved "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz"
integrity sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==
-js-yaml@3.13.1:
- version "3.13.1"
- resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.13.1.tgz#aff151b30bfdfa8e49e05da22e7415e9dfa37847"
- integrity sha512-YfbcO7jXDdyj0DGxYVSlSeQNHbD7XPWvrVWeVUujrQEoZzWJIRrCPoyk6kL6IAjAG2IolMK4T0hNUe0HOUs5Jw==
- dependencies:
- argparse "^1.0.7"
- esprima "^4.0.0"
-
js-yaml@3.x, js-yaml@^3.13.1:
version "3.14.0"
- resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.14.0.tgz#a7a34170f26a21bb162424d8adacb4113a69e482"
+ resolved "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.0.tgz"
integrity sha512-/4IbIeHcD9VMHFqDR/gQ7EdZdLimOvW2DdcxFjdyyZ9NsbS+ccrXqVWDtab/lRl5AlUqmpBx8EhPaWR+OtY17A==
dependencies:
argparse "^1.0.7"
esprima "^4.0.0"
+js-yaml@^4.1.0:
+ version "4.1.0"
+ resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-4.1.0.tgz#c1fb65f8f5017901cdd2c951864ba18458a10602"
+ integrity sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==
+ dependencies:
+ argparse "^2.0.1"
+
+js-yaml@^4.1.1:
+ version "4.1.1"
+ resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-4.1.1.tgz#854c292467705b699476e1a2decc0c8a3458806b"
+ integrity sha512-qQKT4zQxXl8lLwBtHMWwaTcGfFOZviOJet3Oy/xmGk2gZH677CJM9EvtfdSkgWcATZhj/55JZ0rmy3myCT5lsA==
+ dependencies:
+ argparse "^2.0.1"
+
+jsbn@1.1.0:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/jsbn/-/jsbn-1.1.0.tgz#b01307cb29b618a1ed26ec79e911f803c4da0040"
+ integrity sha512-4bYVV3aAMtDTTu4+xsDYa6sy9GyJ69/amsu9sYF2zqjiEoZA5xJi3BrfX3uY+/IekIu7MwdObdbDWpoZdBv3/A==
+
jsbn@~0.1.0:
version "0.1.1"
- resolved "https://registry.yarnpkg.com/jsbn/-/jsbn-0.1.1.tgz#a5e654c2e5a2deb5f201d96cefbca80c0ef2f513"
+ resolved "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz"
integrity sha1-peZUwuWi3rXyAdls77yoDA7y9RM=
+jsesc@^3.0.2:
+ version "3.1.0"
+ resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-3.1.0.tgz#74d335a234f67ed19907fdadfac7ccf9d409825d"
+ integrity sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA==
+
+json-buffer@3.0.1:
+ version "3.0.1"
+ resolved "https://registry.yarnpkg.com/json-buffer/-/json-buffer-3.0.1.tgz#9338802a30d3b6605fbe0613e094008ca8c05a13"
+ integrity sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==
+
json-parse-better-errors@^1.0.0, json-parse-better-errors@^1.0.1:
version "1.0.2"
- resolved "https://registry.yarnpkg.com/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz#bb867cfb3450e69107c131d1c514bab3dc8bcaa9"
+ resolved "https://registry.npmjs.org/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz"
integrity sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==
-json-parse-even-better-errors@^2.3.0:
+json-parse-even-better-errors@^2.3.0, json-parse-even-better-errors@^2.3.1:
version "2.3.1"
- resolved "https://registry.yarnpkg.com/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz#7c47805a94319928e05777405dc12e1f7a4ee02d"
+ resolved "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz"
integrity sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==
json-schema-traverse@^0.4.1:
version "0.4.1"
- resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz#69f6a87d9513ab8bb8fe63bdb0979c448e684660"
+ resolved "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz"
integrity sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==
+json-schema-traverse@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz#ae7bcb3656ab77a73ba5c49bf654f38e6b6860e2"
+ integrity sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==
+
json-schema@0.2.3:
version "0.2.3"
- resolved "https://registry.yarnpkg.com/json-schema/-/json-schema-0.2.3.tgz#b480c892e59a2f05954ce727bd3f2a4e882f9e13"
+ resolved "https://registry.npmjs.org/json-schema/-/json-schema-0.2.3.tgz"
integrity sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM=
json-stable-stringify-without-jsonify@^1.0.1:
version "1.0.1"
- resolved "https://registry.yarnpkg.com/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz#9db7b59496ad3f3cfef30a75142d2d930ad72651"
+ resolved "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz"
integrity sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE=
json-stringify-safe@^5.0.1, json-stringify-safe@~5.0.1:
version "5.0.1"
- resolved "https://registry.yarnpkg.com/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz#1296a2d58fd45f19a0f6ce01d65701e2c735b6eb"
+ resolved "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz"
integrity sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=
+json5@^2.2.3:
+ version "2.2.3"
+ resolved "https://registry.yarnpkg.com/json5/-/json5-2.2.3.tgz#78cd6f1a19bdc12b73db5ad0c61efd66c1e29283"
+ integrity sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==
+
jsonfile@^4.0.0:
version "4.0.0"
- resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-4.0.0.tgz#8771aae0799b64076b76640fca058f9c10e33ecb"
+ resolved "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz"
integrity sha1-h3Gq4HmbZAdrdmQPygWPnBDjPss=
optionalDependencies:
graceful-fs "^4.1.6"
-jsonparse@0.0.5:
- version "0.0.5"
- resolved "https://registry.yarnpkg.com/jsonparse/-/jsonparse-0.0.5.tgz#330542ad3f0a654665b778f3eb2d9a9fa507ac64"
- integrity sha1-MwVCrT8KZUZlt3jz6y2an6UHrGQ=
-
jsonparse@^1.2.0:
version "1.3.1"
- resolved "https://registry.yarnpkg.com/jsonparse/-/jsonparse-1.3.1.tgz#3f4dae4a91fac315f71062f8521cc239f1366280"
+ resolved "https://registry.npmjs.org/jsonparse/-/jsonparse-1.3.1.tgz"
integrity sha1-P02uSpH6wxX3EGL4UhzCOfE2YoA=
jsprim@^1.2.2:
version "1.4.1"
- resolved "https://registry.yarnpkg.com/jsprim/-/jsprim-1.4.1.tgz#313e66bc1e5cc06e438bc1b7499c2e5c56acb6a2"
+ resolved "https://registry.npmjs.org/jsprim/-/jsprim-1.4.1.tgz"
integrity sha1-MT5mvB5cwG5Di8G3SZwuXFastqI=
dependencies:
assert-plus "1.0.0"
@@ -3760,38 +5831,45 @@ jsprim@^1.2.2:
json-schema "0.2.3"
verror "1.10.0"
+keyv@^4.5.4:
+ version "4.5.4"
+ resolved "https://registry.yarnpkg.com/keyv/-/keyv-4.5.4.tgz#a879a99e29452f942439f2a405e3af8b31d4de93"
+ integrity sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==
+ dependencies:
+ json-buffer "3.0.1"
+
kind-of@^3.0.2, kind-of@^3.0.3, kind-of@^3.2.0:
version "3.2.2"
- resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-3.2.2.tgz#31ea21a734bab9bbb0f32466d893aea51e4a3c64"
+ resolved "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz"
integrity sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=
dependencies:
is-buffer "^1.1.5"
kind-of@^4.0.0:
version "4.0.0"
- resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-4.0.0.tgz#20813df3d712928b207378691a45066fae72dd57"
+ resolved "https://registry.npmjs.org/kind-of/-/kind-of-4.0.0.tgz"
integrity sha1-IIE989cSkosgc3hpGkUGb65y3Vc=
dependencies:
is-buffer "^1.1.5"
kind-of@^5.0.0:
version "5.1.0"
- resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-5.1.0.tgz#729c91e2d857b7a419a1f9aa65685c4c33f5845d"
+ resolved "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz"
integrity sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==
kind-of@^6.0.0, kind-of@^6.0.2, kind-of@^6.0.3:
version "6.0.3"
- resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-6.0.3.tgz#07c05034a6c349fa06e24fa35aa76db4580ce4dd"
+ resolved "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz"
integrity sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==
lcov-parse@^1.0.0:
version "1.0.0"
- resolved "https://registry.yarnpkg.com/lcov-parse/-/lcov-parse-1.0.0.tgz#eb0d46b54111ebc561acb4c408ef9363bdc8f7e0"
+ resolved "https://registry.npmjs.org/lcov-parse/-/lcov-parse-1.0.0.tgz"
integrity sha1-6w1GtUER68VhrLTECO+TY73I9+A=
lerna@^3.19.0:
version "3.22.1"
- resolved "https://registry.yarnpkg.com/lerna/-/lerna-3.22.1.tgz#82027ac3da9c627fd8bf02ccfeff806a98e65b62"
+ resolved "https://registry.npmjs.org/lerna/-/lerna-3.22.1.tgz"
integrity sha512-vk1lfVRFm+UuEFA7wkLKeSF7Iz13W+N/vFd48aW2yuS7Kv0RbNm2/qcDPV863056LMfkRlsEe+QYOw3palj5Lg==
dependencies:
"@lerna/add" "3.21.0"
@@ -3815,7 +5893,7 @@ lerna@^3.19.0:
levn@^0.4.1:
version "0.4.1"
- resolved "https://registry.yarnpkg.com/levn/-/levn-0.4.1.tgz#ae4562c007473b932a6200d403268dd2fffc6ade"
+ resolved "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz"
integrity sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==
dependencies:
prelude-ls "^1.2.1"
@@ -3823,20 +5901,28 @@ levn@^0.4.1:
levn@~0.3.0:
version "0.3.0"
- resolved "https://registry.yarnpkg.com/levn/-/levn-0.3.0.tgz#3b09924edf9f083c0490fdd4c0bc4421e04764ee"
+ resolved "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz"
integrity sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4=
dependencies:
prelude-ls "~1.1.2"
type-check "~0.3.2"
+libpq@^1.8.15:
+ version "1.11.0"
+ resolved "https://registry.yarnpkg.com/libpq/-/libpq-1.11.0.tgz#1baf0920eb51ebe1399de942414e012142dcead8"
+ integrity sha512-mHoPlvMwYDMJV36bS2w3eSdFD4eDSm7P9FsvruUldQxzE23/W6qitT9VU/yD1+g2vpgpDktnk2iEYJyhy1RR5g==
+ dependencies:
+ bindings "1.5.0"
+ nan "~2.26.2"
+
lines-and-columns@^1.1.6:
version "1.1.6"
- resolved "https://registry.yarnpkg.com/lines-and-columns/-/lines-and-columns-1.1.6.tgz#1c00c743b433cd0a4e80758f7b64a57440d9ff00"
+ resolved "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.1.6.tgz"
integrity sha1-HADHQ7QzzQpOgHWPe2SldEDZ/wA=
load-json-file@^1.0.0:
version "1.1.0"
- resolved "https://registry.yarnpkg.com/load-json-file/-/load-json-file-1.1.0.tgz#956905708d58b4bab4c2261b04f59f31c99374c0"
+ resolved "https://registry.npmjs.org/load-json-file/-/load-json-file-1.1.0.tgz"
integrity sha1-lWkFcI1YtLq0wiYbBPWfMcmTdMA=
dependencies:
graceful-fs "^4.1.2"
@@ -3847,7 +5933,7 @@ load-json-file@^1.0.0:
load-json-file@^4.0.0:
version "4.0.0"
- resolved "https://registry.yarnpkg.com/load-json-file/-/load-json-file-4.0.0.tgz#2f5f45ab91e33216234fd53adab668eb4ec0993b"
+ resolved "https://registry.npmjs.org/load-json-file/-/load-json-file-4.0.0.tgz"
integrity sha1-L19Fq5HjMhYjT9U62rZo607AmTs=
dependencies:
graceful-fs "^4.1.2"
@@ -3857,7 +5943,7 @@ load-json-file@^4.0.0:
load-json-file@^5.3.0:
version "5.3.0"
- resolved "https://registry.yarnpkg.com/load-json-file/-/load-json-file-5.3.0.tgz#4d3c1e01fa1c03ea78a60ac7af932c9ce53403f3"
+ resolved "https://registry.npmjs.org/load-json-file/-/load-json-file-5.3.0.tgz"
integrity sha512-cJGP40Jc/VXUsp8/OrnyKyTZ1y6v/dphm3bioS+RrKXjK2BB6wHUd6JptZEFDGgGahMT+InnZO5i1Ei9mpC8Bw==
dependencies:
graceful-fs "^4.1.15"
@@ -3866,9 +5952,14 @@ load-json-file@^5.3.0:
strip-bom "^3.0.0"
type-fest "^0.3.0"
+loader-runner@^4.2.0:
+ version "4.3.0"
+ resolved "https://registry.yarnpkg.com/loader-runner/-/loader-runner-4.3.0.tgz#c1b4a163b99f614830353b16755e7149ac2314e1"
+ integrity sha512-3R/1M+yS3j5ou80Me59j7F9IMs4PXs3VqRrm0TU3AbKPxlmpoY1TNscJV/oGJXo8qCatFGTfDbY6W6ipGOYXfg==
+
locate-path@^2.0.0:
version "2.0.0"
- resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-2.0.0.tgz#2b568b265eec944c6d9c0de9c3dbbbca0354cd8e"
+ resolved "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz"
integrity sha1-K1aLJl7slExtnA3pw9u7ygNUzY4=
dependencies:
p-locate "^2.0.0"
@@ -3876,7 +5967,7 @@ locate-path@^2.0.0:
locate-path@^3.0.0:
version "3.0.0"
- resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-3.0.0.tgz#dbec3b3ab759758071b58fe59fc41871af21400e"
+ resolved "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz"
integrity sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==
dependencies:
p-locate "^3.0.0"
@@ -3884,44 +5975,56 @@ locate-path@^3.0.0:
locate-path@^5.0.0:
version "5.0.0"
- resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-5.0.0.tgz#1afba396afd676a6d42504d0a67a3a7eb9f62aa0"
+ resolved "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz"
integrity sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==
dependencies:
p-locate "^4.1.0"
+locate-path@^6.0.0:
+ version "6.0.0"
+ resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-6.0.0.tgz#55321eb309febbc59c4801d931a72452a681d286"
+ integrity sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==
+ dependencies:
+ p-locate "^5.0.0"
+
lodash._reinterpolate@^3.0.0:
version "3.0.0"
- resolved "https://registry.yarnpkg.com/lodash._reinterpolate/-/lodash._reinterpolate-3.0.0.tgz#0ccf2d89166af03b3663c796538b75ac6e114d9d"
+ resolved "https://registry.npmjs.org/lodash._reinterpolate/-/lodash._reinterpolate-3.0.0.tgz"
integrity sha1-DM8tiRZq8Ds2Y8eWU4t1rG4RTZ0=
lodash.clonedeep@^4.5.0:
version "4.5.0"
- resolved "https://registry.yarnpkg.com/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz#e23f3f9c4f8fbdde872529c1071857a086e5ccef"
+ resolved "https://registry.npmjs.org/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz"
integrity sha1-4j8/nE+Pvd6HJSnBBxhXoIblzO8=
+lodash.flattendeep@^4.4.0:
+ version "4.4.0"
+ resolved "https://registry.yarnpkg.com/lodash.flattendeep/-/lodash.flattendeep-4.4.0.tgz#fb030917f86a3134e5bc9bec0d69e0013ddfedb2"
+ integrity sha512-uHaJFihxmJcEX3kT4I23ABqKKalJ/zDrDg0lsFtc1h+3uw49SIJ5beyhx5ExVRti3AvKoOJngIj7xz3oylPdWQ==
+
lodash.get@^4.4.2:
version "4.4.2"
- resolved "https://registry.yarnpkg.com/lodash.get/-/lodash.get-4.4.2.tgz#2d177f652fa31e939b4438d5341499dfa3825e99"
+ resolved "https://registry.npmjs.org/lodash.get/-/lodash.get-4.4.2.tgz"
integrity sha1-LRd/ZS+jHpObRDjVNBSZ36OCXpk=
lodash.ismatch@^4.4.0:
version "4.4.0"
- resolved "https://registry.yarnpkg.com/lodash.ismatch/-/lodash.ismatch-4.4.0.tgz#756cb5150ca3ba6f11085a78849645f188f85f37"
+ resolved "https://registry.npmjs.org/lodash.ismatch/-/lodash.ismatch-4.4.0.tgz"
integrity sha1-dWy1FQyjum8RCFp4hJZF8Yj4Xzc=
lodash.set@^4.3.2:
version "4.3.2"
- resolved "https://registry.yarnpkg.com/lodash.set/-/lodash.set-4.3.2.tgz#d8757b1da807dde24816b0d6a84bea1a76230b23"
+ resolved "https://registry.npmjs.org/lodash.set/-/lodash.set-4.3.2.tgz"
integrity sha1-2HV7HagH3eJIFrDWqEvqGnYjCyM=
lodash.sortby@^4.7.0:
version "4.7.0"
- resolved "https://registry.yarnpkg.com/lodash.sortby/-/lodash.sortby-4.7.0.tgz#edd14c824e2cc9c1e0b0a1b42bb5210516a42438"
+ resolved "https://registry.npmjs.org/lodash.sortby/-/lodash.sortby-4.7.0.tgz"
integrity sha1-7dFMgk4sycHgsKG0K7UhBRakJDg=
lodash.template@^4.0.2, lodash.template@^4.5.0:
version "4.5.0"
- resolved "https://registry.yarnpkg.com/lodash.template/-/lodash.template-4.5.0.tgz#f976195cf3f347d0d5f52483569fe8031ccce8ab"
+ resolved "https://registry.npmjs.org/lodash.template/-/lodash.template-4.5.0.tgz"
integrity sha512-84vYFxIkmidUiFxidA/KjjH9pAycqW+h980j7Fuz5qxRtO9pgB7MDFTdys1N7A5mcucRiDyEq4fusljItR1T/A==
dependencies:
lodash._reinterpolate "^3.0.0"
@@ -3929,36 +6032,37 @@ lodash.template@^4.0.2, lodash.template@^4.5.0:
lodash.templatesettings@^4.0.0:
version "4.2.0"
- resolved "https://registry.yarnpkg.com/lodash.templatesettings/-/lodash.templatesettings-4.2.0.tgz#e481310f049d3cf6d47e912ad09313b154f0fb33"
+ resolved "https://registry.npmjs.org/lodash.templatesettings/-/lodash.templatesettings-4.2.0.tgz"
integrity sha512-stgLz+i3Aa9mZgnjr/O+v9ruKZsPsndy7qPZOchbqk2cnTU1ZaldKK+v7m54WoKIyxiuMZTKT2H81F8BeAc3ZQ==
dependencies:
lodash._reinterpolate "^3.0.0"
lodash.uniq@^4.5.0:
version "4.5.0"
- resolved "https://registry.yarnpkg.com/lodash.uniq/-/lodash.uniq-4.5.0.tgz#d0225373aeb652adc1bc82e4945339a842754773"
+ resolved "https://registry.npmjs.org/lodash.uniq/-/lodash.uniq-4.5.0.tgz"
integrity sha1-0CJTc662Uq3BvILklFM5qEJ1R3M=
-lodash@^4.17.11, lodash@^4.17.12, lodash@^4.17.14, lodash@^4.17.15, lodash@^4.17.19, lodash@^4.2.1:
+lodash@^4.17.11, lodash@^4.17.12, lodash@^4.17.14, lodash@^4.17.15, lodash@^4.17.21, lodash@^4.2.1:
version "4.17.21"
- resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c"
+ resolved "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz"
integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==
log-driver@^1.2.7:
version "1.2.7"
- resolved "https://registry.yarnpkg.com/log-driver/-/log-driver-1.2.7.tgz#63b95021f0702fedfa2c9bb0a24e7797d71871d8"
+ resolved "https://registry.npmjs.org/log-driver/-/log-driver-1.2.7.tgz"
integrity sha512-U7KCmLdqsGHBLeWqYlFA0V0Sl6P08EE1ZrmA9cxjUE0WVqT9qnyVDPz1kzpFEP0jdJuFnasWIfSd7fsaNXkpbg==
-log-symbols@3.0.0:
- version "3.0.0"
- resolved "https://registry.yarnpkg.com/log-symbols/-/log-symbols-3.0.0.tgz#f3a08516a5dea893336a7dee14d18a1cfdab77c4"
- integrity sha512-dSkNGuI7iG3mfvDzUuYZyvk5dD9ocYCYzNU6CYDE6+Xqd+gwme6Z00NS3dUh8mq/73HaEtT7m6W+yUPtU6BZnQ==
+log-symbols@^4.1.0:
+ version "4.1.0"
+ resolved "https://registry.yarnpkg.com/log-symbols/-/log-symbols-4.1.0.tgz#3fbdbb95b4683ac9fc785111e792e558d4abd503"
+ integrity sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==
dependencies:
- chalk "^2.4.2"
+ chalk "^4.1.0"
+ is-unicode-supported "^0.1.0"
loud-rejection@^1.0.0:
version "1.6.0"
- resolved "https://registry.yarnpkg.com/loud-rejection/-/loud-rejection-1.6.0.tgz#5b46f80147edee578870f086d04821cf998e551f"
+ resolved "https://registry.npmjs.org/loud-rejection/-/loud-rejection-1.6.0.tgz"
integrity sha1-W0b4AUft7leIcPCG0Eghz5mOVR8=
dependencies:
currently-unhandled "^0.4.1"
@@ -3966,58 +6070,106 @@ loud-rejection@^1.0.0:
loupe@^2.3.1:
version "2.3.4"
- resolved "https://registry.yarnpkg.com/loupe/-/loupe-2.3.4.tgz#7e0b9bffc76f148f9be769cb1321d3dcf3cb25f3"
+ resolved "https://registry.npmjs.org/loupe/-/loupe-2.3.4.tgz"
integrity sha512-OvKfgCC2Ndby6aSTREl5aCCPTNIzlDfQZvZxNUrBrihDhL3xcrYegTblhmEiCrg2kKQz4XsFIaemE5BF4ybSaQ==
dependencies:
get-func-name "^2.0.0"
+loupe@^3.1.0, loupe@^3.1.3:
+ version "3.1.3"
+ resolved "https://registry.yarnpkg.com/loupe/-/loupe-3.1.3.tgz#042a8f7986d77f3d0f98ef7990a2b2fef18b0fd2"
+ integrity sha512-kkIp7XSkP78ZxJEsSxW3712C6teJVoeHHwgo9zJ380de7IYyJ2ISlxojcH2pC5OFLewESmnRi/+XCDIEEVyoug==
+
+lru-cache@^10.0.1, lru-cache@^10.2.0:
+ version "10.2.2"
+ resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-10.2.2.tgz#48206bc114c1252940c41b25b41af5b545aca878"
+ integrity sha512-9hp3Vp2/hFQUiIwKo8XCeFVnrg8Pk3TYNPIR7tJADKi5YfcF7vEaK7avFHTlSy3kOKYaJQaalfEo6YuXdceBOQ==
+
lru-cache@^5.1.1:
version "5.1.1"
- resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-5.1.1.tgz#1da27e6710271947695daf6848e847f01d84b920"
+ resolved "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz"
integrity sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==
dependencies:
yallist "^3.0.2"
-lru-cache@^6.0.0:
- version "6.0.0"
- resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-6.0.0.tgz#6d6fe6570ebd96aaf90fcad1dafa3b2566db3a94"
- integrity sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==
- dependencies:
- yallist "^4.0.0"
-
macgyver@~1.10:
version "1.10.1"
- resolved "https://registry.yarnpkg.com/macgyver/-/macgyver-1.10.1.tgz#b09d1599d8b36ed5b16f59589515d9d14bc2fd88"
+ resolved "https://registry.npmjs.org/macgyver/-/macgyver-1.10.1.tgz"
integrity sha1-sJ0VmdizbtWxb1lYlRXZ0UvC/Yg=
macos-release@^2.2.0:
version "2.4.1"
- resolved "https://registry.yarnpkg.com/macos-release/-/macos-release-2.4.1.tgz#64033d0ec6a5e6375155a74b1a1eba8e509820ac"
+ resolved "https://registry.npmjs.org/macos-release/-/macos-release-2.4.1.tgz"
integrity sha512-H/QHeBIN1fIGJX517pvK8IEK53yQOW7YcEI55oYtgjDdoCQQz7eJS94qt5kNrscReEyuD/JcdFCm2XBEcGOITg==
+magic-string@^0.25.3:
+ version "0.25.9"
+ resolved "https://registry.yarnpkg.com/magic-string/-/magic-string-0.25.9.tgz#de7f9faf91ef8a1c91d02c2e5314c8277dbcdd1c"
+ integrity sha512-RmF0AsMzgt25qzqqLc1+MbHmhdx0ojF2Fvs4XnOqz2ZOBXzzkEwc/dJQZCYHAn7v1jbVOjAZfK8msRn4BxO4VQ==
+ dependencies:
+ sourcemap-codec "^1.4.8"
+
+magic-string@^0.30.17, magic-string@^0.30.3:
+ version "0.30.17"
+ resolved "https://registry.yarnpkg.com/magic-string/-/magic-string-0.30.17.tgz#450a449673d2460e5bbcfba9a61916a1714c7453"
+ integrity sha512-sNPKHvyjVf7gyjwS4xGTaW/mCnF8wnjtifKBEhxfZ7E/S8tQ0rssrwGNn6q8JH/ohItJfSQp9mBtQYuTlH5QnA==
+ dependencies:
+ "@jridgewell/sourcemap-codec" "^1.5.0"
+
make-dir@^1.0.0:
version "1.3.0"
- resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-1.3.0.tgz#79c1033b80515bd6d24ec9933e860ca75ee27f0c"
+ resolved "https://registry.npmjs.org/make-dir/-/make-dir-1.3.0.tgz"
integrity sha512-2w31R7SJtieJJnQtGc7RVL2StM2vGYVfqUOvUDxH6bC6aJTxPxTF0GnIgCyu7tjockiUWAYQRbxa7vKn34s5sQ==
dependencies:
pify "^3.0.0"
make-dir@^2.1.0:
version "2.1.0"
- resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-2.1.0.tgz#5f0310e18b8be898cc07009295a30ae41e91e6f5"
+ resolved "https://registry.npmjs.org/make-dir/-/make-dir-2.1.0.tgz"
integrity sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA==
dependencies:
pify "^4.0.1"
semver "^5.6.0"
+make-dir@^3.0.0, make-dir@^3.0.2:
+ version "3.1.0"
+ resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-3.1.0.tgz#415e967046b3a7f1d185277d84aa58203726a13f"
+ integrity sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==
+ dependencies:
+ semver "^6.0.0"
+
+make-dir@^4.0.0:
+ version "4.0.0"
+ resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-4.0.0.tgz#c3c2307a771277cd9638305f915c29ae741b614e"
+ integrity sha512-hXdUTZYIVOt1Ex//jAQi+wTZZpUpwBj/0QsOzqegb3rGMMeJiSEu5xLHnYfBrRV4RH2+OCSOO95Is/7x1WJ4bw==
+ dependencies:
+ semver "^7.5.3"
+
make-error@^1.1.1:
version "1.3.6"
- resolved "https://registry.yarnpkg.com/make-error/-/make-error-1.3.6.tgz#2eb2e37ea9b67c4891f684a1394799af484cf7a2"
+ resolved "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz"
integrity sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==
+make-fetch-happen@^14.0.3:
+ version "14.0.3"
+ resolved "https://registry.yarnpkg.com/make-fetch-happen/-/make-fetch-happen-14.0.3.tgz#d74c3ecb0028f08ab604011e0bc6baed483fcdcd"
+ integrity sha512-QMjGbFTP0blj97EeidG5hk/QhKQ3T4ICckQGLgz38QF7Vgbk6e6FTARN8KhKxyBbWn8R0HU+bnw8aSoFPD4qtQ==
+ dependencies:
+ "@npmcli/agent" "^3.0.0"
+ cacache "^19.0.1"
+ http-cache-semantics "^4.1.1"
+ minipass "^7.0.2"
+ minipass-fetch "^4.0.0"
+ minipass-flush "^1.0.5"
+ minipass-pipeline "^1.2.4"
+ negotiator "^1.0.0"
+ proc-log "^5.0.0"
+ promise-retry "^2.0.1"
+ ssri "^12.0.0"
+
make-fetch-happen@^5.0.0:
version "5.0.2"
- resolved "https://registry.yarnpkg.com/make-fetch-happen/-/make-fetch-happen-5.0.2.tgz#aa8387104f2687edca01c8687ee45013d02d19bd"
+ resolved "https://registry.npmjs.org/make-fetch-happen/-/make-fetch-happen-5.0.2.tgz"
integrity sha512-07JHC0r1ykIoruKO8ifMXu+xEU8qOXDFETylktdug6vJDACnP+HKevOu3PXyNPzFyTSlz8vrBYlBO1JZRe8Cag==
dependencies:
agentkeepalive "^3.4.1"
@@ -4034,34 +6186,34 @@ make-fetch-happen@^5.0.0:
map-cache@^0.2.2:
version "0.2.2"
- resolved "https://registry.yarnpkg.com/map-cache/-/map-cache-0.2.2.tgz#c32abd0bd6525d9b051645bb4f26ac5dc98a0dbf"
+ resolved "https://registry.npmjs.org/map-cache/-/map-cache-0.2.2.tgz"
integrity sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8=
map-obj@^1.0.0, map-obj@^1.0.1:
version "1.0.1"
- resolved "https://registry.yarnpkg.com/map-obj/-/map-obj-1.0.1.tgz#d933ceb9205d82bdcf4886f6742bdc2b4dea146d"
+ resolved "https://registry.npmjs.org/map-obj/-/map-obj-1.0.1.tgz"
integrity sha1-2TPOuSBdgr3PSIb2dCvcK03qFG0=
map-obj@^2.0.0:
version "2.0.0"
- resolved "https://registry.yarnpkg.com/map-obj/-/map-obj-2.0.0.tgz#a65cd29087a92598b8791257a523e021222ac1f9"
+ resolved "https://registry.npmjs.org/map-obj/-/map-obj-2.0.0.tgz"
integrity sha1-plzSkIepJZi4eRJXpSPgISIqwfk=
map-obj@^4.0.0:
version "4.1.0"
- resolved "https://registry.yarnpkg.com/map-obj/-/map-obj-4.1.0.tgz#b91221b542734b9f14256c0132c897c5d7256fd5"
+ resolved "https://registry.npmjs.org/map-obj/-/map-obj-4.1.0.tgz"
integrity sha512-glc9y00wgtwcDmp7GaE/0b0OnxpNJsVf3ael/An6Fe2Q51LLwN1er6sdomLRzz5h0+yMpiYLhWYF5R7HeqVd4g==
map-visit@^1.0.0:
version "1.0.0"
- resolved "https://registry.yarnpkg.com/map-visit/-/map-visit-1.0.0.tgz#ecdca8f13144e660f1b5bd41f12f3479d98dfb8f"
+ resolved "https://registry.npmjs.org/map-visit/-/map-visit-1.0.0.tgz"
integrity sha1-7Nyo8TFE5mDxtb1B8S80edmN+48=
dependencies:
object-visit "^1.0.0"
meow@^3.3.0:
version "3.7.0"
- resolved "https://registry.yarnpkg.com/meow/-/meow-3.7.0.tgz#72cb668b425228290abbfa856892587308a801fb"
+ resolved "https://registry.npmjs.org/meow/-/meow-3.7.0.tgz"
integrity sha1-cstmi0JSKCkKu/qFaJJYcwioAfs=
dependencies:
camelcase-keys "^2.0.0"
@@ -4077,7 +6229,7 @@ meow@^3.3.0:
meow@^4.0.0:
version "4.0.1"
- resolved "https://registry.yarnpkg.com/meow/-/meow-4.0.1.tgz#d48598f6f4b1472f35bf6317a95945ace347f975"
+ resolved "https://registry.npmjs.org/meow/-/meow-4.0.1.tgz"
integrity sha512-xcSBHD5Z86zaOc+781KrupuHAzeGXSLtiAOmBsiLDiPSaYSB6hdew2ng9EBAnZ62jagG9MHAOdxpDi/lWBFJ/A==
dependencies:
camelcase-keys "^4.0.0"
@@ -4092,7 +6244,7 @@ meow@^4.0.0:
meow@^7.0.0:
version "7.1.1"
- resolved "https://registry.yarnpkg.com/meow/-/meow-7.1.1.tgz#7c01595e3d337fcb0ec4e8eed1666ea95903d306"
+ resolved "https://registry.npmjs.org/meow/-/meow-7.1.1.tgz"
integrity sha512-GWHvA5QOcS412WCo8vwKDlTelGLsCGBVevQB5Kva961rmNfun0PCbv5+xta2kUMFJyR8/oWnn7ddeKdosbAPbA==
dependencies:
"@types/minimist" "^1.2.0"
@@ -4107,14 +6259,19 @@ meow@^7.0.0:
type-fest "^0.13.1"
yargs-parser "^18.1.3"
-merge2@^1.2.3, merge2@^1.3.0, merge2@^1.4.1:
+merge-stream@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/merge-stream/-/merge-stream-2.0.0.tgz#52823629a14dd00c9770fb6ad47dc6310f2c1f60"
+ integrity sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==
+
+merge2@^1.2.3:
version "1.4.1"
- resolved "https://registry.yarnpkg.com/merge2/-/merge2-1.4.1.tgz#4368892f885e907455a6fd7dc55c0c9d404990ae"
+ resolved "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz"
integrity sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==
micromatch@^3.1.10:
version "3.1.10"
- resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-3.1.10.tgz#70859bc95c9840952f359a068a3fc49f9ecfac23"
+ resolved "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz"
integrity sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==
dependencies:
arr-diff "^4.0.0"
@@ -4131,54 +6288,117 @@ micromatch@^3.1.10:
snapdragon "^0.8.1"
to-regex "^3.0.2"
-micromatch@^4.0.2:
- version "4.0.2"
- resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-4.0.2.tgz#4fcb0999bf9fbc2fcbdd212f6d629b9a56c39259"
- integrity sha512-y7FpHSbMUMoyPbYUSzO6PaZ6FyRnQOpHuKwbo1G+Knck95XVU4QAiKdGEnj5wwoS7PlOgthX/09u5iFJ+aYf5Q==
- dependencies:
- braces "^3.0.1"
- picomatch "^2.0.5"
-
-micromatch@^4.0.4:
- version "4.0.5"
- resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-4.0.5.tgz#bc8999a7cbbf77cdc89f132f6e467051b49090c6"
- integrity sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==
- dependencies:
- braces "^3.0.2"
- picomatch "^2.3.1"
-
mime-db@1.44.0:
version "1.44.0"
- resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.44.0.tgz#fa11c5eb0aca1334b4233cb4d52f10c5a6272f92"
+ resolved "https://registry.npmjs.org/mime-db/-/mime-db-1.44.0.tgz"
integrity sha512-/NOTfLrsPBVeH7YtFPgsVWveuL+4SjjYxaQ1xtM1KMFj7HdxlBlxeyNLzhyJVx7r4rZGJAZ/6lkKCitSc/Nmpg==
+mime-db@1.52.0:
+ version "1.52.0"
+ resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.52.0.tgz#bbabcdc02859f4987301c856e3387ce5ec43bf70"
+ integrity sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==
+
mime-types@^2.1.12, mime-types@~2.1.19:
version "2.1.27"
- resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.27.tgz#47949f98e279ea53119f5722e0f34e529bec009f"
+ resolved "https://registry.npmjs.org/mime-types/-/mime-types-2.1.27.tgz"
integrity sha512-JIhqnCasI9yD+SsmkquHBxTSEuZdQX5BuQnS2Vc7puQQQ+8yiP5AY5uWhpdv4YL4VM5c6iliiYWPgJ/nJQLp7w==
dependencies:
mime-db "1.44.0"
+mime-types@^2.1.27:
+ version "2.1.35"
+ resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.35.tgz#381a871b62a734450660ae3deee44813f70d959a"
+ integrity sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==
+ dependencies:
+ mime-db "1.52.0"
+
+mime@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.npmjs.org/mime/-/mime-3.0.0.tgz"
+ integrity sha512-jSCU7/VB1loIWBZe14aEYHU/+1UMEHoaO7qxCOVJOw9GgH72VAWppxNcjU+x9a2k3GSIBXNKxXQFqRvvZ7vr3A==
+
mimic-fn@^1.0.0:
version "1.2.0"
- resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-1.2.0.tgz#820c86a39334640e99516928bd03fca88057d022"
+ resolved "https://registry.npmjs.org/mimic-fn/-/mimic-fn-1.2.0.tgz"
integrity sha512-jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ==
min-indent@^1.0.0:
version "1.0.1"
- resolved "https://registry.yarnpkg.com/min-indent/-/min-indent-1.0.1.tgz#a63f681673b30571fbe8bc25686ae746eefa9869"
+ resolved "https://registry.npmjs.org/min-indent/-/min-indent-1.0.1.tgz"
integrity sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg==
-"minimatch@2 || 3", minimatch@3.0.4, minimatch@^3.0.4:
- version "3.0.4"
- resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.4.tgz#5166e286457f03306064be5497e8dbb0c3d32083"
- integrity sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==
+miniflare@3.20250408.0:
+ version "3.20250408.0"
+ resolved "https://registry.yarnpkg.com/miniflare/-/miniflare-3.20250408.0.tgz#57e1923466c8828e5c4b330a05f6f3aee150aba2"
+ integrity sha512-URXD7+b0tLbBtchPM/MfWYujymHUrmPtd3EDQbe51qrPPF1zQCdSeNbA4f/GRQMoQIEE6EIhvEYjVjL+hiN+Og==
+ dependencies:
+ "@cspotcode/source-map-support" "0.8.1"
+ acorn "8.14.0"
+ acorn-walk "8.3.2"
+ exit-hook "2.2.1"
+ glob-to-regexp "0.4.1"
+ stoppable "1.1.0"
+ undici "^5.28.5"
+ workerd "1.20250408.0"
+ ws "8.18.0"
+ youch "3.3.4"
+ zod "3.22.3"
+
+miniflare@4.20250428.0:
+ version "4.20250428.0"
+ resolved "https://registry.yarnpkg.com/miniflare/-/miniflare-4.20250428.0.tgz#645996f63b99f61c39ea986f60b6fe0810e07600"
+ integrity sha512-3kKJNcdh5zUSXoFD3kGSRWc+ETZS36O7ygkCJJF/bwN7lxcB5mOXq+2DPqV/nVyu2DGLDAqsAvjXhpPKCHuPOQ==
+ dependencies:
+ "@cspotcode/source-map-support" "0.8.1"
+ acorn "8.14.0"
+ acorn-walk "8.3.2"
+ exit-hook "2.2.1"
+ glob-to-regexp "0.4.1"
+ stoppable "1.1.0"
+ undici "^5.28.5"
+ workerd "1.20250428.0"
+ ws "8.18.0"
+ youch "3.3.4"
+ zod "3.22.3"
+
+"minimatch@2 || 3", minimatch@^3.0.4, minimatch@^3.1.1:
+ version "3.1.2"
+ resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.1.2.tgz#19cd194bfd3e428f049a70817c038d89ab4be35b"
+ integrity sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==
dependencies:
brace-expansion "^1.1.7"
+minimatch@^10.2.2, minimatch@^10.2.4:
+ version "10.2.5"
+ resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-10.2.5.tgz#bd48687a0be38ed2961399105600f832095861d1"
+ integrity sha512-MULkVLfKGYDFYejP07QOurDLLQpcjk7Fw+7jXS2R2czRQzR56yHRveU5NDJEOviH+hETZKSkIk5c+T23GjFUMg==
+ dependencies:
+ brace-expansion "^5.0.5"
+
+minimatch@^3.1.5:
+ version "3.1.5"
+ resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.1.5.tgz#580c88f8d5445f2bd6aa8f3cadefa0de79fbd69e"
+ integrity sha512-VgjWUsnnT6n+NUk6eZq77zeFdpW2LWDzP6zFGrCbHXiYNul5Dzqk2HHQ5uFH2DNW5Xbp8+jVzaeNt94ssEEl4w==
+ dependencies:
+ brace-expansion "^1.1.7"
+
+minimatch@^9.0.4:
+ version "9.0.4"
+ resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-9.0.4.tgz#8e49c731d1749cbec05050ee5145147b32496a51"
+ integrity sha512-KqWh+VchfxcMNRAJjj2tnsSJdNbHsVgnkBhTNrW7AjVo6OvLtxw8zfT9oLw1JSohlFzJ8jCoTgaoXvJ+kHt6fw==
+ dependencies:
+ brace-expansion "^2.0.1"
+
+minimatch@^9.0.5:
+ version "9.0.8"
+ resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-9.0.8.tgz#bb3aa36d7b42ea77a93c44d5c1082b188112497c"
+ integrity sha512-reYkDYtj/b19TeqbNZCV4q9t+Yxylf/rYBsLb42SXJatTv4/ylq5lEiAmhA/IToxO7NI2UzNMghHoHuaqDkAjw==
+ dependencies:
+ brace-expansion "^5.0.2"
+
minimist-options@4.1.0:
version "4.1.0"
- resolved "https://registry.yarnpkg.com/minimist-options/-/minimist-options-4.1.0.tgz#c0655713c53a8a2ebd77ffa247d342c40f010619"
+ resolved "https://registry.npmjs.org/minimist-options/-/minimist-options-4.1.0.tgz"
integrity sha512-Q4r8ghd80yhO/0j1O3B2BjweX3fiHg9cdOwjJd2J76Q135c+NDxGCqdYKQ1SKBuFfgWbAUzBfvYjPUEeNgqN1A==
dependencies:
arrify "^1.0.1"
@@ -4187,7 +6407,7 @@ minimist-options@4.1.0:
minimist-options@^3.0.1:
version "3.0.2"
- resolved "https://registry.yarnpkg.com/minimist-options/-/minimist-options-3.0.2.tgz#fba4c8191339e13ecf4d61beb03f070103f3d954"
+ resolved "https://registry.npmjs.org/minimist-options/-/minimist-options-3.0.2.tgz"
integrity sha512-FyBrT/d0d4+uiZRbqznPXqw3IpZZG3gl3wKWiX784FycUKVwBt0uLBFkQrtE4tZOrgo78nZp2jnKz3L65T5LdQ==
dependencies:
arrify "^1.0.1"
@@ -4195,27 +6415,85 @@ minimist-options@^3.0.1:
minimist@^1.1.3, minimist@^1.2.0, minimist@^1.2.5:
version "1.2.6"
- resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.6.tgz#8637a5b759ea0d6e98702cfb3a9283323c93af44"
+ resolved "https://registry.npmjs.org/minimist/-/minimist-1.2.6.tgz"
integrity sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q==
+minipass-collect@^2.0.1:
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/minipass-collect/-/minipass-collect-2.0.1.tgz#1621bc77e12258a12c60d34e2276ec5c20680863"
+ integrity sha512-D7V8PO9oaz7PWGLbCACuI1qEOsq7UKfLotx/C0Aet43fCUB/wfQ7DYeq2oR/svFJGYDHPr38SHATeaj/ZoKHKw==
+ dependencies:
+ minipass "^7.0.3"
+
+minipass-fetch@^4.0.0:
+ version "4.0.1"
+ resolved "https://registry.yarnpkg.com/minipass-fetch/-/minipass-fetch-4.0.1.tgz#f2d717d5a418ad0b1a7274f9b913515d3e78f9e5"
+ integrity sha512-j7U11C5HXigVuutxebFadoYBbd7VSdZWggSe64NVdvWNBqGAiXPL2QVCehjmw7lY1oF9gOllYbORh+hiNgfPgQ==
+ dependencies:
+ minipass "^7.0.3"
+ minipass-sized "^1.0.3"
+ minizlib "^3.0.1"
+ optionalDependencies:
+ encoding "^0.1.13"
+
+minipass-flush@^1.0.5:
+ version "1.0.5"
+ resolved "https://registry.yarnpkg.com/minipass-flush/-/minipass-flush-1.0.5.tgz#82e7135d7e89a50ffe64610a787953c4c4cbb373"
+ integrity sha512-JmQSYYpPUqX5Jyn1mXaRwOda1uQ8HP5KAT/oDSLCzt1BYRhQU0/hDtsB1ufZfEEzMZ9aAVmsBw8+FWsIXlClWw==
+ dependencies:
+ minipass "^3.0.0"
+
+minipass-pipeline@^1.2.4:
+ version "1.2.4"
+ resolved "https://registry.yarnpkg.com/minipass-pipeline/-/minipass-pipeline-1.2.4.tgz#68472f79711c084657c067c5c6ad93cddea8214c"
+ integrity sha512-xuIq7cIOt09RPRJ19gdi4b+RiNvDFYe5JH+ggNvBqGqpQXcru3PcRmOZuHBKWK1Txf9+cQ+HMVN4d6z46LZP7A==
+ dependencies:
+ minipass "^3.0.0"
+
+minipass-sized@^1.0.3:
+ version "1.0.3"
+ resolved "https://registry.yarnpkg.com/minipass-sized/-/minipass-sized-1.0.3.tgz#70ee5a7c5052070afacfbc22977ea79def353b70"
+ integrity sha512-MbkQQ2CTiBMlA2Dm/5cY+9SWFEN8pzzOXi6rlM5Xxq0Yqbda5ZQy9sU75a673FE9ZK0Zsbr6Y5iP6u9nktfg2g==
+ dependencies:
+ minipass "^3.0.0"
+
minipass@^2.3.5, minipass@^2.6.0, minipass@^2.9.0:
version "2.9.0"
- resolved "https://registry.yarnpkg.com/minipass/-/minipass-2.9.0.tgz#e713762e7d3e32fed803115cf93e04bca9fcc9a6"
+ resolved "https://registry.npmjs.org/minipass/-/minipass-2.9.0.tgz"
integrity sha512-wxfUjg9WebH+CUDX/CdbRlh5SmfZiy/hpkxaRI16Y9W56Pa75sWgd/rvFilSgrauD9NyFymP/+JFV3KwzIsJeg==
dependencies:
safe-buffer "^5.1.2"
yallist "^3.0.0"
+minipass@^3.0.0:
+ version "3.3.6"
+ resolved "https://registry.yarnpkg.com/minipass/-/minipass-3.3.6.tgz#7bba384db3a1520d18c9c0e5251c3444e95dd94a"
+ integrity sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==
+ dependencies:
+ yallist "^4.0.0"
+
+"minipass@^5.0.0 || ^6.0.2 || ^7.0.0", minipass@^7.0.2, minipass@^7.0.3, minipass@^7.0.4, minipass@^7.1.2:
+ version "7.1.2"
+ resolved "https://registry.yarnpkg.com/minipass/-/minipass-7.1.2.tgz#93a9626ce5e5e66bd4db86849e7515e92340a707"
+ integrity sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==
+
minizlib@^1.3.3:
version "1.3.3"
- resolved "https://registry.yarnpkg.com/minizlib/-/minizlib-1.3.3.tgz#2290de96818a34c29551c8a8d301216bd65a861d"
+ resolved "https://registry.npmjs.org/minizlib/-/minizlib-1.3.3.tgz"
integrity sha512-6ZYMOEnmVsdCeTJVE0W9ZD+pVnE8h9Hma/iOwwRDsdQoePpoX56/8B6z3P9VNwppJuBKNRuFDRNRqRWexT9G9Q==
dependencies:
minipass "^2.9.0"
+minizlib@^3.0.1:
+ version "3.0.2"
+ resolved "https://registry.yarnpkg.com/minizlib/-/minizlib-3.0.2.tgz#f33d638eb279f664439aa38dc5f91607468cb574"
+ integrity sha512-oG62iEk+CYt5Xj2YqI5Xi9xWUeZhDI8jjQmC5oThVH5JGCTgIjr7ciJDzC7MBzYd//WvR1OTmP5Q38Q8ShQtVA==
+ dependencies:
+ minipass "^7.1.2"
+
mississippi@^3.0.0:
version "3.0.0"
- resolved "https://registry.yarnpkg.com/mississippi/-/mississippi-3.0.0.tgz#ea0a3291f97e0b5e8776b363d5f0a12d94c67022"
+ resolved "https://registry.npmjs.org/mississippi/-/mississippi-3.0.0.tgz"
integrity sha512-x471SsVjUtBRtcvd4BzKE9kFC+/2TeWgKCgw0bZcw1b9l2X3QX5vCWgF+KaZaYm87Ss//rHnWryupDrgLvmSkA==
dependencies:
concat-stream "^1.5.0"
@@ -4231,7 +6509,7 @@ mississippi@^3.0.0:
mixin-deep@^1.2.0:
version "1.3.2"
- resolved "https://registry.yarnpkg.com/mixin-deep/-/mixin-deep-1.3.2.tgz#1120b43dc359a785dce65b55b82e257ccf479566"
+ resolved "https://registry.npmjs.org/mixin-deep/-/mixin-deep-1.3.2.tgz"
integrity sha512-WRoDn//mXBiJ1H40rqa3vH0toePwSsGb45iInWlTySa+Uu4k3tYUSxa2v1KqAiLtvlrSzaExqS1gtk96A9zvEA==
dependencies:
for-in "^1.0.2"
@@ -4239,61 +6517,58 @@ mixin-deep@^1.2.0:
mkdirp-promise@^5.0.1:
version "5.0.1"
- resolved "https://registry.yarnpkg.com/mkdirp-promise/-/mkdirp-promise-5.0.1.tgz#e9b8f68e552c68a9c1713b84883f7a1dd039b8a1"
+ resolved "https://registry.npmjs.org/mkdirp-promise/-/mkdirp-promise-5.0.1.tgz"
integrity sha1-6bj2jlUsaKnBcTuEiD96HdA5uKE=
dependencies:
mkdirp "*"
-mkdirp@*:
- version "1.0.4"
- resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-1.0.4.tgz#3eb5ed62622756d79a5f0e2a221dfebad75c2f7e"
- integrity sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==
+mkdirp@*, mkdirp@^3.0.1:
+ version "3.0.1"
+ resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-3.0.1.tgz#e44e4c5607fb279c168241713cc6e0fea9adcb50"
+ integrity sha512-+NsyUUAZDmo6YVHzL/stxSu3t9YS1iljliy3BSDrXJ/dkn1KYdmtZODGGjLcc9XLgVVpH4KshHB8XmZgMhaBXg==
-mkdirp@0.5.5, mkdirp@0.5.x, mkdirp@^0.5.1, mkdirp@^0.5.5:
+mkdirp@0.5.x, mkdirp@^0.5.1, mkdirp@^0.5.5:
version "0.5.5"
- resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.5.tgz#d91cefd62d1436ca0f41620e251288d420099def"
+ resolved "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz"
integrity sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==
dependencies:
minimist "^1.2.5"
-mocha@^7.1.2:
- version "7.2.0"
- resolved "https://registry.yarnpkg.com/mocha/-/mocha-7.2.0.tgz#01cc227b00d875ab1eed03a75106689cfed5a604"
- integrity sha512-O9CIypScywTVpNaRrCAgoUnJgozpIofjKUYmJhiCIJMiuYnLI6otcb1/kpW9/n/tJODHGZ7i8aLQoDVsMtOKQQ==
- dependencies:
- ansi-colors "3.2.3"
- browser-stdout "1.3.1"
- chokidar "3.3.0"
- debug "3.2.6"
- diff "3.5.0"
- escape-string-regexp "1.0.5"
- find-up "3.0.0"
- glob "7.1.3"
- growl "1.10.5"
- he "1.2.0"
- js-yaml "3.13.1"
- log-symbols "3.0.0"
- minimatch "3.0.4"
- mkdirp "0.5.5"
- ms "2.1.1"
- node-environment-flags "1.0.6"
- object.assign "4.1.0"
- strip-json-comments "2.0.1"
- supports-color "6.0.0"
- which "1.3.1"
- wide-align "1.1.3"
- yargs "13.3.2"
- yargs-parser "13.1.2"
- yargs-unparser "1.6.0"
+mocha@11.7.5, mocha@^11.7.5:
+ version "11.7.5"
+ resolved "https://registry.yarnpkg.com/mocha/-/mocha-11.7.5.tgz#58f5bbfa5e0211ce7e5ee6128107cefc2515a627"
+ integrity sha512-mTT6RgopEYABzXWFx+GcJ+ZQ32kp4fMf0xvpZIIfSq9Z8lC/++MtcCnQ9t5FP2veYEP95FIYSvW+U9fV4xrlig==
+ dependencies:
+ browser-stdout "^1.3.1"
+ chokidar "^4.0.1"
+ debug "^4.3.5"
+ diff "^7.0.0"
+ escape-string-regexp "^4.0.0"
+ find-up "^5.0.0"
+ glob "^10.4.5"
+ he "^1.2.0"
+ is-path-inside "^3.0.3"
+ js-yaml "^4.1.0"
+ log-symbols "^4.1.0"
+ minimatch "^9.0.5"
+ ms "^2.1.3"
+ picocolors "^1.1.1"
+ serialize-javascript "^6.0.2"
+ strip-json-comments "^3.1.1"
+ supports-color "^8.1.1"
+ workerpool "^9.2.0"
+ yargs "^17.7.2"
+ yargs-parser "^21.1.1"
+ yargs-unparser "^2.0.0"
modify-values@^1.0.0:
version "1.0.1"
- resolved "https://registry.yarnpkg.com/modify-values/-/modify-values-1.0.1.tgz#b3939fa605546474e3e3e3c63d64bd43b4ee6022"
+ resolved "https://registry.npmjs.org/modify-values/-/modify-values-1.0.1.tgz"
integrity sha512-xV2bxeN6F7oYjZWTe/YPAy6MN2M+sL4u/Rlm2AHCIVGfo2p1yGmBHQ6vHehl4bRTZBdHu3TSkWdYgkwpYzAGSw==
move-concurrently@^1.0.1:
version "1.0.1"
- resolved "https://registry.yarnpkg.com/move-concurrently/-/move-concurrently-1.0.1.tgz#be2c005fda32e0b29af1f05d7c4b33214c701f92"
+ resolved "https://registry.npmjs.org/move-concurrently/-/move-concurrently-1.0.1.tgz"
integrity sha1-viwAX9oy4LKa8fBdfEszIUxwH5I=
dependencies:
aproba "^1.1.1"
@@ -4305,22 +6580,22 @@ move-concurrently@^1.0.1:
ms@2.0.0:
version "2.0.0"
- resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8"
+ resolved "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz"
integrity sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=
-ms@2.1.1:
- version "2.1.1"
- resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.1.tgz#30a5864eb3ebb0a66f2ebe6d727af06a09d86e0a"
- integrity sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==
-
-ms@2.1.2, ms@^2.0.0, ms@^2.1.1:
+ms@2.1.2:
version "2.1.2"
- resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009"
+ resolved "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz"
integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==
+ms@^2.0.0, ms@^2.1.1, ms@^2.1.3:
+ version "2.1.3"
+ resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.3.tgz#574c8138ce1d2b5861f0b44579dbadd60c6615b2"
+ integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==
+
multimatch@^3.0.0:
version "3.0.0"
- resolved "https://registry.yarnpkg.com/multimatch/-/multimatch-3.0.0.tgz#0e2534cc6bc238d9ab67e1b9cd5fcd85a6dbf70b"
+ resolved "https://registry.npmjs.org/multimatch/-/multimatch-3.0.0.tgz"
integrity sha512-22foS/gqQfANZ3o+W7ST2x25ueHDVNWl/b9OlGcLpy/iKxjCpvcNCM51YCenUi7Mt/jAjjqv8JwZRs8YP5sRjA==
dependencies:
array-differ "^2.0.3"
@@ -4328,28 +6603,43 @@ multimatch@^3.0.0:
arrify "^1.0.1"
minimatch "^3.0.4"
+mustache@^4.2.0:
+ version "4.2.0"
+ resolved "https://registry.npmjs.org/mustache/-/mustache-4.2.0.tgz"
+ integrity sha512-71ippSywq5Yb7/tVYyGbkBggbU8H3u5Rz56fH60jGFgr8uHwxs+aSKeqmluIVzM0m0kB7xQjKS6qPfd0b2ZoqQ==
+
mute-stream@0.0.7:
version "0.0.7"
- resolved "https://registry.yarnpkg.com/mute-stream/-/mute-stream-0.0.7.tgz#3075ce93bc21b8fab43e1bc4da7e8115ed1e7bab"
+ resolved "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.7.tgz"
integrity sha1-MHXOk7whuPq0PhvE2n6BFe0ee6s=
mute-stream@~0.0.4:
version "0.0.8"
- resolved "https://registry.yarnpkg.com/mute-stream/-/mute-stream-0.0.8.tgz#1630c42b2251ff81e2a283de96a5497ea92e5e0d"
+ resolved "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.8.tgz"
integrity sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==
mz@^2.5.0:
version "2.7.0"
- resolved "https://registry.yarnpkg.com/mz/-/mz-2.7.0.tgz#95008057a56cafadc2bc63dde7f9ff6955948e32"
+ resolved "https://registry.npmjs.org/mz/-/mz-2.7.0.tgz"
integrity sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==
dependencies:
any-promise "^1.0.0"
object-assign "^4.0.1"
thenify-all "^1.0.0"
+nan@~2.26.2:
+ version "2.26.2"
+ resolved "https://registry.yarnpkg.com/nan/-/nan-2.26.2.tgz#2e5e25764224c737b9897790b57c3294d4dcee9c"
+ integrity sha512-0tTvBTYkt3tdGw22nrAy50x7gpbGCCFH3AFcyS5WiUu7Eu4vWlri1woE6qHBSfy11vksDqkiwjOnlR7WV8G1Hw==
+
+nanoid@^3.3.11:
+ version "3.3.11"
+ resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-3.3.11.tgz#4f4f112cefbe303202f2199838128936266d185b"
+ integrity sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w==
+
nanomatch@^1.2.9:
version "1.2.13"
- resolved "https://registry.yarnpkg.com/nanomatch/-/nanomatch-1.2.13.tgz#b87a8aa4fc0de8fe6be88895b38983ff265bd119"
+ resolved "https://registry.npmjs.org/nanomatch/-/nanomatch-1.2.13.tgz"
integrity sha512-fpoe2T0RbHwBTBUOftAfBPaDEi06ufaUai0mE6Yn1kacc3SnTErfb/h+X94VXzI64rKFHYImXSvdwGGCmwOqCA==
dependencies:
arr-diff "^4.0.0"
@@ -4366,30 +6656,27 @@ nanomatch@^1.2.9:
natural-compare@^1.4.0:
version "1.4.0"
- resolved "https://registry.yarnpkg.com/natural-compare/-/natural-compare-1.4.0.tgz#4abebfeed7541f2c27acfb29bdbbd15c8d5ba4f7"
+ resolved "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz"
integrity sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=
-neo-async@^2.6.0:
+negotiator@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/negotiator/-/negotiator-1.0.0.tgz#b6c91bb47172d69f93cfd7c357bbb529019b5f6a"
+ integrity sha512-8Ofs/AUQh8MaEcrlq5xOX0CQ9ypTF5dl78mjlMNfOK08fzpgTHQRQPBxcPlEtIw0yRpws+Zo/3r+5WRby7u3Gg==
+
+neo-async@^2.6.0, neo-async@^2.6.2:
version "2.6.2"
- resolved "https://registry.yarnpkg.com/neo-async/-/neo-async-2.6.2.tgz#b4aafb93e3aeb2d8174ca53cf163ab7d7308305f"
+ resolved "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz"
integrity sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==
nice-try@^1.0.4:
version "1.0.5"
- resolved "https://registry.yarnpkg.com/nice-try/-/nice-try-1.0.5.tgz#a3378a7696ce7d223e88fc9b764bd7ef1089e366"
+ resolved "https://registry.npmjs.org/nice-try/-/nice-try-1.0.5.tgz"
integrity sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==
-node-environment-flags@1.0.6:
- version "1.0.6"
- resolved "https://registry.yarnpkg.com/node-environment-flags/-/node-environment-flags-1.0.6.tgz#a30ac13621f6f7d674260a54dede048c3982c088"
- integrity sha512-5Evy2epuL+6TM0lCQGpFIj6KwiEsGh1SrHUhTbNX+sLbBtjidPZFAnVK9y5yU1+h//RitLbRHTIMyxQPtxMdHw==
- dependencies:
- object.getownpropertydescriptors "^2.0.3"
- semver "^5.7.0"
-
node-fetch-npm@^2.0.2:
version "2.0.4"
- resolved "https://registry.yarnpkg.com/node-fetch-npm/-/node-fetch-npm-2.0.4.tgz#6507d0e17a9ec0be3bec516958a497cec54bf5a4"
+ resolved "https://registry.npmjs.org/node-fetch-npm/-/node-fetch-npm-2.0.4.tgz"
integrity sha512-iOuIQDWDyjhv9qSDrj9aq/klt6F9z1p2otB3AV7v3zBDcL/x+OfGsvGQZZCcMZbUf4Ujw1xGNQkjvGnVT22cKg==
dependencies:
encoding "^0.1.11"
@@ -4398,14 +6685,30 @@ node-fetch-npm@^2.0.2:
node-fetch@^2.5.0, node-fetch@^2.6.1:
version "2.6.7"
- resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.6.7.tgz#24de9fba827e3b4ae44dc8b20256a379160052ad"
+ resolved "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.7.tgz"
integrity sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ==
dependencies:
whatwg-url "^5.0.0"
+node-gyp@>=10.x:
+ version "11.3.0"
+ resolved "https://registry.yarnpkg.com/node-gyp/-/node-gyp-11.3.0.tgz#e543e3dcd69877e4a9a682ce355150c5d6a6947b"
+ integrity sha512-9J0+C+2nt3WFuui/mC46z2XCZ21/cKlFDuywULmseD/LlmnOrSeEAE4c/1jw6aybXLmpZnQY3/LmOJfgyHIcng==
+ dependencies:
+ env-paths "^2.2.0"
+ exponential-backoff "^3.1.1"
+ graceful-fs "^4.2.6"
+ make-fetch-happen "^14.0.3"
+ nopt "^8.0.0"
+ proc-log "^5.0.0"
+ semver "^7.3.5"
+ tar "^7.4.3"
+ tinyglobby "^0.2.12"
+ which "^5.0.0"
+
node-gyp@^5.0.2:
version "5.1.1"
- resolved "https://registry.yarnpkg.com/node-gyp/-/node-gyp-5.1.1.tgz#eb915f7b631c937d282e33aed44cb7a025f62a3e"
+ resolved "https://registry.npmjs.org/node-gyp/-/node-gyp-5.1.1.tgz"
integrity sha512-WH0WKGi+a4i4DUt2mHnvocex/xPLp9pYt5R6M2JdFB7pJ7Z34hveZ4nDTGTiLXCkitA9T8HFZjhinBCiVHYcWw==
dependencies:
env-paths "^2.2.0"
@@ -4420,24 +6723,43 @@ node-gyp@^5.0.2:
tar "^4.4.12"
which "^1.3.1"
+node-preload@^0.2.1:
+ version "0.2.1"
+ resolved "https://registry.yarnpkg.com/node-preload/-/node-preload-0.2.1.tgz#c03043bb327f417a18fee7ab7ee57b408a144301"
+ integrity sha512-RM5oyBy45cLEoHqCeh+MNuFAxO0vTFBLskvQbOKnEE7YTTSN4tbN8QWDIPQ6L+WvKsB/qLEGpYe2ZZ9d4W9OIQ==
+ dependencies:
+ process-on-spawn "^1.0.0"
+
+node-releases@^2.0.19:
+ version "2.0.19"
+ resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-2.0.19.tgz#9e445a52950951ec4d177d843af370b411caf314"
+ integrity sha512-xxOWJsBKtzAq7DY0J+DTzuz58K8e7sJbdgwkbMWQe8UYB6ekmsQ45q0M/tJDsGaZmbC+l7n57UV8Hl5tHxO9uw==
+
nopt@3.x:
version "3.0.6"
- resolved "https://registry.yarnpkg.com/nopt/-/nopt-3.0.6.tgz#c6465dbf08abcd4db359317f79ac68a646b28ff9"
+ resolved "https://registry.npmjs.org/nopt/-/nopt-3.0.6.tgz"
integrity sha1-xkZdvwirzU2zWTF/eaxopkayj/k=
dependencies:
abbrev "1"
nopt@^4.0.1:
version "4.0.3"
- resolved "https://registry.yarnpkg.com/nopt/-/nopt-4.0.3.tgz#a375cad9d02fd921278d954c2254d5aa57e15e48"
+ resolved "https://registry.npmjs.org/nopt/-/nopt-4.0.3.tgz"
integrity sha512-CvaGwVMztSMJLOeXPrez7fyfObdZqNUK1cPAEzLHrTybIua9pMdmmPR5YwtfNftIOMv3DPUhFaxsZMNTQO20Kg==
dependencies:
abbrev "1"
osenv "^0.1.4"
+nopt@^8.0.0:
+ version "8.1.0"
+ resolved "https://registry.yarnpkg.com/nopt/-/nopt-8.1.0.tgz#b11d38caf0f8643ce885818518064127f602eae3"
+ integrity sha512-ieGu42u/Qsa4TFktmaKEwM6MQH0pOWnaB3htzh0JRtx84+Mebc0cbZYN5bC+6WTZ4+77xrL9Pn5m7CV6VIkV7A==
+ dependencies:
+ abbrev "^3.0.0"
+
normalize-package-data@^2.0.0, normalize-package-data@^2.3.0, normalize-package-data@^2.3.2, normalize-package-data@^2.3.4, normalize-package-data@^2.3.5, normalize-package-data@^2.4.0, normalize-package-data@^2.5.0:
version "2.5.0"
- resolved "https://registry.yarnpkg.com/normalize-package-data/-/normalize-package-data-2.5.0.tgz#e66db1838b200c1dfc233225d12cb36520e234a8"
+ resolved "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz"
integrity sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==
dependencies:
hosted-git-info "^2.1.4"
@@ -4445,26 +6767,21 @@ normalize-package-data@^2.0.0, normalize-package-data@^2.3.0, normalize-package-
semver "2 || 3 || 4 || 5"
validate-npm-package-license "^3.0.1"
-normalize-path@^3.0.0, normalize-path@~3.0.0:
- version "3.0.0"
- resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-3.0.0.tgz#0dcd69ff23a1c9b11fd0978316644a0388216a65"
- integrity sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==
-
normalize-url@^3.3.0:
version "3.3.0"
- resolved "https://registry.yarnpkg.com/normalize-url/-/normalize-url-3.3.0.tgz#b2e1c4dc4f7c6d57743df733a4f5978d18650559"
+ resolved "https://registry.npmjs.org/normalize-url/-/normalize-url-3.3.0.tgz"
integrity sha512-U+JJi7duF1o+u2pynbp2zXDW2/PADgC30f0GsHZtRh+HOcXHnw137TrNlyxxRvWW5fjKd3bcLHPxofWuCjaeZg==
npm-bundled@^1.0.1:
version "1.1.1"
- resolved "https://registry.yarnpkg.com/npm-bundled/-/npm-bundled-1.1.1.tgz#1edd570865a94cdb1bc8220775e29466c9fb234b"
+ resolved "https://registry.npmjs.org/npm-bundled/-/npm-bundled-1.1.1.tgz"
integrity sha512-gqkfgGePhTpAEgUsGEgcq1rqPXA+tv/aVBlgEzfXwA1yiUJF7xtEt3CtVwOjNYQOVknDk0F20w58Fnm3EtG0fA==
dependencies:
npm-normalize-package-bin "^1.0.1"
npm-lifecycle@^3.1.2:
version "3.1.5"
- resolved "https://registry.yarnpkg.com/npm-lifecycle/-/npm-lifecycle-3.1.5.tgz#9882d3642b8c82c815782a12e6a1bfeed0026309"
+ resolved "https://registry.npmjs.org/npm-lifecycle/-/npm-lifecycle-3.1.5.tgz"
integrity sha512-lDLVkjfZmvmfvpvBzA4vzee9cn+Me4orq0QF8glbswJVEbIcSNWib7qGOffolysc3teCqbbPZZkzbr3GQZTL1g==
dependencies:
byline "^5.0.0"
@@ -4478,12 +6795,12 @@ npm-lifecycle@^3.1.2:
npm-normalize-package-bin@^1.0.0, npm-normalize-package-bin@^1.0.1:
version "1.0.1"
- resolved "https://registry.yarnpkg.com/npm-normalize-package-bin/-/npm-normalize-package-bin-1.0.1.tgz#6e79a41f23fd235c0623218228da7d9c23b8f6e2"
+ resolved "https://registry.npmjs.org/npm-normalize-package-bin/-/npm-normalize-package-bin-1.0.1.tgz"
integrity sha512-EPfafl6JL5/rU+ot6P3gRSCpPDW5VmIzX959Ob1+ySFUuuYHWHekXpwdUZcKP5C+DS4GEtdJluwBjnsNDl+fSA==
"npm-package-arg@^4.0.0 || ^5.0.0 || ^6.0.0", npm-package-arg@^6.0.0, npm-package-arg@^6.1.0:
version "6.1.1"
- resolved "https://registry.yarnpkg.com/npm-package-arg/-/npm-package-arg-6.1.1.tgz#02168cb0a49a2b75bf988a28698de7b529df5cb7"
+ resolved "https://registry.npmjs.org/npm-package-arg/-/npm-package-arg-6.1.1.tgz"
integrity sha512-qBpssaL3IOZWi5vEKUKW0cO7kzLeT+EQO9W8RsLOZf76KF9E/K9+wH0C7t06HXPpaH8WH5xF1MExLuCwbTqRUg==
dependencies:
hosted-git-info "^2.7.1"
@@ -4493,7 +6810,7 @@ npm-normalize-package-bin@^1.0.0, npm-normalize-package-bin@^1.0.1:
npm-packlist@^1.4.4:
version "1.4.8"
- resolved "https://registry.yarnpkg.com/npm-packlist/-/npm-packlist-1.4.8.tgz#56ee6cc135b9f98ad3d51c1c95da22bbb9b2ef3e"
+ resolved "https://registry.npmjs.org/npm-packlist/-/npm-packlist-1.4.8.tgz"
integrity sha512-5+AZgwru5IevF5ZdnFglB5wNlHG1AOOuw28WhUq8/8emhBmLv6jX5by4WJCh7lW0uSYZYS6DXqIsyZVIXRZU9A==
dependencies:
ignore-walk "^3.0.1"
@@ -4502,7 +6819,7 @@ npm-packlist@^1.4.4:
npm-pick-manifest@^3.0.0:
version "3.0.2"
- resolved "https://registry.yarnpkg.com/npm-pick-manifest/-/npm-pick-manifest-3.0.2.tgz#f4d9e5fd4be2153e5f4e5f9b7be8dc419a99abb7"
+ resolved "https://registry.npmjs.org/npm-pick-manifest/-/npm-pick-manifest-3.0.2.tgz"
integrity sha512-wNprTNg+X5nf+tDi+hbjdHhM4bX+mKqv6XmPh7B5eG+QY9VARfQPfCEH013H5GqfNj6ee8Ij2fg8yk0mzps1Vw==
dependencies:
figgy-pudding "^3.5.1"
@@ -4511,14 +6828,14 @@ npm-pick-manifest@^3.0.0:
npm-run-path@^2.0.0:
version "2.0.2"
- resolved "https://registry.yarnpkg.com/npm-run-path/-/npm-run-path-2.0.2.tgz#35a9232dfa35d7067b4cb2ddf2357b1871536c5f"
+ resolved "https://registry.npmjs.org/npm-run-path/-/npm-run-path-2.0.2.tgz"
integrity sha1-NakjLfo11wZ7TLLd8jV7GHFTbF8=
dependencies:
path-key "^2.0.0"
npmlog@^4.1.2:
version "4.1.2"
- resolved "https://registry.yarnpkg.com/npmlog/-/npmlog-4.1.2.tgz#08a7f2a8bf734604779a9efa4ad5cc717abb954b"
+ resolved "https://registry.npmjs.org/npmlog/-/npmlog-4.1.2.tgz"
integrity sha512-2uUqazuKlTaSI/dC8AzicUck7+IrEaOnN/e0jd3Xtt1KcGpwx30v50mL7oPyr/h9bL3E4aZccVwpwP+5W9Vjkg==
dependencies:
are-we-there-yet "~1.1.2"
@@ -4528,22 +6845,55 @@ npmlog@^4.1.2:
number-is-nan@^1.0.0:
version "1.0.1"
- resolved "https://registry.yarnpkg.com/number-is-nan/-/number-is-nan-1.0.1.tgz#097b602b53422a522c1afb8790318336941a011d"
+ resolved "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz"
integrity sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=
+nyc@^15:
+ version "15.1.0"
+ resolved "https://registry.yarnpkg.com/nyc/-/nyc-15.1.0.tgz#1335dae12ddc87b6e249d5a1994ca4bdaea75f02"
+ integrity sha512-jMW04n9SxKdKi1ZMGhvUTHBN0EICCRkHemEoE5jm6mTYcqcdas0ATzgUgejlQUHMvpnOZqGB5Xxsv9KxJW1j8A==
+ dependencies:
+ "@istanbuljs/load-nyc-config" "^1.0.0"
+ "@istanbuljs/schema" "^0.1.2"
+ caching-transform "^4.0.0"
+ convert-source-map "^1.7.0"
+ decamelize "^1.2.0"
+ find-cache-dir "^3.2.0"
+ find-up "^4.1.0"
+ foreground-child "^2.0.0"
+ get-package-type "^0.1.0"
+ glob "^7.1.6"
+ istanbul-lib-coverage "^3.0.0"
+ istanbul-lib-hook "^3.0.0"
+ istanbul-lib-instrument "^4.0.0"
+ istanbul-lib-processinfo "^2.0.2"
+ istanbul-lib-report "^3.0.0"
+ istanbul-lib-source-maps "^4.0.0"
+ istanbul-reports "^3.0.2"
+ make-dir "^3.0.0"
+ node-preload "^0.2.1"
+ p-map "^3.0.0"
+ process-on-spawn "^1.0.0"
+ resolve-from "^5.0.0"
+ rimraf "^3.0.0"
+ signal-exit "^3.0.2"
+ spawn-wrap "^2.0.0"
+ test-exclude "^6.0.0"
+ yargs "^15.0.2"
+
oauth-sign@~0.9.0:
version "0.9.0"
- resolved "https://registry.yarnpkg.com/oauth-sign/-/oauth-sign-0.9.0.tgz#47a7b016baa68b5fa0ecf3dee08a85c679ac6455"
+ resolved "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.9.0.tgz"
integrity sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ==
object-assign@^4.0.1, object-assign@^4.1.0:
version "4.1.1"
- resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863"
+ resolved "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz"
integrity sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=
object-copy@^0.1.0:
version "0.1.0"
- resolved "https://registry.yarnpkg.com/object-copy/-/object-copy-0.1.0.tgz#7e7d858b781bd7c991a41ba975ed3812754e998c"
+ resolved "https://registry.npmjs.org/object-copy/-/object-copy-0.1.0.tgz"
integrity sha1-fn2Fi3gb18mRpBupde04EnVOmYw=
dependencies:
copy-descriptor "^0.1.0"
@@ -4552,34 +6902,24 @@ object-copy@^0.1.0:
object-inspect@^1.8.0:
version "1.8.0"
- resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.8.0.tgz#df807e5ecf53a609cc6bfe93eac3cc7be5b3a9d0"
+ resolved "https://registry.npmjs.org/object-inspect/-/object-inspect-1.8.0.tgz"
integrity sha512-jLdtEOB112fORuypAyl/50VRVIBIdVQOSUUGQHzJ4xBSbit81zRarz7GThkEFZy1RceYrWYcPcBFPQwHyAc1gA==
-object-keys@^1.0.11, object-keys@^1.0.12, object-keys@^1.1.1:
+object-keys@^1.0.12, object-keys@^1.1.1:
version "1.1.1"
- resolved "https://registry.yarnpkg.com/object-keys/-/object-keys-1.1.1.tgz#1c47f272df277f3b1daf061677d9c82e2322c60e"
+ resolved "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz"
integrity sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==
object-visit@^1.0.0:
version "1.0.1"
- resolved "https://registry.yarnpkg.com/object-visit/-/object-visit-1.0.1.tgz#f79c4493af0c5377b59fe39d395e41042dd045bb"
+ resolved "https://registry.npmjs.org/object-visit/-/object-visit-1.0.1.tgz"
integrity sha1-95xEk68MU3e1n+OdOV5BBC3QRbs=
dependencies:
isobject "^3.0.0"
-object.assign@4.1.0:
- version "4.1.0"
- resolved "https://registry.yarnpkg.com/object.assign/-/object.assign-4.1.0.tgz#968bf1100d7956bb3ca086f006f846b3bc4008da"
- integrity sha512-exHJeq6kBKj58mqGyTQ9DFvrZC/eR6OwxzoM9YRoGBqrXYonaFyGiFMuc9VZrXf7DarreEwMpurG3dd+CNyW5w==
- dependencies:
- define-properties "^1.1.2"
- function-bind "^1.1.1"
- has-symbols "^1.0.0"
- object-keys "^1.0.11"
-
object.assign@^4.1.1:
version "4.1.1"
- resolved "https://registry.yarnpkg.com/object.assign/-/object.assign-4.1.1.tgz#303867a666cdd41936ecdedfb1f8f3e32a478cdd"
+ resolved "https://registry.npmjs.org/object.assign/-/object.assign-4.1.1.tgz"
integrity sha512-VT/cxmx5yaoHSOTSyrCygIDFco+RsibY2NM0a4RdEeY/4KgqezwFtK1yr3U67xYhqJSlASm2pKhLVzPj2lr4bA==
dependencies:
define-properties "^1.1.3"
@@ -4589,7 +6929,7 @@ object.assign@^4.1.1:
object.getownpropertydescriptors@^2.0.3:
version "2.1.0"
- resolved "https://registry.yarnpkg.com/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.1.0.tgz#369bf1f9592d8ab89d712dced5cb81c7c5352649"
+ resolved "https://registry.npmjs.org/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.1.0.tgz"
integrity sha512-Z53Oah9A3TdLoblT7VKJaTDdXdT+lQO+cNpKVnya5JDe9uLvzu1YyY1yFDFrcxrlRgWrEFH0jJtD/IbuwjcEVg==
dependencies:
define-properties "^1.1.3"
@@ -4597,33 +6937,50 @@ object.getownpropertydescriptors@^2.0.3:
object.pick@^1.3.0:
version "1.3.0"
- resolved "https://registry.yarnpkg.com/object.pick/-/object.pick-1.3.0.tgz#87a10ac4c1694bd2e1cbf53591a66141fb5dd747"
+ resolved "https://registry.npmjs.org/object.pick/-/object.pick-1.3.0.tgz"
integrity sha1-h6EKxMFpS9Lhy/U1kaZhQftd10c=
dependencies:
isobject "^3.0.1"
+obuf@~1.1.2:
+ version "1.1.2"
+ resolved "https://registry.yarnpkg.com/obuf/-/obuf-1.1.2.tgz#09bea3343d41859ebd446292d11c9d4db619084e"
+ integrity sha512-PX1wu0AmAdPqOL1mWhqmlOd8kOIZQwGZw6rh7uby9fTc5lhaOWFLX3I6R1hrF9k3zUY40e6igsLGkDXK92LJNg==
+
octokit-pagination-methods@^1.1.0:
version "1.1.0"
- resolved "https://registry.yarnpkg.com/octokit-pagination-methods/-/octokit-pagination-methods-1.1.0.tgz#cf472edc9d551055f9ef73f6e42b4dbb4c80bea4"
+ resolved "https://registry.npmjs.org/octokit-pagination-methods/-/octokit-pagination-methods-1.1.0.tgz"
integrity sha512-fZ4qZdQ2nxJvtcasX7Ghl+WlWS/d9IgnBIwFZXVNNZUmzpno91SX5bc5vuxiuKoCtK78XxGGNuSCrDC7xYB3OQ==
+ohash@^2.0.10, ohash@^2.0.11:
+ version "2.0.11"
+ resolved "https://registry.yarnpkg.com/ohash/-/ohash-2.0.11.tgz#60b11e8cff62ca9dee88d13747a5baa145f5900b"
+ integrity sha512-RdR9FQrFwNBNXAr4GixM8YaRZRJ5PUWbKYbE5eOsrwAjJW0q2REGcf79oYPsLyskQCZG1PLN+S/K1V00joZAoQ==
+
+okay@^0.3.0:
+ version "0.3.0"
+ resolved "https://registry.yarnpkg.com/okay/-/okay-0.3.0.tgz#de2840310df9805d6c0506d8dbb8d9ba09129d28"
+ integrity sha512-9Jtrbe/gncY/uRSRYD+VbaTiLuDX+Zm6uRg06itpkU82ZDcuOv+sWgRRvQXU3n7ZSHgltWHUw9EFkLsN4nEOeQ==
+ dependencies:
+ sliced "0.0.5"
+
once@1.x, once@^1.3.0, once@^1.3.1, once@^1.4.0:
version "1.4.0"
- resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1"
+ resolved "https://registry.npmjs.org/once/-/once-1.4.0.tgz"
integrity sha1-WDsap3WWHUsROsF9nFC6753Xa9E=
dependencies:
wrappy "1"
onetime@^2.0.0:
version "2.0.1"
- resolved "https://registry.yarnpkg.com/onetime/-/onetime-2.0.1.tgz#067428230fd67443b2794b22bba528b6867962d4"
+ resolved "https://registry.npmjs.org/onetime/-/onetime-2.0.1.tgz"
integrity sha1-BnQoIw/WdEOyeUsiu6UotoZ5YtQ=
dependencies:
mimic-fn "^1.0.0"
optionator@^0.8.1:
version "0.8.3"
- resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.8.3.tgz#84fa1d036fe9d3c7e21d99884b601167ec8fb495"
+ resolved "https://registry.npmjs.org/optionator/-/optionator-0.8.3.tgz"
integrity sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA==
dependencies:
deep-is "~0.1.3"
@@ -4633,26 +6990,26 @@ optionator@^0.8.1:
type-check "~0.3.2"
word-wrap "~1.2.3"
-optionator@^0.9.1:
- version "0.9.1"
- resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.9.1.tgz#4f236a6373dae0566a6d43e1326674f50c291499"
- integrity sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw==
+optionator@^0.9.3:
+ version "0.9.3"
+ resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.9.3.tgz#007397d44ed1872fdc6ed31360190f81814e2c64"
+ integrity sha512-JjCoypp+jKn1ttEFExxhetCKeJt9zhAgAve5FXHixTvFDW/5aEktX9bufBKLRRMdU7bNtpLfcGu94B3cdEJgjg==
dependencies:
+ "@aashutoshrathi/word-wrap" "^1.2.3"
deep-is "^0.1.3"
fast-levenshtein "^2.0.6"
levn "^0.4.1"
prelude-ls "^1.2.1"
type-check "^0.4.0"
- word-wrap "^1.2.3"
os-homedir@^1.0.0:
version "1.0.2"
- resolved "https://registry.yarnpkg.com/os-homedir/-/os-homedir-1.0.2.tgz#ffbc4988336e0e833de0c168c7ef152121aa7fb3"
+ resolved "https://registry.npmjs.org/os-homedir/-/os-homedir-1.0.2.tgz"
integrity sha1-/7xJiDNuDoM94MFox+8VISGqf7M=
os-name@^3.1.0:
version "3.1.0"
- resolved "https://registry.yarnpkg.com/os-name/-/os-name-3.1.0.tgz#dec19d966296e1cd62d701a5a66ee1ddeae70801"
+ resolved "https://registry.npmjs.org/os-name/-/os-name-3.1.0.tgz"
integrity sha512-h8L+8aNjNcMpo/mAIBPn5PXCM16iyPGjHNWo6U1YO8sJTMHtEtyczI6QJnLoplswm6goopQkqc7OAnjhWcugVg==
dependencies:
macos-release "^2.2.0"
@@ -4660,12 +7017,12 @@ os-name@^3.1.0:
os-tmpdir@^1.0.0, os-tmpdir@~1.0.2:
version "1.0.2"
- resolved "https://registry.yarnpkg.com/os-tmpdir/-/os-tmpdir-1.0.2.tgz#bbe67406c79aa85c5cfec766fe5734555dfa1274"
+ resolved "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz"
integrity sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=
osenv@^0.1.4, osenv@^0.1.5:
version "0.1.5"
- resolved "https://registry.yarnpkg.com/osenv/-/osenv-0.1.5.tgz#85cdfafaeb28e8677f416e287592b5f3f49ea410"
+ resolved "https://registry.npmjs.org/osenv/-/osenv-0.1.5.tgz"
integrity sha512-0CWcCECdMVc2Rw3U5w9ZjqX6ga6ubk1xDVKxtBQPK7wis/0F2r9T6k4ydGYhecl7YUBxBVxhL5oisPsNxAPe2g==
dependencies:
os-homedir "^1.0.0"
@@ -4673,98 +7030,134 @@ osenv@^0.1.4, osenv@^0.1.5:
p-finally@^1.0.0:
version "1.0.0"
- resolved "https://registry.yarnpkg.com/p-finally/-/p-finally-1.0.0.tgz#3fbcfb15b899a44123b34b6dcc18b724336a2cae"
+ resolved "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz"
integrity sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4=
p-limit@^1.1.0:
version "1.3.0"
- resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-1.3.0.tgz#b86bd5f0c25690911c7590fcbfc2010d54b3ccb8"
+ resolved "https://registry.npmjs.org/p-limit/-/p-limit-1.3.0.tgz"
integrity sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==
dependencies:
p-try "^1.0.0"
p-limit@^2.0.0, p-limit@^2.2.0:
version "2.3.0"
- resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-2.3.0.tgz#3dd33c647a214fdfffd835933eb086da0dc21db1"
+ resolved "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz"
integrity sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==
dependencies:
p-try "^2.0.0"
+p-limit@^3.0.2:
+ version "3.1.0"
+ resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-3.1.0.tgz#e1daccbe78d0d1388ca18c64fea38e3e57e3706b"
+ integrity sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==
+ dependencies:
+ yocto-queue "^0.1.0"
+
p-locate@^2.0.0:
version "2.0.0"
- resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-2.0.0.tgz#20a0103b222a70c8fd39cc2e580680f3dde5ec43"
+ resolved "https://registry.npmjs.org/p-locate/-/p-locate-2.0.0.tgz"
integrity sha1-IKAQOyIqcMj9OcwuWAaA893l7EM=
dependencies:
p-limit "^1.1.0"
p-locate@^3.0.0:
version "3.0.0"
- resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-3.0.0.tgz#322d69a05c0264b25997d9f40cd8a891ab0064a4"
+ resolved "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz"
integrity sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==
dependencies:
p-limit "^2.0.0"
p-locate@^4.1.0:
version "4.1.0"
- resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-4.1.0.tgz#a3428bb7088b3a60292f66919278b7c297ad4f07"
+ resolved "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz"
integrity sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==
dependencies:
p-limit "^2.2.0"
+p-locate@^5.0.0:
+ version "5.0.0"
+ resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-5.0.0.tgz#83c8315c6785005e3bd021839411c9e110e6d834"
+ integrity sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==
+ dependencies:
+ p-limit "^3.0.2"
+
p-map-series@^1.0.0:
version "1.0.0"
- resolved "https://registry.yarnpkg.com/p-map-series/-/p-map-series-1.0.0.tgz#bf98fe575705658a9e1351befb85ae4c1f07bdca"
+ resolved "https://registry.npmjs.org/p-map-series/-/p-map-series-1.0.0.tgz"
integrity sha1-v5j+V1cFZYqeE1G++4WuTB8Hvco=
dependencies:
p-reduce "^1.0.0"
p-map@^2.1.0:
version "2.1.0"
- resolved "https://registry.yarnpkg.com/p-map/-/p-map-2.1.0.tgz#310928feef9c9ecc65b68b17693018a665cea175"
+ resolved "https://registry.npmjs.org/p-map/-/p-map-2.1.0.tgz"
integrity sha512-y3b8Kpd8OAN444hxfBbFfj1FY/RjtTd8tzYwhUqNYXx0fXx2iX4maP4Qr6qhIKbQXI02wTLAda4fYUbDagTUFw==
+p-map@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/p-map/-/p-map-3.0.0.tgz#d704d9af8a2ba684e2600d9a215983d4141a979d"
+ integrity sha512-d3qXVTF/s+W+CdJ5A29wywV2n8CQQYahlgz2bFiA+4eVNJbHJodPZ+/gXwPGh0bOqA+j8S+6+ckmvLGPk1QpxQ==
+ dependencies:
+ aggregate-error "^3.0.0"
+
+p-map@^7.0.2:
+ version "7.0.3"
+ resolved "https://registry.yarnpkg.com/p-map/-/p-map-7.0.3.tgz#7ac210a2d36f81ec28b736134810f7ba4418cdb6"
+ integrity sha512-VkndIv2fIB99swvQoA65bm+fsmt6UNdGeIB0oxBs+WhAhdh08QA04JXpI7rbB9r08/nkbysKoya9rtDERYOYMA==
+
p-pipe@^1.2.0:
version "1.2.0"
- resolved "https://registry.yarnpkg.com/p-pipe/-/p-pipe-1.2.0.tgz#4b1a11399a11520a67790ee5a0c1d5881d6befe9"
+ resolved "https://registry.npmjs.org/p-pipe/-/p-pipe-1.2.0.tgz"
integrity sha1-SxoROZoRUgpneQ7loMHViB1r7+k=
p-queue@^4.0.0:
version "4.0.0"
- resolved "https://registry.yarnpkg.com/p-queue/-/p-queue-4.0.0.tgz#ed0eee8798927ed6f2c2f5f5b77fdb2061a5d346"
+ resolved "https://registry.npmjs.org/p-queue/-/p-queue-4.0.0.tgz"
integrity sha512-3cRXXn3/O0o3+eVmUroJPSj/esxoEFIm0ZOno/T+NzG/VZgPOqQ8WKmlNqubSEpZmCIngEy34unkHGg83ZIBmg==
dependencies:
eventemitter3 "^3.1.0"
p-reduce@^1.0.0:
version "1.0.0"
- resolved "https://registry.yarnpkg.com/p-reduce/-/p-reduce-1.0.0.tgz#18c2b0dd936a4690a529f8231f58a0fdb6a47dfa"
+ resolved "https://registry.npmjs.org/p-reduce/-/p-reduce-1.0.0.tgz"
integrity sha1-GMKw3ZNqRpClKfgjH1ig/bakffo=
p-try@^1.0.0:
version "1.0.0"
- resolved "https://registry.yarnpkg.com/p-try/-/p-try-1.0.0.tgz#cbc79cdbaf8fd4228e13f621f2b1a237c1b207b3"
+ resolved "https://registry.npmjs.org/p-try/-/p-try-1.0.0.tgz"
integrity sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M=
p-try@^2.0.0:
version "2.2.0"
- resolved "https://registry.yarnpkg.com/p-try/-/p-try-2.2.0.tgz#cb2868540e313d61de58fafbe35ce9004d5540e6"
+ resolved "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz"
integrity sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==
p-waterfall@^1.0.0:
version "1.0.0"
- resolved "https://registry.yarnpkg.com/p-waterfall/-/p-waterfall-1.0.0.tgz#7ed94b3ceb3332782353af6aae11aa9fc235bb00"
+ resolved "https://registry.npmjs.org/p-waterfall/-/p-waterfall-1.0.0.tgz"
integrity sha1-ftlLPOszMngjU69qrhGqn8I1uwA=
dependencies:
p-reduce "^1.0.0"
-packet-reader@1.0.0:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/packet-reader/-/packet-reader-1.0.0.tgz#9238e5480dedabacfe1fe3f2771063f164157d74"
- integrity sha512-HAKu/fG3HpHFO0AA8WE8q2g+gBJaZ9MG7fcKk+IJPLTGAD6Psw4443l+9DGRbOIh3/aXr7Phy0TjilYivJo5XQ==
+package-hash@^4.0.0:
+ version "4.0.0"
+ resolved "https://registry.yarnpkg.com/package-hash/-/package-hash-4.0.0.tgz#3537f654665ec3cc38827387fc904c163c54f506"
+ integrity sha512-whdkPIooSu/bASggZ96BWVvZTRMOFxnyUG5PnTSGKoJE2gd5mbVNmR2Nj20QFzxYYgAXpoqC+AiXzl+UMRh7zQ==
+ dependencies:
+ graceful-fs "^4.1.15"
+ hasha "^5.0.0"
+ lodash.flattendeep "^4.4.0"
+ release-zalgo "^1.0.0"
+
+package-json-from-dist@^1.0.0:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/package-json-from-dist/-/package-json-from-dist-1.0.1.tgz#4f1471a010827a86f94cfd9b0727e36d267de505"
+ integrity sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw==
parallel-transform@^1.1.0:
version "1.2.0"
- resolved "https://registry.yarnpkg.com/parallel-transform/-/parallel-transform-1.2.0.tgz#9049ca37d6cb2182c3b1d2c720be94d14a5814fc"
+ resolved "https://registry.npmjs.org/parallel-transform/-/parallel-transform-1.2.0.tgz"
integrity sha512-P2vSmIu38uIlvdcU7fDkyrxj33gTUy/ABO5ZUbGowxNCopBq/OoD42bP4UmMrJoPyk4Uqf0mu3mtWBhHCZD8yg==
dependencies:
cyclist "^1.0.1"
@@ -4780,19 +7173,19 @@ parent-module@^1.0.0:
parse-github-repo-url@^1.3.0:
version "1.4.1"
- resolved "https://registry.yarnpkg.com/parse-github-repo-url/-/parse-github-repo-url-1.4.1.tgz#9e7d8bb252a6cb6ba42595060b7bf6df3dbc1f50"
+ resolved "https://registry.npmjs.org/parse-github-repo-url/-/parse-github-repo-url-1.4.1.tgz"
integrity sha1-nn2LslKmy2ukJZUGC3v23z28H1A=
parse-json@^2.2.0:
version "2.2.0"
- resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-2.2.0.tgz#f480f40434ef80741f8469099f8dea18f55a4dc9"
+ resolved "https://registry.npmjs.org/parse-json/-/parse-json-2.2.0.tgz"
integrity sha1-9ID0BDTvgHQfhGkJn43qGPVaTck=
dependencies:
error-ex "^1.2.0"
parse-json@^4.0.0:
version "4.0.0"
- resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-4.0.0.tgz#be35f5425be1f7f6c747184f98a788cb99477ee0"
+ resolved "https://registry.npmjs.org/parse-json/-/parse-json-4.0.0.tgz"
integrity sha1-vjX1Qlvh9/bHRxhPmKeIy5lHfuA=
dependencies:
error-ex "^1.3.1"
@@ -4800,7 +7193,7 @@ parse-json@^4.0.0:
parse-json@^5.0.0:
version "5.1.0"
- resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-5.1.0.tgz#f96088cdf24a8faa9aea9a009f2d9d942c999646"
+ resolved "https://registry.npmjs.org/parse-json/-/parse-json-5.1.0.tgz"
integrity sha512-+mi/lmVVNKFNVyLXV31ERiy2CY5E1/F6QtJFEzoChPRwwngMNXRDQ9GJ5WdE2Z2P4AujsOi0/+2qHID68KwfIQ==
dependencies:
"@babel/code-frame" "^7.0.0"
@@ -4810,7 +7203,7 @@ parse-json@^5.0.0:
parse-path@^4.0.0:
version "4.0.2"
- resolved "https://registry.yarnpkg.com/parse-path/-/parse-path-4.0.2.tgz#ef14f0d3d77bae8dd4bc66563a4c151aac9e65aa"
+ resolved "https://registry.npmjs.org/parse-path/-/parse-path-4.0.2.tgz"
integrity sha512-HSqVz6iuXSiL8C1ku5Gl1Z5cwDd9Wo0q8CoffdAghP6bz8pJa1tcMC+m4N+z6VAS8QdksnIGq1TB6EgR4vPR6w==
dependencies:
is-ssh "^1.3.0"
@@ -4818,7 +7211,7 @@ parse-path@^4.0.0:
parse-url@^5.0.0:
version "5.0.2"
- resolved "https://registry.yarnpkg.com/parse-url/-/parse-url-5.0.2.tgz#856a3be1fcdf78dc93fc8b3791f169072d898b59"
+ resolved "https://registry.npmjs.org/parse-url/-/parse-url-5.0.2.tgz"
integrity sha512-Czj+GIit4cdWtxo3ISZCvLiUjErSo0iI3wJ+q9Oi3QuMYTI6OZu+7cewMWZ+C1YAnKhYTk6/TLuhIgCypLthPA==
dependencies:
is-ssh "^1.3.0"
@@ -4828,54 +7221,67 @@ parse-url@^5.0.0:
pascalcase@^0.1.1:
version "0.1.1"
- resolved "https://registry.yarnpkg.com/pascalcase/-/pascalcase-0.1.1.tgz#b363e55e8006ca6fe21784d2db22bd15d7917f14"
+ resolved "https://registry.npmjs.org/pascalcase/-/pascalcase-0.1.1.tgz"
integrity sha1-s2PlXoAGym/iF4TS2yK9FdeRfxQ=
path-dirname@^1.0.0:
version "1.0.2"
- resolved "https://registry.yarnpkg.com/path-dirname/-/path-dirname-1.0.2.tgz#cc33d24d525e099a5388c0336c6e32b9160609e0"
+ resolved "https://registry.npmjs.org/path-dirname/-/path-dirname-1.0.2.tgz"
integrity sha1-zDPSTVJeCZpTiMAzbG4yuRYGCeA=
path-exists@^2.0.0:
version "2.1.0"
- resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-2.1.0.tgz#0feb6c64f0fc518d9a754dd5efb62c7022761f4b"
+ resolved "https://registry.npmjs.org/path-exists/-/path-exists-2.1.0.tgz"
integrity sha1-D+tsZPD8UY2adU3V77YscCJ2H0s=
dependencies:
pinkie-promise "^2.0.0"
path-exists@^3.0.0:
version "3.0.0"
- resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-3.0.0.tgz#ce0ebeaa5f78cb18925ea7d810d7b59b010fd515"
+ resolved "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz"
integrity sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=
path-exists@^4.0.0:
version "4.0.0"
- resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-4.0.0.tgz#513bdbe2d3b95d7762e8c1137efa195c6c61b5b3"
+ resolved "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz"
integrity sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==
path-is-absolute@^1.0.0:
version "1.0.1"
- resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f"
+ resolved "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz"
integrity sha1-F0uSaHNVNP+8es5r9TpanhtcX18=
path-key@^2.0.0, path-key@^2.0.1:
version "2.0.1"
- resolved "https://registry.yarnpkg.com/path-key/-/path-key-2.0.1.tgz#411cadb574c5a140d3a4b1910d40d80cc9f40b40"
+ resolved "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz"
integrity sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=
path-key@^3.1.0:
version "3.1.1"
- resolved "https://registry.yarnpkg.com/path-key/-/path-key-3.1.1.tgz#581f6ade658cbba65a0d3380de7753295054f375"
+ resolved "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz"
integrity sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==
-path-parse@^1.0.6:
+path-parse@^1.0.6, path-parse@^1.0.7:
version "1.0.7"
- resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.7.tgz#fbc114b60ca42b30d9daf5858e4bd68bbedb6735"
+ resolved "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz"
integrity sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==
+path-scurry@^1.11.1:
+ version "1.11.1"
+ resolved "https://registry.yarnpkg.com/path-scurry/-/path-scurry-1.11.1.tgz#7960a668888594a0720b12a911d1a742ab9f11d2"
+ integrity sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==
+ dependencies:
+ lru-cache "^10.2.0"
+ minipass "^5.0.0 || ^6.0.2 || ^7.0.0"
+
+path-to-regexp@6.3.0:
+ version "6.3.0"
+ resolved "https://registry.yarnpkg.com/path-to-regexp/-/path-to-regexp-6.3.0.tgz#2b6a26a337737a8e1416f9272ed0766b1c0389f4"
+ integrity sha512-Yhpw4T9C6hPpgPeA28us07OJeqZ5EzQTkbfwuhsUg0c237RomFoETJgmp2sa3F/41gfLE6G5cqcYwznmeEeOlQ==
+
path-type@^1.0.0:
version "1.1.0"
- resolved "https://registry.yarnpkg.com/path-type/-/path-type-1.1.0.tgz#59c44f7ee491da704da415da5a4070ba4f8fe441"
+ resolved "https://registry.npmjs.org/path-type/-/path-type-1.1.0.tgz"
integrity sha1-WcRPfuSR2nBNpBXaWkBwuk+P5EE=
dependencies:
graceful-fs "^4.1.2"
@@ -4884,44 +7290,49 @@ path-type@^1.0.0:
path-type@^3.0.0:
version "3.0.0"
- resolved "https://registry.yarnpkg.com/path-type/-/path-type-3.0.0.tgz#cef31dc8e0a1a3bb0d105c0cd97cf3bf47f4e36f"
+ resolved "https://registry.npmjs.org/path-type/-/path-type-3.0.0.tgz"
integrity sha512-T2ZUsdZFHgA3u4e5PfPbjd7HDDpxPnQb5jN0SrDsjNSuVXHJqtwTnWqG0B1jZrgmJ/7lj1EmVIByWt1gxGkWvg==
dependencies:
pify "^3.0.0"
-path-type@^4.0.0:
- version "4.0.0"
- resolved "https://registry.yarnpkg.com/path-type/-/path-type-4.0.0.tgz#84ed01c0a7ba380afe09d90a8c180dcd9d03043b"
- integrity sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==
+pathe@^2.0.3:
+ version "2.0.3"
+ resolved "https://registry.yarnpkg.com/pathe/-/pathe-2.0.3.tgz#3ecbec55421685b70a9da872b2cff3e1cbed1716"
+ integrity sha512-WUjGcAqP1gQacoQe+OBJsFA7Ld4DyXuUIjZ5cc75cLHvJ7dtNsTugphxIADwspS+AraAUePCKrSVtPLFj/F88w==
pathval@^1.1.1:
version "1.1.1"
- resolved "https://registry.yarnpkg.com/pathval/-/pathval-1.1.1.tgz#8534e77a77ce7ac5a2512ea21e0fdb8fcf6c3d8d"
+ resolved "https://registry.npmjs.org/pathval/-/pathval-1.1.1.tgz"
integrity sha512-Dp6zGqpTdETdR63lehJYPeIOqpiNBNtc7BpWSLrOje7UaIsE5aY92r/AunQA7rsXvet3lrJ3JnZX29UPTKXyKQ==
+pathval@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/pathval/-/pathval-2.0.0.tgz#7e2550b422601d4f6b8e26f1301bc8f15a741a25"
+ integrity sha512-vE7JKRyES09KiunauX7nd2Q9/L7lhok4smP9RZTDeD4MVs72Dp2qNFVz39Nz5a0FVEW0BJR6C0DYrq6unoziZA==
+
performance-now@^2.1.0:
version "2.1.0"
- resolved "https://registry.yarnpkg.com/performance-now/-/performance-now-2.1.0.tgz#6309f4e0e5fa913ec1c69307ae364b4b377c9e7b"
+ resolved "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz"
integrity sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns=
pg-copy-streams@0.3.0:
version "0.3.0"
- resolved "https://registry.yarnpkg.com/pg-copy-streams/-/pg-copy-streams-0.3.0.tgz#a4fbc2a3b788d4e9da6f77ceb35422d8d7043b7f"
+ resolved "https://registry.npmjs.org/pg-copy-streams/-/pg-copy-streams-0.3.0.tgz"
integrity sha1-pPvCo7eI1Onab3fOs1Qi2NcEO38=
-pg-cursor@^1.3.0:
- version "1.3.0"
- resolved "https://registry.yarnpkg.com/pg-cursor/-/pg-cursor-1.3.0.tgz#b220f1908976b7b40daa373c7ada5fca823ab0d9"
- integrity sha1-siDxkIl2t7QNqjc8etpfyoI6sNk=
-
pg-int8@1.0.1:
version "1.0.1"
- resolved "https://registry.yarnpkg.com/pg-int8/-/pg-int8-1.0.1.tgz#943bd463bf5b71b4170115f80f8efc9a0c0eb78c"
+ resolved "https://registry.npmjs.org/pg-int8/-/pg-int8-1.0.1.tgz"
integrity sha512-WCtabS6t3c8SkpDBUlb1kjOs7l66xsGdKpIPZsg4wR+B3+u9UAum2odSsF9tnvxg80h4ZxLWMy4pRjOsFIqQpw==
-pg-types@^2.1.0:
+pg-numeric@1.0.2:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/pg-numeric/-/pg-numeric-1.0.2.tgz#816d9a44026086ae8ae74839acd6a09b0636aa3a"
+ integrity sha512-BM/Thnrw5jm2kKLE5uJkXqqExRUY/toLHda65XgFTBTFYZyopbKjBe29Ii3RbkvlsMoFwD+tHeGaCjjv0gHlyw==
+
+pg-types@2.2.0:
version "2.2.0"
- resolved "https://registry.yarnpkg.com/pg-types/-/pg-types-2.2.0.tgz#2d0250d636454f7cfa3b6ae0382fdfa8063254a3"
+ resolved "https://registry.npmjs.org/pg-types/-/pg-types-2.2.0.tgz"
integrity sha512-qTAAlrEsl8s4OiEQY69wDvcMIdQN6wdz5ojQiOy6YRMuynxenON0O5oCpJI6lshc6scgAY8qvJ2On/p+CXY0GA==
dependencies:
pg-int8 "1.0.1"
@@ -4930,161 +7341,237 @@ pg-types@^2.1.0:
postgres-date "~1.0.4"
postgres-interval "^1.1.0"
-pgpass@1.x:
+pg-types@^4.0.1:
+ version "4.0.2"
+ resolved "https://registry.yarnpkg.com/pg-types/-/pg-types-4.0.2.tgz#399209a57c326f162461faa870145bb0f918b76d"
+ integrity sha512-cRL3JpS3lKMGsKaWndugWQoLOCoP+Cic8oseVcbr0qhPzYD5DWXK+RZ9LY9wxRf7RQia4SCwQlXk0q6FCPrVng==
+ dependencies:
+ pg-int8 "1.0.1"
+ pg-numeric "1.0.2"
+ postgres-array "~3.0.1"
+ postgres-bytea "~3.0.0"
+ postgres-date "~2.1.0"
+ postgres-interval "^3.0.0"
+ postgres-range "^1.1.1"
+
+pgpass@1.0.5:
version "1.0.5"
resolved "https://registry.yarnpkg.com/pgpass/-/pgpass-1.0.5.tgz#9b873e4a564bb10fa7a7dbd55312728d422a223d"
integrity sha512-FdW9r/jQZhSeohs1Z3sI1yxFQNFvMcnmfuj4WBMUTxOrAyLMaTcE1aAMBiTlbMNaXvBCQuVi0R7hd8udDSP7ug==
dependencies:
split2 "^4.1.0"
-picomatch@^2.0.4, picomatch@^2.0.5, picomatch@^2.2.1:
- version "2.2.2"
- resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.2.2.tgz#21f333e9b6b8eaff02468f5146ea406d345f4dad"
- integrity sha512-q0M/9eZHzmr0AulXyPwNfZjtwZ/RBZlbN3K3CErVrk50T2ASYI7Bye0EvekFY3IP1Nt2DHu0re+V2ZHIpMkuWg==
+picocolors@^1.1.1:
+ version "1.1.1"
+ resolved "https://registry.yarnpkg.com/picocolors/-/picocolors-1.1.1.tgz#3d321af3eab939b083c8f929a1d12cda81c26b6b"
+ integrity sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==
-picomatch@^2.3.1:
- version "2.3.1"
- resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.3.1.tgz#3ba3833733646d9d3e4995946c1365a67fb07a42"
- integrity sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==
+picomatch@^4.0.2, picomatch@^4.0.3:
+ version "4.0.3"
+ resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-4.0.3.tgz#796c76136d1eead715db1e7bad785dedd695a042"
+ integrity sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==
pify@^2.0.0, pify@^2.3.0:
version "2.3.0"
- resolved "https://registry.yarnpkg.com/pify/-/pify-2.3.0.tgz#ed141a6ac043a849ea588498e7dca8b15330e90c"
+ resolved "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz"
integrity sha1-7RQaasBDqEnqWISY59yosVMw6Qw=
pify@^3.0.0:
version "3.0.0"
- resolved "https://registry.yarnpkg.com/pify/-/pify-3.0.0.tgz#e5a4acd2c101fdf3d9a4d07f0dbc4db49dd28176"
+ resolved "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz"
integrity sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=
pify@^4.0.1:
version "4.0.1"
- resolved "https://registry.yarnpkg.com/pify/-/pify-4.0.1.tgz#4b2cd25c50d598735c50292224fd8c6df41e3231"
+ resolved "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz"
integrity sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==
pinkie-promise@^2.0.0:
version "2.0.1"
- resolved "https://registry.yarnpkg.com/pinkie-promise/-/pinkie-promise-2.0.1.tgz#2135d6dfa7a358c069ac9b178776288228450ffa"
+ resolved "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz"
integrity sha1-ITXW36ejWMBprJsXh3YogihFD/o=
dependencies:
pinkie "^2.0.0"
pinkie@^2.0.0:
version "2.0.4"
- resolved "https://registry.yarnpkg.com/pinkie/-/pinkie-2.0.4.tgz#72556b80cfa0d48a974e80e77248e80ed4f7f870"
+ resolved "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz"
integrity sha1-clVrgM+g1IqXToDnckjoDtT3+HA=
pkg-dir@^3.0.0:
version "3.0.0"
- resolved "https://registry.yarnpkg.com/pkg-dir/-/pkg-dir-3.0.0.tgz#2749020f239ed990881b1f71210d51eb6523bea3"
+ resolved "https://registry.npmjs.org/pkg-dir/-/pkg-dir-3.0.0.tgz"
integrity sha512-/E57AYkoeQ25qkxMj5PBOVgF8Kiu/h7cYS30Z5+R7WaiCCBfLq58ZI/dSeaEKb9WVJV5n/03QwrN3IeWIFllvw==
dependencies:
find-up "^3.0.0"
+pkg-dir@^4.1.0, pkg-dir@^4.2.0:
+ version "4.2.0"
+ resolved "https://registry.yarnpkg.com/pkg-dir/-/pkg-dir-4.2.0.tgz#f099133df7ede422e81d1d8448270eeb3e4261f3"
+ integrity sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==
+ dependencies:
+ find-up "^4.0.0"
+
posix-character-classes@^0.1.0:
version "0.1.1"
- resolved "https://registry.yarnpkg.com/posix-character-classes/-/posix-character-classes-0.1.1.tgz#01eac0fe3b5af71a2a6c02feabb8c1fef7e00eab"
+ resolved "https://registry.npmjs.org/posix-character-classes/-/posix-character-classes-0.1.1.tgz"
integrity sha1-AerA/jta9xoqbAL+q7jB/vfgDqs=
+postcss@^8.5.3, postcss@^8.5.6:
+ version "8.5.6"
+ resolved "https://registry.yarnpkg.com/postcss/-/postcss-8.5.6.tgz#2825006615a619b4f62a9e7426cc120b349a8f3c"
+ integrity sha512-3Ybi1tAuwAP9s0r1UQ2J4n5Y0G05bJkpUIO0/bI9MhwmD70S5aTWbXGBwxHrelT+XM1k6dM0pk+SwNkpTRN7Pg==
+ dependencies:
+ nanoid "^3.3.11"
+ picocolors "^1.1.1"
+ source-map-js "^1.2.1"
+
postgres-array@~2.0.0:
version "2.0.0"
- resolved "https://registry.yarnpkg.com/postgres-array/-/postgres-array-2.0.0.tgz#48f8fce054fbc69671999329b8834b772652d82e"
+ resolved "https://registry.npmjs.org/postgres-array/-/postgres-array-2.0.0.tgz"
integrity sha512-VpZrUqU5A69eQyW2c5CA1jtLecCsN2U/bD6VilrFDWq5+5UIEVO7nazS3TEcHf1zuPYO/sqGvUvW62g86RXZuA==
+postgres-array@~3.0.1:
+ version "3.0.4"
+ resolved "https://registry.yarnpkg.com/postgres-array/-/postgres-array-3.0.4.tgz#4efcaf4d2c688d8bcaa8620ed13f35f299f7528c"
+ integrity sha512-nAUSGfSDGOaOAEGwqsRY27GPOea7CNipJPOA7lPbdEpx5Kg3qzdP0AaWC5MlhTWV9s4hFX39nomVZ+C4tnGOJQ==
+
postgres-bytea@~1.0.0:
version "1.0.0"
- resolved "https://registry.yarnpkg.com/postgres-bytea/-/postgres-bytea-1.0.0.tgz#027b533c0aa890e26d172d47cf9ccecc521acd35"
+ resolved "https://registry.npmjs.org/postgres-bytea/-/postgres-bytea-1.0.0.tgz"
integrity sha1-AntTPAqokOJtFy1Hz5zOzFIazTU=
+postgres-bytea@~3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/postgres-bytea/-/postgres-bytea-3.0.0.tgz#9048dc461ac7ba70a6a42d109221619ecd1cb089"
+ integrity sha512-CNd4jim9RFPkObHSjVHlVrxoVQXz7quwNFpz7RY1okNNme49+sVyiTvTRobiLV548Hx/hb1BG+iE7h9493WzFw==
+ dependencies:
+ obuf "~1.1.2"
+
postgres-date@~1.0.4:
version "1.0.7"
- resolved "https://registry.yarnpkg.com/postgres-date/-/postgres-date-1.0.7.tgz#51bc086006005e5061c591cee727f2531bf641a8"
+ resolved "https://registry.npmjs.org/postgres-date/-/postgres-date-1.0.7.tgz"
integrity sha512-suDmjLVQg78nMK2UZ454hAG+OAW+HQPZ6n++TNDUX+L0+uUlLywnoxJKDou51Zm+zTCjrCl0Nq6J9C5hP9vK/Q==
+postgres-date@~2.1.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/postgres-date/-/postgres-date-2.1.0.tgz#b85d3c1fb6fb3c6c8db1e9942a13a3bf625189d0"
+ integrity sha512-K7Juri8gtgXVcDfZttFKVmhglp7epKb1K4pgrkLxehjqkrgPhfG6OO8LHLkfaqkbpjNRnra018XwAr1yQFWGcA==
+
postgres-interval@^1.1.0:
version "1.2.0"
- resolved "https://registry.yarnpkg.com/postgres-interval/-/postgres-interval-1.2.0.tgz#b460c82cb1587507788819a06aa0fffdb3544695"
+ resolved "https://registry.npmjs.org/postgres-interval/-/postgres-interval-1.2.0.tgz"
integrity sha512-9ZhXKM/rw350N1ovuWHbGxnGh/SNJ4cnxHiM0rxE4VN41wsg8P8zWn9hv/buK00RP4WvlOyr/RBDiptyxVbkZQ==
dependencies:
xtend "^4.0.0"
+postgres-interval@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/postgres-interval/-/postgres-interval-3.0.0.tgz#baf7a8b3ebab19b7f38f07566c7aab0962f0c86a"
+ integrity sha512-BSNDnbyZCXSxgA+1f5UU2GmwhoI0aU5yMxRGO8CdFEcY2BQF9xm/7MqKnYoM1nJDk8nONNWDk9WeSmePFhQdlw==
+
+postgres-range@^1.1.1:
+ version "1.1.4"
+ resolved "https://registry.yarnpkg.com/postgres-range/-/postgres-range-1.1.4.tgz#a59c5f9520909bcec5e63e8cf913a92e4c952863"
+ integrity sha512-i/hbxIE9803Alj/6ytL7UHQxRvZkI9O4Sy+J3HGc4F4oo/2eQAjTSNJ0bfxyse3bH0nuVesCk+3IRLaMtG3H6w==
+
prelude-ls@^1.2.1:
version "1.2.1"
- resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.2.1.tgz#debc6489d7a6e6b0e7611888cec880337d316396"
+ resolved "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz"
integrity sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==
prelude-ls@~1.1.2:
version "1.1.2"
- resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.1.2.tgz#21932a549f5e52ffd9a827f570e04be62a97da54"
+ resolved "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz"
integrity sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ=
-prettier-linter-helpers@^1.0.0:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/prettier-linter-helpers/-/prettier-linter-helpers-1.0.0.tgz#d23d41fe1375646de2d0104d3454a3008802cf7b"
- integrity sha512-GbK2cP9nraSSUF9N2XwUwqfzlAFlMNYYl+ShE/V+H8a9uNl/oUqB1w2EL54Jh0OlyRSd8RfWYJ3coVS4TROP2w==
+prettier-linter-helpers@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/prettier-linter-helpers/-/prettier-linter-helpers-1.0.1.tgz#6a31f88a4bad6c7adda253de12ba4edaea80ebcd"
+ integrity sha512-SxToR7P8Y2lWmv/kTzVLC1t/GDI2WGjMwNhLLE9qtH8Q13C+aEmuRlzDst4Up4s0Wc8sF2M+J57iB3cMLqftfg==
dependencies:
fast-diff "^1.1.2"
-prettier@2.7.1:
- version "2.7.1"
- resolved "https://registry.yarnpkg.com/prettier/-/prettier-2.7.1.tgz#e235806850d057f97bb08368a4f7d899f7760c64"
- integrity sha512-ujppO+MkdPqoVINuDFDRLClm7D78qbDt0/NR+wp5FqEZOoTNAjPHWj17QRhu7geIHJfcNhRk1XVQmF8Bp3ye+g==
+prettier@3.0.3:
+ version "3.0.3"
+ resolved "https://registry.yarnpkg.com/prettier/-/prettier-3.0.3.tgz#432a51f7ba422d1469096c0fdc28e235db8f9643"
+ integrity sha512-L/4pUDMxcNa8R/EthV08Zt42WBO4h1rarVtK0K+QJG0X187OLo7l699jWw0GKuwzkPQ//jMFA/8Xm6Fh3J/DAg==
+
+printable-characters@^1.0.42:
+ version "1.0.42"
+ resolved "https://registry.yarnpkg.com/printable-characters/-/printable-characters-1.0.42.tgz#3f18e977a9bd8eb37fcc4ff5659d7be90868b3d8"
+ integrity sha512-dKp+C4iXWK4vVYZmYSd0KBH5F/h1HoZRsbJ82AVKRO3PEo8L4lBS/vLwhVtpwwuYcoIsVY+1JYKR268yn480uQ==
+
+proc-log@^5.0.0:
+ version "5.0.0"
+ resolved "https://registry.yarnpkg.com/proc-log/-/proc-log-5.0.0.tgz#e6c93cf37aef33f835c53485f314f50ea906a9d8"
+ integrity sha512-Azwzvl90HaF0aCz1JrDdXQykFakSSNPaPoiZ9fm5qJIMHioDZEi7OAdRwSm6rSoPtY3Qutnm3L7ogmg3dc+wbQ==
process-nextick-args@~2.0.0:
version "2.0.1"
- resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-2.0.1.tgz#7820d9b16120cc55ca9ae7792680ae7dba6d7fe2"
+ resolved "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz"
integrity sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==
-progress@^2.0.0:
- version "2.0.3"
- resolved "https://registry.yarnpkg.com/progress/-/progress-2.0.3.tgz#7e8cf8d8f5b8f239c1bc68beb4eb78567d572ef8"
- integrity sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==
+process-on-spawn@^1.0.0:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/process-on-spawn/-/process-on-spawn-1.1.0.tgz#9d5999ba87b3bf0a8acb05322d69f2f5aa4fb763"
+ integrity sha512-JOnOPQ/8TZgjs1JIH/m9ni7FfimjNa/PRx7y/Wb5qdItsnhO0jE4AT7fC0HjC28DUQWDr50dwSYZLdRMlqDq3Q==
+ dependencies:
+ fromentries "^1.2.0"
promise-inflight@^1.0.1:
version "1.0.1"
- resolved "https://registry.yarnpkg.com/promise-inflight/-/promise-inflight-1.0.1.tgz#98472870bf228132fcbdd868129bad12c3c029e3"
+ resolved "https://registry.npmjs.org/promise-inflight/-/promise-inflight-1.0.1.tgz"
integrity sha1-mEcocL8igTL8vdhoEputEsPAKeM=
promise-retry@^1.1.1:
version "1.1.1"
- resolved "https://registry.yarnpkg.com/promise-retry/-/promise-retry-1.1.1.tgz#6739e968e3051da20ce6497fb2b50f6911df3d6d"
+ resolved "https://registry.npmjs.org/promise-retry/-/promise-retry-1.1.1.tgz"
integrity sha1-ZznpaOMFHaIM5kl/srUPaRHfPW0=
dependencies:
err-code "^1.0.0"
retry "^0.10.0"
+promise-retry@^2.0.1:
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/promise-retry/-/promise-retry-2.0.1.tgz#ff747a13620ab57ba688f5fc67855410c370da22"
+ integrity sha512-y+WKFlBR8BGXnsNlIHFGPZmyDf3DFMoLhaflAnyZgV6rG6xu+JwesTo2Q9R6XwYmtmwAFCkAk3e35jEdoeh/3g==
+ dependencies:
+ err-code "^2.0.2"
+ retry "^0.12.0"
+
promzard@^0.3.0:
version "0.3.0"
- resolved "https://registry.yarnpkg.com/promzard/-/promzard-0.3.0.tgz#26a5d6ee8c7dee4cb12208305acfb93ba382a9ee"
+ resolved "https://registry.npmjs.org/promzard/-/promzard-0.3.0.tgz"
integrity sha1-JqXW7ox97kyxIggwWs+5O6OCqe4=
dependencies:
read "1"
proto-list@~1.2.1:
version "1.2.4"
- resolved "https://registry.yarnpkg.com/proto-list/-/proto-list-1.2.4.tgz#212d5bfe1318306a420f6402b8e26ff39647a849"
+ resolved "https://registry.npmjs.org/proto-list/-/proto-list-1.2.4.tgz"
integrity sha1-IS1b/hMYMGpCD2QCuOJv85ZHqEk=
protocols@^1.1.0, protocols@^1.4.0:
version "1.4.8"
- resolved "https://registry.yarnpkg.com/protocols/-/protocols-1.4.8.tgz#48eea2d8f58d9644a4a32caae5d5db290a075ce8"
+ resolved "https://registry.npmjs.org/protocols/-/protocols-1.4.8.tgz"
integrity sha512-IgjKyaUSjsROSO8/D49Ab7hP8mJgTYcqApOqdPhLoPxAplXmkp+zRvsrSQjFn5by0rhm4VH0GAUELIPpx7B1yg==
protoduck@^5.0.1:
version "5.0.1"
- resolved "https://registry.yarnpkg.com/protoduck/-/protoduck-5.0.1.tgz#03c3659ca18007b69a50fd82a7ebcc516261151f"
+ resolved "https://registry.npmjs.org/protoduck/-/protoduck-5.0.1.tgz"
integrity sha512-WxoCeDCoCBY55BMvj4cAEjdVUFGRWed9ZxPlqTKYyw1nDDTQ4pqmnIMAGfJlg7Dx35uB/M+PHJPTmGOvaCaPTg==
dependencies:
genfun "^5.0.0"
psl@^1.1.28:
version "1.8.0"
- resolved "https://registry.yarnpkg.com/psl/-/psl-1.8.0.tgz#9326f8bcfb013adcc005fdff056acce020e51c24"
+ resolved "https://registry.npmjs.org/psl/-/psl-1.8.0.tgz"
integrity sha512-RIdOzyoavK+hA18OGGWDqUTsCLhtA7IcZ/6NCs4fFJaHBDab+pDDmDIByWFRQJq2Cd7r1OoQxBGKOaztq+hjIQ==
pump@^2.0.0:
version "2.0.1"
- resolved "https://registry.yarnpkg.com/pump/-/pump-2.0.1.tgz#12399add6e4cf7526d973cbc8b5ce2e2908b3909"
+ resolved "https://registry.npmjs.org/pump/-/pump-2.0.1.tgz"
integrity sha512-ruPMNRkN3MHP1cWJc9OWr+T/xDP0jhXYCLfJcBuX54hhfIBnaQmAUMfDcG4DM5UMWByBbJY69QSphm3jtDKIkA==
dependencies:
end-of-stream "^1.1.0"
@@ -5092,7 +7579,7 @@ pump@^2.0.0:
pump@^3.0.0:
version "3.0.0"
- resolved "https://registry.yarnpkg.com/pump/-/pump-3.0.0.tgz#b4a2116815bde2f4e1ea602354e8c75565107a64"
+ resolved "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz"
integrity sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==
dependencies:
end-of-stream "^1.1.0"
@@ -5100,7 +7587,7 @@ pump@^3.0.0:
pumpify@^1.3.3:
version "1.5.1"
- resolved "https://registry.yarnpkg.com/pumpify/-/pumpify-1.5.1.tgz#36513be246ab27570b1a374a5ce278bfd74370ce"
+ resolved "https://registry.npmjs.org/pumpify/-/pumpify-1.5.1.tgz"
integrity sha512-oClZI37HvuUJJxSKKrC17bZ9Cu0ZYhEAGPsPUy9KlMUmv9dKX2o77RUmq7f3XjIxbwyGwYzbzQ1L2Ks8sIradQ==
dependencies:
duplexify "^3.6.0"
@@ -5109,39 +7596,46 @@ pumpify@^1.3.3:
punycode@^2.1.0, punycode@^2.1.1:
version "2.1.1"
- resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.1.1.tgz#b58b010ac40c22c5657616c8d2c2c02c7bf479ec"
+ resolved "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz"
integrity sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==
q@^1.5.1:
version "1.5.1"
- resolved "https://registry.yarnpkg.com/q/-/q-1.5.1.tgz#7e32f75b41381291d04611f1bf14109ac00651d7"
+ resolved "https://registry.npmjs.org/q/-/q-1.5.1.tgz"
integrity sha1-fjL3W0E4EpHQRhHxvxQQmsAGUdc=
qs@~6.5.2:
version "6.5.2"
- resolved "https://registry.yarnpkg.com/qs/-/qs-6.5.2.tgz#cb3ae806e8740444584ef154ce8ee98d403f3e36"
+ resolved "https://registry.npmjs.org/qs/-/qs-6.5.2.tgz"
integrity sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA==
quick-lru@^1.0.0:
version "1.1.0"
- resolved "https://registry.yarnpkg.com/quick-lru/-/quick-lru-1.1.0.tgz#4360b17c61136ad38078397ff11416e186dcfbb8"
+ resolved "https://registry.npmjs.org/quick-lru/-/quick-lru-1.1.0.tgz"
integrity sha1-Q2CxfGETatOAeDl/8RQW4Ybc+7g=
quick-lru@^4.0.1:
version "4.0.1"
- resolved "https://registry.yarnpkg.com/quick-lru/-/quick-lru-4.0.1.tgz#5b8878f113a58217848c6482026c73e1ba57727f"
+ resolved "https://registry.npmjs.org/quick-lru/-/quick-lru-4.0.1.tgz"
integrity sha512-ARhCpm70fzdcvNQfPoy49IaanKkTlRWF2JMzqhcJbhSFRZv7nPTvZJdcY7301IPmvW+/p0RgIWnQDLJxifsQ7g==
+randombytes@^2.1.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/randombytes/-/randombytes-2.1.0.tgz#df6f84372f0270dc65cdf6291349ab7a473d4f2a"
+ integrity sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==
+ dependencies:
+ safe-buffer "^5.1.0"
+
read-cmd-shim@^1.0.1:
version "1.0.5"
- resolved "https://registry.yarnpkg.com/read-cmd-shim/-/read-cmd-shim-1.0.5.tgz#87e43eba50098ba5a32d0ceb583ab8e43b961c16"
+ resolved "https://registry.npmjs.org/read-cmd-shim/-/read-cmd-shim-1.0.5.tgz"
integrity sha512-v5yCqQ/7okKoZZkBQUAfTsQ3sVJtXdNfbPnI5cceppoxEVLYA3k+VtV2omkeo8MS94JCy4fSiUwlRBAwCVRPUA==
dependencies:
graceful-fs "^4.1.2"
"read-package-json@1 || 2", read-package-json@^2.0.0, read-package-json@^2.0.13:
version "2.1.2"
- resolved "https://registry.yarnpkg.com/read-package-json/-/read-package-json-2.1.2.tgz#6992b2b66c7177259feb8eaac73c3acd28b9222a"
+ resolved "https://registry.npmjs.org/read-package-json/-/read-package-json-2.1.2.tgz"
integrity sha512-D1KmuLQr6ZSJS0tW8hf3WGpRlwszJOXZ3E8Yd/DNRaM5d+1wVRZdHlpGBLAuovjr28LbWvjpWkBHMxpRGGjzNA==
dependencies:
glob "^7.1.1"
@@ -5151,7 +7645,7 @@ read-cmd-shim@^1.0.1:
read-package-tree@^5.1.6:
version "5.3.1"
- resolved "https://registry.yarnpkg.com/read-package-tree/-/read-package-tree-5.3.1.tgz#a32cb64c7f31eb8a6f31ef06f9cedf74068fe636"
+ resolved "https://registry.npmjs.org/read-package-tree/-/read-package-tree-5.3.1.tgz"
integrity sha512-mLUDsD5JVtlZxjSlPPx1RETkNjjvQYuweKwNVt1Sn8kP5Jh44pvYuUHCp6xSVDZWbNxVxG5lyZJ921aJH61sTw==
dependencies:
read-package-json "^2.0.0"
@@ -5160,7 +7654,7 @@ read-package-tree@^5.1.6:
read-pkg-up@^1.0.1:
version "1.0.1"
- resolved "https://registry.yarnpkg.com/read-pkg-up/-/read-pkg-up-1.0.1.tgz#9d63c13276c065918d57f002a57f40a1b643fb02"
+ resolved "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-1.0.1.tgz"
integrity sha1-nWPBMnbAZZGNV/ACpX9AobZD+wI=
dependencies:
find-up "^1.0.0"
@@ -5168,7 +7662,7 @@ read-pkg-up@^1.0.1:
read-pkg-up@^3.0.0:
version "3.0.0"
- resolved "https://registry.yarnpkg.com/read-pkg-up/-/read-pkg-up-3.0.0.tgz#3ed496685dba0f8fe118d0691dc51f4a1ff96f07"
+ resolved "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-3.0.0.tgz"
integrity sha1-PtSWaF26D4/hGNBpHcUfSh/5bwc=
dependencies:
find-up "^2.0.0"
@@ -5176,7 +7670,7 @@ read-pkg-up@^3.0.0:
read-pkg-up@^7.0.1:
version "7.0.1"
- resolved "https://registry.yarnpkg.com/read-pkg-up/-/read-pkg-up-7.0.1.tgz#f3a6135758459733ae2b95638056e1854e7ef507"
+ resolved "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-7.0.1.tgz"
integrity sha512-zK0TB7Xd6JpCLmlLmufqykGE+/TlOePD6qKClNW7hHDKFh/J7/7gCWGR7joEQEW1bKq3a3yUZSObOoWLFQ4ohg==
dependencies:
find-up "^4.1.0"
@@ -5185,7 +7679,7 @@ read-pkg-up@^7.0.1:
read-pkg@^1.0.0:
version "1.1.0"
- resolved "https://registry.yarnpkg.com/read-pkg/-/read-pkg-1.1.0.tgz#f5ffaa5ecd29cb31c0474bca7d756b6bb29e3f28"
+ resolved "https://registry.npmjs.org/read-pkg/-/read-pkg-1.1.0.tgz"
integrity sha1-9f+qXs0pyzHAR0vKfXVra7KePyg=
dependencies:
load-json-file "^1.0.0"
@@ -5194,7 +7688,7 @@ read-pkg@^1.0.0:
read-pkg@^3.0.0:
version "3.0.0"
- resolved "https://registry.yarnpkg.com/read-pkg/-/read-pkg-3.0.0.tgz#9cbc686978fee65d16c00e2b19c237fcf6e38389"
+ resolved "https://registry.npmjs.org/read-pkg/-/read-pkg-3.0.0.tgz"
integrity sha1-nLxoaXj+5l0WwA4rGcI3/Pbjg4k=
dependencies:
load-json-file "^4.0.0"
@@ -5203,7 +7697,7 @@ read-pkg@^3.0.0:
read-pkg@^5.2.0:
version "5.2.0"
- resolved "https://registry.yarnpkg.com/read-pkg/-/read-pkg-5.2.0.tgz#7bf295438ca5a33e56cd30e053b34ee7250c93cc"
+ resolved "https://registry.npmjs.org/read-pkg/-/read-pkg-5.2.0.tgz"
integrity sha512-Ug69mNOpfvKDAc2Q8DRpMjjzdtrnv9HcSMX+4VsZxD1aZ6ZzrIE7rlzXBtWTyhULSMKg076AW6WR5iZpD0JiOg==
dependencies:
"@types/normalize-package-data" "^2.4.0"
@@ -5213,14 +7707,14 @@ read-pkg@^5.2.0:
read@1, read@~1.0.1:
version "1.0.7"
- resolved "https://registry.yarnpkg.com/read/-/read-1.0.7.tgz#b3da19bd052431a97671d44a42634adf710b40c4"
+ resolved "https://registry.npmjs.org/read/-/read-1.0.7.tgz"
integrity sha1-s9oZvQUkMal2cdRKQmNK33ELQMQ=
dependencies:
mute-stream "~0.0.4"
"readable-stream@1 || 2", readable-stream@^2.0.0, readable-stream@^2.0.6, readable-stream@^2.1.5, readable-stream@^2.2.2, readable-stream@^2.3.6, readable-stream@~2.3.6:
version "2.3.7"
- resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.7.tgz#1eca1cf711aef814c04f62252a36a62f6cb23b57"
+ resolved "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz"
integrity sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==
dependencies:
core-util-is "~1.0.0"
@@ -5233,7 +7727,7 @@ read@1, read@~1.0.1:
"readable-stream@2 || 3", readable-stream@^3.0.2:
version "3.6.0"
- resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-3.6.0.tgz#337bbda3adc0706bd3e024426a286d4b4b2c9198"
+ resolved "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz"
integrity sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==
dependencies:
inherits "^2.0.3"
@@ -5242,7 +7736,7 @@ read@1, read@~1.0.1:
readdir-scoped-modules@^1.0.0:
version "1.1.0"
- resolved "https://registry.yarnpkg.com/readdir-scoped-modules/-/readdir-scoped-modules-1.1.0.tgz#8d45407b4f870a0dcaebc0e28670d18e74514309"
+ resolved "https://registry.npmjs.org/readdir-scoped-modules/-/readdir-scoped-modules-1.1.0.tgz"
integrity sha512-asaikDeqAQg7JifRsZn1NJZXo9E+VwlyCfbkZhwyISinqk5zNS6266HS5kah6P0SaQKGF6SkNnZVHUzHFYxYDw==
dependencies:
debuglog "^1.0.1"
@@ -5250,16 +7744,21 @@ readdir-scoped-modules@^1.0.0:
graceful-fs "^4.1.2"
once "^1.3.0"
-readdirp@~3.2.0:
- version "3.2.0"
- resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-3.2.0.tgz#c30c33352b12c96dfb4b895421a49fd5a9593839"
- integrity sha512-crk4Qu3pmXwgxdSgGhgA/eXiJAPQiX4GMOZZMXnqKxHX7TaoL+3gQVo/WeuAiogr07DpnfjIMpXXa+PAIvwPGQ==
+readdirp@^4.0.1:
+ version "4.1.2"
+ resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-4.1.2.tgz#eb85801435fbf2a7ee58f19e0921b068fc69948d"
+ integrity sha512-GDhwkLfywWL2s6vEjyhri+eXmfH6j1L7JE27WhqLeYzoh/A3DBaYGEj2H/HFZCn/kMfim73FXxEJTw06WtxQwg==
+
+rechoir@^0.8.0:
+ version "0.8.0"
+ resolved "https://registry.yarnpkg.com/rechoir/-/rechoir-0.8.0.tgz#49f866e0d32146142da3ad8f0eff352b3215ff22"
+ integrity sha512-/vxpCXddiX8NGfGO/mTafwjq4aFa/71pvamip0++IQk3zG8cbCj0fifNPrjjF1XMXUne91jL9OoxmdykoEtifQ==
dependencies:
- picomatch "^2.0.4"
+ resolve "^1.20.0"
redent@^1.0.0:
version "1.0.0"
- resolved "https://registry.yarnpkg.com/redent/-/redent-1.0.0.tgz#cf916ab1fd5f1f16dfb20822dd6ec7f730c2afde"
+ resolved "https://registry.npmjs.org/redent/-/redent-1.0.0.tgz"
integrity sha1-z5Fqsf1fHxbfsggi3W7H9zDCr94=
dependencies:
indent-string "^2.1.0"
@@ -5267,7 +7766,7 @@ redent@^1.0.0:
redent@^2.0.0:
version "2.0.0"
- resolved "https://registry.yarnpkg.com/redent/-/redent-2.0.0.tgz#c1b2007b42d57eb1389079b3c8333639d5e1ccaa"
+ resolved "https://registry.npmjs.org/redent/-/redent-2.0.0.tgz"
integrity sha1-wbIAe0LVfrE4kHmzyDM2OdXhzKo=
dependencies:
indent-string "^3.0.0"
@@ -5275,7 +7774,7 @@ redent@^2.0.0:
redent@^3.0.0:
version "3.0.0"
- resolved "https://registry.yarnpkg.com/redent/-/redent-3.0.0.tgz#e557b7998316bb53c9f1f56fa626352c6963059f"
+ resolved "https://registry.npmjs.org/redent/-/redent-3.0.0.tgz"
integrity sha512-6tDA8g98We0zd0GvVeMT9arEOnTw9qM03L9cJXaCjrip1OO764RDBLBfrB4cwzNGDj5OA5ioymC9GkizgWJDUg==
dependencies:
indent-string "^4.0.0"
@@ -5283,37 +7782,44 @@ redent@^3.0.0:
regex-not@^1.0.0, regex-not@^1.0.2:
version "1.0.2"
- resolved "https://registry.yarnpkg.com/regex-not/-/regex-not-1.0.2.tgz#1f4ece27e00b0b65e0247a6810e6a85d83a5752c"
+ resolved "https://registry.npmjs.org/regex-not/-/regex-not-1.0.2.tgz"
integrity sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A==
dependencies:
extend-shallow "^3.0.2"
safe-regex "^1.1.0"
-regexpp@^3.0.0, regexpp@^3.1.0:
+regexpp@^3.0.0:
version "3.1.0"
- resolved "https://registry.yarnpkg.com/regexpp/-/regexpp-3.1.0.tgz#206d0ad0a5648cffbdb8ae46438f3dc51c9f78e2"
+ resolved "https://registry.npmjs.org/regexpp/-/regexpp-3.1.0.tgz"
integrity sha512-ZOIzd8yVsQQA7j8GCSlPGXwg5PfmA1mrq0JP4nGhh54LaKN3xdai/vHUDu74pKwV8OxseMS65u2NImosQcSD0Q==
+release-zalgo@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/release-zalgo/-/release-zalgo-1.0.0.tgz#09700b7e5074329739330e535c5a90fb67851730"
+ integrity sha512-gUAyHVHPPC5wdqX/LG4LWtRYtgjxyX78oanFNTMMyFEfOqdC54s3eE82imuWKbOeqYht2CrNf64Qb8vgmmtZGA==
+ dependencies:
+ es6-error "^4.0.1"
+
repeat-element@^1.1.2:
version "1.1.3"
- resolved "https://registry.yarnpkg.com/repeat-element/-/repeat-element-1.1.3.tgz#782e0d825c0c5a3bb39731f84efee6b742e6b1ce"
+ resolved "https://registry.npmjs.org/repeat-element/-/repeat-element-1.1.3.tgz"
integrity sha512-ahGq0ZnV5m5XtZLMb+vP76kcAM5nkLqk0lpqAuojSKGgQtn4eRi4ZZGm2olo2zKFH+sMsWaqOCW1dqAnOru72g==
repeat-string@^1.6.1:
version "1.6.1"
- resolved "https://registry.yarnpkg.com/repeat-string/-/repeat-string-1.6.1.tgz#8dcae470e1c88abc2d600fff4a776286da75e637"
+ resolved "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz"
integrity sha1-jcrkcOHIirwtYA//Sndihtp15jc=
repeating@^2.0.0:
version "2.0.1"
- resolved "https://registry.yarnpkg.com/repeating/-/repeating-2.0.1.tgz#5214c53a926d3552707527fbab415dbc08d06dda"
+ resolved "https://registry.npmjs.org/repeating/-/repeating-2.0.1.tgz"
integrity sha1-UhTFOpJtNVJwdSf7q0FdvAjQbdo=
dependencies:
is-finite "^1.0.0"
request@^2.88.0, request@^2.88.2:
version "2.88.2"
- resolved "https://registry.yarnpkg.com/request/-/request-2.88.2.tgz#d73c918731cb5a87da047e207234146f664d12b3"
+ resolved "https://registry.npmjs.org/request/-/request-2.88.2.tgz"
integrity sha512-MsvtOrfG9ZcrOwAW+Qi+F6HbD0CWXEh9ou77uOb7FM2WPhwT7smM833PzanhJLsgXjN89Ir6V2PczXNnMpwKhw==
dependencies:
aws-sign2 "~0.7.0"
@@ -5339,51 +7845,82 @@ request@^2.88.0, request@^2.88.2:
require-directory@^2.1.1:
version "2.1.1"
- resolved "https://registry.yarnpkg.com/require-directory/-/require-directory-2.1.1.tgz#8c64ad5fd30dab1c976e2344ffe7f792a6a6df42"
+ resolved "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz"
integrity sha1-jGStX9MNqxyXbiNE/+f3kqam30I=
+require-from-string@^2.0.2:
+ version "2.0.2"
+ resolved "https://registry.yarnpkg.com/require-from-string/-/require-from-string-2.0.2.tgz#89a7fdd938261267318eafe14f9c32e598c36909"
+ integrity sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==
+
require-main-filename@^2.0.0:
version "2.0.0"
- resolved "https://registry.yarnpkg.com/require-main-filename/-/require-main-filename-2.0.0.tgz#d0b329ecc7cc0f61649f62215be69af54aa8989b"
+ resolved "https://registry.npmjs.org/require-main-filename/-/require-main-filename-2.0.0.tgz"
integrity sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==
resolve-cwd@^2.0.0:
version "2.0.0"
- resolved "https://registry.yarnpkg.com/resolve-cwd/-/resolve-cwd-2.0.0.tgz#00a9f7387556e27038eae232caa372a6a59b665a"
+ resolved "https://registry.npmjs.org/resolve-cwd/-/resolve-cwd-2.0.0.tgz"
integrity sha1-AKn3OHVW4nA46uIyyqNypqWbZlo=
dependencies:
resolve-from "^3.0.0"
+resolve-cwd@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/resolve-cwd/-/resolve-cwd-3.0.0.tgz#0f0075f1bb2544766cf73ba6a6e2adfebcb13f2d"
+ integrity sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg==
+ dependencies:
+ resolve-from "^5.0.0"
+
resolve-from@^3.0.0:
version "3.0.0"
- resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-3.0.0.tgz#b22c7af7d9d6881bc8b6e653335eebcb0a188748"
+ resolved "https://registry.npmjs.org/resolve-from/-/resolve-from-3.0.0.tgz"
integrity sha1-six699nWiBvItuZTM17rywoYh0g=
resolve-from@^4.0.0:
version "4.0.0"
- resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-4.0.0.tgz#4abcd852ad32dd7baabfe9b40e00a36db5f392e6"
+ resolved "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz"
integrity sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==
+resolve-from@^5.0.0:
+ version "5.0.0"
+ resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-5.0.0.tgz#c35225843df8f776df21c57557bc087e9dfdfc69"
+ integrity sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==
+
+resolve-pkg-maps@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/resolve-pkg-maps/-/resolve-pkg-maps-1.0.0.tgz#616b3dc2c57056b5588c31cdf4b3d64db133720f"
+ integrity sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw==
+
resolve-url@^0.2.1:
version "0.2.1"
- resolved "https://registry.yarnpkg.com/resolve-url/-/resolve-url-0.2.1.tgz#2c637fe77c893afd2a663fe21aa9080068e2052a"
+ resolved "https://registry.npmjs.org/resolve-url/-/resolve-url-0.2.1.tgz"
integrity sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo=
resolve@1.1.x:
version "1.1.7"
- resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.1.7.tgz#203114d82ad2c5ed9e8e0411b3932875e889e97b"
+ resolved "https://registry.npmjs.org/resolve/-/resolve-1.1.7.tgz"
integrity sha1-IDEU2CrSxe2ejgQRs5ModeiJ6Xs=
resolve@^1.10.0, resolve@^1.10.1:
version "1.17.0"
- resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.17.0.tgz#b25941b54968231cc2d1bb76a79cb7f2c0bf8444"
+ resolved "https://registry.npmjs.org/resolve/-/resolve-1.17.0.tgz"
integrity sha512-ic+7JYiV8Vi2yzQGFWOkiZD5Z9z7O2Zhm9XMaTxdJExKasieFCr+yXZ/WmXsckHiKl12ar0y6XiXDx3m4RHn1w==
dependencies:
path-parse "^1.0.6"
+resolve@^1.20.0, resolve@^1.22.1:
+ version "1.22.10"
+ resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.22.10.tgz#b663e83ffb09bbf2386944736baae803029b8b39"
+ integrity sha512-NPRy+/ncIMeDlTAsuqwKIiferiawhefFJtkNSW0qZJEqMEb+qBt/77B/jGeeek+F0uOeN05CDa6HXbbIgtVX4w==
+ dependencies:
+ is-core-module "^2.16.0"
+ path-parse "^1.0.7"
+ supports-preserve-symlinks-flag "^1.0.0"
+
restore-cursor@^2.0.0:
version "2.0.0"
- resolved "https://registry.yarnpkg.com/restore-cursor/-/restore-cursor-2.0.0.tgz#9f7ee287f82fd326d4fd162923d62129eee0dfaf"
+ resolved "https://registry.npmjs.org/restore-cursor/-/restore-cursor-2.0.0.tgz"
integrity sha1-n37ih/gv0ybU/RYpI9YhKe7g368=
dependencies:
onetime "^2.0.0"
@@ -5391,104 +7928,168 @@ restore-cursor@^2.0.0:
ret@~0.1.10:
version "0.1.15"
- resolved "https://registry.yarnpkg.com/ret/-/ret-0.1.15.tgz#b8a4825d5bdb1fc3f6f53c2bc33f81388681c7bc"
+ resolved "https://registry.npmjs.org/ret/-/ret-0.1.15.tgz"
integrity sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg==
retry@^0.10.0:
version "0.10.1"
- resolved "https://registry.yarnpkg.com/retry/-/retry-0.10.1.tgz#e76388d217992c252750241d3d3956fed98d8ff4"
+ resolved "https://registry.npmjs.org/retry/-/retry-0.10.1.tgz"
integrity sha1-52OI0heZLCUnUCQdPTlW/tmNj/Q=
-reusify@^1.0.4:
- version "1.0.4"
- resolved "https://registry.yarnpkg.com/reusify/-/reusify-1.0.4.tgz#90da382b1e126efc02146e90845a88db12925d76"
- integrity sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==
-
-rimraf@2.6.3:
- version "2.6.3"
- resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.6.3.tgz#b2d104fe0d8fb27cf9e0a1cda8262dd3833c6cab"
- integrity sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA==
- dependencies:
- glob "^7.1.3"
+retry@^0.12.0:
+ version "0.12.0"
+ resolved "https://registry.yarnpkg.com/retry/-/retry-0.12.0.tgz#1b42a6266a21f07421d1b0b54b7dc167b01c013b"
+ integrity sha512-9LkiTwjUh6rT555DtE9rTX+BKByPfrMzEAtnlEtdEwr3Nkffwiihqe2bWADg+OQRjt9gl6ICdmB/ZFDCGAtSow==
rimraf@^2.5.4, rimraf@^2.6.2, rimraf@^2.6.3:
version "2.7.1"
- resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.7.1.tgz#35797f13a7fdadc566142c29d4f07ccad483e3ec"
+ resolved "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz"
integrity sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==
dependencies:
glob "^7.1.3"
+rimraf@^3.0.0:
+ version "3.0.2"
+ resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-3.0.2.tgz#f1a5402ba6220ad52cc1282bac1ae3aa49fd061a"
+ integrity sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==
+ dependencies:
+ glob "^7.1.3"
+
+rollup-plugin-inject@^3.0.0:
+ version "3.0.2"
+ resolved "https://registry.yarnpkg.com/rollup-plugin-inject/-/rollup-plugin-inject-3.0.2.tgz#e4233855bfba6c0c12a312fd6649dff9a13ee9f4"
+ integrity sha512-ptg9PQwzs3orn4jkgXJ74bfs5vYz1NCZlSQMBUA0wKcGp5i5pA1AO3fOUEte8enhGUC+iapTCzEWw2jEFFUO/w==
+ dependencies:
+ estree-walker "^0.6.1"
+ magic-string "^0.25.3"
+ rollup-pluginutils "^2.8.1"
+
+rollup-plugin-node-polyfills@^0.2.1:
+ version "0.2.1"
+ resolved "https://registry.yarnpkg.com/rollup-plugin-node-polyfills/-/rollup-plugin-node-polyfills-0.2.1.tgz#53092a2744837164d5b8a28812ba5f3ff61109fd"
+ integrity sha512-4kCrKPTJ6sK4/gLL/U5QzVT8cxJcofO0OU74tnB19F40cmuAKSzH5/siithxlofFEjwvw1YAhPmbvGNA6jEroA==
+ dependencies:
+ rollup-plugin-inject "^3.0.0"
+
+rollup-pluginutils@^2.8.1:
+ version "2.8.2"
+ resolved "https://registry.yarnpkg.com/rollup-pluginutils/-/rollup-pluginutils-2.8.2.tgz#72f2af0748b592364dbd3389e600e5a9444a351e"
+ integrity sha512-EEp9NhnUkwY8aif6bxgovPHMoMoNr2FulJziTndpt5H9RdwC47GSGuII9XxpSdzVGM0GWrNPHV6ie1LTNJPaLQ==
+ dependencies:
+ estree-walker "^0.6.1"
+
+rollup@^4.34.9, rollup@^4.41.1, rollup@^4.43.0:
+ version "4.52.3"
+ resolved "https://registry.yarnpkg.com/rollup/-/rollup-4.52.3.tgz#cc5c28d772b022ce48b235a97b347ccd9d88c1a3"
+ integrity sha512-RIDh866U8agLgiIcdpB+COKnlCreHJLfIhWC3LVflku5YHfpnsIKigRZeFfMfCc4dVcqNVfQQ5gO/afOck064A==
+ dependencies:
+ "@types/estree" "1.0.8"
+ optionalDependencies:
+ "@rollup/rollup-android-arm-eabi" "4.52.3"
+ "@rollup/rollup-android-arm64" "4.52.3"
+ "@rollup/rollup-darwin-arm64" "4.52.3"
+ "@rollup/rollup-darwin-x64" "4.52.3"
+ "@rollup/rollup-freebsd-arm64" "4.52.3"
+ "@rollup/rollup-freebsd-x64" "4.52.3"
+ "@rollup/rollup-linux-arm-gnueabihf" "4.52.3"
+ "@rollup/rollup-linux-arm-musleabihf" "4.52.3"
+ "@rollup/rollup-linux-arm64-gnu" "4.52.3"
+ "@rollup/rollup-linux-arm64-musl" "4.52.3"
+ "@rollup/rollup-linux-loong64-gnu" "4.52.3"
+ "@rollup/rollup-linux-ppc64-gnu" "4.52.3"
+ "@rollup/rollup-linux-riscv64-gnu" "4.52.3"
+ "@rollup/rollup-linux-riscv64-musl" "4.52.3"
+ "@rollup/rollup-linux-s390x-gnu" "4.52.3"
+ "@rollup/rollup-linux-x64-gnu" "4.52.3"
+ "@rollup/rollup-linux-x64-musl" "4.52.3"
+ "@rollup/rollup-openharmony-arm64" "4.52.3"
+ "@rollup/rollup-win32-arm64-msvc" "4.52.3"
+ "@rollup/rollup-win32-ia32-msvc" "4.52.3"
+ "@rollup/rollup-win32-x64-gnu" "4.52.3"
+ "@rollup/rollup-win32-x64-msvc" "4.52.3"
+ fsevents "~2.3.2"
+
run-async@^2.2.0:
version "2.4.1"
- resolved "https://registry.yarnpkg.com/run-async/-/run-async-2.4.1.tgz#8440eccf99ea3e70bd409d49aab88e10c189a455"
+ resolved "https://registry.npmjs.org/run-async/-/run-async-2.4.1.tgz"
integrity sha512-tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ==
-run-parallel@^1.1.9:
- version "1.1.9"
- resolved "https://registry.yarnpkg.com/run-parallel/-/run-parallel-1.1.9.tgz#c9dd3a7cf9f4b2c4b6244e173a6ed866e61dd679"
- integrity sha512-DEqnSRTDw/Tc3FXf49zedI638Z9onwUotBMiUFKmrO2sdFKIbXamXGQ3Axd4qgphxKB4kw/qP1w5kTxnfU1B9Q==
-
run-queue@^1.0.0, run-queue@^1.0.3:
version "1.0.3"
- resolved "https://registry.yarnpkg.com/run-queue/-/run-queue-1.0.3.tgz#e848396f057d223f24386924618e25694161ec47"
+ resolved "https://registry.npmjs.org/run-queue/-/run-queue-1.0.3.tgz"
integrity sha1-6Eg5bwV9Ij8kOGkkYY4laUFh7Ec=
dependencies:
aproba "^1.1.1"
rxjs@^6.4.0:
version "6.6.3"
- resolved "https://registry.yarnpkg.com/rxjs/-/rxjs-6.6.3.tgz#8ca84635c4daa900c0d3967a6ee7ac60271ee552"
+ resolved "https://registry.npmjs.org/rxjs/-/rxjs-6.6.3.tgz"
integrity sha512-trsQc+xYYXZ3urjOiJOuCOa5N3jAZ3eiSpQB5hIT8zGlL2QfnHLJ2r7GMkBGuIausdJN1OneaI6gQlsqNHHmZQ==
dependencies:
tslib "^1.9.0"
-safe-buffer@^5.0.1, safe-buffer@^5.1.1, safe-buffer@^5.1.2, safe-buffer@^5.2.0, safe-buffer@^5.2.1, safe-buffer@~5.2.0:
+safe-buffer@^5.0.1, safe-buffer@^5.1.0, safe-buffer@^5.1.1, safe-buffer@^5.1.2, safe-buffer@^5.2.0, safe-buffer@^5.2.1, safe-buffer@~5.2.0:
version "5.2.1"
- resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6"
+ resolved "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz"
integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==
safe-buffer@~5.1.0, safe-buffer@~5.1.1:
version "5.1.2"
- resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d"
+ resolved "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz"
integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==
safe-regex@^1.1.0:
version "1.1.0"
- resolved "https://registry.yarnpkg.com/safe-regex/-/safe-regex-1.1.0.tgz#40a3669f3b077d1e943d44629e157dd48023bf2e"
+ resolved "https://registry.npmjs.org/safe-regex/-/safe-regex-1.1.0.tgz"
integrity sha1-QKNmnzsHfR6UPURinhV91IAjvy4=
dependencies:
ret "~0.1.10"
"safer-buffer@>= 2.1.2 < 3", "safer-buffer@>= 2.1.2 < 3.0.0", safer-buffer@^2.0.2, safer-buffer@^2.1.0, safer-buffer@~2.1.0:
version "2.1.2"
- resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a"
+ resolved "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz"
integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==
+schema-utils@^4.3.0, schema-utils@^4.3.2:
+ version "4.3.2"
+ resolved "https://registry.yarnpkg.com/schema-utils/-/schema-utils-4.3.2.tgz#0c10878bf4a73fd2b1dfd14b9462b26788c806ae"
+ integrity sha512-Gn/JaSk/Mt9gYubxTtSn/QCV4em9mpAPiR1rqy/Ocu19u/G9J5WWdNoUT4SiV6mFC3y6cxyFcFwdzPM3FgxGAQ==
+ dependencies:
+ "@types/json-schema" "^7.0.9"
+ ajv "^8.9.0"
+ ajv-formats "^2.1.1"
+ ajv-keywords "^5.1.0"
+
"semver@2 || 3 || 4 || 5", "semver@2.x || 3.x || 4 || 5", semver@^5.4.1, semver@^5.5.0, semver@^5.5.1, semver@^5.6.0, semver@^5.7.0, semver@^5.7.1:
version "5.7.1"
- resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.1.tgz#a954f931aeba508d307bbf069eff0c01c96116f7"
+ resolved "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz"
integrity sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==
-semver@^6.0.0, semver@^6.1.0, semver@^6.2.0:
- version "6.3.0"
- resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.0.tgz#ee0a64c8af5e8ceea67687b133761e1becbd1d3d"
- integrity sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==
+semver@^6.0.0, semver@^6.1.0, semver@^6.2.0, semver@^6.3.0, semver@^6.3.1:
+ version "6.3.1"
+ resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.1.tgz#556d2ef8689146e46dcea4bfdd095f3434dffcb4"
+ integrity sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==
+
+semver@^7.3.5, semver@^7.5.3, semver@^7.6.3, semver@^7.7.1, semver@^7.7.2, semver@^7.7.3:
+ version "7.7.4"
+ resolved "https://registry.yarnpkg.com/semver/-/semver-7.7.4.tgz#28464e36060e991fa7a11d0279d2d3f3b57a7e8a"
+ integrity sha512-vFKC2IEtQnVhpT78h1Yp8wzwrf8CM+MzKMHGJZfBtzhZNycRFnXsHk6E5TxIkkMsgNS7mdX3AGB7x2QM2di4lA==
-semver@^7.2.1, semver@^7.3.2, semver@^7.3.5:
- version "7.3.7"
- resolved "https://registry.yarnpkg.com/semver/-/semver-7.3.7.tgz#12c5b649afdbf9049707796e22a4028814ce523f"
- integrity sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g==
+serialize-javascript@^6.0.2:
+ version "6.0.2"
+ resolved "https://registry.yarnpkg.com/serialize-javascript/-/serialize-javascript-6.0.2.tgz#defa1e055c83bf6d59ea805d8da862254eb6a6c2"
+ integrity sha512-Saa1xPByTTq2gdeFZYLLo+RFE35NHZkAbqZeWNd3BpzppeVisAqpDjcp8dyf6uIvEqJRd46jemmyA4iFIeVk8g==
dependencies:
- lru-cache "^6.0.0"
+ randombytes "^2.1.0"
set-blocking@^2.0.0, set-blocking@~2.0.0:
version "2.0.0"
- resolved "https://registry.yarnpkg.com/set-blocking/-/set-blocking-2.0.0.tgz#045f9782d011ae9a6803ddd382b24392b3d890f7"
+ resolved "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz"
integrity sha1-BF+XgtARrppoA93TgrJDkrPYkPc=
set-value@^2.0.0, set-value@^2.0.1:
version "2.0.1"
- resolved "https://registry.yarnpkg.com/set-value/-/set-value-2.0.1.tgz#a18d40530e6f07de4228c7defe4227af8cad005b"
+ resolved "https://registry.npmjs.org/set-value/-/set-value-2.0.1.tgz"
integrity sha512-JxHc1weCN68wRY0fhCoXpyK55m/XPHafOmK4UWD7m2CI14GMcFypt4w/0+NV5f/ZMby2F6S2wwA7fgynh9gWSw==
dependencies:
extend-shallow "^2.0.1"
@@ -5498,72 +8099,114 @@ set-value@^2.0.0, set-value@^2.0.1:
shallow-clone@^3.0.0:
version "3.0.1"
- resolved "https://registry.yarnpkg.com/shallow-clone/-/shallow-clone-3.0.1.tgz#8f2981ad92531f55035b01fb230769a40e02efa3"
+ resolved "https://registry.npmjs.org/shallow-clone/-/shallow-clone-3.0.1.tgz"
integrity sha512-/6KqX+GVUdqPuPPd2LxDDxzX6CAbjJehAAOKlNpqqUpAqPM6HeL8f+o3a+JsyGjn2lv0WY8UsTgUJjU9Ok55NA==
dependencies:
kind-of "^6.0.2"
+sharp@^0.33.5:
+ version "0.33.5"
+ resolved "https://registry.yarnpkg.com/sharp/-/sharp-0.33.5.tgz#13e0e4130cc309d6a9497596715240b2ec0c594e"
+ integrity sha512-haPVm1EkS9pgvHrQ/F3Xy+hgcuMV0Wm9vfIBSiwZ05k+xgb0PkBQpGsAA/oWdDobNaZTH5ppvHtzCFbnSEwHVw==
+ dependencies:
+ color "^4.2.3"
+ detect-libc "^2.0.3"
+ semver "^7.6.3"
+ optionalDependencies:
+ "@img/sharp-darwin-arm64" "0.33.5"
+ "@img/sharp-darwin-x64" "0.33.5"
+ "@img/sharp-libvips-darwin-arm64" "1.0.4"
+ "@img/sharp-libvips-darwin-x64" "1.0.4"
+ "@img/sharp-libvips-linux-arm" "1.0.5"
+ "@img/sharp-libvips-linux-arm64" "1.0.4"
+ "@img/sharp-libvips-linux-s390x" "1.0.4"
+ "@img/sharp-libvips-linux-x64" "1.0.4"
+ "@img/sharp-libvips-linuxmusl-arm64" "1.0.4"
+ "@img/sharp-libvips-linuxmusl-x64" "1.0.4"
+ "@img/sharp-linux-arm" "0.33.5"
+ "@img/sharp-linux-arm64" "0.33.5"
+ "@img/sharp-linux-s390x" "0.33.5"
+ "@img/sharp-linux-x64" "0.33.5"
+ "@img/sharp-linuxmusl-arm64" "0.33.5"
+ "@img/sharp-linuxmusl-x64" "0.33.5"
+ "@img/sharp-wasm32" "0.33.5"
+ "@img/sharp-win32-ia32" "0.33.5"
+ "@img/sharp-win32-x64" "0.33.5"
+
shebang-command@^1.2.0:
version "1.2.0"
- resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-1.2.0.tgz#44aac65b695b03398968c39f363fee5deafdf1ea"
+ resolved "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz"
integrity sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=
dependencies:
shebang-regex "^1.0.0"
shebang-command@^2.0.0:
version "2.0.0"
- resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-2.0.0.tgz#ccd0af4f8835fbdc265b82461aaf0c36663f34ea"
+ resolved "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz"
integrity sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==
dependencies:
shebang-regex "^3.0.0"
shebang-regex@^1.0.0:
version "1.0.0"
- resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-1.0.0.tgz#da42f49740c0b42db2ca9728571cb190c98efea3"
+ resolved "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz"
integrity sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=
shebang-regex@^3.0.0:
version "3.0.0"
- resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-3.0.0.tgz#ae16f1644d873ecad843b0307b143362d4c42172"
+ resolved "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz"
integrity sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==
+siginfo@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/siginfo/-/siginfo-2.0.0.tgz#32e76c70b79724e3bb567cb9d543eb858ccfaf30"
+ integrity sha512-ybx0WO1/8bSBLEWXZvEd7gMW3Sn3JFlW3TvX1nREbDLRNQNaeNN8WK0meBwPdAaOI7TtRRRJn/Es1zhrrCHu7g==
+
signal-exit@^3.0.0, signal-exit@^3.0.2:
version "3.0.3"
- resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.3.tgz#a1410c2edd8f077b08b4e253c8eacfcaf057461c"
+ resolved "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.3.tgz"
integrity sha512-VUJ49FC8U1OxwZLxIbTTrDvLnf/6TDgxZcK8wxR8zs13xpx7xbG60ndBlhNrFi2EMuFRoeDoJO7wthSLq42EjA==
+signal-exit@^4.0.1:
+ version "4.1.0"
+ resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-4.1.0.tgz#952188c1cbd546070e2dd20d0f41c0ae0530cb04"
+ integrity sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==
+
+simple-swizzle@^0.2.2:
+ version "0.2.2"
+ resolved "https://registry.yarnpkg.com/simple-swizzle/-/simple-swizzle-0.2.2.tgz#a4da6b635ffcccca33f70d17cb92592de95e557a"
+ integrity sha512-JA//kQgZtbuY83m+xT+tXJkmJncGMTFT+C+g2h2R9uxkYIrE2yy9sgmcLhCnw57/WSD+Eh3J97FPEDFnbXnDUg==
+ dependencies:
+ is-arrayish "^0.3.1"
+
slash@^2.0.0:
version "2.0.0"
- resolved "https://registry.yarnpkg.com/slash/-/slash-2.0.0.tgz#de552851a1759df3a8f206535442f5ec4ddeab44"
+ resolved "https://registry.npmjs.org/slash/-/slash-2.0.0.tgz"
integrity sha512-ZYKh3Wh2z1PpEXWr0MpSBZ0V6mZHAQfYevttO11c51CaWjGTaadiKZ+wVt1PbMlDV5qhMFslpZCemhwOK7C89A==
-slash@^3.0.0:
- version "3.0.0"
- resolved "https://registry.yarnpkg.com/slash/-/slash-3.0.0.tgz#6539be870c165adbd5240220dbe361f1bc4d4634"
- integrity sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==
-
-slice-ansi@^2.1.0:
- version "2.1.0"
- resolved "https://registry.yarnpkg.com/slice-ansi/-/slice-ansi-2.1.0.tgz#cacd7693461a637a5788d92a7dd4fba068e81636"
- integrity sha512-Qu+VC3EwYLldKa1fCxuuvULvSJOKEgk9pi8dZeCVK7TqBfUNTH4sFkk4joj8afVSfAYgJoSOetjx9QWOJ5mYoQ==
- dependencies:
- ansi-styles "^3.2.0"
- astral-regex "^1.0.0"
- is-fullwidth-code-point "^2.0.0"
+sliced@0.0.5:
+ version "0.0.5"
+ resolved "https://registry.yarnpkg.com/sliced/-/sliced-0.0.5.tgz#5edc044ca4eb6f7816d50ba2fc63e25d8fe4707f"
+ integrity sha512-9bYT917D6H3+q8GlQBJmLVz3bc4OeVGfZ2BB12wvLnluTGfG6/8UdOUbKJDW1EEx9SZMDbjnatkau5/XcUeyOw==
slide@^1.1.6:
version "1.1.6"
- resolved "https://registry.yarnpkg.com/slide/-/slide-1.1.6.tgz#56eb027d65b4d2dce6cb2e2d32c4d4afc9e1d707"
+ resolved "https://registry.npmjs.org/slide/-/slide-1.1.6.tgz"
integrity sha1-VusCfWW00tzmyy4tMsTUr8nh1wc=
smart-buffer@^4.1.0:
version "4.1.0"
- resolved "https://registry.yarnpkg.com/smart-buffer/-/smart-buffer-4.1.0.tgz#91605c25d91652f4661ea69ccf45f1b331ca21ba"
+ resolved "https://registry.npmjs.org/smart-buffer/-/smart-buffer-4.1.0.tgz"
integrity sha512-iVICrxOzCynf/SNaBQCw34eM9jROU/s5rzIhpOvzhzuYHfJR/DhZfDkXiZSgKXfgv26HT3Yni3AV/DGw0cGnnw==
+smart-buffer@^4.2.0:
+ version "4.2.0"
+ resolved "https://registry.yarnpkg.com/smart-buffer/-/smart-buffer-4.2.0.tgz#6e1d71fa4f18c05f7d0ff216dd16a481d0e8d9ae"
+ integrity sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg==
+
snapdragon-node@^2.0.1:
version "2.1.1"
- resolved "https://registry.yarnpkg.com/snapdragon-node/-/snapdragon-node-2.1.1.tgz#6c175f86ff14bdb0724563e8f3c1b021a286853b"
+ resolved "https://registry.npmjs.org/snapdragon-node/-/snapdragon-node-2.1.1.tgz"
integrity sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw==
dependencies:
define-property "^1.0.0"
@@ -5572,14 +8215,14 @@ snapdragon-node@^2.0.1:
snapdragon-util@^3.0.1:
version "3.0.1"
- resolved "https://registry.yarnpkg.com/snapdragon-util/-/snapdragon-util-3.0.1.tgz#f956479486f2acd79700693f6f7b805e45ab56e2"
+ resolved "https://registry.npmjs.org/snapdragon-util/-/snapdragon-util-3.0.1.tgz"
integrity sha512-mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ==
dependencies:
kind-of "^3.2.0"
snapdragon@^0.8.1:
version "0.8.2"
- resolved "https://registry.yarnpkg.com/snapdragon/-/snapdragon-0.8.2.tgz#64922e7c565b0e14204ba1aa7d6964278d25182d"
+ resolved "https://registry.npmjs.org/snapdragon/-/snapdragon-0.8.2.tgz"
integrity sha512-FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg==
dependencies:
base "^0.11.1"
@@ -5593,15 +8236,32 @@ snapdragon@^0.8.1:
socks-proxy-agent@^4.0.0:
version "4.0.2"
- resolved "https://registry.yarnpkg.com/socks-proxy-agent/-/socks-proxy-agent-4.0.2.tgz#3c8991f3145b2799e70e11bd5fbc8b1963116386"
+ resolved "https://registry.npmjs.org/socks-proxy-agent/-/socks-proxy-agent-4.0.2.tgz"
integrity sha512-NT6syHhI9LmuEMSK6Kd2V7gNv5KFZoLE7V5udWmn0de+3Mkj3UMA/AJPLyeNUVmElCurSHtUdM3ETpR3z770Wg==
dependencies:
agent-base "~4.2.1"
socks "~2.3.2"
+socks-proxy-agent@^8.0.3:
+ version "8.0.3"
+ resolved "https://registry.yarnpkg.com/socks-proxy-agent/-/socks-proxy-agent-8.0.3.tgz#6b2da3d77364fde6292e810b496cb70440b9b89d"
+ integrity sha512-VNegTZKhuGq5vSD6XNKlbqWhyt/40CgoEw8XxD6dhnm8Jq9IEa3nIa4HwnM8XOqU0CdB0BwWVXusqiFXfHB3+A==
+ dependencies:
+ agent-base "^7.1.1"
+ debug "^4.3.4"
+ socks "^2.7.1"
+
+socks@^2.7.1:
+ version "2.8.3"
+ resolved "https://registry.yarnpkg.com/socks/-/socks-2.8.3.tgz#1ebd0f09c52ba95a09750afe3f3f9f724a800cb5"
+ integrity sha512-l5x7VUUWbjVFbafGLxPWkYsHIhEvmF85tbIeFZWc8ZPtoMyybuEhL7Jye/ooC4/d48FgOjSJXgsF/AJPYCW8Zw==
+ dependencies:
+ ip-address "^9.0.5"
+ smart-buffer "^4.2.0"
+
socks@~2.3.2:
version "2.3.3"
- resolved "https://registry.yarnpkg.com/socks/-/socks-2.3.3.tgz#01129f0a5d534d2b897712ed8aceab7ee65d78e3"
+ resolved "https://registry.npmjs.org/socks/-/socks-2.3.3.tgz"
integrity sha512-o5t52PCNtVdiOvzMry7wU4aOqYWL0PeCXRWBEiJow4/i/wr+wpsJQ9awEu1EonLIqsfGd5qSgDdxEOvCdmBEpA==
dependencies:
ip "1.1.5"
@@ -5609,14 +8269,19 @@ socks@~2.3.2:
sort-keys@^2.0.0:
version "2.0.0"
- resolved "https://registry.yarnpkg.com/sort-keys/-/sort-keys-2.0.0.tgz#658535584861ec97d730d6cf41822e1f56684128"
+ resolved "https://registry.npmjs.org/sort-keys/-/sort-keys-2.0.0.tgz"
integrity sha1-ZYU1WEhh7JfXMNbPQYIuH1ZoQSg=
dependencies:
is-plain-obj "^1.0.0"
+source-map-js@^1.2.1:
+ version "1.2.1"
+ resolved "https://registry.yarnpkg.com/source-map-js/-/source-map-js-1.2.1.tgz#1ce5650fddd87abc099eda37dcff024c2667ae46"
+ integrity sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==
+
source-map-resolve@^0.5.0:
version "0.5.3"
- resolved "https://registry.yarnpkg.com/source-map-resolve/-/source-map-resolve-0.5.3.tgz#190866bece7553e1f8f267a2ee82c606b5509a1a"
+ resolved "https://registry.npmjs.org/source-map-resolve/-/source-map-resolve-0.5.3.tgz"
integrity sha512-Htz+RnsXWk5+P2slx5Jh3Q66vhQj1Cllm0zvnaY98+NFx+Dv2CF/f5O/t8x+KaNdrdIAsruNzoh/KpialbqAnw==
dependencies:
atob "^2.1.2"
@@ -5627,37 +8292,62 @@ source-map-resolve@^0.5.0:
source-map-support@^0.5.17:
version "0.5.19"
- resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.19.tgz#a98b62f86dcaf4f67399648c085291ab9e8fed61"
+ resolved "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.19.tgz"
integrity sha512-Wonm7zOCIJzBGQdB+thsPar0kYuCIzYvxZwlBa87yi/Mdjv7Tip2cyVbLj5o0cFPN4EVkuTwb3GDDyUx2DGnGw==
dependencies:
buffer-from "^1.0.0"
source-map "^0.6.0"
+source-map-support@~0.5.20:
+ version "0.5.21"
+ resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.21.tgz#04fe7c7f9e1ed2d662233c28cb2b35b9f63f6e4f"
+ integrity sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==
+ dependencies:
+ buffer-from "^1.0.0"
+ source-map "^0.6.0"
+
source-map-url@^0.4.0:
version "0.4.0"
- resolved "https://registry.yarnpkg.com/source-map-url/-/source-map-url-0.4.0.tgz#3e935d7ddd73631b97659956d55128e87b5084a3"
+ resolved "https://registry.npmjs.org/source-map-url/-/source-map-url-0.4.0.tgz"
integrity sha1-PpNdfd1zYxuXZZlW1VEo6HtQhKM=
source-map@^0.5.6:
version "0.5.7"
- resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.5.7.tgz#8a039d2d1021d22d1ea14c80d8ea468ba2ef3fcc"
+ resolved "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz"
integrity sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=
source-map@^0.6.0, source-map@^0.6.1:
version "0.6.1"
- resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263"
+ resolved "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz"
integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==
source-map@~0.2.0:
version "0.2.0"
- resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.2.0.tgz#dab73fbcfc2ba819b4de03bd6f6eaa48164b3f9d"
+ resolved "https://registry.npmjs.org/source-map/-/source-map-0.2.0.tgz"
integrity sha1-2rc/vPwrqBm03gO9b26qSBZLP50=
dependencies:
amdefine ">=0.0.4"
+sourcemap-codec@^1.4.8:
+ version "1.4.8"
+ resolved "https://registry.yarnpkg.com/sourcemap-codec/-/sourcemap-codec-1.4.8.tgz#ea804bd94857402e6992d05a38ef1ae35a9ab4c4"
+ integrity sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA==
+
+spawn-wrap@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/spawn-wrap/-/spawn-wrap-2.0.0.tgz#103685b8b8f9b79771318827aa78650a610d457e"
+ integrity sha512-EeajNjfN9zMnULLwhZZQU3GWBoFNkbngTUPfaawT4RkMiviTxcX0qfhVbGey39mfctfDHkWtuecgQ8NJcyQWHg==
+ dependencies:
+ foreground-child "^2.0.0"
+ is-windows "^1.0.2"
+ make-dir "^3.0.0"
+ rimraf "^3.0.0"
+ signal-exit "^3.0.2"
+ which "^2.0.1"
+
spdx-correct@^3.0.0:
version "3.1.1"
- resolved "https://registry.yarnpkg.com/spdx-correct/-/spdx-correct-3.1.1.tgz#dece81ac9c1e6713e5f7d1b6f17d468fa53d89a9"
+ resolved "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.1.1.tgz"
integrity sha512-cOYcUWwhCuHCXi49RhFRCyJEK3iPj1Ziz9DpViV3tbZOwXD49QzIN3MpOLJNxh2qwq2lJJZaKMVw9qNi4jTC0w==
dependencies:
spdx-expression-parse "^3.0.0"
@@ -5665,12 +8355,12 @@ spdx-correct@^3.0.0:
spdx-exceptions@^2.1.0:
version "2.3.0"
- resolved "https://registry.yarnpkg.com/spdx-exceptions/-/spdx-exceptions-2.3.0.tgz#3f28ce1a77a00372683eade4a433183527a2163d"
+ resolved "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.3.0.tgz"
integrity sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A==
spdx-expression-parse@^3.0.0:
version "3.0.1"
- resolved "https://registry.yarnpkg.com/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz#cf70f50482eefdc98e3ce0a6833e4a53ceeba679"
+ resolved "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz"
integrity sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==
dependencies:
spdx-exceptions "^2.1.0"
@@ -5678,43 +8368,48 @@ spdx-expression-parse@^3.0.0:
spdx-license-ids@^3.0.0:
version "3.0.6"
- resolved "https://registry.yarnpkg.com/spdx-license-ids/-/spdx-license-ids-3.0.6.tgz#c80757383c28abf7296744998cbc106ae8b854ce"
+ resolved "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.6.tgz"
integrity sha512-+orQK83kyMva3WyPf59k1+Y525csj5JejicWut55zeTWANuN17qSiSLUXWtzHeNWORSvT7GLDJ/E/XiIWoXBTw==
split-string@^3.0.1, split-string@^3.0.2:
version "3.1.0"
- resolved "https://registry.yarnpkg.com/split-string/-/split-string-3.1.0.tgz#7cb09dda3a86585705c64b39a6466038682e8fe2"
+ resolved "https://registry.npmjs.org/split-string/-/split-string-3.1.0.tgz"
integrity sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw==
dependencies:
extend-shallow "^3.0.0"
split2@^2.0.0:
version "2.2.0"
- resolved "https://registry.yarnpkg.com/split2/-/split2-2.2.0.tgz#186b2575bcf83e85b7d18465756238ee4ee42493"
+ resolved "https://registry.npmjs.org/split2/-/split2-2.2.0.tgz"
integrity sha512-RAb22TG39LhI31MbreBgIuKiIKhVsawfTgEGqKHTK87aG+ul/PB8Sqoi3I7kVdRWiCfrKxK3uo4/YUkpNvhPbw==
dependencies:
through2 "^2.0.2"
split2@^4.1.0:
version "4.1.0"
- resolved "https://registry.yarnpkg.com/split2/-/split2-4.1.0.tgz#101907a24370f85bb782f08adaabe4e281ecf809"
+ resolved "https://registry.npmjs.org/split2/-/split2-4.1.0.tgz"
integrity sha512-VBiJxFkxiXRlUIeyMQi8s4hgvKCSjtknJv/LVYbrgALPwf5zSKmEwV9Lst25AkvMDnvxODugjdl6KZgwKM1WYQ==
split@^1.0.0:
version "1.0.1"
- resolved "https://registry.yarnpkg.com/split/-/split-1.0.1.tgz#605bd9be303aa59fb35f9229fbea0ddec9ea07d9"
+ resolved "https://registry.npmjs.org/split/-/split-1.0.1.tgz"
integrity sha512-mTyOoPbrivtXnwnIxZRFYRrPNtEFKlpB2fvjSnCQUiAA6qAZzqwna5envK4uk6OIeP17CsdF3rSBGYVBsU0Tkg==
dependencies:
through "2"
+sprintf-js@^1.1.3:
+ version "1.1.3"
+ resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.1.3.tgz#4914b903a2f8b685d17fdf78a70e917e872e444a"
+ integrity sha512-Oo+0REFV59/rz3gfJNKQiBlwfHaSESl1pcGyABQsnnIfWOFt6JNj5gCog2U6MLZ//IGYD+nA8nI+mTShREReaA==
+
sprintf-js@~1.0.2:
version "1.0.3"
- resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.0.3.tgz#04e6926f662895354f3dd015203633b857297e2c"
+ resolved "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz"
integrity sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=
sshpk@^1.7.0:
version "1.16.1"
- resolved "https://registry.yarnpkg.com/sshpk/-/sshpk-1.16.1.tgz#fb661c0bef29b39db40769ee39fa70093d6f6877"
+ resolved "https://registry.npmjs.org/sshpk/-/sshpk-1.16.1.tgz"
integrity sha512-HXXqVUq7+pcKeLqqZj6mHFUMvXtOJt1uoUx09pFW6011inTMxqI8BA8PM95myrIyyKwdnzjdFjLiE6KBPVtJIg==
dependencies:
asn1 "~0.2.3"
@@ -5727,24 +8422,54 @@ sshpk@^1.7.0:
safer-buffer "^2.0.2"
tweetnacl "~0.14.0"
+ssri@^12.0.0:
+ version "12.0.0"
+ resolved "https://registry.yarnpkg.com/ssri/-/ssri-12.0.0.tgz#bcb4258417c702472f8191981d3c8a771fee6832"
+ integrity sha512-S7iGNosepx9RadX82oimUkvr0Ct7IjJbEbs4mJcTxst8um95J3sDYU1RBEOvdu6oL1Wek2ODI5i4MAw+dZ6cAQ==
+ dependencies:
+ minipass "^7.0.3"
+
ssri@^6.0.0, ssri@^6.0.1:
version "6.0.2"
- resolved "https://registry.yarnpkg.com/ssri/-/ssri-6.0.2.tgz#157939134f20464e7301ddba3e90ffa8f7728ac5"
+ resolved "https://registry.npmjs.org/ssri/-/ssri-6.0.2.tgz"
integrity sha512-cepbSq/neFK7xB6A50KHN0xHDotYzq58wWCa5LeWqnPrHG8GzfEjO/4O8kpmcGW+oaxkvhEJCWgbgNk4/ZV93Q==
dependencies:
figgy-pudding "^3.5.1"
+stackback@0.0.2:
+ version "0.0.2"
+ resolved "https://registry.yarnpkg.com/stackback/-/stackback-0.0.2.tgz#1ac8a0d9483848d1695e418b6d031a3c3ce68e3b"
+ integrity sha512-1XMJE5fQo1jGH6Y/7ebnwPOBEkIEnT4QF32d5R1+VXdXveM0IBMJt8zfaxX1P3QhVwrYe+576+jkANtSS2mBbw==
+
+stacktracey@^2.1.8:
+ version "2.1.8"
+ resolved "https://registry.yarnpkg.com/stacktracey/-/stacktracey-2.1.8.tgz#bf9916020738ce3700d1323b32bd2c91ea71199d"
+ integrity sha512-Kpij9riA+UNg7TnphqjH7/CzctQ/owJGNbFkfEeve4Z4uxT5+JapVLFXcsurIfN34gnTWZNJ/f7NMG0E8JDzTw==
+ dependencies:
+ as-table "^1.0.36"
+ get-source "^2.0.12"
+
static-extend@^0.1.1:
version "0.1.2"
- resolved "https://registry.yarnpkg.com/static-extend/-/static-extend-0.1.2.tgz#60809c39cbff55337226fd5e0b520f341f1fb5c6"
+ resolved "https://registry.npmjs.org/static-extend/-/static-extend-0.1.2.tgz"
integrity sha1-YICcOcv/VTNyJv1eC1IPNB8ftcY=
dependencies:
define-property "^0.2.5"
object-copy "^0.1.0"
+std-env@^3.8.0:
+ version "3.9.0"
+ resolved "https://registry.yarnpkg.com/std-env/-/std-env-3.9.0.tgz#1a6f7243b339dca4c9fd55e1c7504c77ef23e8f1"
+ integrity sha512-UGvjygr6F6tpH7o2qyqR6QYpwraIjKSdtzyBdyytFOHmPZY917kwdwLG0RbOjWOnKmnm3PeHjaoLLMie7kPLQw==
+
+stoppable@1.1.0:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/stoppable/-/stoppable-1.1.0.tgz#32da568e83ea488b08e4d7ea2c3bcc9d75015d5b"
+ integrity sha512-KXDYZ9dszj6bzvnEMRYvxgeTHU74QBFL54XKtP3nyMuJ81CFYtABZ3bAzL2EdFUaEwJOBOgENyFj3R7oTzDyyw==
+
stream-each@^1.1.0:
version "1.2.3"
- resolved "https://registry.yarnpkg.com/stream-each/-/stream-each-1.2.3.tgz#ebe27a0c389b04fbcc233642952e10731afa9bae"
+ resolved "https://registry.npmjs.org/stream-each/-/stream-each-1.2.3.tgz"
integrity sha512-vlMC2f8I2u/bZGqkdfLQW/13Zihpej/7PmSiMQsbYddxuTsJp8vRe2x2FvVExZg7FaOds43ROAuFJwPR4MTZLw==
dependencies:
end-of-stream "^1.1.0"
@@ -5752,19 +8477,28 @@ stream-each@^1.1.0:
stream-shift@^1.0.0:
version "1.0.1"
- resolved "https://registry.yarnpkg.com/stream-shift/-/stream-shift-1.0.1.tgz#d7088281559ab2778424279b0877da3c392d5a3d"
+ resolved "https://registry.npmjs.org/stream-shift/-/stream-shift-1.0.1.tgz"
integrity sha512-AiisoFqQ0vbGcZgQPY1cdP2I76glaVA/RauYR4G4thNFgkTqr90yXTo4LYX60Jl+sIlPNHHdGSwo01AvbKUSVQ==
stream-spec@~0.3.5:
version "0.3.6"
- resolved "https://registry.yarnpkg.com/stream-spec/-/stream-spec-0.3.6.tgz#2fddac4a07bf3e9f8963c677a6b5a6cc2115255e"
+ resolved "https://registry.npmjs.org/stream-spec/-/stream-spec-0.3.6.tgz"
integrity sha1-L92sSge/Pp+JY8Z3prWmzCEVJV4=
dependencies:
macgyver "~1.10"
+"string-width-cjs@npm:string-width@^4.2.0", string-width@^4.1.0, string-width@^4.2.0, string-width@^4.2.3:
+ version "4.2.3"
+ resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.3.tgz#269c7117d27b05ad2e536830a8ec895ef9c6d010"
+ integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==
+ dependencies:
+ emoji-regex "^8.0.0"
+ is-fullwidth-code-point "^3.0.0"
+ strip-ansi "^6.0.1"
+
string-width@^1.0.1:
version "1.0.2"
- resolved "https://registry.yarnpkg.com/string-width/-/string-width-1.0.2.tgz#118bdf5b8cdc51a2a7e70d211e07e2b0b9b107d3"
+ resolved "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz"
integrity sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=
dependencies:
code-point-at "^1.0.0"
@@ -5773,7 +8507,7 @@ string-width@^1.0.1:
"string-width@^1.0.2 || 2", string-width@^2.1.0:
version "2.1.1"
- resolved "https://registry.yarnpkg.com/string-width/-/string-width-2.1.1.tgz#ab93f27a8dc13d28cac815c462143a6d9012ae9e"
+ resolved "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz"
integrity sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==
dependencies:
is-fullwidth-code-point "^2.0.0"
@@ -5781,16 +8515,25 @@ string-width@^1.0.1:
string-width@^3.0.0, string-width@^3.1.0:
version "3.1.0"
- resolved "https://registry.yarnpkg.com/string-width/-/string-width-3.1.0.tgz#22767be21b62af1081574306f69ac51b62203961"
+ resolved "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz"
integrity sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==
dependencies:
emoji-regex "^7.0.1"
is-fullwidth-code-point "^2.0.0"
strip-ansi "^5.1.0"
+string-width@^5.0.1, string-width@^5.1.2:
+ version "5.1.2"
+ resolved "https://registry.yarnpkg.com/string-width/-/string-width-5.1.2.tgz#14f8daec6d81e7221d2a357e668cab73bdbca794"
+ integrity sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==
+ dependencies:
+ eastasianwidth "^0.2.0"
+ emoji-regex "^9.2.2"
+ strip-ansi "^7.0.1"
+
string.prototype.trimend@^1.0.1:
version "1.0.1"
- resolved "https://registry.yarnpkg.com/string.prototype.trimend/-/string.prototype.trimend-1.0.1.tgz#85812a6b847ac002270f5808146064c995fb6913"
+ resolved "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.1.tgz"
integrity sha512-LRPxFUaTtpqYsTeNKaFOw3R4bxIzWOnbQ837QfBylo8jIxtcbK/A/sMV7Q+OAV/vWo+7s25pOE10KYSjaSO06g==
dependencies:
define-properties "^1.1.3"
@@ -5798,7 +8541,7 @@ string.prototype.trimend@^1.0.1:
string.prototype.trimstart@^1.0.1:
version "1.0.1"
- resolved "https://registry.yarnpkg.com/string.prototype.trimstart/-/string.prototype.trimstart-1.0.1.tgz#14af6d9f34b053f7cfc89b72f8f2ee14b9039a54"
+ resolved "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.1.tgz"
integrity sha512-XxZn+QpvrBI1FOcg6dIpxUPgWCPuNXvMD72aaRaUQv1eD4e/Qy8i/hFTe0BUmD60p/QA6bh1avmuPTfNjqVWRw==
dependencies:
define-properties "^1.1.3"
@@ -5806,142 +8549,156 @@ string.prototype.trimstart@^1.0.1:
string_decoder@^1.1.1:
version "1.3.0"
- resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.3.0.tgz#42f114594a46cf1a8e30b0a84f56c78c3edac21e"
+ resolved "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz"
integrity sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==
dependencies:
safe-buffer "~5.2.0"
string_decoder@~1.1.1:
version "1.1.1"
- resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.1.1.tgz#9cf1611ba62685d7030ae9e4ba34149c3af03fc8"
+ resolved "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz"
integrity sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==
dependencies:
safe-buffer "~5.1.0"
+"strip-ansi-cjs@npm:strip-ansi@^6.0.1", strip-ansi@^6.0.0, strip-ansi@^6.0.1:
+ version "6.0.1"
+ resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.1.tgz#9e26c63d30f53443e9489495b2105d37b67a85d9"
+ integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==
+ dependencies:
+ ansi-regex "^5.0.1"
+
strip-ansi@^3.0.0, strip-ansi@^3.0.1:
version "3.0.1"
- resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-3.0.1.tgz#6a385fb8853d952d5ff05d0e8aaf94278dc63dcf"
+ resolved "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz"
integrity sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=
dependencies:
ansi-regex "^2.0.0"
strip-ansi@^4.0.0:
version "4.0.0"
- resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-4.0.0.tgz#a8479022eb1ac368a871389b635262c505ee368f"
+ resolved "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz"
integrity sha1-qEeQIusaw2iocTibY1JixQXuNo8=
dependencies:
ansi-regex "^3.0.0"
strip-ansi@^5.0.0, strip-ansi@^5.1.0, strip-ansi@^5.2.0:
version "5.2.0"
- resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-5.2.0.tgz#8c9a536feb6afc962bdfa5b104a5091c1ad9c0ae"
+ resolved "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz"
integrity sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==
dependencies:
ansi-regex "^4.1.0"
-strip-ansi@^6.0.0:
- version "6.0.0"
- resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.0.tgz#0b1571dd7669ccd4f3e06e14ef1eed26225ae532"
- integrity sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==
+strip-ansi@^7.0.1:
+ version "7.1.0"
+ resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-7.1.0.tgz#d5b6568ca689d8561370b0707685d22434faff45"
+ integrity sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==
dependencies:
- ansi-regex "^5.0.0"
+ ansi-regex "^6.0.1"
strip-bom@^2.0.0:
version "2.0.0"
- resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-2.0.0.tgz#6219a85616520491f35788bdbf1447a99c7e6b0e"
+ resolved "https://registry.npmjs.org/strip-bom/-/strip-bom-2.0.0.tgz"
integrity sha1-YhmoVhZSBJHzV4i9vxRHqZx+aw4=
dependencies:
is-utf8 "^0.2.0"
strip-bom@^3.0.0:
version "3.0.0"
- resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-3.0.0.tgz#2334c18e9c759f7bdd56fdef7e9ae3d588e68ed3"
+ resolved "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz"
integrity sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=
+strip-bom@^4.0.0:
+ version "4.0.0"
+ resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-4.0.0.tgz#9c3505c1db45bcedca3d9cf7a16f5c5aa3901878"
+ integrity sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w==
+
strip-eof@^1.0.0:
version "1.0.0"
- resolved "https://registry.yarnpkg.com/strip-eof/-/strip-eof-1.0.0.tgz#bb43ff5598a6eb05d89b59fcd129c983313606bf"
+ resolved "https://registry.npmjs.org/strip-eof/-/strip-eof-1.0.0.tgz"
integrity sha1-u0P/VZim6wXYm1n80SnJgzE2Br8=
strip-indent@^1.0.1:
version "1.0.1"
- resolved "https://registry.yarnpkg.com/strip-indent/-/strip-indent-1.0.1.tgz#0c7962a6adefa7bbd4ac366460a638552ae1a0a2"
+ resolved "https://registry.npmjs.org/strip-indent/-/strip-indent-1.0.1.tgz"
integrity sha1-DHlipq3vp7vUrDZkYKY4VSrhoKI=
dependencies:
get-stdin "^4.0.1"
strip-indent@^2.0.0:
version "2.0.0"
- resolved "https://registry.yarnpkg.com/strip-indent/-/strip-indent-2.0.0.tgz#5ef8db295d01e6ed6cbf7aab96998d7822527b68"
+ resolved "https://registry.npmjs.org/strip-indent/-/strip-indent-2.0.0.tgz"
integrity sha1-XvjbKV0B5u1sv3qrlpmNeCJSe2g=
strip-indent@^3.0.0:
version "3.0.0"
- resolved "https://registry.yarnpkg.com/strip-indent/-/strip-indent-3.0.0.tgz#c32e1cee940b6b3432c771bc2c54bcce73cd3001"
+ resolved "https://registry.npmjs.org/strip-indent/-/strip-indent-3.0.0.tgz"
integrity sha512-laJTa3Jb+VQpaC6DseHhF7dXVqHTfJPCRDaEbid/drOhgitgYku/letMUqOXFoWV0zIIUbjpdH2t+tYj4bQMRQ==
dependencies:
min-indent "^1.0.0"
-strip-json-comments@2.0.1:
- version "2.0.1"
- resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-2.0.1.tgz#3c531942e908c2697c0ec344858c286c7ca0a60a"
- integrity sha1-PFMZQukIwml8DsNEhYwobHygpgo=
-
-strip-json-comments@^3.1.0, strip-json-comments@^3.1.1:
+strip-json-comments@^3.1.1:
version "3.1.1"
- resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-3.1.1.tgz#31f1281b3832630434831c310c01cccda8cbe006"
+ resolved "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz"
integrity sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==
strong-log-transformer@^2.0.0:
version "2.1.0"
- resolved "https://registry.yarnpkg.com/strong-log-transformer/-/strong-log-transformer-2.1.0.tgz#0f5ed78d325e0421ac6f90f7f10e691d6ae3ae10"
+ resolved "https://registry.npmjs.org/strong-log-transformer/-/strong-log-transformer-2.1.0.tgz"
integrity sha512-B3Hgul+z0L9a236FAUC9iZsL+nVHgoCJnqCbN588DjYxvGXaXaaFbfmQ/JhvKjZwsOukuR72XbHv71Qkug0HxA==
dependencies:
duplexer "^0.1.1"
minimist "^1.2.0"
through "^2.3.4"
-supports-color@6.0.0:
- version "6.0.0"
- resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-6.0.0.tgz#76cfe742cf1f41bb9b1c29ad03068c05b4c0e40a"
- integrity sha512-on9Kwidc1IUQo+bQdhi8+Tijpo0e1SS6RoGo2guUwn5vdaxw8RXOF9Vb2ws+ihWOmh4JnCJOvaziZWP1VABaLg==
- dependencies:
- has-flag "^3.0.0"
-
supports-color@^3.1.0:
version "3.2.3"
- resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-3.2.3.tgz#65ac0504b3954171d8a64946b2ae3cbb8a5f54f6"
+ resolved "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz"
integrity sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=
dependencies:
has-flag "^1.0.0"
supports-color@^5.3.0:
version "5.5.0"
- resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-5.5.0.tgz#e2e69a44ac8772f78a1ec0b35b689df6530efc8f"
+ resolved "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz"
integrity sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==
dependencies:
has-flag "^3.0.0"
supports-color@^7.1.0:
version "7.2.0"
- resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-7.2.0.tgz#1b7dcdcb32b8138801b3e478ba6a51caa89648da"
+ resolved "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz"
integrity sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==
dependencies:
has-flag "^4.0.0"
-table@^5.2.3:
- version "5.4.6"
- resolved "https://registry.yarnpkg.com/table/-/table-5.4.6.tgz#1292d19500ce3f86053b05f0e8e7e4a3bb21079e"
- integrity sha512-wmEc8m4fjnob4gt5riFRtTu/6+4rSe12TpAELNSqHMfF3IqnA+CH37USM6/YR3qRZv7e56kAEAtd6nKZaxe0Ug==
+supports-color@^8.0.0, supports-color@^8.1.1:
+ version "8.1.1"
+ resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-8.1.1.tgz#cd6fc17e28500cff56c1b86c0a7fd4a54a73005c"
+ integrity sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==
dependencies:
- ajv "^6.10.2"
- lodash "^4.17.14"
- slice-ansi "^2.1.0"
- string-width "^3.0.0"
+ has-flag "^4.0.0"
+
+supports-preserve-symlinks-flag@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz#6eda4bd344a3c94aea376d4cc31bc77311039e09"
+ integrity sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==
+
+synckit@^0.11.12:
+ version "0.11.12"
+ resolved "https://registry.yarnpkg.com/synckit/-/synckit-0.11.12.tgz#abe74124264fbc00a48011b0d98bdc1cffb64a7b"
+ integrity sha512-Bh7QjT8/SuKUIfObSXNHNSK6WHo6J1tHCqJsuaFDP7gP0fkzSfTxI8y85JrppZ0h8l0maIgc2tfuZQ6/t3GtnQ==
+ dependencies:
+ "@pkgr/core" "^0.2.9"
+
+tapable@^2.1.1, tapable@^2.2.0:
+ version "2.2.2"
+ resolved "https://registry.yarnpkg.com/tapable/-/tapable-2.2.2.tgz#ab4984340d30cb9989a490032f086dbb8b56d872"
+ integrity sha512-Re10+NauLTMCudc7T5WLFLAwDhQ0JWdrMK+9B2M8zR5hRExKmsRDCBA7/aV/pNJFltmBFO5BAMlQFi/vq3nKOg==
tar@^4.4.10, tar@^4.4.12, tar@^4.4.8:
version "4.4.19"
- resolved "https://registry.yarnpkg.com/tar/-/tar-4.4.19.tgz#2e4d7263df26f2b914dee10c825ab132123742f3"
+ resolved "https://registry.npmjs.org/tar/-/tar-4.4.19.tgz"
integrity sha512-a20gEsvHnWe0ygBY8JbxoM4w3SJdhc7ZAuxkLqh+nvNQN2IOt0B5lLgM490X5Hl8FF0dl0tOf2ewFYAlIFgzVA==
dependencies:
chownr "^1.1.4"
@@ -5952,14 +8709,26 @@ tar@^4.4.10, tar@^4.4.12, tar@^4.4.8:
safe-buffer "^5.2.1"
yallist "^3.1.1"
+tar@^7.4.3:
+ version "7.4.3"
+ resolved "https://registry.yarnpkg.com/tar/-/tar-7.4.3.tgz#88bbe9286a3fcd900e94592cda7a22b192e80571"
+ integrity sha512-5S7Va8hKfV7W5U6g3aYxXmlPoZVAwUMy9AOKyF2fVuZa2UD3qZjg578OrLRt8PcNN1PleVaL/5/yYATNL0ICUw==
+ dependencies:
+ "@isaacs/fs-minipass" "^4.0.0"
+ chownr "^3.0.0"
+ minipass "^7.1.2"
+ minizlib "^3.0.1"
+ mkdirp "^3.0.1"
+ yallist "^5.0.0"
+
temp-dir@^1.0.0:
version "1.0.0"
- resolved "https://registry.yarnpkg.com/temp-dir/-/temp-dir-1.0.0.tgz#0a7c0ea26d3a39afa7e0ebea9c1fc0bc4daa011d"
+ resolved "https://registry.npmjs.org/temp-dir/-/temp-dir-1.0.0.tgz"
integrity sha1-CnwOom06Oa+n4OvqnB/AvE2qAR0=
temp-write@^3.4.0:
version "3.4.0"
- resolved "https://registry.yarnpkg.com/temp-write/-/temp-write-3.4.0.tgz#8cff630fb7e9da05f047c74ce4ce4d685457d492"
+ resolved "https://registry.npmjs.org/temp-write/-/temp-write-3.4.0.tgz"
integrity sha1-jP9jD7fp2gXwR8dM5M5NaFRX1JI=
dependencies:
graceful-fs "^4.1.2"
@@ -5969,33 +8738,58 @@ temp-write@^3.4.0:
temp-dir "^1.0.0"
uuid "^3.0.1"
+terser-webpack-plugin@^5.3.11:
+ version "5.3.14"
+ resolved "https://registry.yarnpkg.com/terser-webpack-plugin/-/terser-webpack-plugin-5.3.14.tgz#9031d48e57ab27567f02ace85c7d690db66c3e06"
+ integrity sha512-vkZjpUjb6OMS7dhV+tILUW6BhpDR7P2L/aQSAv+Uwk+m8KATX9EccViHTJR2qDtACKPIYndLGCyl3FMo+r2LMw==
+ dependencies:
+ "@jridgewell/trace-mapping" "^0.3.25"
+ jest-worker "^27.4.5"
+ schema-utils "^4.3.0"
+ serialize-javascript "^6.0.2"
+ terser "^5.31.1"
+
+terser@^5.31.1:
+ version "5.40.0"
+ resolved "https://registry.yarnpkg.com/terser/-/terser-5.40.0.tgz#839a80db42bfee8340085f44ea99b5cba36c55c8"
+ integrity sha512-cfeKl/jjwSR5ar7d0FGmave9hFGJT8obyo0z+CrQOylLDbk7X81nPU6vq9VORa5jU30SkDnT2FXjLbR8HLP+xA==
+ dependencies:
+ "@jridgewell/source-map" "^0.3.3"
+ acorn "^8.14.0"
+ commander "^2.20.0"
+ source-map-support "~0.5.20"
+
+test-exclude@^6.0.0:
+ version "6.0.0"
+ resolved "https://registry.yarnpkg.com/test-exclude/-/test-exclude-6.0.0.tgz#04a8698661d805ea6fa293b6cb9e63ac044ef15e"
+ integrity sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w==
+ dependencies:
+ "@istanbuljs/schema" "^0.1.2"
+ glob "^7.1.4"
+ minimatch "^3.0.4"
+
text-extensions@^1.0.0:
version "1.9.0"
- resolved "https://registry.yarnpkg.com/text-extensions/-/text-extensions-1.9.0.tgz#1853e45fee39c945ce6f6c36b2d659b5aabc2a26"
+ resolved "https://registry.npmjs.org/text-extensions/-/text-extensions-1.9.0.tgz"
integrity sha512-wiBrwC1EhBelW12Zy26JeOUkQ5mRu+5o8rpsJk5+2t+Y5vE7e842qtZDQ2g1NpX/29HdyFeJ4nSIhI47ENSxlQ==
-text-table@^0.2.0:
- version "0.2.0"
- resolved "https://registry.yarnpkg.com/text-table/-/text-table-0.2.0.tgz#7f5ee823ae805207c00af2df4a84ec3fcfa570b4"
- integrity sha1-f17oI66AUgfACvLfSoTsP8+lcLQ=
-
thenify-all@^1.0.0:
version "1.6.0"
- resolved "https://registry.yarnpkg.com/thenify-all/-/thenify-all-1.6.0.tgz#1a1918d402d8fc3f98fbf234db0bcc8cc10e9726"
+ resolved "https://registry.npmjs.org/thenify-all/-/thenify-all-1.6.0.tgz"
integrity sha1-GhkY1ALY/D+Y+/I02wvMjMEOlyY=
dependencies:
thenify ">= 3.1.0 < 4"
"thenify@>= 3.1.0 < 4":
version "3.3.1"
- resolved "https://registry.yarnpkg.com/thenify/-/thenify-3.3.1.tgz#8932e686a4066038a016dd9e2ca46add9838a95f"
+ resolved "https://registry.npmjs.org/thenify/-/thenify-3.3.1.tgz"
integrity sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw==
dependencies:
any-promise "^1.0.0"
through2@^2.0.0, through2@^2.0.2:
version "2.0.5"
- resolved "https://registry.yarnpkg.com/through2/-/through2-2.0.5.tgz#01c1e39eb31d07cb7d03a96a70823260b23132cd"
+ resolved "https://registry.npmjs.org/through2/-/through2-2.0.5.tgz"
integrity sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==
dependencies:
readable-stream "~2.3.6"
@@ -6003,7 +8797,7 @@ through2@^2.0.0, through2@^2.0.2:
through2@^3.0.0:
version "3.0.2"
- resolved "https://registry.yarnpkg.com/through2/-/through2-3.0.2.tgz#99f88931cfc761ec7678b41d5d7336b5b6a07bf4"
+ resolved "https://registry.npmjs.org/through2/-/through2-3.0.2.tgz"
integrity sha512-enaDQ4MUyP2W6ZyT6EsMzqBPZaM/avg8iuo+l2d3QCs0J+6RaqkHV/2/lOwDTueBHeJ/2LG9lrLW3d5rWPucuQ==
dependencies:
inherits "^2.0.4"
@@ -6011,41 +8805,67 @@ through2@^3.0.0:
through@2, "through@>=2.2.7 <3", through@^2.3.4, through@^2.3.6:
version "2.3.8"
- resolved "https://registry.yarnpkg.com/through/-/through-2.3.8.tgz#0dd4c9ffaabc357960b1b724115d7e0e86a2e1f5"
+ resolved "https://registry.npmjs.org/through/-/through-2.3.8.tgz"
integrity sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=
+tinybench@^2.9.0:
+ version "2.9.0"
+ resolved "https://registry.yarnpkg.com/tinybench/-/tinybench-2.9.0.tgz#103c9f8ba6d7237a47ab6dd1dcff77251863426b"
+ integrity sha512-0+DUvqWMValLmha6lr4kD8iAMK1HzV0/aKnCtWb9v9641TnP/MFb7Pc2bxoxQjTXAErryXVgUOfv2YqNllqGeg==
+
+tinyexec@^0.3.2:
+ version "0.3.2"
+ resolved "https://registry.yarnpkg.com/tinyexec/-/tinyexec-0.3.2.tgz#941794e657a85e496577995c6eef66f53f42b3d2"
+ integrity sha512-KQQR9yN7R5+OSwaK0XQoj22pwHoTlgYqmUscPYoknOoWCWfj/5/ABTMRi69FrKU5ffPVh5QcFikpWJI/P1ocHA==
+
+tinyglobby@^0.2.12, tinyglobby@^0.2.15:
+ version "0.2.15"
+ resolved "https://registry.yarnpkg.com/tinyglobby/-/tinyglobby-0.2.15.tgz#e228dd1e638cea993d2fdb4fcd2d4602a79951c2"
+ integrity sha512-j2Zq4NyQYG5XMST4cbs02Ak8iJUdxRM0XI5QyxXuZOzKOINmWurp3smXu3y5wDcJrptwpSjgXHzIQxR0omXljQ==
+ dependencies:
+ fdir "^6.5.0"
+ picomatch "^4.0.3"
+
+tinypool@^1.0.2:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/tinypool/-/tinypool-1.0.2.tgz#706193cc532f4c100f66aa00b01c42173d9051b2"
+ integrity sha512-al6n+QEANGFOMf/dmUMsuS5/r9B06uwlyNjZZql/zv8J7ybHCgoihBNORZCY2mzUuAnomQa2JdhyHKzZxPCrFA==
+
+tinyrainbow@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/tinyrainbow/-/tinyrainbow-2.0.0.tgz#9509b2162436315e80e3eee0fcce4474d2444294"
+ integrity sha512-op4nsTR47R6p0vMUUoYl/a+ljLFVtlfaXkLQmqfLR1qHma1h/ysYk4hEXZ880bf2CYgTskvTa/e196Vd5dDQXw==
+
+tinyspy@^3.0.2:
+ version "3.0.2"
+ resolved "https://registry.yarnpkg.com/tinyspy/-/tinyspy-3.0.2.tgz#86dd3cf3d737b15adcf17d7887c84a75201df20a"
+ integrity sha512-n1cw8k1k0x4pgA2+9XrOkFydTerNcJ1zWCO5Nn9scWHTD+5tp8dghT2x1uduQePZTZgd3Tupf+x9BxJjeJi77Q==
+
tmp@^0.0.33:
version "0.0.33"
- resolved "https://registry.yarnpkg.com/tmp/-/tmp-0.0.33.tgz#6d34335889768d21b2bcda0aa277ced3b1bfadf9"
+ resolved "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz"
integrity sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==
dependencies:
os-tmpdir "~1.0.2"
to-object-path@^0.3.0:
version "0.3.0"
- resolved "https://registry.yarnpkg.com/to-object-path/-/to-object-path-0.3.0.tgz#297588b7b0e7e0ac08e04e672f85c1f4999e17af"
+ resolved "https://registry.npmjs.org/to-object-path/-/to-object-path-0.3.0.tgz"
integrity sha1-KXWIt7Dn4KwI4E5nL4XB9JmeF68=
dependencies:
kind-of "^3.0.2"
to-regex-range@^2.1.0:
version "2.1.1"
- resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-2.1.1.tgz#7c80c17b9dfebe599e27367e0d4dd5590141db38"
+ resolved "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz"
integrity sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=
dependencies:
is-number "^3.0.0"
repeat-string "^1.6.1"
-to-regex-range@^5.0.1:
- version "5.0.1"
- resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-5.0.1.tgz#1648c44aae7c8d988a326018ed72f5b4dd0392e4"
- integrity sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==
- dependencies:
- is-number "^7.0.0"
-
to-regex@^3.0.1, to-regex@^3.0.2:
version "3.0.2"
- resolved "https://registry.yarnpkg.com/to-regex/-/to-regex-3.0.2.tgz#13cfdd9b336552f30b51f33a8ae1b42a7a7599ce"
+ resolved "https://registry.npmjs.org/to-regex/-/to-regex-3.0.2.tgz"
integrity sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw==
dependencies:
define-property "^2.0.2"
@@ -6055,12 +8875,12 @@ to-regex@^3.0.1, to-regex@^3.0.2:
to-utf8@0.0.1:
version "0.0.1"
- resolved "https://registry.yarnpkg.com/to-utf8/-/to-utf8-0.0.1.tgz#d17aea72ff2fba39b9e43601be7b3ff72e089852"
+ resolved "https://registry.npmjs.org/to-utf8/-/to-utf8-0.0.1.tgz"
integrity sha1-0Xrqcv8vujm55DYBvns/9y4ImFI=
tough-cookie@~2.5.0:
version "2.5.0"
- resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-2.5.0.tgz#cd9fb2a0aa1d5a12b473bd9fb96fa3dcff65ade2"
+ resolved "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.5.0.tgz"
integrity sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g==
dependencies:
psl "^1.1.28"
@@ -6068,39 +8888,44 @@ tough-cookie@~2.5.0:
tr46@^1.0.1:
version "1.0.1"
- resolved "https://registry.yarnpkg.com/tr46/-/tr46-1.0.1.tgz#a8b13fd6bfd2489519674ccde55ba3693b706d09"
+ resolved "https://registry.npmjs.org/tr46/-/tr46-1.0.1.tgz"
integrity sha1-qLE/1r/SSJUZZ0zN5VujaTtwbQk=
dependencies:
punycode "^2.1.0"
tr46@~0.0.3:
version "0.0.3"
- resolved "https://registry.yarnpkg.com/tr46/-/tr46-0.0.3.tgz#8184fd347dac9cdc185992f3a6622e14b9d9ab6a"
+ resolved "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz"
integrity sha1-gYT9NH2snNwYWZLzpmIuFLnZq2o=
trim-newlines@^1.0.0:
version "1.0.0"
- resolved "https://registry.yarnpkg.com/trim-newlines/-/trim-newlines-1.0.0.tgz#5887966bb582a4503a41eb524f7d35011815a613"
+ resolved "https://registry.npmjs.org/trim-newlines/-/trim-newlines-1.0.0.tgz"
integrity sha1-WIeWa7WCpFA6QetST301ARgVphM=
trim-newlines@^2.0.0:
version "2.0.0"
- resolved "https://registry.yarnpkg.com/trim-newlines/-/trim-newlines-2.0.0.tgz#b403d0b91be50c331dfc4b82eeceb22c3de16d20"
+ resolved "https://registry.npmjs.org/trim-newlines/-/trim-newlines-2.0.0.tgz"
integrity sha1-tAPQuRvlDDMd/EuC7s6yLD3hbSA=
trim-newlines@^3.0.0:
version "3.0.0"
- resolved "https://registry.yarnpkg.com/trim-newlines/-/trim-newlines-3.0.0.tgz#79726304a6a898aa8373427298d54c2ee8b1cb30"
+ resolved "https://registry.npmjs.org/trim-newlines/-/trim-newlines-3.0.0.tgz"
integrity sha512-C4+gOpvmxaSMKuEf9Qc134F1ZuOHVXKRbtEflf4NTtuuJDEIJ9p5PXsalL8SkeRw+qit1Mo+yuvMPAKwWg/1hA==
trim-off-newlines@^1.0.0:
version "1.0.3"
- resolved "https://registry.yarnpkg.com/trim-off-newlines/-/trim-off-newlines-1.0.3.tgz#8df24847fcb821b0ab27d58ab6efec9f2fe961a1"
+ resolved "https://registry.npmjs.org/trim-off-newlines/-/trim-off-newlines-1.0.3.tgz"
integrity sha512-kh6Tu6GbeSNMGfrrZh6Bb/4ZEHV1QlB4xNDBeog8Y9/QwFlKTRyWvY3Fs9tRDAMZliVUwieMgEdIeL/FtqjkJg==
+ts-api-utils@^2.5.0:
+ version "2.5.0"
+ resolved "https://registry.yarnpkg.com/ts-api-utils/-/ts-api-utils-2.5.0.tgz#4acd4a155e22734990a5ed1fe9e97f113bcb37c1"
+ integrity sha512-OJ/ibxhPlqrMM0UiNHJ/0CKQkoKF243/AEmplt3qpRgkW8VG7IfOS41h7V8TjITqdByHzrjcS/2si+y4lIh8NA==
+
ts-node@^8.5.4:
version "8.10.2"
- resolved "https://registry.yarnpkg.com/ts-node/-/ts-node-8.10.2.tgz#eee03764633b1234ddd37f8db9ec10b75ec7fb8d"
+ resolved "https://registry.npmjs.org/ts-node/-/ts-node-8.10.2.tgz"
integrity sha512-ISJJGgkIpDdBhWVu3jufsWpK3Rzo7bdiIXJjQc0ynKxVOVcg2oIrf2H2cejminGrptVc6q6/uynAHNCuWGbpVA==
dependencies:
arg "^4.1.0"
@@ -6109,97 +8934,146 @@ ts-node@^8.5.4:
source-map-support "^0.5.17"
yn "3.1.1"
-tslib@^1.8.1, tslib@^1.9.0:
+tslib@^1.9.0:
version "1.14.1"
- resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.14.1.tgz#cf2d38bdc34a134bcaf1091c41f6619e2f672d00"
+ resolved "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz"
integrity sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==
-tsutils@^3.17.1, tsutils@^3.21.0:
- version "3.21.0"
- resolved "https://registry.yarnpkg.com/tsutils/-/tsutils-3.21.0.tgz#b48717d394cea6c1e096983eed58e9d61715b623"
- integrity sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==
+tslib@^2.4.0:
+ version "2.8.1"
+ resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.8.1.tgz#612efe4ed235d567e8aba5f2a5fab70280ade83f"
+ integrity sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==
+
+tsx@^4.19.4:
+ version "4.19.4"
+ resolved "https://registry.yarnpkg.com/tsx/-/tsx-4.19.4.tgz#647b4141f4fdd9d773a9b564876773d2846901f4"
+ integrity sha512-gK5GVzDkJK1SI1zwHf32Mqxf2tSJkNx+eYcNly5+nHvWqXUJYUkWBQtKauoESz3ymezAI++ZwT855x5p5eop+Q==
dependencies:
- tslib "^1.8.1"
+ esbuild "~0.25.0"
+ get-tsconfig "^4.7.5"
+ optionalDependencies:
+ fsevents "~2.3.3"
tunnel-agent@^0.6.0:
version "0.6.0"
- resolved "https://registry.yarnpkg.com/tunnel-agent/-/tunnel-agent-0.6.0.tgz#27a5dea06b36b04a0a9966774b290868f0fc40fd"
+ resolved "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz"
integrity sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=
dependencies:
safe-buffer "^5.0.1"
tweetnacl@^0.14.3, tweetnacl@~0.14.0:
version "0.14.5"
- resolved "https://registry.yarnpkg.com/tweetnacl/-/tweetnacl-0.14.5.tgz#5ae68177f192d4456269d108afa93ff8743f4f64"
+ resolved "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz"
integrity sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=
type-check@^0.4.0, type-check@~0.4.0:
version "0.4.0"
- resolved "https://registry.yarnpkg.com/type-check/-/type-check-0.4.0.tgz#07b8203bfa7056c0657050e3ccd2c37730bab8f1"
+ resolved "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz"
integrity sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==
dependencies:
prelude-ls "^1.2.1"
type-check@~0.3.2:
version "0.3.2"
- resolved "https://registry.yarnpkg.com/type-check/-/type-check-0.3.2.tgz#5884cab512cf1d355e3fb784f30804b2b520db72"
+ resolved "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz"
integrity sha1-WITKtRLPHTVeP7eE8wgEsrUg23I=
dependencies:
prelude-ls "~1.1.2"
type-detect@^4.0.0, type-detect@^4.0.5:
version "4.0.8"
- resolved "https://registry.yarnpkg.com/type-detect/-/type-detect-4.0.8.tgz#7646fb5f18871cfbb7749e69bd39a6388eb7450c"
+ resolved "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz"
integrity sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==
type-fest@^0.13.1:
version "0.13.1"
- resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.13.1.tgz#0172cb5bce80b0bd542ea348db50c7e21834d934"
+ resolved "https://registry.npmjs.org/type-fest/-/type-fest-0.13.1.tgz"
integrity sha512-34R7HTnG0XIJcBSn5XhDd7nNFPRcXYRZrBB2O2jdKqYODldSzBAqzsWoZYYvduky73toYS/ESqxPvkDf/F0XMg==
type-fest@^0.3.0:
version "0.3.1"
- resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.3.1.tgz#63d00d204e059474fe5e1b7c011112bbd1dc29e1"
+ resolved "https://registry.npmjs.org/type-fest/-/type-fest-0.3.1.tgz"
integrity sha512-cUGJnCdr4STbePCgqNFbpVNCepa+kAVohJs1sLhxzdH+gnEoOd8VhbYa7pD3zZYGiURWM2xzEII3fQcRizDkYQ==
type-fest@^0.6.0:
version "0.6.0"
- resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.6.0.tgz#8d2a2370d3df886eb5c90ada1c5bf6188acf838b"
+ resolved "https://registry.npmjs.org/type-fest/-/type-fest-0.6.0.tgz"
integrity sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg==
-type-fest@^0.8.1:
+type-fest@^0.8.0, type-fest@^0.8.1:
version "0.8.1"
- resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.8.1.tgz#09e249ebde851d3b1e48d27c105444667f17b83d"
+ resolved "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz"
integrity sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==
+typedarray-to-buffer@^3.1.5:
+ version "3.1.5"
+ resolved "https://registry.yarnpkg.com/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz#a97ee7a9ff42691b9f783ff1bc5112fe3fca9080"
+ integrity sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==
+ dependencies:
+ is-typedarray "^1.0.0"
+
typedarray@^0.0.6:
version "0.0.6"
- resolved "https://registry.yarnpkg.com/typedarray/-/typedarray-0.0.6.tgz#867ac74e3864187b1d3d47d996a78ec5c8830777"
+ resolved "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz"
integrity sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c=
-typescript@^4.0.3:
- version "4.8.4"
- resolved "https://registry.yarnpkg.com/typescript/-/typescript-4.8.4.tgz#c464abca159669597be5f96b8943500b238e60e6"
- integrity sha512-QCh+85mCy+h0IGff8r5XWzOVSbBO+KfeYrMQh7NJ58QujwcE22u+NUSmUxqF+un70P9GXKxa2HCNiTTMJknyjQ==
+typescript@^6.0.3:
+ version "6.0.3"
+ resolved "https://registry.yarnpkg.com/typescript/-/typescript-6.0.3.tgz#90251dc007916e972786cb94d74d15b185577d21"
+ integrity sha512-y2TvuxSZPDyQakkFRPZHKFm+KKVqIisdg9/CZwm9ftvKXLP8NRWj38/ODjNbr43SsoXqNuAisEf1GdCxqWcdBw==
+
+ufo@^1.5.4:
+ version "1.6.1"
+ resolved "https://registry.yarnpkg.com/ufo/-/ufo-1.6.1.tgz#ac2db1d54614d1b22c1d603e3aef44a85d8f146b"
+ integrity sha512-9a4/uxlTWJ4+a5i0ooc1rU7C7YOw3wT+UGqdeNNHWnOF9qcMBgLRS+4IYUqbczewFx4mLEig6gawh7X6mFlEkA==
uglify-js@^3.1.4:
version "3.13.5"
- resolved "https://registry.yarnpkg.com/uglify-js/-/uglify-js-3.13.5.tgz#5d71d6dbba64cf441f32929b1efce7365bb4f113"
+ resolved "https://registry.npmjs.org/uglify-js/-/uglify-js-3.13.5.tgz"
integrity sha512-xtB8yEqIkn7zmOyS2zUNBsYCBRhDkvlNxMMY2smuJ/qA8NCHeQvKCF3i9Z4k8FJH4+PJvZRtMrPynfZ75+CSZw==
uid-number@0.0.6:
version "0.0.6"
- resolved "https://registry.yarnpkg.com/uid-number/-/uid-number-0.0.6.tgz#0ea10e8035e8eb5b8e4449f06da1c730663baa81"
+ resolved "https://registry.npmjs.org/uid-number/-/uid-number-0.0.6.tgz"
integrity sha1-DqEOgDXo61uOREnwbaHHMGY7qoE=
umask@^1.1.0:
version "1.1.0"
- resolved "https://registry.yarnpkg.com/umask/-/umask-1.1.0.tgz#f29cebf01df517912bb58ff9c4e50fde8e33320d"
+ resolved "https://registry.npmjs.org/umask/-/umask-1.1.0.tgz"
integrity sha1-8pzr8B31F5ErtY/5xOUP3o4zMg0=
+undici@^5.28.5:
+ version "5.29.0"
+ resolved "https://registry.yarnpkg.com/undici/-/undici-5.29.0.tgz#419595449ae3f2cdcba3580a2e8903399bd1f5a3"
+ integrity sha512-raqeBD6NQK4SkWhQzeYKd1KmIG6dllBOTt55Rmkt4HtI9mwdWtJljnrXjAFUBLTSN67HWrOIZ3EPF4kjUw80Bg==
+ dependencies:
+ "@fastify/busboy" "^2.0.0"
+
+unenv@2.0.0-rc.14:
+ version "2.0.0-rc.14"
+ resolved "https://registry.yarnpkg.com/unenv/-/unenv-2.0.0-rc.14.tgz#6465b9e3c7bdf59c3d9dafe1d59eb9c3ba221003"
+ integrity sha512-od496pShMen7nOy5VmVJCnq8rptd45vh6Nx/r2iPbrba6pa6p+tS2ywuIHRZ/OBvSbQZB0kWvpO9XBNVFXHD3Q==
+ dependencies:
+ defu "^6.1.4"
+ exsolve "^1.0.1"
+ ohash "^2.0.10"
+ pathe "^2.0.3"
+ ufo "^1.5.4"
+
+unenv@2.0.0-rc.15:
+ version "2.0.0-rc.15"
+ resolved "https://registry.yarnpkg.com/unenv/-/unenv-2.0.0-rc.15.tgz#7fe427b6634f00bda1ade4fecdbc6b2dd7af63be"
+ integrity sha512-J/rEIZU8w6FOfLNz/hNKsnY+fFHWnu9MH4yRbSZF3xbbGHovcetXPs7sD+9p8L6CeNC//I9bhRYAOsBt2u7/OA==
+ dependencies:
+ defu "^6.1.4"
+ exsolve "^1.0.4"
+ ohash "^2.0.11"
+ pathe "^2.0.3"
+ ufo "^1.5.4"
+
union-value@^1.0.0:
version "1.0.1"
- resolved "https://registry.yarnpkg.com/union-value/-/union-value-1.0.1.tgz#0b6fe7b835aecda61c6ea4d4f02c14221e109847"
+ resolved "https://registry.npmjs.org/union-value/-/union-value-1.0.1.tgz"
integrity sha512-tJfXmxMeWYnczCVs7XAEvIV7ieppALdyepWMkHkwciRpZraG/xwT+s2JN8+pr1+8jCRf80FFzvr+MpQeeoF4Xg==
dependencies:
arr-union "^3.1.0"
@@ -6209,38 +9083,52 @@ union-value@^1.0.0:
unique-filename@^1.1.1:
version "1.1.1"
- resolved "https://registry.yarnpkg.com/unique-filename/-/unique-filename-1.1.1.tgz#1d69769369ada0583103a1e6ae87681b56573230"
+ resolved "https://registry.npmjs.org/unique-filename/-/unique-filename-1.1.1.tgz"
integrity sha512-Vmp0jIp2ln35UTXuryvjzkjGdRyf9b2lTXuSYUiPmzRcl3FDtYqAwOnTJkAngD9SWhnoJzDbTKwaOrZ+STtxNQ==
dependencies:
unique-slug "^2.0.0"
+unique-filename@^4.0.0:
+ version "4.0.0"
+ resolved "https://registry.yarnpkg.com/unique-filename/-/unique-filename-4.0.0.tgz#a06534d370e7c977a939cd1d11f7f0ab8f1fed13"
+ integrity sha512-XSnEewXmQ+veP7xX2dS5Q4yZAvO40cBN2MWkJ7D/6sW4Dg6wYBNwM1Vrnz1FhH5AdeLIlUXRI9e28z1YZi71NQ==
+ dependencies:
+ unique-slug "^5.0.0"
+
unique-slug@^2.0.0:
version "2.0.2"
- resolved "https://registry.yarnpkg.com/unique-slug/-/unique-slug-2.0.2.tgz#baabce91083fc64e945b0f3ad613e264f7cd4e6c"
+ resolved "https://registry.npmjs.org/unique-slug/-/unique-slug-2.0.2.tgz"
integrity sha512-zoWr9ObaxALD3DOPfjPSqxt4fnZiWblxHIgeWqW8x7UqDzEtHEQLzji2cuJYQFCU6KmoJikOYAZlrTHHebjx2w==
dependencies:
imurmurhash "^0.1.4"
+unique-slug@^5.0.0:
+ version "5.0.0"
+ resolved "https://registry.yarnpkg.com/unique-slug/-/unique-slug-5.0.0.tgz#ca72af03ad0dbab4dad8aa683f633878b1accda8"
+ integrity sha512-9OdaqO5kwqR+1kVgHAhsp5vPNU0hnxRa26rBFNfNgM7M6pNtgzeBn3s/xbyCQL3dcjzOatcef6UUHpB/6MaETg==
+ dependencies:
+ imurmurhash "^0.1.4"
+
universal-user-agent@^4.0.0:
version "4.0.1"
- resolved "https://registry.yarnpkg.com/universal-user-agent/-/universal-user-agent-4.0.1.tgz#fd8d6cb773a679a709e967ef8288a31fcc03e557"
+ resolved "https://registry.npmjs.org/universal-user-agent/-/universal-user-agent-4.0.1.tgz"
integrity sha512-LnST3ebHwVL2aNe4mejI9IQh2HfZ1RLo8Io2HugSif8ekzD1TlWpHpColOB/eh8JHMLkGH3Akqf040I+4ylNxg==
dependencies:
os-name "^3.1.0"
universal-user-agent@^6.0.0:
version "6.0.0"
- resolved "https://registry.yarnpkg.com/universal-user-agent/-/universal-user-agent-6.0.0.tgz#3381f8503b251c0d9cd21bc1de939ec9df5480ee"
+ resolved "https://registry.npmjs.org/universal-user-agent/-/universal-user-agent-6.0.0.tgz"
integrity sha512-isyNax3wXoKaulPDZWHQqbmIx1k2tb9fb3GGDBRxCscfYV2Ch7WxPArBsFEG8s/safwXTT7H4QGhaIkTp9447w==
universalify@^0.1.0:
version "0.1.2"
- resolved "https://registry.yarnpkg.com/universalify/-/universalify-0.1.2.tgz#b646f69be3942dabcecc9d6639c80dc105efaa66"
+ resolved "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz"
integrity sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==
unset-value@^1.0.0:
version "1.0.0"
- resolved "https://registry.yarnpkg.com/unset-value/-/unset-value-1.0.0.tgz#8376873f7d2335179ffb1e6fc3a8ed0dfc8ab559"
+ resolved "https://registry.npmjs.org/unset-value/-/unset-value-1.0.0.tgz"
integrity sha1-g3aHP30jNRef+x5vw6jtDfyKtVk=
dependencies:
has-value "^0.3.1"
@@ -6248,51 +9136,59 @@ unset-value@^1.0.0:
upath@^1.2.0:
version "1.2.0"
- resolved "https://registry.yarnpkg.com/upath/-/upath-1.2.0.tgz#8f66dbcd55a883acdae4408af8b035a5044c1894"
+ resolved "https://registry.npmjs.org/upath/-/upath-1.2.0.tgz"
integrity sha512-aZwGpamFO61g3OlfT7OQCHqhGnW43ieH9WZeP7QxN/G/jS4jfqUkZxoryvJgVPEcrl5NL/ggHsSmLMHuH64Lhg==
+update-browserslist-db@^1.1.3:
+ version "1.1.3"
+ resolved "https://registry.yarnpkg.com/update-browserslist-db/-/update-browserslist-db-1.1.3.tgz#348377dd245216f9e7060ff50b15a1b740b75420"
+ integrity sha512-UxhIZQ+QInVdunkDAaiazvvT/+fXL5Osr0JZlJulepYu6Jd7qJtDZjlur0emRlT71EN3ScPoE7gvsuIKKNavKw==
+ dependencies:
+ escalade "^3.2.0"
+ picocolors "^1.1.1"
+
uri-js@^4.2.2:
version "4.4.0"
- resolved "https://registry.yarnpkg.com/uri-js/-/uri-js-4.4.0.tgz#aa714261de793e8a82347a7bcc9ce74e86f28602"
+ resolved "https://registry.npmjs.org/uri-js/-/uri-js-4.4.0.tgz"
integrity sha512-B0yRTzYdUCCn9n+F4+Gh4yIDtMQcaJsmYBDsTSG8g/OejKBodLQ2IHfN3bM7jUsRXndopT7OIXWdYqc1fjmV6g==
dependencies:
punycode "^2.1.0"
urix@^0.1.0:
version "0.1.0"
- resolved "https://registry.yarnpkg.com/urix/-/urix-0.1.0.tgz#da937f7a62e21fec1fd18d49b35c2935067a6c72"
+ resolved "https://registry.npmjs.org/urix/-/urix-0.1.0.tgz"
integrity sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI=
use@^3.1.0:
version "3.1.1"
- resolved "https://registry.yarnpkg.com/use/-/use-3.1.1.tgz#d50c8cac79a19fbc20f2911f56eb973f4e10070f"
+ resolved "https://registry.npmjs.org/use/-/use-3.1.1.tgz"
integrity sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ==
util-deprecate@^1.0.1, util-deprecate@~1.0.1:
version "1.0.2"
- resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf"
+ resolved "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz"
integrity sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=
util-promisify@^2.1.0:
version "2.1.0"
- resolved "https://registry.yarnpkg.com/util-promisify/-/util-promisify-2.1.0.tgz#3c2236476c4d32c5ff3c47002add7c13b9a82a53"
+ resolved "https://registry.npmjs.org/util-promisify/-/util-promisify-2.1.0.tgz"
integrity sha1-PCI2R2xNMsX/PEcAKt18E7moKlM=
dependencies:
object.getownpropertydescriptors "^2.0.3"
uuid@^3.0.1, uuid@^3.3.2:
version "3.4.0"
- resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.4.0.tgz#b23e4358afa8a202fe7a100af1f5f883f02007ee"
+ resolved "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz"
integrity sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==
-v8-compile-cache@^2.0.3:
- version "2.1.1"
- resolved "https://registry.yarnpkg.com/v8-compile-cache/-/v8-compile-cache-2.1.1.tgz#54bc3cdd43317bca91e35dcaf305b1a7237de745"
- integrity sha512-8OQ9CL+VWyt3JStj7HX7/ciTL2V3Rl1Wf5OL+SNTm0yK1KvtReVulksyeRnCANHHuUxHlQig+JJDlUhBt1NQDQ==
+uuid@^8.3.2:
+ version "8.3.2"
+ resolved "https://registry.yarnpkg.com/uuid/-/uuid-8.3.2.tgz#80d5b5ced271bb9af6c445f21a1a04c606cefbe2"
+ integrity sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==
validate-npm-package-license@^3.0.1, validate-npm-package-license@^3.0.3:
version "3.0.4"
- resolved "https://registry.yarnpkg.com/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz#fc91f6b9c7ba15c857f4cb2c5defeec39d4f410a"
+ resolved "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz"
integrity sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==
dependencies:
spdx-correct "^3.0.0"
@@ -6300,40 +9196,176 @@ validate-npm-package-license@^3.0.1, validate-npm-package-license@^3.0.3:
validate-npm-package-name@^3.0.0:
version "3.0.0"
- resolved "https://registry.yarnpkg.com/validate-npm-package-name/-/validate-npm-package-name-3.0.0.tgz#5fa912d81eb7d0c74afc140de7317f0ca7df437e"
+ resolved "https://registry.npmjs.org/validate-npm-package-name/-/validate-npm-package-name-3.0.0.tgz"
integrity sha1-X6kS2B630MdK/BQN5zF/DKffQ34=
dependencies:
builtins "^1.0.3"
verror@1.10.0:
version "1.10.0"
- resolved "https://registry.yarnpkg.com/verror/-/verror-1.10.0.tgz#3a105ca17053af55d6e270c1f8288682e18da400"
+ resolved "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz"
integrity sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA=
dependencies:
assert-plus "^1.0.0"
core-util-is "1.0.2"
extsprintf "^1.2.0"
+vite-node@3.0.9:
+ version "3.0.9"
+ resolved "https://registry.yarnpkg.com/vite-node/-/vite-node-3.0.9.tgz#97d0b062d3857fb8eaeb6cc6a1d400f847d4a15d"
+ integrity sha512-w3Gdx7jDcuT9cNn9jExXgOyKmf5UOTb6WMHz8LGAm54eS1Elf5OuBhCxl6zJxGhEeIkgsE1WbHuoL0mj/UXqXg==
+ dependencies:
+ cac "^6.7.14"
+ debug "^4.4.0"
+ es-module-lexer "^1.6.0"
+ pathe "^2.0.3"
+ vite "^5.0.0 || ^6.0.0"
+
+"vite@^5.0.0 || ^6.0.0":
+ version "6.3.2"
+ resolved "https://registry.yarnpkg.com/vite/-/vite-6.3.2.tgz#4c1bb01b1cea853686a191657bbc14272a038f0a"
+ integrity sha512-ZSvGOXKGceizRQIZSz7TGJ0pS3QLlVY/9hwxVh17W3re67je1RKYzFHivZ/t0tubU78Vkyb9WnHPENSBCzbckg==
+ dependencies:
+ esbuild "^0.25.0"
+ fdir "^6.4.3"
+ picomatch "^4.0.2"
+ postcss "^8.5.3"
+ rollup "^4.34.9"
+ tinyglobby "^0.2.12"
+ optionalDependencies:
+ fsevents "~2.3.3"
+
+vite@^7.1.7:
+ version "7.1.7"
+ resolved "https://registry.yarnpkg.com/vite/-/vite-7.1.7.tgz#ed3f9f06e21d6574fe1ad425f6b0912d027ffc13"
+ integrity sha512-VbA8ScMvAISJNJVbRDTJdCwqQoAareR/wutevKanhR2/1EkoXVZVkkORaYm/tNVCjP/UDTKtcw3bAkwOUdedmA==
+ dependencies:
+ esbuild "^0.25.0"
+ fdir "^6.5.0"
+ picomatch "^4.0.3"
+ postcss "^8.5.6"
+ rollup "^4.43.0"
+ tinyglobby "^0.2.15"
+ optionalDependencies:
+ fsevents "~2.3.3"
+
+vitest@~3.0.9:
+ version "3.0.9"
+ resolved "https://registry.yarnpkg.com/vitest/-/vitest-3.0.9.tgz#8cf607d27dcaa12b9f21111f001a4e3e92511ba5"
+ integrity sha512-BbcFDqNyBlfSpATmTtXOAOj71RNKDDvjBM/uPfnxxVGrG+FSH2RQIwgeEngTaTkuU/h0ScFvf+tRcKfYXzBybQ==
+ dependencies:
+ "@vitest/expect" "3.0.9"
+ "@vitest/mocker" "3.0.9"
+ "@vitest/pretty-format" "^3.0.9"
+ "@vitest/runner" "3.0.9"
+ "@vitest/snapshot" "3.0.9"
+ "@vitest/spy" "3.0.9"
+ "@vitest/utils" "3.0.9"
+ chai "^5.2.0"
+ debug "^4.4.0"
+ expect-type "^1.1.0"
+ magic-string "^0.30.17"
+ pathe "^2.0.3"
+ std-env "^3.8.0"
+ tinybench "^2.9.0"
+ tinyexec "^0.3.2"
+ tinypool "^1.0.2"
+ tinyrainbow "^2.0.0"
+ vite "^5.0.0 || ^6.0.0"
+ vite-node "3.0.9"
+ why-is-node-running "^2.3.0"
+
+watchpack@^2.4.1:
+ version "2.4.4"
+ resolved "https://registry.yarnpkg.com/watchpack/-/watchpack-2.4.4.tgz#473bda72f0850453da6425081ea46fc0d7602947"
+ integrity sha512-c5EGNOiyxxV5qmTtAB7rbiXxi1ooX1pQKMLX/MIabJjRA0SJBQOjKF+KSVfHkr9U1cADPon0mRiVe/riyaiDUA==
+ dependencies:
+ glob-to-regexp "^0.4.1"
+ graceful-fs "^4.1.2"
+
wcwidth@^1.0.0:
version "1.0.1"
- resolved "https://registry.yarnpkg.com/wcwidth/-/wcwidth-1.0.1.tgz#f0b0dcf915bc5ff1528afadb2c0e17b532da2fe8"
+ resolved "https://registry.npmjs.org/wcwidth/-/wcwidth-1.0.1.tgz"
integrity sha1-8LDc+RW8X/FSivrbLA4XtTLaL+g=
dependencies:
defaults "^1.0.3"
webidl-conversions@^3.0.0:
version "3.0.1"
- resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-3.0.1.tgz#24534275e2a7bc6be7bc86611cc16ae0a5654871"
+ resolved "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz"
integrity sha1-JFNCdeKnvGvnvIZhHMFq4KVlSHE=
webidl-conversions@^4.0.2:
version "4.0.2"
- resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-4.0.2.tgz#a855980b1f0b6b359ba1d5d9fb39ae941faa63ad"
+ resolved "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-4.0.2.tgz"
integrity sha512-YQ+BmxuTgd6UXZW3+ICGfyqRyHXVlD5GtQr5+qjiNW7bF0cqrzX500HVXPBOvgXb5YnzDd+h0zqyv61KUD7+Sg==
+webpack-cli@^6.0.1:
+ version "6.0.1"
+ resolved "https://registry.yarnpkg.com/webpack-cli/-/webpack-cli-6.0.1.tgz#a1ce25da5ba077151afd73adfa12e208e5089207"
+ integrity sha512-MfwFQ6SfwinsUVi0rNJm7rHZ31GyTcpVE5pgVA3hwFRb7COD4TzjUUwhGWKfO50+xdc2MQPuEBBJoqIMGt3JDw==
+ dependencies:
+ "@discoveryjs/json-ext" "^0.6.1"
+ "@webpack-cli/configtest" "^3.0.1"
+ "@webpack-cli/info" "^3.0.1"
+ "@webpack-cli/serve" "^3.0.1"
+ colorette "^2.0.14"
+ commander "^12.1.0"
+ cross-spawn "^7.0.3"
+ envinfo "^7.14.0"
+ fastest-levenshtein "^1.0.12"
+ import-local "^3.0.2"
+ interpret "^3.1.1"
+ rechoir "^0.8.0"
+ webpack-merge "^6.0.1"
+
+webpack-merge@^6.0.1:
+ version "6.0.1"
+ resolved "https://registry.yarnpkg.com/webpack-merge/-/webpack-merge-6.0.1.tgz#50c776868e080574725abc5869bd6e4ef0a16c6a"
+ integrity sha512-hXXvrjtx2PLYx4qruKl+kyRSLc52V+cCvMxRjmKwoA+CBbbF5GfIBtR6kCvl0fYGqTUPKB+1ktVmTHqMOzgCBg==
+ dependencies:
+ clone-deep "^4.0.1"
+ flat "^5.0.2"
+ wildcard "^2.0.1"
+
+webpack-sources@^3.2.3:
+ version "3.3.2"
+ resolved "https://registry.yarnpkg.com/webpack-sources/-/webpack-sources-3.3.2.tgz#0ab55ab0b380ce53c45ca40cb7b33bab3149ea85"
+ integrity sha512-ykKKus8lqlgXX/1WjudpIEjqsafjOTcOJqxnAbMLAu/KCsDCJ6GBtvscewvTkrn24HsnvFwrSCbenFrhtcCsAA==
+
+webpack@^5.99.9:
+ version "5.99.9"
+ resolved "https://registry.yarnpkg.com/webpack/-/webpack-5.99.9.tgz#d7de799ec17d0cce3c83b70744b4aedb537d8247"
+ integrity sha512-brOPwM3JnmOa+7kd3NsmOUOwbDAj8FT9xDsG3IW0MgbN9yZV7Oi/s/+MNQ/EcSMqw7qfoRyXPoeEWT8zLVdVGg==
+ dependencies:
+ "@types/eslint-scope" "^3.7.7"
+ "@types/estree" "^1.0.6"
+ "@types/json-schema" "^7.0.15"
+ "@webassemblyjs/ast" "^1.14.1"
+ "@webassemblyjs/wasm-edit" "^1.14.1"
+ "@webassemblyjs/wasm-parser" "^1.14.1"
+ acorn "^8.14.0"
+ browserslist "^4.24.0"
+ chrome-trace-event "^1.0.2"
+ enhanced-resolve "^5.17.1"
+ es-module-lexer "^1.2.1"
+ eslint-scope "5.1.1"
+ events "^3.2.0"
+ glob-to-regexp "^0.4.1"
+ graceful-fs "^4.2.11"
+ json-parse-even-better-errors "^2.3.1"
+ loader-runner "^4.2.0"
+ mime-types "^2.1.27"
+ neo-async "^2.6.2"
+ schema-utils "^4.3.2"
+ tapable "^2.1.1"
+ terser-webpack-plugin "^5.3.11"
+ watchpack "^2.4.1"
+ webpack-sources "^3.2.3"
+
whatwg-url@^5.0.0:
version "5.0.0"
- resolved "https://registry.yarnpkg.com/whatwg-url/-/whatwg-url-5.0.0.tgz#966454e8765462e37644d3626f6742ce8b70965d"
+ resolved "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz"
integrity sha1-lmRU6HZUYuN2RNNib2dCzotwll0=
dependencies:
tr46 "~0.0.3"
@@ -6341,7 +9373,7 @@ whatwg-url@^5.0.0:
whatwg-url@^7.0.0:
version "7.1.0"
- resolved "https://registry.yarnpkg.com/whatwg-url/-/whatwg-url-7.1.0.tgz#c2c492f1eca612988efd3d2266be1b9fc6170d06"
+ resolved "https://registry.npmjs.org/whatwg-url/-/whatwg-url-7.1.0.tgz"
integrity sha512-WUu7Rg1DroM7oQvGWfOiAK21n74Gg+T4elXEQYkOhtyLeWiJFoOGLXPKI/9gzIie9CtwVLm8wtw6YJdKyxSjeg==
dependencies:
lodash.sortby "^4.7.0"
@@ -6350,73 +9382,193 @@ whatwg-url@^7.0.0:
which-module@^2.0.0:
version "2.0.0"
- resolved "https://registry.yarnpkg.com/which-module/-/which-module-2.0.0.tgz#d9ef07dce77b9902b8a3a8fa4b31c3e3f7e6e87a"
+ resolved "https://registry.npmjs.org/which-module/-/which-module-2.0.0.tgz"
integrity sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho=
-which@1.3.1, which@^1.1.1, which@^1.2.9, which@^1.3.1:
+which@^1.1.1, which@^1.2.9, which@^1.3.1:
version "1.3.1"
- resolved "https://registry.yarnpkg.com/which/-/which-1.3.1.tgz#a45043d54f5805316da8d62f9f50918d3da70b0a"
+ resolved "https://registry.npmjs.org/which/-/which-1.3.1.tgz"
integrity sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==
dependencies:
isexe "^2.0.0"
which@^2.0.1:
version "2.0.2"
- resolved "https://registry.yarnpkg.com/which/-/which-2.0.2.tgz#7c6a8dd0a636a0327e10b59c9286eee93f3f51b1"
+ resolved "https://registry.npmjs.org/which/-/which-2.0.2.tgz"
integrity sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==
dependencies:
isexe "^2.0.0"
-wide-align@1.1.3, wide-align@^1.1.0:
+which@^5.0.0:
+ version "5.0.0"
+ resolved "https://registry.yarnpkg.com/which/-/which-5.0.0.tgz#d93f2d93f79834d4363c7d0c23e00d07c466c8d6"
+ integrity sha512-JEdGzHwwkrbWoGOlIHqQ5gtprKGOenpDHpxE9zVR1bWbOtYRyPPHMe9FaP6x61CmNaTThSkb0DAJte5jD+DmzQ==
+ dependencies:
+ isexe "^3.1.1"
+
+why-is-node-running@^2.3.0:
+ version "2.3.0"
+ resolved "https://registry.yarnpkg.com/why-is-node-running/-/why-is-node-running-2.3.0.tgz#a3f69a97107f494b3cdc3bdddd883a7d65cebf04"
+ integrity sha512-hUrmaWBdVDcxvYqnyh09zunKzROWjbZTiNy8dBEjkS7ehEDQibXJ7XvlmtbwuTclUiIyN+CyXQD4Vmko8fNm8w==
+ dependencies:
+ siginfo "^2.0.0"
+ stackback "0.0.2"
+
+wide-align@^1.1.0:
version "1.1.3"
- resolved "https://registry.yarnpkg.com/wide-align/-/wide-align-1.1.3.tgz#ae074e6bdc0c14a431e804e624549c633b000457"
+ resolved "https://registry.npmjs.org/wide-align/-/wide-align-1.1.3.tgz"
integrity sha512-QGkOQc8XL6Bt5PwnsExKBPuMKBxnGxWWW3fU55Xt4feHozMUhdUMaBCk290qpm/wG5u/RSKzwdAC4i51YigihA==
dependencies:
string-width "^1.0.2 || 2"
+wildcard@^2.0.1:
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/wildcard/-/wildcard-2.0.1.tgz#5ab10d02487198954836b6349f74fff961e10f67"
+ integrity sha512-CC1bOL87PIWSBhDcTrdeLo6eGT7mCFtrg0uIJtqJUFyK+eJnzl8A1niH56uu7KMa5XFrtiV+AQuHO3n7DsHnLQ==
+
windows-release@^3.1.0:
version "3.3.3"
- resolved "https://registry.yarnpkg.com/windows-release/-/windows-release-3.3.3.tgz#1c10027c7225743eec6b89df160d64c2e0293999"
+ resolved "https://registry.npmjs.org/windows-release/-/windows-release-3.3.3.tgz"
integrity sha512-OSOGH1QYiW5yVor9TtmXKQvt2vjQqbYS+DqmsZw+r7xDwLXEeT3JGW0ZppFmHx4diyXmxt238KFR3N9jzevBRg==
dependencies:
execa "^1.0.0"
-word-wrap@^1.2.3, word-wrap@~1.2.3:
+word-wrap@~1.2.3:
version "1.2.3"
- resolved "https://registry.yarnpkg.com/word-wrap/-/word-wrap-1.2.3.tgz#610636f6b1f703891bd34771ccb17fb93b47079c"
+ resolved "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz"
integrity sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==
wordwrap@^1.0.0:
version "1.0.0"
- resolved "https://registry.yarnpkg.com/wordwrap/-/wordwrap-1.0.0.tgz#27584810891456a4171c8d0226441ade90cbcaeb"
+ resolved "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz"
integrity sha1-J1hIEIkUVqQXHI0CJkQa3pDLyus=
+workerd@1.20250408.0:
+ version "1.20250408.0"
+ resolved "https://registry.yarnpkg.com/workerd/-/workerd-1.20250408.0.tgz#17817c94807978677608ad573161650135664564"
+ integrity sha512-bBUX+UsvpzAqiWFNeZrlZmDGddiGZdBBbftZJz2wE6iUg/cIAJeVQYTtS/3ahaicguoLBz4nJiDo8luqM9fx1A==
+ optionalDependencies:
+ "@cloudflare/workerd-darwin-64" "1.20250408.0"
+ "@cloudflare/workerd-darwin-arm64" "1.20250408.0"
+ "@cloudflare/workerd-linux-64" "1.20250408.0"
+ "@cloudflare/workerd-linux-arm64" "1.20250408.0"
+ "@cloudflare/workerd-windows-64" "1.20250408.0"
+
+workerd@1.20250428.0:
+ version "1.20250428.0"
+ resolved "https://registry.yarnpkg.com/workerd/-/workerd-1.20250428.0.tgz#771aba2b533ce845f4ab06a380fb20f55792cada"
+ integrity sha512-JJNWkHkwPQKQdvtM9UORijgYdcdJsihA4SfYjwh02IUQsdMyZ9jizV1sX9yWi9B9ptlohTW8UNHJEATuphGgdg==
+ optionalDependencies:
+ "@cloudflare/workerd-darwin-64" "1.20250428.0"
+ "@cloudflare/workerd-darwin-arm64" "1.20250428.0"
+ "@cloudflare/workerd-linux-64" "1.20250428.0"
+ "@cloudflare/workerd-linux-arm64" "1.20250428.0"
+ "@cloudflare/workerd-windows-64" "1.20250428.0"
+
+workerpool@^9.2.0:
+ version "9.3.4"
+ resolved "https://registry.yarnpkg.com/workerpool/-/workerpool-9.3.4.tgz#f6c92395b2141afd78e2a889e80cb338fe9fca41"
+ integrity sha512-TmPRQYYSAnnDiEB0P/Ytip7bFGvqnSU6I2BcuSw7Hx+JSg/DsUi5ebYfc8GYaSdpuvOcEs6dXxPurOYpe9QFwg==
+
+wrangler@4.14.0:
+ version "4.14.0"
+ resolved "https://registry.yarnpkg.com/wrangler/-/wrangler-4.14.0.tgz#f5b1c530f2fb1b96fec096620674f800cd01cdf3"
+ integrity sha512-WhypgOBEYuUMo/ZFw8MgZ0wtyE7EmDanytjD8Me+OMm62raKU9V9DZTlF1UVLkNfilfQNlRbMnFRdzSBji/MEA==
+ dependencies:
+ "@cloudflare/kv-asset-handler" "0.4.0"
+ "@cloudflare/unenv-preset" "2.3.1"
+ blake3-wasm "2.1.5"
+ esbuild "0.25.2"
+ miniflare "4.20250428.0"
+ path-to-regexp "6.3.0"
+ unenv "2.0.0-rc.15"
+ workerd "1.20250428.0"
+ optionalDependencies:
+ fsevents "~2.3.2"
+ sharp "^0.33.5"
+
+wrangler@^3.x:
+ version "3.114.6"
+ resolved "https://registry.yarnpkg.com/wrangler/-/wrangler-3.114.6.tgz#944ab84815f2973b08481faecf0019914734fca4"
+ integrity sha512-05Ov/Bg8BQEy+/x/aRTeEUiXYspCiE0wmdgg4TIQwYLeEZaoBLE6KhqxEiLd8WNea0IRpzpBQOtAZ64Tjl0znQ==
+ dependencies:
+ "@cloudflare/kv-asset-handler" "0.3.4"
+ "@cloudflare/unenv-preset" "2.0.2"
+ "@esbuild-plugins/node-globals-polyfill" "0.2.3"
+ "@esbuild-plugins/node-modules-polyfill" "0.2.2"
+ blake3-wasm "2.1.5"
+ esbuild "0.17.19"
+ miniflare "3.20250408.0"
+ path-to-regexp "6.3.0"
+ unenv "2.0.0-rc.14"
+ workerd "1.20250408.0"
+ optionalDependencies:
+ fsevents "~2.3.2"
+ sharp "^0.33.5"
+
+"wrap-ansi-cjs@npm:wrap-ansi@^7.0.0", wrap-ansi@^7.0.0:
+ version "7.0.0"
+ resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-7.0.0.tgz#67e145cff510a6a6984bdf1152911d69d2eb9e43"
+ integrity sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==
+ dependencies:
+ ansi-styles "^4.0.0"
+ string-width "^4.1.0"
+ strip-ansi "^6.0.0"
+
wrap-ansi@^5.1.0:
version "5.1.0"
- resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-5.1.0.tgz#1fd1f67235d5b6d0fee781056001bfb694c03b09"
+ resolved "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-5.1.0.tgz"
integrity sha512-QC1/iN/2/RPVJ5jYK8BGttj5z83LmSKmvbvrXPNCLZSEb32KKVDJDl/MOt2N01qU2H/FkzEa9PKto1BqDjtd7Q==
dependencies:
ansi-styles "^3.2.0"
string-width "^3.0.0"
strip-ansi "^5.0.0"
+wrap-ansi@^6.2.0:
+ version "6.2.0"
+ resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-6.2.0.tgz#e9393ba07102e6c91a3b221478f0257cd2856e53"
+ integrity sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==
+ dependencies:
+ ansi-styles "^4.0.0"
+ string-width "^4.1.0"
+ strip-ansi "^6.0.0"
+
+wrap-ansi@^8.1.0:
+ version "8.1.0"
+ resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-8.1.0.tgz#56dc22368ee570face1b49819975d9b9a5ead214"
+ integrity sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==
+ dependencies:
+ ansi-styles "^6.1.0"
+ string-width "^5.0.1"
+ strip-ansi "^7.0.1"
+
wrappy@1:
version "1.0.2"
- resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f"
+ resolved "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz"
integrity sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=
write-file-atomic@^2.0.0, write-file-atomic@^2.3.0, write-file-atomic@^2.4.2:
version "2.4.3"
- resolved "https://registry.yarnpkg.com/write-file-atomic/-/write-file-atomic-2.4.3.tgz#1fd2e9ae1df3e75b8d8c367443c692d4ca81f481"
+ resolved "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-2.4.3.tgz"
integrity sha512-GaETH5wwsX+GcnzhPgKcKjJ6M2Cq3/iZp1WyY/X1CSqrW+jVNM9Y7D8EC2sM4ZG/V8wZlSniJnCKWPmBYAucRQ==
dependencies:
graceful-fs "^4.1.11"
imurmurhash "^0.1.4"
signal-exit "^3.0.2"
+write-file-atomic@^3.0.0:
+ version "3.0.3"
+ resolved "https://registry.yarnpkg.com/write-file-atomic/-/write-file-atomic-3.0.3.tgz#56bd5c5a5c70481cd19c571bd39ab965a5de56e8"
+ integrity sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q==
+ dependencies:
+ imurmurhash "^0.1.4"
+ is-typedarray "^1.0.0"
+ signal-exit "^3.0.2"
+ typedarray-to-buffer "^3.1.5"
+
write-json-file@^2.2.0:
version "2.3.0"
- resolved "https://registry.yarnpkg.com/write-json-file/-/write-json-file-2.3.0.tgz#2b64c8a33004d54b8698c76d585a77ceb61da32f"
+ resolved "https://registry.npmjs.org/write-json-file/-/write-json-file-2.3.0.tgz"
integrity sha1-K2TIozAE1UuGmMdtWFp3zrYdoy8=
dependencies:
detect-indent "^5.0.0"
@@ -6428,7 +9580,7 @@ write-json-file@^2.2.0:
write-json-file@^3.2.0:
version "3.2.0"
- resolved "https://registry.yarnpkg.com/write-json-file/-/write-json-file-3.2.0.tgz#65bbdc9ecd8a1458e15952770ccbadfcff5fe62a"
+ resolved "https://registry.npmjs.org/write-json-file/-/write-json-file-3.2.0.tgz"
integrity sha512-3xZqT7Byc2uORAatYiP3DHUUAVEkNOswEWNs9H5KXiicRTvzYzYqKjYc4G7p+8pltvAw641lVByKVtMpf+4sYQ==
dependencies:
detect-indent "^5.0.0"
@@ -6440,78 +9592,85 @@ write-json-file@^3.2.0:
write-pkg@^3.1.0:
version "3.2.0"
- resolved "https://registry.yarnpkg.com/write-pkg/-/write-pkg-3.2.0.tgz#0e178fe97820d389a8928bc79535dbe68c2cff21"
+ resolved "https://registry.npmjs.org/write-pkg/-/write-pkg-3.2.0.tgz"
integrity sha512-tX2ifZ0YqEFOF1wjRW2Pk93NLsj02+n1UP5RvO6rCs0K6R2g1padvf006cY74PQJKMGS2r42NK7FD0dG6Y6paw==
dependencies:
sort-keys "^2.0.0"
write-json-file "^2.2.0"
-write@1.0.3:
- version "1.0.3"
- resolved "https://registry.yarnpkg.com/write/-/write-1.0.3.tgz#0800e14523b923a387e415123c865616aae0f5c3"
- integrity sha512-/lg70HAjtkUgWPVZhZcm+T4hkL8Zbtp1nFNOn3lRrxnlv50SRBv7cR7RqR+GMsd3hUXy9hWBo4CHTbFTcOYwig==
- dependencies:
- mkdirp "^0.5.1"
+ws@8.18.0:
+ version "8.18.0"
+ resolved "https://registry.yarnpkg.com/ws/-/ws-8.18.0.tgz#0d7505a6eafe2b0e712d232b42279f53bc289bbc"
+ integrity sha512-8VbfWfHLbbwu3+N6OKsOMpBdT4kXPDDB9cJk2bJ6mh9ucxdlnNvH1e+roYkKmN9Nxw2yjz7VzeO9oOz2zJ04Pw==
xtend@^4.0.0, xtend@~4.0.1:
version "4.0.2"
- resolved "https://registry.yarnpkg.com/xtend/-/xtend-4.0.2.tgz#bb72779f5fa465186b1f438f674fa347fdb5db54"
+ resolved "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz"
integrity sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==
y18n@^4.0.0:
version "4.0.1"
- resolved "https://registry.yarnpkg.com/y18n/-/y18n-4.0.1.tgz#8db2b83c31c5d75099bb890b23f3094891e247d4"
+ resolved "https://registry.npmjs.org/y18n/-/y18n-4.0.1.tgz"
integrity sha512-wNcy4NvjMYL8gogWWYAO7ZFWFfHcbdbE57tZO8e4cbpj8tfUcwrwqSl3ad8HxpYWCdXcJUCeKKZS62Av1affwQ==
+y18n@^5.0.5:
+ version "5.0.8"
+ resolved "https://registry.yarnpkg.com/y18n/-/y18n-5.0.8.tgz#7f4934d0f7ca8c56f95314939ddcd2dd91ce1d55"
+ integrity sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==
+
yallist@^3.0.0, yallist@^3.0.2, yallist@^3.1.1:
version "3.1.1"
- resolved "https://registry.yarnpkg.com/yallist/-/yallist-3.1.1.tgz#dbb7daf9bfd8bac9ab45ebf602b8cbad0d5d08fd"
+ resolved "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz"
integrity sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==
yallist@^4.0.0:
version "4.0.0"
- resolved "https://registry.yarnpkg.com/yallist/-/yallist-4.0.0.tgz#9bb92790d9c0effec63be73519e11a35019a3a72"
+ resolved "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz"
integrity sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==
-yargs-parser@13.1.2, yargs-parser@^13.1.2:
- version "13.1.2"
- resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-13.1.2.tgz#130f09702ebaeef2650d54ce6e3e5706f7a4fb38"
- integrity sha512-3lbsNRf/j+A4QuSZfDRA7HRSfWrzO0YjqTJd5kjAq37Zep1CEgaYmrH9Q3GwPiB9cHyd1Y1UwggGhJGoxipbzg==
- dependencies:
- camelcase "^5.0.0"
- decamelize "^1.2.0"
+yallist@^5.0.0:
+ version "5.0.0"
+ resolved "https://registry.yarnpkg.com/yallist/-/yallist-5.0.0.tgz#00e2de443639ed0d78fd87de0d27469fbcffb533"
+ integrity sha512-YgvUTfwqyc7UXVMrB+SImsVYSmTS8X/tSrtdNZMImM+n7+QTriRXyXim0mBrTXNeqzVF0KWGgHPeiyViFFrNDw==
yargs-parser@^15.0.1:
version "15.0.1"
- resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-15.0.1.tgz#54786af40b820dcb2fb8025b11b4d659d76323b3"
+ resolved "https://registry.npmjs.org/yargs-parser/-/yargs-parser-15.0.1.tgz"
integrity sha512-0OAMV2mAZQrs3FkNpDQcBk1x5HXb8X4twADss4S0Iuk+2dGnLOE/fRHrsYm542GduMveyA77OF4wrNJuanRCWw==
dependencies:
camelcase "^5.0.0"
decamelize "^1.2.0"
-yargs-parser@^18.1.3:
+yargs-parser@^18.1.2, yargs-parser@^18.1.3:
version "18.1.3"
- resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-18.1.3.tgz#be68c4975c6b2abf469236b0c870362fab09a7b0"
+ resolved "https://registry.npmjs.org/yargs-parser/-/yargs-parser-18.1.3.tgz"
integrity sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ==
dependencies:
camelcase "^5.0.0"
decamelize "^1.2.0"
-yargs-unparser@1.6.0:
- version "1.6.0"
- resolved "https://registry.yarnpkg.com/yargs-unparser/-/yargs-unparser-1.6.0.tgz#ef25c2c769ff6bd09e4b0f9d7c605fb27846ea9f"
- integrity sha512-W9tKgmSn0DpSatfri0nx52Joq5hVXgeLiqR/5G0sZNDoLZFOr/xjBUDcShCOGNsBnEMNo1KAMBkTej1Hm62HTw==
+yargs-parser@^21.1.1:
+ version "21.1.1"
+ resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-21.1.1.tgz#9096bceebf990d21bb31fa9516e0ede294a77d35"
+ integrity sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==
+
+yargs-unparser@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/yargs-unparser/-/yargs-unparser-2.0.0.tgz#f131f9226911ae5d9ad38c432fe809366c2325eb"
+ integrity sha512-7pRTIA9Qc1caZ0bZ6RYRGbHJthJWuakf+WmHK0rVeLkNrrGhfoabBNdue6kdINI6r4if7ocq9aD/n7xwKOdzOA==
dependencies:
- flat "^4.1.0"
- lodash "^4.17.15"
- yargs "^13.3.0"
+ camelcase "^6.0.0"
+ decamelize "^4.0.0"
+ flat "^5.0.2"
+ is-plain-obj "^2.1.0"
-yargs@13.3.2, yargs@^13.3.0:
- version "13.3.2"
- resolved "https://registry.yarnpkg.com/yargs/-/yargs-13.3.2.tgz#ad7ffefec1aa59565ac915f82dccb38a9c31a2dd"
- integrity sha512-AX3Zw5iPruN5ie6xGRIDgqkT+ZhnRlZMLMHAs8tg7nRruy2Nb+i5o9bwghAogtM08q1dpr2LVoS8KSTMYpWXUw==
+yargs@^14.2.2:
+ version "14.2.3"
+ resolved "https://registry.npmjs.org/yargs/-/yargs-14.2.3.tgz"
+ integrity sha512-ZbotRWhF+lkjijC/VhmOT9wSgyBQ7+zr13+YLkhfsSiTriYsMzkTUFP18pFhWwBeMa5gUc1MzbhrO6/VB7c9Xg==
dependencies:
cliui "^5.0.0"
+ decamelize "^1.2.0"
find-up "^3.0.0"
get-caller-file "^2.0.1"
require-directory "^2.1.1"
@@ -6520,26 +9679,63 @@ yargs@13.3.2, yargs@^13.3.0:
string-width "^3.0.0"
which-module "^2.0.0"
y18n "^4.0.0"
- yargs-parser "^13.1.2"
+ yargs-parser "^15.0.1"
-yargs@^14.2.2:
- version "14.2.3"
- resolved "https://registry.yarnpkg.com/yargs/-/yargs-14.2.3.tgz#1a1c3edced1afb2a2fea33604bc6d1d8d688a414"
- integrity sha512-ZbotRWhF+lkjijC/VhmOT9wSgyBQ7+zr13+YLkhfsSiTriYsMzkTUFP18pFhWwBeMa5gUc1MzbhrO6/VB7c9Xg==
+yargs@^15.0.2:
+ version "15.4.1"
+ resolved "https://registry.yarnpkg.com/yargs/-/yargs-15.4.1.tgz#0d87a16de01aee9d8bec2bfbf74f67851730f4f8"
+ integrity sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A==
dependencies:
- cliui "^5.0.0"
+ cliui "^6.0.0"
decamelize "^1.2.0"
- find-up "^3.0.0"
+ find-up "^4.1.0"
get-caller-file "^2.0.1"
require-directory "^2.1.1"
require-main-filename "^2.0.0"
set-blocking "^2.0.0"
- string-width "^3.0.0"
+ string-width "^4.2.0"
which-module "^2.0.0"
y18n "^4.0.0"
- yargs-parser "^15.0.1"
+ yargs-parser "^18.1.2"
+
+yargs@^17.7.2:
+ version "17.7.2"
+ resolved "https://registry.yarnpkg.com/yargs/-/yargs-17.7.2.tgz#991df39aca675a192b816e1e0363f9d75d2aa269"
+ integrity sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==
+ dependencies:
+ cliui "^8.0.1"
+ escalade "^3.1.1"
+ get-caller-file "^2.0.5"
+ require-directory "^2.1.1"
+ string-width "^4.2.3"
+ y18n "^5.0.5"
+ yargs-parser "^21.1.1"
yn@3.1.1:
version "3.1.1"
- resolved "https://registry.yarnpkg.com/yn/-/yn-3.1.1.tgz#1e87401a09d767c1d5eab26a6e4c185182d2eb50"
+ resolved "https://registry.npmjs.org/yn/-/yn-3.1.1.tgz"
integrity sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==
+
+yocto-queue@^0.1.0:
+ version "0.1.0"
+ resolved "https://registry.yarnpkg.com/yocto-queue/-/yocto-queue-0.1.0.tgz#0294eb3dee05028d31ee1a5fa2c556a6aaf10a1b"
+ integrity sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==
+
+youch@3.3.4:
+ version "3.3.4"
+ resolved "https://registry.yarnpkg.com/youch/-/youch-3.3.4.tgz#f13ee0966846c6200e7fb9ece89306d95df5e489"
+ integrity sha512-UeVBXie8cA35DS6+nBkls68xaBBXCye0CNznrhszZjTbRVnJKQuNsyLKBTTL4ln1o1rh2PKtv35twV7irj5SEg==
+ dependencies:
+ cookie "^0.7.1"
+ mustache "^4.2.0"
+ stacktracey "^2.1.8"
+
+zod@3.22.3:
+ version "3.22.3"
+ resolved "https://registry.yarnpkg.com/zod/-/zod-3.22.3.tgz#2fbc96118b174290d94e8896371c95629e87a060"
+ integrity sha512-EjIevzuJRiRPbVH4mGc8nApb/lVLKVpmUhAaR5R5doKGfAnGJ6Gr3CViAVjP+4FWSxCsybeWQdcgCtbX+7oZug==
+
+zod@^3.22.3:
+ version "3.24.3"
+ resolved "https://registry.yarnpkg.com/zod/-/zod-3.24.3.tgz#1f40f750a05e477396da64438e0e1c0995dafd87"
+ integrity sha512-HhY1oqzWCQWuUqvBFnsyrtZRhyPeR7SUGv+C4+MsisMuVfSPx8HpwWqH8tRahSlt6M3PiFAcoeFhZAqIXTxoSg==