From 828afd1ebbde760fc338b59c81add498f5a39db2 Mon Sep 17 00:00:00 2001 From: Andrei Pechkurov <37772591+puzpuzpuz@users.noreply.github.com> Date: Mon, 9 Oct 2023 18:05:00 +0300 Subject: [PATCH] feat(nodejs): introduce safer timestamp API (#21) * feat(nodejs): safer timestamp API * Update CI configs * Address review comments --- .github/workflows/build.yml | 21 +- .github/workflows/publish.yml | 38 + README.md | 118 +- docs/Sender.html | 164 +- docs/index.html | 114 +- docs/index.js.html | 2 +- docs/module-@questdb_nodejs-client.html | 4 +- docs/src_sender.js.html | 115 +- examples/auth.js | 44 +- examples/auth_tls.js | 43 +- examples/basic.js | 37 +- examples/workers.js | 20 +- package-lock.json | 4670 ++++++++++++----------- package.json | 13 +- scripts/generateCerts.sh | 8 +- src/sender.js | 113 +- src/validation.js | 22 - test/certs/ca/ca.crt | 58 +- test/certs/ca/ca.key | 106 +- test/certs/client/client.crt | 53 +- test/certs/client/client.csr | 46 +- test/certs/client/client.key | 103 +- test/certs/server/server.crt | 56 +- test/certs/server/server.csr | 48 +- test/certs/server/server.key | 103 +- test/logging.test.js | 30 +- test/mockproxy.js | 8 +- test/proxy.js | 16 +- test/proxyfunctions.js | 10 +- test/sender.test.js | 507 ++- test/testapp.js | 53 +- types/src/sender.d.ts | 10 +- types/src/sender.d.ts.map | 2 +- types/src/validation.d.ts | 7 - types/src/validation.d.ts.map | 2 +- 35 files changed, 3673 insertions(+), 3091 deletions(-) create mode 100644 .github/workflows/publish.yml diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index e7a9226..c1c7f60 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -1,12 +1,14 @@ name: build -on: - push: +on: [push] jobs: - build: - name: Build @questdb/nodejs-questdb-client + test: + name: Build with Node.js ${{ matrix.node-version }} runs-on: ubuntu-latest + strategy: + matrix: + node-version: [16, 20] steps: - name: Checkout repository uses: actions/checkout@v3 @@ -16,7 +18,7 @@ jobs: - name: Setup node uses: actions/setup-node@v3 with: - node-version: 16 + node-version: ${{ matrix.node-version }} - name: Install dependencies run: npm ci @@ -26,12 +28,3 @@ jobs: - name: Run linter run: npm run eslint - - - name: Publish @questdb/nodejs-questdb-client to npm - if: github.ref == 'refs/heads/main' - uses: JS-DevTools/npm-publish@v1 - with: - token: ${{ secrets.CI_TOKEN }} - access: public - check-version: true - package: package.json diff --git a/.github/workflows/publish.yml b/.github/workflows/publish.yml new file mode 100644 index 0000000..d51574e --- /dev/null +++ b/.github/workflows/publish.yml @@ -0,0 +1,38 @@ +name: build + +on: + push: + branches: + - main + +jobs: + build: + name: Publish @questdb/nodejs-questdb-client to npm + runs-on: ubuntu-latest + steps: + - name: Checkout repository + uses: actions/checkout@v3 + with: + submodules: recursive + + - name: Setup node + uses: actions/setup-node@v3 + with: + node-version: 20 + + - name: Install dependencies + run: npm ci + + - name: Run tests + run: npm test + + - name: Run linter + run: npm run eslint + + - name: Publish + uses: JS-DevTools/npm-publish@v2 + with: + token: ${{ secrets.CI_TOKEN }} + access: public + strategy: all + package: package.json diff --git a/README.md b/README.md index 65c8d48..81cae3e 100644 --- a/README.md +++ b/README.md @@ -1,38 +1,44 @@ -## QuestDB Node.js Client +# QuestDB Node.js Client + +## Requirements + +The client requires Node.js v16 or newer version. ## Installation ```shell -npm install @questdb/nodejs-client +npm i -s @questdb/nodejs-client ``` ## Examples ### Basic API usage + ```javascript -const { Sender } = require("@questdb/nodejs-client"); +const { Sender } = require('@questdb/nodejs-client'); async function run() { - // create a sender with a 4k buffer - // it is important to size the buffer correctly so messages can fit - const sender = new Sender({bufferSize: 4096}); + const sender = new Sender(); // connect to QuestDB // host and port are required in connect options - await sender.connect({port: 9009, host: "localhost"}); + await sender.connect({port: 9009, host: 'localhost'}); // add rows to the buffer of the sender - sender.table("prices").symbol("instrument", "EURUSD") - .floatColumn("bid", 1.0195).floatColumn("ask", 1.0221).atNow(); - sender.table("prices").symbol("instrument", "GBPUSD") - .floatColumn("bid", 1.2076).floatColumn("ask", 1.2082).atNow(); + sender.table('prices').symbol('instrument', 'EURUSD') + .floatColumn('bid', 1.0195).floatColumn('ask', 1.0221) + .at(Date.now(), 'ms'); + sender.table('prices').symbol('instrument', 'GBPUSD') + .floatColumn('bid', 1.2076).floatColumn('ask', 1.2082) + .at(Date.now(), 'ms'); // flush the buffer of the sender, sending the data to QuestDB // the buffer is cleared after the data is sent and the sender is ready to accept new data await sender.flush(); // add rows to the buffer again and send it to the server - sender.table("prices").symbol("instrument", "EURUSD") - .floatColumn("bid", 1.0197).floatColumn("ask", 1.0224).atNow(); + sender.table('prices').symbol('instrument', 'EURUSD') + .floatColumn('bid', 1.0197).floatColumn('ask', 1.0224) + .at(Date.now(), 'ms'); await sender.flush(); // close the connection after all rows ingested @@ -40,94 +46,98 @@ async function run() { return new Promise(resolve => resolve(0)); } -run().then(value => console.log(value)).catch(err => console.log(err)); +run() + .then(console.log) + .catch(console.error); ``` ### Authentication and secure connection + ```javascript -const { Sender } = require("@questdb/nodejs-client"); +const { Sender } = require('@questdb/nodejs-client'); async function run() { // construct a JsonWebKey - const CLIENT_ID = "testapp"; - const PRIVATE_KEY = "9b9x5WhJywDEuo1KGQWSPNxtX-6X6R2BRCKhYMMY6n8"; + const CLIENT_ID = 'testapp'; + const PRIVATE_KEY = '9b9x5WhJywDEuo1KGQWSPNxtX-6X6R2BRCKhYMMY6n8'; const PUBLIC_KEY = { - x: "aultdA0PjhD_cWViqKKyL5chm6H1n-BiZBo_48T-uqc", - y: "__ptaol41JWSpTTL525yVEfzmY8A6Vi_QrW1FjKcHMg" + x: 'aultdA0PjhD_cWViqKKyL5chm6H1n-BiZBo_48T-uqc', + y: '__ptaol41JWSpTTL525yVEfzmY8A6Vi_QrW1FjKcHMg' }; const JWK = { ...PUBLIC_KEY, d: PRIVATE_KEY, kid: CLIENT_ID, - kty: "EC", - crv: "P-256", + kty: 'EC', + crv: 'P-256', }; // pass the JsonWebKey to the sender // will use it for authentication - const sender = new Sender({bufferSize: 4096, jwk: JWK}); + const sender = new Sender({jwk: JWK}); // connect() takes an optional second argument // if 'true' passed the connection is secured with TLS encryption - await sender.connect({port: 9009, host: "localhost"}, true); + await sender.connect({port: 9009, host: 'localhost'}, true); // send the data over the authenticated and secure connection - sender.table("prices").symbol("instrument", "EURUSD") - .floatColumn("bid", 1.0197).floatColumn("ask", 1.0224).atNow(); + sender.table('prices').symbol('instrument', 'EURUSD') + .floatColumn('bid', 1.0197).floatColumn('ask', 1.0224) + .at(Date.now(), 'ms'); await sender.flush(); // close the connection after all rows ingested await sender.close(); - return new Promise(resolve => resolve(0)); } -run().then(value => console.log(value)).catch(err => console.log(err)); +run().catch(console.error); ``` ### TypeScript example + ```typescript -import { Sender } from "@questdb/nodejs-client"; +import { Sender } from '@questdb/nodejs-client'; async function run(): Promise { // construct a JsonWebKey - const CLIENT_ID: string = "testapp"; - const PRIVATE_KEY: string = "9b9x5WhJywDEuo1KGQWSPNxtX-6X6R2BRCKhYMMY6n8"; + const CLIENT_ID: string = 'testapp'; + const PRIVATE_KEY: string = '9b9x5WhJywDEuo1KGQWSPNxtX-6X6R2BRCKhYMMY6n8'; const PUBLIC_KEY: { x: string, y: string } = { - x: "aultdA0PjhD_cWViqKKyL5chm6H1n-BiZBo_48T-uqc", - y: "__ptaol41JWSpTTL525yVEfzmY8A6Vi_QrW1FjKcHMg" + x: 'aultdA0PjhD_cWViqKKyL5chm6H1n-BiZBo_48T-uqc', + y: '__ptaol41JWSpTTL525yVEfzmY8A6Vi_QrW1FjKcHMg' }; const JWK: { x: string, y: string, kid: string, kty: string, d: string, crv: string } = { ...PUBLIC_KEY, d: PRIVATE_KEY, kid: CLIENT_ID, - kty: "EC", - crv: "P-256", + kty: 'EC', + crv: 'P-256', }; // pass the JsonWebKey to the sender // will use it for authentication - const sender: Sender = new Sender({bufferSize: 4096, jwk: JWK}); + const sender: Sender = new Sender({jwk: JWK}); // connect() takes an optional second argument // if 'true' passed the connection is secured with TLS encryption - await sender.connect({port: 9009, host: "localhost"}, true); + await sender.connect({port: 9009, host: 'localhost'}, true); // send the data over the authenticated and secure connection - sender.table("prices").symbol("instrument", "EURUSD") - .floatColumn("bid", 1.0197).floatColumn("ask", 1.0224).atNow(); + sender.table('prices').symbol('instrument', 'EURUSD') + .floatColumn('bid', 1.0197).floatColumn('ask', 1.0224).at(Date.now(), 'ms'); await sender.flush(); // close the connection after all rows ingested await sender.close(); - return new Promise(resolve => resolve(0)); } -run().then(value => console.log(value)).catch(err => console.log(err)); +run().catch(console.error); ``` ### Worker threads example + ```javascript -const { Sender } = require("@questdb/nodejs-client"); +const { Sender } = require('@questdb/nodejs-client'); const { Worker, isMainThread, parentPort, workerData } = require('worker_threads'); // fake venue @@ -136,7 +146,7 @@ function* venue(ticker) { let end = false; setTimeout(() => { end = true; }, rndInt(5000)); while (!end) { - yield {"ticker": ticker, "price": Math.random()}; + yield {'ticker': ticker, 'price': Math.random()}; } } @@ -153,35 +163,37 @@ async function subscribe(ticker, onTick) { async function run() { if (isMainThread) { - const tickers = ["t1", "t2", "t3", "t4"]; + const tickers = ['t1', 't2', 't3', 't4']; // main thread to start a worker thread for each ticker for (let ticker in tickers) { const worker = new Worker(__filename, { workerData: { ticker: ticker } }) .on('error', (err) => { throw err; }) .on('exit', () => { console.log(`${ticker} thread exiting...`); }) - .on('message', (msg) => { console.log("Ingested " + msg.count + " prices for ticker " + msg.ticker); }); + .on('message', (msg) => { + console.log(`Ingested ${msg.count} prices for ticker ${msg.ticker}`); + }); } } else { // it is important that each worker has a dedicated sender object // threads cannot share the sender because they would write into the same buffer - const sender = new Sender({ bufferSize: 4096 }); - await sender.connect({ port: 9009, host: "localhost" }); + const sender = new Sender(); + await sender.connect({ port: 9009, host: 'localhost' }); // subscribe for the market data of the ticker assigned to the worker // ingest each price update into the database using the sender let count = 0; await subscribe(workerData.ticker, async (tick) => { sender - .table("prices") - .symbol("ticker", tick.ticker) - .floatColumn("price", tick.price) - .atNow(); + .table('prices') + .symbol('ticker', tick.ticker) + .floatColumn('price', tick.price) + .at(Date.now(), 'ms'); await sender.flush(); count++; }); // let the main thread know how many prices were ingested - parentPort.postMessage({"ticker": workerData.ticker, "count": count}); + parentPort.postMessage({'ticker': workerData.ticker, 'count': count}); // close the connection to the database await sender.close(); @@ -196,5 +208,7 @@ function rndInt(limit) { return Math.floor((Math.random() * limit) + 1); } -run().catch((err) => console.log(err)); +run() + .then(console.log) + .catch(console.error); ``` diff --git a/docs/Sender.html b/docs/Sender.html index 4096142..4808af9 100644 --- a/docs/Sender.html +++ b/docs/Sender.html @@ -174,7 +174,7 @@
Parameters:
Source:
@@ -230,7 +230,7 @@

Methods

-

at(timestamp)

+

at(timestamp, unitopt)

@@ -262,8 +262,12 @@
Parameters:
Type + Attributes + + Default + Description @@ -280,7 +284,7 @@
Parameters:
-string +number | bigint @@ -290,10 +294,61 @@
Parameters:
+ + + + + + + + + + + + - A string or BigInt that represents the designated timestamp in epoch nanoseconds. + Designated epoch timestamp, accepts numbers or BigInts. + + + + + + + unit + + + + + +string + + + + + + + + + <optional>
+ + + + + + + + + + + + us + + + + + Timestamp unit. Supported values: 'ns' - nanoseconds, 'us' - microseconds, 'ms' - milliseconds. Defaults to 'us'. @@ -334,7 +389,7 @@
Parameters:
Source:
@@ -423,7 +478,7 @@

atNowSource:
@@ -583,7 +638,7 @@
Parameters:
Source:
@@ -694,7 +749,7 @@

(async) closeSource:
@@ -889,7 +944,7 @@
Parameters:
Source:
@@ -1071,7 +1126,7 @@
Parameters:
Source:
@@ -1182,7 +1237,7 @@

(async) flushSource:
@@ -1364,7 +1419,7 @@
Parameters:
Source:
@@ -1475,7 +1530,7 @@

resetSource:
@@ -1636,7 +1691,7 @@
Parameters:
Source:
@@ -1796,7 +1851,7 @@
Parameters:
Source:
@@ -1978,7 +2033,7 @@
Parameters:
Source:
@@ -2137,7 +2192,7 @@
Parameters:
Source:
@@ -2195,7 +2250,7 @@
Returns:
-

timestampColumn(name, value) → {Sender}

+

timestampColumn(name, value, unitopt) → {Sender}

@@ -2227,8 +2282,12 @@
Parameters:
Type + Attributes + + Default + Description @@ -2252,8 +2311,20 @@
Parameters:
+ + + + + + + + + + + + Column name. @@ -2278,10 +2349,61 @@
Parameters:
+ + + + + + + + + + + + + + Epoch timestamp, accepts numbers or BigInts. + + + + + + + unit + + + + + +string + + + + + + + + + <optional>
+ + + + + + + + + + + + us + + + - Epoch timestamp in microseconds, accepts only numbers or BigInts. + Timestamp unit. Supported values: 'ns' - nanoseconds, 'us' - microseconds, 'ms' - milliseconds. Defaults to 'us'. @@ -2322,7 +2444,7 @@
Parameters:
Source:
@@ -2396,7 +2518,7 @@

Home

Modules

  • diff --git a/docs/index.html b/docs/index.html index 9171fb4..0c763b4 100644 --- a/docs/index.html +++ b/docs/index.html @@ -43,36 +43,39 @@

    -

    QuestDB Node.js Client

    +

    QuestDB Node.js Client

    +

    Requirements

    +

    The client requires Node.js v16 or newer version.

    Installation

    -
    npm install @questdb/nodejs-client
    +
    npm i -s @questdb/nodejs-client
     

    Examples

    Basic API usage

    -
    const { Sender } = require("@questdb/nodejs-client");
    +
    const { Sender } = require('@questdb/nodejs-client');
     
     async function run() {
    -    // create a sender with a 4k buffer
    -    // it is important to size the buffer correctly so messages can fit
    -    const sender = new Sender({bufferSize: 4096});
    +    const sender = new Sender();
     
         // connect to QuestDB
         // host and port are required in connect options
    -    await sender.connect({port: 9009, host: "localhost"});
    +    await sender.connect({port: 9009, host: 'localhost'});
     
         // add rows to the buffer of the sender
    -    sender.table("prices").symbol("instrument", "EURUSD")
    -        .floatColumn("bid", 1.0195).floatColumn("ask", 1.0221).atNow();
    -    sender.table("prices").symbol("instrument", "GBPUSD")
    -        .floatColumn("bid", 1.2076).floatColumn("ask", 1.2082).atNow();
    +    sender.table('prices').symbol('instrument', 'EURUSD')
    +        .floatColumn('bid', 1.0195).floatColumn('ask', 1.0221)
    +        .at(Date.now(), 'ms');
    +    sender.table('prices').symbol('instrument', 'GBPUSD')
    +        .floatColumn('bid', 1.2076).floatColumn('ask', 1.2082)
    +        .at(Date.now(), 'ms');
     
         // flush the buffer of the sender, sending the data to QuestDB
         // the buffer is cleared after the data is sent and the sender is ready to accept new data
         await sender.flush();
     
         // add rows to the buffer again and send it to the server
    -    sender.table("prices").symbol("instrument", "EURUSD")
    -        .floatColumn("bid", 1.0197).floatColumn("ask", 1.0224).atNow();
    +    sender.table('prices').symbol('instrument', 'EURUSD')
    +        .floatColumn('bid', 1.0197).floatColumn('ask', 1.0224)
    +        .at(Date.now(), 'ms');
         await sender.flush();
     
         // close the connection after all rows ingested
    @@ -80,88 +83,89 @@ 

    Basic API usage

    return new Promise(resolve => resolve(0)); } -run().then(value => console.log(value)).catch(err => console.log(err)); +run() + .then(console.log) + .catch(console.error);

    Authentication and secure connection

    -
    const { Sender } = require("@questdb/nodejs-client");
    +
    const { Sender } = require('@questdb/nodejs-client');
     
     async function run() {
         // construct a JsonWebKey
    -    const CLIENT_ID = "testapp";
    -    const PRIVATE_KEY = "9b9x5WhJywDEuo1KGQWSPNxtX-6X6R2BRCKhYMMY6n8";
    +    const CLIENT_ID = 'testapp';
    +    const PRIVATE_KEY = '9b9x5WhJywDEuo1KGQWSPNxtX-6X6R2BRCKhYMMY6n8';
         const PUBLIC_KEY = {
    -        x: "aultdA0PjhD_cWViqKKyL5chm6H1n-BiZBo_48T-uqc",
    -        y: "__ptaol41JWSpTTL525yVEfzmY8A6Vi_QrW1FjKcHMg"
    +        x: 'aultdA0PjhD_cWViqKKyL5chm6H1n-BiZBo_48T-uqc',
    +        y: '__ptaol41JWSpTTL525yVEfzmY8A6Vi_QrW1FjKcHMg'
         };
         const JWK = {
             ...PUBLIC_KEY,
             d: PRIVATE_KEY,
             kid: CLIENT_ID,
    -        kty: "EC",
    -        crv: "P-256",
    +        kty: 'EC',
    +        crv: 'P-256',
         };
     
         // pass the JsonWebKey to the sender
         // will use it for authentication
    -    const sender = new Sender({bufferSize: 4096, jwk: JWK});
    +    const sender = new Sender({jwk: JWK});
     
         // connect() takes an optional second argument
         // if 'true' passed the connection is secured with TLS encryption
    -    await sender.connect({port: 9009, host: "localhost"}, true);
    +    await sender.connect({port: 9009, host: 'localhost'}, true);
     
         // send the data over the authenticated and secure connection
    -    sender.table("prices").symbol("instrument", "EURUSD")
    -        .floatColumn("bid", 1.0197).floatColumn("ask", 1.0224).atNow();
    +    sender.table('prices').symbol('instrument', 'EURUSD')
    +        .floatColumn('bid', 1.0197).floatColumn('ask', 1.0224)
    +        .at(Date.now(), 'ms');
         await sender.flush();
     
         // close the connection after all rows ingested
         await sender.close();
    -    return new Promise(resolve => resolve(0));
     }
     
    -run().then(value => console.log(value)).catch(err => console.log(err));
    +run().catch(console.error);
     

    TypeScript example

    -
    import { Sender } from "@questdb/nodejs-client";
    +
    import { Sender } from '@questdb/nodejs-client';
     
     async function run(): Promise<number> {
         // construct a JsonWebKey
    -    const CLIENT_ID: string = "testapp";
    -    const PRIVATE_KEY: string = "9b9x5WhJywDEuo1KGQWSPNxtX-6X6R2BRCKhYMMY6n8";
    +    const CLIENT_ID: string = 'testapp';
    +    const PRIVATE_KEY: string = '9b9x5WhJywDEuo1KGQWSPNxtX-6X6R2BRCKhYMMY6n8';
         const PUBLIC_KEY: { x: string, y: string } = {
    -        x: "aultdA0PjhD_cWViqKKyL5chm6H1n-BiZBo_48T-uqc",
    -        y: "__ptaol41JWSpTTL525yVEfzmY8A6Vi_QrW1FjKcHMg"
    +        x: 'aultdA0PjhD_cWViqKKyL5chm6H1n-BiZBo_48T-uqc',
    +        y: '__ptaol41JWSpTTL525yVEfzmY8A6Vi_QrW1FjKcHMg'
         };
         const JWK: { x: string, y: string, kid: string, kty: string, d: string, crv: string } = {
             ...PUBLIC_KEY,
             d: PRIVATE_KEY,
             kid: CLIENT_ID,
    -        kty: "EC",
    -        crv: "P-256",
    +        kty: 'EC',
    +        crv: 'P-256',
         };
     
         // pass the JsonWebKey to the sender
         // will use it for authentication
    -    const sender: Sender = new Sender({bufferSize: 4096, jwk: JWK});
    +    const sender: Sender = new Sender({jwk: JWK});
     
         // connect() takes an optional second argument
         // if 'true' passed the connection is secured with TLS encryption
    -    await sender.connect({port: 9009, host: "localhost"}, true);
    +    await sender.connect({port: 9009, host: 'localhost'}, true);
     
         // send the data over the authenticated and secure connection
    -    sender.table("prices").symbol("instrument", "EURUSD")
    -        .floatColumn("bid", 1.0197).floatColumn("ask", 1.0224).atNow();
    +    sender.table('prices').symbol('instrument', 'EURUSD')
    +        .floatColumn('bid', 1.0197).floatColumn('ask', 1.0224).at(Date.now(), 'ms');
         await sender.flush();
     
         // close the connection after all rows ingested
         await sender.close();
    -    return new Promise(resolve => resolve(0));
     }
     
    -run().then(value => console.log(value)).catch(err => console.log(err));
    +run().catch(console.error);
     

    Worker threads example

    -
    const { Sender } = require("@questdb/nodejs-client");
    +
    const { Sender } = require('@questdb/nodejs-client');
     const { Worker, isMainThread, parentPort, workerData } = require('worker_threads');
     
     // fake venue
    @@ -170,7 +174,7 @@ 

    Worker threads example

    let end = false; setTimeout(() => { end = true; }, rndInt(5000)); while (!end) { - yield {"ticker": ticker, "price": Math.random()}; + yield {'ticker': ticker, 'price': Math.random()}; } } @@ -187,35 +191,37 @@

    Worker threads example

    async function run() { if (isMainThread) { - const tickers = ["t1", "t2", "t3", "t4"]; + const tickers = ['t1', 't2', 't3', 't4']; // main thread to start a worker thread for each ticker for (let ticker in tickers) { const worker = new Worker(__filename, { workerData: { ticker: ticker } }) .on('error', (err) => { throw err; }) .on('exit', () => { console.log(`${ticker} thread exiting...`); }) - .on('message', (msg) => { console.log("Ingested " + msg.count + " prices for ticker " + msg.ticker); }); + .on('message', (msg) => { + console.log(`Ingested ${msg.count} prices for ticker ${msg.ticker}`); + }); } } else { // it is important that each worker has a dedicated sender object // threads cannot share the sender because they would write into the same buffer - const sender = new Sender({ bufferSize: 4096 }); - await sender.connect({ port: 9009, host: "localhost" }); + const sender = new Sender(); + await sender.connect({ port: 9009, host: 'localhost' }); // subscribe for the market data of the ticker assigned to the worker // ingest each price update into the database using the sender let count = 0; await subscribe(workerData.ticker, async (tick) => { sender - .table("prices") - .symbol("ticker", tick.ticker) - .floatColumn("price", tick.price) - .atNow(); + .table('prices') + .symbol('ticker', tick.ticker) + .floatColumn('price', tick.price) + .at(Date.now(), 'ms'); await sender.flush(); count++; }); // let the main thread know how many prices were ingested - parentPort.postMessage({"ticker": workerData.ticker, "count": count}); + parentPort.postMessage({'ticker': workerData.ticker, 'count': count}); // close the connection to the database await sender.close(); @@ -230,7 +236,9 @@

    Worker threads example

    return Math.floor((Math.random() * limit) + 1); } -run().catch((err) => console.log(err)); +run() + .then(console.log) + .catch(console.error);
    @@ -248,7 +256,7 @@

    Home

    Modules

    • diff --git a/docs/index.js.html b/docs/index.js.html index 5f2c899..20a422d 100644 --- a/docs/index.js.html +++ b/docs/index.js.html @@ -53,7 +53,7 @@

      Home

      Modules

      • diff --git a/docs/module-@questdb_nodejs-client.html b/docs/module-@questdb_nodejs-client.html index 79000d2..de66d98 100644 --- a/docs/module-@questdb_nodejs-client.html +++ b/docs/module-@questdb_nodejs-client.html @@ -27,7 +27,7 @@

        Module: @questdb/nodejs-client

        - +
        @@ -120,7 +120,7 @@

        Home

        Modules

        • diff --git a/docs/src_sender.js.html b/docs/src_sender.js.html index 8454273..6efef21 100644 --- a/docs/src_sender.js.html +++ b/docs/src_sender.js.html @@ -28,11 +28,13 @@

          Source: src/sender.js

          'use strict';
           
          -const { Buffer } = require("buffer");
          -const { log } = require("./logging");
          -const { validateTableName, validateColumnName, validateDesignatedTimestamp } = require("./validation");
          -const net = require("net");
          -const tls = require("tls");
          +/* eslint-disable no-unused-vars */
          +
          +const { Buffer } = require('buffer');
          +const { log } = require('./logging');
          +const { validateTableName, validateColumnName } = require('./validation');
          +const net = require('net');
          +const tls = require('tls');
           const crypto = require('crypto');
           
           const DEFAULT_BUFFER_SIZE = 8192;
          @@ -92,7 +94,7 @@ 

          Source: src/sender.js

          if (options) { this.jwk = options.jwk; } - const noCopy = options && typeof options.copyBuffer === "boolean" && !options.copyBuffer; + const noCopy = options && typeof options.copyBuffer === 'boolean' && !options.copyBuffer; this.toBuffer = noCopy ? this.toBufferView : this.toBufferNew; this.doResolve = noCopy ? resolve => { @@ -100,8 +102,8 @@

          Source: src/sender.js

          resolve(true); } : resolve => resolve(true); - this.log = options && typeof options.log === "function" && options.log ? options.log : log; - this.resize(options && typeof options.bufferSize === "number" && options.bufferSize ? options.bufferSize : DEFAULT_BUFFER_SIZE); + this.log = options && typeof options.log === 'function' && options.log ? options.log : log; + this.resize(options && typeof options.bufferSize === 'number' && options.bufferSize ? options.bufferSize : DEFAULT_BUFFER_SIZE); this.reset(); } @@ -149,19 +151,19 @@

          Source: src/sender.js

          let data; if (this.socket) { - throw new Error("Sender connected already"); + throw new Error('Sender connected already'); } this.socket = !secure ? net.connect(options) : tls.connect(options, async () => { if (!self.socket.authorized) { - reject(new Error("Problem with server's certificate")); + reject(new Error('Problem with server\'s certificate')); await self.close(); } }); this.socket.setKeepAlive(true); - this.socket.on("data", async raw => { + this.socket.on('data', async raw => { data = !data ? raw : Buffer.concat([data, raw]); if (!authenticated) { authenticated = await authenticate(self, data); @@ -169,13 +171,13 @@

          Source: src/sender.js

          resolve(true); } } else { - this.log("warn", `Received unexpected data: ${data}`); + this.log('warn', `Received unexpected data: ${data}`); } }) - .on("ready", async () => { - this.log("info", `Successfully connected to ${options.host}:${options.port}`); + .on('ready', async () => { + this.log('info', `Successfully connected to ${options.host}:${options.port}`); if (self.jwk) { - this.log("info", `Authenticating with ${options.host}:${options.port}`); + this.log('info', `Authenticating with ${options.host}:${options.port}`); await self.socket.write(`${self.jwk.kid}\n`, err => { if (err) { reject(err); @@ -186,8 +188,8 @@

          Source: src/sender.js

          resolve(true); } }) - .on("error", err => { - this.log("error", err); + .on('error', err => { + this.log('error', err); reject(err); }); }); @@ -201,7 +203,7 @@

          Source: src/sender.js

          const address = this.socket.remoteAddress; const port = this.socket.remotePort; this.socket.destroy(); - this.log("info", `Connection to ${address}:${port} is closed`); + this.log('info', `Connection to ${address}:${port} is closed`); } /** @@ -255,11 +257,11 @@

          Source: src/sender.js

          * @return {Sender} Returns with a reference to this sender. */ table(table) { - if (typeof table !== "string") { + if (typeof table !== 'string') { throw new Error(`Table name must be a string, received ${typeof table}`); } if (this.hasTable) { - throw new Error("Table name has already been set"); + throw new Error('Table name has already been set'); } validateTableName(table); checkCapacity(this, [table]); @@ -276,11 +278,11 @@

          Source: src/sender.js

          * @return {Sender} Returns with a reference to this sender. */ symbol(name, value) { - if (typeof name !== "string") { + if (typeof name !== 'string') { throw new Error(`Symbol name must be a string, received ${typeof name}`); } if (!this.hasTable || this.hasColumns) { - throw new Error("Symbol can be added only after table name is set and before any column added"); + throw new Error('Symbol can be added only after table name is set and before any column added'); } const valueStr = value.toString(); checkCapacity(this, [name, valueStr], 2 + name.length + valueStr.length); @@ -306,7 +308,7 @@

          Source: src/sender.js

          write(this, '"'); writeEscaped(this, value, true); write(this, '"'); - }, "string"); + }, 'string'); return this; } @@ -321,7 +323,7 @@

          Source: src/sender.js

          writeColumn(this, name, value, () => { checkCapacity(this, [], 1); write(this, value ? 't' : 'f'); - }, "boolean"); + }, 'boolean'); return this; } @@ -337,7 +339,7 @@

          Source: src/sender.js

          const valueStr = value.toString(); checkCapacity(this, [valueStr], valueStr.length); write(this, valueStr); - }, "number"); + }, 'number'); return this; } @@ -365,15 +367,17 @@

          Source: src/sender.js

          * Write a timestamp column with its value into the buffer of the sender. * * @param {string} name - Column name. - * @param {number | bigint} value - Epoch timestamp in microseconds, accepts only numbers or BigInts. + * @param {number | bigint} value - Epoch timestamp, accepts numbers or BigInts. + * @param {string} [unit=us] - Timestamp unit. Supported values: 'ns' - nanoseconds, 'us' - microseconds, 'ms' - milliseconds. Defaults to 'us'. * @return {Sender} Returns with a reference to this sender. */ - timestampColumn(name, value) { - if (typeof value !== "bigint" && !Number.isInteger(value)) { + timestampColumn(name, value, unit = 'us') { + if (typeof value !== 'bigint' && !Number.isInteger(value)) { throw new Error(`Value must be an integer or BigInt, received ${value}`); } writeColumn(this, name, value, () => { - const valueStr = value.toString(); + const valueMicros = timestampToMicros(BigInt(value), unit); + const valueStr = valueMicros.toString(); checkCapacity(this, [valueStr], 1 + valueStr.length); write(this, valueStr); write(this, 't'); @@ -384,17 +388,18 @@

          Source: src/sender.js

          /** * Closing the row after writing the designated timestamp into the buffer of the sender. * - * @param {string | bigint} timestamp - A string or BigInt that represents the designated timestamp in epoch nanoseconds. + * @param {number | bigint} timestamp - Designated epoch timestamp, accepts numbers or BigInts. + * @param {string} [unit=us] - Timestamp unit. Supported values: 'ns' - nanoseconds, 'us' - microseconds, 'ms' - milliseconds. Defaults to 'us'. */ - at(timestamp) { + at(timestamp, unit = 'us') { if (!this.hasSymbols && !this.hasColumns) { - throw new Error("The row must have a symbol or column set before it is closed"); + throw new Error('The row must have a symbol or column set before it is closed'); } - if (typeof timestamp !== "string" && typeof timestamp !== "bigint") { - throw new Error(`The designated timestamp must be of type string or BigInt, received ${typeof timestamp}`); + if (typeof timestamp !== 'bigint' && !Number.isInteger(timestamp)) { + throw new Error(`Designated timestamp must be an integer or BigInt, received ${timestamp}`); } - validateDesignatedTimestamp(timestamp); - const timestampStr = timestamp.toString(); + const timestampNanos = timestampToNanos(BigInt(timestamp), unit); + const timestampStr = timestampNanos.toString(); checkCapacity(this, [], 2 + timestampStr.length); write(this, ' '); write(this, timestampStr); @@ -408,7 +413,7 @@

          Source: src/sender.js

          */ atNow() { if (!this.hasSymbols && !this.hasColumns) { - throw new Error("The row must have a symbol or column set before it is closed"); + throw new Error('The row must have a symbol or column set before it is closed'); } checkCapacity(this, [], 1); write(this, '\n'); @@ -423,13 +428,13 @@

          Source: src/sender.js

          {'key': sender.jwk, 'format': 'jwk'} ); const signature = await crypto.sign( - "RSA-SHA256", + 'RSA-SHA256', challenge.slice(0, challenge.length - 1), keyObject ); return new Promise((resolve, reject) => { - sender.socket.write(`${Buffer.from(signature).toString("base64")}\n`, err => { + sender.socket.write(`${Buffer.from(signature).toString('base64')}\n`, err => { err ? reject(err) : resolve(true); }); }); @@ -467,14 +472,14 @@

          Source: src/sender.js

          } function writeColumn(sender, name, value, writeValue, valueType) { - if (typeof name !== "string") { + if (typeof name !== 'string') { throw new Error(`Column name must be a string, received ${typeof name}`); } if (valueType != null && typeof value !== valueType) { throw new Error(`Column value must be of type ${valueType}, received ${typeof value}`); } if (!sender.hasTable) { - throw new Error("Column can be set only after table name is set"); + throw new Error('Column can be set only after table name is set'); } checkCapacity(sender, [name], 2 + name.length); write(sender, sender.hasColumns ? ',' : ' '); @@ -529,6 +534,32 @@

          Source: src/sender.js

          } } +function timestampToMicros(timestamp, unit) { + switch (unit) { + case 'ns': + return timestamp / 1000n; + case 'us': + return timestamp; + case 'ms': + return timestamp * 1000n; + default: + throw new Error('Unknown timestamp unit: ' + unit); + } +} + +function timestampToNanos(timestamp, unit) { + switch (unit) { + case 'ns': + return timestamp; + case 'us': + return timestamp * 1000n; + case 'ms': + return timestamp * 1000_000n; + default: + throw new Error('Unknown timestamp unit: ' + unit); + } +} + exports.Sender = Sender; exports.DEFAULT_BUFFER_SIZE = DEFAULT_BUFFER_SIZE;
          @@ -547,7 +578,7 @@

          Home

          Modules

          • diff --git a/examples/auth.js b/examples/auth.js index f47ff75..b850efd 100644 --- a/examples/auth.js +++ b/examples/auth.js @@ -1,19 +1,19 @@ -const { Sender } = require("@questdb/nodejs-client"); +const { Sender } = require('@questdb/nodejs-client'); async function run() { // construct a JsonWebKey - const CLIENT_ID = "testapp"; - const PRIVATE_KEY = "9b9x5WhJywDEuo1KGQWSPNxtX-6X6R2BRCKhYMMY6n8"; + const CLIENT_ID = 'testapp'; + const PRIVATE_KEY = '9b9x5WhJywDEuo1KGQWSPNxtX-6X6R2BRCKhYMMY6n8'; const PUBLIC_KEY = { - x: "aultdA0PjhD_cWViqKKyL5chm6H1n-BiZBo_48T-uqc", - y: "__ptaol41JWSpTTL525yVEfzmY8A6Vi_QrW1FjKcHMg", + x: 'aultdA0PjhD_cWViqKKyL5chm6H1n-BiZBo_48T-uqc', + y: '__ptaol41JWSpTTL525yVEfzmY8A6Vi_QrW1FjKcHMg', }; const JWK = { ...PUBLIC_KEY, d: PRIVATE_KEY, kid: CLIENT_ID, - kty: "EC", - crv: "P-256", + kty: 'EC', + crv: 'P-256', }; // pass the JsonWebKey to the sender @@ -22,23 +22,31 @@ async function run() { // connect() takes an optional second argument // if 'true' passed the connection is secured with TLS encryption - await sender.connect({ port: 9009, host: "localhost" }, false); + await sender.connect({ port: 9009, host: 'localhost' }, false); // send the data over the authenticated connection + let bday = Date.parse('1856-07-10'); sender - .table("prices") - .symbol("instrument", "EURUSD") - .floatColumn("bid", 1.0197) - .floatColumn("ask", 1.0224) - .atNow(); + .table('inventors') + .symbol('born', 'Austrian Empire') + .timestampColumn('birthday', bday, 'ms') // epoch in millis + .intColumn('id', 0) + .stringColumn('name', 'Nicola Tesla') + .at(Date.now(), 'ms'); // epoch in millis + bday = Date.parse('1847-02-11'); + sender + .table('inventors') + .symbol('born', 'USA') + .timestampColumn('birthday', bday, 'ms') + .intColumn('id', 1) + .stringColumn('name', 'Thomas Alva Edison') + .at(Date.now(), 'ms'); + + // flush the buffer of the sender, sending the data to QuestDB await sender.flush(); // close the connection after all rows ingested await sender.close(); - return 0; } -run() - .then((value) => console.log(value)) - .catch((err) => console.log(err)); - +run().catch(console.error); diff --git a/examples/auth_tls.js b/examples/auth_tls.js index 687d99c..82524ab 100644 --- a/examples/auth_tls.js +++ b/examples/auth_tls.js @@ -1,19 +1,19 @@ -const { Sender } = require("@questdb/nodejs-client"); +const { Sender } = require('@questdb/nodejs-client'); async function run() { // construct a JsonWebKey - const CLIENT_ID = "testapp"; - const PRIVATE_KEY = "9b9x5WhJywDEuo1KGQWSPNxtX-6X6R2BRCKhYMMY6n8"; + const CLIENT_ID = 'testapp'; + const PRIVATE_KEY = '9b9x5WhJywDEuo1KGQWSPNxtX-6X6R2BRCKhYMMY6n8'; const PUBLIC_KEY = { - x: "aultdA0PjhD_cWViqKKyL5chm6H1n-BiZBo_48T-uqc", - y: "__ptaol41JWSpTTL525yVEfzmY8A6Vi_QrW1FjKcHMg", + x: 'aultdA0PjhD_cWViqKKyL5chm6H1n-BiZBo_48T-uqc', + y: '__ptaol41JWSpTTL525yVEfzmY8A6Vi_QrW1FjKcHMg', }; const JWK = { ...PUBLIC_KEY, d: PRIVATE_KEY, kid: CLIENT_ID, - kty: "EC", - crv: "P-256", + kty: 'EC', + crv: 'P-256', }; // pass the JsonWebKey to the sender @@ -22,22 +22,31 @@ async function run() { // connect() takes an optional second argument // if 'true' passed the connection is secured with TLS encryption - await sender.connect({ port: 9009, host: "localhost" }, true); + await sender.connect({ port: 9009, host: 'localhost' }, true); // send the data over the authenticated and secure connection + let bday = Date.parse('1856-07-10'); sender - .table("prices") - .symbol("instrument", "EURUSD") - .floatColumn("bid", 1.0197) - .floatColumn("ask", 1.0224) - .atNow(); + .table('inventors') + .symbol('born', 'Austrian Empire') + .timestampColumn('birthday', bday, 'ms') // epoch in millis + .intColumn('id', 0) + .stringColumn('name', 'Nicola Tesla') + .at(Date.now(), 'ms'); // epoch in millis + bday = Date.parse('1847-02-11'); + sender + .table('inventors') + .symbol('born', 'USA') + .timestampColumn('birthday', bday, 'ms') + .intColumn('id', 1) + .stringColumn('name', 'Thomas Alva Edison') + .at(Date.now(), 'ms'); + + // flush the buffer of the sender, sending the data to QuestDB await sender.flush(); // close the connection after all rows ingested await sender.close(); - return 0; } -run() - .then((value) => console.log(value)) - .catch((err) => console.log(err)); +run().catch(console.error); diff --git a/examples/basic.js b/examples/basic.js index 9290b8d..cf1dffc 100644 --- a/examples/basic.js +++ b/examples/basic.js @@ -1,4 +1,4 @@ -const { Sender } = require("@questdb/nodejs-client"); +const { Sender } = require('@questdb/nodejs-client'); async function run() { // create a sender with a 4KB buffer @@ -6,25 +6,25 @@ async function run() { // connect to QuestDB // host and port are required in connect options - await sender.connect({ port: 9009, host: "localhost" }); + await sender.connect({ port: 9009, host: 'localhost' }); // add rows to the buffer of the sender - let bday = Date.parse("1856-07-10"); + let bday = Date.parse('1856-07-10'); sender - .table("inventors") - .symbol("born", "Austrian Empire") - .timestampColumn("birthday", BigInt(bday) * 1000n) // epoch in micros (BigInt) - .intColumn("id", 0) - .stringColumn("name", "Nicola Tesla") - .at(BigInt(Date.now()) * 1000_000n); // epoch in nanos (BigInt) - bday = Date.parse("1847-02-11"); + .table('inventors') + .symbol('born', 'Austrian Empire') + .timestampColumn('birthday', bday, 'ms') // epoch in millis + .intColumn('id', 0) + .stringColumn('name', 'Nicola Tesla') + .at(Date.now(), 'ms'); // epoch in millis + bday = Date.parse('1847-02-11'); sender - .table("inventors") - .symbol("born", "USA") - .timestampColumn("birthday", BigInt(bday) * 1000n) - .intColumn("id", 1) - .stringColumn("name", "Thomas Alva Edison") - .atNow(); + .table('inventors') + .symbol('born', 'USA') + .timestampColumn('birthday', bday, 'ms') + .intColumn('id', 1) + .stringColumn('name', 'Thomas Alva Edison') + .at(Date.now(), 'ms'); // flush the buffer of the sender, sending the data to QuestDB // the buffer is cleared after the data is sent and the sender is ready to accept new data @@ -32,9 +32,6 @@ async function run() { // close the connection after all rows were sent await sender.close(); - return 0; } -run() - .then(console.log) - .catch(console.error); +run().catch(console.error); diff --git a/examples/workers.js b/examples/workers.js index a293c61..b23298e 100644 --- a/examples/workers.js +++ b/examples/workers.js @@ -1,4 +1,4 @@ -const { Sender } = require("@questdb/nodejs-client"); +const { Sender } = require('@questdb/nodejs-client'); const { Worker, isMainThread, parentPort, workerData } = require('worker_threads'); // fake venue @@ -7,7 +7,7 @@ function* venue(ticker) { let end = false; setTimeout(() => { end = true; }, rndInt(5000)); while (!end) { - yield {"ticker": ticker, "price": Math.random()}; + yield {'ticker': ticker, 'price': Math.random()}; } } @@ -24,35 +24,35 @@ async function subscribe(ticker, onTick) { async function run() { if (isMainThread) { - const tickers = ["t1", "t2", "t3", "t4"]; + const tickers = ['t1', 't2', 't3', 't4']; // main thread to start a worker thread for each ticker for (let ticker in tickers) { const worker = new Worker(__filename, { workerData: { ticker: ticker } }) .on('error', (err) => { throw err; }) .on('exit', () => { console.log(`${ticker} thread exiting...`); }) - .on('message', (msg) => { console.log("Ingested " + msg.count + " prices for ticker " + msg.ticker); }); + .on('message', (msg) => { console.log('Ingested ' + msg.count + ' prices for ticker ' + msg.ticker); }); } } else { // it is important that each worker has a dedicated sender object // threads cannot share the sender because they would write into the same buffer const sender = new Sender({ bufferSize: 4096 }); - await sender.connect({ port: 9009, host: "localhost" }); + await sender.connect({ port: 9009, host: 'localhost' }); // subscribe for the market data of the ticker assigned to the worker // ingest each price update into the database using the sender let count = 0; await subscribe(workerData.ticker, async (tick) => { sender - .table("prices") - .symbol("ticker", tick.ticker) - .floatColumn("price", tick.price) + .table('prices') + .symbol('ticker', tick.ticker) + .floatColumn('price', tick.price) .atNow(); await sender.flush(); count++; }); // let the main thread know how many prices were ingested - parentPort.postMessage({"ticker": workerData.ticker, "count": count}); + parentPort.postMessage({'ticker': workerData.ticker, 'count': count}); // close the connection to the database await sender.close(); @@ -67,4 +67,4 @@ function rndInt(limit) { return Math.floor((Math.random() * limit) + 1); } -run().catch((err) => console.log(err)); +run().catch(console.error); diff --git a/package-lock.json b/package-lock.json index 0dc1a93..d1fe55c 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,27 +1,36 @@ { "name": "@questdb/nodejs-client", - "version": "1.0.5", + "version": "2.0.0", "lockfileVersion": 2, "requires": true, "packages": { "": { "name": "@questdb/nodejs-client", - "version": "1.0.5", + "version": "2.0.0", "license": "Apache-2.0", "devDependencies": { - "eslint": "^8.21.0", - "jest": "^28.1.3", - "jest-jasmine2": "^28.1.3", - "testcontainers": "^8.12.0" + "eslint": "^8.50.0", + "jest": "^29.7.0", + "jest-jasmine2": "^29.7.0", + "testcontainers": "^10.2.1" + } + }, + "node_modules/@aashutoshrathi/word-wrap": { + "version": "1.2.6", + "resolved": "https://registry.npmjs.org/@aashutoshrathi/word-wrap/-/word-wrap-1.2.6.tgz", + "integrity": "sha512-1Yjs2SvM8TflER/OD3cOjhWWOZb58A2t7wpE2S9XfBYTiIl+XFhQG2bjy4Pu1I+EAlCNUzRDYDdFwFYUKvXcIA==", + "dev": true, + "engines": { + "node": ">=0.10.0" } }, "node_modules/@ampproject/remapping": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.2.0.tgz", - "integrity": "sha512-qRmjj8nj9qmLTQXXmaR1cck3UXSRMPrbsLJAasZpF+t3riI71BXed5ebIOYwQntykeZuhjsdweEc9BxH5Jc26w==", + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.2.1.tgz", + "integrity": "sha512-lFMjJTrFL3j7L9yBxwYfCq2k6qqwHyzuUl/XBnif78PWTJYyL/dfowQHWE3sp6U6ZzqWiiIZnpTMO96zhkjwtg==", "dev": true, "dependencies": { - "@jridgewell/gen-mapping": "^0.1.0", + "@jridgewell/gen-mapping": "^0.3.0", "@jridgewell/trace-mapping": "^0.3.9" }, "engines": { @@ -29,47 +38,119 @@ } }, "node_modules/@babel/code-frame": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.18.6.tgz", - "integrity": "sha512-TDCmlK5eOvH+eH7cdAFlNXeVJqWIQ7gW9tY1GJIpUtFb6CmjVyq2VM3u71bOyR8CRihcCgMUYoDNyLXao3+70Q==", + "version": "7.22.13", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.22.13.tgz", + "integrity": "sha512-XktuhWlJ5g+3TJXc5upd9Ks1HutSArik6jf2eAjYFyIOf4ej3RN+184cZbzDvbPnuTJIUhPKKJE3cIsYTiAT3w==", "dev": true, "dependencies": { - "@babel/highlight": "^7.18.6" + "@babel/highlight": "^7.22.13", + "chalk": "^2.4.2" }, "engines": { "node": ">=6.9.0" } }, + "node_modules/@babel/code-frame/node_modules/ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "dependencies": { + "color-convert": "^1.9.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/@babel/code-frame/node_modules/chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "dependencies": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/@babel/code-frame/node_modules/color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dev": true, + "dependencies": { + "color-name": "1.1.3" + } + }, + "node_modules/@babel/code-frame/node_modules/color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", + "dev": true + }, + "node_modules/@babel/code-frame/node_modules/escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", + "dev": true, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/@babel/code-frame/node_modules/has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/@babel/code-frame/node_modules/supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, "node_modules/@babel/compat-data": { - "version": "7.18.8", - "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.18.8.tgz", - "integrity": "sha512-HSmX4WZPPK3FUxYp7g2T6EyO8j96HlZJlxmKPSh6KAcqwyDrfx7hKjXpAW/0FhFfTJsR0Yt4lAjLI2coMptIHQ==", + "version": "7.22.20", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.22.20.tgz", + "integrity": "sha512-BQYjKbpXjoXwFW5jGqiizJQQT/aC7pFm9Ok1OWssonuguICi264lbgMzRp2ZMmRSlfkX6DsWDDcsrctK8Rwfiw==", "dev": true, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/core": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.18.9.tgz", - "integrity": "sha512-1LIb1eL8APMy91/IMW+31ckrfBM4yCoLaVzoDhZUKSM4cu1L1nIidyxkCgzPAgrC5WEz36IPEr/eSeSF9pIn+g==", - "dev": true, - "dependencies": { - "@ampproject/remapping": "^2.1.0", - "@babel/code-frame": "^7.18.6", - "@babel/generator": "^7.18.9", - "@babel/helper-compilation-targets": "^7.18.9", - "@babel/helper-module-transforms": "^7.18.9", - "@babel/helpers": "^7.18.9", - "@babel/parser": "^7.18.9", - "@babel/template": "^7.18.6", - "@babel/traverse": "^7.18.9", - "@babel/types": "^7.18.9", - "convert-source-map": "^1.7.0", + "version": "7.23.0", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.23.0.tgz", + "integrity": "sha512-97z/ju/Jy1rZmDxybphrBuI+jtJjFVoz7Mr9yUQVVVi+DNZE333uFQeMOqcCIy1x3WYBIbWftUSLmbNXNT7qFQ==", + "dev": true, + "dependencies": { + "@ampproject/remapping": "^2.2.0", + "@babel/code-frame": "^7.22.13", + "@babel/generator": "^7.23.0", + "@babel/helper-compilation-targets": "^7.22.15", + "@babel/helper-module-transforms": "^7.23.0", + "@babel/helpers": "^7.23.0", + "@babel/parser": "^7.23.0", + "@babel/template": "^7.22.15", + "@babel/traverse": "^7.23.0", + "@babel/types": "^7.23.0", + "convert-source-map": "^2.0.0", "debug": "^4.1.0", "gensync": "^1.0.0-beta.2", - "json5": "^2.2.1", - "semver": "^6.3.0" + "json5": "^2.2.3", + "semver": "^6.3.1" }, "engines": { "node": ">=6.9.0" @@ -80,189 +161,183 @@ } }, "node_modules/@babel/generator": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.18.9.tgz", - "integrity": "sha512-wt5Naw6lJrL1/SGkipMiFxJjtyczUWTP38deiP1PO60HsBjDeKk08CGC3S8iVuvf0FmTdgKwU1KIXzSKL1G0Ug==", + "version": "7.23.0", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.23.0.tgz", + "integrity": "sha512-lN85QRR+5IbYrMWM6Y4pE/noaQtg4pNiqeNGX60eqOfo6gtEj6uw/JagelB8vVztSd7R6M5n1+PQkDbHbBRU4g==", "dev": true, "dependencies": { - "@babel/types": "^7.18.9", + "@babel/types": "^7.23.0", "@jridgewell/gen-mapping": "^0.3.2", + "@jridgewell/trace-mapping": "^0.3.17", "jsesc": "^2.5.1" }, "engines": { "node": ">=6.9.0" } }, - "node_modules/@babel/generator/node_modules/@jridgewell/gen-mapping": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.2.tgz", - "integrity": "sha512-mh65xKQAzI6iBcFzwv28KVWSmCkdRBWoOh+bYQGW3+6OZvbbN3TqMGo5hqYxQniRcH9F2VZIoJCm4pa3BPDK/A==", - "dev": true, - "dependencies": { - "@jridgewell/set-array": "^1.0.1", - "@jridgewell/sourcemap-codec": "^1.4.10", - "@jridgewell/trace-mapping": "^0.3.9" - }, - "engines": { - "node": ">=6.0.0" - } - }, "node_modules/@babel/helper-compilation-targets": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.18.9.tgz", - "integrity": "sha512-tzLCyVmqUiFlcFoAPLA/gL9TeYrF61VLNtb+hvkuVaB5SUjW7jcfrglBIX1vUIoT7CLP3bBlIMeyEsIl2eFQNg==", + "version": "7.22.15", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.22.15.tgz", + "integrity": "sha512-y6EEzULok0Qvz8yyLkCvVX+02ic+By2UdOhylwUOvOn9dvYc9mKICJuuU1n1XBI02YWsNsnrY1kc6DVbjcXbtw==", "dev": true, "dependencies": { - "@babel/compat-data": "^7.18.8", - "@babel/helper-validator-option": "^7.18.6", - "browserslist": "^4.20.2", - "semver": "^6.3.0" + "@babel/compat-data": "^7.22.9", + "@babel/helper-validator-option": "^7.22.15", + "browserslist": "^4.21.9", + "lru-cache": "^5.1.1", + "semver": "^6.3.1" }, "engines": { "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" } }, "node_modules/@babel/helper-environment-visitor": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.18.9.tgz", - "integrity": "sha512-3r/aACDJ3fhQ/EVgFy0hpj8oHyHpQc+LPtJoY9SzTThAsStm4Ptegq92vqKoE3vD706ZVFWITnMnxucw+S9Ipg==", + "version": "7.22.20", + "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.22.20.tgz", + "integrity": "sha512-zfedSIzFhat/gFhWfHtgWvlec0nqB9YEIVrpuwjruLlXfUSnA8cJB0miHKwqDnQ7d32aKo2xt88/xZptwxbfhA==", "dev": true, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-function-name": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.18.9.tgz", - "integrity": "sha512-fJgWlZt7nxGksJS9a0XdSaI4XvpExnNIgRP+rVefWh5U7BL8pPuir6SJUmFKRfjWQ51OtWSzwOxhaH/EBWWc0A==", + "version": "7.23.0", + "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.23.0.tgz", + "integrity": "sha512-OErEqsrxjZTJciZ4Oo+eoZqeW9UIiOcuYKRJA4ZAgV9myA+pOXhhmpfNCKjEH/auVfEYVFJ6y1Tc4r0eIApqiw==", "dev": true, "dependencies": { - "@babel/template": "^7.18.6", - "@babel/types": "^7.18.9" + "@babel/template": "^7.22.15", + "@babel/types": "^7.23.0" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-hoist-variables": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.18.6.tgz", - "integrity": "sha512-UlJQPkFqFULIcyW5sbzgbkxn2FKRgwWiRexcuaR8RNJRy8+LLveqPjwZV/bwrLZCN0eUHD/x8D0heK1ozuoo6Q==", + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.22.5.tgz", + "integrity": "sha512-wGjk9QZVzvknA6yKIUURb8zY3grXCcOZt+/7Wcy8O2uctxhplmUPkOdlgoNhmdVee2c92JXbf1xpMtVNbfoxRw==", "dev": true, "dependencies": { - "@babel/types": "^7.18.6" + "@babel/types": "^7.22.5" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-module-imports": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.18.6.tgz", - "integrity": "sha512-0NFvs3VkuSYbFi1x2Vd6tKrywq+z/cLeYC/RJNFrIX/30Bf5aiGYbtvGXolEktzJH8o5E5KJ3tT+nkxuuZFVlA==", + "version": "7.22.15", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.22.15.tgz", + "integrity": "sha512-0pYVBnDKZO2fnSPCrgM/6WMc7eS20Fbok+0r88fp+YtWVLZrp4CkafFGIp+W0VKw4a22sgebPT99y+FDNMdP4w==", "dev": true, "dependencies": { - "@babel/types": "^7.18.6" + "@babel/types": "^7.22.15" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-module-transforms": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.18.9.tgz", - "integrity": "sha512-KYNqY0ICwfv19b31XzvmI/mfcylOzbLtowkw+mfvGPAQ3kfCnMLYbED3YecL5tPd8nAYFQFAd6JHp2LxZk/J1g==", + "version": "7.23.0", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.23.0.tgz", + "integrity": "sha512-WhDWw1tdrlT0gMgUJSlX0IQvoO1eN279zrAUbVB+KpV2c3Tylz8+GnKOLllCS6Z/iZQEyVYxhZVUdPTqs2YYPw==", "dev": true, "dependencies": { - "@babel/helper-environment-visitor": "^7.18.9", - "@babel/helper-module-imports": "^7.18.6", - "@babel/helper-simple-access": "^7.18.6", - "@babel/helper-split-export-declaration": "^7.18.6", - "@babel/helper-validator-identifier": "^7.18.6", - "@babel/template": "^7.18.6", - "@babel/traverse": "^7.18.9", - "@babel/types": "^7.18.9" + "@babel/helper-environment-visitor": "^7.22.20", + "@babel/helper-module-imports": "^7.22.15", + "@babel/helper-simple-access": "^7.22.5", + "@babel/helper-split-export-declaration": "^7.22.6", + "@babel/helper-validator-identifier": "^7.22.20" }, "engines": { "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" } }, "node_modules/@babel/helper-plugin-utils": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.18.9.tgz", - "integrity": "sha512-aBXPT3bmtLryXaoJLyYPXPlSD4p1ld9aYeR+sJNOZjJJGiOpb+fKfh3NkcCu7J54nUJwCERPBExCCpyCOHnu/w==", + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.22.5.tgz", + "integrity": "sha512-uLls06UVKgFG9QD4OeFYLEGteMIAa5kpTPcFL28yuCIIzsf6ZyKZMllKVOCZFhiZ5ptnwX4mtKdWCBE/uT4amg==", "dev": true, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-simple-access": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.18.6.tgz", - "integrity": "sha512-iNpIgTgyAvDQpDj76POqg+YEt8fPxx3yaNBg3S30dxNKm2SWfYhD0TGrK/Eu9wHpUW63VQU894TsTg+GLbUa1g==", + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.22.5.tgz", + "integrity": "sha512-n0H99E/K+Bika3++WNL17POvo4rKWZ7lZEp1Q+fStVbUi8nxPQEBOlTmCOxW/0JsS56SKKQ+ojAe2pHKJHN35w==", "dev": true, "dependencies": { - "@babel/types": "^7.18.6" + "@babel/types": "^7.22.5" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-split-export-declaration": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.18.6.tgz", - "integrity": "sha512-bde1etTx6ZyTmobl9LLMMQsaizFVZrquTEHOqKeQESMKo4PlObf+8+JA25ZsIpZhT/WEd39+vOdLXAFG/nELpA==", + "version": "7.22.6", + "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.22.6.tgz", + "integrity": "sha512-AsUnxuLhRYsisFiaJwvp1QF+I3KjD5FOxut14q/GzovUe6orHLesW2C7d754kRm53h5gqrz6sFl6sxc4BVtE/g==", "dev": true, "dependencies": { - "@babel/types": "^7.18.6" + "@babel/types": "^7.22.5" }, "engines": { "node": ">=6.9.0" } }, + "node_modules/@babel/helper-string-parser": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.22.5.tgz", + "integrity": "sha512-mM4COjgZox8U+JcXQwPijIZLElkgEpO5rsERVDJTc2qfCDfERyob6k5WegS14SX18IIjv+XD+GrqNumY5JRCDw==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, "node_modules/@babel/helper-validator-identifier": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.18.6.tgz", - "integrity": "sha512-MmetCkz9ej86nJQV+sFCxoGGrUbU3q02kgLciwkrt9QqEB7cP39oKEY0PakknEO0Gu20SskMRi+AYZ3b1TpN9g==", + "version": "7.22.20", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.22.20.tgz", + "integrity": "sha512-Y4OZ+ytlatR8AI+8KZfKuL5urKp7qey08ha31L8b3BwewJAoJamTzyvxPR/5D+KkdJCGPq/+8TukHBlY10FX9A==", "dev": true, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-validator-option": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.18.6.tgz", - "integrity": "sha512-XO7gESt5ouv/LRJdrVjkShckw6STTaB7l9BrpBaAHDeF5YZT+01PCwmR0SJHnkW6i8OwW/EVWRShfi4j2x+KQw==", + "version": "7.22.15", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.22.15.tgz", + "integrity": "sha512-bMn7RmyFjY/mdECUbgn9eoSY4vqvacUnS9i9vGAGttgFWesO6B4CYWA7XlpbWgBt71iv/hfbPlynohStqnu5hA==", "dev": true, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helpers": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.18.9.tgz", - "integrity": "sha512-Jf5a+rbrLoR4eNdUmnFu8cN5eNJT6qdTdOg5IHIzq87WwyRw9PwguLFOWYgktN/60IP4fgDUawJvs7PjQIzELQ==", + "version": "7.23.1", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.23.1.tgz", + "integrity": "sha512-chNpneuK18yW5Oxsr+t553UZzzAs3aZnFm4bxhebsNTeshrC95yA7l5yl7GBAG+JG1rF0F7zzD2EixK9mWSDoA==", "dev": true, "dependencies": { - "@babel/template": "^7.18.6", - "@babel/traverse": "^7.18.9", - "@babel/types": "^7.18.9" + "@babel/template": "^7.22.15", + "@babel/traverse": "^7.23.0", + "@babel/types": "^7.23.0" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/highlight": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.18.6.tgz", - "integrity": "sha512-u7stbOuYjaPezCuLj29hNW1v64M2Md2qupEKP1fHc7WdOA3DgLh37suiSrZYY7haUB7iBeQZ9P1uiRF359do3g==", + "version": "7.22.20", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.22.20.tgz", + "integrity": "sha512-dkdMCN3py0+ksCgYmGG8jKeGA/8Tk+gJwSYYlFGxG5lmhfKNoAy004YpLxpS1W2J8m/EK2Ew+yOs9pVRwO89mg==", "dev": true, "dependencies": { - "@babel/helper-validator-identifier": "^7.18.6", - "chalk": "^2.0.0", + "@babel/helper-validator-identifier": "^7.22.20", + "chalk": "^2.4.2", "js-tokens": "^4.0.0" }, "engines": { @@ -341,9 +416,9 @@ } }, "node_modules/@babel/parser": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.18.9.tgz", - "integrity": "sha512-9uJveS9eY9DJ0t64YbIBZICtJy8a5QrDEVdiLCG97fVLpDTpGX7t8mMSb6OWw6Lrnjqj4O8zwjELX3dhoMgiBg==", + "version": "7.23.0", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.23.0.tgz", + "integrity": "sha512-vvPKKdMemU85V9WE/l5wZEmImpCtLqbnTvqDS2U1fJ96KrxoW7KrXhNsNCblQlg8Ck4b85yxdTyelsMUgFUXiw==", "dev": true, "bin": { "parser": "bin/babel-parser.js" @@ -412,6 +487,21 @@ "@babel/core": "^7.0.0-0" } }, + "node_modules/@babel/plugin-syntax-jsx": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.22.5.tgz", + "integrity": "sha512-gvyP4hZrgrs/wWMaocvxZ44Hw0b3W8Pe+cMxc8V1ULQ07oh8VNbIRaoD1LRZVTvD+0nieDKjfgKg89sD7rrKrg==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, "node_modules/@babel/plugin-syntax-logical-assignment-operators": { "version": "7.10.4", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz", @@ -500,12 +590,12 @@ } }, "node_modules/@babel/plugin-syntax-typescript": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.18.6.tgz", - "integrity": "sha512-mAWAuq4rvOepWCBid55JuRNvpTNf2UGVgoz4JV0fXEKolsVZDzsa4NqCef758WZJj/GDu0gVGItjKFiClTAmZA==", + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.22.5.tgz", + "integrity": "sha512-1mS2o03i7t1c6VzH6fdQ3OA8tcEIxwG18zIPRp+UY1Ihv6W+XZzBCVxExF9upussPXJ0xE9XRHwMoNs1ep/nRQ==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.18.6" + "@babel/helper-plugin-utils": "^7.22.5" }, "engines": { "node": ">=6.9.0" @@ -515,33 +605,33 @@ } }, "node_modules/@babel/template": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.18.6.tgz", - "integrity": "sha512-JoDWzPe+wgBsTTgdnIma3iHNFC7YVJoPssVBDjiHfNlyt4YcunDtcDOUmfVDfCK5MfdsaIoX9PkijPhjH3nYUw==", + "version": "7.22.15", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.22.15.tgz", + "integrity": "sha512-QPErUVm4uyJa60rkI73qneDacvdvzxshT3kksGqlGWYdOTIUOwJ7RDUL8sGqslY1uXWSL6xMFKEXDS3ox2uF0w==", "dev": true, "dependencies": { - "@babel/code-frame": "^7.18.6", - "@babel/parser": "^7.18.6", - "@babel/types": "^7.18.6" + "@babel/code-frame": "^7.22.13", + "@babel/parser": "^7.22.15", + "@babel/types": "^7.22.15" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/traverse": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.18.9.tgz", - "integrity": "sha512-LcPAnujXGwBgv3/WHv01pHtb2tihcyW1XuL9wd7jqh1Z8AQkTd+QVjMrMijrln0T7ED3UXLIy36P9Ao7W75rYg==", - "dev": true, - "dependencies": { - "@babel/code-frame": "^7.18.6", - "@babel/generator": "^7.18.9", - "@babel/helper-environment-visitor": "^7.18.9", - "@babel/helper-function-name": "^7.18.9", - "@babel/helper-hoist-variables": "^7.18.6", - "@babel/helper-split-export-declaration": "^7.18.6", - "@babel/parser": "^7.18.9", - "@babel/types": "^7.18.9", + "version": "7.23.0", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.23.0.tgz", + "integrity": "sha512-t/QaEvyIoIkwzpiZ7aoSKK8kObQYeF7T2v+dazAYCb8SXtp58zEVkWW7zAnju8FNKNdr4ScAOEDmMItbyOmEYw==", + "dev": true, + "dependencies": { + "@babel/code-frame": "^7.22.13", + "@babel/generator": "^7.23.0", + "@babel/helper-environment-visitor": "^7.22.20", + "@babel/helper-function-name": "^7.23.0", + "@babel/helper-hoist-variables": "^7.22.5", + "@babel/helper-split-export-declaration": "^7.22.6", + "@babel/parser": "^7.23.0", + "@babel/types": "^7.23.0", "debug": "^4.1.0", "globals": "^11.1.0" }, @@ -549,13 +639,23 @@ "node": ">=6.9.0" } }, + "node_modules/@babel/traverse/node_modules/globals": { + "version": "11.12.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", + "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", + "dev": true, + "engines": { + "node": ">=4" + } + }, "node_modules/@babel/types": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.18.9.tgz", - "integrity": "sha512-WwMLAg2MvJmt/rKEVQBBhIVffMmnilX4oe0sRe7iPOHIGsqpruFHHdrfj4O1CMMtgMtCU4oPafZjDPCRgO57Wg==", + "version": "7.23.0", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.23.0.tgz", + "integrity": "sha512-0oIyUfKoI3mSqMvsxBdclDwxXKXAUA8v/apZbc+iSyARYou1o8ZGDxbUYyLFoW2arqS2jDGqJuZvv1d/io1axg==", "dev": true, "dependencies": { - "@babel/helper-validator-identifier": "^7.18.6", + "@babel/helper-string-parser": "^7.22.5", + "@babel/helper-validator-identifier": "^7.22.20", "to-fast-properties": "^2.0.0" }, "engines": { @@ -574,16 +674,40 @@ "integrity": "sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==", "dev": true }, + "node_modules/@eslint-community/eslint-utils": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.4.0.tgz", + "integrity": "sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==", + "dev": true, + "dependencies": { + "eslint-visitor-keys": "^3.3.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "peerDependencies": { + "eslint": "^6.0.0 || ^7.0.0 || >=8.0.0" + } + }, + "node_modules/@eslint-community/regexpp": { + "version": "4.9.1", + "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.9.1.tgz", + "integrity": "sha512-Y27x+MBLjXa+0JWDhykM3+JE+il3kHKAEqabfEWq3SDhZjLYb6/BHL/JKFnH3fe207JaXkyDo685Oc2Glt6ifA==", + "dev": true, + "engines": { + "node": "^12.0.0 || ^14.0.0 || >=16.0.0" + } + }, "node_modules/@eslint/eslintrc": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-1.3.0.tgz", - "integrity": "sha512-UWW0TMTmk2d7hLcWD1/e2g5HDM/HQ3csaLSqXCfqwh4uNDuNqlaKWXmEsL4Cs41Z0KnILNvwbHAah3C2yt06kw==", + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.1.2.tgz", + "integrity": "sha512-+wvgpDsrB1YqAMdEUCcnTlpfVBH7Vqn6A/NT3D8WVXFIaKMlErPIZT3oCIAVCOtarRpMtelZLqJeU3t7WY6X6g==", "dev": true, "dependencies": { "ajv": "^6.12.4", "debug": "^4.3.2", - "espree": "^9.3.2", - "globals": "^13.15.0", + "espree": "^9.6.0", + "globals": "^13.19.0", "ignore": "^5.2.0", "import-fresh": "^3.2.1", "js-yaml": "^4.1.0", @@ -592,72 +716,42 @@ }, "engines": { "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - } - }, - "node_modules/@eslint/eslintrc/node_modules/argparse": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", - "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", - "dev": true - }, - "node_modules/@eslint/eslintrc/node_modules/globals": { - "version": "13.17.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-13.17.0.tgz", - "integrity": "sha512-1C+6nQRb1GwGMKm2dH/E7enFAMxGTmGI7/dEdhy/DNelv85w9B72t3uc5frtMNXIbzrarJJ/lTCjcaZwbLJmyw==", - "dev": true, - "dependencies": { - "type-fest": "^0.20.2" - }, - "engines": { - "node": ">=8" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/@eslint/eslintrc/node_modules/js-yaml": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", - "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", - "dev": true, - "dependencies": { - "argparse": "^2.0.1" - }, - "bin": { - "js-yaml": "bin/js-yaml.js" + "url": "https://opencollective.com/eslint" } }, - "node_modules/@eslint/eslintrc/node_modules/type-fest": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", - "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", + "node_modules/@eslint/js": { + "version": "8.50.0", + "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.50.0.tgz", + "integrity": "sha512-NCC3zz2+nvYd+Ckfh87rA47zfu2QsQpvc6k1yzTk+b9KzRj0wkGa8LSoGOXN6Zv4lRf/EIoZ80biDh9HOI+RNQ==", "dev": true, "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" } }, "node_modules/@humanwhocodes/config-array": { - "version": "0.10.4", - "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.10.4.tgz", - "integrity": "sha512-mXAIHxZT3Vcpg83opl1wGlVZ9xydbfZO3r5YfRSH6Gpp2J/PfdBP0wbDa2sO6/qRbcalpoevVyW6A/fI6LfeMw==", + "version": "0.11.11", + "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.11.tgz", + "integrity": "sha512-N2brEuAadi0CcdeMXUkhbZB84eskAc8MEX1By6qEchoVywSgXPIjou4rYsl0V3Hj0ZnuGycGCjdNgockbzeWNA==", "dev": true, "dependencies": { "@humanwhocodes/object-schema": "^1.2.1", "debug": "^4.1.1", - "minimatch": "^3.0.4" + "minimatch": "^3.0.5" }, "engines": { "node": ">=10.10.0" } }, - "node_modules/@humanwhocodes/gitignore-to-minimatch": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/@humanwhocodes/gitignore-to-minimatch/-/gitignore-to-minimatch-1.0.2.tgz", - "integrity": "sha512-rSqmMJDdLFUsyxR6FMtD00nfQKKLFb1kv+qBbOVKqErvloEIJLo5bDTJTQNTYgeyp78JsA7u/NPi5jT1GR/MuA==", + "node_modules/@humanwhocodes/module-importer": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz", + "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==", "dev": true, + "engines": { + "node": ">=12.22" + }, "funding": { "type": "github", "url": "https://github.com/sponsors/nzakas" @@ -685,6 +779,37 @@ "node": ">=8" } }, + "node_modules/@istanbuljs/load-nyc-config/node_modules/argparse": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", + "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", + "dev": true, + "dependencies": { + "sprintf-js": "~1.0.2" + } + }, + "node_modules/@istanbuljs/load-nyc-config/node_modules/js-yaml": { + "version": "3.14.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", + "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", + "dev": true, + "dependencies": { + "argparse": "^1.0.7", + "esprima": "^4.0.0" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/@istanbuljs/load-nyc-config/node_modules/resolve-from": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", + "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", + "dev": true, + "engines": { + "node": ">=8" + } + }, "node_modules/@istanbuljs/schema": { "version": "0.1.3", "resolved": "https://registry.npmjs.org/@istanbuljs/schema/-/schema-0.1.3.tgz", @@ -695,60 +820,59 @@ } }, "node_modules/@jest/console": { - "version": "28.1.3", - "resolved": "https://registry.npmjs.org/@jest/console/-/console-28.1.3.tgz", - "integrity": "sha512-QPAkP5EwKdK/bxIr6C1I4Vs0rm2nHiANzj/Z5X2JQkrZo6IqvC4ldZ9K95tF0HdidhA8Bo6egxSzUFPYKcEXLw==", + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/console/-/console-29.7.0.tgz", + "integrity": "sha512-5Ni4CU7XHQi32IJ398EEP4RrB8eV09sXP2ROqD4bksHrnTree52PsxvX8tpL8LvTZ3pFzXyPbNQReSN41CAhOg==", "dev": true, "dependencies": { - "@jest/types": "^28.1.3", + "@jest/types": "^29.6.3", "@types/node": "*", "chalk": "^4.0.0", - "jest-message-util": "^28.1.3", - "jest-util": "^28.1.3", + "jest-message-util": "^29.7.0", + "jest-util": "^29.7.0", "slash": "^3.0.0" }, "engines": { - "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, "node_modules/@jest/core": { - "version": "28.1.3", - "resolved": "https://registry.npmjs.org/@jest/core/-/core-28.1.3.tgz", - "integrity": "sha512-CIKBrlaKOzA7YG19BEqCw3SLIsEwjZkeJzf5bdooVnW4bH5cktqe3JX+G2YV1aK5vP8N9na1IGWFzYaTp6k6NA==", + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/core/-/core-29.7.0.tgz", + "integrity": "sha512-n7aeXWKMnGtDA48y8TLWJPJmLmmZ642Ceo78cYWEpiD7FzDgmNDV/GCVRorPABdXLJZ/9wzzgZAlHjXjxDHGsg==", "dev": true, "dependencies": { - "@jest/console": "^28.1.3", - "@jest/reporters": "^28.1.3", - "@jest/test-result": "^28.1.3", - "@jest/transform": "^28.1.3", - "@jest/types": "^28.1.3", + "@jest/console": "^29.7.0", + "@jest/reporters": "^29.7.0", + "@jest/test-result": "^29.7.0", + "@jest/transform": "^29.7.0", + "@jest/types": "^29.6.3", "@types/node": "*", "ansi-escapes": "^4.2.1", "chalk": "^4.0.0", "ci-info": "^3.2.0", "exit": "^0.1.2", "graceful-fs": "^4.2.9", - "jest-changed-files": "^28.1.3", - "jest-config": "^28.1.3", - "jest-haste-map": "^28.1.3", - "jest-message-util": "^28.1.3", - "jest-regex-util": "^28.0.2", - "jest-resolve": "^28.1.3", - "jest-resolve-dependencies": "^28.1.3", - "jest-runner": "^28.1.3", - "jest-runtime": "^28.1.3", - "jest-snapshot": "^28.1.3", - "jest-util": "^28.1.3", - "jest-validate": "^28.1.3", - "jest-watcher": "^28.1.3", + "jest-changed-files": "^29.7.0", + "jest-config": "^29.7.0", + "jest-haste-map": "^29.7.0", + "jest-message-util": "^29.7.0", + "jest-regex-util": "^29.6.3", + "jest-resolve": "^29.7.0", + "jest-resolve-dependencies": "^29.7.0", + "jest-runner": "^29.7.0", + "jest-runtime": "^29.7.0", + "jest-snapshot": "^29.7.0", + "jest-util": "^29.7.0", + "jest-validate": "^29.7.0", + "jest-watcher": "^29.7.0", "micromatch": "^4.0.4", - "pretty-format": "^28.1.3", - "rimraf": "^3.0.0", + "pretty-format": "^29.7.0", "slash": "^3.0.0", "strip-ansi": "^6.0.0" }, "engines": { - "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" }, "peerDependencies": { "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" @@ -760,88 +884,89 @@ } }, "node_modules/@jest/environment": { - "version": "28.1.3", - "resolved": "https://registry.npmjs.org/@jest/environment/-/environment-28.1.3.tgz", - "integrity": "sha512-1bf40cMFTEkKyEf585R9Iz1WayDjHoHqvts0XFYEqyKM3cFWDpeMoqKKTAF9LSYQModPUlh8FKptoM2YcMWAXA==", + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/environment/-/environment-29.7.0.tgz", + "integrity": "sha512-aQIfHDq33ExsN4jP1NWGXhxgQ/wixs60gDiKO+XVMd8Mn0NWPWgc34ZQDTb2jKaUWQ7MuwoitXAsN2XVXNMpAw==", "dev": true, "dependencies": { - "@jest/fake-timers": "^28.1.3", - "@jest/types": "^28.1.3", + "@jest/fake-timers": "^29.7.0", + "@jest/types": "^29.6.3", "@types/node": "*", - "jest-mock": "^28.1.3" + "jest-mock": "^29.7.0" }, "engines": { - "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, "node_modules/@jest/expect": { - "version": "28.1.3", - "resolved": "https://registry.npmjs.org/@jest/expect/-/expect-28.1.3.tgz", - "integrity": "sha512-lzc8CpUbSoE4dqT0U+g1qODQjBRHPpCPXissXD4mS9+sWQdmmpeJ9zSH1rS1HEkrsMN0fb7nKrJ9giAR1d3wBw==", + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/expect/-/expect-29.7.0.tgz", + "integrity": "sha512-8uMeAMycttpva3P1lBHB8VciS9V0XAr3GymPpipdyQXbBcuhkLQOSe8E/p92RyAdToS6ZD1tFkX+CkhoECE0dQ==", "dev": true, "dependencies": { - "expect": "^28.1.3", - "jest-snapshot": "^28.1.3" + "expect": "^29.7.0", + "jest-snapshot": "^29.7.0" }, "engines": { - "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, "node_modules/@jest/expect-utils": { - "version": "28.1.3", - "resolved": "https://registry.npmjs.org/@jest/expect-utils/-/expect-utils-28.1.3.tgz", - "integrity": "sha512-wvbi9LUrHJLn3NlDW6wF2hvIMtd4JUl2QNVrjq+IBSHirgfrR3o9RnVtxzdEGO2n9JyIWwHnLfby5KzqBGg2YA==", + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/expect-utils/-/expect-utils-29.7.0.tgz", + "integrity": "sha512-GlsNBWiFQFCVi9QVSx7f5AgMeLxe9YCCs5PuP2O2LdjDAA8Jh9eX7lA1Jq/xdXw3Wb3hyvlFNfZIfcRetSzYcA==", "dev": true, "dependencies": { - "jest-get-type": "^28.0.2" + "jest-get-type": "^29.6.3" }, "engines": { - "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, "node_modules/@jest/fake-timers": { - "version": "28.1.3", - "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-28.1.3.tgz", - "integrity": "sha512-D/wOkL2POHv52h+ok5Oj/1gOG9HSywdoPtFsRCUmlCILXNn5eIWmcnd3DIiWlJnpGvQtmajqBP95Ei0EimxfLw==", + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-29.7.0.tgz", + "integrity": "sha512-q4DH1Ha4TTFPdxLsqDXK1d3+ioSL7yL5oCMJZgDYm6i+6CygW5E5xVr/D1HdsGxjt1ZWSfUAs9OxSB/BNelWrQ==", "dev": true, "dependencies": { - "@jest/types": "^28.1.3", - "@sinonjs/fake-timers": "^9.1.2", + "@jest/types": "^29.6.3", + "@sinonjs/fake-timers": "^10.0.2", "@types/node": "*", - "jest-message-util": "^28.1.3", - "jest-mock": "^28.1.3", - "jest-util": "^28.1.3" + "jest-message-util": "^29.7.0", + "jest-mock": "^29.7.0", + "jest-util": "^29.7.0" }, "engines": { - "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, "node_modules/@jest/globals": { - "version": "28.1.3", - "resolved": "https://registry.npmjs.org/@jest/globals/-/globals-28.1.3.tgz", - "integrity": "sha512-XFU4P4phyryCXu1pbcqMO0GSQcYe1IsalYCDzRNyhetyeyxMcIxa11qPNDpVNLeretItNqEmYYQn1UYz/5x1NA==", + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/globals/-/globals-29.7.0.tgz", + "integrity": "sha512-mpiz3dutLbkW2MNFubUGUEVLkTGiqW6yLVTA+JbP6fI6J5iL9Y0Nlg8k95pcF8ctKwCS7WVxteBs29hhfAotzQ==", "dev": true, "dependencies": { - "@jest/environment": "^28.1.3", - "@jest/expect": "^28.1.3", - "@jest/types": "^28.1.3" + "@jest/environment": "^29.7.0", + "@jest/expect": "^29.7.0", + "@jest/types": "^29.6.3", + "jest-mock": "^29.7.0" }, "engines": { - "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, "node_modules/@jest/reporters": { - "version": "28.1.3", - "resolved": "https://registry.npmjs.org/@jest/reporters/-/reporters-28.1.3.tgz", - "integrity": "sha512-JuAy7wkxQZVNU/V6g9xKzCGC5LVXx9FDcABKsSXp5MiKPEE2144a/vXTEDoyzjUpZKfVwp08Wqg5A4WfTMAzjg==", + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/reporters/-/reporters-29.7.0.tgz", + "integrity": "sha512-DApq0KJbJOEzAFYjHADNNxAE3KbhxQB1y5Kplb5Waqw6zVbuWatSnMjE5gs8FUgEPmNsnZA3NCWl9NG0ia04Pg==", "dev": true, "dependencies": { "@bcoe/v8-coverage": "^0.2.3", - "@jest/console": "^28.1.3", - "@jest/test-result": "^28.1.3", - "@jest/transform": "^28.1.3", - "@jest/types": "^28.1.3", - "@jridgewell/trace-mapping": "^0.3.13", + "@jest/console": "^29.7.0", + "@jest/test-result": "^29.7.0", + "@jest/transform": "^29.7.0", + "@jest/types": "^29.6.3", + "@jridgewell/trace-mapping": "^0.3.18", "@types/node": "*", "chalk": "^4.0.0", "collect-v8-coverage": "^1.0.0", @@ -849,21 +974,20 @@ "glob": "^7.1.3", "graceful-fs": "^4.2.9", "istanbul-lib-coverage": "^3.0.0", - "istanbul-lib-instrument": "^5.1.0", + "istanbul-lib-instrument": "^6.0.0", "istanbul-lib-report": "^3.0.0", "istanbul-lib-source-maps": "^4.0.0", "istanbul-reports": "^3.1.3", - "jest-message-util": "^28.1.3", - "jest-util": "^28.1.3", - "jest-worker": "^28.1.3", + "jest-message-util": "^29.7.0", + "jest-util": "^29.7.0", + "jest-worker": "^29.7.0", "slash": "^3.0.0", "string-length": "^4.0.1", "strip-ansi": "^6.0.0", - "terminal-link": "^2.0.0", "v8-to-istanbul": "^9.0.1" }, "engines": { - "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" }, "peerDependencies": { "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" @@ -875,94 +999,94 @@ } }, "node_modules/@jest/schemas": { - "version": "28.1.3", - "resolved": "https://registry.npmjs.org/@jest/schemas/-/schemas-28.1.3.tgz", - "integrity": "sha512-/l/VWsdt/aBXgjshLWOFyFt3IVdYypu5y2Wn2rOO1un6nkqIn8SLXzgIMYXFyYsRWDyF5EthmKJMIdJvk08grg==", + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/@jest/schemas/-/schemas-29.6.3.tgz", + "integrity": "sha512-mo5j5X+jIZmJQveBKeS/clAueipV7KgiX1vMgCxam1RNYiqE1w62n0/tJJnHtjW8ZHcQco5gY85jA3mi0L+nSA==", "dev": true, "dependencies": { - "@sinclair/typebox": "^0.24.1" + "@sinclair/typebox": "^0.27.8" }, "engines": { - "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, "node_modules/@jest/source-map": { - "version": "28.1.2", - "resolved": "https://registry.npmjs.org/@jest/source-map/-/source-map-28.1.2.tgz", - "integrity": "sha512-cV8Lx3BeStJb8ipPHnqVw/IM2VCMWO3crWZzYodSIkxXnRcXJipCdx1JCK0K5MsJJouZQTH73mzf4vgxRaH9ww==", + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/@jest/source-map/-/source-map-29.6.3.tgz", + "integrity": "sha512-MHjT95QuipcPrpLM+8JMSzFx6eHp5Bm+4XeFDJlwsvVBjmKNiIAvasGK2fxz2WbGRlnvqehFbh07MMa7n3YJnw==", "dev": true, "dependencies": { - "@jridgewell/trace-mapping": "^0.3.13", + "@jridgewell/trace-mapping": "^0.3.18", "callsites": "^3.0.0", "graceful-fs": "^4.2.9" }, "engines": { - "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, "node_modules/@jest/test-result": { - "version": "28.1.3", - "resolved": "https://registry.npmjs.org/@jest/test-result/-/test-result-28.1.3.tgz", - "integrity": "sha512-kZAkxnSE+FqE8YjW8gNuoVkkC9I7S1qmenl8sGcDOLropASP+BkcGKwhXoyqQuGOGeYY0y/ixjrd/iERpEXHNg==", + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/test-result/-/test-result-29.7.0.tgz", + "integrity": "sha512-Fdx+tv6x1zlkJPcWXmMDAG2HBnaR9XPSd5aDWQVsfrZmLVT3lU1cwyxLgRmXR9yrq4NBoEm9BMsfgFzTQAbJYA==", "dev": true, "dependencies": { - "@jest/console": "^28.1.3", - "@jest/types": "^28.1.3", + "@jest/console": "^29.7.0", + "@jest/types": "^29.6.3", "@types/istanbul-lib-coverage": "^2.0.0", "collect-v8-coverage": "^1.0.0" }, "engines": { - "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, "node_modules/@jest/test-sequencer": { - "version": "28.1.3", - "resolved": "https://registry.npmjs.org/@jest/test-sequencer/-/test-sequencer-28.1.3.tgz", - "integrity": "sha512-NIMPEqqa59MWnDi1kvXXpYbqsfQmSJsIbnd85mdVGkiDfQ9WQQTXOLsvISUfonmnBT+w85WEgneCigEEdHDFxw==", + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/test-sequencer/-/test-sequencer-29.7.0.tgz", + "integrity": "sha512-GQwJ5WZVrKnOJuiYiAF52UNUJXgTZx1NHjFSEB0qEMmSZKAkdMoIzw/Cj6x6NF4AvV23AUqDpFzQkN/eYCYTxw==", "dev": true, "dependencies": { - "@jest/test-result": "^28.1.3", + "@jest/test-result": "^29.7.0", "graceful-fs": "^4.2.9", - "jest-haste-map": "^28.1.3", + "jest-haste-map": "^29.7.0", "slash": "^3.0.0" }, "engines": { - "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, "node_modules/@jest/transform": { - "version": "28.1.3", - "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-28.1.3.tgz", - "integrity": "sha512-u5dT5di+oFI6hfcLOHGTAfmUxFRrjK+vnaP0kkVow9Md/M7V/MxqQMOz/VV25UZO8pzeA9PjfTpOu6BDuwSPQA==", + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-29.7.0.tgz", + "integrity": "sha512-ok/BTPFzFKVMwO5eOHRrvnBVHdRy9IrsrW1GpMaQ9MCnilNLXQKmAX8s1YXDFaai9xJpac2ySzV0YeRRECr2Vw==", "dev": true, "dependencies": { "@babel/core": "^7.11.6", - "@jest/types": "^28.1.3", - "@jridgewell/trace-mapping": "^0.3.13", + "@jest/types": "^29.6.3", + "@jridgewell/trace-mapping": "^0.3.18", "babel-plugin-istanbul": "^6.1.1", "chalk": "^4.0.0", - "convert-source-map": "^1.4.0", - "fast-json-stable-stringify": "^2.0.0", + "convert-source-map": "^2.0.0", + "fast-json-stable-stringify": "^2.1.0", "graceful-fs": "^4.2.9", - "jest-haste-map": "^28.1.3", - "jest-regex-util": "^28.0.2", - "jest-util": "^28.1.3", + "jest-haste-map": "^29.7.0", + "jest-regex-util": "^29.6.3", + "jest-util": "^29.7.0", "micromatch": "^4.0.4", "pirates": "^4.0.4", "slash": "^3.0.0", - "write-file-atomic": "^4.0.1" + "write-file-atomic": "^4.0.2" }, "engines": { - "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, "node_modules/@jest/types": { - "version": "28.1.3", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-28.1.3.tgz", - "integrity": "sha512-RyjiyMUZrKz/c+zlMFO1pm70DcIlST8AeWTkoUdZevew44wcNZQHsEVOiCVtgVnlFFD82FPaXycys58cf2muVQ==", + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-29.6.3.tgz", + "integrity": "sha512-u3UPsIilWKOM3F9CXtrG8LEJmNxwoCQC/XVj4IKYXvvpx7QIi/Kg1LI5uDmDpKlac62NUtX7eLjRh+jVZcLOzw==", "dev": true, "dependencies": { - "@jest/schemas": "^28.1.3", + "@jest/schemas": "^29.6.3", "@types/istanbul-lib-coverage": "^2.0.0", "@types/istanbul-reports": "^3.0.0", "@types/node": "*", @@ -970,26 +1094,27 @@ "chalk": "^4.0.0" }, "engines": { - "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, "node_modules/@jridgewell/gen-mapping": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.1.1.tgz", - "integrity": "sha512-sQXCasFk+U8lWYEe66WxRDOE9PjVz4vSM51fTu3Hw+ClTpUSQb718772vH3pyS5pShp6lvQM7SxgIDXXXmOX7w==", + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.3.tgz", + "integrity": "sha512-HLhSWOLRi875zjjMG/r+Nv0oCW8umGb0BgEhyX3dDX3egwZtB8PqLnjz3yedt8R5StBrzcg4aBpnh8UA9D1BoQ==", "dev": true, "dependencies": { - "@jridgewell/set-array": "^1.0.0", - "@jridgewell/sourcemap-codec": "^1.4.10" + "@jridgewell/set-array": "^1.0.1", + "@jridgewell/sourcemap-codec": "^1.4.10", + "@jridgewell/trace-mapping": "^0.3.9" }, "engines": { "node": ">=6.0.0" } }, "node_modules/@jridgewell/resolve-uri": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.0.tgz", - "integrity": "sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w==", + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.1.tgz", + "integrity": "sha512-dSYZh7HhCDtCKm4QakX0xFpsRDqjjtZf/kjI/v3T3Nwt5r8/qz/M19F9ySyOqU94SXBmeG9ttTul+YnR4LOxFA==", "dev": true, "engines": { "node": ">=6.0.0" @@ -1005,19 +1130,19 @@ } }, "node_modules/@jridgewell/sourcemap-codec": { - "version": "1.4.14", - "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz", - "integrity": "sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==", + "version": "1.4.15", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz", + "integrity": "sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==", "dev": true }, "node_modules/@jridgewell/trace-mapping": { - "version": "0.3.14", - "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.14.tgz", - "integrity": "sha512-bJWEfQ9lPTvm3SneWwRFVLzrh6nhjwqw7TUFFBEMzwvg7t7PCDenf2lDwqo4NQXzdpgBXyFgDWnQA+2vkruksQ==", + "version": "0.3.19", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.19.tgz", + "integrity": "sha512-kf37QtfW+Hwx/buWGMPcR60iF9ziHa6r/CZJIHbmcm4+0qrXiVdxegAH0F6yddEVQ7zdkjcGCgCzUu+BcbhQxw==", "dev": true, "dependencies": { - "@jridgewell/resolve-uri": "^3.0.3", - "@jridgewell/sourcemap-codec": "^1.4.10" + "@jridgewell/resolve-uri": "^3.1.0", + "@jridgewell/sourcemap-codec": "^1.4.14" } }, "node_modules/@nodelib/fs.scandir": { @@ -1056,64 +1181,55 @@ } }, "node_modules/@sinclair/typebox": { - "version": "0.24.20", - "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.24.20.tgz", - "integrity": "sha512-kVaO5aEFZb33nPMTZBxiPEkY+slxiPtqC7QX8f9B3eGOMBvEfuMfxp9DSTTCsRJPumPKjrge4yagyssO4q6qzQ==", + "version": "0.27.8", + "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.27.8.tgz", + "integrity": "sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA==", "dev": true }, "node_modules/@sinonjs/commons": { - "version": "1.8.3", - "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-1.8.3.tgz", - "integrity": "sha512-xkNcLAn/wZaX14RPlwizcKicDk9G3F8m2nU3L7Ukm5zBgTwiT0wsoFAHx9Jq56fJA1z/7uKGtCRu16sOUCLIHQ==", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-3.0.0.tgz", + "integrity": "sha512-jXBtWAF4vmdNmZgD5FoKsVLv3rPgDnLgPbU84LIJ3otV44vJlDRokVng5v8NFJdCf/da9legHcKaRuZs4L7faA==", "dev": true, "dependencies": { "type-detect": "4.0.8" } }, "node_modules/@sinonjs/fake-timers": { - "version": "9.1.2", - "resolved": "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-9.1.2.tgz", - "integrity": "sha512-BPS4ynJW/o92PUR4wgriz2Ud5gpST5vz6GQfMixEDK0Z8ZCUv2M7SkBLykH56T++Xs+8ln9zTGbOvNGIe02/jw==", + "version": "10.3.0", + "resolved": "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-10.3.0.tgz", + "integrity": "sha512-V4BG07kuYSUkTCSBHG8G8TNhM+F19jXFWnQtzj+we8DrkpSBCee9Z3Ms8yiGer/dlmhe35/Xdgyo3/0rQKg7YA==", "dev": true, "dependencies": { - "@sinonjs/commons": "^1.7.0" - } - }, - "node_modules/@types/archiver": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/@types/archiver/-/archiver-5.3.1.tgz", - "integrity": "sha512-wKYZaSXaDvTZuInAWjCeGG7BEAgTWG2zZW0/f7IYFcoHB2X2d9lkVFnrOlXl3W6NrvO6Ml3FLLu8Uksyymcpnw==", - "dev": true, - "dependencies": { - "@types/glob": "*" + "@sinonjs/commons": "^3.0.0" } }, "node_modules/@types/babel__core": { - "version": "7.1.19", - "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.1.19.tgz", - "integrity": "sha512-WEOTgRsbYkvA/KCsDwVEGkd7WAr1e3g31VHQ8zy5gul/V1qKullU/BU5I68X5v7V3GnB9eotmom4v5a5gjxorw==", + "version": "7.20.2", + "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.20.2.tgz", + "integrity": "sha512-pNpr1T1xLUc2l3xJKuPtsEky3ybxN3m4fJkknfIpTCTfIZCDW57oAg+EfCgIIp2rvCe0Wn++/FfodDS4YXxBwA==", "dev": true, "dependencies": { - "@babel/parser": "^7.1.0", - "@babel/types": "^7.0.0", + "@babel/parser": "^7.20.7", + "@babel/types": "^7.20.7", "@types/babel__generator": "*", "@types/babel__template": "*", "@types/babel__traverse": "*" } }, "node_modules/@types/babel__generator": { - "version": "7.6.4", - "resolved": "https://registry.npmjs.org/@types/babel__generator/-/babel__generator-7.6.4.tgz", - "integrity": "sha512-tFkciB9j2K755yrTALxD44McOrk+gfpIpvC3sxHjRawj6PfnQxrse4Clq5y/Rq+G3mrBurMax/lG8Qn2t9mSsg==", + "version": "7.6.5", + "resolved": "https://registry.npmjs.org/@types/babel__generator/-/babel__generator-7.6.5.tgz", + "integrity": "sha512-h9yIuWbJKdOPLJTbmSpPzkF67e659PbQDba7ifWm5BJ8xTv+sDmS7rFmywkWOvXedGTivCdeGSIIX8WLcRTz8w==", "dev": true, "dependencies": { "@babel/types": "^7.0.0" } }, "node_modules/@types/babel__template": { - "version": "7.4.1", - "resolved": "https://registry.npmjs.org/@types/babel__template/-/babel__template-7.4.1.tgz", - "integrity": "sha512-azBFKemX6kMg5Io+/rdGT0dkGreboUVR0Cdm3fz9QJWpaQGJRQXl7C+6hOTCZcMll7KFyEQpgbYI2lHdsS4U7g==", + "version": "7.4.2", + "resolved": "https://registry.npmjs.org/@types/babel__template/-/babel__template-7.4.2.tgz", + "integrity": "sha512-/AVzPICMhMOMYoSx9MoKpGDKdBRsIXMNByh1PXSZoa+v6ZoLa8xxtsT/uLQ/NJm0XVAWl/BvId4MlDeXJaeIZQ==", "dev": true, "dependencies": { "@babel/parser": "^7.1.0", @@ -1121,48 +1237,18 @@ } }, "node_modules/@types/babel__traverse": { - "version": "7.17.1", - "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.17.1.tgz", - "integrity": "sha512-kVzjari1s2YVi77D3w1yuvohV2idweYXMCDzqBiVNN63TcDWrIlTVOYpqVrvbbyOE/IyzBoTKF0fdnLPEORFxA==", - "dev": true, - "dependencies": { - "@babel/types": "^7.3.0" - } - }, - "node_modules/@types/docker-modem": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/@types/docker-modem/-/docker-modem-3.0.2.tgz", - "integrity": "sha512-qC7prjoEYR2QEe6SmCVfB1x3rfcQtUr1n4x89+3e0wSTMQ/KYCyf+/RAA9n2tllkkNc6//JMUZePdFRiGIWfaQ==", - "dev": true, - "dependencies": { - "@types/node": "*", - "@types/ssh2": "*" - } - }, - "node_modules/@types/dockerode": { - "version": "3.3.9", - "resolved": "https://registry.npmjs.org/@types/dockerode/-/dockerode-3.3.9.tgz", - "integrity": "sha512-SYRN5FF/qmwpxUT6snJP5D8k0wgoUKOGVs625XvpRJOOUi6s//UYI4F0tbyE3OmzpI70Fo1+aqpzX27zCrInww==", - "dev": true, - "dependencies": { - "@types/docker-modem": "*", - "@types/node": "*" - } - }, - "node_modules/@types/glob": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/@types/glob/-/glob-7.2.0.tgz", - "integrity": "sha512-ZUxbzKl0IfJILTS6t7ip5fQQM/J3TJYubDm3nMbgubNNYS62eXeUpoLUC8/7fJNiFYHTrGPQn7hspDUzIHX3UA==", + "version": "7.20.2", + "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.20.2.tgz", + "integrity": "sha512-ojlGK1Hsfce93J0+kn3H5R73elidKUaZonirN33GSmgTUMpzI/MIFfSpF3haANe3G1bEBS9/9/QEqwTzwqFsKw==", "dev": true, "dependencies": { - "@types/minimatch": "*", - "@types/node": "*" + "@babel/types": "^7.20.7" } }, "node_modules/@types/graceful-fs": { - "version": "4.1.5", - "resolved": "https://registry.npmjs.org/@types/graceful-fs/-/graceful-fs-4.1.5.tgz", - "integrity": "sha512-anKkLmZZ+xm4p8JWBf4hElkM4XR+EZeA2M9BAkkTldmcyDY4mbdIJnRghDJH3Ov5ooY7/UAoENtmdMSkaAd7Cw==", + "version": "4.1.7", + "resolved": "https://registry.npmjs.org/@types/graceful-fs/-/graceful-fs-4.1.7.tgz", + "integrity": "sha512-MhzcwU8aUygZroVwL2jeYk6JisJrPl/oov/gsgGCue9mkgl9wjGbzReYQClxiUgFDnib9FuHqTndccKeZKxTRw==", "dev": true, "dependencies": { "@types/node": "*" @@ -1175,50 +1261,29 @@ "dev": true }, "node_modules/@types/istanbul-lib-report": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz", - "integrity": "sha512-plGgXAPfVKFoYfa9NpYDAkseG+g6Jr294RqeqcqDixSbU34MZVJRi/P+7Y8GDpzkEwLaGZZOpKIEmeVZNtKsrg==", + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.1.tgz", + "integrity": "sha512-gPQuzaPR5h/djlAv2apEG1HVOyj1IUs7GpfMZixU0/0KXT3pm64ylHuMUI1/Akh+sq/iikxg6Z2j+fcMDXaaTQ==", "dev": true, "dependencies": { "@types/istanbul-lib-coverage": "*" } }, "node_modules/@types/istanbul-reports": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-3.0.1.tgz", - "integrity": "sha512-c3mAZEuK0lvBp8tmuL74XRKn1+y2dcwOUpH7x4WrF6gk1GIgiluDRgMYQtw2OFcBvAJWlt6ASU3tSqxp0Uu0Aw==", + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-3.0.2.tgz", + "integrity": "sha512-kv43F9eb3Lhj+lr/Hn6OcLCs/sSM8bt+fIaP11rCYngfV6NVjzWXJ17owQtDQTL9tQ8WSLUrGsSJ6rJz0F1w1A==", "dev": true, "dependencies": { "@types/istanbul-lib-report": "*" } }, - "node_modules/@types/minimatch": { - "version": "3.0.5", - "resolved": "https://registry.npmjs.org/@types/minimatch/-/minimatch-3.0.5.tgz", - "integrity": "sha512-Klz949h02Gz2uZCMGwDUSDS1YBlTdDDgbWHi+81l29tQALUtvz4rAYi5uoVhE5Lagoq6DeqAUlbrHvW/mXDgdQ==", - "dev": true - }, "node_modules/@types/node": { "version": "18.6.1", "resolved": "https://registry.npmjs.org/@types/node/-/node-18.6.1.tgz", "integrity": "sha512-z+2vB6yDt1fNwKOeGbckpmirO+VBDuQqecXkgeIqDlaOtmKn6hPR/viQ8cxCfqLU4fTlvM3+YjM367TukWdxpg==", "dev": true }, - "node_modules/@types/prettier": { - "version": "2.6.3", - "resolved": "https://registry.npmjs.org/@types/prettier/-/prettier-2.6.3.tgz", - "integrity": "sha512-ymZk3LEC/fsut+/Q5qejp6R9O1rMxz3XaRHDV6kX8MrGAhOSPqVARbDi+EZvInBpw+BnCX3TD240byVkOfQsHg==", - "dev": true - }, - "node_modules/@types/ssh2": { - "version": "1.11.5", - "resolved": "https://registry.npmjs.org/@types/ssh2/-/ssh2-1.11.5.tgz", - "integrity": "sha512-RaBsPKr+YP/slH8iR7XfC7chyomU+V57F/gJ5cMSP2n6/YWKVmeRLx7lrkgw4YYLpEW5lXLAdfZJqGo0PXboSA==", - "dev": true, - "dependencies": { - "@types/node": "*" - } - }, "node_modules/@types/ssh2-streams": { "version": "0.1.9", "resolved": "https://registry.npmjs.org/@types/ssh2-streams/-/ssh2-streams-0.1.9.tgz", @@ -1235,24 +1300,24 @@ "dev": true }, "node_modules/@types/yargs": { - "version": "17.0.10", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.10.tgz", - "integrity": "sha512-gmEaFwpj/7f/ROdtIlci1R1VYU1J4j95m8T+Tj3iBgiBFKg1foE/PSl93bBd5T9LDXNPo8UlNN6W0qwD8O5OaA==", + "version": "17.0.26", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.26.tgz", + "integrity": "sha512-Y3vDy2X6zw/ZCumcwLpdhM5L7jmyGpmBCTYMHDLqT2IKVMYRRLdv6ZakA+wxhra6Z/3bwhNbNl9bDGXaFU+6rw==", "dev": true, "dependencies": { "@types/yargs-parser": "*" } }, "node_modules/@types/yargs-parser": { - "version": "21.0.0", - "resolved": "https://registry.npmjs.org/@types/yargs-parser/-/yargs-parser-21.0.0.tgz", - "integrity": "sha512-iO9ZQHkZxHn4mSakYV0vFHAVDyEOIJQrV2uZ06HxEPcx+mt8swXoZHIbaaJ2crJYFfErySgktuTZ3BeLz+XmFA==", + "version": "21.0.1", + "resolved": "https://registry.npmjs.org/@types/yargs-parser/-/yargs-parser-21.0.1.tgz", + "integrity": "sha512-axdPBuLuEJt0c4yI5OZssC19K2Mq1uKdrfZBzuxLvaztgqUtFYZUNw7lETExPYJR9jdEoIg4mb7RQKRQzOkeGQ==", "dev": true }, "node_modules/acorn": { - "version": "8.8.0", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.8.0.tgz", - "integrity": "sha512-QOxyigPVrpZ2GXT+PFyZTl6TtOFc5egxHIP9IlQ+RbupQuX4RkT/Bee4/kQuC02Xkzg84JcT7oLYtDIQxp+v7w==", + "version": "8.10.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.10.0.tgz", + "integrity": "sha512-F0SAmZ8iUtS//m8DmCTA0jlh6TDKkHQyK6xc6V4KDTyZKA9dnvX9/3sRTVQrWm79glUAZbnmmNcdYwUIHWVybw==", "dev": true, "bin": { "acorn": "bin/acorn" @@ -1301,6 +1366,18 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/ansi-escapes/node_modules/type-fest": { + "version": "0.21.3", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz", + "integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/ansi-regex": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", @@ -1326,9 +1403,9 @@ } }, "node_modules/anymatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.2.tgz", - "integrity": "sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==", + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", + "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", "dev": true, "dependencies": { "normalize-path": "^3.0.0", @@ -1402,22 +1479,10 @@ } }, "node_modules/argparse": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", - "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", - "dev": true, - "dependencies": { - "sprintf-js": "~1.0.2" - } - }, - "node_modules/array-union": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", - "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", - "dev": true, - "engines": { - "node": ">=8" - } + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", + "dev": true }, "node_modules/asn1": { "version": "0.2.6", @@ -1434,22 +1499,34 @@ "integrity": "sha512-iAB+JbDEGXhyIUavoDl9WP/Jj106Kz9DEn1DPgYw5ruDn0e3Wgi3sKFm55sASdGBNOQB8F59d9qQ7deqrHA8wQ==", "dev": true }, + "node_modules/async-lock": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/async-lock/-/async-lock-1.4.0.tgz", + "integrity": "sha512-coglx5yIWuetakm3/1dsX9hxCNox22h7+V80RQOu2XUUMidtArxKoZoOtHUPuR84SycKTXzgGzAUR5hJxujyJQ==", + "dev": true + }, + "node_modules/b4a": { + "version": "1.6.4", + "resolved": "https://registry.npmjs.org/b4a/-/b4a-1.6.4.tgz", + "integrity": "sha512-fpWrvyVHEKyeEvbKZTVOeZF3VSKKWtJxFIxX/jaVPf+cLbGUSitjb49pHLqPV2BUNNZ0LcoeEGfE/YCpyDYHIw==", + "dev": true + }, "node_modules/babel-jest": { - "version": "28.1.3", - "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-28.1.3.tgz", - "integrity": "sha512-epUaPOEWMk3cWX0M/sPvCHHCe9fMFAa/9hXEgKP8nFfNl/jlGkE9ucq9NqkZGXLDduCJYS0UvSlPUwC0S+rH6Q==", + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-29.7.0.tgz", + "integrity": "sha512-BrvGY3xZSwEcCzKvKsCi2GgHqDqsYkOP4/by5xCgIwGXQxIEh+8ew3gmrE1y7XRR6LHZIj6yLYnUi/mm2KXKBg==", "dev": true, "dependencies": { - "@jest/transform": "^28.1.3", + "@jest/transform": "^29.7.0", "@types/babel__core": "^7.1.14", "babel-plugin-istanbul": "^6.1.1", - "babel-preset-jest": "^28.1.3", + "babel-preset-jest": "^29.6.3", "chalk": "^4.0.0", "graceful-fs": "^4.2.9", "slash": "^3.0.0" }, "engines": { - "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" }, "peerDependencies": { "@babel/core": "^7.8.0" @@ -1471,10 +1548,26 @@ "node": ">=8" } }, + "node_modules/babel-plugin-istanbul/node_modules/istanbul-lib-instrument": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-5.2.1.tgz", + "integrity": "sha512-pzqtp31nLv/XFOzXGuvhCb8qhjmTVo5vjVk19XE4CRlSWz0KoeJ3bw9XsA7nOp9YBf4qHjwBxkDzKcME/J29Yg==", + "dev": true, + "dependencies": { + "@babel/core": "^7.12.3", + "@babel/parser": "^7.14.7", + "@istanbuljs/schema": "^0.1.2", + "istanbul-lib-coverage": "^3.2.0", + "semver": "^6.3.0" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/babel-plugin-jest-hoist": { - "version": "28.1.3", - "resolved": "https://registry.npmjs.org/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-28.1.3.tgz", - "integrity": "sha512-Ys3tUKAmfnkRUpPdpa98eYrAR0nV+sSFUZZEGuQ2EbFd1y4SOLtD5QDNHAq+bb9a+bbXvYQC4b+ID/THIMcU6Q==", + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-29.6.3.tgz", + "integrity": "sha512-ESAc/RJvGTFEzRwOTT4+lNDk/GNHMkKbNzsvT0qKRfDyyYTskxB5rnU2njIDYVxXCBHHEI1c0YwHob3WaYujOg==", "dev": true, "dependencies": { "@babel/template": "^7.3.3", @@ -1483,7 +1576,7 @@ "@types/babel__traverse": "^7.0.6" }, "engines": { - "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, "node_modules/babel-preset-current-node-syntax": { @@ -1510,16 +1603,16 @@ } }, "node_modules/babel-preset-jest": { - "version": "28.1.3", - "resolved": "https://registry.npmjs.org/babel-preset-jest/-/babel-preset-jest-28.1.3.tgz", - "integrity": "sha512-L+fupJvlWAHbQfn74coNX3zf60LXMJsezNvvx8eIh7iOR1luJ1poxYgQk1F8PYtNq/6QODDHCqsSnTFSWC491A==", + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/babel-preset-jest/-/babel-preset-jest-29.6.3.tgz", + "integrity": "sha512-0B3bhxR6snWXJZtR/RliHTDPRgn1sNHOR0yVtq/IiQFyuOVjFS+wuio/R4gSNkyYmKmJB4wGZv2NZanmKmTnNA==", "dev": true, "dependencies": { - "babel-plugin-jest-hoist": "^28.1.3", + "babel-plugin-jest-hoist": "^29.6.3", "babel-preset-current-node-syntax": "^1.0.0" }, "engines": { - "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" }, "peerDependencies": { "@babel/core": "^7.0.0" @@ -1594,9 +1687,9 @@ } }, "node_modules/browserslist": { - "version": "4.21.2", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.21.2.tgz", - "integrity": "sha512-MonuOgAtUB46uP5CezYbRaYKBNt2LxP0yX+Pmj4LkcDFGkn9Cbpi83d9sCjwQDErXsIJSzY5oKGDbgOlF/LPAA==", + "version": "4.22.1", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.22.1.tgz", + "integrity": "sha512-FEVc202+2iuClEhZhrWy6ZiAcRLvNMyYcxZ8raemul1DYVOVdFsbqckWLdsixQZCpJlwe77Z3UTalE7jsjnKfQ==", "dev": true, "funding": [ { @@ -1606,13 +1699,17 @@ { "type": "tidelift", "url": "https://tidelift.com/funding/github/npm/browserslist" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" } ], "dependencies": { - "caniuse-lite": "^1.0.30001366", - "electron-to-chromium": "^1.4.188", - "node-releases": "^2.0.6", - "update-browserslist-db": "^1.0.4" + "caniuse-lite": "^1.0.30001541", + "electron-to-chromium": "^1.4.535", + "node-releases": "^2.0.13", + "update-browserslist-db": "^1.0.13" }, "bin": { "browserslist": "cli.js" @@ -1707,9 +1804,9 @@ } }, "node_modules/caniuse-lite": { - "version": "1.0.30001370", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001370.tgz", - "integrity": "sha512-3PDmaP56wz/qz7G508xzjx8C+MC2qEm4SYhSEzC9IBROo+dGXFWRuaXkWti0A9tuI00g+toiriVqxtWMgl350g==", + "version": "1.0.30001546", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001546.tgz", + "integrity": "sha512-zvtSJwuQFpewSyRrI3AsftF6rM0X80mZkChIt1spBGEvRglCrjTniXvinc8JKRoqTwXAgvqTImaN9igfSMtUBw==", "dev": true, "funding": [ { @@ -1719,6 +1816,10 @@ { "type": "tidelift", "url": "https://tidelift.com/funding/github/npm/caniuse-lite" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" } ] }, @@ -1754,26 +1855,38 @@ "dev": true }, "node_modules/ci-info": { - "version": "3.3.2", - "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.3.2.tgz", - "integrity": "sha512-xmDt/QIAdeZ9+nfdPsaBCpMvHNLFiLdjj59qjqn+6iPe6YmHGQ35sBnQ8uslRBXFmXkiZQOJRjvQeoGppoTjjg==", - "dev": true + "version": "3.9.0", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.9.0.tgz", + "integrity": "sha512-NIxF55hv4nSqQswkAeiOi1r83xy8JldOFDTWiug55KBu9Jnblncd2U6ViHmYgHf01TPZS77NJBhBMKdWj9HQMQ==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/sibiraj-s" + } + ], + "engines": { + "node": ">=8" + } }, "node_modules/cjs-module-lexer": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/cjs-module-lexer/-/cjs-module-lexer-1.2.2.tgz", - "integrity": "sha512-cOU9usZw8/dXIXKtwa8pM0OTJQuJkxMN6w30csNRUerHfeQ5R6U3kkU/FtJeIf3M202OHfY2U8ccInBG7/xogA==", + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/cjs-module-lexer/-/cjs-module-lexer-1.2.3.tgz", + "integrity": "sha512-0TNiGstbQmCFwt4akjjBg5pLRTSyj/PkWQ1ZoO2zntmg9yLqSRxwEa4iCfQLGjqhiqBfOJa7W/E8wfGrTDmlZQ==", "dev": true }, "node_modules/cliui": { - "version": "7.0.4", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", - "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==", + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", + "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==", "dev": true, "dependencies": { "string-width": "^4.2.0", - "strip-ansi": "^6.0.0", + "strip-ansi": "^6.0.1", "wrap-ansi": "^7.0.0" + }, + "engines": { + "node": ">=12" } }, "node_modules/co": { @@ -1787,9 +1900,9 @@ } }, "node_modules/collect-v8-coverage": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/collect-v8-coverage/-/collect-v8-coverage-1.0.1.tgz", - "integrity": "sha512-iBPtljfCNcTKNAto0KEtDfZ3qzjJvqE3aTGZsbhjSBlorqpXJlaWWtPO35D+ZImoC3KWejX64o+yPGxhWSTzfg==", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/collect-v8-coverage/-/collect-v8-coverage-1.0.2.tgz", + "integrity": "sha512-lHl4d5/ONEbLlJvaJNtsF/Lz+WvB07u2ycqTYbdrq7UypDXailES4valYb2eWiJFxZlVmpGekfqoxQhzyFdT4Q==", "dev": true }, "node_modules/color-convert": { @@ -1832,13 +1945,10 @@ "dev": true }, "node_modules/convert-source-map": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.8.0.tgz", - "integrity": "sha512-+OQdjP49zViI/6i7nIJpA8rAl4sV/JdPfU9nZs3VqOwGIgizICvuN2ru6fMd+4llL0tar18UYJXfZ/TWtmhUjA==", - "dev": true, - "dependencies": { - "safe-buffer": "~5.1.1" - } + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz", + "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==", + "dev": true }, "node_modules/core-util-is": { "version": "1.0.3", @@ -1886,6 +1996,27 @@ "node": ">= 10" } }, + "node_modules/create-jest": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/create-jest/-/create-jest-29.7.0.tgz", + "integrity": "sha512-Adz2bdH0Vq3F53KEMJOoftQFutWCukm6J24wbPWRO4k1kMY7gS7ds/uoJkNuV8wDCtWWnuwGcJwpWcih+zEW1Q==", + "dev": true, + "dependencies": { + "@jest/types": "^29.6.3", + "chalk": "^4.0.0", + "exit": "^0.1.2", + "graceful-fs": "^4.2.9", + "jest-config": "^29.7.0", + "jest-util": "^29.7.0", + "prompts": "^2.0.1" + }, + "bin": { + "create-jest": "bin/create-jest.js" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, "node_modules/cross-spawn": { "version": "7.0.3", "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", @@ -1918,10 +2049,18 @@ } }, "node_modules/dedent": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/dedent/-/dedent-0.7.0.tgz", - "integrity": "sha512-Q6fKUPqnAHAyhiUgFU7BUzLiv0kd8saH9al7tnu5Q/okj6dnupxyTgFIBjVzJATdfIAm9NAsvXNzjaKa+bxVyA==", - "dev": true + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/dedent/-/dedent-1.5.1.tgz", + "integrity": "sha512-+LxW+KLWxu3HW3M2w2ympwtqPrqYRzU8fqi6Fhd18fBALe15blJPI/I4+UHveMVG6lJqB4JNd4UG0S5cnVHwIg==", + "dev": true, + "peerDependencies": { + "babel-plugin-macros": "^3.1.0" + }, + "peerDependenciesMeta": { + "babel-plugin-macros": { + "optional": true + } + } }, "node_modules/deep-is": { "version": "0.1.4", @@ -1930,9 +2069,9 @@ "dev": true }, "node_modules/deepmerge": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.2.2.tgz", - "integrity": "sha512-FJ3UgI4gIl+PHZm53knsuSFpE+nESMr7M4v9QcgB7S63Kj/6WqMiFQJpBBYz1Pt+66bZpP3Q7Lye0Oo9MPKEdg==", + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.3.1.tgz", + "integrity": "sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==", "dev": true, "engines": { "node": ">=0.10.0" @@ -1948,59 +2087,48 @@ } }, "node_modules/diff-sequences": { - "version": "28.1.1", - "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-28.1.1.tgz", - "integrity": "sha512-FU0iFaH/E23a+a718l8Qa/19bF9p06kgE0KipMOMadwa3SjnaElKzPaUC0vnibs6/B/9ni97s61mcejk8W1fQw==", - "dev": true, - "engines": { - "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" - } - }, - "node_modules/dir-glob": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", - "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-29.6.3.tgz", + "integrity": "sha512-EjePK1srD3P08o2j4f0ExnylqRs5B9tJjcp9t1krH2qRi8CCdsYfwe9JgSLurFBWwq4uOlipzfk5fHNvwFKr8Q==", "dev": true, - "dependencies": { - "path-type": "^4.0.0" - }, "engines": { - "node": ">=8" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, "node_modules/docker-compose": { - "version": "0.23.17", - "resolved": "https://registry.npmjs.org/docker-compose/-/docker-compose-0.23.17.tgz", - "integrity": "sha512-YJV18YoYIcxOdJKeFcCFihE6F4M2NExWM/d4S1ITcS9samHKnNUihz9kjggr0dNtsrbpFNc7/Yzd19DWs+m1xg==", + "version": "0.24.2", + "resolved": "https://registry.npmjs.org/docker-compose/-/docker-compose-0.24.2.tgz", + "integrity": "sha512-2/WLvA7UZ6A2LDLQrYW0idKipmNBWhtfvrn2yzjC5PnHDzuFVj1zAZN6MJxVMKP0zZH8uzAK6OwVZYHGuyCmTw==", "dev": true, "dependencies": { - "yaml": "^1.10.2" + "yaml": "^2.2.2" }, "engines": { "node": ">= 6.0.0" } }, "node_modules/docker-modem": { - "version": "3.0.5", - "resolved": "https://registry.npmjs.org/docker-modem/-/docker-modem-3.0.5.tgz", - "integrity": "sha512-x1E6jxWdtoK3+ifAUWj4w5egPdTDGBpesSCErm+aKET5BnnEOvDtTP6GxcnMB1zZiv2iQ0qJZvJie+1wfIRg6Q==", + "version": "3.0.8", + "resolved": "https://registry.npmjs.org/docker-modem/-/docker-modem-3.0.8.tgz", + "integrity": "sha512-f0ReSURdM3pcKPNS30mxOHSbaFLcknGmQjwSfmbcdOw1XWKXVhukM3NJHhr7NpY9BIyyWQb0EBo3KQvvuU5egQ==", "dev": true, "dependencies": { "debug": "^4.1.1", "readable-stream": "^3.5.0", "split-ca": "^1.0.1", - "ssh2": "^1.4.0" + "ssh2": "^1.11.0" }, "engines": { "node": ">= 8.0" } }, "node_modules/dockerode": { - "version": "3.3.3", - "resolved": "https://registry.npmjs.org/dockerode/-/dockerode-3.3.3.tgz", - "integrity": "sha512-lvKV6/NGf2/CYLt5V4c0fd6Fl9XZSCo1Z2HBT9ioKrKLMB2o+gA62Uza8RROpzGvYv57KJx2dKu+ZwSpB//OIA==", + "version": "3.3.5", + "resolved": "https://registry.npmjs.org/dockerode/-/dockerode-3.3.5.tgz", + "integrity": "sha512-/0YNa3ZDNeLr/tSckmD69+Gq+qVNhvKfAHNeZJBnp7EOP6RGKV8ORrJHkUn20So5wU+xxT7+1n5u8PjHbfjbSA==", "dev": true, "dependencies": { + "@balena/dockerignore": "^1.0.2", "docker-modem": "^3.0.0", "tar-fs": "~2.0.1" }, @@ -2033,15 +2161,15 @@ } }, "node_modules/electron-to-chromium": { - "version": "1.4.199", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.199.tgz", - "integrity": "sha512-WIGME0Cs7oob3mxsJwHbeWkH0tYkIE/sjkJ8ML2BYmuRcjhRl/q5kVDXG7W9LOOKwzPU5M0LBlXRq9rlSgnNlg==", + "version": "1.4.543", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.543.tgz", + "integrity": "sha512-t2ZP4AcGE0iKCCQCBx/K2426crYdxD3YU6l0uK2EO3FZH0pbC4pFz/sZm2ruZsND6hQBTcDWWlo/MLpiOdif5g==", "dev": true }, "node_modules/emittery": { - "version": "0.10.2", - "resolved": "https://registry.npmjs.org/emittery/-/emittery-0.10.2.tgz", - "integrity": "sha512-aITqOwnLanpHLNXZJENbOgjUBeHocD+xsSJmNrjovKBW5HbSpW3d1pEls7GFQPUWXiwG9+0P4GtHfEqC/4M0Iw==", + "version": "0.13.1", + "resolved": "https://registry.npmjs.org/emittery/-/emittery-0.13.1.tgz", + "integrity": "sha512-DeWwawk6r5yR9jFgnDKYt4sLS0LmHJJi3ZOnb5/JdbYwj3nW+FxQnHIjhBKz8YLC7oRNPVM9NQ47I3CVx34eqQ==", "dev": true, "engines": { "node": ">=12" @@ -2093,50 +2221,48 @@ } }, "node_modules/eslint": { - "version": "8.21.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.21.0.tgz", - "integrity": "sha512-/XJ1+Qurf1T9G2M5IHrsjp+xrGT73RZf23xA1z5wB1ZzzEAWSZKvRwhWxTFp1rvkvCfwcvAUNAP31bhKTTGfDA==", - "dev": true, - "dependencies": { - "@eslint/eslintrc": "^1.3.0", - "@humanwhocodes/config-array": "^0.10.4", - "@humanwhocodes/gitignore-to-minimatch": "^1.0.2", - "ajv": "^6.10.0", + "version": "8.50.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.50.0.tgz", + "integrity": "sha512-FOnOGSuFuFLv/Sa+FDVRZl4GGVAAFFi8LecRsI5a1tMO5HIE8nCm4ivAlzt4dT3ol/PaaGC0rJEEXQmHJBGoOg==", + "dev": true, + "dependencies": { + "@eslint-community/eslint-utils": "^4.2.0", + "@eslint-community/regexpp": "^4.6.1", + "@eslint/eslintrc": "^2.1.2", + "@eslint/js": "8.50.0", + "@humanwhocodes/config-array": "^0.11.11", + "@humanwhocodes/module-importer": "^1.0.1", + "@nodelib/fs.walk": "^1.2.8", + "ajv": "^6.12.4", "chalk": "^4.0.0", "cross-spawn": "^7.0.2", "debug": "^4.3.2", "doctrine": "^3.0.0", "escape-string-regexp": "^4.0.0", - "eslint-scope": "^7.1.1", - "eslint-utils": "^3.0.0", - "eslint-visitor-keys": "^3.3.0", - "espree": "^9.3.3", - "esquery": "^1.4.0", + "eslint-scope": "^7.2.2", + "eslint-visitor-keys": "^3.4.3", + "espree": "^9.6.1", + "esquery": "^1.4.2", "esutils": "^2.0.2", "fast-deep-equal": "^3.1.3", "file-entry-cache": "^6.0.1", "find-up": "^5.0.0", - "functional-red-black-tree": "^1.0.1", - "glob-parent": "^6.0.1", - "globals": "^13.15.0", - "globby": "^11.1.0", - "grapheme-splitter": "^1.0.4", + "glob-parent": "^6.0.2", + "globals": "^13.19.0", + "graphemer": "^1.4.0", "ignore": "^5.2.0", - "import-fresh": "^3.0.0", "imurmurhash": "^0.1.4", "is-glob": "^4.0.0", + "is-path-inside": "^3.0.3", "js-yaml": "^4.1.0", "json-stable-stringify-without-jsonify": "^1.0.1", "levn": "^0.4.1", "lodash.merge": "^4.6.2", "minimatch": "^3.1.2", "natural-compare": "^1.4.0", - "optionator": "^0.9.1", - "regexpp": "^3.2.0", + "optionator": "^0.9.3", "strip-ansi": "^6.0.1", - "strip-json-comments": "^3.1.0", - "text-table": "^0.2.0", - "v8-compile-cache": "^2.0.3" + "text-table": "^0.2.0" }, "bin": { "eslint": "bin/eslint.js" @@ -2149,9 +2275,9 @@ } }, "node_modules/eslint-scope": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.1.1.tgz", - "integrity": "sha512-QKQM/UXpIiHcLqJ5AOyIW7XZmzjkzQXYE54n1++wb0u9V/abW3l9uQnxX8Z5Xd18xyKIMTUAyQ0k1e8pz6LUrw==", + "version": "7.2.2", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.2.2.tgz", + "integrity": "sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==", "dev": true, "dependencies": { "esrecurse": "^4.3.0", @@ -2159,50 +2285,23 @@ }, "engines": { "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - } - }, - "node_modules/eslint-utils": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-3.0.0.tgz", - "integrity": "sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA==", - "dev": true, - "dependencies": { - "eslint-visitor-keys": "^2.0.0" - }, - "engines": { - "node": "^10.0.0 || ^12.0.0 || >= 14.0.0" }, "funding": { - "url": "https://github.com/sponsors/mysticatea" - }, - "peerDependencies": { - "eslint": ">=5" - } - }, - "node_modules/eslint-utils/node_modules/eslint-visitor-keys": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz", - "integrity": "sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==", - "dev": true, - "engines": { - "node": ">=10" + "url": "https://opencollective.com/eslint" } }, "node_modules/eslint-visitor-keys": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.3.0.tgz", - "integrity": "sha512-mQ+suqKJVyeuwGYHAdjMFqjCyfl8+Ldnxuyp3ldiMBFKkvytrXUZWaiPCEav8qDHKty44bD+qV1IP4T+w+xXRA==", + "version": "3.4.3", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz", + "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==", "dev": true, "engines": { "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" } }, - "node_modules/eslint/node_modules/argparse": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", - "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", - "dev": true - }, "node_modules/eslint/node_modules/escape-string-regexp": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", @@ -2231,33 +2330,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/eslint/node_modules/globals": { - "version": "13.17.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-13.17.0.tgz", - "integrity": "sha512-1C+6nQRb1GwGMKm2dH/E7enFAMxGTmGI7/dEdhy/DNelv85w9B72t3uc5frtMNXIbzrarJJ/lTCjcaZwbLJmyw==", - "dev": true, - "dependencies": { - "type-fest": "^0.20.2" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/eslint/node_modules/js-yaml": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", - "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", - "dev": true, - "dependencies": { - "argparse": "^2.0.1" - }, - "bin": { - "js-yaml": "bin/js-yaml.js" - } - }, "node_modules/eslint/node_modules/locate-path": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", @@ -2288,27 +2360,15 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/eslint/node_modules/type-fest": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", - "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/espree": { - "version": "9.3.3", - "resolved": "https://registry.npmjs.org/espree/-/espree-9.3.3.tgz", - "integrity": "sha512-ORs1Rt/uQTqUKjDdGCyrtYxbazf5umATSf/K4qxjmZHORR6HJk+2s/2Pqe+Kk49HHINC/xNIrGfgh8sZcll0ng==", + "version": "9.6.1", + "resolved": "https://registry.npmjs.org/espree/-/espree-9.6.1.tgz", + "integrity": "sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==", "dev": true, "dependencies": { - "acorn": "^8.8.0", + "acorn": "^8.9.0", "acorn-jsx": "^5.3.2", - "eslint-visitor-keys": "^3.3.0" + "eslint-visitor-keys": "^3.4.1" }, "engines": { "node": "^12.22.0 || ^14.17.0 || >=16.0.0" @@ -2331,9 +2391,9 @@ } }, "node_modules/esquery": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.4.0.tgz", - "integrity": "sha512-cCDispWt5vHHtwMY2YrAQ4ibFkAL8RbH5YGBnZBc90MolvvfkkQcJro/aZiAQUlQ3qgrYS6D6v8Gc5G5CQsc9w==", + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.5.0.tgz", + "integrity": "sha512-YQLXUplAwJgCydQ78IMJywZCceoqk1oH01OERdSAJc/7U2AylwjhSCLDEtqwg811idIS/9fIU5GjG73IgjKMVg==", "dev": true, "dependencies": { "estraverse": "^5.1.0" @@ -2405,19 +2465,19 @@ } }, "node_modules/expect": { - "version": "28.1.3", - "resolved": "https://registry.npmjs.org/expect/-/expect-28.1.3.tgz", - "integrity": "sha512-eEh0xn8HlsuOBxFgIss+2mX85VAS4Qy3OSkjV7rlBWljtA4oWH37glVGyOZSZvErDT/yBywZdPGwCXuTvSG85g==", + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/expect/-/expect-29.7.0.tgz", + "integrity": "sha512-2Zks0hf1VLFYI1kbh0I5jP3KHHyCHpkfyHBzsSXRFgl/Bg9mWYfMW8oD+PdMPlEwy5HNsR9JutYy6pMeOh61nw==", "dev": true, "dependencies": { - "@jest/expect-utils": "^28.1.3", - "jest-get-type": "^28.0.2", - "jest-matcher-utils": "^28.1.3", - "jest-message-util": "^28.1.3", - "jest-util": "^28.1.3" + "@jest/expect-utils": "^29.7.0", + "jest-get-type": "^29.6.3", + "jest-matcher-utils": "^29.7.0", + "jest-message-util": "^29.7.0", + "jest-util": "^29.7.0" }, "engines": { - "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, "node_modules/fast-deep-equal": { @@ -2426,33 +2486,11 @@ "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", "dev": true }, - "node_modules/fast-glob": { - "version": "3.2.11", - "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.11.tgz", - "integrity": "sha512-xrO3+1bxSo3ZVHAnqzyuewYT6aMFHRAd4Kcs92MAonjwQZLsK9d0SF1IyQ3k5PoirxTW0Oe/RqFgMQ6TcNE5Ew==", - "dev": true, - "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" - }, - "engines": { - "node": ">=8.6.0" - } - }, - "node_modules/fast-glob/node_modules/glob-parent": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", - "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", - "dev": true, - "dependencies": { - "is-glob": "^4.0.1" - }, - "engines": { - "node": ">= 6" - } + "node_modules/fast-fifo": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/fast-fifo/-/fast-fifo-1.3.2.tgz", + "integrity": "sha512-/d9sfos4yxzpwkDkuN7k2SqFKtYNmCTzgfEpz82x34IM9/zc8KGxQoXg1liNC/izpRM/MBdt44Nmx41ZWqk+FQ==", + "dev": true }, "node_modules/fast-json-stable-stringify": { "version": "2.1.0", @@ -2467,18 +2505,18 @@ "dev": true }, "node_modules/fastq": { - "version": "1.13.0", - "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.13.0.tgz", - "integrity": "sha512-YpkpUnK8od0o1hmeSc7UUs/eB/vIPWJYjKck2QKIzAf71Vm1AAQ3EbuZB3g2JIy+pg+ERD0vqI79KyZiB2e2Nw==", + "version": "1.15.0", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.15.0.tgz", + "integrity": "sha512-wBrocU2LCXXa+lWBt8RoIRD89Fi8OdABODa/kEnyeyjS5aZO5/GNvI5sEINADqP/h8M29UHTHUb53sUu5Ihqdw==", "dev": true, "dependencies": { "reusify": "^1.0.4" } }, "node_modules/fb-watchman": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/fb-watchman/-/fb-watchman-2.0.1.tgz", - "integrity": "sha512-DkPJKQeY6kKwmuMretBhr7G6Vodr7bFwDYTXIkfG1gjvNpaxBTQV3PbXg6bR1c1UP4jPOX0jHUbbHANL9vRjVg==", + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/fb-watchman/-/fb-watchman-2.0.2.tgz", + "integrity": "sha512-p5161BqbuCaSnB8jIbzQHOlpgsPmK5rJVDfDKO91Axs5NC1uu3HRQm6wt9cd9/+GtQQIO53JdGXXoyDpTAsgYA==", "dev": true, "dependencies": { "bser": "2.1.1" @@ -2553,9 +2591,9 @@ "dev": true }, "node_modules/fsevents": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", - "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", + "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", "dev": true, "hasInstallScript": true, "optional": true, @@ -2566,18 +2604,6 @@ "node": "^8.16.0 || ^10.6.0 || >=11.0.0" } }, - "node_modules/function-bind": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", - "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", - "dev": true - }, - "node_modules/functional-red-black-tree": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz", - "integrity": "sha512-dsKNQNdj6xA3T+QlADDA7mOSlX0qiMINjn0cgr+eGHGsbSHzTabcIogz2+p/iqP1Xs6EP/sS2SbqH+brGTbq0g==", - "dev": true - }, "node_modules/gensync": { "version": "1.0.0-beta.2", "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", @@ -2658,33 +2684,19 @@ "is-glob": "^4.0.3" }, "engines": { - "node": ">=10.13.0" - } - }, - "node_modules/globals": { - "version": "11.12.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", - "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", - "dev": true, - "engines": { - "node": ">=4" + "node": ">=10.13.0" } }, - "node_modules/globby": { - "version": "11.1.0", - "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", - "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", + "node_modules/globals": { + "version": "13.23.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.23.0.tgz", + "integrity": "sha512-XAmF0RjlrjY23MA51q3HltdlGxUpXPvg0GioKiD9X6HD28iMjo2dKC8Vqwm7lne4GNr78+RHTfliktR6ZH09wA==", "dev": true, "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" + "type-fest": "^0.20.2" }, "engines": { - "node": ">=10" + "node": ">=8" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" @@ -2696,20 +2708,17 @@ "integrity": "sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==", "dev": true }, - "node_modules/grapheme-splitter": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/grapheme-splitter/-/grapheme-splitter-1.0.4.tgz", - "integrity": "sha512-bzh50DW9kTPM00T8y4o8vQg89Di9oLJVLW/KaOGIXJWP/iqCN6WKYkbNOF04vFLJhwcpYUh9ydh/+5vpOqV4YQ==", + "node_modules/graphemer": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/graphemer/-/graphemer-1.4.0.tgz", + "integrity": "sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==", "dev": true }, "node_modules/has": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", - "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/has/-/has-1.0.4.tgz", + "integrity": "sha512-qdSAmqLF6209RFj4VVItywPMbm3vWylknmB3nvNiUIs72xAimcM8nVYxYr7ncvZq5qzk9MKIZR8ijqD/1QuYjQ==", "dev": true, - "dependencies": { - "function-bind": "^1.1.1" - }, "engines": { "node": ">= 0.4.0" } @@ -2759,9 +2768,9 @@ ] }, "node_modules/ignore": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.0.tgz", - "integrity": "sha512-CmxgYGiEPCLhfLnpPp1MoRmifwEIOgjcHXxOBjv7mY96c+eWScsOP9c112ZyLdWHi0FxHjI+4uVhKYp/gcdRmQ==", + "version": "5.2.4", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.4.tgz", + "integrity": "sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ==", "dev": true, "engines": { "node": ">= 4" @@ -2783,15 +2792,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/import-fresh/node_modules/resolve-from": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", - "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", - "dev": true, - "engines": { - "node": ">=4" - } - }, "node_modules/import-local": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/import-local/-/import-local-3.1.0.tgz", @@ -2843,9 +2843,9 @@ "dev": true }, "node_modules/is-core-module": { - "version": "2.9.0", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.9.0.tgz", - "integrity": "sha512-+5FPy5PnwmO3lvfMb0AsoPaBG+5KHUI0wYFXOtYPnVVVspTFUuMZNfNaNVRt3FZadstu2c8x23vykRW/NBoU6A==", + "version": "2.13.0", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.13.0.tgz", + "integrity": "sha512-Z7dk6Qo8pOCp3l4tsX2C5ZVas4V+UxwQodwZhLopL91TX8UyyHEXafPcyoeeWuLrwzHcr3igO78wNLwHJHsMCQ==", "dev": true, "dependencies": { "has": "^1.0.3" @@ -2902,6 +2902,15 @@ "node": ">=0.12.0" } }, + "node_modules/is-path-inside": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz", + "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, "node_modules/is-stream": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", @@ -2936,33 +2945,66 @@ } }, "node_modules/istanbul-lib-instrument": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-5.2.0.tgz", - "integrity": "sha512-6Lthe1hqXHBNsqvgDzGO6l03XNeu3CrG4RqQ1KM9+l5+jNGpEJfIELx1NS3SEHmJQA8np/u+E4EPRKRiu6m19A==", + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-6.0.1.tgz", + "integrity": "sha512-EAMEJBsYuyyztxMxW3g7ugGPkrZsV57v0Hmv3mm1uQsmB+QnZuepg731CRaIgeUVSdmsTngOkSnauNF8p7FIhA==", "dev": true, "dependencies": { "@babel/core": "^7.12.3", "@babel/parser": "^7.14.7", "@istanbuljs/schema": "^0.1.2", "istanbul-lib-coverage": "^3.2.0", - "semver": "^6.3.0" + "semver": "^7.5.4" }, "engines": { - "node": ">=8" + "node": ">=10" + } + }, + "node_modules/istanbul-lib-instrument/node_modules/lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dev": true, + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/istanbul-lib-instrument/node_modules/semver": { + "version": "7.5.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", + "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", + "dev": true, + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" } }, + "node_modules/istanbul-lib-instrument/node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true + }, "node_modules/istanbul-lib-report": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz", - "integrity": "sha512-wcdi+uAKzfiGT2abPpKZ0hSU1rGQjUQnLvtY5MpQ7QCTahD3VODhcu4wcfY1YtkGaDD5yuydOLINXsfbus9ROw==", + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-3.0.1.tgz", + "integrity": "sha512-GCfE1mtsHGOELCU8e/Z7YWzpmybrx/+dSTfLrvY8qRmaY6zXTKWn6WQIjaAFw069icm6GVMNkgu0NzI4iPZUNw==", "dev": true, "dependencies": { "istanbul-lib-coverage": "^3.0.0", - "make-dir": "^3.0.0", + "make-dir": "^4.0.0", "supports-color": "^7.1.0" }, "engines": { - "node": ">=8" + "node": ">=10" } }, "node_modules/istanbul-lib-source-maps": { @@ -2980,9 +3022,9 @@ } }, "node_modules/istanbul-reports": { - "version": "3.1.5", - "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.1.5.tgz", - "integrity": "sha512-nUsEMa9pBt/NOHqbcbeJEgqIlY/K7rVWUX6Lql2orY5e9roQOthbR3vtY4zzf2orPELg80fnxxk9zUyPlgwD1w==", + "version": "3.1.6", + "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.1.6.tgz", + "integrity": "sha512-TLgnMkKg3iTDsQ9PbPTdpfAK2DzjF9mqUG7RMgcQl8oFjad8ob4laGxv5XV5U9MAfx8D6tSJiUyuAwzLicaxlg==", "dev": true, "dependencies": { "html-escaper": "^2.0.0", @@ -2993,21 +3035,21 @@ } }, "node_modules/jest": { - "version": "28.1.3", - "resolved": "https://registry.npmjs.org/jest/-/jest-28.1.3.tgz", - "integrity": "sha512-N4GT5on8UkZgH0O5LUavMRV1EDEhNTL0KEfRmDIeZHSV7p2XgLoY9t9VDUgL6o+yfdgYHVxuz81G8oB9VG5uyA==", + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest/-/jest-29.7.0.tgz", + "integrity": "sha512-NIy3oAFp9shda19hy4HK0HRTWKtPJmGdnvywu01nOqNC2vZg+Z+fvJDxpMQA88eb2I9EcafcdjYgsDthnYTvGw==", "dev": true, "dependencies": { - "@jest/core": "^28.1.3", - "@jest/types": "^28.1.3", + "@jest/core": "^29.7.0", + "@jest/types": "^29.6.3", "import-local": "^3.0.2", - "jest-cli": "^28.1.3" + "jest-cli": "^29.7.0" }, "bin": { "jest": "bin/jest.js" }, "engines": { - "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" }, "peerDependencies": { "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" @@ -3019,72 +3061,73 @@ } }, "node_modules/jest-changed-files": { - "version": "28.1.3", - "resolved": "https://registry.npmjs.org/jest-changed-files/-/jest-changed-files-28.1.3.tgz", - "integrity": "sha512-esaOfUWJXk2nfZt9SPyC8gA1kNfdKLkQWyzsMlqq8msYSlNKfmZxfRgZn4Cd4MGVUF+7v6dBs0d5TOAKa7iIiA==", + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-changed-files/-/jest-changed-files-29.7.0.tgz", + "integrity": "sha512-fEArFiwf1BpQ+4bXSprcDc3/x4HSzL4al2tozwVpDFpsxALjLYdyiIK4e5Vz66GQJIbXJ82+35PtysofptNX2w==", "dev": true, "dependencies": { "execa": "^5.0.0", + "jest-util": "^29.7.0", "p-limit": "^3.1.0" }, "engines": { - "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, "node_modules/jest-circus": { - "version": "28.1.3", - "resolved": "https://registry.npmjs.org/jest-circus/-/jest-circus-28.1.3.tgz", - "integrity": "sha512-cZ+eS5zc79MBwt+IhQhiEp0OeBddpc1n8MBo1nMB8A7oPMKEO+Sre+wHaLJexQUj9Ya/8NOBY0RESUgYjB6fow==", + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-circus/-/jest-circus-29.7.0.tgz", + "integrity": "sha512-3E1nCMgipcTkCocFwM90XXQab9bS+GMsjdpmPrlelaxwD93Ad8iVEjX/vvHPdLPnFf+L40u+5+iutRdA1N9myw==", "dev": true, "dependencies": { - "@jest/environment": "^28.1.3", - "@jest/expect": "^28.1.3", - "@jest/test-result": "^28.1.3", - "@jest/types": "^28.1.3", + "@jest/environment": "^29.7.0", + "@jest/expect": "^29.7.0", + "@jest/test-result": "^29.7.0", + "@jest/types": "^29.6.3", "@types/node": "*", "chalk": "^4.0.0", "co": "^4.6.0", - "dedent": "^0.7.0", + "dedent": "^1.0.0", "is-generator-fn": "^2.0.0", - "jest-each": "^28.1.3", - "jest-matcher-utils": "^28.1.3", - "jest-message-util": "^28.1.3", - "jest-runtime": "^28.1.3", - "jest-snapshot": "^28.1.3", - "jest-util": "^28.1.3", + "jest-each": "^29.7.0", + "jest-matcher-utils": "^29.7.0", + "jest-message-util": "^29.7.0", + "jest-runtime": "^29.7.0", + "jest-snapshot": "^29.7.0", + "jest-util": "^29.7.0", "p-limit": "^3.1.0", - "pretty-format": "^28.1.3", + "pretty-format": "^29.7.0", + "pure-rand": "^6.0.0", "slash": "^3.0.0", "stack-utils": "^2.0.3" }, "engines": { - "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, "node_modules/jest-cli": { - "version": "28.1.3", - "resolved": "https://registry.npmjs.org/jest-cli/-/jest-cli-28.1.3.tgz", - "integrity": "sha512-roY3kvrv57Azn1yPgdTebPAXvdR2xfezaKKYzVxZ6It/5NCxzJym6tUI5P1zkdWhfUYkxEI9uZWcQdaFLo8mJQ==", + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-cli/-/jest-cli-29.7.0.tgz", + "integrity": "sha512-OVVobw2IubN/GSYsxETi+gOe7Ka59EFMR/twOU3Jb2GnKKeMGJB5SGUUrEz3SFVmJASUdZUzy83sLNNQ2gZslg==", "dev": true, "dependencies": { - "@jest/core": "^28.1.3", - "@jest/test-result": "^28.1.3", - "@jest/types": "^28.1.3", + "@jest/core": "^29.7.0", + "@jest/test-result": "^29.7.0", + "@jest/types": "^29.6.3", "chalk": "^4.0.0", + "create-jest": "^29.7.0", "exit": "^0.1.2", - "graceful-fs": "^4.2.9", "import-local": "^3.0.2", - "jest-config": "^28.1.3", - "jest-util": "^28.1.3", - "jest-validate": "^28.1.3", - "prompts": "^2.0.1", + "jest-config": "^29.7.0", + "jest-util": "^29.7.0", + "jest-validate": "^29.7.0", "yargs": "^17.3.1" }, "bin": { "jest": "bin/jest.js" }, "engines": { - "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" }, "peerDependencies": { "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" @@ -3096,36 +3139,36 @@ } }, "node_modules/jest-config": { - "version": "28.1.3", - "resolved": "https://registry.npmjs.org/jest-config/-/jest-config-28.1.3.tgz", - "integrity": "sha512-MG3INjByJ0J4AsNBm7T3hsuxKQqFIiRo/AUqb1q9LRKI5UU6Aar9JHbr9Ivn1TVwfUD9KirRoM/T6u8XlcQPHQ==", + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-config/-/jest-config-29.7.0.tgz", + "integrity": "sha512-uXbpfeQ7R6TZBqI3/TxCU4q4ttk3u0PJeC+E0zbfSoSjq6bJ7buBPxzQPL0ifrkY4DNu4JUdk0ImlBUYi840eQ==", "dev": true, "dependencies": { "@babel/core": "^7.11.6", - "@jest/test-sequencer": "^28.1.3", - "@jest/types": "^28.1.3", - "babel-jest": "^28.1.3", + "@jest/test-sequencer": "^29.7.0", + "@jest/types": "^29.6.3", + "babel-jest": "^29.7.0", "chalk": "^4.0.0", "ci-info": "^3.2.0", "deepmerge": "^4.2.2", "glob": "^7.1.3", "graceful-fs": "^4.2.9", - "jest-circus": "^28.1.3", - "jest-environment-node": "^28.1.3", - "jest-get-type": "^28.0.2", - "jest-regex-util": "^28.0.2", - "jest-resolve": "^28.1.3", - "jest-runner": "^28.1.3", - "jest-util": "^28.1.3", - "jest-validate": "^28.1.3", + "jest-circus": "^29.7.0", + "jest-environment-node": "^29.7.0", + "jest-get-type": "^29.6.3", + "jest-regex-util": "^29.6.3", + "jest-resolve": "^29.7.0", + "jest-runner": "^29.7.0", + "jest-util": "^29.7.0", + "jest-validate": "^29.7.0", "micromatch": "^4.0.4", "parse-json": "^5.2.0", - "pretty-format": "^28.1.3", + "pretty-format": "^29.7.0", "slash": "^3.0.0", "strip-json-comments": "^3.1.1" }, "engines": { - "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" }, "peerDependencies": { "@types/node": "*", @@ -3141,192 +3184,193 @@ } }, "node_modules/jest-diff": { - "version": "28.1.3", - "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-28.1.3.tgz", - "integrity": "sha512-8RqP1B/OXzjjTWkqMX67iqgwBVJRgCyKD3L9nq+6ZqJMdvjE8RgHktqZ6jNrkdMT+dJuYNI3rhQpxaz7drJHfw==", + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-29.7.0.tgz", + "integrity": "sha512-LMIgiIrhigmPrs03JHpxUh2yISK3vLFPkAodPeo0+BuF7wA2FoQbkEg1u8gBYBThncu7e1oEDUfIXVuTqLRUjw==", "dev": true, "dependencies": { "chalk": "^4.0.0", - "diff-sequences": "^28.1.1", - "jest-get-type": "^28.0.2", - "pretty-format": "^28.1.3" + "diff-sequences": "^29.6.3", + "jest-get-type": "^29.6.3", + "pretty-format": "^29.7.0" }, "engines": { - "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, "node_modules/jest-docblock": { - "version": "28.1.1", - "resolved": "https://registry.npmjs.org/jest-docblock/-/jest-docblock-28.1.1.tgz", - "integrity": "sha512-3wayBVNiOYx0cwAbl9rwm5kKFP8yHH3d/fkEaL02NPTkDojPtheGB7HZSFY4wzX+DxyrvhXz0KSCVksmCknCuA==", + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-docblock/-/jest-docblock-29.7.0.tgz", + "integrity": "sha512-q617Auw3A612guyaFgsbFeYpNP5t2aoUNLwBUbc/0kD1R4t9ixDbyFTHd1nok4epoVFpr7PmeWHrhvuV3XaJ4g==", "dev": true, "dependencies": { "detect-newline": "^3.0.0" }, "engines": { - "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, "node_modules/jest-each": { - "version": "28.1.3", - "resolved": "https://registry.npmjs.org/jest-each/-/jest-each-28.1.3.tgz", - "integrity": "sha512-arT1z4sg2yABU5uogObVPvSlSMQlDA48owx07BDPAiasW0yYpYHYOo4HHLz9q0BVzDVU4hILFjzJw0So9aCL/g==", + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-each/-/jest-each-29.7.0.tgz", + "integrity": "sha512-gns+Er14+ZrEoC5fhOfYCY1LOHHr0TI+rQUHZS8Ttw2l7gl+80eHc/gFf2Ktkw0+SIACDTeWvpFcv3B04VembQ==", "dev": true, "dependencies": { - "@jest/types": "^28.1.3", + "@jest/types": "^29.6.3", "chalk": "^4.0.0", - "jest-get-type": "^28.0.2", - "jest-util": "^28.1.3", - "pretty-format": "^28.1.3" + "jest-get-type": "^29.6.3", + "jest-util": "^29.7.0", + "pretty-format": "^29.7.0" }, "engines": { - "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, "node_modules/jest-environment-node": { - "version": "28.1.3", - "resolved": "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-28.1.3.tgz", - "integrity": "sha512-ugP6XOhEpjAEhGYvp5Xj989ns5cB1K6ZdjBYuS30umT4CQEETaxSiPcZ/E1kFktX4GkrcM4qu07IIlDYX1gp+A==", + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-29.7.0.tgz", + "integrity": "sha512-DOSwCRqXirTOyheM+4d5YZOrWcdu0LNZ87ewUoywbcb2XR4wKgqiG8vNeYwhjFMbEkfju7wx2GYH0P2gevGvFw==", "dev": true, "dependencies": { - "@jest/environment": "^28.1.3", - "@jest/fake-timers": "^28.1.3", - "@jest/types": "^28.1.3", + "@jest/environment": "^29.7.0", + "@jest/fake-timers": "^29.7.0", + "@jest/types": "^29.6.3", "@types/node": "*", - "jest-mock": "^28.1.3", - "jest-util": "^28.1.3" + "jest-mock": "^29.7.0", + "jest-util": "^29.7.0" }, "engines": { - "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, "node_modules/jest-get-type": { - "version": "28.0.2", - "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-28.0.2.tgz", - "integrity": "sha512-ioj2w9/DxSYHfOm5lJKCdcAmPJzQXmbM/Url3rhlghrPvT3tt+7a/+oXc9azkKmLvoiXjtV83bEWqi+vs5nlPA==", + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-29.6.3.tgz", + "integrity": "sha512-zrteXnqYxfQh7l5FHyL38jL39di8H8rHoecLH3JNxH3BwOrBsNeabdap5e0I23lD4HHI8W5VFBZqG4Eaq5LNcw==", "dev": true, "engines": { - "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, "node_modules/jest-haste-map": { - "version": "28.1.3", - "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-28.1.3.tgz", - "integrity": "sha512-3S+RQWDXccXDKSWnkHa/dPwt+2qwA8CJzR61w3FoYCvoo3Pn8tvGcysmMF0Bj0EX5RYvAI2EIvC57OmotfdtKA==", + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-29.7.0.tgz", + "integrity": "sha512-fP8u2pyfqx0K1rGn1R9pyE0/KTn+G7PxktWidOBTqFPLYX0b9ksaMFkhK5vrS3DVun09pckLdlx90QthlW7AmA==", "dev": true, "dependencies": { - "@jest/types": "^28.1.3", + "@jest/types": "^29.6.3", "@types/graceful-fs": "^4.1.3", "@types/node": "*", "anymatch": "^3.0.3", "fb-watchman": "^2.0.0", "graceful-fs": "^4.2.9", - "jest-regex-util": "^28.0.2", - "jest-util": "^28.1.3", - "jest-worker": "^28.1.3", + "jest-regex-util": "^29.6.3", + "jest-util": "^29.7.0", + "jest-worker": "^29.7.0", "micromatch": "^4.0.4", "walker": "^1.0.8" }, "engines": { - "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" }, "optionalDependencies": { "fsevents": "^2.3.2" } }, "node_modules/jest-jasmine2": { - "version": "28.1.3", - "resolved": "https://registry.npmjs.org/jest-jasmine2/-/jest-jasmine2-28.1.3.tgz", - "integrity": "sha512-nlNWJY1u62w+WAVgnXOQTdxFdZhqlxpKvMTn1cOK1QHX2oRrkPV3JcIcJfXwcGcifttOJZhExcgDUqSHrYQ6Dw==", + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-jasmine2/-/jest-jasmine2-29.7.0.tgz", + "integrity": "sha512-N3nRpBVTM5erHtMi6ODBUEqG/LpVgSJC8qk14duw88d9Eigx2vL+n4LF1d8eV8pegnnzKyNHdTGxa/NsIKj0Zw==", "dev": true, "dependencies": { - "@jest/environment": "^28.1.3", - "@jest/expect": "^28.1.3", - "@jest/source-map": "^28.1.2", - "@jest/test-result": "^28.1.3", - "@jest/types": "^28.1.3", + "@jest/environment": "^29.7.0", + "@jest/expect": "^29.7.0", + "@jest/source-map": "^29.6.3", + "@jest/test-result": "^29.7.0", + "@jest/types": "^29.6.3", "@types/node": "*", "chalk": "^4.0.0", "co": "^4.6.0", "is-generator-fn": "^2.0.0", - "jest-each": "^28.1.3", - "jest-matcher-utils": "^28.1.3", - "jest-message-util": "^28.1.3", - "jest-runtime": "^28.1.3", - "jest-snapshot": "^28.1.3", - "jest-util": "^28.1.3", + "jest-each": "^29.7.0", + "jest-matcher-utils": "^29.7.0", + "jest-message-util": "^29.7.0", + "jest-runtime": "^29.7.0", + "jest-snapshot": "^29.7.0", + "jest-util": "^29.7.0", "p-limit": "^3.1.0", - "pretty-format": "^28.1.3" + "pretty-format": "^29.7.0" }, "engines": { - "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, "node_modules/jest-leak-detector": { - "version": "28.1.3", - "resolved": "https://registry.npmjs.org/jest-leak-detector/-/jest-leak-detector-28.1.3.tgz", - "integrity": "sha512-WFVJhnQsiKtDEo5lG2mM0v40QWnBM+zMdHHyJs8AWZ7J0QZJS59MsyKeJHWhpBZBH32S48FOVvGyOFT1h0DlqA==", + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-leak-detector/-/jest-leak-detector-29.7.0.tgz", + "integrity": "sha512-kYA8IJcSYtST2BY9I+SMC32nDpBT3J2NvWJx8+JCuCdl/CR1I4EKUJROiP8XtCcxqgTTBGJNdbB1A8XRKbTetw==", "dev": true, "dependencies": { - "jest-get-type": "^28.0.2", - "pretty-format": "^28.1.3" + "jest-get-type": "^29.6.3", + "pretty-format": "^29.7.0" }, "engines": { - "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, "node_modules/jest-matcher-utils": { - "version": "28.1.3", - "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-28.1.3.tgz", - "integrity": "sha512-kQeJ7qHemKfbzKoGjHHrRKH6atgxMk8Enkk2iPQ3XwO6oE/KYD8lMYOziCkeSB9G4adPM4nR1DE8Tf5JeWH6Bw==", + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-29.7.0.tgz", + "integrity": "sha512-sBkD+Xi9DtcChsI3L3u0+N0opgPYnCRPtGcQYrgXmR+hmt/fYfWAL0xRXYU8eWOdfuLgBe0YCW3AFtnRLagq/g==", "dev": true, "dependencies": { "chalk": "^4.0.0", - "jest-diff": "^28.1.3", - "jest-get-type": "^28.0.2", - "pretty-format": "^28.1.3" + "jest-diff": "^29.7.0", + "jest-get-type": "^29.6.3", + "pretty-format": "^29.7.0" }, "engines": { - "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, "node_modules/jest-message-util": { - "version": "28.1.3", - "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-28.1.3.tgz", - "integrity": "sha512-PFdn9Iewbt575zKPf1286Ht9EPoJmYT7P0kY+RibeYZ2XtOr53pDLEFoTWXbd1h4JiGiWpTBC84fc8xMXQMb7g==", + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-29.7.0.tgz", + "integrity": "sha512-GBEV4GRADeP+qtB2+6u61stea8mGcOT4mCtrYISZwfu9/ISHFJ/5zOMXYbpBE9RsS5+Gb63DW4FgmnKJ79Kf6w==", "dev": true, "dependencies": { "@babel/code-frame": "^7.12.13", - "@jest/types": "^28.1.3", + "@jest/types": "^29.6.3", "@types/stack-utils": "^2.0.0", "chalk": "^4.0.0", "graceful-fs": "^4.2.9", "micromatch": "^4.0.4", - "pretty-format": "^28.1.3", + "pretty-format": "^29.7.0", "slash": "^3.0.0", "stack-utils": "^2.0.3" }, "engines": { - "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, "node_modules/jest-mock": { - "version": "28.1.3", - "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-28.1.3.tgz", - "integrity": "sha512-o3J2jr6dMMWYVH4Lh/NKmDXdosrsJgi4AviS8oXLujcjpCMBb1FMsblDnOXKZKfSiHLxYub1eS0IHuRXsio9eA==", + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-29.7.0.tgz", + "integrity": "sha512-ITOMZn+UkYS4ZFh83xYAOzWStloNzJFO2s8DWrE4lhtGD+AorgnbkiKERe4wQVBydIGPx059g6riW5Btp6Llnw==", "dev": true, "dependencies": { - "@jest/types": "^28.1.3", - "@types/node": "*" + "@jest/types": "^29.6.3", + "@types/node": "*", + "jest-util": "^29.7.0" }, "engines": { - "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, "node_modules/jest-pnp-resolver": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/jest-pnp-resolver/-/jest-pnp-resolver-1.2.2.tgz", - "integrity": "sha512-olV41bKSMm8BdnuMsewT4jqlZ8+3TCARAXjZGT9jcoSnrfUnRCqnMoF9XEeoWjbzObpqF9dRhHQj0Xb9QdF6/w==", + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/jest-pnp-resolver/-/jest-pnp-resolver-1.2.3.tgz", + "integrity": "sha512-+3NpwQEnRoIBtx4fyhblQDPgJI0H1IEIkX7ShLUjPGA7TtUTvI1oiKi3SR4oBR0hQhQR80l4WAe5RrXBwWMA8w==", "dev": true, "engines": { "node": ">=6" @@ -3341,150 +3385,159 @@ } }, "node_modules/jest-regex-util": { - "version": "28.0.2", - "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-28.0.2.tgz", - "integrity": "sha512-4s0IgyNIy0y9FK+cjoVYoxamT7Zeo7MhzqRGx7YDYmaQn1wucY9rotiGkBzzcMXTtjrCAP/f7f+E0F7+fxPNdw==", + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-29.6.3.tgz", + "integrity": "sha512-KJJBsRCyyLNWCNBOvZyRDnAIfUiRJ8v+hOBQYGn8gDyF3UegwiP4gwRR3/SDa42g1YbVycTidUF3rKjyLFDWbg==", "dev": true, "engines": { - "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, "node_modules/jest-resolve": { - "version": "28.1.3", - "resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-28.1.3.tgz", - "integrity": "sha512-Z1W3tTjE6QaNI90qo/BJpfnvpxtaFTFw5CDgwpyE/Kz8U/06N1Hjf4ia9quUhCh39qIGWF1ZuxFiBiJQwSEYKQ==", + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-29.7.0.tgz", + "integrity": "sha512-IOVhZSrg+UvVAshDSDtHyFCCBUl/Q3AAJv8iZ6ZjnZ74xzvwuzLXid9IIIPgTnY62SJjfuupMKZsZQRsCvxEgA==", "dev": true, "dependencies": { "chalk": "^4.0.0", "graceful-fs": "^4.2.9", - "jest-haste-map": "^28.1.3", + "jest-haste-map": "^29.7.0", "jest-pnp-resolver": "^1.2.2", - "jest-util": "^28.1.3", - "jest-validate": "^28.1.3", + "jest-util": "^29.7.0", + "jest-validate": "^29.7.0", "resolve": "^1.20.0", - "resolve.exports": "^1.1.0", + "resolve.exports": "^2.0.0", "slash": "^3.0.0" }, "engines": { - "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, "node_modules/jest-resolve-dependencies": { - "version": "28.1.3", - "resolved": "https://registry.npmjs.org/jest-resolve-dependencies/-/jest-resolve-dependencies-28.1.3.tgz", - "integrity": "sha512-qa0QO2Q0XzQoNPouMbCc7Bvtsem8eQgVPNkwn9LnS+R2n8DaVDPL/U1gngC0LTl1RYXJU0uJa2BMC2DbTfFrHA==", + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-resolve-dependencies/-/jest-resolve-dependencies-29.7.0.tgz", + "integrity": "sha512-un0zD/6qxJ+S0et7WxeI3H5XSe9lTBBR7bOHCHXkKR6luG5mwDDlIzVQ0V5cZCuoTgEdcdwzTghYkTWfubi+nA==", "dev": true, "dependencies": { - "jest-regex-util": "^28.0.2", - "jest-snapshot": "^28.1.3" + "jest-regex-util": "^29.6.3", + "jest-snapshot": "^29.7.0" }, "engines": { - "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, "node_modules/jest-runner": { - "version": "28.1.3", - "resolved": "https://registry.npmjs.org/jest-runner/-/jest-runner-28.1.3.tgz", - "integrity": "sha512-GkMw4D/0USd62OVO0oEgjn23TM+YJa2U2Wu5zz9xsQB1MxWKDOlrnykPxnMsN0tnJllfLPinHTka61u0QhaxBA==", + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-runner/-/jest-runner-29.7.0.tgz", + "integrity": "sha512-fsc4N6cPCAahybGBfTRcq5wFR6fpLznMg47sY5aDpsoejOcVYFb07AHuSnR0liMcPTgBsA3ZJL6kFOjPdoNipQ==", "dev": true, "dependencies": { - "@jest/console": "^28.1.3", - "@jest/environment": "^28.1.3", - "@jest/test-result": "^28.1.3", - "@jest/transform": "^28.1.3", - "@jest/types": "^28.1.3", + "@jest/console": "^29.7.0", + "@jest/environment": "^29.7.0", + "@jest/test-result": "^29.7.0", + "@jest/transform": "^29.7.0", + "@jest/types": "^29.6.3", "@types/node": "*", "chalk": "^4.0.0", - "emittery": "^0.10.2", + "emittery": "^0.13.1", "graceful-fs": "^4.2.9", - "jest-docblock": "^28.1.1", - "jest-environment-node": "^28.1.3", - "jest-haste-map": "^28.1.3", - "jest-leak-detector": "^28.1.3", - "jest-message-util": "^28.1.3", - "jest-resolve": "^28.1.3", - "jest-runtime": "^28.1.3", - "jest-util": "^28.1.3", - "jest-watcher": "^28.1.3", - "jest-worker": "^28.1.3", + "jest-docblock": "^29.7.0", + "jest-environment-node": "^29.7.0", + "jest-haste-map": "^29.7.0", + "jest-leak-detector": "^29.7.0", + "jest-message-util": "^29.7.0", + "jest-resolve": "^29.7.0", + "jest-runtime": "^29.7.0", + "jest-util": "^29.7.0", + "jest-watcher": "^29.7.0", + "jest-worker": "^29.7.0", "p-limit": "^3.1.0", "source-map-support": "0.5.13" }, "engines": { - "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, "node_modules/jest-runtime": { - "version": "28.1.3", - "resolved": "https://registry.npmjs.org/jest-runtime/-/jest-runtime-28.1.3.tgz", - "integrity": "sha512-NU+881ScBQQLc1JHG5eJGU7Ui3kLKrmwCPPtYsJtBykixrM2OhVQlpMmFWJjMyDfdkGgBMNjXCGB/ebzsgNGQw==", - "dev": true, - "dependencies": { - "@jest/environment": "^28.1.3", - "@jest/fake-timers": "^28.1.3", - "@jest/globals": "^28.1.3", - "@jest/source-map": "^28.1.2", - "@jest/test-result": "^28.1.3", - "@jest/transform": "^28.1.3", - "@jest/types": "^28.1.3", + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-runtime/-/jest-runtime-29.7.0.tgz", + "integrity": "sha512-gUnLjgwdGqW7B4LvOIkbKs9WGbn+QLqRQQ9juC6HndeDiezIwhDP+mhMwHWCEcfQ5RUXa6OPnFF8BJh5xegwwQ==", + "dev": true, + "dependencies": { + "@jest/environment": "^29.7.0", + "@jest/fake-timers": "^29.7.0", + "@jest/globals": "^29.7.0", + "@jest/source-map": "^29.6.3", + "@jest/test-result": "^29.7.0", + "@jest/transform": "^29.7.0", + "@jest/types": "^29.6.3", + "@types/node": "*", "chalk": "^4.0.0", "cjs-module-lexer": "^1.0.0", "collect-v8-coverage": "^1.0.0", - "execa": "^5.0.0", "glob": "^7.1.3", "graceful-fs": "^4.2.9", - "jest-haste-map": "^28.1.3", - "jest-message-util": "^28.1.3", - "jest-mock": "^28.1.3", - "jest-regex-util": "^28.0.2", - "jest-resolve": "^28.1.3", - "jest-snapshot": "^28.1.3", - "jest-util": "^28.1.3", + "jest-haste-map": "^29.7.0", + "jest-message-util": "^29.7.0", + "jest-mock": "^29.7.0", + "jest-regex-util": "^29.6.3", + "jest-resolve": "^29.7.0", + "jest-snapshot": "^29.7.0", + "jest-util": "^29.7.0", "slash": "^3.0.0", "strip-bom": "^4.0.0" }, "engines": { - "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, "node_modules/jest-snapshot": { - "version": "28.1.3", - "resolved": "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-28.1.3.tgz", - "integrity": "sha512-4lzMgtiNlc3DU/8lZfmqxN3AYD6GGLbl+72rdBpXvcV+whX7mDrREzkPdp2RnmfIiWBg1YbuFSkXduF2JcafJg==", + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-29.7.0.tgz", + "integrity": "sha512-Rm0BMWtxBcioHr1/OX5YCP8Uov4riHvKPknOGs804Zg9JGZgmIBkbtlxJC/7Z4msKYVbIJtfU+tKb8xlYNfdkw==", "dev": true, "dependencies": { "@babel/core": "^7.11.6", "@babel/generator": "^7.7.2", + "@babel/plugin-syntax-jsx": "^7.7.2", "@babel/plugin-syntax-typescript": "^7.7.2", - "@babel/traverse": "^7.7.2", "@babel/types": "^7.3.3", - "@jest/expect-utils": "^28.1.3", - "@jest/transform": "^28.1.3", - "@jest/types": "^28.1.3", - "@types/babel__traverse": "^7.0.6", - "@types/prettier": "^2.1.5", + "@jest/expect-utils": "^29.7.0", + "@jest/transform": "^29.7.0", + "@jest/types": "^29.6.3", "babel-preset-current-node-syntax": "^1.0.0", "chalk": "^4.0.0", - "expect": "^28.1.3", + "expect": "^29.7.0", "graceful-fs": "^4.2.9", - "jest-diff": "^28.1.3", - "jest-get-type": "^28.0.2", - "jest-haste-map": "^28.1.3", - "jest-matcher-utils": "^28.1.3", - "jest-message-util": "^28.1.3", - "jest-util": "^28.1.3", + "jest-diff": "^29.7.0", + "jest-get-type": "^29.6.3", + "jest-matcher-utils": "^29.7.0", + "jest-message-util": "^29.7.0", + "jest-util": "^29.7.0", "natural-compare": "^1.4.0", - "pretty-format": "^28.1.3", - "semver": "^7.3.5" + "pretty-format": "^29.7.0", + "semver": "^7.5.3" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-snapshot/node_modules/lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dev": true, + "dependencies": { + "yallist": "^4.0.0" }, "engines": { - "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + "node": ">=10" } }, "node_modules/jest-snapshot/node_modules/semver": { - "version": "7.3.7", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.7.tgz", - "integrity": "sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g==", + "version": "7.5.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", + "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", "dev": true, "dependencies": { "lru-cache": "^6.0.0" @@ -3496,13 +3549,19 @@ "node": ">=10" } }, + "node_modules/jest-snapshot/node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true + }, "node_modules/jest-util": { - "version": "28.1.3", - "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-28.1.3.tgz", - "integrity": "sha512-XdqfpHwpcSRko/C35uLYFM2emRAltIIKZiJ9eAmhjsj0CqZMa0p1ib0R5fWIqGhn1a103DebTbpqIaP1qCQ6tQ==", + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-29.7.0.tgz", + "integrity": "sha512-z6EbKajIpqGKU56y5KBUgy1dt1ihhQJgWzUlZHArA/+X2ad7Cb5iF+AK1EWVL/Bo7Rz9uurpqw6SiBCefUbCGA==", "dev": true, "dependencies": { - "@jest/types": "^28.1.3", + "@jest/types": "^29.6.3", "@types/node": "*", "chalk": "^4.0.0", "ci-info": "^3.2.0", @@ -3510,24 +3569,24 @@ "picomatch": "^2.2.3" }, "engines": { - "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, "node_modules/jest-validate": { - "version": "28.1.3", - "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-28.1.3.tgz", - "integrity": "sha512-SZbOGBWEsaTxBGCOpsRWlXlvNkvTkY0XxRfh7zYmvd8uL5Qzyg0CHAXiXKROflh801quA6+/DsT4ODDthOC/OA==", + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-29.7.0.tgz", + "integrity": "sha512-ZB7wHqaRGVw/9hST/OuFUReG7M8vKeq0/J2egIGLdvjHCmYqGARhzXmtgi+gVeZ5uXFF219aOc3Ls2yLg27tkw==", "dev": true, "dependencies": { - "@jest/types": "^28.1.3", + "@jest/types": "^29.6.3", "camelcase": "^6.2.0", "chalk": "^4.0.0", - "jest-get-type": "^28.0.2", + "jest-get-type": "^29.6.3", "leven": "^3.1.0", - "pretty-format": "^28.1.3" + "pretty-format": "^29.7.0" }, "engines": { - "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, "node_modules/jest-validate/node_modules/camelcase": { @@ -3543,36 +3602,37 @@ } }, "node_modules/jest-watcher": { - "version": "28.1.3", - "resolved": "https://registry.npmjs.org/jest-watcher/-/jest-watcher-28.1.3.tgz", - "integrity": "sha512-t4qcqj9hze+jviFPUN3YAtAEeFnr/azITXQEMARf5cMwKY2SMBRnCQTXLixTl20OR6mLh9KLMrgVJgJISym+1g==", + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-watcher/-/jest-watcher-29.7.0.tgz", + "integrity": "sha512-49Fg7WXkU3Vl2h6LbLtMQ/HyB6rXSIX7SqvBLQmssRBGN9I0PNvPmAmCWSOY6SOvrjhI/F7/bGAv9RtnsPA03g==", "dev": true, "dependencies": { - "@jest/test-result": "^28.1.3", - "@jest/types": "^28.1.3", + "@jest/test-result": "^29.7.0", + "@jest/types": "^29.6.3", "@types/node": "*", "ansi-escapes": "^4.2.1", "chalk": "^4.0.0", - "emittery": "^0.10.2", - "jest-util": "^28.1.3", + "emittery": "^0.13.1", + "jest-util": "^29.7.0", "string-length": "^4.0.1" }, "engines": { - "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, "node_modules/jest-worker": { - "version": "28.1.3", - "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-28.1.3.tgz", - "integrity": "sha512-CqRA220YV/6jCo8VWvAt1KKx6eek1VIHMPeLEbpcfSfkEeWyBNppynM/o6q+Wmw+sOhos2ml34wZbSX3G13//g==", + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-29.7.0.tgz", + "integrity": "sha512-eIz2msL/EzL9UFTFFx7jBTkeZfku0yUAyZZZmJ93H2TYEiroIx2PQjEXcwYtYl8zXCxb+PAmA2hLIt/6ZEkPHw==", "dev": true, "dependencies": { "@types/node": "*", + "jest-util": "^29.7.0", "merge-stream": "^2.0.0", "supports-color": "^8.0.0" }, "engines": { - "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, "node_modules/jest-worker/node_modules/supports-color": { @@ -3597,13 +3657,12 @@ "dev": true }, "node_modules/js-yaml": { - "version": "3.14.1", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", - "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", + "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", "dev": true, "dependencies": { - "argparse": "^1.0.7", - "esprima": "^4.0.0" + "argparse": "^2.0.1" }, "bin": { "js-yaml": "bin/js-yaml.js" @@ -3773,6 +3832,30 @@ "dev": true }, "node_modules/lru-cache": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", + "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", + "dev": true, + "dependencies": { + "yallist": "^3.0.2" + } + }, + "node_modules/make-dir": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-4.0.0.tgz", + "integrity": "sha512-hXdUTZYIVOt1Ex//jAQi+wTZZpUpwBj/0QsOzqegb3rGMMeJiSEu5xLHnYfBrRV4RH2+OCSOO95Is/7x1WJ4bw==", + "dev": true, + "dependencies": { + "semver": "^7.5.3" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/make-dir/node_modules/lru-cache": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", @@ -3784,21 +3867,27 @@ "node": ">=10" } }, - "node_modules/make-dir": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", - "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", + "node_modules/make-dir/node_modules/semver": { + "version": "7.5.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", + "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", "dev": true, "dependencies": { - "semver": "^6.0.0" + "lru-cache": "^6.0.0" }, - "engines": { - "node": ">=8" + "bin": { + "semver": "bin/semver.js" }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "engines": { + "node": ">=10" } }, + "node_modules/make-dir/node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true + }, "node_modules/makeerror": { "version": "1.0.12", "resolved": "https://registry.npmjs.org/makeerror/-/makeerror-1.0.12.tgz", @@ -3814,15 +3903,6 @@ "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", "dev": true }, - "node_modules/merge2": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", - "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", - "dev": true, - "engines": { - "node": ">= 8" - } - }, "node_modules/micromatch": { "version": "4.0.5", "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", @@ -3894,6 +3974,26 @@ "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", "dev": true }, + "node_modules/node-fetch": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.7.0.tgz", + "integrity": "sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==", + "dev": true, + "dependencies": { + "whatwg-url": "^5.0.0" + }, + "engines": { + "node": "4.x || >=6.0.0" + }, + "peerDependencies": { + "encoding": "^0.1.0" + }, + "peerDependenciesMeta": { + "encoding": { + "optional": true + } + } + }, "node_modules/node-int64": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/node-int64/-/node-int64-0.4.0.tgz", @@ -3901,9 +4001,9 @@ "dev": true }, "node_modules/node-releases": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.6.tgz", - "integrity": "sha512-PiVXnNuFm5+iYkLBNeq5211hvO38y63T0i2KKh2KnUs3RpzJ+JtODFjkD8yjLwnDkTYF1eKXheUwdssR+NRZdg==", + "version": "2.0.13", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.13.tgz", + "integrity": "sha512-uYr7J37ae/ORWdZeQ1xxMJe3NtdmqMC/JZK+geofDrkLUApKRHPd18/TxtBOJ4A0/+uUIliorNrfYV6s1b02eQ==", "dev": true }, "node_modules/normalize-path": { @@ -3952,17 +4052,17 @@ } }, "node_modules/optionator": { - "version": "0.9.1", - "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.1.tgz", - "integrity": "sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw==", + "version": "0.9.3", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.3.tgz", + "integrity": "sha512-JjCoypp+jKn1ttEFExxhetCKeJt9zhAgAve5FXHixTvFDW/5aEktX9bufBKLRRMdU7bNtpLfcGu94B3cdEJgjg==", "dev": true, "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" + "type-check": "^0.4.0" }, "engines": { "node": ">= 0.8.0" @@ -4082,15 +4182,6 @@ "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", "dev": true }, - "node_modules/path-type": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", - "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", - "dev": true, - "engines": { - "node": ">=8" - } - }, "node_modules/picocolors": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", @@ -4110,9 +4201,9 @@ } }, "node_modules/pirates": { - "version": "4.0.5", - "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.5.tgz", - "integrity": "sha512-8V9+HQPupnaXMA23c5hvl69zXvTwTzyAYasnkb0Tts4XvO4CliqONMOnvlq26rkhLC3nWDFBJf73LU1e1VZLaQ==", + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.6.tgz", + "integrity": "sha512-saLsH7WeYYPiD25LDuLRRY/i+6HaPYr6G1OUlN39otzkSTxKnubR9RTxS3/Kk50s1g2JTgFwWQDQyplC5/SHZg==", "dev": true, "engines": { "node": ">= 6" @@ -4140,18 +4231,17 @@ } }, "node_modules/pretty-format": { - "version": "28.1.3", - "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-28.1.3.tgz", - "integrity": "sha512-8gFb/To0OmxHR9+ZTb14Df2vNxdGCX8g1xWGUTqUw5TiZvcQf5sHKObd5UcPyLLyowNwDAMTF3XWOG1B6mxl1Q==", + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.7.0.tgz", + "integrity": "sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==", "dev": true, "dependencies": { - "@jest/schemas": "^28.1.3", - "ansi-regex": "^5.0.1", + "@jest/schemas": "^29.6.3", "ansi-styles": "^5.0.0", "react-is": "^18.0.0" }, "engines": { - "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, "node_modules/pretty-format/node_modules/ansi-styles": { @@ -4185,6 +4275,17 @@ "node": ">= 6" } }, + "node_modules/proper-lockfile": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/proper-lockfile/-/proper-lockfile-4.1.2.tgz", + "integrity": "sha512-TjNPblN4BwAWMXU8s9AEz4JmQxnD1NNL7bNOY/AKUzyamc379FWASUhc/K1pL2noVb+XmZKLL68cjzLsiOAMaA==", + "dev": true, + "dependencies": { + "graceful-fs": "^4.2.4", + "retry": "^0.12.0", + "signal-exit": "^3.0.2" + } + }, "node_modules/properties-reader": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/properties-reader/-/properties-reader-2.2.0.tgz", @@ -4208,14 +4309,30 @@ } }, "node_modules/punycode": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", - "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==", + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.0.tgz", + "integrity": "sha512-rRV+zQD8tVFys26lAGR9WUuS4iUAngJScM+ZRSKtvl5tKeZ2t5bvdNFdNHBW9FWR4guGHlgmsZ1G7BSm2wTbuA==", "dev": true, "engines": { "node": ">=6" } }, + "node_modules/pure-rand": { + "version": "6.0.4", + "resolved": "https://registry.npmjs.org/pure-rand/-/pure-rand-6.0.4.tgz", + "integrity": "sha512-LA0Y9kxMYv47GIPJy6MI84fqTd2HmYZI83W/kM/SkKfDlajnZYfmXFTxkbY+xSBPkLJxltMa9hIkmdc29eguMA==", + "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://github.com/sponsors/dubzzz" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/fast-check" + } + ] + }, "node_modules/queue-microtask": { "version": "1.2.3", "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", @@ -4236,6 +4353,12 @@ } ] }, + "node_modules/queue-tick": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/queue-tick/-/queue-tick-1.0.1.tgz", + "integrity": "sha512-kJt5qhMxoszgU/62PLP1CJytzd2NKetjSRnyuj31fDd3Rlcz3fzlFdFLD1SItunPwyqEOkca6GbV612BWfaBag==", + "dev": true + }, "node_modules/react-is": { "version": "18.2.0", "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.2.0.tgz", @@ -4286,18 +4409,6 @@ "node": ">=10" } }, - "node_modules/regexpp": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-3.2.0.tgz", - "integrity": "sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg==", - "dev": true, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/mysticatea" - } - }, "node_modules/require-directory": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", @@ -4308,12 +4419,12 @@ } }, "node_modules/resolve": { - "version": "1.22.1", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.1.tgz", - "integrity": "sha512-nBpuuYuY5jFsli/JIs1oldw6fOQCBioohqWZg/2hiaOybXOft4lonv85uDOKXdf8rhyK159cxU5cDcK/NKk8zw==", + "version": "1.22.6", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.6.tgz", + "integrity": "sha512-njhxM7mV12JfufShqGy3Rz8j11RPdLy4xi15UurGJeoHLfJpVXKdh3ueuOqbYUcDZnffr6X739JBo5LzyahEsw==", "dev": true, "dependencies": { - "is-core-module": "^2.9.0", + "is-core-module": "^2.13.0", "path-parse": "^1.0.7", "supports-preserve-symlinks-flag": "^1.0.0" }, @@ -4336,7 +4447,7 @@ "node": ">=8" } }, - "node_modules/resolve-from": { + "node_modules/resolve-cwd/node_modules/resolve-from": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", @@ -4345,15 +4456,33 @@ "node": ">=8" } }, + "node_modules/resolve-from": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", + "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", + "dev": true, + "engines": { + "node": ">=4" + } + }, "node_modules/resolve.exports": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/resolve.exports/-/resolve.exports-1.1.0.tgz", - "integrity": "sha512-J1l+Zxxp4XK3LUDZ9m60LRJF/mAe4z6a4xyabPHk7pvK5t35dACV32iIjJDFeWZFfZlO29w6SZ67knR0tHzJtQ==", + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/resolve.exports/-/resolve.exports-2.0.2.tgz", + "integrity": "sha512-X2UW6Nw3n/aMgDVy+0rSqgHlv39WZAlZrXCdnbyEiKm17DSqHX4MmQMaST3FbeWR5FTuRcUwYAziZajji0Y7mg==", "dev": true, "engines": { "node": ">=10" } }, + "node_modules/retry": { + "version": "0.12.0", + "resolved": "https://registry.npmjs.org/retry/-/retry-0.12.0.tgz", + "integrity": "sha512-9LkiTwjUh6rT555DtE9rTX+BKByPfrMzEAtnlEtdEwr3Nkffwiihqe2bWADg+OQRjt9gl6ICdmB/ZFDCGAtSow==", + "dev": true, + "engines": { + "node": ">= 4" + } + }, "node_modules/reusify": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", @@ -4415,9 +4544,9 @@ "dev": true }, "node_modules/semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", "dev": true, "bin": { "semver": "bin/semver.js" @@ -4535,9 +4664,9 @@ } }, "node_modules/stack-utils": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/stack-utils/-/stack-utils-2.0.5.tgz", - "integrity": "sha512-xrQcmYhOsn/1kX+Vraq+7j4oE2j/6BFscZ0etmYg81xuM8Gq0022Pxb8+IqgOFUIaxHs0KaSb7T1+OegiNrNFA==", + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/stack-utils/-/stack-utils-2.0.6.tgz", + "integrity": "sha512-XlkWvfIm6RmsWtNJx+uqtKLS8eqFbxUg0ZzLXqY0caEy9l7hruX8IpiDnjsLavoBgqCCR71TqWO8MaXYheJ3RQ==", "dev": true, "dependencies": { "escape-string-regexp": "^2.0.0" @@ -4546,6 +4675,16 @@ "node": ">=10" } }, + "node_modules/streamx": { + "version": "2.15.1", + "resolved": "https://registry.npmjs.org/streamx/-/streamx-2.15.1.tgz", + "integrity": "sha512-fQMzy2O/Q47rgwErk/eGeLu/roaFWV0jVsogDmrszM9uIw8L5OA+t+V93MgYlufNptfjmYR1tOMWhei/Eh7TQA==", + "dev": true, + "dependencies": { + "fast-fifo": "^1.1.0", + "queue-tick": "^1.0.1" + } + }, "node_modules/string_decoder": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", @@ -4656,19 +4795,6 @@ "node": ">=8" } }, - "node_modules/supports-hyperlinks": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/supports-hyperlinks/-/supports-hyperlinks-2.2.0.tgz", - "integrity": "sha512-6sXEzV5+I5j8Bmq9/vUphGRM/RJNT9SCURJLjwfOg51heRtguGWDzcaBlgAzKhQa0EVNpPEKzQuBwZ8S8WaCeQ==", - "dev": true, - "dependencies": { - "has-flag": "^4.0.0", - "supports-color": "^7.0.0" - }, - "engines": { - "node": ">=8" - } - }, "node_modules/supports-preserve-symlinks-flag": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", @@ -4682,15 +4808,25 @@ } }, "node_modules/tar-fs": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/tar-fs/-/tar-fs-2.1.1.tgz", - "integrity": "sha512-V0r2Y9scmbDRLCNex/+hYzvp/zyYjvFbHPNgVTKfQvVrb6guiE/fxP+XblDNR011utopbkex2nM4dHNV6GDsng==", + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/tar-fs/-/tar-fs-3.0.4.tgz", + "integrity": "sha512-5AFQU8b9qLfZCX9zp2duONhPmZv0hGYiBPJsyUdqMjzq/mqVpy/rEUSeHk1+YitmxugaptgBh5oDGU3VsAJq4w==", "dev": true, "dependencies": { - "chownr": "^1.1.1", "mkdirp-classic": "^0.5.2", "pump": "^3.0.0", - "tar-stream": "^2.1.4" + "tar-stream": "^3.1.5" + } + }, + "node_modules/tar-fs/node_modules/tar-stream": { + "version": "3.1.6", + "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-3.1.6.tgz", + "integrity": "sha512-B/UyjYwPpMBv+PaFSWAmtYjwdrlEaZQEhMIBFNC5oEG8lpiW8XjcSdmEaClj28ArfKScKHs2nshz3k2le6crsg==", + "dev": true, + "dependencies": { + "b4a": "^1.6.4", + "fast-fifo": "^1.2.0", + "streamx": "^2.15.0" } }, "node_modules/tar-stream": { @@ -4709,22 +4845,6 @@ "node": ">=6" } }, - "node_modules/terminal-link": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/terminal-link/-/terminal-link-2.1.1.tgz", - "integrity": "sha512-un0FmiRUQNr5PJqy9kP7c40F5BOfpGlYTrxonDChEZB7pzZxRNp/bt+ymiy9/npwXya9KH99nJ/GXFIiUkYGFQ==", - "dev": true, - "dependencies": { - "ansi-escapes": "^4.2.1", - "supports-hyperlinks": "^2.0.0" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/test-exclude": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/test-exclude/-/test-exclude-6.0.0.tgz", @@ -4740,23 +4860,25 @@ } }, "node_modules/testcontainers": { - "version": "8.12.0", - "resolved": "https://registry.npmjs.org/testcontainers/-/testcontainers-8.12.0.tgz", - "integrity": "sha512-6qQqKirdURAXH/V6sVnfbgqLAJK/vxP2ED6qcwiLfsZ6McPkF5TGDAPzkVZUmdrx62H3RzuTTdXGoPcLP7KG6g==", + "version": "10.2.1", + "resolved": "https://registry.npmjs.org/testcontainers/-/testcontainers-10.2.1.tgz", + "integrity": "sha512-R9LUMUEkKGSL2M4cP466Jah+Vi+ZLFlvrT4BENjEKJKNzubATOmDk26RHe8DHeFT+hnMD6fvVii+McXr0UTO7g==", "dev": true, "dependencies": { "@balena/dockerignore": "^1.0.2", - "@types/archiver": "^5.3.1", - "@types/dockerode": "^3.3.8", "archiver": "^5.3.1", + "async-lock": "^1.4.0", "byline": "^5.0.0", "debug": "^4.3.4", - "docker-compose": "^0.23.17", - "dockerode": "^3.3.1", + "docker-compose": "^0.24.2", + "dockerode": "^3.3.5", "get-port": "^5.1.1", + "node-fetch": "^2.6.12", + "proper-lockfile": "^4.1.2", "properties-reader": "^2.2.0", "ssh-remote-port-forward": "^1.0.4", - "tar-fs": "^2.1.1" + "tar-fs": "^3.0.4", + "tmp": "^0.2.1" } }, "node_modules/text-table": { @@ -4765,6 +4887,18 @@ "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==", "dev": true }, + "node_modules/tmp": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.2.1.tgz", + "integrity": "sha512-76SUhtfqR2Ijn+xllcI5P1oyannHNHByD80W1q447gU3mp9G9PSpGdWmjUOHRDPiHYacIk66W7ubDTuPF3BEtQ==", + "dev": true, + "dependencies": { + "rimraf": "^3.0.0" + }, + "engines": { + "node": ">=8.17.0" + } + }, "node_modules/tmpl": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/tmpl/-/tmpl-1.0.5.tgz", @@ -4792,6 +4926,12 @@ "node": ">=8.0" } }, + "node_modules/tr46": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", + "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==", + "dev": true + }, "node_modules/tweetnacl": { "version": "0.14.5", "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz", @@ -4820,9 +4960,9 @@ } }, "node_modules/type-fest": { - "version": "0.21.3", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz", - "integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==", + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", + "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", "dev": true, "engines": { "node": ">=10" @@ -4832,9 +4972,9 @@ } }, "node_modules/update-browserslist-db": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.5.tgz", - "integrity": "sha512-dteFFpCyvuDdr9S/ff1ISkKt/9YZxKjI9WlRR99c180GaztJtRa/fn18FdxGVKVsnPY7/a/FDN68mcvUmP4U7Q==", + "version": "1.0.13", + "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.13.tgz", + "integrity": "sha512-xebP81SNcPuNpPP3uzeW1NYXxI3rxyJzF3pD6sH4jE7o/IX+WtSpwnVU+qIsDPyk0d3hmFQ7mjqc6AtV604hbg==", "dev": true, "funding": [ { @@ -4844,6 +4984,10 @@ { "type": "tidelift", "url": "https://tidelift.com/funding/github/npm/browserslist" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" } ], "dependencies": { @@ -4851,7 +4995,7 @@ "picocolors": "^1.0.0" }, "bin": { - "browserslist-lint": "cli.js" + "update-browserslist-db": "cli.js" }, "peerDependencies": { "browserslist": ">= 4.21.0" @@ -4872,21 +5016,15 @@ "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==", "dev": true }, - "node_modules/v8-compile-cache": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.3.0.tgz", - "integrity": "sha512-l8lCEmLcLYZh4nbunNZvQCJc5pv7+RCwa8q/LdUx8u7lsWvPDKmpodJAJNwkAhJC//dFY48KuIEmjtd4RViDrA==", - "dev": true - }, "node_modules/v8-to-istanbul": { - "version": "9.0.1", - "resolved": "https://registry.npmjs.org/v8-to-istanbul/-/v8-to-istanbul-9.0.1.tgz", - "integrity": "sha512-74Y4LqY74kLE6IFyIjPtkSTWzUZmj8tdHT9Ii/26dvQ6K9Dl2NbEfj0XgU2sHCtKgt5VupqhlO/5aWuqS+IY1w==", + "version": "9.1.3", + "resolved": "https://registry.npmjs.org/v8-to-istanbul/-/v8-to-istanbul-9.1.3.tgz", + "integrity": "sha512-9lDD+EVI2fjFsMWXc6dy5JJzBsVTcQ2fVkfBvncZ6xJWG9wtBhOldG+mHkSL0+V1K/xgZz0JDO5UT5hFwHUghg==", "dev": true, "dependencies": { "@jridgewell/trace-mapping": "^0.3.12", "@types/istanbul-lib-coverage": "^2.0.1", - "convert-source-map": "^1.6.0" + "convert-source-map": "^2.0.0" }, "engines": { "node": ">=10.12.0" @@ -4901,6 +5039,22 @@ "makeerror": "1.0.12" } }, + "node_modules/webidl-conversions": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", + "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==", + "dev": true + }, + "node_modules/whatwg-url": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", + "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==", + "dev": true, + "dependencies": { + "tr46": "~0.0.3", + "webidl-conversions": "^3.0.0" + } + }, "node_modules/which": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", @@ -4916,15 +5070,6 @@ "node": ">= 8" } }, - "node_modules/word-wrap": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz", - "integrity": "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/wrap-ansi": { "version": "7.0.0", "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", @@ -4949,16 +5094,16 @@ "dev": true }, "node_modules/write-file-atomic": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-4.0.1.tgz", - "integrity": "sha512-nSKUxgAbyioruk6hU87QzVbY279oYT6uiwgDoujth2ju4mJ+TZau7SQBhtbTmUyuNYTuXnSyRn66FV0+eCgcrQ==", + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-4.0.2.tgz", + "integrity": "sha512-7KxauUdBmSdWnmpaGFg+ppNjKF8uNLry8LyzjauQDOVONfFLNKrKvQOxZ/VuTIcS/gge/YNahf5RIIQWTSarlg==", "dev": true, "dependencies": { "imurmurhash": "^0.1.4", "signal-exit": "^3.0.7" }, "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16" + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" } }, "node_modules/y18n": { @@ -4971,42 +5116,42 @@ } }, "node_modules/yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", + "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", "dev": true }, "node_modules/yaml": { - "version": "1.10.2", - "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.2.tgz", - "integrity": "sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==", + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.3.2.tgz", + "integrity": "sha512-N/lyzTPaJasoDmfV7YTrYCI0G/3ivm/9wdG0aHuheKowWQwGTsK0Eoiw6utmzAnI6pkJa0DUVygvp3spqqEKXg==", "dev": true, "engines": { - "node": ">= 6" + "node": ">= 14" } }, "node_modules/yargs": { - "version": "17.5.1", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.5.1.tgz", - "integrity": "sha512-t6YAJcxDkNX7NFYiVtKvWUz8l+PaKTLiL63mJYWR2GnHq2gjEWISzsLp9wg3aY36dY1j+gfIEL3pIF+XlJJfbA==", + "version": "17.7.2", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz", + "integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==", "dev": true, "dependencies": { - "cliui": "^7.0.2", + "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.0.0" + "yargs-parser": "^21.1.1" }, "engines": { "node": ">=12" } }, "node_modules/yargs-parser": { - "version": "21.0.1", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.0.1.tgz", - "integrity": "sha512-9BK1jFpLzJROCI5TzwZL/TU4gqjK5xiHV/RfWLOahrjAko/e4DJkRDZQXfvqAsiZzzYhgAzbgz6lg48jcm4GLg==", + "version": "21.1.1", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", + "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==", "dev": true, "engines": { "node": ">=12" @@ -5040,195 +5185,252 @@ } }, "dependencies": { + "@aashutoshrathi/word-wrap": { + "version": "1.2.6", + "resolved": "https://registry.npmjs.org/@aashutoshrathi/word-wrap/-/word-wrap-1.2.6.tgz", + "integrity": "sha512-1Yjs2SvM8TflER/OD3cOjhWWOZb58A2t7wpE2S9XfBYTiIl+XFhQG2bjy4Pu1I+EAlCNUzRDYDdFwFYUKvXcIA==", + "dev": true + }, "@ampproject/remapping": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.2.0.tgz", - "integrity": "sha512-qRmjj8nj9qmLTQXXmaR1cck3UXSRMPrbsLJAasZpF+t3riI71BXed5ebIOYwQntykeZuhjsdweEc9BxH5Jc26w==", + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.2.1.tgz", + "integrity": "sha512-lFMjJTrFL3j7L9yBxwYfCq2k6qqwHyzuUl/XBnif78PWTJYyL/dfowQHWE3sp6U6ZzqWiiIZnpTMO96zhkjwtg==", "dev": true, "requires": { - "@jridgewell/gen-mapping": "^0.1.0", + "@jridgewell/gen-mapping": "^0.3.0", "@jridgewell/trace-mapping": "^0.3.9" } }, "@babel/code-frame": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.18.6.tgz", - "integrity": "sha512-TDCmlK5eOvH+eH7cdAFlNXeVJqWIQ7gW9tY1GJIpUtFb6CmjVyq2VM3u71bOyR8CRihcCgMUYoDNyLXao3+70Q==", + "version": "7.22.13", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.22.13.tgz", + "integrity": "sha512-XktuhWlJ5g+3TJXc5upd9Ks1HutSArik6jf2eAjYFyIOf4ej3RN+184cZbzDvbPnuTJIUhPKKJE3cIsYTiAT3w==", "dev": true, "requires": { - "@babel/highlight": "^7.18.6" + "@babel/highlight": "^7.22.13", + "chalk": "^2.4.2" + }, + "dependencies": { + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "requires": { + "color-convert": "^1.9.0" + } + }, + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + } + }, + "color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dev": true, + "requires": { + "color-name": "1.1.3" + } + }, + "color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", + "dev": true + }, + "escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", + "dev": true + }, + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", + "dev": true + }, + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + } } }, "@babel/compat-data": { - "version": "7.18.8", - "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.18.8.tgz", - "integrity": "sha512-HSmX4WZPPK3FUxYp7g2T6EyO8j96HlZJlxmKPSh6KAcqwyDrfx7hKjXpAW/0FhFfTJsR0Yt4lAjLI2coMptIHQ==", + "version": "7.22.20", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.22.20.tgz", + "integrity": "sha512-BQYjKbpXjoXwFW5jGqiizJQQT/aC7pFm9Ok1OWssonuguICi264lbgMzRp2ZMmRSlfkX6DsWDDcsrctK8Rwfiw==", "dev": true }, "@babel/core": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.18.9.tgz", - "integrity": "sha512-1LIb1eL8APMy91/IMW+31ckrfBM4yCoLaVzoDhZUKSM4cu1L1nIidyxkCgzPAgrC5WEz36IPEr/eSeSF9pIn+g==", - "dev": true, - "requires": { - "@ampproject/remapping": "^2.1.0", - "@babel/code-frame": "^7.18.6", - "@babel/generator": "^7.18.9", - "@babel/helper-compilation-targets": "^7.18.9", - "@babel/helper-module-transforms": "^7.18.9", - "@babel/helpers": "^7.18.9", - "@babel/parser": "^7.18.9", - "@babel/template": "^7.18.6", - "@babel/traverse": "^7.18.9", - "@babel/types": "^7.18.9", - "convert-source-map": "^1.7.0", + "version": "7.23.0", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.23.0.tgz", + "integrity": "sha512-97z/ju/Jy1rZmDxybphrBuI+jtJjFVoz7Mr9yUQVVVi+DNZE333uFQeMOqcCIy1x3WYBIbWftUSLmbNXNT7qFQ==", + "dev": true, + "requires": { + "@ampproject/remapping": "^2.2.0", + "@babel/code-frame": "^7.22.13", + "@babel/generator": "^7.23.0", + "@babel/helper-compilation-targets": "^7.22.15", + "@babel/helper-module-transforms": "^7.23.0", + "@babel/helpers": "^7.23.0", + "@babel/parser": "^7.23.0", + "@babel/template": "^7.22.15", + "@babel/traverse": "^7.23.0", + "@babel/types": "^7.23.0", + "convert-source-map": "^2.0.0", "debug": "^4.1.0", "gensync": "^1.0.0-beta.2", - "json5": "^2.2.1", - "semver": "^6.3.0" + "json5": "^2.2.3", + "semver": "^6.3.1" } }, "@babel/generator": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.18.9.tgz", - "integrity": "sha512-wt5Naw6lJrL1/SGkipMiFxJjtyczUWTP38deiP1PO60HsBjDeKk08CGC3S8iVuvf0FmTdgKwU1KIXzSKL1G0Ug==", + "version": "7.23.0", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.23.0.tgz", + "integrity": "sha512-lN85QRR+5IbYrMWM6Y4pE/noaQtg4pNiqeNGX60eqOfo6gtEj6uw/JagelB8vVztSd7R6M5n1+PQkDbHbBRU4g==", "dev": true, "requires": { - "@babel/types": "^7.18.9", + "@babel/types": "^7.23.0", "@jridgewell/gen-mapping": "^0.3.2", + "@jridgewell/trace-mapping": "^0.3.17", "jsesc": "^2.5.1" - }, - "dependencies": { - "@jridgewell/gen-mapping": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.2.tgz", - "integrity": "sha512-mh65xKQAzI6iBcFzwv28KVWSmCkdRBWoOh+bYQGW3+6OZvbbN3TqMGo5hqYxQniRcH9F2VZIoJCm4pa3BPDK/A==", - "dev": true, - "requires": { - "@jridgewell/set-array": "^1.0.1", - "@jridgewell/sourcemap-codec": "^1.4.10", - "@jridgewell/trace-mapping": "^0.3.9" - } - } } }, "@babel/helper-compilation-targets": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.18.9.tgz", - "integrity": "sha512-tzLCyVmqUiFlcFoAPLA/gL9TeYrF61VLNtb+hvkuVaB5SUjW7jcfrglBIX1vUIoT7CLP3bBlIMeyEsIl2eFQNg==", + "version": "7.22.15", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.22.15.tgz", + "integrity": "sha512-y6EEzULok0Qvz8yyLkCvVX+02ic+By2UdOhylwUOvOn9dvYc9mKICJuuU1n1XBI02YWsNsnrY1kc6DVbjcXbtw==", "dev": true, "requires": { - "@babel/compat-data": "^7.18.8", - "@babel/helper-validator-option": "^7.18.6", - "browserslist": "^4.20.2", - "semver": "^6.3.0" + "@babel/compat-data": "^7.22.9", + "@babel/helper-validator-option": "^7.22.15", + "browserslist": "^4.21.9", + "lru-cache": "^5.1.1", + "semver": "^6.3.1" } }, "@babel/helper-environment-visitor": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.18.9.tgz", - "integrity": "sha512-3r/aACDJ3fhQ/EVgFy0hpj8oHyHpQc+LPtJoY9SzTThAsStm4Ptegq92vqKoE3vD706ZVFWITnMnxucw+S9Ipg==", + "version": "7.22.20", + "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.22.20.tgz", + "integrity": "sha512-zfedSIzFhat/gFhWfHtgWvlec0nqB9YEIVrpuwjruLlXfUSnA8cJB0miHKwqDnQ7d32aKo2xt88/xZptwxbfhA==", "dev": true }, "@babel/helper-function-name": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.18.9.tgz", - "integrity": "sha512-fJgWlZt7nxGksJS9a0XdSaI4XvpExnNIgRP+rVefWh5U7BL8pPuir6SJUmFKRfjWQ51OtWSzwOxhaH/EBWWc0A==", + "version": "7.23.0", + "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.23.0.tgz", + "integrity": "sha512-OErEqsrxjZTJciZ4Oo+eoZqeW9UIiOcuYKRJA4ZAgV9myA+pOXhhmpfNCKjEH/auVfEYVFJ6y1Tc4r0eIApqiw==", "dev": true, "requires": { - "@babel/template": "^7.18.6", - "@babel/types": "^7.18.9" + "@babel/template": "^7.22.15", + "@babel/types": "^7.23.0" } }, "@babel/helper-hoist-variables": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.18.6.tgz", - "integrity": "sha512-UlJQPkFqFULIcyW5sbzgbkxn2FKRgwWiRexcuaR8RNJRy8+LLveqPjwZV/bwrLZCN0eUHD/x8D0heK1ozuoo6Q==", + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.22.5.tgz", + "integrity": "sha512-wGjk9QZVzvknA6yKIUURb8zY3grXCcOZt+/7Wcy8O2uctxhplmUPkOdlgoNhmdVee2c92JXbf1xpMtVNbfoxRw==", "dev": true, "requires": { - "@babel/types": "^7.18.6" + "@babel/types": "^7.22.5" } }, "@babel/helper-module-imports": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.18.6.tgz", - "integrity": "sha512-0NFvs3VkuSYbFi1x2Vd6tKrywq+z/cLeYC/RJNFrIX/30Bf5aiGYbtvGXolEktzJH8o5E5KJ3tT+nkxuuZFVlA==", + "version": "7.22.15", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.22.15.tgz", + "integrity": "sha512-0pYVBnDKZO2fnSPCrgM/6WMc7eS20Fbok+0r88fp+YtWVLZrp4CkafFGIp+W0VKw4a22sgebPT99y+FDNMdP4w==", "dev": true, "requires": { - "@babel/types": "^7.18.6" + "@babel/types": "^7.22.15" } }, "@babel/helper-module-transforms": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.18.9.tgz", - "integrity": "sha512-KYNqY0ICwfv19b31XzvmI/mfcylOzbLtowkw+mfvGPAQ3kfCnMLYbED3YecL5tPd8nAYFQFAd6JHp2LxZk/J1g==", + "version": "7.23.0", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.23.0.tgz", + "integrity": "sha512-WhDWw1tdrlT0gMgUJSlX0IQvoO1eN279zrAUbVB+KpV2c3Tylz8+GnKOLllCS6Z/iZQEyVYxhZVUdPTqs2YYPw==", "dev": true, "requires": { - "@babel/helper-environment-visitor": "^7.18.9", - "@babel/helper-module-imports": "^7.18.6", - "@babel/helper-simple-access": "^7.18.6", - "@babel/helper-split-export-declaration": "^7.18.6", - "@babel/helper-validator-identifier": "^7.18.6", - "@babel/template": "^7.18.6", - "@babel/traverse": "^7.18.9", - "@babel/types": "^7.18.9" + "@babel/helper-environment-visitor": "^7.22.20", + "@babel/helper-module-imports": "^7.22.15", + "@babel/helper-simple-access": "^7.22.5", + "@babel/helper-split-export-declaration": "^7.22.6", + "@babel/helper-validator-identifier": "^7.22.20" } }, "@babel/helper-plugin-utils": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.18.9.tgz", - "integrity": "sha512-aBXPT3bmtLryXaoJLyYPXPlSD4p1ld9aYeR+sJNOZjJJGiOpb+fKfh3NkcCu7J54nUJwCERPBExCCpyCOHnu/w==", + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.22.5.tgz", + "integrity": "sha512-uLls06UVKgFG9QD4OeFYLEGteMIAa5kpTPcFL28yuCIIzsf6ZyKZMllKVOCZFhiZ5ptnwX4mtKdWCBE/uT4amg==", "dev": true }, "@babel/helper-simple-access": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.18.6.tgz", - "integrity": "sha512-iNpIgTgyAvDQpDj76POqg+YEt8fPxx3yaNBg3S30dxNKm2SWfYhD0TGrK/Eu9wHpUW63VQU894TsTg+GLbUa1g==", + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.22.5.tgz", + "integrity": "sha512-n0H99E/K+Bika3++WNL17POvo4rKWZ7lZEp1Q+fStVbUi8nxPQEBOlTmCOxW/0JsS56SKKQ+ojAe2pHKJHN35w==", "dev": true, "requires": { - "@babel/types": "^7.18.6" + "@babel/types": "^7.22.5" } }, "@babel/helper-split-export-declaration": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.18.6.tgz", - "integrity": "sha512-bde1etTx6ZyTmobl9LLMMQsaizFVZrquTEHOqKeQESMKo4PlObf+8+JA25ZsIpZhT/WEd39+vOdLXAFG/nELpA==", + "version": "7.22.6", + "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.22.6.tgz", + "integrity": "sha512-AsUnxuLhRYsisFiaJwvp1QF+I3KjD5FOxut14q/GzovUe6orHLesW2C7d754kRm53h5gqrz6sFl6sxc4BVtE/g==", "dev": true, "requires": { - "@babel/types": "^7.18.6" + "@babel/types": "^7.22.5" } }, + "@babel/helper-string-parser": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.22.5.tgz", + "integrity": "sha512-mM4COjgZox8U+JcXQwPijIZLElkgEpO5rsERVDJTc2qfCDfERyob6k5WegS14SX18IIjv+XD+GrqNumY5JRCDw==", + "dev": true + }, "@babel/helper-validator-identifier": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.18.6.tgz", - "integrity": "sha512-MmetCkz9ej86nJQV+sFCxoGGrUbU3q02kgLciwkrt9QqEB7cP39oKEY0PakknEO0Gu20SskMRi+AYZ3b1TpN9g==", + "version": "7.22.20", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.22.20.tgz", + "integrity": "sha512-Y4OZ+ytlatR8AI+8KZfKuL5urKp7qey08ha31L8b3BwewJAoJamTzyvxPR/5D+KkdJCGPq/+8TukHBlY10FX9A==", "dev": true }, "@babel/helper-validator-option": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.18.6.tgz", - "integrity": "sha512-XO7gESt5ouv/LRJdrVjkShckw6STTaB7l9BrpBaAHDeF5YZT+01PCwmR0SJHnkW6i8OwW/EVWRShfi4j2x+KQw==", + "version": "7.22.15", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.22.15.tgz", + "integrity": "sha512-bMn7RmyFjY/mdECUbgn9eoSY4vqvacUnS9i9vGAGttgFWesO6B4CYWA7XlpbWgBt71iv/hfbPlynohStqnu5hA==", "dev": true }, "@babel/helpers": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.18.9.tgz", - "integrity": "sha512-Jf5a+rbrLoR4eNdUmnFu8cN5eNJT6qdTdOg5IHIzq87WwyRw9PwguLFOWYgktN/60IP4fgDUawJvs7PjQIzELQ==", + "version": "7.23.1", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.23.1.tgz", + "integrity": "sha512-chNpneuK18yW5Oxsr+t553UZzzAs3aZnFm4bxhebsNTeshrC95yA7l5yl7GBAG+JG1rF0F7zzD2EixK9mWSDoA==", "dev": true, "requires": { - "@babel/template": "^7.18.6", - "@babel/traverse": "^7.18.9", - "@babel/types": "^7.18.9" + "@babel/template": "^7.22.15", + "@babel/traverse": "^7.23.0", + "@babel/types": "^7.23.0" } }, "@babel/highlight": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.18.6.tgz", - "integrity": "sha512-u7stbOuYjaPezCuLj29hNW1v64M2Md2qupEKP1fHc7WdOA3DgLh37suiSrZYY7haUB7iBeQZ9P1uiRF359do3g==", + "version": "7.22.20", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.22.20.tgz", + "integrity": "sha512-dkdMCN3py0+ksCgYmGG8jKeGA/8Tk+gJwSYYlFGxG5lmhfKNoAy004YpLxpS1W2J8m/EK2Ew+yOs9pVRwO89mg==", "dev": true, "requires": { - "@babel/helper-validator-identifier": "^7.18.6", - "chalk": "^2.0.0", + "@babel/helper-validator-identifier": "^7.22.20", + "chalk": "^2.4.2", "js-tokens": "^4.0.0" }, "dependencies": { @@ -5291,9 +5493,9 @@ } }, "@babel/parser": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.18.9.tgz", - "integrity": "sha512-9uJveS9eY9DJ0t64YbIBZICtJy8a5QrDEVdiLCG97fVLpDTpGX7t8mMSb6OWw6Lrnjqj4O8zwjELX3dhoMgiBg==", + "version": "7.23.0", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.23.0.tgz", + "integrity": "sha512-vvPKKdMemU85V9WE/l5wZEmImpCtLqbnTvqDS2U1fJ96KrxoW7KrXhNsNCblQlg8Ck4b85yxdTyelsMUgFUXiw==", "dev": true }, "@babel/plugin-syntax-async-generators": { @@ -5341,6 +5543,15 @@ "@babel/helper-plugin-utils": "^7.8.0" } }, + "@babel/plugin-syntax-jsx": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.22.5.tgz", + "integrity": "sha512-gvyP4hZrgrs/wWMaocvxZ44Hw0b3W8Pe+cMxc8V1ULQ07oh8VNbIRaoD1LRZVTvD+0nieDKjfgKg89sD7rrKrg==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.22.5" + } + }, "@babel/plugin-syntax-logical-assignment-operators": { "version": "7.10.4", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz", @@ -5405,50 +5616,59 @@ } }, "@babel/plugin-syntax-typescript": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.18.6.tgz", - "integrity": "sha512-mAWAuq4rvOepWCBid55JuRNvpTNf2UGVgoz4JV0fXEKolsVZDzsa4NqCef758WZJj/GDu0gVGItjKFiClTAmZA==", + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.22.5.tgz", + "integrity": "sha512-1mS2o03i7t1c6VzH6fdQ3OA8tcEIxwG18zIPRp+UY1Ihv6W+XZzBCVxExF9upussPXJ0xE9XRHwMoNs1ep/nRQ==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.18.6" + "@babel/helper-plugin-utils": "^7.22.5" } }, "@babel/template": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.18.6.tgz", - "integrity": "sha512-JoDWzPe+wgBsTTgdnIma3iHNFC7YVJoPssVBDjiHfNlyt4YcunDtcDOUmfVDfCK5MfdsaIoX9PkijPhjH3nYUw==", + "version": "7.22.15", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.22.15.tgz", + "integrity": "sha512-QPErUVm4uyJa60rkI73qneDacvdvzxshT3kksGqlGWYdOTIUOwJ7RDUL8sGqslY1uXWSL6xMFKEXDS3ox2uF0w==", "dev": true, "requires": { - "@babel/code-frame": "^7.18.6", - "@babel/parser": "^7.18.6", - "@babel/types": "^7.18.6" + "@babel/code-frame": "^7.22.13", + "@babel/parser": "^7.22.15", + "@babel/types": "^7.22.15" } }, "@babel/traverse": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.18.9.tgz", - "integrity": "sha512-LcPAnujXGwBgv3/WHv01pHtb2tihcyW1XuL9wd7jqh1Z8AQkTd+QVjMrMijrln0T7ED3UXLIy36P9Ao7W75rYg==", - "dev": true, - "requires": { - "@babel/code-frame": "^7.18.6", - "@babel/generator": "^7.18.9", - "@babel/helper-environment-visitor": "^7.18.9", - "@babel/helper-function-name": "^7.18.9", - "@babel/helper-hoist-variables": "^7.18.6", - "@babel/helper-split-export-declaration": "^7.18.6", - "@babel/parser": "^7.18.9", - "@babel/types": "^7.18.9", + "version": "7.23.0", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.23.0.tgz", + "integrity": "sha512-t/QaEvyIoIkwzpiZ7aoSKK8kObQYeF7T2v+dazAYCb8SXtp58zEVkWW7zAnju8FNKNdr4ScAOEDmMItbyOmEYw==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.22.13", + "@babel/generator": "^7.23.0", + "@babel/helper-environment-visitor": "^7.22.20", + "@babel/helper-function-name": "^7.23.0", + "@babel/helper-hoist-variables": "^7.22.5", + "@babel/helper-split-export-declaration": "^7.22.6", + "@babel/parser": "^7.23.0", + "@babel/types": "^7.23.0", "debug": "^4.1.0", "globals": "^11.1.0" + }, + "dependencies": { + "globals": { + "version": "11.12.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", + "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", + "dev": true + } } }, "@babel/types": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.18.9.tgz", - "integrity": "sha512-WwMLAg2MvJmt/rKEVQBBhIVffMmnilX4oe0sRe7iPOHIGsqpruFHHdrfj4O1CMMtgMtCU4oPafZjDPCRgO57Wg==", + "version": "7.23.0", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.23.0.tgz", + "integrity": "sha512-0oIyUfKoI3mSqMvsxBdclDwxXKXAUA8v/apZbc+iSyARYou1o8ZGDxbUYyLFoW2arqS2jDGqJuZvv1d/io1axg==", "dev": true, "requires": { - "@babel/helper-validator-identifier": "^7.18.6", + "@babel/helper-string-parser": "^7.22.5", + "@babel/helper-validator-identifier": "^7.22.20", "to-fast-properties": "^2.0.0" } }, @@ -5464,70 +5684,59 @@ "integrity": "sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==", "dev": true }, + "@eslint-community/eslint-utils": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.4.0.tgz", + "integrity": "sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==", + "dev": true, + "requires": { + "eslint-visitor-keys": "^3.3.0" + } + }, + "@eslint-community/regexpp": { + "version": "4.9.1", + "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.9.1.tgz", + "integrity": "sha512-Y27x+MBLjXa+0JWDhykM3+JE+il3kHKAEqabfEWq3SDhZjLYb6/BHL/JKFnH3fe207JaXkyDo685Oc2Glt6ifA==", + "dev": true + }, "@eslint/eslintrc": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-1.3.0.tgz", - "integrity": "sha512-UWW0TMTmk2d7hLcWD1/e2g5HDM/HQ3csaLSqXCfqwh4uNDuNqlaKWXmEsL4Cs41Z0KnILNvwbHAah3C2yt06kw==", + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.1.2.tgz", + "integrity": "sha512-+wvgpDsrB1YqAMdEUCcnTlpfVBH7Vqn6A/NT3D8WVXFIaKMlErPIZT3oCIAVCOtarRpMtelZLqJeU3t7WY6X6g==", "dev": true, "requires": { "ajv": "^6.12.4", "debug": "^4.3.2", - "espree": "^9.3.2", - "globals": "^13.15.0", + "espree": "^9.6.0", + "globals": "^13.19.0", "ignore": "^5.2.0", "import-fresh": "^3.2.1", "js-yaml": "^4.1.0", "minimatch": "^3.1.2", "strip-json-comments": "^3.1.1" - }, - "dependencies": { - "argparse": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", - "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", - "dev": true - }, - "globals": { - "version": "13.17.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-13.17.0.tgz", - "integrity": "sha512-1C+6nQRb1GwGMKm2dH/E7enFAMxGTmGI7/dEdhy/DNelv85w9B72t3uc5frtMNXIbzrarJJ/lTCjcaZwbLJmyw==", - "dev": true, - "requires": { - "type-fest": "^0.20.2" - } - }, - "js-yaml": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", - "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", - "dev": true, - "requires": { - "argparse": "^2.0.1" - } - }, - "type-fest": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", - "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", - "dev": true - } } }, + "@eslint/js": { + "version": "8.50.0", + "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.50.0.tgz", + "integrity": "sha512-NCC3zz2+nvYd+Ckfh87rA47zfu2QsQpvc6k1yzTk+b9KzRj0wkGa8LSoGOXN6Zv4lRf/EIoZ80biDh9HOI+RNQ==", + "dev": true + }, "@humanwhocodes/config-array": { - "version": "0.10.4", - "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.10.4.tgz", - "integrity": "sha512-mXAIHxZT3Vcpg83opl1wGlVZ9xydbfZO3r5YfRSH6Gpp2J/PfdBP0wbDa2sO6/qRbcalpoevVyW6A/fI6LfeMw==", + "version": "0.11.11", + "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.11.tgz", + "integrity": "sha512-N2brEuAadi0CcdeMXUkhbZB84eskAc8MEX1By6qEchoVywSgXPIjou4rYsl0V3Hj0ZnuGycGCjdNgockbzeWNA==", "dev": true, "requires": { "@humanwhocodes/object-schema": "^1.2.1", "debug": "^4.1.1", - "minimatch": "^3.0.4" + "minimatch": "^3.0.5" } }, - "@humanwhocodes/gitignore-to-minimatch": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/@humanwhocodes/gitignore-to-minimatch/-/gitignore-to-minimatch-1.0.2.tgz", - "integrity": "sha512-rSqmMJDdLFUsyxR6FMtD00nfQKKLFb1kv+qBbOVKqErvloEIJLo5bDTJTQNTYgeyp78JsA7u/NPi5jT1GR/MuA==", + "@humanwhocodes/module-importer": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz", + "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==", "dev": true }, "@humanwhocodes/object-schema": { @@ -5547,6 +5756,33 @@ "get-package-type": "^0.1.0", "js-yaml": "^3.13.1", "resolve-from": "^5.0.0" + }, + "dependencies": { + "argparse": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", + "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", + "dev": true, + "requires": { + "sprintf-js": "~1.0.2" + } + }, + "js-yaml": { + "version": "3.14.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", + "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", + "dev": true, + "requires": { + "argparse": "^1.0.7", + "esprima": "^4.0.0" + } + }, + "resolve-from": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", + "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", + "dev": true + } } }, "@istanbuljs/schema": { @@ -5556,124 +5792,124 @@ "dev": true }, "@jest/console": { - "version": "28.1.3", - "resolved": "https://registry.npmjs.org/@jest/console/-/console-28.1.3.tgz", - "integrity": "sha512-QPAkP5EwKdK/bxIr6C1I4Vs0rm2nHiANzj/Z5X2JQkrZo6IqvC4ldZ9K95tF0HdidhA8Bo6egxSzUFPYKcEXLw==", + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/console/-/console-29.7.0.tgz", + "integrity": "sha512-5Ni4CU7XHQi32IJ398EEP4RrB8eV09sXP2ROqD4bksHrnTree52PsxvX8tpL8LvTZ3pFzXyPbNQReSN41CAhOg==", "dev": true, "requires": { - "@jest/types": "^28.1.3", + "@jest/types": "^29.6.3", "@types/node": "*", "chalk": "^4.0.0", - "jest-message-util": "^28.1.3", - "jest-util": "^28.1.3", + "jest-message-util": "^29.7.0", + "jest-util": "^29.7.0", "slash": "^3.0.0" } }, "@jest/core": { - "version": "28.1.3", - "resolved": "https://registry.npmjs.org/@jest/core/-/core-28.1.3.tgz", - "integrity": "sha512-CIKBrlaKOzA7YG19BEqCw3SLIsEwjZkeJzf5bdooVnW4bH5cktqe3JX+G2YV1aK5vP8N9na1IGWFzYaTp6k6NA==", + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/core/-/core-29.7.0.tgz", + "integrity": "sha512-n7aeXWKMnGtDA48y8TLWJPJmLmmZ642Ceo78cYWEpiD7FzDgmNDV/GCVRorPABdXLJZ/9wzzgZAlHjXjxDHGsg==", "dev": true, "requires": { - "@jest/console": "^28.1.3", - "@jest/reporters": "^28.1.3", - "@jest/test-result": "^28.1.3", - "@jest/transform": "^28.1.3", - "@jest/types": "^28.1.3", + "@jest/console": "^29.7.0", + "@jest/reporters": "^29.7.0", + "@jest/test-result": "^29.7.0", + "@jest/transform": "^29.7.0", + "@jest/types": "^29.6.3", "@types/node": "*", "ansi-escapes": "^4.2.1", "chalk": "^4.0.0", "ci-info": "^3.2.0", "exit": "^0.1.2", "graceful-fs": "^4.2.9", - "jest-changed-files": "^28.1.3", - "jest-config": "^28.1.3", - "jest-haste-map": "^28.1.3", - "jest-message-util": "^28.1.3", - "jest-regex-util": "^28.0.2", - "jest-resolve": "^28.1.3", - "jest-resolve-dependencies": "^28.1.3", - "jest-runner": "^28.1.3", - "jest-runtime": "^28.1.3", - "jest-snapshot": "^28.1.3", - "jest-util": "^28.1.3", - "jest-validate": "^28.1.3", - "jest-watcher": "^28.1.3", + "jest-changed-files": "^29.7.0", + "jest-config": "^29.7.0", + "jest-haste-map": "^29.7.0", + "jest-message-util": "^29.7.0", + "jest-regex-util": "^29.6.3", + "jest-resolve": "^29.7.0", + "jest-resolve-dependencies": "^29.7.0", + "jest-runner": "^29.7.0", + "jest-runtime": "^29.7.0", + "jest-snapshot": "^29.7.0", + "jest-util": "^29.7.0", + "jest-validate": "^29.7.0", + "jest-watcher": "^29.7.0", "micromatch": "^4.0.4", - "pretty-format": "^28.1.3", - "rimraf": "^3.0.0", + "pretty-format": "^29.7.0", "slash": "^3.0.0", "strip-ansi": "^6.0.0" } }, "@jest/environment": { - "version": "28.1.3", - "resolved": "https://registry.npmjs.org/@jest/environment/-/environment-28.1.3.tgz", - "integrity": "sha512-1bf40cMFTEkKyEf585R9Iz1WayDjHoHqvts0XFYEqyKM3cFWDpeMoqKKTAF9LSYQModPUlh8FKptoM2YcMWAXA==", + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/environment/-/environment-29.7.0.tgz", + "integrity": "sha512-aQIfHDq33ExsN4jP1NWGXhxgQ/wixs60gDiKO+XVMd8Mn0NWPWgc34ZQDTb2jKaUWQ7MuwoitXAsN2XVXNMpAw==", "dev": true, "requires": { - "@jest/fake-timers": "^28.1.3", - "@jest/types": "^28.1.3", + "@jest/fake-timers": "^29.7.0", + "@jest/types": "^29.6.3", "@types/node": "*", - "jest-mock": "^28.1.3" + "jest-mock": "^29.7.0" } }, "@jest/expect": { - "version": "28.1.3", - "resolved": "https://registry.npmjs.org/@jest/expect/-/expect-28.1.3.tgz", - "integrity": "sha512-lzc8CpUbSoE4dqT0U+g1qODQjBRHPpCPXissXD4mS9+sWQdmmpeJ9zSH1rS1HEkrsMN0fb7nKrJ9giAR1d3wBw==", + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/expect/-/expect-29.7.0.tgz", + "integrity": "sha512-8uMeAMycttpva3P1lBHB8VciS9V0XAr3GymPpipdyQXbBcuhkLQOSe8E/p92RyAdToS6ZD1tFkX+CkhoECE0dQ==", "dev": true, "requires": { - "expect": "^28.1.3", - "jest-snapshot": "^28.1.3" + "expect": "^29.7.0", + "jest-snapshot": "^29.7.0" } }, "@jest/expect-utils": { - "version": "28.1.3", - "resolved": "https://registry.npmjs.org/@jest/expect-utils/-/expect-utils-28.1.3.tgz", - "integrity": "sha512-wvbi9LUrHJLn3NlDW6wF2hvIMtd4JUl2QNVrjq+IBSHirgfrR3o9RnVtxzdEGO2n9JyIWwHnLfby5KzqBGg2YA==", + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/expect-utils/-/expect-utils-29.7.0.tgz", + "integrity": "sha512-GlsNBWiFQFCVi9QVSx7f5AgMeLxe9YCCs5PuP2O2LdjDAA8Jh9eX7lA1Jq/xdXw3Wb3hyvlFNfZIfcRetSzYcA==", "dev": true, "requires": { - "jest-get-type": "^28.0.2" + "jest-get-type": "^29.6.3" } }, "@jest/fake-timers": { - "version": "28.1.3", - "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-28.1.3.tgz", - "integrity": "sha512-D/wOkL2POHv52h+ok5Oj/1gOG9HSywdoPtFsRCUmlCILXNn5eIWmcnd3DIiWlJnpGvQtmajqBP95Ei0EimxfLw==", + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-29.7.0.tgz", + "integrity": "sha512-q4DH1Ha4TTFPdxLsqDXK1d3+ioSL7yL5oCMJZgDYm6i+6CygW5E5xVr/D1HdsGxjt1ZWSfUAs9OxSB/BNelWrQ==", "dev": true, "requires": { - "@jest/types": "^28.1.3", - "@sinonjs/fake-timers": "^9.1.2", + "@jest/types": "^29.6.3", + "@sinonjs/fake-timers": "^10.0.2", "@types/node": "*", - "jest-message-util": "^28.1.3", - "jest-mock": "^28.1.3", - "jest-util": "^28.1.3" + "jest-message-util": "^29.7.0", + "jest-mock": "^29.7.0", + "jest-util": "^29.7.0" } }, "@jest/globals": { - "version": "28.1.3", - "resolved": "https://registry.npmjs.org/@jest/globals/-/globals-28.1.3.tgz", - "integrity": "sha512-XFU4P4phyryCXu1pbcqMO0GSQcYe1IsalYCDzRNyhetyeyxMcIxa11qPNDpVNLeretItNqEmYYQn1UYz/5x1NA==", + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/globals/-/globals-29.7.0.tgz", + "integrity": "sha512-mpiz3dutLbkW2MNFubUGUEVLkTGiqW6yLVTA+JbP6fI6J5iL9Y0Nlg8k95pcF8ctKwCS7WVxteBs29hhfAotzQ==", "dev": true, "requires": { - "@jest/environment": "^28.1.3", - "@jest/expect": "^28.1.3", - "@jest/types": "^28.1.3" + "@jest/environment": "^29.7.0", + "@jest/expect": "^29.7.0", + "@jest/types": "^29.6.3", + "jest-mock": "^29.7.0" } }, "@jest/reporters": { - "version": "28.1.3", - "resolved": "https://registry.npmjs.org/@jest/reporters/-/reporters-28.1.3.tgz", - "integrity": "sha512-JuAy7wkxQZVNU/V6g9xKzCGC5LVXx9FDcABKsSXp5MiKPEE2144a/vXTEDoyzjUpZKfVwp08Wqg5A4WfTMAzjg==", + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/reporters/-/reporters-29.7.0.tgz", + "integrity": "sha512-DApq0KJbJOEzAFYjHADNNxAE3KbhxQB1y5Kplb5Waqw6zVbuWatSnMjE5gs8FUgEPmNsnZA3NCWl9NG0ia04Pg==", "dev": true, "requires": { "@bcoe/v8-coverage": "^0.2.3", - "@jest/console": "^28.1.3", - "@jest/test-result": "^28.1.3", - "@jest/transform": "^28.1.3", - "@jest/types": "^28.1.3", - "@jridgewell/trace-mapping": "^0.3.13", + "@jest/console": "^29.7.0", + "@jest/test-result": "^29.7.0", + "@jest/transform": "^29.7.0", + "@jest/types": "^29.6.3", + "@jridgewell/trace-mapping": "^0.3.18", "@types/node": "*", "chalk": "^4.0.0", "collect-v8-coverage": "^1.0.0", @@ -5681,94 +5917,93 @@ "glob": "^7.1.3", "graceful-fs": "^4.2.9", "istanbul-lib-coverage": "^3.0.0", - "istanbul-lib-instrument": "^5.1.0", + "istanbul-lib-instrument": "^6.0.0", "istanbul-lib-report": "^3.0.0", "istanbul-lib-source-maps": "^4.0.0", "istanbul-reports": "^3.1.3", - "jest-message-util": "^28.1.3", - "jest-util": "^28.1.3", - "jest-worker": "^28.1.3", + "jest-message-util": "^29.7.0", + "jest-util": "^29.7.0", + "jest-worker": "^29.7.0", "slash": "^3.0.0", "string-length": "^4.0.1", "strip-ansi": "^6.0.0", - "terminal-link": "^2.0.0", "v8-to-istanbul": "^9.0.1" } }, "@jest/schemas": { - "version": "28.1.3", - "resolved": "https://registry.npmjs.org/@jest/schemas/-/schemas-28.1.3.tgz", - "integrity": "sha512-/l/VWsdt/aBXgjshLWOFyFt3IVdYypu5y2Wn2rOO1un6nkqIn8SLXzgIMYXFyYsRWDyF5EthmKJMIdJvk08grg==", + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/@jest/schemas/-/schemas-29.6.3.tgz", + "integrity": "sha512-mo5j5X+jIZmJQveBKeS/clAueipV7KgiX1vMgCxam1RNYiqE1w62n0/tJJnHtjW8ZHcQco5gY85jA3mi0L+nSA==", "dev": true, "requires": { - "@sinclair/typebox": "^0.24.1" + "@sinclair/typebox": "^0.27.8" } }, "@jest/source-map": { - "version": "28.1.2", - "resolved": "https://registry.npmjs.org/@jest/source-map/-/source-map-28.1.2.tgz", - "integrity": "sha512-cV8Lx3BeStJb8ipPHnqVw/IM2VCMWO3crWZzYodSIkxXnRcXJipCdx1JCK0K5MsJJouZQTH73mzf4vgxRaH9ww==", + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/@jest/source-map/-/source-map-29.6.3.tgz", + "integrity": "sha512-MHjT95QuipcPrpLM+8JMSzFx6eHp5Bm+4XeFDJlwsvVBjmKNiIAvasGK2fxz2WbGRlnvqehFbh07MMa7n3YJnw==", "dev": true, "requires": { - "@jridgewell/trace-mapping": "^0.3.13", + "@jridgewell/trace-mapping": "^0.3.18", "callsites": "^3.0.0", "graceful-fs": "^4.2.9" } }, "@jest/test-result": { - "version": "28.1.3", - "resolved": "https://registry.npmjs.org/@jest/test-result/-/test-result-28.1.3.tgz", - "integrity": "sha512-kZAkxnSE+FqE8YjW8gNuoVkkC9I7S1qmenl8sGcDOLropASP+BkcGKwhXoyqQuGOGeYY0y/ixjrd/iERpEXHNg==", + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/test-result/-/test-result-29.7.0.tgz", + "integrity": "sha512-Fdx+tv6x1zlkJPcWXmMDAG2HBnaR9XPSd5aDWQVsfrZmLVT3lU1cwyxLgRmXR9yrq4NBoEm9BMsfgFzTQAbJYA==", "dev": true, "requires": { - "@jest/console": "^28.1.3", - "@jest/types": "^28.1.3", + "@jest/console": "^29.7.0", + "@jest/types": "^29.6.3", "@types/istanbul-lib-coverage": "^2.0.0", "collect-v8-coverage": "^1.0.0" } }, "@jest/test-sequencer": { - "version": "28.1.3", - "resolved": "https://registry.npmjs.org/@jest/test-sequencer/-/test-sequencer-28.1.3.tgz", - "integrity": "sha512-NIMPEqqa59MWnDi1kvXXpYbqsfQmSJsIbnd85mdVGkiDfQ9WQQTXOLsvISUfonmnBT+w85WEgneCigEEdHDFxw==", + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/test-sequencer/-/test-sequencer-29.7.0.tgz", + "integrity": "sha512-GQwJ5WZVrKnOJuiYiAF52UNUJXgTZx1NHjFSEB0qEMmSZKAkdMoIzw/Cj6x6NF4AvV23AUqDpFzQkN/eYCYTxw==", "dev": true, "requires": { - "@jest/test-result": "^28.1.3", + "@jest/test-result": "^29.7.0", "graceful-fs": "^4.2.9", - "jest-haste-map": "^28.1.3", + "jest-haste-map": "^29.7.0", "slash": "^3.0.0" } }, "@jest/transform": { - "version": "28.1.3", - "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-28.1.3.tgz", - "integrity": "sha512-u5dT5di+oFI6hfcLOHGTAfmUxFRrjK+vnaP0kkVow9Md/M7V/MxqQMOz/VV25UZO8pzeA9PjfTpOu6BDuwSPQA==", + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-29.7.0.tgz", + "integrity": "sha512-ok/BTPFzFKVMwO5eOHRrvnBVHdRy9IrsrW1GpMaQ9MCnilNLXQKmAX8s1YXDFaai9xJpac2ySzV0YeRRECr2Vw==", "dev": true, "requires": { "@babel/core": "^7.11.6", - "@jest/types": "^28.1.3", - "@jridgewell/trace-mapping": "^0.3.13", + "@jest/types": "^29.6.3", + "@jridgewell/trace-mapping": "^0.3.18", "babel-plugin-istanbul": "^6.1.1", "chalk": "^4.0.0", - "convert-source-map": "^1.4.0", - "fast-json-stable-stringify": "^2.0.0", + "convert-source-map": "^2.0.0", + "fast-json-stable-stringify": "^2.1.0", "graceful-fs": "^4.2.9", - "jest-haste-map": "^28.1.3", - "jest-regex-util": "^28.0.2", - "jest-util": "^28.1.3", + "jest-haste-map": "^29.7.0", + "jest-regex-util": "^29.6.3", + "jest-util": "^29.7.0", "micromatch": "^4.0.4", "pirates": "^4.0.4", "slash": "^3.0.0", - "write-file-atomic": "^4.0.1" + "write-file-atomic": "^4.0.2" } }, "@jest/types": { - "version": "28.1.3", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-28.1.3.tgz", - "integrity": "sha512-RyjiyMUZrKz/c+zlMFO1pm70DcIlST8AeWTkoUdZevew44wcNZQHsEVOiCVtgVnlFFD82FPaXycys58cf2muVQ==", + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-29.6.3.tgz", + "integrity": "sha512-u3UPsIilWKOM3F9CXtrG8LEJmNxwoCQC/XVj4IKYXvvpx7QIi/Kg1LI5uDmDpKlac62NUtX7eLjRh+jVZcLOzw==", "dev": true, "requires": { - "@jest/schemas": "^28.1.3", + "@jest/schemas": "^29.6.3", "@types/istanbul-lib-coverage": "^2.0.0", "@types/istanbul-reports": "^3.0.0", "@types/node": "*", @@ -5777,19 +6012,20 @@ } }, "@jridgewell/gen-mapping": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.1.1.tgz", - "integrity": "sha512-sQXCasFk+U8lWYEe66WxRDOE9PjVz4vSM51fTu3Hw+ClTpUSQb718772vH3pyS5pShp6lvQM7SxgIDXXXmOX7w==", + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.3.tgz", + "integrity": "sha512-HLhSWOLRi875zjjMG/r+Nv0oCW8umGb0BgEhyX3dDX3egwZtB8PqLnjz3yedt8R5StBrzcg4aBpnh8UA9D1BoQ==", "dev": true, "requires": { - "@jridgewell/set-array": "^1.0.0", - "@jridgewell/sourcemap-codec": "^1.4.10" + "@jridgewell/set-array": "^1.0.1", + "@jridgewell/sourcemap-codec": "^1.4.10", + "@jridgewell/trace-mapping": "^0.3.9" } }, "@jridgewell/resolve-uri": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.0.tgz", - "integrity": "sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w==", + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.1.tgz", + "integrity": "sha512-dSYZh7HhCDtCKm4QakX0xFpsRDqjjtZf/kjI/v3T3Nwt5r8/qz/M19F9ySyOqU94SXBmeG9ttTul+YnR4LOxFA==", "dev": true }, "@jridgewell/set-array": { @@ -5799,19 +6035,19 @@ "dev": true }, "@jridgewell/sourcemap-codec": { - "version": "1.4.14", - "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz", - "integrity": "sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==", + "version": "1.4.15", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz", + "integrity": "sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==", "dev": true }, "@jridgewell/trace-mapping": { - "version": "0.3.14", - "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.14.tgz", - "integrity": "sha512-bJWEfQ9lPTvm3SneWwRFVLzrh6nhjwqw7TUFFBEMzwvg7t7PCDenf2lDwqo4NQXzdpgBXyFgDWnQA+2vkruksQ==", + "version": "0.3.19", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.19.tgz", + "integrity": "sha512-kf37QtfW+Hwx/buWGMPcR60iF9ziHa6r/CZJIHbmcm4+0qrXiVdxegAH0F6yddEVQ7zdkjcGCgCzUu+BcbhQxw==", "dev": true, "requires": { - "@jridgewell/resolve-uri": "^3.0.3", - "@jridgewell/sourcemap-codec": "^1.4.10" + "@jridgewell/resolve-uri": "^3.1.0", + "@jridgewell/sourcemap-codec": "^1.4.14" } }, "@nodelib/fs.scandir": { @@ -5841,64 +6077,55 @@ } }, "@sinclair/typebox": { - "version": "0.24.20", - "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.24.20.tgz", - "integrity": "sha512-kVaO5aEFZb33nPMTZBxiPEkY+slxiPtqC7QX8f9B3eGOMBvEfuMfxp9DSTTCsRJPumPKjrge4yagyssO4q6qzQ==", + "version": "0.27.8", + "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.27.8.tgz", + "integrity": "sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA==", "dev": true }, "@sinonjs/commons": { - "version": "1.8.3", - "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-1.8.3.tgz", - "integrity": "sha512-xkNcLAn/wZaX14RPlwizcKicDk9G3F8m2nU3L7Ukm5zBgTwiT0wsoFAHx9Jq56fJA1z/7uKGtCRu16sOUCLIHQ==", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-3.0.0.tgz", + "integrity": "sha512-jXBtWAF4vmdNmZgD5FoKsVLv3rPgDnLgPbU84LIJ3otV44vJlDRokVng5v8NFJdCf/da9legHcKaRuZs4L7faA==", "dev": true, "requires": { "type-detect": "4.0.8" } }, "@sinonjs/fake-timers": { - "version": "9.1.2", - "resolved": "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-9.1.2.tgz", - "integrity": "sha512-BPS4ynJW/o92PUR4wgriz2Ud5gpST5vz6GQfMixEDK0Z8ZCUv2M7SkBLykH56T++Xs+8ln9zTGbOvNGIe02/jw==", + "version": "10.3.0", + "resolved": "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-10.3.0.tgz", + "integrity": "sha512-V4BG07kuYSUkTCSBHG8G8TNhM+F19jXFWnQtzj+we8DrkpSBCee9Z3Ms8yiGer/dlmhe35/Xdgyo3/0rQKg7YA==", "dev": true, "requires": { - "@sinonjs/commons": "^1.7.0" - } - }, - "@types/archiver": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/@types/archiver/-/archiver-5.3.1.tgz", - "integrity": "sha512-wKYZaSXaDvTZuInAWjCeGG7BEAgTWG2zZW0/f7IYFcoHB2X2d9lkVFnrOlXl3W6NrvO6Ml3FLLu8Uksyymcpnw==", - "dev": true, - "requires": { - "@types/glob": "*" + "@sinonjs/commons": "^3.0.0" } }, "@types/babel__core": { - "version": "7.1.19", - "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.1.19.tgz", - "integrity": "sha512-WEOTgRsbYkvA/KCsDwVEGkd7WAr1e3g31VHQ8zy5gul/V1qKullU/BU5I68X5v7V3GnB9eotmom4v5a5gjxorw==", + "version": "7.20.2", + "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.20.2.tgz", + "integrity": "sha512-pNpr1T1xLUc2l3xJKuPtsEky3ybxN3m4fJkknfIpTCTfIZCDW57oAg+EfCgIIp2rvCe0Wn++/FfodDS4YXxBwA==", "dev": true, "requires": { - "@babel/parser": "^7.1.0", - "@babel/types": "^7.0.0", + "@babel/parser": "^7.20.7", + "@babel/types": "^7.20.7", "@types/babel__generator": "*", "@types/babel__template": "*", "@types/babel__traverse": "*" } }, "@types/babel__generator": { - "version": "7.6.4", - "resolved": "https://registry.npmjs.org/@types/babel__generator/-/babel__generator-7.6.4.tgz", - "integrity": "sha512-tFkciB9j2K755yrTALxD44McOrk+gfpIpvC3sxHjRawj6PfnQxrse4Clq5y/Rq+G3mrBurMax/lG8Qn2t9mSsg==", + "version": "7.6.5", + "resolved": "https://registry.npmjs.org/@types/babel__generator/-/babel__generator-7.6.5.tgz", + "integrity": "sha512-h9yIuWbJKdOPLJTbmSpPzkF67e659PbQDba7ifWm5BJ8xTv+sDmS7rFmywkWOvXedGTivCdeGSIIX8WLcRTz8w==", "dev": true, "requires": { "@babel/types": "^7.0.0" } }, "@types/babel__template": { - "version": "7.4.1", - "resolved": "https://registry.npmjs.org/@types/babel__template/-/babel__template-7.4.1.tgz", - "integrity": "sha512-azBFKemX6kMg5Io+/rdGT0dkGreboUVR0Cdm3fz9QJWpaQGJRQXl7C+6hOTCZcMll7KFyEQpgbYI2lHdsS4U7g==", + "version": "7.4.2", + "resolved": "https://registry.npmjs.org/@types/babel__template/-/babel__template-7.4.2.tgz", + "integrity": "sha512-/AVzPICMhMOMYoSx9MoKpGDKdBRsIXMNByh1PXSZoa+v6ZoLa8xxtsT/uLQ/NJm0XVAWl/BvId4MlDeXJaeIZQ==", "dev": true, "requires": { "@babel/parser": "^7.1.0", @@ -5906,48 +6133,18 @@ } }, "@types/babel__traverse": { - "version": "7.17.1", - "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.17.1.tgz", - "integrity": "sha512-kVzjari1s2YVi77D3w1yuvohV2idweYXMCDzqBiVNN63TcDWrIlTVOYpqVrvbbyOE/IyzBoTKF0fdnLPEORFxA==", - "dev": true, - "requires": { - "@babel/types": "^7.3.0" - } - }, - "@types/docker-modem": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/@types/docker-modem/-/docker-modem-3.0.2.tgz", - "integrity": "sha512-qC7prjoEYR2QEe6SmCVfB1x3rfcQtUr1n4x89+3e0wSTMQ/KYCyf+/RAA9n2tllkkNc6//JMUZePdFRiGIWfaQ==", - "dev": true, - "requires": { - "@types/node": "*", - "@types/ssh2": "*" - } - }, - "@types/dockerode": { - "version": "3.3.9", - "resolved": "https://registry.npmjs.org/@types/dockerode/-/dockerode-3.3.9.tgz", - "integrity": "sha512-SYRN5FF/qmwpxUT6snJP5D8k0wgoUKOGVs625XvpRJOOUi6s//UYI4F0tbyE3OmzpI70Fo1+aqpzX27zCrInww==", + "version": "7.20.2", + "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.20.2.tgz", + "integrity": "sha512-ojlGK1Hsfce93J0+kn3H5R73elidKUaZonirN33GSmgTUMpzI/MIFfSpF3haANe3G1bEBS9/9/QEqwTzwqFsKw==", "dev": true, "requires": { - "@types/docker-modem": "*", - "@types/node": "*" - } - }, - "@types/glob": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/@types/glob/-/glob-7.2.0.tgz", - "integrity": "sha512-ZUxbzKl0IfJILTS6t7ip5fQQM/J3TJYubDm3nMbgubNNYS62eXeUpoLUC8/7fJNiFYHTrGPQn7hspDUzIHX3UA==", - "dev": true, - "requires": { - "@types/minimatch": "*", - "@types/node": "*" + "@babel/types": "^7.20.7" } }, "@types/graceful-fs": { - "version": "4.1.5", - "resolved": "https://registry.npmjs.org/@types/graceful-fs/-/graceful-fs-4.1.5.tgz", - "integrity": "sha512-anKkLmZZ+xm4p8JWBf4hElkM4XR+EZeA2M9BAkkTldmcyDY4mbdIJnRghDJH3Ov5ooY7/UAoENtmdMSkaAd7Cw==", + "version": "4.1.7", + "resolved": "https://registry.npmjs.org/@types/graceful-fs/-/graceful-fs-4.1.7.tgz", + "integrity": "sha512-MhzcwU8aUygZroVwL2jeYk6JisJrPl/oov/gsgGCue9mkgl9wjGbzReYQClxiUgFDnib9FuHqTndccKeZKxTRw==", "dev": true, "requires": { "@types/node": "*" @@ -5960,50 +6157,29 @@ "dev": true }, "@types/istanbul-lib-report": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz", - "integrity": "sha512-plGgXAPfVKFoYfa9NpYDAkseG+g6Jr294RqeqcqDixSbU34MZVJRi/P+7Y8GDpzkEwLaGZZOpKIEmeVZNtKsrg==", + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.1.tgz", + "integrity": "sha512-gPQuzaPR5h/djlAv2apEG1HVOyj1IUs7GpfMZixU0/0KXT3pm64ylHuMUI1/Akh+sq/iikxg6Z2j+fcMDXaaTQ==", "dev": true, "requires": { "@types/istanbul-lib-coverage": "*" } }, "@types/istanbul-reports": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-3.0.1.tgz", - "integrity": "sha512-c3mAZEuK0lvBp8tmuL74XRKn1+y2dcwOUpH7x4WrF6gk1GIgiluDRgMYQtw2OFcBvAJWlt6ASU3tSqxp0Uu0Aw==", + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-3.0.2.tgz", + "integrity": "sha512-kv43F9eb3Lhj+lr/Hn6OcLCs/sSM8bt+fIaP11rCYngfV6NVjzWXJ17owQtDQTL9tQ8WSLUrGsSJ6rJz0F1w1A==", "dev": true, "requires": { "@types/istanbul-lib-report": "*" } }, - "@types/minimatch": { - "version": "3.0.5", - "resolved": "https://registry.npmjs.org/@types/minimatch/-/minimatch-3.0.5.tgz", - "integrity": "sha512-Klz949h02Gz2uZCMGwDUSDS1YBlTdDDgbWHi+81l29tQALUtvz4rAYi5uoVhE5Lagoq6DeqAUlbrHvW/mXDgdQ==", - "dev": true - }, "@types/node": { "version": "18.6.1", "resolved": "https://registry.npmjs.org/@types/node/-/node-18.6.1.tgz", "integrity": "sha512-z+2vB6yDt1fNwKOeGbckpmirO+VBDuQqecXkgeIqDlaOtmKn6hPR/viQ8cxCfqLU4fTlvM3+YjM367TukWdxpg==", "dev": true }, - "@types/prettier": { - "version": "2.6.3", - "resolved": "https://registry.npmjs.org/@types/prettier/-/prettier-2.6.3.tgz", - "integrity": "sha512-ymZk3LEC/fsut+/Q5qejp6R9O1rMxz3XaRHDV6kX8MrGAhOSPqVARbDi+EZvInBpw+BnCX3TD240byVkOfQsHg==", - "dev": true - }, - "@types/ssh2": { - "version": "1.11.5", - "resolved": "https://registry.npmjs.org/@types/ssh2/-/ssh2-1.11.5.tgz", - "integrity": "sha512-RaBsPKr+YP/slH8iR7XfC7chyomU+V57F/gJ5cMSP2n6/YWKVmeRLx7lrkgw4YYLpEW5lXLAdfZJqGo0PXboSA==", - "dev": true, - "requires": { - "@types/node": "*" - } - }, "@types/ssh2-streams": { "version": "0.1.9", "resolved": "https://registry.npmjs.org/@types/ssh2-streams/-/ssh2-streams-0.1.9.tgz", @@ -6020,24 +6196,24 @@ "dev": true }, "@types/yargs": { - "version": "17.0.10", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.10.tgz", - "integrity": "sha512-gmEaFwpj/7f/ROdtIlci1R1VYU1J4j95m8T+Tj3iBgiBFKg1foE/PSl93bBd5T9LDXNPo8UlNN6W0qwD8O5OaA==", + "version": "17.0.26", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.26.tgz", + "integrity": "sha512-Y3vDy2X6zw/ZCumcwLpdhM5L7jmyGpmBCTYMHDLqT2IKVMYRRLdv6ZakA+wxhra6Z/3bwhNbNl9bDGXaFU+6rw==", "dev": true, "requires": { "@types/yargs-parser": "*" } }, "@types/yargs-parser": { - "version": "21.0.0", - "resolved": "https://registry.npmjs.org/@types/yargs-parser/-/yargs-parser-21.0.0.tgz", - "integrity": "sha512-iO9ZQHkZxHn4mSakYV0vFHAVDyEOIJQrV2uZ06HxEPcx+mt8swXoZHIbaaJ2crJYFfErySgktuTZ3BeLz+XmFA==", + "version": "21.0.1", + "resolved": "https://registry.npmjs.org/@types/yargs-parser/-/yargs-parser-21.0.1.tgz", + "integrity": "sha512-axdPBuLuEJt0c4yI5OZssC19K2Mq1uKdrfZBzuxLvaztgqUtFYZUNw7lETExPYJR9jdEoIg4mb7RQKRQzOkeGQ==", "dev": true }, "acorn": { - "version": "8.8.0", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.8.0.tgz", - "integrity": "sha512-QOxyigPVrpZ2GXT+PFyZTl6TtOFc5egxHIP9IlQ+RbupQuX4RkT/Bee4/kQuC02Xkzg84JcT7oLYtDIQxp+v7w==", + "version": "8.10.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.10.0.tgz", + "integrity": "sha512-F0SAmZ8iUtS//m8DmCTA0jlh6TDKkHQyK6xc6V4KDTyZKA9dnvX9/3sRTVQrWm79glUAZbnmmNcdYwUIHWVybw==", "dev": true }, "acorn-jsx": { @@ -6066,6 +6242,14 @@ "dev": true, "requires": { "type-fest": "^0.21.3" + }, + "dependencies": { + "type-fest": { + "version": "0.21.3", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz", + "integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==", + "dev": true + } } }, "ansi-regex": { @@ -6084,9 +6268,9 @@ } }, "anymatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.2.tgz", - "integrity": "sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==", + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", + "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", "dev": true, "requires": { "normalize-path": "^3.0.0", @@ -6153,18 +6337,9 @@ } }, "argparse": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", - "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", - "dev": true, - "requires": { - "sprintf-js": "~1.0.2" - } - }, - "array-union": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", - "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", "dev": true }, "asn1": { @@ -6182,16 +6357,28 @@ "integrity": "sha512-iAB+JbDEGXhyIUavoDl9WP/Jj106Kz9DEn1DPgYw5ruDn0e3Wgi3sKFm55sASdGBNOQB8F59d9qQ7deqrHA8wQ==", "dev": true }, + "async-lock": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/async-lock/-/async-lock-1.4.0.tgz", + "integrity": "sha512-coglx5yIWuetakm3/1dsX9hxCNox22h7+V80RQOu2XUUMidtArxKoZoOtHUPuR84SycKTXzgGzAUR5hJxujyJQ==", + "dev": true + }, + "b4a": { + "version": "1.6.4", + "resolved": "https://registry.npmjs.org/b4a/-/b4a-1.6.4.tgz", + "integrity": "sha512-fpWrvyVHEKyeEvbKZTVOeZF3VSKKWtJxFIxX/jaVPf+cLbGUSitjb49pHLqPV2BUNNZ0LcoeEGfE/YCpyDYHIw==", + "dev": true + }, "babel-jest": { - "version": "28.1.3", - "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-28.1.3.tgz", - "integrity": "sha512-epUaPOEWMk3cWX0M/sPvCHHCe9fMFAa/9hXEgKP8nFfNl/jlGkE9ucq9NqkZGXLDduCJYS0UvSlPUwC0S+rH6Q==", + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-29.7.0.tgz", + "integrity": "sha512-BrvGY3xZSwEcCzKvKsCi2GgHqDqsYkOP4/by5xCgIwGXQxIEh+8ew3gmrE1y7XRR6LHZIj6yLYnUi/mm2KXKBg==", "dev": true, "requires": { - "@jest/transform": "^28.1.3", + "@jest/transform": "^29.7.0", "@types/babel__core": "^7.1.14", "babel-plugin-istanbul": "^6.1.1", - "babel-preset-jest": "^28.1.3", + "babel-preset-jest": "^29.6.3", "chalk": "^4.0.0", "graceful-fs": "^4.2.9", "slash": "^3.0.0" @@ -6208,12 +6395,27 @@ "@istanbuljs/schema": "^0.1.2", "istanbul-lib-instrument": "^5.0.4", "test-exclude": "^6.0.0" + }, + "dependencies": { + "istanbul-lib-instrument": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-5.2.1.tgz", + "integrity": "sha512-pzqtp31nLv/XFOzXGuvhCb8qhjmTVo5vjVk19XE4CRlSWz0KoeJ3bw9XsA7nOp9YBf4qHjwBxkDzKcME/J29Yg==", + "dev": true, + "requires": { + "@babel/core": "^7.12.3", + "@babel/parser": "^7.14.7", + "@istanbuljs/schema": "^0.1.2", + "istanbul-lib-coverage": "^3.2.0", + "semver": "^6.3.0" + } + } } }, "babel-plugin-jest-hoist": { - "version": "28.1.3", - "resolved": "https://registry.npmjs.org/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-28.1.3.tgz", - "integrity": "sha512-Ys3tUKAmfnkRUpPdpa98eYrAR0nV+sSFUZZEGuQ2EbFd1y4SOLtD5QDNHAq+bb9a+bbXvYQC4b+ID/THIMcU6Q==", + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-29.6.3.tgz", + "integrity": "sha512-ESAc/RJvGTFEzRwOTT4+lNDk/GNHMkKbNzsvT0qKRfDyyYTskxB5rnU2njIDYVxXCBHHEI1c0YwHob3WaYujOg==", "dev": true, "requires": { "@babel/template": "^7.3.3", @@ -6243,12 +6445,12 @@ } }, "babel-preset-jest": { - "version": "28.1.3", - "resolved": "https://registry.npmjs.org/babel-preset-jest/-/babel-preset-jest-28.1.3.tgz", - "integrity": "sha512-L+fupJvlWAHbQfn74coNX3zf60LXMJsezNvvx8eIh7iOR1luJ1poxYgQk1F8PYtNq/6QODDHCqsSnTFSWC491A==", + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/babel-preset-jest/-/babel-preset-jest-29.6.3.tgz", + "integrity": "sha512-0B3bhxR6snWXJZtR/RliHTDPRgn1sNHOR0yVtq/IiQFyuOVjFS+wuio/R4gSNkyYmKmJB4wGZv2NZanmKmTnNA==", "dev": true, "requires": { - "babel-plugin-jest-hoist": "^28.1.3", + "babel-plugin-jest-hoist": "^29.6.3", "babel-preset-current-node-syntax": "^1.0.0" } }, @@ -6304,15 +6506,15 @@ } }, "browserslist": { - "version": "4.21.2", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.21.2.tgz", - "integrity": "sha512-MonuOgAtUB46uP5CezYbRaYKBNt2LxP0yX+Pmj4LkcDFGkn9Cbpi83d9sCjwQDErXsIJSzY5oKGDbgOlF/LPAA==", + "version": "4.22.1", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.22.1.tgz", + "integrity": "sha512-FEVc202+2iuClEhZhrWy6ZiAcRLvNMyYcxZ8raemul1DYVOVdFsbqckWLdsixQZCpJlwe77Z3UTalE7jsjnKfQ==", "dev": true, "requires": { - "caniuse-lite": "^1.0.30001366", - "electron-to-chromium": "^1.4.188", - "node-releases": "^2.0.6", - "update-browserslist-db": "^1.0.4" + "caniuse-lite": "^1.0.30001541", + "electron-to-chromium": "^1.4.535", + "node-releases": "^2.0.13", + "update-browserslist-db": "^1.0.13" } }, "bser": { @@ -6372,9 +6574,9 @@ "dev": true }, "caniuse-lite": { - "version": "1.0.30001370", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001370.tgz", - "integrity": "sha512-3PDmaP56wz/qz7G508xzjx8C+MC2qEm4SYhSEzC9IBROo+dGXFWRuaXkWti0A9tuI00g+toiriVqxtWMgl350g==", + "version": "1.0.30001546", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001546.tgz", + "integrity": "sha512-zvtSJwuQFpewSyRrI3AsftF6rM0X80mZkChIt1spBGEvRglCrjTniXvinc8JKRoqTwXAgvqTImaN9igfSMtUBw==", "dev": true }, "chalk": { @@ -6400,25 +6602,25 @@ "dev": true }, "ci-info": { - "version": "3.3.2", - "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.3.2.tgz", - "integrity": "sha512-xmDt/QIAdeZ9+nfdPsaBCpMvHNLFiLdjj59qjqn+6iPe6YmHGQ35sBnQ8uslRBXFmXkiZQOJRjvQeoGppoTjjg==", + "version": "3.9.0", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.9.0.tgz", + "integrity": "sha512-NIxF55hv4nSqQswkAeiOi1r83xy8JldOFDTWiug55KBu9Jnblncd2U6ViHmYgHf01TPZS77NJBhBMKdWj9HQMQ==", "dev": true }, "cjs-module-lexer": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/cjs-module-lexer/-/cjs-module-lexer-1.2.2.tgz", - "integrity": "sha512-cOU9usZw8/dXIXKtwa8pM0OTJQuJkxMN6w30csNRUerHfeQ5R6U3kkU/FtJeIf3M202OHfY2U8ccInBG7/xogA==", + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/cjs-module-lexer/-/cjs-module-lexer-1.2.3.tgz", + "integrity": "sha512-0TNiGstbQmCFwt4akjjBg5pLRTSyj/PkWQ1ZoO2zntmg9yLqSRxwEa4iCfQLGjqhiqBfOJa7W/E8wfGrTDmlZQ==", "dev": true }, "cliui": { - "version": "7.0.4", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", - "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==", + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", + "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==", "dev": true, "requires": { "string-width": "^4.2.0", - "strip-ansi": "^6.0.0", + "strip-ansi": "^6.0.1", "wrap-ansi": "^7.0.0" } }, @@ -6429,9 +6631,9 @@ "dev": true }, "collect-v8-coverage": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/collect-v8-coverage/-/collect-v8-coverage-1.0.1.tgz", - "integrity": "sha512-iBPtljfCNcTKNAto0KEtDfZ3qzjJvqE3aTGZsbhjSBlorqpXJlaWWtPO35D+ZImoC3KWejX64o+yPGxhWSTzfg==", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/collect-v8-coverage/-/collect-v8-coverage-1.0.2.tgz", + "integrity": "sha512-lHl4d5/ONEbLlJvaJNtsF/Lz+WvB07u2ycqTYbdrq7UypDXailES4valYb2eWiJFxZlVmpGekfqoxQhzyFdT4Q==", "dev": true }, "color-convert": { @@ -6468,13 +6670,10 @@ "dev": true }, "convert-source-map": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.8.0.tgz", - "integrity": "sha512-+OQdjP49zViI/6i7nIJpA8rAl4sV/JdPfU9nZs3VqOwGIgizICvuN2ru6fMd+4llL0tar18UYJXfZ/TWtmhUjA==", - "dev": true, - "requires": { - "safe-buffer": "~5.1.1" - } + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz", + "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==", + "dev": true }, "core-util-is": { "version": "1.0.3", @@ -6509,6 +6708,21 @@ "readable-stream": "^3.4.0" } }, + "create-jest": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/create-jest/-/create-jest-29.7.0.tgz", + "integrity": "sha512-Adz2bdH0Vq3F53KEMJOoftQFutWCukm6J24wbPWRO4k1kMY7gS7ds/uoJkNuV8wDCtWWnuwGcJwpWcih+zEW1Q==", + "dev": true, + "requires": { + "@jest/types": "^29.6.3", + "chalk": "^4.0.0", + "exit": "^0.1.2", + "graceful-fs": "^4.2.9", + "jest-config": "^29.7.0", + "jest-util": "^29.7.0", + "prompts": "^2.0.1" + } + }, "cross-spawn": { "version": "7.0.3", "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", @@ -6530,10 +6744,11 @@ } }, "dedent": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/dedent/-/dedent-0.7.0.tgz", - "integrity": "sha512-Q6fKUPqnAHAyhiUgFU7BUzLiv0kd8saH9al7tnu5Q/okj6dnupxyTgFIBjVzJATdfIAm9NAsvXNzjaKa+bxVyA==", - "dev": true + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/dedent/-/dedent-1.5.1.tgz", + "integrity": "sha512-+LxW+KLWxu3HW3M2w2ympwtqPrqYRzU8fqi6Fhd18fBALe15blJPI/I4+UHveMVG6lJqB4JNd4UG0S5cnVHwIg==", + "dev": true, + "requires": {} }, "deep-is": { "version": "0.1.4", @@ -6542,9 +6757,9 @@ "dev": true }, "deepmerge": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.2.2.tgz", - "integrity": "sha512-FJ3UgI4gIl+PHZm53knsuSFpE+nESMr7M4v9QcgB7S63Kj/6WqMiFQJpBBYz1Pt+66bZpP3Q7Lye0Oo9MPKEdg==", + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.3.1.tgz", + "integrity": "sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==", "dev": true }, "detect-newline": { @@ -6554,47 +6769,39 @@ "dev": true }, "diff-sequences": { - "version": "28.1.1", - "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-28.1.1.tgz", - "integrity": "sha512-FU0iFaH/E23a+a718l8Qa/19bF9p06kgE0KipMOMadwa3SjnaElKzPaUC0vnibs6/B/9ni97s61mcejk8W1fQw==", - "dev": true - }, - "dir-glob": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", - "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", - "dev": true, - "requires": { - "path-type": "^4.0.0" - } + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-29.6.3.tgz", + "integrity": "sha512-EjePK1srD3P08o2j4f0ExnylqRs5B9tJjcp9t1krH2qRi8CCdsYfwe9JgSLurFBWwq4uOlipzfk5fHNvwFKr8Q==", + "dev": true }, "docker-compose": { - "version": "0.23.17", - "resolved": "https://registry.npmjs.org/docker-compose/-/docker-compose-0.23.17.tgz", - "integrity": "sha512-YJV18YoYIcxOdJKeFcCFihE6F4M2NExWM/d4S1ITcS9samHKnNUihz9kjggr0dNtsrbpFNc7/Yzd19DWs+m1xg==", + "version": "0.24.2", + "resolved": "https://registry.npmjs.org/docker-compose/-/docker-compose-0.24.2.tgz", + "integrity": "sha512-2/WLvA7UZ6A2LDLQrYW0idKipmNBWhtfvrn2yzjC5PnHDzuFVj1zAZN6MJxVMKP0zZH8uzAK6OwVZYHGuyCmTw==", "dev": true, "requires": { - "yaml": "^1.10.2" + "yaml": "^2.2.2" } }, "docker-modem": { - "version": "3.0.5", - "resolved": "https://registry.npmjs.org/docker-modem/-/docker-modem-3.0.5.tgz", - "integrity": "sha512-x1E6jxWdtoK3+ifAUWj4w5egPdTDGBpesSCErm+aKET5BnnEOvDtTP6GxcnMB1zZiv2iQ0qJZvJie+1wfIRg6Q==", + "version": "3.0.8", + "resolved": "https://registry.npmjs.org/docker-modem/-/docker-modem-3.0.8.tgz", + "integrity": "sha512-f0ReSURdM3pcKPNS30mxOHSbaFLcknGmQjwSfmbcdOw1XWKXVhukM3NJHhr7NpY9BIyyWQb0EBo3KQvvuU5egQ==", "dev": true, "requires": { "debug": "^4.1.1", "readable-stream": "^3.5.0", "split-ca": "^1.0.1", - "ssh2": "^1.4.0" + "ssh2": "^1.11.0" } }, "dockerode": { - "version": "3.3.3", - "resolved": "https://registry.npmjs.org/dockerode/-/dockerode-3.3.3.tgz", - "integrity": "sha512-lvKV6/NGf2/CYLt5V4c0fd6Fl9XZSCo1Z2HBT9ioKrKLMB2o+gA62Uza8RROpzGvYv57KJx2dKu+ZwSpB//OIA==", + "version": "3.3.5", + "resolved": "https://registry.npmjs.org/dockerode/-/dockerode-3.3.5.tgz", + "integrity": "sha512-/0YNa3ZDNeLr/tSckmD69+Gq+qVNhvKfAHNeZJBnp7EOP6RGKV8ORrJHkUn20So5wU+xxT7+1n5u8PjHbfjbSA==", "dev": true, "requires": { + "@balena/dockerignore": "^1.0.2", "docker-modem": "^3.0.0", "tar-fs": "~2.0.1" }, @@ -6623,15 +6830,15 @@ } }, "electron-to-chromium": { - "version": "1.4.199", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.199.tgz", - "integrity": "sha512-WIGME0Cs7oob3mxsJwHbeWkH0tYkIE/sjkJ8ML2BYmuRcjhRl/q5kVDXG7W9LOOKwzPU5M0LBlXRq9rlSgnNlg==", + "version": "1.4.543", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.543.tgz", + "integrity": "sha512-t2ZP4AcGE0iKCCQCBx/K2426crYdxD3YU6l0uK2EO3FZH0pbC4pFz/sZm2ruZsND6hQBTcDWWlo/MLpiOdif5g==", "dev": true }, "emittery": { - "version": "0.10.2", - "resolved": "https://registry.npmjs.org/emittery/-/emittery-0.10.2.tgz", - "integrity": "sha512-aITqOwnLanpHLNXZJENbOgjUBeHocD+xsSJmNrjovKBW5HbSpW3d1pEls7GFQPUWXiwG9+0P4GtHfEqC/4M0Iw==", + "version": "0.13.1", + "resolved": "https://registry.npmjs.org/emittery/-/emittery-0.13.1.tgz", + "integrity": "sha512-DeWwawk6r5yR9jFgnDKYt4sLS0LmHJJi3ZOnb5/JdbYwj3nW+FxQnHIjhBKz8YLC7oRNPVM9NQ47I3CVx34eqQ==", "dev": true }, "emoji-regex": { @@ -6671,58 +6878,50 @@ "dev": true }, "eslint": { - "version": "8.21.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.21.0.tgz", - "integrity": "sha512-/XJ1+Qurf1T9G2M5IHrsjp+xrGT73RZf23xA1z5wB1ZzzEAWSZKvRwhWxTFp1rvkvCfwcvAUNAP31bhKTTGfDA==", - "dev": true, - "requires": { - "@eslint/eslintrc": "^1.3.0", - "@humanwhocodes/config-array": "^0.10.4", - "@humanwhocodes/gitignore-to-minimatch": "^1.0.2", - "ajv": "^6.10.0", + "version": "8.50.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.50.0.tgz", + "integrity": "sha512-FOnOGSuFuFLv/Sa+FDVRZl4GGVAAFFi8LecRsI5a1tMO5HIE8nCm4ivAlzt4dT3ol/PaaGC0rJEEXQmHJBGoOg==", + "dev": true, + "requires": { + "@eslint-community/eslint-utils": "^4.2.0", + "@eslint-community/regexpp": "^4.6.1", + "@eslint/eslintrc": "^2.1.2", + "@eslint/js": "8.50.0", + "@humanwhocodes/config-array": "^0.11.11", + "@humanwhocodes/module-importer": "^1.0.1", + "@nodelib/fs.walk": "^1.2.8", + "ajv": "^6.12.4", "chalk": "^4.0.0", "cross-spawn": "^7.0.2", "debug": "^4.3.2", "doctrine": "^3.0.0", "escape-string-regexp": "^4.0.0", - "eslint-scope": "^7.1.1", - "eslint-utils": "^3.0.0", - "eslint-visitor-keys": "^3.3.0", - "espree": "^9.3.3", - "esquery": "^1.4.0", + "eslint-scope": "^7.2.2", + "eslint-visitor-keys": "^3.4.3", + "espree": "^9.6.1", + "esquery": "^1.4.2", "esutils": "^2.0.2", "fast-deep-equal": "^3.1.3", "file-entry-cache": "^6.0.1", "find-up": "^5.0.0", - "functional-red-black-tree": "^1.0.1", - "glob-parent": "^6.0.1", - "globals": "^13.15.0", - "globby": "^11.1.0", - "grapheme-splitter": "^1.0.4", + "glob-parent": "^6.0.2", + "globals": "^13.19.0", + "graphemer": "^1.4.0", "ignore": "^5.2.0", - "import-fresh": "^3.0.0", "imurmurhash": "^0.1.4", "is-glob": "^4.0.0", + "is-path-inside": "^3.0.3", "js-yaml": "^4.1.0", "json-stable-stringify-without-jsonify": "^1.0.1", "levn": "^0.4.1", "lodash.merge": "^4.6.2", "minimatch": "^3.1.2", "natural-compare": "^1.4.0", - "optionator": "^0.9.1", - "regexpp": "^3.2.0", + "optionator": "^0.9.3", "strip-ansi": "^6.0.1", - "strip-json-comments": "^3.1.0", - "text-table": "^0.2.0", - "v8-compile-cache": "^2.0.3" + "text-table": "^0.2.0" }, "dependencies": { - "argparse": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", - "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", - "dev": true - }, "escape-string-regexp": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", @@ -6739,24 +6938,6 @@ "path-exists": "^4.0.0" } }, - "globals": { - "version": "13.17.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-13.17.0.tgz", - "integrity": "sha512-1C+6nQRb1GwGMKm2dH/E7enFAMxGTmGI7/dEdhy/DNelv85w9B72t3uc5frtMNXIbzrarJJ/lTCjcaZwbLJmyw==", - "dev": true, - "requires": { - "type-fest": "^0.20.2" - } - }, - "js-yaml": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", - "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", - "dev": true, - "requires": { - "argparse": "^2.0.1" - } - }, "locate-path": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", @@ -6774,57 +6955,34 @@ "requires": { "p-limit": "^3.0.2" } - }, - "type-fest": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", - "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", - "dev": true } } }, "eslint-scope": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.1.1.tgz", - "integrity": "sha512-QKQM/UXpIiHcLqJ5AOyIW7XZmzjkzQXYE54n1++wb0u9V/abW3l9uQnxX8Z5Xd18xyKIMTUAyQ0k1e8pz6LUrw==", + "version": "7.2.2", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.2.2.tgz", + "integrity": "sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==", "dev": true, "requires": { "esrecurse": "^4.3.0", "estraverse": "^5.2.0" } }, - "eslint-utils": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-3.0.0.tgz", - "integrity": "sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA==", - "dev": true, - "requires": { - "eslint-visitor-keys": "^2.0.0" - }, - "dependencies": { - "eslint-visitor-keys": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz", - "integrity": "sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==", - "dev": true - } - } - }, "eslint-visitor-keys": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.3.0.tgz", - "integrity": "sha512-mQ+suqKJVyeuwGYHAdjMFqjCyfl8+Ldnxuyp3ldiMBFKkvytrXUZWaiPCEav8qDHKty44bD+qV1IP4T+w+xXRA==", + "version": "3.4.3", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz", + "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==", "dev": true }, "espree": { - "version": "9.3.3", - "resolved": "https://registry.npmjs.org/espree/-/espree-9.3.3.tgz", - "integrity": "sha512-ORs1Rt/uQTqUKjDdGCyrtYxbazf5umATSf/K4qxjmZHORR6HJk+2s/2Pqe+Kk49HHINC/xNIrGfgh8sZcll0ng==", + "version": "9.6.1", + "resolved": "https://registry.npmjs.org/espree/-/espree-9.6.1.tgz", + "integrity": "sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==", "dev": true, "requires": { - "acorn": "^8.8.0", + "acorn": "^8.9.0", "acorn-jsx": "^5.3.2", - "eslint-visitor-keys": "^3.3.0" + "eslint-visitor-keys": "^3.4.1" } }, "esprima": { @@ -6834,9 +6992,9 @@ "dev": true }, "esquery": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.4.0.tgz", - "integrity": "sha512-cCDispWt5vHHtwMY2YrAQ4ibFkAL8RbH5YGBnZBc90MolvvfkkQcJro/aZiAQUlQ3qgrYS6D6v8Gc5G5CQsc9w==", + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.5.0.tgz", + "integrity": "sha512-YQLXUplAwJgCydQ78IMJywZCceoqk1oH01OERdSAJc/7U2AylwjhSCLDEtqwg811idIS/9fIU5GjG73IgjKMVg==", "dev": true, "requires": { "estraverse": "^5.1.0" @@ -6887,16 +7045,16 @@ "dev": true }, "expect": { - "version": "28.1.3", - "resolved": "https://registry.npmjs.org/expect/-/expect-28.1.3.tgz", - "integrity": "sha512-eEh0xn8HlsuOBxFgIss+2mX85VAS4Qy3OSkjV7rlBWljtA4oWH37glVGyOZSZvErDT/yBywZdPGwCXuTvSG85g==", + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/expect/-/expect-29.7.0.tgz", + "integrity": "sha512-2Zks0hf1VLFYI1kbh0I5jP3KHHyCHpkfyHBzsSXRFgl/Bg9mWYfMW8oD+PdMPlEwy5HNsR9JutYy6pMeOh61nw==", "dev": true, "requires": { - "@jest/expect-utils": "^28.1.3", - "jest-get-type": "^28.0.2", - "jest-matcher-utils": "^28.1.3", - "jest-message-util": "^28.1.3", - "jest-util": "^28.1.3" + "@jest/expect-utils": "^29.7.0", + "jest-get-type": "^29.6.3", + "jest-matcher-utils": "^29.7.0", + "jest-message-util": "^29.7.0", + "jest-util": "^29.7.0" } }, "fast-deep-equal": { @@ -6905,29 +7063,11 @@ "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", "dev": true }, - "fast-glob": { - "version": "3.2.11", - "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.11.tgz", - "integrity": "sha512-xrO3+1bxSo3ZVHAnqzyuewYT6aMFHRAd4Kcs92MAonjwQZLsK9d0SF1IyQ3k5PoirxTW0Oe/RqFgMQ6TcNE5Ew==", - "dev": true, - "requires": { - "@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" - }, - "dependencies": { - "glob-parent": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", - "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", - "dev": true, - "requires": { - "is-glob": "^4.0.1" - } - } - } + "fast-fifo": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/fast-fifo/-/fast-fifo-1.3.2.tgz", + "integrity": "sha512-/d9sfos4yxzpwkDkuN7k2SqFKtYNmCTzgfEpz82x34IM9/zc8KGxQoXg1liNC/izpRM/MBdt44Nmx41ZWqk+FQ==", + "dev": true }, "fast-json-stable-stringify": { "version": "2.1.0", @@ -6942,18 +7082,18 @@ "dev": true }, "fastq": { - "version": "1.13.0", - "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.13.0.tgz", - "integrity": "sha512-YpkpUnK8od0o1hmeSc7UUs/eB/vIPWJYjKck2QKIzAf71Vm1AAQ3EbuZB3g2JIy+pg+ERD0vqI79KyZiB2e2Nw==", + "version": "1.15.0", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.15.0.tgz", + "integrity": "sha512-wBrocU2LCXXa+lWBt8RoIRD89Fi8OdABODa/kEnyeyjS5aZO5/GNvI5sEINADqP/h8M29UHTHUb53sUu5Ihqdw==", "dev": true, "requires": { "reusify": "^1.0.4" } }, "fb-watchman": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/fb-watchman/-/fb-watchman-2.0.1.tgz", - "integrity": "sha512-DkPJKQeY6kKwmuMretBhr7G6Vodr7bFwDYTXIkfG1gjvNpaxBTQV3PbXg6bR1c1UP4jPOX0jHUbbHANL9vRjVg==", + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/fb-watchman/-/fb-watchman-2.0.2.tgz", + "integrity": "sha512-p5161BqbuCaSnB8jIbzQHOlpgsPmK5rJVDfDKO91Axs5NC1uu3HRQm6wt9cd9/+GtQQIO53JdGXXoyDpTAsgYA==", "dev": true, "requires": { "bser": "2.1.1" @@ -7016,24 +7156,12 @@ "dev": true }, "fsevents": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", - "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", + "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", "dev": true, "optional": true }, - "function-bind": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", - "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", - "dev": true - }, - "functional-red-black-tree": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz", - "integrity": "sha512-dsKNQNdj6xA3T+QlADDA7mOSlX0qiMINjn0cgr+eGHGsbSHzTabcIogz2+p/iqP1Xs6EP/sS2SbqH+brGTbq0g==", - "dev": true - }, "gensync": { "version": "1.0.0-beta.2", "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", @@ -7088,23 +7216,12 @@ } }, "globals": { - "version": "11.12.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", - "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", - "dev": true - }, - "globby": { - "version": "11.1.0", - "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", - "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", + "version": "13.23.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.23.0.tgz", + "integrity": "sha512-XAmF0RjlrjY23MA51q3HltdlGxUpXPvg0GioKiD9X6HD28iMjo2dKC8Vqwm7lne4GNr78+RHTfliktR6ZH09wA==", "dev": true, "requires": { - "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" + "type-fest": "^0.20.2" } }, "graceful-fs": { @@ -7113,20 +7230,17 @@ "integrity": "sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==", "dev": true }, - "grapheme-splitter": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/grapheme-splitter/-/grapheme-splitter-1.0.4.tgz", - "integrity": "sha512-bzh50DW9kTPM00T8y4o8vQg89Di9oLJVLW/KaOGIXJWP/iqCN6WKYkbNOF04vFLJhwcpYUh9ydh/+5vpOqV4YQ==", + "graphemer": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/graphemer/-/graphemer-1.4.0.tgz", + "integrity": "sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==", "dev": true }, "has": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", - "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", - "dev": true, - "requires": { - "function-bind": "^1.1.1" - } + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/has/-/has-1.0.4.tgz", + "integrity": "sha512-qdSAmqLF6209RFj4VVItywPMbm3vWylknmB3nvNiUIs72xAimcM8nVYxYr7ncvZq5qzk9MKIZR8ijqD/1QuYjQ==", + "dev": true }, "has-flag": { "version": "4.0.0", @@ -7153,9 +7267,9 @@ "dev": true }, "ignore": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.0.tgz", - "integrity": "sha512-CmxgYGiEPCLhfLnpPp1MoRmifwEIOgjcHXxOBjv7mY96c+eWScsOP9c112ZyLdWHi0FxHjI+4uVhKYp/gcdRmQ==", + "version": "5.2.4", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.4.tgz", + "integrity": "sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ==", "dev": true }, "import-fresh": { @@ -7166,14 +7280,6 @@ "requires": { "parent-module": "^1.0.0", "resolve-from": "^4.0.0" - }, - "dependencies": { - "resolve-from": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", - "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", - "dev": true - } } }, "import-local": { @@ -7215,9 +7321,9 @@ "dev": true }, "is-core-module": { - "version": "2.9.0", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.9.0.tgz", - "integrity": "sha512-+5FPy5PnwmO3lvfMb0AsoPaBG+5KHUI0wYFXOtYPnVVVspTFUuMZNfNaNVRt3FZadstu2c8x23vykRW/NBoU6A==", + "version": "2.13.0", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.13.0.tgz", + "integrity": "sha512-Z7dk6Qo8pOCp3l4tsX2C5ZVas4V+UxwQodwZhLopL91TX8UyyHEXafPcyoeeWuLrwzHcr3igO78wNLwHJHsMCQ==", "dev": true, "requires": { "has": "^1.0.3" @@ -7256,6 +7362,12 @@ "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", "dev": true }, + "is-path-inside": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz", + "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==", + "dev": true + }, "is-stream": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", @@ -7281,26 +7393,52 @@ "dev": true }, "istanbul-lib-instrument": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-5.2.0.tgz", - "integrity": "sha512-6Lthe1hqXHBNsqvgDzGO6l03XNeu3CrG4RqQ1KM9+l5+jNGpEJfIELx1NS3SEHmJQA8np/u+E4EPRKRiu6m19A==", + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-6.0.1.tgz", + "integrity": "sha512-EAMEJBsYuyyztxMxW3g7ugGPkrZsV57v0Hmv3mm1uQsmB+QnZuepg731CRaIgeUVSdmsTngOkSnauNF8p7FIhA==", "dev": true, "requires": { "@babel/core": "^7.12.3", "@babel/parser": "^7.14.7", "@istanbuljs/schema": "^0.1.2", "istanbul-lib-coverage": "^3.2.0", - "semver": "^6.3.0" + "semver": "^7.5.4" + }, + "dependencies": { + "lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dev": true, + "requires": { + "yallist": "^4.0.0" + } + }, + "semver": { + "version": "7.5.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", + "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", + "dev": true, + "requires": { + "lru-cache": "^6.0.0" + } + }, + "yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true + } } }, "istanbul-lib-report": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz", - "integrity": "sha512-wcdi+uAKzfiGT2abPpKZ0hSU1rGQjUQnLvtY5MpQ7QCTahD3VODhcu4wcfY1YtkGaDD5yuydOLINXsfbus9ROw==", + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-3.0.1.tgz", + "integrity": "sha512-GCfE1mtsHGOELCU8e/Z7YWzpmybrx/+dSTfLrvY8qRmaY6zXTKWn6WQIjaAFw069icm6GVMNkgu0NzI4iPZUNw==", "dev": true, "requires": { "istanbul-lib-coverage": "^3.0.0", - "make-dir": "^3.0.0", + "make-dir": "^4.0.0", "supports-color": "^7.1.0" } }, @@ -7316,9 +7454,9 @@ } }, "istanbul-reports": { - "version": "3.1.5", - "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.1.5.tgz", - "integrity": "sha512-nUsEMa9pBt/NOHqbcbeJEgqIlY/K7rVWUX6Lql2orY5e9roQOthbR3vtY4zzf2orPELg80fnxxk9zUyPlgwD1w==", + "version": "3.1.6", + "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.1.6.tgz", + "integrity": "sha512-TLgnMkKg3iTDsQ9PbPTdpfAK2DzjF9mqUG7RMgcQl8oFjad8ob4laGxv5XV5U9MAfx8D6tSJiUyuAwzLicaxlg==", "dev": true, "requires": { "html-escaper": "^2.0.0", @@ -7326,400 +7464,414 @@ } }, "jest": { - "version": "28.1.3", - "resolved": "https://registry.npmjs.org/jest/-/jest-28.1.3.tgz", - "integrity": "sha512-N4GT5on8UkZgH0O5LUavMRV1EDEhNTL0KEfRmDIeZHSV7p2XgLoY9t9VDUgL6o+yfdgYHVxuz81G8oB9VG5uyA==", + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest/-/jest-29.7.0.tgz", + "integrity": "sha512-NIy3oAFp9shda19hy4HK0HRTWKtPJmGdnvywu01nOqNC2vZg+Z+fvJDxpMQA88eb2I9EcafcdjYgsDthnYTvGw==", "dev": true, "requires": { - "@jest/core": "^28.1.3", - "@jest/types": "^28.1.3", + "@jest/core": "^29.7.0", + "@jest/types": "^29.6.3", "import-local": "^3.0.2", - "jest-cli": "^28.1.3" + "jest-cli": "^29.7.0" } }, "jest-changed-files": { - "version": "28.1.3", - "resolved": "https://registry.npmjs.org/jest-changed-files/-/jest-changed-files-28.1.3.tgz", - "integrity": "sha512-esaOfUWJXk2nfZt9SPyC8gA1kNfdKLkQWyzsMlqq8msYSlNKfmZxfRgZn4Cd4MGVUF+7v6dBs0d5TOAKa7iIiA==", + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-changed-files/-/jest-changed-files-29.7.0.tgz", + "integrity": "sha512-fEArFiwf1BpQ+4bXSprcDc3/x4HSzL4al2tozwVpDFpsxALjLYdyiIK4e5Vz66GQJIbXJ82+35PtysofptNX2w==", "dev": true, "requires": { "execa": "^5.0.0", + "jest-util": "^29.7.0", "p-limit": "^3.1.0" } }, "jest-circus": { - "version": "28.1.3", - "resolved": "https://registry.npmjs.org/jest-circus/-/jest-circus-28.1.3.tgz", - "integrity": "sha512-cZ+eS5zc79MBwt+IhQhiEp0OeBddpc1n8MBo1nMB8A7oPMKEO+Sre+wHaLJexQUj9Ya/8NOBY0RESUgYjB6fow==", + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-circus/-/jest-circus-29.7.0.tgz", + "integrity": "sha512-3E1nCMgipcTkCocFwM90XXQab9bS+GMsjdpmPrlelaxwD93Ad8iVEjX/vvHPdLPnFf+L40u+5+iutRdA1N9myw==", "dev": true, "requires": { - "@jest/environment": "^28.1.3", - "@jest/expect": "^28.1.3", - "@jest/test-result": "^28.1.3", - "@jest/types": "^28.1.3", + "@jest/environment": "^29.7.0", + "@jest/expect": "^29.7.0", + "@jest/test-result": "^29.7.0", + "@jest/types": "^29.6.3", "@types/node": "*", "chalk": "^4.0.0", "co": "^4.6.0", - "dedent": "^0.7.0", + "dedent": "^1.0.0", "is-generator-fn": "^2.0.0", - "jest-each": "^28.1.3", - "jest-matcher-utils": "^28.1.3", - "jest-message-util": "^28.1.3", - "jest-runtime": "^28.1.3", - "jest-snapshot": "^28.1.3", - "jest-util": "^28.1.3", + "jest-each": "^29.7.0", + "jest-matcher-utils": "^29.7.0", + "jest-message-util": "^29.7.0", + "jest-runtime": "^29.7.0", + "jest-snapshot": "^29.7.0", + "jest-util": "^29.7.0", "p-limit": "^3.1.0", - "pretty-format": "^28.1.3", + "pretty-format": "^29.7.0", + "pure-rand": "^6.0.0", "slash": "^3.0.0", "stack-utils": "^2.0.3" } }, "jest-cli": { - "version": "28.1.3", - "resolved": "https://registry.npmjs.org/jest-cli/-/jest-cli-28.1.3.tgz", - "integrity": "sha512-roY3kvrv57Azn1yPgdTebPAXvdR2xfezaKKYzVxZ6It/5NCxzJym6tUI5P1zkdWhfUYkxEI9uZWcQdaFLo8mJQ==", + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-cli/-/jest-cli-29.7.0.tgz", + "integrity": "sha512-OVVobw2IubN/GSYsxETi+gOe7Ka59EFMR/twOU3Jb2GnKKeMGJB5SGUUrEz3SFVmJASUdZUzy83sLNNQ2gZslg==", "dev": true, "requires": { - "@jest/core": "^28.1.3", - "@jest/test-result": "^28.1.3", - "@jest/types": "^28.1.3", + "@jest/core": "^29.7.0", + "@jest/test-result": "^29.7.0", + "@jest/types": "^29.6.3", "chalk": "^4.0.0", + "create-jest": "^29.7.0", "exit": "^0.1.2", - "graceful-fs": "^4.2.9", "import-local": "^3.0.2", - "jest-config": "^28.1.3", - "jest-util": "^28.1.3", - "jest-validate": "^28.1.3", - "prompts": "^2.0.1", + "jest-config": "^29.7.0", + "jest-util": "^29.7.0", + "jest-validate": "^29.7.0", "yargs": "^17.3.1" } }, "jest-config": { - "version": "28.1.3", - "resolved": "https://registry.npmjs.org/jest-config/-/jest-config-28.1.3.tgz", - "integrity": "sha512-MG3INjByJ0J4AsNBm7T3hsuxKQqFIiRo/AUqb1q9LRKI5UU6Aar9JHbr9Ivn1TVwfUD9KirRoM/T6u8XlcQPHQ==", + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-config/-/jest-config-29.7.0.tgz", + "integrity": "sha512-uXbpfeQ7R6TZBqI3/TxCU4q4ttk3u0PJeC+E0zbfSoSjq6bJ7buBPxzQPL0ifrkY4DNu4JUdk0ImlBUYi840eQ==", "dev": true, "requires": { "@babel/core": "^7.11.6", - "@jest/test-sequencer": "^28.1.3", - "@jest/types": "^28.1.3", - "babel-jest": "^28.1.3", + "@jest/test-sequencer": "^29.7.0", + "@jest/types": "^29.6.3", + "babel-jest": "^29.7.0", "chalk": "^4.0.0", "ci-info": "^3.2.0", "deepmerge": "^4.2.2", "glob": "^7.1.3", "graceful-fs": "^4.2.9", - "jest-circus": "^28.1.3", - "jest-environment-node": "^28.1.3", - "jest-get-type": "^28.0.2", - "jest-regex-util": "^28.0.2", - "jest-resolve": "^28.1.3", - "jest-runner": "^28.1.3", - "jest-util": "^28.1.3", - "jest-validate": "^28.1.3", + "jest-circus": "^29.7.0", + "jest-environment-node": "^29.7.0", + "jest-get-type": "^29.6.3", + "jest-regex-util": "^29.6.3", + "jest-resolve": "^29.7.0", + "jest-runner": "^29.7.0", + "jest-util": "^29.7.0", + "jest-validate": "^29.7.0", "micromatch": "^4.0.4", "parse-json": "^5.2.0", - "pretty-format": "^28.1.3", + "pretty-format": "^29.7.0", "slash": "^3.0.0", "strip-json-comments": "^3.1.1" } }, "jest-diff": { - "version": "28.1.3", - "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-28.1.3.tgz", - "integrity": "sha512-8RqP1B/OXzjjTWkqMX67iqgwBVJRgCyKD3L9nq+6ZqJMdvjE8RgHktqZ6jNrkdMT+dJuYNI3rhQpxaz7drJHfw==", + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-29.7.0.tgz", + "integrity": "sha512-LMIgiIrhigmPrs03JHpxUh2yISK3vLFPkAodPeo0+BuF7wA2FoQbkEg1u8gBYBThncu7e1oEDUfIXVuTqLRUjw==", "dev": true, "requires": { "chalk": "^4.0.0", - "diff-sequences": "^28.1.1", - "jest-get-type": "^28.0.2", - "pretty-format": "^28.1.3" + "diff-sequences": "^29.6.3", + "jest-get-type": "^29.6.3", + "pretty-format": "^29.7.0" } }, "jest-docblock": { - "version": "28.1.1", - "resolved": "https://registry.npmjs.org/jest-docblock/-/jest-docblock-28.1.1.tgz", - "integrity": "sha512-3wayBVNiOYx0cwAbl9rwm5kKFP8yHH3d/fkEaL02NPTkDojPtheGB7HZSFY4wzX+DxyrvhXz0KSCVksmCknCuA==", + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-docblock/-/jest-docblock-29.7.0.tgz", + "integrity": "sha512-q617Auw3A612guyaFgsbFeYpNP5t2aoUNLwBUbc/0kD1R4t9ixDbyFTHd1nok4epoVFpr7PmeWHrhvuV3XaJ4g==", "dev": true, "requires": { "detect-newline": "^3.0.0" } }, "jest-each": { - "version": "28.1.3", - "resolved": "https://registry.npmjs.org/jest-each/-/jest-each-28.1.3.tgz", - "integrity": "sha512-arT1z4sg2yABU5uogObVPvSlSMQlDA48owx07BDPAiasW0yYpYHYOo4HHLz9q0BVzDVU4hILFjzJw0So9aCL/g==", + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-each/-/jest-each-29.7.0.tgz", + "integrity": "sha512-gns+Er14+ZrEoC5fhOfYCY1LOHHr0TI+rQUHZS8Ttw2l7gl+80eHc/gFf2Ktkw0+SIACDTeWvpFcv3B04VembQ==", "dev": true, "requires": { - "@jest/types": "^28.1.3", + "@jest/types": "^29.6.3", "chalk": "^4.0.0", - "jest-get-type": "^28.0.2", - "jest-util": "^28.1.3", - "pretty-format": "^28.1.3" + "jest-get-type": "^29.6.3", + "jest-util": "^29.7.0", + "pretty-format": "^29.7.0" } }, "jest-environment-node": { - "version": "28.1.3", - "resolved": "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-28.1.3.tgz", - "integrity": "sha512-ugP6XOhEpjAEhGYvp5Xj989ns5cB1K6ZdjBYuS30umT4CQEETaxSiPcZ/E1kFktX4GkrcM4qu07IIlDYX1gp+A==", + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-29.7.0.tgz", + "integrity": "sha512-DOSwCRqXirTOyheM+4d5YZOrWcdu0LNZ87ewUoywbcb2XR4wKgqiG8vNeYwhjFMbEkfju7wx2GYH0P2gevGvFw==", "dev": true, "requires": { - "@jest/environment": "^28.1.3", - "@jest/fake-timers": "^28.1.3", - "@jest/types": "^28.1.3", + "@jest/environment": "^29.7.0", + "@jest/fake-timers": "^29.7.0", + "@jest/types": "^29.6.3", "@types/node": "*", - "jest-mock": "^28.1.3", - "jest-util": "^28.1.3" + "jest-mock": "^29.7.0", + "jest-util": "^29.7.0" } }, "jest-get-type": { - "version": "28.0.2", - "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-28.0.2.tgz", - "integrity": "sha512-ioj2w9/DxSYHfOm5lJKCdcAmPJzQXmbM/Url3rhlghrPvT3tt+7a/+oXc9azkKmLvoiXjtV83bEWqi+vs5nlPA==", + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-29.6.3.tgz", + "integrity": "sha512-zrteXnqYxfQh7l5FHyL38jL39di8H8rHoecLH3JNxH3BwOrBsNeabdap5e0I23lD4HHI8W5VFBZqG4Eaq5LNcw==", "dev": true }, "jest-haste-map": { - "version": "28.1.3", - "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-28.1.3.tgz", - "integrity": "sha512-3S+RQWDXccXDKSWnkHa/dPwt+2qwA8CJzR61w3FoYCvoo3Pn8tvGcysmMF0Bj0EX5RYvAI2EIvC57OmotfdtKA==", + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-29.7.0.tgz", + "integrity": "sha512-fP8u2pyfqx0K1rGn1R9pyE0/KTn+G7PxktWidOBTqFPLYX0b9ksaMFkhK5vrS3DVun09pckLdlx90QthlW7AmA==", "dev": true, "requires": { - "@jest/types": "^28.1.3", + "@jest/types": "^29.6.3", "@types/graceful-fs": "^4.1.3", "@types/node": "*", "anymatch": "^3.0.3", "fb-watchman": "^2.0.0", "fsevents": "^2.3.2", "graceful-fs": "^4.2.9", - "jest-regex-util": "^28.0.2", - "jest-util": "^28.1.3", - "jest-worker": "^28.1.3", + "jest-regex-util": "^29.6.3", + "jest-util": "^29.7.0", + "jest-worker": "^29.7.0", "micromatch": "^4.0.4", "walker": "^1.0.8" } }, "jest-jasmine2": { - "version": "28.1.3", - "resolved": "https://registry.npmjs.org/jest-jasmine2/-/jest-jasmine2-28.1.3.tgz", - "integrity": "sha512-nlNWJY1u62w+WAVgnXOQTdxFdZhqlxpKvMTn1cOK1QHX2oRrkPV3JcIcJfXwcGcifttOJZhExcgDUqSHrYQ6Dw==", + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-jasmine2/-/jest-jasmine2-29.7.0.tgz", + "integrity": "sha512-N3nRpBVTM5erHtMi6ODBUEqG/LpVgSJC8qk14duw88d9Eigx2vL+n4LF1d8eV8pegnnzKyNHdTGxa/NsIKj0Zw==", "dev": true, "requires": { - "@jest/environment": "^28.1.3", - "@jest/expect": "^28.1.3", - "@jest/source-map": "^28.1.2", - "@jest/test-result": "^28.1.3", - "@jest/types": "^28.1.3", + "@jest/environment": "^29.7.0", + "@jest/expect": "^29.7.0", + "@jest/source-map": "^29.6.3", + "@jest/test-result": "^29.7.0", + "@jest/types": "^29.6.3", "@types/node": "*", "chalk": "^4.0.0", "co": "^4.6.0", "is-generator-fn": "^2.0.0", - "jest-each": "^28.1.3", - "jest-matcher-utils": "^28.1.3", - "jest-message-util": "^28.1.3", - "jest-runtime": "^28.1.3", - "jest-snapshot": "^28.1.3", - "jest-util": "^28.1.3", + "jest-each": "^29.7.0", + "jest-matcher-utils": "^29.7.0", + "jest-message-util": "^29.7.0", + "jest-runtime": "^29.7.0", + "jest-snapshot": "^29.7.0", + "jest-util": "^29.7.0", "p-limit": "^3.1.0", - "pretty-format": "^28.1.3" + "pretty-format": "^29.7.0" } }, "jest-leak-detector": { - "version": "28.1.3", - "resolved": "https://registry.npmjs.org/jest-leak-detector/-/jest-leak-detector-28.1.3.tgz", - "integrity": "sha512-WFVJhnQsiKtDEo5lG2mM0v40QWnBM+zMdHHyJs8AWZ7J0QZJS59MsyKeJHWhpBZBH32S48FOVvGyOFT1h0DlqA==", + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-leak-detector/-/jest-leak-detector-29.7.0.tgz", + "integrity": "sha512-kYA8IJcSYtST2BY9I+SMC32nDpBT3J2NvWJx8+JCuCdl/CR1I4EKUJROiP8XtCcxqgTTBGJNdbB1A8XRKbTetw==", "dev": true, "requires": { - "jest-get-type": "^28.0.2", - "pretty-format": "^28.1.3" + "jest-get-type": "^29.6.3", + "pretty-format": "^29.7.0" } }, "jest-matcher-utils": { - "version": "28.1.3", - "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-28.1.3.tgz", - "integrity": "sha512-kQeJ7qHemKfbzKoGjHHrRKH6atgxMk8Enkk2iPQ3XwO6oE/KYD8lMYOziCkeSB9G4adPM4nR1DE8Tf5JeWH6Bw==", + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-29.7.0.tgz", + "integrity": "sha512-sBkD+Xi9DtcChsI3L3u0+N0opgPYnCRPtGcQYrgXmR+hmt/fYfWAL0xRXYU8eWOdfuLgBe0YCW3AFtnRLagq/g==", "dev": true, "requires": { "chalk": "^4.0.0", - "jest-diff": "^28.1.3", - "jest-get-type": "^28.0.2", - "pretty-format": "^28.1.3" + "jest-diff": "^29.7.0", + "jest-get-type": "^29.6.3", + "pretty-format": "^29.7.0" } }, "jest-message-util": { - "version": "28.1.3", - "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-28.1.3.tgz", - "integrity": "sha512-PFdn9Iewbt575zKPf1286Ht9EPoJmYT7P0kY+RibeYZ2XtOr53pDLEFoTWXbd1h4JiGiWpTBC84fc8xMXQMb7g==", + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-29.7.0.tgz", + "integrity": "sha512-GBEV4GRADeP+qtB2+6u61stea8mGcOT4mCtrYISZwfu9/ISHFJ/5zOMXYbpBE9RsS5+Gb63DW4FgmnKJ79Kf6w==", "dev": true, "requires": { "@babel/code-frame": "^7.12.13", - "@jest/types": "^28.1.3", + "@jest/types": "^29.6.3", "@types/stack-utils": "^2.0.0", "chalk": "^4.0.0", "graceful-fs": "^4.2.9", "micromatch": "^4.0.4", - "pretty-format": "^28.1.3", + "pretty-format": "^29.7.0", "slash": "^3.0.0", "stack-utils": "^2.0.3" } }, "jest-mock": { - "version": "28.1.3", - "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-28.1.3.tgz", - "integrity": "sha512-o3J2jr6dMMWYVH4Lh/NKmDXdosrsJgi4AviS8oXLujcjpCMBb1FMsblDnOXKZKfSiHLxYub1eS0IHuRXsio9eA==", + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-29.7.0.tgz", + "integrity": "sha512-ITOMZn+UkYS4ZFh83xYAOzWStloNzJFO2s8DWrE4lhtGD+AorgnbkiKERe4wQVBydIGPx059g6riW5Btp6Llnw==", "dev": true, "requires": { - "@jest/types": "^28.1.3", - "@types/node": "*" + "@jest/types": "^29.6.3", + "@types/node": "*", + "jest-util": "^29.7.0" } }, "jest-pnp-resolver": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/jest-pnp-resolver/-/jest-pnp-resolver-1.2.2.tgz", - "integrity": "sha512-olV41bKSMm8BdnuMsewT4jqlZ8+3TCARAXjZGT9jcoSnrfUnRCqnMoF9XEeoWjbzObpqF9dRhHQj0Xb9QdF6/w==", + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/jest-pnp-resolver/-/jest-pnp-resolver-1.2.3.tgz", + "integrity": "sha512-+3NpwQEnRoIBtx4fyhblQDPgJI0H1IEIkX7ShLUjPGA7TtUTvI1oiKi3SR4oBR0hQhQR80l4WAe5RrXBwWMA8w==", "dev": true, "requires": {} }, "jest-regex-util": { - "version": "28.0.2", - "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-28.0.2.tgz", - "integrity": "sha512-4s0IgyNIy0y9FK+cjoVYoxamT7Zeo7MhzqRGx7YDYmaQn1wucY9rotiGkBzzcMXTtjrCAP/f7f+E0F7+fxPNdw==", + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-29.6.3.tgz", + "integrity": "sha512-KJJBsRCyyLNWCNBOvZyRDnAIfUiRJ8v+hOBQYGn8gDyF3UegwiP4gwRR3/SDa42g1YbVycTidUF3rKjyLFDWbg==", "dev": true }, "jest-resolve": { - "version": "28.1.3", - "resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-28.1.3.tgz", - "integrity": "sha512-Z1W3tTjE6QaNI90qo/BJpfnvpxtaFTFw5CDgwpyE/Kz8U/06N1Hjf4ia9quUhCh39qIGWF1ZuxFiBiJQwSEYKQ==", + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-29.7.0.tgz", + "integrity": "sha512-IOVhZSrg+UvVAshDSDtHyFCCBUl/Q3AAJv8iZ6ZjnZ74xzvwuzLXid9IIIPgTnY62SJjfuupMKZsZQRsCvxEgA==", "dev": true, "requires": { "chalk": "^4.0.0", "graceful-fs": "^4.2.9", - "jest-haste-map": "^28.1.3", + "jest-haste-map": "^29.7.0", "jest-pnp-resolver": "^1.2.2", - "jest-util": "^28.1.3", - "jest-validate": "^28.1.3", + "jest-util": "^29.7.0", + "jest-validate": "^29.7.0", "resolve": "^1.20.0", - "resolve.exports": "^1.1.0", + "resolve.exports": "^2.0.0", "slash": "^3.0.0" } }, "jest-resolve-dependencies": { - "version": "28.1.3", - "resolved": "https://registry.npmjs.org/jest-resolve-dependencies/-/jest-resolve-dependencies-28.1.3.tgz", - "integrity": "sha512-qa0QO2Q0XzQoNPouMbCc7Bvtsem8eQgVPNkwn9LnS+R2n8DaVDPL/U1gngC0LTl1RYXJU0uJa2BMC2DbTfFrHA==", + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-resolve-dependencies/-/jest-resolve-dependencies-29.7.0.tgz", + "integrity": "sha512-un0zD/6qxJ+S0et7WxeI3H5XSe9lTBBR7bOHCHXkKR6luG5mwDDlIzVQ0V5cZCuoTgEdcdwzTghYkTWfubi+nA==", "dev": true, "requires": { - "jest-regex-util": "^28.0.2", - "jest-snapshot": "^28.1.3" + "jest-regex-util": "^29.6.3", + "jest-snapshot": "^29.7.0" } }, "jest-runner": { - "version": "28.1.3", - "resolved": "https://registry.npmjs.org/jest-runner/-/jest-runner-28.1.3.tgz", - "integrity": "sha512-GkMw4D/0USd62OVO0oEgjn23TM+YJa2U2Wu5zz9xsQB1MxWKDOlrnykPxnMsN0tnJllfLPinHTka61u0QhaxBA==", + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-runner/-/jest-runner-29.7.0.tgz", + "integrity": "sha512-fsc4N6cPCAahybGBfTRcq5wFR6fpLznMg47sY5aDpsoejOcVYFb07AHuSnR0liMcPTgBsA3ZJL6kFOjPdoNipQ==", "dev": true, "requires": { - "@jest/console": "^28.1.3", - "@jest/environment": "^28.1.3", - "@jest/test-result": "^28.1.3", - "@jest/transform": "^28.1.3", - "@jest/types": "^28.1.3", + "@jest/console": "^29.7.0", + "@jest/environment": "^29.7.0", + "@jest/test-result": "^29.7.0", + "@jest/transform": "^29.7.0", + "@jest/types": "^29.6.3", "@types/node": "*", "chalk": "^4.0.0", - "emittery": "^0.10.2", + "emittery": "^0.13.1", "graceful-fs": "^4.2.9", - "jest-docblock": "^28.1.1", - "jest-environment-node": "^28.1.3", - "jest-haste-map": "^28.1.3", - "jest-leak-detector": "^28.1.3", - "jest-message-util": "^28.1.3", - "jest-resolve": "^28.1.3", - "jest-runtime": "^28.1.3", - "jest-util": "^28.1.3", - "jest-watcher": "^28.1.3", - "jest-worker": "^28.1.3", + "jest-docblock": "^29.7.0", + "jest-environment-node": "^29.7.0", + "jest-haste-map": "^29.7.0", + "jest-leak-detector": "^29.7.0", + "jest-message-util": "^29.7.0", + "jest-resolve": "^29.7.0", + "jest-runtime": "^29.7.0", + "jest-util": "^29.7.0", + "jest-watcher": "^29.7.0", + "jest-worker": "^29.7.0", "p-limit": "^3.1.0", "source-map-support": "0.5.13" } }, "jest-runtime": { - "version": "28.1.3", - "resolved": "https://registry.npmjs.org/jest-runtime/-/jest-runtime-28.1.3.tgz", - "integrity": "sha512-NU+881ScBQQLc1JHG5eJGU7Ui3kLKrmwCPPtYsJtBykixrM2OhVQlpMmFWJjMyDfdkGgBMNjXCGB/ebzsgNGQw==", - "dev": true, - "requires": { - "@jest/environment": "^28.1.3", - "@jest/fake-timers": "^28.1.3", - "@jest/globals": "^28.1.3", - "@jest/source-map": "^28.1.2", - "@jest/test-result": "^28.1.3", - "@jest/transform": "^28.1.3", - "@jest/types": "^28.1.3", + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-runtime/-/jest-runtime-29.7.0.tgz", + "integrity": "sha512-gUnLjgwdGqW7B4LvOIkbKs9WGbn+QLqRQQ9juC6HndeDiezIwhDP+mhMwHWCEcfQ5RUXa6OPnFF8BJh5xegwwQ==", + "dev": true, + "requires": { + "@jest/environment": "^29.7.0", + "@jest/fake-timers": "^29.7.0", + "@jest/globals": "^29.7.0", + "@jest/source-map": "^29.6.3", + "@jest/test-result": "^29.7.0", + "@jest/transform": "^29.7.0", + "@jest/types": "^29.6.3", + "@types/node": "*", "chalk": "^4.0.0", "cjs-module-lexer": "^1.0.0", "collect-v8-coverage": "^1.0.0", - "execa": "^5.0.0", "glob": "^7.1.3", "graceful-fs": "^4.2.9", - "jest-haste-map": "^28.1.3", - "jest-message-util": "^28.1.3", - "jest-mock": "^28.1.3", - "jest-regex-util": "^28.0.2", - "jest-resolve": "^28.1.3", - "jest-snapshot": "^28.1.3", - "jest-util": "^28.1.3", + "jest-haste-map": "^29.7.0", + "jest-message-util": "^29.7.0", + "jest-mock": "^29.7.0", + "jest-regex-util": "^29.6.3", + "jest-resolve": "^29.7.0", + "jest-snapshot": "^29.7.0", + "jest-util": "^29.7.0", "slash": "^3.0.0", "strip-bom": "^4.0.0" } }, "jest-snapshot": { - "version": "28.1.3", - "resolved": "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-28.1.3.tgz", - "integrity": "sha512-4lzMgtiNlc3DU/8lZfmqxN3AYD6GGLbl+72rdBpXvcV+whX7mDrREzkPdp2RnmfIiWBg1YbuFSkXduF2JcafJg==", + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-29.7.0.tgz", + "integrity": "sha512-Rm0BMWtxBcioHr1/OX5YCP8Uov4riHvKPknOGs804Zg9JGZgmIBkbtlxJC/7Z4msKYVbIJtfU+tKb8xlYNfdkw==", "dev": true, "requires": { "@babel/core": "^7.11.6", "@babel/generator": "^7.7.2", + "@babel/plugin-syntax-jsx": "^7.7.2", "@babel/plugin-syntax-typescript": "^7.7.2", - "@babel/traverse": "^7.7.2", "@babel/types": "^7.3.3", - "@jest/expect-utils": "^28.1.3", - "@jest/transform": "^28.1.3", - "@jest/types": "^28.1.3", - "@types/babel__traverse": "^7.0.6", - "@types/prettier": "^2.1.5", + "@jest/expect-utils": "^29.7.0", + "@jest/transform": "^29.7.0", + "@jest/types": "^29.6.3", "babel-preset-current-node-syntax": "^1.0.0", "chalk": "^4.0.0", - "expect": "^28.1.3", + "expect": "^29.7.0", "graceful-fs": "^4.2.9", - "jest-diff": "^28.1.3", - "jest-get-type": "^28.0.2", - "jest-haste-map": "^28.1.3", - "jest-matcher-utils": "^28.1.3", - "jest-message-util": "^28.1.3", - "jest-util": "^28.1.3", + "jest-diff": "^29.7.0", + "jest-get-type": "^29.6.3", + "jest-matcher-utils": "^29.7.0", + "jest-message-util": "^29.7.0", + "jest-util": "^29.7.0", "natural-compare": "^1.4.0", - "pretty-format": "^28.1.3", - "semver": "^7.3.5" + "pretty-format": "^29.7.0", + "semver": "^7.5.3" }, "dependencies": { + "lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dev": true, + "requires": { + "yallist": "^4.0.0" + } + }, "semver": { - "version": "7.3.7", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.7.tgz", - "integrity": "sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g==", + "version": "7.5.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", + "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", "dev": true, "requires": { "lru-cache": "^6.0.0" } + }, + "yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true } } }, "jest-util": { - "version": "28.1.3", - "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-28.1.3.tgz", - "integrity": "sha512-XdqfpHwpcSRko/C35uLYFM2emRAltIIKZiJ9eAmhjsj0CqZMa0p1ib0R5fWIqGhn1a103DebTbpqIaP1qCQ6tQ==", + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-29.7.0.tgz", + "integrity": "sha512-z6EbKajIpqGKU56y5KBUgy1dt1ihhQJgWzUlZHArA/+X2ad7Cb5iF+AK1EWVL/Bo7Rz9uurpqw6SiBCefUbCGA==", "dev": true, "requires": { - "@jest/types": "^28.1.3", + "@jest/types": "^29.6.3", "@types/node": "*", "chalk": "^4.0.0", "ci-info": "^3.2.0", @@ -7728,17 +7880,17 @@ } }, "jest-validate": { - "version": "28.1.3", - "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-28.1.3.tgz", - "integrity": "sha512-SZbOGBWEsaTxBGCOpsRWlXlvNkvTkY0XxRfh7zYmvd8uL5Qzyg0CHAXiXKROflh801quA6+/DsT4ODDthOC/OA==", + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-29.7.0.tgz", + "integrity": "sha512-ZB7wHqaRGVw/9hST/OuFUReG7M8vKeq0/J2egIGLdvjHCmYqGARhzXmtgi+gVeZ5uXFF219aOc3Ls2yLg27tkw==", "dev": true, "requires": { - "@jest/types": "^28.1.3", + "@jest/types": "^29.6.3", "camelcase": "^6.2.0", "chalk": "^4.0.0", - "jest-get-type": "^28.0.2", + "jest-get-type": "^29.6.3", "leven": "^3.1.0", - "pretty-format": "^28.1.3" + "pretty-format": "^29.7.0" }, "dependencies": { "camelcase": { @@ -7750,28 +7902,29 @@ } }, "jest-watcher": { - "version": "28.1.3", - "resolved": "https://registry.npmjs.org/jest-watcher/-/jest-watcher-28.1.3.tgz", - "integrity": "sha512-t4qcqj9hze+jviFPUN3YAtAEeFnr/azITXQEMARf5cMwKY2SMBRnCQTXLixTl20OR6mLh9KLMrgVJgJISym+1g==", + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-watcher/-/jest-watcher-29.7.0.tgz", + "integrity": "sha512-49Fg7WXkU3Vl2h6LbLtMQ/HyB6rXSIX7SqvBLQmssRBGN9I0PNvPmAmCWSOY6SOvrjhI/F7/bGAv9RtnsPA03g==", "dev": true, "requires": { - "@jest/test-result": "^28.1.3", - "@jest/types": "^28.1.3", + "@jest/test-result": "^29.7.0", + "@jest/types": "^29.6.3", "@types/node": "*", "ansi-escapes": "^4.2.1", "chalk": "^4.0.0", - "emittery": "^0.10.2", - "jest-util": "^28.1.3", + "emittery": "^0.13.1", + "jest-util": "^29.7.0", "string-length": "^4.0.1" } }, "jest-worker": { - "version": "28.1.3", - "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-28.1.3.tgz", - "integrity": "sha512-CqRA220YV/6jCo8VWvAt1KKx6eek1VIHMPeLEbpcfSfkEeWyBNppynM/o6q+Wmw+sOhos2ml34wZbSX3G13//g==", + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-29.7.0.tgz", + "integrity": "sha512-eIz2msL/EzL9UFTFFx7jBTkeZfku0yUAyZZZmJ93H2TYEiroIx2PQjEXcwYtYl8zXCxb+PAmA2hLIt/6ZEkPHw==", "dev": true, "requires": { "@types/node": "*", + "jest-util": "^29.7.0", "merge-stream": "^2.0.0", "supports-color": "^8.0.0" }, @@ -7794,13 +7947,12 @@ "dev": true }, "js-yaml": { - "version": "3.14.1", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", - "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", + "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", "dev": true, "requires": { - "argparse": "^1.0.7", - "esprima": "^4.0.0" + "argparse": "^2.0.1" } }, "jsesc": { @@ -7942,21 +8094,47 @@ "dev": true }, "lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", + "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", "dev": true, "requires": { - "yallist": "^4.0.0" + "yallist": "^3.0.2" } }, "make-dir": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", - "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-4.0.0.tgz", + "integrity": "sha512-hXdUTZYIVOt1Ex//jAQi+wTZZpUpwBj/0QsOzqegb3rGMMeJiSEu5xLHnYfBrRV4RH2+OCSOO95Is/7x1WJ4bw==", "dev": true, "requires": { - "semver": "^6.0.0" + "semver": "^7.5.3" + }, + "dependencies": { + "lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dev": true, + "requires": { + "yallist": "^4.0.0" + } + }, + "semver": { + "version": "7.5.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", + "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", + "dev": true, + "requires": { + "lru-cache": "^6.0.0" + } + }, + "yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true + } } }, "makeerror": { @@ -7974,12 +8152,6 @@ "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", "dev": true }, - "merge2": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", - "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", - "dev": true - }, "micromatch": { "version": "4.0.5", "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", @@ -8036,6 +8208,15 @@ "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", "dev": true }, + "node-fetch": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.7.0.tgz", + "integrity": "sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==", + "dev": true, + "requires": { + "whatwg-url": "^5.0.0" + } + }, "node-int64": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/node-int64/-/node-int64-0.4.0.tgz", @@ -8043,9 +8224,9 @@ "dev": true }, "node-releases": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.6.tgz", - "integrity": "sha512-PiVXnNuFm5+iYkLBNeq5211hvO38y63T0i2KKh2KnUs3RpzJ+JtODFjkD8yjLwnDkTYF1eKXheUwdssR+NRZdg==", + "version": "2.0.13", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.13.tgz", + "integrity": "sha512-uYr7J37ae/ORWdZeQ1xxMJe3NtdmqMC/JZK+geofDrkLUApKRHPd18/TxtBOJ4A0/+uUIliorNrfYV6s1b02eQ==", "dev": true }, "normalize-path": { @@ -8082,17 +8263,17 @@ } }, "optionator": { - "version": "0.9.1", - "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.1.tgz", - "integrity": "sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw==", + "version": "0.9.3", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.3.tgz", + "integrity": "sha512-JjCoypp+jKn1ttEFExxhetCKeJt9zhAgAve5FXHixTvFDW/5aEktX9bufBKLRRMdU7bNtpLfcGu94B3cdEJgjg==", "dev": true, "requires": { + "@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" + "type-check": "^0.4.0" } }, "p-limit": { @@ -8175,12 +8356,6 @@ "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", "dev": true }, - "path-type": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", - "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", - "dev": true - }, "picocolors": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", @@ -8194,9 +8369,9 @@ "dev": true }, "pirates": { - "version": "4.0.5", - "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.5.tgz", - "integrity": "sha512-8V9+HQPupnaXMA23c5hvl69zXvTwTzyAYasnkb0Tts4XvO4CliqONMOnvlq26rkhLC3nWDFBJf73LU1e1VZLaQ==", + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.6.tgz", + "integrity": "sha512-saLsH7WeYYPiD25LDuLRRY/i+6HaPYr6G1OUlN39otzkSTxKnubR9RTxS3/Kk50s1g2JTgFwWQDQyplC5/SHZg==", "dev": true }, "pkg-dir": { @@ -8215,13 +8390,12 @@ "dev": true }, "pretty-format": { - "version": "28.1.3", - "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-28.1.3.tgz", - "integrity": "sha512-8gFb/To0OmxHR9+ZTb14Df2vNxdGCX8g1xWGUTqUw5TiZvcQf5sHKObd5UcPyLLyowNwDAMTF3XWOG1B6mxl1Q==", + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.7.0.tgz", + "integrity": "sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==", "dev": true, "requires": { - "@jest/schemas": "^28.1.3", - "ansi-regex": "^5.0.1", + "@jest/schemas": "^29.6.3", "ansi-styles": "^5.0.0", "react-is": "^18.0.0" }, @@ -8250,6 +8424,17 @@ "sisteransi": "^1.0.5" } }, + "proper-lockfile": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/proper-lockfile/-/proper-lockfile-4.1.2.tgz", + "integrity": "sha512-TjNPblN4BwAWMXU8s9AEz4JmQxnD1NNL7bNOY/AKUzyamc379FWASUhc/K1pL2noVb+XmZKLL68cjzLsiOAMaA==", + "dev": true, + "requires": { + "graceful-fs": "^4.2.4", + "retry": "^0.12.0", + "signal-exit": "^3.0.2" + } + }, "properties-reader": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/properties-reader/-/properties-reader-2.2.0.tgz", @@ -8270,9 +8455,15 @@ } }, "punycode": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", - "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==", + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.0.tgz", + "integrity": "sha512-rRV+zQD8tVFys26lAGR9WUuS4iUAngJScM+ZRSKtvl5tKeZ2t5bvdNFdNHBW9FWR4guGHlgmsZ1G7BSm2wTbuA==", + "dev": true + }, + "pure-rand": { + "version": "6.0.4", + "resolved": "https://registry.npmjs.org/pure-rand/-/pure-rand-6.0.4.tgz", + "integrity": "sha512-LA0Y9kxMYv47GIPJy6MI84fqTd2HmYZI83W/kM/SkKfDlajnZYfmXFTxkbY+xSBPkLJxltMa9hIkmdc29eguMA==", "dev": true }, "queue-microtask": { @@ -8281,6 +8472,12 @@ "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", "dev": true }, + "queue-tick": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/queue-tick/-/queue-tick-1.0.1.tgz", + "integrity": "sha512-kJt5qhMxoszgU/62PLP1CJytzd2NKetjSRnyuj31fDd3Rlcz3fzlFdFLD1SItunPwyqEOkca6GbV612BWfaBag==", + "dev": true + }, "react-is": { "version": "18.2.0", "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.2.0.tgz", @@ -8327,12 +8524,6 @@ } } }, - "regexpp": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-3.2.0.tgz", - "integrity": "sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg==", - "dev": true - }, "require-directory": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", @@ -8340,12 +8531,12 @@ "dev": true }, "resolve": { - "version": "1.22.1", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.1.tgz", - "integrity": "sha512-nBpuuYuY5jFsli/JIs1oldw6fOQCBioohqWZg/2hiaOybXOft4lonv85uDOKXdf8rhyK159cxU5cDcK/NKk8zw==", + "version": "1.22.6", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.6.tgz", + "integrity": "sha512-njhxM7mV12JfufShqGy3Rz8j11RPdLy4xi15UurGJeoHLfJpVXKdh3ueuOqbYUcDZnffr6X739JBo5LzyahEsw==", "dev": true, "requires": { - "is-core-module": "^2.9.0", + "is-core-module": "^2.13.0", "path-parse": "^1.0.7", "supports-preserve-symlinks-flag": "^1.0.0" } @@ -8357,18 +8548,32 @@ "dev": true, "requires": { "resolve-from": "^5.0.0" + }, + "dependencies": { + "resolve-from": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", + "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", + "dev": true + } } }, "resolve-from": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", - "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", + "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", "dev": true }, "resolve.exports": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/resolve.exports/-/resolve.exports-1.1.0.tgz", - "integrity": "sha512-J1l+Zxxp4XK3LUDZ9m60LRJF/mAe4z6a4xyabPHk7pvK5t35dACV32iIjJDFeWZFfZlO29w6SZ67knR0tHzJtQ==", + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/resolve.exports/-/resolve.exports-2.0.2.tgz", + "integrity": "sha512-X2UW6Nw3n/aMgDVy+0rSqgHlv39WZAlZrXCdnbyEiKm17DSqHX4MmQMaST3FbeWR5FTuRcUwYAziZajji0Y7mg==", + "dev": true + }, + "retry": { + "version": "0.12.0", + "resolved": "https://registry.npmjs.org/retry/-/retry-0.12.0.tgz", + "integrity": "sha512-9LkiTwjUh6rT555DtE9rTX+BKByPfrMzEAtnlEtdEwr3Nkffwiihqe2bWADg+OQRjt9gl6ICdmB/ZFDCGAtSow==", "dev": true }, "reusify": { @@ -8408,9 +8613,9 @@ "dev": true }, "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", "dev": true }, "shebang-command": { @@ -8509,14 +8714,24 @@ } }, "stack-utils": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/stack-utils/-/stack-utils-2.0.5.tgz", - "integrity": "sha512-xrQcmYhOsn/1kX+Vraq+7j4oE2j/6BFscZ0etmYg81xuM8Gq0022Pxb8+IqgOFUIaxHs0KaSb7T1+OegiNrNFA==", + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/stack-utils/-/stack-utils-2.0.6.tgz", + "integrity": "sha512-XlkWvfIm6RmsWtNJx+uqtKLS8eqFbxUg0ZzLXqY0caEy9l7hruX8IpiDnjsLavoBgqCCR71TqWO8MaXYheJ3RQ==", "dev": true, "requires": { "escape-string-regexp": "^2.0.0" } }, + "streamx": { + "version": "2.15.1", + "resolved": "https://registry.npmjs.org/streamx/-/streamx-2.15.1.tgz", + "integrity": "sha512-fQMzy2O/Q47rgwErk/eGeLu/roaFWV0jVsogDmrszM9uIw8L5OA+t+V93MgYlufNptfjmYR1tOMWhei/Eh7TQA==", + "dev": true, + "requires": { + "fast-fifo": "^1.1.0", + "queue-tick": "^1.0.1" + } + }, "string_decoder": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", @@ -8591,16 +8806,6 @@ "has-flag": "^4.0.0" } }, - "supports-hyperlinks": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/supports-hyperlinks/-/supports-hyperlinks-2.2.0.tgz", - "integrity": "sha512-6sXEzV5+I5j8Bmq9/vUphGRM/RJNT9SCURJLjwfOg51heRtguGWDzcaBlgAzKhQa0EVNpPEKzQuBwZ8S8WaCeQ==", - "dev": true, - "requires": { - "has-flag": "^4.0.0", - "supports-color": "^7.0.0" - } - }, "supports-preserve-symlinks-flag": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", @@ -8608,15 +8813,27 @@ "dev": true }, "tar-fs": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/tar-fs/-/tar-fs-2.1.1.tgz", - "integrity": "sha512-V0r2Y9scmbDRLCNex/+hYzvp/zyYjvFbHPNgVTKfQvVrb6guiE/fxP+XblDNR011utopbkex2nM4dHNV6GDsng==", + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/tar-fs/-/tar-fs-3.0.4.tgz", + "integrity": "sha512-5AFQU8b9qLfZCX9zp2duONhPmZv0hGYiBPJsyUdqMjzq/mqVpy/rEUSeHk1+YitmxugaptgBh5oDGU3VsAJq4w==", "dev": true, "requires": { - "chownr": "^1.1.1", "mkdirp-classic": "^0.5.2", "pump": "^3.0.0", - "tar-stream": "^2.1.4" + "tar-stream": "^3.1.5" + }, + "dependencies": { + "tar-stream": { + "version": "3.1.6", + "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-3.1.6.tgz", + "integrity": "sha512-B/UyjYwPpMBv+PaFSWAmtYjwdrlEaZQEhMIBFNC5oEG8lpiW8XjcSdmEaClj28ArfKScKHs2nshz3k2le6crsg==", + "dev": true, + "requires": { + "b4a": "^1.6.4", + "fast-fifo": "^1.2.0", + "streamx": "^2.15.0" + } + } } }, "tar-stream": { @@ -8632,16 +8849,6 @@ "readable-stream": "^3.1.1" } }, - "terminal-link": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/terminal-link/-/terminal-link-2.1.1.tgz", - "integrity": "sha512-un0FmiRUQNr5PJqy9kP7c40F5BOfpGlYTrxonDChEZB7pzZxRNp/bt+ymiy9/npwXya9KH99nJ/GXFIiUkYGFQ==", - "dev": true, - "requires": { - "ansi-escapes": "^4.2.1", - "supports-hyperlinks": "^2.0.0" - } - }, "test-exclude": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/test-exclude/-/test-exclude-6.0.0.tgz", @@ -8654,23 +8861,25 @@ } }, "testcontainers": { - "version": "8.12.0", - "resolved": "https://registry.npmjs.org/testcontainers/-/testcontainers-8.12.0.tgz", - "integrity": "sha512-6qQqKirdURAXH/V6sVnfbgqLAJK/vxP2ED6qcwiLfsZ6McPkF5TGDAPzkVZUmdrx62H3RzuTTdXGoPcLP7KG6g==", + "version": "10.2.1", + "resolved": "https://registry.npmjs.org/testcontainers/-/testcontainers-10.2.1.tgz", + "integrity": "sha512-R9LUMUEkKGSL2M4cP466Jah+Vi+ZLFlvrT4BENjEKJKNzubATOmDk26RHe8DHeFT+hnMD6fvVii+McXr0UTO7g==", "dev": true, "requires": { "@balena/dockerignore": "^1.0.2", - "@types/archiver": "^5.3.1", - "@types/dockerode": "^3.3.8", "archiver": "^5.3.1", + "async-lock": "^1.4.0", "byline": "^5.0.0", "debug": "^4.3.4", - "docker-compose": "^0.23.17", - "dockerode": "^3.3.1", + "docker-compose": "^0.24.2", + "dockerode": "^3.3.5", "get-port": "^5.1.1", + "node-fetch": "^2.6.12", + "proper-lockfile": "^4.1.2", "properties-reader": "^2.2.0", "ssh-remote-port-forward": "^1.0.4", - "tar-fs": "^2.1.1" + "tar-fs": "^3.0.4", + "tmp": "^0.2.1" } }, "text-table": { @@ -8679,6 +8888,15 @@ "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==", "dev": true }, + "tmp": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.2.1.tgz", + "integrity": "sha512-76SUhtfqR2Ijn+xllcI5P1oyannHNHByD80W1q447gU3mp9G9PSpGdWmjUOHRDPiHYacIk66W7ubDTuPF3BEtQ==", + "dev": true, + "requires": { + "rimraf": "^3.0.0" + } + }, "tmpl": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/tmpl/-/tmpl-1.0.5.tgz", @@ -8700,6 +8918,12 @@ "is-number": "^7.0.0" } }, + "tr46": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", + "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==", + "dev": true + }, "tweetnacl": { "version": "0.14.5", "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz", @@ -8722,15 +8946,15 @@ "dev": true }, "type-fest": { - "version": "0.21.3", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz", - "integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==", + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", + "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", "dev": true }, "update-browserslist-db": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.5.tgz", - "integrity": "sha512-dteFFpCyvuDdr9S/ff1ISkKt/9YZxKjI9WlRR99c180GaztJtRa/fn18FdxGVKVsnPY7/a/FDN68mcvUmP4U7Q==", + "version": "1.0.13", + "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.13.tgz", + "integrity": "sha512-xebP81SNcPuNpPP3uzeW1NYXxI3rxyJzF3pD6sH4jE7o/IX+WtSpwnVU+qIsDPyk0d3hmFQ7mjqc6AtV604hbg==", "dev": true, "requires": { "escalade": "^3.1.1", @@ -8752,21 +8976,15 @@ "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==", "dev": true }, - "v8-compile-cache": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.3.0.tgz", - "integrity": "sha512-l8lCEmLcLYZh4nbunNZvQCJc5pv7+RCwa8q/LdUx8u7lsWvPDKmpodJAJNwkAhJC//dFY48KuIEmjtd4RViDrA==", - "dev": true - }, "v8-to-istanbul": { - "version": "9.0.1", - "resolved": "https://registry.npmjs.org/v8-to-istanbul/-/v8-to-istanbul-9.0.1.tgz", - "integrity": "sha512-74Y4LqY74kLE6IFyIjPtkSTWzUZmj8tdHT9Ii/26dvQ6K9Dl2NbEfj0XgU2sHCtKgt5VupqhlO/5aWuqS+IY1w==", + "version": "9.1.3", + "resolved": "https://registry.npmjs.org/v8-to-istanbul/-/v8-to-istanbul-9.1.3.tgz", + "integrity": "sha512-9lDD+EVI2fjFsMWXc6dy5JJzBsVTcQ2fVkfBvncZ6xJWG9wtBhOldG+mHkSL0+V1K/xgZz0JDO5UT5hFwHUghg==", "dev": true, "requires": { "@jridgewell/trace-mapping": "^0.3.12", "@types/istanbul-lib-coverage": "^2.0.1", - "convert-source-map": "^1.6.0" + "convert-source-map": "^2.0.0" } }, "walker": { @@ -8778,6 +8996,22 @@ "makeerror": "1.0.12" } }, + "webidl-conversions": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", + "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==", + "dev": true + }, + "whatwg-url": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", + "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==", + "dev": true, + "requires": { + "tr46": "~0.0.3", + "webidl-conversions": "^3.0.0" + } + }, "which": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", @@ -8787,12 +9021,6 @@ "isexe": "^2.0.0" } }, - "word-wrap": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz", - "integrity": "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==", - "dev": true - }, "wrap-ansi": { "version": "7.0.0", "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", @@ -8811,9 +9039,9 @@ "dev": true }, "write-file-atomic": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-4.0.1.tgz", - "integrity": "sha512-nSKUxgAbyioruk6hU87QzVbY279oYT6uiwgDoujth2ju4mJ+TZau7SQBhtbTmUyuNYTuXnSyRn66FV0+eCgcrQ==", + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-4.0.2.tgz", + "integrity": "sha512-7KxauUdBmSdWnmpaGFg+ppNjKF8uNLry8LyzjauQDOVONfFLNKrKvQOxZ/VuTIcS/gge/YNahf5RIIQWTSarlg==", "dev": true, "requires": { "imurmurhash": "^0.1.4", @@ -8827,36 +9055,36 @@ "dev": true }, "yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", + "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", "dev": true }, "yaml": { - "version": "1.10.2", - "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.2.tgz", - "integrity": "sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==", + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.3.2.tgz", + "integrity": "sha512-N/lyzTPaJasoDmfV7YTrYCI0G/3ivm/9wdG0aHuheKowWQwGTsK0Eoiw6utmzAnI6pkJa0DUVygvp3spqqEKXg==", "dev": true }, "yargs": { - "version": "17.5.1", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.5.1.tgz", - "integrity": "sha512-t6YAJcxDkNX7NFYiVtKvWUz8l+PaKTLiL63mJYWR2GnHq2gjEWISzsLp9wg3aY36dY1j+gfIEL3pIF+XlJJfbA==", + "version": "17.7.2", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz", + "integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==", "dev": true, "requires": { - "cliui": "^7.0.2", + "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.0.0" + "yargs-parser": "^21.1.1" } }, "yargs-parser": { - "version": "21.0.1", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.0.1.tgz", - "integrity": "sha512-9BK1jFpLzJROCI5TzwZL/TU4gqjK5xiHV/RfWLOahrjAko/e4DJkRDZQXfvqAsiZzzYhgAzbgz6lg48jcm4GLg==", + "version": "21.1.1", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", + "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==", "dev": true }, "yocto-queue": { diff --git a/package.json b/package.json index cd03e3b..040785e 100644 --- a/package.json +++ b/package.json @@ -1,13 +1,14 @@ { "name": "@questdb/nodejs-client", - "version": "1.0.5", + "version": "2.0.0", "description": "QuestDB Node.js Client", "main": "index.js", "types": "types/index.d.ts", "scripts": { "test": "jest", "eslint": "npx eslint src/**", - "docs": "jsdoc index.js src/sender.js README.md -d docs" + "docs": "jsdoc index.js src/sender.js README.md -d docs", + "types": "npx -p typescript tsc --skipLibCheck --declaration --allowJs --emitDeclarationOnly --outDir types" }, "repository": { "type": "git", @@ -23,9 +24,9 @@ "testRunner": "jest-jasmine2" }, "devDependencies": { - "eslint": "^8.21.0", - "jest": "^28.1.3", - "jest-jasmine2": "^28.1.3", - "testcontainers": "^8.12.0" + "eslint": "^8.50.0", + "jest": "^29.7.0", + "jest-jasmine2": "^29.7.0", + "testcontainers": "^10.2.1" } } diff --git a/scripts/generateCerts.sh b/scripts/generateCerts.sh index 9618112..f479340 100755 --- a/scripts/generateCerts.sh +++ b/scripts/generateCerts.sh @@ -22,10 +22,10 @@ PATH_CLIENT=$ROOTPATH/certs/client ###### # Generate CA key -openssl genrsa -des3 -passout pass:$PASSWORD -out $PATH_CA/ca.key $RSABITS +openssl genrsa -passout pass:$PASSWORD -out $PATH_CA/ca.key $RSABITS # Create CA cert -openssl req -new -x509 -days 3650 -key $PATH_CA/ca.key -out $PATH_CA/ca.crt -passin pass:$PASSWORD -subj "/C=GB/ST=EN/L=./O=QUEST CA/CN=QUEST" +openssl req -new -x509 -days 10000 -key $PATH_CA/ca.key -out $PATH_CA/ca.crt -passin pass:$PASSWORD -subj "/C=GB/ST=EN/L=./O=QUEST CA/CN=QUEST" ########## # SERVER # @@ -39,7 +39,7 @@ openssl req -new -key $PATH_SERVER/server.key -out $PATH_SERVER/server.csr -pass -reqexts SAN -extensions SAN -config <(cat /etc/ssl/openssl.cnf <(printf "[SAN]\nsubjectAltName=DNS:localhost,IP:127.0.0.1")) # Sign server cert with CA -openssl x509 -req -days 3650 -set_serial 01 \ +openssl x509 -req -days 10000 -set_serial 01 \ -extfile <(printf "subjectAltName=DNS:localhost,IP:127.0.0.1") \ -passin pass:$PASSWORD -in $PATH_SERVER/server.csr -CA $PATH_CA/ca.crt -CAkey $PATH_CA/ca.key -out $PATH_SERVER/server.crt @@ -54,7 +54,7 @@ openssl genrsa -out $PATH_CLIENT/client.key $RSABITS openssl req -new -key $PATH_CLIENT/client.key -out $PATH_CLIENT/client.csr -passout pass:$PASSWORD -subj "/C=GB/ST=EN/L=./O=QUEST CLIENT/CN=CLIENT" # Sign client cert with CA -openssl x509 -req -days 3650 -set_serial 01 \ +openssl x509 -req -days 10000 -set_serial 01 \ -passin pass:$PASSWORD -in $PATH_CLIENT/client.csr -CA $PATH_CA/ca.crt -CAkey $PATH_CA/ca.key -out $PATH_CLIENT/client.crt exit 0 diff --git a/src/sender.js b/src/sender.js index da67a77..f789204 100644 --- a/src/sender.js +++ b/src/sender.js @@ -1,10 +1,12 @@ 'use strict'; -const { Buffer } = require("buffer"); -const { log } = require("./logging"); -const { validateTableName, validateColumnName, validateDesignatedTimestamp } = require("./validation"); -const net = require("net"); -const tls = require("tls"); +/* eslint-disable no-unused-vars */ + +const { Buffer } = require('buffer'); +const { log } = require('./logging'); +const { validateTableName, validateColumnName } = require('./validation'); +const net = require('net'); +const tls = require('tls'); const crypto = require('crypto'); const DEFAULT_BUFFER_SIZE = 8192; @@ -64,7 +66,7 @@ class Sender { if (options) { this.jwk = options.jwk; } - const noCopy = options && typeof options.copyBuffer === "boolean" && !options.copyBuffer; + const noCopy = options && typeof options.copyBuffer === 'boolean' && !options.copyBuffer; this.toBuffer = noCopy ? this.toBufferView : this.toBufferNew; this.doResolve = noCopy ? resolve => { @@ -72,8 +74,8 @@ class Sender { resolve(true); } : resolve => resolve(true); - this.log = options && typeof options.log === "function" && options.log ? options.log : log; - this.resize(options && typeof options.bufferSize === "number" && options.bufferSize ? options.bufferSize : DEFAULT_BUFFER_SIZE); + this.log = options && typeof options.log === 'function' && options.log ? options.log : log; + this.resize(options && typeof options.bufferSize === 'number' && options.bufferSize ? options.bufferSize : DEFAULT_BUFFER_SIZE); this.reset(); } @@ -121,19 +123,19 @@ class Sender { let data; if (this.socket) { - throw new Error("Sender connected already"); + throw new Error('Sender connected already'); } this.socket = !secure ? net.connect(options) : tls.connect(options, async () => { if (!self.socket.authorized) { - reject(new Error("Problem with server's certificate")); + reject(new Error('Problem with server\'s certificate')); await self.close(); } }); this.socket.setKeepAlive(true); - this.socket.on("data", async raw => { + this.socket.on('data', async raw => { data = !data ? raw : Buffer.concat([data, raw]); if (!authenticated) { authenticated = await authenticate(self, data); @@ -141,13 +143,13 @@ class Sender { resolve(true); } } else { - this.log("warn", `Received unexpected data: ${data}`); + this.log('warn', `Received unexpected data: ${data}`); } }) - .on("ready", async () => { - this.log("info", `Successfully connected to ${options.host}:${options.port}`); + .on('ready', async () => { + this.log('info', `Successfully connected to ${options.host}:${options.port}`); if (self.jwk) { - this.log("info", `Authenticating with ${options.host}:${options.port}`); + this.log('info', `Authenticating with ${options.host}:${options.port}`); await self.socket.write(`${self.jwk.kid}\n`, err => { if (err) { reject(err); @@ -158,8 +160,8 @@ class Sender { resolve(true); } }) - .on("error", err => { - this.log("error", err); + .on('error', err => { + this.log('error', err); reject(err); }); }); @@ -173,7 +175,7 @@ class Sender { const address = this.socket.remoteAddress; const port = this.socket.remotePort; this.socket.destroy(); - this.log("info", `Connection to ${address}:${port} is closed`); + this.log('info', `Connection to ${address}:${port} is closed`); } /** @@ -227,11 +229,11 @@ class Sender { * @return {Sender} Returns with a reference to this sender. */ table(table) { - if (typeof table !== "string") { + if (typeof table !== 'string') { throw new Error(`Table name must be a string, received ${typeof table}`); } if (this.hasTable) { - throw new Error("Table name has already been set"); + throw new Error('Table name has already been set'); } validateTableName(table); checkCapacity(this, [table]); @@ -248,11 +250,11 @@ class Sender { * @return {Sender} Returns with a reference to this sender. */ symbol(name, value) { - if (typeof name !== "string") { + if (typeof name !== 'string') { throw new Error(`Symbol name must be a string, received ${typeof name}`); } if (!this.hasTable || this.hasColumns) { - throw new Error("Symbol can be added only after table name is set and before any column added"); + throw new Error('Symbol can be added only after table name is set and before any column added'); } const valueStr = value.toString(); checkCapacity(this, [name, valueStr], 2 + name.length + valueStr.length); @@ -278,7 +280,7 @@ class Sender { write(this, '"'); writeEscaped(this, value, true); write(this, '"'); - }, "string"); + }, 'string'); return this; } @@ -293,7 +295,7 @@ class Sender { writeColumn(this, name, value, () => { checkCapacity(this, [], 1); write(this, value ? 't' : 'f'); - }, "boolean"); + }, 'boolean'); return this; } @@ -309,7 +311,7 @@ class Sender { const valueStr = value.toString(); checkCapacity(this, [valueStr], valueStr.length); write(this, valueStr); - }, "number"); + }, 'number'); return this; } @@ -337,15 +339,17 @@ class Sender { * Write a timestamp column with its value into the buffer of the sender. * * @param {string} name - Column name. - * @param {number | bigint} value - Epoch timestamp in microseconds, accepts only numbers or BigInts. + * @param {number | bigint} value - Epoch timestamp, accepts numbers or BigInts. + * @param {string} [unit=us] - Timestamp unit. Supported values: 'ns' - nanoseconds, 'us' - microseconds, 'ms' - milliseconds. Defaults to 'us'. * @return {Sender} Returns with a reference to this sender. */ - timestampColumn(name, value) { - if (typeof value !== "bigint" && !Number.isInteger(value)) { + timestampColumn(name, value, unit = 'us') { + if (typeof value !== 'bigint' && !Number.isInteger(value)) { throw new Error(`Value must be an integer or BigInt, received ${value}`); } writeColumn(this, name, value, () => { - const valueStr = value.toString(); + const valueMicros = timestampToMicros(BigInt(value), unit); + const valueStr = valueMicros.toString(); checkCapacity(this, [valueStr], 1 + valueStr.length); write(this, valueStr); write(this, 't'); @@ -356,17 +360,18 @@ class Sender { /** * Closing the row after writing the designated timestamp into the buffer of the sender. * - * @param {string | bigint} timestamp - A string or BigInt that represents the designated timestamp in epoch nanoseconds. + * @param {number | bigint} timestamp - Designated epoch timestamp, accepts numbers or BigInts. + * @param {string} [unit=us] - Timestamp unit. Supported values: 'ns' - nanoseconds, 'us' - microseconds, 'ms' - milliseconds. Defaults to 'us'. */ - at(timestamp) { + at(timestamp, unit = 'us') { if (!this.hasSymbols && !this.hasColumns) { - throw new Error("The row must have a symbol or column set before it is closed"); + throw new Error('The row must have a symbol or column set before it is closed'); } - if (typeof timestamp !== "string" && typeof timestamp !== "bigint") { - throw new Error(`The designated timestamp must be of type string or BigInt, received ${typeof timestamp}`); + if (typeof timestamp !== 'bigint' && !Number.isInteger(timestamp)) { + throw new Error(`Designated timestamp must be an integer or BigInt, received ${timestamp}`); } - validateDesignatedTimestamp(timestamp); - const timestampStr = timestamp.toString(); + const timestampNanos = timestampToNanos(BigInt(timestamp), unit); + const timestampStr = timestampNanos.toString(); checkCapacity(this, [], 2 + timestampStr.length); write(this, ' '); write(this, timestampStr); @@ -380,7 +385,7 @@ class Sender { */ atNow() { if (!this.hasSymbols && !this.hasColumns) { - throw new Error("The row must have a symbol or column set before it is closed"); + throw new Error('The row must have a symbol or column set before it is closed'); } checkCapacity(this, [], 1); write(this, '\n'); @@ -395,13 +400,13 @@ async function authenticate(sender, challenge) { {'key': sender.jwk, 'format': 'jwk'} ); const signature = await crypto.sign( - "RSA-SHA256", + 'RSA-SHA256', challenge.slice(0, challenge.length - 1), keyObject ); return new Promise((resolve, reject) => { - sender.socket.write(`${Buffer.from(signature).toString("base64")}\n`, err => { + sender.socket.write(`${Buffer.from(signature).toString('base64')}\n`, err => { err ? reject(err) : resolve(true); }); }); @@ -439,14 +444,14 @@ function compact(sender) { } function writeColumn(sender, name, value, writeValue, valueType) { - if (typeof name !== "string") { + if (typeof name !== 'string') { throw new Error(`Column name must be a string, received ${typeof name}`); } if (valueType != null && typeof value !== valueType) { throw new Error(`Column value must be of type ${valueType}, received ${typeof value}`); } if (!sender.hasTable) { - throw new Error("Column can be set only after table name is set"); + throw new Error('Column can be set only after table name is set'); } checkCapacity(sender, [name], 2 + name.length); write(sender, sender.hasColumns ? ',' : ' '); @@ -501,5 +506,31 @@ function writeEscaped(sender, data, quoted = false) { } } +function timestampToMicros(timestamp, unit) { + switch (unit) { + case 'ns': + return timestamp / 1000n; + case 'us': + return timestamp; + case 'ms': + return timestamp * 1000n; + default: + throw new Error('Unknown timestamp unit: ' + unit); + } +} + +function timestampToNanos(timestamp, unit) { + switch (unit) { + case 'ns': + return timestamp; + case 'us': + return timestamp * 1000n; + case 'ms': + return timestamp * 1000_000n; + default: + throw new Error('Unknown timestamp unit: ' + unit); + } +} + exports.Sender = Sender; exports.DEFAULT_BUFFER_SIZE = DEFAULT_BUFFER_SIZE; diff --git a/src/validation.js b/src/validation.js index aef799a..a1dc2d2 100644 --- a/src/validation.js +++ b/src/validation.js @@ -119,27 +119,5 @@ function validateColumnName(name) { } } -/** - * Validates a designated timestamp. The value must contain only digits.
            - * Throws an error if the value is invalid. - * - * @param {string | bigint} timestamp - The timestamp to validate. - */ -function validateDesignatedTimestamp(timestamp) { - if (typeof timestamp === "string") { - const len = timestamp.length; - if (len === 0) { - throw new Error("Empty string is not allowed as designated timestamp"); - } - for (let i = 0; i < len; i++) { - let ch = timestamp[i]; - if (ch < '0' || ch > '9') { - throw new Error(`Invalid character in designated timestamp: ${ch}`); - } - } - } -} - exports.validateTableName = validateTableName; exports.validateColumnName = validateColumnName; -exports.validateDesignatedTimestamp = validateDesignatedTimestamp; diff --git a/test/certs/ca/ca.crt b/test/certs/ca/ca.crt index 86d01bb..ec266cc 100644 --- a/test/certs/ca/ca.crt +++ b/test/certs/ca/ca.crt @@ -1,30 +1,32 @@ -----BEGIN CERTIFICATE----- -MIIFDjCCAvYCCQCmGwsJetc2fTANBgkqhkiG9w0BAQsFADBJMQswCQYDVQQGEwJH -QjELMAkGA1UECAwCRU4xCjAIBgNVBAcMAS4xETAPBgNVBAoMCFFVRVNUIENBMQ4w -DAYDVQQDDAVRVUVTVDAeFw0yMjA4MDUxODI2NTFaFw0zMjA4MDIxODI2NTFaMEkx -CzAJBgNVBAYTAkdCMQswCQYDVQQIDAJFTjEKMAgGA1UEBwwBLjERMA8GA1UECgwI -UVVFU1QgQ0ExDjAMBgNVBAMMBVFVRVNUMIICIjANBgkqhkiG9w0BAQEFAAOCAg8A -MIICCgKCAgEArFGtTVPYU399Tl3lq4X4SgVFj9UrQay+n7ZQY/HtK9MR67/NECc/ -8zJWqng6CFEaJnjIbRoLoU+nVlBtdI+sg8jDhWR6iACoxfotyBXRsFpH8haf2QOw -u9DJFx5viEFNAUPYpF6f/nvjrRaR25saxN1n/OSG5EfFZ0Ap6huR0BgbDQePYBLs -6/A16rxopmn8a6dyZgycLVrz7rz6tbu01R3BgJMvdcQRG2/unK33JvMM/ZPFzvVP -SetS084Eqkql4oXNTg/tZkW6O9NYgAcmOSlgnxKOzYbsqP/FIXBEW4TMJPsGW0Lq -7CHHP+aBCvAP29wa/kDT5RUUe/5X4mlAW7m8JUeCQeeOgkWZoVqo5K1KZT6MpVN2 -Asf4LHpAg6yD95q5o7ZAKBae3MiOrZjTNuXQheWSMAU/HuMWZsnqi+RFK3rziAwd -MMWFG1S2YFN8oMUgPBdsp7A+iRZshXgQUdcjbQ7/356ZiUG0wUUsg08V3ODmjFPA -1UIUgH5JbIKVlXvemm0TIhPG2Wk+MGgoCtqYZ94XKCc3rjjtIkZbrBHyhAtZ6jKP -A+jrv2h48OQOGRKNqP6CgNyYvojPu7Y6oetHLHTPhsljuSvVevsf6jga5MQnSvOF -aaYiZo7ZMt+A6nl2SzvXCMviz5d4nGaq00wOH1SV9tQEWLdUL60xUSkCAwEAATAN -BgkqhkiG9w0BAQsFAAOCAgEAJdmkBo81SiDSTcSJmu1HvRSwXX181vqnnWjjNDpx -V/5A/XXl5IfRWLKgUDsmEZqryJgvbh1KzpDT9xS7jN0WjpciD9RKL8O5JEBALo5r -8Nl9ZbuwQwcsrWtTp0TLQL28xwfDw2/ws0chPyeAs+TCrNuwdavMd5E//f5TjRH5 -KGtO1qwvKD6+2+k82KQD54oq0aucpaiA95Ej8vtAqo97jVRfw1fv1YVbceApqWTO -v89giQDBOG2tRqihpJPOZEjVTxeoCHgiPTQUioy3U0G7xFpvQ9+HL9SjXgFCoDVa -X7m7pwhTI0IZtF5vFsNtzjRiet+wZl2d34cc8oSmwyuDp2y8F2N4ereR/zZX2iAe -DLepOJjkeCCiTxhg97yn9KCbRaEahMwAOu1VmTaYNICxeHxQ1B4kpZBl6bN+gv5s -2f/4ncLROUS0RJ4Wfiq3x8BaSgv6IttqFD3KRKcEeZLG/F9mlPByDc8F/0vhD3Mu -TVo47jCZs4gOUsMl3l7TpwmRNTmVQVDJ7K799H9zcrdInogKldEb/DFrJm/PMCj7 -eEFP3rnzTETOAdyZHOlxW5wpw12UW0xWG9R5dU74EqeORaWHaJ4LlVip/3WK8mDf -FrSgq2eTbURrsA0ejdrD1kImApcKklDFlVHmskbhWqfGjU+32jzu0jkPnwzLjq6z -lgo= +MIIFdTCCA12gAwIBAgIUSNH1u5rgN7g+hl3fP0PMXN/kRQgwDQYJKoZIhvcNAQEL +BQAwSTELMAkGA1UEBhMCR0IxCzAJBgNVBAgMAkVOMQowCAYDVQQHDAEuMREwDwYD +VQQKDAhRVUVTVCBDQTEOMAwGA1UEAwwFUVVFU1QwIBcNMjMxMDA5MDY1MjE2WhgP +MjA1MTAyMjQwNjUyMTZaMEkxCzAJBgNVBAYTAkdCMQswCQYDVQQIDAJFTjEKMAgG +A1UEBwwBLjERMA8GA1UECgwIUVVFU1QgQ0ExDjAMBgNVBAMMBVFVRVNUMIICIjAN +BgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAnTPld+/J40FP7vsgGvbQi0QFMXYP +ywwRFzOjc0fZCVwE9g+qBjOHBX4zSsD+vw8Hi8mc5ZKJRZIXiGIydnJ5jUgZroS4 +XxGb2iUdbQ4oNgxwI9BB+AG/xSqlDTQFdC9Tf38HgsxaZPf8ZlakqfW48d5qoIfj +XiJRDH+2oTH9NObbLOLqD3nhpjlcQyZVMzmDg0m5NqOS1hJa0dCy7RJ6kUdKt/s4 +DIJQc2Nm0W+wEBaEcUU9fl4ohKmz8LW0hAgmCVdv2Jm4zZqEaNsQVGBHkuEelBBJ +SaY9uHy4tVnUqJ/t7so1xLLFgV1Nq+6Uj0RfM/VsrKpIp10zgzWJYSodpCPO7ARN +JRJwBQeQ3WAkZDkFY7+SC4hx8y75dYXzkjoigknVCMzwFuJ8DtGzgaEGKrgJ1hi9 +66BRHEpnxcGG6gprQjZ3AUlRUkZq13F46RjbDpfyXxRkYf4/EpW467VAQ2OD0Jqa +A6qiKeO5Eb6VAq00EjRGZ/3yUeOK1iVdb289g04GEtVFASwUdwIX/UQxMYe1l/Cp +t2v5kujhJitzhhhp+tN4lrvCx6o7Zxh3SLlQZNNZmZ7tm9WE/4EMnl6RAkF5FXGK +Giq4jlZd3yzzddriDvtFcBorqinKD71nVCy0KAWfChKRHTe7AxMtshaH8z5BLNni +9GJNXrQozDSDgl0CAwEAAaNTMFEwHQYDVR0OBBYEFAaR1TD+YvTvCmgoGfapO31z +ljnyMB8GA1UdIwQYMBaAFAaR1TD+YvTvCmgoGfapO31zljnyMA8GA1UdEwEB/wQF +MAMBAf8wDQYJKoZIhvcNAQELBQADggIBAJGluSDawzkdBM8cigLjUmkFFfPPku7Q +zK1tBEqlPk/zQCXT2AMusf5N9jbP1CAHmq8D+89ArKSlZpw2B7IhcJrqHBVU3JaA +8TA7rOCcPwoBWO/ipTrEwOZvCLFxoRn3ZmDGpsca2me7uvNHDk3b0PkLEIUMvQEU +NnCsozZbpGZHCdNWCk0ONsGWgamPal/Yi9b8bsADzJE87QSgSMK7QHjkV5PfV9Cg +gVSiS+b4JAqXbc9Mb4bEH/kexSimPCXYATmcAPNy2RUHOs8LGcSs+nIX4xvRTr4w +iji+dSwDFkahgPfmC+x2K1MsQQNEP7F16yg/8hJWvbDMyEKC3xCYVe7c83bEAMIc +xmZVb99Q/W7KV1u3fDxJP1kp3fiDaDt87nxdCQDZ8SAvS1kJ1WTfld8rCej7H8zP +Dcip4MgqDgmNDpG+hD3aluZHBaSfDp2BnFKamob6Ri/tq0MzeV9a3XJIThvU3iz5 +GZnWrP1MnXf/kr+KzU1tJNWGn25kcscVCcZ5d4JAYDVAc5Qe4sPna5dD+ZA3zE2C +6WH9qZh+s1UEyAkftPEosdHyNl3xlHHCNA65mgnf72O68C5eDvWClWtbVxf5H4RM +EdJjm9jP/HM/tJvj1KS8p0941lJ9ApqaPKUGx1pSnDjg+jVJEtB6JOyeWMSUI8g8 +z2hyreerpV/A -----END CERTIFICATE----- diff --git a/test/certs/ca/ca.key b/test/certs/ca/ca.key index 6202fb8..46350f0 100644 --- a/test/certs/ca/ca.key +++ b/test/certs/ca/ca.key @@ -1,54 +1,52 @@ ------BEGIN RSA PRIVATE KEY----- -Proc-Type: 4,ENCRYPTED -DEK-Info: DES-EDE3-CBC,930269A817565687 - -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 ------END RSA PRIVATE KEY----- +-----BEGIN PRIVATE KEY----- +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 +6SgC6R52uGXg+tLpvqDtihdP3bo/ +-----END PRIVATE KEY----- diff --git a/test/certs/client/client.crt b/test/certs/client/client.crt index 32ad554..b97ae57 100644 --- a/test/certs/client/client.crt +++ b/test/certs/client/client.crt @@ -1,29 +1,30 @@ -----BEGIN CERTIFICATE----- -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 +Hg== -----END CERTIFICATE----- diff --git a/test/certs/client/client.csr b/test/certs/client/client.csr index eb1131d..a4b772d 100644 --- a/test/certs/client/client.csr +++ b/test/certs/client/client.csr @@ -1,27 +1,27 @@ -----BEGIN CERTIFICATE REQUEST----- MIIEkzCCAnsCAQAwTjELMAkGA1UEBhMCR0IxCzAJBgNVBAgMAkVOMQowCAYDVQQH DAEuMRUwEwYDVQQKDAxRVUVTVCBDTElFTlQxDzANBgNVBAMMBkNMSUVOVDCCAiIw -DQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAKyxvSBwkulcG2F45rHr6lpNRYHM -fmU4KHAoomLXxJTWWWLH5PYpdeQ3YKOkHlxTFGg/RZ1l73/y4w/xapcbTnsuqiBs -AdsKk0Nc158bGqfTKccaB6MX91/kNATtRxmEp/G1tDtcc89jn429sXoUdD74qg3Q -7s7LzBsKJQY/rtgj3d2Vm3QS/sa2bbrRATUv0DTlEwMYpwhhZ6no60hla57UWLmd -4+VAs3Emqo64uRjpkuxoA6RxWWvVLz9lhoXsRKzFBhIr6F+Ob1/wdgG6LYQ4DRzm -ryQUFSVEEkIcs6TviHOs/Gj35z9I3+5V/naq+gRvKS6TZe/RdQ1XUdn9q+YfhNyu -W9KBiW2jRxMt4qov+boz5a3neg5tYlaHiAu4favvzjAcRqGKp3MjEvYd/oHCsNXo -wii3TrsKFxpvsIG8jtilCviXyK2sh/gylYI4tGNXzbG853PMwmtUjmd5qoh7zDTT -ZLQO6RLCZVs8u0hpVLPOJsFE1seZRJyGIVddAFohym1yI+2fq9pi//HyPp9GJ/Fu -1m8NiWu2GJM5tLJKFA7mDmV/REClWanxCdCttqviVccyzjRTL667HZ9NmfUsysL7 -fF6mUfnH9Xyj1Awwkg+SOh0wj7fbHd64T5otmysx8jwITO6e56ZSpj+N4XmbEu16 -WpgiLvFEVWnBRgu9AgMBAAGgADANBgkqhkiG9w0BAQsFAAOCAgEAPCprOfB1np6S -HH3KMs73AKAJyMeMUWvQ3WXHztmdmt/u+KXLbzT6uAImvITSqryaeaTCza+MfSPE -7CVXGE4Lw6649vMvddVPg7EPflZDzMQBpZ06/pCcfHKmdgRZXrJH+Jm3FF9JuT7f -K7c8nt9sIemb9ZfJ+lYnhGs9/aMM4D/tB1h0KQNeK2fxDInRqfh72jGuqXQqNAVd -gA419+hmsk2ri6mhd8ANniApz5rHKcEJvrB7sc1SEUJHWpYkU5REwYyyxTmgIxdC -CH2k9lP1h2/I60HVd8MnC2xy13K604VTw2oo2GDCIEGuwSjPzGRDw4BW8kb5iJxS -loqEGH7HomWN9v/kvwuZ7MUtXRP1m7IceLWIq1Fn0MFhjC6TU/Q7Ufz90wtBcCjx -e0EuquzWJ7q0pEgE+E5ytNKPneTgX7BWbRrWduulypduRCAI2zGqEmBjZKACZjE3 -7916ANuPIATmq6NBHiltNA/T0VDO4Y6mw+MmF5fZ2ccn1GECfIvfeGbWX8lP3rm+ -WyY7TNq4A/6yULe/OlLxMP4UryJYJ0b3Ddl0nM6DV6aht3niR3xocMn0fRsbeJyC -GhVZgltG16KegCcZVR3FwGDd5sAaOLqAzcngisbRe58xbIgy67cYLDZKjFn8Xbvj -c2cYBlS4ntAY7elZzQyixqKu3B6+Wuo= +DQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBALPlJZ3ouHfnrPi9II1vSFaqS4ry +xh9yND1c2A+CB0lfbfoDpK8onBjgPkv3JnebesoLjb2jH+KVnhlr24zt6NbAJWru +ASx3tMI12O5yyFjErH57AC9OMcNx2kNBurIgrAiORCgvw7paNtPZfl+YEYV1uGpN +5egdHrcUjYq3TmeZiplAdUpgdyugdu7mv8osI2vmbWJdnWVzDR+e5wfBhg2Sxc/G +t7uAINmwMnRWy84VtS+uC37Sv0egFY3XRPgQVo0iBash/cckNz3lLmOKSN8qYLHW +BdHQ0x8loIOwmcCi3gJbiEXH6fiCJRbNqa5Gj5izSuP+LWGhIf2QY+vVars5/7ye +M4vb5jW/8yq4IO6PxANNWyy955HPnk5r8giiOTbr1DX/d6LOFYrGYZzYQKEBil/E +IPvbWv9YYdl8ZHGTMrfat8gtVJHc+yxyZ8P7vLzVGS9CZi4JMGtoU9lHe0NcheIe +ig7tVDeFa48SaXkwjZSve3b8eNIgKJkJahePFlgluGAClxEGsXkNfZAbqKR93Kx7 +1o8aFAcm8kEl7XMm5MLWOtC6onabIx4mtRyuM257DetIkTIp1GUZdg8gRJJq5GMq +9G1JzO3ApOJaUVAZSKhGZZPpdBi06m9zx/M4B2UTetPPGCXDLuIh5ITBqmPIKYjf +ov/+l/BF4K73JMMNAgMBAAGgADANBgkqhkiG9w0BAQsFAAOCAgEArKuTy4wboqjP +LyEwfnzgQbEKtwhWpiUt2Yl6YVhHIZwaZZEQe8Xjcp5z0HtRVACN4wIfHBX35Ajj +xacRQBqwUtNsDeljGI4QEMM2hThLMMfpE0I0N8y/JE+3FYj285IcjnhPjEMoiGZN +nQ71VntAXCFJ8CqrOZk3GF0bhLfgzkfSUExLypVQkDMRvraQiQOr73+HjiWISNMl +2Qqqz87kN0krINwL2p0LVJWSTFe+AQW4hcCZnRe/lGEVcmALyryci6WRhGWnpiK+ +cmsjlKvgoQbBuOXHn67zJ3j/sz4X24lX+vCo3H0LAL/Q6kOnaX38q+/tEzJh8pNg +fsIQSFPAbonSg2pWuFlVe2h96i0kjTsoTH2BnufnN47gJI3eANZ6gChkfmD0C1G8 +s1J+qj5BWU/4gx6u1YQuUctbIK8rtdGq1/l9Wem49Hosbzti1dE1bhLTqLS7rRoX +uSUudK+fM+glcQHRRdhc0OYdO01wXhrzioKNl4hjMK89MI4aZ4kw1nD+pMXVxBcI +HmoiSi99r2O6TBO0tAhLgQA2hQNLOATiaf1LYatRNeS1CCW30EB7sBGluqUrmBhu +MJ0Go7wBGy8Pu/EyXU2DgEeCBtRFk0/UV9zofAWSRomLpDJGi/CjgEF/G/ZWWbsr +gij2bm8G++O8o09ENalOmeVu3wtHkAU= -----END CERTIFICATE REQUEST----- diff --git a/test/certs/client/client.key b/test/certs/client/client.key index 8be0c39..1f2692a 100644 --- a/test/certs/client/client.key +++ b/test/certs/client/client.key @@ -1,51 +1,52 @@ ------BEGIN RSA PRIVATE KEY----- -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 ------END RSA PRIVATE KEY----- +-----BEGIN PRIVATE KEY----- +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 +jPCrahxxpLUIKlGTlJC5GSFomGua8UI= +-----END PRIVATE KEY----- diff --git a/test/certs/server/server.crt b/test/certs/server/server.crt index dcd3546..8541462 100644 --- a/test/certs/server/server.crt +++ b/test/certs/server/server.crt @@ -1,30 +1,32 @@ -----BEGIN CERTIFICATE----- -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 +C+ksVr7TuiBe -----END CERTIFICATE----- diff --git a/test/certs/server/server.csr b/test/certs/server/server.csr index df87007..d9cc4e2 100644 --- a/test/certs/server/server.csr +++ b/test/certs/server/server.csr @@ -1,28 +1,28 @@ -----BEGIN CERTIFICATE REQUEST----- MIIEwzCCAqsCAQAwUTELMAkGA1UEBhMCR0IxCzAJBgNVBAgMAkVOMQowCAYDVQQH DAEuMRUwEwYDVQQKDAxRVUVTVCBTRVJWRVIxEjAQBgNVBAMMCWxvY2FsaG9zdDCC -AiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAK13tzAr2XIGZVfubFmyfGU8 -oIaUq/+F4GBz6QFKaaq7P2S2AaFm/z8vzK5RMr+O58J6NT8eHgmvujlU/SVGf9AS -mZiyKUTeaQ0swgJltSGtn+29PWJm5bq0d+GyjV1x95YLhxrabLp3iet4HxMmjKwg -5y5xRsigEIrvQW2eOqrfTKL6gKATemlNAnN2rYIIPbR7po5UJn2TuDxB+Zw1ZEjD -8Iah9r+k+zSChfJ8x7hcjOOqXKDpX1SjafwNgAAyjSbjO5G+JjKENhoCUpjDlT4K -qc99emGHSzVgDcQX45PhPwalzEwi1En3PW6dlN0rLK9cvG+1guYFazm6i3kJLnYt -bo6qY91Z4KHoYQsnnxNMXRnVeAF0nj3nKX7VtosWra5xUCv1QCWqoXdpAeTY2KxY -HU9hXj/e3S0ozwzddtXmuTOEqw/I/BJgQo4x6G5mZAHuR7Q5CYxM7lMHpfbh21oW -z7o6AK29OUsWi2WxUiqJhJ2aTHXv9sm9A3tklEIsJDv0+V2vgnuSnEF3vA00hChM -jkEfPI8gpzpi+dM/7UW9mG8Nv6NCVT8Oa1deccfQNzZPjGtiOIcO+toQMOtjkZKC -EUWKR2QOtTfDtrdP5A+y6/J+FDqByAoDZDSkVwDVbeHSqnUaXCkRimPyGXN7zSOU -twJx/5SZzJND2SHKMVEXAgMBAAGgLTArBgkqhkiG9w0BCQ4xHjAcMBoGA1UdEQQT -MBGCCWxvY2FsaG9zdIcEfwAAATANBgkqhkiG9w0BAQsFAAOCAgEAUs7dXJnVDdkO -8qGz041NcMuyJ+8G0HsBAGwo9dN94mHIlNOBvFskhwei3ewjF0ZtGtMIZtDbZvzE -1NeKUKDKxlYQB8+GKzMn5zQtgEeYN4OMdocFddvaCol7vgk+IyXG14ERiAa4mcGR -Jl1SdrjWSmDkAPr5vbj2rcYVbRnYU5N7tUQ3VpFjv80X21xVOuuYZAU8aFj11Ffi -31CYeOG5xO3v0tcDap6hJcIG2bdhskqUXPiR3sIk/Z6Dkv+Kfiu11fLr9jrwa0pS -MReUlHlLqj84XsP5RyEpeb9jlFaiMkcllXnzrBOROG/ngVRL8vETgQs6Q/zlOHjj -ygHghfW5gd+CdReOLf2D0If4uCGw5mtu/GDPWEMZBo4c8UNpm2u4Z8Qia4jezeVM -Ihs06pBv5ApAckqOFOzPG4SQvqz5TkaPc0cfCFk94EV6P7rMr2oUS8LXxnhT138D -SeKiIxAjzunp1W5/HA/XkC2IaH9mWIcY996xpokeV0bAGfrz0oPRaiefdiOOeCp6 -AZVgecXpYBB79K/JA3f3kxNq2q0SI9mgYiw3+Mn5OX7T8GpqmUCeW4Lddl/L6gt2 -DBDnCF+oZf2B2OPD4CQBeHjIO3VpUoS77CaU9N7OJ4+yJTTf1wALw0m/1879G1uS -4YXWqBnWRdKEf0Bhhi01lXtr+swqhf0= +AiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBALmv+IbHqlrkIi3V0apF79mz +a0pJnPuiS2nZnO2OAX2wTOxS3RdfeU+1liyjGuzz02t44cURRAjmBEpm32X5yzDe +JiXwEYZZDAOWBl+3NYfPGzqxhZvrd4ccnNt3R1nNzPTa1NvjofpzOnmVUBv2d84G +jVgmaNtiJBRQ6BY9d/zEkxPDcqEa39VR2bM9rE+ZHhfrvSiQq4LyJpV5KG7E7yyc +izvWfDYeiqyAZJ0sOp86UYINh8rcI5x7WY1N/GMjDk7tpR5RJG0srS9IaaMJzSHE +zqLFfPbFihqgc/aJOYe2gUNSEPd5YpZFp/1ZTO8XT6k2gRWxhJ9FBRWY9T8zsoLv +QZyF1AdjtmOi6LV13u+9ZjIlVcNNiEe2Z3Wwyo4rb0S4KEDmQYrHSEZK2znDrKda +UsQ2S2ZwPQQkrpuwkqXgDvKrJoyAxcByCHIq+p87Uy4YSL4+JWT244eBqcpYprlq +7ouTGikATkR/N+yAqYPgksanaHqARAdJRBzJFIFBHJ44spQ/gBjYEUbHybRLXZpz +wyLK4d8N970AIhUFNnMBsDlQ8+AxtEkb21hjoZZIJSMnhMRCNh1YCREb3TNl4Q+n +B+Fumxua87aZhHcse/J7e7Aa3DYGTXdoZqv8PsQ5LNe/CfgOytQT1/oGSgurRyau +wX25zuL3EEWZapHCVWkvAgMBAAGgLTArBgkqhkiG9w0BCQ4xHjAcMBoGA1UdEQQT +MBGCCWxvY2FsaG9zdIcEfwAAATANBgkqhkiG9w0BAQsFAAOCAgEAe+58NJDrYTHY +5OUDI/mKc/zJdhvcyr2H0DTSi8KyrhunsjF4O4msZ8D9vKxMMuLdJJdGLXh9PkW/ +7k5AjfPLx/SjNS3mxtsaXIzNCCWrtKgW566CwPVVtOb1z9ie/2jqyuhiDQW5aX8t +m+JxpH6x3xBFjckomEWf8X8qM/Jx5EiZaKB+VF1bGuZstS4Ln8yyQ16bU5FcKCFL +GKmFKQbB09AA4dLfZC4zQj83f1nUzdalv4glVSVIg/XmOQW6D/H2Doxqn/Qi9lja +JxYUl0ELqbk8KbduQ/b9I4DpYJ2j33+Jeyc0uEHqacQdlaGLanUodyWaHHOgkJey +FvP3T2r3ZOQvQ3rUDlwVmiN3cGpXTz/Q+1r6E3QXd9erMuRPxB6dD3Xs14bttQ/d +Kqy1MekfSKSm4C8IsGgq6m21jh571jWTiZwS8e8shME+eRH5+8XTI6SI0y9RmGuZ +lkJY3hvdF7Whfd2hP9ANs2YX4hBFlYmUGXuU0ddqVYGn/8nelkT3OlpUu3aEIdah +Sg563rJ3O8guM2ysuEE0//K/pyMAhAFbTS4LVnzwZX4jtlvvyWAv+MJNbXarAEvK +LpZclhhg+iJJns1uaGlkTyBBl2jTWQzP6jfFzIj+5SjT2S4eZLkuKPnRbUAPeQQo +UFzcOSVdiSEp17xhNrADQ148T6cYpfw= -----END CERTIFICATE REQUEST----- diff --git a/test/certs/server/server.key b/test/certs/server/server.key index c129140..c641f65 100644 --- a/test/certs/server/server.key +++ b/test/certs/server/server.key @@ -1,51 +1,52 @@ ------BEGIN RSA PRIVATE KEY----- -MIIJJgIBAAKCAgEArXe3MCvZcgZlV+5sWbJ8ZTyghpSr/4XgYHPpAUppqrs/ZLYB -oWb/Py/MrlEyv47nwno1Px4eCa+6OVT9JUZ/0BKZmLIpRN5pDSzCAmW1Ia2f7b09 -YmblurR34bKNXXH3lguHGtpsuneJ63gfEyaMrCDnLnFGyKAQiu9BbZ46qt9MovqA -oBN6aU0Cc3atggg9tHumjlQmfZO4PEH5nDVkSMPwhqH2v6T7NIKF8nzHuFyM46pc -oOlfVKNp/A2AADKNJuM7kb4mMoQ2GgJSmMOVPgqpz316YYdLNWANxBfjk+E/BqXM -TCLUSfc9bp2U3Sssr1y8b7WC5gVrObqLeQkudi1ujqpj3VngoehhCyefE0xdGdV4 -AXSePecpftW2ixatrnFQK/VAJaqhd2kB5NjYrFgdT2FeP97dLSjPDN121ea5M4Sr -D8j8EmBCjjHobmZkAe5HtDkJjEzuUwel9uHbWhbPujoArb05SxaLZbFSKomEnZpM -de/2yb0De2SUQiwkO/T5Xa+Ce5KcQXe8DTSEKEyOQR88jyCnOmL50z/tRb2Ybw2/ -o0JVPw5rV15xx9A3Nk+Ma2I4hw762hAw62ORkoIRRYpHZA61N8O2t0/kD7Lr8n4U -OoHICgNkNKRXANVt4dKqdRpcKRGKY/IZc3vNI5S3AnH/lJnMk0PZIcoxURcCAwEA -AQKCAgB8IUu8M9ShTMRefOWZ9iggBZdVVrQR4IokWy1kWAxvORjvB3L5PYvvelP8 -dWxcOXXM68iIhxO1mMMo3ZFciCtUCMtSwkLX3lPMMrgOIRvRor3r0NxJOxqvVQ7o -Oe4A7VnfTBZ898qQUJQoJMgP2ykUz2K/EB432Jqd4QGv4GdY+PuNMLa0Vdvl2E6l -s0oL37vQGB+if8MfX4KZ1Bg7WNWPYG8Q2HuKvhNoivIxCGuemNPU4obwOq+WEG36 -COsMuR/asQZij3Aj/An+6KSUXnjAcb78FG1rtvXxlu+i3/lhS/De3+vmm5HP8BVM -v4TUE14hirnpMjkeQshtAflmPlS43MdKIp6N2/w7t7CgR9rw+mnMnOf43g+ugtpu -1MFQ5Ribsgd1OJEgH4wudBc0oFcbNZhR8BEEiHNV5L3m3BhBX2FmVs7g/xip9fFd -l8iGvCiq9ZQfWW7lZe4ZpC6hx3ohtL1z9++765JRCBegLoLV9y3P5JtK4EaFdOtq -Hx01WQ0mdAfbmkJi75dCrhSiNSPd9as+XHnPAIzuKlltt2nlTCRAQgB1a+XtFAC8 -9NRnl61oesq6WZ55MeiVYuJUZRKpNhmfYWps4SzXaO7yXPcQ0+CUpQdX9gnagtT5 -mWaE6mfzJxFSZ6/SXmNsqIoni1bbNKxEI92wL3NUF9/ZbRnHYQKCAQEA0zu8J3nI -lufkgiu2B5BcVGRK84TyqQDksAnvo8zvnLfuTfnoKqXtocByT5lCudhGW8bncG32 -0OgxSWsChKhjp6tOXf3wz5oiKenY+576ci7fk0CZ1iwoecUhGq4KD4cDG9aLlD2Y -QRV85s7zBfiUpxUmsM0fQUJqvn0kFc89vJEdCQPLHBrlHySsj1xo7DvKSlzLEfE/ -pGLQutQb6CQ9GFY4AYdiFlOf3NWiE+Es0UAqxjz3TXj0kT8HjW3KDB33/fFHxnmE -dLDv4vjl+Er9Zj4GUrsQvbwV9pPWaimDutueWQQilf/2JM+P3KuXgPaGbOTMg+NU -mKi74HHR6VfQkQKCAQEA0jsJyZMMnqBrJZt7kDIgbh9txc5oqbZx3qML57BV97X/ -qeqryrLjhhXM/3s+aH/6UCSlezLYqrIE7aUOeq1vPZIbrBIw8zSBMaZy4bgPqseI -R8j+WjSyzaUUJugHg693rdnZt8LglRGbqGjbND1NDbKH05iHN/73dfU69Ri4OBP+ -gazf6NnRHz4fBKopzh1u9ejswSNPvAxCiEPN+GrOWH0sTEvdmho2t/msxFvnd6n1 -/VBG5Zt613dXJT0YE2yPag4GGaZfRgeTHgwHhsPMZRKJJ6GE63RfBDKFF3b3rOqR -K3dx/gS/xVL1bROBWFx8vnKpTlVC2mmlKTlrIl1bJwKCAQEAhjrZcAR1sV+e2BFK -1TepVH9/GYyMX1UP/cXyoJZkVaSULLz4CdHzVexjN63etxZ2b2/QNqPKSiqi11LH -AOG4oh276QKr+mCqARR3LD50TAb5UCunFnBtMCRSyw95mTBki1Yk0IjrrcAn5Mvx -pwO2Aw7vzT4r9F5uUqpXOfy98IwOdWIRucRlgQrfFSLWEfhUrjiVWsuBc8bPeUm8 -iiItKL/xSxdq/2EYn06qdhOLVVV/WQX46SRJ1drFw9vWnyiUJK0kvT0PLNAbQJKG -IOgWathTUFNLaiaRlmWPxVqoOR/CWjLEf6luEypK8yGfXvZJqf0i8VSOt4vSB+iM -Scnh4QKCAQAqdJfGaHbs9fKNdrfeZ/EarCgsAUIru9eFIaI+2OKTkuKduvGUjsna -Az8R/R6eVfIEC1KL7bnJxwetwl6JMcs8QOxrtITEKL9KepXKtbQcRg1kider+eZ+ -Fy9ZqBQUaPQfXNZWAPn/wL2RphNWmmacNIivl6b/DPOGk86jPqm9UXRdVb8mNA7C -Y3Y6J+8nW9RTvwVI/8uTa1poUGEhINipECZJBi0reM3CG57jTLgS93ThAjw/FEYb -i1NDBvJ8wbi4rzpWJb4p00/HiqBee94kLzkZksnYDvk9TMKJ+ZGNDxXgFFAl/2mG -/PjpXT4KzSq3/0nnsto8Z4deKuVS3E2TAoH/XsYf68q05Yed8U8A7fbZFsLXegMM -y3Pb/7QpMbUr1jxRF+GohNG6OwPh2dTxetHESNOR3QH7NrVVIoqRc/TjPLDnsvkk -MU8S+5ZuwHf9hd8LNaFOyF8j51PvU772IiUuWmugp8ctT8NFsbqD21YC1AIg7pYb -m5oC0abHRJecBIhfu2kN0SGLMHrLXlf5POoII6C1uABQdhc7+rDLWWCalAT+uXVp -skgtXzOU9yiCfxJtvypxqiwp+3yGByvQQJo5csczQEPfr3o8okaCLq9K476zB2uo -KuftNE53Fq/G0Oa8+IMhIa65pzUdSW0JOsDmPT0bMo8JtVmRAA4NzpZ/ ------END RSA PRIVATE KEY----- +-----BEGIN PRIVATE KEY----- +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 +WhntPvCJT8HT6ciI0Z3NkOCXNsK93ro= +-----END PRIVATE KEY----- diff --git a/test/logging.test.js b/test/logging.test.js index 76bf20d..06e7091 100644 --- a/test/logging.test.js +++ b/test/logging.test.js @@ -5,11 +5,11 @@ describe('Default logging suite', function () { let log; beforeAll(() => { - error = jest.spyOn(console, "error").mockImplementation(() => {}); - warn = jest.spyOn(console, "warn").mockImplementation(() => {}); - info = jest.spyOn(console, "info").mockImplementation(() => {}); - debug = jest.spyOn(console, "debug").mockImplementation(() => {}); - log = require("../src/logging").log; + error = jest.spyOn(console, 'error').mockImplementation(() => {}); + warn = jest.spyOn(console, 'warn').mockImplementation(() => {}); + info = jest.spyOn(console, 'info').mockImplementation(() => {}); + debug = jest.spyOn(console, 'debug').mockImplementation(() => {}); + log = require('../src/logging').log; }); afterAll(() => { @@ -27,8 +27,8 @@ describe('Default logging suite', function () { }); it('can log error level messages', function () { - const testMessage = "ERROR ERROR ERROR"; - log("error", testMessage); + const testMessage = 'ERROR ERROR ERROR'; + log('error', testMessage); expect(error).toHaveBeenCalledTimes(1); expect(warn).toHaveBeenCalledTimes(0); expect(info).toHaveBeenCalledTimes(0); @@ -37,8 +37,8 @@ describe('Default logging suite', function () { }); it('can log warn level messages', function () { - const testMessage = "WARN WARN WARN"; - log("warn", testMessage); + const testMessage = 'WARN WARN WARN'; + log('warn', testMessage); expect(error).toHaveBeenCalledTimes(0); expect(warn).toHaveBeenCalledTimes(1); expect(info).toHaveBeenCalledTimes(0); @@ -47,8 +47,8 @@ describe('Default logging suite', function () { }); it('can log info level messages', function () { - const testMessage = "INFO INFO INFO"; - log("info", testMessage); + const testMessage = 'INFO INFO INFO'; + log('info', testMessage); expect(error).toHaveBeenCalledTimes(0); expect(warn).toHaveBeenCalledTimes(0); expect(info).toHaveBeenCalledTimes(1); @@ -57,8 +57,8 @@ describe('Default logging suite', function () { }); it('cannot log debug level messages', function () { - const testMessage = "DEBUG DEBUG DEBUG"; - log("debug", testMessage); + const testMessage = 'DEBUG DEBUG DEBUG'; + log('debug', testMessage); expect(error).toHaveBeenCalledTimes(0); expect(warn).toHaveBeenCalledTimes(0); expect(info).toHaveBeenCalledTimes(0); @@ -67,7 +67,7 @@ describe('Default logging suite', function () { it('throws exception if log level is not supported', function () { expect( - () => log("trace", "TRACE TRACE TRACE") - ).toThrow("Invalid log level: 'trace'"); + () => log('trace', 'TRACE TRACE TRACE') + ).toThrow('Invalid log level: \'trace\''); }); }); diff --git a/test/mockproxy.js b/test/mockproxy.js index f951400..ec422f6 100644 --- a/test/mockproxy.js +++ b/test/mockproxy.js @@ -1,13 +1,13 @@ 'use strict'; -const { write, listen, shutdown } = require("./proxyfunctions"); +const { write, listen, shutdown } = require('./proxyfunctions'); const CHALLENGE_LENGTH = 512; class MockProxy { constructor(mockConfig) { if (!mockConfig) { - throw new Error("Missing mock config"); + throw new Error('Missing mock config'); } this.mockConfig = mockConfig; this.dataSentToRemote = []; @@ -32,14 +32,14 @@ class MockProxy { getDataSentToRemote() { if (!this.mockConfig.assertions) { - throw new Error("Should be called only when assertions switched on"); + throw new Error('Should be called only when assertions switched on'); } return this.dataSentToRemote; } } function mockChallenge() { - let challenge = ""; + let challenge = ''; for (let i = 0; i < CHALLENGE_LENGTH - 1; i++) { challenge += 'a'; } diff --git a/test/proxy.js b/test/proxy.js index 6a91c1e..dea5232 100644 --- a/test/proxy.js +++ b/test/proxy.js @@ -1,7 +1,7 @@ 'use strict'; -const { Socket } = require("net"); -const { write, listen, shutdown, connect, close } = require("./proxyfunctions"); +const { Socket } = require('net'); +const { write, listen, shutdown, connect, close } = require('./proxyfunctions'); // handles only a single client // client -> server (Proxy) -> remote (QuestDB) @@ -10,24 +10,24 @@ class Proxy { constructor() { this.remote = new Socket(); - this.remote.on("data", async data => { + this.remote.on('data', async data => { console.info(`received from remote, forwarding to client: ${data}`); await write(this.client, data); }); - this.remote.on("close", () => { - console.info("remote connection closed"); + this.remote.on('close', () => { + console.info('remote connection closed'); }); - this.remote.on("error", err => { + this.remote.on('error', err => { console.error(`remote connection: ${err}`); }); } async start(listenPort, remotePort, remoteHost, tlsOptions = undefined) { return new Promise(resolve => { - this.remote.on("ready", async () => { - console.info("remote connection ready"); + this.remote.on('ready', async () => { + console.info('remote connection ready'); await listen(this, listenPort, async data => { console.info(`received from client, forwarding to remote: ${data}`); await write(this.remote, data); diff --git a/test/proxyfunctions.js b/test/proxyfunctions.js index 553a712..45707c8 100644 --- a/test/proxyfunctions.js +++ b/test/proxyfunctions.js @@ -1,6 +1,6 @@ 'use strict'; -const net = require("net"); +const net = require('net'); const tls = require('tls'); const LOCALHOST = '127.0.0.1'; @@ -18,12 +18,12 @@ async function listen(proxy, listenPort, dataHandler, tlsOptions) { const clientConnHandler = client => { console.info('client connected'); if (proxy.client) { - console.error("There is already a client connected"); + console.error('There is already a client connected'); process.exit(1); } proxy.client = client; - client.on("data", dataHandler); + client.on('data', dataHandler); } proxy.server = tlsOptions @@ -42,7 +42,7 @@ async function listen(proxy, listenPort, dataHandler, tlsOptions) { } async function shutdown(proxy, onServerClose = async () => {}) { - console.info("closing proxy") + console.info('closing proxy') return new Promise(resolve => { proxy.server.close(async () => { await onServerClose(); @@ -59,7 +59,7 @@ async function connect(proxy, remotePort, remoteHost) { } async function close(proxy) { - console.info("closing remote connection") + console.info('closing remote connection') return new Promise(resolve => { proxy.remote.destroy(); resolve(); diff --git a/test/sender.test.js b/test/sender.test.js index 48af0f7..a4707b0 100644 --- a/test/sender.test.js +++ b/test/sender.test.js @@ -1,11 +1,11 @@ 'use strict'; -const { Sender } = require("../index"); -const { DEFAULT_BUFFER_SIZE } = require("../src/sender"); -const { log } = require("../src/logging"); -const { MockProxy } = require("./mockproxy"); -const { readFileSync} = require("fs"); -const { GenericContainer } = require("testcontainers"); +const { Sender } = require('../index'); +const { DEFAULT_BUFFER_SIZE } = require('../src/sender'); +const { log } = require('../src/logging'); +const { MockProxy } = require('./mockproxy'); +const { readFileSync} = require('fs'); +const { GenericContainer } = require('testcontainers'); const http = require('http'); const HTTP_OK = 200; @@ -27,17 +27,17 @@ const proxyOptions = { ca: readFileSync('test/certs/ca/ca.crt') }; -const PRIVATE_KEY = "9b9x5WhJywDEuo1KGQWSPNxtX-6X6R2BRCKhYMMY6n8" +const PRIVATE_KEY = '9b9x5WhJywDEuo1KGQWSPNxtX-6X6R2BRCKhYMMY6n8' const PUBLIC_KEY = { - x: "aultdA0PjhD_cWViqKKyL5chm6H1n-BiZBo_48T-uqc", - y: "__ptaol41JWSpTTL525yVEfzmY8A6Vi_QrW1FjKcHMg" + x: 'aultdA0PjhD_cWViqKKyL5chm6H1n-BiZBo_48T-uqc', + y: '__ptaol41JWSpTTL525yVEfzmY8A6Vi_QrW1FjKcHMg' } const JWK = { ...PUBLIC_KEY, - kid: "testapp", - kty: "EC", + kid: 'testapp', + kty: 'EC', d: PRIVATE_KEY, - crv: "P-256", + crv: 'P-256', } async function sleep(ms) { @@ -62,7 +62,7 @@ describe('Sender connection suite', function () { } async function sendData(sender) { - sender.table("test").symbol("location", "us").floatColumn("temperature", 17.1).at("1658484765000000000"); + sender.table('test').symbol('location', 'us').floatColumn('temperature', 17.1).at(1658484765000000000n, 'ns'); await sender.flush(); } @@ -88,7 +88,7 @@ describe('Sender connection suite', function () { const proxy = await createProxy(true); const sender = await createSender(JWK); await sender.close(); - await assertSentData(proxy, true, "testapp\n"); + await assertSentData(proxy, true, 'testapp\n'); await proxy.stop(); }); @@ -96,7 +96,7 @@ describe('Sender connection suite', function () { const proxy = await createProxy(); const sender = await createSender(); await sender.close(); - await assertSentData(proxy, false, ""); + await assertSentData(proxy, false, ''); await proxy.stop(); }); @@ -105,7 +105,7 @@ describe('Sender connection suite', function () { const sender = await createSender(JWK); await sendData(sender); await sender.close(); - await assertSentData(proxy, true, "testapp\ntest,location=us temperature=17.1 1658484765000000000\n"); + await assertSentData(proxy, true, 'testapp\ntest,location=us temperature=17.1 1658484765000000000\n'); await proxy.stop(); }); @@ -114,7 +114,7 @@ describe('Sender connection suite', function () { const sender = await createSender(); await sendData(sender); await sender.close(); - await assertSentData(proxy, false, "test,location=us temperature=17.1 1658484765000000000\n"); + await assertSentData(proxy, false, 'test,location=us temperature=17.1 1658484765000000000\n'); await proxy.stop(); }); @@ -123,7 +123,7 @@ describe('Sender connection suite', function () { const sender = await createSender(JWK, true); await sendData(sender); await sender.close(); - await assertSentData(proxy, true, "testapp\ntest,location=us temperature=17.1 1658484765000000000\n"); + await assertSentData(proxy, true, 'testapp\ntest,location=us temperature=17.1 1658484765000000000\n'); await proxy.stop(); }); @@ -132,7 +132,7 @@ describe('Sender connection suite', function () { const sender = await createSender(null, true); await sendData(sender); await sender.close(); - await assertSentData(proxy, false, "test,location=us temperature=17.1 1658484765000000000\n"); + await assertSentData(proxy, false, 'test,location=us temperature=17.1 1658484765000000000\n'); await proxy.stop(); }); @@ -142,7 +142,7 @@ describe('Sender connection suite', function () { try { await sender.connect(senderOptions, true); } catch(err) { - expect(err.message).toBe("Sender connected already"); + expect(err.message).toBe('Sender connected already'); } await sender.close(); await proxy.stop(); @@ -154,7 +154,7 @@ describe('Sender connection suite', function () { try { await Promise.all([sender.connect(senderOptions, true), sender.connect(senderOptions, true)]); } catch(err) { - expect(err.message).toBe("Sender connected already"); + expect(err.message).toBe('Sender connected already'); } await sender.close(); await proxy.stop(); @@ -163,21 +163,21 @@ describe('Sender connection suite', function () { it('can handle unfinished rows during flush()', async function () { const proxy = await createProxy(true, proxyOptions); const sender = await createSender(JWK, true); - sender.table("test").symbol("location", "us"); + sender.table('test').symbol('location', 'us'); const sent = await sender.flush(); expect(sent).toBe(false); await sender.close(); - await assertSentData(proxy, true, "testapp\n"); + await assertSentData(proxy, true, 'testapp\n'); await proxy.stop(); }); it('supports custom logger', async function () { const expectedMessages = [ - "Successfully connected to 127.0.0.1:9099", - "Connection to 127.0.0.1:9099 is closed" + 'Successfully connected to 127.0.0.1:9099', + 'Connection to 127.0.0.1:9099 is closed' ]; const log = (level, message) => { - expect(level).toBe("info"); + expect(level).toBe('info'); expect(message).toBe(expectedMessages.shift()); }; const proxy = await createProxy(); @@ -185,7 +185,7 @@ describe('Sender connection suite', function () { await sender.connect(senderOptions); await sendData(sender); await sender.close(); - await assertSentData(proxy, false, "test,location=us temperature=17.1 1658484765000000000\n"); + await assertSentData(proxy, false, 'test,location=us temperature=17.1 1658484765000000000\n'); await proxy.stop(); }); }); @@ -205,36 +205,36 @@ describe('Client interop test suite', function () { } for (const column of testCase.columns) { switch (column.type) { - case "STRING": + case 'STRING': sender.stringColumn(column.name, column.value); break; - case "LONG": + case 'LONG': sender.intColumn(column.name, column.value); break; - case "DOUBLE": + case 'DOUBLE': sender.floatColumn(column.name, column.value); break; - case "BOOLEAN": + case 'BOOLEAN': sender.booleanColumn(column.name, column.value); break; - case "TIMESTAMP": + case 'TIMESTAMP': sender.timestampColumn(column.name, column.value); break; default: - throw new Error("Unsupported column type"); + throw new Error('Unsupported column type'); } } sender.atNow(); } catch (e) { - if (testCase.result.status !== "ERROR") { - fail("Did not expect error: " + e.message); + if (testCase.result.status !== 'ERROR') { + fail('Did not expect error: ' + e.message); break; } continue; } const buffer = sender.toBufferView(); - if (testCase.result.status === "SUCCESS") { + if (testCase.result.status === 'SUCCESS') { if (testCase.result.line) { expect(buffer.toString()).toBe(testCase.result.line + '\n'); } else { @@ -244,10 +244,10 @@ describe('Client interop test suite', function () { continue loopTestCase; } } - fail("Line is not matching any of the expected results: " + buffer.toString()); + fail('Line is not matching any of the expected results: ' + buffer.toString()); } } else { - fail("Expected error missing, instead we have a line: " + buffer.toString()); + fail('Expected error missing, instead we have a line: ' + buffer.toString()); break; } } @@ -255,47 +255,181 @@ describe('Client interop test suite', function () { }); describe('Sender message builder test suite (anything not covered in client interop test suite)', function () { + it('throws on invalid timestamp unit', function () { + const sender = new Sender({bufferSize: 1024}); + try { + sender.table('tableName') + .booleanColumn('boolCol', true) + .timestampColumn('timestampCol', 1658484765000000, 'foobar') + .atNow(); + } catch(err) { + expect(err.message).toBe('Unknown timestamp unit: foobar'); + } + }); + it('supports timestamp field as number', function () { const sender = new Sender({bufferSize: 1024}); - sender.table("tableName") - .booleanColumn("boolCol", true) - .timestampColumn("timestampCol", 1658484765000000) + sender.table('tableName') + .booleanColumn('boolCol', true) + .timestampColumn('timestampCol', 1658484765000000) + .atNow(); + expect(sender.toBufferView().toString()).toBe( + 'tableName boolCol=t,timestampCol=1658484765000000t\n' + ); + }); + + it('supports timestamp field as ns number', function () { + const sender = new Sender({bufferSize: 1024}); + sender.table('tableName') + .booleanColumn('boolCol', true) + .timestampColumn('timestampCol', 1658484765000000, 'ns') + .atNow(); + expect(sender.toBufferView().toString()).toBe( + 'tableName boolCol=t,timestampCol=1658484765000t\n' + ); + }); + + it('supports timestamp field as us number', function () { + const sender = new Sender({bufferSize: 1024}); + sender.table('tableName') + .booleanColumn('boolCol', true) + .timestampColumn('timestampCol', 1658484765000000, 'us') .atNow(); expect(sender.toBufferView().toString()).toBe( - "tableName boolCol=t,timestampCol=1658484765000000t\n" + 'tableName boolCol=t,timestampCol=1658484765000000t\n' + ); + }); + + it('supports timestamp field as ms number', function () { + const sender = new Sender({bufferSize: 1024}); + sender.table('tableName') + .booleanColumn('boolCol', true) + .timestampColumn('timestampCol', 1658484765000, 'ms') + .atNow(); + expect(sender.toBufferView().toString()).toBe( + 'tableName boolCol=t,timestampCol=1658484765000000t\n' ); }); it('supports timestamp field as BigInt', function () { const sender = new Sender({bufferSize: 1024}); - sender.table("tableName") - .booleanColumn("boolCol", true) - .timestampColumn("timestampCol", 1658484765000000n) + sender.table('tableName') + .booleanColumn('boolCol', true) + .timestampColumn('timestampCol', 1658484765000000n) + .atNow(); + expect(sender.toBufferView().toString()).toBe( + 'tableName boolCol=t,timestampCol=1658484765000000t\n' + ); + }); + + it('supports timestamp field as ns BigInt', function () { + const sender = new Sender({bufferSize: 1024}); + sender.table('tableName') + .booleanColumn('boolCol', true) + .timestampColumn('timestampCol', 1658484765000000000n, 'ns') + .atNow(); + expect(sender.toBufferView().toString()).toBe( + 'tableName boolCol=t,timestampCol=1658484765000000t\n' + ); + }); + + it('supports timestamp field as us BigInt', function () { + const sender = new Sender({bufferSize: 1024}); + sender.table('tableName') + .booleanColumn('boolCol', true) + .timestampColumn('timestampCol', 1658484765000000n, 'us') .atNow(); expect(sender.toBufferView().toString()).toBe( - "tableName boolCol=t,timestampCol=1658484765000000t\n" + 'tableName boolCol=t,timestampCol=1658484765000000t\n' ); }); - it('supports setting designated timestamp as string from client', function () { + it('supports timestamp field as ms BigInt', function () { const sender = new Sender({bufferSize: 1024}); - sender.table("tableName") - .booleanColumn("boolCol", true) - .timestampColumn("timestampCol", 1658484765000000) - .at("1658484769000000123"); + sender.table('tableName') + .booleanColumn('boolCol', true) + .timestampColumn('timestampCol', 1658484765000n, 'ms') + .atNow(); + expect(sender.toBufferView().toString()).toBe( + 'tableName boolCol=t,timestampCol=1658484765000000t\n' + ); + }); + + it('throws on invalid designated timestamp unit', function () { + const sender = new Sender({bufferSize: 1024}); + try { + sender.table('tableName') + .booleanColumn('boolCol', true) + .timestampColumn('timestampCol', 1658484765000000) + .at(1658484769000000, 'foobar'); + } catch(err) { + expect(err.message).toBe('Unknown timestamp unit: foobar'); + } + }); + + it('supports setting designated us timestamp as number from client', function () { + const sender = new Sender({bufferSize: 1024}); + sender.table('tableName') + .booleanColumn('boolCol', true) + .timestampColumn('timestampCol', 1658484765000000) + .at(1658484769000000, 'us'); expect(sender.toBufferView().toString()).toBe( - "tableName boolCol=t,timestampCol=1658484765000000t 1658484769000000123\n" + 'tableName boolCol=t,timestampCol=1658484765000000t 1658484769000000000\n' + ); + }); + + it('supports setting designated ms timestamp as number from client', function () { + const sender = new Sender({bufferSize: 1024}); + sender.table('tableName') + .booleanColumn('boolCol', true) + .timestampColumn('timestampCol', 1658484765000000) + .at(1658484769000, 'ms'); + expect(sender.toBufferView().toString()).toBe( + 'tableName boolCol=t,timestampCol=1658484765000000t 1658484769000000000\n' ); }); it('supports setting designated timestamp as BigInt from client', function () { const sender = new Sender({bufferSize: 1024}); - sender.table("tableName") - .booleanColumn("boolCol", true) - .timestampColumn("timestampCol", 1658484765000000) - .at(1658484769000000123n); + sender.table('tableName') + .booleanColumn('boolCol', true) + .timestampColumn('timestampCol', 1658484765000000) + .at(1658484769000000n); + expect(sender.toBufferView().toString()).toBe( + 'tableName boolCol=t,timestampCol=1658484765000000t 1658484769000000000\n' + ); + }); + + it('supports setting designated ns timestamp as BigInt from client', function () { + const sender = new Sender({bufferSize: 1024}); + sender.table('tableName') + .booleanColumn('boolCol', true) + .timestampColumn('timestampCol', 1658484765000000) + .at(1658484769000000123n, 'ns'); + expect(sender.toBufferView().toString()).toBe( + 'tableName boolCol=t,timestampCol=1658484765000000t 1658484769000000123\n' + ); + }); + + it('supports setting designated us timestamp as BigInt from client', function () { + const sender = new Sender({bufferSize: 1024}); + sender.table('tableName') + .booleanColumn('boolCol', true) + .timestampColumn('timestampCol', 1658484765000000) + .at(1658484769000000n, 'us'); expect(sender.toBufferView().toString()).toBe( - "tableName boolCol=t,timestampCol=1658484765000000t 1658484769000000123\n" + 'tableName boolCol=t,timestampCol=1658484765000000t 1658484769000000000\n' + ); + }); + + it('supports setting designated ms timestamp as BigInt from client', function () { + const sender = new Sender({bufferSize: 1024}); + sender.table('tableName') + .booleanColumn('boolCol', true) + .timestampColumn('timestampCol', 1658484765000000) + .at(1658484769000n, 'ms'); + expect(sender.toBufferView().toString()).toBe( + 'tableName boolCol=t,timestampCol=1658484765000000t 1658484769000000000\n' ); }); @@ -303,96 +437,96 @@ describe('Sender message builder test suite (anything not covered in client inte const sender = new Sender({bufferSize: 1024}); expect( () => sender.table(23456) - ).toThrow("Table name must be a string, received number"); + ).toThrow('Table name must be a string, received number'); }); it('throws exception if table name is too long', function () { const sender = new Sender({bufferSize: 1024}); expect( - () => sender.table("123456789012345678901234567890123456789012345678901234567890" - + "12345678901234567890123456789012345678901234567890123456789012345678") - ).toThrow("Table name is too long, max length is 127"); + () => sender.table('123456789012345678901234567890123456789012345678901234567890' + + '12345678901234567890123456789012345678901234567890123456789012345678') + ).toThrow('Table name is too long, max length is 127'); }); it('throws exception if table name is set more times', function () { const sender = new Sender({bufferSize: 1024}); expect( - () => sender.table("tableName") - .symbol("name", "value") - .table("newTableName") - ).toThrow("Table name has already been set"); + () => sender.table('tableName') + .symbol('name', 'value') + .table('newTableName') + ).toThrow('Table name has already been set'); }); it('throws exception if symbol name is not a string', function () { const sender = new Sender({bufferSize: 1024}); expect( - () => sender.table("tableName") - .symbol(12345.5656, "value") - ).toThrow("Symbol name must be a string, received number"); + () => sender.table('tableName') + .symbol(12345.5656, 'value') + ).toThrow('Symbol name must be a string, received number'); }); it('throws exception if symbol name is empty string', function () { const sender = new Sender({bufferSize: 1024}); expect( - () => sender.table("tableName") - .symbol("", "value") - ).toThrow("Empty string is not allowed as column name"); + () => sender.table('tableName') + .symbol('', 'value') + ).toThrow('Empty string is not allowed as column name'); }); it('throws exception if column name is not a string', function () { const sender = new Sender({bufferSize: 1024}); expect( - () => sender.table("tableName") - .stringColumn(12345.5656, "value") - ).toThrow("Column name must be a string, received number"); + () => sender.table('tableName') + .stringColumn(12345.5656, 'value') + ).toThrow('Column name must be a string, received number'); }); it('throws exception if column name is empty string', function () { const sender = new Sender({bufferSize: 1024}); expect( - () => sender.table("tableName") - .stringColumn("", "value") - ).toThrow("Empty string is not allowed as column name"); + () => sender.table('tableName') + .stringColumn('', 'value') + ).toThrow('Empty string is not allowed as column name'); }); it('throws exception if column name is too long', function () { const sender = new Sender({bufferSize: 1024}); expect( - () => sender.table("tableName") - .stringColumn("123456789012345678901234567890123456789012345678901234567890" - + "12345678901234567890123456789012345678901234567890123456789012345678", "value") - ).toThrow("Column name is too long, max length is 127"); + () => sender.table('tableName') + .stringColumn('123456789012345678901234567890123456789012345678901234567890' + + '12345678901234567890123456789012345678901234567890123456789012345678', 'value') + ).toThrow('Column name is too long, max length is 127'); }); it('throws exception if column value is not the right type', function () { const sender = new Sender({bufferSize: 1024}); expect( - () => sender.table("tableName") - .stringColumn("columnName", false) - ).toThrow("Column value must be of type string, received boolean"); + () => sender.table('tableName') + .stringColumn('columnName', false) + ).toThrow('Column value must be of type string, received boolean'); }); it('throws exception if adding column without setting table name', function () { const sender = new Sender({bufferSize: 1024}); expect( - () => sender.floatColumn("name", 12.459) - ).toThrow("Column can be set only after table name is set"); + () => sender.floatColumn('name', 12.459) + ).toThrow('Column can be set only after table name is set'); }); it('throws exception if adding symbol without setting table name', function () { const sender = new Sender({bufferSize: 1024}); expect( - () => sender.symbol("name", "value") - ).toThrow("Symbol can be added only after table name is set and before any column added"); + () => sender.symbol('name', 'value') + ).toThrow('Symbol can be added only after table name is set and before any column added'); }); it('throws exception if adding symbol after columns', function () { const sender = new Sender({bufferSize: 1024}); expect( - () => sender.table("tableName") - .stringColumn("name", "value") - .symbol("symbolName", "symbolValue") - ).toThrow("Symbol can be added only after table name is set and before any column added"); + () => sender.table('tableName') + .stringColumn('name', 'value') + .symbol('symbolName', 'symbolValue') + ).toThrow('Symbol can be added only after table name is set and before any column added'); }); it('returns null if preparing an empty buffer for send', function () { @@ -402,117 +536,108 @@ describe('Sender message builder test suite (anything not covered in client inte it('ignores unfinished rows when preparing a buffer for send', function () { const sender = new Sender({bufferSize: 1024}); - sender.table("tableName") - .symbol("name", "value") - .at("1234567890"); - sender.table("tableName") - .symbol("name", "value2"); + sender.table('tableName') + .symbol('name', 'value') + .at(1234567890n, 'ns'); + sender.table('tableName') + .symbol('name', 'value2'); expect( sender.toBufferView(sender.endOfLastRow).toString() - ).toBe("tableName,name=value 1234567890\n"); + ).toBe('tableName,name=value 1234567890\n'); }); it('throws exception if a float is passed as integer field', function () { const sender = new Sender({bufferSize: 1024}); expect( - () => sender.table("tableName") - .intColumn("intField", 123.222) - ).toThrow("Value must be an integer, received 123.222"); + () => sender.table('tableName') + .intColumn('intField', 123.222) + ).toThrow('Value must be an integer, received 123.222'); }); it('throws exception if a float is passed as timestamp field', function () { const sender = new Sender({bufferSize: 1024}); expect( - () => sender.table("tableName") - .timestampColumn("intField", 123.222) - ).toThrow("Value must be an integer or BigInt, received 123.222"); - }); - - it('throws exception if designated timestamp is not a string or bigint', function () { - const sender = new Sender({bufferSize: 1024}); - expect( - () => sender.table("tableName") - .symbol("name", "value") - .at(23232322323) - ).toThrow("The designated timestamp must be of type string or BigInt, received number"); + () => sender.table('tableName') + .timestampColumn('intField', 123.222) + ).toThrow('Value must be an integer or BigInt, received 123.222'); }); - it('throws exception if designated timestamp is an empty string', function () { + it('throws exception if designated timestamp is not an integer or bigint', function () { const sender = new Sender({bufferSize: 1024}); expect( - () => sender.table("tableName") - .symbol("name", "value") - .at("") - ).toThrow("Empty string is not allowed as designated timestamp"); + () => sender.table('tableName') + .symbol('name', 'value') + .at(23232322323.05) + ).toThrow('Designated timestamp must be an integer or BigInt, received 23232322323.05'); }); it('throws exception if designated timestamp is invalid', function () { const sender = new Sender({bufferSize: 1024}); expect( - () => sender.table("tableName") - .symbol("name", "value") - .at("343434.5656") - ).toThrow("Invalid character in designated timestamp: ."); + () => sender.table('tableName') + .symbol('name', 'value') + .at('invalid_dts') + ).toThrow('Designated timestamp must be an integer or BigInt, received invalid_dts'); }); it('throws exception if designated timestamp is set without any fields added', function () { const sender = new Sender({bufferSize: 1024}); expect( - () => sender.table("tableName") - .at("12345678") - ).toThrow("The row must have a symbol or column set before it is closed"); + () => sender.table('tableName') + .at(12345678n, 'ns') + ).toThrow('The row must have a symbol or column set before it is closed'); }); it('extends the size of the buffer if data does not fit', function () { const sender = new Sender({bufferSize: 8}); expect(sender.bufferSize).toBe(8); expect(sender.position).toBe(0); - sender.table("tableName"); + sender.table('tableName'); expect(sender.bufferSize).toBe(16); - expect(sender.position).toBe("tableName".length); - sender.intColumn("intField", 123); + expect(sender.position).toBe('tableName'.length); + sender.intColumn('intField', 123); expect(sender.bufferSize).toBe(32); - expect(sender.position).toBe("tableName intField=123i".length); + expect(sender.position).toBe('tableName intField=123i'.length); sender.atNow(); expect(sender.bufferSize).toBe(32); - expect(sender.position).toBe("tableName intField=123i\n".length); + expect(sender.position).toBe('tableName intField=123i\n'.length); expect(sender.toBufferView().toString()).toBe( - "tableName intField=123i\n" + 'tableName intField=123i\n' ); - sender.table("table2") - .intColumn("intField", 125) - .stringColumn("strField", "test") + sender.table('table2') + .intColumn('intField', 125) + .stringColumn('strField', 'test') .atNow(); expect(sender.bufferSize).toBe(64); - expect(sender.position).toBe("tableName intField=123i\ntable2 intField=125i,strField=\"test\"\n".length); + expect(sender.position).toBe('tableName intField=123i\ntable2 intField=125i,strField="test"\n'.length); expect(sender.toBufferView().toString()).toBe( - "tableName intField=123i\ntable2 intField=125i,strField=\"test\"\n" + 'tableName intField=123i\ntable2 intField=125i,strField="test"\n' ); }); it('is possible to clear the buffer by calling reset()', function () { const sender = new Sender({bufferSize: 1024}); - sender.table("tableName") - .booleanColumn("boolCol", true) - .timestampColumn("timestampCol", 1658484765000000) + sender.table('tableName') + .booleanColumn('boolCol', true) + .timestampColumn('timestampCol', 1658484765000000) .atNow(); - sender.table("tableName") - .booleanColumn("boolCol", false) - .timestampColumn("timestampCol", 1658484766000000) + sender.table('tableName') + .booleanColumn('boolCol', false) + .timestampColumn('timestampCol', 1658484766000000) .atNow(); expect(sender.toBufferView().toString()).toBe( - "tableName boolCol=t,timestampCol=1658484765000000t\n" - + "tableName boolCol=f,timestampCol=1658484766000000t\n" + 'tableName boolCol=t,timestampCol=1658484765000000t\n' + + 'tableName boolCol=f,timestampCol=1658484766000000t\n' ); sender.reset(); - sender.table("tableName") - .floatColumn("floatCol", 1234567890) - .timestampColumn("timestampCol", 1658484767000000) + sender.table('tableName') + .floatColumn('floatCol', 1234567890) + .timestampColumn('timestampCol', 1658484767000000) .atNow(); expect(sender.toBufferView().toString()).toBe( - "tableName floatCol=1234567890,timestampCol=1658484767000000t\n" + 'tableName floatCol=1234567890,timestampCol=1658484767000000t\n' ); }); }); @@ -549,7 +674,7 @@ describe('Sender options test suite', function () { }); it('does copy the buffer during flush() if copyBuffer is not a boolean', function () { - const sender = new Sender({copyBuffer: ""}); + const sender = new Sender({copyBuffer: ''}); expect(sender.toBuffer).toBe(sender.toBufferNew); }); @@ -609,7 +734,7 @@ describe('Sender options test suite', function () { }); it('sets default buffer size if bufferSize is not a number', function () { - const sender = new Sender({bufferSize: "1024"}); + const sender = new Sender({bufferSize: '1024'}); expect(sender.bufferSize).toBe(DEFAULT_BUFFER_SIZE); }); @@ -655,12 +780,12 @@ describe('Sender options test suite', function () { }); it('uses default logger if log is not a function', function () { - const sender = new Sender({log: ""}); + const sender = new Sender({log: ''}); expect(sender.log).toBe(log); }); }); -describe("Sender tests with containerized QuestDB instance", () => { +describe('Sender tests with containerized QuestDB instance', () => { let container; async function query(container, query) { @@ -708,7 +833,7 @@ describe("Sender tests with containerized QuestDB instance", () => { } function getFieldsString(schema) { - let fields = ""; + let fields = ''; for (const element of schema) { fields += `${element.name} ${element.type}, `; } @@ -717,46 +842,46 @@ describe("Sender tests with containerized QuestDB instance", () => { beforeAll(async () => { jest.setTimeout(3000000); - container = await new GenericContainer("questdb/questdb") + container = await new GenericContainer('questdb/questdb:7.3.2') .withExposedPorts(QUESTDB_HTTP_PORT, QUESTDB_ILP_PORT) .start(); const stream = await container.logs(); stream - .on("data", line => console.log(line)) - .on("err", line => console.error(line)) - .on("end", () => console.log("Stream closed")); + .on('data', line => console.log(line)) + .on('err', line => console.error(line)) + .on('end', () => console.log('Stream closed')); }); afterAll(async () => { await container.stop(); }); - it("can ingest data and run queries", async () => { + it('can ingest data and run queries', async () => { const sender = new Sender(); await sender.connect({host: container.getHost(), port: container.getMappedPort(QUESTDB_ILP_PORT)}); - const tableName = "test"; + const tableName = 'test'; const schema = [ - {name: "location", type: "SYMBOL"}, - {name: "temperature", type: "DOUBLE"}, - {name: "timestamp", type: "TIMESTAMP"} + {name: 'location', type: 'SYMBOL'}, + {name: 'temperature', type: 'DOUBLE'}, + {name: 'timestamp', type: 'TIMESTAMP'} ]; // create table let createTableResult = await query(container, - `CREATE TABLE ${tableName}(${getFieldsString(schema)}) TIMESTAMP (timestamp) PARTITION BY DAY BYPASS WAL` + `CREATE TABLE ${tableName}(${getFieldsString(schema)}) TIMESTAMP (timestamp) PARTITION BY DAY BYPASS WAL;` ); - expect(createTableResult.ddl).toBe("OK"); + expect(createTableResult.ddl).toBe('OK'); // alter table let alterTableResult = await query(container, - `ALTER TABLE ${tableName} SET PARAM maxUncommittedRows = 1` + `ALTER TABLE ${tableName} SET PARAM maxUncommittedRows = 1;` ); - expect(alterTableResult.ddl).toBe("OK"); + expect(alterTableResult.ddl).toBe('OK'); // ingest via client - sender.table(tableName).symbol("location", "us").floatColumn("temperature", 17.1).at("1658484765000000000"); + sender.table(tableName).symbol('location', 'us').floatColumn('temperature', 17.1).at(1658484765000000000n, 'ns'); await sender.flush(); // query table @@ -765,63 +890,63 @@ describe("Sender tests with containerized QuestDB instance", () => { expect(select1Result.count).toBe(1); expect(select1Result.columns).toStrictEqual(schema); expect(select1Result.dataset).toStrictEqual([ - ["us",17.1,"2022-07-22T10:12:45.000000Z"] + ['us',17.1,'2022-07-22T10:12:45.000000Z'] ]); // ingest via client, add new column - sender.table(tableName).symbol("location", "us").floatColumn("temperature", 17.3).at("1658484765000666000"); - sender.table(tableName).symbol("location", "emea").floatColumn("temperature", 17.4).at("1658484765000999000"); - sender.table(tableName).symbol("location", "emea").symbol("city", "london").floatColumn("temperature", 18.8).at("1658484765001234000"); + sender.table(tableName).symbol('location', 'us').floatColumn('temperature', 17.3).at(1658484765000666000n, 'ns'); + sender.table(tableName).symbol('location', 'emea').floatColumn('temperature', 17.4).at(1658484765000999000n, 'ns'); + sender.table(tableName).symbol('location', 'emea').symbol('city', 'london').floatColumn('temperature', 18.8).at(1658484765001234000n, 'ns'); await sender.flush(); // query table const select2Result = await runSelect(container, tableName, 4); - expect(select2Result.query).toBe("test"); + expect(select2Result.query).toBe('test'); expect(select2Result.count).toBe(4); expect(select2Result.columns).toStrictEqual([ - {name: "location", type: "SYMBOL"}, - {name: "temperature", type: "DOUBLE"}, - {name: "timestamp", type: "TIMESTAMP"}, - {name: "city", type: "SYMBOL"} + {name: 'location', type: 'SYMBOL'}, + {name: 'temperature', type: 'DOUBLE'}, + {name: 'timestamp', type: 'TIMESTAMP'}, + {name: 'city', type: 'SYMBOL'} ]); expect(select2Result.dataset).toStrictEqual([ - ["us",17.1,"2022-07-22T10:12:45.000000Z",null], - ["us",17.3,"2022-07-22T10:12:45.000666Z",null], - ["emea",17.4,"2022-07-22T10:12:45.000999Z",null], - ["emea",18.8,"2022-07-22T10:12:45.001234Z","london"] + ['us',17.1,'2022-07-22T10:12:45.000000Z',null], + ['us',17.3,'2022-07-22T10:12:45.000666Z',null], + ['emea',17.4,'2022-07-22T10:12:45.000999Z',null], + ['emea',18.8,'2022-07-22T10:12:45.001234Z','london'] ]); await sender.close(); }); - it("does not duplicate rows if await is missing when calling flush", async () => { + it('does not duplicate rows if await is missing when calling flush', async () => { // setting copyBuffer to make sure promises send data from their own local buffer const sender = new Sender({ copyBuffer: true }); await sender.connect({host: container.getHost(), port: container.getMappedPort(QUESTDB_ILP_PORT)}); - const tableName = "test2"; + const tableName = 'test2'; const schema = [ - {name: "location", type: "SYMBOL"}, - {name: "temperature", type: "DOUBLE"}, - {name: "timestamp", type: "TIMESTAMP"} + {name: 'location', type: 'SYMBOL'}, + {name: 'temperature', type: 'DOUBLE'}, + {name: 'timestamp', type: 'TIMESTAMP'} ]; // create table let createTableResult = await query(container, - `CREATE TABLE ${tableName}(${getFieldsString(schema)}) TIMESTAMP (timestamp) PARTITION BY DAY` + `CREATE TABLE ${tableName}(${getFieldsString(schema)}) TIMESTAMP (timestamp) PARTITION BY DAY BYPASS WAL;` ); - expect(createTableResult.ddl).toBe("OK"); + expect(createTableResult.ddl).toBe('OK'); // alter table let alterTableResult = await query(container, - `ALTER TABLE ${tableName} SET PARAM maxUncommittedRows = 1` + `ALTER TABLE ${tableName} SET PARAM maxUncommittedRows = 1;` ); - expect(alterTableResult.ddl).toBe("OK"); + expect(alterTableResult.ddl).toBe('OK'); // ingest via client const numOfRows = 100; for (let i = 0; i < numOfRows; i++) { - sender.table(tableName).symbol("location", "us").floatColumn("temperature", i).at("1658484765000000000"); + sender.table(tableName).symbol('location', 'us').floatColumn('temperature', i).at(1658484765000000000n, 'ns'); // missing await is intentional sender.flush(); } @@ -835,7 +960,7 @@ describe("Sender tests with containerized QuestDB instance", () => { const expectedData = []; for (let i = 0; i < numOfRows; i++) { - expectedData.push(["us",i,"2022-07-22T10:12:45.000000Z"]); + expectedData.push(['us',i,'2022-07-22T10:12:45.000000Z']); } expect(selectResult.dataset).toStrictEqual(expectedData); diff --git a/test/testapp.js b/test/testapp.js index cfb9a46..fbeac92 100644 --- a/test/testapp.js +++ b/test/testapp.js @@ -1,24 +1,24 @@ 'use strict'; -const { Proxy } = require("./proxy"); -const { Sender } = require("../index"); +const { Proxy } = require('./proxy'); +const { Sender } = require('../index'); const { readFileSync } = require('fs'); const PROXY_PORT = 9099; const PORT = 9009; -const HOST = "127.0.0.1"; +const HOST = '127.0.0.1'; -const PRIVATE_KEY = "9b9x5WhJywDEuo1KGQWSPNxtX-6X6R2BRCKhYMMY6n8"; +const PRIVATE_KEY = '9b9x5WhJywDEuo1KGQWSPNxtX-6X6R2BRCKhYMMY6n8'; const PUBLIC_KEY = { - x: "aultdA0PjhD_cWViqKKyL5chm6H1n-BiZBo_48T-uqc", - y: "__ptaol41JWSpTTL525yVEfzmY8A6Vi_QrW1FjKcHMg" + x: 'aultdA0PjhD_cWViqKKyL5chm6H1n-BiZBo_48T-uqc', + y: '__ptaol41JWSpTTL525yVEfzmY8A6Vi_QrW1FjKcHMg' }; const JWK = { ...PUBLIC_KEY, - kid: "testapp", - kty: "EC", + kid: 'testapp', + kty: 'EC', d: PRIVATE_KEY, - crv: "P-256", + crv: 'P-256', }; const senderTLS = { @@ -40,34 +40,33 @@ async function run() { const sender = new Sender({bufferSize: 1024, jwk: JWK}); //with authentication const connected = await sender.connect(senderTLS, true); //connection through proxy with encryption if (connected) { - sender.table("test") - .symbol("location", "emea").symbol("city", "budapest") - .stringColumn("hoppa", "hello").stringColumn("hippi", "hello").stringColumn("hippo", "haho") - .floatColumn("temperature", 14.1).intColumn("intcol", 56).timestampColumn("tscol", Date.now() * 1000) + sender.table('test') + .symbol('location', 'emea').symbol('city', 'budapest') + .stringColumn('hoppa', 'hello').stringColumn('hippi', 'hello').stringColumn('hippo', 'haho') + .floatColumn('temperature', 14.1).intColumn('intcol', 56) + .timestampColumn('tscol', Date.now(), 'ms') .atNow(); - sender.table("test") - .symbol("location", "asia").symbol("city", "singapore") - .stringColumn("hoppa", "hi").stringColumn("hopp", "hello").stringColumn("hippo", "huhu") - .floatColumn("temperature", 7.1) - .at("1658484765000555000"); + sender.table('test') + .symbol('location', 'asia').symbol('city', 'singapore') + .stringColumn('hoppa', 'hi').stringColumn('hopp', 'hello').stringColumn('hippo', 'huhu') + .floatColumn('temperature', 7.1) + .at(1658484765000555000n, 'ns'); - console.log("sending:\n" + sender.toBuffer().toString()); + console.log('sending:\n' + sender.toBuffer().toString()); await sender.flush(); - sender.table("test") - .symbol("location", "emea").symbol("city", "miskolc") - .stringColumn("hoppa", "hello").stringColumn("hippi", "hello").stringColumn("hippo", "lalalala") - .floatColumn("temperature", 13.1).intColumn("intcol", 333) + sender.table('test') + .symbol('location', 'emea').symbol('city', 'miskolc') + .stringColumn('hoppa', 'hello').stringColumn('hippi', 'hello').stringColumn('hippo', 'lalalala') + .floatColumn('temperature', 13.1).intColumn('intcol', 333) .atNow(); - console.log("sending:\n" + sender.toBuffer().toString()); + console.log('sending:\n' + sender.toBuffer().toString()); await sender.flush(); } await sender.close(); await proxy.stop(); - return 0; } -run().then(value => console.log(value)) - .catch(err => console.log(err)); +run().catch(console.error); diff --git a/types/src/sender.d.ts b/types/src/sender.d.ts index c7cd5e7..3797b51 100644 --- a/types/src/sender.d.ts +++ b/types/src/sender.d.ts @@ -150,16 +150,18 @@ export class Sender { * Write a timestamp column with its value into the buffer of the sender. * * @param {string} name - Column name. - * @param {number | bigint} value - Epoch timestamp in microseconds, accepts only numbers or BigInts. + * @param {number | bigint} value - Epoch timestamp, accepts numbers or BigInts. + * @param {string} [unit=us] - Timestamp unit. Supported values: 'ns' - nanoseconds, 'us' - microseconds, 'ms' - milliseconds. Defaults to 'us'. * @return {Sender} Returns with a reference to this sender. */ - timestampColumn(name: string, value: number | bigint): Sender; + timestampColumn(name: string, value: number | bigint, unit?: string): Sender; /** * Closing the row after writing the designated timestamp into the buffer of the sender. * - * @param {string | bigint} timestamp - A string or BigInt that represents the designated timestamp in epoch nanoseconds. + * @param {number | bigint} timestamp - Designated epoch timestamp, accepts numbers or BigInts. + * @param {string} [unit=us] - Timestamp unit. Supported values: 'ns' - nanoseconds, 'us' - microseconds, 'ms' - milliseconds. Defaults to 'us'. */ - at(timestamp: string | bigint): void; + at(timestamp: number | bigint, unit?: string): void; /** * Closing the row without writing designated timestamp into the buffer of the sender.
            * Designated timestamp will be populated by the server on this record. diff --git a/types/src/sender.d.ts.map b/types/src/sender.d.ts.map index bdde905..e2409d5 100644 --- a/types/src/sender.d.ts.map +++ b/types/src/sender.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"sender.d.ts","sourceRoot":"","sources":["../../src/sender.js"],"names":[],"mappings":";;;AAWA;;;;;;;;;;;;GAYG;AACH;IAeI;;;;;;;;;;;;;;;;;;;;;;OAsBG;IACH,sBApBW,MAAM,EAmChB;IAnDD,eAAe,CAAC,YAAI;IACpB,eAAe,CAAC,eAAO;IACvB,eAAe,CAAC,mBAAW;IAC3B,eAAe,CAAC,eAAO;IACvB,eAAe,CAAC,iBAAS;IACzB,eAAe,CAAC,kBAAU;IAC1B,eAAe,CAAC,iBAAS;IACzB,eAAe,CAAC,qBAAa;IAC7B,eAAe,CAAC,iBAAS;IACzB,eAAe,CAAC,mBAAW;IAC3B,eAAe,CAAC,mBAAW;IAC3B,eAAe,CAAC,YAAI;IA0CpB;;;;;;OAMG;IACH,mBAFW,MAAM,QAShB;IAED;;;;;OAKG;IACH,SAFY,MAAM,CAMjB;IAED;;;;;;;OAOG;IACH,iBALW,IAAI,cAAc,GAAG,IAAI,iBAAiB,WAC1C,OAAO,GAEN,QAAQ,OAAO,CAAC,CAoD3B;IAED;;;OAGG;IACH,uBAKC;IAED;;;;;OAKG;IACH,SAFY,QAAQ,OAAO,CAAC,CAY3B;IAED;;;;OAIG;IACH,yBAHY,MAAM,CAOjB;IAED;;;;OAIG;IACH,wBAHY,MAAM,CAWjB;IAED;;;;;OAKG;IACH,aAHW,MAAM,GACL,MAAM,CAcjB;IAED;;;;;;OAMG;IACH,aAJW,MAAM,SACN,GAAG,GACF,MAAM,CAkBjB;IAED;;;;;;OAMG;IACH,mBAJW,MAAM,SACN,MAAM,GACL,MAAM,CAUjB;IAED;;;;;;OAMG;IACH,oBAJW,MAAM,SACN,OAAO,GACN,MAAM,CAQjB;IAED;;;;;;OAMG;IACH,kBAJW,MAAM,SACN,MAAM,GACL,MAAM,CASjB;IAED;;;;;;OAMG;IACH,gBAJW,MAAM,SACN,MAAM,GACL,MAAM,CAajB;IAED;;;;;;OAMG;IACH,sBAJW,MAAM,SACN,MAAM,GAAG,MAAM,GACd,MAAM,CAajB;IAED;;;;OAIG;IACH,cAFW,MAAM,GAAG,MAAM,QAgBzB;IAED;;;OAGG;IACH,cAOC;CACJ;AA3XD,uCAAiC"} \ No newline at end of file +{"version":3,"file":"sender.d.ts","sourceRoot":"","sources":["../../src/sender.js"],"names":[],"mappings":";;;AAaA;;;;;;;;;;;;GAYG;AACH;IAeI;;;;;;;;;;;;;;;;;;;;;;OAsBG;IACH,sBApBW,MAAM,EAmChB;IAnDD,eAAe,CAAC,YAAI;IACpB,eAAe,CAAC,eAAO;IACvB,eAAe,CAAC,mBAAW;IAC3B,eAAe,CAAC,eAAO;IACvB,eAAe,CAAC,iBAAS;IACzB,eAAe,CAAC,kBAAU;IAC1B,eAAe,CAAC,iBAAS;IACzB,eAAe,CAAC,qBAAa;IAC7B,eAAe,CAAC,iBAAS;IACzB,eAAe,CAAC,mBAAW;IAC3B,eAAe,CAAC,mBAAW;IAC3B,eAAe,CAAC,YAAI;IA0CpB;;;;;;OAMG;IACH,mBAFW,MAAM,QAShB;IAED;;;;;OAKG;IACH,SAFY,MAAM,CAMjB;IAED;;;;;;;OAOG;IACH,iBALW,IAAI,cAAc,GAAG,IAAI,iBAAiB,WAC1C,OAAO,GAEN,QAAQ,OAAO,CAAC,CAoD3B;IAED;;;OAGG;IACH,uBAKC;IAED;;;;;OAKG;IACH,SAFY,QAAQ,OAAO,CAAC,CAY3B;IAED;;;;OAIG;IACH,yBAHY,MAAM,CAOjB;IAED;;;;OAIG;IACH,wBAHY,MAAM,CAWjB;IAED;;;;;OAKG;IACH,aAHW,MAAM,GACL,MAAM,CAcjB;IAED;;;;;;OAMG;IACH,aAJW,MAAM,SACN,GAAG,GACF,MAAM,CAkBjB;IAED;;;;;;OAMG;IACH,mBAJW,MAAM,SACN,MAAM,GACL,MAAM,CAUjB;IAED;;;;;;OAMG;IACH,oBAJW,MAAM,SACN,OAAO,GACN,MAAM,CAQjB;IAED;;;;;;OAMG;IACH,kBAJW,MAAM,SACN,MAAM,GACL,MAAM,CASjB;IAED;;;;;;OAMG;IACH,gBAJW,MAAM,SACN,MAAM,GACL,MAAM,CAajB;IAED;;;;;;;OAOG;IACH,sBALW,MAAM,SACN,MAAM,GAAG,MAAM,SACf,MAAM,GACL,MAAM,CAcjB;IAED;;;;;OAKG;IACH,cAHW,MAAM,GAAG,MAAM,SACf,MAAM,QAgBhB;IAED;;;OAGG;IACH,cAOC;CACJ;AA9XD,uCAAiC"} \ No newline at end of file diff --git a/types/src/validation.d.ts b/types/src/validation.d.ts index b84b604..9ca7056 100644 --- a/types/src/validation.d.ts +++ b/types/src/validation.d.ts @@ -12,11 +12,4 @@ export function validateTableName(name: string): void; * @param {string} name - The column name to validate. */ export function validateColumnName(name: string): void; -/** - * Validates a designated timestamp. The value must contain only digits.
            - * Throws an error if the value is invalid. - * - * @param {string | bigint} timestamp - The timestamp to validate. - */ -export function validateDesignatedTimestamp(timestamp: string | bigint): void; //# sourceMappingURL=validation.d.ts.map \ No newline at end of file diff --git a/types/src/validation.d.ts.map b/types/src/validation.d.ts.map index 958bf40..fe29188 100644 --- a/types/src/validation.d.ts.map +++ b/types/src/validation.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"validation.d.ts","sourceRoot":"","sources":["../../src/validation.js"],"names":[],"mappings":"AAIA;;;;;GAKG;AACH,wCAFW,MAAM,QAyDhB;AAED;;;;;GAKG;AACH,yCAFW,MAAM,QAgDhB;AAED;;;;;GAKG;AACH,uDAFW,MAAM,GAAG,MAAM,QAezB"} \ No newline at end of file +{"version":3,"file":"validation.d.ts","sourceRoot":"","sources":["../../src/validation.js"],"names":[],"mappings":"AAIA;;;;;GAKG;AACH,wCAFW,MAAM,QAyDhB;AAED;;;;;GAKG;AACH,yCAFW,MAAM,QAgDhB"} \ No newline at end of file