diff --git a/.changeset/README.md b/.changeset/README.md
new file mode 100644
index 0000000..e5b6d8d
--- /dev/null
+++ b/.changeset/README.md
@@ -0,0 +1,8 @@
+# Changesets
+
+Hello and welcome! This folder has been automatically generated by `@changesets/cli`, a build tool that works
+with multi-package repos, or single-package repos to help you version and publish your code. You can
+find the full documentation for it [in our repository](https://github.com/changesets/changesets)
+
+We have a quick list of common questions to get you started engaging with this project in
+[our documentation](https://github.com/changesets/changesets/blob/main/docs/common-questions.md)
diff --git a/.changeset/brave-hairs-tan.md b/.changeset/brave-hairs-tan.md
new file mode 100644
index 0000000..798679b
--- /dev/null
+++ b/.changeset/brave-hairs-tan.md
@@ -0,0 +1,6 @@
+---
+'@powersync/mysql-zongji': minor
+---
+
+Initial release of the powersync-mysql-zongji fork
+ - Added custom gtid binlog event
diff --git a/.changeset/config.json b/.changeset/config.json
new file mode 100644
index 0000000..91b6a95
--- /dev/null
+++ b/.changeset/config.json
@@ -0,0 +1,11 @@
+{
+ "$schema": "https://unpkg.com/@changesets/config@3.0.0/schema.json",
+ "changelog": "@changesets/cli/changelog",
+ "commit": false,
+ "fixed": [],
+ "linked": [],
+ "access": "restricted",
+ "baseBranch": "main",
+ "updateInternalDependencies": "patch",
+ "ignore": []
+}
diff --git a/.eslintrc b/.eslintrc
deleted file mode 100644
index b418bd8..0000000
--- a/.eslintrc
+++ /dev/null
@@ -1,19 +0,0 @@
-{
- "env": {
- "node": true,
- "es2020": true
- },
- "extends": "eslint:recommended",
- "rules": {
- "comma-dangle": ["warn", "only-multiline"],
- "eol-last": ["error"],
- "keyword-spacing": ["error", { "before": true } ],
- "no-console": "off",
- "no-trailing-spaces": ["error", { "skipBlankLines": true }],
- "no-unused-vars": "warn",
- "no-var": "warn",
- "quotes": ["warn", "single", "avoid-escape"],
- "semi": ["error", "always"],
- "space-before-blocks": "error"
- }
-}
diff --git a/.github/workflows/dev-packages.yaml b/.github/workflows/dev-packages.yaml
new file mode 100644
index 0000000..762c0b3
--- /dev/null
+++ b/.github/workflows/dev-packages.yaml
@@ -0,0 +1,43 @@
+# Action to publish packages under the `next` tag for testing
+# Packages are versioned as `0.0.0-{tag}-DATETIMESTAMP`
+name: Create Dev Release
+
+on:
+ push:
+
+jobs:
+ publish:
+ name: Publish Dev Packages
+ runs-on: ubuntu-latest
+ steps:
+ - uses: actions/checkout@v4
+ with:
+ persist-credentials: false
+ - name: Setup NodeJS
+ uses: actions/setup-node@v4
+ with:
+ node-version-file: '.nvmrc'
+ - uses: pnpm/action-setup@v2
+ name: Install pnpm
+ with:
+ version: 9
+ run_install: false
+ - name: Add NPM auth
+ run: echo "//registry.npmjs.org/:_authToken=${{secrets.NPM_TOKEN}}" >> ~/.npmrc
+ - name: Get pnpm store directory
+ shell: bash
+ run: |
+ echo "STORE_PATH=$(pnpm store path --silent)" >> $GITHUB_ENV
+ - uses: actions/cache@v3
+ name: Setup pnpm cache
+ with:
+ path: ${{ env.STORE_PATH }}
+ key: ${{ runner.os }}-pnpm-store-${{ hashFiles('**/pnpm-lock.yaml') }}
+ restore-keys: |
+ ${{ runner.os }}-pnpm-store-
+ - name: Install dependencies
+ run: pnpm install
+ - name: Version packages
+ run: pnpm changeset version --no-git-tag --snapshot dev
+ - name: Publish
+ run: pnpm changeset publish --tag dev
\ No newline at end of file
diff --git a/.github/workflows/release-packages.yaml b/.github/workflows/release-packages.yaml
new file mode 100644
index 0000000..bec8a58
--- /dev/null
+++ b/.github/workflows/release-packages.yaml
@@ -0,0 +1,62 @@
+name: Release Packages
+
+on:
+ push:
+ branches:
+ - main
+
+concurrency: ${{ github.workflow }}-${{ github.ref }}
+
+jobs:
+ release-packages:
+ name: Release Packages
+ runs-on: ubuntu-latest
+ steps:
+ - name: Checkout Repo
+ uses: actions/checkout@v4
+
+ - name: Setup Node.js
+ uses: actions/setup-node@v4
+ with:
+ node-version-file: '.nvmrc'
+
+ - uses: pnpm/action-setup@v4
+ name: Install pnpm
+ with:
+ version: 9
+ run_install: false
+
+ - name: Get pnpm store directory
+ shell: bash
+ run: |
+ echo "STORE_PATH=$(pnpm store path --silent)" >> $GITHUB_ENV
+
+ - uses: actions/cache@v3
+ name: Setup pnpm cache
+ with:
+ path: ${{ env.STORE_PATH }}
+ key: ${{ runner.os }}-pnpm-store-${{ hashFiles('**/pnpm-lock.yaml') }}
+ restore-keys: |
+ ${{ runner.os }}-pnpm-store-
+
+ - name: Add NPM auth
+ run: |
+ echo "//registry.npmjs.org/:_authToken=${{secrets.NPM_TOKEN}}" >> ~/.npmrc
+
+ - name: Install dependencies
+ run: pnpm install
+
+ - name: Create Release Pull Request or Publish to npm
+ id: changesets
+ uses: changesets/action@v1
+ with:
+ # This expects you to have a script called release which does a build for your packages and calls changeset publish
+ publish: pnpm release
+ version: pnpm changeset version
+ env:
+ GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
+ NPM_TOKEN: ${{ secrets.NPM_TOKEN }}
+
+ - name: Debug Outputs
+ run: |
+ echo "Published Packages: ${{ steps.changesets.outputs.publishedPackages }}"
\ No newline at end of file
diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml
new file mode 100644
index 0000000..69d971a
--- /dev/null
+++ b/.github/workflows/test.yml
@@ -0,0 +1,61 @@
+# Ensures packages test correctly
+name: Test Packages
+
+on:
+ push:
+
+jobs:
+ test:
+ name: Test Packages
+ runs-on: ubuntu-latest
+
+ strategy:
+ fail-fast: false
+ matrix:
+ mysql-version: [ 8.0, 8.4 ]
+
+ steps:
+ - uses: actions/checkout@v4
+ with:
+ persist-credentials: false
+
+ - name: Start MySQL
+ run: |
+ docker run \
+ --name zongji_test \
+ -e MYSQL_ROOT_PASSWORD=my_password \
+ -p 3306:3306 \
+ -d mysql:${{ matrix.mysql-version }} \
+ --server-id=1 \
+ --log-bin=/var/lib/mysql/mysql-bin.log \
+ --binlog-format=row
+
+ - name: Setup NodeJS
+ uses: actions/setup-node@v4
+ with:
+ node-version-file: '.nvmrc'
+
+ - uses: pnpm/action-setup@v2
+ name: Install pnpm
+ with:
+ version: 9
+ run_install: false
+
+ - name: Get pnpm store directory
+ shell: bash
+ run: |
+ echo "STORE_PATH=$(pnpm store path --silent)" >> $GITHUB_ENV
+
+ - uses: actions/cache@v3
+ name: Setup pnpm cache
+ with:
+ path: ${{ env.STORE_PATH }}
+ key: ${{ runner.os }}-pnpm-store-${{ hashFiles('**/pnpm-lock.yaml') }}
+ restore-keys: |
+ ${{ runner.os }}-pnpm-store-
+
+ - name: Install dependencies
+ run: pnpm install
+
+ - name: Test
+ run: pnpm test
\ No newline at end of file
diff --git a/.gitignore b/.gitignore
index 1d435b2..de0075f 100644
--- a/.gitignore
+++ b/.gitignore
@@ -15,6 +15,7 @@ npm-debug.log
.DS_Store
node_modules
.idea
+.tap
*.iml
*~
.\#*
diff --git a/.nvmrc b/.nvmrc
new file mode 100644
index 0000000..a81deba
--- /dev/null
+++ b/.nvmrc
@@ -0,0 +1 @@
+v20.12.2
diff --git a/.prettierrc b/.prettierrc
new file mode 100644
index 0000000..dd651a5
--- /dev/null
+++ b/.prettierrc
@@ -0,0 +1,8 @@
+{
+ "semi": true,
+ "singleQuote": true,
+ "tabWidth": 2,
+ "useTabs": false,
+ "printWidth": 120,
+ "trailingComma": "none"
+}
diff --git a/.travis.yml b/.travis.yml
deleted file mode 100644
index 826217c..0000000
--- a/.travis.yml
+++ /dev/null
@@ -1,15 +0,0 @@
-language: node_js
-sudo: required
-dist: trusty
-node_js:
- - "8"
- - "12"
-services:
- - docker
-before_script:
- - npm run lint
- - docker run -p 3355:3306 --name mysql-55 -e MYSQL_ROOT_PASSWORD=numtel -d mysql:5.5 --server-id=1 --log-bin=/var/lib/mysql/mysql-bin.log --binlog-format=row
- - docker run -p 3356:3306 --name mysql-56 -e MYSQL_ROOT_PASSWORD=numtel -d mysql:5.6 --server-id=1 --log-bin=/var/lib/mysql/mysql-bin.log --binlog-format=row
- - docker run -p 3357:3306 --name mysql-57 -e MYSQL_ROOT_PASSWORD=numtel -d mysql:5.7 --server-id=1 --log-bin=/var/lib/mysql/mysql-bin.log --binlog-format=row
-script:
- - ./test/travis/runner.sh
diff --git a/README.md b/README.md
index d34b0d6..a1af4a2 100644
--- a/README.md
+++ b/README.md
@@ -4,9 +4,9 @@ A MySQL 8.0-compatible fork of ZongJi - a MySQL binlog listener for Node.js, [or
It leverages [`@vlasky/mysql`](https://github.com/vlasky/mysql), a fork of [`mysql`](https://github.com/mysqljs/mysql) with the following enhancements:
-* Support for authentication using the caching_sha2_password plugin, the new default authentication method in MySQL 8.0
-* Partial support for the MySQL compressed protocol (reads compressed data sent by server)
-* Optional sending of keepalive probe packets to check the state of the connection to the MySQL server and help keep the connection open when the network socket is idle
+- Support for authentication using the caching_sha2_password plugin, the new default authentication method in MySQL 8.0
+- Partial support for the MySQL compressed protocol (reads compressed data sent by server)
+- Optional sending of keepalive probe packets to check the state of the connection to the MySQL server and help keep the connection open when the network socket is idle
# Latest Release
@@ -17,10 +17,12 @@ Version 0.4.7 is the last release that supports Node.js version 4.x.
## Quick Start
```javascript
-let zongji = new ZongJi({ /* ... MySQL Connection Settings ... */ });
+let zongji = new ZongJi({
+ /* ... MySQL Connection Settings ... */
+});
// Each change to the replication log results in an event
-zongji.on('binlog', function(evt) {
+zongji.on('binlog', function (evt) {
evt.dump();
});
@@ -34,13 +36,14 @@ For a complete implementation see [`example.js`](example.js)...
## Installation
-* Requires Node.js v8+
+- Requires Node.js v8+
```bash
$ npm install @vlasky/zongji
```
-* Enable MySQL binlog in `my.cnf`, restart MySQL server after making the changes.
+- Enable MySQL binlog in `my.cnf`, restart MySQL server after making the changes.
+
> From [MySQL 5.6](https://dev.mysql.com/doc/refman/5.6/en/replication-options-binary-log.html), binlog checksum is enabled by default. Zongji can work with it, but it doesn't really verify it.
```
@@ -56,7 +59,8 @@ For a complete implementation see [`example.js`](example.js)...
expire_logs_days = 10 # Optional, purge old logs
max_binlog_size = 100M # Optional, limit log size
```
-* Create an account with replication privileges, e.g. given privileges to account `zongji` (or any account that you use to read binary logs)
+
+- Create an account with replication privileges, e.g. given privileges to account `zongji` (or any account that you use to read binary logs)
```sql
GRANT REPLICATION SLAVE, REPLICATION CLIENT, SELECT ON *.* TO 'zongji'@'localhost'
@@ -66,8 +70,8 @@ For a complete implementation see [`example.js`](example.js)...
The `ZongJi` constructor accepts one argument of either:
-* An object containing MySQL connection details in the same format as used by [package mysql](https://npm.im/mysql)
-* Or, a [mysql](https://npm.im/mysql) `Connection` or `Pool` object that will be used for querying column information.
+- An object containing MySQL connection details in the same format as used by [package mysql](https://npm.im/mysql)
+- Or, a [mysql](https://npm.im/mysql) `Connection` or `Pool` object that will be used for querying column information.
If a `Connection` or `Pool` object is passed to the constructor, it will not be destroyed/ended by Zongji's `stop()` method.
@@ -75,86 +79,87 @@ If there is a `dateStrings` `mysql` configuration option in the connection detai
Each instance includes the following methods:
-Method Name | Arguments | Description
-------------|-----------|------------------------
-`start` | `options` | Start receiving replication events, see options listed below
-`stop` | *None* | Disconnect from MySQL server, stop receiving events
-`on` | `eventName`, `handler` | Add a listener to the `binlog` or `error` event. Each handler function accepts one argument.
+| Method Name | Arguments | Description |
+| ----------- | ---------------------- | -------------------------------------------------------------------------------------------- |
+| `start` | `options` | Start receiving replication events, see options listed below |
+| `stop` | _None_ | Disconnect from MySQL server, stop receiving events |
+| `on` | `eventName`, `handler` | Add a listener to the `binlog` or `error` event. Each handler function accepts one argument. |
Some events can be emitted in different phases:
-Event Name | Description
------------|------------------------
-`ready` | This event is occurred right after ZongJi successfully established a connection, setup slave status, and set binlog position.
-`binlog` | Once a binlog is received and passes the filter, it will bubble up with this event.
-`error` | Every error will be caught by this event.
-`stopped` | Emitted when ZongJi connection is stopped (ZongJi#stop is called).
+| Event Name | Description |
+| ---------- | ----------------------------------------------------------------------------------------------------------------------------- |
+| `ready` | This event is occurred right after ZongJi successfully established a connection, setup slave status, and set binlog position. |
+| `binlog` | Once a binlog is received and passes the filter, it will bubble up with this event. |
+| `error` | Every error will be caught by this event. |
+| `stopped` | Emitted when ZongJi connection is stopped (ZongJi#stop is called). |
**Options available:**
-Option Name | Type | Description
-------------|------|-------------------------------
-`serverId` | `integer` | [Unique number (1 - 232)](https://dev.mysql.com/doc/refman/5.0/en/replication-options.html#option_mysqld_server-id) to identify this replication slave instance. Must be specified if running more than one instance of ZongJi. Must be used in `start()` method for effect.
**Default:** `1`
-`startAtEnd` | `boolean` | Pass `true` to only emit binlog events that occur after ZongJi's instantiation. Must be used in `start()` method for effect.
**Default:** `false`
-`filename` | `string` | Begin reading events from this binlog file. If specified together with `position`, will take precedence over `startAtEnd`.
-`position` | `integer` | Begin reading events from this position. Must be included with `filename`.
-`includeEvents` | `[string]` | Array of event names to include
**Example:** `['writerows', 'updaterows', 'deleterows']`
-`excludeEvents` | `[string]` | Array of event names to exclude
**Example:** `['rotate', 'tablemap']`
-`includeSchema` | `object` | Object describing which databases and tables to include (Only for row events). Use database names as the key and pass an array of table names or `true` (for the entire database).
**Example:** ```{ 'my_database': ['allow_table', 'another_table'], 'another_db': true }```
-`excludeSchema` | `object` | Object describing which databases and tables to exclude (Same format as `includeSchema`)
**Example:** ```{ 'other_db': ['disallowed_table'], 'ex_db': true }```
+| Option Name | Type | Description |
+| --------------- | ---------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
+| `serverId` | `integer` | [Unique number (1 - 232)](https://dev.mysql.com/doc/refman/5.0/en/replication-options.html#option_mysqld_server-id) to identify this replication slave instance. Must be specified if running more than one instance of ZongJi. Must be used in `start()` method for effect.
**Default:** `1` |
+| `startAtEnd` | `boolean` | Pass `true` to only emit binlog events that occur after ZongJi's instantiation. Must be used in `start()` method for effect.
**Default:** `false` |
+| `filename` | `string` | Begin reading events from this binlog file. If specified together with `position`, will take precedence over `startAtEnd`. |
+| `position` | `integer` | Begin reading events from this position. Must be included with `filename`. |
+| `includeEvents` | `[string]` | Array of event names to include
**Example:** `['writerows', 'updaterows', 'deleterows']` |
+| `excludeEvents` | `[string]` | Array of event names to exclude
**Example:** `['rotate', 'tablemap']` |
+| `includeSchema` | `object` | Object describing which databases and tables to include (Only for row events). Use database names as the key and pass an array of table names or `true` (for the entire database).
**Example:** `{ 'my_database': ['allow_table', 'another_table'], 'another_db': true }` |
+| `excludeSchema` | `object` | Object describing which databases and tables to exclude (Same format as `includeSchema`)
**Example:** `{ 'other_db': ['disallowed_table'], 'ex_db': true }` |
-* By default, all events and schema are emitted.
-* `excludeSchema` and `excludeEvents` take precedence over `includeSchema` and `includeEvents`, respectively.
+- By default, all events and schema are emitted.
+- `excludeSchema` and `excludeEvents` take precedence over `includeSchema` and `includeEvents`, respectively.
**Supported Binlog Events:**
-Event name | Description
-------------|---------------
-`unknown` | Catch any other events
-`query` | [Insert/Update/Delete Query](https://dev.mysql.com/doc/internals/en/query-event.html)
-`intvar` | [Autoincrement and LAST_INSERT_ID](https://dev.mysql.com/doc/internals/en/intvar-event.html)
-`rotate` | [New Binlog file](https://dev.mysql.com/doc/internals/en/rotate-event.html) Not required to be included to rotate to new files, but it is required to be included in order to keep the `filename` and `position` properties updated with current values for [graceful restarting on errors](https://gist.github.com/numtel/5b37b2a7f47b380c1a099596c6f3db2f).
-`format` | [Format Description](https://dev.mysql.com/doc/internals/en/format-description-event.html)
-`xid` | [Transaction ID](https://dev.mysql.com/doc/internals/en/xid-event.html)
-`tablemap` | Before any row event (must be included for any other row events)
-`writerows` | Rows inserted, row data array available as `rows` property on event object
-`updaterows` | Rows changed, row data array available as `rows` property on event object
-`deleterows` | Rows deleted, row data array available as `rows` property on event object
+| Event name | Description |
+| ------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
+| `unknown` | Catch any other events |
+| `query` | [Insert/Update/Delete Query](https://dev.mysql.com/doc/internals/en/query-event.html) |
+| `intvar` | [Autoincrement and LAST_INSERT_ID](https://dev.mysql.com/doc/internals/en/intvar-event.html) |
+| `rotate` | [New Binlog file](https://dev.mysql.com/doc/internals/en/rotate-event.html) Not required to be included to rotate to new files, but it is required to be included in order to keep the `filename` and `position` properties updated with current values for [graceful restarting on errors](https://gist.github.com/numtel/5b37b2a7f47b380c1a099596c6f3db2f). |
+| `format` | [Format Description](https://dev.mysql.com/doc/internals/en/format-description-event.html) |
+| `xid` | [Transaction ID](https://dev.mysql.com/doc/internals/en/xid-event.html) |
+| `tablemap` | Before any row event (must be included for any other row events) |
+| `writerows` | Rows inserted, row data array available as `rows` property on event object |
+| `updaterows` | Rows changed, row data array available as `rows` property on event object |
+| `deleterows` | Rows deleted, row data array available as `rows` property on event object |
**Event Methods**
Neither method requires any arguments.
-Name | Description
--------|---------------------------
-`dump` | Log a description of the event to the console
-`getEventName` | Return the name of the event
+| Name | Description |
+| -------------- | --------------------------------------------- |
+| `dump` | Log a description of the event to the console |
+| `getEventName` | Return the name of the event |
## Important Notes
-* :star2: [All types allowed by `mysql`](https://github.com/mysqljs/mysql#type-casting) are supported by this package.
-* :speak_no_evil: 64-bit integer is supported via package big-integer(see #108). If an integer is within the safe range of JS number (-2^53, 2^53), a Number object will returned, otherwise, will return as String.
-* :point_right: `TRUNCATE` statement does not cause corresponding `DeleteRows` event. Use unqualified `DELETE FROM` for same effect.
-* When using fractional seconds with `DATETIME` and `TIMESTAMP` data types in MySQL > 5.6.4, only millisecond precision is available due to the limit of Javascript's `Date` object.
+- :star2: [All types allowed by `mysql`](https://github.com/mysqljs/mysql#type-casting) are supported by this package.
+- :speak_no_evil: 64-bit integer is supported via package big-integer(see #108). If an integer is within the safe range of JS number (-2^53, 2^53), a Number object will returned, otherwise, will return as String.
+- :point_right: `TRUNCATE` statement does not cause corresponding `DeleteRows` event. Use unqualified `DELETE FROM` for same effect.
+- When using fractional seconds with `DATETIME` and `TIMESTAMP` data types in MySQL > 5.6.4, only millisecond precision is available due to the limit of Javascript's `Date` object.
## Run Tests
-* install [Docker](https://www.docker.com/community-edition#download)
-* run `docker-compose up` and then `./docker-test.sh`
+- install [Docker](https://www.docker.com/community-edition#download)
+- run `docker-compose up` and then `./docker-test.sh`
## References
The following resources provided valuable information that greatly assisted in creating ZongJi:
-* https://github.com/mysqljs/mysql
-* https://github.com/felixge/faster-than-c/
-* https://web.archive.org/web/20130117004733/https://intuitive-search.blogspot.co.uk/2011/07/binary-log-api-and-replication-listener.html
-* https://github.com/Sannis/node-mysql-libmysqlclient
-* https://kkaefer.com/node-cpp-modules/
-* https://dev.mysql.com/doc/internals/en/replication-protocol.html
-* https://web.archive.org/web/20200201195450/https://www.cs.wichita.edu/~chang/lecture/cs742/program/how-mysql-c-api.html
-* https://github.com/jeremycole/mysql_binlog (Ruby implemenation of MySQL binlog parser)
-* https://dev.mysql.com/doc/internals/en/date-and-time-data-type-representation.html
+- https://github.com/mysqljs/mysql
+- https://github.com/felixge/faster-than-c/
+- https://web.archive.org/web/20130117004733/https://intuitive-search.blogspot.co.uk/2011/07/binary-log-api-and-replication-listener.html
+- https://github.com/Sannis/node-mysql-libmysqlclient
+- https://kkaefer.com/node-cpp-modules/
+- https://dev.mysql.com/doc/internals/en/replication-protocol.html
+- https://web.archive.org/web/20200201195450/https://www.cs.wichita.edu/~chang/lecture/cs742/program/how-mysql-c-api.html
+- https://github.com/jeremycole/mysql_binlog (Ruby implemenation of MySQL binlog parser)
+- https://dev.mysql.com/doc/internals/en/date-and-time-data-type-representation.html
## License
+
MIT
diff --git a/docker-compose.yml b/docker-compose.yml
index 23b0817..c473421 100644
--- a/docker-compose.yml
+++ b/docker-compose.yml
@@ -1,32 +1,21 @@
----
-version: '2'
services:
- mysql55:
- image: mysql:5.5
- command: [ "--server-id=1", "--log-bin=/var/lib/mysql/mysql-bin.log", "--binlog-format=row"]
- networks:
- default:
- aliases:
- - mysql55
- environment:
- MYSQL_ROOT_PASSWORD: numtel
- mysql56:
- image: mysql:5.6
- command: [ "--server-id=1", "--log-bin=/var/lib/mysql/mysql-bin.log", "--binlog-format=row"]
+ mysql80:
+ image: mysql:8.0
+ command: [ '--server-id=1', '--log-bin=/var/lib/mysql/mysql-bin.log']
networks:
default:
aliases:
- - mysql56
+ - mysql80
environment:
- MYSQL_ROOT_PASSWORD: numtel
+ MYSQL_ROOT_PASSWORD: my_password
- mysql57:
- image: mysql:5.7
- command: [ "--server-id=1", "--log-bin=/var/lib/mysql/mysql-bin.log", "--binlog-format=row"]
+ mysql84:
+ image: mysql:8.4
+ command: [ '--server-id=1', '--log-bin=/var/lib/mysql/mysql-bin.log']
networks:
default:
aliases:
- - mysql57
+ - mysql84
environment:
- MYSQL_ROOT_PASSWORD: numtel
+ MYSQL_ROOT_PASSWORD: my_password
diff --git a/docker-test.sh b/docker-test.sh
index 3b21fc5..46d5445 100755
--- a/docker-test.sh
+++ b/docker-test.sh
@@ -1,11 +1,7 @@
#!/bin/bash
-MYSQL_HOSTS="mysql55 mysql56 mysql57"
+MYSQL_HOSTS="mysql80 mysql84"
for hostname in ${MYSQL_HOSTS}; do
- echo $hostname + node 8
- docker run -it --network=zongji_default -e MYSQL_HOST=$hostname -w /build -v $PWD:/build node:8 npm test
- echo $hostname + node 10
- docker run -it --network=zongji_default -e MYSQL_HOST=$hostname -w /build -v $PWD:/build node:10 npm test
- echo $hostname + node 12
- docker run -it --network=zongji_default -e MYSQL_HOST=$hostname -w /build -v $PWD:/build node:12 npm test
+ echo $hostname + node 20
+ docker run -it --network=powersync-mysql-zongji_default -e MYSQL_HOST=$hostname -w /build -v $PWD:/build node:20 npm test
done
diff --git a/example.js b/example.js
index 361e11f..b4ea822 100644
--- a/example.js
+++ b/example.js
@@ -2,13 +2,13 @@
const ZongJi = require('./');
const zongji = new ZongJi({
- host : 'localhost',
- user : 'zongji',
- password : 'zongji',
+ host: 'localhost',
+ user: 'zongji',
+ password: 'zongji'
// debug: true
});
-zongji.on('binlog', function(evt) {
+zongji.on('binlog', function (evt) {
evt.dump();
});
@@ -16,7 +16,7 @@ zongji.start({
includeEvents: ['tablemap', 'writerows', 'updaterows', 'deleterows']
});
-process.on('SIGINT', function() {
+process.on('SIGINT', function () {
console.log('Got SIGINT.');
zongji.stop();
process.exit();
diff --git a/index.js b/index.js
index 7f3ca87..02d7cbc 100644
--- a/index.js
+++ b/index.js
@@ -4,8 +4,8 @@ const EventEmitter = require('events').EventEmitter;
const initBinlogClass = require('./lib/sequence/binlog');
const ConnectionConfigMap = {
- 'Connection': obj => obj.config,
- 'Pool': obj => obj.config.connectionConfig,
+ Connection: (obj) => obj.config,
+ Pool: (obj) => obj.config.connectionConfig
};
const TableInfoQueryTemplate = `SELECT
@@ -30,7 +30,7 @@ function ZongJi(dsn) {
util.inherits(ZongJi, EventEmitter);
// dsn - can be one instance of Connection or Pool / object / url string
-ZongJi.prototype._establishConnection = function(dsn) {
+ZongJi.prototype._establishConnection = function (dsn) {
const createConnection = (options) => {
let connection = mysql.createConnection(options);
connection.on('error', this.emit.bind(this, 'error'));
@@ -62,29 +62,26 @@ ZongJi.prototype._establishConnection = function(dsn) {
this.connection = createConnection(binlogDsn);
};
-ZongJi.prototype._isChecksumEnabled = function(next) {
+ZongJi.prototype._isChecksumEnabled = function (next) {
const SelectChecksumParamSql = 'select @@GLOBAL.binlog_checksum as checksum';
const SetChecksumSql = 'set @master_binlog_checksum=@@global.binlog_checksum';
const query = (conn, sql) => {
- return new Promise(
- (resolve, reject) => {
- conn.query(sql, (err, result) => {
- if (err) {
- reject(err);
- }
- else {
- resolve(result);
- }
- });
- }
- );
+ return new Promise((resolve, reject) => {
+ conn.query(sql, (err, result) => {
+ if (err) {
+ reject(err);
+ } else {
+ resolve(result);
+ }
+ });
+ });
};
let checksumEnabled = true;
query(this.ctrlConnection, SelectChecksumParamSql)
- .then(rows => {
+ .then((rows) => {
if (rows[0].checksum === 'NONE') {
checksumEnabled = false;
return query(this.connection, 'SELECT 1');
@@ -94,13 +91,12 @@ ZongJi.prototype._isChecksumEnabled = function(next) {
return query(this.connection, SetChecksumSql);
}
})
- .catch(err => {
+ .catch((err) => {
if (err.toString().match(/ER_UNKNOWN_SYSTEM_VARIABLE/)) {
checksumEnabled = false;
// a simple query to open this.connection
return query(this.connection, 'SELECT 1');
- }
- else {
+ } else {
next(err);
}
})
@@ -109,21 +105,19 @@ ZongJi.prototype._isChecksumEnabled = function(next) {
});
};
-ZongJi.prototype._findBinlogEnd = function(next) {
+ZongJi.prototype._findBinlogEnd = function (next) {
this.ctrlConnection.query('SHOW BINARY LOGS', (err, rows) => {
if (err) {
// Errors should be emitted
next(err);
- }
- else {
+ } else {
next(null, rows.length > 0 ? rows[rows.length - 1] : null);
}
});
};
-ZongJi.prototype._fetchTableInfo = function(tableMapEvent, next) {
- const sql = util.format(TableInfoQueryTemplate,
- tableMapEvent.schemaName, tableMapEvent.tableName);
+ZongJi.prototype._fetchTableInfo = function (tableMapEvent, next) {
+ const sql = util.format(TableInfoQueryTemplate, tableMapEvent.schemaName, tableMapEvent.tableName);
this.ctrlConnection.query(sql, (err, rows) => {
if (err) {
@@ -135,9 +129,10 @@ ZongJi.prototype._fetchTableInfo = function(tableMapEvent, next) {
}
if (rows.length === 0) {
- this.emit('error', new Error(
- 'Insufficient permissions to access: ' +
- tableMapEvent.schemaName + '.' + tableMapEvent.tableName));
+ this.emit(
+ 'error',
+ new Error('Insufficient permissions to access: ' + tableMapEvent.schemaName + '.' + tableMapEvent.tableName)
+ );
// This is a fatal error, no additional binlog events will be
// processed since next() will never be called
return;
@@ -154,48 +149,34 @@ ZongJi.prototype._fetchTableInfo = function(tableMapEvent, next) {
};
// #_options will reset all the options.
-ZongJi.prototype._options = function({
- serverId,
- filename,
- position,
- startAtEnd,
-}) {
+ZongJi.prototype._options = function ({ serverId, filename, position, startAtEnd }) {
this.options = {
serverId,
filename,
position,
- startAtEnd,
+ startAtEnd
};
};
// #_filters will reset all the filters.
-ZongJi.prototype._filters = function({
- includeEvents,
- excludeEvents,
- includeSchema,
- excludeSchema,
-}) {
+ZongJi.prototype._filters = function ({ includeEvents, excludeEvents, includeSchema, excludeSchema }) {
this.filters = {
includeEvents,
excludeEvents,
includeSchema,
- excludeSchema,
+ excludeSchema
};
};
-ZongJi.prototype.get = function(name) {
+ZongJi.prototype.get = function (name) {
let result;
if (typeof name === 'string') {
result = this.options[name];
- }
- else if (Array.isArray(name)) {
- result = name.reduce(
- (acc, cur) => {
- acc[cur] = this.options[cur];
- return acc;
- },
- {}
- );
+ } else if (Array.isArray(name)) {
+ result = name.reduce((acc, cur) => {
+ acc[cur] = this.options[cur];
+ return acc;
+ }, {});
}
return result;
@@ -206,8 +187,7 @@ ZongJi.prototype.get = function(name) {
// - `filename`, `position` the position of binlog to beigin with
// - `startAtEnd` if true, will update filename / postion automatically
// - `includeEvents`, `excludeEvents`, `includeSchema`, `exludeSchema` filter different binlog events bubbling
-ZongJi.prototype.start = function(options = {}) {
-
+ZongJi.prototype.start = function (options = {}) {
this._options(options);
this._filters(options);
@@ -215,15 +195,13 @@ ZongJi.prototype.start = function(options = {}) {
this._isChecksumEnabled((err, checksumEnabled) => {
if (err) {
reject(err);
- }
- else {
+ } else {
this.useChecksum = checksumEnabled;
resolve();
}
});
};
-
const findBinlogEnd = (resolve, reject) => {
this._findBinlogEnd((err, result) => {
if (err) {
@@ -234,7 +212,7 @@ ZongJi.prototype.start = function(options = {}) {
this._options(
Object.assign({}, options, {
filename: result.Log_name,
- position: result.File_size,
+ position: result.File_size
})
);
}
@@ -288,66 +266,47 @@ ZongJi.prototype.start = function(options = {}) {
this.ready = true;
this.emit('ready');
- this.connection._protocol._enqueue(
- new this.BinlogClass(binlogHandler)
- );
+ this.connection._protocol._enqueue(new this.BinlogClass(binlogHandler));
})
- .catch(err => {
+ .catch((err) => {
this.emit('error', err);
});
-
};
-ZongJi.prototype.stop = function() {
+ZongJi.prototype.stop = function () {
// Binary log connection does not end with destroy()
this.connection.destroy();
- this.ctrlConnection.query(
- 'KILL ' + this.connection.threadId,
- () => {
- if (this.ctrlConnectionOwner) {
- this.ctrlConnection.destroy();
- }
- this.emit('stopped');
+ this.ctrlConnection.query('KILL ' + this.connection.threadId, () => {
+ if (this.ctrlConnectionOwner) {
+ this.ctrlConnection.destroy();
}
- );
+ this.emit('stopped');
+ });
};
// It includes every events by default.
-ZongJi.prototype._skipEvent = function(name) {
+ZongJi.prototype._skipEvent = function (name) {
const includes = this.filters.includeEvents;
const excludes = this.filters.excludeEvents;
- let included = (includes === undefined) ||
- (Array.isArray(includes) && (includes.indexOf(name) > -1));
- let excluded = Array.isArray(excludes) && (excludes.indexOf(name) > -1);
+ let included = includes === undefined || (Array.isArray(includes) && includes.indexOf(name) > -1);
+ let excluded = Array.isArray(excludes) && excludes.indexOf(name) > -1;
return excluded || !included;
};
// It doesn't skip any schema by default.
-ZongJi.prototype._skipSchema = function(database, table) {
+ZongJi.prototype._skipSchema = function (database, table) {
const includes = this.filters.includeSchema;
const excludes = this.filters.excludeSchema || {};
- let included = (includes === undefined) ||
- (
- (database in includes) &&
- (
- includes[database] === true ||
- (
- Array.isArray(includes[database]) &&
- includes[database].indexOf(table) > -1
- )
- )
- );
- let excluded = (database in excludes) &&
- (
- excludes[database] === true ||
- (
- Array.isArray(excludes[database]) &&
- excludes[database].indexOf(table) > -1
- )
- );
+ let included =
+ includes === undefined ||
+ (database in includes &&
+ (includes[database] === true || (Array.isArray(includes[database]) && includes[database].indexOf(table) > -1)));
+ let excluded =
+ database in excludes &&
+ (excludes[database] === true || (Array.isArray(excludes[database]) && excludes[database].indexOf(table) > -1));
return excluded || !included;
};
diff --git a/lib/binlog_event.js b/lib/binlog_event.js
index 1a90521..da76892 100644
--- a/lib/binlog_event.js
+++ b/lib/binlog_event.js
@@ -9,22 +9,22 @@ function BinlogEvent(parser, options) {
this.size = options.size;
}
-BinlogEvent.prototype.getEventName = function() {
+BinlogEvent.prototype.getEventName = function () {
return this.getTypeName().toLowerCase();
};
-BinlogEvent.prototype.getTypeName = function() {
+BinlogEvent.prototype.getTypeName = function () {
return this.constructor.name;
};
-BinlogEvent.prototype.dump = function() {
+BinlogEvent.prototype.dump = function () {
console.log('=== %s ===', this.getTypeName());
console.log('Date: %s', new Date(this.timestamp));
console.log('Next log position: %d', this.nextPosition);
console.log('Event size:', this.size);
};
-BinlogEvent.prototype._readTableId = function(parser) {
+BinlogEvent.prototype._readTableId = function (parser) {
this.tableId = Common.parseUInt48(parser);
};
@@ -41,9 +41,9 @@ function Rotate(parser) {
}
util.inherits(Rotate, BinlogEvent);
-Rotate.prototype.dump = function() {
+Rotate.prototype.dump = function () {
console.log('=== %s ===', this.getTypeName());
- console.log('Event size: %d', (this.size));
+ console.log('Event size: %d', this.size);
console.log('Position: %d', this.position);
console.log('Next binlog file: %s', this.binlogName);
};
@@ -53,6 +53,21 @@ function Format() {
}
util.inherits(Format, BinlogEvent);
+/* A GTID Log event
+ * Attributes:
+ * flags: This number contains flags related to the GTID, such as whether the transaction was the last one in a group or if it was a standalone transaction
+ * serverId: The Server UUID (SID), which is a 16-byte Buffer
+ * transactionRange: The Global Transaction ID number, which is a 64-bit unsigned integer
+ */
+
+function GtidLog(parser) {
+ BinlogEvent.apply(this, arguments);
+ this.flags = parser.parseUnsignedNumber(1);
+ this.serverId = parser.parseBuffer(16);
+ this.transactionRange = Common.parseUInt64(parser);
+}
+util.inherits(GtidLog, BinlogEvent);
+
/* A COMMIT event
* Attributes:
* xid: Transaction ID for 2PC
@@ -98,7 +113,7 @@ function Query(parser) {
}
util.inherits(Query, BinlogEvent);
-Query.prototype.dump = function() {
+Query.prototype.dump = function () {
console.log('=== %s ===', this.getTypeName());
console.log('Date: %s', new Date(this.timestamp));
console.log('Next log position: %d', this.nextPosition);
@@ -121,11 +136,11 @@ function IntVar(parser) {
util.inherits(IntVar, BinlogEvent);
const INTVAR_TYPES = ['INVALID_INT', 'LAST_INSERT_ID', 'INSERT_ID'];
-IntVar.prototype.getIntTypeName = function() {
- return INTVAR_TYPES[this.type] || 'INVALID_INT';
+IntVar.prototype.getIntTypeName = function () {
+ return INTVAR_TYPES[this.type] || 'INVALID_INT';
};
-IntVar.prototype.dump = function() {
+IntVar.prototype.dump = function () {
console.log('=== %s ===', this.getTypeName());
console.log('Date: %s', new Date(this.timestamp));
console.log('Next log position: %d', this.nextPosition);
@@ -134,9 +149,9 @@ IntVar.prototype.dump = function() {
};
/**
- * This evenement describe the structure of a table.
- * It's send before a change append on a table.
- * A end user of the lib should have no usage of this
+ * This event describes the structure of a table.
+ * It's sent before a change append on a table.
+ * An end user of the lib should have no usage of this
*
* see http://dev.mysql.com/doc/internals/en/table-map-event.html
**/
@@ -163,8 +178,7 @@ function TableMap(parser, options, zongji) {
this._filtered = true;
// Removed cached data so that row events do not emit either
delete this.tableMap[this.tableId];
- }
- else {
+ } else {
parser.parseUnsignedNumber(1);
this.columnCount = parser.parseLengthCodedNumber();
@@ -178,7 +192,7 @@ function TableMap(parser, options, zongji) {
util.inherits(TableMap, BinlogEvent);
-TableMap.prototype.updateColumnInfo = function() {
+TableMap.prototype.updateColumnInfo = function () {
const columnsMetadata = this.columnsMetadata;
for (let i = 0; i < this.columnCount; i++) {
if (columnsMetadata[i] && columnsMetadata[i].type) {
@@ -203,8 +217,8 @@ TableMap.prototype.updateColumnInfo = function() {
tableMap.columns = columns;
};
-TableMap.prototype._readColumnMetadata = function(parser) {
- this.columnsMetadata = this.columnTypes.map(function(code) {
+TableMap.prototype._readColumnMetadata = function (parser) {
+ this.columnsMetadata = this.columnTypes.map(function (code) {
let result;
switch (code) {
@@ -216,7 +230,7 @@ TableMap.prototype._readColumnMetadata = function(parser) {
break;
case Common.MysqlTypes.VARCHAR:
result = {
- 'max_length': parser.parseUnsignedNumber(2)
+ max_length: parser.parseUnsignedNumber(2)
};
break;
case Common.MysqlTypes.BIT: {
@@ -230,14 +244,14 @@ TableMap.prototype._readColumnMetadata = function(parser) {
case Common.MysqlTypes.NEWDECIMAL:
result = {
precision: parser.parseUnsignedNumber(1),
- decimals: parser.parseUnsignedNumber(1),
+ decimals: parser.parseUnsignedNumber(1)
};
break;
case Common.MysqlTypes.BLOB:
case Common.MysqlTypes.GEOMETRY:
case Common.MysqlTypes.JSON:
result = {
- 'length_size': parser.parseUnsignedNumber(1)
+ length_size: parser.parseUnsignedNumber(1)
};
break;
case Common.MysqlTypes.STRING:
@@ -249,16 +263,14 @@ TableMap.prototype._readColumnMetadata = function(parser) {
// provided 'type' here.
const metadata = (parser.parseUnsignedNumber(1) << 8) + parser.parseUnsignedNumber(1);
const realType = metadata >> 8;
- if (realType === Common.MysqlTypes.ENUM
- || realType === Common.MysqlTypes.SET) {
+ if (realType === Common.MysqlTypes.ENUM || realType === Common.MysqlTypes.SET) {
result = {
type: realType,
size: metadata & 0x00ff
};
} else {
result = {
- 'max_length': ((
- (metadata >> 4) & 0x300) ^ 0x300) + (metadata & 0x00ff)
+ max_length: (((metadata >> 4) & 0x300) ^ 0x300) + (metadata & 0x00ff)
};
}
break;
@@ -276,7 +288,7 @@ TableMap.prototype._readColumnMetadata = function(parser) {
});
};
-TableMap.prototype.dump = function() {
+TableMap.prototype.dump = function () {
BinlogEvent.prototype.dump.apply(this);
console.log('Table id: %d', this.tableId);
console.log('Schema: %s', this.schemaName);
@@ -298,3 +310,4 @@ exports.IntVar = IntVar;
exports.Xid = Xid;
exports.TableMap = TableMap;
exports.Unknown = Unknown;
+exports.GtidLog = GtidLog;
diff --git a/lib/code_map.js b/lib/code_map.js
index 1e66b88..4ca1d20 100644
--- a/lib/code_map.js
+++ b/lib/code_map.js
@@ -47,6 +47,7 @@ const EventClass = {
ROTATE_EVENT: events.Rotate,
FORMAT_DESCRIPTION_EVENT: events.Format,
XID_EVENT: events.Xid,
+ GTID_LOG_EVENT: events.GtidLog,
TABLE_MAP_EVENT: events.TableMap,
DELETE_ROWS_EVENT_V1: rowsEvents.DeleteRows,
@@ -54,9 +55,9 @@ const EventClass = {
WRITE_ROWS_EVENT_V1: rowsEvents.WriteRows,
WRITE_ROWS_EVENT_V2: rowsEvents.WriteRows,
UPDATE_ROWS_EVENT_V2: rowsEvents.UpdateRows,
- DELETE_ROWS_EVENT_V2: rowsEvents.DeleteRows,
+ DELETE_ROWS_EVENT_V2: rowsEvents.DeleteRows
};
-exports.getEventClass = function(code) {
+exports.getEventClass = function (code) {
return EventClass[CodeEvent[code]] || events.Unknown;
};
diff --git a/lib/common.js b/lib/common.js
index 19471f8..6b4dbe2 100644
--- a/lib/common.js
+++ b/lib/common.js
@@ -3,7 +3,7 @@ const decodeJson = require('./json_decode');
const dtDecode = require('./datetime_decode');
const bigInt = require('big-integer');
-const MysqlTypes = exports.MysqlTypes = {
+const MysqlTypes = (exports.MysqlTypes = {
DECIMAL: 0,
TINY: 1,
SHORT: 2,
@@ -36,38 +36,39 @@ const MysqlTypes = exports.MysqlTypes = {
BLOB: 252,
VAR_STRING: 253,
STRING: 254,
- GEOMETRY: 255,
-};
+ GEOMETRY: 255
+});
const TWO_TO_POWER_THIRTY_TWO = Math.pow(2, 32);
const TWO_TO_POWER_SIXTY_THREE = '9223372036854775808'; // Math.pow(2, 63) or 1 << 63
// This function will return a Number
// if the reuslt < Math.MAX_SAFE_INTEGER or reuslt > Math.MIN_SAFE_INTEGER,
// otherwise, will return a string.
-const parseUInt64 = exports.parseUInt64 = function(parser) {
+const parseUInt64 = (exports.parseUInt64 = function (parser) {
const low = parser.parseUnsignedNumber(4);
const high = parser.parseUnsignedNumber(4);
- if (high >>> 21) { // using bigint here
+ if (high >>> 21) {
+ // using bigint here
return bigInt(TWO_TO_POWER_THIRTY_TWO).multiply(high).add(low).toString();
}
- return (high * Math.pow(2,32)) + low;
-};
+ return high * Math.pow(2, 32) + low;
+});
-exports.parseUInt48 = function(parser) {
+exports.parseUInt48 = function (parser) {
const low = parser.parseUnsignedNumber(4);
const high = parser.parseUnsignedNumber(2);
- return (high * Math.pow(2, 32)) + low;
+ return high * Math.pow(2, 32) + low;
};
-const parseUInt24 = exports.parseUInt24 = function(parser) {
+const parseUInt24 = (exports.parseUInt24 = function (parser) {
const low = parser.parseUnsignedNumber(2);
const high = parser.parseUnsignedNumber(1);
return (high << 16) + low;
-};
+});
-exports.parseBytesArray = function(parser, length) {
+exports.parseBytesArray = function (parser, length) {
const result = new Array(length);
for (let i = 0; i < length; i++) {
result[i] = parser.parseUnsignedNumber(1);
@@ -79,30 +80,31 @@ exports.parseBytesArray = function(parser, length) {
// @param type String Definition of column 'set(...)' or 'enum(...)'
// @param prefixLen Integer Number of characters before list starts
// (e.g. 'set(': 4, 'enum(': 5)
-const parseSetEnumTypeDef = function(type, prefixLen) {
+const parseSetEnumTypeDef = function (type, prefixLen) {
// listed distinct elements should not include commas
- return type.substr(prefixLen, type.length - prefixLen - 1)
- .split(',').map(function(opt) {
- return (opt[0] === '"' || opt[0] === "'") ?
- opt.substr(1, opt.length - 2) : opt;
+ return type
+ .substr(prefixLen, type.length - prefixLen - 1)
+ .split(',')
+ .map(function (opt) {
+ return opt[0] === '"' || opt[0] === "'" ? opt.substr(1, opt.length - 2) : opt;
});
};
-const zeroPad = exports.zeroPad = function(num, size) {
+const zeroPad = (exports.zeroPad = function (num, size) {
// Max 32 digits
const s = '00000000000000000000000000000000' + num;
- return s.substr(s.length-size);
-};
+ return s.substr(s.length - size);
+});
-const sliceBits = exports.sliceBits = function(input, start, end) {
+const sliceBits = (exports.sliceBits = function (input, start, end) {
// ex: start: 10, end: 15 = "111110000000000"
- const match = (((1 << end) - 1) ^ ((1 << start) - 1));
+ const match = ((1 << end) - 1) ^ ((1 << start) - 1);
return (input & match) >> start;
-};
+});
// Use Typed Arrays to convert IEEE 754 numbers
// Pass only high for 32-bit float, pass high and low for 64-bit double
-const parseIEEE754Float = exports.parseIEEE754Float = function(high, low) {
+const parseIEEE754Float = (exports.parseIEEE754Float = function (high, low) {
if (low !== undefined) {
let value = new DataView(new ArrayBuffer(8));
value.setUint32(0, high);
@@ -113,15 +115,15 @@ const parseIEEE754Float = exports.parseIEEE754Float = function(high, low) {
value.setUint32(0, high);
return value.getFloat32(0);
}
-};
+});
-const getUInt32Value = exports.getUInt32Value = function(input) {
+const getUInt32Value = (exports.getUInt32Value = function (input) {
// Last bit is not sign, it is part of value!
- if (input & (1 << 31)) return Math.pow(2, 31) + (input & ((1 << 31) -1));
+ if (input & (1 << 31)) return Math.pow(2, 31) + (input & ((1 << 31) - 1));
else return input;
-};
+});
-const parseAnyInt = function(parser, column, columnSchema) {
+const parseAnyInt = function (parser, column, columnSchema) {
let result, size;
switch (column.type) {
case MysqlTypes.TINY:
@@ -147,10 +149,10 @@ const parseAnyInt = function(parser, column, columnSchema) {
}
if (columnSchema.COLUMN_TYPE.indexOf('unsigned') === -1) {
const length = size * 8;
- const int64 = (length == 64);
+ const int64 = length == 64;
// Flip bits on negative signed integer
- if (!int64 && (result & (1 << (length - 1)))) {
- result = ((result ^ (Math.pow(2, length) - 1)) * -1) - 1;
+ if (!int64 && result & (1 << (length - 1))) {
+ result = (result ^ (Math.pow(2, length) - 1)) * -1 - 1;
} else if (int64 && bigInt(result).greaterOrEquals(bigInt(TWO_TO_POWER_SIXTY_THREE))) {
const Max64BitNumber = bigInt('18446744073709551615'); // 2^64 - 1
result = bigInt(result).xor(Max64BitNumber).add(1).multiply(-1);
@@ -167,17 +169,20 @@ const parseAnyInt = function(parser, column, columnSchema) {
return result;
};
-const readInt24BE = function(buf, offset, noAssert) {
- return (buf.readInt8(offset, noAssert) << 16) +
- buf.readUInt16BE(offset + 1, noAssert);
+const readInt24BE = function (buf, offset, noAssert) {
+ return (buf.readInt8(offset, noAssert) << 16) + buf.readUInt16BE(offset + 1, noAssert);
};
-const readIntBE = function(buf, offset, length, noAssert) {
+const readIntBE = function (buf, offset, length, noAssert) {
switch (length) {
- case 1: return buf.readInt8(offset, noAssert);
- case 2: return buf.readInt16BE(offset, noAssert);
- case 3: return readInt24BE(buf, offset, noAssert);
- case 4: return buf.readInt32BE(offset, noAssert);
+ case 1:
+ return buf.readInt8(offset, noAssert);
+ case 2:
+ return buf.readInt16BE(offset, noAssert);
+ case 3:
+ return readInt24BE(buf, offset, noAssert);
+ case 4:
+ return buf.readInt32BE(offset, noAssert);
}
};
@@ -185,7 +190,7 @@ const readIntBE = function(buf, offset, length, noAssert) {
// https://github.com/jeremycole/mysql_binlog/blob/master/lib/mysql_binlog/binlog_field_parser.rb
// Some more information about DECIMAL types:
// http://dev.mysql.com/doc/refman/5.5/en/precision-math-decimal-characteristics.html
-const parseNewDecimal = function(parser, column) {
+const parseNewDecimal = function (parser, column) {
// Constants of format
const digitsPerInteger = 9;
const compressedBytes = [0, 1, 1, 2, 2, 3, 3, 4, 4, 4];
@@ -194,12 +199,12 @@ const parseNewDecimal = function(parser, column) {
const integral = column.metadata.precision - scale;
const uncompIntegral = Math.floor(integral / digitsPerInteger);
const uncompFractional = Math.floor(scale / digitsPerInteger);
- const compIntegral = integral - (uncompIntegral * digitsPerInteger);
- const compFractional = scale - (uncompFractional * digitsPerInteger);
+ const compIntegral = integral - uncompIntegral * digitsPerInteger;
+ const compFractional = scale - uncompFractional * digitsPerInteger;
// Grab buffer portion
- const size = (uncompIntegral * 4) + compressedBytes[compIntegral] +
- (uncompFractional * 4) + compressedBytes[compFractional];
+ const size =
+ uncompIntegral * 4 + compressedBytes[compIntegral] + uncompFractional * 4 + compressedBytes[compFractional];
const buffer = parser._buffer.slice(parser._offset, parser._offset + size);
parser._offset += size; // Move binlog parser position forward
@@ -250,7 +255,7 @@ const parseNewDecimal = function(parser, column) {
// Did not work in place. Function cribbed from lines 311-363 of
// https://github.com/felixge/node-mysql/blob/cfd0ce3572d75c3c82103418d1d03cbe67eaf8a1/lib/protocol/Parser.js
-const parseGeometryValue = function(buffer) {
+const parseGeometryValue = function (buffer) {
let offset = 4;
if (buffer === null || !buffer.length) {
@@ -259,35 +264,47 @@ const parseGeometryValue = function(buffer) {
function parseGeometry() {
let result = null;
- const byteOrder = buffer.readUInt8(offset); offset += 1;
- const wkbType = byteOrder? buffer.readUInt32LE(offset) : buffer.readUInt32BE(offset); offset += 4;
+ const byteOrder = buffer.readUInt8(offset);
+ offset += 1;
+ const wkbType = byteOrder ? buffer.readUInt32LE(offset) : buffer.readUInt32BE(offset);
+ offset += 4;
let x, y, numPoints, i;
switch (wkbType) {
case 1: // WKBPoint
- x = byteOrder? buffer.readDoubleLE(offset) : buffer.readDoubleBE(offset); offset += 8;
- y = byteOrder? buffer.readDoubleLE(offset) : buffer.readDoubleBE(offset); offset += 8;
- result = {x: x, y: y};
+ x = byteOrder ? buffer.readDoubleLE(offset) : buffer.readDoubleBE(offset);
+ offset += 8;
+ y = byteOrder ? buffer.readDoubleLE(offset) : buffer.readDoubleBE(offset);
+ offset += 8;
+ result = { x: x, y: y };
break;
case 2: // WKBLineString
- numPoints = byteOrder? buffer.readUInt32LE(offset) : buffer.readUInt32BE(offset); offset += 4;
+ numPoints = byteOrder ? buffer.readUInt32LE(offset) : buffer.readUInt32BE(offset);
+ offset += 4;
result = [];
for (i = numPoints; i > 0; i--) {
- x = byteOrder? buffer.readDoubleLE(offset) : buffer.readDoubleBE(offset); offset += 8;
- y = byteOrder? buffer.readDoubleLE(offset) : buffer.readDoubleBE(offset); offset += 8;
- result.push({x: x, y: y});
+ x = byteOrder ? buffer.readDoubleLE(offset) : buffer.readDoubleBE(offset);
+ offset += 8;
+ y = byteOrder ? buffer.readDoubleLE(offset) : buffer.readDoubleBE(offset);
+ offset += 8;
+ result.push({ x: x, y: y });
}
break;
- case 3: {// WKBPolygon
- const numRings = byteOrder? buffer.readUInt32LE(offset) : buffer.readUInt32BE(offset); offset += 4;
+ case 3: {
+ // WKBPolygon
+ const numRings = byteOrder ? buffer.readUInt32LE(offset) : buffer.readUInt32BE(offset);
+ offset += 4;
result = [];
for (i = numRings; i > 0; i--) {
- numPoints = byteOrder? buffer.readUInt32LE(offset) : buffer.readUInt32BE(offset); offset += 4;
+ numPoints = byteOrder ? buffer.readUInt32LE(offset) : buffer.readUInt32BE(offset);
+ offset += 4;
const line = [];
for (let j = numPoints; j > 0; j--) {
- x = byteOrder? buffer.readDoubleLE(offset) : buffer.readDoubleBE(offset); offset += 8;
- y = byteOrder? buffer.readDoubleLE(offset) : buffer.readDoubleBE(offset); offset += 8;
- line.push({x: x, y: y});
+ x = byteOrder ? buffer.readDoubleLE(offset) : buffer.readDoubleBE(offset);
+ offset += 8;
+ y = byteOrder ? buffer.readDoubleLE(offset) : buffer.readDoubleBE(offset);
+ offset += 8;
+ line.push({ x: x, y: y });
}
result.push(line);
}
@@ -296,8 +313,10 @@ const parseGeometryValue = function(buffer) {
case 4: // WKBMultiPoint
case 5: // WKBMultiLineString
case 6: // WKBMultiPolygon
- case 7: {// WKBGeometryCollection
- const num = byteOrder? buffer.readUInt32LE(offset) : buffer.readUInt32BE(offset); offset += 4;
+ case 7: {
+ // WKBGeometryCollection
+ const num = byteOrder ? buffer.readUInt32LE(offset) : buffer.readUInt32BE(offset);
+ offset += 4;
result = [];
for (i = num; i > 0; i--) {
result.push(parseGeometry());
@@ -312,7 +331,7 @@ const parseGeometryValue = function(buffer) {
// Returns false, or an object describing the fraction of a second part of a
// TIME, DATETIME, or TIMESTAMP.
-const readTemporalFraction = function(parser, fractionPrecision) {
+const readTemporalFraction = function (parser, fractionPrecision) {
if (!fractionPrecision) return false;
let fractionSize = Math.ceil(fractionPrecision / 2);
let fraction = readIntBE(parser._buffer, parser._offset, fractionSize);
@@ -330,9 +349,9 @@ const readTemporalFraction = function(parser, fractionPrecision) {
}
return {
- value: fraction, // the integer after the decimal place
+ value: fraction, // the integer after the decimal place
precision: fractionPrecision, // the number of digits after the decimal
- milliseconds: milliseconds // the unrounded 3 digits after the decimal
+ milliseconds: milliseconds // the unrounded 3 digits after the decimal
};
};
@@ -340,14 +359,13 @@ const readTemporalFraction = function(parser, fractionPrecision) {
// The parser object contains the raw value, and functions useful for value
// interpretation, but not the underlying column type or how the value ought to
// be interpreted based on that column type.
-exports.readMysqlValue = function(
- parser, // node-mysql parser instance, from mysql/lib/protocol/Parser
- column, // tableMap.columns[columnNumber]
- columnSchema, // tableMap.columnSchemas[columnNumber]
- tableMap, // used directly only to get extra info for error messages
- zongji // the ZongJi instance, used to read options and emit errors
- )
-{
+exports.readMysqlValue = function (
+ parser, // node-mysql parser instance, from mysql/lib/protocol/Parser
+ column, // tableMap.columns[columnNumber]
+ columnSchema, // tableMap.columnSchemas[columnNumber]
+ tableMap, // used directly only to get extra info for error messages
+ zongji // the ZongJi instance, used to read options and emit errors
+) {
let result;
let high, low;
let raw;
@@ -469,9 +487,9 @@ exports.readMysqlValue = function(
raw = parseUInt24(parser);
result = dtDecode.getDate(
zongji.connection.config.dateStrings, // node-mysql dateStrings option
- sliceBits(raw, 9, 24), // year
- sliceBits(raw, 5, 9), // month
- sliceBits(raw, 0, 5) // day
+ sliceBits(raw, 9, 24), // year
+ sliceBits(raw, 5, 9), // month
+ sliceBits(raw, 0, 5) // day
);
break;
case MysqlTypes.TIME:
@@ -485,10 +503,13 @@ exports.readMysqlValue = function(
second = raw % 100;
if (isNegative) second += 1;
- result = (isNegative ? '-' : '') +
- zeroPad(hour, hour > 99 ? 3 : 2) + ':' +
- zeroPad(minute, 2) + ':' +
- zeroPad(second, 2);
+ result =
+ (isNegative ? '-' : '') +
+ zeroPad(hour, hour > 99 ? 3 : 2) +
+ ':' +
+ zeroPad(minute, 2) +
+ ':' +
+ zeroPad(second, 2);
break;
case MysqlTypes.TIME2:
raw = readIntBE(parser._buffer, parser._offset, 3);
@@ -506,10 +527,13 @@ exports.readMysqlValue = function(
second++;
}
- result = (isNegative ? '-' : '') +
- zeroPad(hour, hour > 99 ? 3 : 2) + ':' +
- zeroPad(minute, 2) + ':' +
- zeroPad(second, 2);
+ result =
+ (isNegative ? '-' : '') +
+ zeroPad(hour, hour > 99 ? 3 : 2) +
+ ':' +
+ zeroPad(minute, 2) +
+ ':' +
+ zeroPad(second, 2);
if (fraction !== false) {
result += dtDecode.getFractionString(fraction);
@@ -520,13 +544,13 @@ exports.readMysqlValue = function(
date = Math.floor(raw / 1000000);
time = raw % 1000000;
result = dtDecode.getDateTime(
- zongji.connection.config.dateStrings, // node-mysql dateStrings option
- Math.floor(date / 10000), // year
- Math.floor((date % 10000) / 100), // month
- date % 100, // day
- Math.floor(time / 10000), // hour
- Math.floor((time % 10000) / 100), // minutes
- time % 100 // seconds
+ zongji.connection.config.dateStrings, // node-mysql dateStrings option
+ Math.floor(date / 10000), // year
+ Math.floor((date % 10000) / 100), // month
+ date % 100, // day
+ Math.floor(time / 10000), // hour
+ Math.floor((time % 10000) / 100), // minutes
+ time % 100 // seconds
);
break;
case MysqlTypes.DATETIME2: {
@@ -540,12 +564,12 @@ exports.readMysqlValue = function(
result = dtDecode.getDateTime(
zongji.connection.config.dateStrings, // node-mysql dateStrings option
Math.floor(yearMonth / 13), // year
- (yearMonth % 13), // month
- sliceBits(rawLow, 17, 22), // day
- sliceBits(rawLow, 12, 17), // hour
- sliceBits(rawLow, 6, 12), // minutes
- sliceBits(rawLow, 0, 6), // seconds
- fraction // fraction of a second object
+ yearMonth % 13, // month
+ sliceBits(rawLow, 17, 22), // day
+ sliceBits(rawLow, 12, 17), // hour
+ sliceBits(rawLow, 6, 12), // minutes
+ sliceBits(rawLow, 0, 6), // seconds
+ fraction // fraction of a second object
);
break;
}
@@ -557,9 +581,11 @@ exports.readMysqlValue = function(
raw = readIntBE(parser._buffer, parser._offset, 4);
parser._offset += 4;
fraction = readTemporalFraction(parser, column.metadata.decimals);
- result = dtDecode.getTimeStamp(zongji.connection.config.dateStrings,
- raw, // seconds from epoch
- fraction); // fraction of a second object
+ result = dtDecode.getTimeStamp(
+ zongji.connection.config.dateStrings,
+ raw, // seconds from epoch
+ fraction
+ ); // fraction of a second object
break;
case MysqlTypes.YEAR:
raw = parser.parseUnsignedNumber(1);
@@ -575,11 +601,20 @@ exports.readMysqlValue = function(
case MysqlTypes.NEWDATE: // Not used
default:
result = undefined;
- zongji.emit('error',
- new Error('Unsupported type "' + column.type +
- '" on column "' + column.name +
- '" of the table "' + tableMap.tableName +
- '" in the database "' + tableMap.parentSchema + '"'));
+ zongji.emit(
+ 'error',
+ new Error(
+ 'Unsupported type "' +
+ column.type +
+ '" on column "' +
+ column.name +
+ '" of the table "' +
+ tableMap.tableName +
+ '" in the database "' +
+ tableMap.parentSchema +
+ '"'
+ )
+ );
}
return result;
};
diff --git a/lib/datetime_decode.js b/lib/datetime_decode.js
index c0e9d30..c7bb56e 100644
--- a/lib/datetime_decode.js
+++ b/lib/datetime_decode.js
@@ -8,35 +8,29 @@ const common = require('./common'); // used only for common.zeroPad
// dateStrings are used only if the dateStrings option is true, or is an array
// containing the sql type name string, 'DATE', 'DATETIME', or 'TIMESTAMP'.
// This follows the documentation of the dateStrings option in node-mysql.
-const useDateStringsForType = function(dateStrings, sqlTypeString) {
- return dateStrings &&
- (dateStrings === true ||
- dateStrings.indexOf && dateStrings.indexOf(sqlTypeString) > -1);
+const useDateStringsForType = function (dateStrings, sqlTypeString) {
+ return dateStrings && (dateStrings === true || (dateStrings.indexOf && dateStrings.indexOf(sqlTypeString) > -1));
};
// fraction is the fractional second object from readTemporalFraction().
// returns '' or a '.' followed by fraction.precision digits, like '.123'
-const getFractionString = exports.getFractionString = function(fraction) {
- return fraction ?
- '.' + common.zeroPad(fraction.value, fraction.precision) :
- '';
-};
+const getFractionString = (exports.getFractionString = function (fraction) {
+ return fraction ? '.' + common.zeroPad(fraction.value, fraction.precision) : '';
+});
// 1950-00-00 and the like are perfectly valid Mysql dateStrings. A 0 portion
// of a date is essentially a null part of the date, so we should keep it.
// year, month, and date must be integers >= 0. January is month === 1.
-const getDateString = exports.getDateString = function(year, month, date) {
- return common.zeroPad(year, 4) + '-' +
- common.zeroPad(month, 2) + '-' +
- common.zeroPad(date, 2);
-};
+const getDateString = (exports.getDateString = function (year, month, date) {
+ return common.zeroPad(year, 4) + '-' + common.zeroPad(month, 2) + '-' + common.zeroPad(date, 2);
+});
// Date object months are 1 less than Mysql months, and we need to filter 0.
// If we don't filter 0, 2017-00-01 will become the javascript Date 2016-12-01,
// which is not what it means. It means 2017-NULL-01, but the Date object
// cannot handle it, so we want to return an invalid month, rather than a
// subtracted month.
-const jsMonthFromMysqlMonth = function(month) {
+const jsMonthFromMysqlMonth = function (month) {
return month > 0 ? month - 1 : undefined;
};
@@ -44,16 +38,14 @@ const jsMonthFromMysqlMonth = function(month) {
// option. With the dateStrings option, it can output valid Mysql DATE strings
// representing values that cannot be represented by a Date object, such as
// values with a null part like '1950-00-04', or a zero date '0000-00-00'.
-exports.getDate = function(dateStrings, // node-mysql dateStrings option
- year,
- month, // January === 1
- date
- )
-{
+exports.getDate = function (
+ dateStrings, // node-mysql dateStrings option
+ year,
+ month, // January === 1
+ date
+) {
if (!useDateStringsForType(dateStrings, 'DATE')) {
- return new Date(year,
- jsMonthFromMysqlMonth(month),
- date);
+ return new Date(Date.UTC(year, jsMonthFromMysqlMonth(month), date));
}
return getDateString(year, month, date);
};
@@ -62,30 +54,31 @@ exports.getDate = function(dateStrings, // node-mysql dateStrings option
// option. Fraction is an optional parameter that comes from
// readTemporalFraction(). Mysql dateStrings are needed for microsecond
// precision, or to represent '0000-00-00 00:00:00'.
-exports.getDateTime = function(dateStrings, // node-mysql dateStrings option
- year,
- month, // January === 1
- date,
- hour,
- minute,
- second,
- fraction // optional fractional second object
- )
-{
+exports.getDateTime = function (
+ dateStrings, // node-mysql dateStrings option
+ year,
+ month, // January === 1
+ date,
+ hour,
+ minute,
+ second,
+ fraction // optional fractional second object
+) {
if (!useDateStringsForType(dateStrings, 'DATETIME')) {
- return new Date(year,
- jsMonthFromMysqlMonth(month),
- date,
- hour,
- minute,
- second,
- fraction ? fraction.milliseconds : 0);
+ return new Date(
+ Date.UTC(year, jsMonthFromMysqlMonth(month), date, hour, minute, second, fraction ? fraction.milliseconds : 0)
+ );
}
- return getDateString(year, month, date) + ' ' +
- common.zeroPad(hour, 2) + ':' +
- common.zeroPad(minute, 2) + ':' +
- common.zeroPad(second, 2) +
- getFractionString(fraction);
+ return (
+ getDateString(year, month, date) +
+ ' ' +
+ common.zeroPad(hour, 2) +
+ ':' +
+ common.zeroPad(minute, 2) +
+ ':' +
+ common.zeroPad(second, 2) +
+ getFractionString(fraction)
+ );
};
// Returns a new Date object or Mysql dateString, following the dateStrings
@@ -93,11 +86,11 @@ exports.getDateTime = function(dateStrings, // node-mysql dateStrings option
// readTemporalFraction(). With the dateStrings option from node-mysql,
// this returns a mysql TIMESTAMP string, like '1975-03-01 23:03:20.38945' or
// '1975-03-01 00:03:20'. Mysql strings are needed for precision beyond ms.
-exports.getTimeStamp = function(dateStrings, // node-mysql dateStrings option
- secondsFromEpoch, // an integer
- fraction // optional fraction of second object
- )
-{
+exports.getTimeStamp = function (
+ dateStrings, // node-mysql dateStrings option
+ secondsFromEpoch, // an integer
+ fraction // optional fraction of second object
+) {
const milliseconds = fraction ? fraction.milliseconds : 0;
const dateObject = new Date(secondsFromEpoch * 1000 + milliseconds);
if (!useDateStringsForType(dateStrings, 'TIMESTAMP')) {
@@ -106,11 +99,14 @@ exports.getTimeStamp = function(dateStrings, // node-mysql dateStrings option
if (secondsFromEpoch === 0 && (!fraction || fraction.value === 0)) {
return '0000-00-00 00:00:00' + getFractionString(fraction);
}
- return getDateString(dateObject.getFullYear(),
- dateObject.getMonth() + 1,
- dateObject.getDate()) + ' ' +
- common.zeroPad(dateObject.getHours(), 2) + ':' +
- common.zeroPad(dateObject.getMinutes(), 2) + ':' +
- common.zeroPad(dateObject.getSeconds(), 2) +
- getFractionString(fraction);
+ return (
+ getDateString(dateObject.getFullYear(), dateObject.getMonth() + 1, dateObject.getDate()) +
+ ' ' +
+ common.zeroPad(dateObject.getHours(), 2) +
+ ':' +
+ common.zeroPad(dateObject.getMinutes(), 2) +
+ ':' +
+ common.zeroPad(dateObject.getSeconds(), 2) +
+ getFractionString(fraction)
+ );
};
diff --git a/lib/json_decode.js b/lib/json_decode.js
index 96de019..c79b9e4 100644
--- a/lib/json_decode.js
+++ b/lib/json_decode.js
@@ -3,25 +3,25 @@ const Parser = require('@vlasky/mysql/lib/protocol/Parser');
const JSONB_TYPE_SMALL_OBJECT = 0;
const JSONB_TYPE_LARGE_OBJECT = 1;
-const JSONB_TYPE_SMALL_ARRAY = 2;
-const JSONB_TYPE_LARGE_ARRAY = 3;
-const JSONB_TYPE_LITERAL = 4;
-const JSONB_TYPE_INT16 = 5;
-const JSONB_TYPE_UINT16 = 6;
-const JSONB_TYPE_INT32 = 7;
-const JSONB_TYPE_UINT32 = 8;
-const JSONB_TYPE_INT64 = 9;
-const JSONB_TYPE_UINT64 = 10;
-const JSONB_TYPE_DOUBLE = 11;
-const JSONB_TYPE_STRING = 12;
-const JSONB_TYPE_OPAQUE = 15;
+const JSONB_TYPE_SMALL_ARRAY = 2;
+const JSONB_TYPE_LARGE_ARRAY = 3;
+const JSONB_TYPE_LITERAL = 4;
+const JSONB_TYPE_INT16 = 5;
+const JSONB_TYPE_UINT16 = 6;
+const JSONB_TYPE_INT32 = 7;
+const JSONB_TYPE_UINT32 = 8;
+const JSONB_TYPE_INT64 = 9;
+const JSONB_TYPE_UINT64 = 10;
+const JSONB_TYPE_DOUBLE = 11;
+const JSONB_TYPE_STRING = 12;
+const JSONB_TYPE_OPAQUE = 15;
-const JSONB_LITERALS = [ null, true, false ];
+const JSONB_LITERALS = [null, true, false];
// node-mysql prefixes binary string values
const VAR_STRING_PREFIX = 'base64:type253:';
-module.exports = function(input) {
+module.exports = function (input) {
// Value must be JSON string to match node-mysql results
// Related to this node-mysql PR:
// https://github.com/felixge/node-mysql/pull/1299
@@ -48,8 +48,7 @@ function parseBinaryBuffer(input, offset, parentValueOffset, readUInt, isLarge)
// Only used for types which use the value stored at a pointer position
// If object is root (offset 0), the value is not offset by pointer
- const valueOffset = offset === 0 ? 0 :
- readUInt(offset + 1) + parentValueOffset;
+ const valueOffset = offset === 0 ? 0 : readUInt(offset + 1) + parentValueOffset;
let result = null;
const jsonType = input.readUInt8(offset);
@@ -69,7 +68,9 @@ function parseBinaryBuffer(input, offset, parentValueOffset, readUInt, isLarge)
}
// All other types are retrieved from pointer
case JSONB_TYPE_STRING: {
- let strLen, strLenSize = 0, curStrLenByte;
+ let strLen,
+ strLenSize = 0,
+ curStrLenByte;
// If the high bit is 1, the string length continues to the next byte
while (strLenSize === 0 || (curStrLenByte & 128) === 128) {
strLenSize++;
@@ -77,13 +78,10 @@ function parseBinaryBuffer(input, offset, parentValueOffset, readUInt, isLarge)
if (strLenSize === 1) {
strLen = curStrLenByte;
} else {
- strLen = (strLen ^ Math.pow(128, strLenSize - 1))
- + (curStrLenByte * Math.pow(2, 7 * (strLenSize - 1)));
+ strLen = (strLen ^ Math.pow(128, strLenSize - 1)) + curStrLenByte * Math.pow(2, 7 * (strLenSize - 1));
}
}
- result = input.toString('utf8',
- valueOffset + strLenSize + 1,
- valueOffset + strLenSize + 1 + strLen);
+ result = input.toString('utf8', valueOffset + strLenSize + 1, valueOffset + strLenSize + 1 + strLen);
break;
}
case JSONB_TYPE_LARGE_OBJECT:
@@ -120,22 +118,23 @@ function parseBinaryBuffer(input, offset, parentValueOffset, readUInt, isLarge)
const mask = Math.pow(2, 32) - 1;
high = common.sliceBits(high ^ mask, 0, 21);
low = low ^ mask;
- result =
- ((high * Math.pow(2, 32)) * - 1) - common.getUInt32Value(low) - 1;
+ result = high * Math.pow(2, 32) * -1 - common.getUInt32Value(low) - 1;
} else {
- result = (high * Math.pow(2,32)) + low;
+ result = high * Math.pow(2, 32) + low;
}
break;
}
case JSONB_TYPE_UINT64: {
const low = input.readUInt32LE(valueOffset + 1);
const high = input.readUInt32LE(valueOffset + 5);
- result = (high * Math.pow(2,32)) + low;
+ result = high * Math.pow(2, 32) + low;
break;
}
case JSONB_TYPE_OPAQUE: {
const customType = input.readUInt8(valueOffset + 1);
- let dataLen, dataLenSize = 0, curDataLenByte;
+ let dataLen,
+ dataLenSize = 0,
+ curDataLenByte;
// If the high bit is 1, the string length continues to the next byte
while (dataLenSize === 0 || (curDataLenByte & 128) === 128) {
dataLenSize++;
@@ -143,8 +142,7 @@ function parseBinaryBuffer(input, offset, parentValueOffset, readUInt, isLarge)
if (dataLenSize === 1) {
dataLen = curDataLenByte;
} else {
- dataLen = (dataLen ^ Math.pow(128, dataLenSize - 1))
- + (curDataLenByte * Math.pow(2, 7 * (dataLenSize - 1)));
+ dataLen = (dataLen ^ Math.pow(128, dataLenSize - 1)) + curDataLenByte * Math.pow(2, 7 * (dataLenSize - 1));
}
}
@@ -154,18 +152,18 @@ function parseBinaryBuffer(input, offset, parentValueOffset, readUInt, isLarge)
let metadata = {};
const parseType = customType;
- parser.append(input.slice(
- valueOffset + dataLenSize + 2,
- valueOffset + dataLenSize + 2 + dataLen));
+ parser.append(input.slice(valueOffset + dataLenSize + 2, valueOffset + dataLenSize + 2 + dataLen));
switch (customType) {
case common.MysqlTypes.DATE: {
const raw = parser._buffer.readInt32LE(4);
const yearMonth = common.sliceBits(raw, 14, 31);
result =
- common.zeroPad(Math.floor(yearMonth / 13), 4) + '-' + // year
- common.zeroPad(yearMonth % 13, 2) + '-' + // month
- common.zeroPad(common.sliceBits(raw, 9, 14), 2); // day
+ common.zeroPad(Math.floor(yearMonth / 13), 4) +
+ '-' + // year
+ common.zeroPad(yearMonth % 13, 2) +
+ '-' + // month
+ common.zeroPad(common.sliceBits(raw, 9, 14), 2); // day
break;
}
case common.MysqlTypes.TIME: {
@@ -186,11 +184,15 @@ function parseBinaryBuffer(input, offset, parentValueOffset, readUInt, isLarge)
const minute = common.sliceBits(raw, 6, 12);
const second = common.sliceBits(raw, 0, 6);
- result = (isNegative ? '-' : '') +
- common.zeroPad(hour, hour > 99 ? 3 : 2) + ':' +
- common.zeroPad(minute, 2) + ':' +
- common.zeroPad(second, 2) +
- '.' + common.zeroPad(fraction, 6);
+ result =
+ (isNegative ? '-' : '') +
+ common.zeroPad(hour, hour > 99 ? 3 : 2) +
+ ':' +
+ common.zeroPad(minute, 2) +
+ ':' +
+ common.zeroPad(second, 2) +
+ '.' +
+ common.zeroPad(fraction, 6);
break;
}
case common.MysqlTypes.DATETIME: {
@@ -201,19 +203,25 @@ function parseBinaryBuffer(input, offset, parentValueOffset, readUInt, isLarge)
const yearMonth = common.sliceBits(rawLow, 14, 31);
result =
- common.zeroPad(Math.floor(yearMonth / 13), 4) + '-' + // year
- common.zeroPad(yearMonth % 13, 2) + '-' + // month
- common.zeroPad(common.sliceBits(rawLow, 9, 14), 2) + ' ' + // day
- common.zeroPad(common.sliceBits(rawHigh, 12, 17), 2) + ':' + // hour
- common.zeroPad(common.sliceBits(rawHigh, 6, 12), 2) + ':' + // minutes
- common.zeroPad(common.sliceBits(rawHigh, 0, 6), 2) + '.' + // seconds
+ common.zeroPad(Math.floor(yearMonth / 13), 4) +
+ '-' + // year
+ common.zeroPad(yearMonth % 13, 2) +
+ '-' + // month
+ common.zeroPad(common.sliceBits(rawLow, 9, 14), 2) +
+ ' ' + // day
+ common.zeroPad(common.sliceBits(rawHigh, 12, 17), 2) +
+ ':' + // hour
+ common.zeroPad(common.sliceBits(rawHigh, 6, 12), 2) +
+ ':' + // minutes
+ common.zeroPad(common.sliceBits(rawHigh, 0, 6), 2) +
+ '.' + // seconds
common.zeroPad(fraction, 6);
break;
}
case common.MysqlTypes.NEWDECIMAL:
metadata = {
precision: parser.parseUnsignedNumber(1),
- decimals: parser.parseUnsignedNumber(1),
+ decimals: parser.parseUnsignedNumber(1)
};
break;
case common.MysqlTypes.VAR_STRING:
@@ -255,23 +263,23 @@ function readObject(input, valueOffset, isLarge) {
// Position where key entries start
// Key entry: Key offset (int16/32) + Key length (int16)
const memberKeyStart =
- valueOffset + 1 + // Beginning of definition
- (intSize * 2); // memberCount + binarySize
+ valueOffset +
+ 1 + // Beginning of definition
+ intSize * 2; // memberCount + binarySize
// Value entries (or pointers to such) begin after key entries
- const memberValueStart = memberKeyStart + (memberCount * (intSize + 2));
+ const memberValueStart = memberKeyStart + memberCount * (intSize + 2);
for (let pointerPos = 0; pointerPos < memberCount; pointerPos++) {
- const keyEntryPos = memberKeyStart + (pointerPos * (intSize + 2));
+ const keyEntryPos = memberKeyStart + pointerPos * (intSize + 2);
const keyStart = valueOffset + 1 + readUInt(keyEntryPos);
const keyEnd = keyStart + input.readUInt16LE(keyEntryPos + intSize);
const thisKey = input.toString('utf8', keyStart, keyEnd);
- const memberValueOffset = memberValueStart + (pointerPos * (intSize + 1));
+ const memberValueOffset = memberValueStart + pointerPos * (intSize + 1);
- result[thisKey] =
- parseBinaryBuffer(input, memberValueOffset, valueOffset, readUInt, isLarge);
+ result[thisKey] = parseBinaryBuffer(input, memberValueOffset, valueOffset, readUInt, isLarge);
}
return result;
@@ -292,12 +300,12 @@ function readArray(input, valueOffset, isLarge) {
for (let pointerPos = 0; pointerPos < memberCount; pointerPos++) {
let memberValueOffset =
- valueOffset + 1 + // Beginning of definition
- (intSize * 2) + // memberCount + binarySize
- (pointerPos * (1 + intSize)); // value type + value offset
+ valueOffset +
+ 1 + // Beginning of definition
+ intSize * 2 + // memberCount + binarySize
+ pointerPos * (1 + intSize); // value type + value offset
- result.push(
- parseBinaryBuffer(input, memberValueOffset, valueOffset, readUInt, isLarge));
+ result.push(parseBinaryBuffer(input, memberValueOffset, valueOffset, readUInt, isLarge));
}
return result;
}
diff --git a/lib/packet/binlog.js b/lib/packet/binlog.js
index 1db4d53..f20fb65 100644
--- a/lib/packet/binlog.js
+++ b/lib/packet/binlog.js
@@ -2,9 +2,7 @@ const getEventClass = require('../code_map').getEventClass;
//TODO Don't depend on zongji instance here
module.exports = function initBinlogPacketClass(zongji) {
-
class BinlogPacket {
-
*_process(parser) {
// uint8_t marker; // always 0 or 0xFF
// uint32_t timestamp;
@@ -26,7 +24,7 @@ module.exports = function initBinlogPacketClass(zongji) {
timestamp: timestamp,
nextPosition: nextPosition,
size: eventLength - BinlogPacket.Length,
- eventType: eventType,
+ eventType: eventType
};
const EventClass = getEventClass(eventType);
diff --git a/lib/packet/combinlog.js b/lib/packet/combinlog.js
index f6d7361..a704974 100644
--- a/lib/packet/combinlog.js
+++ b/lib/packet/combinlog.js
@@ -10,7 +10,7 @@ function ComBinlog({ serverId, nonBlock, filename, position }) {
this.filename = filename || '';
}
-ComBinlog.prototype.write = function(writer) {
+ComBinlog.prototype.write = function (writer) {
writer.writeUnsignedNumber(1, this.command);
writer.writeUnsignedNumber(4, this.position);
writer.writeUnsignedNumber(2, this.flags);
@@ -18,7 +18,7 @@ ComBinlog.prototype.write = function(writer) {
writer.writeNullTerminatedString(this.filename);
};
-ComBinlog.prototype.parse = function() {
+ComBinlog.prototype.parse = function () {
throw new Error('should never be callede here');
};
diff --git a/lib/packet/index.js b/lib/packet/index.js
index 3f9f7da..495429e 100644
--- a/lib/packet/index.js
+++ b/lib/packet/index.js
@@ -2,21 +2,21 @@
function EofPacket(options) {
options = options || {};
- this.fieldCount = undefined;
+ this.fieldCount = undefined;
this.warningCount = options.warningCount;
this.serverStatus = options.serverStatus;
- this.protocol41 = options.protocol41;
+ this.protocol41 = options.protocol41;
}
-EofPacket.prototype.parse = function(parser) {
- this.fieldCount = parser.parseUnsignedNumber(1);
+EofPacket.prototype.parse = function (parser) {
+ this.fieldCount = parser.parseUnsignedNumber(1);
if (this.protocol41) {
this.warningCount = parser.parseUnsignedNumber(2);
this.serverStatus = parser.parseUnsignedNumber(2);
}
};
-EofPacket.prototype.write = function(writer) {
+EofPacket.prototype.write = function (writer) {
writer.writeUnsignedNumber(1, 0xfe);
if (this.protocol41) {
writer.writeUnsignedNumber(2, this.warningCount);
@@ -28,27 +28,27 @@ EofPacket.prototype.write = function(writer) {
function ErrorPacket(options) {
options = options || {};
- this.fieldCount = options.fieldCount;
- this.errno = options.errno;
+ this.fieldCount = options.fieldCount;
+ this.errno = options.errno;
this.sqlStateMarker = options.sqlStateMarker;
- this.sqlState = options.sqlState;
- this.message = options.message;
+ this.sqlState = options.sqlState;
+ this.message = options.message;
}
-ErrorPacket.prototype.parse = function(parser) {
+ErrorPacket.prototype.parse = function (parser) {
this.fieldCount = parser.parseUnsignedNumber(1);
- this.errno = parser.parseUnsignedNumber(2);
+ this.errno = parser.parseUnsignedNumber(2);
// sqlStateMarker ('#' = 0x23) indicates error packet format
if (parser.peak() === 0x23) {
this.sqlStateMarker = parser.parseString(1);
- this.sqlState = parser.parseString(5);
+ this.sqlState = parser.parseString(5);
}
this.message = parser.parsePacketTerminatedString();
};
-ErrorPacket.prototype.write = function(writer) {
+ErrorPacket.prototype.write = function (writer) {
writer.writeUnsignedNumber(1, 0xff);
writer.writeUnsignedNumber(2, this.errno);
diff --git a/lib/reader.js b/lib/reader.js
index e9a2403..514363e 100644
--- a/lib/reader.js
+++ b/lib/reader.js
@@ -10,64 +10,63 @@ function BufferReader(buffer) {
this.position = 0;
}
-BufferReader.prototype.readUInt8 = function() {
+BufferReader.prototype.readUInt8 = function () {
const pos = this.position;
this.position += 1;
return this.buffer.readUInt8(pos);
};
-BufferReader.prototype.readUInt16 = function() {
+BufferReader.prototype.readUInt16 = function () {
const pos = this.position;
this.position += 2;
return this.buffer.readUInt16LE(pos);
};
-BufferReader.prototype.readUInt32 = function() {
+BufferReader.prototype.readUInt32 = function () {
const pos = this.position;
this.position += 4;
return this.buffer.readUInt32LE(pos);
};
-BufferReader.prototype.readUInt24 = function() {
+BufferReader.prototype.readUInt24 = function () {
const low = this.readUInt16();
const high = this.readUInt8();
return (high << 16) + low;
};
-BufferReader.prototype.readUInt64 = function() {
+BufferReader.prototype.readUInt64 = function () {
const pos = this.position;
this.position += 8;
// from http://stackoverflow.com/questions/17687307/convert-a-64bit-little-endian-integer-to-number
- return this.buffer.readInt32LE(pos) +
- 0x100000000 * this.buffer.readUInt32LE(pos + 4);
+ return this.buffer.readInt32LE(pos) + 0x100000000 * this.buffer.readUInt32LE(pos + 4);
};
-BufferReader.prototype.readString = function() {
+BufferReader.prototype.readString = function () {
const strBuf = this.buffer.slice(this.position);
this.position = this.buffer.length;
return strBuf.toString('ascii');
};
-BufferReader.prototype.readStringInBytes = function(length) {
+BufferReader.prototype.readStringInBytes = function (length) {
const strBuf = this.buffer.slice(this.position, this.position + length);
this.position += length;
return strBuf.toString('ascii');
};
-BufferReader.prototype.readHexInBytes = function(length) {
+BufferReader.prototype.readHexInBytes = function (length) {
const buf = this.buffer.slice(this.position, this.position + length);
this.position += length;
return buf.toString('hex');
};
-BufferReader.prototype.readBytesArray = function(length) {
+BufferReader.prototype.readBytesArray = function (length) {
const result = [];
const hexString = this.readHexInBytes(length);
for (let i = 0; i < hexString.length; i = i + 2) {
@@ -82,7 +81,7 @@ BufferReader.prototype.readBytesArray = function(length) {
// integer values <= 250, or to encode the number of following bytes
// used to store the actual value, which can be 2, 3, or 8. It also
// includes support for SQL NULL as a special case.
-BufferReader.prototype.readVariant = function() {
+BufferReader.prototype.readVariant = function () {
let result = null;
const firstByte = this.readUInt8();
@@ -103,7 +102,7 @@ BufferReader.prototype.readVariant = function() {
return result;
};
-const padWith = function(val, length) {
+const padWith = function (val, length) {
const bits = val.split('');
if (bits.length < length) {
const left = length - bits.length;
@@ -118,7 +117,7 @@ const padWith = function(val, length) {
// Read an arbitrary-length bitmap, provided its length.
// Returns an array of true/false values.
-BufferReader.prototype.readBitArray = function(length) {
+BufferReader.prototype.readBitArray = function (length) {
const size = Math.floor((length + 7) / 8);
const bytes = [];
@@ -127,9 +126,11 @@ BufferReader.prototype.readBitArray = function(length) {
}
const bitmap = [];
- const bitmapStr = bytes.map(function(aByte) {
- return padWith(aByte.toString(2), 8);
- }).join('');
+ const bitmapStr = bytes
+ .map(function (aByte) {
+ return padWith(aByte.toString(2), 8);
+ })
+ .join('');
for (let k = bitmapStr.length - 1; k >= 0; k--) {
bitmap.push(bitmapStr[k] === '1');
diff --git a/lib/rows_event.js b/lib/rows_event.js
index 3ad35c3..c93100f 100644
--- a/lib/rows_event.js
+++ b/lib/rows_event.js
@@ -5,7 +5,7 @@ const Common = require('./common');
const Version2Events = [
0x1e, // WRITE_ROWS_EVENT_V2,
0x1f, // UPDATE_ROWS_EVENT_V2,
- 0x20, // DELETE_ROWS_EVENT_V2
+ 0x20 // DELETE_ROWS_EVENT_V2
];
const CHECKSUM_SIZE = 4;
@@ -13,22 +13,13 @@ const CHECKSUM_SIZE = 4;
// A quick way to know how many bits set in a given byte
// e.g. Given 3 => 0000 0011, it has 2 bits set
const BIT_COUNT_MAP_IN_ONE_BYTE = [
- 0, 1, 1, 2, 1, 2, 2, 3, 1, 2, 2, 3, 2, 3, 3, 4,
- 1, 2, 2, 3, 2, 3, 3, 4, 2, 3, 3, 4, 3, 4, 4, 5,
- 1, 2, 2, 3, 2, 3, 3, 4, 2, 3, 3, 4, 3, 4, 4, 5,
- 2, 3, 3, 4, 3, 4, 4, 5, 3, 4, 4, 5, 4, 5, 5, 6,
- 1, 2, 2, 3, 2, 3, 3, 4, 2, 3, 3, 4, 3, 4, 4, 5,
- 2, 3, 3, 4, 3, 4, 4, 5, 3, 4, 4, 5, 4, 5, 5, 6,
- 2, 3, 3, 4, 3, 4, 4, 5, 3, 4, 4, 5, 4, 5, 5, 6,
- 3, 4, 4, 5, 4, 5, 5, 6, 4, 5, 5, 6, 5, 6, 6, 7,
- 1, 2, 2, 3, 2, 3, 3, 4, 2, 3, 3, 4, 3, 4, 4, 5,
- 2, 3, 3, 4, 3, 4, 4, 5, 3, 4, 4, 5, 4, 5, 5, 6,
- 2, 3, 3, 4, 3, 4, 4, 5, 3, 4, 4, 5, 4, 5, 5, 6,
- 3, 4, 4, 5, 4, 5, 5, 6, 4, 5, 5, 6, 5, 6, 6, 7,
- 2, 3, 3, 4, 3, 4, 4, 5, 3, 4, 4, 5, 4, 5, 5, 6,
- 3, 4, 4, 5, 4, 5, 5, 6, 4, 5, 5, 6, 5, 6, 6, 7,
- 3, 4, 4, 5, 4, 5, 5, 6, 4, 5, 5, 6, 5, 6, 6, 7,
- 4, 5, 5, 6, 5, 6, 6, 7, 5, 6, 6, 7, 6, 7, 7, 8,
+ 0, 1, 1, 2, 1, 2, 2, 3, 1, 2, 2, 3, 2, 3, 3, 4, 1, 2, 2, 3, 2, 3, 3, 4, 2, 3, 3, 4, 3, 4, 4, 5, 1, 2, 2, 3, 2, 3, 3,
+ 4, 2, 3, 3, 4, 3, 4, 4, 5, 2, 3, 3, 4, 3, 4, 4, 5, 3, 4, 4, 5, 4, 5, 5, 6, 1, 2, 2, 3, 2, 3, 3, 4, 2, 3, 3, 4, 3, 4,
+ 4, 5, 2, 3, 3, 4, 3, 4, 4, 5, 3, 4, 4, 5, 4, 5, 5, 6, 2, 3, 3, 4, 3, 4, 4, 5, 3, 4, 4, 5, 4, 5, 5, 6, 3, 4, 4, 5, 4,
+ 5, 5, 6, 4, 5, 5, 6, 5, 6, 6, 7, 1, 2, 2, 3, 2, 3, 3, 4, 2, 3, 3, 4, 3, 4, 4, 5, 2, 3, 3, 4, 3, 4, 4, 5, 3, 4, 4, 5,
+ 4, 5, 5, 6, 2, 3, 3, 4, 3, 4, 4, 5, 3, 4, 4, 5, 4, 5, 5, 6, 3, 4, 4, 5, 4, 5, 5, 6, 4, 5, 5, 6, 5, 6, 6, 7, 2, 3, 3,
+ 4, 3, 4, 4, 5, 3, 4, 4, 5, 4, 5, 5, 6, 3, 4, 4, 5, 4, 5, 5, 6, 4, 5, 5, 6, 5, 6, 6, 7, 3, 4, 4, 5, 4, 5, 5, 6, 4, 5,
+ 5, 6, 5, 6, 6, 7, 4, 5, 5, 6, 5, 6, 6, 7, 5, 6, 6, 7, 6, 7, 7, 8
];
/**
@@ -91,29 +82,29 @@ function RowsEvent(parser, options, zongji) {
util.inherits(RowsEvent, BinlogEvent);
-RowsEvent.prototype.setTableMap = function(tableMap) {
+RowsEvent.prototype.setTableMap = function (tableMap) {
this.tableMap = tableMap;
};
-RowsEvent.prototype.dump = function() {
+RowsEvent.prototype.dump = function () {
BinlogEvent.prototype.dump.apply(this);
console.log('Affected columns:', this.numberOfColumns);
console.log('Changed rows:', this.rows.length);
console.log('Values:');
- this.rows.forEach(function(row) {
+ this.rows.forEach(function (row) {
console.log('--');
- Object.keys(row).forEach(function(name) {
+ Object.keys(row).forEach(function (name) {
console.log('Column: %s, Value: %s', name, row[name]);
});
});
};
-RowsEvent.prototype._fetchOneRow = function(parser) {
+RowsEvent.prototype._fetchOneRow = function (parser) {
const tablemap = this.tableMap[this.tableId];
return readRow(parser, tablemap, this.columns_present_bitmap, this._zongji);
};
-const countBits = function(buff) {
+const countBits = function (buff) {
let bits = 0;
for (let i = 0; i < buff.length; i++) {
bits += BIT_COUNT_MAP_IN_ONE_BYTE[buff[i]];
@@ -121,12 +112,12 @@ const countBits = function(buff) {
return bits;
};
-const getBit = function(buff, position) {
+const getBit = function (buff, position) {
let byte = buff[Math.floor(position / 8)];
- return byte & (1 << (position % 8));
+ return byte & (1 << position % 8);
};
-const readRow = function(parser, tablemap, bitmap, zongji) {
+const readRow = function (parser, tablemap, bitmap, zongji) {
const nullBitmapSize = Math.floor((countBits(bitmap) + 7) / 8);
const nullBitmap = parser.parseBuffer(nullBitmapSize);
@@ -143,9 +134,7 @@ const readRow = function(parser, tablemap, bitmap, zongji) {
row[column.name] = null;
} else {
let columnSchema = tablemap.columnSchemas[i];
- row[column.name] = Common.readMysqlValue(
- parser, column, columnSchema, tablemap, zongji
- );
+ row[column.name] = Common.readMysqlValue(parser, column, columnSchema, tablemap, zongji);
}
nullBitIndex += 1;
@@ -154,42 +143,45 @@ const readRow = function(parser, tablemap, bitmap, zongji) {
};
// Subclasses
-function WriteRows(parser, options) { // eslint-disable-line
+function WriteRows(parser, options) {
+ // eslint-disable-line
RowsEvent.apply(this, arguments);
}
util.inherits(WriteRows, RowsEvent);
// eslint
-function DeleteRows(parser, options) { // eslint-disable-line
+function DeleteRows(parser, options) {
+ // eslint-disable-line
RowsEvent.apply(this, arguments);
}
util.inherits(DeleteRows, RowsEvent);
-function UpdateRows(parser, options) { // eslint-disable-line
+function UpdateRows(parser, options) {
+ // eslint-disable-line
this._hasTwoRows = true;
RowsEvent.apply(this, arguments);
}
util.inherits(UpdateRows, RowsEvent);
-UpdateRows.prototype._fetchOneRow = function(parser) {
+UpdateRows.prototype._fetchOneRow = function (parser) {
const tablemap = this.tableMap[this.tableId];
return {
before: readRow(parser, tablemap, this.columns_present_bitmap, this._zongji),
- after: readRow(parser, tablemap, this.columns_present_bitmap2, this._zongji),
+ after: readRow(parser, tablemap, this.columns_present_bitmap2, this._zongji)
};
};
-UpdateRows.prototype.dump = function() {
+UpdateRows.prototype.dump = function () {
BinlogEvent.prototype.dump.apply(this);
console.log('Affected columns:', this.numberOfColumns);
console.log('Changed rows:', this.rows.length);
console.log('Values:');
- this.rows.forEach(function(row) {
+ this.rows.forEach(function (row) {
console.log('--');
- Object.keys(row.before).forEach(function(name) {
+ Object.keys(row.before).forEach(function (name) {
console.log('Column: %s, Value: %s => %s', name, row.before[name], row.after[name]);
});
});
diff --git a/lib/sequence/binlog.js b/lib/sequence/binlog.js
index b144e36..35ac018 100644
--- a/lib/sequence/binlog.js
+++ b/lib/sequence/binlog.js
@@ -2,7 +2,7 @@ const Util = require('util');
const { EofPacket, ErrorPacket, ComBinlog, initBinlogPacketClass } = require('../packet');
const Sequence = require('@vlasky/mysql/lib/protocol/sequences').Sequence;
-module.exports = function(zongji) {
+module.exports = function (zongji) {
const BinlogPacket = initBinlogPacketClass(zongji);
function Binlog(callback) {
@@ -11,32 +11,29 @@ module.exports = function(zongji) {
Util.inherits(Binlog, Sequence);
- Binlog.prototype.start = function() {
+ Binlog.prototype.start = function () {
// options include: position / nonBlock / serverId / filename
- let options = zongji.get([
- 'serverId', 'position', 'filename', 'nonBlock',
- ]);
+ let options = zongji.get(['serverId', 'position', 'filename', 'nonBlock']);
this.emit('packet', new ComBinlog(options));
};
- Binlog.prototype.determinePacket = function(firstByte) {
+ Binlog.prototype.determinePacket = function (firstByte) {
switch (firstByte) {
- case 0xfe:
- return EofPacket;
- case 0xff:
- return ErrorPacket;
- default:
- return BinlogPacket;
+ case 0xfe:
+ return EofPacket;
+ case 0xff:
+ return ErrorPacket;
+ default:
+ return BinlogPacket;
}
};
- Binlog.prototype['OkPacket'] = function() {
+ Binlog.prototype['OkPacket'] = function () {
console.log('Received one OkPacket ...');
};
- Binlog.prototype['BinlogPacket'] = function(packet) {
+ Binlog.prototype['BinlogPacket'] = function (packet) {
if (this._callback) {
-
// Check event filtering
if (zongji._skipEvent(packet.eventName.toLowerCase())) {
return this._callback.call(this);
diff --git a/package-lock.json b/package-lock.json
deleted file mode 100644
index b8fb749..0000000
--- a/package-lock.json
+++ /dev/null
@@ -1,4086 +0,0 @@
-{
- "name": "@vlasky/zongji",
- "version": "0.5.9",
- "lockfileVersion": 1,
- "requires": true,
- "dependencies": {
- "@babel/code-frame": {
- "version": "7.8.3",
- "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.8.3.tgz",
- "integrity": "sha512-a9gxpmdXtZEInkCSHUJDLHZVBgb1QS0jhss4cPP93EW7s+uC5bikET2twEF3KV+7rDblJcmNvTR7VJejqd2C2g==",
- "dev": true,
- "requires": {
- "@babel/highlight": "^7.8.3"
- }
- },
- "@babel/generator": {
- "version": "7.9.3",
- "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.9.3.tgz",
- "integrity": "sha512-RpxM252EYsz9qLUIq6F7YJyK1sv0wWDBFuztfDGWaQKzHjqDHysxSiRUpA/X9jmfqo+WzkAVKFaUily5h+gDCQ==",
- "dev": true,
- "requires": {
- "@babel/types": "^7.9.0",
- "jsesc": "^2.5.1",
- "lodash": "^4.17.13",
- "source-map": "^0.5.0"
- },
- "dependencies": {
- "source-map": {
- "version": "0.5.7",
- "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz",
- "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=",
- "dev": true
- }
- }
- },
- "@babel/helper-function-name": {
- "version": "7.8.3",
- "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.8.3.tgz",
- "integrity": "sha512-BCxgX1BC2hD/oBlIFUgOCQDOPV8nSINxCwM3o93xP4P9Fq6aV5sgv2cOOITDMtCfQ+3PvHp3l689XZvAM9QyOA==",
- "dev": true,
- "requires": {
- "@babel/helper-get-function-arity": "^7.8.3",
- "@babel/template": "^7.8.3",
- "@babel/types": "^7.8.3"
- }
- },
- "@babel/helper-get-function-arity": {
- "version": "7.8.3",
- "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.8.3.tgz",
- "integrity": "sha512-FVDR+Gd9iLjUMY1fzE2SR0IuaJToR4RkCDARVfsBBPSP53GEqSFjD8gNyxg246VUyc/ALRxFaAK8rVG7UT7xRA==",
- "dev": true,
- "requires": {
- "@babel/types": "^7.8.3"
- }
- },
- "@babel/helper-split-export-declaration": {
- "version": "7.8.3",
- "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.8.3.tgz",
- "integrity": "sha512-3x3yOeyBhW851hroze7ElzdkeRXQYQbFIb7gLK1WQYsw2GWDay5gAJNw1sWJ0VFP6z5J1whqeXH/WCdCjZv6dA==",
- "dev": true,
- "requires": {
- "@babel/types": "^7.8.3"
- }
- },
- "@babel/helper-validator-identifier": {
- "version": "7.9.0",
- "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.9.0.tgz",
- "integrity": "sha512-6G8bQKjOh+of4PV/ThDm/rRqlU7+IGoJuofpagU5GlEl29Vv0RGqqt86ZGRV8ZuSOY3o+8yXl5y782SMcG7SHw==",
- "dev": true
- },
- "@babel/highlight": {
- "version": "7.9.0",
- "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.9.0.tgz",
- "integrity": "sha512-lJZPilxX7Op3Nv/2cvFdnlepPXDxi29wxteT57Q965oc5R9v86ztx0jfxVrTcBk8C2kcPkkDa2Z4T3ZsPPVWsQ==",
- "dev": true,
- "requires": {
- "@babel/helper-validator-identifier": "^7.9.0",
- "chalk": "^2.0.0",
- "js-tokens": "^4.0.0"
- }
- },
- "@babel/parser": {
- "version": "7.9.3",
- "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.9.3.tgz",
- "integrity": "sha512-E6SpIDJZ0cZAKoCNk+qSDd0ChfTnpiJN9FfNf3RZ20dzwA2vL2oq5IX1XTVT+4vDmRlta2nGk5HGMMskJAR+4A==",
- "dev": true
- },
- "@babel/runtime": {
- "version": "7.9.2",
- "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.9.2.tgz",
- "integrity": "sha512-NE2DtOdufG7R5vnfQUTehdTfNycfUANEtCa9PssN9O/xmTzP4E08UI797ixaei6hBEVL9BI/PsdJS5x7mWoB9Q==",
- "dev": true,
- "requires": {
- "regenerator-runtime": "^0.13.4"
- }
- },
- "@babel/template": {
- "version": "7.8.6",
- "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.8.6.tgz",
- "integrity": "sha512-zbMsPMy/v0PWFZEhQJ66bqjhH+z0JgMoBWuikXybgG3Gkd/3t5oQ1Rw2WQhnSrsOmsKXnZOx15tkC4qON/+JPg==",
- "dev": true,
- "requires": {
- "@babel/code-frame": "^7.8.3",
- "@babel/parser": "^7.8.6",
- "@babel/types": "^7.8.6"
- }
- },
- "@babel/traverse": {
- "version": "7.9.0",
- "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.9.0.tgz",
- "integrity": "sha512-jAZQj0+kn4WTHO5dUZkZKhbFrqZE7K5LAQ5JysMnmvGij+wOdr+8lWqPeW0BcF4wFwrEXXtdGO7wcV6YPJcf3w==",
- "dev": true,
- "requires": {
- "@babel/code-frame": "^7.8.3",
- "@babel/generator": "^7.9.0",
- "@babel/helper-function-name": "^7.8.3",
- "@babel/helper-split-export-declaration": "^7.8.3",
- "@babel/parser": "^7.9.0",
- "@babel/types": "^7.9.0",
- "debug": "^4.1.0",
- "globals": "^11.1.0",
- "lodash": "^4.17.13"
- },
- "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.9.0",
- "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.9.0.tgz",
- "integrity": "sha512-BS9JKfXkzzJl8RluW4JGknzpiUV7ZrvTayM6yfqLTVBEnFtyowVIOu6rqxRd5cVO6yGoWf4T8u8dgK9oB+GCng==",
- "dev": true,
- "requires": {
- "@babel/helper-validator-identifier": "^7.9.0",
- "lodash": "^4.17.13",
- "to-fast-properties": "^2.0.0"
- }
- },
- "@types/color-name": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/@types/color-name/-/color-name-1.1.1.tgz",
- "integrity": "sha512-rr+OQyAjxze7GgWrSaJwydHStIhHq2lvY3BOC2Mj7KnzI7XK0Uw1TOOdI9lDoajEbSWLiYgoo4f1R51erQfhPQ==",
- "dev": true
- },
- "@vlasky/mysql": {
- "version": "2.18.6",
- "resolved": "https://registry.npmjs.org/@vlasky/mysql/-/mysql-2.18.6.tgz",
- "integrity": "sha512-c+qz/zzqecteQLchoje0E0rjLla935d6hHPpMKmfyQJnHlycLpR49ekS6s/zUAt8w0Um5hFglKXm4+PeJTVhaQ==",
- "requires": {
- "bignumber.js": "9.1.1",
- "readable-stream": "2.3.7",
- "safe-buffer": "5.2.1",
- "sqlstring": "2.3.3"
- },
- "dependencies": {
- "safe-buffer": {
- "version": "5.2.1",
- "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz",
- "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ=="
- }
- }
- },
- "acorn": {
- "version": "7.1.1",
- "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.1.1.tgz",
- "integrity": "sha512-add7dgA5ppRPxCFJoAGfMDi7PIBXq1RtGo7BhbLaxwrXPOmw8gq48Y9ozT01hUKy9byMjlR20EJhu5zlkErEkg==",
- "dev": true
- },
- "acorn-jsx": {
- "version": "5.2.0",
- "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.2.0.tgz",
- "integrity": "sha512-HiUX/+K2YpkpJ+SzBffkM/AQ2YE03S0U1kjTLVpoJdhZMOWy8qvXVN9JdLqv2QsaQ6MPYQIuNmwD8zOiYUofLQ==",
- "dev": true
- },
- "ajv": {
- "version": "6.12.0",
- "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.0.tgz",
- "integrity": "sha512-D6gFiFA0RRLyUbvijN74DWAjXSFxWKaWP7mldxkVhyhAV3+SWA9HEJPHQ2c9soIeTFJqcSdFDGFgdqs1iUU2Hw==",
- "dev": true,
- "requires": {
- "fast-deep-equal": "^3.1.1",
- "fast-json-stable-stringify": "^2.0.0",
- "json-schema-traverse": "^0.4.1",
- "uri-js": "^4.2.2"
- }
- },
- "ansi-escapes": {
- "version": "4.3.1",
- "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.1.tgz",
- "integrity": "sha512-JWF7ocqNrp8u9oqpgV+wH5ftbt+cfvv+PTjOvKLT3AdYly/LmORARfEVT1iyjwN+4MqE5UmVKoAdIBqeoCHgLA==",
- "dev": true,
- "requires": {
- "type-fest": "^0.11.0"
- },
- "dependencies": {
- "type-fest": {
- "version": "0.11.0",
- "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.11.0.tgz",
- "integrity": "sha512-OdjXJxnCN1AvyLSzeKIgXTXxV+99ZuXl3Hpo9XpJAv9MBcHrrJOQ5kV7ypXOuQie+AmWG25hLbiKdwYTifzcfQ==",
- "dev": true
- }
- }
- },
- "ansi-regex": {
- "version": "5.0.0",
- "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz",
- "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==",
- "dev": true
- },
- "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"
- }
- },
- "anymatch": {
- "version": "3.1.1",
- "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.1.tgz",
- "integrity": "sha512-mM8522psRCqzV+6LhomX5wgp25YVibjh8Wj23I5RPkPppSVSjyKD2A2mBJmWGa+KN7f2D6LNh9jkBCeyLktzjg==",
- "dev": true,
- "requires": {
- "normalize-path": "^3.0.0",
- "picomatch": "^2.0.4"
- }
- },
- "append-transform": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/append-transform/-/append-transform-1.0.0.tgz",
- "integrity": "sha512-P009oYkeHyU742iSZJzZZywj4QRJdnTWffaKuJQLablCZ1uz6/cW4yaRgcDaoQ+uwOxxnt0gRUcwfsNP2ri0gw==",
- "dev": true,
- "requires": {
- "default-require-extensions": "^2.0.0"
- }
- },
- "archy": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/archy/-/archy-1.0.0.tgz",
- "integrity": "sha1-+cjBN1fMHde8N5rHeyxipcKGjEA=",
- "dev": true
- },
- "arg": {
- "version": "4.1.3",
- "resolved": "https://registry.npmjs.org/arg/-/arg-4.1.3.tgz",
- "integrity": "sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==",
- "dev": true
- },
- "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"
- }
- },
- "asn1": {
- "version": "0.2.4",
- "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.4.tgz",
- "integrity": "sha512-jxwzQpLQjSmWXgwaCZE9Nz+glAG01yF1QnWgbhGwHI5A6FRIEY6IVqtHhIepHqI7/kyEyQEagBC5mBEFlIYvdg==",
- "dev": true,
- "requires": {
- "safer-buffer": "~2.1.0"
- }
- },
- "assert-plus": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz",
- "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=",
- "dev": true
- },
- "astral-regex": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-1.0.0.tgz",
- "integrity": "sha512-+Ryf6g3BKoRc7jfp7ad8tM4TtMiaWvbF/1/sQcZPkkS7ag3D5nMBCe2UfOTONtAkaG0tO0ij3C5Lwmf1EiyjHg==",
- "dev": true
- },
- "async-hook-domain": {
- "version": "1.1.3",
- "resolved": "https://registry.npmjs.org/async-hook-domain/-/async-hook-domain-1.1.3.tgz",
- "integrity": "sha512-ZovMxSbADV3+biB7oR1GL5lGyptI24alp0LWHlmz1OFc5oL47pz3EiIF6nXOkDW7yLqih4NtsiYduzdDW0i+Wg==",
- "dev": true,
- "requires": {
- "source-map-support": "^0.5.11"
- }
- },
- "asynckit": {
- "version": "0.4.0",
- "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz",
- "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=",
- "dev": true
- },
- "aws-sign2": {
- "version": "0.7.0",
- "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz",
- "integrity": "sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg=",
- "dev": true
- },
- "aws4": {
- "version": "1.9.1",
- "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.9.1.tgz",
- "integrity": "sha512-wMHVg2EOHaMRxbzgFJ9gtjOOCrI80OHLG14rxi28XwOW8ux6IiEbRCGGGqCtdAIg4FQCbW20k9RsT4y3gJlFug==",
- "dev": true
- },
- "balanced-match": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz",
- "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=",
- "dev": true
- },
- "bcrypt-pbkdf": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz",
- "integrity": "sha1-pDAdOJtqQ/m2f/PKEaP2Y342Dp4=",
- "dev": true,
- "requires": {
- "tweetnacl": "^0.14.3"
- }
- },
- "big-integer": {
- "version": "1.6.51",
- "resolved": "https://registry.npmjs.org/big-integer/-/big-integer-1.6.51.tgz",
- "integrity": "sha512-GPEid2Y9QU1Exl1rpO9B2IPJGHPSupF5GnVIP0blYvNOMer2bTvSWs1jGOUg04hTmu67nmLsQ9TBo1puaotBHg=="
- },
- "bignumber.js": {
- "version": "9.1.1",
- "resolved": "https://registry.npmjs.org/bignumber.js/-/bignumber.js-9.1.1.tgz",
- "integrity": "sha512-pHm4LsMJ6lzgNGVfZHjMoO8sdoRhOzOH4MLmY65Jg70bpxCKu5iOHNJyfF6OyvYw7t8Fpf35RuzUyqnQsj8Vig=="
- },
- "binary-extensions": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.0.0.tgz",
- "integrity": "sha512-Phlt0plgpIIBOGTT/ehfFnbNlfsDEiqmzE2KRXoX1bLIlir4X/MR+zSyBEkL05ffWgnRSf/DXv+WrUAVr93/ow==",
- "dev": true
- },
- "bind-obj-methods": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/bind-obj-methods/-/bind-obj-methods-2.0.0.tgz",
- "integrity": "sha512-3/qRXczDi2Cdbz6jE+W3IflJOutRVica8frpBn14de1mBOkzDo+6tY33kNhvkw54Kn3PzRRD2VnGbGPcTAk4sw==",
- "dev": true
- },
- "brace-expansion": {
- "version": "1.1.11",
- "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
- "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==",
- "dev": true,
- "requires": {
- "balanced-match": "^1.0.0",
- "concat-map": "0.0.1"
- }
- },
- "braces": {
- "version": "3.0.2",
- "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz",
- "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==",
- "dev": true,
- "requires": {
- "fill-range": "^7.0.1"
- }
- },
- "browser-process-hrtime": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/browser-process-hrtime/-/browser-process-hrtime-1.0.0.tgz",
- "integrity": "sha512-9o5UecI3GhkpM6DrXr69PblIuWxPKk9Y0jHBRhdocZ2y7YECBFCsHm79Pr3OyR2AvjhDkabFJaDJMYRazHgsow==",
- "dev": true
- },
- "buffer-from": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.1.tgz",
- "integrity": "sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A==",
- "dev": true
- },
- "caching-transform": {
- "version": "3.0.2",
- "resolved": "https://registry.npmjs.org/caching-transform/-/caching-transform-3.0.2.tgz",
- "integrity": "sha512-Mtgcv3lh3U0zRii/6qVgQODdPA4G3zhG+jtbCWj39RXuUFTMzH0vcdMtaJS1jPowd+It2Pqr6y3NJMQqOqCE2w==",
- "dev": true,
- "requires": {
- "hasha": "^3.0.0",
- "make-dir": "^2.0.0",
- "package-hash": "^3.0.0",
- "write-file-atomic": "^2.4.2"
- },
- "dependencies": {
- "write-file-atomic": {
- "version": "2.4.3",
- "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-2.4.3.tgz",
- "integrity": "sha512-GaETH5wwsX+GcnzhPgKcKjJ6M2Cq3/iZp1WyY/X1CSqrW+jVNM9Y7D8EC2sM4ZG/V8wZlSniJnCKWPmBYAucRQ==",
- "dev": true,
- "requires": {
- "graceful-fs": "^4.1.11",
- "imurmurhash": "^0.1.4",
- "signal-exit": "^3.0.2"
- }
- }
- }
- },
- "callsites": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz",
- "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==",
- "dev": true
- },
- "camelcase": {
- "version": "5.3.1",
- "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz",
- "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==",
- "dev": true
- },
- "caseless": {
- "version": "0.12.0",
- "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz",
- "integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=",
- "dev": true
- },
- "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"
- }
- },
- "chardet": {
- "version": "0.7.0",
- "resolved": "https://registry.npmjs.org/chardet/-/chardet-0.7.0.tgz",
- "integrity": "sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==",
- "dev": true
- },
- "chokidar": {
- "version": "3.3.1",
- "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.3.1.tgz",
- "integrity": "sha512-4QYCEWOcK3OJrxwvyyAOxFuhpvOVCYkr33LPfFNBjAD/w3sEzWsp2BUOkI4l9bHvWioAd0rc6NlHUOEaWkTeqg==",
- "dev": true,
- "requires": {
- "anymatch": "~3.1.1",
- "braces": "~3.0.2",
- "fsevents": "~2.1.2",
- "glob-parent": "~5.1.0",
- "is-binary-path": "~2.1.0",
- "is-glob": "~4.0.1",
- "normalize-path": "~3.0.0",
- "readdirp": "~3.3.0"
- }
- },
- "cli-cursor": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-3.1.0.tgz",
- "integrity": "sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==",
- "dev": true,
- "requires": {
- "restore-cursor": "^3.1.0"
- }
- },
- "cli-width": {
- "version": "2.2.0",
- "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-2.2.0.tgz",
- "integrity": "sha1-/xnt6Kml5XkyQUewwR8PvLq+1jk=",
- "dev": true
- },
- "cliui": {
- "version": "4.1.0",
- "resolved": "https://registry.npmjs.org/cliui/-/cliui-4.1.0.tgz",
- "integrity": "sha512-4FG+RSG9DL7uEwRUZXZn3SS34DiDPfzP0VOiEwtUWlE+AR2EIg+hSyvrIgUUfhdgR/UkAeW2QHgeP+hWrXs7jQ==",
- "dev": true,
- "requires": {
- "string-width": "^2.1.1",
- "strip-ansi": "^4.0.0",
- "wrap-ansi": "^2.0.0"
- },
- "dependencies": {
- "ansi-regex": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz",
- "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=",
- "dev": true
- },
- "is-fullwidth-code-point": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz",
- "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=",
- "dev": true
- },
- "string-width": {
- "version": "2.1.1",
- "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz",
- "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==",
- "dev": true,
- "requires": {
- "is-fullwidth-code-point": "^2.0.0",
- "strip-ansi": "^4.0.0"
- }
- },
- "strip-ansi": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz",
- "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=",
- "dev": true,
- "requires": {
- "ansi-regex": "^3.0.0"
- }
- }
- }
- },
- "code-point-at": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz",
- "integrity": "sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c=",
- "dev": true
- },
- "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": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=",
- "dev": true
- },
- "color-support": {
- "version": "1.1.3",
- "resolved": "https://registry.npmjs.org/color-support/-/color-support-1.1.3.tgz",
- "integrity": "sha512-qiBjkpbMLO/HL68y+lh4q0/O1MZFj2RX6X/KmMa3+gJD3z+WwI1ZzDHysvqHGS3mP6mznPckpXmw1nI9cJjyRg==",
- "dev": true
- },
- "combined-stream": {
- "version": "1.0.8",
- "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz",
- "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==",
- "dev": true,
- "requires": {
- "delayed-stream": "~1.0.0"
- }
- },
- "commondir": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz",
- "integrity": "sha1-3dgA2gxmEnOTzKWVDqloo6rxJTs=",
- "dev": true
- },
- "concat-map": {
- "version": "0.0.1",
- "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz",
- "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==",
- "dev": true
- },
- "convert-source-map": {
- "version": "1.7.0",
- "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.7.0.tgz",
- "integrity": "sha512-4FJkXzKXEDB1snCFZlLP4gpC3JILicCpGbzG9f9G7tGqGCzETQ2hWPrcinA9oU4wtf2biUaEH5065UnMeR33oA==",
- "dev": true,
- "requires": {
- "safe-buffer": "~5.1.1"
- }
- },
- "core-util-is": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz",
- "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac="
- },
- "coveralls": {
- "version": "3.0.11",
- "resolved": "https://registry.npmjs.org/coveralls/-/coveralls-3.0.11.tgz",
- "integrity": "sha512-LZPWPR2NyGKyaABnc49dR0fpeP6UqhvGq4B5nUrTQ1UBy55z96+ga7r+/ChMdMJUwBgyJDXBi88UBgz2rs9IiQ==",
- "dev": true,
- "requires": {
- "js-yaml": "^3.13.1",
- "lcov-parse": "^1.0.0",
- "log-driver": "^1.2.7",
- "minimist": "^1.2.5",
- "request": "^2.88.0"
- }
- },
- "cp-file": {
- "version": "6.2.0",
- "resolved": "https://registry.npmjs.org/cp-file/-/cp-file-6.2.0.tgz",
- "integrity": "sha512-fmvV4caBnofhPe8kOcitBwSn2f39QLjnAnGq3gO9dfd75mUytzKNZB1hde6QHunW2Rt+OwuBOMc3i1tNElbszA==",
- "dev": true,
- "requires": {
- "graceful-fs": "^4.1.2",
- "make-dir": "^2.0.0",
- "nested-error-stacks": "^2.0.0",
- "pify": "^4.0.1",
- "safe-buffer": "^5.0.1"
- }
- },
- "cross-spawn": {
- "version": "6.0.5",
- "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz",
- "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==",
- "dev": true,
- "requires": {
- "nice-try": "^1.0.4",
- "path-key": "^2.0.1",
- "semver": "^5.5.0",
- "shebang-command": "^1.2.0",
- "which": "^1.2.9"
- },
- "dependencies": {
- "semver": {
- "version": "5.7.1",
- "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz",
- "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==",
- "dev": true
- }
- }
- },
- "dashdash": {
- "version": "1.14.1",
- "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz",
- "integrity": "sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=",
- "dev": true,
- "requires": {
- "assert-plus": "^1.0.0"
- }
- },
- "debug": {
- "version": "4.1.1",
- "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz",
- "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==",
- "dev": true,
- "requires": {
- "ms": "^2.1.1"
- }
- },
- "decamelize": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz",
- "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=",
- "dev": true
- },
- "deep-is": {
- "version": "0.1.3",
- "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.3.tgz",
- "integrity": "sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ=",
- "dev": true
- },
- "default-require-extensions": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/default-require-extensions/-/default-require-extensions-2.0.0.tgz",
- "integrity": "sha1-9fj7sYp9bVCyH2QfZJ67Uiz+JPc=",
- "dev": true,
- "requires": {
- "strip-bom": "^3.0.0"
- }
- },
- "delayed-stream": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz",
- "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=",
- "dev": true
- },
- "diff": {
- "version": "4.0.2",
- "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz",
- "integrity": "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==",
- "dev": true
- },
- "diff-frag": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/diff-frag/-/diff-frag-1.0.1.tgz",
- "integrity": "sha512-6/v2PC/6UTGcWPPetb9acL8foberUg/CtPdALeJUdD1B/weHNvzftoo00gYznqHGRhHEbykUGzqfG9RWOSr5yw==",
- "dev": true
- },
- "doctrine": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz",
- "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==",
- "dev": true,
- "requires": {
- "esutils": "^2.0.2"
- }
- },
- "ecc-jsbn": {
- "version": "0.1.2",
- "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz",
- "integrity": "sha1-OoOpBOVDUyh4dMVkt1SThoSamMk=",
- "dev": true,
- "requires": {
- "jsbn": "~0.1.0",
- "safer-buffer": "^2.1.0"
- }
- },
- "emoji-regex": {
- "version": "8.0.0",
- "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz",
- "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==",
- "dev": true
- },
- "error-ex": {
- "version": "1.3.2",
- "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz",
- "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==",
- "dev": true,
- "requires": {
- "is-arrayish": "^0.2.1"
- }
- },
- "es6-error": {
- "version": "4.1.1",
- "resolved": "https://registry.npmjs.org/es6-error/-/es6-error-4.1.1.tgz",
- "integrity": "sha512-Um/+FxMr9CISWh0bi5Zv0iOD+4cFh5qLeks1qhAopKVAJw3drgKbKySikp7wGhDL0HPeaja0P5ULZrxLkniUVg==",
- "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": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=",
- "dev": true
- },
- "eslint": {
- "version": "6.8.0",
- "resolved": "https://registry.npmjs.org/eslint/-/eslint-6.8.0.tgz",
- "integrity": "sha512-K+Iayyo2LtyYhDSYwz5D5QdWw0hCacNzyq1Y821Xna2xSJj7cijoLLYmLxTQgcgZ9mC61nryMy9S7GRbYpI5Ig==",
- "dev": true,
- "requires": {
- "@babel/code-frame": "^7.0.0",
- "ajv": "^6.10.0",
- "chalk": "^2.1.0",
- "cross-spawn": "^6.0.5",
- "debug": "^4.0.1",
- "doctrine": "^3.0.0",
- "eslint-scope": "^5.0.0",
- "eslint-utils": "^1.4.3",
- "eslint-visitor-keys": "^1.1.0",
- "espree": "^6.1.2",
- "esquery": "^1.0.1",
- "esutils": "^2.0.2",
- "file-entry-cache": "^5.0.1",
- "functional-red-black-tree": "^1.0.1",
- "glob-parent": "^5.0.0",
- "globals": "^12.1.0",
- "ignore": "^4.0.6",
- "import-fresh": "^3.0.0",
- "imurmurhash": "^0.1.4",
- "inquirer": "^7.0.0",
- "is-glob": "^4.0.0",
- "js-yaml": "^3.13.1",
- "json-stable-stringify-without-jsonify": "^1.0.1",
- "levn": "^0.3.0",
- "lodash": "^4.17.14",
- "minimatch": "^3.0.4",
- "mkdirp": "^0.5.1",
- "natural-compare": "^1.4.0",
- "optionator": "^0.8.3",
- "progress": "^2.0.0",
- "regexpp": "^2.0.1",
- "semver": "^6.1.2",
- "strip-ansi": "^5.2.0",
- "strip-json-comments": "^3.0.1",
- "table": "^5.2.3",
- "text-table": "^0.2.0",
- "v8-compile-cache": "^2.0.3"
- }
- },
- "eslint-scope": {
- "version": "5.0.0",
- "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.0.0.tgz",
- "integrity": "sha512-oYrhJW7S0bxAFDvWqzvMPRm6pcgcnWc4QnofCAqRTRfQC0JcwenzGglTtsLyIuuWFfkqDG9vz67cnttSd53djw==",
- "dev": true,
- "requires": {
- "esrecurse": "^4.1.0",
- "estraverse": "^4.1.1"
- }
- },
- "eslint-utils": {
- "version": "1.4.3",
- "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-1.4.3.tgz",
- "integrity": "sha512-fbBN5W2xdY45KulGXmLHZ3c3FHfVYmKg0IrAKGOkT/464PQsx2UeIzfz1RmEci+KLm1bBaAzZAh8+/E+XAeZ8Q==",
- "dev": true,
- "requires": {
- "eslint-visitor-keys": "^1.1.0"
- }
- },
- "eslint-visitor-keys": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.1.0.tgz",
- "integrity": "sha512-8y9YjtM1JBJU/A9Kc+SbaOV4y29sSWckBwMHa+FGtVj5gN/sbnKDf6xJUl+8g7FAij9LVaP8C24DUiH/f/2Z9A==",
- "dev": true
- },
- "esm": {
- "version": "3.2.25",
- "resolved": "https://registry.npmjs.org/esm/-/esm-3.2.25.tgz",
- "integrity": "sha512-U1suiZ2oDVWv4zPO56S0NcR5QriEahGtdN2OR6FiOG4WJvcjBVFB0qI4+eKoWFH483PKGuLuu6V8Z4T5g63UVA==",
- "dev": true
- },
- "espree": {
- "version": "6.2.1",
- "resolved": "https://registry.npmjs.org/espree/-/espree-6.2.1.tgz",
- "integrity": "sha512-ysCxRQY3WaXJz9tdbWOwuWr5Y/XrPTGX9Kiz3yoUXwW0VZ4w30HTkQLaGx/+ttFjF8i+ACbArnB4ce68a9m5hw==",
- "dev": true,
- "requires": {
- "acorn": "^7.1.1",
- "acorn-jsx": "^5.2.0",
- "eslint-visitor-keys": "^1.1.0"
- }
- },
- "esprima": {
- "version": "4.0.1",
- "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz",
- "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==",
- "dev": true
- },
- "esquery": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.1.0.tgz",
- "integrity": "sha512-MxYW9xKmROWF672KqjO75sszsA8Mxhw06YFeS5VHlB98KDHbOSurm3ArsjO60Eaf3QmGMCP1yn+0JQkNLo/97Q==",
- "dev": true,
- "requires": {
- "estraverse": "^4.0.0"
- }
- },
- "esrecurse": {
- "version": "4.2.1",
- "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.2.1.tgz",
- "integrity": "sha512-64RBB++fIOAXPw3P9cy89qfMlvZEXZkqqJkjqqXIvzP5ezRZjW+lPWjw35UX/3EhUPFYbg5ER4JYgDw4007/DQ==",
- "dev": true,
- "requires": {
- "estraverse": "^4.1.0"
- }
- },
- "estraverse": {
- "version": "4.3.0",
- "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz",
- "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==",
- "dev": true
- },
- "esutils": {
- "version": "2.0.3",
- "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz",
- "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==",
- "dev": true
- },
- "events-to-array": {
- "version": "1.1.2",
- "resolved": "https://registry.npmjs.org/events-to-array/-/events-to-array-1.1.2.tgz",
- "integrity": "sha1-LUH1Y+H+QA7Uli/hpNXGp1Od9/Y=",
- "dev": true
- },
- "extend": {
- "version": "3.0.2",
- "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz",
- "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==",
- "dev": true
- },
- "external-editor": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/external-editor/-/external-editor-3.1.0.tgz",
- "integrity": "sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew==",
- "dev": true,
- "requires": {
- "chardet": "^0.7.0",
- "iconv-lite": "^0.4.24",
- "tmp": "^0.0.33"
- },
- "dependencies": {
- "iconv-lite": {
- "version": "0.4.24",
- "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz",
- "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==",
- "dev": true,
- "requires": {
- "safer-buffer": ">= 2.1.2 < 3"
- }
- }
- }
- },
- "extsprintf": {
- "version": "1.3.0",
- "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz",
- "integrity": "sha512-11Ndz7Nv+mvAC1j0ktTa7fAb0vLyGGX+rMHNBYQviQDGU0Hw7lhctJANqbPhu9nV9/izT/IntTgZ7Im/9LJs9g==",
- "dev": true
- },
- "fast-deep-equal": {
- "version": "3.1.1",
- "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.1.tgz",
- "integrity": "sha512-8UEa58QDLauDNfpbrX55Q9jrGHThw2ZMdOky5Gl1CDtVeJDPVrG4Jxx1N8jw2gkWaff5UUuX1KJd+9zGe2B+ZA==",
- "dev": true
- },
- "fast-json-stable-stringify": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz",
- "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==",
- "dev": true
- },
- "fast-levenshtein": {
- "version": "2.0.6",
- "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz",
- "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=",
- "dev": true
- },
- "figures": {
- "version": "3.2.0",
- "resolved": "https://registry.npmjs.org/figures/-/figures-3.2.0.tgz",
- "integrity": "sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg==",
- "dev": true,
- "requires": {
- "escape-string-regexp": "^1.0.5"
- }
- },
- "file-entry-cache": {
- "version": "5.0.1",
- "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-5.0.1.tgz",
- "integrity": "sha512-bCg29ictuBaKUwwArK4ouCaqDgLZcysCFLmM/Yn/FDoqndh/9vNuQfXRDvTuXKLxfD/JtZQGKFT8MGcJBK644g==",
- "dev": true,
- "requires": {
- "flat-cache": "^2.0.1"
- }
- },
- "fill-range": {
- "version": "7.0.1",
- "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz",
- "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==",
- "dev": true,
- "requires": {
- "to-regex-range": "^5.0.1"
- }
- },
- "find-cache-dir": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-2.1.0.tgz",
- "integrity": "sha512-Tq6PixE0w/VMFfCgbONnkiQIVol/JJL7nRMi20fqzA4NRs9AfeqMGeRdPi3wIhYkxjeBaWh2rxwapn5Tu3IqOQ==",
- "dev": true,
- "requires": {
- "commondir": "^1.0.1",
- "make-dir": "^2.0.0",
- "pkg-dir": "^3.0.0"
- }
- },
- "find-up": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz",
- "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==",
- "dev": true,
- "requires": {
- "locate-path": "^3.0.0"
- }
- },
- "findit": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/findit/-/findit-2.0.0.tgz",
- "integrity": "sha1-ZQnwEmr0wXhVHPqZOU4DLhOk1W4=",
- "dev": true
- },
- "flat-cache": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-2.0.1.tgz",
- "integrity": "sha512-LoQe6yDuUMDzQAEH8sgmh4Md6oZnc/7PjtwjNFSzveXqSHt6ka9fPBuso7IGf9Rz4uqnSnWiFH2B/zj24a5ReA==",
- "dev": true,
- "requires": {
- "flatted": "^2.0.0",
- "rimraf": "2.6.3",
- "write": "1.0.3"
- }
- },
- "flatted": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/flatted/-/flatted-2.0.1.tgz",
- "integrity": "sha512-a1hQMktqW9Nmqr5aktAux3JMNqaucxGcjtjWnZLHX7yyPCmlSV3M54nGYbqT8K+0GhF3NBgmJCc3ma+WOgX8Jg==",
- "dev": true
- },
- "flow-parser": {
- "version": "0.121.0",
- "resolved": "https://registry.npmjs.org/flow-parser/-/flow-parser-0.121.0.tgz",
- "integrity": "sha512-1gIBiWJNR0tKUNv8gZuk7l9rVX06OuLzY9AoGio7y/JT4V1IZErEMEq2TJS+PFcw/y0RshZ1J/27VfK1UQzYVg==",
- "dev": true
- },
- "flow-remove-types": {
- "version": "2.121.0",
- "resolved": "https://registry.npmjs.org/flow-remove-types/-/flow-remove-types-2.121.0.tgz",
- "integrity": "sha512-DbHgYJLD88fMK6CF3Z6wvoZuMb2sqKYP9WLzrZ0SPWbQf61+XyNq6vC8HAJeWJf2DD8z7XhrFHUCH2cJvpAAIQ==",
- "dev": true,
- "requires": {
- "flow-parser": "^0.121.0",
- "pirates": "^3.0.2",
- "vlq": "^0.2.1"
- }
- },
- "foreground-child": {
- "version": "1.5.6",
- "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-1.5.6.tgz",
- "integrity": "sha1-T9ca0t/elnibmApcCilZN8svXOk=",
- "dev": true,
- "requires": {
- "cross-spawn": "^4",
- "signal-exit": "^3.0.0"
- },
- "dependencies": {
- "cross-spawn": {
- "version": "4.0.2",
- "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-4.0.2.tgz",
- "integrity": "sha1-e5JHYhwjrf3ThWAEqCPL45dCTUE=",
- "dev": true,
- "requires": {
- "lru-cache": "^4.0.1",
- "which": "^1.2.9"
- }
- }
- }
- },
- "forever-agent": {
- "version": "0.6.1",
- "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz",
- "integrity": "sha1-+8cfDEGt6zf5bFd60e1C2P2sypE=",
- "dev": true
- },
- "form-data": {
- "version": "2.3.3",
- "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.3.tgz",
- "integrity": "sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==",
- "dev": true,
- "requires": {
- "asynckit": "^0.4.0",
- "combined-stream": "^1.0.6",
- "mime-types": "^2.1.12"
- }
- },
- "fs-exists-cached": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/fs-exists-cached/-/fs-exists-cached-1.0.0.tgz",
- "integrity": "sha1-zyVVTKBQ3EmuZla0HeQiWJidy84=",
- "dev": true
- },
- "fs.realpath": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz",
- "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=",
- "dev": true
- },
- "fsevents": {
- "version": "2.1.2",
- "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.1.2.tgz",
- "integrity": "sha512-R4wDiBwZ0KzpgOWetKDug1FZcYhqYnUYKtfZYt4mD5SBz76q0KR4Q9o7GIPamsVPGmW3EYPPJ0dOOjvx32ldZA==",
- "dev": true,
- "optional": true
- },
- "function-loop": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/function-loop/-/function-loop-1.0.2.tgz",
- "integrity": "sha512-Iw4MzMfS3udk/rqxTiDDCllhGwlOrsr50zViTOO/W6lS/9y6B1J0BD2VZzrnWUYBJsl3aeqjgR5v7bWWhZSYbA==",
- "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": "sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc=",
- "dev": true
- },
- "get-caller-file": {
- "version": "2.0.5",
- "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz",
- "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==",
- "dev": true
- },
- "getpass": {
- "version": "0.1.7",
- "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz",
- "integrity": "sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=",
- "dev": true,
- "requires": {
- "assert-plus": "^1.0.0"
- }
- },
- "glob": {
- "version": "7.1.6",
- "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz",
- "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==",
- "dev": true,
- "requires": {
- "fs.realpath": "^1.0.0",
- "inflight": "^1.0.4",
- "inherits": "2",
- "minimatch": "^3.0.4",
- "once": "^1.3.0",
- "path-is-absolute": "^1.0.0"
- }
- },
- "glob-parent": {
- "version": "5.1.1",
- "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.1.tgz",
- "integrity": "sha512-FnI+VGOpnlGHWZxthPGR+QhR78fuiK0sNLkHQv+bL9fQi57lNNdquIbna/WrfROrolq8GK5Ek6BiMwqL/voRYQ==",
- "dev": true,
- "requires": {
- "is-glob": "^4.0.1"
- }
- },
- "globals": {
- "version": "12.4.0",
- "resolved": "https://registry.npmjs.org/globals/-/globals-12.4.0.tgz",
- "integrity": "sha512-BWICuzzDvDoH54NHKCseDanAhE3CeDorgDL5MT6LMXXj2WCnd9UC2szdk4AWLfjdgNBCXLUanXYcpBBKOSWGwg==",
- "dev": true,
- "requires": {
- "type-fest": "^0.8.1"
- }
- },
- "graceful-fs": {
- "version": "4.2.3",
- "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.3.tgz",
- "integrity": "sha512-a30VEBm4PEdx1dRB7MFK7BejejvCvBronbLjht+sHuGYj8PHs7M/5Z+rt5lw551vZ7yfTCj4Vuyy3mSJytDWRQ==",
- "dev": true
- },
- "har-schema": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz",
- "integrity": "sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI=",
- "dev": true
- },
- "har-validator": {
- "version": "5.1.3",
- "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.1.3.tgz",
- "integrity": "sha512-sNvOCzEQNr/qrvJgc3UG/kD4QtlHycrzwS+6mfTrrSq97BvaYcPZZI1ZSqGSPR73Cxn4LKTD4PttRwfU7jWq5g==",
- "dev": true,
- "requires": {
- "ajv": "^6.5.5",
- "har-schema": "^2.0.0"
- }
- },
- "has-flag": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz",
- "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=",
- "dev": true
- },
- "hasha": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/hasha/-/hasha-3.0.0.tgz",
- "integrity": "sha1-UqMvq4Vp1BymmmH/GiFPjrfIvTk=",
- "dev": true,
- "requires": {
- "is-stream": "^1.0.1"
- }
- },
- "hosted-git-info": {
- "version": "2.8.8",
- "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.8.tgz",
- "integrity": "sha512-f/wzC2QaWBs7t9IYqB4T3sR1xviIViXJRJTWBlx2Gf3g0Xi5vI7Yy4koXQ1c9OYDGHN9sBy1DQ2AB8fqZBWhUg==",
- "dev": true
- },
- "html-escaper": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/html-escaper/-/html-escaper-2.0.1.tgz",
- "integrity": "sha512-hNX23TjWwD3q56HpWjUHOKj1+4KKlnjv9PcmBUYKVpga+2cnb9nDx/B1o0yO4n+RZXZdiNxzx6B24C9aNMTkkQ==",
- "dev": true
- },
- "http-signature": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz",
- "integrity": "sha1-muzZJRFHcvPZW2WmCruPfBj7rOE=",
- "dev": true,
- "requires": {
- "assert-plus": "^1.0.0",
- "jsprim": "^1.2.2",
- "sshpk": "^1.7.0"
- }
- },
- "iconv-lite": {
- "version": "0.6.3",
- "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz",
- "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==",
- "requires": {
- "safer-buffer": ">= 2.1.2 < 3.0.0"
- }
- },
- "ignore": {
- "version": "4.0.6",
- "resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz",
- "integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==",
- "dev": true
- },
- "import-fresh": {
- "version": "3.2.1",
- "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.2.1.tgz",
- "integrity": "sha512-6e1q1cnWP2RXD9/keSkxHScg508CdXqXWgWBaETNhyuBFz+kUZlKboh+ISK+bU++DmbHimVBrOz/zzPe0sZ3sQ==",
- "dev": true,
- "requires": {
- "parent-module": "^1.0.0",
- "resolve-from": "^4.0.0"
- }
- },
- "imurmurhash": {
- "version": "0.1.4",
- "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz",
- "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=",
- "dev": true
- },
- "inflight": {
- "version": "1.0.6",
- "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz",
- "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=",
- "dev": true,
- "requires": {
- "once": "^1.3.0",
- "wrappy": "1"
- }
- },
- "inherits": {
- "version": "2.0.4",
- "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz",
- "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ=="
- },
- "inquirer": {
- "version": "7.1.0",
- "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-7.1.0.tgz",
- "integrity": "sha512-5fJMWEmikSYu0nv/flMc475MhGbB7TSPd/2IpFV4I4rMklboCH2rQjYY5kKiYGHqUF9gvaambupcJFFG9dvReg==",
- "dev": true,
- "requires": {
- "ansi-escapes": "^4.2.1",
- "chalk": "^3.0.0",
- "cli-cursor": "^3.1.0",
- "cli-width": "^2.0.0",
- "external-editor": "^3.0.3",
- "figures": "^3.0.0",
- "lodash": "^4.17.15",
- "mute-stream": "0.0.8",
- "run-async": "^2.4.0",
- "rxjs": "^6.5.3",
- "string-width": "^4.1.0",
- "strip-ansi": "^6.0.0",
- "through": "^2.3.6"
- },
- "dependencies": {
- "ansi-styles": {
- "version": "4.2.1",
- "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.2.1.tgz",
- "integrity": "sha512-9VGjrMsG1vePxcSweQsN20KY/c4zN0h9fLjqAbwbPfahM3t+NL+M9HC8xeXG2I8pX5NoamTGNuomEUFI7fcUjA==",
- "dev": true,
- "requires": {
- "@types/color-name": "^1.1.1",
- "color-convert": "^2.0.1"
- }
- },
- "chalk": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz",
- "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==",
- "dev": true,
- "requires": {
- "ansi-styles": "^4.1.0",
- "supports-color": "^7.1.0"
- }
- },
- "color-convert": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
- "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
- "dev": true,
- "requires": {
- "color-name": "~1.1.4"
- }
- },
- "color-name": {
- "version": "1.1.4",
- "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
- "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
- "dev": true
- },
- "has-flag": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
- "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
- "dev": true
- },
- "strip-ansi": {
- "version": "6.0.0",
- "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz",
- "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==",
- "dev": true,
- "requires": {
- "ansi-regex": "^5.0.0"
- }
- },
- "supports-color": {
- "version": "7.1.0",
- "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.1.0.tgz",
- "integrity": "sha512-oRSIpR8pxT1Wr2FquTNnGet79b3BWljqOuoW/h4oBhxJ/HUbX5nX6JSruTkvXDCFMwDPvsaTTbvMLKZWSy0R5g==",
- "dev": true,
- "requires": {
- "has-flag": "^4.0.0"
- }
- }
- }
- },
- "is-arrayish": {
- "version": "0.2.1",
- "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz",
- "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=",
- "dev": true
- },
- "is-binary-path": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz",
- "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==",
- "dev": true,
- "requires": {
- "binary-extensions": "^2.0.0"
- }
- },
- "is-extglob": {
- "version": "2.1.1",
- "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz",
- "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=",
- "dev": true
- },
- "is-fullwidth-code-point": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz",
- "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==",
- "dev": true
- },
- "is-glob": {
- "version": "4.0.1",
- "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.1.tgz",
- "integrity": "sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg==",
- "dev": true,
- "requires": {
- "is-extglob": "^2.1.1"
- }
- },
- "is-number": {
- "version": "7.0.0",
- "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz",
- "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==",
- "dev": true
- },
- "is-promise": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/is-promise/-/is-promise-2.1.0.tgz",
- "integrity": "sha1-eaKp7OfwlugPNtKy87wWwf9L8/o=",
- "dev": true
- },
- "is-stream": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz",
- "integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ=",
- "dev": true
- },
- "is-typedarray": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz",
- "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=",
- "dev": true
- },
- "isarray": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
- "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ=="
- },
- "isexe": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz",
- "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=",
- "dev": true
- },
- "isstream": {
- "version": "0.1.2",
- "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz",
- "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=",
- "dev": true
- },
- "istanbul-lib-coverage": {
- "version": "2.0.5",
- "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.5.tgz",
- "integrity": "sha512-8aXznuEPCJvGnMSRft4udDRDtb1V3pkQkMMI5LI+6HuQz5oQ4J2UFn1H82raA3qJtyOLkkwVqICBQkjnGtn5mA==",
- "dev": true
- },
- "istanbul-lib-hook": {
- "version": "2.0.7",
- "resolved": "https://registry.npmjs.org/istanbul-lib-hook/-/istanbul-lib-hook-2.0.7.tgz",
- "integrity": "sha512-vrRztU9VRRFDyC+aklfLoeXyNdTfga2EI3udDGn4cZ6fpSXpHLV9X6CHvfoMCPtggg8zvDDmC4b9xfu0z6/llA==",
- "dev": true,
- "requires": {
- "append-transform": "^1.0.0"
- }
- },
- "istanbul-lib-instrument": {
- "version": "3.3.0",
- "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-3.3.0.tgz",
- "integrity": "sha512-5nnIN4vo5xQZHdXno/YDXJ0G+I3dAm4XgzfSVTPLQpj/zAV2dV6Juy0yaf10/zrJOJeHoN3fraFe+XRq2bFVZA==",
- "dev": true,
- "requires": {
- "@babel/generator": "^7.4.0",
- "@babel/parser": "^7.4.3",
- "@babel/template": "^7.4.0",
- "@babel/traverse": "^7.4.3",
- "@babel/types": "^7.4.0",
- "istanbul-lib-coverage": "^2.0.5",
- "semver": "^6.0.0"
- }
- },
- "istanbul-lib-processinfo": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/istanbul-lib-processinfo/-/istanbul-lib-processinfo-1.0.0.tgz",
- "integrity": "sha512-FY0cPmWa4WoQNlvB8VOcafiRoB5nB+l2Pz2xGuXHRSy1KM8QFOYfz/rN+bGMCAeejrY3mrpF5oJHcN0s/garCg==",
- "dev": true,
- "requires": {
- "archy": "^1.0.0",
- "cross-spawn": "^6.0.5",
- "istanbul-lib-coverage": "^2.0.3",
- "rimraf": "^2.6.3",
- "uuid": "^3.3.2"
- }
- },
- "istanbul-lib-report": {
- "version": "2.0.8",
- "resolved": "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-2.0.8.tgz",
- "integrity": "sha512-fHBeG573EIihhAblwgxrSenp0Dby6tJMFR/HvlerBsrCTD5bkUuoNtn3gVh29ZCS824cGGBPn7Sg7cNk+2xUsQ==",
- "dev": true,
- "requires": {
- "istanbul-lib-coverage": "^2.0.5",
- "make-dir": "^2.1.0",
- "supports-color": "^6.1.0"
- },
- "dependencies": {
- "supports-color": {
- "version": "6.1.0",
- "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz",
- "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==",
- "dev": true,
- "requires": {
- "has-flag": "^3.0.0"
- }
- }
- }
- },
- "istanbul-lib-source-maps": {
- "version": "3.0.6",
- "resolved": "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-3.0.6.tgz",
- "integrity": "sha512-R47KzMtDJH6X4/YW9XTx+jrLnZnscW4VpNN+1PViSYTejLVPWv7oov+Duf8YQSPyVRUvueQqz1TcsC6mooZTXw==",
- "dev": true,
- "requires": {
- "debug": "^4.1.1",
- "istanbul-lib-coverage": "^2.0.5",
- "make-dir": "^2.1.0",
- "rimraf": "^2.6.3",
- "source-map": "^0.6.1"
- }
- },
- "istanbul-reports": {
- "version": "2.2.7",
- "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-2.2.7.tgz",
- "integrity": "sha512-uu1F/L1o5Y6LzPVSVZXNOoD/KXpJue9aeLRd0sM9uMXfZvzomB0WxVamWb5ue8kA2vVWEmW7EG+A5n3f1kqHKg==",
- "dev": true,
- "requires": {
- "html-escaper": "^2.0.0"
- }
- },
- "jackspeak": {
- "version": "1.4.0",
- "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-1.4.0.tgz",
- "integrity": "sha512-VDcSunT+wcccoG46FtzuBAyQKlzhHjli4q31e1fIHGOsRspqNUFjVzGb+7eIFDlTvqLygxapDHPHS0ouT2o/tw==",
- "dev": true,
- "requires": {
- "cliui": "^4.1.0"
- }
- },
- "js-tokens": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz",
- "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==",
- "dev": true
- },
- "js-yaml": {
- "version": "3.13.1",
- "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.13.1.tgz",
- "integrity": "sha512-YfbcO7jXDdyj0DGxYVSlSeQNHbD7XPWvrVWeVUujrQEoZzWJIRrCPoyk6kL6IAjAG2IolMK4T0hNUe0HOUs5Jw==",
- "dev": true,
- "requires": {
- "argparse": "^1.0.7",
- "esprima": "^4.0.0"
- }
- },
- "jsbn": {
- "version": "0.1.1",
- "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz",
- "integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM=",
- "dev": true
- },
- "jsesc": {
- "version": "2.5.2",
- "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz",
- "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==",
- "dev": true
- },
- "json-parse-better-errors": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz",
- "integrity": "sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==",
- "dev": true
- },
- "json-schema": {
- "version": "0.2.3",
- "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.2.3.tgz",
- "integrity": "sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM=",
- "dev": true
- },
- "json-schema-traverse": {
- "version": "0.4.1",
- "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz",
- "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==",
- "dev": true
- },
- "json-stable-stringify-without-jsonify": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz",
- "integrity": "sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE=",
- "dev": true
- },
- "json-stringify-safe": {
- "version": "5.0.1",
- "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz",
- "integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=",
- "dev": true
- },
- "jsprim": {
- "version": "1.4.1",
- "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.1.tgz",
- "integrity": "sha1-MT5mvB5cwG5Di8G3SZwuXFastqI=",
- "dev": true,
- "requires": {
- "assert-plus": "1.0.0",
- "extsprintf": "1.3.0",
- "json-schema": "0.2.3",
- "verror": "1.10.0"
- }
- },
- "lcov-parse": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/lcov-parse/-/lcov-parse-1.0.0.tgz",
- "integrity": "sha1-6w1GtUER68VhrLTECO+TY73I9+A=",
- "dev": true
- },
- "levn": {
- "version": "0.3.0",
- "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz",
- "integrity": "sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4=",
- "dev": true,
- "requires": {
- "prelude-ls": "~1.1.2",
- "type-check": "~0.3.2"
- }
- },
- "load-json-file": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-4.0.0.tgz",
- "integrity": "sha1-L19Fq5HjMhYjT9U62rZo607AmTs=",
- "dev": true,
- "requires": {
- "graceful-fs": "^4.1.2",
- "parse-json": "^4.0.0",
- "pify": "^3.0.0",
- "strip-bom": "^3.0.0"
- },
- "dependencies": {
- "pify": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz",
- "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=",
- "dev": true
- }
- }
- },
- "locate-path": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz",
- "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==",
- "dev": true,
- "requires": {
- "p-locate": "^3.0.0",
- "path-exists": "^3.0.0"
- }
- },
- "lodash": {
- "version": "4.17.20",
- "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.20.tgz",
- "integrity": "sha512-PlhdFcillOINfeV7Ni6oF1TAEayyZBoZ8bcshTHqOYJYlrqzRK5hagpagky5o4HfCzzd1TRkXPMFq6cKk9rGmA==",
- "dev": true
- },
- "lodash.flattendeep": {
- "version": "4.4.0",
- "resolved": "https://registry.npmjs.org/lodash.flattendeep/-/lodash.flattendeep-4.4.0.tgz",
- "integrity": "sha1-+wMJF/hqMTTlvJvsDWngAT3f7bI=",
- "dev": true
- },
- "log-driver": {
- "version": "1.2.7",
- "resolved": "https://registry.npmjs.org/log-driver/-/log-driver-1.2.7.tgz",
- "integrity": "sha512-U7KCmLdqsGHBLeWqYlFA0V0Sl6P08EE1ZrmA9cxjUE0WVqT9qnyVDPz1kzpFEP0jdJuFnasWIfSd7fsaNXkpbg==",
- "dev": true
- },
- "loose-envify": {
- "version": "1.4.0",
- "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz",
- "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==",
- "dev": true,
- "requires": {
- "js-tokens": "^3.0.0 || ^4.0.0"
- }
- },
- "lru-cache": {
- "version": "4.1.5",
- "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.5.tgz",
- "integrity": "sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g==",
- "dev": true,
- "requires": {
- "pseudomap": "^1.0.2",
- "yallist": "^2.1.2"
- }
- },
- "make-dir": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-2.1.0.tgz",
- "integrity": "sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA==",
- "dev": true,
- "requires": {
- "pify": "^4.0.1",
- "semver": "^5.6.0"
- },
- "dependencies": {
- "semver": {
- "version": "5.7.1",
- "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz",
- "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==",
- "dev": true
- }
- }
- },
- "make-error": {
- "version": "1.3.6",
- "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz",
- "integrity": "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==",
- "dev": true
- },
- "merge-source-map": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/merge-source-map/-/merge-source-map-1.1.0.tgz",
- "integrity": "sha512-Qkcp7P2ygktpMPh2mCQZaf3jhN6D3Z/qVZHSdWvQ+2Ef5HgRAPBO57A77+ENm0CPx2+1Ce/MYKi3ymqdfuqibw==",
- "dev": true,
- "requires": {
- "source-map": "^0.6.1"
- }
- },
- "mime-db": {
- "version": "1.43.0",
- "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.43.0.tgz",
- "integrity": "sha512-+5dsGEEovYbT8UY9yD7eE4XTc4UwJ1jBYlgaQQF38ENsKR3wj/8q8RFZrF9WIZpB2V1ArTVFUva8sAul1NzRzQ==",
- "dev": true
- },
- "mime-types": {
- "version": "2.1.26",
- "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.26.tgz",
- "integrity": "sha512-01paPWYgLrkqAyrlDorC1uDwl2p3qZT7yl806vW7DvDoxwXi46jsjFbg+WdwotBIk6/MbEhO/dh5aZ5sNj/dWQ==",
- "dev": true,
- "requires": {
- "mime-db": "1.43.0"
- }
- },
- "mimic-fn": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz",
- "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==",
- "dev": true
- },
- "minimatch": {
- "version": "3.0.4",
- "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz",
- "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==",
- "dev": true,
- "requires": {
- "brace-expansion": "^1.1.7"
- }
- },
- "minimist": {
- "version": "1.2.5",
- "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz",
- "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==",
- "dev": true
- },
- "minipass": {
- "version": "3.1.1",
- "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.1.1.tgz",
- "integrity": "sha512-UFqVihv6PQgwj8/yTGvl9kPz7xIAY+R5z6XYjRInD3Gk3qx6QGSD6zEcpeG4Dy/lQnv1J6zv8ejV90hyYIKf3w==",
- "dev": true,
- "requires": {
- "yallist": "^4.0.0"
- },
- "dependencies": {
- "yallist": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz",
- "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==",
- "dev": true
- }
- }
- },
- "mkdirp": {
- "version": "0.5.3",
- "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.3.tgz",
- "integrity": "sha512-P+2gwrFqx8lhew375MQHHeTlY8AuOJSrGf0R5ddkEndUkmwpgUob/vQuBD1V22/Cw1/lJr4x+EjllSezBThzBg==",
- "dev": true,
- "requires": {
- "minimist": "^1.2.5"
- }
- },
- "ms": {
- "version": "2.1.2",
- "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
- "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==",
- "dev": true
- },
- "mute-stream": {
- "version": "0.0.8",
- "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.8.tgz",
- "integrity": "sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==",
- "dev": true
- },
- "natural-compare": {
- "version": "1.4.0",
- "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz",
- "integrity": "sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=",
- "dev": true
- },
- "nested-error-stacks": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/nested-error-stacks/-/nested-error-stacks-2.1.0.tgz",
- "integrity": "sha512-AO81vsIO1k1sM4Zrd6Hu7regmJN1NSiAja10gc4bX3F0wd+9rQmcuHQaHVQCYIEC8iFXnE+mavh23GOt7wBgug==",
- "dev": true
- },
- "nice-try": {
- "version": "1.0.5",
- "resolved": "https://registry.npmjs.org/nice-try/-/nice-try-1.0.5.tgz",
- "integrity": "sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==",
- "dev": true
- },
- "node-modules-regexp": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/node-modules-regexp/-/node-modules-regexp-1.0.0.tgz",
- "integrity": "sha1-jZ2+KJZKSsVxLpExZCEHxx6Q7EA=",
- "dev": true
- },
- "normalize-package-data": {
- "version": "2.5.0",
- "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz",
- "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==",
- "dev": true,
- "requires": {
- "hosted-git-info": "^2.1.4",
- "resolve": "^1.10.0",
- "semver": "2 || 3 || 4 || 5",
- "validate-npm-package-license": "^3.0.1"
- },
- "dependencies": {
- "semver": {
- "version": "5.7.1",
- "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz",
- "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==",
- "dev": true
- }
- }
- },
- "normalize-path": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz",
- "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==",
- "dev": true
- },
- "number-is-nan": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz",
- "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=",
- "dev": true
- },
- "nyc": {
- "version": "14.1.1",
- "resolved": "https://registry.npmjs.org/nyc/-/nyc-14.1.1.tgz",
- "integrity": "sha512-OI0vm6ZGUnoGZv/tLdZ2esSVzDwUC88SNs+6JoSOMVxA+gKMB8Tk7jBwgemLx4O40lhhvZCVw1C+OYLOBOPXWw==",
- "dev": true,
- "requires": {
- "archy": "^1.0.0",
- "caching-transform": "^3.0.2",
- "convert-source-map": "^1.6.0",
- "cp-file": "^6.2.0",
- "find-cache-dir": "^2.1.0",
- "find-up": "^3.0.0",
- "foreground-child": "^1.5.6",
- "glob": "^7.1.3",
- "istanbul-lib-coverage": "^2.0.5",
- "istanbul-lib-hook": "^2.0.7",
- "istanbul-lib-instrument": "^3.3.0",
- "istanbul-lib-report": "^2.0.8",
- "istanbul-lib-source-maps": "^3.0.6",
- "istanbul-reports": "^2.2.4",
- "js-yaml": "^3.13.1",
- "make-dir": "^2.1.0",
- "merge-source-map": "^1.1.0",
- "resolve-from": "^4.0.0",
- "rimraf": "^2.6.3",
- "signal-exit": "^3.0.2",
- "spawn-wrap": "^1.4.2",
- "test-exclude": "^5.2.3",
- "uuid": "^3.3.2",
- "yargs": "^13.2.2",
- "yargs-parser": "^13.0.0"
- }
- },
- "oauth-sign": {
- "version": "0.9.0",
- "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.9.0.tgz",
- "integrity": "sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ==",
- "dev": true
- },
- "object-assign": {
- "version": "4.1.1",
- "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz",
- "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=",
- "dev": true
- },
- "once": {
- "version": "1.4.0",
- "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz",
- "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=",
- "dev": true,
- "requires": {
- "wrappy": "1"
- }
- },
- "onetime": {
- "version": "5.1.0",
- "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.0.tgz",
- "integrity": "sha512-5NcSkPHhwTVFIQN+TUqXoS5+dlElHXdpAWu9I0HP20YOtIi+aZ0Ct82jdlILDxjLEAWwvm+qj1m6aEtsDVmm6Q==",
- "dev": true,
- "requires": {
- "mimic-fn": "^2.1.0"
- }
- },
- "opener": {
- "version": "1.5.1",
- "resolved": "https://registry.npmjs.org/opener/-/opener-1.5.1.tgz",
- "integrity": "sha512-goYSy5c2UXE4Ra1xixabeVh1guIX/ZV/YokJksb6q2lubWu6UbvPQ20p542/sFIll1nl8JnCyK9oBaOcCWXwvA==",
- "dev": true
- },
- "optionator": {
- "version": "0.8.3",
- "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.3.tgz",
- "integrity": "sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA==",
- "dev": true,
- "requires": {
- "deep-is": "~0.1.3",
- "fast-levenshtein": "~2.0.6",
- "levn": "~0.3.0",
- "prelude-ls": "~1.1.2",
- "type-check": "~0.3.2",
- "word-wrap": "~1.2.3"
- }
- },
- "os-homedir": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/os-homedir/-/os-homedir-1.0.2.tgz",
- "integrity": "sha1-/7xJiDNuDoM94MFox+8VISGqf7M=",
- "dev": true
- },
- "os-tmpdir": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz",
- "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=",
- "dev": true
- },
- "own-or": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/own-or/-/own-or-1.0.0.tgz",
- "integrity": "sha1-Tod/vtqaLsgAD7wLyuOWRe6L+Nw=",
- "dev": true
- },
- "own-or-env": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/own-or-env/-/own-or-env-1.0.1.tgz",
- "integrity": "sha512-y8qULRbRAlL6x2+M0vIe7jJbJx/kmUTzYonRAa2ayesR2qWLswninkVyeJe4x3IEXhdgoNodzjQRKAoEs6Fmrw==",
- "dev": true,
- "requires": {
- "own-or": "^1.0.0"
- }
- },
- "p-limit": {
- "version": "2.2.2",
- "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.2.2.tgz",
- "integrity": "sha512-WGR+xHecKTr7EbUEhyLSh5Dube9JtdiG78ufaeLxTgpudf/20KqyMioIUZJAezlTIi6evxuoUs9YXc11cU+yzQ==",
- "dev": true,
- "requires": {
- "p-try": "^2.0.0"
- }
- },
- "p-locate": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz",
- "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==",
- "dev": true,
- "requires": {
- "p-limit": "^2.0.0"
- }
- },
- "p-try": {
- "version": "2.2.0",
- "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz",
- "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==",
- "dev": true
- },
- "package-hash": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/package-hash/-/package-hash-3.0.0.tgz",
- "integrity": "sha512-lOtmukMDVvtkL84rJHI7dpTYq+0rli8N2wlnqUcBuDWCfVhRUfOmnR9SsoHFMLpACvEV60dX7rd0rFaYDZI+FA==",
- "dev": true,
- "requires": {
- "graceful-fs": "^4.1.15",
- "hasha": "^3.0.0",
- "lodash.flattendeep": "^4.4.0",
- "release-zalgo": "^1.0.0"
- }
- },
- "parent-module": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz",
- "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==",
- "dev": true,
- "requires": {
- "callsites": "^3.0.0"
- }
- },
- "parse-json": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-4.0.0.tgz",
- "integrity": "sha1-vjX1Qlvh9/bHRxhPmKeIy5lHfuA=",
- "dev": true,
- "requires": {
- "error-ex": "^1.3.1",
- "json-parse-better-errors": "^1.0.1"
- }
- },
- "path-exists": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz",
- "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=",
- "dev": true
- },
- "path-is-absolute": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz",
- "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=",
- "dev": true
- },
- "path-key": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz",
- "integrity": "sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=",
- "dev": true
- },
- "path-parse": {
- "version": "1.0.6",
- "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.6.tgz",
- "integrity": "sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw==",
- "dev": true
- },
- "path-type": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/path-type/-/path-type-3.0.0.tgz",
- "integrity": "sha512-T2ZUsdZFHgA3u4e5PfPbjd7HDDpxPnQb5jN0SrDsjNSuVXHJqtwTnWqG0B1jZrgmJ/7lj1EmVIByWt1gxGkWvg==",
- "dev": true,
- "requires": {
- "pify": "^3.0.0"
- },
- "dependencies": {
- "pify": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz",
- "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=",
- "dev": true
- }
- }
- },
- "performance-now": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz",
- "integrity": "sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns=",
- "dev": true
- },
- "picomatch": {
- "version": "2.2.2",
- "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.2.2.tgz",
- "integrity": "sha512-q0M/9eZHzmr0AulXyPwNfZjtwZ/RBZlbN3K3CErVrk50T2ASYI7Bye0EvekFY3IP1Nt2DHu0re+V2ZHIpMkuWg==",
- "dev": true
- },
- "pify": {
- "version": "4.0.1",
- "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz",
- "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==",
- "dev": true
- },
- "pirates": {
- "version": "3.0.2",
- "resolved": "https://registry.npmjs.org/pirates/-/pirates-3.0.2.tgz",
- "integrity": "sha512-c5CgUJq6H2k6MJz72Ak1F5sN9n9wlSlJyEnwvpm9/y3WB4E3pHBDT2c6PEiS1vyJvq2bUxUAIu0EGf8Cx4Ic7Q==",
- "dev": true,
- "requires": {
- "node-modules-regexp": "^1.0.0"
- }
- },
- "pkg-dir": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-3.0.0.tgz",
- "integrity": "sha512-/E57AYkoeQ25qkxMj5PBOVgF8Kiu/h7cYS30Z5+R7WaiCCBfLq58ZI/dSeaEKb9WVJV5n/03QwrN3IeWIFllvw==",
- "dev": true,
- "requires": {
- "find-up": "^3.0.0"
- }
- },
- "prelude-ls": {
- "version": "1.1.2",
- "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz",
- "integrity": "sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ=",
- "dev": true
- },
- "process-nextick-args": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz",
- "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag=="
- },
- "progress": {
- "version": "2.0.3",
- "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz",
- "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==",
- "dev": true
- },
- "prop-types": {
- "version": "15.7.2",
- "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.7.2.tgz",
- "integrity": "sha512-8QQikdH7//R2vurIJSutZ1smHYTcLpRWEOlHnzcWHmBYrOGUysKwSsrC89BCiFj3CbrfJ/nXFdJepOVrY1GCHQ==",
- "dev": true,
- "requires": {
- "loose-envify": "^1.4.0",
- "object-assign": "^4.1.1",
- "react-is": "^16.8.1"
- }
- },
- "pseudomap": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/pseudomap/-/pseudomap-1.0.2.tgz",
- "integrity": "sha1-8FKijacOYYkX7wqKw0wa5aaChrM=",
- "dev": true
- },
- "psl": {
- "version": "1.7.0",
- "resolved": "https://registry.npmjs.org/psl/-/psl-1.7.0.tgz",
- "integrity": "sha512-5NsSEDv8zY70ScRnOTn7bK7eanl2MvFrOrS/R6x+dBt5g1ghnj9Zv90kO8GwT8gxcu2ANyFprnFYB85IogIJOQ==",
- "dev": true
- },
- "punycode": {
- "version": "2.1.1",
- "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz",
- "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==",
- "dev": true
- },
- "qs": {
- "version": "6.5.2",
- "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.2.tgz",
- "integrity": "sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA==",
- "dev": true
- },
- "react": {
- "version": "16.13.1",
- "resolved": "https://registry.npmjs.org/react/-/react-16.13.1.tgz",
- "integrity": "sha512-YMZQQq32xHLX0bz5Mnibv1/LHb3Sqzngu7xstSM+vrkE5Kzr9xE0yMByK5kMoTK30YVJE61WfbxIFFvfeDKT1w==",
- "dev": true,
- "requires": {
- "loose-envify": "^1.1.0",
- "object-assign": "^4.1.1",
- "prop-types": "^15.6.2"
- }
- },
- "react-is": {
- "version": "16.13.1",
- "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz",
- "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==",
- "dev": true
- },
- "read-pkg": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-3.0.0.tgz",
- "integrity": "sha1-nLxoaXj+5l0WwA4rGcI3/Pbjg4k=",
- "dev": true,
- "requires": {
- "load-json-file": "^4.0.0",
- "normalize-package-data": "^2.3.2",
- "path-type": "^3.0.0"
- }
- },
- "read-pkg-up": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-4.0.0.tgz",
- "integrity": "sha512-6etQSH7nJGsK0RbG/2TeDzZFa8shjQ1um+SwQQ5cwKy0dhSXdOncEhb1CPpvQG4h7FyOV6EB6YlV0yJvZQNAkA==",
- "dev": true,
- "requires": {
- "find-up": "^3.0.0",
- "read-pkg": "^3.0.0"
- }
- },
- "readable-stream": {
- "version": "2.3.7",
- "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz",
- "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==",
- "requires": {
- "core-util-is": "~1.0.0",
- "inherits": "~2.0.3",
- "isarray": "~1.0.0",
- "process-nextick-args": "~2.0.0",
- "safe-buffer": "~5.1.1",
- "string_decoder": "~1.1.1",
- "util-deprecate": "~1.0.1"
- }
- },
- "readdirp": {
- "version": "3.3.0",
- "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.3.0.tgz",
- "integrity": "sha512-zz0pAkSPOXXm1viEwygWIPSPkcBYjW1xU5j/JBh5t9bGCJwa6f9+BJa6VaB2g+b55yVrmXzqkyLf4xaWYM0IkQ==",
- "dev": true,
- "requires": {
- "picomatch": "^2.0.7"
- }
- },
- "regenerator-runtime": {
- "version": "0.13.5",
- "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.5.tgz",
- "integrity": "sha512-ZS5w8CpKFinUzOwW3c83oPeVXoNsrLsaCoLtJvAClH135j/R77RuymhiSErhm2lKcwSCIpmvIWSbDkIfAqKQlA==",
- "dev": true
- },
- "regexpp": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-2.0.1.tgz",
- "integrity": "sha512-lv0M6+TkDVniA3aD1Eg0DVpfU/booSu7Eev3TDO/mZKHBfVjgCGTV4t4buppESEYDtkArYFOxTJWv6S5C+iaNw==",
- "dev": true
- },
- "release-zalgo": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/release-zalgo/-/release-zalgo-1.0.0.tgz",
- "integrity": "sha1-CXALflB0Mpc5Mw5TXFqQ+2eFFzA=",
- "dev": true,
- "requires": {
- "es6-error": "^4.0.1"
- }
- },
- "request": {
- "version": "2.88.2",
- "resolved": "https://registry.npmjs.org/request/-/request-2.88.2.tgz",
- "integrity": "sha512-MsvtOrfG9ZcrOwAW+Qi+F6HbD0CWXEh9ou77uOb7FM2WPhwT7smM833PzanhJLsgXjN89Ir6V2PczXNnMpwKhw==",
- "dev": true,
- "requires": {
- "aws-sign2": "~0.7.0",
- "aws4": "^1.8.0",
- "caseless": "~0.12.0",
- "combined-stream": "~1.0.6",
- "extend": "~3.0.2",
- "forever-agent": "~0.6.1",
- "form-data": "~2.3.2",
- "har-validator": "~5.1.3",
- "http-signature": "~1.2.0",
- "is-typedarray": "~1.0.0",
- "isstream": "~0.1.2",
- "json-stringify-safe": "~5.0.1",
- "mime-types": "~2.1.19",
- "oauth-sign": "~0.9.0",
- "performance-now": "^2.1.0",
- "qs": "~6.5.2",
- "safe-buffer": "^5.1.2",
- "tough-cookie": "~2.5.0",
- "tunnel-agent": "^0.6.0",
- "uuid": "^3.3.2"
- }
- },
- "require-directory": {
- "version": "2.1.1",
- "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz",
- "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=",
- "dev": true
- },
- "require-main-filename": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-2.0.0.tgz",
- "integrity": "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==",
- "dev": true
- },
- "resolve": {
- "version": "1.15.1",
- "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.15.1.tgz",
- "integrity": "sha512-84oo6ZTtoTUpjgNEr5SJyzQhzL72gaRodsSfyxC/AXRvwu0Yse9H8eF9IpGo7b8YetZhlI6v7ZQ6bKBFV/6S7w==",
- "dev": true,
- "requires": {
- "path-parse": "^1.0.6"
- }
- },
- "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
- },
- "restore-cursor": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-3.1.0.tgz",
- "integrity": "sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==",
- "dev": true,
- "requires": {
- "onetime": "^5.1.0",
- "signal-exit": "^3.0.2"
- }
- },
- "rimraf": {
- "version": "2.6.3",
- "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.3.tgz",
- "integrity": "sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA==",
- "dev": true,
- "requires": {
- "glob": "^7.1.3"
- }
- },
- "run-async": {
- "version": "2.4.0",
- "resolved": "https://registry.npmjs.org/run-async/-/run-async-2.4.0.tgz",
- "integrity": "sha512-xJTbh/d7Lm7SBhc1tNvTpeCHaEzoyxPrqNlvSdMfBTYwaY++UJFyXUOxAtsRUXjlqOfj8luNaR9vjCh4KeV+pg==",
- "dev": true,
- "requires": {
- "is-promise": "^2.1.0"
- }
- },
- "rxjs": {
- "version": "6.5.4",
- "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.5.4.tgz",
- "integrity": "sha512-naMQXcgEo3csAEGvw/NydRA0fuS2nDZJiw1YUWFKU7aPPAPGZEsD4Iimit96qwCieH6y614MCLYwdkrWx7z/7Q==",
- "dev": true,
- "requires": {
- "tslib": "^1.9.0"
- }
- },
- "safe-buffer": {
- "version": "5.1.2",
- "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
- "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g=="
- },
- "safer-buffer": {
- "version": "2.1.2",
- "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz",
- "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg=="
- },
- "semver": {
- "version": "6.3.0",
- "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz",
- "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==",
- "dev": true
- },
- "set-blocking": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz",
- "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=",
- "dev": true
- },
- "shebang-command": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz",
- "integrity": "sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=",
- "dev": true,
- "requires": {
- "shebang-regex": "^1.0.0"
- }
- },
- "shebang-regex": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz",
- "integrity": "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=",
- "dev": true
- },
- "signal-exit": {
- "version": "3.0.2",
- "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.2.tgz",
- "integrity": "sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0=",
- "dev": true
- },
- "slice-ansi": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-2.1.0.tgz",
- "integrity": "sha512-Qu+VC3EwYLldKa1fCxuuvULvSJOKEgk9pi8dZeCVK7TqBfUNTH4sFkk4joj8afVSfAYgJoSOetjx9QWOJ5mYoQ==",
- "dev": true,
- "requires": {
- "ansi-styles": "^3.2.0",
- "astral-regex": "^1.0.0",
- "is-fullwidth-code-point": "^2.0.0"
- },
- "dependencies": {
- "is-fullwidth-code-point": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz",
- "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=",
- "dev": true
- }
- }
- },
- "source-map": {
- "version": "0.6.1",
- "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
- "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
- "dev": true
- },
- "source-map-support": {
- "version": "0.5.16",
- "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.16.tgz",
- "integrity": "sha512-efyLRJDr68D9hBBNIPWFjhpFzURh+KJykQwvMyW5UiZzYwoF6l4YMMDIJJEyFWxWCqfyxLzz6tSfUFR+kXXsVQ==",
- "dev": true,
- "requires": {
- "buffer-from": "^1.0.0",
- "source-map": "^0.6.0"
- }
- },
- "spawn-wrap": {
- "version": "1.4.3",
- "resolved": "https://registry.npmjs.org/spawn-wrap/-/spawn-wrap-1.4.3.tgz",
- "integrity": "sha512-IgB8md0QW/+tWqcavuFgKYR/qIRvJkRLPJDFaoXtLLUaVcCDK0+HeFTkmQHj3eprcYhc+gOl0aEA1w7qZlYezw==",
- "dev": true,
- "requires": {
- "foreground-child": "^1.5.6",
- "mkdirp": "^0.5.0",
- "os-homedir": "^1.0.1",
- "rimraf": "^2.6.2",
- "signal-exit": "^3.0.2",
- "which": "^1.3.0"
- }
- },
- "spdx-correct": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.1.0.tgz",
- "integrity": "sha512-lr2EZCctC2BNR7j7WzJ2FpDznxky1sjfxvvYEyzxNyb6lZXHODmEoJeFu4JupYlkfha1KZpJyoqiJ7pgA1qq8Q==",
- "dev": true,
- "requires": {
- "spdx-expression-parse": "^3.0.0",
- "spdx-license-ids": "^3.0.0"
- }
- },
- "spdx-exceptions": {
- "version": "2.2.0",
- "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.2.0.tgz",
- "integrity": "sha512-2XQACfElKi9SlVb1CYadKDXvoajPgBVPn/gOQLrTvHdElaVhr7ZEbqJaRnJLVNeaI4cMEAgVCeBMKF6MWRDCRA==",
- "dev": true
- },
- "spdx-expression-parse": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.0.tgz",
- "integrity": "sha512-Yg6D3XpRD4kkOmTpdgbUiEJFKghJH03fiC1OPll5h/0sO6neh2jqRDVHOQ4o/LMea0tgCkbMgea5ip/e+MkWyg==",
- "dev": true,
- "requires": {
- "spdx-exceptions": "^2.1.0",
- "spdx-license-ids": "^3.0.0"
- }
- },
- "spdx-license-ids": {
- "version": "3.0.5",
- "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.5.tgz",
- "integrity": "sha512-J+FWzZoynJEXGphVIS+XEh3kFSjZX/1i9gFBaWQcB+/tmpe2qUsSBABpcxqxnAxFdiUFEgAX1bjYGQvIZmoz9Q==",
- "dev": true
- },
- "sprintf-js": {
- "version": "1.0.3",
- "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz",
- "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=",
- "dev": true
- },
- "sqlstring": {
- "version": "2.3.3",
- "resolved": "https://registry.npmjs.org/sqlstring/-/sqlstring-2.3.3.tgz",
- "integrity": "sha512-qC9iz2FlN7DQl3+wjwn3802RTyjCx7sDvfQEXchwa6CWOx07/WVfh91gBmQ9fahw8snwGEWU3xGzOt4tFyHLxg=="
- },
- "sshpk": {
- "version": "1.16.1",
- "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.16.1.tgz",
- "integrity": "sha512-HXXqVUq7+pcKeLqqZj6mHFUMvXtOJt1uoUx09pFW6011inTMxqI8BA8PM95myrIyyKwdnzjdFjLiE6KBPVtJIg==",
- "dev": true,
- "requires": {
- "asn1": "~0.2.3",
- "assert-plus": "^1.0.0",
- "bcrypt-pbkdf": "^1.0.0",
- "dashdash": "^1.12.0",
- "ecc-jsbn": "~0.1.1",
- "getpass": "^0.1.1",
- "jsbn": "~0.1.0",
- "safer-buffer": "^2.0.2",
- "tweetnacl": "~0.14.0"
- }
- },
- "stack-utils": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/stack-utils/-/stack-utils-1.0.2.tgz",
- "integrity": "sha512-MTX+MeG5U994cazkjd/9KNAapsHnibjMLnfXodlkXw76JEea0UiNzrqidzo1emMwk7w5Qhc9jd4Bn9TBb1MFwA==",
- "dev": true
- },
- "string-width": {
- "version": "4.2.0",
- "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.0.tgz",
- "integrity": "sha512-zUz5JD+tgqtuDjMhwIg5uFVV3dtqZ9yQJlZVfq4I01/K5Paj5UHj7VyrQOJvzawSVlKpObApbfD0Ed6yJc+1eg==",
- "dev": true,
- "requires": {
- "emoji-regex": "^8.0.0",
- "is-fullwidth-code-point": "^3.0.0",
- "strip-ansi": "^6.0.0"
- },
- "dependencies": {
- "strip-ansi": {
- "version": "6.0.0",
- "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz",
- "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==",
- "dev": true,
- "requires": {
- "ansi-regex": "^5.0.0"
- }
- }
- }
- },
- "string_decoder": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz",
- "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==",
- "requires": {
- "safe-buffer": "~5.1.0"
- }
- },
- "strip-ansi": {
- "version": "5.2.0",
- "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz",
- "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==",
- "dev": true,
- "requires": {
- "ansi-regex": "^4.1.0"
- },
- "dependencies": {
- "ansi-regex": {
- "version": "4.1.0",
- "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz",
- "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==",
- "dev": true
- }
- }
- },
- "strip-bom": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz",
- "integrity": "sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=",
- "dev": true
- },
- "strip-json-comments": {
- "version": "3.0.1",
- "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.0.1.tgz",
- "integrity": "sha512-VTyMAUfdm047mwKl+u79WIdrZxtFtn+nBxHeb844XBQ9uMNTuTHdx2hc5RiAJYqwTj3wc/xe5HLSdJSkJ+WfZw==",
- "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"
- }
- },
- "table": {
- "version": "5.4.6",
- "resolved": "https://registry.npmjs.org/table/-/table-5.4.6.tgz",
- "integrity": "sha512-wmEc8m4fjnob4gt5riFRtTu/6+4rSe12TpAELNSqHMfF3IqnA+CH37USM6/YR3qRZv7e56kAEAtd6nKZaxe0Ug==",
- "dev": true,
- "requires": {
- "ajv": "^6.10.2",
- "lodash": "^4.17.14",
- "slice-ansi": "^2.1.0",
- "string-width": "^3.0.0"
- },
- "dependencies": {
- "emoji-regex": {
- "version": "7.0.3",
- "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz",
- "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==",
- "dev": true
- },
- "is-fullwidth-code-point": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz",
- "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=",
- "dev": true
- },
- "string-width": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz",
- "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==",
- "dev": true,
- "requires": {
- "emoji-regex": "^7.0.1",
- "is-fullwidth-code-point": "^2.0.0",
- "strip-ansi": "^5.1.0"
- }
- }
- }
- },
- "tap": {
- "version": "14.10.7",
- "resolved": "https://registry.npmjs.org/tap/-/tap-14.10.7.tgz",
- "integrity": "sha512-DVx00lfiMxFhofwFDP77pitRCruVQJn8Dcj/6auIU3dErJQWsKT94oG6Yj0MQRuYANhSec8ruIPyUjH/RI9Hrw==",
- "dev": true,
- "requires": {
- "@types/react": "^16.9.16",
- "async-hook-domain": "^1.1.3",
- "bind-obj-methods": "^2.0.0",
- "browser-process-hrtime": "^1.0.0",
- "chokidar": "^3.3.0",
- "color-support": "^1.1.0",
- "coveralls": "^3.0.8",
- "diff": "^4.0.1",
- "esm": "^3.2.25",
- "findit": "^2.0.0",
- "flow-remove-types": "^2.112.0",
- "foreground-child": "^1.3.3",
- "fs-exists-cached": "^1.0.0",
- "function-loop": "^1.0.2",
- "glob": "^7.1.6",
- "import-jsx": "^3.1.0",
- "ink": "^2.6.0",
- "isexe": "^2.0.0",
- "istanbul-lib-processinfo": "^1.0.0",
- "jackspeak": "^1.4.0",
- "minipass": "^3.1.1",
- "mkdirp": "^0.5.1",
- "nyc": "^14.1.1",
- "opener": "^1.5.1",
- "own-or": "^1.0.0",
- "own-or-env": "^1.0.1",
- "react": "^16.12.0",
- "rimraf": "^2.7.1",
- "signal-exit": "^3.0.0",
- "source-map-support": "^0.5.16",
- "stack-utils": "^1.0.2",
- "tap-mocha-reporter": "^5.0.0",
- "tap-parser": "^10.0.1",
- "tap-yaml": "^1.0.0",
- "tcompare": "^3.0.0",
- "treport": "^1.0.2",
- "trivial-deferred": "^1.0.1",
- "ts-node": "^8.5.2",
- "typescript": "^3.7.2",
- "which": "^2.0.2",
- "write-file-atomic": "^3.0.1",
- "yaml": "^1.7.2",
- "yapool": "^1.0.0"
- },
- "dependencies": {
- "@babel/code-frame": {
- "version": "7.8.3",
- "bundled": true,
- "dev": true,
- "requires": {
- "@babel/highlight": "^7.8.3"
- }
- },
- "@babel/core": {
- "version": "7.8.7",
- "bundled": true,
- "dev": true,
- "requires": {
- "@babel/code-frame": "^7.8.3",
- "@babel/generator": "^7.8.7",
- "@babel/helpers": "^7.8.4",
- "@babel/parser": "^7.8.7",
- "@babel/template": "^7.8.6",
- "@babel/traverse": "^7.8.6",
- "@babel/types": "^7.8.7",
- "convert-source-map": "^1.7.0",
- "debug": "^4.1.0",
- "gensync": "^1.0.0-beta.1",
- "json5": "^2.1.0",
- "lodash": "^4.17.13",
- "resolve": "^1.3.2",
- "semver": "^5.4.1",
- "source-map": "^0.5.0"
- },
- "dependencies": {
- "source-map": {
- "version": "0.5.7",
- "bundled": true,
- "dev": true
- }
- }
- },
- "@babel/generator": {
- "version": "7.8.8",
- "bundled": true,
- "dev": true,
- "requires": {
- "@babel/types": "^7.8.7",
- "jsesc": "^2.5.1",
- "lodash": "^4.17.13",
- "source-map": "^0.5.0"
- },
- "dependencies": {
- "source-map": {
- "version": "0.5.7",
- "bundled": true,
- "dev": true
- }
- }
- },
- "@babel/helper-builder-react-jsx": {
- "version": "7.8.3",
- "bundled": true,
- "dev": true,
- "requires": {
- "@babel/types": "^7.8.3",
- "esutils": "^2.0.0"
- }
- },
- "@babel/helper-function-name": {
- "version": "7.8.3",
- "bundled": true,
- "dev": true,
- "requires": {
- "@babel/helper-get-function-arity": "^7.8.3",
- "@babel/template": "^7.8.3",
- "@babel/types": "^7.8.3"
- }
- },
- "@babel/helper-get-function-arity": {
- "version": "7.8.3",
- "bundled": true,
- "dev": true,
- "requires": {
- "@babel/types": "^7.8.3"
- }
- },
- "@babel/helper-plugin-utils": {
- "version": "7.8.3",
- "bundled": true,
- "dev": true
- },
- "@babel/helper-split-export-declaration": {
- "version": "7.8.3",
- "bundled": true,
- "dev": true,
- "requires": {
- "@babel/types": "^7.8.3"
- }
- },
- "@babel/helpers": {
- "version": "7.8.4",
- "bundled": true,
- "dev": true,
- "requires": {
- "@babel/template": "^7.8.3",
- "@babel/traverse": "^7.8.4",
- "@babel/types": "^7.8.3"
- }
- },
- "@babel/highlight": {
- "version": "7.8.3",
- "bundled": true,
- "dev": true,
- "requires": {
- "chalk": "^2.0.0",
- "esutils": "^2.0.2",
- "js-tokens": "^4.0.0"
- }
- },
- "@babel/parser": {
- "version": "7.8.8",
- "bundled": true,
- "dev": true
- },
- "@babel/plugin-proposal-object-rest-spread": {
- "version": "7.8.3",
- "bundled": true,
- "dev": true,
- "requires": {
- "@babel/helper-plugin-utils": "^7.8.3",
- "@babel/plugin-syntax-object-rest-spread": "^7.8.0"
- }
- },
- "@babel/plugin-syntax-jsx": {
- "version": "7.8.3",
- "bundled": true,
- "dev": true,
- "requires": {
- "@babel/helper-plugin-utils": "^7.8.3"
- }
- },
- "@babel/plugin-syntax-object-rest-spread": {
- "version": "7.8.3",
- "bundled": true,
- "dev": true,
- "requires": {
- "@babel/helper-plugin-utils": "^7.8.0"
- }
- },
- "@babel/plugin-transform-destructuring": {
- "version": "7.8.8",
- "bundled": true,
- "dev": true,
- "requires": {
- "@babel/helper-plugin-utils": "^7.8.3"
- }
- },
- "@babel/plugin-transform-react-jsx": {
- "version": "7.8.3",
- "bundled": true,
- "dev": true,
- "requires": {
- "@babel/helper-builder-react-jsx": "^7.8.3",
- "@babel/helper-plugin-utils": "^7.8.3",
- "@babel/plugin-syntax-jsx": "^7.8.3"
- }
- },
- "@babel/runtime": {
- "version": "7.8.7",
- "bundled": true,
- "dev": true,
- "requires": {
- "regenerator-runtime": "^0.13.4"
- }
- },
- "@babel/template": {
- "version": "7.8.6",
- "bundled": true,
- "dev": true,
- "requires": {
- "@babel/code-frame": "^7.8.3",
- "@babel/parser": "^7.8.6",
- "@babel/types": "^7.8.6"
- }
- },
- "@babel/traverse": {
- "version": "7.8.6",
- "bundled": true,
- "dev": true,
- "requires": {
- "@babel/code-frame": "^7.8.3",
- "@babel/generator": "^7.8.6",
- "@babel/helper-function-name": "^7.8.3",
- "@babel/helper-split-export-declaration": "^7.8.3",
- "@babel/parser": "^7.8.6",
- "@babel/types": "^7.8.6",
- "debug": "^4.1.0",
- "globals": "^11.1.0",
- "lodash": "^4.17.13"
- }
- },
- "@babel/types": {
- "version": "7.8.7",
- "bundled": true,
- "dev": true,
- "requires": {
- "esutils": "^2.0.2",
- "lodash": "^4.17.13",
- "to-fast-properties": "^2.0.0"
- }
- },
- "@types/color-name": {
- "version": "1.1.1",
- "bundled": true,
- "dev": true
- },
- "@types/prop-types": {
- "version": "15.7.3",
- "bundled": true,
- "dev": true
- },
- "@types/react": {
- "version": "16.9.23",
- "bundled": true,
- "dev": true,
- "requires": {
- "@types/prop-types": "*",
- "csstype": "^2.2.0"
- }
- },
- "@types/yoga-layout": {
- "version": "1.9.1",
- "bundled": true,
- "dev": true
- },
- "ansi-escapes": {
- "version": "4.3.1",
- "bundled": true,
- "dev": true,
- "requires": {
- "type-fest": "^0.11.0"
- }
- },
- "ansi-regex": {
- "version": "5.0.0",
- "bundled": true,
- "dev": true
- },
- "ansi-styles": {
- "version": "3.2.1",
- "bundled": true,
- "dev": true,
- "requires": {
- "color-convert": "^1.9.0"
- }
- },
- "ansicolors": {
- "version": "0.3.2",
- "bundled": true,
- "dev": true
- },
- "arrify": {
- "version": "2.0.1",
- "bundled": true,
- "dev": true
- },
- "astral-regex": {
- "version": "2.0.0",
- "bundled": true,
- "dev": true
- },
- "auto-bind": {
- "version": "4.0.0",
- "bundled": true,
- "dev": true
- },
- "caller-callsite": {
- "version": "2.0.0",
- "bundled": true,
- "dev": true,
- "requires": {
- "callsites": "^2.0.0"
- }
- },
- "caller-path": {
- "version": "2.0.0",
- "bundled": true,
- "dev": true,
- "requires": {
- "caller-callsite": "^2.0.0"
- }
- },
- "callsites": {
- "version": "2.0.0",
- "bundled": true,
- "dev": true
- },
- "cardinal": {
- "version": "2.1.1",
- "bundled": true,
- "dev": true,
- "requires": {
- "ansicolors": "~0.3.2",
- "redeyed": "~2.1.0"
- }
- },
- "chalk": {
- "version": "2.4.2",
- "bundled": true,
- "dev": true,
- "requires": {
- "ansi-styles": "^3.2.1",
- "escape-string-regexp": "^1.0.5",
- "supports-color": "^5.3.0"
- }
- },
- "ci-info": {
- "version": "2.0.0",
- "bundled": true,
- "dev": true
- },
- "cli-cursor": {
- "version": "3.1.0",
- "bundled": true,
- "dev": true,
- "requires": {
- "restore-cursor": "^3.1.0"
- }
- },
- "cli-truncate": {
- "version": "2.1.0",
- "bundled": true,
- "dev": true,
- "requires": {
- "slice-ansi": "^3.0.0",
- "string-width": "^4.2.0"
- }
- },
- "color-convert": {
- "version": "1.9.3",
- "bundled": true,
- "dev": true,
- "requires": {
- "color-name": "1.1.3"
- }
- },
- "color-name": {
- "version": "1.1.3",
- "bundled": true,
- "dev": true
- },
- "convert-source-map": {
- "version": "1.7.0",
- "bundled": true,
- "dev": true,
- "requires": {
- "safe-buffer": "~5.1.1"
- },
- "dependencies": {
- "safe-buffer": {
- "version": "5.1.2",
- "bundled": true,
- "dev": true
- }
- }
- },
- "csstype": {
- "version": "2.6.9",
- "bundled": true,
- "dev": true
- },
- "debug": {
- "version": "4.1.1",
- "bundled": true,
- "dev": true,
- "requires": {
- "ms": "^2.1.1"
- }
- },
- "emoji-regex": {
- "version": "8.0.0",
- "bundled": true,
- "dev": true
- },
- "escape-string-regexp": {
- "version": "1.0.5",
- "bundled": true,
- "dev": true
- },
- "esprima": {
- "version": "4.0.1",
- "bundled": true,
- "dev": true
- },
- "esutils": {
- "version": "2.0.3",
- "bundled": true,
- "dev": true
- },
- "events-to-array": {
- "version": "1.1.2",
- "bundled": true,
- "dev": true
- },
- "gensync": {
- "version": "1.0.0-beta.1",
- "bundled": true,
- "dev": true
- },
- "globals": {
- "version": "11.12.0",
- "bundled": true,
- "dev": true
- },
- "has-flag": {
- "version": "3.0.0",
- "bundled": true,
- "dev": true
- },
- "import-jsx": {
- "version": "3.1.0",
- "bundled": true,
- "dev": true,
- "requires": {
- "@babel/core": "^7.5.5",
- "@babel/plugin-proposal-object-rest-spread": "^7.5.5",
- "@babel/plugin-transform-destructuring": "^7.5.0",
- "@babel/plugin-transform-react-jsx": "^7.3.0",
- "caller-path": "^2.0.0",
- "resolve-from": "^3.0.0"
- }
- },
- "ink": {
- "version": "2.7.1",
- "bundled": true,
- "dev": true,
- "requires": {
- "ansi-escapes": "^4.2.1",
- "arrify": "^2.0.1",
- "auto-bind": "^4.0.0",
- "chalk": "^3.0.0",
- "cli-cursor": "^3.1.0",
- "cli-truncate": "^2.1.0",
- "is-ci": "^2.0.0",
- "lodash.throttle": "^4.1.1",
- "log-update": "^3.0.0",
- "prop-types": "^15.6.2",
- "react-reconciler": "^0.24.0",
- "scheduler": "^0.18.0",
- "signal-exit": "^3.0.2",
- "slice-ansi": "^3.0.0",
- "string-length": "^3.1.0",
- "widest-line": "^3.1.0",
- "wrap-ansi": "^6.2.0",
- "yoga-layout-prebuilt": "^1.9.3"
- },
- "dependencies": {
- "ansi-styles": {
- "version": "4.2.1",
- "bundled": true,
- "dev": true,
- "requires": {
- "@types/color-name": "^1.1.1",
- "color-convert": "^2.0.1"
- }
- },
- "chalk": {
- "version": "3.0.0",
- "bundled": true,
- "dev": true,
- "requires": {
- "ansi-styles": "^4.1.0",
- "supports-color": "^7.1.0"
- }
- },
- "color-convert": {
- "version": "2.0.1",
- "bundled": true,
- "dev": true,
- "requires": {
- "color-name": "~1.1.4"
- }
- },
- "color-name": {
- "version": "1.1.4",
- "bundled": true,
- "dev": true
- },
- "has-flag": {
- "version": "4.0.0",
- "bundled": true,
- "dev": true
- },
- "supports-color": {
- "version": "7.1.0",
- "bundled": true,
- "dev": true,
- "requires": {
- "has-flag": "^4.0.0"
- }
- }
- }
- },
- "is-ci": {
- "version": "2.0.0",
- "bundled": true,
- "dev": true,
- "requires": {
- "ci-info": "^2.0.0"
- }
- },
- "is-fullwidth-code-point": {
- "version": "3.0.0",
- "bundled": true,
- "dev": true
- },
- "js-tokens": {
- "version": "4.0.0",
- "bundled": true,
- "dev": true
- },
- "jsesc": {
- "version": "2.5.2",
- "bundled": true,
- "dev": true
- },
- "json5": {
- "version": "2.1.2",
- "bundled": true,
- "dev": true,
- "requires": {
- "minimist": "^1.2.5"
- }
- },
- "lodash": {
- "version": "4.17.15",
- "bundled": true,
- "dev": true
- },
- "lodash.throttle": {
- "version": "4.1.1",
- "bundled": true,
- "dev": true
- },
- "log-update": {
- "version": "3.4.0",
- "bundled": true,
- "dev": true,
- "requires": {
- "ansi-escapes": "^3.2.0",
- "cli-cursor": "^2.1.0",
- "wrap-ansi": "^5.0.0"
- },
- "dependencies": {
- "ansi-escapes": {
- "version": "3.2.0",
- "bundled": true,
- "dev": true
- },
- "ansi-regex": {
- "version": "4.1.0",
- "bundled": true,
- "dev": true
- },
- "cli-cursor": {
- "version": "2.1.0",
- "bundled": true,
- "dev": true,
- "requires": {
- "restore-cursor": "^2.0.0"
- }
- },
- "emoji-regex": {
- "version": "7.0.3",
- "bundled": true,
- "dev": true
- },
- "is-fullwidth-code-point": {
- "version": "2.0.0",
- "bundled": true,
- "dev": true
- },
- "mimic-fn": {
- "version": "1.2.0",
- "bundled": true,
- "dev": true
- },
- "onetime": {
- "version": "2.0.1",
- "bundled": true,
- "dev": true,
- "requires": {
- "mimic-fn": "^1.0.0"
- }
- },
- "restore-cursor": {
- "version": "2.0.0",
- "bundled": true,
- "dev": true,
- "requires": {
- "onetime": "^2.0.0",
- "signal-exit": "^3.0.2"
- }
- },
- "string-width": {
- "version": "3.1.0",
- "bundled": true,
- "dev": true,
- "requires": {
- "emoji-regex": "^7.0.1",
- "is-fullwidth-code-point": "^2.0.0",
- "strip-ansi": "^5.1.0"
- }
- },
- "strip-ansi": {
- "version": "5.2.0",
- "bundled": true,
- "dev": true,
- "requires": {
- "ansi-regex": "^4.1.0"
- }
- },
- "wrap-ansi": {
- "version": "5.1.0",
- "bundled": true,
- "dev": true,
- "requires": {
- "ansi-styles": "^3.2.0",
- "string-width": "^3.0.0",
- "strip-ansi": "^5.0.0"
- }
- }
- }
- },
- "loose-envify": {
- "version": "1.4.0",
- "bundled": true,
- "dev": true,
- "requires": {
- "js-tokens": "^3.0.0 || ^4.0.0"
- }
- },
- "mimic-fn": {
- "version": "2.1.0",
- "bundled": true,
- "dev": true
- },
- "minimist": {
- "version": "1.2.5",
- "bundled": true,
- "dev": true
- },
- "minipass": {
- "version": "3.1.1",
- "bundled": true,
- "dev": true,
- "requires": {
- "yallist": "^4.0.0"
- },
- "dependencies": {
- "yallist": {
- "version": "4.0.0",
- "bundled": true,
- "dev": true
- }
- }
- },
- "ms": {
- "version": "2.1.2",
- "bundled": true,
- "dev": true
- },
- "object-assign": {
- "version": "4.1.1",
- "bundled": true,
- "dev": true
- },
- "onetime": {
- "version": "5.1.0",
- "bundled": true,
- "dev": true,
- "requires": {
- "mimic-fn": "^2.1.0"
- }
- },
- "path-parse": {
- "version": "1.0.6",
- "bundled": true,
- "dev": true
- },
- "prop-types": {
- "version": "15.7.2",
- "bundled": true,
- "dev": true,
- "requires": {
- "loose-envify": "^1.4.0",
- "object-assign": "^4.1.1",
- "react-is": "^16.8.1"
- }
- },
- "punycode": {
- "version": "2.1.1",
- "bundled": true,
- "dev": true
- },
- "react-is": {
- "version": "16.13.1",
- "bundled": true,
- "dev": true
- },
- "react-reconciler": {
- "version": "0.24.0",
- "bundled": true,
- "dev": true,
- "requires": {
- "loose-envify": "^1.1.0",
- "object-assign": "^4.1.1",
- "prop-types": "^15.6.2",
- "scheduler": "^0.18.0"
- }
- },
- "redeyed": {
- "version": "2.1.1",
- "bundled": true,
- "dev": true,
- "requires": {
- "esprima": "~4.0.0"
- }
- },
- "regenerator-runtime": {
- "version": "0.13.5",
- "bundled": true,
- "dev": true
- },
- "resolve": {
- "version": "1.15.1",
- "bundled": true,
- "dev": true,
- "requires": {
- "path-parse": "^1.0.6"
- }
- },
- "resolve-from": {
- "version": "3.0.0",
- "bundled": true,
- "dev": true
- },
- "restore-cursor": {
- "version": "3.1.0",
- "bundled": true,
- "dev": true,
- "requires": {
- "onetime": "^5.1.0",
- "signal-exit": "^3.0.2"
- }
- },
- "rimraf": {
- "version": "2.7.1",
- "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz",
- "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==",
- "dev": true,
- "requires": {
- "glob": "^7.1.3"
- }
- },
- "scheduler": {
- "version": "0.18.0",
- "bundled": true,
- "dev": true,
- "requires": {
- "loose-envify": "^1.1.0",
- "object-assign": "^4.1.1"
- }
- },
- "semver": {
- "version": "5.7.1",
- "bundled": true,
- "dev": true
- },
- "signal-exit": {
- "version": "3.0.2",
- "bundled": true,
- "dev": true
- },
- "slice-ansi": {
- "version": "3.0.0",
- "bundled": true,
- "dev": true,
- "requires": {
- "ansi-styles": "^4.0.0",
- "astral-regex": "^2.0.0",
- "is-fullwidth-code-point": "^3.0.0"
- },
- "dependencies": {
- "ansi-styles": {
- "version": "4.2.1",
- "bundled": true,
- "dev": true,
- "requires": {
- "@types/color-name": "^1.1.1",
- "color-convert": "^2.0.1"
- }
- },
- "color-convert": {
- "version": "2.0.1",
- "bundled": true,
- "dev": true,
- "requires": {
- "color-name": "~1.1.4"
- }
- },
- "color-name": {
- "version": "1.1.4",
- "bundled": true,
- "dev": true
- }
- }
- },
- "string-length": {
- "version": "3.1.0",
- "bundled": true,
- "dev": true,
- "requires": {
- "astral-regex": "^1.0.0",
- "strip-ansi": "^5.2.0"
- },
- "dependencies": {
- "ansi-regex": {
- "version": "4.1.0",
- "bundled": true,
- "dev": true
- },
- "astral-regex": {
- "version": "1.0.0",
- "bundled": true,
- "dev": true
- },
- "strip-ansi": {
- "version": "5.2.0",
- "bundled": true,
- "dev": true,
- "requires": {
- "ansi-regex": "^4.1.0"
- }
- }
- }
- },
- "string-width": {
- "version": "4.2.0",
- "bundled": true,
- "dev": true,
- "requires": {
- "emoji-regex": "^8.0.0",
- "is-fullwidth-code-point": "^3.0.0",
- "strip-ansi": "^6.0.0"
- }
- },
- "strip-ansi": {
- "version": "6.0.0",
- "bundled": true,
- "dev": true,
- "requires": {
- "ansi-regex": "^5.0.0"
- }
- },
- "supports-color": {
- "version": "5.5.0",
- "bundled": true,
- "dev": true,
- "requires": {
- "has-flag": "^3.0.0"
- }
- },
- "tap-parser": {
- "version": "10.0.1",
- "bundled": true,
- "dev": true,
- "requires": {
- "events-to-array": "^1.0.1",
- "minipass": "^3.0.0",
- "tap-yaml": "^1.0.0"
- }
- },
- "tap-yaml": {
- "version": "1.0.0",
- "bundled": true,
- "dev": true,
- "requires": {
- "yaml": "^1.5.0"
- }
- },
- "to-fast-properties": {
- "version": "2.0.0",
- "bundled": true,
- "dev": true
- },
- "treport": {
- "version": "1.0.2",
- "bundled": true,
- "dev": true,
- "requires": {
- "cardinal": "^2.1.1",
- "chalk": "^3.0.0",
- "import-jsx": "^3.1.0",
- "ink": "^2.6.0",
- "ms": "^2.1.2",
- "string-length": "^3.1.0",
- "tap-parser": "^10.0.1",
- "unicode-length": "^2.0.2"
- },
- "dependencies": {
- "ansi-styles": {
- "version": "4.2.1",
- "bundled": true,
- "dev": true,
- "requires": {
- "@types/color-name": "^1.1.1",
- "color-convert": "^2.0.1"
- }
- },
- "chalk": {
- "version": "3.0.0",
- "bundled": true,
- "dev": true,
- "requires": {
- "ansi-styles": "^4.1.0",
- "supports-color": "^7.1.0"
- }
- },
- "color-convert": {
- "version": "2.0.1",
- "bundled": true,
- "dev": true,
- "requires": {
- "color-name": "~1.1.4"
- }
- },
- "color-name": {
- "version": "1.1.4",
- "bundled": true,
- "dev": true
- },
- "has-flag": {
- "version": "4.0.0",
- "bundled": true,
- "dev": true
- },
- "supports-color": {
- "version": "7.1.0",
- "bundled": true,
- "dev": true,
- "requires": {
- "has-flag": "^4.0.0"
- }
- }
- }
- },
- "type-fest": {
- "version": "0.11.0",
- "bundled": true,
- "dev": true
- },
- "unicode-length": {
- "version": "2.0.2",
- "bundled": true,
- "dev": true,
- "requires": {
- "punycode": "^2.0.0",
- "strip-ansi": "^3.0.1"
- },
- "dependencies": {
- "ansi-regex": {
- "version": "2.1.1",
- "bundled": true,
- "dev": true
- },
- "strip-ansi": {
- "version": "3.0.1",
- "bundled": true,
- "dev": true,
- "requires": {
- "ansi-regex": "^2.0.0"
- }
- }
- }
- },
- "which": {
- "version": "2.0.2",
- "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz",
- "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==",
- "dev": true,
- "requires": {
- "isexe": "^2.0.0"
- }
- },
- "widest-line": {
- "version": "3.1.0",
- "bundled": true,
- "dev": true,
- "requires": {
- "string-width": "^4.0.0"
- }
- },
- "wrap-ansi": {
- "version": "6.2.0",
- "bundled": true,
- "dev": true,
- "requires": {
- "ansi-styles": "^4.0.0",
- "string-width": "^4.1.0",
- "strip-ansi": "^6.0.0"
- },
- "dependencies": {
- "ansi-styles": {
- "version": "4.2.1",
- "bundled": true,
- "dev": true,
- "requires": {
- "@types/color-name": "^1.1.1",
- "color-convert": "^2.0.1"
- }
- },
- "color-convert": {
- "version": "2.0.1",
- "bundled": true,
- "dev": true,
- "requires": {
- "color-name": "~1.1.4"
- }
- },
- "color-name": {
- "version": "1.1.4",
- "bundled": true,
- "dev": true
- }
- }
- },
- "yaml": {
- "version": "1.8.2",
- "bundled": true,
- "dev": true,
- "requires": {
- "@babel/runtime": "^7.8.7"
- }
- },
- "yoga-layout-prebuilt": {
- "version": "1.9.5",
- "bundled": true,
- "dev": true,
- "requires": {
- "@types/yoga-layout": "1.9.1"
- }
- }
- }
- },
- "tap-mocha-reporter": {
- "version": "5.0.1",
- "resolved": "https://registry.npmjs.org/tap-mocha-reporter/-/tap-mocha-reporter-5.0.1.tgz",
- "integrity": "sha512-1knFWOwd4khx/7uSEnUeaP9IPW3w+sqTgJMhrwah6t46nZ8P25atOKAjSvVDsT67lOPu0nfdOqUwoyKn+3E5pA==",
- "dev": true,
- "requires": {
- "color-support": "^1.1.0",
- "debug": "^4.1.1",
- "diff": "^4.0.1",
- "escape-string-regexp": "^2.0.0",
- "glob": "^7.0.5",
- "tap-parser": "^10.0.0",
- "tap-yaml": "^1.0.0",
- "unicode-length": "^2.0.2"
- },
- "dependencies": {
- "escape-string-regexp": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz",
- "integrity": "sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==",
- "dev": true
- }
- }
- },
- "tap-parser": {
- "version": "10.0.1",
- "resolved": "https://registry.npmjs.org/tap-parser/-/tap-parser-10.0.1.tgz",
- "integrity": "sha512-qdT15H0DoJIi7zOqVXDn9X0gSM68JjNy1w3VemwTJlDnETjbi6SutnqmBfjDJAwkFS79NJ97gZKqie00ZCGmzg==",
- "dev": true,
- "requires": {
- "events-to-array": "^1.0.1",
- "minipass": "^3.0.0",
- "tap-yaml": "^1.0.0"
- }
- },
- "tap-yaml": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/tap-yaml/-/tap-yaml-1.0.0.tgz",
- "integrity": "sha512-Rxbx4EnrWkYk0/ztcm5u3/VznbyFJpyXO12dDBHKWiDVxy7O2Qw6MRrwO5H6Ww0U5YhRY/4C/VzWmFPhBQc4qQ==",
- "dev": true,
- "requires": {
- "yaml": "^1.5.0"
- }
- },
- "tcompare": {
- "version": "3.0.4",
- "resolved": "https://registry.npmjs.org/tcompare/-/tcompare-3.0.4.tgz",
- "integrity": "sha512-Q3TitMVK59NyKgQyFh+857wTAUE329IzLDehuPgU4nF5e8g+EUQ+yUbjUy1/6ugiNnXztphT+NnqlCXolv9P3A==",
- "dev": true,
- "requires": {
- "diff-frag": "^1.0.1"
- }
- },
- "test-exclude": {
- "version": "5.2.3",
- "resolved": "https://registry.npmjs.org/test-exclude/-/test-exclude-5.2.3.tgz",
- "integrity": "sha512-M+oxtseCFO3EDtAaGH7iiej3CBkzXqFMbzqYAACdzKui4eZA+pq3tZEwChvOdNfa7xxy8BfbmgJSIr43cC/+2g==",
- "dev": true,
- "requires": {
- "glob": "^7.1.3",
- "minimatch": "^3.0.4",
- "read-pkg-up": "^4.0.0",
- "require-main-filename": "^2.0.0"
- }
- },
- "text-table": {
- "version": "0.2.0",
- "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz",
- "integrity": "sha1-f17oI66AUgfACvLfSoTsP8+lcLQ=",
- "dev": true
- },
- "through": {
- "version": "2.3.8",
- "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz",
- "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=",
- "dev": true
- },
- "tmp": {
- "version": "0.0.33",
- "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz",
- "integrity": "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==",
- "dev": true,
- "requires": {
- "os-tmpdir": "~1.0.2"
- }
- },
- "to-fast-properties": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz",
- "integrity": "sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4=",
- "dev": true
- },
- "to-regex-range": {
- "version": "5.0.1",
- "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz",
- "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==",
- "dev": true,
- "requires": {
- "is-number": "^7.0.0"
- }
- },
- "tough-cookie": {
- "version": "2.5.0",
- "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.5.0.tgz",
- "integrity": "sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g==",
- "dev": true,
- "requires": {
- "psl": "^1.1.28",
- "punycode": "^2.1.1"
- }
- },
- "trivial-deferred": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/trivial-deferred/-/trivial-deferred-1.0.1.tgz",
- "integrity": "sha1-N21NKdlR1jaKb3oK6FwvTV4GWPM=",
- "dev": true
- },
- "ts-node": {
- "version": "8.8.1",
- "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-8.8.1.tgz",
- "integrity": "sha512-10DE9ONho06QORKAaCBpPiFCdW+tZJuY/84tyypGtl6r+/C7Asq0dhqbRZURuUlLQtZxxDvT8eoj8cGW0ha6Bg==",
- "dev": true,
- "requires": {
- "arg": "^4.1.0",
- "diff": "^4.0.1",
- "make-error": "^1.1.1",
- "source-map-support": "^0.5.6",
- "yn": "3.1.1"
- }
- },
- "tslib": {
- "version": "1.11.1",
- "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.11.1.tgz",
- "integrity": "sha512-aZW88SY8kQbU7gpV19lN24LtXh/yD4ZZg6qieAJDDg+YBsJcSmLGK9QpnUjAKVG/xefmvJGd1WUmfpT/g6AJGA==",
- "dev": true
- },
- "tunnel-agent": {
- "version": "0.6.0",
- "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz",
- "integrity": "sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=",
- "dev": true,
- "requires": {
- "safe-buffer": "^5.0.1"
- }
- },
- "tweetnacl": {
- "version": "0.14.5",
- "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz",
- "integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=",
- "dev": true
- },
- "type-check": {
- "version": "0.3.2",
- "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz",
- "integrity": "sha1-WITKtRLPHTVeP7eE8wgEsrUg23I=",
- "dev": true,
- "requires": {
- "prelude-ls": "~1.1.2"
- }
- },
- "type-fest": {
- "version": "0.8.1",
- "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz",
- "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==",
- "dev": true
- },
- "typedarray-to-buffer": {
- "version": "3.1.5",
- "resolved": "https://registry.npmjs.org/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz",
- "integrity": "sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==",
- "dev": true,
- "requires": {
- "is-typedarray": "^1.0.0"
- }
- },
- "typescript": {
- "version": "3.8.3",
- "resolved": "https://registry.npmjs.org/typescript/-/typescript-3.8.3.tgz",
- "integrity": "sha512-MYlEfn5VrLNsgudQTVJeNaQFUAI7DkhnOjdpAp4T+ku1TfQClewlbSuTVHiA+8skNBgaf02TL/kLOvig4y3G8w==",
- "dev": true
- },
- "unicode-length": {
- "version": "2.0.2",
- "resolved": "https://registry.npmjs.org/unicode-length/-/unicode-length-2.0.2.tgz",
- "integrity": "sha512-Ph/j1VbS3/r77nhoY2WU0GWGjVYOHL3xpKp0y/Eq2e5r0mT/6b649vm7KFO6RdAdrZkYLdxphYVgvODxPB+Ebg==",
- "dev": true,
- "requires": {
- "punycode": "^2.0.0",
- "strip-ansi": "^3.0.1"
- },
- "dependencies": {
- "ansi-regex": {
- "version": "2.1.1",
- "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz",
- "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=",
- "dev": true
- },
- "strip-ansi": {
- "version": "3.0.1",
- "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz",
- "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=",
- "dev": true,
- "requires": {
- "ansi-regex": "^2.0.0"
- }
- }
- }
- },
- "uri-js": {
- "version": "4.2.2",
- "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.2.2.tgz",
- "integrity": "sha512-KY9Frmirql91X2Qgjry0Wd4Y+YTdrdZheS8TFwvkbLWf/G5KNJDCh6pKL5OZctEW4+0Baa5idK2ZQuELRwPznQ==",
- "dev": true,
- "requires": {
- "punycode": "^2.1.0"
- }
- },
- "util-deprecate": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz",
- "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw=="
- },
- "uuid": {
- "version": "3.4.0",
- "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz",
- "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==",
- "dev": true
- },
- "v8-compile-cache": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.1.0.tgz",
- "integrity": "sha512-usZBT3PW+LOjM25wbqIlZwPeJV+3OSz3M1k1Ws8snlW39dZyYL9lOGC5FgPVHfk0jKmjiDV8Z0mIbVQPiwFs7g==",
- "dev": true
- },
- "validate-npm-package-license": {
- "version": "3.0.4",
- "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz",
- "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==",
- "dev": true,
- "requires": {
- "spdx-correct": "^3.0.0",
- "spdx-expression-parse": "^3.0.0"
- }
- },
- "verror": {
- "version": "1.10.0",
- "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz",
- "integrity": "sha512-ZZKSmDAEFOijERBLkmYfJ+vmk3w+7hOLYDNkRCuRuMJGEmqYNCNLyBBFwWKVMhfwaEF3WOd0Zlw86U/WC/+nYw==",
- "dev": true,
- "requires": {
- "assert-plus": "^1.0.0",
- "core-util-is": "1.0.2",
- "extsprintf": "^1.2.0"
- }
- },
- "vlq": {
- "version": "0.2.3",
- "resolved": "https://registry.npmjs.org/vlq/-/vlq-0.2.3.tgz",
- "integrity": "sha512-DRibZL6DsNhIgYQ+wNdWDL2SL3bKPlVrRiBqV5yuMm++op8W4kGFtaQfCs4KEJn0wBZcHVHJ3eoywX8983k1ow==",
- "dev": true
- },
- "which": {
- "version": "1.3.1",
- "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz",
- "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==",
- "dev": true,
- "requires": {
- "isexe": "^2.0.0"
- }
- },
- "which-module": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.0.tgz",
- "integrity": "sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho=",
- "dev": true
- },
- "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": "2.1.0",
- "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-2.1.0.tgz",
- "integrity": "sha1-2Pw9KE3QV5T+hJc8rs3Rz4JP3YU=",
- "dev": true,
- "requires": {
- "string-width": "^1.0.1",
- "strip-ansi": "^3.0.1"
- },
- "dependencies": {
- "ansi-regex": {
- "version": "2.1.1",
- "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz",
- "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=",
- "dev": true
- },
- "is-fullwidth-code-point": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz",
- "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=",
- "dev": true,
- "requires": {
- "number-is-nan": "^1.0.0"
- }
- },
- "string-width": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz",
- "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=",
- "dev": true,
- "requires": {
- "code-point-at": "^1.0.0",
- "is-fullwidth-code-point": "^1.0.0",
- "strip-ansi": "^3.0.0"
- }
- },
- "strip-ansi": {
- "version": "3.0.1",
- "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz",
- "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=",
- "dev": true,
- "requires": {
- "ansi-regex": "^2.0.0"
- }
- }
- }
- },
- "wrappy": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz",
- "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=",
- "dev": true
- },
- "write": {
- "version": "1.0.3",
- "resolved": "https://registry.npmjs.org/write/-/write-1.0.3.tgz",
- "integrity": "sha512-/lg70HAjtkUgWPVZhZcm+T4hkL8Zbtp1nFNOn3lRrxnlv50SRBv7cR7RqR+GMsd3hUXy9hWBo4CHTbFTcOYwig==",
- "dev": true,
- "requires": {
- "mkdirp": "^0.5.1"
- }
- },
- "write-file-atomic": {
- "version": "3.0.3",
- "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-3.0.3.tgz",
- "integrity": "sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q==",
- "dev": true,
- "requires": {
- "imurmurhash": "^0.1.4",
- "is-typedarray": "^1.0.0",
- "signal-exit": "^3.0.2",
- "typedarray-to-buffer": "^3.1.5"
- }
- },
- "y18n": {
- "version": "4.0.3",
- "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.3.tgz",
- "integrity": "sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ==",
- "dev": true
- },
- "yallist": {
- "version": "2.1.2",
- "resolved": "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz",
- "integrity": "sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI=",
- "dev": true
- },
- "yaml": {
- "version": "1.8.3",
- "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.8.3.tgz",
- "integrity": "sha512-X/v7VDnK+sxbQ2Imq4Jt2PRUsRsP7UcpSl3Llg6+NRRqWLIvxkMFYtH1FmvwNGYRKKPa+EPA4qDBlI9WVG1UKw==",
- "dev": true,
- "requires": {
- "@babel/runtime": "^7.8.7"
- }
- },
- "yapool": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/yapool/-/yapool-1.0.0.tgz",
- "integrity": "sha1-9pPymjFbUNmp2iZGp6ZkXJaYW2o=",
- "dev": true
- },
- "yargs": {
- "version": "13.3.2",
- "resolved": "https://registry.npmjs.org/yargs/-/yargs-13.3.2.tgz",
- "integrity": "sha512-AX3Zw5iPruN5ie6xGRIDgqkT+ZhnRlZMLMHAs8tg7nRruy2Nb+i5o9bwghAogtM08q1dpr2LVoS8KSTMYpWXUw==",
- "dev": true,
- "requires": {
- "cliui": "^5.0.0",
- "find-up": "^3.0.0",
- "get-caller-file": "^2.0.1",
- "require-directory": "^2.1.1",
- "require-main-filename": "^2.0.0",
- "set-blocking": "^2.0.0",
- "string-width": "^3.0.0",
- "which-module": "^2.0.0",
- "y18n": "^4.0.0",
- "yargs-parser": "^13.1.2"
- },
- "dependencies": {
- "cliui": {
- "version": "5.0.0",
- "resolved": "https://registry.npmjs.org/cliui/-/cliui-5.0.0.tgz",
- "integrity": "sha512-PYeGSEmmHM6zvoef2w8TPzlrnNpXIjTipYK780YswmIP9vjxmd6Y2a3CB2Ks6/AU8NHjZugXvo8w3oWM2qnwXA==",
- "dev": true,
- "requires": {
- "string-width": "^3.1.0",
- "strip-ansi": "^5.2.0",
- "wrap-ansi": "^5.1.0"
- }
- },
- "emoji-regex": {
- "version": "7.0.3",
- "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz",
- "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==",
- "dev": true
- },
- "is-fullwidth-code-point": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz",
- "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=",
- "dev": true
- },
- "string-width": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz",
- "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==",
- "dev": true,
- "requires": {
- "emoji-regex": "^7.0.1",
- "is-fullwidth-code-point": "^2.0.0",
- "strip-ansi": "^5.1.0"
- }
- },
- "wrap-ansi": {
- "version": "5.1.0",
- "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-5.1.0.tgz",
- "integrity": "sha512-QC1/iN/2/RPVJ5jYK8BGttj5z83LmSKmvbvrXPNCLZSEb32KKVDJDl/MOt2N01qU2H/FkzEa9PKto1BqDjtd7Q==",
- "dev": true,
- "requires": {
- "ansi-styles": "^3.2.0",
- "string-width": "^3.0.0",
- "strip-ansi": "^5.0.0"
- }
- }
- }
- },
- "yargs-parser": {
- "version": "13.1.2",
- "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-13.1.2.tgz",
- "integrity": "sha512-3lbsNRf/j+A4QuSZfDRA7HRSfWrzO0YjqTJd5kjAq37Zep1CEgaYmrH9Q3GwPiB9cHyd1Y1UwggGhJGoxipbzg==",
- "dev": true,
- "requires": {
- "camelcase": "^5.0.0",
- "decamelize": "^1.2.0"
- }
- },
- "yn": {
- "version": "3.1.1",
- "resolved": "https://registry.npmjs.org/yn/-/yn-3.1.1.tgz",
- "integrity": "sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==",
- "dev": true
- }
- }
-}
diff --git a/package.json b/package.json
index b6d2c61..6e07cc0 100644
--- a/package.json
+++ b/package.json
@@ -1,40 +1,46 @@
{
- "name": "@vlasky/zongji",
- "version": "0.5.9",
- "description": "A MySQL 8.0-compatible fork of ZongJi - a MySQL binlog listener for Node.js.",
+ "name": "@powersync/mysql-zongji",
+ "version": "0.0.1",
+ "description": "A MySQL 8.0 >= compatible fork of ZongJi - a MySQL binlog listener for Node.js.",
"main": "index.js",
"directories": {
"test": "test"
},
+ "publishConfig": {
+ "access": "public"
+ },
"scripts": {
- "test": "tap --bail --no-coverage --jobs=1 test/*.js",
- "lint": "eslint ."
+ "release": "pnpm changeset publish",
+ "test": "tap run --disable-coverage --allow-incomplete-coverage -- --sequential test/suites.js",
+ "format": "prettier --write ."
},
"repository": {
"type": "git",
- "url": "https://github.com/vlasky/zongji"
+ "url": "powersync-ja/powersync-mysql-zongji"
},
"keywords": [
"mysql",
"binlog"
],
- "author": "Vlad Lasky (https://github.com/vlasky)",
+ "author": "Vlad Lasky (https://github.com/vlasky)",
"contributors": [
- "Nevill (https://github.com/nevill)",
- "numtel (https://github.com/numtel)",
- "rfanth (https://github.com/rfanth)",
- "Alexander Radyushin (https://github.com/fjedi)",
- "Yousef El-Dardiry (https://github.com/YousefED)",
- "Roopendra Talekar (https://github.com/roopen219)",
- "Juan Ferrer Toribio (https://github.com/juan-ferrer-toribio)"
+ "Nevill (https://github.com/nevill)",
+ "numtel (https://github.com/numtel)",
+ "rfanth (https://github.com/rfanth)",
+ "Alexander Radyushin (https://github.com/fjedi)",
+ "Yousef El-Dardiry (https://github.com/YousefED)",
+ "Roopendra Talekar (https://github.com/roopen219)",
+ "Juan Ferrer Toribio (https://github.com/juan-ferrer-toribio)",
+ "JourneyApps"
],
"license": "MIT",
"engines": {
- "node": ">= 8.0"
+ "node": ">=20.0.0"
},
"devDependencies": {
- "eslint": "6.8.0",
- "tap": "14.10.7"
+ "@changesets/cli": "^2.27.3",
+ "prettier": "^2.8.8",
+ "tap": "^21.0.1"
},
"dependencies": {
"big-integer": "1.6.51",
diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml
new file mode 100644
index 0000000..6d0e5b2
--- /dev/null
+++ b/pnpm-lock.yaml
@@ -0,0 +1,3446 @@
+lockfileVersion: '9.0'
+
+settings:
+ autoInstallPeers: true
+ excludeLinksFromLockfile: false
+
+importers:
+
+ .:
+ dependencies:
+ '@vlasky/mysql':
+ specifier: ^2.18.6
+ version: 2.18.6
+ big-integer:
+ specifier: 1.6.51
+ version: 1.6.51
+ iconv-lite:
+ specifier: 0.6.3
+ version: 0.6.3
+ devDependencies:
+ '@changesets/cli':
+ specifier: ^2.27.3
+ version: 2.27.8
+ prettier:
+ specifier: ^2.8.8
+ version: 2.8.8
+ tap:
+ specifier: ^21.0.1
+ version: 21.0.1(@types/node@12.20.55)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.5.4)
+
+packages:
+
+ '@alcalzone/ansi-tokenize@0.1.3':
+ resolution: {integrity: sha512-3yWxPTq3UQ/FY9p1ErPxIyfT64elWaMvM9lIHnaqpyft63tkxodF5aUElYHrdisWve5cETkh1+KBw1yJuW0aRw==}
+ engines: {node: '>=14.13.1'}
+
+ '@babel/runtime@7.9.2':
+ resolution: {integrity: sha512-NE2DtOdufG7R5vnfQUTehdTfNycfUANEtCa9PssN9O/xmTzP4E08UI797ixaei6hBEVL9BI/PsdJS5x7mWoB9Q==}
+
+ '@base2/pretty-print-object@1.0.1':
+ resolution: {integrity: sha512-4iri8i1AqYHJE2DstZYkyEprg6Pq6sKx3xn5FpySk9sNhH7qN2LLlHJCfDTZRILNwQNPD7mATWM0TBui7uC1pA==}
+
+ '@bcoe/v8-coverage@0.2.3':
+ resolution: {integrity: sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==}
+
+ '@changesets/apply-release-plan@7.0.5':
+ resolution: {integrity: sha512-1cWCk+ZshEkSVEZrm2fSj1Gz8sYvxgUL4Q78+1ZZqeqfuevPTPk033/yUZ3df8BKMohkqqHfzj0HOOrG0KtXTw==}
+
+ '@changesets/assemble-release-plan@6.0.4':
+ resolution: {integrity: sha512-nqICnvmrwWj4w2x0fOhVj2QEGdlUuwVAwESrUo5HLzWMI1rE5SWfsr9ln+rDqWB6RQ2ZyaMZHUcU7/IRaUJS+Q==}
+
+ '@changesets/changelog-git@0.2.0':
+ resolution: {integrity: sha512-bHOx97iFI4OClIT35Lok3sJAwM31VbUM++gnMBV16fdbtBhgYu4dxsphBF/0AZZsyAHMrnM0yFcj5gZM1py6uQ==}
+
+ '@changesets/cli@2.27.8':
+ resolution: {integrity: sha512-gZNyh+LdSsI82wBSHLQ3QN5J30P4uHKJ4fXgoGwQxfXwYFTJzDdvIJasZn8rYQtmKhyQuiBj4SSnLuKlxKWq4w==}
+ hasBin: true
+
+ '@changesets/config@3.0.3':
+ resolution: {integrity: sha512-vqgQZMyIcuIpw9nqFIpTSNyc/wgm/Lu1zKN5vECy74u95Qx/Wa9g27HdgO4NkVAaq+BGA8wUc/qvbvVNs93n6A==}
+
+ '@changesets/errors@0.2.0':
+ resolution: {integrity: sha512-6BLOQUscTpZeGljvyQXlWOItQyU71kCdGz7Pi8H8zdw6BI0g3m43iL4xKUVPWtG+qrrL9DTjpdn8eYuCQSRpow==}
+
+ '@changesets/get-dependents-graph@2.1.2':
+ resolution: {integrity: sha512-sgcHRkiBY9i4zWYBwlVyAjEM9sAzs4wYVwJUdnbDLnVG3QwAaia1Mk5P8M7kraTOZN+vBET7n8KyB0YXCbFRLQ==}
+
+ '@changesets/get-release-plan@4.0.4':
+ resolution: {integrity: sha512-SicG/S67JmPTrdcc9Vpu0wSQt7IiuN0dc8iR5VScnnTVPfIaLvKmEGRvIaF0kcn8u5ZqLbormZNTO77bCEvyWw==}
+
+ '@changesets/get-version-range-type@0.4.0':
+ resolution: {integrity: sha512-hwawtob9DryoGTpixy1D3ZXbGgJu1Rhr+ySH2PvTLHvkZuQ7sRT4oQwMh0hbqZH1weAooedEjRsbrWcGLCeyVQ==}
+
+ '@changesets/git@3.0.1':
+ resolution: {integrity: sha512-pdgHcYBLCPcLd82aRcuO0kxCDbw/yISlOtkmwmE8Odo1L6hSiZrBOsRl84eYG7DRCab/iHnOkWqExqc4wxk2LQ==}
+
+ '@changesets/logger@0.1.1':
+ resolution: {integrity: sha512-OQtR36ZlnuTxKqoW4Sv6x5YIhOmClRd5pWsjZsddYxpWs517R0HkyiefQPIytCVh4ZcC5x9XaG8KTdd5iRQUfg==}
+
+ '@changesets/parse@0.4.0':
+ resolution: {integrity: sha512-TS/9KG2CdGXS27S+QxbZXgr8uPsP4yNJYb4BC2/NeFUj80Rni3TeD2qwWmabymxmrLo7JEsytXH1FbpKTbvivw==}
+
+ '@changesets/pre@2.0.1':
+ resolution: {integrity: sha512-vvBJ/If4jKM4tPz9JdY2kGOgWmCowUYOi5Ycv8dyLnEE8FgpYYUo1mgJZxcdtGGP3aG8rAQulGLyyXGSLkIMTQ==}
+
+ '@changesets/read@0.6.1':
+ resolution: {integrity: sha512-jYMbyXQk3nwP25nRzQQGa1nKLY0KfoOV7VLgwucI0bUO8t8ZLCr6LZmgjXsiKuRDc+5A6doKPr9w2d+FEJ55zQ==}
+
+ '@changesets/should-skip-package@0.1.1':
+ resolution: {integrity: sha512-H9LjLbF6mMHLtJIc/eHR9Na+MifJ3VxtgP/Y+XLn4BF7tDTEN1HNYtH6QMcjP1uxp9sjaFYmW8xqloaCi/ckTg==}
+
+ '@changesets/types@4.1.0':
+ resolution: {integrity: sha512-LDQvVDv5Kb50ny2s25Fhm3d9QSZimsoUGBsUioj6MC3qbMUCuC8GPIvk/M6IvXx3lYhAs0lwWUQLb+VIEUCECw==}
+
+ '@changesets/types@6.0.0':
+ resolution: {integrity: sha512-b1UkfNulgKoWfqyHtzKS5fOZYSJO+77adgL7DLRDr+/7jhChN+QcHnbjiQVOz/U+Ts3PGNySq7diAItzDgugfQ==}
+
+ '@changesets/write@0.3.2':
+ resolution: {integrity: sha512-kDxDrPNpUgsjDbWBvUo27PzKX4gqeKOlhibaOXDJA6kuBisGqNHv/HwGJrAu8U/dSf8ZEFIeHIPtvSlZI1kULw==}
+
+ '@cspotcode/source-map-support@0.8.1':
+ resolution: {integrity: sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==}
+ engines: {node: '>=12'}
+
+ '@isaacs/cliui@8.0.2':
+ resolution: {integrity: sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==}
+ engines: {node: '>=12'}
+
+ '@isaacs/ts-node-temp-fork-for-pr-2009@10.9.7':
+ resolution: {integrity: sha512-9f0bhUr9TnwwpgUhEpr3FjxSaH/OHaARkE2F9fM0lS4nIs2GNerrvGwQz493dk0JKlTaGYVrKbq36vA/whZ34g==}
+ hasBin: true
+ peerDependencies:
+ '@swc/core': '>=1.2.50'
+ '@swc/wasm': '>=1.2.50'
+ '@types/node': '*'
+ typescript: '>=4.2'
+ peerDependenciesMeta:
+ '@swc/core':
+ optional: true
+ '@swc/wasm':
+ optional: true
+
+ '@istanbuljs/schema@0.1.3':
+ resolution: {integrity: sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==}
+ engines: {node: '>=8'}
+
+ '@jridgewell/resolve-uri@3.1.2':
+ resolution: {integrity: sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==}
+ engines: {node: '>=6.0.0'}
+
+ '@jridgewell/sourcemap-codec@1.5.0':
+ resolution: {integrity: sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==}
+
+ '@jridgewell/trace-mapping@0.3.25':
+ resolution: {integrity: sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==}
+
+ '@jridgewell/trace-mapping@0.3.9':
+ resolution: {integrity: sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==}
+
+ '@manypkg/find-root@1.1.0':
+ resolution: {integrity: sha512-mki5uBvhHzO8kYYix/WRy2WX8S3B5wdVSc9D6KcU5lQNglP2yt58/VfLuAK49glRXChosY8ap2oJ1qgma3GUVA==}
+
+ '@manypkg/get-packages@1.1.3':
+ resolution: {integrity: sha512-fo+QhuU3qE/2TQMQmbVMqaQ6EWbMhi4ABWP+O4AM1NqPBuy0OrApV5LO6BrrgnhtAHS2NH6RrVk9OL181tTi8A==}
+
+ '@nodelib/fs.scandir@2.1.5':
+ resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==}
+ engines: {node: '>= 8'}
+
+ '@nodelib/fs.stat@2.0.5':
+ resolution: {integrity: sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==}
+ engines: {node: '>= 8'}
+
+ '@nodelib/fs.walk@1.2.8':
+ resolution: {integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==}
+ engines: {node: '>= 8'}
+
+ '@npmcli/agent@2.2.2':
+ resolution: {integrity: sha512-OrcNPXdpSl9UX7qPVRWbmWMCSXrcDa2M9DvrbOTj7ao1S4PlqVFYv9/yLKMkrJKZ/V5A/kDBC690or307i26Og==}
+ engines: {node: ^16.14.0 || >=18.0.0}
+
+ '@npmcli/fs@3.1.1':
+ resolution: {integrity: sha512-q9CRWjpHCMIh5sVyefoD1cA7PkvILqCZsnSOEUUivORLjxCO/Irmue2DprETiNgEqktDBZaM1Bi+jrarx1XdCg==}
+ engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0}
+
+ '@npmcli/git@5.0.8':
+ resolution: {integrity: sha512-liASfw5cqhjNW9UFd+ruwwdEf/lbOAQjLL2XY2dFW/bkJheXDYZgOyul/4gVvEV4BWkTXjYGmDqMw9uegdbJNQ==}
+ engines: {node: ^16.14.0 || >=18.0.0}
+
+ '@npmcli/installed-package-contents@2.1.0':
+ resolution: {integrity: sha512-c8UuGLeZpm69BryRykLuKRyKFZYJsZSCT4aVY5ds4omyZqJ172ApzgfKJ5eV/r3HgLdUYgFVe54KSFVjKoe27w==}
+ engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0}
+ hasBin: true
+
+ '@npmcli/node-gyp@3.0.0':
+ resolution: {integrity: sha512-gp8pRXC2oOxu0DUE1/M3bYtb1b3/DbJ5aM113+XJBgfXdussRAsX0YOrOhdd8WvnAR6auDBvJomGAkLKA5ydxA==}
+ engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0}
+
+ '@npmcli/package-json@5.2.0':
+ resolution: {integrity: sha512-qe/kiqqkW0AGtvBjL8TJKZk/eBBSpnJkUWvHdQ9jM2lKHXRYYJuyNpJPlJw3c8QjC2ow6NZYiLExhUaeJelbxQ==}
+ engines: {node: ^16.14.0 || >=18.0.0}
+
+ '@npmcli/promise-spawn@7.0.2':
+ resolution: {integrity: sha512-xhfYPXoV5Dy4UkY0D+v2KkwvnDfiA/8Mt3sWCGI/hM03NsYIH8ZaG6QzS9x7pje5vHZBZJ2v6VRFVTWACnqcmQ==}
+ engines: {node: ^16.14.0 || >=18.0.0}
+
+ '@npmcli/redact@2.0.1':
+ resolution: {integrity: sha512-YgsR5jCQZhVmTJvjduTOIHph0L73pK8xwMVaDY0PatySqVM9AZj93jpoXYSJqfHFxFkN9dmqTw6OiqExsS3LPw==}
+ engines: {node: ^16.14.0 || >=18.0.0}
+
+ '@npmcli/run-script@8.1.0':
+ resolution: {integrity: sha512-y7efHHwghQfk28G2z3tlZ67pLG0XdfYbcVG26r7YIXALRsrVQcTq4/tdenSmdOrEsNahIYA/eh8aEVROWGFUDg==}
+ engines: {node: ^16.14.0 || >=18.0.0}
+
+ '@pkgjs/parseargs@0.11.0':
+ resolution: {integrity: sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==}
+ engines: {node: '>=14'}
+
+ '@sigstore/bundle@2.3.2':
+ resolution: {integrity: sha512-wueKWDk70QixNLB363yHc2D2ItTgYiMTdPwK8D9dKQMR3ZQ0c35IxP5xnwQ8cNLoCgCRcHf14kE+CLIvNX1zmA==}
+ engines: {node: ^16.14.0 || >=18.0.0}
+
+ '@sigstore/core@1.1.0':
+ resolution: {integrity: sha512-JzBqdVIyqm2FRQCulY6nbQzMpJJpSiJ8XXWMhtOX9eKgaXXpfNOF53lzQEjIydlStnd/eFtuC1dW4VYdD93oRg==}
+ engines: {node: ^16.14.0 || >=18.0.0}
+
+ '@sigstore/protobuf-specs@0.3.2':
+ resolution: {integrity: sha512-c6B0ehIWxMI8wiS/bj6rHMPqeFvngFV7cDU/MY+B16P9Z3Mp9k8L93eYZ7BYzSickzuqAQqAq0V956b3Ju6mLw==}
+ engines: {node: ^16.14.0 || >=18.0.0}
+
+ '@sigstore/sign@2.3.2':
+ resolution: {integrity: sha512-5Vz5dPVuunIIvC5vBb0APwo7qKA4G9yM48kPWJT+OEERs40md5GoUR1yedwpekWZ4m0Hhw44m6zU+ObsON+iDA==}
+ engines: {node: ^16.14.0 || >=18.0.0}
+
+ '@sigstore/tuf@2.3.4':
+ resolution: {integrity: sha512-44vtsveTPUpqhm9NCrbU8CWLe3Vck2HO1PNLw7RIajbB7xhtn5RBPm1VNSCMwqGYHhDsBJG8gDF0q4lgydsJvw==}
+ engines: {node: ^16.14.0 || >=18.0.0}
+
+ '@sigstore/verify@1.2.1':
+ resolution: {integrity: sha512-8iKx79/F73DKbGfRf7+t4dqrc0bRr0thdPrxAtCKWRm/F0tG71i6O1rvlnScncJLLBZHn3h8M3c1BSUAb9yu8g==}
+ engines: {node: ^16.14.0 || >=18.0.0}
+
+ '@tapjs/after-each@4.0.0':
+ resolution: {integrity: sha512-RrkYMB3SpXKFJAijbgNkOexiClX5aygkCIHKHPIfnfqsPozkwjYbtVQs6d1/tG8ytiJtH5rvybuNJMRRNDcfBQ==}
+ engines: {node: 20 || >=22}
+ peerDependencies:
+ '@tapjs/core': 4.0.0
+
+ '@tapjs/after@3.0.0':
+ resolution: {integrity: sha512-BCGq+YocD0xxeGC4mMym2tg6qtgFJJdCrji8N1HbF55d55nxQrA8R/w6+D9b4N7t/4dfpbI+LW5FgdBATohFPw==}
+ engines: {node: 20 || >=22}
+ peerDependencies:
+ '@tapjs/core': 4.0.0
+
+ '@tapjs/asserts@4.0.0':
+ resolution: {integrity: sha512-V1YmOLMhyITi75e0u8vS+x1S0sDwISWk643C4a9XiY2RDin1nEueE8Nzwp2ZBP+N4HtgzKVfzJ1AYvpwaTKwUA==}
+ engines: {node: 20 || >=22}
+ peerDependencies:
+ '@tapjs/core': 4.0.0
+
+ '@tapjs/before-each@4.0.0':
+ resolution: {integrity: sha512-zJwDLLH+3+qmpE8Pr1fAEeqZNvbok7yYKKKE/7IDMi3zdvM0Rjk7Y4JXGbVI8IreuRK0rXaSL1ZZqbFMsZGHrg==}
+ engines: {node: 20 || >=22}
+ peerDependencies:
+ '@tapjs/core': 4.0.0
+
+ '@tapjs/before@4.0.0':
+ resolution: {integrity: sha512-d1k6lTSzqTcq4pjGsCPUxNP5NFWZBxwHLmgVxy2RHfZwKM20eXXAOPgAw3LgPVgkoehwi+nwWUGTJDcL3AS8YQ==}
+ engines: {node: 20 || >=22}
+ peerDependencies:
+ '@tapjs/core': 4.0.0
+
+ '@tapjs/chdir@3.0.0':
+ resolution: {integrity: sha512-yljg4CX2/UinFytD50LaRhBVTDaW3vBcUwzYnXzJcuFLoPEpq0svlyIwzcCXfLLGP8/AgkS3MRt58AisBtz4zw==}
+ engines: {node: 20 || >=22}
+ peerDependencies:
+ '@tapjs/core': 4.0.0
+
+ '@tapjs/config@5.0.0':
+ resolution: {integrity: sha512-AAHbK30FwnGC3FcFACnXEGZ+uFtkpxsF2bwvgAzHND2tIE9ld2LwGMiGq3rM9EwcZ1AAnU8ibbUC0WbnS5FcCQ==}
+ engines: {node: 20 || >=22}
+ peerDependencies:
+ '@tapjs/core': 4.0.0
+ '@tapjs/test': 4.0.0
+
+ '@tapjs/core@4.0.0':
+ resolution: {integrity: sha512-COWMNbGBjf0qbsbKw+2911rrt+oXXOkIXpoMpIsz0/UN2rxqAAvDyrriObVfc4v+O2auabnWfdrxwNm3Vy01yw==}
+ engines: {node: 20 || >=22}
+
+ '@tapjs/error-serdes@4.0.0':
+ resolution: {integrity: sha512-jO0CvhL7lyGcDzyPeumyXirBv/vxRuhg8SdyLwjNqO7aelckxZzY/dCchtov7PfKK7wc/iB55W2++PE9waFaWw==}
+ engines: {node: 20 || >=22}
+
+ '@tapjs/filter@4.0.0':
+ resolution: {integrity: sha512-VCqwRB+GJKDavOtoCU6K3skR6b/Qv7vo5YwuwgTUzRDmeNJQwI4S/s0l4cRbaMVJxuXeR3o5JwBsH0Ppjwzgkw==}
+ engines: {node: 20 || >=22}
+ peerDependencies:
+ '@tapjs/core': 4.0.0
+
+ '@tapjs/fixture@4.0.0':
+ resolution: {integrity: sha512-h8qZwzQqNd0aLU+oU+0uhBSSlU4+5a8kkFfPrwlNQr9Vde2CyW5vMMVWvX2do+5wFyiFwKHAjbtBS7BSkfH7Kw==}
+ engines: {node: 20 || >=22}
+ peerDependencies:
+ '@tapjs/core': 4.0.0
+
+ '@tapjs/intercept@4.0.0':
+ resolution: {integrity: sha512-MSPvOcwVKZjtb2KVY6JB/dBD54mGkzaJHCdzkIAJdcUAAbZQz5pMppQkEwPw/Zs+JFPJjGzZyITrDfh9if7maw==}
+ engines: {node: 20 || >=22}
+ peerDependencies:
+ '@tapjs/core': 4.0.0
+
+ '@tapjs/mock@4.0.0':
+ resolution: {integrity: sha512-6GyQm61wSCmfxKb7GRY24cdnO92mV7mZ0hmdbOko881FIEmjeAsLQaNKUaatnGWpzBUoqw+JCzbASee4/AfaMQ==}
+ engines: {node: 20 || >=22}
+ peerDependencies:
+ '@tapjs/core': 4.0.0
+
+ '@tapjs/node-serialize@4.0.0':
+ resolution: {integrity: sha512-cFHcyEZHd4SQPSoZ4tGHfo/p1+4r24G0K0jiAb28WotdE2kbjkf7TVEiKOA5IEOmjQtdJ4+gVcuErZUchjpQZg==}
+ engines: {node: 20 || >=22}
+ peerDependencies:
+ '@tapjs/core': 4.0.0
+
+ '@tapjs/processinfo@3.1.8':
+ resolution: {integrity: sha512-FIriEB+qqArPhmVYc1PZwRHD99myRdl7C9Oe/uts04Q2LOxQ5MEmqP9XOP8vVYzpDOYwmL8OmL6eOYt9eZlQKQ==}
+ engines: {node: '>=16.17'}
+
+ '@tapjs/reporter@4.0.1':
+ resolution: {integrity: sha512-bS7pOGV99GAhYY/LxNxL4Qq0Ldi4k8DZDC25gonVQrNUW2zYpSBerhrnsz1KDXdaD2OKDtSR8oW2FxUyL6n83A==}
+ engines: {node: 20 || >=22}
+ peerDependencies:
+ '@tapjs/core': 4.0.0
+
+ '@tapjs/run@4.0.1':
+ resolution: {integrity: sha512-jll1tiMhxFajfHIGBF/eK+Ob0uEqXBnQq/ONNc9heqcCtcXhC4iYGzhoK+sw03MxwrbRtNomQ7dRqiT0IOjS6w==}
+ engines: {node: 20 || >=22}
+ hasBin: true
+ peerDependencies:
+ '@tapjs/core': 4.0.0
+
+ '@tapjs/snapshot@4.0.0':
+ resolution: {integrity: sha512-1d2IOOpbra6VMDypft8NGylkIypgk2VgMRrEeSsipOyeku81STlcdzm8mS0COCqVtX6+si+tkERuqFrCVy/xSg==}
+ engines: {node: 20 || >=22}
+ peerDependencies:
+ '@tapjs/core': 4.0.0
+
+ '@tapjs/spawn@4.0.0':
+ resolution: {integrity: sha512-K+kn4wCIMiOfHtjt5lxlxmJMvL4C9txAxapTRyLEm9ul9ZKgzAOQmMD29YEtkKY53v1eAfpJ3agCXnH59uOJ+A==}
+ engines: {node: 20 || >=22}
+ peerDependencies:
+ '@tapjs/core': 4.0.0
+
+ '@tapjs/stack@4.0.0':
+ resolution: {integrity: sha512-uj6BvHXvLf1qILvcpYit9D6JX7pg4eSbaxm1MhWpi8wdhSQyUAOe4gxCMTfJpW0ekB48N4QN3S3vaq7rWtFctw==}
+ engines: {node: 20 || >=22}
+
+ '@tapjs/stdin@4.0.0':
+ resolution: {integrity: sha512-6QcaKEKH+RB5YPVHytclqzrKoh1d0S8i8lEgGwGAhoaShyawB5CoADnKpCXWjHKsRESUvG7CqiPDGsK39BJEaA==}
+ engines: {node: 20 || >=22}
+ peerDependencies:
+ '@tapjs/core': 4.0.0
+
+ '@tapjs/test@4.0.0':
+ resolution: {integrity: sha512-lOU1N0bFCCjJg2UEb8TlLj6+u754Uxi2CSuv3TSkRU+oHRBTEPZ4nJ6MpUqvgyvKm9ilVZ5FLS9/GwXB/XLH3A==}
+ engines: {node: 20 || >=22}
+ hasBin: true
+ peerDependencies:
+ '@tapjs/core': 4.0.0
+
+ '@tapjs/typescript@3.0.0':
+ resolution: {integrity: sha512-gKDv+07vdNuplN32sQvkzuEnai9JqJlUX5BuqTrSeWMsoKCoGPdyt8YNwaoebVeyBpt7IgjOBln8YLhfI3AcpA==}
+ engines: {node: 20 || >=22}
+ peerDependencies:
+ '@tapjs/core': 4.0.0
+
+ '@tapjs/worker@4.0.0':
+ resolution: {integrity: sha512-BI5Ttet5HEABPAll8Ou8oFQGIiglen87PYlwTc9yLEB+g4mj8FCZYTGJNIW981CT7lOZzMJICz3C3VTdC9vzuA==}
+ engines: {node: 20 || >=22}
+ peerDependencies:
+ '@tapjs/core': 4.0.0
+
+ '@tsconfig/node14@14.1.2':
+ resolution: {integrity: sha512-1vncsbfCZ3TBLPxesRYz02Rn7SNJfbLoDVkcZ7F/ixOV6nwxwgdhD1mdPcc5YQ413qBJ8CvMxXMFfJ7oawjo7Q==}
+
+ '@tsconfig/node16@16.1.3':
+ resolution: {integrity: sha512-9nTOUBn+EMKO6rtSZJk+DcqsfgtlERGT9XPJ5PRj/HNENPCBY1yu/JEj5wT6GLtbCLBO2k46SeXDaY0pjMqypw==}
+
+ '@tsconfig/node18@18.2.4':
+ resolution: {integrity: sha512-5xxU8vVs9/FNcvm3gE07fPbn9tl6tqGGWA9tSlwsUEkBxtRnTsNmwrV8gasZ9F/EobaSv9+nu8AxUKccw77JpQ==}
+
+ '@tsconfig/node20@20.1.4':
+ resolution: {integrity: sha512-sqgsT69YFeLWf5NtJ4Xq/xAF8p4ZQHlmGW74Nu2tD4+g5fAsposc4ZfaaPixVu4y01BEiDCWLRDCvDM5JOsRxg==}
+
+ '@tufjs/canonical-json@2.0.0':
+ resolution: {integrity: sha512-yVtV8zsdo8qFHe+/3kw81dSLyF7D576A5cCFCi4X7B39tWT7SekaEFUnvnWJHz+9qO7qJTah1JbrDjWKqFtdWA==}
+ engines: {node: ^16.14.0 || >=18.0.0}
+
+ '@tufjs/models@2.0.1':
+ resolution: {integrity: sha512-92F7/SFyufn4DXsha9+QfKnN03JGqtMFMXgSHbZOo8JG59WkTni7UzAouNQDf7AuP9OAMxVOPQcqG3sB7w+kkg==}
+ engines: {node: ^16.14.0 || >=18.0.0}
+
+ '@types/istanbul-lib-coverage@2.0.6':
+ resolution: {integrity: sha512-2QF/t/auWm0lsy8XtKVPG19v3sSOQlJe/YHZgfjb/KBBHOGSV+J2q/S671rcq9uTBrLAXmZpqJiaQbMT+zNU1w==}
+
+ '@types/node@12.20.55':
+ resolution: {integrity: sha512-J8xLz7q2OFulZ2cyGTLE1TbbZcjpno7FaN6zdJNrgAdrJ+DZzh/uFR6YrTb4C+nXakvud8Q4+rbhoIWlYQbUFQ==}
+
+ '@types/semver@7.5.8':
+ resolution: {integrity: sha512-I8EUhyrgfLrcTkzV3TSsGyl1tSuPrEDzr0yd5m90UgNxQkyDXULk3b6MlQqTCpZpNtWe1K0hzclnZkTcLBe2UQ==}
+
+ '@vlasky/mysql@2.18.6':
+ resolution: {integrity: sha512-c+qz/zzqecteQLchoje0E0rjLla935d6hHPpMKmfyQJnHlycLpR49ekS6s/zUAt8w0Um5hFglKXm4+PeJTVhaQ==}
+ engines: {node: '>= 0.6'}
+
+ abbrev@2.0.0:
+ resolution: {integrity: sha512-6/mh1E2u2YgEsCHdY0Yx5oW+61gZU+1vXaoiHHrpKeuRNNgFvS+/jrwHiQhB5apAf5oB7UB7E19ol2R2LKH8hQ==}
+ engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0}
+
+ acorn-walk@8.3.4:
+ resolution: {integrity: sha512-ueEepnujpqee2o5aIYnvHU6C0A42MNdsIDeqy5BydrkuC5R1ZuUFnm27EeFJGoEHJQgn3uleRvmTXaJgfXbt4g==}
+ engines: {node: '>=0.4.0'}
+
+ acorn@8.12.1:
+ resolution: {integrity: sha512-tcpGyI9zbizT9JbV6oYE477V6mTlXvvi0T0G3SNIYE2apm/G5huBa1+K89VGeovbg+jycCrfhl3ADxErOuO6Jg==}
+ engines: {node: '>=0.4.0'}
+ hasBin: true
+
+ agent-base@7.1.1:
+ resolution: {integrity: sha512-H0TSyFNDMomMNJQBn8wFV5YC/2eJ+VXECwOadZJT554xP6cODZHPX3H9QMQECxvrgiSOP1pHjy1sMWQVYJOUOA==}
+ engines: {node: '>= 14'}
+
+ aggregate-error@3.1.0:
+ resolution: {integrity: sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==}
+ engines: {node: '>=8'}
+
+ ansi-colors@4.1.3:
+ resolution: {integrity: sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw==}
+ engines: {node: '>=6'}
+
+ ansi-escapes@7.0.0:
+ resolution: {integrity: sha512-GdYO7a61mR0fOlAsvC9/rIHf7L96sBc6dEWzeOu+KAea5bZyQRPIpojrVoI4AXGJS/ycu/fBTdLrUkA4ODrvjw==}
+ engines: {node: '>=18'}
+
+ ansi-regex@5.0.1:
+ resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==}
+ engines: {node: '>=8'}
+
+ ansi-regex@6.1.0:
+ resolution: {integrity: sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA==}
+ engines: {node: '>=12'}
+
+ ansi-styles@4.3.0:
+ resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==}
+ engines: {node: '>=8'}
+
+ ansi-styles@6.2.1:
+ resolution: {integrity: sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==}
+ engines: {node: '>=12'}
+
+ anymatch@3.1.3:
+ resolution: {integrity: sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==}
+ engines: {node: '>= 8'}
+
+ arg@4.1.3:
+ resolution: {integrity: sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==}
+
+ argparse@1.0.10:
+ resolution: {integrity: sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==}
+
+ array-union@2.1.0:
+ resolution: {integrity: sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==}
+ engines: {node: '>=8'}
+
+ async-hook-domain@4.0.1:
+ resolution: {integrity: sha512-bSktexGodAjfHWIrSrrqxqWzf1hWBZBpmPNZv+TYUMyWa2eoefFc6q6H1+KtdHYSz35lrhWdmXt/XK9wNEZvww==}
+ engines: {node: '>=16'}
+
+ auto-bind@5.0.1:
+ resolution: {integrity: sha512-ooviqdwwgfIfNmDwo94wlshcdzfO64XV0Cg6oDsDYBJfITDz1EngD2z7DkbvCWn+XIMsIqW27sEVF6qcpJrRcg==}
+ engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0}
+
+ balanced-match@1.0.0:
+ resolution: {integrity: sha512-9Y0g0Q8rmSt+H33DfKv7FOc3v+iRI+o1lbzt8jGcIosYW37IIW/2XVYq5NPdmaD5NQ59Nk26Kl/vZbwW9Fr8vg==}
+
+ better-path-resolve@1.0.0:
+ resolution: {integrity: sha512-pbnl5XzGBdrFU/wT4jqmJVPn2B6UHPBOhzMQkY/SPUPB6QtUXtmBHBIwCbXJol93mOpGMnQyP/+BB19q04xj7g==}
+ engines: {node: '>=4'}
+
+ big-integer@1.6.51:
+ resolution: {integrity: sha512-GPEid2Y9QU1Exl1rpO9B2IPJGHPSupF5GnVIP0blYvNOMer2bTvSWs1jGOUg04hTmu67nmLsQ9TBo1puaotBHg==}
+ engines: {node: '>=0.6'}
+
+ bignumber.js@9.1.1:
+ resolution: {integrity: sha512-pHm4LsMJ6lzgNGVfZHjMoO8sdoRhOzOH4MLmY65Jg70bpxCKu5iOHNJyfF6OyvYw7t8Fpf35RuzUyqnQsj8Vig==}
+
+ binary-extensions@2.0.0:
+ resolution: {integrity: sha512-Phlt0plgpIIBOGTT/ehfFnbNlfsDEiqmzE2KRXoX1bLIlir4X/MR+zSyBEkL05ffWgnRSf/DXv+WrUAVr93/ow==}
+ engines: {node: '>=8'}
+
+ brace-expansion@2.0.1:
+ resolution: {integrity: sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==}
+
+ braces@3.0.3:
+ resolution: {integrity: sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==}
+ engines: {node: '>=8'}
+
+ c8@10.1.2:
+ resolution: {integrity: sha512-Qr6rj76eSshu5CgRYvktW0uM0CFY0yi4Fd5D0duDXO6sYinyopmftUiJVuzBQxQcwQLor7JWDVRP+dUfCmzgJw==}
+ engines: {node: '>=18'}
+ hasBin: true
+ peerDependencies:
+ monocart-coverage-reports: ^2
+ peerDependenciesMeta:
+ monocart-coverage-reports:
+ optional: true
+
+ cacache@18.0.4:
+ resolution: {integrity: sha512-B+L5iIa9mgcjLbliir2th36yEwPftrzteHYujzsx3dFP/31GCHcIeS8f5MGd80odLOjaOvSpU3EEAmRQptkxLQ==}
+ engines: {node: ^16.14.0 || >=18.0.0}
+
+ chalk@5.3.0:
+ resolution: {integrity: sha512-dLitG79d+GV1Nb/VYcCDFivJeK1hiukt9QjRNVOsUtTy1rR1YJsmpGGTZ3qJos+uw7WmWF4wUwBd9jxjocFC2w==}
+ engines: {node: ^12.17.0 || ^14.13 || >=16.0.0}
+
+ chardet@0.7.0:
+ resolution: {integrity: sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==}
+
+ chokidar@3.6.0:
+ resolution: {integrity: sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==}
+ engines: {node: '>= 8.10.0'}
+
+ chownr@2.0.0:
+ resolution: {integrity: sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==}
+ engines: {node: '>=10'}
+
+ ci-info@3.9.0:
+ resolution: {integrity: sha512-NIxF55hv4nSqQswkAeiOi1r83xy8JldOFDTWiug55KBu9Jnblncd2U6ViHmYgHf01TPZS77NJBhBMKdWj9HQMQ==}
+ engines: {node: '>=8'}
+
+ clean-stack@2.2.0:
+ resolution: {integrity: sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==}
+ engines: {node: '>=6'}
+
+ cli-boxes@3.0.0:
+ resolution: {integrity: sha512-/lzGpEWL/8PfI0BmBOPRwp0c/wFNX1RdUML3jK/RcSBA9T8mZDdQpqYBKtCFTOfQbwPqWEOpjqW+Fnayc0969g==}
+ engines: {node: '>=10'}
+
+ cli-cursor@4.0.0:
+ resolution: {integrity: sha512-VGtlMu3x/4DOtIUwEkRezxUZ2lBacNJCHash0N0WeZDBS+7Ux1dm3XWAgWYxLJFMMdOeXMHXorshEFhbMSGelg==}
+ engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0}
+
+ cli-truncate@4.0.0:
+ resolution: {integrity: sha512-nPdaFdQ0h/GEigbPClz11D0v/ZJEwxmeVZGeMo3Z5StPtUTkA9o1lD6QwoirYiSDzbcwn2XcjwmCp68W1IS4TA==}
+ engines: {node: '>=18'}
+
+ cliui@8.0.1:
+ resolution: {integrity: sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==}
+ engines: {node: '>=12'}
+
+ code-excerpt@4.0.0:
+ resolution: {integrity: sha512-xxodCmBen3iy2i0WtAK8FlFNrRzjUqjRsMfho58xT/wvZU1YTM3fCnRjcy1gJPMepaRlgm/0e6w8SpWHpn3/cA==}
+ engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0}
+
+ color-convert@2.0.1:
+ resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==}
+ engines: {node: '>=7.0.0'}
+
+ color-name@1.1.4:
+ resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==}
+
+ convert-source-map@2.0.0:
+ resolution: {integrity: sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==}
+
+ convert-to-spaces@2.0.1:
+ resolution: {integrity: sha512-rcQ1bsQO9799wq24uE5AM2tAILy4gXGIK/njFWcVQkGNZ96edlpY+A7bjwvzjYvLDyzmG1MmMLZhpcsb+klNMQ==}
+ engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0}
+
+ core-util-is@1.0.2:
+ resolution: {integrity: sha512-3lqz5YjWTYnW6dlDa5TLaTCcShfar1e40rmcJVwCBJC6mWlFuj0eCHIElmG1g5kyuJ/GD+8Wn4FFCcz4gJPfaQ==}
+
+ cross-spawn@5.1.0:
+ resolution: {integrity: sha512-pTgQJ5KC0d2hcY8eyL1IzlBPYjTkyH72XRZPnLyKus2mBfNjQs3klqbJU2VILqZryAZUt9JOb3h/mWMy23/f5A==}
+
+ cross-spawn@7.0.3:
+ resolution: {integrity: sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==}
+ engines: {node: '>= 8'}
+
+ debug@4.1.1:
+ resolution: {integrity: sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==}
+ deprecated: Debug versions >=3.2.0 <3.2.7 || >=4 <4.3.1 have a low-severity ReDos regression when used in a Node.js environment. It is recommended you upgrade to 3.2.7 or 4.3.1. (https://github.com/visionmedia/debug/issues/797)
+ peerDependencies:
+ supports-color: '*'
+ peerDependenciesMeta:
+ supports-color:
+ optional: true
+
+ debug@4.3.7:
+ resolution: {integrity: sha512-Er2nc/H7RrMXZBFCEim6TCmMk02Z8vLC2Rbi1KEBggpo0fS6l0S1nnapwmIi3yW/+GOJap1Krg4w0Hg80oCqgQ==}
+ engines: {node: '>=6.0'}
+ peerDependencies:
+ supports-color: '*'
+ peerDependenciesMeta:
+ supports-color:
+ optional: true
+
+ detect-indent@6.1.0:
+ resolution: {integrity: sha512-reYkTUJAZb9gUuZ2RvVCNhVHdg62RHnJ7WJl8ftMi4diZ6NWlciOzQN88pUhSELEwflJht4oQDv0F0BMlwaYtA==}
+ engines: {node: '>=8'}
+
+ diff@4.0.2:
+ resolution: {integrity: sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==}
+ engines: {node: '>=0.3.1'}
+
+ diff@5.2.0:
+ resolution: {integrity: sha512-uIFDxqpRZGZ6ThOk84hEfqWoHx2devRFvpTZcTHur85vImfaxUbTW9Ryh4CpCuDnToOP1CEtXKIgytHBPVff5A==}
+ engines: {node: '>=0.3.1'}
+
+ dir-glob@3.0.1:
+ resolution: {integrity: sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==}
+ engines: {node: '>=8'}
+
+ eastasianwidth@0.2.0:
+ resolution: {integrity: sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==}
+
+ emoji-regex@10.4.0:
+ resolution: {integrity: sha512-EC+0oUMY1Rqm4O6LLrgjtYDvcVYTy7chDnM4Q7030tP4Kwj3u/pR6gP9ygnp2CJMK5Gq+9Q2oqmrFJAz01DXjw==}
+
+ emoji-regex@8.0.0:
+ resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==}
+
+ emoji-regex@9.2.2:
+ resolution: {integrity: sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==}
+
+ encoding@0.1.13:
+ resolution: {integrity: sha512-ETBauow1T35Y/WZMkio9jiM0Z5xjHHmJ4XmjZOq1l/dXz3lr2sRn87nJy20RupqSh1F2m3HHPSp8ShIPQJrJ3A==}
+
+ enquirer@2.4.1:
+ resolution: {integrity: sha512-rRqJg/6gd538VHvR3PSrdRBb/1Vy2YfzHqzvbhGIQpDRKIa4FgV/54b5Q1xYSxOOwKvjXweS26E0Q+nAMwp2pQ==}
+ engines: {node: '>=8.6'}
+
+ env-paths@2.2.1:
+ resolution: {integrity: sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A==}
+ engines: {node: '>=6'}
+
+ environment@1.1.0:
+ resolution: {integrity: sha512-xUtoPkMggbz0MPyPiIWr1Kp4aeWJjDZ6SMvURhimjdZgsRuDplF5/s9hcgGhyXMhs+6vpnuoiZ2kFiu3FMnS8Q==}
+ engines: {node: '>=18'}
+
+ err-code@2.0.3:
+ resolution: {integrity: sha512-2bmlRpNKBxT/CRmPOlyISQpNj+qSeYvcym/uT0Jx2bMOlKLtSy1ZmLuVxSEKKyor/N5yhvp/ZiG1oE3DEYMSFA==}
+
+ escalade@3.2.0:
+ resolution: {integrity: sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==}
+ engines: {node: '>=6'}
+
+ escape-string-regexp@2.0.0:
+ resolution: {integrity: sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==}
+ engines: {node: '>=8'}
+
+ esprima@4.0.1:
+ resolution: {integrity: sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==}
+ engines: {node: '>=4'}
+ hasBin: true
+
+ events-to-array@2.0.3:
+ resolution: {integrity: sha512-f/qE2gImHRa4Cp2y1stEOSgw8wTFyUdVJX7G//bMwbaV9JqISFxg99NbmVQeP7YLnDUZ2un851jlaDrlpmGehQ==}
+ engines: {node: '>=12'}
+
+ exponential-backoff@3.1.1:
+ resolution: {integrity: sha512-dX7e/LHVJ6W3DE1MHWi9S1EYzDESENfLrYohG2G++ovZrYOkm4Knwa0mc1cn84xJOR4KEU0WSchhLbd0UklbHw==}
+
+ extendable-error@0.1.7:
+ resolution: {integrity: sha512-UOiS2in6/Q0FK0R0q6UY9vYpQ21mr/Qn1KOnte7vsACuNJf514WvCCUHSRCPcgjPT2bAhNIJdlE6bVap1GKmeg==}
+
+ external-editor@3.1.0:
+ resolution: {integrity: sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew==}
+ engines: {node: '>=4'}
+
+ fast-glob@3.3.2:
+ resolution: {integrity: sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==}
+ engines: {node: '>=8.6.0'}
+
+ fastq@1.17.1:
+ resolution: {integrity: sha512-sRVD3lWVIXWg6By68ZN7vho9a1pQcN/WBFaAAsDDFzlJjvoGx0P8z7V1t72grFJfJhu3YPZBuu25f7Kaw2jN1w==}
+
+ fill-range@7.1.1:
+ resolution: {integrity: sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==}
+ engines: {node: '>=8'}
+
+ find-up@4.1.0:
+ resolution: {integrity: sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==}
+ engines: {node: '>=8'}
+
+ find-up@5.0.0:
+ resolution: {integrity: sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==}
+ engines: {node: '>=10'}
+
+ foreground-child@3.3.0:
+ resolution: {integrity: sha512-Ld2g8rrAyMYFXBhEqMz8ZAHBi4J4uS1i/CxGMDnjyFWddMXLVcDp051DZfu+t7+ab7Wv6SMqpWmyFIj5UbfFvg==}
+ engines: {node: '>=14'}
+
+ fromentries@1.3.2:
+ resolution: {integrity: sha512-cHEpEQHUg0f8XdtZCc2ZAhrHzKzT0MrFUTcvx+hfxYu7rGMDc5SKoXFh+n4YigxsHXRzc6OrCshdR1bWH6HHyg==}
+
+ fs-extra@7.0.1:
+ resolution: {integrity: sha512-YJDaCJZEnBmcbw13fvdAM9AwNOJwOzrE4pqMqBq5nFiEqXUqHwlK4B+3pUw6JNvfSPtX05xFHtYy/1ni01eGCw==}
+ engines: {node: '>=6 <7 || >=8'}
+
+ fs-extra@8.1.0:
+ resolution: {integrity: sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==}
+ engines: {node: '>=6 <7 || >=8'}
+
+ fs-minipass@2.1.0:
+ resolution: {integrity: sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg==}
+ engines: {node: '>= 8'}
+
+ fs-minipass@3.0.3:
+ resolution: {integrity: sha512-XUBA9XClHbnJWSfBzjkm6RvPsyg3sryZt06BEQoXcF7EK/xpGaQYJgQKDJSUH5SGZ76Y7pFx1QBnXz09rU5Fbw==}
+ engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0}
+
+ fsevents@2.3.3:
+ resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==}
+ engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0}
+ os: [darwin]
+
+ function-loop@4.0.0:
+ resolution: {integrity: sha512-f34iQBedYF3XcI93uewZZOnyscDragxgTK/eTvVB74k3fCD0ZorOi5BV9GS4M8rz/JoNi0Kl3qX5Y9MH3S/CLQ==}
+
+ get-caller-file@2.0.5:
+ resolution: {integrity: sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==}
+ engines: {node: 6.* || 8.* || >= 10.*}
+
+ get-east-asian-width@1.2.0:
+ resolution: {integrity: sha512-2nk+7SIVb14QrgXFHcm84tD4bKQz0RxPuMT8Ag5KPOq7J5fEmAg0UbXdTOSHqNuHSU28k55qnceesxXRZGzKWA==}
+ engines: {node: '>=18'}
+
+ glob-parent@5.1.2:
+ resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==}
+ engines: {node: '>= 6'}
+
+ glob@10.4.5:
+ resolution: {integrity: sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==}
+ hasBin: true
+
+ glob@11.0.0:
+ resolution: {integrity: sha512-9UiX/Bl6J2yaBbxKoEBRm4Cipxgok8kQYcOPEhScPwebu2I0HoQOuYdIO6S3hLuWoZgpDpwQZMzTFxgpkyT76g==}
+ engines: {node: 20 || >=22}
+ hasBin: true
+
+ globby@11.1.0:
+ resolution: {integrity: sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==}
+ engines: {node: '>=10'}
+
+ graceful-fs@4.2.11:
+ resolution: {integrity: sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==}
+
+ graceful-fs@4.2.3:
+ resolution: {integrity: sha512-a30VEBm4PEdx1dRB7MFK7BejejvCvBronbLjht+sHuGYj8PHs7M/5Z+rt5lw551vZ7yfTCj4Vuyy3mSJytDWRQ==}
+
+ has-flag@4.0.0:
+ resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==}
+ engines: {node: '>=8'}
+
+ hosted-git-info@7.0.2:
+ resolution: {integrity: sha512-puUZAUKT5m8Zzvs72XWy3HtvVbTWljRE66cP60bxJzAqf2DgICo7lYTY2IHUmLnNpjYvw5bvmoHvPc0QO2a62w==}
+ engines: {node: ^16.14.0 || >=18.0.0}
+
+ html-escaper@2.0.1:
+ resolution: {integrity: sha512-hNX23TjWwD3q56HpWjUHOKj1+4KKlnjv9PcmBUYKVpga+2cnb9nDx/B1o0yO4n+RZXZdiNxzx6B24C9aNMTkkQ==}
+
+ http-cache-semantics@4.1.1:
+ resolution: {integrity: sha512-er295DKPVsV82j5kw1Gjt+ADA/XYHsajl82cGNQG2eyoPkvgUhX+nDIyelzhIWbbsXP39EHcI6l5tYs2FYqYXQ==}
+
+ http-proxy-agent@7.0.2:
+ resolution: {integrity: sha512-T1gkAiYYDWYx3V5Bmyu7HcfcvL7mUrTWiM6yOfa3PIphViJ/gFPbvidQ+veqSOHci/PxBcDabeUNCzpOODJZig==}
+ engines: {node: '>= 14'}
+
+ https-proxy-agent@7.0.5:
+ resolution: {integrity: sha512-1e4Wqeblerz+tMKPIq2EMGiiWW1dIjZOksyHWSUm1rmuvw/how9hBHZ38lAGj5ID4Ik6EdkOw7NmWPy6LAwalw==}
+ engines: {node: '>= 14'}
+
+ human-id@1.0.2:
+ resolution: {integrity: sha512-UNopramDEhHJD+VR+ehk8rOslwSfByxPIZyJRfV739NDhN5LF1fa1MqnzKm2lGTQRjNrjK19Q5fhkgIfjlVUKw==}
+
+ iconv-lite@0.4.24:
+ resolution: {integrity: sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==}
+ engines: {node: '>=0.10.0'}
+
+ iconv-lite@0.6.3:
+ resolution: {integrity: sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==}
+ engines: {node: '>=0.10.0'}
+
+ ignore-walk@6.0.5:
+ resolution: {integrity: sha512-VuuG0wCnjhnylG1ABXT3dAuIpTNDs/G8jlpmwXY03fXoXy/8ZK8/T+hMzt8L4WnrLCJgdybqgPagnF/f97cg3A==}
+ engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0}
+
+ ignore@5.3.2:
+ resolution: {integrity: sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==}
+ engines: {node: '>= 4'}
+
+ imurmurhash@0.1.4:
+ resolution: {integrity: sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==}
+ engines: {node: '>=0.8.19'}
+
+ indent-string@4.0.0:
+ resolution: {integrity: sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==}
+ engines: {node: '>=8'}
+
+ indent-string@5.0.0:
+ resolution: {integrity: sha512-m6FAo/spmsW2Ab2fU35JTYwtOKa2yAwXSwgjSv1TJzh4Mh7mC3lzAOVLBprb72XsTrgkEIsl7YrFNAiDiRhIGg==}
+ engines: {node: '>=12'}
+
+ inherits@2.0.4:
+ resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==}
+
+ ini@4.1.3:
+ resolution: {integrity: sha512-X7rqawQBvfdjS10YU1y1YVreA3SsLrW9dX2CewP2EbBJM4ypVNLDkO5y04gejPwKIY9lR+7r9gn3rFPt/kmWFg==}
+ engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0}
+
+ ink@5.0.1:
+ resolution: {integrity: sha512-ae4AW/t8jlkj/6Ou21H2av0wxTk8vrGzXv+v2v7j4in+bl1M5XRMVbfNghzhBokV++FjF8RBDJvYo+ttR9YVRg==}
+ engines: {node: '>=18'}
+ peerDependencies:
+ '@types/react': '>=18.0.0'
+ react: '>=18.0.0'
+ react-devtools-core: ^4.19.1
+ peerDependenciesMeta:
+ '@types/react':
+ optional: true
+ react-devtools-core:
+ optional: true
+
+ ip-address@9.0.5:
+ resolution: {integrity: sha512-zHtQzGojZXTwZTHQqra+ETKd4Sn3vgi7uBmlPoXVWZqYvuKmtI0l/VZTjqGmJY9x88GGOaZ9+G9ES8hC4T4X8g==}
+ engines: {node: '>= 12'}
+
+ is-actual-promise@1.0.2:
+ resolution: {integrity: sha512-xsFiO1of0CLsQnPZ1iXHNTyR9YszOeWKYv+q6n8oSFW3ipooFJ1j1lbRMgiMCr+pp2gLruESI4zb5Ak6eK5OnQ==}
+
+ is-binary-path@2.1.0:
+ resolution: {integrity: sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==}
+ engines: {node: '>=8'}
+
+ is-extglob@2.1.1:
+ resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==}
+ engines: {node: '>=0.10.0'}
+
+ is-fullwidth-code-point@3.0.0:
+ resolution: {integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==}
+ engines: {node: '>=8'}
+
+ is-fullwidth-code-point@4.0.0:
+ resolution: {integrity: sha512-O4L094N2/dZ7xqVdrXhh9r1KODPJpFms8B5sGdJLPy664AgvXsreZUyCQQNItZRDlYug4xStLjNp/sz3HvBowQ==}
+ engines: {node: '>=12'}
+
+ is-fullwidth-code-point@5.0.0:
+ resolution: {integrity: sha512-OVa3u9kkBbw7b8Xw5F9P+D/T9X+Z4+JruYVNapTjPYZYUznQ5YfWeFkOj606XYYW8yugTfC8Pj0hYqvi4ryAhA==}
+ engines: {node: '>=18'}
+
+ is-glob@4.0.1:
+ resolution: {integrity: sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg==}
+ engines: {node: '>=0.10.0'}
+
+ is-in-ci@0.1.0:
+ resolution: {integrity: sha512-d9PXLEY0v1iJ64xLiQMJ51J128EYHAaOR4yZqQi8aHGfw6KgifM3/Viw1oZZ1GCVmb3gBuyhLyHj0HgR2DhSXQ==}
+ engines: {node: '>=18'}
+ hasBin: true
+
+ is-lambda@1.0.1:
+ resolution: {integrity: sha512-z7CMFGNrENq5iFB9Bqo64Xk6Y9sg+epq1myIcdHaGnbMTYOxvzsEtdYqQUylB7LxfkvgrrjP32T6Ywciio9UIQ==}
+
+ is-number@7.0.0:
+ resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==}
+ engines: {node: '>=0.12.0'}
+
+ is-plain-object@5.0.0:
+ resolution: {integrity: sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q==}
+ engines: {node: '>=0.10.0'}
+
+ is-subdir@1.2.0:
+ resolution: {integrity: sha512-2AT6j+gXe/1ueqbW6fLZJiIw3F8iXGJtt0yDrZaBhAZEG1raiTxKWU+IPqMCzQAXOUCKdA4UDMgacKH25XG2Cw==}
+ engines: {node: '>=4'}
+
+ is-windows@1.0.2:
+ resolution: {integrity: sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==}
+ engines: {node: '>=0.10.0'}
+
+ isarray@1.0.0:
+ resolution: {integrity: sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==}
+
+ isexe@2.0.0:
+ resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==}
+
+ isexe@3.1.1:
+ resolution: {integrity: sha512-LpB/54B+/2J5hqQ7imZHfdU31OlgQqx7ZicVlkm9kzg9/w8GKLEcFfJl/t7DCEDueOyBAD6zCCwTO6Fzs0NoEQ==}
+ engines: {node: '>=16'}
+
+ istanbul-lib-coverage@3.2.2:
+ resolution: {integrity: sha512-O8dpsF+r0WV/8MNRKfnmrtCWhuKjxrq2w+jpzBL5UZKTi2LeVWnWOmWRxFlesJONmc+wLAGvKQZEOanko0LFTg==}
+ engines: {node: '>=8'}
+
+ istanbul-lib-report@3.0.1:
+ resolution: {integrity: sha512-GCfE1mtsHGOELCU8e/Z7YWzpmybrx/+dSTfLrvY8qRmaY6zXTKWn6WQIjaAFw069icm6GVMNkgu0NzI4iPZUNw==}
+ engines: {node: '>=10'}
+
+ istanbul-reports@3.1.7:
+ resolution: {integrity: sha512-BewmUXImeuRk2YY0PVbxgKAysvhRPUQE0h5QRM++nVWyubKGV0l8qQ5op8+B2DOmwSe63Jivj0BjkPQVf8fP5g==}
+ engines: {node: '>=8'}
+
+ jackspeak@3.4.3:
+ resolution: {integrity: sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==}
+
+ jackspeak@4.0.1:
+ resolution: {integrity: sha512-cub8rahkh0Q/bw1+GxP7aeSe29hHHn2V4m29nnDlvCdlgU+3UGxkZp7Z53jLUdpX3jdTO0nJZUDl3xvbWc2Xog==}
+ engines: {node: 20 || >=22}
+
+ js-tokens@4.0.0:
+ resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==}
+
+ js-yaml@3.13.1:
+ resolution: {integrity: sha512-YfbcO7jXDdyj0DGxYVSlSeQNHbD7XPWvrVWeVUujrQEoZzWJIRrCPoyk6kL6IAjAG2IolMK4T0hNUe0HOUs5Jw==}
+ hasBin: true
+
+ jsbn@1.1.0:
+ resolution: {integrity: sha512-4bYVV3aAMtDTTu4+xsDYa6sy9GyJ69/amsu9sYF2zqjiEoZA5xJi3BrfX3uY+/IekIu7MwdObdbDWpoZdBv3/A==}
+
+ json-parse-even-better-errors@3.0.2:
+ resolution: {integrity: sha512-fi0NG4bPjCHunUJffmLd0gxssIgkNmArMvis4iNah6Owg1MCJjWhEcDLmsK6iGkJq3tHwbDkTlce70/tmXN4cQ==}
+ engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0}
+
+ jsonfile@4.0.0:
+ resolution: {integrity: sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==}
+
+ jsonparse@1.3.1:
+ resolution: {integrity: sha512-POQXvpdL69+CluYsillJ7SUhKvytYjW9vG/GKpnf+xP8UWgYEM/RaMzHHofbALDiKbbP1W8UEYmgGl39WkPZsg==}
+ engines: {'0': node >= 0.2.0}
+
+ locate-path@5.0.0:
+ resolution: {integrity: sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==}
+ engines: {node: '>=8'}
+
+ locate-path@6.0.0:
+ resolution: {integrity: sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==}
+ engines: {node: '>=10'}
+
+ lodash.startcase@4.4.0:
+ resolution: {integrity: sha512-+WKqsK294HMSc2jEbNgpHpd0JfIBhp7rEV4aqXWqFr6AlXov+SlcgB1Fv01y2kGe3Gc8nMW7VA0SrGuSkRfIEg==}
+
+ lodash@4.17.21:
+ resolution: {integrity: sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==}
+
+ loose-envify@1.4.0:
+ resolution: {integrity: sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==}
+ hasBin: true
+
+ lru-cache@10.4.3:
+ resolution: {integrity: sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==}
+
+ lru-cache@11.0.1:
+ resolution: {integrity: sha512-CgeuL5uom6j/ZVrg7G/+1IXqRY8JXX4Hghfy5YE0EhoYQWvndP1kufu58cmZLNIDKnRhZrXfdS9urVWx98AipQ==}
+ engines: {node: 20 || >=22}
+
+ lru-cache@4.1.5:
+ resolution: {integrity: sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g==}
+
+ make-dir@4.0.0:
+ resolution: {integrity: sha512-hXdUTZYIVOt1Ex//jAQi+wTZZpUpwBj/0QsOzqegb3rGMMeJiSEu5xLHnYfBrRV4RH2+OCSOO95Is/7x1WJ4bw==}
+ engines: {node: '>=10'}
+
+ make-error@1.3.6:
+ resolution: {integrity: sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==}
+
+ make-fetch-happen@13.0.1:
+ resolution: {integrity: sha512-cKTUFc/rbKUd/9meOvgrpJ2WrNzymt6jfRDdwg5UCnVzv9dTpEj9JS5m3wtziXVCjluIXyL8pcaukYqezIzZQA==}
+ engines: {node: ^16.14.0 || >=18.0.0}
+
+ merge2@1.4.1:
+ resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==}
+ engines: {node: '>= 8'}
+
+ micromatch@4.0.8:
+ resolution: {integrity: sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==}
+ engines: {node: '>=8.6'}
+
+ mimic-fn@2.1.0:
+ resolution: {integrity: sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==}
+ engines: {node: '>=6'}
+
+ minimatch@10.0.1:
+ resolution: {integrity: sha512-ethXTt3SGGR+95gudmqJ1eNhRO7eGEGIgYA9vnPatK4/etz2MEVDno5GMCibdMTuBMyElzIlgxMna3K94XDIDQ==}
+ engines: {node: 20 || >=22}
+
+ minimatch@9.0.5:
+ resolution: {integrity: sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==}
+ engines: {node: '>=16 || 14 >=14.17'}
+
+ minipass-collect@2.0.1:
+ resolution: {integrity: sha512-D7V8PO9oaz7PWGLbCACuI1qEOsq7UKfLotx/C0Aet43fCUB/wfQ7DYeq2oR/svFJGYDHPr38SHATeaj/ZoKHKw==}
+ engines: {node: '>=16 || 14 >=14.17'}
+
+ minipass-fetch@3.0.5:
+ resolution: {integrity: sha512-2N8elDQAtSnFV0Dk7gt15KHsS0Fyz6CbYZ360h0WTYV1Ty46li3rAXVOQj1THMNLdmrD9Vt5pBPtWtVkpwGBqg==}
+ engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0}
+
+ minipass-flush@1.0.5:
+ resolution: {integrity: sha512-JmQSYYpPUqX5Jyn1mXaRwOda1uQ8HP5KAT/oDSLCzt1BYRhQU0/hDtsB1ufZfEEzMZ9aAVmsBw8+FWsIXlClWw==}
+ engines: {node: '>= 8'}
+
+ minipass-pipeline@1.2.4:
+ resolution: {integrity: sha512-xuIq7cIOt09RPRJ19gdi4b+RiNvDFYe5JH+ggNvBqGqpQXcru3PcRmOZuHBKWK1Txf9+cQ+HMVN4d6z46LZP7A==}
+ engines: {node: '>=8'}
+
+ minipass-sized@1.0.3:
+ resolution: {integrity: sha512-MbkQQ2CTiBMlA2Dm/5cY+9SWFEN8pzzOXi6rlM5Xxq0Yqbda5ZQy9sU75a673FE9ZK0Zsbr6Y5iP6u9nktfg2g==}
+ engines: {node: '>=8'}
+
+ minipass@3.1.1:
+ resolution: {integrity: sha512-UFqVihv6PQgwj8/yTGvl9kPz7xIAY+R5z6XYjRInD3Gk3qx6QGSD6zEcpeG4Dy/lQnv1J6zv8ejV90hyYIKf3w==}
+ engines: {node: '>=8'}
+
+ minipass@5.0.0:
+ resolution: {integrity: sha512-3FnjYuehv9k6ovOEbyOswadCDPX1piCfhV8ncmYtHOjuPwylVWsghTLo7rabjC3Rx5xD4HDx8Wm1xnMF7S5qFQ==}
+ engines: {node: '>=8'}
+
+ minipass@7.1.2:
+ resolution: {integrity: sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==}
+ engines: {node: '>=16 || 14 >=14.17'}
+
+ minizlib@2.1.2:
+ resolution: {integrity: sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg==}
+ engines: {node: '>= 8'}
+
+ mkdirp@1.0.4:
+ resolution: {integrity: sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==}
+ engines: {node: '>=10'}
+ hasBin: true
+
+ mkdirp@3.0.1:
+ resolution: {integrity: sha512-+NsyUUAZDmo6YVHzL/stxSu3t9YS1iljliy3BSDrXJ/dkn1KYdmtZODGGjLcc9XLgVVpH4KshHB8XmZgMhaBXg==}
+ engines: {node: '>=10'}
+ hasBin: true
+
+ mri@1.2.0:
+ resolution: {integrity: sha512-tzzskb3bG8LvYGFF/mDTpq3jpI6Q9wc3LEmBaghu+DdCssd1FakN7Bc0hVNmEyGq1bq3RgfkCb3cmQLpNPOroA==}
+ engines: {node: '>=4'}
+
+ ms@2.1.2:
+ resolution: {integrity: sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==}
+
+ ms@2.1.3:
+ resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==}
+
+ negotiator@0.6.3:
+ resolution: {integrity: sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==}
+ engines: {node: '>= 0.6'}
+
+ node-gyp@10.2.0:
+ resolution: {integrity: sha512-sp3FonBAaFe4aYTcFdZUn2NYkbP7xroPGYvQmP4Nl5PxamznItBnNCgjrVTKrEfQynInMsJvZrdmqUnysCJ8rw==}
+ engines: {node: ^16.14.0 || >=18.0.0}
+ hasBin: true
+
+ nopt@7.2.1:
+ resolution: {integrity: sha512-taM24ViiimT/XntxbPyJQzCG+p4EKOpgD3mxFwW38mGjVUrfERQOeY4EDHjdnptttfHuHQXFx+lTP08Q+mLa/w==}
+ engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0}
+ hasBin: true
+
+ normalize-package-data@6.0.2:
+ resolution: {integrity: sha512-V6gygoYb/5EmNI+MEGrWkC+e6+Rr7mTmfHrxDbLzxQogBkgzo76rkok0Am6thgSF7Mv2nLOajAJj5vDJZEFn7g==}
+ engines: {node: ^16.14.0 || >=18.0.0}
+
+ normalize-path@3.0.0:
+ resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==}
+ engines: {node: '>=0.10.0'}
+
+ npm-bundled@3.0.1:
+ resolution: {integrity: sha512-+AvaheE/ww1JEwRHOrn4WHNzOxGtVp+adrg2AeZS/7KuxGUYFuBta98wYpfHBbJp6Tg6j1NKSEVHNcfZzJHQwQ==}
+ engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0}
+
+ npm-install-checks@6.3.0:
+ resolution: {integrity: sha512-W29RiK/xtpCGqn6f3ixfRYGk+zRyr+Ew9F2E20BfXxT5/euLdA/Nm7fO7OeTGuAmTs30cpgInyJ0cYe708YTZw==}
+ engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0}
+
+ npm-normalize-package-bin@3.0.1:
+ resolution: {integrity: sha512-dMxCf+zZ+3zeQZXKxmyuCKlIDPGuv8EF940xbkC4kQVDTtqoh6rJFO+JTKSA6/Rwi0getWmtuy4Itup0AMcaDQ==}
+ engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0}
+
+ npm-package-arg@11.0.3:
+ resolution: {integrity: sha512-sHGJy8sOC1YraBywpzQlIKBE4pBbGbiF95U6Auspzyem956E0+FtDtsx1ZxlOJkQCZ1AFXAY/yuvtFYrOxF+Bw==}
+ engines: {node: ^16.14.0 || >=18.0.0}
+
+ npm-packlist@8.0.2:
+ resolution: {integrity: sha512-shYrPFIS/JLP4oQmAwDyk5HcyysKW8/JLTEA32S0Z5TzvpaeeX2yMFfoK1fjEBnCBvVyIB/Jj/GBFdm0wsgzbA==}
+ engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0}
+
+ npm-pick-manifest@9.1.0:
+ resolution: {integrity: sha512-nkc+3pIIhqHVQr085X9d2JzPzLyjzQS96zbruppqC9aZRm/x8xx6xhI98gHtsfELP2bE+loHq8ZaHFHhe+NauA==}
+ engines: {node: ^16.14.0 || >=18.0.0}
+
+ npm-registry-fetch@17.1.0:
+ resolution: {integrity: sha512-5+bKQRH0J1xG1uZ1zMNvxW0VEyoNWgJpY9UDuluPFLKDfJ9u2JmmjmTJV1srBGQOROfdBMiVvnH2Zvpbm+xkVA==}
+ engines: {node: ^16.14.0 || >=18.0.0}
+
+ onetime@5.1.2:
+ resolution: {integrity: sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==}
+ engines: {node: '>=6'}
+
+ opener@1.5.2:
+ resolution: {integrity: sha512-ur5UIdyw5Y7yEj9wLzhqXiy6GZ3Mwx0yGI+5sMn2r0N0v3cKJvUmFH5yPP+WXh9e0xfyzyJX95D8l088DNFj7A==}
+ hasBin: true
+
+ os-tmpdir@1.0.2:
+ resolution: {integrity: sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g==}
+ engines: {node: '>=0.10.0'}
+
+ outdent@0.5.0:
+ resolution: {integrity: sha512-/jHxFIzoMXdqPzTaCpFzAAWhpkSjZPF4Vsn6jAfNpmbH/ymsmd7Qc6VE9BGn0L6YMj6uwpQLxCECpus4ukKS9Q==}
+
+ p-filter@2.1.0:
+ resolution: {integrity: sha512-ZBxxZ5sL2HghephhpGAQdoskxplTwr7ICaehZwLIlfL6acuVgZPm8yBNuRAFBGEqtD/hmUeq9eqLg2ys9Xr/yw==}
+ engines: {node: '>=8'}
+
+ p-limit@2.2.2:
+ resolution: {integrity: sha512-WGR+xHecKTr7EbUEhyLSh5Dube9JtdiG78ufaeLxTgpudf/20KqyMioIUZJAezlTIi6evxuoUs9YXc11cU+yzQ==}
+ engines: {node: '>=6'}
+
+ p-limit@3.1.0:
+ resolution: {integrity: sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==}
+ engines: {node: '>=10'}
+
+ p-locate@4.1.0:
+ resolution: {integrity: sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==}
+ engines: {node: '>=8'}
+
+ p-locate@5.0.0:
+ resolution: {integrity: sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==}
+ engines: {node: '>=10'}
+
+ p-map@2.1.0:
+ resolution: {integrity: sha512-y3b8Kpd8OAN444hxfBbFfj1FY/RjtTd8tzYwhUqNYXx0fXx2iX4maP4Qr6qhIKbQXI02wTLAda4fYUbDagTUFw==}
+ engines: {node: '>=6'}
+
+ p-map@4.0.0:
+ resolution: {integrity: sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==}
+ engines: {node: '>=10'}
+
+ p-try@2.2.0:
+ resolution: {integrity: sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==}
+ engines: {node: '>=6'}
+
+ package-json-from-dist@1.0.0:
+ resolution: {integrity: sha512-dATvCeZN/8wQsGywez1mzHtTlP22H8OEfPrVMLNr4/eGa+ijtLn/6M5f0dY8UKNrC2O9UCU6SSoG3qRKnt7STw==}
+
+ package-manager-detector@0.2.0:
+ resolution: {integrity: sha512-E385OSk9qDcXhcM9LNSe4sdhx8a9mAPrZ4sMLW+tmxl5ZuGtPUcdFu+MPP2jbgiWAZ6Pfe5soGFMd+0Db5Vrog==}
+
+ pacote@18.0.6:
+ resolution: {integrity: sha512-+eK3G27SMwsB8kLIuj4h1FUhHtwiEUo21Tw8wNjmvdlpOEr613edv+8FUsTj/4F/VN5ywGE19X18N7CC2EJk6A==}
+ engines: {node: ^16.14.0 || >=18.0.0}
+ hasBin: true
+
+ patch-console@2.0.0:
+ resolution: {integrity: sha512-0YNdUceMdaQwoKce1gatDScmMo5pu/tfABfnzEqeG0gtTmd7mh/WcwgUjtAeOU7N8nFFlbQBnFK2gXW5fGvmMA==}
+ engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0}
+
+ path-exists@4.0.0:
+ resolution: {integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==}
+ engines: {node: '>=8'}
+
+ path-key@3.1.1:
+ resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==}
+ engines: {node: '>=8'}
+
+ path-scurry@1.11.1:
+ resolution: {integrity: sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==}
+ engines: {node: '>=16 || 14 >=14.18'}
+
+ path-scurry@2.0.0:
+ resolution: {integrity: sha512-ypGJsmGtdXUOeM5u93TyeIEfEhM6s+ljAhrk5vAvSx8uyY/02OvrZnA0YNGUrPXfpJMgI1ODd3nwz8Npx4O4cg==}
+ engines: {node: 20 || >=22}
+
+ path-type@4.0.0:
+ resolution: {integrity: sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==}
+ engines: {node: '>=8'}
+
+ picocolors@1.1.0:
+ resolution: {integrity: sha512-TQ92mBOW0l3LeMeyLV6mzy/kWr8lkd/hp3mTg7wYK7zJhuBStmGMBG0BdeDZS/dZx1IukaX6Bk11zcln25o1Aw==}
+
+ picomatch@2.3.1:
+ resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==}
+ engines: {node: '>=8.6'}
+
+ pify@4.0.1:
+ resolution: {integrity: sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==}
+ engines: {node: '>=6'}
+
+ pirates@4.0.6:
+ resolution: {integrity: sha512-saLsH7WeYYPiD25LDuLRRY/i+6HaPYr6G1OUlN39otzkSTxKnubR9RTxS3/Kk50s1g2JTgFwWQDQyplC5/SHZg==}
+ engines: {node: '>= 6'}
+
+ polite-json@5.0.0:
+ resolution: {integrity: sha512-OLS/0XeUAcE8a2fdwemNja+udKgXNnY6yKVIXqAD2zVRx1KvY6Ato/rZ2vdzbxqYwPW0u6SCNC/bAMPNzpzxbw==}
+ engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0}
+
+ prettier@2.8.8:
+ resolution: {integrity: sha512-tdN8qQGvNjw4CHbY+XXk0JgCXn9QiF21a55rBe5LJAU+kDyC4WQn4+awm2Xfk2lQMk5fKup9XgzTZtGkjBdP9Q==}
+ engines: {node: '>=10.13.0'}
+ hasBin: true
+
+ prismjs-terminal@1.2.3:
+ resolution: {integrity: sha512-xc0zuJ5FMqvW+DpiRkvxURlz98DdfDsZcFHdO699+oL+ykbFfgI7O4VDEgUyc07BSL2NHl3zdb8m/tZ/aaqUrw==}
+ engines: {node: '>=16'}
+
+ prismjs@1.29.0:
+ resolution: {integrity: sha512-Kx/1w86q/epKcmte75LNrEoT+lX8pBpavuAbvJWRXar7Hz8jrtF+e3vY751p0R8H9HdArwaCTNDDzHg/ScJK1Q==}
+ engines: {node: '>=6'}
+
+ proc-log@4.2.0:
+ resolution: {integrity: sha512-g8+OnU/L2v+wyiVK+D5fA34J7EH8jZ8DDlvwhRCMxmMj7UCBvxiO1mGeN+36JXIKF4zevU4kRBd8lVgG9vLelA==}
+ engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0}
+
+ process-nextick-args@2.0.1:
+ resolution: {integrity: sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==}
+
+ process-on-spawn@1.0.0:
+ resolution: {integrity: sha512-1WsPDsUSMmZH5LeMLegqkPDrsGgsWwk1Exipy2hvB0o/F0ASzbpIctSCcZIK1ykJvtTJULEH+20WOFjMvGnCTg==}
+ engines: {node: '>=8'}
+
+ promise-inflight@1.0.1:
+ resolution: {integrity: sha512-6zWPyEOFaQBJYcGMHBKTKJ3u6TBsnMFOIZSa6ce1e/ZrrsOlnHRHbabMjLiBYKp+n44X9eUI6VUPaukCXHuG4g==}
+ peerDependencies:
+ bluebird: '*'
+ peerDependenciesMeta:
+ bluebird:
+ optional: true
+
+ promise-retry@2.0.1:
+ resolution: {integrity: sha512-y+WKFlBR8BGXnsNlIHFGPZmyDf3DFMoLhaflAnyZgV6rG6xu+JwesTo2Q9R6XwYmtmwAFCkAk3e35jEdoeh/3g==}
+ engines: {node: '>=10'}
+
+ pseudomap@1.0.2:
+ resolution: {integrity: sha512-b/YwNhb8lk1Zz2+bXXpS/LK9OisiZZ1SNsSLxN1x2OXVEhW2Ckr/7mWE5vrC1ZTiJlD9g19jWszTmJsB+oEpFQ==}
+
+ queue-microtask@1.2.3:
+ resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==}
+
+ react-dom@18.3.1:
+ resolution: {integrity: sha512-5m4nQKp+rZRb09LNH59GM4BxTh9251/ylbKIbpe7TpGxfJ+9kv6BLkLBXIjjspbgbnIBNqlI23tRnTWT0snUIw==}
+ peerDependencies:
+ react: ^18.3.1
+
+ react-element-to-jsx-string@15.0.0:
+ resolution: {integrity: sha512-UDg4lXB6BzlobN60P8fHWVPX3Kyw8ORrTeBtClmIlGdkOOE+GYQSFvmEU5iLLpwp/6v42DINwNcwOhOLfQ//FQ==}
+ peerDependencies:
+ react: ^0.14.8 || ^15.0.1 || ^16.0.0 || ^17.0.1 || ^18.0.0
+ react-dom: ^0.14.8 || ^15.0.1 || ^16.0.0 || ^17.0.1 || ^18.0.0
+
+ react-is@18.1.0:
+ resolution: {integrity: sha512-Fl7FuabXsJnV5Q1qIOQwx/sagGF18kogb4gpfcG4gjLBWO0WDiiz1ko/ExayuxE7InyQkBLkxRFG5oxY6Uu3Kg==}
+
+ react-reconciler@0.29.2:
+ resolution: {integrity: sha512-zZQqIiYgDCTP/f1N/mAR10nJGrPD2ZR+jDSEsKWJHYC7Cm2wodlwbR3upZRdC3cjIjSlTLNVyO7Iu0Yy7t2AYg==}
+ engines: {node: '>=0.10.0'}
+ peerDependencies:
+ react: ^18.3.1
+
+ react@18.3.1:
+ resolution: {integrity: sha512-wS+hAgJShR0KhEvPJArfuPVN1+Hz1t0Y6n5jLrGQbkb4urgPE/0Rve+1kMB1v/oWgHgm4WIcV+i7F2pTVj+2iQ==}
+ engines: {node: '>=0.10.0'}
+
+ read-yaml-file@1.1.0:
+ resolution: {integrity: sha512-VIMnQi/Z4HT2Fxuwg5KrY174U1VdUIASQVWXXyqtNRtxSr9IYkn1rsI6Tb6HsrHCmB7gVpNwX6JxPTHcH6IoTA==}
+ engines: {node: '>=6'}
+
+ readable-stream@2.3.7:
+ resolution: {integrity: sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==}
+
+ readdirp@3.6.0:
+ resolution: {integrity: sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==}
+ engines: {node: '>=8.10.0'}
+
+ regenerator-runtime@0.13.5:
+ resolution: {integrity: sha512-ZS5w8CpKFinUzOwW3c83oPeVXoNsrLsaCoLtJvAClH135j/R77RuymhiSErhm2lKcwSCIpmvIWSbDkIfAqKQlA==}
+
+ require-directory@2.1.1:
+ resolution: {integrity: sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==}
+ engines: {node: '>=0.10.0'}
+
+ resolve-from@5.0.0:
+ resolution: {integrity: sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==}
+ engines: {node: '>=8'}
+
+ resolve-import@2.0.0:
+ resolution: {integrity: sha512-jpKjLibLuc8D1XEV2+7zb0aqN7I8d12u89g/v6IsgCzdVlccMQJq4TKkPw5fbhHdxhm7nbVtN+KvOTnjFf+nEA==}
+ engines: {node: 20 || >=22}
+
+ restore-cursor@4.0.0:
+ resolution: {integrity: sha512-I9fPXU9geO9bHOt9pHHOhOkYerIMsmVaWB0rA2AI9ERh/+x/i7MV5HKBNrg+ljO5eoPVgCcnFuRjJ9uH6I/3eg==}
+ engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0}
+
+ retry@0.12.0:
+ resolution: {integrity: sha512-9LkiTwjUh6rT555DtE9rTX+BKByPfrMzEAtnlEtdEwr3Nkffwiihqe2bWADg+OQRjt9gl6ICdmB/ZFDCGAtSow==}
+ engines: {node: '>= 4'}
+
+ reusify@1.0.4:
+ resolution: {integrity: sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==}
+ engines: {iojs: '>=1.0.0', node: '>=0.10.0'}
+
+ rimraf@6.0.1:
+ resolution: {integrity: sha512-9dkvaxAsk/xNXSJzMgFqqMCuFgt2+KsOFek3TMLfo8NCPfWpBmqwyNn5Y+NX56QUYfCtsyhF3ayiboEoUmJk/A==}
+ engines: {node: 20 || >=22}
+ hasBin: true
+
+ run-parallel@1.2.0:
+ resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==}
+
+ safe-buffer@5.1.2:
+ resolution: {integrity: sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==}
+
+ safe-buffer@5.2.1:
+ resolution: {integrity: sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==}
+
+ safer-buffer@2.1.2:
+ resolution: {integrity: sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==}
+
+ scheduler@0.23.2:
+ resolution: {integrity: sha512-UOShsPwz7NrMUqhR6t0hWjFduvOzbtv7toDH1/hIrfRNIDBnnBWd0CwJTGvTpngVlmwGCdP9/Zl/tVrDqcuYzQ==}
+
+ semver@7.6.3:
+ resolution: {integrity: sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==}
+ engines: {node: '>=10'}
+ hasBin: true
+
+ shebang-command@1.2.0:
+ resolution: {integrity: sha512-EV3L1+UQWGor21OmnvojK36mhg+TyIKDh3iFBKBohr5xeXIhNBcx8oWdgkTEEQ+BEFFYdLRuqMfd5L84N1V5Vg==}
+ engines: {node: '>=0.10.0'}
+
+ shebang-command@2.0.0:
+ resolution: {integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==}
+ engines: {node: '>=8'}
+
+ shebang-regex@1.0.0:
+ resolution: {integrity: sha512-wpoSFAxys6b2a2wHZ1XpDSgD7N9iVjg29Ph9uV/uaP9Ex/KXlkTZTeddxDPSYQpgvzKLGJke2UU0AzoGCjNIvQ==}
+ engines: {node: '>=0.10.0'}
+
+ shebang-regex@3.0.0:
+ resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==}
+ engines: {node: '>=8'}
+
+ signal-exit@3.0.2:
+ resolution: {integrity: sha512-meQNNykwecVxdu1RlYMKpQx4+wefIYpmxi6gexo/KAbwquJrBUrBmKYJrE8KFkVQAAVWEnwNdu21PgrD77J3xA==}
+
+ signal-exit@3.0.7:
+ resolution: {integrity: sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==}
+
+ signal-exit@4.1.0:
+ resolution: {integrity: sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==}
+ engines: {node: '>=14'}
+
+ sigstore@2.3.1:
+ resolution: {integrity: sha512-8G+/XDU8wNsJOQS5ysDVO0Etg9/2uA5gR9l4ZwijjlwxBcrU6RPfwi2+jJmbP+Ap1Hlp/nVAaEO4Fj22/SL2gQ==}
+ engines: {node: ^16.14.0 || >=18.0.0}
+
+ slash@3.0.0:
+ resolution: {integrity: sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==}
+ engines: {node: '>=8'}
+
+ slice-ansi@5.0.0:
+ resolution: {integrity: sha512-FC+lgizVPfie0kkhqUScwRu1O/lF6NOgJmlCgK+/LYxDCTk8sGelYaHDhFcDN+Sn3Cv+3VSa4Byeo+IMCzpMgQ==}
+ engines: {node: '>=12'}
+
+ slice-ansi@7.1.0:
+ resolution: {integrity: sha512-bSiSngZ/jWeX93BqeIAbImyTbEihizcwNjFoRUIY/T1wWQsfsm2Vw1agPKylXvQTU7iASGdHhyqRlqQzfz+Htg==}
+ engines: {node: '>=18'}
+
+ smart-buffer@4.2.0:
+ resolution: {integrity: sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg==}
+ engines: {node: '>= 6.0.0', npm: '>= 3.0.0'}
+
+ socks-proxy-agent@8.0.4:
+ resolution: {integrity: sha512-GNAq/eg8Udq2x0eNiFkr9gRg5bA7PXEWagQdeRX4cPSG+X/8V38v637gim9bjFptMk1QWsCTr0ttrJEiXbNnRw==}
+ engines: {node: '>= 14'}
+
+ socks@2.8.3:
+ resolution: {integrity: sha512-l5x7VUUWbjVFbafGLxPWkYsHIhEvmF85tbIeFZWc8ZPtoMyybuEhL7Jye/ooC4/d48FgOjSJXgsF/AJPYCW8Zw==}
+ engines: {node: '>= 10.0.0', npm: '>= 3.0.0'}
+
+ spawndamnit@2.0.0:
+ resolution: {integrity: sha512-j4JKEcncSjFlqIwU5L/rp2N5SIPsdxaRsIv678+TZxZ0SRDJTm8JrxJMjE/XuiEZNEir3S8l0Fa3Ke339WI4qA==}
+
+ spdx-correct@3.1.0:
+ resolution: {integrity: sha512-lr2EZCctC2BNR7j7WzJ2FpDznxky1sjfxvvYEyzxNyb6lZXHODmEoJeFu4JupYlkfha1KZpJyoqiJ7pgA1qq8Q==}
+
+ spdx-exceptions@2.2.0:
+ resolution: {integrity: sha512-2XQACfElKi9SlVb1CYadKDXvoajPgBVPn/gOQLrTvHdElaVhr7ZEbqJaRnJLVNeaI4cMEAgVCeBMKF6MWRDCRA==}
+
+ spdx-expression-parse@3.0.0:
+ resolution: {integrity: sha512-Yg6D3XpRD4kkOmTpdgbUiEJFKghJH03fiC1OPll5h/0sO6neh2jqRDVHOQ4o/LMea0tgCkbMgea5ip/e+MkWyg==}
+
+ spdx-license-ids@3.0.5:
+ resolution: {integrity: sha512-J+FWzZoynJEXGphVIS+XEh3kFSjZX/1i9gFBaWQcB+/tmpe2qUsSBABpcxqxnAxFdiUFEgAX1bjYGQvIZmoz9Q==}
+
+ sprintf-js@1.0.3:
+ resolution: {integrity: sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==}
+
+ sprintf-js@1.1.3:
+ resolution: {integrity: sha512-Oo+0REFV59/rz3gfJNKQiBlwfHaSESl1pcGyABQsnnIfWOFt6JNj5gCog2U6MLZ//IGYD+nA8nI+mTShREReaA==}
+
+ sqlstring@2.3.3:
+ resolution: {integrity: sha512-qC9iz2FlN7DQl3+wjwn3802RTyjCx7sDvfQEXchwa6CWOx07/WVfh91gBmQ9fahw8snwGEWU3xGzOt4tFyHLxg==}
+ engines: {node: '>= 0.6'}
+
+ ssri@10.0.6:
+ resolution: {integrity: sha512-MGrFH9Z4NP9Iyhqn16sDtBpRRNJ0Y2hNa6D65h736fVSaPCHr4DM4sWUNvVaSuC+0OBGhwsrydQwmgfg5LncqQ==}
+ engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0}
+
+ stack-utils@2.0.6:
+ resolution: {integrity: sha512-XlkWvfIm6RmsWtNJx+uqtKLS8eqFbxUg0ZzLXqY0caEy9l7hruX8IpiDnjsLavoBgqCCR71TqWO8MaXYheJ3RQ==}
+ engines: {node: '>=10'}
+
+ string-length@6.0.0:
+ resolution: {integrity: sha512-1U361pxZHEQ+FeSjzqRpV+cu2vTzYeWeafXFLykiFlv4Vc0n3njgU8HrMbyik5uwm77naWMuVG8fhEF+Ovb1Kg==}
+ engines: {node: '>=16'}
+
+ string-width@4.2.3:
+ resolution: {integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==}
+ engines: {node: '>=8'}
+
+ string-width@5.1.2:
+ resolution: {integrity: sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==}
+ engines: {node: '>=12'}
+
+ string-width@7.2.0:
+ resolution: {integrity: sha512-tsaTIkKW9b4N+AEj+SVA+WhJzV7/zMhcSu78mLKWSk7cXMOSHsBKFWUs0fWwq8QyK3MgJBQRX6Gbi4kYbdvGkQ==}
+ engines: {node: '>=18'}
+
+ string_decoder@1.1.1:
+ resolution: {integrity: sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==}
+
+ strip-ansi@6.0.1:
+ resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==}
+ engines: {node: '>=8'}
+
+ strip-ansi@7.1.0:
+ resolution: {integrity: sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==}
+ engines: {node: '>=12'}
+
+ strip-bom@3.0.0:
+ resolution: {integrity: sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==}
+ engines: {node: '>=4'}
+
+ supports-color@7.2.0:
+ resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==}
+ engines: {node: '>=8'}
+
+ sync-content@2.0.1:
+ resolution: {integrity: sha512-NI1mo514yFhr8pV/5Etvgh+pSBUIpoAKoiBIUwALVlQQNAwb40bTw8hhPFaip/dvv0GhpHVOq0vq8iY02ppLTg==}
+ engines: {node: 20 || >=22}
+ hasBin: true
+
+ tap-parser@18.0.0:
+ resolution: {integrity: sha512-RM3Lp5LNCYcepRqPMuDFg8S3uYV8MDmgxUOjx2Q7f2z5QuB88u92ViBwyp3MuQ/DVMR7v48HrJfV2scXRQYf5A==}
+ engines: {node: 20 || >=22}
+ hasBin: true
+
+ tap-yaml@4.0.0:
+ resolution: {integrity: sha512-CjMbq8hhT5TvzyvHRnzbGp00wmb4TZjSscCRCCJCdCzRb+Pb56HaMlBHNBn1/GZ6UqwUgDKdF18+9VAFnQ4F0g==}
+ engines: {node: 20 || >=22}
+
+ tap@21.0.1:
+ resolution: {integrity: sha512-FE8H5Nt2mKU96DX4XgjqBkKzMcxvVkmbKhaNWOk2lUNRpqJNKqBOO5R6q7shr7JoUh1DHwdNWmppg8vWXQh2lQ==}
+ engines: {node: 20 || >=22}
+ hasBin: true
+
+ tar@6.2.1:
+ resolution: {integrity: sha512-DZ4yORTwrbTj/7MZYq2w+/ZFdI6OZ/f9SFHR+71gIVUZhOQPHzVCLpvRnPgyaMpfWxxk/4ONva3GQSyNIKRv6A==}
+ engines: {node: '>=10'}
+
+ tcompare@9.0.0:
+ resolution: {integrity: sha512-qOliew2xDAqIUbIamIFZ+pz80s9T+8IywzQPIt7YX30ojsBqk86jcD6ouygqt5lHURTxFxWjzbUmIe7Cts4bsA==}
+ engines: {node: 20 || >=22}
+
+ term-size@2.2.1:
+ resolution: {integrity: sha512-wK0Ri4fOGjv/XPy8SBHZChl8CM7uMc5VML7SqiQ0zG7+J5Vr+RMQDoHa2CNT6KHUnTGIXH34UDMkPzAUyapBZg==}
+ engines: {node: '>=8'}
+
+ test-exclude@7.0.1:
+ resolution: {integrity: sha512-pFYqmTw68LXVjeWJMST4+borgQP2AyMNbg1BpZh9LbyhUeNkeaPF9gzfPGUAnSMV3qPYdWUwDIjjCLiSDOl7vg==}
+ engines: {node: '>=18'}
+
+ tmp@0.0.33:
+ resolution: {integrity: sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==}
+ engines: {node: '>=0.6.0'}
+
+ to-regex-range@5.0.1:
+ resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==}
+ engines: {node: '>=8.0'}
+
+ trivial-deferred@2.0.0:
+ resolution: {integrity: sha512-iGbM7X2slv9ORDVj2y2FFUq3cP/ypbtu2nQ8S38ufjL0glBABvmR9pTdsib1XtS2LUhhLMbelaBUaf/s5J3dSw==}
+ engines: {node: '>= 8'}
+
+ tshy@3.0.2:
+ resolution: {integrity: sha512-8GkWnAfmNXxl8iDTZ1o2H4jdaj9H7HeDKkr5qd0ZhQBCNA41D3xqTyg2Ycs51VCfmjJ5e+0v9AUmD6ylAI9Bgw==}
+ engines: {node: 20 || >=22}
+ hasBin: true
+
+ tuf-js@2.2.1:
+ resolution: {integrity: sha512-GwIJau9XaA8nLVbUXsN3IlFi7WmQ48gBUrl3FTkkL/XLu/POhBzfmX9hd33FNMX1qAsfl6ozO1iMmW9NC8YniA==}
+ engines: {node: ^16.14.0 || >=18.0.0}
+
+ type-fest@4.26.1:
+ resolution: {integrity: sha512-yOGpmOAL7CkKe/91I5O3gPICmJNLJ1G4zFYVAsRHg7M64biSnPtRj0WNQt++bRkjYOqjWXrhnUw1utzmVErAdg==}
+ engines: {node: '>=16'}
+
+ typescript@5.5.4:
+ resolution: {integrity: sha512-Mtq29sKDAEYP7aljRgtPOpTvOfbwRWlS6dPRzwjdE+C0R4brX/GUyhHSecbHMFLNBLcJIPt9nl9yG5TZ1weH+Q==}
+ engines: {node: '>=14.17'}
+ hasBin: true
+
+ unique-filename@3.0.0:
+ resolution: {integrity: sha512-afXhuC55wkAmZ0P18QsVE6kp8JaxrEokN2HGIoIVv2ijHQd419H0+6EigAFcIzXeMIkcIkNBpB3L/DXB3cTS/g==}
+ engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0}
+
+ unique-slug@4.0.0:
+ resolution: {integrity: sha512-WrcA6AyEfqDX5bWige/4NQfPZMtASNVxdmWR76WESYQVAACSgWcR6e9i0mofqqBxYFtL4oAxPIptY73/0YE1DQ==}
+ engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0}
+
+ universalify@0.1.2:
+ resolution: {integrity: sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==}
+ engines: {node: '>= 4.0.0'}
+
+ util-deprecate@1.0.2:
+ resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==}
+
+ uuid@8.3.2:
+ resolution: {integrity: sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==}
+ hasBin: true
+
+ v8-compile-cache-lib@3.0.1:
+ resolution: {integrity: sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==}
+
+ v8-to-istanbul@9.3.0:
+ resolution: {integrity: sha512-kiGUalWN+rgBJ/1OHZsBtU4rXZOfj/7rKQxULKlIzwzQSvMJUUNgPwJEEh7gU6xEVxC0ahoOBvN2YI8GH6FNgA==}
+ engines: {node: '>=10.12.0'}
+
+ validate-npm-package-license@3.0.4:
+ resolution: {integrity: sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==}
+
+ validate-npm-package-name@5.0.1:
+ resolution: {integrity: sha512-OljLrQ9SQdOUqTaQxqL5dEfZWrXExyyWsozYlAWFawPVNuD83igl7uJD2RTkNMbniIYgt8l81eCJGIdQF7avLQ==}
+ engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0}
+
+ walk-up-path@4.0.0:
+ resolution: {integrity: sha512-3hu+tD8YzSLGuFYtPRb48vdhKMi0KQV5sn+uWr8+7dMEq/2G/dtLrdDinkLjqq5TIbIBjYJ4Ax/n3YiaW7QM8A==}
+ engines: {node: 20 || >=22}
+
+ which@1.3.1:
+ resolution: {integrity: sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==}
+ hasBin: true
+
+ which@2.0.2:
+ resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==}
+ engines: {node: '>= 8'}
+ hasBin: true
+
+ which@4.0.0:
+ resolution: {integrity: sha512-GlaYyEb07DPxYCKhKzplCWBJtvxZcZMrL+4UkrTSJHHPyZU4mYYTv3qaOe77H7EODLSSopAUFAc6W8U4yqvscg==}
+ engines: {node: ^16.13.0 || >=18.0.0}
+ hasBin: true
+
+ widest-line@5.0.0:
+ resolution: {integrity: sha512-c9bZp7b5YtRj2wOe6dlj32MK+Bx/M/d+9VB2SHM1OtsUHR0aV0tdP6DWh/iMt0kWi1t5g1Iudu6hQRNd1A4PVA==}
+ engines: {node: '>=18'}
+
+ wrap-ansi@7.0.0:
+ resolution: {integrity: sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==}
+ engines: {node: '>=10'}
+
+ wrap-ansi@8.1.0:
+ resolution: {integrity: sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==}
+ engines: {node: '>=12'}
+
+ wrap-ansi@9.0.0:
+ resolution: {integrity: sha512-G8ura3S+3Z2G+mkgNRq8dqaFZAuxfsxpBB8OCTGRTCtp+l/v9nbFNmCUP1BZMts3G1142MsZfn6eeUKrr4PD1Q==}
+ engines: {node: '>=18'}
+
+ ws@8.18.0:
+ resolution: {integrity: sha512-8VbfWfHLbbwu3+N6OKsOMpBdT4kXPDDB9cJk2bJ6mh9ucxdlnNvH1e+roYkKmN9Nxw2yjz7VzeO9oOz2zJ04Pw==}
+ engines: {node: '>=10.0.0'}
+ peerDependencies:
+ bufferutil: ^4.0.1
+ utf-8-validate: '>=5.0.2'
+ peerDependenciesMeta:
+ bufferutil:
+ optional: true
+ utf-8-validate:
+ optional: true
+
+ y18n@5.0.8:
+ resolution: {integrity: sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==}
+ engines: {node: '>=10'}
+
+ yallist@2.1.2:
+ resolution: {integrity: sha512-ncTzHV7NvsQZkYe1DW7cbDLm0YpzHmZF5r/iyP3ZnQtMiJ+pjzisCiMNI+Sj+xQF5pXhSHxSB3uDbsBTzY/c2A==}
+
+ yallist@4.0.0:
+ resolution: {integrity: sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==}
+
+ yaml-types@0.4.0:
+ resolution: {integrity: sha512-XfbA30NUg4/LWUiplMbiufUiwYhgB9jvBhTWel7XQqjV+GaB79c2tROu/8/Tu7jO0HvDvnKWtBk5ksWRrhQ/0g==}
+ engines: {node: '>= 16', npm: '>= 7'}
+ peerDependencies:
+ yaml: ^2.3.0
+
+ yaml@2.5.1:
+ resolution: {integrity: sha512-bLQOjaX/ADgQ20isPJRvF0iRUHIxVhYvr53Of7wGcWlO2jvtUlH5m87DsmulFVxRpNLOnI4tB6p/oh8D7kpn9Q==}
+ engines: {node: '>= 14'}
+ hasBin: true
+
+ yargs-parser@21.1.1:
+ resolution: {integrity: sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==}
+ engines: {node: '>=12'}
+
+ yargs@17.7.2:
+ resolution: {integrity: sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==}
+ engines: {node: '>=12'}
+
+ yocto-queue@0.1.0:
+ resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==}
+ engines: {node: '>=10'}
+
+ yoga-wasm-web@0.3.3:
+ resolution: {integrity: sha512-N+d4UJSJbt/R3wqY7Coqs5pcV0aUj2j9IaQ3rNj9bVCLld8tTGKRa2USARjnvZJWVx1NDmQev8EknoczaOQDOA==}
+
+snapshots:
+
+ '@alcalzone/ansi-tokenize@0.1.3':
+ dependencies:
+ ansi-styles: 6.2.1
+ is-fullwidth-code-point: 4.0.0
+
+ '@babel/runtime@7.9.2':
+ dependencies:
+ regenerator-runtime: 0.13.5
+
+ '@base2/pretty-print-object@1.0.1': {}
+
+ '@bcoe/v8-coverage@0.2.3': {}
+
+ '@changesets/apply-release-plan@7.0.5':
+ dependencies:
+ '@changesets/config': 3.0.3
+ '@changesets/get-version-range-type': 0.4.0
+ '@changesets/git': 3.0.1
+ '@changesets/should-skip-package': 0.1.1
+ '@changesets/types': 6.0.0
+ '@manypkg/get-packages': 1.1.3
+ detect-indent: 6.1.0
+ fs-extra: 7.0.1
+ lodash.startcase: 4.4.0
+ outdent: 0.5.0
+ prettier: 2.8.8
+ resolve-from: 5.0.0
+ semver: 7.6.3
+
+ '@changesets/assemble-release-plan@6.0.4':
+ dependencies:
+ '@changesets/errors': 0.2.0
+ '@changesets/get-dependents-graph': 2.1.2
+ '@changesets/should-skip-package': 0.1.1
+ '@changesets/types': 6.0.0
+ '@manypkg/get-packages': 1.1.3
+ semver: 7.6.3
+
+ '@changesets/changelog-git@0.2.0':
+ dependencies:
+ '@changesets/types': 6.0.0
+
+ '@changesets/cli@2.27.8':
+ dependencies:
+ '@changesets/apply-release-plan': 7.0.5
+ '@changesets/assemble-release-plan': 6.0.4
+ '@changesets/changelog-git': 0.2.0
+ '@changesets/config': 3.0.3
+ '@changesets/errors': 0.2.0
+ '@changesets/get-dependents-graph': 2.1.2
+ '@changesets/get-release-plan': 4.0.4
+ '@changesets/git': 3.0.1
+ '@changesets/logger': 0.1.1
+ '@changesets/pre': 2.0.1
+ '@changesets/read': 0.6.1
+ '@changesets/should-skip-package': 0.1.1
+ '@changesets/types': 6.0.0
+ '@changesets/write': 0.3.2
+ '@manypkg/get-packages': 1.1.3
+ '@types/semver': 7.5.8
+ ansi-colors: 4.1.3
+ ci-info: 3.9.0
+ enquirer: 2.4.1
+ external-editor: 3.1.0
+ fs-extra: 7.0.1
+ mri: 1.2.0
+ outdent: 0.5.0
+ p-limit: 2.2.2
+ package-manager-detector: 0.2.0
+ picocolors: 1.1.0
+ resolve-from: 5.0.0
+ semver: 7.6.3
+ spawndamnit: 2.0.0
+ term-size: 2.2.1
+
+ '@changesets/config@3.0.3':
+ dependencies:
+ '@changesets/errors': 0.2.0
+ '@changesets/get-dependents-graph': 2.1.2
+ '@changesets/logger': 0.1.1
+ '@changesets/types': 6.0.0
+ '@manypkg/get-packages': 1.1.3
+ fs-extra: 7.0.1
+ micromatch: 4.0.8
+
+ '@changesets/errors@0.2.0':
+ dependencies:
+ extendable-error: 0.1.7
+
+ '@changesets/get-dependents-graph@2.1.2':
+ dependencies:
+ '@changesets/types': 6.0.0
+ '@manypkg/get-packages': 1.1.3
+ picocolors: 1.1.0
+ semver: 7.6.3
+
+ '@changesets/get-release-plan@4.0.4':
+ dependencies:
+ '@changesets/assemble-release-plan': 6.0.4
+ '@changesets/config': 3.0.3
+ '@changesets/pre': 2.0.1
+ '@changesets/read': 0.6.1
+ '@changesets/types': 6.0.0
+ '@manypkg/get-packages': 1.1.3
+
+ '@changesets/get-version-range-type@0.4.0': {}
+
+ '@changesets/git@3.0.1':
+ dependencies:
+ '@changesets/errors': 0.2.0
+ '@manypkg/get-packages': 1.1.3
+ is-subdir: 1.2.0
+ micromatch: 4.0.8
+ spawndamnit: 2.0.0
+
+ '@changesets/logger@0.1.1':
+ dependencies:
+ picocolors: 1.1.0
+
+ '@changesets/parse@0.4.0':
+ dependencies:
+ '@changesets/types': 6.0.0
+ js-yaml: 3.13.1
+
+ '@changesets/pre@2.0.1':
+ dependencies:
+ '@changesets/errors': 0.2.0
+ '@changesets/types': 6.0.0
+ '@manypkg/get-packages': 1.1.3
+ fs-extra: 7.0.1
+
+ '@changesets/read@0.6.1':
+ dependencies:
+ '@changesets/git': 3.0.1
+ '@changesets/logger': 0.1.1
+ '@changesets/parse': 0.4.0
+ '@changesets/types': 6.0.0
+ fs-extra: 7.0.1
+ p-filter: 2.1.0
+ picocolors: 1.1.0
+
+ '@changesets/should-skip-package@0.1.1':
+ dependencies:
+ '@changesets/types': 6.0.0
+ '@manypkg/get-packages': 1.1.3
+
+ '@changesets/types@4.1.0': {}
+
+ '@changesets/types@6.0.0': {}
+
+ '@changesets/write@0.3.2':
+ dependencies:
+ '@changesets/types': 6.0.0
+ fs-extra: 7.0.1
+ human-id: 1.0.2
+ prettier: 2.8.8
+
+ '@cspotcode/source-map-support@0.8.1':
+ dependencies:
+ '@jridgewell/trace-mapping': 0.3.9
+
+ '@isaacs/cliui@8.0.2':
+ dependencies:
+ string-width: 5.1.2
+ string-width-cjs: string-width@4.2.3
+ strip-ansi: 7.1.0
+ strip-ansi-cjs: strip-ansi@6.0.1
+ wrap-ansi: 8.1.0
+ wrap-ansi-cjs: wrap-ansi@7.0.0
+
+ '@isaacs/ts-node-temp-fork-for-pr-2009@10.9.7(@types/node@12.20.55)(typescript@5.5.4)':
+ dependencies:
+ '@cspotcode/source-map-support': 0.8.1
+ '@tsconfig/node14': 14.1.2
+ '@tsconfig/node16': 16.1.3
+ '@tsconfig/node18': 18.2.4
+ '@tsconfig/node20': 20.1.4
+ '@types/node': 12.20.55
+ acorn: 8.12.1
+ acorn-walk: 8.3.4
+ arg: 4.1.3
+ diff: 4.0.2
+ make-error: 1.3.6
+ typescript: 5.5.4
+ v8-compile-cache-lib: 3.0.1
+
+ '@istanbuljs/schema@0.1.3': {}
+
+ '@jridgewell/resolve-uri@3.1.2': {}
+
+ '@jridgewell/sourcemap-codec@1.5.0': {}
+
+ '@jridgewell/trace-mapping@0.3.25':
+ dependencies:
+ '@jridgewell/resolve-uri': 3.1.2
+ '@jridgewell/sourcemap-codec': 1.5.0
+
+ '@jridgewell/trace-mapping@0.3.9':
+ dependencies:
+ '@jridgewell/resolve-uri': 3.1.2
+ '@jridgewell/sourcemap-codec': 1.5.0
+
+ '@manypkg/find-root@1.1.0':
+ dependencies:
+ '@babel/runtime': 7.9.2
+ '@types/node': 12.20.55
+ find-up: 4.1.0
+ fs-extra: 8.1.0
+
+ '@manypkg/get-packages@1.1.3':
+ dependencies:
+ '@babel/runtime': 7.9.2
+ '@changesets/types': 4.1.0
+ '@manypkg/find-root': 1.1.0
+ fs-extra: 8.1.0
+ globby: 11.1.0
+ read-yaml-file: 1.1.0
+
+ '@nodelib/fs.scandir@2.1.5':
+ dependencies:
+ '@nodelib/fs.stat': 2.0.5
+ run-parallel: 1.2.0
+
+ '@nodelib/fs.stat@2.0.5': {}
+
+ '@nodelib/fs.walk@1.2.8':
+ dependencies:
+ '@nodelib/fs.scandir': 2.1.5
+ fastq: 1.17.1
+
+ '@npmcli/agent@2.2.2':
+ dependencies:
+ agent-base: 7.1.1
+ http-proxy-agent: 7.0.2
+ https-proxy-agent: 7.0.5
+ lru-cache: 10.4.3
+ socks-proxy-agent: 8.0.4
+ transitivePeerDependencies:
+ - supports-color
+
+ '@npmcli/fs@3.1.1':
+ dependencies:
+ semver: 7.6.3
+
+ '@npmcli/git@5.0.8':
+ dependencies:
+ '@npmcli/promise-spawn': 7.0.2
+ ini: 4.1.3
+ lru-cache: 10.4.3
+ npm-pick-manifest: 9.1.0
+ proc-log: 4.2.0
+ promise-inflight: 1.0.1
+ promise-retry: 2.0.1
+ semver: 7.6.3
+ which: 4.0.0
+ transitivePeerDependencies:
+ - bluebird
+
+ '@npmcli/installed-package-contents@2.1.0':
+ dependencies:
+ npm-bundled: 3.0.1
+ npm-normalize-package-bin: 3.0.1
+
+ '@npmcli/node-gyp@3.0.0': {}
+
+ '@npmcli/package-json@5.2.0':
+ dependencies:
+ '@npmcli/git': 5.0.8
+ glob: 10.4.5
+ hosted-git-info: 7.0.2
+ json-parse-even-better-errors: 3.0.2
+ normalize-package-data: 6.0.2
+ proc-log: 4.2.0
+ semver: 7.6.3
+ transitivePeerDependencies:
+ - bluebird
+
+ '@npmcli/promise-spawn@7.0.2':
+ dependencies:
+ which: 4.0.0
+
+ '@npmcli/redact@2.0.1': {}
+
+ '@npmcli/run-script@8.1.0':
+ dependencies:
+ '@npmcli/node-gyp': 3.0.0
+ '@npmcli/package-json': 5.2.0
+ '@npmcli/promise-spawn': 7.0.2
+ node-gyp: 10.2.0
+ proc-log: 4.2.0
+ which: 4.0.0
+ transitivePeerDependencies:
+ - bluebird
+ - supports-color
+
+ '@pkgjs/parseargs@0.11.0':
+ optional: true
+
+ '@sigstore/bundle@2.3.2':
+ dependencies:
+ '@sigstore/protobuf-specs': 0.3.2
+
+ '@sigstore/core@1.1.0': {}
+
+ '@sigstore/protobuf-specs@0.3.2': {}
+
+ '@sigstore/sign@2.3.2':
+ dependencies:
+ '@sigstore/bundle': 2.3.2
+ '@sigstore/core': 1.1.0
+ '@sigstore/protobuf-specs': 0.3.2
+ make-fetch-happen: 13.0.1
+ proc-log: 4.2.0
+ promise-retry: 2.0.1
+ transitivePeerDependencies:
+ - supports-color
+
+ '@sigstore/tuf@2.3.4':
+ dependencies:
+ '@sigstore/protobuf-specs': 0.3.2
+ tuf-js: 2.2.1
+ transitivePeerDependencies:
+ - supports-color
+
+ '@sigstore/verify@1.2.1':
+ dependencies:
+ '@sigstore/bundle': 2.3.2
+ '@sigstore/core': 1.1.0
+ '@sigstore/protobuf-specs': 0.3.2
+
+ '@tapjs/after-each@4.0.0(@tapjs/core@4.0.0(@types/node@12.20.55)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))':
+ dependencies:
+ '@tapjs/core': 4.0.0(@types/node@12.20.55)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+ function-loop: 4.0.0
+
+ '@tapjs/after@3.0.0(@tapjs/core@4.0.0(@types/node@12.20.55)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))':
+ dependencies:
+ '@tapjs/core': 4.0.0(@types/node@12.20.55)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+ is-actual-promise: 1.0.2
+
+ '@tapjs/asserts@4.0.0(@tapjs/core@4.0.0(@types/node@12.20.55)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)':
+ dependencies:
+ '@tapjs/core': 4.0.0(@types/node@12.20.55)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+ '@tapjs/stack': 4.0.0
+ is-actual-promise: 1.0.2
+ tcompare: 9.0.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+ trivial-deferred: 2.0.0
+ transitivePeerDependencies:
+ - react
+ - react-dom
+
+ '@tapjs/before-each@4.0.0(@tapjs/core@4.0.0(@types/node@12.20.55)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))':
+ dependencies:
+ '@tapjs/core': 4.0.0(@types/node@12.20.55)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+ function-loop: 4.0.0
+
+ '@tapjs/before@4.0.0(@tapjs/core@4.0.0(@types/node@12.20.55)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))':
+ dependencies:
+ '@tapjs/core': 4.0.0(@types/node@12.20.55)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+ is-actual-promise: 1.0.2
+
+ '@tapjs/chdir@3.0.0(@tapjs/core@4.0.0(@types/node@12.20.55)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))':
+ dependencies:
+ '@tapjs/core': 4.0.0(@types/node@12.20.55)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+
+ '@tapjs/config@5.0.0(@tapjs/core@4.0.0(@types/node@12.20.55)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@tapjs/test@4.0.0(@tapjs/core@4.0.0(@types/node@12.20.55)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@types/node@12.20.55)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))':
+ dependencies:
+ '@tapjs/core': 4.0.0(@types/node@12.20.55)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+ '@tapjs/test': 4.0.0(@tapjs/core@4.0.0(@types/node@12.20.55)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@types/node@12.20.55)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+ chalk: 5.3.0
+ jackspeak: 4.0.1
+ polite-json: 5.0.0
+ tap-yaml: 4.0.0
+ walk-up-path: 4.0.0
+
+ '@tapjs/core@4.0.0(@types/node@12.20.55)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)':
+ dependencies:
+ '@tapjs/processinfo': 3.1.8
+ '@tapjs/stack': 4.0.0
+ '@tapjs/test': 4.0.0(@tapjs/core@4.0.0(@types/node@12.20.55)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@types/node@12.20.55)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+ async-hook-domain: 4.0.1
+ diff: 5.2.0
+ is-actual-promise: 1.0.2
+ minipass: 7.1.2
+ signal-exit: 4.1.0
+ tap-parser: 18.0.0
+ tap-yaml: 4.0.0
+ tcompare: 9.0.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+ trivial-deferred: 2.0.0
+ transitivePeerDependencies:
+ - '@swc/core'
+ - '@swc/wasm'
+ - '@types/node'
+ - react
+ - react-dom
+
+ '@tapjs/error-serdes@4.0.0':
+ dependencies:
+ minipass: 7.1.2
+
+ '@tapjs/filter@4.0.0(@tapjs/core@4.0.0(@types/node@12.20.55)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))':
+ dependencies:
+ '@tapjs/core': 4.0.0(@types/node@12.20.55)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+
+ '@tapjs/fixture@4.0.0(@tapjs/core@4.0.0(@types/node@12.20.55)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))':
+ dependencies:
+ '@tapjs/core': 4.0.0(@types/node@12.20.55)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+ mkdirp: 3.0.1
+ rimraf: 6.0.1
+
+ '@tapjs/intercept@4.0.0(@tapjs/core@4.0.0(@types/node@12.20.55)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))':
+ dependencies:
+ '@tapjs/after': 3.0.0(@tapjs/core@4.0.0(@types/node@12.20.55)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))
+ '@tapjs/core': 4.0.0(@types/node@12.20.55)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+ '@tapjs/stack': 4.0.0
+
+ '@tapjs/mock@4.0.0(@tapjs/core@4.0.0(@types/node@12.20.55)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))':
+ dependencies:
+ '@tapjs/after': 3.0.0(@tapjs/core@4.0.0(@types/node@12.20.55)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))
+ '@tapjs/core': 4.0.0(@types/node@12.20.55)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+ '@tapjs/stack': 4.0.0
+ resolve-import: 2.0.0
+ walk-up-path: 4.0.0
+
+ '@tapjs/node-serialize@4.0.0(@tapjs/core@4.0.0(@types/node@12.20.55)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))':
+ dependencies:
+ '@tapjs/core': 4.0.0(@types/node@12.20.55)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+ '@tapjs/error-serdes': 4.0.0
+ '@tapjs/stack': 4.0.0
+ tap-parser: 18.0.0
+
+ '@tapjs/processinfo@3.1.8':
+ dependencies:
+ pirates: 4.0.6
+ process-on-spawn: 1.0.0
+ signal-exit: 4.1.0
+ uuid: 8.3.2
+
+ '@tapjs/reporter@4.0.1(@tapjs/core@4.0.0(@types/node@12.20.55)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@tapjs/test@4.0.0(@tapjs/core@4.0.0(@types/node@12.20.55)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@types/node@12.20.55)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))':
+ dependencies:
+ '@tapjs/config': 5.0.0(@tapjs/core@4.0.0(@types/node@12.20.55)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@tapjs/test@4.0.0(@tapjs/core@4.0.0(@types/node@12.20.55)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@types/node@12.20.55)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))
+ '@tapjs/core': 4.0.0(@types/node@12.20.55)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+ '@tapjs/stack': 4.0.0
+ chalk: 5.3.0
+ ink: 5.0.1(react@18.3.1)
+ minipass: 7.1.2
+ ms: 2.1.3
+ patch-console: 2.0.0
+ prismjs-terminal: 1.2.3
+ react: 18.3.1
+ string-length: 6.0.0
+ tap-parser: 18.0.0
+ tap-yaml: 4.0.0
+ tcompare: 9.0.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+ transitivePeerDependencies:
+ - '@tapjs/test'
+ - '@types/react'
+ - bufferutil
+ - react-devtools-core
+ - react-dom
+ - utf-8-validate
+
+ '@tapjs/run@4.0.1(@tapjs/core@4.0.0(@types/node@12.20.55)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@types/node@12.20.55)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)':
+ dependencies:
+ '@tapjs/after': 3.0.0(@tapjs/core@4.0.0(@types/node@12.20.55)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))
+ '@tapjs/before': 4.0.0(@tapjs/core@4.0.0(@types/node@12.20.55)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))
+ '@tapjs/config': 5.0.0(@tapjs/core@4.0.0(@types/node@12.20.55)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@tapjs/test@4.0.0(@tapjs/core@4.0.0(@types/node@12.20.55)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@types/node@12.20.55)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))
+ '@tapjs/core': 4.0.0(@types/node@12.20.55)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+ '@tapjs/processinfo': 3.1.8
+ '@tapjs/reporter': 4.0.1(@tapjs/core@4.0.0(@types/node@12.20.55)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@tapjs/test@4.0.0(@tapjs/core@4.0.0(@types/node@12.20.55)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@types/node@12.20.55)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))
+ '@tapjs/spawn': 4.0.0(@tapjs/core@4.0.0(@types/node@12.20.55)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))
+ '@tapjs/stdin': 4.0.0(@tapjs/core@4.0.0(@types/node@12.20.55)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))
+ '@tapjs/test': 4.0.0(@tapjs/core@4.0.0(@types/node@12.20.55)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@types/node@12.20.55)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+ c8: 10.1.2
+ chalk: 5.3.0
+ chokidar: 3.6.0
+ foreground-child: 3.3.0
+ glob: 11.0.0
+ minipass: 7.1.2
+ mkdirp: 3.0.1
+ opener: 1.5.2
+ pacote: 18.0.6
+ path-scurry: 2.0.0
+ resolve-import: 2.0.0
+ rimraf: 6.0.1
+ semver: 7.6.3
+ signal-exit: 4.1.0
+ tap-parser: 18.0.0
+ tap-yaml: 4.0.0
+ tcompare: 9.0.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+ trivial-deferred: 2.0.0
+ which: 4.0.0
+ transitivePeerDependencies:
+ - '@swc/core'
+ - '@swc/wasm'
+ - '@types/node'
+ - '@types/react'
+ - bluebird
+ - bufferutil
+ - monocart-coverage-reports
+ - react
+ - react-devtools-core
+ - react-dom
+ - supports-color
+ - utf-8-validate
+
+ '@tapjs/snapshot@4.0.0(@tapjs/core@4.0.0(@types/node@12.20.55)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)':
+ dependencies:
+ '@tapjs/core': 4.0.0(@types/node@12.20.55)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+ is-actual-promise: 1.0.2
+ tcompare: 9.0.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+ trivial-deferred: 2.0.0
+ transitivePeerDependencies:
+ - react
+ - react-dom
+
+ '@tapjs/spawn@4.0.0(@tapjs/core@4.0.0(@types/node@12.20.55)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))':
+ dependencies:
+ '@tapjs/core': 4.0.0(@types/node@12.20.55)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+
+ '@tapjs/stack@4.0.0': {}
+
+ '@tapjs/stdin@4.0.0(@tapjs/core@4.0.0(@types/node@12.20.55)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))':
+ dependencies:
+ '@tapjs/core': 4.0.0(@types/node@12.20.55)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+
+ '@tapjs/test@4.0.0(@tapjs/core@4.0.0(@types/node@12.20.55)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@types/node@12.20.55)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)':
+ dependencies:
+ '@isaacs/ts-node-temp-fork-for-pr-2009': 10.9.7(@types/node@12.20.55)(typescript@5.5.4)
+ '@tapjs/after': 3.0.0(@tapjs/core@4.0.0(@types/node@12.20.55)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))
+ '@tapjs/after-each': 4.0.0(@tapjs/core@4.0.0(@types/node@12.20.55)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))
+ '@tapjs/asserts': 4.0.0(@tapjs/core@4.0.0(@types/node@12.20.55)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+ '@tapjs/before': 4.0.0(@tapjs/core@4.0.0(@types/node@12.20.55)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))
+ '@tapjs/before-each': 4.0.0(@tapjs/core@4.0.0(@types/node@12.20.55)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))
+ '@tapjs/chdir': 3.0.0(@tapjs/core@4.0.0(@types/node@12.20.55)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))
+ '@tapjs/core': 4.0.0(@types/node@12.20.55)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+ '@tapjs/filter': 4.0.0(@tapjs/core@4.0.0(@types/node@12.20.55)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))
+ '@tapjs/fixture': 4.0.0(@tapjs/core@4.0.0(@types/node@12.20.55)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))
+ '@tapjs/intercept': 4.0.0(@tapjs/core@4.0.0(@types/node@12.20.55)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))
+ '@tapjs/mock': 4.0.0(@tapjs/core@4.0.0(@types/node@12.20.55)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))
+ '@tapjs/node-serialize': 4.0.0(@tapjs/core@4.0.0(@types/node@12.20.55)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))
+ '@tapjs/snapshot': 4.0.0(@tapjs/core@4.0.0(@types/node@12.20.55)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+ '@tapjs/spawn': 4.0.0(@tapjs/core@4.0.0(@types/node@12.20.55)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))
+ '@tapjs/stdin': 4.0.0(@tapjs/core@4.0.0(@types/node@12.20.55)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))
+ '@tapjs/typescript': 3.0.0(@tapjs/core@4.0.0(@types/node@12.20.55)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@types/node@12.20.55)(typescript@5.5.4)
+ '@tapjs/worker': 4.0.0(@tapjs/core@4.0.0(@types/node@12.20.55)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))
+ glob: 11.0.0
+ jackspeak: 4.0.1
+ mkdirp: 3.0.1
+ package-json-from-dist: 1.0.0
+ resolve-import: 2.0.0
+ rimraf: 6.0.1
+ sync-content: 2.0.1
+ tap-parser: 18.0.0
+ tshy: 3.0.2
+ typescript: 5.5.4
+ walk-up-path: 4.0.0
+ transitivePeerDependencies:
+ - '@swc/core'
+ - '@swc/wasm'
+ - '@types/node'
+ - react
+ - react-dom
+
+ '@tapjs/typescript@3.0.0(@tapjs/core@4.0.0(@types/node@12.20.55)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@types/node@12.20.55)(typescript@5.5.4)':
+ dependencies:
+ '@isaacs/ts-node-temp-fork-for-pr-2009': 10.9.7(@types/node@12.20.55)(typescript@5.5.4)
+ '@tapjs/core': 4.0.0(@types/node@12.20.55)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+ transitivePeerDependencies:
+ - '@swc/core'
+ - '@swc/wasm'
+ - '@types/node'
+ - typescript
+
+ '@tapjs/worker@4.0.0(@tapjs/core@4.0.0(@types/node@12.20.55)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))':
+ dependencies:
+ '@tapjs/core': 4.0.0(@types/node@12.20.55)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+
+ '@tsconfig/node14@14.1.2': {}
+
+ '@tsconfig/node16@16.1.3': {}
+
+ '@tsconfig/node18@18.2.4': {}
+
+ '@tsconfig/node20@20.1.4': {}
+
+ '@tufjs/canonical-json@2.0.0': {}
+
+ '@tufjs/models@2.0.1':
+ dependencies:
+ '@tufjs/canonical-json': 2.0.0
+ minimatch: 9.0.5
+
+ '@types/istanbul-lib-coverage@2.0.6': {}
+
+ '@types/node@12.20.55': {}
+
+ '@types/semver@7.5.8': {}
+
+ '@vlasky/mysql@2.18.6':
+ dependencies:
+ bignumber.js: 9.1.1
+ readable-stream: 2.3.7
+ safe-buffer: 5.2.1
+ sqlstring: 2.3.3
+
+ abbrev@2.0.0: {}
+
+ acorn-walk@8.3.4:
+ dependencies:
+ acorn: 8.12.1
+
+ acorn@8.12.1: {}
+
+ agent-base@7.1.1:
+ dependencies:
+ debug: 4.3.7
+ transitivePeerDependencies:
+ - supports-color
+
+ aggregate-error@3.1.0:
+ dependencies:
+ clean-stack: 2.2.0
+ indent-string: 4.0.0
+
+ ansi-colors@4.1.3: {}
+
+ ansi-escapes@7.0.0:
+ dependencies:
+ environment: 1.1.0
+
+ ansi-regex@5.0.1: {}
+
+ ansi-regex@6.1.0: {}
+
+ ansi-styles@4.3.0:
+ dependencies:
+ color-convert: 2.0.1
+
+ ansi-styles@6.2.1: {}
+
+ anymatch@3.1.3:
+ dependencies:
+ normalize-path: 3.0.0
+ picomatch: 2.3.1
+
+ arg@4.1.3: {}
+
+ argparse@1.0.10:
+ dependencies:
+ sprintf-js: 1.0.3
+
+ array-union@2.1.0: {}
+
+ async-hook-domain@4.0.1: {}
+
+ auto-bind@5.0.1: {}
+
+ balanced-match@1.0.0: {}
+
+ better-path-resolve@1.0.0:
+ dependencies:
+ is-windows: 1.0.2
+
+ big-integer@1.6.51: {}
+
+ bignumber.js@9.1.1: {}
+
+ binary-extensions@2.0.0: {}
+
+ brace-expansion@2.0.1:
+ dependencies:
+ balanced-match: 1.0.0
+
+ braces@3.0.3:
+ dependencies:
+ fill-range: 7.1.1
+
+ c8@10.1.2:
+ dependencies:
+ '@bcoe/v8-coverage': 0.2.3
+ '@istanbuljs/schema': 0.1.3
+ find-up: 5.0.0
+ foreground-child: 3.3.0
+ istanbul-lib-coverage: 3.2.2
+ istanbul-lib-report: 3.0.1
+ istanbul-reports: 3.1.7
+ test-exclude: 7.0.1
+ v8-to-istanbul: 9.3.0
+ yargs: 17.7.2
+ yargs-parser: 21.1.1
+
+ cacache@18.0.4:
+ dependencies:
+ '@npmcli/fs': 3.1.1
+ fs-minipass: 3.0.3
+ glob: 10.4.5
+ lru-cache: 10.4.3
+ minipass: 7.1.2
+ minipass-collect: 2.0.1
+ minipass-flush: 1.0.5
+ minipass-pipeline: 1.2.4
+ p-map: 4.0.0
+ ssri: 10.0.6
+ tar: 6.2.1
+ unique-filename: 3.0.0
+
+ chalk@5.3.0: {}
+
+ chardet@0.7.0: {}
+
+ chokidar@3.6.0:
+ dependencies:
+ anymatch: 3.1.3
+ braces: 3.0.3
+ glob-parent: 5.1.2
+ is-binary-path: 2.1.0
+ is-glob: 4.0.1
+ normalize-path: 3.0.0
+ readdirp: 3.6.0
+ optionalDependencies:
+ fsevents: 2.3.3
+
+ chownr@2.0.0: {}
+
+ ci-info@3.9.0: {}
+
+ clean-stack@2.2.0: {}
+
+ cli-boxes@3.0.0: {}
+
+ cli-cursor@4.0.0:
+ dependencies:
+ restore-cursor: 4.0.0
+
+ cli-truncate@4.0.0:
+ dependencies:
+ slice-ansi: 5.0.0
+ string-width: 7.2.0
+
+ cliui@8.0.1:
+ dependencies:
+ string-width: 4.2.3
+ strip-ansi: 6.0.1
+ wrap-ansi: 7.0.0
+
+ code-excerpt@4.0.0:
+ dependencies:
+ convert-to-spaces: 2.0.1
+
+ color-convert@2.0.1:
+ dependencies:
+ color-name: 1.1.4
+
+ color-name@1.1.4: {}
+
+ convert-source-map@2.0.0: {}
+
+ convert-to-spaces@2.0.1: {}
+
+ core-util-is@1.0.2: {}
+
+ cross-spawn@5.1.0:
+ dependencies:
+ lru-cache: 4.1.5
+ shebang-command: 1.2.0
+ which: 1.3.1
+
+ cross-spawn@7.0.3:
+ dependencies:
+ path-key: 3.1.1
+ shebang-command: 2.0.0
+ which: 2.0.2
+
+ debug@4.1.1:
+ dependencies:
+ ms: 2.1.2
+
+ debug@4.3.7:
+ dependencies:
+ ms: 2.1.3
+
+ detect-indent@6.1.0: {}
+
+ diff@4.0.2: {}
+
+ diff@5.2.0: {}
+
+ dir-glob@3.0.1:
+ dependencies:
+ path-type: 4.0.0
+
+ eastasianwidth@0.2.0: {}
+
+ emoji-regex@10.4.0: {}
+
+ emoji-regex@8.0.0: {}
+
+ emoji-regex@9.2.2: {}
+
+ encoding@0.1.13:
+ dependencies:
+ iconv-lite: 0.6.3
+ optional: true
+
+ enquirer@2.4.1:
+ dependencies:
+ ansi-colors: 4.1.3
+ strip-ansi: 6.0.1
+
+ env-paths@2.2.1: {}
+
+ environment@1.1.0: {}
+
+ err-code@2.0.3: {}
+
+ escalade@3.2.0: {}
+
+ escape-string-regexp@2.0.0: {}
+
+ esprima@4.0.1: {}
+
+ events-to-array@2.0.3: {}
+
+ exponential-backoff@3.1.1: {}
+
+ extendable-error@0.1.7: {}
+
+ external-editor@3.1.0:
+ dependencies:
+ chardet: 0.7.0
+ iconv-lite: 0.4.24
+ tmp: 0.0.33
+
+ fast-glob@3.3.2:
+ dependencies:
+ '@nodelib/fs.stat': 2.0.5
+ '@nodelib/fs.walk': 1.2.8
+ glob-parent: 5.1.2
+ merge2: 1.4.1
+ micromatch: 4.0.8
+
+ fastq@1.17.1:
+ dependencies:
+ reusify: 1.0.4
+
+ fill-range@7.1.1:
+ dependencies:
+ to-regex-range: 5.0.1
+
+ find-up@4.1.0:
+ dependencies:
+ locate-path: 5.0.0
+ path-exists: 4.0.0
+
+ find-up@5.0.0:
+ dependencies:
+ locate-path: 6.0.0
+ path-exists: 4.0.0
+
+ foreground-child@3.3.0:
+ dependencies:
+ cross-spawn: 7.0.3
+ signal-exit: 4.1.0
+
+ fromentries@1.3.2: {}
+
+ fs-extra@7.0.1:
+ dependencies:
+ graceful-fs: 4.2.3
+ jsonfile: 4.0.0
+ universalify: 0.1.2
+
+ fs-extra@8.1.0:
+ dependencies:
+ graceful-fs: 4.2.3
+ jsonfile: 4.0.0
+ universalify: 0.1.2
+
+ fs-minipass@2.1.0:
+ dependencies:
+ minipass: 3.1.1
+
+ fs-minipass@3.0.3:
+ dependencies:
+ minipass: 7.1.2
+
+ fsevents@2.3.3:
+ optional: true
+
+ function-loop@4.0.0: {}
+
+ get-caller-file@2.0.5: {}
+
+ get-east-asian-width@1.2.0: {}
+
+ glob-parent@5.1.2:
+ dependencies:
+ is-glob: 4.0.1
+
+ glob@10.4.5:
+ dependencies:
+ foreground-child: 3.3.0
+ jackspeak: 3.4.3
+ minimatch: 9.0.5
+ minipass: 7.1.2
+ package-json-from-dist: 1.0.0
+ path-scurry: 1.11.1
+
+ glob@11.0.0:
+ dependencies:
+ foreground-child: 3.3.0
+ jackspeak: 4.0.1
+ minimatch: 10.0.1
+ minipass: 7.1.2
+ package-json-from-dist: 1.0.0
+ path-scurry: 2.0.0
+
+ globby@11.1.0:
+ dependencies:
+ array-union: 2.1.0
+ dir-glob: 3.0.1
+ fast-glob: 3.3.2
+ ignore: 5.3.2
+ merge2: 1.4.1
+ slash: 3.0.0
+
+ graceful-fs@4.2.11: {}
+
+ graceful-fs@4.2.3: {}
+
+ has-flag@4.0.0: {}
+
+ hosted-git-info@7.0.2:
+ dependencies:
+ lru-cache: 10.4.3
+
+ html-escaper@2.0.1: {}
+
+ http-cache-semantics@4.1.1: {}
+
+ http-proxy-agent@7.0.2:
+ dependencies:
+ agent-base: 7.1.1
+ debug: 4.3.7
+ transitivePeerDependencies:
+ - supports-color
+
+ https-proxy-agent@7.0.5:
+ dependencies:
+ agent-base: 7.1.1
+ debug: 4.1.1
+ transitivePeerDependencies:
+ - supports-color
+
+ human-id@1.0.2: {}
+
+ iconv-lite@0.4.24:
+ dependencies:
+ safer-buffer: 2.1.2
+
+ iconv-lite@0.6.3:
+ dependencies:
+ safer-buffer: 2.1.2
+
+ ignore-walk@6.0.5:
+ dependencies:
+ minimatch: 9.0.5
+
+ ignore@5.3.2: {}
+
+ imurmurhash@0.1.4: {}
+
+ indent-string@4.0.0: {}
+
+ indent-string@5.0.0: {}
+
+ inherits@2.0.4: {}
+
+ ini@4.1.3: {}
+
+ ink@5.0.1(react@18.3.1):
+ dependencies:
+ '@alcalzone/ansi-tokenize': 0.1.3
+ ansi-escapes: 7.0.0
+ ansi-styles: 6.2.1
+ auto-bind: 5.0.1
+ chalk: 5.3.0
+ cli-boxes: 3.0.0
+ cli-cursor: 4.0.0
+ cli-truncate: 4.0.0
+ code-excerpt: 4.0.0
+ indent-string: 5.0.0
+ is-in-ci: 0.1.0
+ lodash: 4.17.21
+ patch-console: 2.0.0
+ react: 18.3.1
+ react-reconciler: 0.29.2(react@18.3.1)
+ scheduler: 0.23.2
+ signal-exit: 3.0.7
+ slice-ansi: 7.1.0
+ stack-utils: 2.0.6
+ string-width: 7.2.0
+ type-fest: 4.26.1
+ widest-line: 5.0.0
+ wrap-ansi: 9.0.0
+ ws: 8.18.0
+ yoga-wasm-web: 0.3.3
+ transitivePeerDependencies:
+ - bufferutil
+ - utf-8-validate
+
+ ip-address@9.0.5:
+ dependencies:
+ jsbn: 1.1.0
+ sprintf-js: 1.1.3
+
+ is-actual-promise@1.0.2: {}
+
+ is-binary-path@2.1.0:
+ dependencies:
+ binary-extensions: 2.0.0
+
+ is-extglob@2.1.1: {}
+
+ is-fullwidth-code-point@3.0.0: {}
+
+ is-fullwidth-code-point@4.0.0: {}
+
+ is-fullwidth-code-point@5.0.0:
+ dependencies:
+ get-east-asian-width: 1.2.0
+
+ is-glob@4.0.1:
+ dependencies:
+ is-extglob: 2.1.1
+
+ is-in-ci@0.1.0: {}
+
+ is-lambda@1.0.1: {}
+
+ is-number@7.0.0: {}
+
+ is-plain-object@5.0.0: {}
+
+ is-subdir@1.2.0:
+ dependencies:
+ better-path-resolve: 1.0.0
+
+ is-windows@1.0.2: {}
+
+ isarray@1.0.0: {}
+
+ isexe@2.0.0: {}
+
+ isexe@3.1.1: {}
+
+ istanbul-lib-coverage@3.2.2: {}
+
+ istanbul-lib-report@3.0.1:
+ dependencies:
+ istanbul-lib-coverage: 3.2.2
+ make-dir: 4.0.0
+ supports-color: 7.2.0
+
+ istanbul-reports@3.1.7:
+ dependencies:
+ html-escaper: 2.0.1
+ istanbul-lib-report: 3.0.1
+
+ jackspeak@3.4.3:
+ dependencies:
+ '@isaacs/cliui': 8.0.2
+ optionalDependencies:
+ '@pkgjs/parseargs': 0.11.0
+
+ jackspeak@4.0.1:
+ dependencies:
+ '@isaacs/cliui': 8.0.2
+ optionalDependencies:
+ '@pkgjs/parseargs': 0.11.0
+
+ js-tokens@4.0.0: {}
+
+ js-yaml@3.13.1:
+ dependencies:
+ argparse: 1.0.10
+ esprima: 4.0.1
+
+ jsbn@1.1.0: {}
+
+ json-parse-even-better-errors@3.0.2: {}
+
+ jsonfile@4.0.0:
+ optionalDependencies:
+ graceful-fs: 4.2.3
+
+ jsonparse@1.3.1: {}
+
+ locate-path@5.0.0:
+ dependencies:
+ p-locate: 4.1.0
+
+ locate-path@6.0.0:
+ dependencies:
+ p-locate: 5.0.0
+
+ lodash.startcase@4.4.0: {}
+
+ lodash@4.17.21: {}
+
+ loose-envify@1.4.0:
+ dependencies:
+ js-tokens: 4.0.0
+
+ lru-cache@10.4.3: {}
+
+ lru-cache@11.0.1: {}
+
+ lru-cache@4.1.5:
+ dependencies:
+ pseudomap: 1.0.2
+ yallist: 2.1.2
+
+ make-dir@4.0.0:
+ dependencies:
+ semver: 7.6.3
+
+ make-error@1.3.6: {}
+
+ make-fetch-happen@13.0.1:
+ dependencies:
+ '@npmcli/agent': 2.2.2
+ cacache: 18.0.4
+ http-cache-semantics: 4.1.1
+ is-lambda: 1.0.1
+ minipass: 7.1.2
+ minipass-fetch: 3.0.5
+ minipass-flush: 1.0.5
+ minipass-pipeline: 1.2.4
+ negotiator: 0.6.3
+ proc-log: 4.2.0
+ promise-retry: 2.0.1
+ ssri: 10.0.6
+ transitivePeerDependencies:
+ - supports-color
+
+ merge2@1.4.1: {}
+
+ micromatch@4.0.8:
+ dependencies:
+ braces: 3.0.3
+ picomatch: 2.3.1
+
+ mimic-fn@2.1.0: {}
+
+ minimatch@10.0.1:
+ dependencies:
+ brace-expansion: 2.0.1
+
+ minimatch@9.0.5:
+ dependencies:
+ brace-expansion: 2.0.1
+
+ minipass-collect@2.0.1:
+ dependencies:
+ minipass: 7.1.2
+
+ minipass-fetch@3.0.5:
+ dependencies:
+ minipass: 7.1.2
+ minipass-sized: 1.0.3
+ minizlib: 2.1.2
+ optionalDependencies:
+ encoding: 0.1.13
+
+ minipass-flush@1.0.5:
+ dependencies:
+ minipass: 3.1.1
+
+ minipass-pipeline@1.2.4:
+ dependencies:
+ minipass: 3.1.1
+
+ minipass-sized@1.0.3:
+ dependencies:
+ minipass: 3.1.1
+
+ minipass@3.1.1:
+ dependencies:
+ yallist: 4.0.0
+
+ minipass@5.0.0: {}
+
+ minipass@7.1.2: {}
+
+ minizlib@2.1.2:
+ dependencies:
+ minipass: 3.1.1
+ yallist: 4.0.0
+
+ mkdirp@1.0.4: {}
+
+ mkdirp@3.0.1: {}
+
+ mri@1.2.0: {}
+
+ ms@2.1.2: {}
+
+ ms@2.1.3: {}
+
+ negotiator@0.6.3: {}
+
+ node-gyp@10.2.0:
+ dependencies:
+ env-paths: 2.2.1
+ exponential-backoff: 3.1.1
+ glob: 10.4.5
+ graceful-fs: 4.2.11
+ make-fetch-happen: 13.0.1
+ nopt: 7.2.1
+ proc-log: 4.2.0
+ semver: 7.6.3
+ tar: 6.2.1
+ which: 4.0.0
+ transitivePeerDependencies:
+ - supports-color
+
+ nopt@7.2.1:
+ dependencies:
+ abbrev: 2.0.0
+
+ normalize-package-data@6.0.2:
+ dependencies:
+ hosted-git-info: 7.0.2
+ semver: 7.6.3
+ validate-npm-package-license: 3.0.4
+
+ normalize-path@3.0.0: {}
+
+ npm-bundled@3.0.1:
+ dependencies:
+ npm-normalize-package-bin: 3.0.1
+
+ npm-install-checks@6.3.0:
+ dependencies:
+ semver: 7.6.3
+
+ npm-normalize-package-bin@3.0.1: {}
+
+ npm-package-arg@11.0.3:
+ dependencies:
+ hosted-git-info: 7.0.2
+ proc-log: 4.2.0
+ semver: 7.6.3
+ validate-npm-package-name: 5.0.1
+
+ npm-packlist@8.0.2:
+ dependencies:
+ ignore-walk: 6.0.5
+
+ npm-pick-manifest@9.1.0:
+ dependencies:
+ npm-install-checks: 6.3.0
+ npm-normalize-package-bin: 3.0.1
+ npm-package-arg: 11.0.3
+ semver: 7.6.3
+
+ npm-registry-fetch@17.1.0:
+ dependencies:
+ '@npmcli/redact': 2.0.1
+ jsonparse: 1.3.1
+ make-fetch-happen: 13.0.1
+ minipass: 7.1.2
+ minipass-fetch: 3.0.5
+ minizlib: 2.1.2
+ npm-package-arg: 11.0.3
+ proc-log: 4.2.0
+ transitivePeerDependencies:
+ - supports-color
+
+ onetime@5.1.2:
+ dependencies:
+ mimic-fn: 2.1.0
+
+ opener@1.5.2: {}
+
+ os-tmpdir@1.0.2: {}
+
+ outdent@0.5.0: {}
+
+ p-filter@2.1.0:
+ dependencies:
+ p-map: 2.1.0
+
+ p-limit@2.2.2:
+ dependencies:
+ p-try: 2.2.0
+
+ p-limit@3.1.0:
+ dependencies:
+ yocto-queue: 0.1.0
+
+ p-locate@4.1.0:
+ dependencies:
+ p-limit: 2.2.2
+
+ p-locate@5.0.0:
+ dependencies:
+ p-limit: 3.1.0
+
+ p-map@2.1.0: {}
+
+ p-map@4.0.0:
+ dependencies:
+ aggregate-error: 3.1.0
+
+ p-try@2.2.0: {}
+
+ package-json-from-dist@1.0.0: {}
+
+ package-manager-detector@0.2.0: {}
+
+ pacote@18.0.6:
+ dependencies:
+ '@npmcli/git': 5.0.8
+ '@npmcli/installed-package-contents': 2.1.0
+ '@npmcli/package-json': 5.2.0
+ '@npmcli/promise-spawn': 7.0.2
+ '@npmcli/run-script': 8.1.0
+ cacache: 18.0.4
+ fs-minipass: 3.0.3
+ minipass: 7.1.2
+ npm-package-arg: 11.0.3
+ npm-packlist: 8.0.2
+ npm-pick-manifest: 9.1.0
+ npm-registry-fetch: 17.1.0
+ proc-log: 4.2.0
+ promise-retry: 2.0.1
+ sigstore: 2.3.1
+ ssri: 10.0.6
+ tar: 6.2.1
+ transitivePeerDependencies:
+ - bluebird
+ - supports-color
+
+ patch-console@2.0.0: {}
+
+ path-exists@4.0.0: {}
+
+ path-key@3.1.1: {}
+
+ path-scurry@1.11.1:
+ dependencies:
+ lru-cache: 10.4.3
+ minipass: 7.1.2
+
+ path-scurry@2.0.0:
+ dependencies:
+ lru-cache: 11.0.1
+ minipass: 7.1.2
+
+ path-type@4.0.0: {}
+
+ picocolors@1.1.0: {}
+
+ picomatch@2.3.1: {}
+
+ pify@4.0.1: {}
+
+ pirates@4.0.6: {}
+
+ polite-json@5.0.0: {}
+
+ prettier@2.8.8: {}
+
+ prismjs-terminal@1.2.3:
+ dependencies:
+ chalk: 5.3.0
+ prismjs: 1.29.0
+ string-length: 6.0.0
+
+ prismjs@1.29.0: {}
+
+ proc-log@4.2.0: {}
+
+ process-nextick-args@2.0.1: {}
+
+ process-on-spawn@1.0.0:
+ dependencies:
+ fromentries: 1.3.2
+
+ promise-inflight@1.0.1: {}
+
+ promise-retry@2.0.1:
+ dependencies:
+ err-code: 2.0.3
+ retry: 0.12.0
+
+ pseudomap@1.0.2: {}
+
+ queue-microtask@1.2.3: {}
+
+ react-dom@18.3.1(react@18.3.1):
+ dependencies:
+ loose-envify: 1.4.0
+ react: 18.3.1
+ scheduler: 0.23.2
+
+ react-element-to-jsx-string@15.0.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1):
+ dependencies:
+ '@base2/pretty-print-object': 1.0.1
+ is-plain-object: 5.0.0
+ react: 18.3.1
+ react-dom: 18.3.1(react@18.3.1)
+ react-is: 18.1.0
+
+ react-is@18.1.0: {}
+
+ react-reconciler@0.29.2(react@18.3.1):
+ dependencies:
+ loose-envify: 1.4.0
+ react: 18.3.1
+ scheduler: 0.23.2
+
+ react@18.3.1:
+ dependencies:
+ loose-envify: 1.4.0
+
+ read-yaml-file@1.1.0:
+ dependencies:
+ graceful-fs: 4.2.3
+ js-yaml: 3.13.1
+ pify: 4.0.1
+ strip-bom: 3.0.0
+
+ readable-stream@2.3.7:
+ dependencies:
+ core-util-is: 1.0.2
+ inherits: 2.0.4
+ isarray: 1.0.0
+ process-nextick-args: 2.0.1
+ safe-buffer: 5.1.2
+ string_decoder: 1.1.1
+ util-deprecate: 1.0.2
+
+ readdirp@3.6.0:
+ dependencies:
+ picomatch: 2.3.1
+
+ regenerator-runtime@0.13.5: {}
+
+ require-directory@2.1.1: {}
+
+ resolve-from@5.0.0: {}
+
+ resolve-import@2.0.0:
+ dependencies:
+ glob: 11.0.0
+ walk-up-path: 4.0.0
+
+ restore-cursor@4.0.0:
+ dependencies:
+ onetime: 5.1.2
+ signal-exit: 3.0.7
+
+ retry@0.12.0: {}
+
+ reusify@1.0.4: {}
+
+ rimraf@6.0.1:
+ dependencies:
+ glob: 11.0.0
+ package-json-from-dist: 1.0.0
+
+ run-parallel@1.2.0:
+ dependencies:
+ queue-microtask: 1.2.3
+
+ safe-buffer@5.1.2: {}
+
+ safe-buffer@5.2.1: {}
+
+ safer-buffer@2.1.2: {}
+
+ scheduler@0.23.2:
+ dependencies:
+ loose-envify: 1.4.0
+
+ semver@7.6.3: {}
+
+ shebang-command@1.2.0:
+ dependencies:
+ shebang-regex: 1.0.0
+
+ shebang-command@2.0.0:
+ dependencies:
+ shebang-regex: 3.0.0
+
+ shebang-regex@1.0.0: {}
+
+ shebang-regex@3.0.0: {}
+
+ signal-exit@3.0.2: {}
+
+ signal-exit@3.0.7: {}
+
+ signal-exit@4.1.0: {}
+
+ sigstore@2.3.1:
+ dependencies:
+ '@sigstore/bundle': 2.3.2
+ '@sigstore/core': 1.1.0
+ '@sigstore/protobuf-specs': 0.3.2
+ '@sigstore/sign': 2.3.2
+ '@sigstore/tuf': 2.3.4
+ '@sigstore/verify': 1.2.1
+ transitivePeerDependencies:
+ - supports-color
+
+ slash@3.0.0: {}
+
+ slice-ansi@5.0.0:
+ dependencies:
+ ansi-styles: 6.2.1
+ is-fullwidth-code-point: 4.0.0
+
+ slice-ansi@7.1.0:
+ dependencies:
+ ansi-styles: 6.2.1
+ is-fullwidth-code-point: 5.0.0
+
+ smart-buffer@4.2.0: {}
+
+ socks-proxy-agent@8.0.4:
+ dependencies:
+ agent-base: 7.1.1
+ debug: 4.3.7
+ socks: 2.8.3
+ transitivePeerDependencies:
+ - supports-color
+
+ socks@2.8.3:
+ dependencies:
+ ip-address: 9.0.5
+ smart-buffer: 4.2.0
+
+ spawndamnit@2.0.0:
+ dependencies:
+ cross-spawn: 5.1.0
+ signal-exit: 3.0.2
+
+ spdx-correct@3.1.0:
+ dependencies:
+ spdx-expression-parse: 3.0.0
+ spdx-license-ids: 3.0.5
+
+ spdx-exceptions@2.2.0: {}
+
+ spdx-expression-parse@3.0.0:
+ dependencies:
+ spdx-exceptions: 2.2.0
+ spdx-license-ids: 3.0.5
+
+ spdx-license-ids@3.0.5: {}
+
+ sprintf-js@1.0.3: {}
+
+ sprintf-js@1.1.3: {}
+
+ sqlstring@2.3.3: {}
+
+ ssri@10.0.6:
+ dependencies:
+ minipass: 7.1.2
+
+ stack-utils@2.0.6:
+ dependencies:
+ escape-string-regexp: 2.0.0
+
+ string-length@6.0.0:
+ dependencies:
+ strip-ansi: 7.1.0
+
+ string-width@4.2.3:
+ dependencies:
+ emoji-regex: 8.0.0
+ is-fullwidth-code-point: 3.0.0
+ strip-ansi: 6.0.1
+
+ string-width@5.1.2:
+ dependencies:
+ eastasianwidth: 0.2.0
+ emoji-regex: 9.2.2
+ strip-ansi: 7.1.0
+
+ string-width@7.2.0:
+ dependencies:
+ emoji-regex: 10.4.0
+ get-east-asian-width: 1.2.0
+ strip-ansi: 7.1.0
+
+ string_decoder@1.1.1:
+ dependencies:
+ safe-buffer: 5.1.2
+
+ strip-ansi@6.0.1:
+ dependencies:
+ ansi-regex: 5.0.1
+
+ strip-ansi@7.1.0:
+ dependencies:
+ ansi-regex: 6.1.0
+
+ strip-bom@3.0.0: {}
+
+ supports-color@7.2.0:
+ dependencies:
+ has-flag: 4.0.0
+
+ sync-content@2.0.1:
+ dependencies:
+ glob: 11.0.0
+ mkdirp: 3.0.1
+ path-scurry: 2.0.0
+ rimraf: 6.0.1
+ tshy: 3.0.2
+
+ tap-parser@18.0.0:
+ dependencies:
+ events-to-array: 2.0.3
+ tap-yaml: 4.0.0
+
+ tap-yaml@4.0.0:
+ dependencies:
+ yaml: 2.5.1
+ yaml-types: 0.4.0(yaml@2.5.1)
+
+ tap@21.0.1(@types/node@12.20.55)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.5.4):
+ dependencies:
+ '@tapjs/after': 3.0.0(@tapjs/core@4.0.0(@types/node@12.20.55)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))
+ '@tapjs/after-each': 4.0.0(@tapjs/core@4.0.0(@types/node@12.20.55)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))
+ '@tapjs/asserts': 4.0.0(@tapjs/core@4.0.0(@types/node@12.20.55)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+ '@tapjs/before': 4.0.0(@tapjs/core@4.0.0(@types/node@12.20.55)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))
+ '@tapjs/before-each': 4.0.0(@tapjs/core@4.0.0(@types/node@12.20.55)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))
+ '@tapjs/chdir': 3.0.0(@tapjs/core@4.0.0(@types/node@12.20.55)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))
+ '@tapjs/core': 4.0.0(@types/node@12.20.55)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+ '@tapjs/filter': 4.0.0(@tapjs/core@4.0.0(@types/node@12.20.55)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))
+ '@tapjs/fixture': 4.0.0(@tapjs/core@4.0.0(@types/node@12.20.55)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))
+ '@tapjs/intercept': 4.0.0(@tapjs/core@4.0.0(@types/node@12.20.55)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))
+ '@tapjs/mock': 4.0.0(@tapjs/core@4.0.0(@types/node@12.20.55)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))
+ '@tapjs/node-serialize': 4.0.0(@tapjs/core@4.0.0(@types/node@12.20.55)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))
+ '@tapjs/run': 4.0.1(@tapjs/core@4.0.0(@types/node@12.20.55)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@types/node@12.20.55)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+ '@tapjs/snapshot': 4.0.0(@tapjs/core@4.0.0(@types/node@12.20.55)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+ '@tapjs/spawn': 4.0.0(@tapjs/core@4.0.0(@types/node@12.20.55)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))
+ '@tapjs/stdin': 4.0.0(@tapjs/core@4.0.0(@types/node@12.20.55)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))
+ '@tapjs/test': 4.0.0(@tapjs/core@4.0.0(@types/node@12.20.55)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@types/node@12.20.55)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+ '@tapjs/typescript': 3.0.0(@tapjs/core@4.0.0(@types/node@12.20.55)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@types/node@12.20.55)(typescript@5.5.4)
+ '@tapjs/worker': 4.0.0(@tapjs/core@4.0.0(@types/node@12.20.55)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))
+ resolve-import: 2.0.0
+ transitivePeerDependencies:
+ - '@swc/core'
+ - '@swc/wasm'
+ - '@types/node'
+ - '@types/react'
+ - bluebird
+ - bufferutil
+ - monocart-coverage-reports
+ - react
+ - react-devtools-core
+ - react-dom
+ - supports-color
+ - typescript
+ - utf-8-validate
+
+ tar@6.2.1:
+ dependencies:
+ chownr: 2.0.0
+ fs-minipass: 2.1.0
+ minipass: 5.0.0
+ minizlib: 2.1.2
+ mkdirp: 1.0.4
+ yallist: 4.0.0
+
+ tcompare@9.0.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1):
+ dependencies:
+ diff: 5.2.0
+ react-element-to-jsx-string: 15.0.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+ transitivePeerDependencies:
+ - react
+ - react-dom
+
+ term-size@2.2.1: {}
+
+ test-exclude@7.0.1:
+ dependencies:
+ '@istanbuljs/schema': 0.1.3
+ glob: 10.4.5
+ minimatch: 9.0.5
+
+ tmp@0.0.33:
+ dependencies:
+ os-tmpdir: 1.0.2
+
+ to-regex-range@5.0.1:
+ dependencies:
+ is-number: 7.0.0
+
+ trivial-deferred@2.0.0: {}
+
+ tshy@3.0.2:
+ dependencies:
+ chalk: 5.3.0
+ chokidar: 3.6.0
+ foreground-child: 3.3.0
+ minimatch: 10.0.1
+ mkdirp: 3.0.1
+ polite-json: 5.0.0
+ resolve-import: 2.0.0
+ rimraf: 6.0.1
+ sync-content: 2.0.1
+ typescript: 5.5.4
+ walk-up-path: 4.0.0
+
+ tuf-js@2.2.1:
+ dependencies:
+ '@tufjs/models': 2.0.1
+ debug: 4.3.7
+ make-fetch-happen: 13.0.1
+ transitivePeerDependencies:
+ - supports-color
+
+ type-fest@4.26.1: {}
+
+ typescript@5.5.4: {}
+
+ unique-filename@3.0.0:
+ dependencies:
+ unique-slug: 4.0.0
+
+ unique-slug@4.0.0:
+ dependencies:
+ imurmurhash: 0.1.4
+
+ universalify@0.1.2: {}
+
+ util-deprecate@1.0.2: {}
+
+ uuid@8.3.2: {}
+
+ v8-compile-cache-lib@3.0.1: {}
+
+ v8-to-istanbul@9.3.0:
+ dependencies:
+ '@jridgewell/trace-mapping': 0.3.25
+ '@types/istanbul-lib-coverage': 2.0.6
+ convert-source-map: 2.0.0
+
+ validate-npm-package-license@3.0.4:
+ dependencies:
+ spdx-correct: 3.1.0
+ spdx-expression-parse: 3.0.0
+
+ validate-npm-package-name@5.0.1: {}
+
+ walk-up-path@4.0.0: {}
+
+ which@1.3.1:
+ dependencies:
+ isexe: 2.0.0
+
+ which@2.0.2:
+ dependencies:
+ isexe: 2.0.0
+
+ which@4.0.0:
+ dependencies:
+ isexe: 3.1.1
+
+ widest-line@5.0.0:
+ dependencies:
+ string-width: 7.2.0
+
+ wrap-ansi@7.0.0:
+ dependencies:
+ ansi-styles: 4.3.0
+ string-width: 4.2.3
+ strip-ansi: 6.0.1
+
+ wrap-ansi@8.1.0:
+ dependencies:
+ ansi-styles: 6.2.1
+ string-width: 5.1.2
+ strip-ansi: 7.1.0
+
+ wrap-ansi@9.0.0:
+ dependencies:
+ ansi-styles: 6.2.1
+ string-width: 7.2.0
+ strip-ansi: 7.1.0
+
+ ws@8.18.0: {}
+
+ y18n@5.0.8: {}
+
+ yallist@2.1.2: {}
+
+ yallist@4.0.0: {}
+
+ yaml-types@0.4.0(yaml@2.5.1):
+ dependencies:
+ yaml: 2.5.1
+
+ yaml@2.5.1: {}
+
+ yargs-parser@21.1.1: {}
+
+ yargs@17.7.2:
+ dependencies:
+ cliui: 8.0.1
+ escalade: 3.2.0
+ get-caller-file: 2.0.5
+ require-directory: 2.1.1
+ string-width: 4.2.3
+ y18n: 5.0.8
+ yargs-parser: 21.1.1
+
+ yocto-queue@0.1.0: {}
+
+ yoga-wasm-web@0.3.3: {}
diff --git a/pnpm-workspace.yaml b/pnpm-workspace.yaml
new file mode 100644
index 0000000..397c8cf
--- /dev/null
+++ b/pnpm-workspace.yaml
@@ -0,0 +1,4 @@
+packages:
+ - './'
+ # exclude packages that are inside test directories
+ - '!test/*'
\ No newline at end of file
diff --git a/test/codemap.js b/test/codemap.js
index 91b3639..496e111 100644
--- a/test/codemap.js
+++ b/test/codemap.js
@@ -1,7 +1,7 @@
const tap = require('tap');
const getEventClass = require('./../lib/code_map').getEventClass;
-tap.test('Codemap', test => {
+tap.test('Codemap', (test) => {
test.equal(getEventClass(2).name, 'Query');
test.equal(getEventClass(490).name, 'Unknown');
test.end();
diff --git a/test/errors.js b/test/errors.js
index 5df5f99..025e157 100644
--- a/test/errors.js
+++ b/test/errors.js
@@ -4,24 +4,25 @@ const ZongJi = require('../');
const settings = require('./settings/mysql');
const testDb = require('./helpers');
-tap.test('Connect to an invalid host', test => {
+tap.test('Connect to an invalid host', (test) => {
const zongji = new ZongJi({
host: 'wronghost',
user: 'wronguser',
password: 'wrongpass'
});
- zongji.on('error', function(error) {
- test.ok(['ENOTFOUND', 'ETIMEDOUT'].indexOf(error.code) !== -1);
+ zongji.on('error', function (error) {
+ // When running in CI the error is EAI_AGAIN because the DNS lookup for the fake host fails
+ test.ok(['ENOTFOUND', 'ETIMEDOUT', 'EAI_AGAIN'].indexOf(error.code) !== -1);
test.end();
});
- test.tearDown(() => zongji.stop());
+ test.teardown(() => zongji.stop());
zongji.start();
});
-tap.test('Initialise testing db', test => {
- testDb.init(err => {
+tap.test('Initialise testing db', (test) => {
+ testDb.init((err) => {
if (err) {
return test.threw(err);
}
@@ -29,31 +30,27 @@ tap.test('Initialise testing db', test => {
});
});
-const ACCEPTABLE_ERRORS = [
- 'PROTOCOL_CONNECTION_LOST',
- // MySQL 5.1 emits a packet sequence error when the binlog disconnected
- 'PROTOCOL_INCORRECT_PACKET_SEQUENCE'
-];
+const ACCEPTABLE_ERRORS = ['PROTOCOL_CONNECTION_LOST', 'PROTOCOL_INCORRECT_PACKET_SEQUENCE'];
-tap.test('Disconnect binlog connection', test => {
+tap.test('Disconnect binlog connection', (test) => {
const zongji = new ZongJi(settings.connection);
zongji.start({
includeEvents: ['tablemap', 'writerows', 'updaterows', 'deleterows'],
- serverId: testDb.serverId(),
+ serverId: testDb.serverId()
});
zongji.on('ready', () => {
let threadId = zongji.connection.threadId;
test.ok(!isNaN(threadId));
- testDb.execute([`kill ${threadId}`], err => {
+ testDb.execute([`kill ${threadId}`], (err) => {
if (err) {
test.threw(err);
}
});
});
- zongji.on('error', err => {
+ zongji.on('error', (err) => {
if (ACCEPTABLE_ERRORS.indexOf(err.code) > -1) {
zongji.stop();
test.end();
@@ -63,25 +60,25 @@ tap.test('Disconnect binlog connection', test => {
});
});
-tap.test('Disconnect control connection', test => {
+tap.test('Disconnect control connection', (test) => {
const zongji = new ZongJi(settings.connection);
zongji.start({
includeEvents: ['tablemap', 'writerows', 'updaterows', 'deleterows'],
- serverId: testDb.serverId(),
+ serverId: testDb.serverId()
});
zongji.on('ready', () => {
let threadId = zongji.ctrlConnection.threadId;
test.ok(!isNaN(threadId));
- testDb.execute([`kill ${threadId}`], err => {
+ testDb.execute([`kill ${threadId}`], (err) => {
if (err) {
test.threw(err);
}
});
});
- zongji.on('error', err => {
+ zongji.on('error', (err) => {
if (ACCEPTABLE_ERRORS.indexOf(err.code) > -1) {
zongji.stop();
test.end();
@@ -91,37 +88,36 @@ tap.test('Disconnect control connection', test => {
});
});
-
-tap.test('Events come through in sequence', test => {
+tap.test('Events come through in sequence', (test) => {
const NEW_INST_TIMEOUT = 1000;
const UPDATE_INTERVAL = 300;
const UPDATE_COUNT = 5;
const TEST_TABLE = 'reconnect_at_pos';
- test.test(`prepare table ${TEST_TABLE}`, test => {
- testDb.execute([
- `DROP TABLE IF EXISTS ${TEST_TABLE}`,
- `CREATE TABLE ${TEST_TABLE} (col INT UNSIGNED)`,
- `INSERT INTO ${TEST_TABLE} (col) VALUES (10)`,
- ], err =>{
- if (err) {
- return test.threw(err);
+ test.test(`prepare table ${TEST_TABLE}`, {}, (test) => {
+ testDb.execute(
+ [
+ `DROP TABLE IF EXISTS ${TEST_TABLE}`,
+ `CREATE TABLE ${TEST_TABLE} (col INT UNSIGNED)`,
+ `INSERT INTO ${TEST_TABLE} (col) VALUES (10)`
+ ],
+ (err) => {
+ if (err) {
+ return test.threw(err);
+ }
+ test.end();
}
- test.end();
- });
+ );
});
- test.test('when reconnect', test => {
+ test.test('when reconnect', {}, (test) => {
const result = [];
function startPeriodicallyWriting() {
- let sequences = Array.from(
- {length: UPDATE_COUNT},
- (_, i) => `INSERT INTO ${TEST_TABLE} (col) VALUES (${i})`
- );
+ let sequences = Array.from({ length: UPDATE_COUNT }, (_, i) => `INSERT INTO ${TEST_TABLE} (col) VALUES (${i})`);
let updateInterval = setInterval(() => {
- testDb.execute([sequences.shift()], error => {
+ testDb.execute([sequences.shift()], (error) => {
if (error) {
clearInterval(updateInterval);
test.threw(error);
@@ -140,12 +136,10 @@ tap.test('Events come through in sequence', test => {
zongji.start({
...options,
// Must include rotate events for filename and position properties
- includeEvents: [
- 'rotate', 'tablemap', 'writerows', 'updaterows', 'deleterows'
- ]
+ includeEvents: ['rotate', 'tablemap', 'writerows', 'updaterows', 'deleterows']
});
- zongji.on('binlog', function(event) {
+ zongji.on('binlog', function (event) {
if (event.getTypeName() === 'WriteRows') {
result.push(event.rows[0].col);
}
@@ -153,7 +147,7 @@ tap.test('Events come through in sequence', test => {
if (result.length === UPDATE_COUNT) {
test.strictSame(
result,
- Array.from({length: UPDATE_COUNT}, (_, i) => i)
+ Array.from({ length: UPDATE_COUNT }, (_, i) => i)
);
test.end();
}
@@ -164,7 +158,7 @@ tap.test('Events come through in sequence', test => {
let first = newInstance({
serverId: testDb.serverId(),
- startAtEnd: true,
+ startAtEnd: true
});
first.on('ready', () => {
@@ -175,10 +169,10 @@ tap.test('Events come through in sequence', test => {
let second = newInstance({
serverId: testDb.serverId(),
filename: first.get('filename'),
- position: first.get('position'),
+ position: first.get('position')
});
- test.tearDown(() => second.stop());
+ test.teardown(() => second.stop());
});
setTimeout(() => first.stop(), NEW_INST_TIMEOUT);
});
diff --git a/test/events.js b/test/events.js
index b42fc45..4991afd 100644
--- a/test/events.js
+++ b/test/events.js
@@ -5,25 +5,25 @@ const expectEvents = require('./helpers/expectEvents');
const testDb = require('./helpers');
const settings = require('./settings/mysql');
-const checkTableMatches = function(tableName) {
- return function(test, event) {
+const checkTableMatches = function (tableName) {
+ return function (test, event) {
const tableDetails = event.tableMap[event.tableId];
- test.strictEqual(tableDetails.parentSchema, testDb.SCHEMA_NAME);
- test.strictEqual(tableDetails.tableName, tableName);
+ test.equal(tableDetails.parentSchema, testDb.SCHEMA_NAME);
+ test.equal(tableDetails.tableName, tableName);
};
};
// For use with expectEvents()
-const tableMapEvent = function(tableName) {
+const tableMapEvent = function (tableName) {
return {
_type: 'TableMap',
tableName: tableName,
- schemaName: testDb.SCHEMA_NAME,
+ schemaName: testDb.SCHEMA_NAME
};
};
-tap.test('Initialise testing db', test => {
- testDb.init(err => {
+tap.test('Initialise testing db', (test) => {
+ testDb.init((err) => {
if (err) {
return test.threw(err);
}
@@ -31,115 +31,128 @@ tap.test('Initialise testing db', test => {
});
});
-tap.test('Binlog option startAtEnd', test => {
+tap.test('Binlog option startAtEnd', (test) => {
const TEST_TABLE = 'start_at_end_test';
- test.test(`prepare new table ${TEST_TABLE}`, test => {
- testDb.execute([
- 'FLUSH LOGS', // Ensure ZongJi perserveres through a rotation event
- `DROP TABLE IF EXISTS ${TEST_TABLE}`,
- `CREATE TABLE ${TEST_TABLE} (col INT UNSIGNED)`,
- `INSERT INTO ${TEST_TABLE} (col) VALUES (12)`,
- ], err => {
- if (err) {
- return test.fail(err);
+ test.test(`prepare new table ${TEST_TABLE}`, (test) => {
+ testDb.execute(
+ [
+ 'FLUSH LOGS', // Ensure ZongJi perserveres through a rotation event
+ `DROP TABLE IF EXISTS ${TEST_TABLE}`,
+ `CREATE TABLE ${TEST_TABLE} (col INT UNSIGNED)`,
+ `INSERT INTO ${TEST_TABLE} (col) VALUES (12)`
+ ],
+ (err) => {
+ if (err) {
+ return test.fail(err);
+ }
+ test.end();
}
- test.end();
- });
+ );
});
- test.test('start', test => {
+ test.test('start', (test) => {
const events = [];
const zongji = new ZongJi(settings.connection);
- test.tearDown(() => zongji.stop());
+ test.teardown(() => zongji.stop());
- zongji.on('binlog', evt => events.push(evt));
+ zongji.on('binlog', (evt) => events.push(evt));
zongji.start({
startAtEnd: true,
- includeEvents: ['tablemap', 'writerows'],
+ includeEvents: ['tablemap', 'writerows']
});
zongji.on('ready', () => {
- testDb.execute([
- `INSERT INTO ${TEST_TABLE} (col) VALUES (9)`,
- ], err => {
+ testDb.execute([`INSERT INTO ${TEST_TABLE} (col) VALUES (9)`], (err) => {
if (err) {
return test.fail(err);
}
// Should only have 2 events since ZongJi start
- expectEvents(test, events,
+ expectEvents(
+ test,
+ events,
[
- { /* do not bother testing anything on first event */ },
- { rows: [ { col: 9 } ] }
- ], 1,
+ {
+ /* do not bother testing anything on first event */
+ },
+ { rows: [{ col: 9 }] }
+ ],
+ 1,
() => test.end()
);
});
});
-
-
});
test.end();
});
-tap.test('Class constructor', test => {
+tap.test('Class constructor', (test) => {
const TEST_TABLE = 'conn_obj_test';
- test.test(`prepare table ${TEST_TABLE}`, test => {
- testDb.execute([
- `DROP TABLE IF EXISTS ${TEST_TABLE}`,
- `CREATE TABLE ${TEST_TABLE} (col INT UNSIGNED)`,
- `INSERT INTO ${TEST_TABLE} (col) VALUES (10)`,
- ], err => {
- if (err) {
- return test.fail(err);
- }
+ test.test(`prepare table ${TEST_TABLE}`, (test) => {
+ testDb.execute(
+ [
+ `DROP TABLE IF EXISTS ${TEST_TABLE}`,
+ `CREATE TABLE ${TEST_TABLE} (col INT UNSIGNED)`,
+ `INSERT INTO ${TEST_TABLE} (col) VALUES (10)`
+ ],
+ (err) => {
+ if (err) {
+ return test.fail(err);
+ }
- test.end();
- });
+ test.end();
+ }
+ );
});
function run(test, zongji) {
- test.tearDown(() => zongji.stop());
+ test.teardown(() => zongji.stop());
const events = [];
- zongji.on('binlog', evt => events.push(evt));
+ zongji.on('binlog', (evt) => events.push(evt));
zongji.start({
startAtEnd: true,
serverId: testDb.serverId(),
- includeEvents: ['tablemap', 'writerows'],
+ includeEvents: ['tablemap', 'writerows']
});
zongji.on('ready', () => {
- let value = Math.round(Math.random() * 100);
- testDb.execute([
- `INSERT INTO ${TEST_TABLE} (col) VALUES (${value})`,
- ], err => {
- if (err) {
- return test.fail(err);
- }
- // Should only have 2 events since ZongJi start
+ let value = Math.round(Math.random() * 100);
+ testDb.execute([`INSERT INTO ${TEST_TABLE} (col) VALUES (${value})`], (err) => {
+ if (err) {
+ return test.fail(err);
+ }
+ // Should only have 2 events since ZongJi start
- expectEvents(test, events, [
- { /* do not bother testing anything on first event */ },
- { rows: [ { col: value } ] }
- ], 1, () => test.end());
- });
+ expectEvents(
+ test,
+ events,
+ [
+ {
+ /* do not bother testing anything on first event */
+ },
+ { rows: [{ col: value }] }
+ ],
+ 1,
+ () => test.end()
+ );
+ });
});
}
const mysql = require('@vlasky/mysql');
- test.test('pass a mysql connection instance', test => {
+ test.test('pass a mysql connection instance', (test) => {
const conn = mysql.createConnection(settings.connection);
const zongji = new ZongJi(conn);
zongji.on('stopped', () => conn.destroy());
run(test, zongji);
});
- test.test('pass a mysql pool', test => {
+ test.test('pass a mysql pool', (test) => {
const pool = mysql.createConnection(settings.connection);
const zongji = new ZongJi(pool);
zongji.on('stopped', () => pool.end());
@@ -149,14 +162,11 @@ tap.test('Class constructor', test => {
test.end();
});
-tap.test('Write events', test => {
+tap.test('Write events', (test) => {
const TEST_TABLE = 'write_events_test';
- test.test(`prepare table ${TEST_TABLE}`, test => {
- testDb.execute([
- `DROP TABLE IF EXISTS ${TEST_TABLE}`,
- `CREATE TABLE ${TEST_TABLE} (col INT UNSIGNED)`,
- ], err => {
+ test.test(`prepare table ${TEST_TABLE}`, (test) => {
+ testDb.execute([`DROP TABLE IF EXISTS ${TEST_TABLE}`, `CREATE TABLE ${TEST_TABLE} (col INT UNSIGNED)`], (err) => {
if (err) {
return test.fail(err);
}
@@ -165,120 +175,123 @@ tap.test('Write events', test => {
});
});
- test.test('write a record', test => {
+ test.test('write a record', (test) => {
const events = [];
const zongji = new ZongJi(settings.connection);
- test.tearDown(() => zongji.stop());
+ test.teardown(() => zongji.stop());
zongji.start({
startAtEnd: true,
serverId: testDb.serverId(),
- includeEvents: ['tablemap', 'writerows'],
+ includeEvents: ['tablemap', 'writerows']
});
zongji.on('ready', () => {
- testDb.execute([
- `INSERT INTO ${TEST_TABLE} (col) VALUES (14)`,
- ], err => {
+ testDb.execute([`INSERT INTO ${TEST_TABLE} (col) VALUES (14)`], (err) => {
if (err) {
return test.fail(err);
}
});
});
- zongji.on('binlog', evt => {
+ zongji.on('binlog', (evt) => {
events.push(evt);
if (events.length == 2) {
- expectEvents(test, events,
+ expectEvents(
+ test,
+ events,
[
tableMapEvent(TEST_TABLE),
{
_type: 'WriteRows',
_checkTableMap: checkTableMatches(TEST_TABLE),
- rows: [ { col: 14 } ],
+ rows: [{ col: 14 }]
}
- ], 1,
+ ],
+ 1,
() => test.end()
);
}
});
});
- test.test('update a record', test => {
+ test.test('update a record', (test) => {
const events = [];
const zongji = new ZongJi(settings.connection);
- test.tearDown(() => zongji.stop());
+ test.teardown(() => zongji.stop());
zongji.start({
startAtEnd: true,
serverId: testDb.serverId(),
- includeEvents: ['tablemap', 'updaterows'],
+ includeEvents: ['tablemap', 'updaterows']
});
zongji.on('ready', () => {
- testDb.execute([
- `UPDATE ${TEST_TABLE} SET col=15`,
- ], err => {
+ testDb.execute([`UPDATE ${TEST_TABLE} SET col=15`], (err) => {
if (err) {
return test.fail(err);
}
});
});
- zongji.on('binlog', evt => {
+ zongji.on('binlog', (evt) => {
events.push(evt);
if (events.length == 2) {
- expectEvents(test, events,
+ expectEvents(
+ test,
+ events,
[
tableMapEvent(TEST_TABLE),
{
_type: 'UpdateRows',
_checkTableMap: checkTableMatches(TEST_TABLE),
- rows: [ { before: { col: 14 }, after: { col: 15 } } ],
+ rows: [{ before: { col: 14 }, after: { col: 15 } }]
}
- ], 1,
+ ],
+ 1,
() => test.end()
);
}
});
});
- test.test('delete a record', test => {
+ test.test('delete a record', (test) => {
const events = [];
const zongji = new ZongJi(settings.connection);
- test.tearDown(() => zongji.stop());
+ test.teardown(() => zongji.stop());
zongji.start({
startAtEnd: true,
serverId: testDb.serverId(),
- includeEvents: ['tablemap', 'deleterows'],
+ includeEvents: ['tablemap', 'deleterows']
});
zongji.on('ready', () => {
- testDb.execute([
- `DELETE FROM ${TEST_TABLE}`,
- ], err => {
+ testDb.execute([`DELETE FROM ${TEST_TABLE}`], (err) => {
if (err) {
return test.fail(err);
}
});
});
- zongji.on('binlog', evt => {
+ zongji.on('binlog', (evt) => {
events.push(evt);
if (events.length == 2) {
- expectEvents(test, events,
+ expectEvents(
+ test,
+ events,
[
tableMapEvent(TEST_TABLE),
{
_type: 'DeleteRows',
_checkTableMap: checkTableMatches(TEST_TABLE),
- rows: [ { col: 15 } ],
+ rows: [{ col: 15 }]
}
- ], 1,
+ ],
+ 1,
() => test.end()
);
}
@@ -288,42 +301,50 @@ tap.test('Write events', test => {
test.end();
});
-tap.test('Intvar / Query event', test => {
+tap.test('Intvar / Query event', (test) => {
const TEST_TABLE = 'intvar_test';
- test.test(`prepare table ${TEST_TABLE}`, test => {
- testDb.execute([
- `DROP TABLE IF EXISTS ${TEST_TABLE}`,
- `CREATE TABLE ${TEST_TABLE} (id INT NOT NULL AUTO_INCREMENT PRIMARY KEY, col INT)`,
- ], err => {
- if (err) {
- return test.fail(err);
- }
+ test.test(`prepare table ${TEST_TABLE}`, (test) => {
+ testDb.execute(
+ [
+ `DROP TABLE IF EXISTS ${TEST_TABLE}`,
+ `CREATE TABLE ${TEST_TABLE} (id INT NOT NULL AUTO_INCREMENT PRIMARY KEY, col INT)`
+ ],
+ (err) => {
+ if (err) {
+ return test.fail(err);
+ }
- test.end();
- });
+ test.end();
+ }
+ );
});
- test.test('begin', test => {
+ test.test('begin', (test) => {
const events = [];
const zongji = new ZongJi(settings.connection);
- test.tearDown(() => zongji.stop());
+ test.teardown(() => zongji.stop());
- zongji.on('binlog', event => {
+ zongji.on('binlog', (event) => {
if (event.getTypeName() === 'Query' && event.query === 'BEGIN') {
return;
}
events.push(event);
if (events.length === 6) {
- expectEvents(test, events, [
+ expectEvents(
+ test,
+ events,
+ [
{ _type: 'IntVar', type: 2, value: 1 },
{ _type: 'Query' },
{ _type: 'IntVar', type: 2, value: 2 },
{ _type: 'Query' },
{ _type: 'IntVar', type: 1, value: 2 },
- { _type: 'Query' },
- ], 1, () => test.end()
+ { _type: 'Query' }
+ ],
+ 1,
+ () => test.end()
);
}
});
@@ -331,47 +352,50 @@ tap.test('Intvar / Query event', test => {
zongji.start({
startAtEnd: true,
serverId: testDb.serverId(),
- includeEvents: ['intvar', 'query'],
+ includeEvents: ['intvar', 'query']
});
zongji.on('ready', () => {
- testDb.execute([
- 'SET SESSION binlog_format=STATEMENT',
- `INSERT INTO ${TEST_TABLE} (col) VALUES (10)`,
- `INSERT INTO ${TEST_TABLE} (col) VALUES (11)`,
- `INSERT INTO ${TEST_TABLE} (id, col) VALUES (100, LAST_INSERT_ID())`,
- // Other tests expect row-based replication, so reset here
- 'SET SESSION binlog_format=ROW',
- ], err => {
- if (err) {
- test.fail(err);
+ testDb.execute(
+ [
+ 'SET SESSION binlog_format=STATEMENT',
+ `INSERT INTO ${TEST_TABLE} (col) VALUES (10)`,
+ `INSERT INTO ${TEST_TABLE} (col) VALUES (11)`,
+ `INSERT INTO ${TEST_TABLE} (id, col) VALUES (100, LAST_INSERT_ID())`,
+ // Other tests expect row-based replication, so reset here
+ 'SET SESSION binlog_format=ROW'
+ ],
+ (err) => {
+ if (err) {
+ test.fail(err);
+ }
}
- });
+ );
});
-
});
test.end();
});
-tap.test('With many columns', test => {
+tap.test('With many columns', (test) => {
const TEST_TABLE = '33_columns';
const events = [];
const zongji = new ZongJi(settings.connection);
- test.tearDown(() => zongji.stop());
- zongji.on('binlog', evt => events.push(evt));
+ test.teardown(() => zongji.stop());
+ zongji.on('binlog', (evt) => events.push(evt));
zongji.start({
startAtEnd: true,
serverId: testDb.serverId(),
- includeEvents: ['tablemap', 'writerows'],
+ includeEvents: ['tablemap', 'writerows']
});
zongji.on('ready', () => {
- testDb.execute([
- `DROP TABLE IF EXISTS ${TEST_TABLE}`,
- `CREATE TABLE ${TEST_TABLE} (
+ testDb.execute(
+ [
+ `DROP TABLE IF EXISTS ${TEST_TABLE}`,
+ `CREATE TABLE ${TEST_TABLE} (
col1 INT SIGNED NULL, col2 BIGINT SIGNED NULL,
col3 TINYINT SIGNED NULL, col4 SMALLINT SIGNED NULL,
col5 MEDIUMINT SIGNED NULL, col6 INT SIGNED NULL,
@@ -389,7 +413,7 @@ tap.test('With many columns', test => {
col29 SMALLINT SIGNED NULL, col30 INT SIGNED NULL,
col31 BIGINT SIGNED NULL, col32 TINYINT SIGNED NULL,
col33 SMALLINT SIGNED NULL)`,
- `INSERT INTO ${TEST_TABLE} (col1, col2, col3, col4, col5, col33) VALUES
+ `INSERT INTO ${TEST_TABLE} (col1, col2, col3, col4, col5, col33) VALUES
(null, null, null, null, null, null),
(-1, -1, -1, -1, -1, -1),
(2147483647, 9007199254740993, 127, 32767, 8388607, 12),
@@ -398,16 +422,21 @@ tap.test('With many columns', test => {
(-1, 9223372036854775809, -1, -1, null, -6),
(123456, -9223372036854775809, 96, 300, 1000, null),
(-123456, 9223372036854775807, -96, -300, -1000, null)`,
- `SELECT * FROM ${TEST_TABLE}`,
- ], (err, result) => {
- if (err) {
- return test.fail(err);
- }
+ `SELECT * FROM ${TEST_TABLE}`
+ ],
+ (err, result) => {
+ if (err) {
+ return test.fail(err);
+ }
- expectEvents(test, events, [
- { _type: 'TableMap' },
- { rows: result[result.length - 1], _type: 'WriteRows' }
- ], 1, test.end);
- });
+ expectEvents(
+ test,
+ events,
+ [{ _type: 'TableMap' }, { rows: result[result.length - 1], _type: 'WriteRows' }],
+ 1,
+ test.end
+ );
+ }
+ );
});
});
diff --git a/test/filtering.js b/test/filtering.js
index dc3826b..c5f9a29 100644
--- a/test/filtering.js
+++ b/test/filtering.js
@@ -4,8 +4,8 @@ const settings = require('./settings/mysql');
const testDb = require('./helpers');
// this test is only used for initialization
-tap.test('Initialise testing db', test => {
- testDb.init(err => {
+tap.test('Initialise testing db', (test) => {
+ testDb.init((err) => {
if (err) {
return test.fail(err);
}
@@ -14,81 +14,81 @@ tap.test('Initialise testing db', test => {
});
});
-tap.test('Unit test', test => {
+tap.test('Unit test', (test) => {
const zongji = new ZongJi(settings.connection);
- test.test('Check that exclude overrides include', test => {
- zongji._filters({
- includeEvents: ['tablemap', 'writerows', 'updaterows', 'rotate'],
- excludeEvents: ['rotate'],
- includeSchema: {db1: true, db2: ['one_table'], db3: true},
- excludeSchema: {db3: true}
- });
- test.ok(!zongji._skipEvent('tablemap'));
- test.ok(zongji._skipEvent('rotate'));
- test.ok(!zongji._skipSchema('db1', 'any_table'));
- test.ok(!zongji._skipSchema('db2', 'one_table'));
- test.ok(zongji._skipSchema('db2', 'another_table'));
- test.ok(zongji._skipSchema('db3', 'any_table'));
-
- test.end();
+ test.test('Check that exclude overrides include', (test) => {
+ zongji._filters({
+ includeEvents: ['tablemap', 'writerows', 'updaterows', 'rotate'],
+ excludeEvents: ['rotate'],
+ includeSchema: { db1: true, db2: ['one_table'], db3: true },
+ excludeSchema: { db3: true }
});
+ test.ok(!zongji._skipEvent('tablemap'));
+ test.ok(zongji._skipEvent('rotate'));
+ test.ok(!zongji._skipSchema('db1', 'any_table'));
+ test.ok(!zongji._skipSchema('db2', 'one_table'));
+ test.ok(zongji._skipSchema('db2', 'another_table'));
+ test.ok(zongji._skipSchema('db3', 'any_table'));
- test.test(test => {
- zongji._filters({
- includeSchema: {db1: ['just_me']}
- });
- test.ok(!zongji._skipSchema('db1', 'just_me'));
- test.ok(zongji._skipSchema('db2', 'anything_else'));
- test.ok(zongji._skipSchema('db1', 'not_me'));
+ test.end();
+ });
- test.end();
+ test.test((test) => {
+ zongji._filters({
+ includeSchema: { db1: ['just_me'] }
});
+ test.ok(!zongji._skipSchema('db1', 'just_me'));
+ test.ok(zongji._skipSchema('db2', 'anything_else'));
+ test.ok(zongji._skipSchema('db1', 'not_me'));
- test.test(test => {
- zongji._filters({
- excludeSchema: {db1: ['not_me']}
- });
-
- test.ok(!zongji._skipSchema('db1', 'anything_else'));
- test.ok(!zongji._skipSchema('db2', 'anything_else'));
- test.ok(zongji._skipSchema('db1', 'not_me'));
+ test.end();
+ });
- test.end();
+ test.test((test) => {
+ zongji._filters({
+ excludeSchema: { db1: ['not_me'] }
});
- test.test(test =>{
- zongji._filters({
- excludeEvents: ['rotate']
- });
- test.ok(!zongji._skipEvent('tablemap'));
- test.ok(zongji._skipEvent('rotate'));
+ test.ok(!zongji._skipSchema('db1', 'anything_else'));
+ test.ok(!zongji._skipSchema('db2', 'anything_else'));
+ test.ok(zongji._skipSchema('db1', 'not_me'));
- test.end();
- });
+ test.end();
+ });
- test.test(test =>{
- test.plan(2);
- zongji._filters({
- includeEvents: ['rotate'],
- });
- test.ok(zongji._skipEvent('tablemap'));
- test.ok(!zongji._skipEvent('rotate'));
+ test.test((test) => {
+ zongji._filters({
+ excludeEvents: ['rotate']
});
+ test.ok(!zongji._skipEvent('tablemap'));
+ test.ok(zongji._skipEvent('rotate'));
test.end();
+ });
+
+ test.test((test) => {
+ test.plan(2);
+ zongji._filters({
+ includeEvents: ['rotate']
+ });
+ test.ok(zongji._skipEvent('tablemap'));
+ test.ok(!zongji._skipEvent('rotate'));
+ });
+
+ test.end();
});
-tap.test('Exclue all the schema', test => {
+tap.test('Exclue all the schema', (test) => {
const zongji = new ZongJi(settings.connection);
const eventLog = [];
const errorLog = [];
- zongji.on('binlog', event => eventLog.push(event));
- zongji.on('error', error => errorLog.push(error));
+ zongji.on('binlog', (event) => eventLog.push(event));
+ zongji.on('error', (error) => errorLog.push(error));
- test.tearDown(() => zongji.stop());
+ test.teardown(() => zongji.stop());
// Set includeSchema to not include anything, recieve no row events
// Ensure that filters are applied
@@ -100,54 +100,57 @@ tap.test('Exclue all the schema', test => {
zongji.on('ready', () => {
const testTable = 'filter_test';
- testDb.execute([
- `DROP TABLE IF EXISTS ${testTable}`,
- `CREATE TABLE ${testTable} (col INT UNSIGNED)`,
- `INSERT INTO ${testTable} (col) VALUES (10)`,
- `UPDATE ${testTable} SET col = 15`,
- `DELETE FROM ${testTable}`,
- ], (error) => {
- if (error) {
- return test.fail(error);
+ testDb.execute(
+ [
+ `DROP TABLE IF EXISTS ${testTable}`,
+ `CREATE TABLE ${testTable} (col INT UNSIGNED)`,
+ `INSERT INTO ${testTable} (col) VALUES (10)`,
+ `UPDATE ${testTable} SET col = 15`,
+ `DELETE FROM ${testTable}`
+ ],
+ (error) => {
+ if (error) {
+ return test.fail(error);
+ }
+
+ // Give 1 second to see if any events are emitted, they should not be!
+ setTimeout(() => {
+ test.equal(eventLog.length, 0);
+ test.equal(errorLog.length, 0);
+ test.end();
+ }, 1000);
}
-
- // Give 1 second to see if any events are emitted, they should not be!
- setTimeout(() => {
- test.equal(eventLog.length, 0);
- test.equal(errorLog.length, 0);
- test.end();
- }, 1000);
- });
+ );
});
});
-tap.test('Change filter when ZongJi is running', test => {
+tap.test('Change filter when ZongJi is running', (test) => {
// Set includeSchema to skip table after the tableMap has already been
// cached once, recieve no row events afterwards
const testTable = 'after_init_test';
const includeSchema = {};
- includeSchema[settings.connection.database] = [ testTable ];
+ includeSchema[settings.connection.database] = [testTable];
const zongji = new ZongJi(settings.connection);
const eventLog = [];
- zongji.on('binlog', event => eventLog.push(event));
- zongji.on('error', error => test.fail(error));
+ zongji.on('binlog', (event) => eventLog.push(event));
+ zongji.on('error', (error) => test.fail(error));
zongji.start({
includeEvents: ['tablemap', 'writerows', 'updaterows', 'deleterows'],
includeSchema: includeSchema
});
- test.tearDown(() => zongji.stop());
+ test.teardown(() => zongji.stop());
testDb.execute(
[
- `DROP TABLE IF EXISTS ${testTable}`,
- `CREATE TABLE ${testTable} (col INT UNSIGNED)`,
- `INSERT INTO ${testTable} (col) VALUES (10)`,
+ `DROP TABLE IF EXISTS ${testTable}`,
+ `CREATE TABLE ${testTable} (col INT UNSIGNED)`,
+ `INSERT INTO ${testTable} (col) VALUES (10)`
],
- err => {
+ (err) => {
if (err) {
return test.fail(err);
}
@@ -155,31 +158,25 @@ tap.test('Change filter when ZongJi is running', test => {
setTimeout(() => {
test.equal(eventLog.length, 2);
- test.test('update filter', test => {
+ test.test('update filter', (test) => {
// reset for next test
eventLog.splice(0, eventLog.length);
zongji._filters({
includeEvents: ['tablemap', 'writerows', 'updaterows', 'deleterows'],
- includeSchema: {},
+ includeSchema: {}
});
- testDb.execute(
- [
- `UPDATE ${testTable} SET col = 15`,
- `DELETE FROM ${testTable}`,
- ],
- (error) => {
- if (error) {
- return test.fail(error);
- }
-
- setTimeout(() => {
- test.equal(eventLog.length, 0);
- test.end();
- }, 1000);
+ testDb.execute([`UPDATE ${testTable} SET col = 15`, `DELETE FROM ${testTable}`], (error) => {
+ if (error) {
+ return test.fail(error);
}
- );
+
+ setTimeout(() => {
+ test.equal(eventLog.length, 0);
+ test.end();
+ }, 1000);
+ });
});
test.end();
diff --git a/test/helpers/expectEvents.js b/test/helpers/expectEvents.js
index a65069a..125179e 100644
--- a/test/helpers/expectEvents.js
+++ b/test/helpers/expectEvents.js
@@ -12,19 +12,19 @@ const MAX_WAIT = 3000;
// @param {function} callback - Call when done, no arguments (optional)
// @param waitIndex - Do not specify, used internally
function expectEvents(test, events, expected, multiplier, callback, waitIndex) {
- if (events.length < (expected.length * multiplier) && !(waitIndex > 10)) {
+ if (events.length < expected.length * multiplier && !(waitIndex > 10)) {
// Wait for events to appear
- setTimeout(function() {
+ setTimeout(function () {
expectEvents(test, events, expected, multiplier, callback, (waitIndex || 0) + 1);
}, MAX_WAIT / 10);
} else {
- test.strictEqual(events.length, expected.length * multiplier);
- events.forEach(function(event, index) {
+ test.equal(events.length, expected.length * multiplier);
+ events.forEach(function (event, index) {
const exp = expected[index % expected.length];
for (const i in exp) {
if (Object.prototype.hasOwnProperty.call(exp, i)) {
if (i === '_type') {
- test.strictEqual(event.getTypeName(), exp[i]);
+ test.equal(event.getTypeName(), exp[i]);
} else if (String(i).substr(0, 1) === '_') {
exp[i](test, event);
} else {
diff --git a/test/helpers/index.js b/test/helpers/index.js
index fd1ea62..fff2d30 100644
--- a/test/helpers/index.js
+++ b/test/helpers/index.js
@@ -7,43 +7,63 @@ const SCHEMA_NAME = settings.connection.database;
exports.SCHEMA_NAME = SCHEMA_NAME;
-exports.init = function(done) {
- const connObj = {...settings.connection};
+exports.init = async function (done) {
+ const connObj = { ...settings.connection };
// database doesn't exist at this time
delete connObj.database;
const conn = mysql.createConnection(connObj);
+ // Syntax for resetting the binlog changed with MySQL 8.4
+ const version = await getVersion();
+ const cleanupQuery = version >= '8.4' ? 'RESET BINARY LOGS AND GTIDS' : 'RESET MASTER';
+
querySequence(
conn,
[
- 'SET GLOBAL sql_mode = \'' + settings.sessionSqlMode + '\'',
+ "SET GLOBAL sql_mode = '" + settings.sessionSqlMode + "'",
`DROP DATABASE IF EXISTS ${SCHEMA_NAME}`,
- `CREATE DATABASE ${SCHEMA_NAME}`,
+ `CREATE DATABASE IF NOT EXISTS ${SCHEMA_NAME}`,
`USE ${SCHEMA_NAME}`,
- 'RESET MASTER',
+ cleanupQuery
// 'SELECT VERSION() AS version'
],
- error => {
+ (error) => {
conn.destroy();
done(error);
}
);
};
-exports.execute = function(queries, done) {
+exports.execute = function (queries, done) {
const conn = mysql.createConnection(settings.connection);
- querySequence(
- conn,
- queries,
- (error, result) => {
+ querySequence(conn, queries, (error, result) => {
+ conn.destroy();
+ done(error, result);
+ });
+};
+
+const getVersion = function () {
+ const connObj = { ...settings.connection };
+ // database doesn't exist at this time
+ delete connObj.database;
+ const conn = mysql.createConnection(connObj);
+
+ return new Promise((resolve, reject) => {
+ querySequence(conn, ['SELECT VERSION() AS version'], (err, results) => {
conn.destroy();
- done(error, result);
- }
- );
+
+ if (err) {
+ console.log('Error getting version:', err);
+ reject(err);
+ }
+
+ resolve(results[results.length - 1][0].version);
+ });
+ });
};
-const checkVersion = function(expected, actual) {
- const parts = expected.split('.').map(part => parseInt(part, 10));
+const checkVersion = function (expected, actual) {
+ const parts = expected.split('.').map((part) => parseInt(part, 10));
for (let i = 0; i < parts.length; i++) {
if (actual[i] == parts[i]) {
continue;
@@ -53,8 +73,8 @@ const checkVersion = function(expected, actual) {
return true;
};
-exports.requireVersion = function(expected, done) {
- const connObj = {...settings.connection};
+const requireVersion = function (expected, done) {
+ const connObj = { ...settings.connection };
// database doesn't exist at this time
delete connObj.database;
const conn = mysql.createConnection(connObj);
@@ -65,10 +85,10 @@ exports.requireVersion = function(expected, done) {
throw err;
}
- let ver = results[results.length - 1][0]
- .version.split('-')[0]
+ let ver = results[results.length - 1][0].version
+ .split('-')[0]
.split('.')
- .map(part => parseInt(part, 10));
+ .map((part) => parseInt(part, 10));
if (checkVersion(expected, ver)) {
done();
@@ -76,9 +96,11 @@ exports.requireVersion = function(expected, done) {
});
};
+exports.requireVersion = requireVersion;
+
let id = 100;
-exports.serverId = function() {
- id ++;
+exports.serverId = function () {
+ id++;
return id;
};
diff --git a/test/helpers/querySequence.js b/test/helpers/querySequence.js
index 9a74825..4622b5f 100644
--- a/test/helpers/querySequence.js
+++ b/test/helpers/querySequence.js
@@ -3,23 +3,22 @@
// @param {boolean} debug - Print queries as they execute (optional)
// @param {[string]} queries - Queries to execute, in order
// @param {function} callback - Call when complete
-module.exports = function(connection, debug, queries, callback) {
+module.exports = function (connection, debug, queries, callback) {
if (debug instanceof Array) {
callback = queries;
queries = debug;
debug = false;
}
const results = [];
- const sequence = queries.map(function(queryStr, index) {
- return function() {
+ const sequence = queries.map(function (queryStr, index) {
+ return function () {
debug && console.log('Query Sequence', index, queryStr);
- connection.query(queryStr, function(err, rows) {
+ connection.query(queryStr, function (err, rows) {
if (err) callback(err);
results.push(rows);
if (index < sequence.length - 1) {
sequence[index + 1]();
- }
- else {
+ } else {
callback(null, results);
}
});
diff --git a/test/rowimage.js b/test/rowimage.js
index f325645..5ee67fc 100644
--- a/test/rowimage.js
+++ b/test/rowimage.js
@@ -5,8 +5,8 @@ const testDb = require('./helpers');
const expectEvents = require('./helpers/expectEvents');
const settings = require('./settings/mysql');
-tap.test('Initialise testing db', test => {
- testDb.init(err => {
+tap.test('Initialise testing db', (test) => {
+ testDb.init((err) => {
if (err) {
return test.threw(err);
}
@@ -15,66 +15,70 @@ tap.test('Initialise testing db', test => {
});
testDb.requireVersion('5.6.2', () => {
-
- tap.test('Update with binlog_row_image=minmal', test => {
+ tap.test('Update with binlog_row_image=minmal', (test) => {
const TEST_TABLE = 'row_image_minimal_test';
- test.test(`prepare table ${TEST_TABLE}`, test => {
- testDb.execute([
- 'SET GLOBAL binlog_row_image=minimal',
- `DROP TABLE IF EXISTS ${TEST_TABLE}`,
- `CREATE TABLE ${TEST_TABLE} (
+ test.test(`prepare table ${TEST_TABLE}`, (test) => {
+ testDb.execute(
+ [
+ 'SET GLOBAL binlog_row_image=minimal',
+ `DROP TABLE IF EXISTS ${TEST_TABLE}`,
+ `CREATE TABLE ${TEST_TABLE} (
id int primary key auto_increment,
name varchar(20),
age tinyint,
height mediumint
)`,
- `INSERT INTO ${TEST_TABLE} (name, age) VALUES ('Tom', 2)`,
- ], err => {
- if (err) {
- return test.fail(err);
- }
+ `INSERT INTO ${TEST_TABLE} (name, age) VALUES ('Tom', 2)`
+ ],
+ (err) => {
+ if (err) {
+ return test.fail(err);
+ }
- test.end();
- });
+ test.end();
+ }
+ );
});
- test.test('update a record', test => {
+ test.test('update a record', (test) => {
const events = [];
const zongji = new ZongJi(settings.connection);
- test.tearDown(() => zongji.stop());
+ test.teardown(() => zongji.stop());
zongji.on('ready', () => {
- testDb.execute([
- `UPDATE ${TEST_TABLE} SET age=age+1 WHERE id=1`,
- ], err => {
+ testDb.execute([`UPDATE ${TEST_TABLE} SET age=age+1 WHERE id=1`], (err) => {
if (err) {
test.fail(err);
}
});
});
- zongji.on('binlog', evt => {
+ zongji.on('binlog', (evt) => {
events.push(evt);
if (events.length == 2) {
- expectEvents(test, events,
+ expectEvents(
+ test,
+ events,
[
{
_type: 'TableMap',
tableName: TEST_TABLE,
- schemaName: testDb.SCHEMA_NAME,
+ schemaName: testDb.SCHEMA_NAME
},
{
_type: 'UpdateRows',
rows: [
{
before: { id: 1, age: null, name: null, height: null },
- after: { id: null, age: 3, name: null, height: null },
- },
- ],
+ after: { id: null, age: 3, name: null, height: null }
+ }
+ ]
}
- ], 1, () => test.end()
+ ],
+ 1,
+ () => test.end()
);
}
});
@@ -82,70 +86,75 @@ testDb.requireVersion('5.6.2', () => {
zongji.start({
startAtEnd: true,
serverId: testDb.serverId(),
- includeEvents: ['tablemap', 'updaterows'],
+ includeEvents: ['tablemap', 'updaterows']
});
});
test.end();
});
- tap.test('Update with binlog_row_image=noblob', test => {
+ tap.test('Update with binlog_row_image=noblob', (test) => {
const TEST_TABLE = 'row_image_noblob_test';
- test.test(`prepare table ${TEST_TABLE}`, test => {
- testDb.execute([
- 'SET GLOBAL binlog_row_image=noblob',
- `DROP TABLE IF EXISTS ${TEST_TABLE}`,
- `CREATE TABLE ${TEST_TABLE} (
+ test.test(`prepare table ${TEST_TABLE}`, (test) => {
+ testDb.execute(
+ [
+ 'SET GLOBAL binlog_row_image=noblob',
+ `DROP TABLE IF EXISTS ${TEST_TABLE}`,
+ `CREATE TABLE ${TEST_TABLE} (
id int primary key auto_increment,
summary text
)`,
- `INSERT INTO ${TEST_TABLE} (summary) VALUES ('Hello world')`,
- ], err => {
- if (err) {
- return test.fail(err);
- }
+ `INSERT INTO ${TEST_TABLE} (summary) VALUES ('Hello world')`
+ ],
+ (err) => {
+ if (err) {
+ return test.fail(err);
+ }
- test.end();
- });
+ test.end();
+ }
+ );
});
- test.test('update a record', test => {
+ test.test('update a record', (test) => {
const events = [];
const zongji = new ZongJi(settings.connection);
- test.tearDown(() => zongji.stop());
+ test.teardown(() => zongji.stop());
zongji.on('ready', () => {
- testDb.execute([
- `UPDATE ${TEST_TABLE} SET summary='hello again' WHERE id=1`,
- ], err => {
+ testDb.execute([`UPDATE ${TEST_TABLE} SET summary='hello again' WHERE id=1`], (err) => {
if (err) {
test.fail(err);
}
});
});
- zongji.on('binlog', evt => {
+ zongji.on('binlog', (evt) => {
events.push(evt);
if (events.length == 2) {
- expectEvents(test, events,
+ expectEvents(
+ test,
+ events,
[
{
_type: 'TableMap',
tableName: TEST_TABLE,
- schemaName: testDb.SCHEMA_NAME,
+ schemaName: testDb.SCHEMA_NAME
},
{
_type: 'UpdateRows',
rows: [
{
before: { id: 1, summary: null },
- after: { id: 1, summary: 'hello again' },
- },
- ],
+ after: { id: 1, summary: 'hello again' }
+ }
+ ]
}
- ], 1, () => test.end()
+ ],
+ 1,
+ () => test.end()
);
}
});
@@ -153,7 +162,7 @@ testDb.requireVersion('5.6.2', () => {
zongji.start({
startAtEnd: true,
serverId: testDb.serverId(),
- includeEvents: ['tablemap', 'updaterows'],
+ includeEvents: ['tablemap', 'updaterows']
});
});
diff --git a/test/settings/mysql.js b/test/settings/mysql.js
index e3ef27a..da6a1f3 100644
--- a/test/settings/mysql.js
+++ b/test/settings/mysql.js
@@ -2,14 +2,15 @@
// Database will be recreated!
module.exports = {
connection: {
- host : process.env.MYSQL_HOST || 'localhost',
- user : 'root',
- password : 'numtel',
- charset : 'utf8mb4_unicode_ci',
- port : process.env.TEST_MYSQL_PORT,
- dateStrings : process.env.TEST_DATE_STRINGS === 'true',
+ host: process.env.MYSQL_HOST || 'localhost',
+ user: 'root',
+ password: 'my_password',
+ charset: 'utf8mb4_unicode_ci',
+ port: process.env.TEST_MYSQL_PORT,
+ dateStrings: process.env.TEST_DATE_STRINGS === 'true',
database: 'zongji_test',
+ timeZone: 'Z'
// debug: true
},
- sessionSqlMode: process.env.TEST_SESSION_SQL_MODE || '',
+ sessionSqlMode: process.env.TEST_SESSION_SQL_MODE || ''
};
diff --git a/test/suites.js b/test/suites.js
new file mode 100644
index 0000000..d0ffe70
--- /dev/null
+++ b/test/suites.js
@@ -0,0 +1,29 @@
+const tap = require('tap');
+
+// This is a workaround to force the test suites to run sequentially
+// Since the suites run off the same test database they do interfere with each other when running in parallel
+
+tap.test('Errors', (t) => {
+ require(`./errors`);
+ t.end();
+});
+
+tap.test('Events', (t) => {
+ require(`./events`);
+ t.end();
+});
+
+tap.test('Filtering', (t) => {
+ require(`./filtering`);
+ t.end();
+});
+
+tap.test('RowImage', (t) => {
+ require(`./rowimage`);
+ t.end();
+});
+
+tap.test('Types', (t) => {
+ require(`./types`);
+ t.end();
+});
diff --git a/test/travis/runner.sh b/test/travis/runner.sh
deleted file mode 100755
index d8fba83..0000000
--- a/test/travis/runner.sh
+++ /dev/null
@@ -1,17 +0,0 @@
-#!/bin/bash
-mysqlPorts=( 3355 3356 3357 )
-sqlModes=( ANSI_QUOTES "" )
-dateString=( true false )
-for dateMode in "${dateString[@]}"; do
- for mode in "${sqlModes[@]}"; do
- for i in "${mysqlPorts[@]}"; do
- while ! mysqladmin ping -h127.0.0.1 -P$i --silent; do
- echo "$(date) - still trying $i"
- sleep 1
- done
- echo "$(date) - connected successfully $i"
- echo -e "\033[1;35m Running test on port $i using mode '$mode' with dateStrings:$dateMode \033[0m"
- TEST_DATE_STRINGS=$dateMode TEST_SESSION_SQL_MODE=$mode TEST_MYSQL_PORT=$i npm test || exit $?
- done
- done
-done
diff --git a/test/types.js b/test/types.js
index 7f80818..27e6b8b 100644
--- a/test/types.js
+++ b/test/types.js
@@ -3,8 +3,7 @@ const ZongJi = require('../');
const expectEvents = require('./helpers/expectEvents');
const testDb = require('./helpers');
const settings = require('./settings/mysql');
-const strRepeat = testDb.strRepeat;
-
+const assert = require('node:assert');
// @param {string} name - unique identifier of this test [a-zA-Z0-9]
// @param {[string]} fields - MySQL field description e.g. `BIGINT NULL`
@@ -14,66 +13,69 @@ function defineTypeTest(name, fields, testRows, customTest) {
const TEST_TABLE = 'type_' + name;
const fieldText = fields.map((field, index) => `col${index} ${field}`).join(',');
const insertColumns = fields.map((field, index) => 'col' + index).join(',');
- const testQueries = [
- `CREATE TABLE ${TEST_TABLE} (${fieldText})`,
- 'SET @@session.time_zone = "+00:00"']
+ const testQueries = [`CREATE TABLE ${TEST_TABLE} (${fieldText})`]
.concat(
- testRows.map(row => `INSERT INTO ${TEST_TABLE}
+ testRows.map(
+ (row) => `INSERT INTO ${TEST_TABLE}
(${insertColumns}) VALUES
- (${row.map(field => field === null ? 'null' : field).join(',')})`
+ (${row.map((field) => (field === null ? 'null' : field)).join(',')})`
)
)
- .concat([
- 'SET @@session.time_zone = "SYSTEM"',
- `SELECT * FROM ${TEST_TABLE}`,
- ]);
+ .concat(['SET @@session.time_zone = "+00:00"', `SELECT * FROM ${TEST_TABLE}`]);
- tap.test('Initialise testing db', test => {
- testDb.init(err => {
- if (err) {
- return test.fail(err);
- }
+ tap.test('Initialise testing db', (test) => {
+ testDb.init((err) => {
+ if (err) {
+ return test.fail(err);
+ }
- test.end();
- });
+ test.end();
});
+ });
- tap.test(name, test => {
- const eventLog = [];
- const errorLog = [];
+ tap.test(name, (test) => {
+ const eventLog = [];
+ const errorLog = [];
- const zongji = new ZongJi(settings.connection);
- test.tearDown(() => zongji.stop());
+ const zongji = new ZongJi(settings.connection);
+ test.teardown(() => zongji.stop());
- zongji.start({
- includeEvents: ['tablemap', 'writerows', 'updaterows', 'deleterows'],
- serverId: testDb.serverId(),
- });
- zongji.on('binlog', event => eventLog.push(event));
- zongji.on('error', error => errorLog.push(error));
- zongji.on('ready', () => {
- testDb.execute(testQueries, (error, results) => {
- if (error) {
- return test.fail(error);
+ zongji.start({
+ includeEvents: ['tablemap', 'writerows', 'updaterows', 'deleterows'],
+ serverId: testDb.serverId()
+ });
+ zongji.on('binlog', (event) => eventLog.push(event));
+ zongji.on('error', (error) => errorLog.push(error));
+ zongji.on('ready', () => {
+ testDb.execute(testQueries, (error, results) => {
+ if (error) {
+ return test.fail(error);
+ }
+ const selectResult = results[results.length - 1].map((result) => ({
+ ...result
+ }));
+ const expectedWrite = {
+ _type: 'WriteRows',
+ _checkTableMap: (test, event) => {
+ const tableDetails = event.tableMap[event.tableId];
+ test.same(tableDetails.parentSchema, testDb.SCHEMA_NAME);
+ test.same(tableDetails.tableName, TEST_TABLE);
}
- const selectResult = results[results.length - 1];
- const expectedWrite = {
- _type: 'WriteRows',
- _checkTableMap: (test, event) => {
- const tableDetails = event.tableMap[event.tableId];
- test.same(tableDetails.parentSchema, testDb.SCHEMA_NAME);
- test.same(tableDetails.tableName, TEST_TABLE);
- }
- };
+ };
- expectEvents(test, eventLog, [
+ expectEvents(
+ test,
+ eventLog,
+ [
{
_type: 'TableMap',
tableName: TEST_TABLE,
- schemaName: testDb.SCHEMA_NAME,
+ schemaName: testDb.SCHEMA_NAME
},
expectedWrite
- ], testRows.length, () => {
+ ],
+ testRows.length,
+ () => {
test.equal(errorLog.length, 0);
const binlogRows = eventLog.reduce((prev, curr) => {
@@ -86,399 +88,208 @@ function defineTypeTest(name, fields, testRows, customTest) {
if (customTest) {
customTest.bind(selectResult)(test, { rows: binlogRows });
} else {
- test.deepEqual(selectResult, binlogRows);
+ assert.deepEqual(selectResult, binlogRows);
}
test.end();
- });
- });
+ }
+ );
});
});
+ });
}
// Begin test case definitions
-defineTypeTest('set', [
- 'SET(' +
- "'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', " +
- "'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z', " +
- "'a2', 'b2', 'c2', 'd2', 'e2', 'f2', 'g2', 'h2', 'i2', 'j2', 'k2', " +
- "'l2', 'm2', 'n2', 'o2', 'p2', 'q2', 'r2', 's2', 't2', 'u2', 'v2', " +
- "'w2', 'x2', 'y2', 'z2')",
- "SET('a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm')"
-], [
- ["'a,d'", "'a,d'"],
- ["'d,a,b'", "'d,a,b'"],
- ["'a,d,i,z2'", "'a,d,i,k,l,m,c'"],
- ["'a,j,d'", "'a,j,d'"],
- ["'d,a,p'", "'d,a,m'"],
- ["''", "''"],
- [null, null]
-]);
-
-defineTypeTest('bit', [
- 'BIT(64) NULL',
- 'BIT(32) NULL',
-], [
- ["b'111'", "b'111'"],
- ["b'100000'", "b'100000'"],
+defineTypeTest(
+ 'set',
[
- // 64th position
- "b'1000000000000000000000000000000000000000000000000000000000000000'",
- // 32nd position
- "b'10000000000000000000000000000000'"
+ 'SET(' +
+ "'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', " +
+ "'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z', " +
+ "'a2', 'b2', 'c2', 'd2', 'e2', 'f2', 'g2', 'h2', 'i2', 'j2', 'k2', " +
+ "'l2', 'm2', 'n2', 'o2', 'p2', 'q2', 'r2', 's2', 't2', 'u2', 'v2', " +
+ "'w2', 'x2', 'y2', 'z2')",
+ "SET('a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm')"
],
- [null, null]
-]);
-
-defineTypeTest('enum', [
- 'ENUM(' +
- "'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', " +
- "'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z', " +
- "'a2', 'b2', 'c2', 'd2', 'e2', 'f2', 'g2', 'h2', 'i2', 'j2', 'k2', " +
- "'l2', 'm2', 'n2', 'o2', 'p2', 'q2', 'r2', 's2', 't2', 'u2', 'v2', " +
- "'w2', 'x2', 'y2', 'z2')",
- "ENUM('a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm')"
-], [
- ["'a'", "'b'"],
- ["'z2'", "'l'"],
- [null, null]
-]);
-
-defineTypeTest('int_signed', [
- 'INT SIGNED NULL',
- 'BIGINT SIGNED NULL',
- 'TINYINT SIGNED NULL',
- 'SMALLINT SIGNED NULL',
- 'MEDIUMINT SIGNED NULL'
-], [
- [2147483647, 9007199254740992, 127, 32767, 8388607],
- [-2147483648, -9007199254740992, -128, -32768, -8388608],
- [-2147483645, -9007199254740990, -126, -32766, -8388606],
- [-1, -1, -1, -1, -1],
- [123456, 100, 96, 300, 1000],
- [-123456, -100, -96, -300, -1000]
-]);
-
-defineTypeTest('int_unsigned', [
- 'INT UNSIGNED NULL',
- 'BIGINT UNSIGNED NULL',
- 'TINYINT UNSIGNED NULL',
- 'SMALLINT UNSIGNED NULL',
- 'MEDIUMINT UNSIGNED NULL'
-], [
- [4294967295, 9007199254740992, 255, 65535, 16777215],
- [1, 1, 1, 1, 1],
- [1, 8589934591, 1, 1, 1],
- [123456, 100, 96, 300, 1000]
-]);
-
-defineTypeTest('double', [
- 'DOUBLE NULL'
-], [
- [0], [1.0], [-1.0], [123.456], [-13.47], [0.00005], [-0.00005],
- [8589934592.123], [-8589934592.123], [null]
-]);
-
-defineTypeTest('float', [
- 'FLOAT NULL'
-], [
- [0], [1.0], [-1.0], [123.456], [-13.47], [3999.12]
-], function(test, event) {
+ [
+ ["'a,d'", "'a,d'"],
+ ["'d,a,b'", "'d,a,b'"],
+ ["'a,d,i,z2'", "'a,d,i,k,l,m,c'"],
+ ["'a,j,d'", "'a,j,d'"],
+ ["'d,a,p'", "'d,a,m'"],
+ ["''", "''"],
+ [null, null]
+ ]
+);
+
+defineTypeTest(
+ 'bit',
+ ['BIT(64) NULL', 'BIT(32) NULL'],
+ [
+ ["b'111'", "b'111'"],
+ ["b'100000'", "b'100000'"],
+ [
+ // 64th position
+ "b'1000000000000000000000000000000000000000000000000000000000000000'",
+ // 32nd position
+ "b'10000000000000000000000000000000'"
+ ],
+ [null, null]
+ ]
+);
+
+defineTypeTest(
+ 'enum',
+ [
+ 'ENUM(' +
+ "'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', " +
+ "'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z', " +
+ "'a2', 'b2', 'c2', 'd2', 'e2', 'f2', 'g2', 'h2', 'i2', 'j2', 'k2', " +
+ "'l2', 'm2', 'n2', 'o2', 'p2', 'q2', 'r2', 's2', 't2', 'u2', 'v2', " +
+ "'w2', 'x2', 'y2', 'z2')",
+ "ENUM('a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm')"
+ ],
+ [
+ ["'a'", "'b'"],
+ ["'z2'", "'l'"],
+ [null, null]
+ ]
+);
+
+defineTypeTest(
+ 'int_signed',
+ ['INT SIGNED NULL', 'BIGINT SIGNED NULL', 'TINYINT SIGNED NULL', 'SMALLINT SIGNED NULL', 'MEDIUMINT SIGNED NULL'],
+ [
+ [2147483647, 9007199254740992, 127, 32767, 8388607],
+ [-2147483648, -9007199254740992, -128, -32768, -8388608],
+ [-2147483645, -9007199254740990, -126, -32766, -8388606],
+ [-1, -1, -1, -1, -1],
+ [123456, 100, 96, 300, 1000],
+ [-123456, -100, -96, -300, -1000]
+ ]
+);
+
+defineTypeTest(
+ 'int_unsigned',
+ [
+ 'INT UNSIGNED NULL',
+ 'BIGINT UNSIGNED NULL',
+ 'TINYINT UNSIGNED NULL',
+ 'SMALLINT UNSIGNED NULL',
+ 'MEDIUMINT UNSIGNED NULL'
+ ],
+ [
+ [4294967295, 9007199254740992, 255, 65535, 16777215],
+ [1, 1, 1, 1, 1],
+ [1, 8589934591, 1, 1, 1],
+ [123456, 100, 96, 300, 1000]
+ ]
+);
+
+defineTypeTest(
+ 'double',
+ ['DOUBLE NULL'],
+ [[0], [1.0], [-1.0], [123.456], [-13.47], [0.00005], [-0.00005], [8589934592.123], [-8589934592.123], [null]]
+);
+
+defineTypeTest('float', ['FLOAT NULL'], [[0], [1.0], [-1.0], [123.456], [-13.47], [3999.12]], function (test, event) {
// Ensure sum of differences is very low
- const diff = event.rows.reduce(function(prev, cur, index) {
- return prev + Math.abs(cur.col0 - this[index].col0);
- }.bind(this), 0);
+ const diff = event.rows.reduce(
+ function (prev, cur, index) {
+ return prev + Math.abs(cur.col0 - this[index].col0);
+ }.bind(this),
+ 0
+ );
test.ok(diff < 0.001);
});
-defineTypeTest('decimal', [
- 'DECIMAL(30, 10) NULL',
- 'DECIMAL(30, 20) NULL'
-], [
- [1.0], [-1.0], [123.456], [-13.47],
- [123456789.123], [-123456789.123], [null],
- [1447410019.012], [123.00000123], [0.0004321]
-].map(function(x) { return [ x[0], x[0] ]; }));
-
-defineTypeTest('blob', [
- 'BLOB NULL',
- 'TINYBLOB NULL',
- 'MEDIUMBLOB NULL',
- 'LONGBLOB NULL'
-], [
- ["'something here'", "'tiny'", "'medium'", "'long'"],
- ["'nothing there'", "'small'", "'average'", "'huge'"],
- [null, null, null, null]
-]);
-
-defineTypeTest('geometry', [
- 'GEOMETRY',
-], [
- ["GeomFromText('POINT(1 1)')"],
- ["GeomFromText('POLYGON((0 0,10 0,10 10,0 10,0 0),(5 5,7 5,7 7,5 7, 5 5))')"]
-]);
-
-defineTypeTest('time_no_fraction', [
- 'TIME NULL'
-], [
- ["'-00:00:01'"],
- ["'00:00:00'"],
- ["'00:07:00'"],
- ["'20:00:00'"],
- ["'19:00:00'"],
- ["'04:00:00'"],
- ["'-838:59:59'"],
- ["'838:59:59'"],
- ["'01:07:08'"],
- ["'01:27:28'"],
- ["'-01:07:08'"],
- ["'-01:27:28'"],
-]);
-
-defineTypeTest('datetime_no_fraction', [
- 'DATETIME NULL'
-], [
- ["'1000-01-01 00:00:00'"],
- ["'9999-12-31 23:59:59'"],
- ["'2014-12-27 01:07:08'"]
-]);
-
-defineTypeTest('temporal_other', [
- 'DATE NULL',
- 'TIMESTAMP NULL',
- 'YEAR NULL'
-], [
- ["'1000-01-01'", "'1970-01-01 00:00:01'", 1901],
- ["'9999-12-31'", "'2038-01-18 03:14:07'", 2155],
- ["'2014-12-27'", "'2014-12-27 01:07:08'", 2014]
-]);
-
-defineTypeTest('string', [
- 'VARCHAR(250) NULL',
- 'CHAR(20) NULL',
- 'BINARY(3) NULL',
- 'VARBINARY(10) NULL'
-], [
- ["'something here'", "'tiny'", "'a'", "'binary'"],
- ["'nothing there'", "'small'", "'b'", "'test123'"],
- [null, null, null, null]
-]);
-
-defineTypeTest('text', [
- 'TINYTEXT NULL',
- 'MEDIUMTEXT NULL',
- 'LONGTEXT NULL',
- 'TEXT NULL'
-], [
- ["'something here'", "'tiny'", "'a'", "'binary'"],
- ["'nothing there'", "'small'", "'b'", "'test123'"],
- [null, null, null, null]
-]);
-
-// ======= below require different version of MySQL =======
-
-testDb.requireVersion('5.5.3', () => {
- defineTypeTest('utf8mb4', [
- 'VARCHAR(10) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci'
- ], [
- ["'á'"], // 3 byte character
- ["'𠜎'"], // 4 byte character
- ]);
-});
-
-testDb.requireVersion('5.6.4', () => {
- defineTypeTest('time_fraction', [
- 'TIME(0) NULL',
- 'TIME(1) NULL',
- 'TIME(3) NULL',
- 'TIME(6) NULL'
- ], [
- ["'-00:00:01'", "'-00:00:01.1'", "'-00:00:01.002'", "'-00:00:01.123456'"],
- ["'00:00:00'", "'00:00:00.2'", "'00:00:00.123'", "'-00:00:00.000001'"],
- ["'00:07:00'", "'00:07:00.3'", "'00:07:00.654'", "'00:07:00.010203'"],
- ["'20:00:00'", "'20:00:00.4'", "'20:00:00.090'", "'20:00:00.987654'"],
- ["'19:00:00'", "'19:00:00.5'", "'19:00:00.999'", "'19:00:00.000001'"],
- ["'04:00:00'", "'04:00:00.0'", "'04:00:00.01'", "'04:00:00.1'"],
- ]);
-
- defineTypeTest('datetime_fraction', [
- 'DATETIME(0) NULL',
- 'DATETIME(1) NULL',
- 'DATETIME(4) NULL',
- 'DATETIME(6) NULL'
- ], [
- ["'1000-01-01 00:00:00'", "'1000-01-01 00:00:00.5'",
- "'1000-01-01 00:00:00.9999'", "'1000-01-01 00:00:00.123456'"],
- ["'9999-12-31 23:59:59'", "'9999-12-31 23:59:59.9'",
- "'9999-12-31 23:59:59.6543'", "'9999-12-31 23:59:59.000001'"],
- ["'9999-12-31 23:59:59'", "'9999-12-31 23:59:59.1'",
- "'9999-12-31 23:59:59.1234'", "'9999-12-31 23:59:59.4326'" ],
- ["'2014-12-27 01:07:08'", "'2014-12-27 01:07:08.0'",
- "'2014-12-27 01:07:08.0001'", "'2014-12-27 01:07:08.05'" ]
- ]);
-
- defineTypeTest('timestamp_fractional', [
- 'TIMESTAMP(3) NULL',
- ], [
- ["'1970-01-01 00:00:01.123'"],
- ["'2038-01-18 03:14:07.900'"],
- ["'2014-12-27 01:07:08.001'"],
- ]);
-
- defineTypeTest('datetime_then_decimal', [
- 'DATETIME(3) NULL',
- 'DECIMAL(30, 10) NULL'
- ], [
- ["'1000-01-01 00:00:00.123'", 10.10],
- ["'9999-12-31 23:59:59.001'", -123.45],
- ["'2014-12-27 01:07:08.053'", 12345.123]
- ]);
-});
-
-testDb.requireVersion('5.7.8', () => {
- defineTypeTest('json', [
- 'JSON NULL'
- ], [
- // Small Object
- ['\'{"key1": "value1", "key2": "value2", "key3": 34}\''],
- // Small Object with nested object
- ['\'{"key1": { "key2": "value2", "key3": 34 } }\''],
- // Small Object with double nested object
- ['\'{"key1": { "key2": { "key2": "value2", "key3": 34 }, "key3": 34 } }\''],
- // Small Object with unicode character in key and value
- ['\'{ "key2": "válue2", "keybá3": 34 }\''],
- // Large Object
- ['\'{' + strRepeat('"key##": "value##", ', 2839) + '"keyLast": 34}\''],
- // Large Object with nested small objects
- ['\'{' + strRepeat('"key##": {"subkey": "value##"}, ', 2000) + '"keyLast": 34}\''],
- // Large Object with nested small arrays
- ['\'{' + strRepeat('"key##": ["a", ##], ', 3000) + '"keyLast": 34}\''],
- // Small array
- ['\'["a", "b", 1]\''],
- // Small array with nested array
- ['\'["a", [2, "b"], 1]\''],
- // Small array with double nested array
- ['\'["a", [2, ["b", 4, 54]], 1]\''],
- // Large Array
- ['\'[' + strRepeat('"value##", ', 6000) + '34]\''],
- // Large Array with nested small objects
- ['\'[' + strRepeat('{"key##": "value##"}, ', 6000) + '34]\''],
- // Large Array with nested small arrays
- ['\'[' + strRepeat('[##, "value##"], ', 6000) + '34]\''],
- // Strings of various lengths
- ['\'"hello"\''],
- ['\'{"twobytelen": "' + strRepeat('a', 256) + '"}\''],
- ['\'{"twobytelen": "' + strRepeat('a', 257) + '"}\''],
- ['\'{"twobytelen": "' + strRepeat('a', 258) + '"}\''],
- ['\'{"twobytelen": "' + strRepeat('a', 7383) + '"}\''],
- ['\'{"twobytelen": "' + strRepeat('a', 16383) + '"}\''],
- ['\'{"threebytelen": "' + strRepeat('a', 16388) + '"}\''],
- // Integers
- ['\'{"key1": -10, "keyb": 34}\''],
- ['\'10\''],
- ['\'2147483647\''], // Int32
- ['\'-2147483647\''], // Int32
- ['\'2147483648\''], // Int64
- ['\'4294967295\''], // Int64
- ['\'-4294967295\''], // Int64
- ['\'9007199254740992\''], // UInt64
- ['\'-9007199254740992\''], // Int64
- ['\'3e2\''],
- ['\'-3e-2\''],
- // Doubles
- ['\'10.123\''],
- ['\'{"doubleval": "-123.38439", "another": 1283192.0004}\''],
- // Literals
- ['\'{"literaltest1": null, "literal2": true, "literal3": false}\''],
- ['\'{"literaltest1": null, "stringafter": "heyos", "number": 35}\''],
- ['\'null\''],
- ['\'true\''],
- ['\'false\''],
- // Opaque custom data
- ['JSON_OBJECT(\'key\', BINARY \'hi\')'],
- ['JSON_OBJECT(\'key\', MAKEDATE(2014,361))'],
- ['JSON_OBJECT(\'key\', DATE(\'100-01-01\'))'],
- ['JSON_OBJECT(\'key\', DATE(\'1000-01-01\'))'],
- ['JSON_OBJECT(\'key\', DATE(\'1000-01-02\'))'],
- ['JSON_OBJECT(\'key\', DATE(\'1000-01-03\'))'],
- ['JSON_OBJECT(\'key\', DATE(\'1000-02-01\'))'],
- ['JSON_OBJECT(\'key\', DATE(\'1000-12-31\'))'],
- ['JSON_OBJECT(\'key\', DATE(\'2001-01-01\'))'],
- ['JSON_OBJECT(\'key\', DATE(\'2002-01-01\'))'],
- ['JSON_OBJECT(\'key\', DATE(\'2003-01-01\'))'],
- ['JSON_OBJECT(\'key\', DATE(\'2004-01-01\'))'],
- ['JSON_OBJECT(\'key\', DATE(\'9999-01-01\'))'],
- ['JSON_OBJECT(\'key\', DATE(\'9999-12-31\'))'],
- ['JSON_OBJECT(\'key\', DATE(\'2002-02-02\'))'],
- ['JSON_OBJECT(\'key\', DATE(\'2002-03-03\'))'],
- ['JSON_OBJECT(\'key\', DATE(\'2002-12-12\'))'],
- ['JSON_OBJECT(\'key\', MAKETIME(-838,59,59))'],
- ['JSON_OBJECT(\'key\', MAKETIME(838,59,59))'],
- ['JSON_OBJECT(\'zero\', MAKETIME(0,0,0))'],
- ['JSON_OBJECT(\'onehour\', MAKETIME(1,0,0))'],
- ['JSON_OBJECT(\'oneminu\', MAKETIME(0,1,0))'],
- ['JSON_OBJECT(\'oneseco\', MAKETIME(0,0,1))'],
- ['JSON_OBJECT(\'hurnsec\', MAKETIME(1,0,1))'],
- ['JSON_OBJECT(\'minnsec\', MAKETIME(0,1,1))'],
- ['JSON_OBJECT(\'2minsec\', MAKETIME(0,2,2))'],
- ['JSON_OBJECT(\'2min15sec\', MAKETIME(0,2,15))'],
- ['JSON_OBJECT(\'2min16sec\', MAKETIME(0,2,16))'],
- ['JSON_OBJECT(\'2min32sec\', MAKETIME(0,2,32))'],
- ['JSON_OBJECT(\'2min59sec\', MAKETIME(0,2,59))'],
- ['JSON_OBJECT(\'key\', MAKETIME(0,59,0))'],
- ['JSON_OBJECT(\'key\', MAKETIME(0,0,59))'],
- ['JSON_OBJECT(\'key\', MAKETIME(20,15,10))'],
- ['JSON_OBJECT(\'key\', MAKETIME(21,15,10))'],
- ['JSON_OBJECT(\'key\', MAKETIME(22,15,10))'],
- ['JSON_OBJECT(\'oneseco\', MAKETIME(0,0,1.123))'],
- ['JSON_OBJECT(\'oneseco\', MAKETIME(0,0,1.000123))'],
- ['JSON_OBJECT(\'key\', MAKETIME(-20,00,00))'],
- ['JSON_OBJECT(\'-59min\', TIME(\'-00:00:00.003\'))'],
- ['JSON_OBJECT(\'-59min\', TIME(\'00:00:00.003\'))'],
- ['JSON_OBJECT(\'-59min\', TIME(\'-00:59:59\'))'],
- ['JSON_OBJECT(\'-59min\', TIME(\'-00:59:59.0003\'))'],
- ['JSON_OBJECT(\'-1hr\', MAKETIME(-1,00,00))'],
- ['JSON_OBJECT(\'-2hr\', MAKETIME(-2,00,00))'],
- ['JSON_OBJECT(\'-1hr1sec\', MAKETIME(-1,00,1))'],
- ['JSON_OBJECT(\'-1hr1sec\', MAKETIME(-1,00,0.1))'],
- ['JSON_OBJECT(\'key\', TIMESTAMP(\'2014-12-27\'))'],
- ['JSON_OBJECT(\'key\', TIMESTAMP(\'2014-12-27 01:07:08\'))'],
- ['JSON_OBJECT(\'key\', TIMESTAMP(\'2014-12-27 01:07:08.123\'))'],
- ['JSON_OBJECT(\'key\', TIMESTAMP(\'2014-12-27 01:07:08.000456\'))'],
- ['JSON_OBJECT(\'key\', TIMESTAMP(\'2014-12-28\'))'],
- ['JSON_OBJECT(\'key\', TIMESTAMP(\'2014-12-29\'))'],
- ['JSON_OBJECT(\'key\', TIMESTAMP(\'2003-12-31 12:00:00\'))'],
- ['JSON_OBJECT(\'key\', TIMESTAMP(\'2003-12-31 12:00:00.123\'))'],
- ['JSON_OBJECT(\'key\', UNIX_TIMESTAMP(\'2015-11-13 10:20:19.012\'))'],
- ], function(test, event) { // caution here , don't use arrow function
- // JSON from MySQL client has different whitespace than JSON.stringify
- // Therefore, parse and perform deep equality
- event.rows.forEach((row, index) => {
- // test.deepEqual does not work when comparison objects exceed 65536 bytes
- // Perform alternative assertions for these large cases
- const expected = JSON.parse(this[index].col0);
- const actual = JSON.parse(row.col0);
- if (this[index].col0.length > 65536) {
- // Large cases are either array or object
- if (expected instanceof Array) {
- test.strictEqual(expected.length, actual.length);
- for (let i = 0; i < expected.length; i++) {
- test.deepEqual(expected[i], actual[i]);
- }
- } else {
- const expectedKeys = Object.keys(expected);
- const actualKeys = Object.keys(actual);
- test.strictEqual(expectedKeys.length, actualKeys.length);
- test.deepEqual(expectedKeys, actualKeys);
- for (let j = 0; j < expectedKeys.length; j++) {
- test.deepEqual(expected[expectedKeys[j]], actual[expectedKeys[j]]);
- }
- }
- } else {
- // Comparison objects are smaller than 65536 bytes
- test.deepEqual(expected, actual);
- }
- });
- });
-});
+defineTypeTest(
+ 'decimal',
+ ['DECIMAL(30, 10) NULL', 'DECIMAL(30, 20) NULL'],
+ [
+ [1.0],
+ [-1.0],
+ [123.456],
+ [-13.47],
+ [123456789.123],
+ [-123456789.123],
+ [null],
+ [1447410019.012],
+ [123.00000123],
+ [0.0004321]
+ ].map(function (x) {
+ return [x[0], x[0]];
+ })
+);
+
+defineTypeTest(
+ 'blob',
+ ['BLOB NULL', 'TINYBLOB NULL', 'MEDIUMBLOB NULL', 'LONGBLOB NULL'],
+ [
+ ["'something here'", "'tiny'", "'medium'", "'long'"],
+ ["'nothing there'", "'small'", "'average'", "'huge'"],
+ [null, null, null, null]
+ ]
+);
+
+defineTypeTest(
+ 'geometry',
+ ['GEOMETRY'],
+ [["ST_GeomFromText('POINT(1 1)')"], ["ST_GeomFromText('POLYGON((0 0,10 0,10 10,0 10,0 0),(5 5,7 5,7 7,5 7, 5 5))')"]]
+);
+
+defineTypeTest(
+ 'time_no_fraction',
+ ['TIME NULL'],
+ [
+ ["'-00:00:01'"],
+ ["'00:00:00'"],
+ ["'00:07:00'"],
+ ["'20:00:00'"],
+ ["'19:00:00'"],
+ ["'04:00:00'"],
+ ["'-838:59:59'"],
+ ["'838:59:59'"],
+ ["'01:07:08'"],
+ ["'01:27:28'"],
+ ["'-01:07:08'"],
+ ["'-01:27:28'"]
+ ]
+);
+
+defineTypeTest(
+ 'datetime_no_fraction',
+ ['DATETIME NULL'],
+ [["'1000-01-01 00:00:00'"], ["'9999-12-31 23:59:59'"], ["'2014-12-27 01:07:08'"]]
+);
+
+defineTypeTest(
+ 'temporal_other',
+ ['DATE NULL', 'TIMESTAMP NULL', 'YEAR NULL'],
+ [
+ ["'1000-01-01'", "'1970-01-01 00:00:01'", 1901],
+ ["'9999-12-31'", "'2038-01-18 03:14:07'", 2155],
+ ["'2014-12-27'", "'2014-12-27 01:07:08'", 2014]
+ ]
+);
+
+defineTypeTest(
+ 'string',
+ ['VARCHAR(250) NULL', 'CHAR(20) NULL', 'BINARY(3) NULL', 'VARBINARY(10) NULL'],
+ [
+ ["'something here'", "'tiny'", "'a'", "'binary'"],
+ ["'nothing there'", "'small'", "'b'", "'test123'"],
+ [null, null, null, null]
+ ]
+);
+
+defineTypeTest(
+ 'text',
+ ['TINYTEXT NULL', 'MEDIUMTEXT NULL', 'LONGTEXT NULL', 'TEXT NULL'],
+ [
+ ["'something here'", "'tiny'", "'a'", "'binary'"],
+ ["'nothing there'", "'small'", "'b'", "'test123'"],
+ [null, null, null, null]
+ ]
+);