diff --git a/.all-contributorsrc b/.all-contributorsrc
index 16d16eb97..0f8bd3fb0 100644
--- a/.all-contributorsrc
+++ b/.all-contributorsrc
@@ -60,6 +60,33 @@
"contributions": [
"bug"
]
+ },
+ {
+ "login": "kochie",
+ "name": "Robert Koch",
+ "avatar_url": "https://avatars.githubusercontent.com/u/10809884?v=4",
+ "profile": "https://me.kochie.io",
+ "contributions": [
+ "code"
+ ]
+ },
+ {
+ "login": "cschuijt",
+ "name": "Casper Schuijt",
+ "avatar_url": "https://avatars.githubusercontent.com/u/5460015?v=4",
+ "profile": "http://cschuijt.nl",
+ "contributions": [
+ "bug"
+ ]
+ },
+ {
+ "login": "ANasouf",
+ "name": "ANasouf",
+ "avatar_url": "https://avatars.githubusercontent.com/u/19536487?v=4",
+ "profile": "https://github.com/ANasouf",
+ "contributions": [
+ "code"
+ ]
}
],
"contributorsPerLine": 7,
diff --git a/.env.example b/.env.example
index f07f28c5f..7a86ab280 100644
--- a/.env.example
+++ b/.env.example
@@ -8,7 +8,7 @@ MAIL_FROM_NAME=
MAIL_FROM_ADDRESS=
# Database
-DB_HOST=mysql
+DB_HOST=localhost
DB_USER=bigcapital
DB_PASSWORD=bigcapital
DB_ROOT_PASSWORD=root
@@ -49,4 +49,12 @@ SIGNUP_ALLOWED_DOMAINS=
SIGNUP_ALLOWED_EMAILS=
# API rate limit (points,duration,block duration).
-API_RATE_LIMIT=120,60,600
\ No newline at end of file
+API_RATE_LIMIT=120,60,600
+
+# Gotenberg API for PDF printing - (production).
+GOTENBERG_URL=http://gotenberg:3000
+GOTENBERG_DOCS_URL=http://server:3000/public/
+
+# Gotenberg API - (development)
+# GOTENBERG_URL=http://gotenberg:3000
+# GOTENBERG_DOCS_URL=http://server:3000/public/
\ No newline at end of file
diff --git a/.gitpod.yml b/.gitpod.yml
new file mode 100644
index 000000000..9aea12456
--- /dev/null
+++ b/.gitpod.yml
@@ -0,0 +1,22 @@
+tasks:
+ - name: Init
+ init: |
+ pnpm install &&
+ cp .env.example .env &&
+ docker-compose up -d &&
+ pnpm run build:server &&
+ node packages/server/build/commands.js system:migrate:latest
+ command: |
+ docker-compose up -d &&
+ pnpm run dev
+
+ports:
+ - port: 4000
+ visibility: public
+ onOpen: open-preview
+ - port: 3000
+ visibility: public
+ onOpen: ignore
+ - port: 3306
+ visibility: public
+ onOpen: ignore
\ No newline at end of file
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 2b4f3f877..6bc0f93a3 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -2,11 +2,49 @@
All notable changes to Bigcapital server-side will be in this file.
-# [0.10.1] - 25-09-2023
+## [0.13.0] - 31-12-2023
+
+* feat: Send an invoice mail the customer email by @abouolia in https://github.com/bigcapitalhq/bigcapital/pull/292
+* fix: Allow non-numeric postal codes by @cschuijt in https://github.com/bigcapitalhq/bigcapital/pull/294
+* docs: add cschuijt as a contributor for bug by @allcontributors in https://github.com/bigcapitalhq/bigcapital/pull/295
+
+## [0.12.1] - 17-11-2023
+
+* feat: Add default customer message and terms conditions to the transactions by @abouolia in https://github.com/bigcapitalhq/bigcapital/pull/291
+* fix: The currency code of transaction tax rate entry by @abouolia in https://github.com/bigcapitalhq/bigcapital/pull/293
+
+## [0.12.0] - 04-11-2023
+
+* feat: Export reports via CSV and XLSX by @abouolia in https://github.com/bigcapitalhq/bigcapital/pull/286
+* fix: Axios upgrade by @abouolia in https://github.com/bigcapitalhq/bigcapital/pull/288
+* fix(server): Allow decimal amount in sale/purchase transactions. by @abouolia in https://github.com/bigcapitalhq/bigcapital/pull/289
+* feat: Optimize invoice documents printing by @abouolia in https://github.com/bigcapitalhq/bigcapital/pull/280
+* chore(deps): bump axios from 0.20.0 to 1.6.0 in /packages/server by @dependabot in https://github.com/bigcapitalhq/bigcapital/pull/284
+* chore(deps): bump axios from 0.20.0 to 1.6.0 by @dependabot in https://github.com/bigcapitalhq/bigcapital/pull/283
+
+## [0.11.0] - 28-10-2023
+
+* feat: Migrate to pnpm by @abouolia in https://github.com/bigcapitalhq/bigcapital/pull/253
+* feat: Integrate tax rates to bills by @abouolia in https://github.com/bigcapitalhq/bigcapital/pull/260
+* feat: Assign default sell/purchase tax rates to items by @abouolia in https://github.com/bigcapitalhq/bigcapital/pull/261
+* chore(deps-dev): bump @babel/traverse from 7.23.0 to 7.23.2 in /packages/server by @dependabot in https://github.com/bigcapitalhq/bigcapital/pull/272
+* feat: Improve financial statements rows color by @abouolia in https://github.com/bigcapitalhq/bigcapital/pull/276
+* fix: Trial balance sheet adjusted balance by @abouolia in https://github.com/bigcapitalhq/bigcapital/pull/273
+* feat: Adds tax numbers to organization and customers by @kochie in https://github.com/bigcapitalhq/bigcapital/pull/269
+* docs: Add kochie as a contributor for code by @allcontributors in https://github.com/bigcapitalhq/bigcapital/pull/277
+* feat: Computed Net Income under Equity in Balance Sheet report. by @abouolia in https://github.com/bigcapitalhq/bigcapital/pull/271
+* fix: Change Dockerfile files with new pnpm by @abouolia in https://github.com/bigcapitalhq/bigcapital/pull/278
+
+## [0.10.2] - 02-10-2023
+
+fix(webapp): Disable tax rates from item entries editor table services do not support tax rates (https://github.com/bigcapitalhq/bigcapital/commit/69afa07e3ba45495a4cab3490c15f2b0c40c4790) by @abouolia
+fix(server): Add missing method in ItemEntry model (https://github.com/bigcapitalhq/bigcapital/commit/07628ddc37f46c98959ced0323f28752e0a98944) by @abouolia
+
+## [0.10.1] - 25-09-2023
* Fix: Running tenants migration on Docker migration container by @abouolia in https://github.com/bigcapitalhq/bigcapital/pull/242
-# [0.10.0] - 24-09-2023
+## [0.10.0] - 24-09-2023
* Added: Tax rates service by @abouolia @elforjani13 in https://github.com/bigcapitalhq/bigcapital/pull/204
* Added: Sales Tax Liability Summary report by @abouolia in https://github.com/bigcapitalhq/bigcapital/pull/204
@@ -16,7 +54,7 @@ All notable changes to Bigcapital server-side will be in this file.
* chore(deps): bump word-wrap from 1.2.3 to 1.2.4 in /packages/webapp by @dependabot in https://github.com/bigcapitalhq/bigcapital/pull/199
* chore(deps): bump mongoose from 5.13.15 to 5.13.20 by @dependabot in https://github.com/bigcapitalhq/bigcapital/pull/197
-# [0.9.12] - 29-08-2023
+## [0.9.12] - 29-08-2023
* Refactor: split the services to multiple service classes. (by @abouolia in https://github.com/bigcapitalhq/bigcapital/pull/202)
* Fix: create quick customer/vendor by @abouolia in https://github.com/bigcapitalhq/bigcapital/pull/206
@@ -30,18 +68,18 @@ All notable changes to Bigcapital server-side will be in this file.
* Fix: filter by customers, vendors and items in reports do not work by @abouolia in https://github.com/bigcapitalhq/bigcapital/pull/224
https://github.com/bigcapitalhq/bigcapital/pull/225
-# [0.9.11] - 23-07-2023
+## [0.9.11] - 23-07-2023
* added: Restart policy to docker compose files. by @suhaibaffan in https://github.com/bigcapitalhq/bigcapital/pull/198
* fix: Expose and expand the rate limit to the env variables by @abouolia in https://github.com/bigcapitalhq/bigcapital/pull/195
-# [0.9.10] - 18-07-2023
+## [0.9.10] - 18-07-2023
* feat(e2e): E2E onboarding process by @abouolia in https://github.com/bigcapitalhq/bigcapital/pull/176
* fix(webapp): Show loading message of cost computing job on financial reports by @abouolia in https://github.com/bigcapitalhq/bigcapital/pull/196
* fix(webapp): Change the currency code of sales and purchases transactions with foreign contacts.
-# [0.9.9] - 28-06-2023
+## [0.9.9] - 28-06-2023
* refactor: Customer and vendor select component by @abouolia in https://github.com/bigcapitalhq/bigcapital/pull/171
* chore: Move auto-increment components in separate files by @abouolia in https://github.com/bigcapitalhq/bigcapital/pull/170
@@ -53,7 +91,7 @@ https://github.com/bigcapitalhq/bigcapital/pull/225
* fix: No currency in amount field on money in/out dialogs by @abouolia in https://github.com/bigcapitalhq/bigcapital/pull/179
* fix: No default branch for customer/vendor opening balance branch by @abouolia in https://github.com/bigcapitalhq/bigcapital/pull/182
-# [0.9.8] - 19-06-2023
+## [0.9.8] - 19-06-2023
`bigcapitalhq/webapp`
diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md
index aa9093c25..af05add32 100644
--- a/CONTRIBUTING.md
+++ b/CONTRIBUTING.md
@@ -33,7 +33,8 @@ Contributions via pull requests are much appreciated. Once the approach is agree
---
## Local Setup Prerequisites
- - The application currently supports **Node.js v14.x**. Please ensure that you are using this version of Node.js when developing. (use [nvm](https://github.com/nvm-sh/nvm#installing-and-updating) to switch between node versions)
+ - The application currently supports **Node.js v18.x**.
+ - `pnpm` packages manager, (from pnpm [guide](https://pnpm.io/installation) pick any installation method).
## Contribute to Backend
@@ -44,11 +45,10 @@ Contributions via pull requests are much appreciated. Once the approach is agree
cp .env.example .env
```
-- Install all npm dependencies of the monorepo, you don't have to change directory to the `backend` package. just hit these command on root directory and it will install dependencies of all packages.
+- Install all npm dependencies of the monorepo, you don't have to change directory to the `backend` package. just hit the command on root directory and it will install dependencies of all packages.
```
-npm install
-npm run bootstrap
+pnpm install
```
- Run all required docker containers in the development, we already configured all containers under `docker-compose.yml`.
@@ -69,7 +69,7 @@ cefa73fe2881 bigcapital-redis "docker-entrypoint.s…" 7 seconds ago Up
- There're some CLI commands we should run before running the server like databaase migration, so we need to build the `server` app first.
```
-npm run build:server
+pnpm run build:server
```
- Run the database migration for system database.
@@ -87,7 +87,7 @@ Batch 1 run: 6 migrations
- Next, start the webapp application.
```
-npm run dev:server
+pnpm run dev:server
```
**[`^top^`](#)**
@@ -105,14 +105,13 @@ git clone https://github.com/bigcapital/bigcapital.git && cd bigcaptial
- Install all npm dependencies of the monorepo, you don't have to change directory to the `frontend` package. just hit that command and will install all packages across all application.
```
-npm install
-npm run bootstrap
+pnpm install
```
- Next, start the webapp application.
```
-npm run dev:webapp
+pnpm run dev:webapp
```
**[`^top^`](#)**
diff --git a/README.md b/README.md
index 76e86be94..61f2c84e2 100644
--- a/README.md
+++ b/README.md
@@ -37,6 +37,37 @@ Bigcapital is a smart and open-source accounting and inventory software, Bigcapi
+# Getting Started
+
+We've got serveral options on dev and prod depending on your need to get started quickly with Bigcapital.
+
+## Self-hosted
+
+Bigcapital is available open-source under AGPL license. You can host it on your own servers using Docker.
+
+### Docker
+
+To get started with self-hosted with Docker and Docker Compose, take a look at the [Docker guide](https://docs.bigcapital.ly/deployment/docker).
+
+## Development
+
+### Local Setup
+
+To get started locally, we have a [guide to help you](https://github.com/bigcapitalhq/bigcapital/blob/develop/CONTRIBUTING.md).
+
+### Gitpod
+
+- Click the Gitpod button below to open this project in development mode.
+- This will open and configure the workspace in your browser with all the necessary dependencies.
+
+[](https://gitpod.io/new/#https://github.com/bigcapitalhq/bigcapital)
+
+## Headless Accounting
+
+You can integrate Bigcapital API with your system to organize your transactions in double-entry system to get the best financial reports.
+
+[](https://www.postman.com/bigcapital/workspace/bigcapital-api)
+
# Resources
- [Documentation](https://docs.bigcapital.ly/) - Learn how to use.
@@ -80,6 +111,11 @@ Thanks goes to these wonderful people ([emoji key](https://allcontributors.org/d
Lars Scheibling 🐛
Suhaib Affan 💻
Kalliopi Pliogka 🐛
+ Robert Koch 💻
+
+
+ Casper Schuijt 🐛
+ ANasouf 💻
diff --git a/docker-compose.prod.yml b/docker-compose.prod.yml
index 21e9f74c2..760bab69c 100644
--- a/docker-compose.prod.yml
+++ b/docker-compose.prod.yml
@@ -35,6 +35,8 @@ services:
server:
container_name: bigcapital-server
image: ghcr.io/bigcapitalhq/server:latest
+ expose:
+ - '3000'
links:
- mysql
- mongo
@@ -86,6 +88,10 @@ services:
- SIGNUP_ALLOWED_DOMAINS=${SIGNUP_ALLOWED_DOMAINS}
- SIGNUP_ALLOWED_EMAILS=${SIGNUP_ALLOWED_EMAILS}
+ # Gotenberg (Pdf generator)
+ - GOTENBERG_URL=${GOTENBERG_URL}
+ - GOTENBERG_DOCS_URL=${GOTENBERG_DOCS_URL}
+
database_migration:
container_name: bigcapital-database-migration
build:
@@ -143,6 +149,11 @@ services:
volumes:
- redis:/data
+ gotenberg:
+ image: gotenberg/gotenberg:7
+ expose:
+ - '9000'
+
# Volumes
volumes:
mysql:
diff --git a/docker-compose.yml b/docker-compose.yml
index 9563ae91e..3cd95670d 100644
--- a/docker-compose.yml
+++ b/docker-compose.yml
@@ -47,6 +47,11 @@ services:
restart_policy:
condition: unless-stopped
+ gotenberg:
+ image: gotenberg/gotenberg:7
+ ports:
+ - "9000:3000"
+
# Volumes
volumes:
mysql:
diff --git a/packages/server/.gitignore b/packages/server/.gitignore
index a0408e05b..12cb973dd 100644
--- a/packages/server/.gitignore
+++ b/packages/server/.gitignore
@@ -1,6 +1,5 @@
/node_modules/
/.env
-/storage
stdout.log
/dist
/build
diff --git a/packages/server/Dockerfile b/packages/server/Dockerfile
index af2de4263..095508e2d 100644
--- a/packages/server/Dockerfile
+++ b/packages/server/Dockerfile
@@ -1,4 +1,4 @@
-FROM node:14.20-alpine as build
+FROM node:18.16.0-alpine as build
USER root
@@ -83,15 +83,25 @@ WORKDIR /app
RUN chown node:node /
+# Install pnpm
+RUN npm install -g pnpm
+
# Copy application dependency manifests to the container image.
COPY ./package*.json ./
+COPY ./pnpm-lock.yaml ./pnpm-lock.yaml
+COPY ./pnpm-workspace.yaml ./pnpm-workspace.yaml
+COPY ./lerna.json ./lerna.json
COPY ./packages/server/package*.json ./packages/server/
-COPY ./lerna.json ./lerna.json
+# Install application dependencies
+RUN apk update
+RUN apk add python3 build-base chromium
-# Install app dependencies for production.
-RUN npm install
-RUN npm run bootstrap
+# Set PYHTON env
+ENV PYTHON=/usr/bin/python3
+
+# Install packages dependencies for production.
+RUN pnpm install
COPY --chown=node:node ./packages/server ./packages/server
diff --git a/packages/server/package-lock.json b/packages/server/package-lock.json
index efd9c1262..ddeea17fe 100644
--- a/packages/server/package-lock.json
+++ b/packages/server/package-lock.json
@@ -1,57 +1,194 @@
{
"name": "@bigcapital/server",
- "version": "0.10.0",
- "lockfileVersion": 1,
+ "version": "0.10.2",
+ "lockfileVersion": 3,
"requires": true,
- "dependencies": {
- "@aashutoshrathi/word-wrap": {
+ "packages": {
+ "": {
+ "name": "@bigcapital/server",
+ "version": "0.10.2",
+ "license": "ISC",
+ "dependencies": {
+ "@casl/ability": "^5.4.3",
+ "@hapi/boom": "^7.4.3",
+ "@types/i18n": "^0.8.7",
+ "@types/knex": "^0.16.1",
+ "@types/mathjs": "^6.0.12",
+ "accepts": "^1.3.7",
+ "accounting": "^0.4.1",
+ "agenda": "^4.2.1",
+ "agendash": "^3.1.0",
+ "app-root-path": "^3.0.0",
+ "async": "^3.2.0",
+ "axios": "^0.20.0",
+ "babel-loader": "^9.1.2",
+ "bcryptjs": "^2.4.3",
+ "bluebird": "^3.7.2",
+ "body-parser": "^1.20.2",
+ "compression": "^1.7.4",
+ "country-codes-list": "^1.6.8",
+ "cpy": "^8.1.2",
+ "cpy-cli": "^3.1.1",
+ "crypto-random-string": "^3.2.0",
+ "csurf": "^1.10.0",
+ "deep-map": "^2.0.0",
+ "deepdash": "^5.3.9",
+ "dotenv": "^8.1.0",
+ "errorhandler": "^1.5.1",
+ "es6-weak-map": "^2.0.3",
+ "esm": "^3.2.25",
+ "event-dispatch": "^0.4.1",
+ "eventemitter2": "^6.4.5",
+ "express": "^4.17.1",
+ "express-basic-auth": "^1.2.0",
+ "express-boom": "^3.0.0",
+ "express-fileupload": "^1.1.7-alpha.3",
+ "express-oauth-server": "^2.0.0",
+ "express-validator": "^6.12.2",
+ "gulp": "^4.0.2",
+ "gulp-sass": "^5.0.0",
+ "helmet": "^3.21.0",
+ "i18n": "^0.13.3",
+ "is-my-json-valid": "^2.20.5",
+ "js-money": "^0.6.3",
+ "jsonwebtoken": "^8.5.1",
+ "knex": "^0.95.15",
+ "knex-cleaner": "^1.3.0",
+ "knex-db-manager": "^0.6.1",
+ "libphonenumber-js": "^1.9.6",
+ "lodash": "^4.17.15",
+ "lru-cache": "^6.0.0",
+ "mathjs": "^9.4.0",
+ "memory-cache": "^0.2.0",
+ "moment": "^2.24.0",
+ "moment-range": "^4.0.2",
+ "moment-timezone": "^0.5.43",
+ "mongodb": "^6.1.0",
+ "mongoose": "^5.10.0",
+ "mustache": "^3.0.3",
+ "mysql": "^2.17.1",
+ "mysql2": "^1.6.5",
+ "node-cache": "^4.2.1",
+ "nodemailer": "^6.3.0",
+ "nodemon": "^1.19.1",
+ "object-hash": "^2.0.3",
+ "objection": "^3.0.0",
+ "objection-filter": "^4.0.1",
+ "objection-soft-delete": "^1.0.7",
+ "objection-unique": "^1.2.2",
+ "pluralize": "^8.0.0",
+ "pug": "^3.0.2",
+ "puppeteer": "^10.2.0",
+ "qim": "0.0.52",
+ "ramda": "^0.27.1",
+ "rate-limiter-flexible": "^2.1.14",
+ "reflect-metadata": "^0.1.13",
+ "rtl-detect": "^1.0.4",
+ "source-map-loader": "^4.0.1",
+ "tmp-promise": "^3.0.3",
+ "ts-transformer-keys": "^0.4.2",
+ "tsyringe": "^4.3.0",
+ "typedi": "^0.8.0",
+ "uniqid": "^5.2.0",
+ "winston": "^3.2.1"
+ },
+ "bin": {
+ "bigcapital": "bin/bigcapital.js"
+ },
+ "devDependencies": {
+ "@types/lodash": "^4.14.158",
+ "@types/ramda": "^0.27.64",
+ "@typescript-eslint/eslint-plugin": "^5.50.0",
+ "@typescript-eslint/parser": "^5.50.0",
+ "chai": "^4.2.0",
+ "chai-http": "^4.3.0",
+ "chai-things": "^0.2.0",
+ "colorette": "^1.2.0",
+ "commander": "^5.0.0",
+ "cross-env": "^5.2.0",
+ "eslint": "^8.33.0",
+ "eslint-config-airbnb-base": "^15.0.0",
+ "eslint-config-airbnb-typescript": "^17.0.0",
+ "eslint-friendly-formatter": "^4.0.1",
+ "eslint-import-resolver-typescript": "^3.5.3",
+ "eslint-import-resolver-webpack": "^0.11.1",
+ "eslint-loader": "^2.2.1",
+ "eslint-plugin-import": "^2.27.5",
+ "faker": "^4.1.0",
+ "getopts": "^2.2.5",
+ "gulp-postcss": "^9.0.0",
+ "gulp-rename": "^2.0.0",
+ "knex-factory": "0.0.6",
+ "merge-stream": "^2.0.0",
+ "mocha": "^5.2.0",
+ "npm-run-all": "^4.1.5",
+ "nyc": "^14.1.1",
+ "progress-bar-webpack-plugin": "^2.1.0",
+ "regenerator-runtime": "^0.13.7",
+ "rimraf": "^3.0.2",
+ "rtlcss": "^3.3.0",
+ "run-script-webpack-plugin": "^0.1.1",
+ "sass": "^1.58.0",
+ "sinon": "^7.4.2",
+ "start-server-webpack-plugin": "^2.2.5",
+ "ts-loader": "^9.4.2",
+ "ts-node": "^9.0.0",
+ "tsconfig-paths-webpack-plugin": "^4.0.0",
+ "typescript": "^3.9.7",
+ "webpack": "^5.75.0",
+ "webpack-cli": "^4.10.0",
+ "webpack-merge": "^5.8.0",
+ "webpack-node-externals": "^3.0.0",
+ "webpack-watch-changed": "^1.0.0"
+ }
+ },
+ "node_modules/@aashutoshrathi/word-wrap": {
"version": "1.2.6",
"resolved": "https://registry.npmjs.org/@aashutoshrathi/word-wrap/-/word-wrap-1.2.6.tgz",
"integrity": "sha512-1Yjs2SvM8TflER/OD3cOjhWWOZb58A2t7wpE2S9XfBYTiIl+XFhQG2bjy4Pu1I+EAlCNUzRDYDdFwFYUKvXcIA==",
- "dev": true
+ "dev": true,
+ "engines": {
+ "node": ">=0.10.0"
+ }
},
- "@aws-crypto/crc32": {
+ "node_modules/@aws-crypto/crc32": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/@aws-crypto/crc32/-/crc32-3.0.0.tgz",
"integrity": "sha512-IzSgsrxUcsrejQbPVilIKy16kAT52EwB6zSaI+M3xxIhKh5+aldEyvI+z6erM7TCLB2BJsFrtHjp6/4/sr+3dA==",
"optional": true,
- "requires": {
+ "dependencies": {
"@aws-crypto/util": "^3.0.0",
"@aws-sdk/types": "^3.222.0",
"tslib": "^1.11.1"
- },
- "dependencies": {
- "tslib": {
- "version": "1.14.1",
- "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz",
- "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==",
- "optional": true
- }
}
},
- "@aws-crypto/ie11-detection": {
+ "node_modules/@aws-crypto/crc32/node_modules/tslib": {
+ "version": "1.14.1",
+ "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz",
+ "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==",
+ "optional": true
+ },
+ "node_modules/@aws-crypto/ie11-detection": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/@aws-crypto/ie11-detection/-/ie11-detection-3.0.0.tgz",
"integrity": "sha512-341lBBkiY1DfDNKai/wXM3aujNBkXR7tq1URPQDL9wi3AUbI80NR74uF1TXHMm7po1AcnFk8iu2S2IeU/+/A+Q==",
"optional": true,
- "requires": {
- "tslib": "^1.11.1"
- },
"dependencies": {
- "tslib": {
- "version": "1.14.1",
- "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz",
- "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==",
- "optional": true
- }
+ "tslib": "^1.11.1"
}
},
- "@aws-crypto/sha256-browser": {
+ "node_modules/@aws-crypto/ie11-detection/node_modules/tslib": {
+ "version": "1.14.1",
+ "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz",
+ "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==",
+ "optional": true
+ },
+ "node_modules/@aws-crypto/sha256-browser": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/@aws-crypto/sha256-browser/-/sha256-browser-3.0.0.tgz",
"integrity": "sha512-8VLmW2B+gjFbU5uMeqtQM6Nj0/F1bro80xQXCW6CQBWgosFWXTx77aeOF5CAIAmbOK64SdMBJdNr6J41yP5mvQ==",
"optional": true,
- "requires": {
+ "dependencies": {
"@aws-crypto/ie11-detection": "^3.0.0",
"@aws-crypto/sha256-js": "^3.0.0",
"@aws-crypto/supports-web-crypto": "^3.0.0",
@@ -60,634 +197,759 @@
"@aws-sdk/util-locate-window": "^3.0.0",
"@aws-sdk/util-utf8-browser": "^3.0.0",
"tslib": "^1.11.1"
- },
- "dependencies": {
- "tslib": {
- "version": "1.14.1",
- "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz",
- "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==",
- "optional": true
- }
}
},
- "@aws-crypto/sha256-js": {
+ "node_modules/@aws-crypto/sha256-browser/node_modules/tslib": {
+ "version": "1.14.1",
+ "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz",
+ "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==",
+ "optional": true
+ },
+ "node_modules/@aws-crypto/sha256-js": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/@aws-crypto/sha256-js/-/sha256-js-3.0.0.tgz",
"integrity": "sha512-PnNN7os0+yd1XvXAy23CFOmTbMaDxgxXtTKHybrJ39Y8kGzBATgBFibWJKH6BhytLI/Zyszs87xCOBNyBig6vQ==",
"optional": true,
- "requires": {
+ "dependencies": {
"@aws-crypto/util": "^3.0.0",
"@aws-sdk/types": "^3.222.0",
"tslib": "^1.11.1"
- },
- "dependencies": {
- "tslib": {
- "version": "1.14.1",
- "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz",
- "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==",
- "optional": true
- }
}
},
- "@aws-crypto/supports-web-crypto": {
+ "node_modules/@aws-crypto/sha256-js/node_modules/tslib": {
+ "version": "1.14.1",
+ "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz",
+ "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==",
+ "optional": true
+ },
+ "node_modules/@aws-crypto/supports-web-crypto": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/@aws-crypto/supports-web-crypto/-/supports-web-crypto-3.0.0.tgz",
"integrity": "sha512-06hBdMwUAb2WFTuGG73LSC0wfPu93xWwo5vL2et9eymgmu3Id5vFAHBbajVWiGhPO37qcsdCap/FqXvJGJWPIg==",
"optional": true,
- "requires": {
- "tslib": "^1.11.1"
- },
"dependencies": {
- "tslib": {
- "version": "1.14.1",
- "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz",
- "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==",
- "optional": true
- }
+ "tslib": "^1.11.1"
}
},
- "@aws-crypto/util": {
+ "node_modules/@aws-crypto/supports-web-crypto/node_modules/tslib": {
+ "version": "1.14.1",
+ "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz",
+ "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==",
+ "optional": true
+ },
+ "node_modules/@aws-crypto/util": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/@aws-crypto/util/-/util-3.0.0.tgz",
"integrity": "sha512-2OJlpeJpCR48CC8r+uKVChzs9Iungj9wkZrl8Z041DWEWvyIHILYKCPNzJghKsivj+S3mLo6BVc7mBNzdxA46w==",
"optional": true,
- "requires": {
+ "dependencies": {
"@aws-sdk/types": "^3.222.0",
"@aws-sdk/util-utf8-browser": "^3.0.0",
"tslib": "^1.11.1"
- },
+ }
+ },
+ "node_modules/@aws-crypto/util/node_modules/tslib": {
+ "version": "1.14.1",
+ "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz",
+ "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==",
+ "optional": true
+ },
+ "node_modules/@aws-sdk/client-cognito-identity": {
+ "version": "3.431.0",
+ "resolved": "https://registry.npmjs.org/@aws-sdk/client-cognito-identity/-/client-cognito-identity-3.431.0.tgz",
+ "integrity": "sha512-Xf8MYs7CDEao+0BFRXueoSJswwRAfBB7AKaXs0cK3CWA9d147Gf4MhqK/qtJkoqLkN6Cz9B6cuvF74SymM9qbA==",
+ "optional": true,
"dependencies": {
- "tslib": {
- "version": "1.14.1",
- "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz",
- "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==",
- "optional": true
- }
- }
- },
- "@aws-sdk/client-cognito-identity": {
- "version": "3.418.0",
- "resolved": "https://registry.npmjs.org/@aws-sdk/client-cognito-identity/-/client-cognito-identity-3.418.0.tgz",
- "integrity": "sha512-8Gib2gMbfCfxNz/FgSRijl47pnmV/rVvyRNoYtk24xndUydhyXKFTB0cqGVDpPv7eRb3wWQ9YZYVuaBDnEdZ1A==",
- "optional": true,
- "requires": {
"@aws-crypto/sha256-browser": "3.0.0",
"@aws-crypto/sha256-js": "3.0.0",
- "@aws-sdk/client-sts": "3.418.0",
- "@aws-sdk/credential-provider-node": "3.418.0",
- "@aws-sdk/middleware-host-header": "3.418.0",
- "@aws-sdk/middleware-logger": "3.418.0",
- "@aws-sdk/middleware-recursion-detection": "3.418.0",
- "@aws-sdk/middleware-signing": "3.418.0",
- "@aws-sdk/middleware-user-agent": "3.418.0",
- "@aws-sdk/region-config-resolver": "3.418.0",
- "@aws-sdk/types": "3.418.0",
- "@aws-sdk/util-endpoints": "3.418.0",
- "@aws-sdk/util-user-agent-browser": "3.418.0",
- "@aws-sdk/util-user-agent-node": "3.418.0",
- "@smithy/config-resolver": "^2.0.10",
- "@smithy/fetch-http-handler": "^2.1.5",
- "@smithy/hash-node": "^2.0.9",
- "@smithy/invalid-dependency": "^2.0.9",
- "@smithy/middleware-content-length": "^2.0.11",
- "@smithy/middleware-endpoint": "^2.0.9",
- "@smithy/middleware-retry": "^2.0.12",
- "@smithy/middleware-serde": "^2.0.9",
- "@smithy/middleware-stack": "^2.0.2",
- "@smithy/node-config-provider": "^2.0.12",
- "@smithy/node-http-handler": "^2.1.5",
- "@smithy/protocol-http": "^3.0.5",
- "@smithy/smithy-client": "^2.1.6",
- "@smithy/types": "^2.3.3",
- "@smithy/url-parser": "^2.0.9",
+ "@aws-sdk/client-sts": "3.431.0",
+ "@aws-sdk/credential-provider-node": "3.431.0",
+ "@aws-sdk/middleware-host-header": "3.431.0",
+ "@aws-sdk/middleware-logger": "3.428.0",
+ "@aws-sdk/middleware-recursion-detection": "3.428.0",
+ "@aws-sdk/middleware-signing": "3.428.0",
+ "@aws-sdk/middleware-user-agent": "3.428.0",
+ "@aws-sdk/region-config-resolver": "3.430.0",
+ "@aws-sdk/types": "3.428.0",
+ "@aws-sdk/util-endpoints": "3.428.0",
+ "@aws-sdk/util-user-agent-browser": "3.428.0",
+ "@aws-sdk/util-user-agent-node": "3.430.0",
+ "@smithy/config-resolver": "^2.0.15",
+ "@smithy/fetch-http-handler": "^2.2.3",
+ "@smithy/hash-node": "^2.0.11",
+ "@smithy/invalid-dependency": "^2.0.11",
+ "@smithy/middleware-content-length": "^2.0.13",
+ "@smithy/middleware-endpoint": "^2.1.2",
+ "@smithy/middleware-retry": "^2.0.17",
+ "@smithy/middleware-serde": "^2.0.11",
+ "@smithy/middleware-stack": "^2.0.5",
+ "@smithy/node-config-provider": "^2.1.2",
+ "@smithy/node-http-handler": "^2.1.7",
+ "@smithy/protocol-http": "^3.0.7",
+ "@smithy/smithy-client": "^2.1.11",
+ "@smithy/types": "^2.3.5",
+ "@smithy/url-parser": "^2.0.11",
"@smithy/util-base64": "^2.0.0",
"@smithy/util-body-length-browser": "^2.0.0",
"@smithy/util-body-length-node": "^2.1.0",
- "@smithy/util-defaults-mode-browser": "^2.0.10",
- "@smithy/util-defaults-mode-node": "^2.0.12",
- "@smithy/util-retry": "^2.0.2",
+ "@smithy/util-defaults-mode-browser": "^2.0.15",
+ "@smithy/util-defaults-mode-node": "^2.0.20",
+ "@smithy/util-retry": "^2.0.4",
"@smithy/util-utf8": "^2.0.0",
"tslib": "^2.5.0"
+ },
+ "engines": {
+ "node": ">=14.0.0"
}
},
- "@aws-sdk/client-sso": {
- "version": "3.418.0",
- "resolved": "https://registry.npmjs.org/@aws-sdk/client-sso/-/client-sso-3.418.0.tgz",
- "integrity": "sha512-fakz3YeSW/kCAOJ5w4ObrrQBxsYO8sU8i6WHLv6iWAsYZKAws2Mqa8g89P61+GitSH4z9waksdLouS6ep78/5A==",
+ "node_modules/@aws-sdk/client-sso": {
+ "version": "3.431.0",
+ "resolved": "https://registry.npmjs.org/@aws-sdk/client-sso/-/client-sso-3.431.0.tgz",
+ "integrity": "sha512-iK8RxdBHFj1HtWpdTVfFdljZHXLWFv62SuIdkDswGE7L0zNbZIqBDGfEBnbagiQuxkz5D2YtnasydC5R3BcwVw==",
"optional": true,
- "requires": {
+ "dependencies": {
"@aws-crypto/sha256-browser": "3.0.0",
"@aws-crypto/sha256-js": "3.0.0",
- "@aws-sdk/middleware-host-header": "3.418.0",
- "@aws-sdk/middleware-logger": "3.418.0",
- "@aws-sdk/middleware-recursion-detection": "3.418.0",
- "@aws-sdk/middleware-user-agent": "3.418.0",
- "@aws-sdk/region-config-resolver": "3.418.0",
- "@aws-sdk/types": "3.418.0",
- "@aws-sdk/util-endpoints": "3.418.0",
- "@aws-sdk/util-user-agent-browser": "3.418.0",
- "@aws-sdk/util-user-agent-node": "3.418.0",
- "@smithy/config-resolver": "^2.0.10",
- "@smithy/fetch-http-handler": "^2.1.5",
- "@smithy/hash-node": "^2.0.9",
- "@smithy/invalid-dependency": "^2.0.9",
- "@smithy/middleware-content-length": "^2.0.11",
- "@smithy/middleware-endpoint": "^2.0.9",
- "@smithy/middleware-retry": "^2.0.12",
- "@smithy/middleware-serde": "^2.0.9",
- "@smithy/middleware-stack": "^2.0.2",
- "@smithy/node-config-provider": "^2.0.12",
- "@smithy/node-http-handler": "^2.1.5",
- "@smithy/protocol-http": "^3.0.5",
- "@smithy/smithy-client": "^2.1.6",
- "@smithy/types": "^2.3.3",
- "@smithy/url-parser": "^2.0.9",
+ "@aws-sdk/middleware-host-header": "3.431.0",
+ "@aws-sdk/middleware-logger": "3.428.0",
+ "@aws-sdk/middleware-recursion-detection": "3.428.0",
+ "@aws-sdk/middleware-user-agent": "3.428.0",
+ "@aws-sdk/region-config-resolver": "3.430.0",
+ "@aws-sdk/types": "3.428.0",
+ "@aws-sdk/util-endpoints": "3.428.0",
+ "@aws-sdk/util-user-agent-browser": "3.428.0",
+ "@aws-sdk/util-user-agent-node": "3.430.0",
+ "@smithy/config-resolver": "^2.0.15",
+ "@smithy/fetch-http-handler": "^2.2.3",
+ "@smithy/hash-node": "^2.0.11",
+ "@smithy/invalid-dependency": "^2.0.11",
+ "@smithy/middleware-content-length": "^2.0.13",
+ "@smithy/middleware-endpoint": "^2.1.2",
+ "@smithy/middleware-retry": "^2.0.17",
+ "@smithy/middleware-serde": "^2.0.11",
+ "@smithy/middleware-stack": "^2.0.5",
+ "@smithy/node-config-provider": "^2.1.2",
+ "@smithy/node-http-handler": "^2.1.7",
+ "@smithy/protocol-http": "^3.0.7",
+ "@smithy/smithy-client": "^2.1.11",
+ "@smithy/types": "^2.3.5",
+ "@smithy/url-parser": "^2.0.11",
"@smithy/util-base64": "^2.0.0",
"@smithy/util-body-length-browser": "^2.0.0",
"@smithy/util-body-length-node": "^2.1.0",
- "@smithy/util-defaults-mode-browser": "^2.0.10",
- "@smithy/util-defaults-mode-node": "^2.0.12",
- "@smithy/util-retry": "^2.0.2",
+ "@smithy/util-defaults-mode-browser": "^2.0.15",
+ "@smithy/util-defaults-mode-node": "^2.0.20",
+ "@smithy/util-retry": "^2.0.4",
"@smithy/util-utf8": "^2.0.0",
"tslib": "^2.5.0"
+ },
+ "engines": {
+ "node": ">=14.0.0"
}
},
- "@aws-sdk/client-sts": {
- "version": "3.418.0",
- "resolved": "https://registry.npmjs.org/@aws-sdk/client-sts/-/client-sts-3.418.0.tgz",
- "integrity": "sha512-L0n0Hw+Pm+BhXTN1bYZ0y4JAMArYgazdHf1nUSlEHndgZicCCuQtlMLxfo3i/IbtWi0dzfZcZ9d/MdAM8p4Jyw==",
+ "node_modules/@aws-sdk/client-sts": {
+ "version": "3.431.0",
+ "resolved": "https://registry.npmjs.org/@aws-sdk/client-sts/-/client-sts-3.431.0.tgz",
+ "integrity": "sha512-IM/Fg3H1WuM9fnVriEoM6+sZ9LNUExxklxAnHwjLnprPRTDGbUXUfYjSry52LaQsZffP3RgWP11CYyjCYC8CfQ==",
"optional": true,
- "requires": {
+ "dependencies": {
"@aws-crypto/sha256-browser": "3.0.0",
"@aws-crypto/sha256-js": "3.0.0",
- "@aws-sdk/credential-provider-node": "3.418.0",
- "@aws-sdk/middleware-host-header": "3.418.0",
- "@aws-sdk/middleware-logger": "3.418.0",
- "@aws-sdk/middleware-recursion-detection": "3.418.0",
- "@aws-sdk/middleware-sdk-sts": "3.418.0",
- "@aws-sdk/middleware-signing": "3.418.0",
- "@aws-sdk/middleware-user-agent": "3.418.0",
- "@aws-sdk/region-config-resolver": "3.418.0",
- "@aws-sdk/types": "3.418.0",
- "@aws-sdk/util-endpoints": "3.418.0",
- "@aws-sdk/util-user-agent-browser": "3.418.0",
- "@aws-sdk/util-user-agent-node": "3.418.0",
- "@smithy/config-resolver": "^2.0.10",
- "@smithy/fetch-http-handler": "^2.1.5",
- "@smithy/hash-node": "^2.0.9",
- "@smithy/invalid-dependency": "^2.0.9",
- "@smithy/middleware-content-length": "^2.0.11",
- "@smithy/middleware-endpoint": "^2.0.9",
- "@smithy/middleware-retry": "^2.0.12",
- "@smithy/middleware-serde": "^2.0.9",
- "@smithy/middleware-stack": "^2.0.2",
- "@smithy/node-config-provider": "^2.0.12",
- "@smithy/node-http-handler": "^2.1.5",
- "@smithy/protocol-http": "^3.0.5",
- "@smithy/smithy-client": "^2.1.6",
- "@smithy/types": "^2.3.3",
- "@smithy/url-parser": "^2.0.9",
+ "@aws-sdk/credential-provider-node": "3.431.0",
+ "@aws-sdk/middleware-host-header": "3.431.0",
+ "@aws-sdk/middleware-logger": "3.428.0",
+ "@aws-sdk/middleware-recursion-detection": "3.428.0",
+ "@aws-sdk/middleware-sdk-sts": "3.428.0",
+ "@aws-sdk/middleware-signing": "3.428.0",
+ "@aws-sdk/middleware-user-agent": "3.428.0",
+ "@aws-sdk/region-config-resolver": "3.430.0",
+ "@aws-sdk/types": "3.428.0",
+ "@aws-sdk/util-endpoints": "3.428.0",
+ "@aws-sdk/util-user-agent-browser": "3.428.0",
+ "@aws-sdk/util-user-agent-node": "3.430.0",
+ "@smithy/config-resolver": "^2.0.15",
+ "@smithy/fetch-http-handler": "^2.2.3",
+ "@smithy/hash-node": "^2.0.11",
+ "@smithy/invalid-dependency": "^2.0.11",
+ "@smithy/middleware-content-length": "^2.0.13",
+ "@smithy/middleware-endpoint": "^2.1.2",
+ "@smithy/middleware-retry": "^2.0.17",
+ "@smithy/middleware-serde": "^2.0.11",
+ "@smithy/middleware-stack": "^2.0.5",
+ "@smithy/node-config-provider": "^2.1.2",
+ "@smithy/node-http-handler": "^2.1.7",
+ "@smithy/protocol-http": "^3.0.7",
+ "@smithy/smithy-client": "^2.1.11",
+ "@smithy/types": "^2.3.5",
+ "@smithy/url-parser": "^2.0.11",
"@smithy/util-base64": "^2.0.0",
"@smithy/util-body-length-browser": "^2.0.0",
"@smithy/util-body-length-node": "^2.1.0",
- "@smithy/util-defaults-mode-browser": "^2.0.10",
- "@smithy/util-defaults-mode-node": "^2.0.12",
- "@smithy/util-retry": "^2.0.2",
+ "@smithy/util-defaults-mode-browser": "^2.0.15",
+ "@smithy/util-defaults-mode-node": "^2.0.20",
+ "@smithy/util-retry": "^2.0.4",
"@smithy/util-utf8": "^2.0.0",
"fast-xml-parser": "4.2.5",
"tslib": "^2.5.0"
+ },
+ "engines": {
+ "node": ">=14.0.0"
}
},
- "@aws-sdk/credential-provider-cognito-identity": {
- "version": "3.418.0",
- "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-cognito-identity/-/credential-provider-cognito-identity-3.418.0.tgz",
- "integrity": "sha512-MakYZsT7fkG1W9IgkBz7PTXG/e6YD2oSEk+hPgwfdMv0YX76qjTU02B2qbbKSGtXichX73MNUPOvygF5XAi6oA==",
+ "node_modules/@aws-sdk/credential-provider-cognito-identity": {
+ "version": "3.431.0",
+ "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-cognito-identity/-/credential-provider-cognito-identity-3.431.0.tgz",
+ "integrity": "sha512-iDYwfn+RPuGz4Dxbr+KbgsfcAXs2HJpgJ33Q8QsCRzESpIAyn3BpDVLB3m9Cd/d++33OKt0tTaX4i6z/heCwMQ==",
"optional": true,
- "requires": {
- "@aws-sdk/client-cognito-identity": "3.418.0",
- "@aws-sdk/types": "3.418.0",
+ "dependencies": {
+ "@aws-sdk/client-cognito-identity": "3.431.0",
+ "@aws-sdk/types": "3.428.0",
"@smithy/property-provider": "^2.0.0",
- "@smithy/types": "^2.3.3",
+ "@smithy/types": "^2.3.5",
"tslib": "^2.5.0"
+ },
+ "engines": {
+ "node": ">=14.0.0"
}
},
- "@aws-sdk/credential-provider-env": {
- "version": "3.418.0",
- "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-env/-/credential-provider-env-3.418.0.tgz",
- "integrity": "sha512-e74sS+x63EZUBO+HaI8zor886YdtmULzwKdctsZp5/37Xho1CVUNtEC+fYa69nigBD9afoiH33I4JggaHgrekQ==",
+ "node_modules/@aws-sdk/credential-provider-env": {
+ "version": "3.428.0",
+ "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-env/-/credential-provider-env-3.428.0.tgz",
+ "integrity": "sha512-e6fbY174Idzw0r5ZMT1qkDh+dpOp1DX3ickhr7J6ipo3cUGLI45Y5lnR9nYXWfB5o/wiNv4zXgN+Y3ORJJHzyA==",
"optional": true,
- "requires": {
- "@aws-sdk/types": "3.418.0",
+ "dependencies": {
+ "@aws-sdk/types": "3.428.0",
"@smithy/property-provider": "^2.0.0",
- "@smithy/types": "^2.3.3",
+ "@smithy/types": "^2.3.5",
"tslib": "^2.5.0"
+ },
+ "engines": {
+ "node": ">=14.0.0"
}
},
- "@aws-sdk/credential-provider-ini": {
- "version": "3.418.0",
- "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-ini/-/credential-provider-ini-3.418.0.tgz",
- "integrity": "sha512-LTAeKKV85unlSqGNIeqEZ4N9gufaSoH+670n5YTUEk564zHCkUQW0PJomzLF5jKBco6Yfzv6rPBTukd+x9XWqw==",
+ "node_modules/@aws-sdk/credential-provider-http": {
+ "version": "3.428.0",
+ "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-http/-/credential-provider-http-3.428.0.tgz",
+ "integrity": "sha512-aLrsmLVRTuO/Gx8AYxIUkZ12DdsFnVK9lbfNpeNOisVjM6ZvjCHqMgDsh12ydkUpmb7C0v+ALj8bHzwKcpyMdA==",
"optional": true,
- "requires": {
- "@aws-sdk/credential-provider-env": "3.418.0",
- "@aws-sdk/credential-provider-process": "3.418.0",
- "@aws-sdk/credential-provider-sso": "3.418.0",
- "@aws-sdk/credential-provider-web-identity": "3.418.0",
- "@aws-sdk/types": "3.418.0",
+ "dependencies": {
+ "@aws-sdk/types": "3.428.0",
+ "@smithy/fetch-http-handler": "^2.2.3",
+ "@smithy/node-http-handler": "^2.1.7",
+ "@smithy/property-provider": "^2.0.0",
+ "@smithy/protocol-http": "^3.0.7",
+ "@smithy/types": "^2.3.5",
+ "tslib": "^2.5.0"
+ },
+ "engines": {
+ "node": ">=14.0.0"
+ }
+ },
+ "node_modules/@aws-sdk/credential-provider-ini": {
+ "version": "3.431.0",
+ "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-ini/-/credential-provider-ini-3.431.0.tgz",
+ "integrity": "sha512-SILMZuscwxeqB4kuZjWiu24wfvmvN3Tx7/j5n0t0Ob+cdpweK0IqkBQ/QkTbTiG0M1l8trMtMkrTb5510fupcQ==",
+ "optional": true,
+ "dependencies": {
+ "@aws-sdk/credential-provider-env": "3.428.0",
+ "@aws-sdk/credential-provider-process": "3.428.0",
+ "@aws-sdk/credential-provider-sso": "3.431.0",
+ "@aws-sdk/credential-provider-web-identity": "3.428.0",
+ "@aws-sdk/types": "3.428.0",
"@smithy/credential-provider-imds": "^2.0.0",
"@smithy/property-provider": "^2.0.0",
"@smithy/shared-ini-file-loader": "^2.0.6",
- "@smithy/types": "^2.3.3",
+ "@smithy/types": "^2.3.5",
"tslib": "^2.5.0"
+ },
+ "engines": {
+ "node": ">=14.0.0"
}
},
- "@aws-sdk/credential-provider-node": {
- "version": "3.418.0",
- "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-node/-/credential-provider-node-3.418.0.tgz",
- "integrity": "sha512-VveTjtSC6m8YXj3fQDkMKEZuHv+CR2Z4u/NAN51Fi4xOtIWUtOBj5rfZ8HmBYoBjRF0DtRlPXuMiNnXAzTctfQ==",
+ "node_modules/@aws-sdk/credential-provider-node": {
+ "version": "3.431.0",
+ "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-node/-/credential-provider-node-3.431.0.tgz",
+ "integrity": "sha512-jj2gm92nfsFw5e48+7OCYM5PfiW3pd9FvhEoBfvKANwM6ztXzmNpQcz3iWsGVfzd+MUooVBoO2exhH9M8t+VDg==",
"optional": true,
- "requires": {
- "@aws-sdk/credential-provider-env": "3.418.0",
- "@aws-sdk/credential-provider-ini": "3.418.0",
- "@aws-sdk/credential-provider-process": "3.418.0",
- "@aws-sdk/credential-provider-sso": "3.418.0",
- "@aws-sdk/credential-provider-web-identity": "3.418.0",
- "@aws-sdk/types": "3.418.0",
+ "dependencies": {
+ "@aws-sdk/credential-provider-env": "3.428.0",
+ "@aws-sdk/credential-provider-ini": "3.431.0",
+ "@aws-sdk/credential-provider-process": "3.428.0",
+ "@aws-sdk/credential-provider-sso": "3.431.0",
+ "@aws-sdk/credential-provider-web-identity": "3.428.0",
+ "@aws-sdk/types": "3.428.0",
"@smithy/credential-provider-imds": "^2.0.0",
"@smithy/property-provider": "^2.0.0",
"@smithy/shared-ini-file-loader": "^2.0.6",
- "@smithy/types": "^2.3.3",
+ "@smithy/types": "^2.3.5",
"tslib": "^2.5.0"
+ },
+ "engines": {
+ "node": ">=14.0.0"
}
},
- "@aws-sdk/credential-provider-process": {
- "version": "3.418.0",
- "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-process/-/credential-provider-process-3.418.0.tgz",
- "integrity": "sha512-xPbdm2WKz1oH6pTkrJoUmr3OLuqvvcPYTQX0IIlc31tmDwDWPQjXGGFD/vwZGIZIkKaFpFxVMgAzfFScxox7dw==",
+ "node_modules/@aws-sdk/credential-provider-process": {
+ "version": "3.428.0",
+ "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-process/-/credential-provider-process-3.428.0.tgz",
+ "integrity": "sha512-UG2S2/4Wrskbkbgt9fBlnzwQ2hfTXvLJwUgGOluSOf6+mGCcoDku4zzc9EQdk1MwN5Us+ziyMrIMNY5sbdLg6g==",
"optional": true,
- "requires": {
- "@aws-sdk/types": "3.418.0",
+ "dependencies": {
+ "@aws-sdk/types": "3.428.0",
"@smithy/property-provider": "^2.0.0",
"@smithy/shared-ini-file-loader": "^2.0.6",
- "@smithy/types": "^2.3.3",
+ "@smithy/types": "^2.3.5",
"tslib": "^2.5.0"
+ },
+ "engines": {
+ "node": ">=14.0.0"
}
},
- "@aws-sdk/credential-provider-sso": {
- "version": "3.418.0",
- "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-sso/-/credential-provider-sso-3.418.0.tgz",
- "integrity": "sha512-tUF5Hg/HfaU5t+E7IuvohYlodSIlBXa28xAJPPFxhKrUnvP6AIoW6JLazOtCIQjQgJYEUILV29XX+ojUuITcaw==",
+ "node_modules/@aws-sdk/credential-provider-sso": {
+ "version": "3.431.0",
+ "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-sso/-/credential-provider-sso-3.431.0.tgz",
+ "integrity": "sha512-fh/yWKJtgEpxfuzd/KTVPQz0FjykbiPnU0OLm1wKgNZAyKTE9EyNvWR6P57TWv/sU8faa5uLaxdD0TBPxWReDA==",
"optional": true,
- "requires": {
- "@aws-sdk/client-sso": "3.418.0",
- "@aws-sdk/token-providers": "3.418.0",
- "@aws-sdk/types": "3.418.0",
+ "dependencies": {
+ "@aws-sdk/client-sso": "3.431.0",
+ "@aws-sdk/token-providers": "3.431.0",
+ "@aws-sdk/types": "3.428.0",
"@smithy/property-provider": "^2.0.0",
"@smithy/shared-ini-file-loader": "^2.0.6",
- "@smithy/types": "^2.3.3",
+ "@smithy/types": "^2.3.5",
"tslib": "^2.5.0"
+ },
+ "engines": {
+ "node": ">=14.0.0"
}
},
- "@aws-sdk/credential-provider-web-identity": {
- "version": "3.418.0",
- "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-web-identity/-/credential-provider-web-identity-3.418.0.tgz",
- "integrity": "sha512-do7ang565n9p3dS1JdsQY01rUfRx8vkxQqz5M8OlcEHBNiCdi2PvSjNwcBdrv/FKkyIxZb0TImOfBSt40hVdxQ==",
+ "node_modules/@aws-sdk/credential-provider-web-identity": {
+ "version": "3.428.0",
+ "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-web-identity/-/credential-provider-web-identity-3.428.0.tgz",
+ "integrity": "sha512-ueuUPPlrJFvtDUVTGnClUGt1wxCbEiKArknah/w9cfcc/c1HtFd/M7x/z2Sm0gSItR45sVcK54qjzmhm29DMzg==",
"optional": true,
- "requires": {
- "@aws-sdk/types": "3.418.0",
+ "dependencies": {
+ "@aws-sdk/types": "3.428.0",
"@smithy/property-provider": "^2.0.0",
- "@smithy/types": "^2.3.3",
+ "@smithy/types": "^2.3.5",
"tslib": "^2.5.0"
+ },
+ "engines": {
+ "node": ">=14.0.0"
}
},
- "@aws-sdk/credential-providers": {
- "version": "3.418.0",
- "resolved": "https://registry.npmjs.org/@aws-sdk/credential-providers/-/credential-providers-3.418.0.tgz",
- "integrity": "sha512-atEybTA0jvP9CpBCPKCoiPz1hjJ/lbRxf67r+fpAqPtfQKutGq/jZm78Yz5kV9F/NJEW2mK2GR/BslCAHc4H8g==",
+ "node_modules/@aws-sdk/credential-providers": {
+ "version": "3.431.0",
+ "resolved": "https://registry.npmjs.org/@aws-sdk/credential-providers/-/credential-providers-3.431.0.tgz",
+ "integrity": "sha512-ZcNX197W9c7NRhNF7Do+2hHq8BjTqYSpzVzmAb1FVi/kTifCj7j3Y8r2jJoYwER1bT+bH9T+O4vGVoCaMabNDw==",
"optional": true,
- "requires": {
- "@aws-sdk/client-cognito-identity": "3.418.0",
- "@aws-sdk/client-sso": "3.418.0",
- "@aws-sdk/client-sts": "3.418.0",
- "@aws-sdk/credential-provider-cognito-identity": "3.418.0",
- "@aws-sdk/credential-provider-env": "3.418.0",
- "@aws-sdk/credential-provider-ini": "3.418.0",
- "@aws-sdk/credential-provider-node": "3.418.0",
- "@aws-sdk/credential-provider-process": "3.418.0",
- "@aws-sdk/credential-provider-sso": "3.418.0",
- "@aws-sdk/credential-provider-web-identity": "3.418.0",
- "@aws-sdk/types": "3.418.0",
+ "dependencies": {
+ "@aws-sdk/client-cognito-identity": "3.431.0",
+ "@aws-sdk/client-sso": "3.431.0",
+ "@aws-sdk/client-sts": "3.431.0",
+ "@aws-sdk/credential-provider-cognito-identity": "3.431.0",
+ "@aws-sdk/credential-provider-env": "3.428.0",
+ "@aws-sdk/credential-provider-http": "3.428.0",
+ "@aws-sdk/credential-provider-ini": "3.431.0",
+ "@aws-sdk/credential-provider-node": "3.431.0",
+ "@aws-sdk/credential-provider-process": "3.428.0",
+ "@aws-sdk/credential-provider-sso": "3.431.0",
+ "@aws-sdk/credential-provider-web-identity": "3.428.0",
+ "@aws-sdk/types": "3.428.0",
"@smithy/credential-provider-imds": "^2.0.0",
"@smithy/property-provider": "^2.0.0",
- "@smithy/types": "^2.3.3",
+ "@smithy/types": "^2.3.5",
"tslib": "^2.5.0"
+ },
+ "engines": {
+ "node": ">=14.0.0"
}
},
- "@aws-sdk/middleware-host-header": {
- "version": "3.418.0",
- "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-host-header/-/middleware-host-header-3.418.0.tgz",
- "integrity": "sha512-LrMTdzalkPw/1ujLCKPLwCGvPMCmT4P+vOZQRbSEVZPnlZk+Aj++aL/RaHou0jL4kJH3zl8iQepriBt4a7UvXQ==",
+ "node_modules/@aws-sdk/middleware-host-header": {
+ "version": "3.431.0",
+ "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-host-header/-/middleware-host-header-3.431.0.tgz",
+ "integrity": "sha512-j+OBsCDDRXlMEQ4GCtTxVaMwxIHNKiwbDIZVyB6CDor8AFflKxWbO3cPSpUuGKlUN9OEexMR+XgwsjmaI6AGwg==",
"optional": true,
- "requires": {
- "@aws-sdk/types": "3.418.0",
- "@smithy/protocol-http": "^3.0.5",
- "@smithy/types": "^2.3.3",
+ "dependencies": {
+ "@aws-sdk/types": "3.428.0",
+ "@smithy/protocol-http": "^3.0.7",
+ "@smithy/types": "^2.3.5",
"tslib": "^2.5.0"
+ },
+ "engines": {
+ "node": ">=14.0.0"
}
},
- "@aws-sdk/middleware-logger": {
- "version": "3.418.0",
- "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-logger/-/middleware-logger-3.418.0.tgz",
- "integrity": "sha512-StKGmyPVfoO/wdNTtKemYwoJsqIl4l7oqarQY7VSf2Mp3mqaa+njLViHsQbirYpyqpgUEusOnuTlH5utxJ1NsQ==",
+ "node_modules/@aws-sdk/middleware-logger": {
+ "version": "3.428.0",
+ "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-logger/-/middleware-logger-3.428.0.tgz",
+ "integrity": "sha512-1P0V0quL9u2amdNOn6yYT7/ToQUmkLJqCKHPxsRyDB829vBThWndvvH5MkoItj/VgE1zWqMtrzN3xtzD7zx6Qg==",
"optional": true,
- "requires": {
- "@aws-sdk/types": "3.418.0",
- "@smithy/types": "^2.3.3",
+ "dependencies": {
+ "@aws-sdk/types": "3.428.0",
+ "@smithy/types": "^2.3.5",
"tslib": "^2.5.0"
+ },
+ "engines": {
+ "node": ">=14.0.0"
}
},
- "@aws-sdk/middleware-recursion-detection": {
- "version": "3.418.0",
- "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-recursion-detection/-/middleware-recursion-detection-3.418.0.tgz",
- "integrity": "sha512-kKFrIQglBLUFPbHSDy1+bbe3Na2Kd70JSUC3QLMbUHmqipXN8KeXRfAj7vTv97zXl0WzG0buV++WcNwOm1rFjg==",
+ "node_modules/@aws-sdk/middleware-recursion-detection": {
+ "version": "3.428.0",
+ "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-recursion-detection/-/middleware-recursion-detection-3.428.0.tgz",
+ "integrity": "sha512-xC0OMduCByyRdiQz324RXy4kunnCG4LUJCfvdoegM33Elp9ex0D3fcfO1mUgV8qiLwSennIsSRVXHuhNxE2HZA==",
"optional": true,
- "requires": {
- "@aws-sdk/types": "3.418.0",
- "@smithy/protocol-http": "^3.0.5",
- "@smithy/types": "^2.3.3",
+ "dependencies": {
+ "@aws-sdk/types": "3.428.0",
+ "@smithy/protocol-http": "^3.0.7",
+ "@smithy/types": "^2.3.5",
"tslib": "^2.5.0"
+ },
+ "engines": {
+ "node": ">=14.0.0"
}
},
- "@aws-sdk/middleware-sdk-sts": {
- "version": "3.418.0",
- "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-sdk-sts/-/middleware-sdk-sts-3.418.0.tgz",
- "integrity": "sha512-cW8ijrCTP+mgihvcq4+TbhAcE/we5lFl4ydRqvTdtcSnYQAVQADg47rnTScQiFsPFEB3NKq7BGeyTJF9MKolPA==",
+ "node_modules/@aws-sdk/middleware-sdk-sts": {
+ "version": "3.428.0",
+ "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-sdk-sts/-/middleware-sdk-sts-3.428.0.tgz",
+ "integrity": "sha512-Uutl2niYXTnNP8v84v6umWDHD5no7d5/OqkZE1DsmeKR/dje90J5unJWf7MOsqvYm0JGDEWF4lk9xGVyqsw+Aw==",
"optional": true,
- "requires": {
- "@aws-sdk/middleware-signing": "3.418.0",
- "@aws-sdk/types": "3.418.0",
- "@smithy/types": "^2.3.3",
+ "dependencies": {
+ "@aws-sdk/middleware-signing": "3.428.0",
+ "@aws-sdk/types": "3.428.0",
+ "@smithy/types": "^2.3.5",
"tslib": "^2.5.0"
+ },
+ "engines": {
+ "node": ">=14.0.0"
}
},
- "@aws-sdk/middleware-signing": {
- "version": "3.418.0",
- "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-signing/-/middleware-signing-3.418.0.tgz",
- "integrity": "sha512-onvs5KoYQE8OlOE740RxWBGtsUyVIgAo0CzRKOQO63ZEYqpL1Os+MS1CGzdNhvQnJgJruE1WW+Ix8fjN30zKPA==",
+ "node_modules/@aws-sdk/middleware-signing": {
+ "version": "3.428.0",
+ "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-signing/-/middleware-signing-3.428.0.tgz",
+ "integrity": "sha512-oMSerTPwtsQAR7fIU/G0b0BA30wF+MC4gZSrJjbypF8MK8nPC2yMfKLR8+QavGOGEW7rUMQ0uklThMTTwQEXNQ==",
"optional": true,
- "requires": {
- "@aws-sdk/types": "3.418.0",
+ "dependencies": {
+ "@aws-sdk/types": "3.428.0",
"@smithy/property-provider": "^2.0.0",
- "@smithy/protocol-http": "^3.0.5",
+ "@smithy/protocol-http": "^3.0.7",
"@smithy/signature-v4": "^2.0.0",
- "@smithy/types": "^2.3.3",
- "@smithy/util-middleware": "^2.0.2",
+ "@smithy/types": "^2.3.5",
+ "@smithy/util-middleware": "^2.0.4",
"tslib": "^2.5.0"
+ },
+ "engines": {
+ "node": ">=14.0.0"
}
},
- "@aws-sdk/middleware-user-agent": {
- "version": "3.418.0",
- "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-user-agent/-/middleware-user-agent-3.418.0.tgz",
- "integrity": "sha512-Jdcztg9Tal9SEAL0dKRrnpKrm6LFlWmAhvuwv0dQ7bNTJxIxyEFbpqdgy7mpQHsLVZgq1Aad/7gT/72c9igyZw==",
+ "node_modules/@aws-sdk/middleware-user-agent": {
+ "version": "3.428.0",
+ "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-user-agent/-/middleware-user-agent-3.428.0.tgz",
+ "integrity": "sha512-+GAhObeHRick2D5jr3YkPckjcggt5v6uUVtEUQW2AdD65cE5PjIvmksv6FuM/mME/9nNA+wufQnHbLI8teLeaw==",
"optional": true,
- "requires": {
- "@aws-sdk/types": "3.418.0",
- "@aws-sdk/util-endpoints": "3.418.0",
- "@smithy/protocol-http": "^3.0.5",
- "@smithy/types": "^2.3.3",
+ "dependencies": {
+ "@aws-sdk/types": "3.428.0",
+ "@aws-sdk/util-endpoints": "3.428.0",
+ "@smithy/protocol-http": "^3.0.7",
+ "@smithy/types": "^2.3.5",
"tslib": "^2.5.0"
+ },
+ "engines": {
+ "node": ">=14.0.0"
}
},
- "@aws-sdk/region-config-resolver": {
- "version": "3.418.0",
- "resolved": "https://registry.npmjs.org/@aws-sdk/region-config-resolver/-/region-config-resolver-3.418.0.tgz",
- "integrity": "sha512-lJRZ/9TjZU6yLz+mAwxJkcJZ6BmyYoIJVo1p5+BN//EFdEmC8/c0c9gXMRzfISV/mqWSttdtccpAyN4/goHTYA==",
+ "node_modules/@aws-sdk/region-config-resolver": {
+ "version": "3.430.0",
+ "resolved": "https://registry.npmjs.org/@aws-sdk/region-config-resolver/-/region-config-resolver-3.430.0.tgz",
+ "integrity": "sha512-9lqgtkcd4dqsQ2yN6V/i06blyDh4yLmS+fAS7LwEZih/NZZ2cBIR+5kb9c236auvTcuMcL1zFxVRloWwesYZjA==",
"optional": true,
- "requires": {
- "@smithy/node-config-provider": "^2.0.12",
- "@smithy/types": "^2.3.3",
+ "dependencies": {
+ "@smithy/node-config-provider": "^2.1.2",
+ "@smithy/types": "^2.3.5",
"@smithy/util-config-provider": "^2.0.0",
- "@smithy/util-middleware": "^2.0.2",
+ "@smithy/util-middleware": "^2.0.4",
"tslib": "^2.5.0"
+ },
+ "engines": {
+ "node": ">=14.0.0"
}
},
- "@aws-sdk/token-providers": {
- "version": "3.418.0",
- "resolved": "https://registry.npmjs.org/@aws-sdk/token-providers/-/token-providers-3.418.0.tgz",
- "integrity": "sha512-9P7Q0VN0hEzTngy3Sz5eya2qEOEf0Q8qf1vB3um0gE6ID6EVAdz/nc/DztfN32MFxk8FeVBrCP5vWdoOzmd72g==",
+ "node_modules/@aws-sdk/token-providers": {
+ "version": "3.431.0",
+ "resolved": "https://registry.npmjs.org/@aws-sdk/token-providers/-/token-providers-3.431.0.tgz",
+ "integrity": "sha512-0ksZogF3Gy2i+yBb7T2g2e7QXzwZeQHmf09ihR1cwXwg7UIjsap6P3gPtC085bDkOD9iY8OdpL0Esp06N6xmCg==",
"optional": true,
- "requires": {
+ "dependencies": {
"@aws-crypto/sha256-browser": "3.0.0",
"@aws-crypto/sha256-js": "3.0.0",
- "@aws-sdk/middleware-host-header": "3.418.0",
- "@aws-sdk/middleware-logger": "3.418.0",
- "@aws-sdk/middleware-recursion-detection": "3.418.0",
- "@aws-sdk/middleware-user-agent": "3.418.0",
- "@aws-sdk/types": "3.418.0",
- "@aws-sdk/util-endpoints": "3.418.0",
- "@aws-sdk/util-user-agent-browser": "3.418.0",
- "@aws-sdk/util-user-agent-node": "3.418.0",
- "@smithy/config-resolver": "^2.0.10",
- "@smithy/fetch-http-handler": "^2.1.5",
- "@smithy/hash-node": "^2.0.9",
- "@smithy/invalid-dependency": "^2.0.9",
- "@smithy/middleware-content-length": "^2.0.11",
- "@smithy/middleware-endpoint": "^2.0.9",
- "@smithy/middleware-retry": "^2.0.12",
- "@smithy/middleware-serde": "^2.0.9",
- "@smithy/middleware-stack": "^2.0.2",
- "@smithy/node-config-provider": "^2.0.12",
- "@smithy/node-http-handler": "^2.1.5",
+ "@aws-sdk/middleware-host-header": "3.431.0",
+ "@aws-sdk/middleware-logger": "3.428.0",
+ "@aws-sdk/middleware-recursion-detection": "3.428.0",
+ "@aws-sdk/middleware-user-agent": "3.428.0",
+ "@aws-sdk/types": "3.428.0",
+ "@aws-sdk/util-endpoints": "3.428.0",
+ "@aws-sdk/util-user-agent-browser": "3.428.0",
+ "@aws-sdk/util-user-agent-node": "3.430.0",
+ "@smithy/config-resolver": "^2.0.15",
+ "@smithy/fetch-http-handler": "^2.2.3",
+ "@smithy/hash-node": "^2.0.11",
+ "@smithy/invalid-dependency": "^2.0.11",
+ "@smithy/middleware-content-length": "^2.0.13",
+ "@smithy/middleware-endpoint": "^2.1.2",
+ "@smithy/middleware-retry": "^2.0.17",
+ "@smithy/middleware-serde": "^2.0.11",
+ "@smithy/middleware-stack": "^2.0.5",
+ "@smithy/node-config-provider": "^2.1.2",
+ "@smithy/node-http-handler": "^2.1.7",
"@smithy/property-provider": "^2.0.0",
- "@smithy/protocol-http": "^3.0.5",
+ "@smithy/protocol-http": "^3.0.7",
"@smithy/shared-ini-file-loader": "^2.0.6",
- "@smithy/smithy-client": "^2.1.6",
- "@smithy/types": "^2.3.3",
- "@smithy/url-parser": "^2.0.9",
+ "@smithy/smithy-client": "^2.1.11",
+ "@smithy/types": "^2.3.5",
+ "@smithy/url-parser": "^2.0.11",
"@smithy/util-base64": "^2.0.0",
"@smithy/util-body-length-browser": "^2.0.0",
"@smithy/util-body-length-node": "^2.1.0",
- "@smithy/util-defaults-mode-browser": "^2.0.10",
- "@smithy/util-defaults-mode-node": "^2.0.12",
- "@smithy/util-retry": "^2.0.2",
+ "@smithy/util-defaults-mode-browser": "^2.0.15",
+ "@smithy/util-defaults-mode-node": "^2.0.20",
+ "@smithy/util-retry": "^2.0.4",
"@smithy/util-utf8": "^2.0.0",
"tslib": "^2.5.0"
+ },
+ "engines": {
+ "node": ">=14.0.0"
}
},
- "@aws-sdk/types": {
- "version": "3.418.0",
- "resolved": "https://registry.npmjs.org/@aws-sdk/types/-/types-3.418.0.tgz",
- "integrity": "sha512-y4PQSH+ulfFLY0+FYkaK4qbIaQI9IJNMO2xsxukW6/aNoApNymN1D2FSi2la8Qbp/iPjNDKsG8suNPm9NtsWXQ==",
+ "node_modules/@aws-sdk/types": {
+ "version": "3.428.0",
+ "resolved": "https://registry.npmjs.org/@aws-sdk/types/-/types-3.428.0.tgz",
+ "integrity": "sha512-4T0Ps2spjg3qbWE6ZK13Vd3FnzpfliaiotqjxUK5YhjDrKXeT36HJp46JhDupElQuHtTkpdiJOSYk2lvY2H4IA==",
"optional": true,
- "requires": {
- "@smithy/types": "^2.3.3",
+ "dependencies": {
+ "@smithy/types": "^2.3.5",
"tslib": "^2.5.0"
+ },
+ "engines": {
+ "node": ">=14.0.0"
}
},
- "@aws-sdk/util-endpoints": {
- "version": "3.418.0",
- "resolved": "https://registry.npmjs.org/@aws-sdk/util-endpoints/-/util-endpoints-3.418.0.tgz",
- "integrity": "sha512-sYSDwRTl7yE7LhHkPzemGzmIXFVHSsi3AQ1KeNEk84eBqxMHHcCc2kqklaBk2roXWe50QDgRMy1ikZUxvtzNHQ==",
+ "node_modules/@aws-sdk/util-endpoints": {
+ "version": "3.428.0",
+ "resolved": "https://registry.npmjs.org/@aws-sdk/util-endpoints/-/util-endpoints-3.428.0.tgz",
+ "integrity": "sha512-ToKMhYlUWJ0YrbggpJLZeyZZNDXtQ4NITxqo/oeGltTT9KG4o/LqVY59EveV0f8P32ObDyj9Vh1mnjxeo3DxGw==",
"optional": true,
- "requires": {
- "@aws-sdk/types": "3.418.0",
+ "dependencies": {
+ "@aws-sdk/types": "3.428.0",
"tslib": "^2.5.0"
+ },
+ "engines": {
+ "node": ">=14.0.0"
}
},
- "@aws-sdk/util-locate-window": {
+ "node_modules/@aws-sdk/util-locate-window": {
"version": "3.310.0",
"resolved": "https://registry.npmjs.org/@aws-sdk/util-locate-window/-/util-locate-window-3.310.0.tgz",
"integrity": "sha512-qo2t/vBTnoXpjKxlsC2e1gBrRm80M3bId27r0BRB2VniSSe7bL1mmzM+/HFtujm0iAxtPM+aLEflLJlJeDPg0w==",
"optional": true,
- "requires": {
+ "dependencies": {
"tslib": "^2.5.0"
+ },
+ "engines": {
+ "node": ">=14.0.0"
}
},
- "@aws-sdk/util-user-agent-browser": {
- "version": "3.418.0",
- "resolved": "https://registry.npmjs.org/@aws-sdk/util-user-agent-browser/-/util-user-agent-browser-3.418.0.tgz",
- "integrity": "sha512-c4p4mc0VV/jIeNH0lsXzhJ1MpWRLuboGtNEpqE4s1Vl9ck2amv9VdUUZUmHbg+bVxlMgRQ4nmiovA4qIrqGuyg==",
+ "node_modules/@aws-sdk/util-user-agent-browser": {
+ "version": "3.428.0",
+ "resolved": "https://registry.npmjs.org/@aws-sdk/util-user-agent-browser/-/util-user-agent-browser-3.428.0.tgz",
+ "integrity": "sha512-qlc2UoGsmCpuh1ErY3VayZuAGl74TWWcLmhhQMkeByFSb6KooBlwOmDpDzJRtgwJoe0KXnyHBO6lzl9iczcozg==",
"optional": true,
- "requires": {
- "@aws-sdk/types": "3.418.0",
- "@smithy/types": "^2.3.3",
+ "dependencies": {
+ "@aws-sdk/types": "3.428.0",
+ "@smithy/types": "^2.3.5",
"bowser": "^2.11.0",
"tslib": "^2.5.0"
}
},
- "@aws-sdk/util-user-agent-node": {
- "version": "3.418.0",
- "resolved": "https://registry.npmjs.org/@aws-sdk/util-user-agent-node/-/util-user-agent-node-3.418.0.tgz",
- "integrity": "sha512-BXMskXFtg+dmzSCgmnWOffokxIbPr1lFqa1D9kvM3l3IFRiFGx2IyDg+8MAhq11aPDLvoa/BDuQ0Yqma5izOhg==",
+ "node_modules/@aws-sdk/util-user-agent-node": {
+ "version": "3.430.0",
+ "resolved": "https://registry.npmjs.org/@aws-sdk/util-user-agent-node/-/util-user-agent-node-3.430.0.tgz",
+ "integrity": "sha512-DPpFPL3mFMPtipFxjY7TKQBjnhmsPzYCr4Y+qna0oR6ij8jZOz2ILQDK33GxTRNh3+bV9YYbx+ZGDOnxoK5Mhw==",
"optional": true,
- "requires": {
- "@aws-sdk/types": "3.418.0",
- "@smithy/node-config-provider": "^2.0.12",
- "@smithy/types": "^2.3.3",
+ "dependencies": {
+ "@aws-sdk/types": "3.428.0",
+ "@smithy/node-config-provider": "^2.1.2",
+ "@smithy/types": "^2.3.5",
"tslib": "^2.5.0"
+ },
+ "engines": {
+ "node": ">=14.0.0"
+ },
+ "peerDependencies": {
+ "aws-crt": ">=1.0.0"
+ },
+ "peerDependenciesMeta": {
+ "aws-crt": {
+ "optional": true
+ }
}
},
- "@aws-sdk/util-utf8-browser": {
+ "node_modules/@aws-sdk/util-utf8-browser": {
"version": "3.259.0",
"resolved": "https://registry.npmjs.org/@aws-sdk/util-utf8-browser/-/util-utf8-browser-3.259.0.tgz",
"integrity": "sha512-UvFa/vR+e19XookZF8RzFZBrw2EUkQWxiBW0yYQAhvk3C+QVGl0H3ouca8LDBlBfQKXwmW3huo/59H8rwb1wJw==",
"optional": true,
- "requires": {
+ "dependencies": {
"tslib": "^2.3.1"
}
},
- "@babel/code-frame": {
+ "node_modules/@babel/code-frame": {
"version": "7.22.13",
"resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.22.13.tgz",
"integrity": "sha512-XktuhWlJ5g+3TJXc5upd9Ks1HutSArik6jf2eAjYFyIOf4ej3RN+184cZbzDvbPnuTJIUhPKKJE3cIsYTiAT3w==",
- "requires": {
+ "dependencies": {
"@babel/highlight": "^7.22.13",
"chalk": "^2.4.2"
+ },
+ "engines": {
+ "node": ">=6.9.0"
}
},
- "@babel/generator": {
+ "node_modules/@babel/generator": {
"version": "7.23.0",
"resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.23.0.tgz",
"integrity": "sha512-lN85QRR+5IbYrMWM6Y4pE/noaQtg4pNiqeNGX60eqOfo6gtEj6uw/JagelB8vVztSd7R6M5n1+PQkDbHbBRU4g==",
"dev": true,
- "requires": {
+ "dependencies": {
"@babel/types": "^7.23.0",
"@jridgewell/gen-mapping": "^0.3.2",
"@jridgewell/trace-mapping": "^0.3.17",
"jsesc": "^2.5.1"
+ },
+ "engines": {
+ "node": ">=6.9.0"
}
},
- "@babel/helper-environment-visitor": {
+ "node_modules/@babel/helper-environment-visitor": {
"version": "7.22.20",
"resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.22.20.tgz",
"integrity": "sha512-zfedSIzFhat/gFhWfHtgWvlec0nqB9YEIVrpuwjruLlXfUSnA8cJB0miHKwqDnQ7d32aKo2xt88/xZptwxbfhA==",
- "dev": true
+ "dev": true,
+ "engines": {
+ "node": ">=6.9.0"
+ }
},
- "@babel/helper-function-name": {
+ "node_modules/@babel/helper-function-name": {
"version": "7.23.0",
"resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.23.0.tgz",
"integrity": "sha512-OErEqsrxjZTJciZ4Oo+eoZqeW9UIiOcuYKRJA4ZAgV9myA+pOXhhmpfNCKjEH/auVfEYVFJ6y1Tc4r0eIApqiw==",
"dev": true,
- "requires": {
+ "dependencies": {
"@babel/template": "^7.22.15",
"@babel/types": "^7.23.0"
+ },
+ "engines": {
+ "node": ">=6.9.0"
}
},
- "@babel/helper-hoist-variables": {
+ "node_modules/@babel/helper-hoist-variables": {
"version": "7.22.5",
"resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.22.5.tgz",
"integrity": "sha512-wGjk9QZVzvknA6yKIUURb8zY3grXCcOZt+/7Wcy8O2uctxhplmUPkOdlgoNhmdVee2c92JXbf1xpMtVNbfoxRw==",
"dev": true,
- "requires": {
+ "dependencies": {
"@babel/types": "^7.22.5"
+ },
+ "engines": {
+ "node": ">=6.9.0"
}
},
- "@babel/helper-split-export-declaration": {
+ "node_modules/@babel/helper-split-export-declaration": {
"version": "7.22.6",
"resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.22.6.tgz",
"integrity": "sha512-AsUnxuLhRYsisFiaJwvp1QF+I3KjD5FOxut14q/GzovUe6orHLesW2C7d754kRm53h5gqrz6sFl6sxc4BVtE/g==",
"dev": true,
- "requires": {
+ "dependencies": {
"@babel/types": "^7.22.5"
+ },
+ "engines": {
+ "node": ">=6.9.0"
}
},
- "@babel/helper-string-parser": {
+ "node_modules/@babel/helper-string-parser": {
"version": "7.22.5",
"resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.22.5.tgz",
- "integrity": "sha512-mM4COjgZox8U+JcXQwPijIZLElkgEpO5rsERVDJTc2qfCDfERyob6k5WegS14SX18IIjv+XD+GrqNumY5JRCDw=="
+ "integrity": "sha512-mM4COjgZox8U+JcXQwPijIZLElkgEpO5rsERVDJTc2qfCDfERyob6k5WegS14SX18IIjv+XD+GrqNumY5JRCDw==",
+ "engines": {
+ "node": ">=6.9.0"
+ }
},
- "@babel/helper-validator-identifier": {
+ "node_modules/@babel/helper-validator-identifier": {
"version": "7.22.20",
"resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.22.20.tgz",
- "integrity": "sha512-Y4OZ+ytlatR8AI+8KZfKuL5urKp7qey08ha31L8b3BwewJAoJamTzyvxPR/5D+KkdJCGPq/+8TukHBlY10FX9A=="
+ "integrity": "sha512-Y4OZ+ytlatR8AI+8KZfKuL5urKp7qey08ha31L8b3BwewJAoJamTzyvxPR/5D+KkdJCGPq/+8TukHBlY10FX9A==",
+ "engines": {
+ "node": ">=6.9.0"
+ }
},
- "@babel/highlight": {
+ "node_modules/@babel/highlight": {
"version": "7.22.20",
"resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.22.20.tgz",
"integrity": "sha512-dkdMCN3py0+ksCgYmGG8jKeGA/8Tk+gJwSYYlFGxG5lmhfKNoAy004YpLxpS1W2J8m/EK2Ew+yOs9pVRwO89mg==",
- "requires": {
+ "dependencies": {
"@babel/helper-validator-identifier": "^7.22.20",
"chalk": "^2.4.2",
"js-tokens": "^4.0.0"
+ },
+ "engines": {
+ "node": ">=6.9.0"
}
},
- "@babel/parser": {
+ "node_modules/@babel/parser": {
"version": "7.23.0",
"resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.23.0.tgz",
- "integrity": "sha512-vvPKKdMemU85V9WE/l5wZEmImpCtLqbnTvqDS2U1fJ96KrxoW7KrXhNsNCblQlg8Ck4b85yxdTyelsMUgFUXiw=="
+ "integrity": "sha512-vvPKKdMemU85V9WE/l5wZEmImpCtLqbnTvqDS2U1fJ96KrxoW7KrXhNsNCblQlg8Ck4b85yxdTyelsMUgFUXiw==",
+ "bin": {
+ "parser": "bin/babel-parser.js"
+ },
+ "engines": {
+ "node": ">=6.0.0"
+ }
},
- "@babel/runtime": {
+ "node_modules/@babel/runtime": {
"version": "7.23.1",
"resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.23.1.tgz",
"integrity": "sha512-hC2v6p8ZSI/W0HUzh3V8C5g+NwSKzKPtJwSpTjwl0o297GP9+ZLQSkdvHz46CM3LqyoXxq+5G9komY+eSqSO0g==",
- "requires": {
+ "dependencies": {
"regenerator-runtime": "^0.14.0"
},
- "dependencies": {
- "regenerator-runtime": {
- "version": "0.14.0",
- "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.14.0.tgz",
- "integrity": "sha512-srw17NI0TUWHuGa5CFGGmhfNIeja30WMBfbslPNhf6JrqQlLN5gcrvig1oqPxiVaXb0oW0XRKtH6Nngs5lKCIA=="
- }
+ "engines": {
+ "node": ">=6.9.0"
}
},
- "@babel/template": {
+ "node_modules/@babel/runtime/node_modules/regenerator-runtime": {
+ "version": "0.14.0",
+ "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.14.0.tgz",
+ "integrity": "sha512-srw17NI0TUWHuGa5CFGGmhfNIeja30WMBfbslPNhf6JrqQlLN5gcrvig1oqPxiVaXb0oW0XRKtH6Nngs5lKCIA=="
+ },
+ "node_modules/@babel/template": {
"version": "7.22.15",
"resolved": "https://registry.npmjs.org/@babel/template/-/template-7.22.15.tgz",
"integrity": "sha512-QPErUVm4uyJa60rkI73qneDacvdvzxshT3kksGqlGWYdOTIUOwJ7RDUL8sGqslY1uXWSL6xMFKEXDS3ox2uF0w==",
"dev": true,
- "requires": {
+ "dependencies": {
"@babel/code-frame": "^7.22.13",
"@babel/parser": "^7.22.15",
"@babel/types": "^7.22.15"
+ },
+ "engines": {
+ "node": ">=6.9.0"
}
},
- "@babel/traverse": {
- "version": "7.23.0",
- "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.23.0.tgz",
- "integrity": "sha512-t/QaEvyIoIkwzpiZ7aoSKK8kObQYeF7T2v+dazAYCb8SXtp58zEVkWW7zAnju8FNKNdr4ScAOEDmMItbyOmEYw==",
+ "node_modules/@babel/traverse": {
+ "version": "7.23.2",
+ "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.23.2.tgz",
+ "integrity": "sha512-azpe59SQ48qG6nu2CzcMLbxUudtN+dOM9kDbUqGq3HXUJRlo7i8fvPoxQUzYgLZ4cMVmuZgm8vvBpNeRhd6XSw==",
"dev": true,
- "requires": {
+ "dependencies": {
"@babel/code-frame": "^7.22.13",
"@babel/generator": "^7.23.0",
"@babel/helper-environment-visitor": "^7.22.20",
@@ -699,75 +961,100 @@
"debug": "^4.1.0",
"globals": "^11.1.0"
},
- "dependencies": {
- "globals": {
- "version": "11.12.0",
- "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz",
- "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==",
- "dev": true
- }
+ "engines": {
+ "node": ">=6.9.0"
}
},
- "@babel/types": {
+ "node_modules/@babel/traverse/node_modules/globals": {
+ "version": "11.12.0",
+ "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz",
+ "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==",
+ "dev": true,
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/@babel/types": {
"version": "7.23.0",
"resolved": "https://registry.npmjs.org/@babel/types/-/types-7.23.0.tgz",
"integrity": "sha512-0oIyUfKoI3mSqMvsxBdclDwxXKXAUA8v/apZbc+iSyARYou1o8ZGDxbUYyLFoW2arqS2jDGqJuZvv1d/io1axg==",
- "requires": {
+ "dependencies": {
"@babel/helper-string-parser": "^7.22.5",
"@babel/helper-validator-identifier": "^7.22.20",
"to-fast-properties": "^2.0.0"
+ },
+ "engines": {
+ "node": ">=6.9.0"
}
},
- "@casl/ability": {
+ "node_modules/@casl/ability": {
"version": "5.4.4",
"resolved": "https://registry.npmjs.org/@casl/ability/-/ability-5.4.4.tgz",
"integrity": "sha512-7+GOnMUq6q4fqtDDesymBXTS9LSDVezYhFiSJ8Rn3f0aQLeRm7qHn66KWbej4niCOvm0XzNj9jzpkK0yz6hUww==",
- "requires": {
+ "dependencies": {
"@ucast/mongo2js": "^1.3.0"
+ },
+ "funding": {
+ "url": "https://github.com/stalniy/casl/blob/master/BACKERS.md"
}
},
- "@colors/colors": {
+ "node_modules/@colors/colors": {
"version": "1.5.0",
"resolved": "https://registry.npmjs.org/@colors/colors/-/colors-1.5.0.tgz",
- "integrity": "sha512-ooWCrlZP11i8GImSjTHYHLkvFDP48nS4+204nGb1RiX/WXYHmJA2III9/e2DWVabCESdW7hBAEzHRqUn9OUVvQ=="
+ "integrity": "sha512-ooWCrlZP11i8GImSjTHYHLkvFDP48nS4+204nGb1RiX/WXYHmJA2III9/e2DWVabCESdW7hBAEzHRqUn9OUVvQ==",
+ "engines": {
+ "node": ">=0.1.90"
+ }
},
- "@dabh/diagnostics": {
+ "node_modules/@dabh/diagnostics": {
"version": "2.0.3",
"resolved": "https://registry.npmjs.org/@dabh/diagnostics/-/diagnostics-2.0.3.tgz",
"integrity": "sha512-hrlQOIi7hAfzsMqlGSFyVucrx38O+j6wiGOf//H2ecvIEqYN4ADBSS2iLMh5UFyDunCNniUIPk/q3riFv45xRA==",
- "requires": {
+ "dependencies": {
"colorspace": "1.1.x",
"enabled": "2.0.x",
"kuler": "^2.0.0"
}
},
- "@discoveryjs/json-ext": {
+ "node_modules/@discoveryjs/json-ext": {
"version": "0.5.7",
"resolved": "https://registry.npmjs.org/@discoveryjs/json-ext/-/json-ext-0.5.7.tgz",
"integrity": "sha512-dBVuXR082gk3jsFp7Rd/JI4kytwGHecnCoTtXFb7DB6CNHp4rg5k1bhg0nWdLGLnOV71lmDzGQaLMy8iPLY0pw==",
- "dev": true
+ "dev": true,
+ "engines": {
+ "node": ">=10.0.0"
+ }
},
- "@eslint-community/eslint-utils": {
+ "node_modules/@eslint-community/eslint-utils": {
"version": "4.4.0",
"resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.4.0.tgz",
"integrity": "sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==",
"dev": true,
- "requires": {
+ "dependencies": {
"eslint-visitor-keys": "^3.3.0"
+ },
+ "engines": {
+ "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
+ },
+ "peerDependencies": {
+ "eslint": "^6.0.0 || ^7.0.0 || >=8.0.0"
}
},
- "@eslint-community/regexpp": {
+ "node_modules/@eslint-community/regexpp": {
"version": "4.9.0",
"resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.9.0.tgz",
"integrity": "sha512-zJmuCWj2VLBt4c25CfBIbMZLGLyhkvs7LznyVX5HfpzeocThgIj5XQK4L+g3U36mMcx8bPMhGyPpwCATamC4jQ==",
- "dev": true
+ "dev": true,
+ "engines": {
+ "node": "^12.0.0 || ^14.0.0 || >=16.0.0"
+ }
},
- "@eslint/eslintrc": {
+ "node_modules/@eslint/eslintrc": {
"version": "2.1.2",
"resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.1.2.tgz",
"integrity": "sha512-+wvgpDsrB1YqAMdEUCcnTlpfVBH7Vqn6A/NT3D8WVXFIaKMlErPIZT3oCIAVCOtarRpMtelZLqJeU3t7WY6X6g==",
"dev": true,
- "requires": {
+ "dependencies": {
"ajv": "^6.12.4",
"debug": "^4.3.2",
"espree": "^9.6.0",
@@ -778,823 +1065,969 @@
"minimatch": "^3.1.2",
"strip-json-comments": "^3.1.1"
},
- "dependencies": {
- "ajv": {
- "version": "6.12.6",
- "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz",
- "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==",
- "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"
- }
- },
- "ignore": {
- "version": "5.2.4",
- "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.4.tgz",
- "integrity": "sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ==",
- "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
- },
- "strip-json-comments": {
- "version": "3.1.1",
- "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz",
- "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==",
- "dev": true
- }
+ "engines": {
+ "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
+ },
+ "funding": {
+ "url": "https://opencollective.com/eslint"
}
},
- "@eslint/js": {
+ "node_modules/@eslint/eslintrc/node_modules/ajv": {
+ "version": "6.12.6",
+ "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz",
+ "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==",
+ "dev": true,
+ "dependencies": {
+ "fast-deep-equal": "^3.1.1",
+ "fast-json-stable-stringify": "^2.0.0",
+ "json-schema-traverse": "^0.4.1",
+ "uri-js": "^4.2.2"
+ },
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/epoberezkin"
+ }
+ },
+ "node_modules/@eslint/eslintrc/node_modules/ignore": {
+ "version": "5.2.4",
+ "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.4.tgz",
+ "integrity": "sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ==",
+ "dev": true,
+ "engines": {
+ "node": ">= 4"
+ }
+ },
+ "node_modules/@eslint/eslintrc/node_modules/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
+ },
+ "node_modules/@eslint/eslintrc/node_modules/strip-json-comments": {
+ "version": "3.1.1",
+ "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz",
+ "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==",
+ "dev": true,
+ "engines": {
+ "node": ">=8"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/@eslint/js": {
"version": "8.50.0",
"resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.50.0.tgz",
"integrity": "sha512-NCC3zz2+nvYd+Ckfh87rA47zfu2QsQpvc6k1yzTk+b9KzRj0wkGa8LSoGOXN6Zv4lRf/EIoZ80biDh9HOI+RNQ==",
- "dev": true
+ "dev": true,
+ "engines": {
+ "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
+ }
},
- "@hapi/boom": {
+ "node_modules/@hapi/boom": {
"version": "7.4.11",
"resolved": "https://registry.npmjs.org/@hapi/boom/-/boom-7.4.11.tgz",
"integrity": "sha512-VSU/Cnj1DXouukYxxkes4nNJonCnlogHvIff1v1RVoN4xzkKhMXX+GRmb3NyH1iar10I9WFPDv2JPwfH3GaV0A==",
- "requires": {
+ "deprecated": "This version has been deprecated and is no longer supported or maintained",
+ "dependencies": {
"@hapi/hoek": "8.x.x"
}
},
- "@hapi/hoek": {
+ "node_modules/@hapi/hoek": {
"version": "8.5.1",
"resolved": "https://registry.npmjs.org/@hapi/hoek/-/hoek-8.5.1.tgz",
- "integrity": "sha512-yN7kbciD87WzLGc5539Tn0sApjyiGHAJgKvG9W8C7O+6c7qmoQMfVs0W4bX17eqz6C78QJqqFrtgdK5EWf6Qow=="
+ "integrity": "sha512-yN7kbciD87WzLGc5539Tn0sApjyiGHAJgKvG9W8C7O+6c7qmoQMfVs0W4bX17eqz6C78QJqqFrtgdK5EWf6Qow==",
+ "deprecated": "This version has been deprecated and is no longer supported or maintained"
},
- "@humanwhocodes/config-array": {
+ "node_modules/@humanwhocodes/config-array": {
"version": "0.11.11",
"resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.11.tgz",
"integrity": "sha512-N2brEuAadi0CcdeMXUkhbZB84eskAc8MEX1By6qEchoVywSgXPIjou4rYsl0V3Hj0ZnuGycGCjdNgockbzeWNA==",
"dev": true,
- "requires": {
+ "dependencies": {
"@humanwhocodes/object-schema": "^1.2.1",
"debug": "^4.1.1",
"minimatch": "^3.0.5"
+ },
+ "engines": {
+ "node": ">=10.10.0"
}
},
- "@humanwhocodes/module-importer": {
+ "node_modules/@humanwhocodes/module-importer": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz",
"integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==",
- "dev": true
+ "dev": true,
+ "engines": {
+ "node": ">=12.22"
+ },
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/nzakas"
+ }
},
- "@humanwhocodes/object-schema": {
+ "node_modules/@humanwhocodes/object-schema": {
"version": "1.2.1",
"resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz",
"integrity": "sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==",
"dev": true
},
- "@jridgewell/gen-mapping": {
+ "node_modules/@jridgewell/gen-mapping": {
"version": "0.3.3",
"resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.3.tgz",
"integrity": "sha512-HLhSWOLRi875zjjMG/r+Nv0oCW8umGb0BgEhyX3dDX3egwZtB8PqLnjz3yedt8R5StBrzcg4aBpnh8UA9D1BoQ==",
- "dev": true,
- "requires": {
+ "dependencies": {
"@jridgewell/set-array": "^1.0.1",
"@jridgewell/sourcemap-codec": "^1.4.10",
"@jridgewell/trace-mapping": "^0.3.9"
+ },
+ "engines": {
+ "node": ">=6.0.0"
}
},
- "@jridgewell/resolve-uri": {
+ "node_modules/@jridgewell/resolve-uri": {
"version": "3.1.1",
"resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.1.tgz",
"integrity": "sha512-dSYZh7HhCDtCKm4QakX0xFpsRDqjjtZf/kjI/v3T3Nwt5r8/qz/M19F9ySyOqU94SXBmeG9ttTul+YnR4LOxFA==",
- "dev": true
+ "engines": {
+ "node": ">=6.0.0"
+ }
},
- "@jridgewell/set-array": {
+ "node_modules/@jridgewell/set-array": {
"version": "1.1.2",
"resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.1.2.tgz",
"integrity": "sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==",
- "dev": true
+ "engines": {
+ "node": ">=6.0.0"
+ }
},
- "@jridgewell/source-map": {
+ "node_modules/@jridgewell/source-map": {
"version": "0.3.5",
"resolved": "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.5.tgz",
"integrity": "sha512-UTYAUj/wviwdsMfzoSJspJxbkH5o1snzwX0//0ENX1u/55kkZZkcTZP6u9bwKGkv+dkk9at4m1Cpt0uY80kcpQ==",
- "dev": true,
- "requires": {
+ "dependencies": {
"@jridgewell/gen-mapping": "^0.3.0",
"@jridgewell/trace-mapping": "^0.3.9"
}
},
- "@jridgewell/sourcemap-codec": {
+ "node_modules/@jridgewell/sourcemap-codec": {
"version": "1.4.15",
"resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz",
- "integrity": "sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==",
- "dev": true
+ "integrity": "sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg=="
},
- "@jridgewell/trace-mapping": {
+ "node_modules/@jridgewell/trace-mapping": {
"version": "0.3.19",
"resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.19.tgz",
"integrity": "sha512-kf37QtfW+Hwx/buWGMPcR60iF9ziHa6r/CZJIHbmcm4+0qrXiVdxegAH0F6yddEVQ7zdkjcGCgCzUu+BcbhQxw==",
- "dev": true,
- "requires": {
+ "dependencies": {
"@jridgewell/resolve-uri": "^3.1.0",
"@jridgewell/sourcemap-codec": "^1.4.14"
}
},
- "@mongodb-js/saslprep": {
+ "node_modules/@mongodb-js/saslprep": {
"version": "1.1.0",
"resolved": "https://registry.npmjs.org/@mongodb-js/saslprep/-/saslprep-1.1.0.tgz",
"integrity": "sha512-Xfijy7HvfzzqiOAhAepF4SGN5e9leLkMvg/OPOF97XemjfVCYN/oWa75wnkc6mltMSTwY+XlbhWgUOJmkFspSw==",
- "optional": true,
- "requires": {
+ "dependencies": {
"sparse-bitfield": "^3.0.3"
}
},
- "@mrmlnc/readdir-enhanced": {
+ "node_modules/@mrmlnc/readdir-enhanced": {
"version": "2.2.1",
"resolved": "https://registry.npmjs.org/@mrmlnc/readdir-enhanced/-/readdir-enhanced-2.2.1.tgz",
"integrity": "sha512-bPHp6Ji8b41szTOcaP63VlnbbO5Ny6dwAATtY6JTjh5N2OLrb5Qk/Th5cRkRQhkWCt+EJsYrNB0MiL+Gpn6e3g==",
- "requires": {
+ "dependencies": {
"call-me-maybe": "^1.0.1",
"glob-to-regexp": "^0.3.0"
+ },
+ "engines": {
+ "node": ">=4"
}
},
- "@nodelib/fs.scandir": {
+ "node_modules/@nodelib/fs.scandir": {
"version": "2.1.5",
"resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz",
"integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==",
"dev": true,
- "requires": {
+ "dependencies": {
"@nodelib/fs.stat": "2.0.5",
"run-parallel": "^1.1.9"
},
- "dependencies": {
- "@nodelib/fs.stat": {
- "version": "2.0.5",
- "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz",
- "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==",
- "dev": true
- }
+ "engines": {
+ "node": ">= 8"
}
},
- "@nodelib/fs.stat": {
+ "node_modules/@nodelib/fs.scandir/node_modules/@nodelib/fs.stat": {
+ "version": "2.0.5",
+ "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz",
+ "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==",
+ "dev": true,
+ "engines": {
+ "node": ">= 8"
+ }
+ },
+ "node_modules/@nodelib/fs.stat": {
"version": "1.1.3",
"resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-1.1.3.tgz",
- "integrity": "sha512-shAmDyaQC4H92APFoIaVDHCx5bStIocgvbwQyxPRrbUY20V1EYTbSDchWbuwlMG3V17cprZhA6+78JfB+3DTPw=="
+ "integrity": "sha512-shAmDyaQC4H92APFoIaVDHCx5bStIocgvbwQyxPRrbUY20V1EYTbSDchWbuwlMG3V17cprZhA6+78JfB+3DTPw==",
+ "engines": {
+ "node": ">= 6"
+ }
},
- "@nodelib/fs.walk": {
+ "node_modules/@nodelib/fs.walk": {
"version": "1.2.8",
"resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz",
"integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==",
"dev": true,
- "requires": {
+ "dependencies": {
"@nodelib/fs.scandir": "2.1.5",
"fastq": "^1.6.0"
+ },
+ "engines": {
+ "node": ">= 8"
}
},
- "@sinonjs/commons": {
+ "node_modules/@sinonjs/commons": {
"version": "1.8.6",
"resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-1.8.6.tgz",
"integrity": "sha512-Ky+XkAkqPZSm3NLBeUng77EBQl3cmeJhITaGHdYH8kjVB+aun3S4XBRti2zt17mtt0mIUDiNxYeoJm6drVvBJQ==",
"dev": true,
- "requires": {
+ "dependencies": {
"type-detect": "4.0.8"
}
},
- "@sinonjs/formatio": {
+ "node_modules/@sinonjs/formatio": {
"version": "3.2.2",
"resolved": "https://registry.npmjs.org/@sinonjs/formatio/-/formatio-3.2.2.tgz",
"integrity": "sha512-B8SEsgd8gArBLMD6zpRw3juQ2FVSsmdd7qlevyDqzS9WTCtvF55/gAL+h6gue8ZvPYcdiPdvueM/qm//9XzyTQ==",
"dev": true,
- "requires": {
+ "dependencies": {
"@sinonjs/commons": "^1",
"@sinonjs/samsam": "^3.1.0"
}
},
- "@sinonjs/samsam": {
+ "node_modules/@sinonjs/samsam": {
"version": "3.3.3",
"resolved": "https://registry.npmjs.org/@sinonjs/samsam/-/samsam-3.3.3.tgz",
"integrity": "sha512-bKCMKZvWIjYD0BLGnNrxVuw4dkWCYsLqFOUWw8VgKF/+5Y+mE7LfHWPIYoDXowH+3a9LsWDMo0uAP8YDosPvHQ==",
"dev": true,
- "requires": {
+ "dependencies": {
"@sinonjs/commons": "^1.3.0",
"array-from": "^2.1.1",
"lodash": "^4.17.15"
}
},
- "@sinonjs/text-encoding": {
+ "node_modules/@sinonjs/text-encoding": {
"version": "0.7.2",
"resolved": "https://registry.npmjs.org/@sinonjs/text-encoding/-/text-encoding-0.7.2.tgz",
"integrity": "sha512-sXXKG+uL9IrKqViTtao2Ws6dy0znu9sOaP1di/jKGW1M6VssO8vlpXCQcpZ+jisQ1tTFAC5Jo/EOzFbggBagFQ==",
"dev": true
},
- "@smithy/abort-controller": {
- "version": "2.0.9",
- "resolved": "https://registry.npmjs.org/@smithy/abort-controller/-/abort-controller-2.0.9.tgz",
- "integrity": "sha512-8liHOEbx99xcy4VndeQNQhyA0LS+e7UqsuRnDTSIA26IKBv/7vA9w09KOd4fgNULrvX0r3WpA6cwsQTRJpSWkg==",
+ "node_modules/@smithy/abort-controller": {
+ "version": "2.0.11",
+ "resolved": "https://registry.npmjs.org/@smithy/abort-controller/-/abort-controller-2.0.11.tgz",
+ "integrity": "sha512-MSzE1qR2JNyb7ot3blIOT3O3H0Jn06iNDEgHRaqZUwBgx5EG+VIx24Y21tlKofzYryIOcWpIohLrIIyocD6LMA==",
"optional": true,
- "requires": {
- "@smithy/types": "^2.3.3",
+ "dependencies": {
+ "@smithy/types": "^2.3.5",
"tslib": "^2.5.0"
+ },
+ "engines": {
+ "node": ">=14.0.0"
}
},
- "@smithy/config-resolver": {
- "version": "2.0.10",
- "resolved": "https://registry.npmjs.org/@smithy/config-resolver/-/config-resolver-2.0.10.tgz",
- "integrity": "sha512-MwToDsCltHjumkCuRn883qoNeJUawc2b8sX9caSn5vLz6J5crU1IklklNxWCaMO2z2nDL91Po4b/aI1eHv5PfA==",
+ "node_modules/@smithy/config-resolver": {
+ "version": "2.0.15",
+ "resolved": "https://registry.npmjs.org/@smithy/config-resolver/-/config-resolver-2.0.15.tgz",
+ "integrity": "sha512-a2Pfocla5nSrG2RyB8i20jcWgMyR71TUeFKm8pmrnZotr/X22tlg4y/EhSvBK2oTE8MKHlKh4YdpDO2AryJbGQ==",
"optional": true,
- "requires": {
- "@smithy/node-config-provider": "^2.0.12",
- "@smithy/types": "^2.3.3",
+ "dependencies": {
+ "@smithy/node-config-provider": "^2.1.2",
+ "@smithy/types": "^2.3.5",
"@smithy/util-config-provider": "^2.0.0",
- "@smithy/util-middleware": "^2.0.2",
+ "@smithy/util-middleware": "^2.0.4",
"tslib": "^2.5.0"
+ },
+ "engines": {
+ "node": ">=14.0.0"
}
},
- "@smithy/credential-provider-imds": {
- "version": "2.0.12",
- "resolved": "https://registry.npmjs.org/@smithy/credential-provider-imds/-/credential-provider-imds-2.0.12.tgz",
- "integrity": "sha512-S3lUNe+2fEFwKcmiQniXGPXt69vaHvQCw8kYQOBL4OvJsgwfpkIYDZdroHbTshYi0M6WaKL26Mw+hvgma6dZqA==",
+ "node_modules/@smithy/credential-provider-imds": {
+ "version": "2.0.17",
+ "resolved": "https://registry.npmjs.org/@smithy/credential-provider-imds/-/credential-provider-imds-2.0.17.tgz",
+ "integrity": "sha512-2XcD414yrwbxxuYueTo7tzLC2/w3jj9FZqfenpv3MQkocdOEmuOVS0v9WHsY/nW6V+2EcR340rj/z5HnvsHncQ==",
"optional": true,
- "requires": {
- "@smithy/node-config-provider": "^2.0.12",
- "@smithy/property-provider": "^2.0.10",
- "@smithy/types": "^2.3.3",
- "@smithy/url-parser": "^2.0.9",
+ "dependencies": {
+ "@smithy/node-config-provider": "^2.1.2",
+ "@smithy/property-provider": "^2.0.12",
+ "@smithy/types": "^2.3.5",
+ "@smithy/url-parser": "^2.0.11",
"tslib": "^2.5.0"
+ },
+ "engines": {
+ "node": ">=14.0.0"
}
},
- "@smithy/eventstream-codec": {
- "version": "2.0.9",
- "resolved": "https://registry.npmjs.org/@smithy/eventstream-codec/-/eventstream-codec-2.0.9.tgz",
- "integrity": "sha512-sy0pcbKnawt1iu+qCoSFbs/h9PAaUgvlJEO3lqkE1HFFj4p5RgL98vH+9CyDoj6YY82cG5XsorFmcLqQJHTOYw==",
+ "node_modules/@smithy/eventstream-codec": {
+ "version": "2.0.11",
+ "resolved": "https://registry.npmjs.org/@smithy/eventstream-codec/-/eventstream-codec-2.0.11.tgz",
+ "integrity": "sha512-BQCTjxhCYRZIfXapa2LmZSaH8QUBGwMZw7XRN83hrdixbLjIcj+o549zjkedFS07Ve2TlvWUI6BTzP+nv7snBA==",
"optional": true,
- "requires": {
+ "dependencies": {
"@aws-crypto/crc32": "3.0.0",
- "@smithy/types": "^2.3.3",
+ "@smithy/types": "^2.3.5",
"@smithy/util-hex-encoding": "^2.0.0",
"tslib": "^2.5.0"
}
},
- "@smithy/fetch-http-handler": {
- "version": "2.1.5",
- "resolved": "https://registry.npmjs.org/@smithy/fetch-http-handler/-/fetch-http-handler-2.1.5.tgz",
- "integrity": "sha512-BIeCHGfr5JCGN+EMTwZK74ELvjPXOIrI7OLM5OhZJJ6AmZyRv2S9ANJk18AtLwht0TsSm+8WoXIEp8LuxNgUyA==",
+ "node_modules/@smithy/fetch-http-handler": {
+ "version": "2.2.3",
+ "resolved": "https://registry.npmjs.org/@smithy/fetch-http-handler/-/fetch-http-handler-2.2.3.tgz",
+ "integrity": "sha512-0G9sePU+0R+8d7cie+OXzNbbkjnD4RfBlVCs46ZEuQAMcxK8OniemYXSSkOc80CCk8Il4DnlYZcUSvsIs2OB2w==",
"optional": true,
- "requires": {
- "@smithy/protocol-http": "^3.0.5",
- "@smithy/querystring-builder": "^2.0.9",
- "@smithy/types": "^2.3.3",
+ "dependencies": {
+ "@smithy/protocol-http": "^3.0.7",
+ "@smithy/querystring-builder": "^2.0.11",
+ "@smithy/types": "^2.3.5",
"@smithy/util-base64": "^2.0.0",
"tslib": "^2.5.0"
}
},
- "@smithy/hash-node": {
- "version": "2.0.9",
- "resolved": "https://registry.npmjs.org/@smithy/hash-node/-/hash-node-2.0.9.tgz",
- "integrity": "sha512-XP3yWd5wyCtiVmsY5Nuq/FUwyCEQ6YG7DsvRh7ThldNukGpCzyFdP8eivZJVjn4Fx7oYrrOnVoYZ0WEgpW1AvQ==",
+ "node_modules/@smithy/hash-node": {
+ "version": "2.0.11",
+ "resolved": "https://registry.npmjs.org/@smithy/hash-node/-/hash-node-2.0.11.tgz",
+ "integrity": "sha512-PbleVugN2tbhl1ZoNWVrZ1oTFFas/Hq+s6zGO8B9bv4w/StTriTKA9W+xZJACOj9X7zwfoTLbscM+avCB1KqOQ==",
"optional": true,
- "requires": {
- "@smithy/types": "^2.3.3",
+ "dependencies": {
+ "@smithy/types": "^2.3.5",
"@smithy/util-buffer-from": "^2.0.0",
"@smithy/util-utf8": "^2.0.0",
"tslib": "^2.5.0"
+ },
+ "engines": {
+ "node": ">=14.0.0"
}
},
- "@smithy/invalid-dependency": {
- "version": "2.0.9",
- "resolved": "https://registry.npmjs.org/@smithy/invalid-dependency/-/invalid-dependency-2.0.9.tgz",
- "integrity": "sha512-RuJqhYf8nViK96IIO9JbTtjDUuFItVfuuJhWw2yk7fv67yltQ7fZD6IQ2OsHHluoVmstnQJuCg5raXJR696Ubw==",
+ "node_modules/@smithy/invalid-dependency": {
+ "version": "2.0.11",
+ "resolved": "https://registry.npmjs.org/@smithy/invalid-dependency/-/invalid-dependency-2.0.11.tgz",
+ "integrity": "sha512-zazq99ujxYv/NOf9zh7xXbNgzoVLsqE0wle8P/1zU/XdhPi/0zohTPKWUzIxjGdqb5hkkwfBkNkl5H+LE0mvgw==",
"optional": true,
- "requires": {
- "@smithy/types": "^2.3.3",
+ "dependencies": {
+ "@smithy/types": "^2.3.5",
"tslib": "^2.5.0"
}
},
- "@smithy/is-array-buffer": {
+ "node_modules/@smithy/is-array-buffer": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/@smithy/is-array-buffer/-/is-array-buffer-2.0.0.tgz",
"integrity": "sha512-z3PjFjMyZNI98JFRJi/U0nGoLWMSJlDjAW4QUX2WNZLas5C0CmVV6LJ01JI0k90l7FvpmixjWxPFmENSClQ7ug==",
"optional": true,
- "requires": {
+ "dependencies": {
"tslib": "^2.5.0"
+ },
+ "engines": {
+ "node": ">=14.0.0"
}
},
- "@smithy/middleware-content-length": {
- "version": "2.0.11",
- "resolved": "https://registry.npmjs.org/@smithy/middleware-content-length/-/middleware-content-length-2.0.11.tgz",
- "integrity": "sha512-Malj4voNTL4+a5ZL3a6+Ij7JTUMTa2R7c3ZIBzMxN5OUUgAspU7uFi1Q97f4B0afVh2joQBAWH5IQJUG25nl8g==",
+ "node_modules/@smithy/middleware-content-length": {
+ "version": "2.0.13",
+ "resolved": "https://registry.npmjs.org/@smithy/middleware-content-length/-/middleware-content-length-2.0.13.tgz",
+ "integrity": "sha512-Md2kxWpaec3bXp1oERFPQPBhOXCkGSAF7uc1E+4rkwjgw3/tqAXRtbjbggu67HJdwaif76As8AV6XxbD1HzqTQ==",
"optional": true,
- "requires": {
- "@smithy/protocol-http": "^3.0.5",
- "@smithy/types": "^2.3.3",
+ "dependencies": {
+ "@smithy/protocol-http": "^3.0.7",
+ "@smithy/types": "^2.3.5",
"tslib": "^2.5.0"
+ },
+ "engines": {
+ "node": ">=14.0.0"
}
},
- "@smithy/middleware-endpoint": {
- "version": "2.0.9",
- "resolved": "https://registry.npmjs.org/@smithy/middleware-endpoint/-/middleware-endpoint-2.0.9.tgz",
- "integrity": "sha512-72/o8R6AAO4+nyTI6h4z6PYGTSA4dr1M7tZz29U8DEUHuh1YkhC77js0P6RyF9G0wDLuYqxb+Yh0crI5WG2pJg==",
+ "node_modules/@smithy/middleware-endpoint": {
+ "version": "2.1.2",
+ "resolved": "https://registry.npmjs.org/@smithy/middleware-endpoint/-/middleware-endpoint-2.1.2.tgz",
+ "integrity": "sha512-dua4r2EbSTRzNefz72snz+KDuXN73RCe1K+rGeemzUyYemxuh1jujFbLQbTU6DVlTgHkhtrbH0+kdOFY/SV4Qg==",
"optional": true,
- "requires": {
- "@smithy/middleware-serde": "^2.0.9",
- "@smithy/types": "^2.3.3",
- "@smithy/url-parser": "^2.0.9",
- "@smithy/util-middleware": "^2.0.2",
+ "dependencies": {
+ "@smithy/middleware-serde": "^2.0.11",
+ "@smithy/node-config-provider": "^2.1.2",
+ "@smithy/shared-ini-file-loader": "^2.2.1",
+ "@smithy/types": "^2.3.5",
+ "@smithy/url-parser": "^2.0.11",
+ "@smithy/util-middleware": "^2.0.4",
"tslib": "^2.5.0"
+ },
+ "engines": {
+ "node": ">=14.0.0"
}
},
- "@smithy/middleware-retry": {
- "version": "2.0.12",
- "resolved": "https://registry.npmjs.org/@smithy/middleware-retry/-/middleware-retry-2.0.12.tgz",
- "integrity": "sha512-YQ/ufXX4/d9/+Jf1QQ4J+CVeupC7BW52qldBTvRV33PDX9vxndlAwkFwzBcmnUFC3Hjf1//HW6I77EItcjNSCA==",
+ "node_modules/@smithy/middleware-retry": {
+ "version": "2.0.17",
+ "resolved": "https://registry.npmjs.org/@smithy/middleware-retry/-/middleware-retry-2.0.17.tgz",
+ "integrity": "sha512-ZYVU1MmshCTbEKTNc5h7/Pps1vhH5C7hRclQWnAbVYKkIT+PEGu9dSVqprzEo/nlMA8Zv4Dj5Y+fv3pRnUwElw==",
"optional": true,
- "requires": {
- "@smithy/node-config-provider": "^2.0.12",
- "@smithy/protocol-http": "^3.0.5",
- "@smithy/service-error-classification": "^2.0.2",
- "@smithy/types": "^2.3.3",
- "@smithy/util-middleware": "^2.0.2",
- "@smithy/util-retry": "^2.0.2",
+ "dependencies": {
+ "@smithy/node-config-provider": "^2.1.2",
+ "@smithy/protocol-http": "^3.0.7",
+ "@smithy/service-error-classification": "^2.0.4",
+ "@smithy/types": "^2.3.5",
+ "@smithy/util-middleware": "^2.0.4",
+ "@smithy/util-retry": "^2.0.4",
"tslib": "^2.5.0",
"uuid": "^8.3.2"
+ },
+ "engines": {
+ "node": ">=14.0.0"
}
},
- "@smithy/middleware-serde": {
- "version": "2.0.9",
- "resolved": "https://registry.npmjs.org/@smithy/middleware-serde/-/middleware-serde-2.0.9.tgz",
- "integrity": "sha512-GVbauxrr6WmtCaesakktg3t5LR/yDbajpC7KkWc8rtCpddMI4ShAVO5Q6DqwX8MDFi4CLaY8H7eTGcxhl3jbLg==",
+ "node_modules/@smithy/middleware-serde": {
+ "version": "2.0.11",
+ "resolved": "https://registry.npmjs.org/@smithy/middleware-serde/-/middleware-serde-2.0.11.tgz",
+ "integrity": "sha512-NuxnjMyf4zQqhwwdh0OTj5RqpnuT6HcH5Xg5GrPijPcKzc2REXVEVK4Yyk8ckj8ez1XSj/bCmJ+oNjmqB02GWA==",
"optional": true,
- "requires": {
- "@smithy/types": "^2.3.3",
+ "dependencies": {
+ "@smithy/types": "^2.3.5",
"tslib": "^2.5.0"
+ },
+ "engines": {
+ "node": ">=14.0.0"
}
},
- "@smithy/middleware-stack": {
- "version": "2.0.3",
- "resolved": "https://registry.npmjs.org/@smithy/middleware-stack/-/middleware-stack-2.0.3.tgz",
- "integrity": "sha512-AlhPmbwpkC4lQBVaVHXczmjFvsAhDHhrakqLt038qFLotnJcvDLhmMzAtu23alBeOSkKxkTQq0LsAt2N0WpAbw==",
+ "node_modules/@smithy/middleware-stack": {
+ "version": "2.0.5",
+ "resolved": "https://registry.npmjs.org/@smithy/middleware-stack/-/middleware-stack-2.0.5.tgz",
+ "integrity": "sha512-bVQU/rZzBY7CbSxIrDTGZYnBWKtIw+PL/cRc9B7etZk1IKSOe0NvKMJyWllfhfhrTeMF6eleCzOihIQympAvPw==",
"optional": true,
- "requires": {
- "@smithy/types": "^2.3.3",
+ "dependencies": {
+ "@smithy/types": "^2.3.5",
"tslib": "^2.5.0"
+ },
+ "engines": {
+ "node": ">=14.0.0"
}
},
- "@smithy/node-config-provider": {
+ "node_modules/@smithy/node-config-provider": {
+ "version": "2.1.2",
+ "resolved": "https://registry.npmjs.org/@smithy/node-config-provider/-/node-config-provider-2.1.2.tgz",
+ "integrity": "sha512-tbYh/JK/ddxKWYTtjLgap0juyivJ0wCvywMqINb54zyOVHoKYM6iYl7DosQA0owFaNp6GAx1lXFjqGz7L2fAqA==",
+ "optional": true,
+ "dependencies": {
+ "@smithy/property-provider": "^2.0.12",
+ "@smithy/shared-ini-file-loader": "^2.2.1",
+ "@smithy/types": "^2.3.5",
+ "tslib": "^2.5.0"
+ },
+ "engines": {
+ "node": ">=14.0.0"
+ }
+ },
+ "node_modules/@smithy/node-http-handler": {
+ "version": "2.1.7",
+ "resolved": "https://registry.npmjs.org/@smithy/node-http-handler/-/node-http-handler-2.1.7.tgz",
+ "integrity": "sha512-PQIKZXlp3awCDn/xNlCSTFE7aYG/5Tx33M05NfQmWYeB5yV1GZZOSz4dXpwiNJYTXb9jPqjl+ueXXkwtEluFFA==",
+ "optional": true,
+ "dependencies": {
+ "@smithy/abort-controller": "^2.0.11",
+ "@smithy/protocol-http": "^3.0.7",
+ "@smithy/querystring-builder": "^2.0.11",
+ "@smithy/types": "^2.3.5",
+ "tslib": "^2.5.0"
+ },
+ "engines": {
+ "node": ">=14.0.0"
+ }
+ },
+ "node_modules/@smithy/property-provider": {
"version": "2.0.12",
- "resolved": "https://registry.npmjs.org/@smithy/node-config-provider/-/node-config-provider-2.0.12.tgz",
- "integrity": "sha512-df9y9ywv+JmS40Y60ZqJ4jfZiTCmyHQffwzIqjBjLJLJl0imf9F6DWBd+jiEWHvlohR+sFhyY+KL/qzKgnAq1A==",
+ "resolved": "https://registry.npmjs.org/@smithy/property-provider/-/property-provider-2.0.12.tgz",
+ "integrity": "sha512-Un/OvvuQ1Kg8WYtoMCicfsFFuHb/TKL3pCA6ZIo/WvNTJTR94RtoRnL7mY4XkkUAoFMyf6KjcQJ76y1FX7S5rw==",
"optional": true,
- "requires": {
- "@smithy/property-provider": "^2.0.10",
- "@smithy/shared-ini-file-loader": "^2.0.11",
- "@smithy/types": "^2.3.3",
+ "dependencies": {
+ "@smithy/types": "^2.3.5",
"tslib": "^2.5.0"
+ },
+ "engines": {
+ "node": ">=14.0.0"
}
},
- "@smithy/node-http-handler": {
- "version": "2.1.5",
- "resolved": "https://registry.npmjs.org/@smithy/node-http-handler/-/node-http-handler-2.1.5.tgz",
- "integrity": "sha512-52uF+BrZaFiBh+NT/bADiVDCQO91T+OwDRsuaAeWZC1mlCXFjAPPQdxeQohtuYOe9m7mPP/xIMNiqbe8jvndHA==",
+ "node_modules/@smithy/protocol-http": {
+ "version": "3.0.7",
+ "resolved": "https://registry.npmjs.org/@smithy/protocol-http/-/protocol-http-3.0.7.tgz",
+ "integrity": "sha512-HnZW8y+r66ntYueCDbLqKwWcMNWW8o3eVpSrHNluwtBJ/EUWfQHRKSiu6vZZtc6PGfPQWgVfucoCE/C3QufMAA==",
"optional": true,
- "requires": {
- "@smithy/abort-controller": "^2.0.9",
- "@smithy/protocol-http": "^3.0.5",
- "@smithy/querystring-builder": "^2.0.9",
- "@smithy/types": "^2.3.3",
+ "dependencies": {
+ "@smithy/types": "^2.3.5",
"tslib": "^2.5.0"
+ },
+ "engines": {
+ "node": ">=14.0.0"
}
},
- "@smithy/property-provider": {
- "version": "2.0.10",
- "resolved": "https://registry.npmjs.org/@smithy/property-provider/-/property-provider-2.0.10.tgz",
- "integrity": "sha512-YMBVfh0ZMmJtbsUn+WfSwR32iRljZPdRN0Tn2GAcdJ+ejX8WrBXD7Z0jIkQDrQZr8fEuuv5x8WxMIj+qVbsPQw==",
+ "node_modules/@smithy/querystring-builder": {
+ "version": "2.0.11",
+ "resolved": "https://registry.npmjs.org/@smithy/querystring-builder/-/querystring-builder-2.0.11.tgz",
+ "integrity": "sha512-b4kEbVMxpmfv2VWUITn2otckTi7GlMteZQxi+jlwedoATOGEyrCJPfRcYQJjbCi3fZ2QTfh3PcORvB27+j38Yg==",
"optional": true,
- "requires": {
- "@smithy/types": "^2.3.3",
- "tslib": "^2.5.0"
- }
- },
- "@smithy/protocol-http": {
- "version": "3.0.5",
- "resolved": "https://registry.npmjs.org/@smithy/protocol-http/-/protocol-http-3.0.5.tgz",
- "integrity": "sha512-3t3fxj+ip4EPHRC2fQ0JimMxR/qCQ1LSQJjZZVZFgROnFLYWPDgUZqpoi7chr+EzatxJVXF/Rtoi5yLHOWCoZQ==",
- "optional": true,
- "requires": {
- "@smithy/types": "^2.3.3",
- "tslib": "^2.5.0"
- }
- },
- "@smithy/querystring-builder": {
- "version": "2.0.9",
- "resolved": "https://registry.npmjs.org/@smithy/querystring-builder/-/querystring-builder-2.0.9.tgz",
- "integrity": "sha512-Yt6CPF4j3j1cuwod/DRflbuXxBFjJm7gAjy6W1RE21Rz5/kfGFqiZBXWmmXwGtnnhiLThYwoHK4S6/TQtnx0Fg==",
- "optional": true,
- "requires": {
- "@smithy/types": "^2.3.3",
+ "dependencies": {
+ "@smithy/types": "^2.3.5",
"@smithy/util-uri-escape": "^2.0.0",
"tslib": "^2.5.0"
+ },
+ "engines": {
+ "node": ">=14.0.0"
}
},
- "@smithy/querystring-parser": {
- "version": "2.0.9",
- "resolved": "https://registry.npmjs.org/@smithy/querystring-parser/-/querystring-parser-2.0.9.tgz",
- "integrity": "sha512-U6z4N743s4vrcxPW8p8+reLV0PjMCYEyb1/wtMVvv3VnbJ74gshdI8SR1sBnEh95cF8TxonmX5IxY25tS9qGfg==",
- "optional": true,
- "requires": {
- "@smithy/types": "^2.3.3",
- "tslib": "^2.5.0"
- }
- },
- "@smithy/service-error-classification": {
- "version": "2.0.2",
- "resolved": "https://registry.npmjs.org/@smithy/service-error-classification/-/service-error-classification-2.0.2.tgz",
- "integrity": "sha512-GTUd2j63gKy7A+ggvSdn2hc4sejG7LWfE+ZMF17vzWoNyqERWbRP7HTPS0d0Lwg1p6OQCAzvNigSrEIWVFt6iA==",
- "optional": true,
- "requires": {
- "@smithy/types": "^2.3.3"
- }
- },
- "@smithy/shared-ini-file-loader": {
+ "node_modules/@smithy/querystring-parser": {
"version": "2.0.11",
- "resolved": "https://registry.npmjs.org/@smithy/shared-ini-file-loader/-/shared-ini-file-loader-2.0.11.tgz",
- "integrity": "sha512-Sf0u5C5px6eykXi6jImDTp+edvG3REtPjXnFWU/J+b7S2wkXwUqFXqBL5DdM4zC1F+M8u57ZT7NRqDwMOw7/Tw==",
+ "resolved": "https://registry.npmjs.org/@smithy/querystring-parser/-/querystring-parser-2.0.11.tgz",
+ "integrity": "sha512-YXe7jhi7s3dQ0Fu9dLoY/gLu6NCyy8tBWJL/v2c9i7/RLpHgKT+uT96/OqZkHizCJ4kr0ZD46tzMjql/o60KLg==",
"optional": true,
- "requires": {
- "@smithy/types": "^2.3.3",
+ "dependencies": {
+ "@smithy/types": "^2.3.5",
"tslib": "^2.5.0"
+ },
+ "engines": {
+ "node": ">=14.0.0"
}
},
- "@smithy/signature-v4": {
- "version": "2.0.9",
- "resolved": "https://registry.npmjs.org/@smithy/signature-v4/-/signature-v4-2.0.9.tgz",
- "integrity": "sha512-RkHP0joSI1j2EI+mU55sOi33/aMMkKdL9ZY+SWrPxsiCe1oyzzuy79Tpn8X7uT+t0ilNmQlwPpkP/jUy940pEA==",
+ "node_modules/@smithy/service-error-classification": {
+ "version": "2.0.4",
+ "resolved": "https://registry.npmjs.org/@smithy/service-error-classification/-/service-error-classification-2.0.4.tgz",
+ "integrity": "sha512-77506l12I5gxTZqBkx3Wb0RqMG81bMYLaVQ+EqIWFwQDJRs5UFeXogKxSKojCmz1wLUziHZQXm03MBzPQiumQw==",
"optional": true,
- "requires": {
- "@smithy/eventstream-codec": "^2.0.9",
+ "dependencies": {
+ "@smithy/types": "^2.3.5"
+ },
+ "engines": {
+ "node": ">=14.0.0"
+ }
+ },
+ "node_modules/@smithy/shared-ini-file-loader": {
+ "version": "2.2.1",
+ "resolved": "https://registry.npmjs.org/@smithy/shared-ini-file-loader/-/shared-ini-file-loader-2.2.1.tgz",
+ "integrity": "sha512-eAYajwo2eTTVU5KPX90+V6ccfrWphrzcUwOt7n9pLOMBO0fOKlRVshbvCBqfRCxEn7OYDGH6TsL3yrx+hAjddA==",
+ "optional": true,
+ "dependencies": {
+ "@smithy/types": "^2.3.5",
+ "tslib": "^2.5.0"
+ },
+ "engines": {
+ "node": ">=14.0.0"
+ }
+ },
+ "node_modules/@smithy/signature-v4": {
+ "version": "2.0.11",
+ "resolved": "https://registry.npmjs.org/@smithy/signature-v4/-/signature-v4-2.0.11.tgz",
+ "integrity": "sha512-EFVU1dT+2s8xi227l1A9O27edT/GNKvyAK6lZnIZ0zhIHq/jSLznvkk15aonGAM1kmhmZBVGpI7Tt0odueZK9A==",
+ "optional": true,
+ "dependencies": {
+ "@smithy/eventstream-codec": "^2.0.11",
"@smithy/is-array-buffer": "^2.0.0",
- "@smithy/types": "^2.3.3",
+ "@smithy/types": "^2.3.5",
"@smithy/util-hex-encoding": "^2.0.0",
- "@smithy/util-middleware": "^2.0.2",
+ "@smithy/util-middleware": "^2.0.4",
"@smithy/util-uri-escape": "^2.0.0",
"@smithy/util-utf8": "^2.0.0",
"tslib": "^2.5.0"
+ },
+ "engines": {
+ "node": ">=14.0.0"
}
},
- "@smithy/smithy-client": {
- "version": "2.1.7",
- "resolved": "https://registry.npmjs.org/@smithy/smithy-client/-/smithy-client-2.1.7.tgz",
- "integrity": "sha512-r6T/oiBQ8vCbGqObH4/h0YqD0jFB1hAS9KFRmuTfaNJueu/L2hjmjqFjv3PV5lkbNHTgUYraSv4cFQ1naxiELQ==",
+ "node_modules/@smithy/smithy-client": {
+ "version": "2.1.11",
+ "resolved": "https://registry.npmjs.org/@smithy/smithy-client/-/smithy-client-2.1.11.tgz",
+ "integrity": "sha512-okjMbuBBCTiieK665OFN/ap6u9+Z9z55PMphS5FYCsS6Zfp137Q3qlnt0OgBAnUVnH/mNGyoJV0LBX9gkTWptg==",
"optional": true,
- "requires": {
- "@smithy/middleware-stack": "^2.0.3",
- "@smithy/types": "^2.3.3",
- "@smithy/util-stream": "^2.0.12",
+ "dependencies": {
+ "@smithy/middleware-stack": "^2.0.5",
+ "@smithy/types": "^2.3.5",
+ "@smithy/util-stream": "^2.0.16",
+ "tslib": "^2.5.0"
+ },
+ "engines": {
+ "node": ">=14.0.0"
+ }
+ },
+ "node_modules/@smithy/types": {
+ "version": "2.3.5",
+ "resolved": "https://registry.npmjs.org/@smithy/types/-/types-2.3.5.tgz",
+ "integrity": "sha512-ehyDt8M9hehyxrLQGoA1BGPou8Js1Ocoh5M0ngDhJMqbFmNK5N6Xhr9/ZExWkyIW8XcGkiMPq3ZUEE0ScrhbuQ==",
+ "optional": true,
+ "dependencies": {
+ "tslib": "^2.5.0"
+ },
+ "engines": {
+ "node": ">=14.0.0"
+ }
+ },
+ "node_modules/@smithy/url-parser": {
+ "version": "2.0.11",
+ "resolved": "https://registry.npmjs.org/@smithy/url-parser/-/url-parser-2.0.11.tgz",
+ "integrity": "sha512-h89yXMCCF+S5k9XIoKltMIWTYj+FcEkU/IIFZ6RtE222fskOTL4Iak6ZRG+ehSvZDt8yKEcxqheTDq7JvvtK3g==",
+ "optional": true,
+ "dependencies": {
+ "@smithy/querystring-parser": "^2.0.11",
+ "@smithy/types": "^2.3.5",
"tslib": "^2.5.0"
}
},
- "@smithy/types": {
- "version": "2.3.3",
- "resolved": "https://registry.npmjs.org/@smithy/types/-/types-2.3.3.tgz",
- "integrity": "sha512-zTdIPR9PvFVNRdIKMQu4M5oyTaycIbUqLheQqaOi9rTWPkgjGO2wDBxMA1rBHQB81aqAEv+DbSS4jfKyQMnXRA==",
- "optional": true,
- "requires": {
- "tslib": "^2.5.0"
- }
- },
- "@smithy/url-parser": {
- "version": "2.0.9",
- "resolved": "https://registry.npmjs.org/@smithy/url-parser/-/url-parser-2.0.9.tgz",
- "integrity": "sha512-NBnJ0NiY8z6E82Xd5VYUFQfKwK/wA/+QkKmpYUYP+cpH3aCzE6g2gvixd9vQKYjsIdRfNPCf+SFAozt8ljozOw==",
- "optional": true,
- "requires": {
- "@smithy/querystring-parser": "^2.0.9",
- "@smithy/types": "^2.3.3",
- "tslib": "^2.5.0"
- }
- },
- "@smithy/util-base64": {
+ "node_modules/@smithy/util-base64": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/@smithy/util-base64/-/util-base64-2.0.0.tgz",
"integrity": "sha512-Zb1E4xx+m5Lud8bbeYi5FkcMJMnn+1WUnJF3qD7rAdXpaL7UjkFQLdmW5fHadoKbdHpwH9vSR8EyTJFHJs++tA==",
"optional": true,
- "requires": {
+ "dependencies": {
"@smithy/util-buffer-from": "^2.0.0",
"tslib": "^2.5.0"
+ },
+ "engines": {
+ "node": ">=14.0.0"
}
},
- "@smithy/util-body-length-browser": {
+ "node_modules/@smithy/util-body-length-browser": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/@smithy/util-body-length-browser/-/util-body-length-browser-2.0.0.tgz",
"integrity": "sha512-JdDuS4ircJt+FDnaQj88TzZY3+njZ6O+D3uakS32f2VNnDo3vyEuNdBOh/oFd8Df1zSZOuH1HEChk2AOYDezZg==",
"optional": true,
- "requires": {
+ "dependencies": {
"tslib": "^2.5.0"
}
},
- "@smithy/util-body-length-node": {
+ "node_modules/@smithy/util-body-length-node": {
"version": "2.1.0",
"resolved": "https://registry.npmjs.org/@smithy/util-body-length-node/-/util-body-length-node-2.1.0.tgz",
"integrity": "sha512-/li0/kj/y3fQ3vyzn36NTLGmUwAICb7Jbe/CsWCktW363gh1MOcpEcSO3mJ344Gv2dqz8YJCLQpb6hju/0qOWw==",
"optional": true,
- "requires": {
+ "dependencies": {
"tslib": "^2.5.0"
+ },
+ "engines": {
+ "node": ">=14.0.0"
}
},
- "@smithy/util-buffer-from": {
+ "node_modules/@smithy/util-buffer-from": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/@smithy/util-buffer-from/-/util-buffer-from-2.0.0.tgz",
"integrity": "sha512-/YNnLoHsR+4W4Vf2wL5lGv0ksg8Bmk3GEGxn2vEQt52AQaPSCuaO5PM5VM7lP1K9qHRKHwrPGktqVoAHKWHxzw==",
"optional": true,
- "requires": {
+ "dependencies": {
"@smithy/is-array-buffer": "^2.0.0",
"tslib": "^2.5.0"
+ },
+ "engines": {
+ "node": ">=14.0.0"
}
},
- "@smithy/util-config-provider": {
+ "node_modules/@smithy/util-config-provider": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/@smithy/util-config-provider/-/util-config-provider-2.0.0.tgz",
"integrity": "sha512-xCQ6UapcIWKxXHEU4Mcs2s7LcFQRiU3XEluM2WcCjjBtQkUN71Tb+ydGmJFPxMUrW/GWMgQEEGipLym4XG0jZg==",
"optional": true,
- "requires": {
+ "dependencies": {
"tslib": "^2.5.0"
+ },
+ "engines": {
+ "node": ">=14.0.0"
}
},
- "@smithy/util-defaults-mode-browser": {
- "version": "2.0.11",
- "resolved": "https://registry.npmjs.org/@smithy/util-defaults-mode-browser/-/util-defaults-mode-browser-2.0.11.tgz",
- "integrity": "sha512-0syV1Mz/mCQ7CG/MHKQfH+w86xq59jpD0EOXv5oe0WBXLmq2lWPpVHl2Y6+jQ+/9fYzyZ5NF+NC/WEIuiv690A==",
+ "node_modules/@smithy/util-defaults-mode-browser": {
+ "version": "2.0.15",
+ "resolved": "https://registry.npmjs.org/@smithy/util-defaults-mode-browser/-/util-defaults-mode-browser-2.0.15.tgz",
+ "integrity": "sha512-2raMZOYKSuke7QlDg/HDcxQdrp0zteJ8z+S0B9Rn23J55ZFNK1+IjG4HkN6vo/0u3Xy/JOdJ93ibiBSB8F7kOw==",
"optional": true,
- "requires": {
- "@smithy/property-provider": "^2.0.10",
- "@smithy/smithy-client": "^2.1.7",
- "@smithy/types": "^2.3.3",
+ "dependencies": {
+ "@smithy/property-provider": "^2.0.12",
+ "@smithy/smithy-client": "^2.1.11",
+ "@smithy/types": "^2.3.5",
"bowser": "^2.11.0",
"tslib": "^2.5.0"
+ },
+ "engines": {
+ "node": ">= 10.0.0"
}
},
- "@smithy/util-defaults-mode-node": {
- "version": "2.0.13",
- "resolved": "https://registry.npmjs.org/@smithy/util-defaults-mode-node/-/util-defaults-mode-node-2.0.13.tgz",
- "integrity": "sha512-6BtCHYdw5Z8r6KpW8tRCc3yURgvcQwfIEeHhR70BeSOfx8T/TXPPjb8A+K45+KASspa3fzrsSxeIwB0sAeMoHA==",
+ "node_modules/@smithy/util-defaults-mode-node": {
+ "version": "2.0.20",
+ "resolved": "https://registry.npmjs.org/@smithy/util-defaults-mode-node/-/util-defaults-mode-node-2.0.20.tgz",
+ "integrity": "sha512-kJjcZ/Lzvs3sPDKBwlhZsFFcgPNIpB3CMb6/saCakawRzo0E+JkyS3ZZRjVR3ce29yHtwoP/0YLKC1PeH0Dffg==",
"optional": true,
- "requires": {
- "@smithy/config-resolver": "^2.0.10",
- "@smithy/credential-provider-imds": "^2.0.12",
- "@smithy/node-config-provider": "^2.0.12",
- "@smithy/property-provider": "^2.0.10",
- "@smithy/smithy-client": "^2.1.7",
- "@smithy/types": "^2.3.3",
+ "dependencies": {
+ "@smithy/config-resolver": "^2.0.15",
+ "@smithy/credential-provider-imds": "^2.0.17",
+ "@smithy/node-config-provider": "^2.1.2",
+ "@smithy/property-provider": "^2.0.12",
+ "@smithy/smithy-client": "^2.1.11",
+ "@smithy/types": "^2.3.5",
"tslib": "^2.5.0"
+ },
+ "engines": {
+ "node": ">= 10.0.0"
}
},
- "@smithy/util-hex-encoding": {
+ "node_modules/@smithy/util-hex-encoding": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/@smithy/util-hex-encoding/-/util-hex-encoding-2.0.0.tgz",
"integrity": "sha512-c5xY+NUnFqG6d7HFh1IFfrm3mGl29lC+vF+geHv4ToiuJCBmIfzx6IeHLg+OgRdPFKDXIw6pvi+p3CsscaMcMA==",
"optional": true,
- "requires": {
+ "dependencies": {
"tslib": "^2.5.0"
+ },
+ "engines": {
+ "node": ">=14.0.0"
}
},
- "@smithy/util-middleware": {
- "version": "2.0.2",
- "resolved": "https://registry.npmjs.org/@smithy/util-middleware/-/util-middleware-2.0.2.tgz",
- "integrity": "sha512-UGPZM+Ja/vke5pc/S8G0LNiHpVirtjppsXO+GK9m9wbzRGzPJTfnZA/gERUUN/AfxEy/8SL7U1kd7u4t2X8K1w==",
+ "node_modules/@smithy/util-middleware": {
+ "version": "2.0.4",
+ "resolved": "https://registry.npmjs.org/@smithy/util-middleware/-/util-middleware-2.0.4.tgz",
+ "integrity": "sha512-Pbu6P4MBwRcjrLgdTR1O4Y3c0sTZn2JdOiJNcgL7EcIStcQodj+6ZTXtbyU/WTEU3MV2NMA10LxFc3AWHZ3+4A==",
"optional": true,
- "requires": {
- "@smithy/types": "^2.3.3",
+ "dependencies": {
+ "@smithy/types": "^2.3.5",
"tslib": "^2.5.0"
+ },
+ "engines": {
+ "node": ">=14.0.0"
}
},
- "@smithy/util-retry": {
- "version": "2.0.2",
- "resolved": "https://registry.npmjs.org/@smithy/util-retry/-/util-retry-2.0.2.tgz",
- "integrity": "sha512-ovWiayUB38moZcLhSFFfUgB2IMb7R1JfojU20qSahjxAgfOZvDWme3eOYUMtAVnouZ9kYJiFgHLy27qRH4NeeA==",
+ "node_modules/@smithy/util-retry": {
+ "version": "2.0.4",
+ "resolved": "https://registry.npmjs.org/@smithy/util-retry/-/util-retry-2.0.4.tgz",
+ "integrity": "sha512-b+n1jBBKc77C1E/zfBe1Zo7S9OXGBiGn55N0apfhZHxPUP/fMH5AhFUUcWaJh7NAnah284M5lGkBKuhnr3yK5w==",
"optional": true,
- "requires": {
- "@smithy/service-error-classification": "^2.0.2",
- "@smithy/types": "^2.3.3",
+ "dependencies": {
+ "@smithy/service-error-classification": "^2.0.4",
+ "@smithy/types": "^2.3.5",
"tslib": "^2.5.0"
+ },
+ "engines": {
+ "node": ">= 14.0.0"
}
},
- "@smithy/util-stream": {
- "version": "2.0.12",
- "resolved": "https://registry.npmjs.org/@smithy/util-stream/-/util-stream-2.0.12.tgz",
- "integrity": "sha512-FOCpRLaj6gvSyUC5mJAACT+sPMPmp9sD1o+hVbUH/QxwZfulypA3ZIFdAg/59/IY0d/1Q4CTztsiHEB5LgjN4g==",
+ "node_modules/@smithy/util-stream": {
+ "version": "2.0.16",
+ "resolved": "https://registry.npmjs.org/@smithy/util-stream/-/util-stream-2.0.16.tgz",
+ "integrity": "sha512-b5ZSRh1KzUzC7LoJcpfk7+iXGoRr3WylEfmPd4FnBLm90OwxSB9VgK1fDZwicfYxSEvWHdYXgvvjPtenEYBBhw==",
"optional": true,
- "requires": {
- "@smithy/fetch-http-handler": "^2.1.5",
- "@smithy/node-http-handler": "^2.1.5",
- "@smithy/types": "^2.3.3",
+ "dependencies": {
+ "@smithy/fetch-http-handler": "^2.2.3",
+ "@smithy/node-http-handler": "^2.1.7",
+ "@smithy/types": "^2.3.5",
"@smithy/util-base64": "^2.0.0",
"@smithy/util-buffer-from": "^2.0.0",
"@smithy/util-hex-encoding": "^2.0.0",
"@smithy/util-utf8": "^2.0.0",
"tslib": "^2.5.0"
+ },
+ "engines": {
+ "node": ">=14.0.0"
}
},
- "@smithy/util-uri-escape": {
+ "node_modules/@smithy/util-uri-escape": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/@smithy/util-uri-escape/-/util-uri-escape-2.0.0.tgz",
"integrity": "sha512-ebkxsqinSdEooQduuk9CbKcI+wheijxEb3utGXkCoYQkJnwTnLbH1JXGimJtUkQwNQbsbuYwG2+aFVyZf5TLaw==",
"optional": true,
- "requires": {
+ "dependencies": {
"tslib": "^2.5.0"
+ },
+ "engines": {
+ "node": ">=14.0.0"
}
},
- "@smithy/util-utf8": {
+ "node_modules/@smithy/util-utf8": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/@smithy/util-utf8/-/util-utf8-2.0.0.tgz",
"integrity": "sha512-rctU1VkziY84n5OXe3bPNpKR001ZCME2JCaBBFgtiM2hfKbHFudc/BkMuPab8hRbLd0j3vbnBTTZ1igBf0wgiQ==",
"optional": true,
- "requires": {
+ "dependencies": {
"@smithy/util-buffer-from": "^2.0.0",
"tslib": "^2.5.0"
+ },
+ "engines": {
+ "node": ">=14.0.0"
}
},
- "@types/bson": {
+ "node_modules/@types/bson": {
"version": "4.0.5",
"resolved": "https://registry.npmjs.org/@types/bson/-/bson-4.0.5.tgz",
"integrity": "sha512-vVLwMUqhYJSQ/WKcE60eFqcyuWse5fGH+NMAXHuKrUAPoryq3ATxk5o4bgYNtg5aOM4APVg7Hnb3ASqUYG0PKg==",
- "requires": {
+ "dependencies": {
"@types/node": "*"
}
},
- "@types/chai": {
+ "node_modules/@types/chai": {
"version": "4.3.6",
"resolved": "https://registry.npmjs.org/@types/chai/-/chai-4.3.6.tgz",
"integrity": "sha512-VOVRLM1mBxIRxydiViqPcKn6MIxZytrbMpd6RJLIWKxUNr3zux8no0Oc7kJx0WAPIitgZ0gkrDS+btlqQpubpw==",
"dev": true
},
- "@types/cookiejar": {
+ "node_modules/@types/cookiejar": {
"version": "2.1.2",
"resolved": "https://registry.npmjs.org/@types/cookiejar/-/cookiejar-2.1.2.tgz",
"integrity": "sha512-t73xJJrvdTjXrn4jLS9VSGRbz0nUY3cl2DMGDU48lKl+HR9dbbjW2A9r3g40VA++mQpy6uuHg33gy7du2BKpog==",
"dev": true
},
- "@types/eslint": {
+ "node_modules/@types/eslint": {
"version": "8.44.3",
"resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-8.44.3.tgz",
"integrity": "sha512-iM/WfkwAhwmPff3wZuPLYiHX18HI24jU8k1ZSH7P8FHwxTjZ2P6CoX2wnF43oprR+YXJM6UUxATkNvyv/JHd+g==",
- "dev": true,
- "requires": {
+ "dependencies": {
"@types/estree": "*",
"@types/json-schema": "*"
}
},
- "@types/eslint-scope": {
+ "node_modules/@types/eslint-scope": {
"version": "3.7.5",
"resolved": "https://registry.npmjs.org/@types/eslint-scope/-/eslint-scope-3.7.5.tgz",
"integrity": "sha512-JNvhIEyxVW6EoMIFIvj93ZOywYFatlpu9deeH6eSx6PE3WHYvHaQtmHmQeNw7aA81bYGBPPQqdtBm6b1SsQMmA==",
- "dev": true,
- "requires": {
+ "dependencies": {
"@types/eslint": "*",
"@types/estree": "*"
}
},
- "@types/estree": {
+ "node_modules/@types/estree": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.2.tgz",
- "integrity": "sha512-VeiPZ9MMwXjO32/Xu7+OwflfmeoRwkE/qzndw42gGtgJwZopBnzy2gD//NN1+go1mADzkDcqf/KnFRSjTJ8xJA==",
- "dev": true
+ "integrity": "sha512-VeiPZ9MMwXjO32/Xu7+OwflfmeoRwkE/qzndw42gGtgJwZopBnzy2gD//NN1+go1mADzkDcqf/KnFRSjTJ8xJA=="
},
- "@types/glob": {
+ "node_modules/@types/glob": {
"version": "7.2.0",
"resolved": "https://registry.npmjs.org/@types/glob/-/glob-7.2.0.tgz",
"integrity": "sha512-ZUxbzKl0IfJILTS6t7ip5fQQM/J3TJYubDm3nMbgubNNYS62eXeUpoLUC8/7fJNiFYHTrGPQn7hspDUzIHX3UA==",
- "requires": {
+ "dependencies": {
"@types/minimatch": "*",
"@types/node": "*"
}
},
- "@types/i18n": {
+ "node_modules/@types/i18n": {
"version": "0.8.8",
"resolved": "https://registry.npmjs.org/@types/i18n/-/i18n-0.8.8.tgz",
"integrity": "sha512-RI4LFAraGrimMTxXkediCMXGVLC6ksXIIo3U+d3E4n+Mhw3uIDbmokO7DHlPB/eu6Tn6KBv4IUE1WrrEDRdNUQ=="
},
- "@types/json-schema": {
+ "node_modules/@types/json-schema": {
"version": "7.0.13",
"resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.13.tgz",
"integrity": "sha512-RbSSoHliUbnXj3ny0CNFOoxrIDV6SUGyStHsvDqosw6CkdPV8TtWGlfecuK4ToyMEAql6pzNxgCFKanovUzlgQ=="
},
- "@types/json5": {
+ "node_modules/@types/json5": {
"version": "0.0.29",
"resolved": "https://registry.npmjs.org/@types/json5/-/json5-0.0.29.tgz",
"integrity": "sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==",
"dev": true
},
- "@types/knex": {
+ "node_modules/@types/knex": {
"version": "0.16.1",
"resolved": "https://registry.npmjs.org/@types/knex/-/knex-0.16.1.tgz",
"integrity": "sha512-54gWD1HWwdVx5iLHaJ1qxH3I6KyBsj5fFqzRpXFn7REWiEB2jwspeVCombNsocSrqPd7IRPqKrsIME7/cD+TFQ==",
- "requires": {
+ "deprecated": "This is a stub types definition. knex provides its own type definitions, so you do not need this installed.",
+ "dependencies": {
"knex": "*"
}
},
- "@types/lodash": {
+ "node_modules/@types/lodash": {
"version": "4.14.199",
"resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.14.199.tgz",
"integrity": "sha512-Vrjz5N5Ia4SEzWWgIVwnHNEnb1UE1XMkvY5DGXrAeOGE9imk0hgTHh5GyDjLDJi9OTCn9oo9dXH1uToK1VRfrg==",
"dev": true
},
- "@types/mathjs": {
+ "node_modules/@types/mathjs": {
"version": "6.0.12",
"resolved": "https://registry.npmjs.org/@types/mathjs/-/mathjs-6.0.12.tgz",
"integrity": "sha512-bpKs8CDJ0aOiiJguywryE/U6Wre/uftJ89xhp4aCgF4oRb3Yug2VyZ87958gmSeq4WMsvWPMs2Q5TtFv+dJtaA==",
- "requires": {
+ "dependencies": {
"decimal.js": "^10.0.0"
}
},
- "@types/minimatch": {
+ "node_modules/@types/minimatch": {
"version": "5.1.2",
"resolved": "https://registry.npmjs.org/@types/minimatch/-/minimatch-5.1.2.tgz",
"integrity": "sha512-K0VQKziLUWkVKiRVrx4a40iPaxTUefQmjtkQofBkYRcoaaL/8rhwDWww9qWbrgicNOgnpIsMxyNIUM4+n6dUIA=="
},
- "@types/minimist": {
+ "node_modules/@types/minimist": {
"version": "1.2.3",
"resolved": "https://registry.npmjs.org/@types/minimist/-/minimist-1.2.3.tgz",
"integrity": "sha512-ZYFzrvyWUNhaPomn80dsMNgMeXxNWZBdkuG/hWlUvXvbdUH8ZERNBGXnU87McuGcWDsyzX2aChCv/SVN348k3A=="
},
- "@types/mongodb": {
+ "node_modules/@types/mongodb": {
"version": "3.6.20",
"resolved": "https://registry.npmjs.org/@types/mongodb/-/mongodb-3.6.20.tgz",
"integrity": "sha512-WcdpPJCakFzcWWD9juKoZbRtQxKIMYF/JIAM4JrNHrMcnJL6/a2NWjXxW7fo9hxboxxkg+icff8d7+WIEvKgYQ==",
- "requires": {
+ "dependencies": {
"@types/bson": "*",
"@types/node": "*"
}
},
- "@types/node": {
+ "node_modules/@types/node": {
"version": "20.7.0",
"resolved": "https://registry.npmjs.org/@types/node/-/node-20.7.0.tgz",
"integrity": "sha512-zI22/pJW2wUZOVyguFaUL1HABdmSVxpXrzIqkjsHmyUjNhPoWM1CKfvVuXfetHhIok4RY573cqS0mZ1SJEnoTg=="
},
- "@types/normalize-package-data": {
+ "node_modules/@types/normalize-package-data": {
"version": "2.4.2",
"resolved": "https://registry.npmjs.org/@types/normalize-package-data/-/normalize-package-data-2.4.2.tgz",
"integrity": "sha512-lqa4UEhhv/2sjjIQgjX8B+RBjj47eo0mzGasklVJ78UKGQY1r0VpB9XHDaZZO9qzEFDdy4MrXLuEaSmPrPSe/A=="
},
- "@types/ramda": {
+ "node_modules/@types/ramda": {
"version": "0.27.66",
"resolved": "https://registry.npmjs.org/@types/ramda/-/ramda-0.27.66.tgz",
"integrity": "sha512-i2YW+E2U6NfMt3dp0RxNcejox+bxJUNDjB7BpYuRuoHIzv5juPHkJkNgcUOu+YSQEmaWu8cnAo/8r63C0NnuVA==",
"dev": true,
- "requires": {
+ "dependencies": {
"ts-toolbelt": "^6.15.1"
}
},
- "@types/semver": {
+ "node_modules/@types/semver": {
"version": "7.5.3",
"resolved": "https://registry.npmjs.org/@types/semver/-/semver-7.5.3.tgz",
"integrity": "sha512-OxepLK9EuNEIPxWNME+C6WwbRAOOI2o2BaQEGzz5Lu2e4Z5eDnEo+/aVEDMIXywoJitJ7xWd641wrGLZdtwRyw==",
"dev": true
},
- "@types/superagent": {
+ "node_modules/@types/superagent": {
"version": "4.1.13",
"resolved": "https://registry.npmjs.org/@types/superagent/-/superagent-4.1.13.tgz",
"integrity": "sha512-YIGelp3ZyMiH0/A09PMAORO0EBGlF5xIKfDpK74wdYvWUs2o96b5CItJcWPdH409b7SAXIIG6p8NdU/4U2Maww==",
"dev": true,
- "requires": {
+ "dependencies": {
"@types/cookiejar": "*",
"@types/node": "*"
}
},
- "@types/triple-beam": {
+ "node_modules/@types/triple-beam": {
"version": "1.3.3",
"resolved": "https://registry.npmjs.org/@types/triple-beam/-/triple-beam-1.3.3.tgz",
"integrity": "sha512-6tOUG+nVHn0cJbVp25JFayS5UE6+xlbcNF9Lo9mU7U0zk3zeUShZied4YEQZjy1JBF043FSkdXw8YkUJuVtB5g=="
},
- "@types/webidl-conversions": {
- "version": "7.0.1",
- "resolved": "https://registry.npmjs.org/@types/webidl-conversions/-/webidl-conversions-7.0.1.tgz",
- "integrity": "sha512-8hKOnOan+Uu+NgMaCouhg3cT9x5fFZ92Jwf+uDLXLu/MFRbXxlWwGeQY7KVHkeSft6RvY+tdxklUBuyY9eIEKg=="
+ "node_modules/@types/webidl-conversions": {
+ "version": "7.0.2",
+ "resolved": "https://registry.npmjs.org/@types/webidl-conversions/-/webidl-conversions-7.0.2.tgz",
+ "integrity": "sha512-uNv6b/uGRLlCVmelat2rA8bcVd3k/42mV2EmjhPh6JLkd35T5bgwR/t6xy7a9MWhd9sixIeBUzhBenvk3NO+DQ=="
},
- "@types/whatwg-url": {
+ "node_modules/@types/whatwg-url": {
"version": "8.2.2",
"resolved": "https://registry.npmjs.org/@types/whatwg-url/-/whatwg-url-8.2.2.tgz",
"integrity": "sha512-FtQu10RWgn3D9U4aazdwIE2yzphmTJREDqNdODHrbrZmmMqI0vMheC/6NE/J1Yveaj8H+ela+YwWTjq5PGmuhA==",
- "requires": {
+ "dependencies": {
"@types/node": "*",
"@types/webidl-conversions": "*"
}
},
- "@types/yauzl": {
+ "node_modules/@types/yauzl": {
"version": "2.10.1",
"resolved": "https://registry.npmjs.org/@types/yauzl/-/yauzl-2.10.1.tgz",
"integrity": "sha512-CHzgNU3qYBnp/O4S3yv2tXPlvMTq0YWSTVg2/JYLqWZGHwwgJGAwd00poay/11asPq8wLFwHzubyInqHIFmmiw==",
"optional": true,
- "requires": {
+ "dependencies": {
"@types/node": "*"
}
},
- "@typescript-eslint/eslint-plugin": {
+ "node_modules/@typescript-eslint/eslint-plugin": {
"version": "5.62.0",
"resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.62.0.tgz",
"integrity": "sha512-TiZzBSJja/LbhNPvk6yc0JrX9XqhQ0hdh6M2svYfsHGejaKFIAGd9MQ+ERIMzLGlN/kZoYIgdxFV0PuljTKXag==",
"dev": true,
- "requires": {
+ "dependencies": {
"@eslint-community/regexpp": "^4.4.0",
"@typescript-eslint/scope-manager": "5.62.0",
"@typescript-eslint/type-utils": "5.62.0",
@@ -1606,92 +2039,173 @@
"semver": "^7.3.7",
"tsutils": "^3.21.0"
},
- "dependencies": {
- "debug": {
- "version": "4.3.4",
- "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz",
- "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==",
- "dev": true,
- "requires": {
- "ms": "2.1.2"
- }
- },
- "ignore": {
- "version": "5.2.4",
- "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.4.tgz",
- "integrity": "sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ==",
- "dev": true
+ "engines": {
+ "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/typescript-eslint"
+ },
+ "peerDependencies": {
+ "@typescript-eslint/parser": "^5.0.0",
+ "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0"
+ },
+ "peerDependenciesMeta": {
+ "typescript": {
+ "optional": true
}
}
},
- "@typescript-eslint/parser": {
+ "node_modules/@typescript-eslint/eslint-plugin/node_modules/debug": {
+ "version": "4.3.4",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz",
+ "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==",
+ "dev": true,
+ "dependencies": {
+ "ms": "2.1.2"
+ },
+ "engines": {
+ "node": ">=6.0"
+ },
+ "peerDependenciesMeta": {
+ "supports-color": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/@typescript-eslint/eslint-plugin/node_modules/ignore": {
+ "version": "5.2.4",
+ "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.4.tgz",
+ "integrity": "sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ==",
+ "dev": true,
+ "engines": {
+ "node": ">= 4"
+ }
+ },
+ "node_modules/@typescript-eslint/parser": {
"version": "5.62.0",
"resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.62.0.tgz",
"integrity": "sha512-VlJEV0fOQ7BExOsHYAGrgbEiZoi8D+Bl2+f6V2RrXerRSylnp+ZBHmPvaIa8cz0Ajx7WO7Z5RqfgYg7ED1nRhA==",
"dev": true,
- "requires": {
+ "dependencies": {
"@typescript-eslint/scope-manager": "5.62.0",
"@typescript-eslint/types": "5.62.0",
"@typescript-eslint/typescript-estree": "5.62.0",
"debug": "^4.3.4"
},
- "dependencies": {
- "debug": {
- "version": "4.3.4",
- "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz",
- "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==",
- "dev": true,
- "requires": {
- "ms": "2.1.2"
- }
+ "engines": {
+ "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/typescript-eslint"
+ },
+ "peerDependencies": {
+ "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0"
+ },
+ "peerDependenciesMeta": {
+ "typescript": {
+ "optional": true
}
}
},
- "@typescript-eslint/scope-manager": {
+ "node_modules/@typescript-eslint/parser/node_modules/debug": {
+ "version": "4.3.4",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz",
+ "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==",
+ "dev": true,
+ "dependencies": {
+ "ms": "2.1.2"
+ },
+ "engines": {
+ "node": ">=6.0"
+ },
+ "peerDependenciesMeta": {
+ "supports-color": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/@typescript-eslint/scope-manager": {
"version": "5.62.0",
"resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.62.0.tgz",
"integrity": "sha512-VXuvVvZeQCQb5Zgf4HAxc04q5j+WrNAtNh9OwCsCgpKqESMTu3tF/jhZ3xG6T4NZwWl65Bg8KuS2uEvhSfLl0w==",
"dev": true,
- "requires": {
+ "dependencies": {
"@typescript-eslint/types": "5.62.0",
"@typescript-eslint/visitor-keys": "5.62.0"
+ },
+ "engines": {
+ "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/typescript-eslint"
}
},
- "@typescript-eslint/type-utils": {
+ "node_modules/@typescript-eslint/type-utils": {
"version": "5.62.0",
"resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-5.62.0.tgz",
"integrity": "sha512-xsSQreu+VnfbqQpW5vnCJdq1Z3Q0U31qiWmRhr98ONQmcp/yhiPJFPq8MXiJVLiksmOKSjIldZzkebzHuCGzew==",
"dev": true,
- "requires": {
+ "dependencies": {
"@typescript-eslint/typescript-estree": "5.62.0",
"@typescript-eslint/utils": "5.62.0",
"debug": "^4.3.4",
"tsutils": "^3.21.0"
},
- "dependencies": {
- "debug": {
- "version": "4.3.4",
- "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz",
- "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==",
- "dev": true,
- "requires": {
- "ms": "2.1.2"
- }
+ "engines": {
+ "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/typescript-eslint"
+ },
+ "peerDependencies": {
+ "eslint": "*"
+ },
+ "peerDependenciesMeta": {
+ "typescript": {
+ "optional": true
}
}
},
- "@typescript-eslint/types": {
+ "node_modules/@typescript-eslint/type-utils/node_modules/debug": {
+ "version": "4.3.4",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz",
+ "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==",
+ "dev": true,
+ "dependencies": {
+ "ms": "2.1.2"
+ },
+ "engines": {
+ "node": ">=6.0"
+ },
+ "peerDependenciesMeta": {
+ "supports-color": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/@typescript-eslint/types": {
"version": "5.62.0",
"resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.62.0.tgz",
"integrity": "sha512-87NVngcbVXUahrRTqIK27gD2t5Cu1yuCXxbLcFtCzZGlfyVWWh8mLHkoxzjsB6DDNnvdL+fW8MiwPEJyGJQDgQ==",
- "dev": true
+ "dev": true,
+ "engines": {
+ "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/typescript-eslint"
+ }
},
- "@typescript-eslint/typescript-estree": {
+ "node_modules/@typescript-eslint/typescript-estree": {
"version": "5.62.0",
"resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.62.0.tgz",
"integrity": "sha512-CmcQ6uY7b9y694lKdRB8FEel7JbU/40iSAPomu++SjLMntB+2Leay2LO6i8VnJk58MtE9/nQSFIH6jpyRWyYzA==",
"dev": true,
- "requires": {
+ "dependencies": {
"@typescript-eslint/types": "5.62.0",
"@typescript-eslint/visitor-keys": "5.62.0",
"debug": "^4.3.4",
@@ -1700,142 +2214,205 @@
"semver": "^7.3.7",
"tsutils": "^3.21.0"
},
- "dependencies": {
- "@nodelib/fs.stat": {
- "version": "2.0.5",
- "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz",
- "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==",
- "dev": true
- },
- "array-union": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz",
- "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==",
- "dev": true
- },
- "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"
- }
- },
- "debug": {
- "version": "4.3.4",
- "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz",
- "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==",
- "dev": true,
- "requires": {
- "ms": "2.1.2"
- }
- },
- "dir-glob": {
- "version": "3.0.1",
- "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz",
- "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==",
- "dev": true,
- "requires": {
- "path-type": "^4.0.0"
- }
- },
- "fast-glob": {
- "version": "3.3.1",
- "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.1.tgz",
- "integrity": "sha512-kNFPyjhh5cKjrUltxs+wFx+ZkbRaxxmZ+X0ZU31SOsxCEtP9VPgtq2teZw1DebupL5GmDaNQ6yKMMVcM41iqDg==",
- "dev": true,
- "requires": {
- "@nodelib/fs.stat": "^2.0.2",
- "@nodelib/fs.walk": "^1.2.3",
- "glob-parent": "^5.1.2",
- "merge2": "^1.3.0",
- "micromatch": "^4.0.4"
- }
- },
- "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"
- }
- },
- "glob-parent": {
- "version": "5.1.2",
- "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz",
- "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==",
- "dev": true,
- "requires": {
- "is-glob": "^4.0.1"
- }
- },
- "globby": {
- "version": "11.1.0",
- "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz",
- "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==",
- "dev": true,
- "requires": {
- "array-union": "^2.1.0",
- "dir-glob": "^3.0.1",
- "fast-glob": "^3.2.9",
- "ignore": "^5.2.0",
- "merge2": "^1.4.1",
- "slash": "^3.0.0"
- }
- },
- "ignore": {
- "version": "5.2.4",
- "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.4.tgz",
- "integrity": "sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ==",
- "dev": true
- },
- "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
- },
- "micromatch": {
- "version": "4.0.5",
- "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz",
- "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==",
- "dev": true,
- "requires": {
- "braces": "^3.0.2",
- "picomatch": "^2.3.1"
- }
- },
- "path-type": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz",
- "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==",
- "dev": true
- },
- "slash": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz",
- "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==",
- "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"
- }
+ "engines": {
+ "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/typescript-eslint"
+ },
+ "peerDependenciesMeta": {
+ "typescript": {
+ "optional": true
}
}
},
- "@typescript-eslint/utils": {
+ "node_modules/@typescript-eslint/typescript-estree/node_modules/@nodelib/fs.stat": {
+ "version": "2.0.5",
+ "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz",
+ "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==",
+ "dev": true,
+ "engines": {
+ "node": ">= 8"
+ }
+ },
+ "node_modules/@typescript-eslint/typescript-estree/node_modules/array-union": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz",
+ "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==",
+ "dev": true,
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/@typescript-eslint/typescript-estree/node_modules/braces": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz",
+ "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==",
+ "dev": true,
+ "dependencies": {
+ "fill-range": "^7.0.1"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/@typescript-eslint/typescript-estree/node_modules/debug": {
+ "version": "4.3.4",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz",
+ "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==",
+ "dev": true,
+ "dependencies": {
+ "ms": "2.1.2"
+ },
+ "engines": {
+ "node": ">=6.0"
+ },
+ "peerDependenciesMeta": {
+ "supports-color": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/@typescript-eslint/typescript-estree/node_modules/dir-glob": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz",
+ "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==",
+ "dev": true,
+ "dependencies": {
+ "path-type": "^4.0.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/@typescript-eslint/typescript-estree/node_modules/fast-glob": {
+ "version": "3.3.1",
+ "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.1.tgz",
+ "integrity": "sha512-kNFPyjhh5cKjrUltxs+wFx+ZkbRaxxmZ+X0ZU31SOsxCEtP9VPgtq2teZw1DebupL5GmDaNQ6yKMMVcM41iqDg==",
+ "dev": true,
+ "dependencies": {
+ "@nodelib/fs.stat": "^2.0.2",
+ "@nodelib/fs.walk": "^1.2.3",
+ "glob-parent": "^5.1.2",
+ "merge2": "^1.3.0",
+ "micromatch": "^4.0.4"
+ },
+ "engines": {
+ "node": ">=8.6.0"
+ }
+ },
+ "node_modules/@typescript-eslint/typescript-estree/node_modules/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,
+ "dependencies": {
+ "to-regex-range": "^5.0.1"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/@typescript-eslint/typescript-estree/node_modules/glob-parent": {
+ "version": "5.1.2",
+ "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz",
+ "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==",
+ "dev": true,
+ "dependencies": {
+ "is-glob": "^4.0.1"
+ },
+ "engines": {
+ "node": ">= 6"
+ }
+ },
+ "node_modules/@typescript-eslint/typescript-estree/node_modules/globby": {
+ "version": "11.1.0",
+ "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz",
+ "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==",
+ "dev": true,
+ "dependencies": {
+ "array-union": "^2.1.0",
+ "dir-glob": "^3.0.1",
+ "fast-glob": "^3.2.9",
+ "ignore": "^5.2.0",
+ "merge2": "^1.4.1",
+ "slash": "^3.0.0"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/@typescript-eslint/typescript-estree/node_modules/ignore": {
+ "version": "5.2.4",
+ "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.4.tgz",
+ "integrity": "sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ==",
+ "dev": true,
+ "engines": {
+ "node": ">= 4"
+ }
+ },
+ "node_modules/@typescript-eslint/typescript-estree/node_modules/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,
+ "engines": {
+ "node": ">=0.12.0"
+ }
+ },
+ "node_modules/@typescript-eslint/typescript-estree/node_modules/micromatch": {
+ "version": "4.0.5",
+ "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz",
+ "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==",
+ "dev": true,
+ "dependencies": {
+ "braces": "^3.0.2",
+ "picomatch": "^2.3.1"
+ },
+ "engines": {
+ "node": ">=8.6"
+ }
+ },
+ "node_modules/@typescript-eslint/typescript-estree/node_modules/path-type": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz",
+ "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==",
+ "dev": true,
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/@typescript-eslint/typescript-estree/node_modules/slash": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz",
+ "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==",
+ "dev": true,
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/@typescript-eslint/typescript-estree/node_modules/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,
+ "dependencies": {
+ "is-number": "^7.0.0"
+ },
+ "engines": {
+ "node": ">=8.0"
+ }
+ },
+ "node_modules/@typescript-eslint/utils": {
"version": "5.62.0",
"resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.62.0.tgz",
"integrity": "sha512-n8oxjeb5aIbPFEtmQxQYOLI0i9n5ySBEY/ZEHHZqKQSFnxio1rv6dthascc9dLuwrL0RC5mPCxB7vnAVGAYWAQ==",
"dev": true,
- "requires": {
+ "dependencies": {
"@eslint-community/eslint-utils": "^4.2.0",
"@types/json-schema": "^7.0.9",
"@types/semver": "^7.3.12",
@@ -1844,136 +2421,142 @@
"@typescript-eslint/typescript-estree": "5.62.0",
"eslint-scope": "^5.1.1",
"semver": "^7.3.7"
+ },
+ "engines": {
+ "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/typescript-eslint"
+ },
+ "peerDependencies": {
+ "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0"
}
},
- "@typescript-eslint/visitor-keys": {
+ "node_modules/@typescript-eslint/visitor-keys": {
"version": "5.62.0",
"resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.62.0.tgz",
"integrity": "sha512-07ny+LHRzQXepkGg6w0mFY41fVUNBrL2Roj/++7V1txKugfjm/Ci/qSND03r2RhlJhJYMcTn9AhhSSqQp0Ysyw==",
"dev": true,
- "requires": {
+ "dependencies": {
"@typescript-eslint/types": "5.62.0",
"eslint-visitor-keys": "^3.3.0"
+ },
+ "engines": {
+ "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/typescript-eslint"
}
},
- "@ucast/core": {
+ "node_modules/@ucast/core": {
"version": "1.10.2",
"resolved": "https://registry.npmjs.org/@ucast/core/-/core-1.10.2.tgz",
"integrity": "sha512-ons5CwXZ/51wrUPfoduC+cO7AS1/wRb0ybpQJ9RrssossDxVy4t49QxWoWgfBDvVKsz9VXzBk9z0wqTdZ+Cq8g=="
},
- "@ucast/js": {
+ "node_modules/@ucast/js": {
"version": "3.0.3",
"resolved": "https://registry.npmjs.org/@ucast/js/-/js-3.0.3.tgz",
"integrity": "sha512-jBBqt57T5WagkAjqfCIIE5UYVdaXYgGkOFYv2+kjq2AVpZ2RIbwCo/TujJpDlwTVluUI+WpnRpoGU2tSGlEvFQ==",
- "requires": {
+ "dependencies": {
"@ucast/core": "^1.0.0"
}
},
- "@ucast/mongo": {
+ "node_modules/@ucast/mongo": {
"version": "2.4.3",
"resolved": "https://registry.npmjs.org/@ucast/mongo/-/mongo-2.4.3.tgz",
"integrity": "sha512-XcI8LclrHWP83H+7H2anGCEeDq0n+12FU2mXCTz6/Tva9/9ddK/iacvvhCyW6cijAAOILmt0tWplRyRhVyZLsA==",
- "requires": {
+ "dependencies": {
"@ucast/core": "^1.4.1"
}
},
- "@ucast/mongo2js": {
+ "node_modules/@ucast/mongo2js": {
"version": "1.3.4",
"resolved": "https://registry.npmjs.org/@ucast/mongo2js/-/mongo2js-1.3.4.tgz",
"integrity": "sha512-ahazOr1HtelA5AC1KZ9x0UwPMqqimvfmtSm/PRRSeKKeE5G2SCqTgwiNzO7i9jS8zA3dzXpKVPpXMkcYLnyItA==",
- "requires": {
+ "dependencies": {
"@ucast/core": "^1.6.1",
"@ucast/js": "^3.0.0",
"@ucast/mongo": "^2.4.0"
}
},
- "@webassemblyjs/ast": {
+ "node_modules/@webassemblyjs/ast": {
"version": "1.11.6",
"resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.11.6.tgz",
"integrity": "sha512-IN1xI7PwOvLPgjcf180gC1bqn3q/QaOCwYUahIOhbYUu8KA/3tw2RT/T0Gidi1l7Hhj5D/INhJxiICObqpMu4Q==",
- "dev": true,
- "requires": {
+ "dependencies": {
"@webassemblyjs/helper-numbers": "1.11.6",
"@webassemblyjs/helper-wasm-bytecode": "1.11.6"
}
},
- "@webassemblyjs/floating-point-hex-parser": {
+ "node_modules/@webassemblyjs/floating-point-hex-parser": {
"version": "1.11.6",
"resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.11.6.tgz",
- "integrity": "sha512-ejAj9hfRJ2XMsNHk/v6Fu2dGS+i4UaXBXGemOfQ/JfQ6mdQg/WXtwleQRLLS4OvfDhv8rYnVwH27YJLMyYsxhw==",
- "dev": true
+ "integrity": "sha512-ejAj9hfRJ2XMsNHk/v6Fu2dGS+i4UaXBXGemOfQ/JfQ6mdQg/WXtwleQRLLS4OvfDhv8rYnVwH27YJLMyYsxhw=="
},
- "@webassemblyjs/helper-api-error": {
+ "node_modules/@webassemblyjs/helper-api-error": {
"version": "1.11.6",
"resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.11.6.tgz",
- "integrity": "sha512-o0YkoP4pVu4rN8aTJgAyj9hC2Sv5UlkzCHhxqWj8butaLvnpdc2jOwh4ewE6CX0txSfLn/UYaV/pheS2Txg//Q==",
- "dev": true
+ "integrity": "sha512-o0YkoP4pVu4rN8aTJgAyj9hC2Sv5UlkzCHhxqWj8butaLvnpdc2jOwh4ewE6CX0txSfLn/UYaV/pheS2Txg//Q=="
},
- "@webassemblyjs/helper-buffer": {
+ "node_modules/@webassemblyjs/helper-buffer": {
"version": "1.11.6",
"resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.11.6.tgz",
- "integrity": "sha512-z3nFzdcp1mb8nEOFFk8DrYLpHvhKC3grJD2ardfKOzmbmJvEf/tPIqCY+sNcwZIY8ZD7IkB2l7/pqhUhqm7hLA==",
- "dev": true
+ "integrity": "sha512-z3nFzdcp1mb8nEOFFk8DrYLpHvhKC3grJD2ardfKOzmbmJvEf/tPIqCY+sNcwZIY8ZD7IkB2l7/pqhUhqm7hLA=="
},
- "@webassemblyjs/helper-numbers": {
+ "node_modules/@webassemblyjs/helper-numbers": {
"version": "1.11.6",
"resolved": "https://registry.npmjs.org/@webassemblyjs/helper-numbers/-/helper-numbers-1.11.6.tgz",
"integrity": "sha512-vUIhZ8LZoIWHBohiEObxVm6hwP034jwmc9kuq5GdHZH0wiLVLIPcMCdpJzG4C11cHoQ25TFIQj9kaVADVX7N3g==",
- "dev": true,
- "requires": {
+ "dependencies": {
"@webassemblyjs/floating-point-hex-parser": "1.11.6",
"@webassemblyjs/helper-api-error": "1.11.6",
"@xtuc/long": "4.2.2"
}
},
- "@webassemblyjs/helper-wasm-bytecode": {
+ "node_modules/@webassemblyjs/helper-wasm-bytecode": {
"version": "1.11.6",
"resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.11.6.tgz",
- "integrity": "sha512-sFFHKwcmBprO9e7Icf0+gddyWYDViL8bpPjJJl0WHxCdETktXdmtWLGVzoHbqUcY4Be1LkNfwTmXOJUFZYSJdA==",
- "dev": true
+ "integrity": "sha512-sFFHKwcmBprO9e7Icf0+gddyWYDViL8bpPjJJl0WHxCdETktXdmtWLGVzoHbqUcY4Be1LkNfwTmXOJUFZYSJdA=="
},
- "@webassemblyjs/helper-wasm-section": {
+ "node_modules/@webassemblyjs/helper-wasm-section": {
"version": "1.11.6",
"resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.11.6.tgz",
"integrity": "sha512-LPpZbSOwTpEC2cgn4hTydySy1Ke+XEu+ETXuoyvuyezHO3Kjdu90KK95Sh9xTbmjrCsUwvWwCOQQNta37VrS9g==",
- "dev": true,
- "requires": {
+ "dependencies": {
"@webassemblyjs/ast": "1.11.6",
"@webassemblyjs/helper-buffer": "1.11.6",
"@webassemblyjs/helper-wasm-bytecode": "1.11.6",
"@webassemblyjs/wasm-gen": "1.11.6"
}
},
- "@webassemblyjs/ieee754": {
+ "node_modules/@webassemblyjs/ieee754": {
"version": "1.11.6",
"resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.11.6.tgz",
"integrity": "sha512-LM4p2csPNvbij6U1f19v6WR56QZ8JcHg3QIJTlSwzFcmx6WSORicYj6I63f9yU1kEUtrpG+kjkiIAkevHpDXrg==",
- "dev": true,
- "requires": {
+ "dependencies": {
"@xtuc/ieee754": "^1.2.0"
}
},
- "@webassemblyjs/leb128": {
+ "node_modules/@webassemblyjs/leb128": {
"version": "1.11.6",
"resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.11.6.tgz",
"integrity": "sha512-m7a0FhE67DQXgouf1tbN5XQcdWoNgaAuoULHIfGFIEVKA6tu/edls6XnIlkmS6FrXAquJRPni3ZZKjw6FSPjPQ==",
- "dev": true,
- "requires": {
+ "dependencies": {
"@xtuc/long": "4.2.2"
}
},
- "@webassemblyjs/utf8": {
+ "node_modules/@webassemblyjs/utf8": {
"version": "1.11.6",
"resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.11.6.tgz",
- "integrity": "sha512-vtXf2wTQ3+up9Zsg8sa2yWiQpzSsMyXj0qViVP6xKGCUT8p8YJ6HqI7l5eCnWx1T/FYdsv07HQs2wTFbbof/RA==",
- "dev": true
+ "integrity": "sha512-vtXf2wTQ3+up9Zsg8sa2yWiQpzSsMyXj0qViVP6xKGCUT8p8YJ6HqI7l5eCnWx1T/FYdsv07HQs2wTFbbof/RA=="
},
- "@webassemblyjs/wasm-edit": {
+ "node_modules/@webassemblyjs/wasm-edit": {
"version": "1.11.6",
"resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.11.6.tgz",
"integrity": "sha512-Ybn2I6fnfIGuCR+Faaz7YcvtBKxvoLV3Lebn1tM4o/IAJzmi9AWYIPWpyBfU8cC+JxAO57bk4+zdsTjJR+VTOw==",
- "dev": true,
- "requires": {
+ "dependencies": {
"@webassemblyjs/ast": "1.11.6",
"@webassemblyjs/helper-buffer": "1.11.6",
"@webassemblyjs/helper-wasm-bytecode": "1.11.6",
@@ -1984,12 +2567,11 @@
"@webassemblyjs/wast-printer": "1.11.6"
}
},
- "@webassemblyjs/wasm-gen": {
+ "node_modules/@webassemblyjs/wasm-gen": {
"version": "1.11.6",
"resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.11.6.tgz",
"integrity": "sha512-3XOqkZP/y6B4F0PBAXvI1/bky7GryoogUtfwExeP/v7Nzwo1QLcq5oQmpKlftZLbT+ERUOAZVQjuNVak6UXjPA==",
- "dev": true,
- "requires": {
+ "dependencies": {
"@webassemblyjs/ast": "1.11.6",
"@webassemblyjs/helper-wasm-bytecode": "1.11.6",
"@webassemblyjs/ieee754": "1.11.6",
@@ -1997,24 +2579,22 @@
"@webassemblyjs/utf8": "1.11.6"
}
},
- "@webassemblyjs/wasm-opt": {
+ "node_modules/@webassemblyjs/wasm-opt": {
"version": "1.11.6",
"resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.11.6.tgz",
"integrity": "sha512-cOrKuLRE7PCe6AsOVl7WasYf3wbSo4CeOk6PkrjS7g57MFfVUF9u6ysQBBODX0LdgSvQqRiGz3CXvIDKcPNy4g==",
- "dev": true,
- "requires": {
+ "dependencies": {
"@webassemblyjs/ast": "1.11.6",
"@webassemblyjs/helper-buffer": "1.11.6",
"@webassemblyjs/wasm-gen": "1.11.6",
"@webassemblyjs/wasm-parser": "1.11.6"
}
},
- "@webassemblyjs/wasm-parser": {
+ "node_modules/@webassemblyjs/wasm-parser": {
"version": "1.11.6",
"resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.11.6.tgz",
"integrity": "sha512-6ZwPeGzMJM3Dqp3hCsLgESxBGtT/OeCvCZ4TA1JUPYgmhAx38tTPR9JaKy0S5H3evQpO/h2uWs2j6Yc/fjkpTQ==",
- "dev": true,
- "requires": {
+ "dependencies": {
"@webassemblyjs/ast": "1.11.6",
"@webassemblyjs/helper-api-error": "1.11.6",
"@webassemblyjs/helper-wasm-bytecode": "1.11.6",
@@ -2023,103 +2603,154 @@
"@webassemblyjs/utf8": "1.11.6"
}
},
- "@webassemblyjs/wast-printer": {
+ "node_modules/@webassemblyjs/wast-printer": {
"version": "1.11.6",
"resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.11.6.tgz",
"integrity": "sha512-JM7AhRcE+yW2GWYaKeHL5vt4xqee5N2WcezptmgyhNS+ScggqcT1OtXykhAb13Sn5Yas0j2uv9tHgrjwvzAP4A==",
- "dev": true,
- "requires": {
+ "dependencies": {
"@webassemblyjs/ast": "1.11.6",
"@xtuc/long": "4.2.2"
}
},
- "@webpack-cli/configtest": {
+ "node_modules/@webpack-cli/configtest": {
"version": "1.2.0",
"resolved": "https://registry.npmjs.org/@webpack-cli/configtest/-/configtest-1.2.0.tgz",
"integrity": "sha512-4FB8Tj6xyVkyqjj1OaTqCjXYULB9FMkqQ8yGrZjRDrYh0nOE+7Lhs45WioWQQMV+ceFlE368Ukhe6xdvJM9Egg==",
- "dev": true
+ "dev": true,
+ "peerDependencies": {
+ "webpack": "4.x.x || 5.x.x",
+ "webpack-cli": "4.x.x"
+ }
},
- "@webpack-cli/info": {
+ "node_modules/@webpack-cli/info": {
"version": "1.5.0",
"resolved": "https://registry.npmjs.org/@webpack-cli/info/-/info-1.5.0.tgz",
"integrity": "sha512-e8tSXZpw2hPl2uMJY6fsMswaok5FdlGNRTktvFk2sD8RjH0hE2+XistawJx1vmKteh4NmGmNUrp+Tb2w+udPcQ==",
"dev": true,
- "requires": {
+ "dependencies": {
"envinfo": "^7.7.3"
+ },
+ "peerDependencies": {
+ "webpack-cli": "4.x.x"
}
},
- "@webpack-cli/serve": {
+ "node_modules/@webpack-cli/serve": {
"version": "1.7.0",
"resolved": "https://registry.npmjs.org/@webpack-cli/serve/-/serve-1.7.0.tgz",
"integrity": "sha512-oxnCNGj88fL+xzV+dacXs44HcDwf1ovs3AuEzvP7mqXw7fQntqIhQ1BRmynh4qEKQSSSRSWVyXRjmTbZIX9V2Q==",
- "dev": true
+ "dev": true,
+ "peerDependencies": {
+ "webpack-cli": "4.x.x"
+ },
+ "peerDependenciesMeta": {
+ "webpack-dev-server": {
+ "optional": true
+ }
+ }
},
- "@xtuc/ieee754": {
+ "node_modules/@xtuc/ieee754": {
"version": "1.2.0",
"resolved": "https://registry.npmjs.org/@xtuc/ieee754/-/ieee754-1.2.0.tgz",
- "integrity": "sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==",
- "dev": true
+ "integrity": "sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA=="
},
- "@xtuc/long": {
+ "node_modules/@xtuc/long": {
"version": "4.2.2",
"resolved": "https://registry.npmjs.org/@xtuc/long/-/long-4.2.2.tgz",
- "integrity": "sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==",
- "dev": true
+ "integrity": "sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ=="
+ },
+ "abab": {
+ "version": "2.0.6",
+ "resolved": "https://registry.npmjs.org/abab/-/abab-2.0.6.tgz",
+ "integrity": "sha512-j2afSsaIENvHZN2B8GOpF566vZ5WVk5opAiMTvWgaQT8DkbOqsTfvNAvHoRGU2zzP8cPoqys+xHTRDWW8L+/BA=="
},
"abbrev": {
"version": "1.1.1",
"resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz",
"integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q=="
},
- "accepts": {
+ "node_modules/accepts": {
"version": "1.3.8",
"resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz",
"integrity": "sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==",
- "requires": {
+ "dependencies": {
"mime-types": "~2.1.34",
"negotiator": "0.6.3"
+ },
+ "engines": {
+ "node": ">= 0.6"
}
},
- "accounting": {
+ "node_modules/accounting": {
"version": "0.4.1",
"resolved": "https://registry.npmjs.org/accounting/-/accounting-0.4.1.tgz",
"integrity": "sha512-RU6KY9Y5wllyaCNBo1W11ZOTnTHMMgOZkIwdOOs6W5ibMTp72i4xIbEA48djxVGqMNTUNbvrP/1nWg5Af5m2gQ=="
},
- "acorn": {
+ "node_modules/acorn": {
"version": "7.4.1",
"resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz",
- "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A=="
+ "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==",
+ "bin": {
+ "acorn": "bin/acorn"
+ },
+ "engines": {
+ "node": ">=0.4.0"
+ }
},
- "acorn-import-assertions": {
+ "node_modules/acorn-import-assertions": {
"version": "1.9.0",
"resolved": "https://registry.npmjs.org/acorn-import-assertions/-/acorn-import-assertions-1.9.0.tgz",
"integrity": "sha512-cmMwop9x+8KFhxvKrKfPYmN6/pKTYYHBqLa0DfvVZcKMJWNyWLnaqND7dx/qn66R7ewM1UX5XMaDVP5wlVTaVA==",
- "dev": true
+ "peerDependencies": {
+ "acorn": "^8"
+ }
},
- "acorn-jsx": {
+ "node_modules/acorn-jsx": {
"version": "5.3.2",
"resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz",
"integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==",
- "dev": true
+ "dev": true,
+ "peerDependencies": {
+ "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0"
+ }
},
- "agenda": {
+ "node_modules/agenda": {
"version": "4.4.0",
"resolved": "https://registry.npmjs.org/agenda/-/agenda-4.4.0.tgz",
"integrity": "sha512-7fIO4indmmrtkDmj2woOBJnhHIM7jPtkdGR4VOApB46eeBrPGUnO28RFrmjHebc3PMDnKJI0PWFyu9L9VotgJg==",
- "requires": {
+ "dependencies": {
"cron-parser": "^3.0.0",
"date.js": "~0.3.3",
"debug": "~4.3.0",
"human-interval": "~2.0.0",
"moment-timezone": "~0.5.37",
"mongodb": "^4.1.0"
+ },
+ "engines": {
+ "node": ">=12.9.0"
}
},
- "agendash": {
+ "node_modules/agenda/node_modules/mongodb": {
+ "version": "4.17.1",
+ "resolved": "https://registry.npmjs.org/mongodb/-/mongodb-4.17.1.tgz",
+ "integrity": "sha512-MBuyYiPUPRTqfH2dV0ya4dcr2E5N52ocBuZ8Sgg/M030nGF78v855B3Z27mZJnp8PxjnUquEnAtjOsphgMZOlQ==",
+ "dependencies": {
+ "bson": "^4.7.2",
+ "mongodb-connection-string-url": "^2.6.0",
+ "socks": "^2.7.1"
+ },
+ "engines": {
+ "node": ">=12.9.0"
+ },
+ "optionalDependencies": {
+ "@aws-sdk/credential-providers": "^3.186.0",
+ "@mongodb-js/saslprep": "^1.1.0"
+ }
+ },
+ "node_modules/agendash": {
"version": "3.1.0",
"resolved": "https://registry.npmjs.org/agendash/-/agendash-3.1.0.tgz",
"integrity": "sha512-p5LxPMDtUotWevZd19eeEyyx9OfbUHux4qplDTPJ09V72ay4lKN2TD44mQDZoCa5DBw7JzWOQMyzppaSdmXO1g==",
- "requires": {
+ "dependencies": {
"agenda": "^4.2.1",
"body-parser": "^1.15.0",
"commander": "^2.9.0",
@@ -2127,377 +2758,506 @@
"mongodb": "*",
"semver": "^7.3.4"
},
- "dependencies": {
- "commander": {
- "version": "2.20.3",
- "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz",
- "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ=="
- }
+ "bin": {
+ "agendash": "bin/agendash-standalone.js"
+ },
+ "engines": {
+ "node": ">=10.0.0"
}
},
- "agent-base": {
+ "node_modules/agendash/node_modules/commander": {
+ "version": "2.20.3",
+ "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz",
+ "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ=="
+ },
+ "node_modules/agent-base": {
"version": "6.0.2",
"resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz",
"integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==",
- "requires": {
+ "dependencies": {
"debug": "4"
+ },
+ "engines": {
+ "node": ">= 6.0.0"
}
},
- "aggregate-error": {
+ "node_modules/aggregate-error": {
"version": "3.1.0",
"resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz",
"integrity": "sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==",
- "requires": {
+ "dependencies": {
"clean-stack": "^2.0.0",
"indent-string": "^4.0.0"
+ },
+ "engines": {
+ "node": ">=8"
}
},
- "ajv": {
+ "node_modules/ajv": {
"version": "8.12.0",
"resolved": "https://registry.npmjs.org/ajv/-/ajv-8.12.0.tgz",
"integrity": "sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==",
- "requires": {
+ "dependencies": {
"fast-deep-equal": "^3.1.1",
"json-schema-traverse": "^1.0.0",
"require-from-string": "^2.0.2",
"uri-js": "^4.2.2"
+ },
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/epoberezkin"
}
},
- "ajv-formats": {
+ "node_modules/ajv-formats": {
"version": "2.1.1",
"resolved": "https://registry.npmjs.org/ajv-formats/-/ajv-formats-2.1.1.tgz",
"integrity": "sha512-Wx0Kx52hxE7C18hkMEggYlEifqWZtYaRgouJor+WMdPnQyEK13vgEWyVNup7SoeeoLMsr4kf5h6dOW11I15MUA==",
- "requires": {
+ "dependencies": {
"ajv": "^8.0.0"
+ },
+ "peerDependencies": {
+ "ajv": "^8.0.0"
+ },
+ "peerDependenciesMeta": {
+ "ajv": {
+ "optional": true
+ }
}
},
- "ajv-keywords": {
+ "node_modules/ajv-keywords": {
"version": "5.1.0",
"resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-5.1.0.tgz",
"integrity": "sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw==",
- "requires": {
+ "dependencies": {
"fast-deep-equal": "^3.1.3"
+ },
+ "peerDependencies": {
+ "ajv": "^8.8.2"
}
},
- "ansi-align": {
+ "node_modules/ansi-align": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/ansi-align/-/ansi-align-2.0.0.tgz",
"integrity": "sha512-TdlOggdA/zURfMYa7ABC66j+oqfMew58KpJMbUlH3bcZP1b+cBHIHDDn5uH9INsxrHBPjsqM0tDB4jPTF/vgJA==",
- "requires": {
- "string-width": "^2.0.0"
- },
"dependencies": {
- "ansi-regex": {
- "version": "3.0.1",
- "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.1.tgz",
- "integrity": "sha512-+O9Jct8wf++lXxxFc4hc8LsjaSq0HFzzL7cVsw8pRDIPdjKD2mT4ytDZlLuSBZ4cLKZFXIrMGO7DbQCtMJJMKw=="
- },
- "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": "sha512-VHskAKYM8RfSFXwee5t5cbN5PZeq1Wrh6qd5bkyiXIf6UQcN6w/A0eXM9r6t8d+GYOh+o6ZhiEnb88LN/Y8m2w=="
- },
- "string-width": {
- "version": "2.1.1",
- "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz",
- "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==",
- "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": "sha512-4XaJ2zQdCzROZDivEVIDPkcQn8LMFSa8kj8Gxb/Lnwzv9A8VctNZ+lfivC/sV3ivW8ElJTERXZoPBRrZKkNKow==",
- "requires": {
- "ansi-regex": "^3.0.0"
- }
- }
+ "string-width": "^2.0.0"
}
},
- "ansi-colors": {
+ "node_modules/ansi-align/node_modules/ansi-regex": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.1.tgz",
+ "integrity": "sha512-+O9Jct8wf++lXxxFc4hc8LsjaSq0HFzzL7cVsw8pRDIPdjKD2mT4ytDZlLuSBZ4cLKZFXIrMGO7DbQCtMJJMKw==",
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/ansi-align/node_modules/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": "sha512-VHskAKYM8RfSFXwee5t5cbN5PZeq1Wrh6qd5bkyiXIf6UQcN6w/A0eXM9r6t8d+GYOh+o6ZhiEnb88LN/Y8m2w==",
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/ansi-align/node_modules/string-width": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz",
+ "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==",
+ "dependencies": {
+ "is-fullwidth-code-point": "^2.0.0",
+ "strip-ansi": "^4.0.0"
+ },
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/ansi-align/node_modules/strip-ansi": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz",
+ "integrity": "sha512-4XaJ2zQdCzROZDivEVIDPkcQn8LMFSa8kj8Gxb/Lnwzv9A8VctNZ+lfivC/sV3ivW8ElJTERXZoPBRrZKkNKow==",
+ "dependencies": {
+ "ansi-regex": "^3.0.0"
+ },
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/ansi-colors": {
"version": "1.1.0",
"resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-1.1.0.tgz",
"integrity": "sha512-SFKX67auSNoVR38N3L+nvsPjOE0bybKTYbkf5tRvushrAPQ9V75huw0ZxBkKVeRU9kqH3d6HA4xTckbwZ4ixmA==",
- "requires": {
+ "dependencies": {
"ansi-wrap": "^0.1.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
}
},
- "ansi-gray": {
+ "node_modules/ansi-gray": {
"version": "0.1.1",
"resolved": "https://registry.npmjs.org/ansi-gray/-/ansi-gray-0.1.1.tgz",
"integrity": "sha512-HrgGIZUl8h2EHuZaU9hTR/cU5nhKxpVE1V6kdGsQ8e4zirElJ5fvtfc8N7Q1oq1aatO275i8pUFUCpNWCAnVWw==",
- "requires": {
+ "dependencies": {
"ansi-wrap": "0.1.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
}
},
- "ansi-regex": {
+ "node_modules/ansi-regex": {
"version": "2.1.1",
"resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz",
- "integrity": "sha512-TIGnTpdo+E3+pCyAluZvtED5p5wCqLdezCyhPZzKPcxvFplEt4i+W7OONCKgeZFT3+y5NZZfOOS/Bdcanm1MYA=="
+ "integrity": "sha512-TIGnTpdo+E3+pCyAluZvtED5p5wCqLdezCyhPZzKPcxvFplEt4i+W7OONCKgeZFT3+y5NZZfOOS/Bdcanm1MYA==",
+ "engines": {
+ "node": ">=0.10.0"
+ }
},
- "ansi-styles": {
+ "node_modules/ansi-styles": {
"version": "3.2.1",
"resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz",
"integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==",
- "requires": {
+ "dependencies": {
"color-convert": "^1.9.0"
+ },
+ "engines": {
+ "node": ">=4"
}
},
- "ansi-wrap": {
+ "node_modules/ansi-wrap": {
"version": "0.1.0",
"resolved": "https://registry.npmjs.org/ansi-wrap/-/ansi-wrap-0.1.0.tgz",
- "integrity": "sha512-ZyznvL8k/FZeQHr2T6LzcJ/+vBApDnMNZvfVFy3At0knswWd6rJ3/0Hhmpu8oqa6C92npmozs890sX9Dl6q+Qw=="
+ "integrity": "sha512-ZyznvL8k/FZeQHr2T6LzcJ/+vBApDnMNZvfVFy3At0knswWd6rJ3/0Hhmpu8oqa6C92npmozs890sX9Dl6q+Qw==",
+ "engines": {
+ "node": ">=0.10.0"
+ }
},
- "anymatch": {
+ "node_modules/anymatch": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/anymatch/-/anymatch-2.0.0.tgz",
"integrity": "sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw==",
- "requires": {
+ "dependencies": {
"micromatch": "^3.1.4",
"normalize-path": "^2.1.1"
- },
- "dependencies": {
- "normalize-path": {
- "version": "2.1.1",
- "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz",
- "integrity": "sha512-3pKJwH184Xo/lnH6oyP1q2pMd7HcypqqmRs91/6/i2CGtWwIKGCkOOMTm/zXbgTEWHw1uNpNi/igc3ePOYHb6w==",
- "requires": {
- "remove-trailing-separator": "^1.0.1"
- }
- }
}
},
- "app-root-path": {
+ "node_modules/anymatch/node_modules/normalize-path": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz",
+ "integrity": "sha512-3pKJwH184Xo/lnH6oyP1q2pMd7HcypqqmRs91/6/i2CGtWwIKGCkOOMTm/zXbgTEWHw1uNpNi/igc3ePOYHb6w==",
+ "dependencies": {
+ "remove-trailing-separator": "^1.0.1"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/app-root-path": {
"version": "3.1.0",
"resolved": "https://registry.npmjs.org/app-root-path/-/app-root-path-3.1.0.tgz",
- "integrity": "sha512-biN3PwB2gUtjaYy/isrU3aNWI5w+fAfvHkSvCKeQGxhmYpwKFUxudR3Yya+KqVRHBmEDYh+/lTozYCFbmzX4nA=="
+ "integrity": "sha512-biN3PwB2gUtjaYy/isrU3aNWI5w+fAfvHkSvCKeQGxhmYpwKFUxudR3Yya+KqVRHBmEDYh+/lTozYCFbmzX4nA==",
+ "engines": {
+ "node": ">= 6.0.0"
+ }
},
- "append-buffer": {
+ "node_modules/append-buffer": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/append-buffer/-/append-buffer-1.0.2.tgz",
"integrity": "sha512-WLbYiXzD3y/ATLZFufV/rZvWdZOs+Z/+5v1rBZ463Jn398pa6kcde27cvozYnBoxXblGZTFfoPpsaEw0orU5BA==",
- "requires": {
+ "dependencies": {
"buffer-equal": "^1.0.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
}
},
- "append-transform": {
+ "node_modules/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": {
+ "dependencies": {
"default-require-extensions": "^2.0.0"
+ },
+ "engines": {
+ "node": ">=4"
}
},
- "archy": {
+ "node_modules/archy": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/archy/-/archy-1.0.0.tgz",
"integrity": "sha512-Xg+9RwCg/0p32teKdGMPTPnVXKD0w3DfHnFTficozsAgsvq2XenPJq/MYpzzQ/v8zrOyJn6Ds39VA4JIDwFfqw=="
},
- "arg": {
+ "node_modules/arg": {
"version": "4.1.3",
"resolved": "https://registry.npmjs.org/arg/-/arg-4.1.3.tgz",
"integrity": "sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==",
"dev": true
},
- "argparse": {
+ "node_modules/argparse": {
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz",
"integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==",
"dev": true
},
- "arr-diff": {
+ "node_modules/arr-diff": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz",
- "integrity": "sha512-YVIQ82gZPGBebQV/a8dar4AitzCQs0jjXwMPZllpXMaGjXPYVUawSxQrRsjhjupyVxEvbHgUmIhKVlND+j02kA=="
+ "integrity": "sha512-YVIQ82gZPGBebQV/a8dar4AitzCQs0jjXwMPZllpXMaGjXPYVUawSxQrRsjhjupyVxEvbHgUmIhKVlND+j02kA==",
+ "engines": {
+ "node": ">=0.10.0"
+ }
},
- "arr-filter": {
+ "node_modules/arr-filter": {
"version": "1.1.2",
"resolved": "https://registry.npmjs.org/arr-filter/-/arr-filter-1.1.2.tgz",
"integrity": "sha512-A2BETWCqhsecSvCkWAeVBFLH6sXEUGASuzkpjL3GR1SlL/PWL6M3J8EAAld2Uubmh39tvkJTqC9LeLHCUKmFXA==",
- "requires": {
+ "dependencies": {
"make-iterator": "^1.0.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
}
},
- "arr-flatten": {
+ "node_modules/arr-flatten": {
"version": "1.1.0",
"resolved": "https://registry.npmjs.org/arr-flatten/-/arr-flatten-1.1.0.tgz",
- "integrity": "sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg=="
+ "integrity": "sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg==",
+ "engines": {
+ "node": ">=0.10.0"
+ }
},
- "arr-map": {
+ "node_modules/arr-map": {
"version": "2.0.2",
"resolved": "https://registry.npmjs.org/arr-map/-/arr-map-2.0.2.tgz",
"integrity": "sha512-tVqVTHt+Q5Xb09qRkbu+DidW1yYzz5izWS2Xm2yFm7qJnmUfz4HPzNxbHkdRJbz2lrqI7S+z17xNYdFcBBO8Hw==",
- "requires": {
+ "dependencies": {
"make-iterator": "^1.0.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
}
},
- "arr-union": {
+ "node_modules/arr-union": {
"version": "3.1.0",
"resolved": "https://registry.npmjs.org/arr-union/-/arr-union-3.1.0.tgz",
- "integrity": "sha512-sKpyeERZ02v1FeCZT8lrfJq5u6goHCtpTAzPwJYe7c8SPFOboNjNg1vz2L4VTn9T4PQxEx13TbXLmYUcS6Ug7Q=="
+ "integrity": "sha512-sKpyeERZ02v1FeCZT8lrfJq5u6goHCtpTAzPwJYe7c8SPFOboNjNg1vz2L4VTn9T4PQxEx13TbXLmYUcS6Ug7Q==",
+ "engines": {
+ "node": ">=0.10.0"
+ }
},
- "array-buffer-byte-length": {
+ "node_modules/array-buffer-byte-length": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/array-buffer-byte-length/-/array-buffer-byte-length-1.0.0.tgz",
"integrity": "sha512-LPuwb2P+NrQw3XhxGc36+XSvuBPopovXYTR9Ew++Du9Yb/bx5AzBfrIsBoj0EZUifjQU+sHL21sseZ3jerWO/A==",
"dev": true,
- "requires": {
+ "dependencies": {
"call-bind": "^1.0.2",
"is-array-buffer": "^3.0.1"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
}
},
- "array-each": {
+ "node_modules/array-each": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/array-each/-/array-each-1.0.1.tgz",
- "integrity": "sha512-zHjL5SZa68hkKHBFBK6DJCTtr9sfTCPCaph/L7tMSLcTFgy+zX7E+6q5UArbtOtMBCtxdICpfTCspRse+ywyXA=="
+ "integrity": "sha512-zHjL5SZa68hkKHBFBK6DJCTtr9sfTCPCaph/L7tMSLcTFgy+zX7E+6q5UArbtOtMBCtxdICpfTCspRse+ywyXA==",
+ "engines": {
+ "node": ">=0.10.0"
+ }
},
- "array-find": {
+ "node_modules/array-find": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/array-find/-/array-find-1.0.0.tgz",
"integrity": "sha512-kO/vVCacW9mnpn3WPWbTVlEnOabK2L7LWi2HViURtCM46y1zb6I8UMjx4LgbiqadTgHnLInUronwn3ampNTJtQ==",
"dev": true
},
- "array-flatten": {
+ "node_modules/array-flatten": {
"version": "1.1.1",
"resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz",
"integrity": "sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg=="
},
- "array-from": {
+ "node_modules/array-from": {
"version": "2.1.1",
"resolved": "https://registry.npmjs.org/array-from/-/array-from-2.1.1.tgz",
"integrity": "sha512-GQTc6Uupx1FCavi5mPzBvVT7nEOeWMmUA9P95wpfpW1XwMSKs+KaymD5C2Up7KAUKg/mYwbsUYzdZWcoajlNZg==",
"dev": true
},
- "array-includes": {
+ "node_modules/array-includes": {
"version": "3.1.7",
"resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.7.tgz",
"integrity": "sha512-dlcsNBIiWhPkHdOEEKnehA+RNUWDc4UqFtnIXU4uuYDPtA4LDkr7qip2p0VvFAEXNDr0yWZ9PJyIRiGjRLQzwQ==",
"dev": true,
- "requires": {
+ "dependencies": {
"call-bind": "^1.0.2",
"define-properties": "^1.2.0",
"es-abstract": "^1.22.1",
"get-intrinsic": "^1.2.1",
"is-string": "^1.0.7"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
}
},
- "array-initial": {
+ "node_modules/array-initial": {
"version": "1.1.0",
"resolved": "https://registry.npmjs.org/array-initial/-/array-initial-1.1.0.tgz",
"integrity": "sha512-BC4Yl89vneCYfpLrs5JU2aAu9/a+xWbeKhvISg9PT7eWFB9UlRvI+rKEtk6mgxWr3dSkk9gQ8hCrdqt06NXPdw==",
- "requires": {
+ "dependencies": {
"array-slice": "^1.0.0",
"is-number": "^4.0.0"
},
- "dependencies": {
- "is-number": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/is-number/-/is-number-4.0.0.tgz",
- "integrity": "sha512-rSklcAIlf1OmFdyAqbnWTLVelsQ58uvZ66S/ZyawjWqIviTWCjg2PzVGw8WUA+nNuPTqb4wgA+NszrJ+08LlgQ=="
- }
+ "engines": {
+ "node": ">=0.10.0"
}
},
- "array-last": {
+ "node_modules/array-initial/node_modules/is-number": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/is-number/-/is-number-4.0.0.tgz",
+ "integrity": "sha512-rSklcAIlf1OmFdyAqbnWTLVelsQ58uvZ66S/ZyawjWqIviTWCjg2PzVGw8WUA+nNuPTqb4wgA+NszrJ+08LlgQ==",
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/array-last": {
"version": "1.3.0",
"resolved": "https://registry.npmjs.org/array-last/-/array-last-1.3.0.tgz",
"integrity": "sha512-eOCut5rXlI6aCOS7Z7kCplKRKyiFQ6dHFBem4PwlwKeNFk2/XxTrhRh5T9PyaEWGy/NHTZWbY+nsZlNFJu9rYg==",
- "requires": {
+ "dependencies": {
"is-number": "^4.0.0"
},
- "dependencies": {
- "is-number": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/is-number/-/is-number-4.0.0.tgz",
- "integrity": "sha512-rSklcAIlf1OmFdyAqbnWTLVelsQ58uvZ66S/ZyawjWqIviTWCjg2PzVGw8WUA+nNuPTqb4wgA+NszrJ+08LlgQ=="
- }
+ "engines": {
+ "node": ">=0.10.0"
}
},
- "array-slice": {
+ "node_modules/array-last/node_modules/is-number": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/is-number/-/is-number-4.0.0.tgz",
+ "integrity": "sha512-rSklcAIlf1OmFdyAqbnWTLVelsQ58uvZ66S/ZyawjWqIviTWCjg2PzVGw8WUA+nNuPTqb4wgA+NszrJ+08LlgQ==",
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/array-slice": {
"version": "1.1.0",
"resolved": "https://registry.npmjs.org/array-slice/-/array-slice-1.1.0.tgz",
- "integrity": "sha512-B1qMD3RBP7O8o0H2KbrXDyB0IccejMF15+87Lvlor12ONPRHP6gTjXMNkt/d3ZuOGbAe66hFmaCfECI24Ufp6w=="
+ "integrity": "sha512-B1qMD3RBP7O8o0H2KbrXDyB0IccejMF15+87Lvlor12ONPRHP6gTjXMNkt/d3ZuOGbAe66hFmaCfECI24Ufp6w==",
+ "engines": {
+ "node": ">=0.10.0"
+ }
},
- "array-sort": {
+ "node_modules/array-sort": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/array-sort/-/array-sort-1.0.0.tgz",
"integrity": "sha512-ihLeJkonmdiAsD7vpgN3CRcx2J2S0TiYW+IS/5zHBI7mKUq3ySvBdzzBfD236ubDBQFiiyG3SWCPc+msQ9KoYg==",
- "requires": {
+ "dependencies": {
"default-compare": "^1.0.0",
"get-value": "^2.0.6",
"kind-of": "^5.0.2"
},
- "dependencies": {
- "kind-of": {
- "version": "5.1.0",
- "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz",
- "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw=="
- }
+ "engines": {
+ "node": ">=0.10.0"
}
},
- "array-union": {
+ "node_modules/array-sort/node_modules/kind-of": {
+ "version": "5.1.0",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz",
+ "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==",
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/array-union": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/array-union/-/array-union-1.0.2.tgz",
"integrity": "sha512-Dxr6QJj/RdU/hCaBjOfxW+q6lyuVE6JFWIrAUpuOOhoJJoQ99cUn3igRaHVB5P9WrgFVN0FfArM3x0cueOU8ng==",
- "requires": {
+ "dependencies": {
"array-uniq": "^1.0.1"
+ },
+ "engines": {
+ "node": ">=0.10.0"
}
},
- "array-uniq": {
+ "node_modules/array-uniq": {
"version": "1.0.3",
"resolved": "https://registry.npmjs.org/array-uniq/-/array-uniq-1.0.3.tgz",
- "integrity": "sha512-MNha4BWQ6JbwhFhj03YK552f7cb3AzoE8SzeljgChvL1dl3IcvggXVz1DilzySZkCja+CXuZbdW7yATchWn8/Q=="
+ "integrity": "sha512-MNha4BWQ6JbwhFhj03YK552f7cb3AzoE8SzeljgChvL1dl3IcvggXVz1DilzySZkCja+CXuZbdW7yATchWn8/Q==",
+ "engines": {
+ "node": ">=0.10.0"
+ }
},
- "array-unique": {
+ "node_modules/array-unique": {
"version": "0.3.2",
"resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz",
- "integrity": "sha512-SleRWjh9JUud2wH1hPs9rZBZ33H6T9HOiL0uwGnGx9FpE6wKGyfWugmbkEOIs6qWrZhg0LWeLziLrEwQJhs5mQ=="
+ "integrity": "sha512-SleRWjh9JUud2wH1hPs9rZBZ33H6T9HOiL0uwGnGx9FpE6wKGyfWugmbkEOIs6qWrZhg0LWeLziLrEwQJhs5mQ==",
+ "engines": {
+ "node": ">=0.10.0"
+ }
},
- "array.prototype.findlastindex": {
+ "node_modules/array.prototype.findlastindex": {
"version": "1.2.3",
"resolved": "https://registry.npmjs.org/array.prototype.findlastindex/-/array.prototype.findlastindex-1.2.3.tgz",
"integrity": "sha512-LzLoiOMAxvy+Gd3BAq3B7VeIgPdo+Q8hthvKtXybMvRV0jrXfJM/t8mw7nNlpEcVlVUnCnM2KSX4XU5HmpodOA==",
"dev": true,
- "requires": {
+ "dependencies": {
"call-bind": "^1.0.2",
"define-properties": "^1.2.0",
"es-abstract": "^1.22.1",
"es-shim-unscopables": "^1.0.0",
"get-intrinsic": "^1.2.1"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
}
},
- "array.prototype.flat": {
+ "node_modules/array.prototype.flat": {
"version": "1.3.2",
"resolved": "https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.3.2.tgz",
"integrity": "sha512-djYB+Zx2vLewY8RWlNCUdHjDXs2XOgm602S9E7P/UpHgfeHL00cRiIF+IN/G/aUJ7kGPb6yO/ErDI5V2s8iycA==",
"dev": true,
- "requires": {
+ "dependencies": {
"call-bind": "^1.0.2",
"define-properties": "^1.2.0",
"es-abstract": "^1.22.1",
"es-shim-unscopables": "^1.0.0"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
}
},
- "array.prototype.flatmap": {
+ "node_modules/array.prototype.flatmap": {
"version": "1.3.2",
"resolved": "https://registry.npmjs.org/array.prototype.flatmap/-/array.prototype.flatmap-1.3.2.tgz",
"integrity": "sha512-Ewyx0c9PmpcsByhSW4r+9zDU7sGjFc86qf/kKtuSCRdhfbk0SNLLkaT5qvcHnRGgc5NP/ly/y+qkXkqONX54CQ==",
"dev": true,
- "requires": {
+ "dependencies": {
"call-bind": "^1.0.2",
"define-properties": "^1.2.0",
"es-abstract": "^1.22.1",
"es-shim-unscopables": "^1.0.0"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
}
},
- "arraybuffer.prototype.slice": {
+ "node_modules/arraybuffer.prototype.slice": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/arraybuffer.prototype.slice/-/arraybuffer.prototype.slice-1.0.2.tgz",
"integrity": "sha512-yMBKppFur/fbHu9/6USUe03bZ4knMYiwFBcyiaXB8Go0qNehwX6inYPzK9U0NeQvGxKthcmHcaR8P5MStSRBAw==",
"dev": true,
- "requires": {
+ "dependencies": {
"array-buffer-byte-length": "^1.0.0",
"call-bind": "^1.0.2",
"define-properties": "^1.2.0",
@@ -2505,157 +3265,203 @@
"get-intrinsic": "^1.2.1",
"is-array-buffer": "^3.0.2",
"is-shared-array-buffer": "^1.0.2"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
}
},
- "arrify": {
+ "node_modules/arrify": {
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/arrify/-/arrify-2.0.1.tgz",
- "integrity": "sha512-3duEwti880xqi4eAMN8AyR4a0ByT90zoYdLlevfrvU43vb0YZwZVfxOgxWrLXXXpyugL0hNZc9G6BiB5B3nUug=="
+ "integrity": "sha512-3duEwti880xqi4eAMN8AyR4a0ByT90zoYdLlevfrvU43vb0YZwZVfxOgxWrLXXXpyugL0hNZc9G6BiB5B3nUug==",
+ "engines": {
+ "node": ">=8"
+ }
},
- "asap": {
+ "node_modules/asap": {
"version": "2.0.6",
"resolved": "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz",
"integrity": "sha512-BSHWgDSAiKs50o2Re8ppvp3seVHXSRM44cdSsT9FfNEUUZLOGWVCsiWaRPWM1Znn+mqZ1OfVZ3z3DWEzSp7hRA=="
},
- "asn1.js": {
+ "node_modules/asn1.js": {
"version": "5.4.1",
"resolved": "https://registry.npmjs.org/asn1.js/-/asn1.js-5.4.1.tgz",
"integrity": "sha512-+I//4cYPccV8LdmBLiX8CYvf9Sp3vQsrqu2QNXRcrbiWvcx/UdlFiqUJJzxRQxgsZmvhXhn4cSKeSmoFjVdupA==",
"dev": true,
- "requires": {
+ "dependencies": {
"bn.js": "^4.0.0",
"inherits": "^2.0.1",
"minimalistic-assert": "^1.0.0",
"safer-buffer": "^2.1.0"
- },
- "dependencies": {
- "bn.js": {
- "version": "4.12.0",
- "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz",
- "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==",
- "dev": true
- }
}
},
- "assert": {
+ "node_modules/asn1.js/node_modules/bn.js": {
+ "version": "4.12.0",
+ "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz",
+ "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==",
+ "dev": true
+ },
+ "node_modules/assert": {
"version": "1.5.1",
"resolved": "https://registry.npmjs.org/assert/-/assert-1.5.1.tgz",
"integrity": "sha512-zzw1uCAgLbsKwBfFc8CX78DDg+xZeBksSO3vwVIDDN5i94eOrPsSSyiVhmsSABFDM/OcpE2aagCat9dnWQLG1A==",
"dev": true,
- "requires": {
+ "dependencies": {
"object.assign": "^4.1.4",
"util": "^0.10.4"
- },
- "dependencies": {
- "inherits": {
- "version": "2.0.3",
- "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz",
- "integrity": "sha512-x00IRNXNy63jwGkJmzPigoySHbaqpNuzKbBOmzK+g2OdZpQ9w+sxCN+VSB3ja7IAge2OP2qpfxTjeNcyjmW1uw==",
- "dev": true
- },
- "util": {
- "version": "0.10.4",
- "resolved": "https://registry.npmjs.org/util/-/util-0.10.4.tgz",
- "integrity": "sha512-0Pm9hTQ3se5ll1XihRic3FDIku70C+iHUdT/W926rSgHV5QgXsYbKZN8MSC3tJtSkhuROzvsQjAaFENRXr+19A==",
- "dev": true,
- "requires": {
- "inherits": "2.0.3"
- }
- }
}
},
- "assert-never": {
+ "node_modules/assert-never": {
"version": "1.2.1",
"resolved": "https://registry.npmjs.org/assert-never/-/assert-never-1.2.1.tgz",
"integrity": "sha512-TaTivMB6pYI1kXwrFlEhLeGfOqoDNdTxjCdwRfFFkEA30Eu+k48W34nlok2EYWJfFFzqaEmichdNM7th6M5HNw=="
},
- "assertion-error": {
+ "node_modules/assert/node_modules/inherits": {
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz",
+ "integrity": "sha512-x00IRNXNy63jwGkJmzPigoySHbaqpNuzKbBOmzK+g2OdZpQ9w+sxCN+VSB3ja7IAge2OP2qpfxTjeNcyjmW1uw==",
+ "dev": true
+ },
+ "node_modules/assert/node_modules/util": {
+ "version": "0.10.4",
+ "resolved": "https://registry.npmjs.org/util/-/util-0.10.4.tgz",
+ "integrity": "sha512-0Pm9hTQ3se5ll1XihRic3FDIku70C+iHUdT/W926rSgHV5QgXsYbKZN8MSC3tJtSkhuROzvsQjAaFENRXr+19A==",
+ "dev": true,
+ "dependencies": {
+ "inherits": "2.0.3"
+ }
+ },
+ "node_modules/assertion-error": {
"version": "1.1.0",
"resolved": "https://registry.npmjs.org/assertion-error/-/assertion-error-1.1.0.tgz",
"integrity": "sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw==",
- "dev": true
+ "dev": true,
+ "engines": {
+ "node": "*"
+ }
},
- "assign-symbols": {
+ "node_modules/assign-symbols": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/assign-symbols/-/assign-symbols-1.0.0.tgz",
- "integrity": "sha512-Q+JC7Whu8HhmTdBph/Tq59IoRtoy6KAm5zzPv00WdujX82lbAL8K7WVjne7vdCsAmbF4AYaDOPyO3k0kl8qIrw=="
+ "integrity": "sha512-Q+JC7Whu8HhmTdBph/Tq59IoRtoy6KAm5zzPv00WdujX82lbAL8K7WVjne7vdCsAmbF4AYaDOPyO3k0kl8qIrw==",
+ "engines": {
+ "node": ">=0.10.0"
+ }
},
- "async": {
+ "node_modules/async": {
"version": "3.2.4",
"resolved": "https://registry.npmjs.org/async/-/async-3.2.4.tgz",
"integrity": "sha512-iAB+JbDEGXhyIUavoDl9WP/Jj106Kz9DEn1DPgYw5ruDn0e3Wgi3sKFm55sASdGBNOQB8F59d9qQ7deqrHA8wQ=="
},
- "async-done": {
+ "node_modules/async-done": {
"version": "1.3.2",
"resolved": "https://registry.npmjs.org/async-done/-/async-done-1.3.2.tgz",
"integrity": "sha512-uYkTP8dw2og1tu1nmza1n1CMW0qb8gWWlwqMmLb7MhBVs4BXrFziT6HXUd+/RlRA/i4H9AkofYloUbs1fwMqlw==",
- "requires": {
+ "dependencies": {
"end-of-stream": "^1.1.0",
"once": "^1.3.2",
"process-nextick-args": "^2.0.0",
"stream-exhaust": "^1.0.1"
+ },
+ "engines": {
+ "node": ">= 0.10"
}
},
- "async-each": {
+ "node_modules/async-each": {
"version": "1.0.6",
"resolved": "https://registry.npmjs.org/async-each/-/async-each-1.0.6.tgz",
- "integrity": "sha512-c646jH1avxr+aVpndVMeAfYw7wAa6idufrlN3LPA4PmKS0QEGp6PIC9nwz0WQkkvBGAMEki3pFdtxaF39J9vvg=="
+ "integrity": "sha512-c646jH1avxr+aVpndVMeAfYw7wAa6idufrlN3LPA4PmKS0QEGp6PIC9nwz0WQkkvBGAMEki3pFdtxaF39J9vvg==",
+ "funding": [
+ {
+ "type": "individual",
+ "url": "https://paulmillr.com/funding/"
+ }
+ ]
},
- "async-settle": {
+ "node_modules/async-settle": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/async-settle/-/async-settle-1.0.0.tgz",
"integrity": "sha512-VPXfB4Vk49z1LHHodrEQ6Xf7W4gg1w0dAPROHngx7qgDjqmIQ+fXmwgGXTW/ITLai0YLSvWepJOP9EVpMnEAcw==",
- "requires": {
+ "dependencies": {
"async-done": "^1.2.2"
+ },
+ "engines": {
+ "node": ">= 0.10"
}
},
- "asynckit": {
+ "node_modules/asynckit": {
"version": "0.4.0",
"resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz",
- "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==",
- "dev": true
+ "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q=="
},
- "atob": {
+ "node_modules/atob": {
"version": "2.1.2",
"resolved": "https://registry.npmjs.org/atob/-/atob-2.1.2.tgz",
- "integrity": "sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg=="
+ "integrity": "sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg==",
+ "bin": {
+ "atob": "bin/atob.js"
+ },
+ "engines": {
+ "node": ">= 4.5.0"
+ }
},
- "available-typed-arrays": {
+ "node_modules/available-typed-arrays": {
"version": "1.0.5",
"resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.5.tgz",
"integrity": "sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw==",
- "dev": true
- },
- "axios": {
- "version": "0.20.0",
- "resolved": "https://registry.npmjs.org/axios/-/axios-0.20.0.tgz",
- "integrity": "sha512-ANA4rr2BDcmmAQLOKft2fufrtuvlqR+cXNNinUmvfeSNCOF98PZL+7M/v1zIdGo7OLjEA9J2gXJL+j4zGsl0bA==",
- "requires": {
- "follow-redirects": "^1.10.0"
+ "dev": true,
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
}
},
- "babel-loader": {
+ "axios": {
+ "version": "1.6.0",
+ "resolved": "https://registry.npmjs.org/axios/-/axios-1.6.0.tgz",
+ "integrity": "sha512-EZ1DYihju9pwVB+jg67ogm+Tmqc6JmhamRN6I4Zt8DfZu5lbcQGw3ozH9lFejSJgs/ibaef3A9PMXPLeefFGJg==",
+ "requires": {
+ "follow-redirects": "^1.15.0",
+ "form-data": "^4.0.0",
+ "proxy-from-env": "^1.1.0"
+ }
+ },
+ "node_modules/babel-loader": {
"version": "9.1.3",
"resolved": "https://registry.npmjs.org/babel-loader/-/babel-loader-9.1.3.tgz",
"integrity": "sha512-xG3ST4DglodGf8qSwv0MdeWLhrDsw/32QMdTO5T1ZIp9gQur0HkCyFs7Awskr10JKXFXwpAhiCuYX5oGXnRGbw==",
- "requires": {
+ "dependencies": {
"find-cache-dir": "^4.0.0",
"schema-utils": "^4.0.0"
+ },
+ "engines": {
+ "node": ">= 14.15.0"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.12.0",
+ "webpack": ">=5"
}
},
- "babel-walk": {
+ "node_modules/babel-walk": {
"version": "3.0.0-canary-5",
"resolved": "https://registry.npmjs.org/babel-walk/-/babel-walk-3.0.0-canary-5.tgz",
"integrity": "sha512-GAwkz0AihzY5bkwIY5QDR+LvsRQgB/B+1foMPvi0FZPMl5fjD7ICiznUiBdLYMH1QYe6vqu4gWYytZOccLouFw==",
- "requires": {
+ "dependencies": {
"@babel/types": "^7.9.6"
+ },
+ "engines": {
+ "node": ">= 10.0.0"
}
},
- "bach": {
+ "node_modules/bach": {
"version": "1.2.0",
"resolved": "https://registry.npmjs.org/bach/-/bach-1.2.0.tgz",
"integrity": "sha512-bZOOfCb3gXBXbTFXq3OZtGR88LwGeJvzu6szttaIzymOTS4ZttBNOWSv7aLZja2EMycKtRYV0Oa8SNKH/zkxvg==",
- "requires": {
+ "dependencies": {
"arr-filter": "^1.1.1",
"arr-flatten": "^1.0.1",
"arr-map": "^2.0.0",
@@ -2665,18 +3471,21 @@
"async-done": "^1.2.2",
"async-settle": "^1.0.0",
"now-and-later": "^2.0.0"
+ },
+ "engines": {
+ "node": ">= 0.10"
}
},
- "balanced-match": {
+ "node_modules/balanced-match": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz",
"integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw=="
},
- "base": {
+ "node_modules/base": {
"version": "0.11.2",
"resolved": "https://registry.npmjs.org/base/-/base-0.11.2.tgz",
"integrity": "sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg==",
- "requires": {
+ "dependencies": {
"cache-base": "^1.0.1",
"class-utils": "^0.3.5",
"component-emitter": "^1.2.1",
@@ -2685,118 +3494,155 @@
"mixin-deep": "^1.2.0",
"pascalcase": "^0.1.1"
},
- "dependencies": {
- "define-property": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz",
- "integrity": "sha512-cZTYKFWspt9jZsMscWo8sc/5lbPC9Q0N5nBLgb+Yd915iL3udB1uFgS3B8YCx66UVHq018DAVFoee7x+gxggeA==",
- "requires": {
- "is-descriptor": "^1.0.0"
- }
- },
- "is-accessor-descriptor": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz",
- "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==",
- "requires": {
- "kind-of": "^6.0.0"
- }
- },
- "is-data-descriptor": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz",
- "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==",
- "requires": {
- "kind-of": "^6.0.0"
- }
- },
- "is-descriptor": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz",
- "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==",
- "requires": {
- "is-accessor-descriptor": "^1.0.0",
- "is-data-descriptor": "^1.0.0",
- "kind-of": "^6.0.2"
- }
- }
+ "engines": {
+ "node": ">=0.10.0"
}
},
- "base64-js": {
+ "node_modules/base/node_modules/define-property": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz",
+ "integrity": "sha512-cZTYKFWspt9jZsMscWo8sc/5lbPC9Q0N5nBLgb+Yd915iL3udB1uFgS3B8YCx66UVHq018DAVFoee7x+gxggeA==",
+ "dependencies": {
+ "is-descriptor": "^1.0.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/base/node_modules/is-accessor-descriptor": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz",
+ "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==",
+ "dependencies": {
+ "kind-of": "^6.0.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/base/node_modules/is-data-descriptor": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz",
+ "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==",
+ "dependencies": {
+ "kind-of": "^6.0.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/base/node_modules/is-descriptor": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz",
+ "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==",
+ "dependencies": {
+ "is-accessor-descriptor": "^1.0.0",
+ "is-data-descriptor": "^1.0.0",
+ "kind-of": "^6.0.2"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/base64-js": {
"version": "1.5.1",
"resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz",
- "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA=="
+ "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==",
+ "funding": [
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/feross"
+ },
+ {
+ "type": "patreon",
+ "url": "https://www.patreon.com/feross"
+ },
+ {
+ "type": "consulting",
+ "url": "https://feross.org/support"
+ }
+ ]
},
- "basic-auth": {
+ "node_modules/basic-auth": {
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/basic-auth/-/basic-auth-2.0.1.tgz",
"integrity": "sha512-NF+epuEdnUYVlGuhaxbbq+dvJttwLnGY+YixlXlME5KpQ5W3CnXA5cVTneY3SPbPDRkcjMbifrwmFYcClgOZeg==",
- "requires": {
+ "dependencies": {
"safe-buffer": "5.1.2"
},
- "dependencies": {
- "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=="
- }
+ "engines": {
+ "node": ">= 0.8"
}
},
- "bcryptjs": {
+ "node_modules/basic-auth/node_modules/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=="
+ },
+ "node_modules/bcryptjs": {
"version": "2.4.3",
"resolved": "https://registry.npmjs.org/bcryptjs/-/bcryptjs-2.4.3.tgz",
"integrity": "sha512-V/Hy/X9Vt7f3BbPJEi8BdVFMByHi+jNXrYkW3huaybV/kQ0KJg0Y6PkEMbn+zeT+i+SiKZ/HMqJGIIt4LZDqNQ=="
},
- "big.js": {
+ "node_modules/big.js": {
"version": "5.2.2",
"resolved": "https://registry.npmjs.org/big.js/-/big.js-5.2.2.tgz",
"integrity": "sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ==",
- "dev": true
+ "dev": true,
+ "engines": {
+ "node": "*"
+ }
},
- "bignumber.js": {
+ "node_modules/bignumber.js": {
"version": "9.0.0",
"resolved": "https://registry.npmjs.org/bignumber.js/-/bignumber.js-9.0.0.tgz",
- "integrity": "sha512-t/OYhhJ2SD+YGBQcjY8GzzDHEk9f3nerxjtfa6tlMXfe7frs/WozhvCNoGvpM0P3bNf3Gq5ZRMlGr5f3r4/N8A=="
+ "integrity": "sha512-t/OYhhJ2SD+YGBQcjY8GzzDHEk9f3nerxjtfa6tlMXfe7frs/WozhvCNoGvpM0P3bNf3Gq5ZRMlGr5f3r4/N8A==",
+ "engines": {
+ "node": "*"
+ }
},
- "binary-extensions": {
+ "node_modules/binary-extensions": {
"version": "1.13.1",
"resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-1.13.1.tgz",
- "integrity": "sha512-Un7MIEDdUC5gNpcGDV97op1Ywk748MpHcFTHoYs6qnj1Z3j7I53VG3nwZhKzoBZmbdRNnb6WRdFlwl7tSDuZGw=="
+ "integrity": "sha512-Un7MIEDdUC5gNpcGDV97op1Ywk748MpHcFTHoYs6qnj1Z3j7I53VG3nwZhKzoBZmbdRNnb6WRdFlwl7tSDuZGw==",
+ "engines": {
+ "node": ">=0.10.0"
+ }
},
- "bindings": {
+ "node_modules/bindings": {
"version": "1.5.0",
"resolved": "https://registry.npmjs.org/bindings/-/bindings-1.5.0.tgz",
"integrity": "sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ==",
"optional": true,
- "requires": {
+ "dependencies": {
"file-uri-to-path": "1.0.0"
}
},
- "bl": {
+ "node_modules/bl": {
"version": "2.2.1",
"resolved": "https://registry.npmjs.org/bl/-/bl-2.2.1.tgz",
"integrity": "sha512-6Pesp1w0DEX1N550i/uGV/TqucVL4AM/pgThFSN/Qq9si1/DF9aIHs1BxD8V/QU0HoeHO6cQRTAuYnLPKq1e4g==",
- "requires": {
+ "dependencies": {
"readable-stream": "^2.3.5",
"safe-buffer": "^5.1.1"
}
},
- "bluebird": {
+ "node_modules/bluebird": {
"version": "3.7.2",
"resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.7.2.tgz",
"integrity": "sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg=="
},
- "bn.js": {
+ "node_modules/bn.js": {
"version": "5.2.1",
"resolved": "https://registry.npmjs.org/bn.js/-/bn.js-5.2.1.tgz",
"integrity": "sha512-eXRvHzWyYPBuB4NBy0cmYQjGitUrtqwbvlzP3G6VFnNRbsZQIxQ10PbKKHt8gZ/HW/D/747aDl+QkDqg3KQLMQ==",
"dev": true
},
- "body-parser": {
+ "node_modules/body-parser": {
"version": "1.20.2",
"resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.2.tgz",
"integrity": "sha512-ml9pReCu3M61kGlqoTm2umSXTlRTuGTx0bfYj+uIUKKYycG5NtSbeetV3faSU6R7ajOPw0g/J1PvK4qNy7s5bA==",
- "requires": {
+ "dependencies": {
"bytes": "3.1.2",
"content-type": "~1.0.5",
"debug": "2.6.9",
@@ -2810,41 +3656,44 @@
"type-is": "~1.6.18",
"unpipe": "1.0.0"
},
- "dependencies": {
- "debug": {
- "version": "2.6.9",
- "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
- "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
- "requires": {
- "ms": "2.0.0"
- }
- },
- "ms": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
- "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A=="
- }
+ "engines": {
+ "node": ">= 0.8",
+ "npm": "1.2.8000 || >= 1.4.16"
}
},
- "boom": {
+ "node_modules/body-parser/node_modules/debug": {
+ "version": "2.6.9",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
+ "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
+ "dependencies": {
+ "ms": "2.0.0"
+ }
+ },
+ "node_modules/body-parser/node_modules/ms": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
+ "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A=="
+ },
+ "node_modules/boom": {
"version": "7.3.0",
"resolved": "https://registry.npmjs.org/boom/-/boom-7.3.0.tgz",
"integrity": "sha512-Swpoyi2t5+GhOEGw8rEsKvTxFLIDiiKoUc2gsoV6Lyr43LHBIzch3k2MvYUs8RTROrIkVJ3Al0TkaOGjnb+B6A==",
- "requires": {
+ "deprecated": "This module has moved and is now available at @hapi/boom. Please update your dependencies as this version is no longer maintained an may contain bugs and security issues.",
+ "dependencies": {
"hoek": "6.x.x"
}
},
- "bowser": {
+ "node_modules/bowser": {
"version": "2.11.0",
"resolved": "https://registry.npmjs.org/bowser/-/bowser-2.11.0.tgz",
"integrity": "sha512-AlcaJBi/pqqJBIQ8U9Mcpc9i8Aqxn88Skv5d+xBX006BY5u8N3mGLHa5Lgppa7L/HfwgwLgZ6NYs+Ag6uUmJRA==",
"optional": true
},
- "boxen": {
+ "node_modules/boxen": {
"version": "1.3.0",
"resolved": "https://registry.npmjs.org/boxen/-/boxen-1.3.0.tgz",
"integrity": "sha512-TNPjfTr432qx7yOjQyaXm3dSR0MH9vXp7eT1BFSl/C51g+EFnOR9hTg1IreahGBmDNCehscshe45f+C1TBZbLw==",
- "requires": {
+ "dependencies": {
"ansi-align": "^2.0.0",
"camelcase": "^4.0.0",
"chalk": "^2.0.1",
@@ -2853,55 +3702,71 @@
"term-size": "^1.2.0",
"widest-line": "^2.0.0"
},
- "dependencies": {
- "ansi-regex": {
- "version": "3.0.1",
- "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.1.tgz",
- "integrity": "sha512-+O9Jct8wf++lXxxFc4hc8LsjaSq0HFzzL7cVsw8pRDIPdjKD2mT4ytDZlLuSBZ4cLKZFXIrMGO7DbQCtMJJMKw=="
- },
- "camelcase": {
- "version": "4.1.0",
- "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-4.1.0.tgz",
- "integrity": "sha512-FxAv7HpHrXbh3aPo4o2qxHay2lkLY3x5Mw3KeE4KQE8ysVfziWeRZDwcjauvwBSGEC/nXUPzZy8zeh4HokqOnw=="
- },
- "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": "sha512-VHskAKYM8RfSFXwee5t5cbN5PZeq1Wrh6qd5bkyiXIf6UQcN6w/A0eXM9r6t8d+GYOh+o6ZhiEnb88LN/Y8m2w=="
- },
- "string-width": {
- "version": "2.1.1",
- "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz",
- "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==",
- "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": "sha512-4XaJ2zQdCzROZDivEVIDPkcQn8LMFSa8kj8Gxb/Lnwzv9A8VctNZ+lfivC/sV3ivW8ElJTERXZoPBRrZKkNKow==",
- "requires": {
- "ansi-regex": "^3.0.0"
- }
- }
+ "engines": {
+ "node": ">=4"
}
},
- "brace-expansion": {
+ "node_modules/boxen/node_modules/ansi-regex": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.1.tgz",
+ "integrity": "sha512-+O9Jct8wf++lXxxFc4hc8LsjaSq0HFzzL7cVsw8pRDIPdjKD2mT4ytDZlLuSBZ4cLKZFXIrMGO7DbQCtMJJMKw==",
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/boxen/node_modules/camelcase": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-4.1.0.tgz",
+ "integrity": "sha512-FxAv7HpHrXbh3aPo4o2qxHay2lkLY3x5Mw3KeE4KQE8ysVfziWeRZDwcjauvwBSGEC/nXUPzZy8zeh4HokqOnw==",
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/boxen/node_modules/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": "sha512-VHskAKYM8RfSFXwee5t5cbN5PZeq1Wrh6qd5bkyiXIf6UQcN6w/A0eXM9r6t8d+GYOh+o6ZhiEnb88LN/Y8m2w==",
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/boxen/node_modules/string-width": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz",
+ "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==",
+ "dependencies": {
+ "is-fullwidth-code-point": "^2.0.0",
+ "strip-ansi": "^4.0.0"
+ },
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/boxen/node_modules/strip-ansi": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz",
+ "integrity": "sha512-4XaJ2zQdCzROZDivEVIDPkcQn8LMFSa8kj8Gxb/Lnwzv9A8VctNZ+lfivC/sV3ivW8ElJTERXZoPBRrZKkNKow==",
+ "dependencies": {
+ "ansi-regex": "^3.0.0"
+ },
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/brace-expansion": {
"version": "1.1.11",
"resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
"integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==",
- "requires": {
+ "dependencies": {
"balanced-match": "^1.0.0",
"concat-map": "0.0.1"
}
},
- "braces": {
+ "node_modules/braces": {
"version": "2.3.2",
"resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz",
"integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==",
- "requires": {
+ "dependencies": {
"arr-flatten": "^1.1.0",
"array-unique": "^0.3.2",
"extend-shallow": "^2.0.1",
@@ -2913,35 +3778,39 @@
"split-string": "^3.0.2",
"to-regex": "^3.0.1"
},
- "dependencies": {
- "extend-shallow": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
- "integrity": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==",
- "requires": {
- "is-extendable": "^0.1.0"
- }
- }
+ "engines": {
+ "node": ">=0.10.0"
}
},
- "brorand": {
+ "node_modules/braces/node_modules/extend-shallow": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
+ "integrity": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==",
+ "dependencies": {
+ "is-extendable": "^0.1.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/brorand": {
"version": "1.1.0",
"resolved": "https://registry.npmjs.org/brorand/-/brorand-1.1.0.tgz",
"integrity": "sha512-cKV8tMCEpQs4hK/ik71d6LrPOnpkpGBR0wzxqr68g2m/LB2GxVYQroAjMJZRVM1Y4BCjCKc3vAamxSzOY2RP+w==",
"dev": true
},
- "browser-stdout": {
+ "node_modules/browser-stdout": {
"version": "1.3.1",
"resolved": "https://registry.npmjs.org/browser-stdout/-/browser-stdout-1.3.1.tgz",
"integrity": "sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw==",
"dev": true
},
- "browserify-aes": {
+ "node_modules/browserify-aes": {
"version": "1.2.0",
"resolved": "https://registry.npmjs.org/browserify-aes/-/browserify-aes-1.2.0.tgz",
"integrity": "sha512-+7CHXqGuspUn/Sl5aO7Ea0xWGAtETPXNSAjHo48JfLdPWcMng33Xe4znFvQweqc/uzk5zSOI3H52CYnjCfb5hA==",
"dev": true,
- "requires": {
+ "dependencies": {
"buffer-xor": "^1.0.3",
"cipher-base": "^1.0.0",
"create-hash": "^1.1.0",
@@ -2950,45 +3819,45 @@
"safe-buffer": "^5.0.1"
}
},
- "browserify-cipher": {
+ "node_modules/browserify-cipher": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/browserify-cipher/-/browserify-cipher-1.0.1.tgz",
"integrity": "sha512-sPhkz0ARKbf4rRQt2hTpAHqn47X3llLkUGn+xEJzLjwY8LRs2p0v7ljvI5EyoRO/mexrNunNECisZs+gw2zz1w==",
"dev": true,
- "requires": {
+ "dependencies": {
"browserify-aes": "^1.0.4",
"browserify-des": "^1.0.0",
"evp_bytestokey": "^1.0.0"
}
},
- "browserify-des": {
+ "node_modules/browserify-des": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/browserify-des/-/browserify-des-1.0.2.tgz",
"integrity": "sha512-BioO1xf3hFwz4kc6iBhI3ieDFompMhrMlnDFC4/0/vd5MokpuAc3R+LYbwTA9A5Yc9pq9UYPqffKpW2ObuwX5A==",
"dev": true,
- "requires": {
+ "dependencies": {
"cipher-base": "^1.0.1",
"des.js": "^1.0.0",
"inherits": "^2.0.1",
"safe-buffer": "^5.1.2"
}
},
- "browserify-rsa": {
+ "node_modules/browserify-rsa": {
"version": "4.1.0",
"resolved": "https://registry.npmjs.org/browserify-rsa/-/browserify-rsa-4.1.0.tgz",
"integrity": "sha512-AdEER0Hkspgno2aR97SAf6vi0y0k8NuOpGnVH3O99rcA5Q6sh8QxcngtHuJ6uXwnfAXNM4Gn1Gb7/MV1+Ymbog==",
"dev": true,
- "requires": {
+ "dependencies": {
"bn.js": "^5.0.0",
"randombytes": "^2.0.1"
}
},
- "browserify-sign": {
+ "node_modules/browserify-sign": {
"version": "4.2.1",
"resolved": "https://registry.npmjs.org/browserify-sign/-/browserify-sign-4.2.1.tgz",
"integrity": "sha512-/vrA5fguVAKKAVTNJjgSm1tRQDHUU6DbwO9IROu/0WAzC8PKhucDSh18J0RMvVeHAn5puMd+QHC2erPRNf8lmg==",
"dev": true,
- "requires": {
+ "dependencies": {
"bn.js": "^5.1.1",
"browserify-rsa": "^4.0.1",
"create-hash": "^1.2.0",
@@ -2998,109 +3867,161 @@
"parse-asn1": "^5.1.5",
"readable-stream": "^3.6.0",
"safe-buffer": "^5.2.0"
- },
- "dependencies": {
- "readable-stream": {
- "version": "3.6.2",
- "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz",
- "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==",
- "dev": true,
- "requires": {
- "inherits": "^2.0.3",
- "string_decoder": "^1.1.1",
- "util-deprecate": "^1.0.1"
- }
- }
}
},
- "browserify-zlib": {
+ "node_modules/browserify-sign/node_modules/readable-stream": {
+ "version": "3.6.2",
+ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz",
+ "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==",
+ "dev": true,
+ "dependencies": {
+ "inherits": "^2.0.3",
+ "string_decoder": "^1.1.1",
+ "util-deprecate": "^1.0.1"
+ },
+ "engines": {
+ "node": ">= 6"
+ }
+ },
+ "node_modules/browserify-zlib": {
"version": "0.2.0",
"resolved": "https://registry.npmjs.org/browserify-zlib/-/browserify-zlib-0.2.0.tgz",
"integrity": "sha512-Z942RysHXmJrhqk88FmKBVq/v5tqmSkDz7p54G/MGyjMnCFFnC79XWNbg+Vta8W6Wb2qtSZTSxIGkJrRpCFEiA==",
"dev": true,
- "requires": {
+ "dependencies": {
"pako": "~1.0.5"
}
},
- "browserslist": {
+ "node_modules/browserslist": {
"version": "4.22.0",
"resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.22.0.tgz",
"integrity": "sha512-v+Jcv64L2LbfTC6OnRcaxtqJNJuQAVhZKSJfR/6hn7lhnChUXl4amwVviqN1k411BB+3rRoKMitELRn1CojeRA==",
- "dev": true,
- "requires": {
+ "funding": [
+ {
+ "type": "opencollective",
+ "url": "https://opencollective.com/browserslist"
+ },
+ {
+ "type": "tidelift",
+ "url": "https://tidelift.com/funding/github/npm/browserslist"
+ },
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/ai"
+ }
+ ],
+ "dependencies": {
"caniuse-lite": "^1.0.30001539",
"electron-to-chromium": "^1.4.530",
"node-releases": "^2.0.13",
"update-browserslist-db": "^1.0.13"
+ },
+ "bin": {
+ "browserslist": "cli.js"
+ },
+ "engines": {
+ "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7"
}
},
- "bson": {
+ "node_modules/bson": {
"version": "4.7.2",
"resolved": "https://registry.npmjs.org/bson/-/bson-4.7.2.tgz",
"integrity": "sha512-Ry9wCtIZ5kGqkJoi6aD8KjxFZEx78guTQDnpXWiNthsxzrxAK/i8E6pCHAIZTbaEFWcOCvbecMukfK7XUvyLpQ==",
- "requires": {
+ "dependencies": {
"buffer": "^5.6.0"
+ },
+ "engines": {
+ "node": ">=6.9.0"
}
},
- "buffer": {
+ "node_modules/buffer": {
"version": "5.7.1",
"resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz",
"integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==",
- "requires": {
+ "funding": [
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/feross"
+ },
+ {
+ "type": "patreon",
+ "url": "https://www.patreon.com/feross"
+ },
+ {
+ "type": "consulting",
+ "url": "https://feross.org/support"
+ }
+ ],
+ "dependencies": {
"base64-js": "^1.3.1",
"ieee754": "^1.1.13"
}
},
- "buffer-crc32": {
+ "node_modules/buffer-crc32": {
"version": "0.2.13",
"resolved": "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-0.2.13.tgz",
- "integrity": "sha512-VO9Ht/+p3SN7SKWqcrgEzjGbRSJYTx+Q1pTQC0wrWqHx0vpJraQ6GtHx8tvcg1rlK1byhU5gccxgOgj7B0TDkQ=="
+ "integrity": "sha512-VO9Ht/+p3SN7SKWqcrgEzjGbRSJYTx+Q1pTQC0wrWqHx0vpJraQ6GtHx8tvcg1rlK1byhU5gccxgOgj7B0TDkQ==",
+ "engines": {
+ "node": "*"
+ }
},
- "buffer-equal": {
+ "node_modules/buffer-equal": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/buffer-equal/-/buffer-equal-1.0.1.tgz",
- "integrity": "sha512-QoV3ptgEaQpvVwbXdSO39iqPQTCxSF7A5U99AxbHYqUdCizL/lH2Z0A2y6nbZucxMEOtNyZfG2s6gsVugGpKkg=="
+ "integrity": "sha512-QoV3ptgEaQpvVwbXdSO39iqPQTCxSF7A5U99AxbHYqUdCizL/lH2Z0A2y6nbZucxMEOtNyZfG2s6gsVugGpKkg==",
+ "engines": {
+ "node": ">=0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
},
- "buffer-equal-constant-time": {
+ "node_modules/buffer-equal-constant-time": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/buffer-equal-constant-time/-/buffer-equal-constant-time-1.0.1.tgz",
"integrity": "sha512-zRpUiDwd/xk6ADqPMATG8vc9VPrkck7T07OIx0gnjmJAnHnTVXNQG3vfvWNuiZIkwu9KrKdA1iJKfsfTVxE6NA=="
},
- "buffer-from": {
+ "node_modules/buffer-from": {
"version": "1.1.2",
"resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz",
"integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ=="
},
- "buffer-xor": {
+ "node_modules/buffer-xor": {
"version": "1.0.3",
"resolved": "https://registry.npmjs.org/buffer-xor/-/buffer-xor-1.0.3.tgz",
"integrity": "sha512-571s0T7nZWK6vB67HI5dyUF7wXiNcfaPPPTl6zYCNApANjIvYJTg7hlud/+cJpdAhS7dVzqMLmfhfHR3rAcOjQ==",
"dev": true
},
- "builtin-status-codes": {
+ "node_modules/builtin-status-codes": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/builtin-status-codes/-/builtin-status-codes-3.0.0.tgz",
"integrity": "sha512-HpGFw18DgFWlncDfjTa2rcQ4W88O1mC8e8yZ2AvQY5KDaktSTwo+KRf6nHK6FRI5FyRyb/5T6+TSxfP7QyGsmQ==",
"dev": true
},
- "busboy": {
+ "node_modules/busboy": {
"version": "1.6.0",
"resolved": "https://registry.npmjs.org/busboy/-/busboy-1.6.0.tgz",
"integrity": "sha512-8SFQbg/0hQ9xy3UNTB0YEnsNBbWfhf7RtnzpL7TkBiTBRfrQ9Fxcnz7VJsleJpyp6rVLvXiuORqjlHi5q+PYuA==",
- "requires": {
+ "dependencies": {
"streamsearch": "^1.1.0"
+ },
+ "engines": {
+ "node": ">=10.16.0"
}
},
- "bytes": {
+ "node_modules/bytes": {
"version": "3.1.2",
"resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz",
- "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg=="
+ "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==",
+ "engines": {
+ "node": ">= 0.8"
+ }
},
- "cache-base": {
+ "node_modules/cache-base": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/cache-base/-/cache-base-1.0.1.tgz",
"integrity": "sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ==",
- "requires": {
+ "dependencies": {
"collection-visit": "^1.0.0",
"component-emitter": "^1.2.1",
"get-value": "^2.0.6",
@@ -3110,95 +4031,139 @@
"to-object-path": "^0.3.0",
"union-value": "^1.0.0",
"unset-value": "^1.0.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
}
},
- "caching-transform": {
+ "node_modules/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": {
+ "dependencies": {
"hasha": "^3.0.0",
"make-dir": "^2.0.0",
"package-hash": "^3.0.0",
"write-file-atomic": "^2.4.2"
},
- "dependencies": {
- "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"
- }
- },
- "semver": {
- "version": "5.7.2",
- "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz",
- "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==",
- "dev": true
- }
+ "engines": {
+ "node": ">=6"
}
},
- "call-bind": {
+ "node_modules/caching-transform/node_modules/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,
+ "dependencies": {
+ "pify": "^4.0.1",
+ "semver": "^5.6.0"
+ },
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/caching-transform/node_modules/semver": {
+ "version": "5.7.2",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz",
+ "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==",
+ "dev": true,
+ "bin": {
+ "semver": "bin/semver"
+ }
+ },
+ "node_modules/call-bind": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz",
"integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==",
- "requires": {
+ "dependencies": {
"function-bind": "^1.1.1",
"get-intrinsic": "^1.0.2"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
}
},
- "call-me-maybe": {
+ "node_modules/call-me-maybe": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/call-me-maybe/-/call-me-maybe-1.0.2.tgz",
"integrity": "sha512-HpX65o1Hnr9HH25ojC1YGs7HCQLq0GCOibSaWER0eNpgJ/Z1MZv2mTc7+xh6WOPxbRVcmgbv4hGU+uSQ/2xFZQ=="
},
- "callsites": {
+ "node_modules/callsites": {
"version": "3.1.0",
"resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz",
"integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==",
- "dev": true
+ "dev": true,
+ "engines": {
+ "node": ">=6"
+ }
},
- "camelcase": {
+ "node_modules/camelcase": {
"version": "5.3.1",
"resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz",
- "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg=="
+ "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==",
+ "engines": {
+ "node": ">=6"
+ }
},
- "camelcase-keys": {
+ "node_modules/camelcase-keys": {
"version": "6.2.2",
"resolved": "https://registry.npmjs.org/camelcase-keys/-/camelcase-keys-6.2.2.tgz",
"integrity": "sha512-YrwaA0vEKazPBkn0ipTiMpSajYDSe+KjQfrjhcBMxJt/znbvlHd8Pw/Vamaz5EB4Wfhs3SUR3Z9mwRu/P3s3Yg==",
- "requires": {
+ "dependencies": {
"camelcase": "^5.3.1",
"map-obj": "^4.0.0",
"quick-lru": "^4.0.1"
+ },
+ "engines": {
+ "node": ">=8"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
}
},
- "camelize": {
+ "node_modules/camelize": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/camelize/-/camelize-1.0.0.tgz",
"integrity": "sha512-W2lPwkBkMZwFlPCXhIlYgxu+7gC/NUlCtdK652DAJ1JdgV0sTrvuPFshNPrFa1TY2JOkLhgdeEBplB4ezEa+xg=="
},
- "caniuse-lite": {
+ "node_modules/caniuse-lite": {
"version": "1.0.30001540",
"resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001540.tgz",
"integrity": "sha512-9JL38jscuTJBTcuETxm8QLsFr/F6v0CYYTEU6r5+qSM98P2Q0Hmu0eG1dTG5GBUmywU3UlcVOUSIJYY47rdFSw==",
- "dev": true
+ "funding": [
+ {
+ "type": "opencollective",
+ "url": "https://opencollective.com/browserslist"
+ },
+ {
+ "type": "tidelift",
+ "url": "https://tidelift.com/funding/github/npm/caniuse-lite"
+ },
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/ai"
+ }
+ ]
},
- "capture-stack-trace": {
+ "node_modules/capture-stack-trace": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/capture-stack-trace/-/capture-stack-trace-1.0.2.tgz",
- "integrity": "sha512-X/WM2UQs6VMHUtjUDnZTRI+i1crWteJySFzr9UpGoQa4WQffXVTTXuekjl7TjZRlcF2XfjgITT0HxZ9RnxeT0w=="
+ "integrity": "sha512-X/WM2UQs6VMHUtjUDnZTRI+i1crWteJySFzr9UpGoQa4WQffXVTTXuekjl7TjZRlcF2XfjgITT0HxZ9RnxeT0w==",
+ "engines": {
+ "node": ">=0.10.0"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
},
- "chai": {
+ "node_modules/chai": {
"version": "4.3.9",
"resolved": "https://registry.npmjs.org/chai/-/chai-4.3.9.tgz",
"integrity": "sha512-tH8vhfA1CfuYMkALXj+wmZcqiwqOfshU9Gry+NYiiLqIddrobkBhALv6XD4yDz68qapphYI4vSaqhqAdThCAAA==",
"dev": true,
- "requires": {
+ "dependencies": {
"assertion-error": "^1.1.0",
"check-error": "^1.0.3",
"deep-eql": "^4.1.2",
@@ -3206,14 +4171,17 @@
"loupe": "^2.3.1",
"pathval": "^1.1.1",
"type-detect": "^4.0.5"
+ },
+ "engines": {
+ "node": ">=4"
}
},
- "chai-http": {
+ "node_modules/chai-http": {
"version": "4.4.0",
"resolved": "https://registry.npmjs.org/chai-http/-/chai-http-4.4.0.tgz",
"integrity": "sha512-uswN3rZpawlRaa5NiDUHcDZ3v2dw5QgLyAwnQ2tnVNuP7CwIsOFuYJ0xR1WiR7ymD4roBnJIzOUep7w9jQMFJA==",
"dev": true,
- "requires": {
+ "dependencies": {
"@types/chai": "4",
"@types/superagent": "4.1.13",
"charset": "^1.0.1",
@@ -3223,66 +4191,82 @@
"qs": "^6.11.2",
"superagent": "^8.0.9"
},
- "dependencies": {
- "qs": {
- "version": "6.11.2",
- "resolved": "https://registry.npmjs.org/qs/-/qs-6.11.2.tgz",
- "integrity": "sha512-tDNIz22aBzCDxLtVH++VnTfzxlfeK5CbqohpSqpJgj1Wg/cQbStNAz3NuqCs5vV+pjBsK4x4pN9HlVh7rcYRiA==",
- "dev": true,
- "requires": {
- "side-channel": "^1.0.4"
- }
- }
+ "engines": {
+ "node": ">=10"
}
},
- "chai-things": {
+ "node_modules/chai-http/node_modules/qs": {
+ "version": "6.11.2",
+ "resolved": "https://registry.npmjs.org/qs/-/qs-6.11.2.tgz",
+ "integrity": "sha512-tDNIz22aBzCDxLtVH++VnTfzxlfeK5CbqohpSqpJgj1Wg/cQbStNAz3NuqCs5vV+pjBsK4x4pN9HlVh7rcYRiA==",
+ "dev": true,
+ "dependencies": {
+ "side-channel": "^1.0.4"
+ },
+ "engines": {
+ "node": ">=0.6"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/chai-things": {
"version": "0.2.0",
"resolved": "https://registry.npmjs.org/chai-things/-/chai-things-0.2.0.tgz",
"integrity": "sha512-6ns0SU21xdRCoEXVKH3HGbwnsgfVMXQ+sU5V8PI9rfxaITos8lss1vUxbF1FAcJKjfqmmmLVlr/z3sLes00w+A==",
"dev": true
},
- "chalk": {
+ "node_modules/chalk": {
"version": "2.4.2",
"resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz",
"integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==",
- "requires": {
+ "dependencies": {
"ansi-styles": "^3.2.1",
"escape-string-regexp": "^1.0.5",
"supports-color": "^5.3.0"
+ },
+ "engines": {
+ "node": ">=4"
}
},
- "character-parser": {
+ "node_modules/character-parser": {
"version": "2.2.0",
"resolved": "https://registry.npmjs.org/character-parser/-/character-parser-2.2.0.tgz",
"integrity": "sha512-+UqJQjFEFaTAs3bNsF2j2kEN1baG/zghZbdqoYEDxGZtJo9LBzl1A+m0D4n3qKx8N2FNv8/Xp6yV9mQmBuptaw==",
- "requires": {
+ "dependencies": {
"is-regex": "^1.0.3"
}
},
- "charset": {
+ "node_modules/charset": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/charset/-/charset-1.0.1.tgz",
"integrity": "sha512-6dVyOOYjpfFcL1Y4qChrAoQLRHvj2ziyhcm0QJlhOcAhykL/k1kTUPbeo+87MNRTRdk2OIIsIXbuF3x2wi5EXg==",
- "dev": true
+ "dev": true,
+ "engines": {
+ "node": ">=4.0.0"
+ }
},
- "check-error": {
+ "node_modules/check-error": {
"version": "1.0.3",
"resolved": "https://registry.npmjs.org/check-error/-/check-error-1.0.3.tgz",
"integrity": "sha512-iKEoDYaRmd1mxM90a2OEfWhjsjPpYPuQ+lMYsoxB126+t8fw7ySEO48nmDg5COTjxDI65/Y2OWpeEHk3ZOe8zg==",
"dev": true,
- "requires": {
+ "dependencies": {
"get-func-name": "^2.0.2"
+ },
+ "engines": {
+ "node": "*"
}
},
- "chokidar": {
+ "node_modules/chokidar": {
"version": "2.1.8",
"resolved": "https://registry.npmjs.org/chokidar/-/chokidar-2.1.8.tgz",
"integrity": "sha512-ZmZUazfOzf0Nve7duiCKD23PFSCs4JPoYyccjUFF3aQkQadqBhfzhjkwBH2mNOG9cTBwhamM37EIsIkZw3nRgg==",
- "requires": {
+ "deprecated": "Chokidar 2 does not receive security updates since 2019. Upgrade to chokidar 3 with 15x fewer dependencies",
+ "dependencies": {
"anymatch": "^2.0.0",
"async-each": "^1.0.1",
"braces": "^2.3.2",
- "fsevents": "^1.2.7",
"glob-parent": "^3.1.0",
"inherits": "^2.0.3",
"is-binary-path": "^1.0.0",
@@ -3291,262 +4275,317 @@
"path-is-absolute": "^1.0.0",
"readdirp": "^2.2.1",
"upath": "^1.1.1"
+ },
+ "optionalDependencies": {
+ "fsevents": "^1.2.7"
}
},
- "chownr": {
+ "node_modules/chownr": {
"version": "1.1.4",
"resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.4.tgz",
"integrity": "sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg=="
},
- "chrome-trace-event": {
+ "node_modules/chrome-trace-event": {
"version": "1.0.3",
"resolved": "https://registry.npmjs.org/chrome-trace-event/-/chrome-trace-event-1.0.3.tgz",
"integrity": "sha512-p3KULyQg4S7NIHixdwbGX+nFHkoBiA4YQmyWtjb8XngSKV124nJmRysgAeujbUVb15vh+RvFUfCPqU7rXk+hZg==",
- "dev": true
+ "engines": {
+ "node": ">=6.0"
+ }
},
- "ci-info": {
+ "node_modules/ci-info": {
"version": "1.6.0",
"resolved": "https://registry.npmjs.org/ci-info/-/ci-info-1.6.0.tgz",
"integrity": "sha512-vsGdkwSCDpWmP80ncATX7iea5DWQemg1UgCW5J8tqjU3lYw4FBYuj89J0CTVomA7BEfvSZd84GmHko+MxFQU2A=="
},
- "cipher-base": {
+ "node_modules/cipher-base": {
"version": "1.0.4",
"resolved": "https://registry.npmjs.org/cipher-base/-/cipher-base-1.0.4.tgz",
"integrity": "sha512-Kkht5ye6ZGmwv40uUDZztayT2ThLQGfnj/T71N/XzeZeo3nf8foyW7zGTsPYkEya3m5f3cAypH+qe7YOrM1U2Q==",
"dev": true,
- "requires": {
+ "dependencies": {
"inherits": "^2.0.1",
"safe-buffer": "^5.0.1"
}
},
- "class-utils": {
+ "node_modules/class-utils": {
"version": "0.3.6",
"resolved": "https://registry.npmjs.org/class-utils/-/class-utils-0.3.6.tgz",
"integrity": "sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg==",
- "requires": {
+ "dependencies": {
"arr-union": "^3.1.0",
"define-property": "^0.2.5",
"isobject": "^3.0.0",
"static-extend": "^0.1.1"
},
- "dependencies": {
- "define-property": {
- "version": "0.2.5",
- "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz",
- "integrity": "sha512-Rr7ADjQZenceVOAKop6ALkkRAmH1A4Gx9hV/7ZujPUN2rkATqFO0JZLZInbAjpZYoJ1gUx8MRMQVkYemcbMSTA==",
- "requires": {
- "is-descriptor": "^0.1.0"
- }
- }
+ "engines": {
+ "node": ">=0.10.0"
}
},
- "clean-stack": {
+ "node_modules/class-utils/node_modules/define-property": {
+ "version": "0.2.5",
+ "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz",
+ "integrity": "sha512-Rr7ADjQZenceVOAKop6ALkkRAmH1A4Gx9hV/7ZujPUN2rkATqFO0JZLZInbAjpZYoJ1gUx8MRMQVkYemcbMSTA==",
+ "dependencies": {
+ "is-descriptor": "^0.1.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/clean-stack": {
"version": "2.2.0",
"resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz",
- "integrity": "sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A=="
+ "integrity": "sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==",
+ "engines": {
+ "node": ">=6"
+ }
},
- "cli-boxes": {
+ "node_modules/cli-boxes": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/cli-boxes/-/cli-boxes-1.0.0.tgz",
- "integrity": "sha512-3Fo5wu8Ytle8q9iCzS4D2MWVL2X7JVWRiS1BnXbTFDhS9c/REkM9vd1AmabsoZoY5/dGi5TT9iKL8Kb6DeBRQg=="
+ "integrity": "sha512-3Fo5wu8Ytle8q9iCzS4D2MWVL2X7JVWRiS1BnXbTFDhS9c/REkM9vd1AmabsoZoY5/dGi5TT9iKL8Kb6DeBRQg==",
+ "engines": {
+ "node": ">=0.10.0"
+ }
},
- "cliui": {
+ "node_modules/cliui": {
"version": "3.2.0",
"resolved": "https://registry.npmjs.org/cliui/-/cliui-3.2.0.tgz",
"integrity": "sha512-0yayqDxWQbqk3ojkYqUKqaAQ6AfNKeKWRNA8kR0WXzAsdHpP4BIaOmMAG87JGuO6qcobyW4GjxHd9PmhEd+T9w==",
- "requires": {
+ "dependencies": {
"string-width": "^1.0.1",
"strip-ansi": "^3.0.1",
"wrap-ansi": "^2.0.0"
}
},
- "clone": {
+ "node_modules/clone": {
"version": "2.1.2",
"resolved": "https://registry.npmjs.org/clone/-/clone-2.1.2.tgz",
- "integrity": "sha512-3Pe/CF1Nn94hyhIYpjtiLhdCoEoz0DqQ+988E9gmeEdQZlojxnOb74wctFyuwWQHzqyf9X7C7MG8juUpqBJT8w=="
+ "integrity": "sha512-3Pe/CF1Nn94hyhIYpjtiLhdCoEoz0DqQ+988E9gmeEdQZlojxnOb74wctFyuwWQHzqyf9X7C7MG8juUpqBJT8w==",
+ "engines": {
+ "node": ">=0.8"
+ }
},
- "clone-buffer": {
+ "node_modules/clone-buffer": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/clone-buffer/-/clone-buffer-1.0.0.tgz",
- "integrity": "sha512-KLLTJWrvwIP+OPfMn0x2PheDEP20RPUcGXj/ERegTgdmPEZylALQldygiqrPPu8P45uNuPs7ckmReLY6v/iA5g=="
+ "integrity": "sha512-KLLTJWrvwIP+OPfMn0x2PheDEP20RPUcGXj/ERegTgdmPEZylALQldygiqrPPu8P45uNuPs7ckmReLY6v/iA5g==",
+ "engines": {
+ "node": ">= 0.10"
+ }
},
- "clone-deep": {
+ "node_modules/clone-deep": {
"version": "4.0.1",
"resolved": "https://registry.npmjs.org/clone-deep/-/clone-deep-4.0.1.tgz",
"integrity": "sha512-neHB9xuzh/wk0dIHweyAXv2aPGZIVk3pLMe+/RNzINf17fe0OG96QroktYAUm7SM1PBnzTabaLboqqxDyMU+SQ==",
"dev": true,
- "requires": {
+ "dependencies": {
"is-plain-object": "^2.0.4",
"kind-of": "^6.0.2",
"shallow-clone": "^3.0.0"
+ },
+ "engines": {
+ "node": ">=6"
}
},
- "clone-stats": {
+ "node_modules/clone-stats": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/clone-stats/-/clone-stats-1.0.0.tgz",
"integrity": "sha512-au6ydSpg6nsrigcZ4m8Bc9hxjeW+GJ8xh5G3BJCMt4WXe1H10UNaVOamqQTmrx1kjVuxAHIQSNU6hY4Nsn9/ag=="
},
- "cloneable-readable": {
+ "node_modules/cloneable-readable": {
"version": "1.1.3",
"resolved": "https://registry.npmjs.org/cloneable-readable/-/cloneable-readable-1.1.3.tgz",
"integrity": "sha512-2EF8zTQOxYq70Y4XKtorQupqF0m49MBz2/yf5Bj+MHjvpG3Hy7sImifnqD6UA+TKYxeSV+u6qqQPawN5UvnpKQ==",
- "requires": {
+ "dependencies": {
"inherits": "^2.0.1",
"process-nextick-args": "^2.0.0",
"readable-stream": "^2.3.5"
}
},
- "co-bluebird": {
+ "node_modules/co-bluebird": {
"version": "1.1.0",
"resolved": "https://registry.npmjs.org/co-bluebird/-/co-bluebird-1.1.0.tgz",
"integrity": "sha512-JuoemMXxQjYAxbfRrNpOsLyiwDiY8mXvGqJyYLM7jMySDJtnMklW3V2o8uyubpc1eN2YoRsAdfZ1lfKCd3lsrA==",
- "requires": {
+ "dependencies": {
"bluebird": "^2.10.0",
"co-use": "^1.1.0"
},
- "dependencies": {
- "bluebird": {
- "version": "2.11.0",
- "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-2.11.0.tgz",
- "integrity": "sha512-UfFSr22dmHPQqPP9XWHRhq+gWnHCYguQGkXQlbyPtW5qTnhFWA8/iXg765tH0cAjy7l/zPJ1aBTO0g5XgA7kvQ=="
- }
+ "engines": {
+ "node": ">=0.12.0"
}
},
- "co-use": {
+ "node_modules/co-bluebird/node_modules/bluebird": {
+ "version": "2.11.0",
+ "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-2.11.0.tgz",
+ "integrity": "sha512-UfFSr22dmHPQqPP9XWHRhq+gWnHCYguQGkXQlbyPtW5qTnhFWA8/iXg765tH0cAjy7l/zPJ1aBTO0g5XgA7kvQ=="
+ },
+ "node_modules/co-use": {
"version": "1.1.0",
"resolved": "https://registry.npmjs.org/co-use/-/co-use-1.1.0.tgz",
- "integrity": "sha512-1lVRtdywv41zQO/xvI2wU8w6oFcUYT6T84YKSxN25KN4N4Kld3scLovt8FjDmD63Cm7HtyRWHjezt+IanXmkyA=="
+ "integrity": "sha512-1lVRtdywv41zQO/xvI2wU8w6oFcUYT6T84YKSxN25KN4N4Kld3scLovt8FjDmD63Cm7HtyRWHjezt+IanXmkyA==",
+ "engines": {
+ "node": ">=0.12.0"
+ }
},
- "coalescy": {
+ "node_modules/coalescy": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/coalescy/-/coalescy-1.0.0.tgz",
"integrity": "sha512-OmRR46eVfyaXZYI7Ai5/vnLHjWhhh99sugx+UTsmVhwaYzARb+Tcdit59/HkVxF8KdqJG5NN8ClUhzQXS3Hh+w==",
"dev": true
},
- "code-point-at": {
+ "node_modules/code-point-at": {
"version": "1.1.0",
"resolved": "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz",
- "integrity": "sha512-RpAVKQA5T63xEj6/giIbUEtZwJ4UFIc3ZtvEkiaUERylqe8xb5IvqcgOurZLahv93CLKfxcw5YI+DZcUBRyLXA=="
+ "integrity": "sha512-RpAVKQA5T63xEj6/giIbUEtZwJ4UFIc3ZtvEkiaUERylqe8xb5IvqcgOurZLahv93CLKfxcw5YI+DZcUBRyLXA==",
+ "engines": {
+ "node": ">=0.10.0"
+ }
},
- "collection-map": {
+ "node_modules/collection-map": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/collection-map/-/collection-map-1.0.0.tgz",
"integrity": "sha512-5D2XXSpkOnleOI21TG7p3T0bGAsZ/XknZpKBmGYyluO8pw4zA3K8ZlrBIbC4FXg3m6z/RNFiUFfT2sQK01+UHA==",
- "requires": {
+ "dependencies": {
"arr-map": "^2.0.2",
"for-own": "^1.0.0",
"make-iterator": "^1.0.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
}
},
- "collection-visit": {
+ "node_modules/collection-visit": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/collection-visit/-/collection-visit-1.0.0.tgz",
"integrity": "sha512-lNkKvzEeMBBjUGHZ+q6z9pSJla0KWAQPvtzhEV9+iGyQYG+pBpl7xKDhxoNSOZH2hhv0v5k0y2yAM4o4SjoSkw==",
- "requires": {
+ "dependencies": {
"map-visit": "^1.0.0",
"object-visit": "^1.0.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
}
},
- "color": {
+ "node_modules/color": {
"version": "3.2.1",
"resolved": "https://registry.npmjs.org/color/-/color-3.2.1.tgz",
"integrity": "sha512-aBl7dZI9ENN6fUGC7mWpMTPNHmWUSNan9tuWN6ahh5ZLNk9baLJOnSMlrQkHcrfFgz2/RigjUVAjdx36VcemKA==",
- "requires": {
+ "dependencies": {
"color-convert": "^1.9.3",
"color-string": "^1.6.0"
}
},
- "color-convert": {
+ "node_modules/color-convert": {
"version": "1.9.3",
"resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz",
"integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==",
- "requires": {
+ "dependencies": {
"color-name": "1.1.3"
}
},
- "color-name": {
+ "node_modules/color-name": {
"version": "1.1.3",
"resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz",
"integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw=="
},
- "color-string": {
+ "node_modules/color-string": {
"version": "1.9.1",
"resolved": "https://registry.npmjs.org/color-string/-/color-string-1.9.1.tgz",
"integrity": "sha512-shrVawQFojnZv6xM40anx4CkoDP+fZsw/ZerEMsW/pyzsRbElpsL/DBVW7q3ExxwusdNXI3lXpuhEZkzs8p5Eg==",
- "requires": {
+ "dependencies": {
"color-name": "^1.0.0",
"simple-swizzle": "^0.2.2"
}
},
- "color-support": {
+ "node_modules/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=="
+ "integrity": "sha512-qiBjkpbMLO/HL68y+lh4q0/O1MZFj2RX6X/KmMa3+gJD3z+WwI1ZzDHysvqHGS3mP6mznPckpXmw1nI9cJjyRg==",
+ "bin": {
+ "color-support": "bin.js"
+ }
},
- "colorette": {
+ "node_modules/colorette": {
"version": "1.4.0",
"resolved": "https://registry.npmjs.org/colorette/-/colorette-1.4.0.tgz",
"integrity": "sha512-Y2oEozpomLn7Q3HFP7dpww7AtMJplbM9lGZP6RDfHqmbeRjiwRg4n6VM6j4KLmRke85uWEI7JqF17f3pqdRA0g==",
"dev": true
},
- "colorspace": {
+ "node_modules/colorspace": {
"version": "1.1.4",
"resolved": "https://registry.npmjs.org/colorspace/-/colorspace-1.1.4.tgz",
"integrity": "sha512-BgvKJiuVu1igBUF2kEjRCZXol6wiiGbY5ipL/oVPwm0BL9sIpMIzM8IK7vwuxIIzOXMV3Ey5w+vxhm0rR/TN8w==",
- "requires": {
+ "dependencies": {
"color": "^3.1.3",
"text-hex": "1.0.x"
}
},
- "combined-stream": {
+ "node_modules/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"
+ },
+ "engines": {
+ "node": ">= 0.8"
}
},
- "commander": {
+ "node_modules/commander": {
"version": "5.1.0",
"resolved": "https://registry.npmjs.org/commander/-/commander-5.1.0.tgz",
"integrity": "sha512-P0CysNDQ7rtVw4QIQtm+MRxV66vKFSvlsQvGYXZWR3qFU0jlMKHZZZgw8e+8DSah4UDKMqnknRDQz+xuQXQ/Zg==",
- "dev": true
+ "dev": true,
+ "engines": {
+ "node": ">= 6"
+ }
},
- "common-path-prefix": {
+ "node_modules/common-path-prefix": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/common-path-prefix/-/common-path-prefix-3.0.0.tgz",
"integrity": "sha512-QE33hToZseCH3jS0qN96O/bSh3kaw/h+Tq7ngyY9eWDUnTlTNUyqfqvCXioLe5Na5jFsL78ra/wuBU4iuEgd4w=="
},
- "commondir": {
+ "node_modules/commondir": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz",
"integrity": "sha512-W9pAhw0ja1Edb5GVdIF1mjZw/ASI0AlShXM83UUGe2DVr5TdAPEA1OA8m/g8zWp9x6On7gqufY+FatDbC3MDQg==",
"dev": true
},
- "complex.js": {
+ "node_modules/complex.js": {
"version": "2.1.1",
"resolved": "https://registry.npmjs.org/complex.js/-/complex.js-2.1.1.tgz",
- "integrity": "sha512-8njCHOTtFFLtegk6zQo0kkVX1rngygb/KQI6z1qZxlFI3scluC+LVTCFbrkWjBv4vvLlbQ9t88IPMC6k95VTTg=="
+ "integrity": "sha512-8njCHOTtFFLtegk6zQo0kkVX1rngygb/KQI6z1qZxlFI3scluC+LVTCFbrkWjBv4vvLlbQ9t88IPMC6k95VTTg==",
+ "engines": {
+ "node": "*"
+ },
+ "funding": {
+ "type": "patreon",
+ "url": "https://www.patreon.com/infusion"
+ }
},
- "component-emitter": {
+ "node_modules/component-emitter": {
"version": "1.3.0",
"resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.3.0.tgz",
"integrity": "sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg=="
},
- "compressible": {
+ "node_modules/compressible": {
"version": "2.0.18",
"resolved": "https://registry.npmjs.org/compressible/-/compressible-2.0.18.tgz",
"integrity": "sha512-AF3r7P5dWxL8MxyITRMlORQNaOA2IkAFaTr4k7BUumjPtRpGDTZpl0Pb1XCO6JeDCBdp126Cgs9sMxqSjgYyRg==",
- "requires": {
+ "dependencies": {
"mime-db": ">= 1.43.0 < 2"
+ },
+ "engines": {
+ "node": ">= 0.6"
}
},
- "compression": {
+ "node_modules/compression": {
"version": "1.7.4",
"resolved": "https://registry.npmjs.org/compression/-/compression-1.7.4.tgz",
"integrity": "sha512-jaSIDzP9pZVS4ZfQ+TzvtiWhdpFhE2RDHz8QJkpX9SIpLq88VueF5jJw6t+6CUQcAoA6t+x89MLrWAqpfDE8iQ==",
- "requires": {
+ "dependencies": {
"accepts": "~1.3.5",
"bytes": "3.0.0",
"compressible": "~2.0.16",
@@ -3555,53 +4594,60 @@
"safe-buffer": "5.1.2",
"vary": "~1.1.2"
},
- "dependencies": {
- "bytes": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz",
- "integrity": "sha512-pMhOfFDPiv9t5jjIXkHosWmkSyQbvsgEVNkz0ERHbuLh2T/7j4Mqqpz523Fe8MVY89KC6Sh/QfS2sM+SjgFDcw=="
- },
- "debug": {
- "version": "2.6.9",
- "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
- "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
- "requires": {
- "ms": "2.0.0"
- }
- },
- "ms": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
- "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A=="
- },
- "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=="
- }
+ "engines": {
+ "node": ">= 0.8.0"
}
},
- "concat-map": {
+ "node_modules/compression/node_modules/bytes": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz",
+ "integrity": "sha512-pMhOfFDPiv9t5jjIXkHosWmkSyQbvsgEVNkz0ERHbuLh2T/7j4Mqqpz523Fe8MVY89KC6Sh/QfS2sM+SjgFDcw==",
+ "engines": {
+ "node": ">= 0.8"
+ }
+ },
+ "node_modules/compression/node_modules/debug": {
+ "version": "2.6.9",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
+ "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
+ "dependencies": {
+ "ms": "2.0.0"
+ }
+ },
+ "node_modules/compression/node_modules/ms": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
+ "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A=="
+ },
+ "node_modules/compression/node_modules/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=="
+ },
+ "node_modules/concat-map": {
"version": "0.0.1",
"resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz",
"integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg=="
},
- "concat-stream": {
+ "node_modules/concat-stream": {
"version": "1.6.2",
"resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.2.tgz",
"integrity": "sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==",
- "requires": {
+ "engines": [
+ "node >= 0.8"
+ ],
+ "dependencies": {
"buffer-from": "^1.0.0",
"inherits": "^2.0.3",
"readable-stream": "^2.2.2",
"typedarray": "^0.0.6"
}
},
- "configstore": {
+ "node_modules/configstore": {
"version": "3.1.5",
"resolved": "https://registry.npmjs.org/configstore/-/configstore-3.1.5.tgz",
"integrity": "sha512-nlOhI4+fdzoK5xmJ+NY+1gZK56bwEaWZr8fYuXohZ9Vkc1o3a4T/R3M+yE/w7x/ZVJ1zF8c+oaOvF0dztdUgmA==",
- "requires": {
+ "dependencies": {
"dot-prop": "^4.2.1",
"graceful-fs": "^4.1.2",
"make-dir": "^1.0.0",
@@ -3609,135 +4655,161 @@
"write-file-atomic": "^2.0.0",
"xdg-basedir": "^3.0.0"
},
- "dependencies": {
- "make-dir": {
- "version": "1.3.0",
- "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-1.3.0.tgz",
- "integrity": "sha512-2w31R7SJtieJJnQtGc7RVL2StM2vGYVfqUOvUDxH6bC6aJTxPxTF0GnIgCyu7tjockiUWAYQRbxa7vKn34s5sQ==",
- "requires": {
- "pify": "^3.0.0"
- }
- },
- "pify": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz",
- "integrity": "sha512-C3FsVNH1udSEX48gGX1xfvwTWfsYWj5U+8/uK15BGzIGrKoUpghX8hWZwa/OFnakBiiVNmBvemTJR5mcy7iPcg=="
- }
+ "engines": {
+ "node": ">=4"
}
},
- "confusing-browser-globals": {
+ "node_modules/configstore/node_modules/make-dir": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-1.3.0.tgz",
+ "integrity": "sha512-2w31R7SJtieJJnQtGc7RVL2StM2vGYVfqUOvUDxH6bC6aJTxPxTF0GnIgCyu7tjockiUWAYQRbxa7vKn34s5sQ==",
+ "dependencies": {
+ "pify": "^3.0.0"
+ },
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/configstore/node_modules/pify": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz",
+ "integrity": "sha512-C3FsVNH1udSEX48gGX1xfvwTWfsYWj5U+8/uK15BGzIGrKoUpghX8hWZwa/OFnakBiiVNmBvemTJR5mcy7iPcg==",
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/confusing-browser-globals": {
"version": "1.0.11",
"resolved": "https://registry.npmjs.org/confusing-browser-globals/-/confusing-browser-globals-1.0.11.tgz",
"integrity": "sha512-JsPKdmh8ZkmnHxDk55FZ1TqVLvEQTvoByJZRN9jzI0UjxK/QgAmsphz7PGtqgPieQZ/CQcHWXCR7ATDNhGe+YA==",
"dev": true
},
- "console-browserify": {
+ "node_modules/console-browserify": {
"version": "1.2.0",
"resolved": "https://registry.npmjs.org/console-browserify/-/console-browserify-1.2.0.tgz",
"integrity": "sha512-ZMkYO/LkF17QvCPqM0gxw8yUzigAOZOSWSHg91FH6orS7vcEj5dVZTidN2fQ14yBSdg97RqhSNwLUXInd52OTA==",
"dev": true
},
- "constantinople": {
+ "node_modules/constantinople": {
"version": "4.0.1",
"resolved": "https://registry.npmjs.org/constantinople/-/constantinople-4.0.1.tgz",
"integrity": "sha512-vCrqcSIq4//Gx74TXXCGnHpulY1dskqLTFGDmhrGxzeXL8lF8kvXv6mpNWlJj1uD4DW23D4ljAqbY4RRaaUZIw==",
- "requires": {
+ "dependencies": {
"@babel/parser": "^7.6.0",
"@babel/types": "^7.6.1"
}
},
- "constants-browserify": {
+ "node_modules/constants-browserify": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/constants-browserify/-/constants-browserify-1.0.0.tgz",
"integrity": "sha512-xFxOwqIzR/e1k1gLiWEophSCMqXcwVHIH7akf7b/vxcUeGunlj3hvZaaqxwHsTgn+IndtkQJgSztIDWeumWJDQ==",
"dev": true
},
- "content-disposition": {
+ "node_modules/content-disposition": {
"version": "0.5.4",
"resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.4.tgz",
"integrity": "sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==",
- "requires": {
+ "dependencies": {
"safe-buffer": "5.2.1"
+ },
+ "engines": {
+ "node": ">= 0.6"
}
},
- "content-security-policy-builder": {
+ "node_modules/content-security-policy-builder": {
"version": "2.1.0",
"resolved": "https://registry.npmjs.org/content-security-policy-builder/-/content-security-policy-builder-2.1.0.tgz",
- "integrity": "sha512-/MtLWhJVvJNkA9dVLAp6fg9LxD2gfI6R2Fi1hPmfjYXSahJJzcfvoeDOxSyp4NvxMuwWv3WMssE9o31DoULHrQ=="
+ "integrity": "sha512-/MtLWhJVvJNkA9dVLAp6fg9LxD2gfI6R2Fi1hPmfjYXSahJJzcfvoeDOxSyp4NvxMuwWv3WMssE9o31DoULHrQ==",
+ "engines": {
+ "node": ">=4.0.0"
+ }
},
- "content-type": {
+ "node_modules/content-type": {
"version": "1.0.5",
"resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.5.tgz",
- "integrity": "sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA=="
+ "integrity": "sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==",
+ "engines": {
+ "node": ">= 0.6"
+ }
},
- "convert-source-map": {
+ "node_modules/convert-source-map": {
"version": "1.9.0",
"resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.9.0.tgz",
"integrity": "sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A=="
},
- "cookie": {
+ "node_modules/cookie": {
"version": "0.5.0",
"resolved": "https://registry.npmjs.org/cookie/-/cookie-0.5.0.tgz",
- "integrity": "sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw=="
+ "integrity": "sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw==",
+ "engines": {
+ "node": ">= 0.6"
+ }
},
- "cookie-signature": {
+ "node_modules/cookie-signature": {
"version": "1.0.6",
"resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz",
"integrity": "sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ=="
},
- "cookiejar": {
+ "node_modules/cookiejar": {
"version": "2.1.4",
"resolved": "https://registry.npmjs.org/cookiejar/-/cookiejar-2.1.4.tgz",
"integrity": "sha512-LDx6oHrK+PhzLKJU9j5S7/Y3jM/mUHvD/DeI1WQmJn652iPC5Y4TBzC9l+5OMOXlyTTA+SmVUPm0HQUwpD5Jqw==",
"dev": true
},
- "copy-descriptor": {
+ "node_modules/copy-descriptor": {
"version": "0.1.1",
"resolved": "https://registry.npmjs.org/copy-descriptor/-/copy-descriptor-0.1.1.tgz",
- "integrity": "sha512-XgZ0pFcakEUlbwQEVNg3+QAis1FyTL3Qel9FYy8pSkQqoG3PNoT0bOCQtOXcOkur21r2Eq2kI+IE+gsmAEVlYw=="
+ "integrity": "sha512-XgZ0pFcakEUlbwQEVNg3+QAis1FyTL3Qel9FYy8pSkQqoG3PNoT0bOCQtOXcOkur21r2Eq2kI+IE+gsmAEVlYw==",
+ "engines": {
+ "node": ">=0.10.0"
+ }
},
- "copy-props": {
+ "node_modules/copy-props": {
"version": "2.0.5",
"resolved": "https://registry.npmjs.org/copy-props/-/copy-props-2.0.5.tgz",
"integrity": "sha512-XBlx8HSqrT0ObQwmSzM7WE5k8FxTV75h1DX1Z3n6NhQ/UYYAvInWYmG06vFt7hQZArE2fuO62aihiWIVQwh1sw==",
- "requires": {
+ "dependencies": {
"each-props": "^1.3.2",
"is-plain-object": "^5.0.0"
- },
- "dependencies": {
- "is-plain-object": {
- "version": "5.0.0",
- "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-5.0.0.tgz",
- "integrity": "sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q=="
- }
}
},
- "core-util-is": {
+ "node_modules/copy-props/node_modules/is-plain-object": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-5.0.0.tgz",
+ "integrity": "sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q==",
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/core-util-is": {
"version": "1.0.3",
"resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz",
"integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ=="
},
- "country-codes-list": {
+ "node_modules/country-codes-list": {
"version": "1.6.11",
"resolved": "https://registry.npmjs.org/country-codes-list/-/country-codes-list-1.6.11.tgz",
"integrity": "sha512-MsHoJ83tGyv9tFspeI8yHBomiTH4rruHxdWhNWGG9d1ykXgLyawh/VykmYPH5KqduY+9Q2RUNlL2/KGkXJqANA=="
},
- "cp-file": {
+ "node_modules/cp-file": {
"version": "7.0.0",
"resolved": "https://registry.npmjs.org/cp-file/-/cp-file-7.0.0.tgz",
"integrity": "sha512-0Cbj7gyvFVApzpK/uhCtQ/9kE9UnYpxMzaq5nQQC/Dh4iaj5fxp7iEFIullrYwzj8nf0qnsI1Qsx34hAeAebvw==",
- "requires": {
+ "dependencies": {
"graceful-fs": "^4.1.2",
"make-dir": "^3.0.0",
"nested-error-stacks": "^2.0.0",
"p-event": "^4.1.0"
+ },
+ "engines": {
+ "node": ">=8"
}
},
- "cpy": {
+ "node_modules/cpy": {
"version": "8.1.2",
"resolved": "https://registry.npmjs.org/cpy/-/cpy-8.1.2.tgz",
"integrity": "sha512-dmC4mUesv0OYH2kNFEidtf/skUwv4zePmGeepjyyJ0qTo5+8KhA1o99oIAwVVLzQMAeDJml74d6wPPKb6EZUTg==",
- "requires": {
+ "dependencies": {
"arrify": "^2.0.1",
"cp-file": "^7.0.0",
"globby": "^9.2.0",
@@ -3747,49 +4819,65 @@
"p-all": "^2.1.0",
"p-filter": "^2.1.0",
"p-map": "^3.0.0"
+ },
+ "engines": {
+ "node": ">=8"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
}
},
- "cpy-cli": {
+ "node_modules/cpy-cli": {
"version": "3.1.1",
"resolved": "https://registry.npmjs.org/cpy-cli/-/cpy-cli-3.1.1.tgz",
"integrity": "sha512-HCpNdBkQy3rw+uARLuIf0YurqsMXYzBa9ihhSAuxYJcNIrqrSq3BstPfr0cQN38AdMrQiO9Dp4hYy7GtGJsLPg==",
- "requires": {
+ "dependencies": {
"cpy": "^8.0.0",
"meow": "^6.1.1"
+ },
+ "bin": {
+ "cpy": "cli.js"
+ },
+ "engines": {
+ "node": ">=8"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
}
},
- "create-ecdh": {
+ "node_modules/create-ecdh": {
"version": "4.0.4",
"resolved": "https://registry.npmjs.org/create-ecdh/-/create-ecdh-4.0.4.tgz",
"integrity": "sha512-mf+TCx8wWc9VpuxfP2ht0iSISLZnt0JgWlrOKZiNqyUZWnjIaCIVNQArMHnCZKfEYRg6IM7A+NeJoN8gf/Ws0A==",
"dev": true,
- "requires": {
+ "dependencies": {
"bn.js": "^4.1.0",
"elliptic": "^6.5.3"
- },
- "dependencies": {
- "bn.js": {
- "version": "4.12.0",
- "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz",
- "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==",
- "dev": true
- }
}
},
- "create-error-class": {
+ "node_modules/create-ecdh/node_modules/bn.js": {
+ "version": "4.12.0",
+ "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz",
+ "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==",
+ "dev": true
+ },
+ "node_modules/create-error-class": {
"version": "3.0.2",
"resolved": "https://registry.npmjs.org/create-error-class/-/create-error-class-3.0.2.tgz",
"integrity": "sha512-gYTKKexFO3kh200H1Nit76sRwRtOY32vQd3jpAQKpLtZqyNsSQNfI4N7o3eP2wUjV35pTWKRYqFUDBvUha/Pkw==",
- "requires": {
+ "dependencies": {
"capture-stack-trace": "^1.0.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
}
},
- "create-hash": {
+ "node_modules/create-hash": {
"version": "1.2.0",
"resolved": "https://registry.npmjs.org/create-hash/-/create-hash-1.2.0.tgz",
"integrity": "sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg==",
"dev": true,
- "requires": {
+ "dependencies": {
"cipher-base": "^1.0.1",
"inherits": "^2.0.1",
"md5.js": "^1.3.4",
@@ -3797,12 +4885,12 @@
"sha.js": "^2.4.0"
}
},
- "create-hmac": {
+ "node_modules/create-hmac": {
"version": "1.1.7",
"resolved": "https://registry.npmjs.org/create-hmac/-/create-hmac-1.1.7.tgz",
"integrity": "sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg==",
"dev": true,
- "requires": {
+ "dependencies": {
"cipher-base": "^1.0.3",
"create-hash": "^1.1.0",
"inherits": "^2.0.1",
@@ -3811,83 +4899,95 @@
"sha.js": "^2.4.8"
}
},
- "create-require": {
+ "node_modules/create-require": {
"version": "1.1.1",
"resolved": "https://registry.npmjs.org/create-require/-/create-require-1.1.1.tgz",
"integrity": "sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==",
"dev": true
},
- "cron-parser": {
+ "node_modules/cron-parser": {
"version": "3.5.0",
"resolved": "https://registry.npmjs.org/cron-parser/-/cron-parser-3.5.0.tgz",
"integrity": "sha512-wyVZtbRs6qDfFd8ap457w3XVntdvqcwBGxBoTvJQH9KGVKL/fB+h2k3C8AqiVxvUQKN1Ps/Ns46CNViOpVDhfQ==",
- "requires": {
+ "dependencies": {
"is-nan": "^1.3.2",
"luxon": "^1.26.0"
+ },
+ "engines": {
+ "node": ">=0.8"
}
},
- "cross-env": {
+ "node_modules/cross-env": {
"version": "5.2.1",
"resolved": "https://registry.npmjs.org/cross-env/-/cross-env-5.2.1.tgz",
"integrity": "sha512-1yHhtcfAd1r4nwQgknowuUNfIT9E8dOMMspC36g45dN+iD1blloi7xp8X/xAIDnjHWyt1uQ8PHk2fkNaym7soQ==",
"dev": true,
- "requires": {
+ "dependencies": {
"cross-spawn": "^6.0.5"
},
- "dependencies": {
- "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"
- }
- },
- "semver": {
- "version": "5.7.2",
- "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz",
- "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==",
- "dev": true
- }
+ "bin": {
+ "cross-env": "dist/bin/cross-env.js",
+ "cross-env-shell": "dist/bin/cross-env-shell.js"
+ },
+ "engines": {
+ "node": ">=4.0"
}
},
- "cross-spawn": {
- "version": "5.1.0",
- "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-5.1.0.tgz",
- "integrity": "sha512-pTgQJ5KC0d2hcY8eyL1IzlBPYjTkyH72XRZPnLyKus2mBfNjQs3klqbJU2VILqZryAZUt9JOb3h/mWMy23/f5A==",
- "requires": {
- "lru-cache": "^4.0.1",
+ "node_modules/cross-env/node_modules/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,
+ "dependencies": {
+ "nice-try": "^1.0.4",
+ "path-key": "^2.0.1",
+ "semver": "^5.5.0",
"shebang-command": "^1.2.0",
"which": "^1.2.9"
},
- "dependencies": {
- "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==",
- "requires": {
- "pseudomap": "^1.0.2",
- "yallist": "^2.1.2"
- }
- },
- "yallist": {
- "version": "2.1.2",
- "resolved": "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz",
- "integrity": "sha512-ncTzHV7NvsQZkYe1DW7cbDLm0YpzHmZF5r/iyP3ZnQtMiJ+pjzisCiMNI+Sj+xQF5pXhSHxSB3uDbsBTzY/c2A=="
- }
+ "engines": {
+ "node": ">=4.8"
}
},
- "crypto-browserify": {
+ "node_modules/cross-env/node_modules/semver": {
+ "version": "5.7.2",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz",
+ "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==",
+ "dev": true,
+ "bin": {
+ "semver": "bin/semver"
+ }
+ },
+ "node_modules/cross-spawn": {
+ "version": "5.1.0",
+ "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-5.1.0.tgz",
+ "integrity": "sha512-pTgQJ5KC0d2hcY8eyL1IzlBPYjTkyH72XRZPnLyKus2mBfNjQs3klqbJU2VILqZryAZUt9JOb3h/mWMy23/f5A==",
+ "dependencies": {
+ "lru-cache": "^4.0.1",
+ "shebang-command": "^1.2.0",
+ "which": "^1.2.9"
+ }
+ },
+ "node_modules/cross-spawn/node_modules/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==",
+ "dependencies": {
+ "pseudomap": "^1.0.2",
+ "yallist": "^2.1.2"
+ }
+ },
+ "node_modules/cross-spawn/node_modules/yallist": {
+ "version": "2.1.2",
+ "resolved": "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz",
+ "integrity": "sha512-ncTzHV7NvsQZkYe1DW7cbDLm0YpzHmZF5r/iyP3ZnQtMiJ+pjzisCiMNI+Sj+xQF5pXhSHxSB3uDbsBTzY/c2A=="
+ },
+ "node_modules/crypto-browserify": {
"version": "3.12.0",
"resolved": "https://registry.npmjs.org/crypto-browserify/-/crypto-browserify-3.12.0.tgz",
"integrity": "sha512-fz4spIh+znjO2VjL+IdhEpRJ3YN6sMzITSBijk6FK2UvTqruSQW+/cCZTSNsMiZNvUeq0CqurF+dAbyiGOY6Wg==",
"dev": true,
- "requires": {
+ "dependencies": {
"browserify-cipher": "^1.0.0",
"browserify-sign": "^4.0.0",
"create-ecdh": "^4.0.0",
@@ -3899,475 +4999,589 @@
"public-encrypt": "^4.0.0",
"randombytes": "^2.0.0",
"randomfill": "^1.0.3"
+ },
+ "engines": {
+ "node": "*"
}
},
- "crypto-random-string": {
+ "node_modules/crypto-random-string": {
"version": "3.3.1",
"resolved": "https://registry.npmjs.org/crypto-random-string/-/crypto-random-string-3.3.1.tgz",
"integrity": "sha512-5j88ECEn6h17UePrLi6pn1JcLtAiANa3KExyr9y9Z5vo2mv56Gh3I4Aja/B9P9uyMwyxNHAHWv+nE72f30T5Dg==",
- "requires": {
+ "dependencies": {
"type-fest": "^0.8.1"
},
- "dependencies": {
- "type-fest": {
- "version": "0.8.1",
- "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz",
- "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA=="
- }
+ "engines": {
+ "node": ">=8"
}
},
- "csrf": {
+ "node_modules/crypto-random-string/node_modules/type-fest": {
+ "version": "0.8.1",
+ "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz",
+ "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==",
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/csrf": {
"version": "3.1.0",
"resolved": "https://registry.npmjs.org/csrf/-/csrf-3.1.0.tgz",
"integrity": "sha512-uTqEnCvWRk042asU6JtapDTcJeeailFy4ydOQS28bj1hcLnYRiqi8SsD2jS412AY1I/4qdOwWZun774iqywf9w==",
- "requires": {
+ "dependencies": {
"rndm": "1.2.0",
"tsscmp": "1.0.6",
"uid-safe": "2.1.5"
+ },
+ "engines": {
+ "node": ">= 0.8"
}
},
- "csurf": {
+ "node_modules/csurf": {
"version": "1.11.0",
"resolved": "https://registry.npmjs.org/csurf/-/csurf-1.11.0.tgz",
"integrity": "sha512-UCtehyEExKTxgiu8UHdGvHj4tnpE/Qctue03Giq5gPgMQ9cg/ciod5blZQ5a4uCEenNQjxyGuzygLdKUmee/bQ==",
- "requires": {
+ "deprecated": "Please use another csrf package",
+ "dependencies": {
"cookie": "0.4.0",
"cookie-signature": "1.0.6",
"csrf": "3.1.0",
"http-errors": "~1.7.3"
},
- "dependencies": {
- "cookie": {
- "version": "0.4.0",
- "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.0.tgz",
- "integrity": "sha512-+Hp8fLp57wnUSt0tY0tHEXh4voZRDnoIrZPqlo3DPiI4y9lwg/jqx+1Om94/W6ZaPDOUbnjOt/99w66zk+l1Xg=="
- },
- "depd": {
- "version": "1.1.2",
- "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz",
- "integrity": "sha512-7emPTl6Dpo6JRXOXjLRxck+FlLRX5847cLKEn00PLAgc3g2hTZZgr+e4c2v6QpSmLeFP3n5yUo7ft6avBK/5jQ=="
- },
- "http-errors": {
- "version": "1.7.3",
- "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.7.3.tgz",
- "integrity": "sha512-ZTTX0MWrsQ2ZAhA1cejAwDLycFsd7I7nVtnkT3Ol0aqodaKW+0CTZDQ1uBv5whptCnc8e8HeRRJxRs0kmm/Qfw==",
- "requires": {
- "depd": "~1.1.2",
- "inherits": "2.0.4",
- "setprototypeof": "1.1.1",
- "statuses": ">= 1.5.0 < 2",
- "toidentifier": "1.0.0"
- }
- },
- "setprototypeof": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.1.tgz",
- "integrity": "sha512-JvdAWfbXeIGaZ9cILp38HntZSFSo3mWg6xGcJJsd+d4aRMOqauag1C63dJfDw7OaMYwEbHMOxEZ1lqVRYP2OAw=="
- },
- "statuses": {
- "version": "1.5.0",
- "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz",
- "integrity": "sha512-OpZ3zP+jT1PI7I8nemJX4AKmAX070ZkYPVWV/AaKTJl+tXCTGyVdC1a4SL8RUQYEwk/f34ZX8UTykN68FwrqAA=="
- },
- "toidentifier": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.0.tgz",
- "integrity": "sha512-yaOH/Pk/VEhBWWTlhI+qXxDFXlejDGcQipMlyxda9nthulaxLZUNcUqFxokp0vcYnvteJln5FNQDRrxj3YcbVw=="
- }
+ "engines": {
+ "node": ">= 0.8.0"
}
},
- "d": {
+ "node_modules/csurf/node_modules/cookie": {
+ "version": "0.4.0",
+ "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.0.tgz",
+ "integrity": "sha512-+Hp8fLp57wnUSt0tY0tHEXh4voZRDnoIrZPqlo3DPiI4y9lwg/jqx+1Om94/W6ZaPDOUbnjOt/99w66zk+l1Xg==",
+ "engines": {
+ "node": ">= 0.6"
+ }
+ },
+ "node_modules/csurf/node_modules/depd": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz",
+ "integrity": "sha512-7emPTl6Dpo6JRXOXjLRxck+FlLRX5847cLKEn00PLAgc3g2hTZZgr+e4c2v6QpSmLeFP3n5yUo7ft6avBK/5jQ==",
+ "engines": {
+ "node": ">= 0.6"
+ }
+ },
+ "node_modules/csurf/node_modules/http-errors": {
+ "version": "1.7.3",
+ "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.7.3.tgz",
+ "integrity": "sha512-ZTTX0MWrsQ2ZAhA1cejAwDLycFsd7I7nVtnkT3Ol0aqodaKW+0CTZDQ1uBv5whptCnc8e8HeRRJxRs0kmm/Qfw==",
+ "dependencies": {
+ "depd": "~1.1.2",
+ "inherits": "2.0.4",
+ "setprototypeof": "1.1.1",
+ "statuses": ">= 1.5.0 < 2",
+ "toidentifier": "1.0.0"
+ },
+ "engines": {
+ "node": ">= 0.6"
+ }
+ },
+ "node_modules/csurf/node_modules/setprototypeof": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.1.tgz",
+ "integrity": "sha512-JvdAWfbXeIGaZ9cILp38HntZSFSo3mWg6xGcJJsd+d4aRMOqauag1C63dJfDw7OaMYwEbHMOxEZ1lqVRYP2OAw=="
+ },
+ "node_modules/csurf/node_modules/statuses": {
+ "version": "1.5.0",
+ "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz",
+ "integrity": "sha512-OpZ3zP+jT1PI7I8nemJX4AKmAX070ZkYPVWV/AaKTJl+tXCTGyVdC1a4SL8RUQYEwk/f34ZX8UTykN68FwrqAA==",
+ "engines": {
+ "node": ">= 0.6"
+ }
+ },
+ "node_modules/csurf/node_modules/toidentifier": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.0.tgz",
+ "integrity": "sha512-yaOH/Pk/VEhBWWTlhI+qXxDFXlejDGcQipMlyxda9nthulaxLZUNcUqFxokp0vcYnvteJln5FNQDRrxj3YcbVw==",
+ "engines": {
+ "node": ">=0.6"
+ }
+ },
+ "node_modules/d": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/d/-/d-1.0.1.tgz",
"integrity": "sha512-m62ShEObQ39CfralilEQRjH6oAMtNCV1xJyEx5LpRYUVN+EviphDgUc/F3hnYbADmkiNs67Y+3ylmlG7Lnu+FA==",
- "requires": {
+ "dependencies": {
"es5-ext": "^0.10.50",
"type": "^1.0.1"
}
},
- "dasherize": {
+ "node_modules/dasherize": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/dasherize/-/dasherize-2.0.0.tgz",
"integrity": "sha512-APql/TZ6FdLEpf2z7/X2a2zyqK8juYtqaSVqxw9mYoQ64CXkfU15AeLh8pUszT8+fnYjgm6t0aIYpWKJbnLkuA=="
},
- "date.js": {
+ "node_modules/date.js": {
"version": "0.3.3",
"resolved": "https://registry.npmjs.org/date.js/-/date.js-0.3.3.tgz",
"integrity": "sha512-HgigOS3h3k6HnW011nAb43c5xx5rBXk8P2v/WIT9Zv4koIaVXiH2BURguI78VVp+5Qc076T7OR378JViCnZtBw==",
- "requires": {
- "debug": "~3.1.0"
- },
"dependencies": {
- "debug": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz",
- "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==",
- "requires": {
- "ms": "2.0.0"
- }
- },
- "ms": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
- "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A=="
- }
+ "debug": "~3.1.0"
}
},
- "db-errors": {
+ "node_modules/date.js/node_modules/debug": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz",
+ "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==",
+ "dependencies": {
+ "ms": "2.0.0"
+ }
+ },
+ "node_modules/date.js/node_modules/ms": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
+ "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A=="
+ },
+ "node_modules/db-errors": {
"version": "0.2.3",
"resolved": "https://registry.npmjs.org/db-errors/-/db-errors-0.2.3.tgz",
"integrity": "sha512-OOgqgDuCavHXjYSJoV2yGhv6SeG8nk42aoCSoyXLZUH7VwFG27rxbavU1z+VrZbZjphw5UkDQwUlD21MwZpUng=="
},
- "debug": {
+ "node_modules/debug": {
"version": "4.3.2",
"resolved": "https://registry.npmjs.org/debug/-/debug-4.3.2.tgz",
"integrity": "sha512-mOp8wKcvj7XxC78zLgw/ZA+6TSgkoE2C/ienthhRD298T7UNwAg9diBpLRxC0mOezLl4B0xV7M0cCO6P/O0Xhw==",
- "requires": {
- "ms": "2.1.2"
- }
- },
- "decamelize": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz",
- "integrity": "sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA=="
- },
- "decamelize-keys": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/decamelize-keys/-/decamelize-keys-1.1.1.tgz",
- "integrity": "sha512-WiPxgEirIV0/eIOMcnFBA3/IJZAZqKnwAwWyvvdi4lsr1WCN22nhdf/3db3DoZcUjTV2SqfzIwNyp6y2xs3nmg==",
- "requires": {
- "decamelize": "^1.1.0",
- "map-obj": "^1.0.0"
- },
"dependencies": {
- "map-obj": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-1.0.1.tgz",
- "integrity": "sha512-7N/q3lyZ+LVCp7PzuxrJr4KMbBE2hW7BT7YNia330OFxIf4d3r5zVpicP2650l7CPN6RM9zOJRl3NGpqSiw3Eg=="
+ "ms": "2.1.2"
+ },
+ "engines": {
+ "node": ">=6.0"
+ },
+ "peerDependenciesMeta": {
+ "supports-color": {
+ "optional": true
}
}
},
- "decimal.js": {
+ "node_modules/decamelize": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz",
+ "integrity": "sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA==",
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/decamelize-keys": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/decamelize-keys/-/decamelize-keys-1.1.1.tgz",
+ "integrity": "sha512-WiPxgEirIV0/eIOMcnFBA3/IJZAZqKnwAwWyvvdi4lsr1WCN22nhdf/3db3DoZcUjTV2SqfzIwNyp6y2xs3nmg==",
+ "dependencies": {
+ "decamelize": "^1.1.0",
+ "map-obj": "^1.0.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/decamelize-keys/node_modules/map-obj": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-1.0.1.tgz",
+ "integrity": "sha512-7N/q3lyZ+LVCp7PzuxrJr4KMbBE2hW7BT7YNia330OFxIf4d3r5zVpicP2650l7CPN6RM9zOJRl3NGpqSiw3Eg==",
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/decimal.js": {
"version": "10.4.3",
"resolved": "https://registry.npmjs.org/decimal.js/-/decimal.js-10.4.3.tgz",
"integrity": "sha512-VBBaLc1MgL5XpzgIP7ny5Z6Nx3UrRkIViUkPUdtl9aya5amy3De1gsUUSB1g3+3sExYNjCAsAznmukyxCb1GRA=="
},
- "decode-uri-component": {
+ "node_modules/decode-uri-component": {
"version": "0.2.2",
"resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.2.tgz",
- "integrity": "sha512-FqUYQ+8o158GyGTrMFJms9qh3CqTKvAqgqsTnkLI8sKu0028orqBhxNMFkFen0zGyg6epACD32pjVk58ngIErQ=="
+ "integrity": "sha512-FqUYQ+8o158GyGTrMFJms9qh3CqTKvAqgqsTnkLI8sKu0028orqBhxNMFkFen0zGyg6epACD32pjVk58ngIErQ==",
+ "engines": {
+ "node": ">=0.10"
+ }
},
- "deep-eql": {
+ "node_modules/deep-eql": {
"version": "4.1.3",
"resolved": "https://registry.npmjs.org/deep-eql/-/deep-eql-4.1.3.tgz",
"integrity": "sha512-WaEtAOpRA1MQ0eohqZjpGD8zdI0Ovsm8mmFhaDN8dvDZzyoUMcYDnf5Y6iu7HTXxf8JDS23qWa4a+hKCDyOPzw==",
"dev": true,
- "requires": {
+ "dependencies": {
"type-detect": "^4.0.0"
+ },
+ "engines": {
+ "node": ">=6"
}
},
- "deep-extend": {
+ "node_modules/deep-extend": {
"version": "0.6.0",
"resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz",
- "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA=="
+ "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==",
+ "engines": {
+ "node": ">=4.0.0"
+ }
},
- "deep-is": {
+ "node_modules/deep-is": {
"version": "0.1.4",
"resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz",
"integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==",
"dev": true
},
- "deep-map": {
+ "node_modules/deep-map": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/deep-map/-/deep-map-2.0.0.tgz",
"integrity": "sha512-guIurpeZi1wiclCEEHpJmFx7Tr4gkmSBNcUpY67maP4BJeEa1JPVf9KXURcCI/cAHsvGtqVwQKI/X39rY735Rg==",
- "requires": {
+ "dependencies": {
"lodash": "^4.17.11",
"tslib": "^1.6.0"
},
- "dependencies": {
- "tslib": {
- "version": "1.14.1",
- "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz",
- "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg=="
- }
+ "engines": {
+ "node": ">=6"
}
},
- "deepdash": {
+ "node_modules/deep-map/node_modules/tslib": {
+ "version": "1.14.1",
+ "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz",
+ "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg=="
+ },
+ "node_modules/deepdash": {
"version": "5.3.9",
"resolved": "https://registry.npmjs.org/deepdash/-/deepdash-5.3.9.tgz",
"integrity": "sha512-GRzJ0q9PDj2T+J2fX+b+TlUa2NlZ11l6vJ8LHNKVGeZ8CfxCuJaCychTq07iDRTvlfO8435jlvVS1QXBrW9kMg==",
- "requires": {
+ "dependencies": {
"lodash": "^4.17.21",
"lodash-es": "^4.17.21"
}
},
- "default-compare": {
+ "node_modules/default-compare": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/default-compare/-/default-compare-1.0.0.tgz",
"integrity": "sha512-QWfXlM0EkAbqOCbD/6HjdwT19j7WCkMyiRhWilc4H9/5h/RzTF9gv5LYh1+CmDV5d1rki6KAWLtQale0xt20eQ==",
- "requires": {
+ "dependencies": {
"kind-of": "^5.0.2"
},
- "dependencies": {
- "kind-of": {
- "version": "5.1.0",
- "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz",
- "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw=="
- }
+ "engines": {
+ "node": ">=0.10.0"
}
},
- "default-require-extensions": {
+ "node_modules/default-compare/node_modules/kind-of": {
+ "version": "5.1.0",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz",
+ "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==",
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/default-require-extensions": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/default-require-extensions/-/default-require-extensions-2.0.0.tgz",
"integrity": "sha512-B0n2zDIXpzLzKeoEozorDSa1cHc1t0NjmxP0zuAxbizNU2MBqYJJKYXrrFdKuQliojXynrxgd7l4ahfg/+aA5g==",
"dev": true,
- "requires": {
+ "dependencies": {
"strip-bom": "^3.0.0"
},
- "dependencies": {
- "strip-bom": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz",
- "integrity": "sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==",
- "dev": true
- }
+ "engines": {
+ "node": ">=4"
}
},
- "default-resolution": {
+ "node_modules/default-require-extensions/node_modules/strip-bom": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz",
+ "integrity": "sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==",
+ "dev": true,
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/default-resolution": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/default-resolution/-/default-resolution-2.0.0.tgz",
- "integrity": "sha512-2xaP6GiwVwOEbXCGoJ4ufgC76m8cj805jrghScewJC2ZDsb9U0b4BIrba+xt/Uytyd0HvQ6+WymSRTfnYj59GQ=="
+ "integrity": "sha512-2xaP6GiwVwOEbXCGoJ4ufgC76m8cj805jrghScewJC2ZDsb9U0b4BIrba+xt/Uytyd0HvQ6+WymSRTfnYj59GQ==",
+ "engines": {
+ "node": ">= 0.10"
+ }
},
- "define-data-property": {
+ "node_modules/define-data-property": {
"version": "1.1.0",
"resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.0.tgz",
"integrity": "sha512-UzGwzcjyv3OtAvolTj1GoyNYzfFR+iqbGjcnBEENZVCpM4/Ng1yhGNvS3lR/xDS74Tb2wGG9WzNSNIOS9UVb2g==",
- "requires": {
+ "dependencies": {
"get-intrinsic": "^1.2.1",
"gopd": "^1.0.1",
"has-property-descriptors": "^1.0.0"
+ },
+ "engines": {
+ "node": ">= 0.4"
}
},
- "define-properties": {
+ "node_modules/define-properties": {
"version": "1.2.1",
"resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.2.1.tgz",
"integrity": "sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==",
- "requires": {
+ "dependencies": {
"define-data-property": "^1.0.1",
"has-property-descriptors": "^1.0.0",
"object-keys": "^1.1.1"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
}
},
- "define-property": {
+ "node_modules/define-property": {
"version": "2.0.2",
"resolved": "https://registry.npmjs.org/define-property/-/define-property-2.0.2.tgz",
"integrity": "sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==",
- "requires": {
+ "dependencies": {
"is-descriptor": "^1.0.2",
"isobject": "^3.0.1"
},
- "dependencies": {
- "is-accessor-descriptor": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz",
- "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==",
- "requires": {
- "kind-of": "^6.0.0"
- }
- },
- "is-data-descriptor": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz",
- "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==",
- "requires": {
- "kind-of": "^6.0.0"
- }
- },
- "is-descriptor": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz",
- "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==",
- "requires": {
- "is-accessor-descriptor": "^1.0.0",
- "is-data-descriptor": "^1.0.0",
- "kind-of": "^6.0.2"
- }
- }
+ "engines": {
+ "node": ">=0.10.0"
}
},
- "delayed-stream": {
+ "node_modules/define-property/node_modules/is-accessor-descriptor": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz",
+ "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==",
+ "dependencies": {
+ "kind-of": "^6.0.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/define-property/node_modules/is-data-descriptor": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz",
+ "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==",
+ "dependencies": {
+ "kind-of": "^6.0.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/define-property/node_modules/is-descriptor": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz",
+ "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==",
+ "dependencies": {
+ "is-accessor-descriptor": "^1.0.0",
+ "is-data-descriptor": "^1.0.0",
+ "kind-of": "^6.0.2"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/delayed-stream": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz",
- "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==",
- "dev": true
+ "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ=="
},
- "denque": {
+ "node_modules/denque": {
"version": "1.5.1",
"resolved": "https://registry.npmjs.org/denque/-/denque-1.5.1.tgz",
- "integrity": "sha512-XwE+iZ4D6ZUB7mfYRMb5wByE8L74HCn30FBN7sWnXksWc1LO1bPDl67pBR9o/kC4z/xSNAwkMYcGgqDV3BE3Hw=="
+ "integrity": "sha512-XwE+iZ4D6ZUB7mfYRMb5wByE8L74HCn30FBN7sWnXksWc1LO1bPDl67pBR9o/kC4z/xSNAwkMYcGgqDV3BE3Hw==",
+ "engines": {
+ "node": ">=0.10"
+ }
},
- "depd": {
+ "node_modules/depd": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz",
- "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw=="
+ "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==",
+ "engines": {
+ "node": ">= 0.8"
+ }
},
- "des.js": {
+ "node_modules/des.js": {
"version": "1.1.0",
"resolved": "https://registry.npmjs.org/des.js/-/des.js-1.1.0.tgz",
"integrity": "sha512-r17GxjhUCjSRy8aiJpr8/UadFIzMzJGexI3Nmz4ADi9LYSFx4gTBp80+NaX/YsXWWLhpZ7v/v/ubEc/bCNfKwg==",
"dev": true,
- "requires": {
+ "dependencies": {
"inherits": "^2.0.1",
"minimalistic-assert": "^1.0.0"
}
},
- "destroy": {
+ "node_modules/destroy": {
"version": "1.2.0",
"resolved": "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz",
- "integrity": "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg=="
+ "integrity": "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==",
+ "engines": {
+ "node": ">= 0.8",
+ "npm": "1.2.8000 || >= 1.4.16"
+ }
},
- "detect-file": {
+ "node_modules/detect-file": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/detect-file/-/detect-file-1.0.0.tgz",
- "integrity": "sha512-DtCOLG98P007x7wiiOmfI0fi3eIKyWiLTGJ2MDnVi/E04lWGbf+JzrRHMm0rgIIZJGtHpKpbVgLWHrv8xXpc3Q=="
+ "integrity": "sha512-DtCOLG98P007x7wiiOmfI0fi3eIKyWiLTGJ2MDnVi/E04lWGbf+JzrRHMm0rgIIZJGtHpKpbVgLWHrv8xXpc3Q==",
+ "engines": {
+ "node": ">=0.10.0"
+ }
},
- "devtools-protocol": {
+ "node_modules/devtools-protocol": {
"version": "0.0.901419",
"resolved": "https://registry.npmjs.org/devtools-protocol/-/devtools-protocol-0.0.901419.tgz",
"integrity": "sha512-4INMPwNm9XRpBukhNbF7OB6fNTTCaI8pzy/fXg0xQzAy5h3zL1P8xT3QazgKqBrb/hAYwIBizqDBZ7GtJE74QQ=="
},
- "dezalgo": {
+ "node_modules/dezalgo": {
"version": "1.0.4",
"resolved": "https://registry.npmjs.org/dezalgo/-/dezalgo-1.0.4.tgz",
"integrity": "sha512-rXSP0bf+5n0Qonsb+SVVfNfIsimO4HEtmnIpPHY8Q1UCzKlQrDMfdobr8nJOOsRgWCyMRqeSBQzmWUMq7zvVig==",
"dev": true,
- "requires": {
+ "dependencies": {
"asap": "^2.0.0",
"wrappy": "1"
}
},
- "diff": {
+ "node_modules/diff": {
"version": "3.5.0",
"resolved": "https://registry.npmjs.org/diff/-/diff-3.5.0.tgz",
"integrity": "sha512-A46qtFgd+g7pDZinpnwiRJtxbC1hpgf0uzP3iG89scHk0AUC7A1TGxf5OiiOUv/JMZR8GOt8hL900hV0bOy5xA==",
- "dev": true
+ "dev": true,
+ "engines": {
+ "node": ">=0.3.1"
+ }
},
- "diffie-hellman": {
+ "node_modules/diffie-hellman": {
"version": "5.0.3",
"resolved": "https://registry.npmjs.org/diffie-hellman/-/diffie-hellman-5.0.3.tgz",
"integrity": "sha512-kqag/Nl+f3GwyK25fhUMYj81BUOrZ9IuJsjIcDE5icNM9FJHAVm3VcUDxdLPoQtTuUylWm6ZIknYJwwaPxsUzg==",
"dev": true,
- "requires": {
+ "dependencies": {
"bn.js": "^4.1.0",
"miller-rabin": "^4.0.0",
"randombytes": "^2.0.0"
- },
- "dependencies": {
- "bn.js": {
- "version": "4.12.0",
- "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz",
- "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==",
- "dev": true
- }
}
},
- "dir-glob": {
+ "node_modules/diffie-hellman/node_modules/bn.js": {
+ "version": "4.12.0",
+ "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz",
+ "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==",
+ "dev": true
+ },
+ "node_modules/dir-glob": {
"version": "2.2.2",
"resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-2.2.2.tgz",
"integrity": "sha512-f9LBi5QWzIW3I6e//uxZoLBlUt9kcp66qo0sSCxL6YZKc75R1c4MFCoe/LaZiBGmgujvQdxc5Bn3QhfyvK5Hsw==",
- "requires": {
+ "dependencies": {
"path-type": "^3.0.0"
+ },
+ "engines": {
+ "node": ">=4"
}
},
- "doctrine": {
+ "node_modules/doctrine": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz",
"integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==",
"dev": true,
- "requires": {
+ "dependencies": {
"esutils": "^2.0.2"
+ },
+ "engines": {
+ "node": ">=6.0.0"
}
},
- "doctypes": {
+ "node_modules/doctypes": {
"version": "1.1.0",
"resolved": "https://registry.npmjs.org/doctypes/-/doctypes-1.1.0.tgz",
"integrity": "sha512-LLBi6pEqS6Do3EKQ3J0NqHWV5hhb78Pi8vvESYwyOy2c31ZEZVdtitdzsQsKb7878PEERhzUk0ftqGhG6Mz+pQ=="
},
- "domain-browser": {
+ "node_modules/domain-browser": {
"version": "1.2.0",
"resolved": "https://registry.npmjs.org/domain-browser/-/domain-browser-1.2.0.tgz",
"integrity": "sha512-jnjyiM6eRyZl2H+W8Q/zLMA481hzi0eszAaBUzIVnmYVDBbnLxVNnfu1HgEBvCbL+71FrxMl3E6lpKH7Ge3OXA==",
- "dev": true
+ "dev": true,
+ "engines": {
+ "node": ">=0.4",
+ "npm": ">=1.2"
+ }
},
- "dont-sniff-mimetype": {
+ "node_modules/dont-sniff-mimetype": {
"version": "1.1.0",
"resolved": "https://registry.npmjs.org/dont-sniff-mimetype/-/dont-sniff-mimetype-1.1.0.tgz",
- "integrity": "sha512-ZjI4zqTaxveH2/tTlzS1wFp+7ncxNZaIEWYg3lzZRHkKf5zPT/MnEG6WL0BhHMJUabkh8GeU5NL5j+rEUCb7Ug=="
+ "integrity": "sha512-ZjI4zqTaxveH2/tTlzS1wFp+7ncxNZaIEWYg3lzZRHkKf5zPT/MnEG6WL0BhHMJUabkh8GeU5NL5j+rEUCb7Ug==",
+ "engines": {
+ "node": ">=4.0.0"
+ }
},
- "dot-prop": {
+ "node_modules/dot-prop": {
"version": "4.2.1",
"resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-4.2.1.tgz",
"integrity": "sha512-l0p4+mIuJIua0mhxGoh4a+iNL9bmeK5DvnSVQa6T0OhrVmaEa1XScX5Etc673FePCJOArq/4Pa2cLGODUWTPOQ==",
- "requires": {
+ "dependencies": {
"is-obj": "^1.0.0"
+ },
+ "engines": {
+ "node": ">=4"
}
},
- "dotenv": {
+ "node_modules/dotenv": {
"version": "8.6.0",
"resolved": "https://registry.npmjs.org/dotenv/-/dotenv-8.6.0.tgz",
- "integrity": "sha512-IrPdXQsk2BbzvCBGBOTmmSH5SodmqZNt4ERAZDmW4CT+tL8VtvinqywuANaFu4bOMWki16nqf0e4oC0QIaDr/g=="
+ "integrity": "sha512-IrPdXQsk2BbzvCBGBOTmmSH5SodmqZNt4ERAZDmW4CT+tL8VtvinqywuANaFu4bOMWki16nqf0e4oC0QIaDr/g==",
+ "engines": {
+ "node": ">=10"
+ }
},
- "duplexer3": {
+ "node_modules/duplexer3": {
"version": "0.1.5",
"resolved": "https://registry.npmjs.org/duplexer3/-/duplexer3-0.1.5.tgz",
"integrity": "sha512-1A8za6ws41LQgv9HrE/66jyC5yuSjQ3L/KOpFtoBilsAK2iA2wuS5rTt1OCzIvtS2V7nVmedsUU+DGRcjBmOYA=="
},
- "duplexify": {
+ "node_modules/duplexify": {
"version": "3.7.1",
"resolved": "https://registry.npmjs.org/duplexify/-/duplexify-3.7.1.tgz",
"integrity": "sha512-07z8uv2wMyS51kKhD1KsdXJg5WQ6t93RneqRxUHnskXVtlYYkLqM0gqStQZ3pj073g687jPCHrqNfCzawLYh5g==",
- "requires": {
+ "dependencies": {
"end-of-stream": "^1.0.0",
"inherits": "^2.0.1",
"readable-stream": "^2.0.0",
"stream-shift": "^1.0.0"
}
},
- "each-props": {
+ "node_modules/each-props": {
"version": "1.3.2",
"resolved": "https://registry.npmjs.org/each-props/-/each-props-1.3.2.tgz",
"integrity": "sha512-vV0Hem3zAGkJAyU7JSjixeU66rwdynTAa1vofCrSA5fEln+m67Az9CcnkVD776/fsN/UjIWmBDoNRS6t6G9RfA==",
- "requires": {
+ "dependencies": {
"is-plain-object": "^2.0.1",
"object.defaults": "^1.1.0"
}
},
- "ecdsa-sig-formatter": {
+ "node_modules/ecdsa-sig-formatter": {
"version": "1.0.11",
"resolved": "https://registry.npmjs.org/ecdsa-sig-formatter/-/ecdsa-sig-formatter-1.0.11.tgz",
"integrity": "sha512-nagl3RYrbNv6kQkeJIpt6NJZy8twLB/2vtz6yN9Z4vRKHN4/QZJIEbqohALSgwKdnksuY3k5Addp5lg8sVoVcQ==",
- "requires": {
+ "dependencies": {
"safe-buffer": "^5.0.1"
}
},
- "ee-first": {
+ "node_modules/ee-first": {
"version": "1.1.1",
"resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz",
"integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow=="
},
- "electron-to-chromium": {
+ "node_modules/electron-to-chromium": {
"version": "1.4.531",
"resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.531.tgz",
- "integrity": "sha512-H6gi5E41Rn3/mhKlPaT1aIMg/71hTAqn0gYEllSuw9igNWtvQwu185jiCZoZD29n7Zukgh7GVZ3zGf0XvkhqjQ==",
- "dev": true
+ "integrity": "sha512-H6gi5E41Rn3/mhKlPaT1aIMg/71hTAqn0gYEllSuw9igNWtvQwu185jiCZoZD29n7Zukgh7GVZ3zGf0XvkhqjQ=="
},
- "elliptic": {
+ "node_modules/elliptic": {
"version": "6.5.4",
"resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.5.4.tgz",
"integrity": "sha512-iLhC6ULemrljPZb+QutR5TQGB+pdW6KGD5RSegS+8sorOZT+rdQFbsQFJgvN3eRqNALqJer4oQ16YvJHlU8hzQ==",
"dev": true,
- "requires": {
+ "dependencies": {
"bn.js": "^4.11.9",
"brorand": "^1.1.0",
"hash.js": "^1.0.0",
@@ -4375,85 +5589,100 @@
"inherits": "^2.0.4",
"minimalistic-assert": "^1.0.1",
"minimalistic-crypto-utils": "^1.0.1"
- },
- "dependencies": {
- "bn.js": {
- "version": "4.12.0",
- "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz",
- "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==",
- "dev": true
- }
}
},
- "emoji-regex": {
+ "node_modules/elliptic/node_modules/bn.js": {
+ "version": "4.12.0",
+ "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz",
+ "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==",
+ "dev": true
+ },
+ "node_modules/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
},
- "emojis-list": {
+ "node_modules/emojis-list": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-3.0.0.tgz",
"integrity": "sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q==",
- "dev": true
+ "dev": true,
+ "engines": {
+ "node": ">= 4"
+ }
},
- "enabled": {
+ "node_modules/enabled": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/enabled/-/enabled-2.0.0.tgz",
"integrity": "sha512-AKrN98kuwOzMIdAizXGI86UFBoo26CL21UM763y1h/GMSJ4/OHU9k2YlsmBpyScFo/wbLzWQJBMCW4+IO3/+OQ=="
},
- "encodeurl": {
+ "node_modules/encodeurl": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz",
- "integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w=="
+ "integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==",
+ "engines": {
+ "node": ">= 0.8"
+ }
},
- "end-of-stream": {
+ "node_modules/end-of-stream": {
"version": "1.4.4",
"resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz",
"integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==",
- "requires": {
+ "dependencies": {
"once": "^1.4.0"
}
},
- "enhanced-resolve": {
+ "node_modules/enhanced-resolve": {
"version": "5.15.0",
"resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.15.0.tgz",
"integrity": "sha512-LXYT42KJ7lpIKECr2mAXIaMldcNCh/7E0KBKOu4KSfkHmP+mZmSs+8V5gBAqisWBy0OO4W5Oyys0GO1Y8KtdKg==",
- "dev": true,
- "requires": {
+ "dependencies": {
"graceful-fs": "^4.2.4",
"tapable": "^2.2.0"
+ },
+ "engines": {
+ "node": ">=10.13.0"
}
},
- "envinfo": {
+ "node_modules/envinfo": {
"version": "7.10.0",
"resolved": "https://registry.npmjs.org/envinfo/-/envinfo-7.10.0.tgz",
"integrity": "sha512-ZtUjZO6l5mwTHvc1L9+1q5p/R3wTopcfqMW8r5t8SJSKqeVI/LtajORwRFEKpEFuekjD0VBjwu1HMxL4UalIRw==",
- "dev": true
+ "dev": true,
+ "bin": {
+ "envinfo": "dist/cli.js"
+ },
+ "engines": {
+ "node": ">=4"
+ }
},
- "error-ex": {
+ "node_modules/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==",
- "requires": {
+ "dependencies": {
"is-arrayish": "^0.2.1"
}
},
- "errorhandler": {
+ "node_modules/errorhandler": {
"version": "1.5.1",
"resolved": "https://registry.npmjs.org/errorhandler/-/errorhandler-1.5.1.tgz",
"integrity": "sha512-rcOwbfvP1WTViVoUjcfZicVzjhjTuhSMntHh6mW3IrEiyE6mJyXvsToJUJGlGlw/2xU9P5whlWNGlIDVeCiT4A==",
- "requires": {
+ "dependencies": {
"accepts": "~1.3.7",
"escape-html": "~1.0.3"
+ },
+ "engines": {
+ "node": ">= 0.8"
}
},
- "es-abstract": {
+ "node_modules/es-abstract": {
"version": "1.22.2",
"resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.22.2.tgz",
"integrity": "sha512-YoxfFcDmhjOgWPWsV13+2RNjq1F6UQnfs+8TftwNqtzlmFzEXvlUwdrNrYeaizfjQzRMxkZ6ElWMOJIFKdVqwA==",
"dev": true,
- "requires": {
+ "dependencies": {
"array-buffer-byte-length": "^1.0.0",
"arraybuffer.prototype.slice": "^1.0.2",
"available-typed-arrays": "^1.0.5",
@@ -4493,117 +5722,141 @@
"typed-array-length": "^1.0.4",
"unbox-primitive": "^1.0.2",
"which-typed-array": "^1.1.11"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
}
},
- "es-module-lexer": {
+ "node_modules/es-module-lexer": {
"version": "1.3.1",
"resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-1.3.1.tgz",
- "integrity": "sha512-JUFAyicQV9mXc3YRxPnDlrfBKpqt6hUYzz9/boprUJHs4e4KVr3XwOF70doO6gwXUor6EWZJAyWAfKki84t20Q==",
- "dev": true
+ "integrity": "sha512-JUFAyicQV9mXc3YRxPnDlrfBKpqt6hUYzz9/boprUJHs4e4KVr3XwOF70doO6gwXUor6EWZJAyWAfKki84t20Q=="
},
- "es-set-tostringtag": {
+ "node_modules/es-set-tostringtag": {
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.0.1.tgz",
"integrity": "sha512-g3OMbtlwY3QewlqAiMLI47KywjWZoEytKr8pf6iTC8uJq5bIAH52Z9pnQ8pVL6whrCto53JZDuUIsifGeLorTg==",
"dev": true,
- "requires": {
+ "dependencies": {
"get-intrinsic": "^1.1.3",
"has": "^1.0.3",
"has-tostringtag": "^1.0.0"
+ },
+ "engines": {
+ "node": ">= 0.4"
}
},
- "es-shim-unscopables": {
+ "node_modules/es-shim-unscopables": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/es-shim-unscopables/-/es-shim-unscopables-1.0.0.tgz",
"integrity": "sha512-Jm6GPcCdC30eMLbZ2x8z2WuRwAws3zTBBKuusffYVUrNj/GVSUAZ+xKMaUpfNDR5IbyNA5LJbaecoUVbmUcB1w==",
"dev": true,
- "requires": {
+ "dependencies": {
"has": "^1.0.3"
}
},
- "es-to-primitive": {
+ "node_modules/es-to-primitive": {
"version": "1.2.1",
"resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz",
"integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==",
"dev": true,
- "requires": {
+ "dependencies": {
"is-callable": "^1.1.4",
"is-date-object": "^1.0.1",
"is-symbol": "^1.0.2"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
}
},
- "es5-ext": {
+ "node_modules/es5-ext": {
"version": "0.10.62",
"resolved": "https://registry.npmjs.org/es5-ext/-/es5-ext-0.10.62.tgz",
"integrity": "sha512-BHLqn0klhEpnOKSrzn/Xsz2UIW8j+cGmo9JLzr8BiUapV8hPL9+FliFqjwr9ngW7jWdnxv6eO+/LqyhJVqgrjA==",
- "requires": {
+ "hasInstallScript": true,
+ "dependencies": {
"es6-iterator": "^2.0.3",
"es6-symbol": "^3.1.3",
"next-tick": "^1.1.0"
+ },
+ "engines": {
+ "node": ">=0.10"
}
},
- "es6-error": {
+ "node_modules/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
},
- "es6-iterator": {
+ "node_modules/es6-iterator": {
"version": "2.0.3",
"resolved": "https://registry.npmjs.org/es6-iterator/-/es6-iterator-2.0.3.tgz",
"integrity": "sha512-zw4SRzoUkd+cl+ZoE15A9o1oQd920Bb0iOJMQkQhl3jNc03YqVjAhG7scf9C5KWRU/R13Orf588uCC6525o02g==",
- "requires": {
+ "dependencies": {
"d": "1",
"es5-ext": "^0.10.35",
"es6-symbol": "^3.1.1"
}
},
- "es6-symbol": {
+ "node_modules/es6-symbol": {
"version": "3.1.3",
"resolved": "https://registry.npmjs.org/es6-symbol/-/es6-symbol-3.1.3.tgz",
"integrity": "sha512-NJ6Yn3FuDinBaBRWl/q5X/s4koRHBrgKAu+yGI6JCBeiu3qrcbJhwT2GeR/EXVfylRk8dpQVJoLEFhK+Mu31NA==",
- "requires": {
+ "dependencies": {
"d": "^1.0.1",
"ext": "^1.1.2"
}
},
- "es6-weak-map": {
+ "node_modules/es6-weak-map": {
"version": "2.0.3",
"resolved": "https://registry.npmjs.org/es6-weak-map/-/es6-weak-map-2.0.3.tgz",
"integrity": "sha512-p5um32HOTO1kP+w7PRnB+5lQ43Z6muuMuIMffvDN8ZB4GcnjLBV6zGStpbASIMk4DCAvEaamhe2zhyCb/QXXsA==",
- "requires": {
+ "dependencies": {
"d": "1",
"es5-ext": "^0.10.46",
"es6-iterator": "^2.0.3",
"es6-symbol": "^3.1.1"
}
},
- "escalade": {
+ "node_modules/escalade": {
"version": "3.1.1",
"resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz",
- "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw=="
+ "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==",
+ "engines": {
+ "node": ">=6"
+ }
},
- "escape-html": {
+ "node_modules/escape-html": {
"version": "1.0.3",
"resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz",
"integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow=="
},
- "escape-latex": {
+ "node_modules/escape-latex": {
"version": "1.2.0",
"resolved": "https://registry.npmjs.org/escape-latex/-/escape-latex-1.2.0.tgz",
"integrity": "sha512-nV5aVWW1K0wEiUIEdZ4erkGGH8mDxGyxSeqPzRNtWP7ataw+/olFObw7hujFWlVjNsaDFw5VZ5NzVSIqRgfTiw=="
},
- "escape-string-regexp": {
+ "node_modules/escape-string-regexp": {
"version": "1.0.5",
"resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz",
- "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg=="
+ "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==",
+ "engines": {
+ "node": ">=0.8.0"
+ }
},
- "eslint": {
+ "node_modules/eslint": {
"version": "8.50.0",
"resolved": "https://registry.npmjs.org/eslint/-/eslint-8.50.0.tgz",
"integrity": "sha512-FOnOGSuFuFLv/Sa+FDVRZl4GGVAAFFi8LecRsI5a1tMO5HIE8nCm4ivAlzt4dT3ol/PaaGC0rJEEXQmHJBGoOg==",
"dev": true,
- "requires": {
+ "dependencies": {
"@eslint-community/eslint-utils": "^4.2.0",
"@eslint-community/regexpp": "^4.6.1",
"@eslint/eslintrc": "^2.1.2",
@@ -4642,259 +5895,65 @@
"strip-ansi": "^6.0.1",
"text-table": "^0.2.0"
},
- "dependencies": {
- "ajv": {
- "version": "6.12.6",
- "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz",
- "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==",
- "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-regex": {
- "version": "5.0.1",
- "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz",
- "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==",
- "dev": true
- },
- "ansi-styles": {
- "version": "4.3.0",
- "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
- "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
- "dev": true,
- "requires": {
- "color-convert": "^2.0.1"
- }
- },
- "chalk": {
- "version": "4.1.2",
- "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz",
- "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==",
- "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
- },
- "cross-spawn": {
- "version": "7.0.3",
- "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz",
- "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==",
- "dev": true,
- "requires": {
- "path-key": "^3.1.0",
- "shebang-command": "^2.0.0",
- "which": "^2.0.1"
- }
- },
- "escape-string-regexp": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz",
- "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==",
- "dev": true
- },
- "eslint-scope": {
- "version": "7.2.2",
- "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.2.2.tgz",
- "integrity": "sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==",
- "dev": true,
- "requires": {
- "esrecurse": "^4.3.0",
- "estraverse": "^5.2.0"
- }
- },
- "estraverse": {
- "version": "5.3.0",
- "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz",
- "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==",
- "dev": true
- },
- "find-up": {
- "version": "5.0.0",
- "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz",
- "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==",
- "dev": true,
- "requires": {
- "locate-path": "^6.0.0",
- "path-exists": "^4.0.0"
- }
- },
- "glob-parent": {
- "version": "6.0.2",
- "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz",
- "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==",
- "dev": true,
- "requires": {
- "is-glob": "^4.0.3"
- }
- },
- "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
- },
- "ignore": {
- "version": "5.2.4",
- "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.4.tgz",
- "integrity": "sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ==",
- "dev": true
- },
- "is-path-inside": {
- "version": "3.0.3",
- "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz",
- "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==",
- "dev": true
- },
- "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
- },
- "locate-path": {
- "version": "6.0.0",
- "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz",
- "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==",
- "dev": true,
- "requires": {
- "p-locate": "^5.0.0"
- }
- },
- "p-limit": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz",
- "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==",
- "dev": true,
- "requires": {
- "yocto-queue": "^0.1.0"
- }
- },
- "p-locate": {
- "version": "5.0.0",
- "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz",
- "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==",
- "dev": true,
- "requires": {
- "p-limit": "^3.0.2"
- }
- },
- "path-exists": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz",
- "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==",
- "dev": true
- },
- "path-key": {
- "version": "3.1.1",
- "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz",
- "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==",
- "dev": true
- },
- "shebang-command": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz",
- "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==",
- "dev": true,
- "requires": {
- "shebang-regex": "^3.0.0"
- }
- },
- "shebang-regex": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz",
- "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==",
- "dev": true
- },
- "strip-ansi": {
- "version": "6.0.1",
- "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz",
- "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==",
- "dev": true,
- "requires": {
- "ansi-regex": "^5.0.1"
- }
- },
- "supports-color": {
- "version": "7.2.0",
- "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
- "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
- "dev": true,
- "requires": {
- "has-flag": "^4.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"
- }
- },
- "yocto-queue": {
- "version": "0.1.0",
- "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz",
- "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==",
- "dev": true
- }
+ "bin": {
+ "eslint": "bin/eslint.js"
+ },
+ "engines": {
+ "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
+ },
+ "funding": {
+ "url": "https://opencollective.com/eslint"
}
},
- "eslint-config-airbnb-base": {
+ "node_modules/eslint-config-airbnb-base": {
"version": "15.0.0",
"resolved": "https://registry.npmjs.org/eslint-config-airbnb-base/-/eslint-config-airbnb-base-15.0.0.tgz",
"integrity": "sha512-xaX3z4ZZIcFLvh2oUNvcX5oEofXda7giYmuplVxoOg5A7EXJMrUyqRgR+mhDhPK8LZ4PttFOBvCYDbX3sUoUig==",
"dev": true,
- "requires": {
+ "dependencies": {
"confusing-browser-globals": "^1.0.10",
"object.assign": "^4.1.2",
"object.entries": "^1.1.5",
"semver": "^6.3.0"
},
- "dependencies": {
- "semver": {
- "version": "6.3.1",
- "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz",
- "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==",
- "dev": true
- }
+ "engines": {
+ "node": "^10.12.0 || >=12.0.0"
+ },
+ "peerDependencies": {
+ "eslint": "^7.32.0 || ^8.2.0",
+ "eslint-plugin-import": "^2.25.2"
}
},
- "eslint-config-airbnb-typescript": {
+ "node_modules/eslint-config-airbnb-base/node_modules/semver": {
+ "version": "6.3.1",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz",
+ "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==",
+ "dev": true,
+ "bin": {
+ "semver": "bin/semver.js"
+ }
+ },
+ "node_modules/eslint-config-airbnb-typescript": {
"version": "17.1.0",
"resolved": "https://registry.npmjs.org/eslint-config-airbnb-typescript/-/eslint-config-airbnb-typescript-17.1.0.tgz",
"integrity": "sha512-GPxI5URre6dDpJ0CtcthSZVBAfI+Uw7un5OYNVxP2EYi3H81Jw701yFP7AU+/vCE7xBtFmjge7kfhhk4+RAiig==",
"dev": true,
- "requires": {
+ "dependencies": {
"eslint-config-airbnb-base": "^15.0.0"
+ },
+ "peerDependencies": {
+ "@typescript-eslint/eslint-plugin": "^5.13.0 || ^6.0.0",
+ "@typescript-eslint/parser": "^5.0.0 || ^6.0.0",
+ "eslint": "^7.32.0 || ^8.2.0",
+ "eslint-plugin-import": "^2.25.3"
}
},
- "eslint-friendly-formatter": {
+ "node_modules/eslint-friendly-formatter": {
"version": "4.0.1",
"resolved": "https://registry.npmjs.org/eslint-friendly-formatter/-/eslint-friendly-formatter-4.0.1.tgz",
"integrity": "sha512-+EhkPwkl/nf/fxT60yXPLAMQ+thUzfJV5rCGdUDdyM+exO3NB+07dwWiZTuyuOtTo/Ckh7W/3LJvWsB214c7ag==",
"dev": true,
- "requires": {
+ "dependencies": {
"chalk": "^2.0.1",
"coalescy": "1.0.0",
"extend": "^3.0.0",
@@ -4902,52 +5961,57 @@
"strip-ansi": "^4.0.0",
"text-table": "^0.2.0"
},
- "dependencies": {
- "ansi-regex": {
- "version": "3.0.1",
- "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.1.tgz",
- "integrity": "sha512-+O9Jct8wf++lXxxFc4hc8LsjaSq0HFzzL7cVsw8pRDIPdjKD2mT4ytDZlLuSBZ4cLKZFXIrMGO7DbQCtMJJMKw==",
- "dev": true
- },
- "strip-ansi": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz",
- "integrity": "sha512-4XaJ2zQdCzROZDivEVIDPkcQn8LMFSa8kj8Gxb/Lnwzv9A8VctNZ+lfivC/sV3ivW8ElJTERXZoPBRrZKkNKow==",
- "dev": true,
- "requires": {
- "ansi-regex": "^3.0.0"
- }
- }
+ "engines": {
+ "node": ">=0.10.0"
}
},
- "eslint-import-resolver-node": {
+ "node_modules/eslint-friendly-formatter/node_modules/ansi-regex": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.1.tgz",
+ "integrity": "sha512-+O9Jct8wf++lXxxFc4hc8LsjaSq0HFzzL7cVsw8pRDIPdjKD2mT4ytDZlLuSBZ4cLKZFXIrMGO7DbQCtMJJMKw==",
+ "dev": true,
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/eslint-friendly-formatter/node_modules/strip-ansi": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz",
+ "integrity": "sha512-4XaJ2zQdCzROZDivEVIDPkcQn8LMFSa8kj8Gxb/Lnwzv9A8VctNZ+lfivC/sV3ivW8ElJTERXZoPBRrZKkNKow==",
+ "dev": true,
+ "dependencies": {
+ "ansi-regex": "^3.0.0"
+ },
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/eslint-import-resolver-node": {
"version": "0.3.9",
"resolved": "https://registry.npmjs.org/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.9.tgz",
"integrity": "sha512-WFj2isz22JahUv+B788TlO3N6zL3nNJGU8CcZbPZvVEkBPaJdCV4vy5wyghty5ROFbCRnm132v8BScu5/1BQ8g==",
"dev": true,
- "requires": {
+ "dependencies": {
"debug": "^3.2.7",
"is-core-module": "^2.13.0",
"resolve": "^1.22.4"
- },
- "dependencies": {
- "debug": {
- "version": "3.2.7",
- "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz",
- "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==",
- "dev": true,
- "requires": {
- "ms": "^2.1.1"
- }
- }
}
},
- "eslint-import-resolver-typescript": {
+ "node_modules/eslint-import-resolver-node/node_modules/debug": {
+ "version": "3.2.7",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz",
+ "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==",
+ "dev": true,
+ "dependencies": {
+ "ms": "^2.1.1"
+ }
+ },
+ "node_modules/eslint-import-resolver-typescript": {
"version": "3.6.1",
"resolved": "https://registry.npmjs.org/eslint-import-resolver-typescript/-/eslint-import-resolver-typescript-3.6.1.tgz",
"integrity": "sha512-xgdptdoi5W3niYeuQxKmzVDTATvLYqhpwmykwsh7f6HIOStGWEIL9iqZgQDF9u9OEzrRwR8no5q2VT+bjAujTg==",
"dev": true,
- "requires": {
+ "dependencies": {
"debug": "^4.3.4",
"enhanced-resolve": "^5.12.0",
"eslint-module-utils": "^2.7.4",
@@ -4956,95 +6020,135 @@
"is-core-module": "^2.11.0",
"is-glob": "^4.0.3"
},
+ "engines": {
+ "node": "^14.18.0 || >=16.0.0"
+ },
+ "funding": {
+ "url": "https://opencollective.com/unts/projects/eslint-import-resolver-ts"
+ },
+ "peerDependencies": {
+ "eslint": "*",
+ "eslint-plugin-import": "*"
+ }
+ },
+ "node_modules/eslint-import-resolver-typescript/node_modules/@nodelib/fs.stat": {
+ "version": "2.0.5",
+ "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz",
+ "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==",
+ "dev": true,
+ "engines": {
+ "node": ">= 8"
+ }
+ },
+ "node_modules/eslint-import-resolver-typescript/node_modules/braces": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz",
+ "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==",
+ "dev": true,
"dependencies": {
- "@nodelib/fs.stat": {
- "version": "2.0.5",
- "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz",
- "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==",
- "dev": true
- },
- "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"
- }
- },
- "debug": {
- "version": "4.3.4",
- "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz",
- "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==",
- "dev": true,
- "requires": {
- "ms": "2.1.2"
- }
- },
- "fast-glob": {
- "version": "3.3.1",
- "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.1.tgz",
- "integrity": "sha512-kNFPyjhh5cKjrUltxs+wFx+ZkbRaxxmZ+X0ZU31SOsxCEtP9VPgtq2teZw1DebupL5GmDaNQ6yKMMVcM41iqDg==",
- "dev": true,
- "requires": {
- "@nodelib/fs.stat": "^2.0.2",
- "@nodelib/fs.walk": "^1.2.3",
- "glob-parent": "^5.1.2",
- "merge2": "^1.3.0",
- "micromatch": "^4.0.4"
- }
- },
- "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"
- }
- },
- "glob-parent": {
- "version": "5.1.2",
- "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz",
- "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==",
- "dev": true,
- "requires": {
- "is-glob": "^4.0.1"
- }
- },
- "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
- },
- "micromatch": {
- "version": "4.0.5",
- "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz",
- "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==",
- "dev": true,
- "requires": {
- "braces": "^3.0.2",
- "picomatch": "^2.3.1"
- }
- },
- "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"
- }
+ "fill-range": "^7.0.1"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/eslint-import-resolver-typescript/node_modules/debug": {
+ "version": "4.3.4",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz",
+ "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==",
+ "dev": true,
+ "dependencies": {
+ "ms": "2.1.2"
+ },
+ "engines": {
+ "node": ">=6.0"
+ },
+ "peerDependenciesMeta": {
+ "supports-color": {
+ "optional": true
}
}
},
- "eslint-import-resolver-webpack": {
+ "node_modules/eslint-import-resolver-typescript/node_modules/fast-glob": {
+ "version": "3.3.1",
+ "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.1.tgz",
+ "integrity": "sha512-kNFPyjhh5cKjrUltxs+wFx+ZkbRaxxmZ+X0ZU31SOsxCEtP9VPgtq2teZw1DebupL5GmDaNQ6yKMMVcM41iqDg==",
+ "dev": true,
+ "dependencies": {
+ "@nodelib/fs.stat": "^2.0.2",
+ "@nodelib/fs.walk": "^1.2.3",
+ "glob-parent": "^5.1.2",
+ "merge2": "^1.3.0",
+ "micromatch": "^4.0.4"
+ },
+ "engines": {
+ "node": ">=8.6.0"
+ }
+ },
+ "node_modules/eslint-import-resolver-typescript/node_modules/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,
+ "dependencies": {
+ "to-regex-range": "^5.0.1"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/eslint-import-resolver-typescript/node_modules/glob-parent": {
+ "version": "5.1.2",
+ "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz",
+ "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==",
+ "dev": true,
+ "dependencies": {
+ "is-glob": "^4.0.1"
+ },
+ "engines": {
+ "node": ">= 6"
+ }
+ },
+ "node_modules/eslint-import-resolver-typescript/node_modules/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,
+ "engines": {
+ "node": ">=0.12.0"
+ }
+ },
+ "node_modules/eslint-import-resolver-typescript/node_modules/micromatch": {
+ "version": "4.0.5",
+ "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz",
+ "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==",
+ "dev": true,
+ "dependencies": {
+ "braces": "^3.0.2",
+ "picomatch": "^2.3.1"
+ },
+ "engines": {
+ "node": ">=8.6"
+ }
+ },
+ "node_modules/eslint-import-resolver-typescript/node_modules/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,
+ "dependencies": {
+ "is-number": "^7.0.0"
+ },
+ "engines": {
+ "node": ">=8.0"
+ }
+ },
+ "node_modules/eslint-import-resolver-webpack": {
"version": "0.11.1",
"resolved": "https://registry.npmjs.org/eslint-import-resolver-webpack/-/eslint-import-resolver-webpack-0.11.1.tgz",
"integrity": "sha512-eK3zR7xVQR/MaoBWwGuD+CULYVuqe5QFlDukman71aI6IboCGzggDUohHNfu1ZeBnbHcUHJc0ywWoXUBNB6qdg==",
"dev": true,
- "requires": {
+ "dependencies": {
"array-find": "^1.0.0",
"debug": "^2.6.8",
"enhanced-resolve": "~0.9.0",
@@ -5056,109 +6160,138 @@
"resolve": "^1.10.0",
"semver": "^5.3.0"
},
- "dependencies": {
- "debug": {
- "version": "2.6.9",
- "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
- "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
- "dev": true,
- "requires": {
- "ms": "2.0.0"
- }
- },
- "enhanced-resolve": {
- "version": "0.9.1",
- "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-0.9.1.tgz",
- "integrity": "sha512-kxpoMgrdtkXZ5h0SeraBS1iRntpTpQ3R8ussdb38+UAFnMGX5DDyJXePm+OCHOcoXvHDw7mc2erbJBpDnl7TPw==",
- "dev": true,
- "requires": {
- "graceful-fs": "^4.1.2",
- "memory-fs": "^0.2.0",
- "tapable": "^0.1.8"
- }
- },
- "interpret": {
- "version": "1.4.0",
- "resolved": "https://registry.npmjs.org/interpret/-/interpret-1.4.0.tgz",
- "integrity": "sha512-agE4QfB2Lkp9uICn7BAqoscw4SZP9kTE2hxiFI3jBPmXJfdqiahTbUuKGsMoN2GtqL9AxhYioAcVvgsb1HvRbA==",
- "dev": true
- },
- "ms": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
- "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==",
- "dev": true
- },
- "semver": {
- "version": "5.7.2",
- "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz",
- "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==",
- "dev": true
- },
- "tapable": {
- "version": "0.1.10",
- "resolved": "https://registry.npmjs.org/tapable/-/tapable-0.1.10.tgz",
- "integrity": "sha512-jX8Et4hHg57mug1/079yitEKWGB3LCwoxByLsNim89LABq8NqgiX+6iYVOsq0vX8uJHkU+DZ5fnq95f800bEsQ==",
- "dev": true
- }
+ "peerDependencies": {
+ "eslint-plugin-import": ">=1.4.0",
+ "webpack": ">=1.11.0"
}
},
- "eslint-loader": {
+ "node_modules/eslint-import-resolver-webpack/node_modules/debug": {
+ "version": "2.6.9",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
+ "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
+ "dev": true,
+ "dependencies": {
+ "ms": "2.0.0"
+ }
+ },
+ "node_modules/eslint-import-resolver-webpack/node_modules/enhanced-resolve": {
+ "version": "0.9.1",
+ "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-0.9.1.tgz",
+ "integrity": "sha512-kxpoMgrdtkXZ5h0SeraBS1iRntpTpQ3R8ussdb38+UAFnMGX5DDyJXePm+OCHOcoXvHDw7mc2erbJBpDnl7TPw==",
+ "dev": true,
+ "dependencies": {
+ "graceful-fs": "^4.1.2",
+ "memory-fs": "^0.2.0",
+ "tapable": "^0.1.8"
+ },
+ "engines": {
+ "node": ">=0.6"
+ }
+ },
+ "node_modules/eslint-import-resolver-webpack/node_modules/interpret": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/interpret/-/interpret-1.4.0.tgz",
+ "integrity": "sha512-agE4QfB2Lkp9uICn7BAqoscw4SZP9kTE2hxiFI3jBPmXJfdqiahTbUuKGsMoN2GtqL9AxhYioAcVvgsb1HvRbA==",
+ "dev": true,
+ "engines": {
+ "node": ">= 0.10"
+ }
+ },
+ "node_modules/eslint-import-resolver-webpack/node_modules/ms": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
+ "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==",
+ "dev": true
+ },
+ "node_modules/eslint-import-resolver-webpack/node_modules/semver": {
+ "version": "5.7.2",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz",
+ "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==",
+ "dev": true,
+ "bin": {
+ "semver": "bin/semver"
+ }
+ },
+ "node_modules/eslint-import-resolver-webpack/node_modules/tapable": {
+ "version": "0.1.10",
+ "resolved": "https://registry.npmjs.org/tapable/-/tapable-0.1.10.tgz",
+ "integrity": "sha512-jX8Et4hHg57mug1/079yitEKWGB3LCwoxByLsNim89LABq8NqgiX+6iYVOsq0vX8uJHkU+DZ5fnq95f800bEsQ==",
+ "dev": true,
+ "engines": {
+ "node": ">=0.6"
+ }
+ },
+ "node_modules/eslint-loader": {
"version": "2.2.1",
"resolved": "https://registry.npmjs.org/eslint-loader/-/eslint-loader-2.2.1.tgz",
"integrity": "sha512-RLgV9hoCVsMLvOxCuNjdqOrUqIj9oJg8hF44vzJaYqsAHuY9G2YAeN3joQ9nxP0p5Th9iFSIpKo+SD8KISxXRg==",
+ "deprecated": "This loader has been deprecated. Please use eslint-webpack-plugin",
"dev": true,
- "requires": {
+ "dependencies": {
"loader-fs-cache": "^1.0.0",
"loader-utils": "^1.0.2",
"object-assign": "^4.0.1",
"object-hash": "^1.1.4",
"rimraf": "^2.6.1"
},
- "dependencies": {
- "object-hash": {
- "version": "1.3.1",
- "resolved": "https://registry.npmjs.org/object-hash/-/object-hash-1.3.1.tgz",
- "integrity": "sha512-OSuu/pU4ENM9kmREg0BdNrUDIl1heYa4mBZacJc+vVWz4GtAwu7jO8s4AIt2aGRUTqxykpWzI3Oqnsm13tTMDA==",
- "dev": true
- },
- "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"
- }
- }
+ "peerDependencies": {
+ "eslint": ">=1.6.0 <7.0.0",
+ "webpack": ">=2.0.0 <5.0.0"
}
},
- "eslint-module-utils": {
+ "node_modules/eslint-loader/node_modules/object-hash": {
+ "version": "1.3.1",
+ "resolved": "https://registry.npmjs.org/object-hash/-/object-hash-1.3.1.tgz",
+ "integrity": "sha512-OSuu/pU4ENM9kmREg0BdNrUDIl1heYa4mBZacJc+vVWz4GtAwu7jO8s4AIt2aGRUTqxykpWzI3Oqnsm13tTMDA==",
+ "dev": true,
+ "engines": {
+ "node": ">= 0.10.0"
+ }
+ },
+ "node_modules/eslint-loader/node_modules/rimraf": {
+ "version": "2.7.1",
+ "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz",
+ "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==",
+ "dev": true,
+ "dependencies": {
+ "glob": "^7.1.3"
+ },
+ "bin": {
+ "rimraf": "bin.js"
+ }
+ },
+ "node_modules/eslint-module-utils": {
"version": "2.8.0",
"resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.8.0.tgz",
"integrity": "sha512-aWajIYfsqCKRDgUfjEXNN/JlrzauMuSEy5sbd7WXbtW3EH6A6MpwEh42c7qD+MqQo9QMJ6fWLAeIJynx0g6OAw==",
"dev": true,
- "requires": {
+ "dependencies": {
"debug": "^3.2.7"
},
- "dependencies": {
- "debug": {
- "version": "3.2.7",
- "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz",
- "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==",
- "dev": true,
- "requires": {
- "ms": "^2.1.1"
- }
+ "engines": {
+ "node": ">=4"
+ },
+ "peerDependenciesMeta": {
+ "eslint": {
+ "optional": true
}
}
},
- "eslint-plugin-import": {
+ "node_modules/eslint-module-utils/node_modules/debug": {
+ "version": "3.2.7",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz",
+ "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==",
+ "dev": true,
+ "dependencies": {
+ "ms": "^2.1.1"
+ }
+ },
+ "node_modules/eslint-plugin-import": {
"version": "2.28.1",
"resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.28.1.tgz",
"integrity": "sha512-9I9hFlITvOV55alzoKBI+K9q74kv0iKMeY6av5+umsNwayt59fz692daGyjR+oStBQgx6nwR9rXldDev3Clw+A==",
"dev": true,
- "requires": {
+ "dependencies": {
"array-includes": "^3.1.6",
"array.prototype.findlastindex": "^1.2.2",
"array.prototype.flat": "^1.3.1",
@@ -5177,165 +6310,540 @@
"semver": "^6.3.1",
"tsconfig-paths": "^3.14.2"
},
- "dependencies": {
- "debug": {
- "version": "3.2.7",
- "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz",
- "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==",
- "dev": true,
- "requires": {
- "ms": "^2.1.1"
- }
- },
- "doctrine": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz",
- "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==",
- "dev": true,
- "requires": {
- "esutils": "^2.0.2"
- }
- },
- "semver": {
- "version": "6.3.1",
- "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz",
- "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==",
- "dev": true
- }
+ "engines": {
+ "node": ">=4"
+ },
+ "peerDependencies": {
+ "eslint": "^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 || ^8"
}
},
- "eslint-scope": {
+ "node_modules/eslint-plugin-import/node_modules/debug": {
+ "version": "3.2.7",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz",
+ "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==",
+ "dev": true,
+ "dependencies": {
+ "ms": "^2.1.1"
+ }
+ },
+ "node_modules/eslint-plugin-import/node_modules/doctrine": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz",
+ "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==",
+ "dev": true,
+ "dependencies": {
+ "esutils": "^2.0.2"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/eslint-plugin-import/node_modules/semver": {
+ "version": "6.3.1",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz",
+ "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==",
+ "dev": true,
+ "bin": {
+ "semver": "bin/semver.js"
+ }
+ },
+ "node_modules/eslint-scope": {
"version": "5.1.1",
"resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz",
"integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==",
- "dev": true,
- "requires": {
+ "dependencies": {
"esrecurse": "^4.3.0",
"estraverse": "^4.1.1"
+ },
+ "engines": {
+ "node": ">=8.0.0"
}
},
- "eslint-visitor-keys": {
+ "node_modules/eslint-visitor-keys": {
"version": "3.4.3",
"resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz",
"integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==",
+ "dev": true,
+ "engines": {
+ "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
+ },
+ "funding": {
+ "url": "https://opencollective.com/eslint"
+ }
+ },
+ "node_modules/eslint/node_modules/ajv": {
+ "version": "6.12.6",
+ "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz",
+ "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==",
+ "dev": true,
+ "dependencies": {
+ "fast-deep-equal": "^3.1.1",
+ "fast-json-stable-stringify": "^2.0.0",
+ "json-schema-traverse": "^0.4.1",
+ "uri-js": "^4.2.2"
+ },
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/epoberezkin"
+ }
+ },
+ "node_modules/eslint/node_modules/ansi-regex": {
+ "version": "5.0.1",
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz",
+ "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==",
+ "dev": true,
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/eslint/node_modules/ansi-styles": {
+ "version": "4.3.0",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
+ "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
+ "dev": true,
+ "dependencies": {
+ "color-convert": "^2.0.1"
+ },
+ "engines": {
+ "node": ">=8"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/ansi-styles?sponsor=1"
+ }
+ },
+ "node_modules/eslint/node_modules/chalk": {
+ "version": "4.1.2",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz",
+ "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==",
+ "dev": true,
+ "dependencies": {
+ "ansi-styles": "^4.1.0",
+ "supports-color": "^7.1.0"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/chalk?sponsor=1"
+ }
+ },
+ "node_modules/eslint/node_modules/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,
+ "dependencies": {
+ "color-name": "~1.1.4"
+ },
+ "engines": {
+ "node": ">=7.0.0"
+ }
+ },
+ "node_modules/eslint/node_modules/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
},
- "esm": {
+ "node_modules/eslint/node_modules/cross-spawn": {
+ "version": "7.0.3",
+ "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz",
+ "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==",
+ "dev": true,
+ "dependencies": {
+ "path-key": "^3.1.0",
+ "shebang-command": "^2.0.0",
+ "which": "^2.0.1"
+ },
+ "engines": {
+ "node": ">= 8"
+ }
+ },
+ "node_modules/eslint/node_modules/escape-string-regexp": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz",
+ "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==",
+ "dev": true,
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/eslint/node_modules/eslint-scope": {
+ "version": "7.2.2",
+ "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.2.2.tgz",
+ "integrity": "sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==",
+ "dev": true,
+ "dependencies": {
+ "esrecurse": "^4.3.0",
+ "estraverse": "^5.2.0"
+ },
+ "engines": {
+ "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
+ },
+ "funding": {
+ "url": "https://opencollective.com/eslint"
+ }
+ },
+ "node_modules/eslint/node_modules/estraverse": {
+ "version": "5.3.0",
+ "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz",
+ "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==",
+ "dev": true,
+ "engines": {
+ "node": ">=4.0"
+ }
+ },
+ "node_modules/eslint/node_modules/find-up": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz",
+ "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==",
+ "dev": true,
+ "dependencies": {
+ "locate-path": "^6.0.0",
+ "path-exists": "^4.0.0"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/eslint/node_modules/glob-parent": {
+ "version": "6.0.2",
+ "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz",
+ "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==",
+ "dev": true,
+ "dependencies": {
+ "is-glob": "^4.0.3"
+ },
+ "engines": {
+ "node": ">=10.13.0"
+ }
+ },
+ "node_modules/eslint/node_modules/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,
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/eslint/node_modules/ignore": {
+ "version": "5.2.4",
+ "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.4.tgz",
+ "integrity": "sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ==",
+ "dev": true,
+ "engines": {
+ "node": ">= 4"
+ }
+ },
+ "node_modules/eslint/node_modules/is-path-inside": {
+ "version": "3.0.3",
+ "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz",
+ "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==",
+ "dev": true,
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/eslint/node_modules/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
+ },
+ "node_modules/eslint/node_modules/locate-path": {
+ "version": "6.0.0",
+ "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz",
+ "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==",
+ "dev": true,
+ "dependencies": {
+ "p-locate": "^5.0.0"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/eslint/node_modules/p-limit": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz",
+ "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==",
+ "dev": true,
+ "dependencies": {
+ "yocto-queue": "^0.1.0"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/eslint/node_modules/p-locate": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz",
+ "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==",
+ "dev": true,
+ "dependencies": {
+ "p-limit": "^3.0.2"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/eslint/node_modules/path-exists": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz",
+ "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==",
+ "dev": true,
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/eslint/node_modules/path-key": {
+ "version": "3.1.1",
+ "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz",
+ "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==",
+ "dev": true,
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/eslint/node_modules/shebang-command": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz",
+ "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==",
+ "dev": true,
+ "dependencies": {
+ "shebang-regex": "^3.0.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/eslint/node_modules/shebang-regex": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz",
+ "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==",
+ "dev": true,
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/eslint/node_modules/strip-ansi": {
+ "version": "6.0.1",
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz",
+ "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==",
+ "dev": true,
+ "dependencies": {
+ "ansi-regex": "^5.0.1"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/eslint/node_modules/supports-color": {
+ "version": "7.2.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
+ "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
+ "dev": true,
+ "dependencies": {
+ "has-flag": "^4.0.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/eslint/node_modules/which": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz",
+ "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==",
+ "dev": true,
+ "dependencies": {
+ "isexe": "^2.0.0"
+ },
+ "bin": {
+ "node-which": "bin/node-which"
+ },
+ "engines": {
+ "node": ">= 8"
+ }
+ },
+ "node_modules/eslint/node_modules/yocto-queue": {
+ "version": "0.1.0",
+ "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz",
+ "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==",
+ "dev": true,
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/esm": {
"version": "3.2.25",
"resolved": "https://registry.npmjs.org/esm/-/esm-3.2.25.tgz",
- "integrity": "sha512-U1suiZ2oDVWv4zPO56S0NcR5QriEahGtdN2OR6FiOG4WJvcjBVFB0qI4+eKoWFH483PKGuLuu6V8Z4T5g63UVA=="
+ "integrity": "sha512-U1suiZ2oDVWv4zPO56S0NcR5QriEahGtdN2OR6FiOG4WJvcjBVFB0qI4+eKoWFH483PKGuLuu6V8Z4T5g63UVA==",
+ "engines": {
+ "node": ">=6"
+ }
},
- "espree": {
+ "node_modules/espree": {
"version": "9.6.1",
"resolved": "https://registry.npmjs.org/espree/-/espree-9.6.1.tgz",
"integrity": "sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==",
"dev": true,
- "requires": {
+ "dependencies": {
"acorn": "^8.9.0",
"acorn-jsx": "^5.3.2",
"eslint-visitor-keys": "^3.4.1"
},
- "dependencies": {
- "acorn": {
- "version": "8.10.0",
- "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.10.0.tgz",
- "integrity": "sha512-F0SAmZ8iUtS//m8DmCTA0jlh6TDKkHQyK6xc6V4KDTyZKA9dnvX9/3sRTVQrWm79glUAZbnmmNcdYwUIHWVybw==",
- "dev": true
- }
+ "engines": {
+ "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
+ },
+ "funding": {
+ "url": "https://opencollective.com/eslint"
}
},
- "esprima": {
+ "node_modules/espree/node_modules/acorn": {
+ "version": "8.10.0",
+ "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.10.0.tgz",
+ "integrity": "sha512-F0SAmZ8iUtS//m8DmCTA0jlh6TDKkHQyK6xc6V4KDTyZKA9dnvX9/3sRTVQrWm79glUAZbnmmNcdYwUIHWVybw==",
+ "dev": true,
+ "bin": {
+ "acorn": "bin/acorn"
+ },
+ "engines": {
+ "node": ">=0.4.0"
+ }
+ },
+ "node_modules/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
+ "dev": true,
+ "bin": {
+ "esparse": "bin/esparse.js",
+ "esvalidate": "bin/esvalidate.js"
+ },
+ "engines": {
+ "node": ">=4"
+ }
},
- "esquery": {
+ "node_modules/esquery": {
"version": "1.5.0",
"resolved": "https://registry.npmjs.org/esquery/-/esquery-1.5.0.tgz",
"integrity": "sha512-YQLXUplAwJgCydQ78IMJywZCceoqk1oH01OERdSAJc/7U2AylwjhSCLDEtqwg811idIS/9fIU5GjG73IgjKMVg==",
"dev": true,
- "requires": {
+ "dependencies": {
"estraverse": "^5.1.0"
},
- "dependencies": {
- "estraverse": {
- "version": "5.3.0",
- "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz",
- "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==",
- "dev": true
- }
+ "engines": {
+ "node": ">=0.10"
}
},
- "esrecurse": {
+ "node_modules/esquery/node_modules/estraverse": {
+ "version": "5.3.0",
+ "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz",
+ "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==",
+ "dev": true,
+ "engines": {
+ "node": ">=4.0"
+ }
+ },
+ "node_modules/esrecurse": {
"version": "4.3.0",
"resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz",
"integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==",
- "dev": true,
- "requires": {
+ "dependencies": {
"estraverse": "^5.2.0"
},
- "dependencies": {
- "estraverse": {
- "version": "5.3.0",
- "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz",
- "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==",
- "dev": true
- }
+ "engines": {
+ "node": ">=4.0"
}
},
- "estraverse": {
+ "node_modules/esrecurse/node_modules/estraverse": {
+ "version": "5.3.0",
+ "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz",
+ "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==",
+ "engines": {
+ "node": ">=4.0"
+ }
+ },
+ "node_modules/estraverse": {
"version": "4.3.0",
"resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz",
"integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==",
- "dev": true
+ "engines": {
+ "node": ">=4.0"
+ }
},
- "esutils": {
+ "node_modules/esutils": {
"version": "2.0.3",
"resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz",
"integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==",
- "dev": true
+ "dev": true,
+ "engines": {
+ "node": ">=0.10.0"
+ }
},
- "etag": {
+ "node_modules/etag": {
"version": "1.8.1",
"resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz",
- "integrity": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg=="
+ "integrity": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==",
+ "engines": {
+ "node": ">= 0.6"
+ }
},
- "event-dispatch": {
+ "node_modules/event-dispatch": {
"version": "0.4.1",
"resolved": "https://registry.npmjs.org/event-dispatch/-/event-dispatch-0.4.1.tgz",
"integrity": "sha512-+nfoCngxvUdziP3Svtt7Iuqu3mKf0Tjoxez0V/ew4BtW2scu3tPVZF8i4Kw3SsVCH75XSWjfV0zC0MWh2GQEeA==",
- "requires": {
+ "dependencies": {
"fs": "0.0.2",
"path": "^0.11.14"
}
},
- "eventemitter2": {
+ "node_modules/eventemitter2": {
"version": "6.4.9",
"resolved": "https://registry.npmjs.org/eventemitter2/-/eventemitter2-6.4.9.tgz",
"integrity": "sha512-JEPTiaOt9f04oa6NOkc4aH+nVp5I3wEjpHbIPqfgCdD5v5bUzy7xQqwcVO2aDQgOWhI28da57HksMrzK9HlRxg=="
},
- "events": {
+ "node_modules/events": {
"version": "3.3.0",
"resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz",
"integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==",
- "dev": true
+ "engines": {
+ "node": ">=0.8.x"
+ }
},
- "evp_bytestokey": {
+ "node_modules/evp_bytestokey": {
"version": "1.0.3",
"resolved": "https://registry.npmjs.org/evp_bytestokey/-/evp_bytestokey-1.0.3.tgz",
"integrity": "sha512-/f2Go4TognH/KvCISP7OUsHn85hT9nUkxxA9BEWxFn+Oj9o8ZNLm/40hdlgSLyuOimsrTKLUMEorQexp/aPQeA==",
"dev": true,
- "requires": {
+ "dependencies": {
"md5.js": "^1.3.4",
"safe-buffer": "^5.1.1"
}
},
- "execa": {
+ "node_modules/execa": {
"version": "0.7.0",
"resolved": "https://registry.npmjs.org/execa/-/execa-0.7.0.tgz",
"integrity": "sha512-RztN09XglpYI7aBBrJCPW95jEH7YF1UEPOoX9yDhUTPdp7mK+CQvnLTuD10BNXZ3byLTu2uehZ8EcKT/4CGiFw==",
- "requires": {
+ "dependencies": {
"cross-spawn": "^5.0.1",
"get-stream": "^3.0.0",
"is-stream": "^1.1.0",
@@ -5343,13 +6851,16 @@
"p-finally": "^1.0.0",
"signal-exit": "^3.0.0",
"strip-eof": "^1.0.0"
+ },
+ "engines": {
+ "node": ">=4"
}
},
- "expand-brackets": {
+ "node_modules/expand-brackets": {
"version": "2.1.4",
"resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-2.1.4.tgz",
"integrity": "sha512-w/ozOKR9Obk3qoWeY/WDi6MFta9AoMR+zud60mdnbniMcBxRuFJyDt2LdX/14A1UABeqk+Uk+LDfUpvoGKppZA==",
- "requires": {
+ "dependencies": {
"debug": "^2.3.3",
"define-property": "^0.2.5",
"extend-shallow": "^2.0.1",
@@ -5358,51 +6869,61 @@
"snapdragon": "^0.8.1",
"to-regex": "^3.0.1"
},
- "dependencies": {
- "debug": {
- "version": "2.6.9",
- "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
- "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
- "requires": {
- "ms": "2.0.0"
- }
- },
- "define-property": {
- "version": "0.2.5",
- "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz",
- "integrity": "sha512-Rr7ADjQZenceVOAKop6ALkkRAmH1A4Gx9hV/7ZujPUN2rkATqFO0JZLZInbAjpZYoJ1gUx8MRMQVkYemcbMSTA==",
- "requires": {
- "is-descriptor": "^0.1.0"
- }
- },
- "extend-shallow": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
- "integrity": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==",
- "requires": {
- "is-extendable": "^0.1.0"
- }
- },
- "ms": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
- "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A=="
- }
+ "engines": {
+ "node": ">=0.10.0"
}
},
- "expand-tilde": {
+ "node_modules/expand-brackets/node_modules/debug": {
+ "version": "2.6.9",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
+ "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
+ "dependencies": {
+ "ms": "2.0.0"
+ }
+ },
+ "node_modules/expand-brackets/node_modules/define-property": {
+ "version": "0.2.5",
+ "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz",
+ "integrity": "sha512-Rr7ADjQZenceVOAKop6ALkkRAmH1A4Gx9hV/7ZujPUN2rkATqFO0JZLZInbAjpZYoJ1gUx8MRMQVkYemcbMSTA==",
+ "dependencies": {
+ "is-descriptor": "^0.1.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/expand-brackets/node_modules/extend-shallow": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
+ "integrity": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==",
+ "dependencies": {
+ "is-extendable": "^0.1.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/expand-brackets/node_modules/ms": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
+ "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A=="
+ },
+ "node_modules/expand-tilde": {
"version": "2.0.2",
"resolved": "https://registry.npmjs.org/expand-tilde/-/expand-tilde-2.0.2.tgz",
"integrity": "sha512-A5EmesHW6rfnZ9ysHQjPdJRni0SRar0tjtG5MNtm9n5TUvsYU8oozprtRD4AqHxcZWWlVuAmQo2nWKfN9oyjTw==",
- "requires": {
+ "dependencies": {
"homedir-polyfill": "^1.0.1"
+ },
+ "engines": {
+ "node": ">=0.10.0"
}
},
- "express": {
+ "node_modules/express": {
"version": "4.18.2",
"resolved": "https://registry.npmjs.org/express/-/express-4.18.2.tgz",
"integrity": "sha512-5/PsL6iGPdfQ/lKM1UuielYgv3BUoJfz1aUwU9vHZ+J7gyvwdQXFEBIEIaxeGf0GIcreATNyBExtalisDbuMqQ==",
- "requires": {
+ "dependencies": {
"accepts": "~1.3.8",
"array-flatten": "1.1.1",
"body-parser": "1.20.1",
@@ -5435,139 +6956,158 @@
"utils-merge": "1.0.1",
"vary": "~1.1.2"
},
- "dependencies": {
- "body-parser": {
- "version": "1.20.1",
- "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.1.tgz",
- "integrity": "sha512-jWi7abTbYwajOytWCQc37VulmWiRae5RyTpaCyDcS5/lMdtwSz5lOpDE67srw/HYe35f1z3fDQw+3txg7gNtWw==",
- "requires": {
- "bytes": "3.1.2",
- "content-type": "~1.0.4",
- "debug": "2.6.9",
- "depd": "2.0.0",
- "destroy": "1.2.0",
- "http-errors": "2.0.0",
- "iconv-lite": "0.4.24",
- "on-finished": "2.4.1",
- "qs": "6.11.0",
- "raw-body": "2.5.1",
- "type-is": "~1.6.18",
- "unpipe": "1.0.0"
- }
- },
- "debug": {
- "version": "2.6.9",
- "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
- "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
- "requires": {
- "ms": "2.0.0"
- }
- },
- "ms": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
- "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A=="
- },
- "raw-body": {
- "version": "2.5.1",
- "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.1.tgz",
- "integrity": "sha512-qqJBtEyVgS0ZmPGdCFPWJ3FreoqvG4MVQln/kCgF7Olq95IbOp0/BWyMwbdtn4VTvkM8Y7khCQ2Xgk/tcrCXig==",
- "requires": {
- "bytes": "3.1.2",
- "http-errors": "2.0.0",
- "iconv-lite": "0.4.24",
- "unpipe": "1.0.0"
- }
- }
+ "engines": {
+ "node": ">= 0.10.0"
}
},
- "express-basic-auth": {
+ "node_modules/express-basic-auth": {
"version": "1.2.1",
"resolved": "https://registry.npmjs.org/express-basic-auth/-/express-basic-auth-1.2.1.tgz",
"integrity": "sha512-L6YQ1wQ/mNjVLAmK3AG1RK6VkokA1BIY6wmiH304Xtt/cLTps40EusZsU1Uop+v9lTDPxdtzbFmdXfFO3KEnwA==",
- "requires": {
+ "dependencies": {
"basic-auth": "^2.0.1"
}
},
- "express-boom": {
+ "node_modules/express-boom": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/express-boom/-/express-boom-3.0.0.tgz",
"integrity": "sha512-/esN6Am8YE1rzRsi+vBpJkdr8O+GX+oBjRE/hEuBu6Y3uyS9y026XptRZduAMYS8KxyLzXM5Qh+RlnqLOR1pVQ==",
- "requires": {
+ "dependencies": {
"boom": "^7.3.x"
}
},
- "express-fileupload": {
+ "node_modules/express-fileupload": {
"version": "1.4.1",
"resolved": "https://registry.npmjs.org/express-fileupload/-/express-fileupload-1.4.1.tgz",
"integrity": "sha512-9F6SkbxbEOA9cYOBZ8tnn238jL+bGfacQuUO/JqPWp5t+piUcoDcESvKwAXsQV7IHGxmI5bMj3QxMWOKOIsMCg==",
- "requires": {
+ "dependencies": {
"busboy": "^1.6.0"
+ },
+ "engines": {
+ "node": ">=12.0.0"
}
},
- "express-oauth-server": {
+ "node_modules/express-oauth-server": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/express-oauth-server/-/express-oauth-server-2.0.0.tgz",
"integrity": "sha512-+UrTbvU7u3LVnoUavzO7QJgSqiEZREKprCZYrDEVoSszrO4t8f/BBPbY3hQOuuatoS0PgDFLaDKQsGNtAgPm5w==",
- "requires": {
+ "dependencies": {
"bluebird": "^3.0.5",
"express": "^4.13.3",
"oauth2-server": "3.0.0"
+ },
+ "engines": {
+ "node": ">=0.11"
}
},
- "express-validator": {
+ "node_modules/express-validator": {
"version": "6.15.0",
"resolved": "https://registry.npmjs.org/express-validator/-/express-validator-6.15.0.tgz",
"integrity": "sha512-r05VYoBL3i2pswuehoFSy+uM8NBuVaY7avp5qrYjQBDzagx2Z5A77FZqPT8/gNLF3HopWkIzaTFaC4JysWXLqg==",
- "requires": {
+ "dependencies": {
"lodash": "^4.17.21",
"validator": "^13.9.0"
+ },
+ "engines": {
+ "node": ">= 8.0.0"
}
},
- "ext": {
+ "node_modules/express/node_modules/body-parser": {
+ "version": "1.20.1",
+ "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.1.tgz",
+ "integrity": "sha512-jWi7abTbYwajOytWCQc37VulmWiRae5RyTpaCyDcS5/lMdtwSz5lOpDE67srw/HYe35f1z3fDQw+3txg7gNtWw==",
+ "dependencies": {
+ "bytes": "3.1.2",
+ "content-type": "~1.0.4",
+ "debug": "2.6.9",
+ "depd": "2.0.0",
+ "destroy": "1.2.0",
+ "http-errors": "2.0.0",
+ "iconv-lite": "0.4.24",
+ "on-finished": "2.4.1",
+ "qs": "6.11.0",
+ "raw-body": "2.5.1",
+ "type-is": "~1.6.18",
+ "unpipe": "1.0.0"
+ },
+ "engines": {
+ "node": ">= 0.8",
+ "npm": "1.2.8000 || >= 1.4.16"
+ }
+ },
+ "node_modules/express/node_modules/debug": {
+ "version": "2.6.9",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
+ "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
+ "dependencies": {
+ "ms": "2.0.0"
+ }
+ },
+ "node_modules/express/node_modules/ms": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
+ "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A=="
+ },
+ "node_modules/express/node_modules/raw-body": {
+ "version": "2.5.1",
+ "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.1.tgz",
+ "integrity": "sha512-qqJBtEyVgS0ZmPGdCFPWJ3FreoqvG4MVQln/kCgF7Olq95IbOp0/BWyMwbdtn4VTvkM8Y7khCQ2Xgk/tcrCXig==",
+ "dependencies": {
+ "bytes": "3.1.2",
+ "http-errors": "2.0.0",
+ "iconv-lite": "0.4.24",
+ "unpipe": "1.0.0"
+ },
+ "engines": {
+ "node": ">= 0.8"
+ }
+ },
+ "node_modules/ext": {
"version": "1.7.0",
"resolved": "https://registry.npmjs.org/ext/-/ext-1.7.0.tgz",
"integrity": "sha512-6hxeJYaL110a9b5TEJSj0gojyHQAmA2ch5Os+ySCiA1QGdS697XWY1pzsrSjqA9LDEEgdB/KypIlR59RcLuHYw==",
- "requires": {
- "type": "^2.7.2"
- },
"dependencies": {
- "type": {
- "version": "2.7.2",
- "resolved": "https://registry.npmjs.org/type/-/type-2.7.2.tgz",
- "integrity": "sha512-dzlvlNlt6AXU7EBSfpAscydQ7gXB+pPGsPnfJnZpiNJBDj7IaJzQlBZYGdEi4R9HmPdBv2XmWJ6YUtoTa7lmCw=="
- }
+ "type": "^2.7.2"
}
},
- "extend": {
+ "node_modules/ext/node_modules/type": {
+ "version": "2.7.2",
+ "resolved": "https://registry.npmjs.org/type/-/type-2.7.2.tgz",
+ "integrity": "sha512-dzlvlNlt6AXU7EBSfpAscydQ7gXB+pPGsPnfJnZpiNJBDj7IaJzQlBZYGdEi4R9HmPdBv2XmWJ6YUtoTa7lmCw=="
+ },
+ "node_modules/extend": {
"version": "3.0.2",
"resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz",
"integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g=="
},
- "extend-shallow": {
+ "node_modules/extend-shallow": {
"version": "3.0.2",
"resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz",
"integrity": "sha512-BwY5b5Ql4+qZoefgMj2NUmx+tehVTH/Kf4k1ZEtOHNFcm2wSxMRo992l6X3TIgni2eZVTZ85xMOjF31fwZAj6Q==",
- "requires": {
+ "dependencies": {
"assign-symbols": "^1.0.0",
"is-extendable": "^1.0.1"
},
- "dependencies": {
- "is-extendable": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz",
- "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==",
- "requires": {
- "is-plain-object": "^2.0.4"
- }
- }
+ "engines": {
+ "node": ">=0.10.0"
}
},
- "extglob": {
+ "node_modules/extend-shallow/node_modules/is-extendable": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz",
+ "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==",
+ "dependencies": {
+ "is-plain-object": "^2.0.4"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/extglob": {
"version": "2.0.4",
"resolved": "https://registry.npmjs.org/extglob/-/extglob-2.0.4.tgz",
"integrity": "sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==",
- "requires": {
+ "dependencies": {
"array-unique": "^0.3.2",
"define-property": "^1.0.0",
"expand-brackets": "^2.1.4",
@@ -5577,216 +7117,275 @@
"snapdragon": "^0.8.1",
"to-regex": "^3.0.1"
},
- "dependencies": {
- "define-property": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz",
- "integrity": "sha512-cZTYKFWspt9jZsMscWo8sc/5lbPC9Q0N5nBLgb+Yd915iL3udB1uFgS3B8YCx66UVHq018DAVFoee7x+gxggeA==",
- "requires": {
- "is-descriptor": "^1.0.0"
- }
- },
- "extend-shallow": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
- "integrity": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==",
- "requires": {
- "is-extendable": "^0.1.0"
- }
- },
- "is-accessor-descriptor": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz",
- "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==",
- "requires": {
- "kind-of": "^6.0.0"
- }
- },
- "is-data-descriptor": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz",
- "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==",
- "requires": {
- "kind-of": "^6.0.0"
- }
- },
- "is-descriptor": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz",
- "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==",
- "requires": {
- "is-accessor-descriptor": "^1.0.0",
- "is-data-descriptor": "^1.0.0",
- "kind-of": "^6.0.2"
- }
- }
+ "engines": {
+ "node": ">=0.10.0"
}
},
- "extract-zip": {
+ "node_modules/extglob/node_modules/define-property": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz",
+ "integrity": "sha512-cZTYKFWspt9jZsMscWo8sc/5lbPC9Q0N5nBLgb+Yd915iL3udB1uFgS3B8YCx66UVHq018DAVFoee7x+gxggeA==",
+ "dependencies": {
+ "is-descriptor": "^1.0.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/extglob/node_modules/extend-shallow": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
+ "integrity": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==",
+ "dependencies": {
+ "is-extendable": "^0.1.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/extglob/node_modules/is-accessor-descriptor": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz",
+ "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==",
+ "dependencies": {
+ "kind-of": "^6.0.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/extglob/node_modules/is-data-descriptor": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz",
+ "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==",
+ "dependencies": {
+ "kind-of": "^6.0.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/extglob/node_modules/is-descriptor": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz",
+ "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==",
+ "dependencies": {
+ "is-accessor-descriptor": "^1.0.0",
+ "is-data-descriptor": "^1.0.0",
+ "kind-of": "^6.0.2"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/extract-zip": {
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/extract-zip/-/extract-zip-2.0.1.tgz",
"integrity": "sha512-GDhU9ntwuKyGXdZBUgTIe+vXnWj0fppUEtMDL0+idd5Sta8TGpHssn/eusA9mrPr9qNDym6SxAYZjNvCn/9RBg==",
- "requires": {
- "@types/yauzl": "^2.9.1",
+ "dependencies": {
"debug": "^4.1.1",
"get-stream": "^5.1.0",
"yauzl": "^2.10.0"
},
- "dependencies": {
- "get-stream": {
- "version": "5.2.0",
- "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz",
- "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==",
- "requires": {
- "pump": "^3.0.0"
- }
- },
- "pump": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz",
- "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==",
- "requires": {
- "end-of-stream": "^1.1.0",
- "once": "^1.3.1"
- }
- }
+ "bin": {
+ "extract-zip": "cli.js"
+ },
+ "engines": {
+ "node": ">= 10.17.0"
+ },
+ "optionalDependencies": {
+ "@types/yauzl": "^2.9.1"
}
},
- "faker": {
+ "node_modules/extract-zip/node_modules/get-stream": {
+ "version": "5.2.0",
+ "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz",
+ "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==",
+ "dependencies": {
+ "pump": "^3.0.0"
+ },
+ "engines": {
+ "node": ">=8"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/extract-zip/node_modules/pump": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz",
+ "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==",
+ "dependencies": {
+ "end-of-stream": "^1.1.0",
+ "once": "^1.3.1"
+ }
+ },
+ "node_modules/faker": {
"version": "4.1.0",
"resolved": "https://registry.npmjs.org/faker/-/faker-4.1.0.tgz",
"integrity": "sha512-ILKg69P6y/D8/wSmDXw35Ly0re8QzQ8pMfBCflsGiZG2ZjMUNLYNexA6lz5pkmJlepVdsiDFUxYAzPQ9/+iGLA==",
"dev": true
},
- "fancy-log": {
+ "node_modules/fancy-log": {
"version": "1.3.3",
"resolved": "https://registry.npmjs.org/fancy-log/-/fancy-log-1.3.3.tgz",
"integrity": "sha512-k9oEhlyc0FrVh25qYuSELjr8oxsCoc4/LEZfg2iJJrfEk/tZL9bCoJE47gqAvI2m/AUjluCS4+3I0eTx8n3AEw==",
- "requires": {
+ "dependencies": {
"ansi-gray": "^0.1.1",
"color-support": "^1.1.3",
"parse-node-version": "^1.0.0",
"time-stamp": "^1.0.0"
+ },
+ "engines": {
+ "node": ">= 0.10"
}
},
- "fast-deep-equal": {
+ "node_modules/fast-deep-equal": {
"version": "3.1.3",
"resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz",
"integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q=="
},
- "fast-glob": {
+ "node_modules/fast-glob": {
"version": "2.2.7",
"resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-2.2.7.tgz",
"integrity": "sha512-g1KuQwHOZAmOZMuBtHdxDtju+T2RT8jgCC9aANsbpdiDDTSnjgfuVsIBNKbUeJI3oKMRExcfNDtJl4OhbffMsw==",
- "requires": {
+ "dependencies": {
"@mrmlnc/readdir-enhanced": "^2.2.1",
"@nodelib/fs.stat": "^1.1.2",
"glob-parent": "^3.1.0",
"is-glob": "^4.0.0",
"merge2": "^1.2.3",
"micromatch": "^3.1.10"
+ },
+ "engines": {
+ "node": ">=4.0.0"
}
},
- "fast-json-stable-stringify": {
+ "node_modules/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
+ "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw=="
},
- "fast-levenshtein": {
+ "node_modules/fast-levenshtein": {
"version": "1.1.4",
"resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-1.1.4.tgz",
"integrity": "sha512-Ia0sQNrMPXXkqVFt6w6M1n1oKo3NfKs+mvaV811Jwir7vAk9a6PVV9VPYf6X3BU97QiLEmuW3uXH9u87zDFfdw=="
},
- "fast-safe-stringify": {
+ "node_modules/fast-safe-stringify": {
"version": "2.1.1",
"resolved": "https://registry.npmjs.org/fast-safe-stringify/-/fast-safe-stringify-2.1.1.tgz",
"integrity": "sha512-W+KJc2dmILlPplD/H4K9l9LcAHAfPtP6BY84uVLXQ6Evcz9Lcg33Y2z1IVblT6xdY54PXYVHEv+0Wpq8Io6zkA==",
"dev": true
},
- "fast-xml-parser": {
+ "node_modules/fast-xml-parser": {
"version": "4.2.5",
"resolved": "https://registry.npmjs.org/fast-xml-parser/-/fast-xml-parser-4.2.5.tgz",
"integrity": "sha512-B9/wizE4WngqQftFPmdaMYlXoJlJOYxGQOanC77fq9k8+Z0v5dDSVh+3glErdIROP//s/jgb7ZuxKfB8nVyo0g==",
+ "funding": [
+ {
+ "type": "paypal",
+ "url": "https://paypal.me/naturalintelligence"
+ },
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/NaturalIntelligence"
+ }
+ ],
"optional": true,
- "requires": {
+ "dependencies": {
"strnum": "^1.0.5"
+ },
+ "bin": {
+ "fxparser": "src/cli/cli.js"
}
},
- "fastest-levenshtein": {
+ "node_modules/fastest-levenshtein": {
"version": "1.0.16",
"resolved": "https://registry.npmjs.org/fastest-levenshtein/-/fastest-levenshtein-1.0.16.tgz",
"integrity": "sha512-eRnCtTTtGZFpQCwhJiUOuxPQWRXVKYDn0b2PeHfXL6/Zi53SLAzAHfVhVWK2AryC/WH05kGfxhFIPvTF0SXQzg==",
- "dev": true
+ "dev": true,
+ "engines": {
+ "node": ">= 4.9.1"
+ }
},
- "fastq": {
+ "node_modules/fastq": {
"version": "1.15.0",
"resolved": "https://registry.npmjs.org/fastq/-/fastq-1.15.0.tgz",
"integrity": "sha512-wBrocU2LCXXa+lWBt8RoIRD89Fi8OdABODa/kEnyeyjS5aZO5/GNvI5sEINADqP/h8M29UHTHUb53sUu5Ihqdw==",
"dev": true,
- "requires": {
+ "dependencies": {
"reusify": "^1.0.4"
}
},
- "fd-slicer": {
+ "node_modules/fd-slicer": {
"version": "1.1.0",
"resolved": "https://registry.npmjs.org/fd-slicer/-/fd-slicer-1.1.0.tgz",
"integrity": "sha512-cE1qsB/VwyQozZ+q1dGxR8LBYNZeofhEdUNGSMbQD3Gw2lAzX9Zb3uIU6Ebc/Fmyjo9AWWfnn0AUCHqtevs/8g==",
- "requires": {
+ "dependencies": {
"pend": "~1.2.0"
}
},
- "feature-policy": {
+ "node_modules/feature-policy": {
"version": "0.3.0",
"resolved": "https://registry.npmjs.org/feature-policy/-/feature-policy-0.3.0.tgz",
- "integrity": "sha512-ZtijOTFN7TzCujt1fnNhfWPFPSHeZkesff9AXZj+UEjYBynWNUIYpC87Ve4wHzyexQsImicLu7WsC2LHq7/xrQ=="
+ "integrity": "sha512-ZtijOTFN7TzCujt1fnNhfWPFPSHeZkesff9AXZj+UEjYBynWNUIYpC87Ve4wHzyexQsImicLu7WsC2LHq7/xrQ==",
+ "engines": {
+ "node": ">=4.0.0"
+ }
},
- "fecha": {
+ "node_modules/fecha": {
"version": "4.2.3",
"resolved": "https://registry.npmjs.org/fecha/-/fecha-4.2.3.tgz",
"integrity": "sha512-OP2IUU6HeYKJi3i0z4A19kHMQoLVs4Hc+DPqqxI2h/DPZHTm/vjsfC6P0b4jCMy14XizLBqvndQ+UilD7707Jw=="
},
- "file-entry-cache": {
+ "node_modules/file-entry-cache": {
"version": "6.0.1",
"resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz",
"integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==",
"dev": true,
- "requires": {
+ "dependencies": {
"flat-cache": "^3.0.4"
+ },
+ "engines": {
+ "node": "^10.12.0 || >=12.0.0"
}
},
- "file-uri-to-path": {
+ "node_modules/file-uri-to-path": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz",
"integrity": "sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==",
"optional": true
},
- "fill-range": {
+ "node_modules/fill-range": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz",
"integrity": "sha512-VcpLTWqWDiTerugjj8e3+esbg+skS3M9e54UuR3iCeIDMXCLTsAH8hTSzDQU/X6/6t3eYkOKoZSef2PlU6U1XQ==",
- "requires": {
+ "dependencies": {
"extend-shallow": "^2.0.1",
"is-number": "^3.0.0",
"repeat-string": "^1.6.1",
"to-regex-range": "^2.1.0"
},
- "dependencies": {
- "extend-shallow": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
- "integrity": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==",
- "requires": {
- "is-extendable": "^0.1.0"
- }
- }
+ "engines": {
+ "node": ">=0.10.0"
}
},
- "finalhandler": {
+ "node_modules/fill-range/node_modules/extend-shallow": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
+ "integrity": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==",
+ "dependencies": {
+ "is-extendable": "^0.1.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/finalhandler": {
"version": "1.2.0",
"resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.2.0.tgz",
"integrity": "sha512-5uXcUVftlQMFnWC9qu/svkWv3GTd2PfUhK/3PLkYNAe7FbqJMt3515HaxE6eRL74GdsriiwujiawdaB1BpEISg==",
- "requires": {
+ "dependencies": {
"debug": "2.6.9",
"encodeurl": "~1.0.2",
"escape-html": "~1.0.3",
@@ -5795,382 +7394,494 @@
"statuses": "2.0.1",
"unpipe": "~1.0.0"
},
- "dependencies": {
- "debug": {
- "version": "2.6.9",
- "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
- "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
- "requires": {
- "ms": "2.0.0"
- }
- },
- "ms": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
- "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A=="
- }
+ "engines": {
+ "node": ">= 0.8"
}
},
- "find-cache-dir": {
+ "node_modules/finalhandler/node_modules/debug": {
+ "version": "2.6.9",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
+ "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
+ "dependencies": {
+ "ms": "2.0.0"
+ }
+ },
+ "node_modules/finalhandler/node_modules/ms": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
+ "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A=="
+ },
+ "node_modules/find-cache-dir": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-4.0.0.tgz",
"integrity": "sha512-9ZonPT4ZAK4a+1pUPVPZJapbi7O5qbbJPdYw/NOQWZZbVLdDTYM3A4R9z/DpAM08IDaFGsvPgiGZ82WEwUDWjg==",
- "requires": {
+ "dependencies": {
"common-path-prefix": "^3.0.0",
"pkg-dir": "^7.0.0"
+ },
+ "engines": {
+ "node": ">=14.16"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
}
},
- "find-root": {
+ "node_modules/find-root": {
"version": "1.1.0",
"resolved": "https://registry.npmjs.org/find-root/-/find-root-1.1.0.tgz",
"integrity": "sha512-NKfW6bec6GfKc0SGx1e07QZY9PE99u0Bft/0rzSD5k3sO/vwkVUpDUKVm5Gpp5Ue3YfShPFTX2070tDs5kB9Ng==",
"dev": true
},
- "find-up": {
+ "node_modules/find-up": {
"version": "6.3.0",
"resolved": "https://registry.npmjs.org/find-up/-/find-up-6.3.0.tgz",
"integrity": "sha512-v2ZsoEuVHYy8ZIlYqwPe/39Cy+cFDzp4dXPaxNvkEuouymu+2Jbz0PxpKarJHYJTmv2HWT3O382qY8l4jMWthw==",
- "requires": {
+ "dependencies": {
"locate-path": "^7.1.0",
"path-exists": "^5.0.0"
+ },
+ "engines": {
+ "node": "^12.20.0 || ^14.13.1 || >=16.0.0"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
}
},
- "findup-sync": {
+ "node_modules/findup-sync": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/findup-sync/-/findup-sync-3.0.0.tgz",
"integrity": "sha512-YbffarhcicEhOrm4CtrwdKBdCuz576RLdhJDsIfvNtxUuhdRet1qZcsMjqbePtAseKdAnDyM/IyXbu7PRPRLYg==",
- "requires": {
+ "dependencies": {
"detect-file": "^1.0.0",
"is-glob": "^4.0.0",
"micromatch": "^3.0.4",
"resolve-dir": "^1.0.1"
+ },
+ "engines": {
+ "node": ">= 0.10"
}
},
- "fined": {
+ "node_modules/fined": {
"version": "1.2.0",
"resolved": "https://registry.npmjs.org/fined/-/fined-1.2.0.tgz",
"integrity": "sha512-ZYDqPLGxDkDhDZBjZBb+oD1+j0rA4E0pXY50eplAAOPg2N/gUBSSk5IM1/QhPfyVo19lJ+CvXpqfvk+b2p/8Ng==",
- "requires": {
+ "dependencies": {
"expand-tilde": "^2.0.2",
"is-plain-object": "^2.0.3",
"object.defaults": "^1.1.0",
"object.pick": "^1.2.0",
"parse-filepath": "^1.0.1"
+ },
+ "engines": {
+ "node": ">= 0.10"
}
},
- "flagged-respawn": {
+ "node_modules/flagged-respawn": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/flagged-respawn/-/flagged-respawn-1.0.1.tgz",
- "integrity": "sha512-lNaHNVymajmk0OJMBn8fVUAU1BtDeKIqKoVhk4xAALB57aALg6b4W0MfJ/cUE0g9YBXy5XhSlPIpYIJ7HaY/3Q=="
+ "integrity": "sha512-lNaHNVymajmk0OJMBn8fVUAU1BtDeKIqKoVhk4xAALB57aALg6b4W0MfJ/cUE0g9YBXy5XhSlPIpYIJ7HaY/3Q==",
+ "engines": {
+ "node": ">= 0.10"
+ }
},
- "flat-cache": {
+ "node_modules/flat-cache": {
"version": "3.1.0",
"resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.1.0.tgz",
"integrity": "sha512-OHx4Qwrrt0E4jEIcI5/Xb+f+QmJYNj2rrK8wiIdQOIrB9WrrJL8cjZvXdXuBTkkEwEqLycb5BeZDV1o2i9bTew==",
"dev": true,
- "requires": {
+ "dependencies": {
"flatted": "^3.2.7",
"keyv": "^4.5.3",
"rimraf": "^3.0.2"
+ },
+ "engines": {
+ "node": ">=12.0.0"
}
},
- "flatted": {
+ "node_modules/flatted": {
"version": "3.2.9",
"resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.9.tgz",
"integrity": "sha512-36yxDn5H7OFZQla0/jFJmbIKTdZAQHngCedGxiMmpNfEZM0sdEeT+WczLQrjK6D7o2aiyLYDnkw0R3JK0Qv1RQ==",
"dev": true
},
- "flush-write-stream": {
+ "node_modules/flush-write-stream": {
"version": "1.1.1",
"resolved": "https://registry.npmjs.org/flush-write-stream/-/flush-write-stream-1.1.1.tgz",
"integrity": "sha512-3Z4XhFZ3992uIq0XOqb9AreonueSYphE6oYbpt5+3u06JWklbsPkNv3ZKkP9Bz/r+1MWCaMoSQ28P85+1Yc77w==",
- "requires": {
+ "dependencies": {
"inherits": "^2.0.3",
"readable-stream": "^2.3.6"
}
},
- "fn.name": {
+ "node_modules/fn.name": {
"version": "1.1.0",
"resolved": "https://registry.npmjs.org/fn.name/-/fn.name-1.1.0.tgz",
"integrity": "sha512-GRnmB5gPyJpAhTQdSZTSp9uaPSvl09KoYcMQtsB9rQoOmzs9dH6ffeccH+Z+cv6P68Hu5bC6JjRh4Ah/mHSNRw=="
},
- "follow-redirects": {
+ "node_modules/follow-redirects": {
"version": "1.15.3",
"resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.3.tgz",
- "integrity": "sha512-1VzOtuEM8pC9SFU1E+8KfTjZyMztRsgEfwQl44z8A25uy13jSzTj6dyK2Df52iV0vgHCfBwLhDWevLn95w5v6Q=="
+ "integrity": "sha512-1VzOtuEM8pC9SFU1E+8KfTjZyMztRsgEfwQl44z8A25uy13jSzTj6dyK2Df52iV0vgHCfBwLhDWevLn95w5v6Q==",
+ "funding": [
+ {
+ "type": "individual",
+ "url": "https://github.com/sponsors/RubenVerborgh"
+ }
+ ],
+ "engines": {
+ "node": ">=4.0"
+ },
+ "peerDependenciesMeta": {
+ "debug": {
+ "optional": true
+ }
+ }
},
- "for-each": {
+ "node_modules/for-each": {
"version": "0.3.3",
"resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.3.tgz",
"integrity": "sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==",
"dev": true,
- "requires": {
+ "dependencies": {
"is-callable": "^1.1.3"
}
},
- "for-in": {
+ "node_modules/for-in": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz",
- "integrity": "sha512-7EwmXrOjyL+ChxMhmG5lnW9MPt1aIeZEwKhQzoBUdTV0N3zuwWDZYVJatDvZ2OyzPUvdIAZDsCetk3coyMfcnQ=="
+ "integrity": "sha512-7EwmXrOjyL+ChxMhmG5lnW9MPt1aIeZEwKhQzoBUdTV0N3zuwWDZYVJatDvZ2OyzPUvdIAZDsCetk3coyMfcnQ==",
+ "engines": {
+ "node": ">=0.10.0"
+ }
},
- "for-own": {
+ "node_modules/for-own": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/for-own/-/for-own-1.0.0.tgz",
"integrity": "sha512-0OABksIGrxKK8K4kynWkQ7y1zounQxP+CWnyclVwj81KW3vlLlGUx57DKGcP/LH216GzqnstnPocF16Nxs0Ycg==",
- "requires": {
+ "dependencies": {
"for-in": "^1.0.1"
+ },
+ "engines": {
+ "node": ">=0.10.0"
}
},
- "foreground-child": {
+ "node_modules/foreground-child": {
"version": "1.5.6",
"resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-1.5.6.tgz",
"integrity": "sha512-3TOY+4TKV0Ml83PXJQY+JFQaHNV38lzQDIzzXYg1kWdBLenGgoZhAs0CKgzI31vi2pWEpQMq/Yi4bpKwCPkw7g==",
"dev": true,
- "requires": {
+ "dependencies": {
"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": "sha512-yAXz/pA1tD8Gtg2S98Ekf/sewp3Lcp3YoFKJ4Hkp5h5yLWnKVTDU0kwjKJ8NDCYcfTLfyGkzTikst+jWypT1iA==",
- "dev": true,
- "requires": {
- "lru-cache": "^4.0.1",
- "which": "^1.2.9"
- }
- },
- "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"
- }
- },
- "yallist": {
- "version": "2.1.2",
- "resolved": "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz",
- "integrity": "sha512-ncTzHV7NvsQZkYe1DW7cbDLm0YpzHmZF5r/iyP3ZnQtMiJ+pjzisCiMNI+Sj+xQF5pXhSHxSB3uDbsBTzY/c2A==",
- "dev": true
- }
}
},
- "form-data": {
+ "node_modules/foreground-child/node_modules/cross-spawn": {
+ "version": "4.0.2",
+ "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-4.0.2.tgz",
+ "integrity": "sha512-yAXz/pA1tD8Gtg2S98Ekf/sewp3Lcp3YoFKJ4Hkp5h5yLWnKVTDU0kwjKJ8NDCYcfTLfyGkzTikst+jWypT1iA==",
+ "dev": true,
+ "dependencies": {
+ "lru-cache": "^4.0.1",
+ "which": "^1.2.9"
+ }
+ },
+ "node_modules/foreground-child/node_modules/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,
+ "dependencies": {
+ "pseudomap": "^1.0.2",
+ "yallist": "^2.1.2"
+ }
+ },
+ "node_modules/foreground-child/node_modules/yallist": {
+ "version": "2.1.2",
+ "resolved": "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz",
+ "integrity": "sha512-ncTzHV7NvsQZkYe1DW7cbDLm0YpzHmZF5r/iyP3ZnQtMiJ+pjzisCiMNI+Sj+xQF5pXhSHxSB3uDbsBTzY/c2A==",
+ "dev": true
+ },
+ "node_modules/form-data": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz",
"integrity": "sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==",
- "dev": true,
"requires": {
"asynckit": "^0.4.0",
"combined-stream": "^1.0.8",
"mime-types": "^2.1.12"
+ },
+ "engines": {
+ "node": ">= 6"
}
},
- "formidable": {
+ "node_modules/formidable": {
"version": "2.1.2",
"resolved": "https://registry.npmjs.org/formidable/-/formidable-2.1.2.tgz",
"integrity": "sha512-CM3GuJ57US06mlpQ47YcunuUZ9jpm8Vx+P2CGt2j7HpgkKZO/DJYQ0Bobim8G6PFQmK5lOqOOdUXboU+h73A4g==",
"dev": true,
- "requires": {
+ "dependencies": {
"dezalgo": "^1.0.4",
"hexoid": "^1.0.0",
"once": "^1.4.0",
"qs": "^6.11.0"
+ },
+ "funding": {
+ "url": "https://ko-fi.com/tunnckoCore/commissions"
}
},
- "forwarded": {
+ "node_modules/forwarded": {
"version": "0.2.0",
"resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz",
- "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow=="
+ "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==",
+ "engines": {
+ "node": ">= 0.6"
+ }
},
- "fraction.js": {
+ "node_modules/fraction.js": {
"version": "4.3.6",
"resolved": "https://registry.npmjs.org/fraction.js/-/fraction.js-4.3.6.tgz",
- "integrity": "sha512-n2aZ9tNfYDwaHhvFTkhFErqOMIb8uyzSQ+vGJBjZyanAKZVbGUQ1sngfk9FdkBw7G26O7AgNjLcecLffD1c7eg=="
+ "integrity": "sha512-n2aZ9tNfYDwaHhvFTkhFErqOMIb8uyzSQ+vGJBjZyanAKZVbGUQ1sngfk9FdkBw7G26O7AgNjLcecLffD1c7eg==",
+ "engines": {
+ "node": "*"
+ },
+ "funding": {
+ "type": "patreon",
+ "url": "https://github.com/sponsors/rawify"
+ }
},
- "fragment-cache": {
+ "node_modules/fragment-cache": {
"version": "0.2.1",
"resolved": "https://registry.npmjs.org/fragment-cache/-/fragment-cache-0.2.1.tgz",
"integrity": "sha512-GMBAbW9antB8iZRHLoGw0b3HANt57diZYFO/HL1JGIC1MjKrdmhxvrJbupnVvpys0zsz7yBApXdQyfepKly2kA==",
- "requires": {
+ "dependencies": {
"map-cache": "^0.2.2"
+ },
+ "engines": {
+ "node": ">=0.10.0"
}
},
- "fresh": {
+ "node_modules/fresh": {
"version": "0.5.2",
"resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz",
- "integrity": "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q=="
+ "integrity": "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==",
+ "engines": {
+ "node": ">= 0.6"
+ }
},
- "fs": {
+ "node_modules/fs": {
"version": "0.0.2",
"resolved": "https://registry.npmjs.org/fs/-/fs-0.0.2.tgz",
"integrity": "sha512-YAiVokMCrSIFZiroB1oz51hPiPRVcUtSa4x2U5RYXyhS9VAPdiFigKbPTnOSq7XY8wd3FIVPYmXpo5lMzFmxgg=="
},
- "fs-constants": {
+ "node_modules/fs-constants": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/fs-constants/-/fs-constants-1.0.0.tgz",
"integrity": "sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow=="
},
- "fs-mkdirp-stream": {
+ "node_modules/fs-mkdirp-stream": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/fs-mkdirp-stream/-/fs-mkdirp-stream-1.0.0.tgz",
"integrity": "sha512-+vSd9frUnapVC2RZYfL3FCB2p3g4TBhaUmrsWlSudsGdnxIuUvBB2QM1VZeBtc49QFwrp+wQLrDs3+xxDgI5gQ==",
- "requires": {
+ "dependencies": {
"graceful-fs": "^4.1.11",
"through2": "^2.0.3"
+ },
+ "engines": {
+ "node": ">= 0.10"
}
},
- "fs.realpath": {
+ "node_modules/fs.realpath": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz",
"integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw=="
},
- "fsevents": {
+ "node_modules/fsevents": {
"version": "1.2.13",
"resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.2.13.tgz",
"integrity": "sha512-oWb1Z6mkHIskLzEJ/XWX0srkpkTQ7vaopMQkyaEIoq0fmtFVxOthb8cCxeT+p3ynTdkk/RZwbgG4brR5BeWECw==",
+ "deprecated": "The v1 package contains DANGEROUS / INSECURE binaries. Upgrade to safe fsevents v2",
+ "hasInstallScript": true,
"optional": true,
- "requires": {
+ "os": [
+ "darwin"
+ ],
+ "dependencies": {
"bindings": "^1.5.0",
"nan": "^2.12.1"
+ },
+ "engines": {
+ "node": ">= 4.0"
}
},
- "function-bind": {
+ "node_modules/function-bind": {
"version": "1.1.1",
"resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz",
"integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A=="
},
- "function.prototype.name": {
+ "node_modules/function.prototype.name": {
"version": "1.1.6",
"resolved": "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.1.6.tgz",
"integrity": "sha512-Z5kx79swU5P27WEayXM1tBi5Ze/lbIyiNgU3qyXUOf9b2rgXYyF9Dy9Cx+IQv/Lc8WCG6L82zwUPpSS9hGehIg==",
"dev": true,
- "requires": {
+ "dependencies": {
"call-bind": "^1.0.2",
"define-properties": "^1.2.0",
"es-abstract": "^1.22.1",
"functions-have-names": "^1.2.3"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
}
},
- "functions-have-names": {
+ "node_modules/functions-have-names": {
"version": "1.2.3",
"resolved": "https://registry.npmjs.org/functions-have-names/-/functions-have-names-1.2.3.tgz",
"integrity": "sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==",
- "dev": true
+ "dev": true,
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
},
- "generate-function": {
+ "node_modules/generate-function": {
"version": "2.3.1",
"resolved": "https://registry.npmjs.org/generate-function/-/generate-function-2.3.1.tgz",
"integrity": "sha512-eeB5GfMNeevm/GRYq20ShmsaGcmI81kIX2K9XQx5miC8KdHaC6Jm0qQ8ZNeGOi7wYB8OsdxKs+Y2oVuTFuVwKQ==",
- "requires": {
+ "dependencies": {
"is-property": "^1.0.2"
}
},
- "generate-object-property": {
+ "node_modules/generate-object-property": {
"version": "1.2.0",
"resolved": "https://registry.npmjs.org/generate-object-property/-/generate-object-property-1.2.0.tgz",
"integrity": "sha512-TuOwZWgJ2VAMEGJvAyPWvpqxSANF0LDpmyHauMjFYzaACvn+QTT/AZomvPCzVBV7yDN3OmwHQ5OvHaeLKre3JQ==",
- "requires": {
+ "dependencies": {
"is-property": "^1.0.0"
}
},
- "get-caller-file": {
+ "node_modules/get-caller-file": {
"version": "1.0.3",
"resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-1.0.3.tgz",
"integrity": "sha512-3t6rVToeoZfYSGd8YoLFR2DJkiQrIiUrGcjvFX2mDw3bn6k2OtwHN0TNCLbBO+w8qTvimhDkv+LSscbJY1vE6w=="
},
- "get-func-name": {
+ "node_modules/get-func-name": {
"version": "2.0.2",
"resolved": "https://registry.npmjs.org/get-func-name/-/get-func-name-2.0.2.tgz",
"integrity": "sha512-8vXOvuE167CtIc3OyItco7N/dpRtBbYOsPsXCz7X/PMnlGjYjSGuZJgM1Y7mmew7BKf9BqvLX2tnOVy1BBUsxQ==",
- "dev": true
+ "dev": true,
+ "engines": {
+ "node": "*"
+ }
},
- "get-intrinsic": {
+ "node_modules/get-intrinsic": {
"version": "1.2.1",
"resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.1.tgz",
"integrity": "sha512-2DcsyfABl+gVHEfCOaTrWgyt+tb6MSEGmKq+kI5HwLbIYgjgmMcV8KQ41uaKz1xxUcn9tJtgFbQUEVcEbd0FYw==",
- "requires": {
+ "dependencies": {
"function-bind": "^1.1.1",
"has": "^1.0.3",
"has-proto": "^1.0.1",
"has-symbols": "^1.0.3"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
}
},
- "get-stream": {
+ "node_modules/get-stream": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/get-stream/-/get-stream-3.0.0.tgz",
- "integrity": "sha512-GlhdIUuVakc8SJ6kK0zAFbiGzRFzNnY4jUuEbV9UROo4Y+0Ny4fjvcZFVTeDA4odpFyOQzaw6hXukJSq/f28sQ=="
+ "integrity": "sha512-GlhdIUuVakc8SJ6kK0zAFbiGzRFzNnY4jUuEbV9UROo4Y+0Ny4fjvcZFVTeDA4odpFyOQzaw6hXukJSq/f28sQ==",
+ "engines": {
+ "node": ">=4"
+ }
},
- "get-symbol-description": {
+ "node_modules/get-symbol-description": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.0.0.tgz",
"integrity": "sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw==",
"dev": true,
- "requires": {
+ "dependencies": {
"call-bind": "^1.0.2",
"get-intrinsic": "^1.1.1"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
}
},
- "get-tsconfig": {
+ "node_modules/get-tsconfig": {
"version": "4.7.2",
"resolved": "https://registry.npmjs.org/get-tsconfig/-/get-tsconfig-4.7.2.tgz",
"integrity": "sha512-wuMsz4leaj5hbGgg4IvDU0bqJagpftG5l5cXIAvo8uZrqn0NJqwtfupTN00VnkQJPcIRrxYrm1Ue24btpCha2A==",
"dev": true,
- "requires": {
+ "dependencies": {
"resolve-pkg-maps": "^1.0.0"
+ },
+ "funding": {
+ "url": "https://github.com/privatenumber/get-tsconfig?sponsor=1"
}
},
- "get-value": {
+ "node_modules/get-value": {
"version": "2.0.6",
"resolved": "https://registry.npmjs.org/get-value/-/get-value-2.0.6.tgz",
- "integrity": "sha512-Ln0UQDlxH1BapMu3GPtf7CuYNwRZf2gwCuPqbyG6pB8WfmFpzqcy4xtAaAMUhnNqjMKTiCPZG2oMT3YSx8U2NA=="
+ "integrity": "sha512-Ln0UQDlxH1BapMu3GPtf7CuYNwRZf2gwCuPqbyG6pB8WfmFpzqcy4xtAaAMUhnNqjMKTiCPZG2oMT3YSx8U2NA==",
+ "engines": {
+ "node": ">=0.10.0"
+ }
},
- "getopts": {
+ "node_modules/getopts": {
"version": "2.2.5",
"resolved": "https://registry.npmjs.org/getopts/-/getopts-2.2.5.tgz",
"integrity": "sha512-9jb7AW5p3in+IiJWhQiZmmwkpLaR/ccTWdWQCtZM66HJcHHLegowh4q4tSD7gouUyeNvFWRavfK9GXosQHDpFA=="
},
- "glob": {
+ "node_modules/glob": {
"version": "7.2.3",
"resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz",
"integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==",
- "requires": {
+ "dependencies": {
"fs.realpath": "^1.0.0",
"inflight": "^1.0.4",
"inherits": "2",
"minimatch": "^3.1.1",
"once": "^1.3.0",
"path-is-absolute": "^1.0.0"
+ },
+ "engines": {
+ "node": "*"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/isaacs"
}
},
- "glob-parent": {
+ "node_modules/glob-parent": {
"version": "3.1.0",
"resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-3.1.0.tgz",
"integrity": "sha512-E8Ak/2+dZY6fnzlR7+ueWvhsH1SjHr4jjss4YS/h4py44jY9MhK/VFdaZJAWDz6BbL21KeteKxFSFpq8OS5gVA==",
- "requires": {
+ "dependencies": {
"is-glob": "^3.1.0",
"path-dirname": "^1.0.0"
- },
- "dependencies": {
- "is-glob": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz",
- "integrity": "sha512-UFpDDrPgM6qpnFNI+rh/p3bUaq9hKLZN8bMUWzxmcnZVS3omf4IPK+BrewlnWjO1WmUsMYuSjKh4UJuV4+Lqmw==",
- "requires": {
- "is-extglob": "^2.1.0"
- }
- }
}
},
- "glob-stream": {
+ "node_modules/glob-parent/node_modules/is-glob": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz",
+ "integrity": "sha512-UFpDDrPgM6qpnFNI+rh/p3bUaq9hKLZN8bMUWzxmcnZVS3omf4IPK+BrewlnWjO1WmUsMYuSjKh4UJuV4+Lqmw==",
+ "dependencies": {
+ "is-extglob": "^2.1.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/glob-stream": {
"version": "6.1.0",
"resolved": "https://registry.npmjs.org/glob-stream/-/glob-stream-6.1.0.tgz",
"integrity": "sha512-uMbLGAP3S2aDOHUDfdoYcdIePUCfysbAd0IAoWVZbeGU/oNQ8asHVSshLDJUPWxfzj8zsCG7/XeHPHTtow0nsw==",
- "requires": {
+ "dependencies": {
"extend": "^3.0.0",
"glob": "^7.1.1",
"glob-parent": "^3.1.0",
@@ -6181,18 +7892,21 @@
"remove-trailing-separator": "^1.0.1",
"to-absolute-glob": "^2.0.0",
"unique-stream": "^2.0.2"
+ },
+ "engines": {
+ "node": ">= 0.10"
}
},
- "glob-to-regexp": {
+ "node_modules/glob-to-regexp": {
"version": "0.3.0",
"resolved": "https://registry.npmjs.org/glob-to-regexp/-/glob-to-regexp-0.3.0.tgz",
"integrity": "sha512-Iozmtbqv0noj0uDDqoL0zNq0VBEfK2YFoMAZoxJe4cwphvLR+JskfF30QhXHOR4m3KrE6NLRYw+U9MRXvifyig=="
},
- "glob-watcher": {
+ "node_modules/glob-watcher": {
"version": "5.0.5",
"resolved": "https://registry.npmjs.org/glob-watcher/-/glob-watcher-5.0.5.tgz",
"integrity": "sha512-zOZgGGEHPklZNjZQaZ9f41i7F2YwE+tS5ZHrDhbBCk3stwahn5vQxnFmBJZHoYdusR6R1bLSXeGUy/BhctwKzw==",
- "requires": {
+ "dependencies": {
"anymatch": "^2.0.0",
"async-done": "^1.2.0",
"chokidar": "^2.0.0",
@@ -6200,69 +7914,97 @@
"just-debounce": "^1.0.0",
"normalize-path": "^3.0.0",
"object.defaults": "^1.1.0"
+ },
+ "engines": {
+ "node": ">= 0.10"
}
},
- "global-dirs": {
+ "node_modules/global-dirs": {
"version": "0.1.1",
"resolved": "https://registry.npmjs.org/global-dirs/-/global-dirs-0.1.1.tgz",
"integrity": "sha512-NknMLn7F2J7aflwFOlGdNIuCDpN3VGoSoB+aap3KABFWbHVn1TCgFC+np23J8W2BiZbjfEw3BFBycSMv1AFblg==",
- "requires": {
+ "dependencies": {
"ini": "^1.3.4"
+ },
+ "engines": {
+ "node": ">=4"
}
},
- "global-modules": {
+ "node_modules/global-modules": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/global-modules/-/global-modules-1.0.0.tgz",
"integrity": "sha512-sKzpEkf11GpOFuw0Zzjzmt4B4UZwjOcG757PPvrfhxcLFbq0wpsgpOqxpxtxFiCG4DtG93M6XRVbF2oGdev7bg==",
- "requires": {
+ "dependencies": {
"global-prefix": "^1.0.1",
"is-windows": "^1.0.1",
"resolve-dir": "^1.0.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
}
},
- "global-prefix": {
+ "node_modules/global-prefix": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/global-prefix/-/global-prefix-1.0.2.tgz",
"integrity": "sha512-5lsx1NUDHtSjfg0eHlmYvZKv8/nVqX4ckFbM+FrGcQ+04KWcWFo9P5MxPZYSzUvyzmdTbI7Eix8Q4IbELDqzKg==",
- "requires": {
+ "dependencies": {
"expand-tilde": "^2.0.2",
"homedir-polyfill": "^1.0.1",
"ini": "^1.3.4",
"is-windows": "^1.0.1",
"which": "^1.2.14"
+ },
+ "engines": {
+ "node": ">=0.10.0"
}
},
- "globals": {
+ "node_modules/globals": {
"version": "13.22.0",
"resolved": "https://registry.npmjs.org/globals/-/globals-13.22.0.tgz",
"integrity": "sha512-H1Ddc/PbZHTDVJSnj8kWptIRSD6AM3pK+mKytuIVF4uoBV7rshFlhhvA58ceJ5wp3Er58w6zj7bykMpYXt3ETw==",
"dev": true,
- "requires": {
+ "dependencies": {
"type-fest": "^0.20.2"
},
- "dependencies": {
- "type-fest": {
- "version": "0.20.2",
- "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz",
- "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==",
- "dev": true
- }
+ "engines": {
+ "node": ">=8"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
}
},
- "globalthis": {
+ "node_modules/globals/node_modules/type-fest": {
+ "version": "0.20.2",
+ "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz",
+ "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==",
+ "dev": true,
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/globalthis": {
"version": "1.0.3",
"resolved": "https://registry.npmjs.org/globalthis/-/globalthis-1.0.3.tgz",
"integrity": "sha512-sFdI5LyBiNTHjRd7cGPWapiHWMOXKyuBNX/cWJ3NfzrZQVa8GI/8cofCl74AOVqq9W5kNmguTIzJ/1s2gyI9wA==",
"dev": true,
- "requires": {
+ "dependencies": {
"define-properties": "^1.1.3"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
}
},
- "globby": {
+ "node_modules/globby": {
"version": "9.2.0",
"resolved": "https://registry.npmjs.org/globby/-/globby-9.2.0.tgz",
"integrity": "sha512-ollPHROa5mcxDEkwg6bPt3QbEf4pDQSNtd6JPL1YvOvAo/7/0VAm9TccUeoTmarjPw4pfUthSCqcyfNB1I3ZSg==",
- "requires": {
+ "dependencies": {
"@types/glob": "^7.1.1",
"array-union": "^1.0.2",
"dir-glob": "^2.2.2",
@@ -6271,29 +8013,38 @@
"ignore": "^4.0.3",
"pify": "^4.0.1",
"slash": "^2.0.0"
+ },
+ "engines": {
+ "node": ">=6"
}
},
- "glogg": {
+ "node_modules/glogg": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/glogg/-/glogg-1.0.2.tgz",
"integrity": "sha512-5mwUoSuBk44Y4EshyiqcH95ZntbDdTQqA3QYSrxmzj28Ai0vXBGMH1ApSANH14j2sIRtqCEyg6PfsuP7ElOEDA==",
- "requires": {
+ "dependencies": {
"sparkles": "^1.0.0"
+ },
+ "engines": {
+ "node": ">= 0.10"
}
},
- "gopd": {
+ "node_modules/gopd": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz",
"integrity": "sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==",
- "requires": {
+ "dependencies": {
"get-intrinsic": "^1.1.3"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
}
},
- "got": {
+ "node_modules/got": {
"version": "6.7.1",
"resolved": "https://registry.npmjs.org/got/-/got-6.7.1.tgz",
"integrity": "sha512-Y/K3EDuiQN9rTZhBvPRWMLXIKdeD1Rj0nzunfoi0Yyn5WBEbzxXKU9Ub2X41oZBagVWOBU3MuDonFMgPWQFnwg==",
- "requires": {
+ "dependencies": {
"create-error-class": "^3.0.0",
"duplexer3": "^0.1.4",
"get-stream": "^3.0.0",
@@ -6305,91 +8056,80 @@
"timed-out": "^4.0.0",
"unzip-response": "^2.0.1",
"url-parse-lax": "^1.0.0"
+ },
+ "engines": {
+ "node": ">=4"
}
},
- "graceful-fs": {
+ "node_modules/graceful-fs": {
"version": "4.2.11",
"resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz",
"integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ=="
},
- "graphemer": {
+ "node_modules/graphemer": {
"version": "1.4.0",
"resolved": "https://registry.npmjs.org/graphemer/-/graphemer-1.4.0.tgz",
"integrity": "sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==",
"dev": true
},
- "growl": {
+ "node_modules/growl": {
"version": "1.10.5",
"resolved": "https://registry.npmjs.org/growl/-/growl-1.10.5.tgz",
"integrity": "sha512-qBr4OuELkhPenW6goKVXiv47US3clb3/IbuWF9KNKEijAy9oeHxU9IgzjvJhHkUzhaj7rOUD7+YGWqUjLp5oSA==",
- "dev": true
+ "dev": true,
+ "engines": {
+ "node": ">=4.x"
+ }
},
- "gulp": {
+ "node_modules/gulp": {
"version": "4.0.2",
"resolved": "https://registry.npmjs.org/gulp/-/gulp-4.0.2.tgz",
"integrity": "sha512-dvEs27SCZt2ibF29xYgmnwwCYZxdxhQ/+LFWlbAW8y7jt68L/65402Lz3+CKy0Ov4rOs+NERmDq7YlZaDqUIfA==",
- "requires": {
+ "dependencies": {
"glob-watcher": "^5.0.3",
"gulp-cli": "^2.2.0",
"undertaker": "^1.2.1",
"vinyl-fs": "^3.0.0"
},
- "dependencies": {
- "gulp-cli": {
- "version": "2.3.0",
- "resolved": "https://registry.npmjs.org/gulp-cli/-/gulp-cli-2.3.0.tgz",
- "integrity": "sha512-zzGBl5fHo0EKSXsHzjspp3y5CONegCm8ErO5Qh0UzFzk2y4tMvzLWhoDokADbarfZRL2pGpRp7yt6gfJX4ph7A==",
- "requires": {
- "ansi-colors": "^1.0.1",
- "archy": "^1.0.0",
- "array-sort": "^1.0.0",
- "color-support": "^1.1.3",
- "concat-stream": "^1.6.0",
- "copy-props": "^2.0.1",
- "fancy-log": "^1.3.2",
- "gulplog": "^1.0.0",
- "interpret": "^1.4.0",
- "isobject": "^3.0.1",
- "liftoff": "^3.1.0",
- "matchdep": "^2.0.0",
- "mute-stdout": "^1.0.0",
- "pretty-hrtime": "^1.0.0",
- "replace-homedir": "^1.0.0",
- "semver-greatest-satisfied-range": "^1.1.0",
- "v8flags": "^3.2.0",
- "yargs": "^7.1.0"
- }
- },
- "interpret": {
- "version": "1.4.0",
- "resolved": "https://registry.npmjs.org/interpret/-/interpret-1.4.0.tgz",
- "integrity": "sha512-agE4QfB2Lkp9uICn7BAqoscw4SZP9kTE2hxiFI3jBPmXJfdqiahTbUuKGsMoN2GtqL9AxhYioAcVvgsb1HvRbA=="
- }
+ "bin": {
+ "gulp": "bin/gulp.js"
+ },
+ "engines": {
+ "node": ">= 0.10"
}
},
- "gulp-postcss": {
+ "node_modules/gulp-postcss": {
"version": "9.0.1",
"resolved": "https://registry.npmjs.org/gulp-postcss/-/gulp-postcss-9.0.1.tgz",
"integrity": "sha512-9QUHam5JyXwGUxaaMvoFQVT44tohpEFpM8xBdPfdwTYGM0AItS1iTQz0MpsF8Jroh7GF5Jt2GVPaYgvy8qD2Fw==",
"dev": true,
- "requires": {
+ "dependencies": {
"fancy-log": "^1.3.3",
"plugin-error": "^1.0.1",
"postcss-load-config": "^3.0.0",
"vinyl-sourcemaps-apply": "^0.2.1"
+ },
+ "engines": {
+ "node": "^10 || ^12 || >=14"
+ },
+ "peerDependencies": {
+ "postcss": "^8.0.0"
}
},
- "gulp-rename": {
+ "node_modules/gulp-rename": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/gulp-rename/-/gulp-rename-2.0.0.tgz",
"integrity": "sha512-97Vba4KBzbYmR5VBs9mWmK+HwIf5mj+/zioxfZhOKeXtx5ZjBk57KFlePf5nxq9QsTtFl0ejnHE3zTC9MHXqyQ==",
- "dev": true
+ "dev": true,
+ "engines": {
+ "node": ">=4"
+ }
},
- "gulp-sass": {
+ "node_modules/gulp-sass": {
"version": "5.1.0",
"resolved": "https://registry.npmjs.org/gulp-sass/-/gulp-sass-5.1.0.tgz",
"integrity": "sha512-7VT0uaF+VZCmkNBglfe1b34bxn/AfcssquLKVDYnCDJ3xNBaW7cUuI3p3BQmoKcoKFrs9jdzUxyb+u+NGfL4OQ==",
- "requires": {
+ "dependencies": {
"lodash.clonedeep": "^4.5.0",
"picocolors": "^1.0.0",
"plugin-error": "^1.0.1",
@@ -6397,186 +8137,292 @@
"strip-ansi": "^6.0.1",
"vinyl-sourcemaps-apply": "^0.2.1"
},
- "dependencies": {
- "ansi-regex": {
- "version": "5.0.1",
- "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz",
- "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ=="
- },
- "replace-ext": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/replace-ext/-/replace-ext-2.0.0.tgz",
- "integrity": "sha512-UszKE5KVK6JvyD92nzMn9cDapSk6w/CaFZ96CnmDMUqH9oowfxF/ZjRITD25H4DnOQClLA4/j7jLGXXLVKxAug=="
- },
- "strip-ansi": {
- "version": "6.0.1",
- "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz",
- "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==",
- "requires": {
- "ansi-regex": "^5.0.1"
- }
- }
+ "engines": {
+ "node": ">=12"
}
},
- "gulplog": {
+ "node_modules/gulp-sass/node_modules/ansi-regex": {
+ "version": "5.0.1",
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz",
+ "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==",
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/gulp-sass/node_modules/replace-ext": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/replace-ext/-/replace-ext-2.0.0.tgz",
+ "integrity": "sha512-UszKE5KVK6JvyD92nzMn9cDapSk6w/CaFZ96CnmDMUqH9oowfxF/ZjRITD25H4DnOQClLA4/j7jLGXXLVKxAug==",
+ "engines": {
+ "node": ">= 10"
+ }
+ },
+ "node_modules/gulp-sass/node_modules/strip-ansi": {
+ "version": "6.0.1",
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz",
+ "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==",
+ "dependencies": {
+ "ansi-regex": "^5.0.1"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/gulp/node_modules/gulp-cli": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/gulp-cli/-/gulp-cli-2.3.0.tgz",
+ "integrity": "sha512-zzGBl5fHo0EKSXsHzjspp3y5CONegCm8ErO5Qh0UzFzk2y4tMvzLWhoDokADbarfZRL2pGpRp7yt6gfJX4ph7A==",
+ "dependencies": {
+ "ansi-colors": "^1.0.1",
+ "archy": "^1.0.0",
+ "array-sort": "^1.0.0",
+ "color-support": "^1.1.3",
+ "concat-stream": "^1.6.0",
+ "copy-props": "^2.0.1",
+ "fancy-log": "^1.3.2",
+ "gulplog": "^1.0.0",
+ "interpret": "^1.4.0",
+ "isobject": "^3.0.1",
+ "liftoff": "^3.1.0",
+ "matchdep": "^2.0.0",
+ "mute-stdout": "^1.0.0",
+ "pretty-hrtime": "^1.0.0",
+ "replace-homedir": "^1.0.0",
+ "semver-greatest-satisfied-range": "^1.1.0",
+ "v8flags": "^3.2.0",
+ "yargs": "^7.1.0"
+ },
+ "bin": {
+ "gulp": "bin/gulp.js"
+ },
+ "engines": {
+ "node": ">= 0.10"
+ }
+ },
+ "node_modules/gulp/node_modules/interpret": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/interpret/-/interpret-1.4.0.tgz",
+ "integrity": "sha512-agE4QfB2Lkp9uICn7BAqoscw4SZP9kTE2hxiFI3jBPmXJfdqiahTbUuKGsMoN2GtqL9AxhYioAcVvgsb1HvRbA==",
+ "engines": {
+ "node": ">= 0.10"
+ }
+ },
+ "node_modules/gulplog": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/gulplog/-/gulplog-1.0.0.tgz",
"integrity": "sha512-hm6N8nrm3Y08jXie48jsC55eCZz9mnb4OirAStEk2deqeyhXU3C1otDVh+ccttMuc1sBi6RX6ZJ720hs9RCvgw==",
- "requires": {
+ "dependencies": {
"glogg": "^1.0.0"
+ },
+ "engines": {
+ "node": ">= 0.10"
}
},
- "hard-rejection": {
+ "node_modules/hard-rejection": {
"version": "2.1.0",
"resolved": "https://registry.npmjs.org/hard-rejection/-/hard-rejection-2.1.0.tgz",
- "integrity": "sha512-VIZB+ibDhx7ObhAe7OVtoEbuP4h/MuOTHJ+J8h/eBXotJYl0fBgR72xDFCKgIh22OJZIOVNxBMWuhAr10r8HdA=="
+ "integrity": "sha512-VIZB+ibDhx7ObhAe7OVtoEbuP4h/MuOTHJ+J8h/eBXotJYl0fBgR72xDFCKgIh22OJZIOVNxBMWuhAr10r8HdA==",
+ "engines": {
+ "node": ">=6"
+ }
},
- "has": {
+ "node_modules/has": {
"version": "1.0.3",
"resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz",
"integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==",
- "requires": {
+ "dependencies": {
"function-bind": "^1.1.1"
+ },
+ "engines": {
+ "node": ">= 0.4.0"
}
},
- "has-bigints": {
+ "node_modules/has-bigints": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.2.tgz",
"integrity": "sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==",
- "dev": true
+ "dev": true,
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
},
- "has-flag": {
+ "node_modules/has-flag": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz",
- "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw=="
+ "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==",
+ "engines": {
+ "node": ">=4"
+ }
},
- "has-glob": {
+ "node_modules/has-glob": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/has-glob/-/has-glob-1.0.0.tgz",
"integrity": "sha512-D+8A457fBShSEI3tFCj65PAbT++5sKiFtdCdOam0gnfBgw9D277OERk+HM9qYJXmdVLZ/znez10SqHN0BBQ50g==",
- "requires": {
+ "dependencies": {
"is-glob": "^3.0.0"
},
- "dependencies": {
- "is-glob": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz",
- "integrity": "sha512-UFpDDrPgM6qpnFNI+rh/p3bUaq9hKLZN8bMUWzxmcnZVS3omf4IPK+BrewlnWjO1WmUsMYuSjKh4UJuV4+Lqmw==",
- "requires": {
- "is-extglob": "^2.1.0"
- }
- }
+ "engines": {
+ "node": ">=0.10.0"
}
},
- "has-property-descriptors": {
+ "node_modules/has-glob/node_modules/is-glob": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz",
+ "integrity": "sha512-UFpDDrPgM6qpnFNI+rh/p3bUaq9hKLZN8bMUWzxmcnZVS3omf4IPK+BrewlnWjO1WmUsMYuSjKh4UJuV4+Lqmw==",
+ "dependencies": {
+ "is-extglob": "^2.1.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/has-property-descriptors": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.0.tgz",
"integrity": "sha512-62DVLZGoiEBDHQyqG4w9xCuZ7eJEwNmJRWw2VY84Oedb7WFcA27fiEVe8oUQx9hAUJ4ekurquucTGwsyO1XGdQ==",
- "requires": {
+ "dependencies": {
"get-intrinsic": "^1.1.1"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
}
},
- "has-proto": {
+ "node_modules/has-proto": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.1.tgz",
- "integrity": "sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg=="
+ "integrity": "sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg==",
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
},
- "has-symbols": {
+ "node_modules/has-symbols": {
"version": "1.0.3",
"resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz",
- "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A=="
+ "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==",
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
},
- "has-tostringtag": {
+ "node_modules/has-tostringtag": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.0.tgz",
"integrity": "sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==",
- "requires": {
+ "dependencies": {
"has-symbols": "^1.0.2"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
}
},
- "has-value": {
+ "node_modules/has-value": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/has-value/-/has-value-1.0.0.tgz",
"integrity": "sha512-IBXk4GTsLYdQ7Rvt+GRBrFSVEkmuOUy4re0Xjd9kJSUQpnTrWR4/y9RpfexN9vkAPMFuQoeWKwqzPozRTlasGw==",
- "requires": {
+ "dependencies": {
"get-value": "^2.0.6",
"has-values": "^1.0.0",
"isobject": "^3.0.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
}
},
- "has-values": {
+ "node_modules/has-values": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/has-values/-/has-values-1.0.0.tgz",
"integrity": "sha512-ODYZC64uqzmtfGMEAX/FvZiRyWLpAC3vYnNunURUnkGVTS+mI0smVsWaPydRBsE3g+ok7h960jChO8mFcWlHaQ==",
- "requires": {
+ "dependencies": {
"is-number": "^3.0.0",
"kind-of": "^4.0.0"
},
- "dependencies": {
- "kind-of": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-4.0.0.tgz",
- "integrity": "sha512-24XsCxmEbRwEDbz/qz3stgin8TTzZ1ESR56OMCN0ujYg+vRutNSiOj9bHH9u85DKgXguraugV5sFuvbD4FW/hw==",
- "requires": {
- "is-buffer": "^1.1.5"
- }
- }
+ "engines": {
+ "node": ">=0.10.0"
}
},
- "hash-base": {
+ "node_modules/has-values/node_modules/kind-of": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-4.0.0.tgz",
+ "integrity": "sha512-24XsCxmEbRwEDbz/qz3stgin8TTzZ1ESR56OMCN0ujYg+vRutNSiOj9bHH9u85DKgXguraugV5sFuvbD4FW/hw==",
+ "dependencies": {
+ "is-buffer": "^1.1.5"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/hash-base": {
"version": "3.1.0",
"resolved": "https://registry.npmjs.org/hash-base/-/hash-base-3.1.0.tgz",
"integrity": "sha512-1nmYp/rhMDiE7AYkDw+lLwlAzz0AntGIe51F3RfFfEqyQ3feY2eI/NcwC6umIQVOASPMsWJLJScWKSSvzL9IVA==",
"dev": true,
- "requires": {
+ "dependencies": {
"inherits": "^2.0.4",
"readable-stream": "^3.6.0",
"safe-buffer": "^5.2.0"
},
- "dependencies": {
- "readable-stream": {
- "version": "3.6.2",
- "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz",
- "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==",
- "dev": true,
- "requires": {
- "inherits": "^2.0.3",
- "string_decoder": "^1.1.1",
- "util-deprecate": "^1.0.1"
- }
- }
+ "engines": {
+ "node": ">=4"
}
},
- "hash.js": {
+ "node_modules/hash-base/node_modules/readable-stream": {
+ "version": "3.6.2",
+ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz",
+ "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==",
+ "dev": true,
+ "dependencies": {
+ "inherits": "^2.0.3",
+ "string_decoder": "^1.1.1",
+ "util-deprecate": "^1.0.1"
+ },
+ "engines": {
+ "node": ">= 6"
+ }
+ },
+ "node_modules/hash.js": {
"version": "1.1.7",
"resolved": "https://registry.npmjs.org/hash.js/-/hash.js-1.1.7.tgz",
"integrity": "sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA==",
"dev": true,
- "requires": {
+ "dependencies": {
"inherits": "^2.0.3",
"minimalistic-assert": "^1.0.1"
}
},
- "hasha": {
+ "node_modules/hasha": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/hasha/-/hasha-3.0.0.tgz",
"integrity": "sha512-w0Kz8lJFBoyaurBiNrIvxPqr/gJ6fOfSkpAPOepN3oECqGJag37xPbOv57izi/KP8auHgNYxn5fXtAb+1LsJ6w==",
"dev": true,
- "requires": {
+ "dependencies": {
"is-stream": "^1.0.1"
+ },
+ "engines": {
+ "node": ">=4"
}
},
- "he": {
+ "node_modules/he": {
"version": "1.1.1",
"resolved": "https://registry.npmjs.org/he/-/he-1.1.1.tgz",
"integrity": "sha512-z/GDPjlRMNOa2XJiB4em8wJpuuBfrFOlYKTZxtpkdr1uPdibHI8rYA3MY0KDObpVyaes0e/aunid/t88ZI2EKA==",
- "dev": true
+ "dev": true,
+ "bin": {
+ "he": "bin/he"
+ }
},
- "helmet": {
+ "node_modules/helmet": {
"version": "3.23.3",
"resolved": "https://registry.npmjs.org/helmet/-/helmet-3.23.3.tgz",
"integrity": "sha512-U3MeYdzPJQhtvqAVBPntVgAvNSOJyagwZwyKsFdyRa8TV3pOKVFljalPOCxbw5Wwf2kncGhmP0qHjyazIdNdSA==",
- "requires": {
+ "dependencies": {
"depd": "2.0.0",
"dont-sniff-mimetype": "1.1.0",
"feature-policy": "0.3.0",
@@ -6588,130 +8434,156 @@
"nocache": "2.1.0",
"referrer-policy": "1.2.0",
"x-xss-protection": "1.3.0"
+ },
+ "engines": {
+ "node": ">=4.0.0"
}
},
- "helmet-crossdomain": {
+ "node_modules/helmet-crossdomain": {
"version": "0.4.0",
"resolved": "https://registry.npmjs.org/helmet-crossdomain/-/helmet-crossdomain-0.4.0.tgz",
- "integrity": "sha512-AB4DTykRw3HCOxovD1nPR16hllrVImeFp5VBV9/twj66lJ2nU75DP8FPL0/Jp4jj79JhTfG+pFI2MD02kWJ+fA=="
+ "integrity": "sha512-AB4DTykRw3HCOxovD1nPR16hllrVImeFp5VBV9/twj66lJ2nU75DP8FPL0/Jp4jj79JhTfG+pFI2MD02kWJ+fA==",
+ "engines": {
+ "node": ">=4.0.0"
+ }
},
- "helmet-csp": {
+ "node_modules/helmet-csp": {
"version": "2.10.0",
"resolved": "https://registry.npmjs.org/helmet-csp/-/helmet-csp-2.10.0.tgz",
"integrity": "sha512-Rz953ZNEFk8sT2XvewXkYN0Ho4GEZdjAZy4stjiEQV3eN7GDxg1QKmYggH7otDyIA7uGA6XnUMVSgeJwbR5X+w==",
- "requires": {
+ "dependencies": {
"bowser": "2.9.0",
"camelize": "1.0.0",
"content-security-policy-builder": "2.1.0",
"dasherize": "2.0.0"
},
- "dependencies": {
- "bowser": {
- "version": "2.9.0",
- "resolved": "https://registry.npmjs.org/bowser/-/bowser-2.9.0.tgz",
- "integrity": "sha512-2ld76tuLBNFekRgmJfT2+3j5MIrP6bFict8WAIT3beq+srz1gcKNAdNKMqHqauQt63NmAa88HfP1/Ypa9Er3HA=="
- }
+ "engines": {
+ "node": ">=4.0.0"
}
},
- "hexoid": {
+ "node_modules/helmet-csp/node_modules/bowser": {
+ "version": "2.9.0",
+ "resolved": "https://registry.npmjs.org/bowser/-/bowser-2.9.0.tgz",
+ "integrity": "sha512-2ld76tuLBNFekRgmJfT2+3j5MIrP6bFict8WAIT3beq+srz1gcKNAdNKMqHqauQt63NmAa88HfP1/Ypa9Er3HA=="
+ },
+ "node_modules/hexoid": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/hexoid/-/hexoid-1.0.0.tgz",
"integrity": "sha512-QFLV0taWQOZtvIRIAdBChesmogZrtuXvVWsFHZTk2SU+anspqZ2vMnoLg7IE1+Uk16N19APic1BuF8bC8c2m5g==",
- "dev": true
+ "dev": true,
+ "engines": {
+ "node": ">=8"
+ }
},
- "hide-powered-by": {
+ "node_modules/hide-powered-by": {
"version": "1.1.0",
"resolved": "https://registry.npmjs.org/hide-powered-by/-/hide-powered-by-1.1.0.tgz",
- "integrity": "sha512-Io1zA2yOA1YJslkr+AJlWSf2yWFkKjvkcL9Ni1XSUqnGLr/qRQe2UI3Cn/J9MsJht7yEVCe0SscY1HgVMujbgg=="
+ "integrity": "sha512-Io1zA2yOA1YJslkr+AJlWSf2yWFkKjvkcL9Ni1XSUqnGLr/qRQe2UI3Cn/J9MsJht7yEVCe0SscY1HgVMujbgg==",
+ "engines": {
+ "node": ">=4.0.0"
+ }
},
- "hmac-drbg": {
+ "node_modules/hmac-drbg": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/hmac-drbg/-/hmac-drbg-1.0.1.tgz",
"integrity": "sha512-Tti3gMqLdZfhOQY1Mzf/AanLiqh1WTiJgEj26ZuYQ9fbkLomzGchCws4FyrSd4VkpBfiNhaE1On+lOz894jvXg==",
"dev": true,
- "requires": {
+ "dependencies": {
"hash.js": "^1.0.3",
"minimalistic-assert": "^1.0.0",
"minimalistic-crypto-utils": "^1.0.1"
}
},
- "hoek": {
+ "node_modules/hoek": {
"version": "6.1.3",
"resolved": "https://registry.npmjs.org/hoek/-/hoek-6.1.3.tgz",
- "integrity": "sha512-YXXAAhmF9zpQbC7LEcREFtXfGq5K1fmd+4PHkBq8NUqmzW3G+Dq10bI/i0KucLRwss3YYFQ0fSfoxBZYiGUqtQ=="
+ "integrity": "sha512-YXXAAhmF9zpQbC7LEcREFtXfGq5K1fmd+4PHkBq8NUqmzW3G+Dq10bI/i0KucLRwss3YYFQ0fSfoxBZYiGUqtQ==",
+ "deprecated": "This module has moved and is now available at @hapi/hoek. Please update your dependencies as this version is no longer maintained an may contain bugs and security issues."
},
- "homedir-polyfill": {
+ "node_modules/homedir-polyfill": {
"version": "1.0.3",
"resolved": "https://registry.npmjs.org/homedir-polyfill/-/homedir-polyfill-1.0.3.tgz",
"integrity": "sha512-eSmmWE5bZTK2Nou4g0AI3zZ9rswp7GRKoKXS1BLUkvPviOqs4YTN1djQIqrXy9k5gEtdLPy86JjRwsNM9tnDcA==",
- "requires": {
+ "dependencies": {
"parse-passwd": "^1.0.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
}
},
- "hosted-git-info": {
+ "node_modules/hosted-git-info": {
"version": "2.8.9",
"resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.9.tgz",
"integrity": "sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw=="
},
- "hpkp": {
+ "node_modules/hpkp": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/hpkp/-/hpkp-2.0.0.tgz",
"integrity": "sha512-TaZpC6cO/k3DFsjfzz1LnOobbVSq+J+7WpJxrVtN4L+8+BPQj8iBDRB2Dx49613N+e7/+ZSQ9ra+xZm7Blf4wg=="
},
- "hsts": {
+ "node_modules/hsts": {
"version": "2.2.0",
"resolved": "https://registry.npmjs.org/hsts/-/hsts-2.2.0.tgz",
"integrity": "sha512-ToaTnQ2TbJkochoVcdXYm4HOCliNozlviNsg+X2XQLQvZNI/kCHR9rZxVYpJB3UPcHz80PgxRyWQ7PdU1r+VBQ==",
- "requires": {
+ "dependencies": {
"depd": "2.0.0"
+ },
+ "engines": {
+ "node": ">=4.0.0"
}
},
- "html-escaper": {
+ "node_modules/html-escaper": {
"version": "2.0.2",
"resolved": "https://registry.npmjs.org/html-escaper/-/html-escaper-2.0.2.tgz",
"integrity": "sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==",
"dev": true
},
- "http-errors": {
+ "node_modules/http-errors": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz",
"integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==",
- "requires": {
+ "dependencies": {
"depd": "2.0.0",
"inherits": "2.0.4",
"setprototypeof": "1.2.0",
"statuses": "2.0.1",
"toidentifier": "1.0.1"
+ },
+ "engines": {
+ "node": ">= 0.8"
}
},
- "https-browserify": {
+ "node_modules/https-browserify": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/https-browserify/-/https-browserify-1.0.0.tgz",
"integrity": "sha512-J+FkSdyD+0mA0N+81tMotaRMfSL9SGi+xpD3T6YApKsc3bGSXJlfXri3VyFOeYkfLRQisDk1W+jIFFKBeUBbBg==",
"dev": true
},
- "https-proxy-agent": {
+ "node_modules/https-proxy-agent": {
"version": "5.0.0",
"resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.0.tgz",
"integrity": "sha512-EkYm5BcKUGiduxzSt3Eppko+PiNWNEpa4ySk9vTC6wDsQJW9rHSa+UhGNJoRYp7bz6Ht1eaRIa6QaJqO5rCFbA==",
- "requires": {
+ "dependencies": {
"agent-base": "6",
"debug": "4"
+ },
+ "engines": {
+ "node": ">= 6"
}
},
- "human-interval": {
+ "node_modules/human-interval": {
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/human-interval/-/human-interval-2.0.1.tgz",
"integrity": "sha512-r4Aotzf+OtKIGQCB3odUowy4GfUDTy3aTWTfLd7ZF2gBCy3XW3v/dJLRefZnOFFnjqs5B1TypvS8WarpBkYUNQ==",
- "requires": {
+ "dependencies": {
"numbered": "^1.1.0"
}
},
- "i18n": {
+ "node_modules/i18n": {
"version": "0.13.4",
"resolved": "https://registry.npmjs.org/i18n/-/i18n-0.13.4.tgz",
"integrity": "sha512-GZnXWeA15jTi9gc1jfgrJcSrNYDg7qbJXSYMuibqPYb1ThORmGCeM+gL6LrDagYRHh87/q/D0jRSOhAfv6wAow==",
- "requires": {
+ "dependencies": {
"debug": "^4.3.3",
"make-plural": "^7.0.0",
"math-interval-parser": "^2.0.1",
@@ -6719,413 +8591,573 @@
"mustache": "^4.2.0",
"sprintf-js": "^1.1.2"
},
+ "engines": {
+ "node": ">=0.10.0"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/mashpie"
+ }
+ },
+ "node_modules/i18n/node_modules/debug": {
+ "version": "4.3.4",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz",
+ "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==",
"dependencies": {
- "debug": {
- "version": "4.3.4",
- "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz",
- "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==",
- "requires": {
- "ms": "2.1.2"
- }
- },
- "mustache": {
- "version": "4.2.0",
- "resolved": "https://registry.npmjs.org/mustache/-/mustache-4.2.0.tgz",
- "integrity": "sha512-71ippSywq5Yb7/tVYyGbkBggbU8H3u5Rz56fH60jGFgr8uHwxs+aSKeqmluIVzM0m0kB7xQjKS6qPfd0b2ZoqQ=="
+ "ms": "2.1.2"
+ },
+ "engines": {
+ "node": ">=6.0"
+ },
+ "peerDependenciesMeta": {
+ "supports-color": {
+ "optional": true
}
}
},
- "iconv-lite": {
+ "node_modules/i18n/node_modules/mustache": {
+ "version": "4.2.0",
+ "resolved": "https://registry.npmjs.org/mustache/-/mustache-4.2.0.tgz",
+ "integrity": "sha512-71ippSywq5Yb7/tVYyGbkBggbU8H3u5Rz56fH60jGFgr8uHwxs+aSKeqmluIVzM0m0kB7xQjKS6qPfd0b2ZoqQ==",
+ "bin": {
+ "mustache": "bin/mustache"
+ }
+ },
+ "node_modules/iconv-lite": {
"version": "0.4.24",
"resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz",
"integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==",
- "requires": {
+ "dependencies": {
"safer-buffer": ">= 2.1.2 < 3"
+ },
+ "engines": {
+ "node": ">=0.10.0"
}
},
- "ieee754": {
+ "node_modules/ieee754": {
"version": "1.2.1",
"resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz",
- "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA=="
+ "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==",
+ "funding": [
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/feross"
+ },
+ {
+ "type": "patreon",
+ "url": "https://www.patreon.com/feross"
+ },
+ {
+ "type": "consulting",
+ "url": "https://feross.org/support"
+ }
+ ]
},
- "ignore": {
+ "node_modules/ignore": {
"version": "4.0.6",
"resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz",
- "integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg=="
+ "integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==",
+ "engines": {
+ "node": ">= 4"
+ }
},
- "ignore-by-default": {
+ "node_modules/ignore-by-default": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/ignore-by-default/-/ignore-by-default-1.0.1.tgz",
"integrity": "sha512-Ius2VYcGNk7T90CppJqcIkS5ooHUZyIQK+ClZfMfMNFEF9VSE73Fq+906u/CWu92x4gzZMWOwfFYckPObzdEbA=="
},
- "immutable": {
+ "node_modules/immutable": {
"version": "4.3.4",
"resolved": "https://registry.npmjs.org/immutable/-/immutable-4.3.4.tgz",
"integrity": "sha512-fsXeu4J4i6WNWSikpI88v/PcVflZz+6kMhUfIwc5SY+poQRPnaf5V7qds6SUyUN3cVxEzuCab7QIoLOQ+DQ1wA==",
"dev": true
},
- "import-fresh": {
+ "node_modules/import-fresh": {
"version": "3.3.0",
"resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz",
"integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==",
"dev": true,
- "requires": {
+ "dependencies": {
"parent-module": "^1.0.0",
"resolve-from": "^4.0.0"
},
- "dependencies": {
- "resolve-from": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz",
- "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==",
- "dev": true
- }
+ "engines": {
+ "node": ">=6"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
}
},
- "import-lazy": {
+ "node_modules/import-fresh/node_modules/resolve-from": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz",
+ "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==",
+ "dev": true,
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/import-lazy": {
"version": "2.1.0",
"resolved": "https://registry.npmjs.org/import-lazy/-/import-lazy-2.1.0.tgz",
- "integrity": "sha512-m7ZEHgtw69qOGw+jwxXkHlrlIPdTGkyh66zXZ1ajZbxkDBNjSY/LGbmjc7h0s2ELsUDTAhFr55TrPSSqJGPG0A=="
+ "integrity": "sha512-m7ZEHgtw69qOGw+jwxXkHlrlIPdTGkyh66zXZ1ajZbxkDBNjSY/LGbmjc7h0s2ELsUDTAhFr55TrPSSqJGPG0A==",
+ "engines": {
+ "node": ">=4"
+ }
},
- "import-local": {
+ "node_modules/import-local": {
"version": "3.1.0",
"resolved": "https://registry.npmjs.org/import-local/-/import-local-3.1.0.tgz",
"integrity": "sha512-ASB07uLtnDs1o6EHjKpX34BKYDSqnFerfTOJL2HvMqF70LnxpjkzDB8J44oT9pu4AMPkQwf8jl6szgvNd2tRIg==",
"dev": true,
- "requires": {
+ "dependencies": {
"pkg-dir": "^4.2.0",
"resolve-cwd": "^3.0.0"
},
- "dependencies": {
- "find-up": {
- "version": "4.1.0",
- "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz",
- "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==",
- "dev": true,
- "requires": {
- "locate-path": "^5.0.0",
- "path-exists": "^4.0.0"
- }
- },
- "locate-path": {
- "version": "5.0.0",
- "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz",
- "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==",
- "dev": true,
- "requires": {
- "p-locate": "^4.1.0"
- }
- },
- "p-limit": {
- "version": "2.3.0",
- "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz",
- "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==",
- "dev": true,
- "requires": {
- "p-try": "^2.0.0"
- }
- },
- "p-locate": {
- "version": "4.1.0",
- "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz",
- "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==",
- "dev": true,
- "requires": {
- "p-limit": "^2.2.0"
- }
- },
- "path-exists": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz",
- "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==",
- "dev": true
- },
- "pkg-dir": {
- "version": "4.2.0",
- "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz",
- "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==",
- "dev": true,
- "requires": {
- "find-up": "^4.0.0"
- }
- }
+ "bin": {
+ "import-local-fixture": "fixtures/cli.js"
+ },
+ "engines": {
+ "node": ">=8"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
}
},
- "imurmurhash": {
+ "node_modules/import-local/node_modules/find-up": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz",
+ "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==",
+ "dev": true,
+ "dependencies": {
+ "locate-path": "^5.0.0",
+ "path-exists": "^4.0.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/import-local/node_modules/locate-path": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz",
+ "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==",
+ "dev": true,
+ "dependencies": {
+ "p-locate": "^4.1.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/import-local/node_modules/p-limit": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz",
+ "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==",
+ "dev": true,
+ "dependencies": {
+ "p-try": "^2.0.0"
+ },
+ "engines": {
+ "node": ">=6"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/import-local/node_modules/p-locate": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz",
+ "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==",
+ "dev": true,
+ "dependencies": {
+ "p-limit": "^2.2.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/import-local/node_modules/path-exists": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz",
+ "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==",
+ "dev": true,
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/import-local/node_modules/pkg-dir": {
+ "version": "4.2.0",
+ "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz",
+ "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==",
+ "dev": true,
+ "dependencies": {
+ "find-up": "^4.0.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/imurmurhash": {
"version": "0.1.4",
"resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz",
- "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA=="
+ "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==",
+ "engines": {
+ "node": ">=0.8.19"
+ }
},
- "indent-string": {
+ "node_modules/indent-string": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz",
- "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg=="
+ "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==",
+ "engines": {
+ "node": ">=8"
+ }
},
- "inflight": {
+ "node_modules/inflight": {
"version": "1.0.6",
"resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz",
"integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==",
- "requires": {
+ "dependencies": {
"once": "^1.3.0",
"wrappy": "1"
}
},
- "inherits": {
+ "node_modules/inherits": {
"version": "2.0.4",
"resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz",
"integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ=="
},
- "ini": {
+ "node_modules/ini": {
"version": "1.3.8",
"resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz",
"integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew=="
},
- "internal-slot": {
+ "node_modules/internal-slot": {
"version": "1.0.5",
"resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.5.tgz",
"integrity": "sha512-Y+R5hJrzs52QCG2laLn4udYVnxsfny9CpOhNhUvk/SSSVyF6T27FzRbF0sroPidSu3X8oEAkOn2K804mjpt6UQ==",
"dev": true,
- "requires": {
+ "dependencies": {
"get-intrinsic": "^1.2.0",
"has": "^1.0.3",
"side-channel": "^1.0.4"
+ },
+ "engines": {
+ "node": ">= 0.4"
}
},
- "interpret": {
+ "node_modules/interpret": {
"version": "2.2.0",
"resolved": "https://registry.npmjs.org/interpret/-/interpret-2.2.0.tgz",
- "integrity": "sha512-Ju0Bz/cEia55xDwUWEa8+olFpCiQoypjnQySseKtmjNrnps3P+xfpUmGr90T7yjlVJmOtybRvPXhKMbHr+fWnw=="
+ "integrity": "sha512-Ju0Bz/cEia55xDwUWEa8+olFpCiQoypjnQySseKtmjNrnps3P+xfpUmGr90T7yjlVJmOtybRvPXhKMbHr+fWnw==",
+ "engines": {
+ "node": ">= 0.10"
+ }
},
- "invert-kv": {
+ "node_modules/invert-kv": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/invert-kv/-/invert-kv-1.0.0.tgz",
- "integrity": "sha512-xgs2NH9AE66ucSq4cNG1nhSFghr5l6tdL15Pk+jl46bmmBapgoaY/AacXyaDznAqmGL99TiLSQgO/XazFSKYeQ=="
+ "integrity": "sha512-xgs2NH9AE66ucSq4cNG1nhSFghr5l6tdL15Pk+jl46bmmBapgoaY/AacXyaDznAqmGL99TiLSQgO/XazFSKYeQ==",
+ "engines": {
+ "node": ">=0.10.0"
+ }
},
- "ip": {
+ "node_modules/ip": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/ip/-/ip-2.0.0.tgz",
"integrity": "sha512-WKa+XuLG1A1R0UWhl2+1XQSi+fZWMsYKffMZTTYsiZaUD8k2yDAj5atimTUD2TZkyCkNEeYE5NhFZmupOGtjYQ=="
},
- "ip-regex": {
+ "node_modules/ip-regex": {
"version": "2.1.0",
"resolved": "https://registry.npmjs.org/ip-regex/-/ip-regex-2.1.0.tgz",
"integrity": "sha512-58yWmlHpp7VYfcdTwMTvwMmqx/Elfxjd9RXTDyMsbL7lLWmhMylLEqiYVLKuLzOZqVgiWXD9MfR62Vv89VRxkw==",
- "dev": true
+ "dev": true,
+ "engines": {
+ "node": ">=4"
+ }
},
- "ipaddr.js": {
+ "node_modules/ipaddr.js": {
"version": "1.9.1",
"resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz",
- "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g=="
+ "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==",
+ "engines": {
+ "node": ">= 0.10"
+ }
},
- "is-absolute": {
+ "node_modules/is-absolute": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/is-absolute/-/is-absolute-1.0.0.tgz",
"integrity": "sha512-dOWoqflvcydARa360Gvv18DZ/gRuHKi2NU/wU5X1ZFzdYfH29nkiNZsF3mp4OJ3H4yo9Mx8A/uAGNzpzPN3yBA==",
- "requires": {
+ "dependencies": {
"is-relative": "^1.0.0",
"is-windows": "^1.0.1"
+ },
+ "engines": {
+ "node": ">=0.10.0"
}
},
- "is-accessor-descriptor": {
+ "node_modules/is-accessor-descriptor": {
"version": "0.1.6",
"resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz",
"integrity": "sha512-e1BM1qnDbMRG3ll2U9dSK0UMHuWOs3pY3AtcFsmvwPtKL3MML/Q86i+GilLfvqEs4GW+ExB91tQ3Ig9noDIZ+A==",
- "requires": {
+ "dependencies": {
"kind-of": "^3.0.2"
},
- "dependencies": {
- "kind-of": {
- "version": "3.2.2",
- "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
- "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==",
- "requires": {
- "is-buffer": "^1.1.5"
- }
- }
+ "engines": {
+ "node": ">=0.10.0"
}
},
- "is-array-buffer": {
+ "node_modules/is-accessor-descriptor/node_modules/kind-of": {
+ "version": "3.2.2",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
+ "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==",
+ "dependencies": {
+ "is-buffer": "^1.1.5"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/is-array-buffer": {
"version": "3.0.2",
"resolved": "https://registry.npmjs.org/is-array-buffer/-/is-array-buffer-3.0.2.tgz",
"integrity": "sha512-y+FyyR/w8vfIRq4eQcM1EYgSTnmHXPqaF+IgzgraytCFq5Xh8lllDVmAZolPJiZttZLeFSINPYMaEJ7/vWUa1w==",
"dev": true,
- "requires": {
+ "dependencies": {
"call-bind": "^1.0.2",
"get-intrinsic": "^1.2.0",
"is-typed-array": "^1.1.10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
}
},
- "is-arrayish": {
+ "node_modules/is-arrayish": {
"version": "0.2.1",
"resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz",
"integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg=="
},
- "is-bigint": {
+ "node_modules/is-bigint": {
"version": "1.0.4",
"resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.4.tgz",
"integrity": "sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==",
"dev": true,
- "requires": {
+ "dependencies": {
"has-bigints": "^1.0.1"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
}
},
- "is-binary-path": {
+ "node_modules/is-binary-path": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-1.0.1.tgz",
"integrity": "sha512-9fRVlXc0uCxEDj1nQzaWONSpbTfx0FmJfzHF7pwlI8DkWGoHBBea4Pg5Ky0ojwwxQmnSifgbKkI06Qv0Ljgj+Q==",
- "requires": {
+ "dependencies": {
"binary-extensions": "^1.0.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
}
},
- "is-boolean-object": {
+ "node_modules/is-boolean-object": {
"version": "1.1.2",
"resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.1.2.tgz",
"integrity": "sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==",
"dev": true,
- "requires": {
+ "dependencies": {
"call-bind": "^1.0.2",
"has-tostringtag": "^1.0.0"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
}
},
- "is-buffer": {
+ "node_modules/is-buffer": {
"version": "1.1.6",
"resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz",
"integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w=="
},
- "is-callable": {
+ "node_modules/is-callable": {
"version": "1.2.7",
"resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.7.tgz",
"integrity": "sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==",
- "dev": true
+ "dev": true,
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
},
- "is-ci": {
+ "node_modules/is-ci": {
"version": "1.2.1",
"resolved": "https://registry.npmjs.org/is-ci/-/is-ci-1.2.1.tgz",
"integrity": "sha512-s6tfsaQaQi3JNciBH6shVqEDvhGut0SUXr31ag8Pd8BBbVVlcGfWhpPmEOoM6RJ5TFhbypvf5yyRw/VXW1IiWg==",
- "requires": {
+ "dependencies": {
"ci-info": "^1.5.0"
+ },
+ "bin": {
+ "is-ci": "bin.js"
}
},
- "is-core-module": {
+ "node_modules/is-core-module": {
"version": "2.13.0",
"resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.13.0.tgz",
"integrity": "sha512-Z7dk6Qo8pOCp3l4tsX2C5ZVas4V+UxwQodwZhLopL91TX8UyyHEXafPcyoeeWuLrwzHcr3igO78wNLwHJHsMCQ==",
- "requires": {
+ "dependencies": {
"has": "^1.0.3"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
}
},
- "is-data-descriptor": {
+ "node_modules/is-data-descriptor": {
"version": "0.1.4",
"resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz",
"integrity": "sha512-+w9D5ulSoBNlmw9OHn3U2v51SyoCd0he+bB3xMl62oijhrspxowjU+AIcDY0N3iEJbUEkB15IlMASQsxYigvXg==",
- "requires": {
+ "dependencies": {
"kind-of": "^3.0.2"
},
- "dependencies": {
- "kind-of": {
- "version": "3.2.2",
- "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
- "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==",
- "requires": {
- "is-buffer": "^1.1.5"
- }
- }
+ "engines": {
+ "node": ">=0.10.0"
}
},
- "is-date-object": {
+ "node_modules/is-data-descriptor/node_modules/kind-of": {
+ "version": "3.2.2",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
+ "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==",
+ "dependencies": {
+ "is-buffer": "^1.1.5"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/is-date-object": {
"version": "1.0.5",
"resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.5.tgz",
"integrity": "sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==",
"dev": true,
- "requires": {
+ "dependencies": {
"has-tostringtag": "^1.0.0"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
}
},
- "is-descriptor": {
+ "node_modules/is-descriptor": {
"version": "0.1.6",
"resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz",
"integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==",
- "requires": {
+ "dependencies": {
"is-accessor-descriptor": "^0.1.6",
"is-data-descriptor": "^0.1.4",
"kind-of": "^5.0.0"
},
- "dependencies": {
- "kind-of": {
- "version": "5.1.0",
- "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz",
- "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw=="
- }
+ "engines": {
+ "node": ">=0.10.0"
}
},
- "is-expression": {
+ "node_modules/is-descriptor/node_modules/kind-of": {
+ "version": "5.1.0",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz",
+ "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==",
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/is-expression": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/is-expression/-/is-expression-4.0.0.tgz",
"integrity": "sha512-zMIXX63sxzG3XrkHkrAPvm/OVZVSCPNkwMHU8oTX7/U3AL78I0QXCEICXUM13BIa8TYGZ68PiTKfQz3yaTNr4A==",
- "requires": {
+ "dependencies": {
"acorn": "^7.1.1",
"object-assign": "^4.1.1"
}
},
- "is-extendable": {
+ "node_modules/is-extendable": {
"version": "0.1.1",
"resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz",
- "integrity": "sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw=="
+ "integrity": "sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==",
+ "engines": {
+ "node": ">=0.10.0"
+ }
},
- "is-extglob": {
+ "node_modules/is-extglob": {
"version": "2.1.1",
"resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz",
- "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ=="
+ "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==",
+ "engines": {
+ "node": ">=0.10.0"
+ }
},
- "is-fullwidth-code-point": {
+ "node_modules/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": "sha512-1pqUqRjkhPJ9miNq9SwMfdvi6lBJcd6eFxvfaivQhaH3SgisfiuudvFntdKOmxuee/77l+FPjKrQjWvmPjWrRw==",
- "requires": {
+ "dependencies": {
"number-is-nan": "^1.0.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
}
},
- "is-generator": {
+ "node_modules/is-generator": {
"version": "1.0.3",
"resolved": "https://registry.npmjs.org/is-generator/-/is-generator-1.0.3.tgz",
"integrity": "sha512-G56jBpbJeg7ds83HW1LuShNs8J73Fv3CPz/bmROHOHlnKkN8sWb9ujiagjmxxMUywftgq48HlBZELKKqFLk0oA=="
},
- "is-glob": {
+ "node_modules/is-glob": {
"version": "4.0.3",
"resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz",
"integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==",
- "requires": {
+ "dependencies": {
"is-extglob": "^2.1.1"
+ },
+ "engines": {
+ "node": ">=0.10.0"
}
},
- "is-installed-globally": {
+ "node_modules/is-installed-globally": {
"version": "0.1.0",
"resolved": "https://registry.npmjs.org/is-installed-globally/-/is-installed-globally-0.1.0.tgz",
"integrity": "sha512-ERNhMg+i/XgDwPIPF3u24qpajVreaiSuvpb1Uu0jugw7KKcxGyCX8cgp8P5fwTmAuXku6beDHHECdKArjlg7tw==",
- "requires": {
+ "dependencies": {
"global-dirs": "^0.1.0",
"is-path-inside": "^1.0.0"
+ },
+ "engines": {
+ "node": ">=4"
}
},
- "is-ip": {
+ "node_modules/is-ip": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/is-ip/-/is-ip-2.0.0.tgz",
"integrity": "sha512-9MTn0dteHETtyUx8pxqMwg5hMBi3pvlyglJ+b79KOCca0po23337LbVV2Hl4xmMvfw++ljnO0/+5G6G+0Szh6g==",
"dev": true,
- "requires": {
+ "dependencies": {
"ip-regex": "^2.0.0"
+ },
+ "engines": {
+ "node": ">=4"
}
},
- "is-my-ip-valid": {
+ "node_modules/is-my-ip-valid": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/is-my-ip-valid/-/is-my-ip-valid-1.0.1.tgz",
"integrity": "sha512-jxc8cBcOWbNK2i2aTkCZP6i7wkHF1bqKFrwEHuN5Jtg5BSaZHUZQ/JTOJwoV41YvHnOaRyWWh72T/KvfNz9DJg=="
},
- "is-my-json-valid": {
+ "node_modules/is-my-json-valid": {
"version": "2.20.6",
"resolved": "https://registry.npmjs.org/is-my-json-valid/-/is-my-json-valid-2.20.6.tgz",
"integrity": "sha512-1JQwulVNjx8UqkPE/bqDaxtH4PXCe/2VRh/y3p99heOV87HG4Id5/VfDswd+YiAfHcRTfDlWgISycnHuhZq1aw==",
- "requires": {
+ "dependencies": {
"generate-function": "^2.0.0",
"generate-object-property": "^1.1.0",
"is-my-ip-valid": "^1.0.0",
@@ -7133,230 +9165,330 @@
"xtend": "^4.0.0"
}
},
- "is-nan": {
+ "node_modules/is-nan": {
"version": "1.3.2",
"resolved": "https://registry.npmjs.org/is-nan/-/is-nan-1.3.2.tgz",
"integrity": "sha512-E+zBKpQ2t6MEo1VsonYmluk9NxGrbzpeeLC2xIViuO2EjU2xsXsBPwTr3Ykv9l08UYEVEdWeRZNouaZqF6RN0w==",
- "requires": {
+ "dependencies": {
"call-bind": "^1.0.0",
"define-properties": "^1.1.3"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
}
},
- "is-negated-glob": {
+ "node_modules/is-negated-glob": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/is-negated-glob/-/is-negated-glob-1.0.0.tgz",
- "integrity": "sha512-czXVVn/QEmgvej1f50BZ648vUI+em0xqMq2Sn+QncCLN4zj1UAxlT+kw/6ggQTOaZPd1HqKQGEqbpQVtJucWug=="
+ "integrity": "sha512-czXVVn/QEmgvej1f50BZ648vUI+em0xqMq2Sn+QncCLN4zj1UAxlT+kw/6ggQTOaZPd1HqKQGEqbpQVtJucWug==",
+ "engines": {
+ "node": ">=0.10.0"
+ }
},
- "is-negative-zero": {
+ "node_modules/is-negative-zero": {
"version": "2.0.2",
"resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.2.tgz",
"integrity": "sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA==",
- "dev": true
+ "dev": true,
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
},
- "is-npm": {
+ "node_modules/is-npm": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/is-npm/-/is-npm-1.0.0.tgz",
- "integrity": "sha512-9r39FIr3d+KD9SbX0sfMsHzb5PP3uimOiwr3YupUaUFG4W0l1U57Rx3utpttV7qz5U3jmrO5auUa04LU9pyHsg=="
+ "integrity": "sha512-9r39FIr3d+KD9SbX0sfMsHzb5PP3uimOiwr3YupUaUFG4W0l1U57Rx3utpttV7qz5U3jmrO5auUa04LU9pyHsg==",
+ "engines": {
+ "node": ">=0.10.0"
+ }
},
- "is-number": {
+ "node_modules/is-number": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz",
"integrity": "sha512-4cboCqIpliH+mAvFNegjZQ4kgKc3ZUhQVr3HvWbSh5q3WH2v82ct+T2Y1hdU5Gdtorx/cLifQjqCbL7bpznLTg==",
- "requires": {
+ "dependencies": {
"kind-of": "^3.0.2"
},
- "dependencies": {
- "kind-of": {
- "version": "3.2.2",
- "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
- "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==",
- "requires": {
- "is-buffer": "^1.1.5"
- }
- }
+ "engines": {
+ "node": ">=0.10.0"
}
},
- "is-number-object": {
+ "node_modules/is-number-object": {
"version": "1.0.7",
"resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.7.tgz",
"integrity": "sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ==",
"dev": true,
- "requires": {
+ "dependencies": {
"has-tostringtag": "^1.0.0"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
}
},
- "is-obj": {
+ "node_modules/is-number/node_modules/kind-of": {
+ "version": "3.2.2",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
+ "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==",
+ "dependencies": {
+ "is-buffer": "^1.1.5"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/is-obj": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/is-obj/-/is-obj-1.0.1.tgz",
- "integrity": "sha512-l4RyHgRqGN4Y3+9JHVrNqO+tN0rV5My76uW5/nuO4K1b6vw5G8d/cmFjP9tRfEsdhZNt0IFdZuK/c2Vr4Nb+Qg=="
+ "integrity": "sha512-l4RyHgRqGN4Y3+9JHVrNqO+tN0rV5My76uW5/nuO4K1b6vw5G8d/cmFjP9tRfEsdhZNt0IFdZuK/c2Vr4Nb+Qg==",
+ "engines": {
+ "node": ">=0.10.0"
+ }
},
- "is-path-inside": {
+ "node_modules/is-path-inside": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-1.0.1.tgz",
"integrity": "sha512-qhsCR/Esx4U4hg/9I19OVUAJkGWtjRYHMRgUMZE2TDdj+Ag+kttZanLupfddNyglzz50cUlmWzUaI37GDfNx/g==",
- "requires": {
+ "dependencies": {
"path-is-inside": "^1.0.1"
+ },
+ "engines": {
+ "node": ">=0.10.0"
}
},
- "is-plain-obj": {
+ "node_modules/is-plain-obj": {
"version": "1.1.0",
"resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-1.1.0.tgz",
- "integrity": "sha512-yvkRyxmFKEOQ4pNXCmJG5AEQNlXJS5LaONXo5/cLdTZdWvsZ1ioJEonLGAosKlMWE8lwUy/bJzMjcw8az73+Fg=="
+ "integrity": "sha512-yvkRyxmFKEOQ4pNXCmJG5AEQNlXJS5LaONXo5/cLdTZdWvsZ1ioJEonLGAosKlMWE8lwUy/bJzMjcw8az73+Fg==",
+ "engines": {
+ "node": ">=0.10.0"
+ }
},
- "is-plain-object": {
+ "node_modules/is-plain-object": {
"version": "2.0.4",
"resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz",
"integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==",
- "requires": {
+ "dependencies": {
"isobject": "^3.0.1"
+ },
+ "engines": {
+ "node": ">=0.10.0"
}
},
- "is-promise": {
+ "node_modules/is-promise": {
"version": "2.2.2",
"resolved": "https://registry.npmjs.org/is-promise/-/is-promise-2.2.2.tgz",
"integrity": "sha512-+lP4/6lKUBfQjZ2pdxThZvLUAafmZb8OAxFb8XXtiQmS35INgr85hdOGoEs124ez1FCnZJt6jau/T+alh58QFQ=="
},
- "is-property": {
+ "node_modules/is-property": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/is-property/-/is-property-1.0.2.tgz",
"integrity": "sha512-Ks/IoX00TtClbGQr4TWXemAnktAQvYB7HzcCxDGqEZU6oCmb2INHuOoKxbtR+HFkmYWBKv/dOZtGRiAjDhj92g=="
},
- "is-redirect": {
+ "node_modules/is-redirect": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/is-redirect/-/is-redirect-1.0.0.tgz",
- "integrity": "sha512-cr/SlUEe5zOGmzvj9bUyC4LVvkNVAXu4GytXLNMr1pny+a65MpQ9IJzFHD5vi7FyJgb4qt27+eS3TuQnqB+RQw=="
+ "integrity": "sha512-cr/SlUEe5zOGmzvj9bUyC4LVvkNVAXu4GytXLNMr1pny+a65MpQ9IJzFHD5vi7FyJgb4qt27+eS3TuQnqB+RQw==",
+ "engines": {
+ "node": ">=0.10.0"
+ }
},
- "is-regex": {
+ "node_modules/is-regex": {
"version": "1.1.4",
"resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.4.tgz",
"integrity": "sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==",
- "requires": {
+ "dependencies": {
"call-bind": "^1.0.2",
"has-tostringtag": "^1.0.0"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
}
},
- "is-relative": {
+ "node_modules/is-relative": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/is-relative/-/is-relative-1.0.0.tgz",
"integrity": "sha512-Kw/ReK0iqwKeu0MITLFuj0jbPAmEiOsIwyIXvvbfa6QfmN9pkD1M+8pdk7Rl/dTKbH34/XBFMbgD4iMJhLQbGA==",
- "requires": {
+ "dependencies": {
"is-unc-path": "^1.0.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
}
},
- "is-retry-allowed": {
+ "node_modules/is-retry-allowed": {
"version": "1.2.0",
"resolved": "https://registry.npmjs.org/is-retry-allowed/-/is-retry-allowed-1.2.0.tgz",
- "integrity": "sha512-RUbUeKwvm3XG2VYamhJL1xFktgjvPzL0Hq8C+6yrWIswDy3BIXGqCxhxkc30N9jqK311gVU137K8Ei55/zVJRg=="
+ "integrity": "sha512-RUbUeKwvm3XG2VYamhJL1xFktgjvPzL0Hq8C+6yrWIswDy3BIXGqCxhxkc30N9jqK311gVU137K8Ei55/zVJRg==",
+ "engines": {
+ "node": ">=0.10.0"
+ }
},
- "is-shared-array-buffer": {
+ "node_modules/is-shared-array-buffer": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.2.tgz",
"integrity": "sha512-sqN2UDu1/0y6uvXyStCOzyhAjCSlHceFoMKJW8W9EU9cvic/QdsZ0kEU93HEy3IUEFZIiH/3w+AH/UQbPHNdhA==",
"dev": true,
- "requires": {
+ "dependencies": {
"call-bind": "^1.0.2"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
}
},
- "is-stream": {
+ "node_modules/is-stream": {
"version": "1.1.0",
"resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz",
- "integrity": "sha512-uQPm8kcs47jx38atAcWTVxyltQYoPT68y9aWYdV6yWXSyW8mzSat0TL6CiWdZeCdF3KrAvpVtnHbTv4RN+rqdQ=="
+ "integrity": "sha512-uQPm8kcs47jx38atAcWTVxyltQYoPT68y9aWYdV6yWXSyW8mzSat0TL6CiWdZeCdF3KrAvpVtnHbTv4RN+rqdQ==",
+ "engines": {
+ "node": ">=0.10.0"
+ }
},
- "is-string": {
+ "node_modules/is-string": {
"version": "1.0.7",
"resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.7.tgz",
"integrity": "sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==",
"dev": true,
- "requires": {
+ "dependencies": {
"has-tostringtag": "^1.0.0"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
}
},
- "is-symbol": {
+ "node_modules/is-symbol": {
"version": "1.0.4",
"resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.4.tgz",
"integrity": "sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==",
"dev": true,
- "requires": {
+ "dependencies": {
"has-symbols": "^1.0.2"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
}
},
- "is-typed-array": {
+ "node_modules/is-typed-array": {
"version": "1.1.12",
"resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.12.tgz",
"integrity": "sha512-Z14TF2JNG8Lss5/HMqt0//T9JeHXttXy5pH/DBU4vi98ozO2btxzq9MwYDZYnKwU8nRsz/+GVFVRDq3DkVuSPg==",
"dev": true,
- "requires": {
+ "dependencies": {
"which-typed-array": "^1.1.11"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
}
},
- "is-unc-path": {
+ "node_modules/is-unc-path": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/is-unc-path/-/is-unc-path-1.0.0.tgz",
"integrity": "sha512-mrGpVd0fs7WWLfVsStvgF6iEJnbjDFZh9/emhRDcGWTduTfNHd9CHeUwH3gYIjdbwo4On6hunkztwOaAw0yllQ==",
- "requires": {
+ "dependencies": {
"unc-path-regex": "^0.1.2"
+ },
+ "engines": {
+ "node": ">=0.10.0"
}
},
- "is-utf8": {
+ "node_modules/is-utf8": {
"version": "0.2.1",
"resolved": "https://registry.npmjs.org/is-utf8/-/is-utf8-0.2.1.tgz",
"integrity": "sha512-rMYPYvCzsXywIsldgLaSoPlw5PfoB/ssr7hY4pLfcodrA5M/eArza1a9VmTiNIBNMjOGr1Ow9mTyU2o69U6U9Q=="
},
- "is-valid-glob": {
+ "node_modules/is-valid-glob": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/is-valid-glob/-/is-valid-glob-1.0.0.tgz",
- "integrity": "sha512-AhiROmoEFDSsjx8hW+5sGwgKVIORcXnrlAx/R0ZSeaPw70Vw0CqkGBBhHGL58Uox2eXnU1AnvXJl1XlyedO5bA=="
+ "integrity": "sha512-AhiROmoEFDSsjx8hW+5sGwgKVIORcXnrlAx/R0ZSeaPw70Vw0CqkGBBhHGL58Uox2eXnU1AnvXJl1XlyedO5bA==",
+ "engines": {
+ "node": ">=0.10.0"
+ }
},
- "is-weakref": {
+ "node_modules/is-weakref": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/is-weakref/-/is-weakref-1.0.2.tgz",
"integrity": "sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==",
"dev": true,
- "requires": {
+ "dependencies": {
"call-bind": "^1.0.2"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
}
},
- "is-windows": {
+ "node_modules/is-windows": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz",
- "integrity": "sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA=="
+ "integrity": "sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==",
+ "engines": {
+ "node": ">=0.10.0"
+ }
},
- "isarray": {
+ "node_modules/isarray": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
"integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ=="
},
- "isexe": {
+ "node_modules/isexe": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz",
"integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw=="
},
- "isobject": {
+ "node_modules/isobject": {
"version": "3.0.1",
"resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz",
- "integrity": "sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg=="
+ "integrity": "sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==",
+ "engines": {
+ "node": ">=0.10.0"
+ }
},
- "istanbul-lib-coverage": {
+ "node_modules/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
+ "dev": true,
+ "engines": {
+ "node": ">=6"
+ }
},
- "istanbul-lib-hook": {
+ "node_modules/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": {
+ "dependencies": {
"append-transform": "^1.0.0"
+ },
+ "engines": {
+ "node": ">=6"
}
},
- "istanbul-lib-instrument": {
+ "node_modules/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": {
+ "dependencies": {
"@babel/generator": "^7.4.0",
"@babel/parser": "^7.4.3",
"@babel/template": "^7.4.0",
@@ -7365,220 +9497,272 @@
"istanbul-lib-coverage": "^2.0.5",
"semver": "^6.0.0"
},
- "dependencies": {
- "semver": {
- "version": "6.3.1",
- "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz",
- "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==",
- "dev": true
- }
+ "engines": {
+ "node": ">=6"
}
},
- "istanbul-lib-report": {
+ "node_modules/istanbul-lib-instrument/node_modules/semver": {
+ "version": "6.3.1",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz",
+ "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==",
+ "dev": true,
+ "bin": {
+ "semver": "bin/semver.js"
+ }
+ },
+ "node_modules/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": {
+ "dependencies": {
"istanbul-lib-coverage": "^2.0.5",
"make-dir": "^2.1.0",
"supports-color": "^6.1.0"
},
- "dependencies": {
- "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"
- }
- },
- "semver": {
- "version": "5.7.2",
- "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz",
- "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==",
- "dev": true
- },
- "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"
- }
- }
+ "engines": {
+ "node": ">=6"
}
},
- "istanbul-lib-source-maps": {
+ "node_modules/istanbul-lib-report/node_modules/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,
+ "dependencies": {
+ "pify": "^4.0.1",
+ "semver": "^5.6.0"
+ },
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/istanbul-lib-report/node_modules/semver": {
+ "version": "5.7.2",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz",
+ "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==",
+ "dev": true,
+ "bin": {
+ "semver": "bin/semver"
+ }
+ },
+ "node_modules/istanbul-lib-report/node_modules/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,
+ "dependencies": {
+ "has-flag": "^3.0.0"
+ },
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/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": {
+ "dependencies": {
"debug": "^4.1.1",
"istanbul-lib-coverage": "^2.0.5",
"make-dir": "^2.1.0",
"rimraf": "^2.6.3",
"source-map": "^0.6.1"
},
- "dependencies": {
- "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"
- }
- },
- "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"
- }
- },
- "semver": {
- "version": "5.7.2",
- "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz",
- "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==",
- "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
- }
+ "engines": {
+ "node": ">=6"
}
},
- "istanbul-reports": {
+ "node_modules/istanbul-lib-source-maps/node_modules/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,
+ "dependencies": {
+ "pify": "^4.0.1",
+ "semver": "^5.6.0"
+ },
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/istanbul-lib-source-maps/node_modules/rimraf": {
+ "version": "2.7.1",
+ "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz",
+ "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==",
+ "dev": true,
+ "dependencies": {
+ "glob": "^7.1.3"
+ },
+ "bin": {
+ "rimraf": "bin.js"
+ }
+ },
+ "node_modules/istanbul-lib-source-maps/node_modules/semver": {
+ "version": "5.7.2",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz",
+ "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==",
+ "dev": true,
+ "bin": {
+ "semver": "bin/semver"
+ }
+ },
+ "node_modules/istanbul-lib-source-maps/node_modules/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,
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/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": {
+ "dependencies": {
"html-escaper": "^2.0.0"
+ },
+ "engines": {
+ "node": ">=6"
}
},
- "javascript-natural-sort": {
+ "node_modules/javascript-natural-sort": {
"version": "0.7.1",
"resolved": "https://registry.npmjs.org/javascript-natural-sort/-/javascript-natural-sort-0.7.1.tgz",
"integrity": "sha512-nO6jcEfZWQXDhOiBtG2KvKyEptz7RVbpGP4vTD2hLBdmNQSsCiicO2Ioinv6UI4y9ukqnBpy+XZ9H6uLNgJTlw=="
},
- "jest-worker": {
+ "node_modules/jest-worker": {
"version": "27.5.1",
"resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-27.5.1.tgz",
"integrity": "sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg==",
- "dev": true,
- "requires": {
+ "dependencies": {
"@types/node": "*",
"merge-stream": "^2.0.0",
"supports-color": "^8.0.0"
},
- "dependencies": {
- "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
- },
- "supports-color": {
- "version": "8.1.1",
- "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz",
- "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==",
- "dev": true,
- "requires": {
- "has-flag": "^4.0.0"
- }
- }
+ "engines": {
+ "node": ">= 10.13.0"
}
},
- "js-money": {
+ "node_modules/jest-worker/node_modules/has-flag": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
+ "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/jest-worker/node_modules/supports-color": {
+ "version": "8.1.1",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz",
+ "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==",
+ "dependencies": {
+ "has-flag": "^4.0.0"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/supports-color?sponsor=1"
+ }
+ },
+ "node_modules/js-money": {
"version": "0.6.3",
"resolved": "https://registry.npmjs.org/js-money/-/js-money-0.6.3.tgz",
"integrity": "sha512-B+1RjjusKUribtW1Bs9uoNN32SgXBxLPQ+pF7ldg8V6+QR8cOOhRx3HIChK4v0fQegnijigBetNozjjc5B4+iw==",
- "requires": {
+ "dependencies": {
"lodash": "4.x.x"
}
},
- "js-stringify": {
+ "node_modules/js-stringify": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/js-stringify/-/js-stringify-1.0.2.tgz",
"integrity": "sha512-rtS5ATOo2Q5k1G+DADISilDA6lv79zIiwFd6CcjuIxGKLFm5C+RLImRscVap9k55i+MOZwgliw+NejvkLuGD5g=="
},
- "js-tokens": {
+ "node_modules/js-tokens": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz",
"integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ=="
},
- "js-yaml": {
+ "node_modules/js-yaml": {
"version": "4.1.0",
"resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz",
"integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==",
"dev": true,
- "requires": {
+ "dependencies": {
"argparse": "^2.0.1"
+ },
+ "bin": {
+ "js-yaml": "bin/js-yaml.js"
}
},
- "jsesc": {
+ "node_modules/jsesc": {
"version": "2.5.2",
"resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz",
"integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==",
- "dev": true
+ "dev": true,
+ "bin": {
+ "jsesc": "bin/jsesc"
+ },
+ "engines": {
+ "node": ">=4"
+ }
},
- "json-buffer": {
+ "node_modules/json-buffer": {
"version": "3.0.1",
"resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz",
"integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==",
"dev": true
},
- "json-parse-better-errors": {
+ "node_modules/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-parse-even-better-errors": {
+ "node_modules/json-parse-even-better-errors": {
"version": "2.3.1",
"resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz",
"integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w=="
},
- "json-schema-traverse": {
+ "node_modules/json-schema-traverse": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz",
"integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug=="
},
- "json-stable-stringify-without-jsonify": {
+ "node_modules/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": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw=="
},
- "json5": {
+ "node_modules/json5": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/json5/-/json5-1.0.2.tgz",
"integrity": "sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==",
"dev": true,
- "requires": {
+ "dependencies": {
"minimist": "^1.2.0"
+ },
+ "bin": {
+ "json5": "lib/cli.js"
}
},
- "jsonpointer": {
+ "node_modules/jsonpointer": {
"version": "5.0.1",
"resolved": "https://registry.npmjs.org/jsonpointer/-/jsonpointer-5.0.1.tgz",
- "integrity": "sha512-p/nXbhSEcu3pZRdkW1OfJhpsVtW1gd4Wa1fnQc9YLiTfAjn0312eMKimbdIQzuZl9aa9xUGaRlP9T/CJE/ditQ=="
+ "integrity": "sha512-p/nXbhSEcu3pZRdkW1OfJhpsVtW1gd4Wa1fnQc9YLiTfAjn0312eMKimbdIQzuZl9aa9xUGaRlP9T/CJE/ditQ==",
+ "engines": {
+ "node": ">=0.10.0"
+ }
},
- "jsonwebtoken": {
+ "node_modules/jsonwebtoken": {
"version": "8.5.1",
"resolved": "https://registry.npmjs.org/jsonwebtoken/-/jsonwebtoken-8.5.1.tgz",
"integrity": "sha512-XjwVfRS6jTMsqYs0EsuJ4LGxXV14zQybNd4L2r0UvbVnSF9Af8x7p5MzbJ90Ioz/9TI41/hTCvznF/loiSzn8w==",
- "requires": {
+ "dependencies": {
"jws": "^3.2.2",
"lodash.includes": "^4.3.0",
"lodash.isboolean": "^3.0.3",
@@ -7590,82 +9774,93 @@
"ms": "^2.1.1",
"semver": "^5.6.0"
},
- "dependencies": {
- "semver": {
- "version": "5.7.2",
- "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz",
- "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g=="
- }
+ "engines": {
+ "node": ">=4",
+ "npm": ">=1.4.28"
}
},
- "jstransformer": {
+ "node_modules/jsonwebtoken/node_modules/semver": {
+ "version": "5.7.2",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz",
+ "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==",
+ "bin": {
+ "semver": "bin/semver"
+ }
+ },
+ "node_modules/jstransformer": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/jstransformer/-/jstransformer-1.0.0.tgz",
"integrity": "sha512-C9YK3Rf8q6VAPDCCU9fnqo3mAfOH6vUGnMcP4AQAYIEpWtfGLpwOTmZ+igtdK5y+VvI2n3CyYSzy4Qh34eq24A==",
- "requires": {
+ "dependencies": {
"is-promise": "^2.0.0",
"promise": "^7.0.1"
}
},
- "junk": {
+ "node_modules/junk": {
"version": "3.1.0",
"resolved": "https://registry.npmjs.org/junk/-/junk-3.1.0.tgz",
- "integrity": "sha512-pBxcB3LFc8QVgdggvZWyeys+hnrNWg4OcZIU/1X59k5jQdLBlCsYGRQaz234SqoRLTCgMH00fY0xRJH+F9METQ=="
+ "integrity": "sha512-pBxcB3LFc8QVgdggvZWyeys+hnrNWg4OcZIU/1X59k5jQdLBlCsYGRQaz234SqoRLTCgMH00fY0xRJH+F9METQ==",
+ "engines": {
+ "node": ">=8"
+ }
},
- "just-debounce": {
+ "node_modules/just-debounce": {
"version": "1.1.0",
"resolved": "https://registry.npmjs.org/just-debounce/-/just-debounce-1.1.0.tgz",
"integrity": "sha512-qpcRocdkUmf+UTNBYx5w6dexX5J31AKK1OmPwH630a83DdVVUIngk55RSAiIGpQyoH0dlr872VHfPjnQnK1qDQ=="
},
- "just-extend": {
+ "node_modules/just-extend": {
"version": "4.2.1",
"resolved": "https://registry.npmjs.org/just-extend/-/just-extend-4.2.1.tgz",
"integrity": "sha512-g3UB796vUFIY90VIv/WX3L2c8CS2MdWUww3CNrYmqza1Fg0DURc2K/O4YrnklBdQarSJ/y8JnJYDGc+1iumQjg==",
"dev": true
},
- "jwa": {
+ "node_modules/jwa": {
"version": "1.4.1",
"resolved": "https://registry.npmjs.org/jwa/-/jwa-1.4.1.tgz",
"integrity": "sha512-qiLX/xhEEFKUAJ6FiBMbes3w9ATzyk5W7Hvzpa/SLYdxNtng+gcurvrI7TbACjIXlsJyr05/S1oUhZrc63evQA==",
- "requires": {
+ "dependencies": {
"buffer-equal-constant-time": "1.0.1",
"ecdsa-sig-formatter": "1.0.11",
"safe-buffer": "^5.0.1"
}
},
- "jws": {
+ "node_modules/jws": {
"version": "3.2.2",
"resolved": "https://registry.npmjs.org/jws/-/jws-3.2.2.tgz",
"integrity": "sha512-YHlZCB6lMTllWDtSPHz/ZXTsi8S00usEV6v1tjq8tOUZzw7DpSDWVXjXDre6ed1w/pd495ODpHZYSdkRTsa0HA==",
- "requires": {
+ "dependencies": {
"jwa": "^1.4.1",
"safe-buffer": "^5.0.1"
}
},
- "kareem": {
+ "node_modules/kareem": {
"version": "2.3.2",
"resolved": "https://registry.npmjs.org/kareem/-/kareem-2.3.2.tgz",
"integrity": "sha512-STHz9P7X2L4Kwn72fA4rGyqyXdmrMSdxqHx9IXon/FXluXieaFA6KJ2upcHAHxQPQ0LeM/OjLrhFxifHewOALQ=="
},
- "keyv": {
+ "node_modules/keyv": {
"version": "4.5.3",
"resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.3.tgz",
"integrity": "sha512-QCiSav9WaX1PgETJ+SpNnx2PRRapJ/oRSXM4VO5OGYGSjrxbKPVFVhB3l2OCbLCk329N8qyAtsJjSjvVBWzEug==",
"dev": true,
- "requires": {
+ "dependencies": {
"json-buffer": "3.0.1"
}
},
- "kind-of": {
+ "node_modules/kind-of": {
"version": "6.0.3",
"resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz",
- "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw=="
+ "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==",
+ "engines": {
+ "node": ">=0.10.0"
+ }
},
- "knex": {
+ "node_modules/knex": {
"version": "0.95.15",
"resolved": "https://registry.npmjs.org/knex/-/knex-0.95.15.tgz",
"integrity": "sha512-Loq6WgHaWlmL2bfZGWPsy4l8xw4pOE+tmLGkPG0auBppxpI0UcK+GYCycJcqz9W54f2LiGewkCVLBm3Wq4ur/w==",
- "requires": {
+ "dependencies": {
"colorette": "2.0.16",
"commander": "^7.1.0",
"debug": "4.3.2",
@@ -7680,120 +9875,169 @@
"tarn": "^3.0.1",
"tildify": "2.0.0"
},
- "dependencies": {
- "colorette": {
- "version": "2.0.16",
- "resolved": "https://registry.npmjs.org/colorette/-/colorette-2.0.16.tgz",
- "integrity": "sha512-hUewv7oMjCp+wkBv5Rm0v87eJhq4woh5rSR+42YSQJKecCqgIqNkZ6lAlQms/BwHPJA5NKMRlpxPRv0n8HQW6g=="
+ "bin": {
+ "knex": "bin/cli.js"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "peerDependenciesMeta": {
+ "mysql": {
+ "optional": true
},
- "commander": {
- "version": "7.2.0",
- "resolved": "https://registry.npmjs.org/commander/-/commander-7.2.0.tgz",
- "integrity": "sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw=="
+ "mysql2": {
+ "optional": true
+ },
+ "pg": {
+ "optional": true
+ },
+ "pg-native": {
+ "optional": true
+ },
+ "sqlite3": {
+ "optional": true
+ },
+ "tedious": {
+ "optional": true
}
}
},
- "knex-cleaner": {
+ "node_modules/knex-cleaner": {
"version": "1.3.1",
"resolved": "https://registry.npmjs.org/knex-cleaner/-/knex-cleaner-1.3.1.tgz",
"integrity": "sha512-/cXEtcI3VNQ+hAaO5SNzGxDnnxAVN3BJDPdvuttMWL3jlQqaUHHoOfI2y5PKsSxfhZQau3Ryg00wDen+FajioQ==",
- "requires": {
+ "dependencies": {
"bluebird": "^2.9.13",
"lodash": "^4.17.13"
- },
- "dependencies": {
- "bluebird": {
- "version": "2.11.0",
- "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-2.11.0.tgz",
- "integrity": "sha512-UfFSr22dmHPQqPP9XWHRhq+gWnHCYguQGkXQlbyPtW5qTnhFWA8/iXg765tH0cAjy7l/zPJ1aBTO0g5XgA7kvQ=="
- }
}
},
- "knex-db-manager": {
+ "node_modules/knex-cleaner/node_modules/bluebird": {
+ "version": "2.11.0",
+ "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-2.11.0.tgz",
+ "integrity": "sha512-UfFSr22dmHPQqPP9XWHRhq+gWnHCYguQGkXQlbyPtW5qTnhFWA8/iXg765tH0cAjy7l/zPJ1aBTO0g5XgA7kvQ=="
+ },
+ "node_modules/knex-db-manager": {
"version": "0.6.1",
"resolved": "https://registry.npmjs.org/knex-db-manager/-/knex-db-manager-0.6.1.tgz",
"integrity": "sha512-H1IBb/zUwFXYyok8n/WmtRNV/DcZ77lV9qXqjpoF4otFPgf3W85/l79Dq/8gOE+0WnawLsYKXD8Hdz5VsaHIzQ==",
- "requires": {
+ "dependencies": {
"bluebird": "^3.7.2",
"glob": "^7.1.6",
"lodash": "^4.17.15"
+ },
+ "engines": {
+ "node": ">=8.0.0"
+ },
+ "peerDependencies": {
+ "knex": "0.x"
}
},
- "knex-factory": {
+ "node_modules/knex-factory": {
"version": "0.0.6",
"resolved": "https://registry.npmjs.org/knex-factory/-/knex-factory-0.0.6.tgz",
"integrity": "sha512-K8VAu9E1IZzmJ1XEuH1sGm9SP4vqQgRsE4yRfs7bSMVuVyI8yqbiv3I1J+HvtA//c6yp6EYikSpvtKfR0mi/Og==",
"dev": true,
- "requires": {
+ "dependencies": {
"lodash": "^4.17.4"
}
},
- "kuler": {
+ "node_modules/knex/node_modules/colorette": {
+ "version": "2.0.16",
+ "resolved": "https://registry.npmjs.org/colorette/-/colorette-2.0.16.tgz",
+ "integrity": "sha512-hUewv7oMjCp+wkBv5Rm0v87eJhq4woh5rSR+42YSQJKecCqgIqNkZ6lAlQms/BwHPJA5NKMRlpxPRv0n8HQW6g=="
+ },
+ "node_modules/knex/node_modules/commander": {
+ "version": "7.2.0",
+ "resolved": "https://registry.npmjs.org/commander/-/commander-7.2.0.tgz",
+ "integrity": "sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==",
+ "engines": {
+ "node": ">= 10"
+ }
+ },
+ "node_modules/kuler": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/kuler/-/kuler-2.0.0.tgz",
"integrity": "sha512-Xq9nH7KlWZmXAtodXDDRE7vs6DU1gTU8zYDHDiWLSip45Egwq3plLHzPn27NgvzL2r1LMPC1vdqh98sQxtqj4A=="
},
- "last-run": {
+ "node_modules/last-run": {
"version": "1.1.1",
"resolved": "https://registry.npmjs.org/last-run/-/last-run-1.1.1.tgz",
"integrity": "sha512-U/VxvpX4N/rFvPzr3qG5EtLKEnNI0emvIQB3/ecEwv+8GHaUKbIB8vxv1Oai5FAF0d0r7LXHhLLe5K/yChm5GQ==",
- "requires": {
+ "dependencies": {
"default-resolution": "^2.0.0",
"es6-weak-map": "^2.0.1"
+ },
+ "engines": {
+ "node": ">= 0.10"
}
},
- "latest-version": {
+ "node_modules/latest-version": {
"version": "3.1.0",
"resolved": "https://registry.npmjs.org/latest-version/-/latest-version-3.1.0.tgz",
"integrity": "sha512-Be1YRHWWlZaSsrz2U+VInk+tO0EwLIyV+23RhWLINJYwg/UIikxjlj3MhH37/6/EDCAusjajvMkMMUXRaMWl/w==",
- "requires": {
+ "dependencies": {
"package-json": "^4.0.0"
+ },
+ "engines": {
+ "node": ">=4"
}
},
- "lazystream": {
+ "node_modules/lazystream": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/lazystream/-/lazystream-1.0.1.tgz",
"integrity": "sha512-b94GiNHQNy6JNTrt5w6zNyffMrNkXZb3KTkCZJb2V1xaEGCk093vkZ2jk3tpaeP33/OiXC+WvK9AxUebnf5nbw==",
- "requires": {
+ "dependencies": {
"readable-stream": "^2.0.5"
+ },
+ "engines": {
+ "node": ">= 0.6.3"
}
},
- "lcid": {
+ "node_modules/lcid": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/lcid/-/lcid-1.0.0.tgz",
"integrity": "sha512-YiGkH6EnGrDGqLMITnGjXtGmNtjoXw9SVUzcaos8RBi7Ps0VBylkq+vOcY9QE5poLasPCR849ucFUkl0UzUyOw==",
- "requires": {
+ "dependencies": {
"invert-kv": "^1.0.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
}
},
- "lead": {
+ "node_modules/lead": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/lead/-/lead-1.0.0.tgz",
"integrity": "sha512-IpSVCk9AYvLHo5ctcIXxOBpMWUe+4TKN3VPWAKUbJikkmsGp0VrSM8IttVc32D6J4WUsiPE6aEFRNmIoF/gdow==",
- "requires": {
+ "dependencies": {
"flush-write-stream": "^1.0.2"
+ },
+ "engines": {
+ "node": ">= 0.10"
}
},
- "levn": {
+ "node_modules/levn": {
"version": "0.4.1",
"resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz",
"integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==",
"dev": true,
- "requires": {
+ "dependencies": {
"prelude-ls": "^1.2.1",
"type-check": "~0.4.0"
+ },
+ "engines": {
+ "node": ">= 0.8.0"
}
},
- "libphonenumber-js": {
+ "node_modules/libphonenumber-js": {
"version": "1.10.45",
"resolved": "https://registry.npmjs.org/libphonenumber-js/-/libphonenumber-js-1.10.45.tgz",
"integrity": "sha512-eeHcvGafEYCaKB4fo2uBINfG7j7PcGwBHUaTVfbwl/6KcjCgIKNlIOsSXVRp9BH10NQwmvvk+nQ1e/Yp4BGB7w=="
},
- "liftoff": {
+ "node_modules/liftoff": {
"version": "3.1.0",
"resolved": "https://registry.npmjs.org/liftoff/-/liftoff-3.1.0.tgz",
"integrity": "sha512-DlIPlJUkCV0Ips2zf2pJP0unEoT1kwYhiiPUGF3s/jtxTCjziNLoiVVh+jqWOWeFi6mmwQ5fNxvAUyPad4Dfog==",
- "requires": {
+ "dependencies": {
"extend": "^3.0.0",
"findup-sync": "^3.0.0",
"fined": "^1.0.1",
@@ -7803,213 +10047,248 @@
"rechoir": "^0.6.2",
"resolve": "^1.1.7"
},
- "dependencies": {
- "rechoir": {
- "version": "0.6.2",
- "resolved": "https://registry.npmjs.org/rechoir/-/rechoir-0.6.2.tgz",
- "integrity": "sha512-HFM8rkZ+i3zrV+4LQjwQ0W+ez98pApMGM3HUrN04j3CqzPOzl9nmP15Y8YXNm8QHGv/eacOVEjqhmWpkRV0NAw==",
- "requires": {
- "resolve": "^1.1.6"
- }
- }
+ "engines": {
+ "node": ">= 0.8"
}
},
- "lilconfig": {
+ "node_modules/liftoff/node_modules/rechoir": {
+ "version": "0.6.2",
+ "resolved": "https://registry.npmjs.org/rechoir/-/rechoir-0.6.2.tgz",
+ "integrity": "sha512-HFM8rkZ+i3zrV+4LQjwQ0W+ez98pApMGM3HUrN04j3CqzPOzl9nmP15Y8YXNm8QHGv/eacOVEjqhmWpkRV0NAw==",
+ "dependencies": {
+ "resolve": "^1.1.6"
+ },
+ "engines": {
+ "node": ">= 0.10"
+ }
+ },
+ "node_modules/lilconfig": {
"version": "2.1.0",
"resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-2.1.0.tgz",
"integrity": "sha512-utWOt/GHzuUxnLKxB6dk81RoOeoNeHgbrXiuGk4yyF5qlRz+iIVWu56E2fqGHFrXz0QNUhLB/8nKqvRH66JKGQ==",
- "dev": true
+ "dev": true,
+ "engines": {
+ "node": ">=10"
+ }
},
- "lines-and-columns": {
+ "node_modules/lines-and-columns": {
"version": "1.2.4",
"resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz",
"integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg=="
},
- "load-json-file": {
+ "node_modules/load-json-file": {
"version": "1.1.0",
"resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-1.1.0.tgz",
"integrity": "sha512-cy7ZdNRXdablkXYNI049pthVeXFurRyb9+hA/dZzerZ0pGTx42z+y+ssxBaVV2l70t1muq5IdKhn4UtcoGUY9A==",
- "requires": {
+ "dependencies": {
"graceful-fs": "^4.1.2",
"parse-json": "^2.2.0",
"pify": "^2.0.0",
"pinkie-promise": "^2.0.0",
"strip-bom": "^2.0.0"
},
- "dependencies": {
- "parse-json": {
- "version": "2.2.0",
- "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-2.2.0.tgz",
- "integrity": "sha512-QR/GGaKCkhwk1ePQNYDRKYZ3mwU9ypsKhB0XyFnLQdomyEqk3e8wpW3V5Jp88zbxK4n5ST1nqo+g9juTpownhQ==",
- "requires": {
- "error-ex": "^1.2.0"
- }
- },
- "pify": {
- "version": "2.3.0",
- "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz",
- "integrity": "sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog=="
- }
+ "engines": {
+ "node": ">=0.10.0"
}
},
- "loader-fs-cache": {
+ "node_modules/load-json-file/node_modules/parse-json": {
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-2.2.0.tgz",
+ "integrity": "sha512-QR/GGaKCkhwk1ePQNYDRKYZ3mwU9ypsKhB0XyFnLQdomyEqk3e8wpW3V5Jp88zbxK4n5ST1nqo+g9juTpownhQ==",
+ "dependencies": {
+ "error-ex": "^1.2.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/load-json-file/node_modules/pify": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz",
+ "integrity": "sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==",
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/loader-fs-cache": {
"version": "1.0.3",
"resolved": "https://registry.npmjs.org/loader-fs-cache/-/loader-fs-cache-1.0.3.tgz",
"integrity": "sha512-ldcgZpjNJj71n+2Mf6yetz+c9bM4xpKtNds4LbqXzU/PTdeAX0g3ytnU1AJMEcTk2Lex4Smpe3Q/eCTsvUBxbA==",
"dev": true,
- "requires": {
+ "dependencies": {
"find-cache-dir": "^0.1.1",
"mkdirp": "^0.5.1"
- },
- "dependencies": {
- "find-cache-dir": {
- "version": "0.1.1",
- "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-0.1.1.tgz",
- "integrity": "sha512-Z9XSBoNE7xQiV6MSgPuCfyMokH2K7JdpRkOYE1+mu3d4BFJtx3GW+f6Bo4q8IX6rlf5MYbLBKW0pjl2cWdkm2A==",
- "dev": true,
- "requires": {
- "commondir": "^1.0.1",
- "mkdirp": "^0.5.1",
- "pkg-dir": "^1.0.0"
- }
- },
- "find-up": {
- "version": "1.1.2",
- "resolved": "https://registry.npmjs.org/find-up/-/find-up-1.1.2.tgz",
- "integrity": "sha512-jvElSjyuo4EMQGoTwo1uJU5pQMwTW5lS1x05zzfJuTIyLR3zwO27LYrxNg+dlvKpGOuGy/MzBdXh80g0ve5+HA==",
- "dev": true,
- "requires": {
- "path-exists": "^2.0.0",
- "pinkie-promise": "^2.0.0"
- }
- },
- "path-exists": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-2.1.0.tgz",
- "integrity": "sha512-yTltuKuhtNeFJKa1PiRzfLAU5182q1y4Eb4XCJ3PBqyzEDkAZRzBrKKBct682ls9reBVHf9udYLN5Nd+K1B9BQ==",
- "dev": true,
- "requires": {
- "pinkie-promise": "^2.0.0"
- }
- },
- "pkg-dir": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-1.0.0.tgz",
- "integrity": "sha512-c6pv3OE78mcZ92ckebVDqg0aWSoKhOTbwCV6qbCWMk546mAL9pZln0+QsN/yQ7fkucd4+yJPLrCBXNt8Ruk+Eg==",
- "dev": true,
- "requires": {
- "find-up": "^1.0.0"
- }
- }
}
},
- "loader-runner": {
+ "node_modules/loader-fs-cache/node_modules/find-cache-dir": {
+ "version": "0.1.1",
+ "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-0.1.1.tgz",
+ "integrity": "sha512-Z9XSBoNE7xQiV6MSgPuCfyMokH2K7JdpRkOYE1+mu3d4BFJtx3GW+f6Bo4q8IX6rlf5MYbLBKW0pjl2cWdkm2A==",
+ "dev": true,
+ "dependencies": {
+ "commondir": "^1.0.1",
+ "mkdirp": "^0.5.1",
+ "pkg-dir": "^1.0.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/loader-fs-cache/node_modules/find-up": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/find-up/-/find-up-1.1.2.tgz",
+ "integrity": "sha512-jvElSjyuo4EMQGoTwo1uJU5pQMwTW5lS1x05zzfJuTIyLR3zwO27LYrxNg+dlvKpGOuGy/MzBdXh80g0ve5+HA==",
+ "dev": true,
+ "dependencies": {
+ "path-exists": "^2.0.0",
+ "pinkie-promise": "^2.0.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/loader-fs-cache/node_modules/path-exists": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-2.1.0.tgz",
+ "integrity": "sha512-yTltuKuhtNeFJKa1PiRzfLAU5182q1y4Eb4XCJ3PBqyzEDkAZRzBrKKBct682ls9reBVHf9udYLN5Nd+K1B9BQ==",
+ "dev": true,
+ "dependencies": {
+ "pinkie-promise": "^2.0.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/loader-fs-cache/node_modules/pkg-dir": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-1.0.0.tgz",
+ "integrity": "sha512-c6pv3OE78mcZ92ckebVDqg0aWSoKhOTbwCV6qbCWMk546mAL9pZln0+QsN/yQ7fkucd4+yJPLrCBXNt8Ruk+Eg==",
+ "dev": true,
+ "dependencies": {
+ "find-up": "^1.0.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/loader-runner": {
"version": "4.3.0",
"resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-4.3.0.tgz",
"integrity": "sha512-3R/1M+yS3j5ou80Me59j7F9IMs4PXs3VqRrm0TU3AbKPxlmpoY1TNscJV/oGJXo8qCatFGTfDbY6W6ipGOYXfg==",
- "dev": true
+ "engines": {
+ "node": ">=6.11.5"
+ }
},
- "loader-utils": {
+ "node_modules/loader-utils": {
"version": "1.4.2",
"resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.4.2.tgz",
"integrity": "sha512-I5d00Pd/jwMD2QCduo657+YM/6L3KZu++pmX9VFncxaxvHcru9jx1lBaFft+r4Mt2jK0Yhp41XlRAihzPxHNCg==",
"dev": true,
- "requires": {
+ "dependencies": {
"big.js": "^5.2.2",
"emojis-list": "^3.0.0",
"json5": "^1.0.1"
+ },
+ "engines": {
+ "node": ">=4.0.0"
}
},
- "locate-path": {
+ "node_modules/locate-path": {
"version": "7.2.0",
"resolved": "https://registry.npmjs.org/locate-path/-/locate-path-7.2.0.tgz",
"integrity": "sha512-gvVijfZvn7R+2qyPX8mAuKcFGDf6Nc61GdvGafQsHL0sBIxfKzA+usWn4GFC/bk+QdwPUD4kWFJLhElipq+0VA==",
- "requires": {
+ "dependencies": {
"p-locate": "^6.0.0"
+ },
+ "engines": {
+ "node": "^12.20.0 || ^14.13.1 || >=16.0.0"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
}
},
- "lodash": {
+ "node_modules/lodash": {
"version": "4.17.21",
"resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz",
"integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg=="
},
- "lodash-es": {
+ "node_modules/lodash-es": {
"version": "4.17.21",
"resolved": "https://registry.npmjs.org/lodash-es/-/lodash-es-4.17.21.tgz",
"integrity": "sha512-mKnC+QJ9pWVzv+C4/U3rRsHapFfHvQFoFB92e52xeyGMcX6/OlIl78je1u8vePzYZSkkogMPJ2yjxxsb89cxyw=="
},
- "lodash.castarray": {
+ "node_modules/lodash.castarray": {
"version": "4.4.0",
"resolved": "https://registry.npmjs.org/lodash.castarray/-/lodash.castarray-4.4.0.tgz",
"integrity": "sha512-aVx8ztPv7/2ULbArGJ2Y42bG1mEQ5mGjpdvrbJcJFU3TbYybe+QlLS4pst9zV52ymy2in1KpFPiZnAOATxD4+Q=="
},
- "lodash.clonedeep": {
+ "node_modules/lodash.clonedeep": {
"version": "4.5.0",
"resolved": "https://registry.npmjs.org/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz",
"integrity": "sha512-H5ZhCF25riFd9uB5UCkVKo61m3S/xZk1x4wA6yp/L3RFP6Z/eHH1ymQcGLo7J3GMPfm0V/7m1tryHuGVxpqEBQ=="
},
- "lodash.compact": {
+ "node_modules/lodash.compact": {
"version": "3.0.1",
"resolved": "https://registry.npmjs.org/lodash.compact/-/lodash.compact-3.0.1.tgz",
"integrity": "sha512-2ozeiPi+5eBXW1CLtzjk8XQFhQOEMwwfxblqeq6EGyTxZJ1bPATqilY0e6g2SLQpP4KuMeuioBhEnWz5Pr7ICQ=="
},
- "lodash.flattendeep": {
+ "node_modules/lodash.flattendeep": {
"version": "4.4.0",
"resolved": "https://registry.npmjs.org/lodash.flattendeep/-/lodash.flattendeep-4.4.0.tgz",
"integrity": "sha512-uHaJFihxmJcEX3kT4I23ABqKKalJ/zDrDg0lsFtc1h+3uw49SIJ5beyhx5ExVRti3AvKoOJngIj7xz3oylPdWQ==",
"dev": true
},
- "lodash.includes": {
+ "node_modules/lodash.includes": {
"version": "4.3.0",
"resolved": "https://registry.npmjs.org/lodash.includes/-/lodash.includes-4.3.0.tgz",
"integrity": "sha512-W3Bx6mdkRTGtlJISOvVD/lbqjTlPPUDTMnlXZFnVwi9NKJ6tiAk6LVdlhZMm17VZisqhKcgzpO5Wz91PCt5b0w=="
},
- "lodash.isboolean": {
+ "node_modules/lodash.isboolean": {
"version": "3.0.3",
"resolved": "https://registry.npmjs.org/lodash.isboolean/-/lodash.isboolean-3.0.3.tgz",
"integrity": "sha512-Bz5mupy2SVbPHURB98VAcw+aHh4vRV5IPNhILUCsOzRmsTmSQ17jIuqopAentWoehktxGd9e/hbIXq980/1QJg=="
},
- "lodash.isempty": {
+ "node_modules/lodash.isempty": {
"version": "4.4.0",
"resolved": "https://registry.npmjs.org/lodash.isempty/-/lodash.isempty-4.4.0.tgz",
"integrity": "sha512-oKMuF3xEeqDltrGMfDxAPGIVMSSRv8tbRSODbrs4KGsRRLEhrW8N8Rd4DRgB2+621hY8A8XwwrTVhXWpxFvMzg=="
},
- "lodash.isinteger": {
+ "node_modules/lodash.isinteger": {
"version": "4.0.4",
"resolved": "https://registry.npmjs.org/lodash.isinteger/-/lodash.isinteger-4.0.4.tgz",
"integrity": "sha512-DBwtEWN2caHQ9/imiNeEA5ys1JoRtRfY3d7V9wkqtbycnAmTvRRmbHKDV4a0EYc678/dia0jrte4tjYwVBaZUA=="
},
- "lodash.isnumber": {
+ "node_modules/lodash.isnumber": {
"version": "3.0.3",
"resolved": "https://registry.npmjs.org/lodash.isnumber/-/lodash.isnumber-3.0.3.tgz",
"integrity": "sha512-QYqzpfwO3/CWf3XP+Z+tkQsfaLL/EnUlXWVkIk5FUPc4sBdTehEqZONuyRt2P67PXAk+NXmTBcc97zw9t1FQrw=="
},
- "lodash.isplainobject": {
+ "node_modules/lodash.isplainobject": {
"version": "4.0.6",
"resolved": "https://registry.npmjs.org/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz",
"integrity": "sha512-oSXzaWypCMHkPC3NvBEaPHf0KsA5mvPrOPgQWDsbg8n7orZ290M0BmC/jgRZ4vcJ6DTAhjrsSYgdsW/F+MFOBA=="
},
- "lodash.isstring": {
+ "node_modules/lodash.isstring": {
"version": "4.0.1",
"resolved": "https://registry.npmjs.org/lodash.isstring/-/lodash.isstring-4.0.1.tgz",
"integrity": "sha512-0wJxfxH1wgO3GrbuP+dTTk7op+6L41QCXbGINEmD+ny/G/eCqGzxyCsh7159S+mgDDcoarnBw6PC1PS5+wUGgw=="
},
- "lodash.merge": {
+ "node_modules/lodash.merge": {
"version": "4.6.2",
"resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz",
"integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==",
"dev": true
},
- "lodash.once": {
+ "node_modules/lodash.once": {
"version": "4.1.1",
"resolved": "https://registry.npmjs.org/lodash.once/-/lodash.once-4.1.1.tgz",
"integrity": "sha512-Sb487aTOCr9drQVL8pIxOzVhafOjZN9UU54hiN8PU3uAiSV7lx1yYNpbNmex2PK6dSJoNTSJUUswT651yww3Mg=="
},
- "logform": {
+ "node_modules/logform": {
"version": "2.5.1",
"resolved": "https://registry.npmjs.org/logform/-/logform-2.5.1.tgz",
"integrity": "sha512-9FyqAm9o9NKKfiAKfZoYo9bGXXuwMkxQiQttkT4YjjVtQVIQtK6LmVtlxmCaFswo6N4AfEkHqZTV0taDtPotNg==",
- "requires": {
+ "dependencies": {
"@colors/colors": "1.5.0",
"@types/triple-beam": "^1.3.2",
"fecha": "^4.2.0",
@@ -8018,138 +10297,179 @@
"triple-beam": "^1.3.0"
}
},
- "lolex": {
+ "node_modules/lolex": {
"version": "4.2.0",
"resolved": "https://registry.npmjs.org/lolex/-/lolex-4.2.0.tgz",
"integrity": "sha512-gKO5uExCXvSm6zbF562EvM+rd1kQDnB9AZBbiQVzf1ZmdDpxUSvpnAaVOP83N/31mRK8Ml8/VE8DMvsAZQ+7wg==",
"dev": true
},
- "long": {
+ "node_modules/long": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/long/-/long-4.0.0.tgz",
"integrity": "sha512-XsP+KhQif4bjX1kbuSiySJFNAehNxgLb6hPRGJ9QsUr8ajHkuXGdrHmFUTUUXhDwVX2R5bY4JNZEwbUiMhV+MA=="
},
- "loupe": {
+ "node_modules/loupe": {
"version": "2.3.6",
"resolved": "https://registry.npmjs.org/loupe/-/loupe-2.3.6.tgz",
"integrity": "sha512-RaPMZKiMy8/JruncMU5Bt6na1eftNoo++R4Y+N2FrxkDVTrGvcyzFTsaGif4QTeKESheMGegbhw6iUAq+5A8zA==",
"dev": true,
- "requires": {
+ "dependencies": {
"get-func-name": "^2.0.0"
}
},
- "lowercase-keys": {
+ "node_modules/lowercase-keys": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-1.0.1.tgz",
- "integrity": "sha512-G2Lj61tXDnVFFOi8VZds+SoQjtQC3dgokKdDG2mTm1tx4m50NUHBOZSBwQQHyy0V12A0JTG4icfZQH+xPyh8VA=="
+ "integrity": "sha512-G2Lj61tXDnVFFOi8VZds+SoQjtQC3dgokKdDG2mTm1tx4m50NUHBOZSBwQQHyy0V12A0JTG4icfZQH+xPyh8VA==",
+ "engines": {
+ "node": ">=0.10.0"
+ }
},
- "lru-cache": {
+ "node_modules/lru-cache": {
"version": "6.0.0",
"resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz",
"integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==",
- "requires": {
+ "dependencies": {
"yallist": "^4.0.0"
+ },
+ "engines": {
+ "node": ">=10"
}
},
- "luxon": {
+ "node_modules/luxon": {
"version": "1.28.1",
"resolved": "https://registry.npmjs.org/luxon/-/luxon-1.28.1.tgz",
- "integrity": "sha512-gYHAa180mKrNIUJCbwpmD0aTu9kV0dREDrwNnuyFAsO1Wt0EVYSZelPnJlbj9HplzXX/YWXHFTL45kvZ53M0pw=="
+ "integrity": "sha512-gYHAa180mKrNIUJCbwpmD0aTu9kV0dREDrwNnuyFAsO1Wt0EVYSZelPnJlbj9HplzXX/YWXHFTL45kvZ53M0pw==",
+ "engines": {
+ "node": "*"
+ }
},
- "make-dir": {
+ "node_modules/make-dir": {
"version": "3.1.0",
"resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz",
"integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==",
- "requires": {
+ "dependencies": {
"semver": "^6.0.0"
},
- "dependencies": {
- "semver": {
- "version": "6.3.1",
- "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz",
- "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA=="
- }
+ "engines": {
+ "node": ">=8"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
}
},
- "make-error": {
+ "node_modules/make-dir/node_modules/semver": {
+ "version": "6.3.1",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz",
+ "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==",
+ "bin": {
+ "semver": "bin/semver.js"
+ }
+ },
+ "node_modules/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
},
- "make-iterator": {
+ "node_modules/make-iterator": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/make-iterator/-/make-iterator-1.0.1.tgz",
"integrity": "sha512-pxiuXh0iVEq7VM7KMIhs5gxsfxCux2URptUQaXo4iZZJxBAzTPOLE2BumO5dbfVYq/hBJFBR/a1mFDmOx5AGmw==",
- "requires": {
+ "dependencies": {
"kind-of": "^6.0.2"
+ },
+ "engines": {
+ "node": ">=0.10.0"
}
},
- "make-plural": {
+ "node_modules/make-plural": {
"version": "7.3.0",
"resolved": "https://registry.npmjs.org/make-plural/-/make-plural-7.3.0.tgz",
"integrity": "sha512-/K3BC0KIsO+WK2i94LkMPv3wslMrazrQhfi5We9fMbLlLjzoOSJWr7TAdupLlDWaJcWxwoNosBkhFDejiu5VDw=="
},
- "map-cache": {
+ "node_modules/map-cache": {
"version": "0.2.2",
"resolved": "https://registry.npmjs.org/map-cache/-/map-cache-0.2.2.tgz",
- "integrity": "sha512-8y/eV9QQZCiyn1SprXSrCmqJN0yNRATe+PO8ztwqrvrbdRLA3eYJF0yaR0YayLWkMbsQSKWS9N2gPcGEc4UsZg=="
+ "integrity": "sha512-8y/eV9QQZCiyn1SprXSrCmqJN0yNRATe+PO8ztwqrvrbdRLA3eYJF0yaR0YayLWkMbsQSKWS9N2gPcGEc4UsZg==",
+ "engines": {
+ "node": ">=0.10.0"
+ }
},
- "map-obj": {
+ "node_modules/map-obj": {
"version": "4.3.0",
"resolved": "https://registry.npmjs.org/map-obj/-/map-obj-4.3.0.tgz",
- "integrity": "sha512-hdN1wVrZbb29eBGiGjJbeP8JbKjq1urkHJ/LIP/NY48MZ1QVXUsQBV1G1zvYFHn1XE06cwjBsOI2K3Ulnj1YXQ=="
+ "integrity": "sha512-hdN1wVrZbb29eBGiGjJbeP8JbKjq1urkHJ/LIP/NY48MZ1QVXUsQBV1G1zvYFHn1XE06cwjBsOI2K3Ulnj1YXQ==",
+ "engines": {
+ "node": ">=8"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
},
- "map-visit": {
+ "node_modules/map-visit": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/map-visit/-/map-visit-1.0.0.tgz",
"integrity": "sha512-4y7uGv8bd2WdM9vpQsiQNo41Ln1NvhvDRuVt0k2JZQ+ezN2uaQes7lZeZ+QQUHOLQAtDaBJ+7wCbi+ab/KFs+w==",
- "requires": {
+ "dependencies": {
"object-visit": "^1.0.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
}
},
- "matchdep": {
+ "node_modules/matchdep": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/matchdep/-/matchdep-2.0.0.tgz",
"integrity": "sha512-LFgVbaHIHMqCRuCZyfCtUOq9/Lnzhi7Z0KFUE2fhD54+JN2jLh3hC02RLkqauJ3U4soU6H1J3tfj/Byk7GoEjA==",
- "requires": {
+ "dependencies": {
"findup-sync": "^2.0.0",
"micromatch": "^3.0.4",
"resolve": "^1.4.0",
"stack-trace": "0.0.10"
},
- "dependencies": {
- "findup-sync": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/findup-sync/-/findup-sync-2.0.0.tgz",
- "integrity": "sha512-vs+3unmJT45eczmcAZ6zMJtxN3l/QXeccaXQx5cu/MeJMhewVfoWZqibRkOxPnmoR59+Zy5hjabfQc6JLSah4g==",
- "requires": {
- "detect-file": "^1.0.0",
- "is-glob": "^3.1.0",
- "micromatch": "^3.0.4",
- "resolve-dir": "^1.0.1"
- }
- },
- "is-glob": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz",
- "integrity": "sha512-UFpDDrPgM6qpnFNI+rh/p3bUaq9hKLZN8bMUWzxmcnZVS3omf4IPK+BrewlnWjO1WmUsMYuSjKh4UJuV4+Lqmw==",
- "requires": {
- "is-extglob": "^2.1.0"
- }
- }
+ "engines": {
+ "node": ">= 0.10.0"
}
},
- "math-interval-parser": {
+ "node_modules/matchdep/node_modules/findup-sync": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/findup-sync/-/findup-sync-2.0.0.tgz",
+ "integrity": "sha512-vs+3unmJT45eczmcAZ6zMJtxN3l/QXeccaXQx5cu/MeJMhewVfoWZqibRkOxPnmoR59+Zy5hjabfQc6JLSah4g==",
+ "dependencies": {
+ "detect-file": "^1.0.0",
+ "is-glob": "^3.1.0",
+ "micromatch": "^3.0.4",
+ "resolve-dir": "^1.0.1"
+ },
+ "engines": {
+ "node": ">= 0.10"
+ }
+ },
+ "node_modules/matchdep/node_modules/is-glob": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz",
+ "integrity": "sha512-UFpDDrPgM6qpnFNI+rh/p3bUaq9hKLZN8bMUWzxmcnZVS3omf4IPK+BrewlnWjO1WmUsMYuSjKh4UJuV4+Lqmw==",
+ "dependencies": {
+ "is-extglob": "^2.1.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/math-interval-parser": {
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/math-interval-parser/-/math-interval-parser-2.0.1.tgz",
- "integrity": "sha512-VmlAmb0UJwlvMyx8iPhXUDnVW1F9IrGEd9CIOmv+XL8AErCUUuozoDMrgImvnYt2A+53qVX/tPW6YJurMKYsvA=="
+ "integrity": "sha512-VmlAmb0UJwlvMyx8iPhXUDnVW1F9IrGEd9CIOmv+XL8AErCUUuozoDMrgImvnYt2A+53qVX/tPW6YJurMKYsvA==",
+ "engines": {
+ "node": ">=0.10.0"
+ }
},
- "mathjs": {
+ "node_modules/mathjs": {
"version": "9.5.2",
"resolved": "https://registry.npmjs.org/mathjs/-/mathjs-9.5.2.tgz",
"integrity": "sha512-c0erTq0GP503/Ch2OtDOAn50GIOsuxTMjmE00NI/vKJFSWrDaQHRjx6ai+16xYv70yBSnnpUgHZGNf9FR9IwmA==",
- "requires": {
+ "dependencies": {
"@babel/runtime": "^7.15.4",
"complex.js": "^2.0.15",
"decimal.js": "^10.3.1",
@@ -8159,52 +10479,63 @@
"seedrandom": "^3.0.5",
"tiny-emitter": "^2.1.0",
"typed-function": "^2.0.0"
+ },
+ "bin": {
+ "mathjs": "bin/cli.js"
+ },
+ "engines": {
+ "node": ">= 12"
}
},
- "md5.js": {
+ "node_modules/md5.js": {
"version": "1.3.5",
"resolved": "https://registry.npmjs.org/md5.js/-/md5.js-1.3.5.tgz",
"integrity": "sha512-xitP+WxNPcTTOgnTJcrhM0xvdPepipPSf3I8EIpGKeFLjt3PlJLIDG3u8EX53ZIubkb+5U2+3rELYpEhHhzdkg==",
"dev": true,
- "requires": {
+ "dependencies": {
"hash-base": "^3.0.0",
"inherits": "^2.0.1",
"safe-buffer": "^5.1.2"
}
},
- "media-typer": {
+ "node_modules/media-typer": {
"version": "0.3.0",
"resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz",
- "integrity": "sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ=="
+ "integrity": "sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==",
+ "engines": {
+ "node": ">= 0.6"
+ }
},
- "memory-cache": {
+ "node_modules/memory-cache": {
"version": "0.2.0",
"resolved": "https://registry.npmjs.org/memory-cache/-/memory-cache-0.2.0.tgz",
"integrity": "sha512-OcjA+jzjOYzKmKS6IQVALHLVz+rNTMPoJvCztFaZxwG14wtAW7VRZjwTQu06vKCYOxh4jVnik7ya0SXTB0W+xA=="
},
- "memory-fs": {
+ "node_modules/memory-fs": {
"version": "0.2.0",
"resolved": "https://registry.npmjs.org/memory-fs/-/memory-fs-0.2.0.tgz",
"integrity": "sha512-+y4mDxU4rvXXu5UDSGCGNiesFmwCHuefGMoPCO1WYucNYj7DsLqrFaa2fXVI0H+NNiPTwwzKwspn9yTZqUGqng==",
"dev": true
},
- "memory-pager": {
+ "node_modules/memory-pager": {
"version": "1.5.0",
"resolved": "https://registry.npmjs.org/memory-pager/-/memory-pager-1.5.0.tgz",
- "integrity": "sha512-ZS4Bp4r/Zoeq6+NLJpP+0Zzm0pR8whtGPf1XExKLJBAczGMnSi3It14OiNCStjQjM6NU1okjQGSxgEZN8eBYKg==",
- "optional": true
+ "integrity": "sha512-ZS4Bp4r/Zoeq6+NLJpP+0Zzm0pR8whtGPf1XExKLJBAczGMnSi3It14OiNCStjQjM6NU1okjQGSxgEZN8eBYKg=="
},
- "memorystream": {
+ "node_modules/memorystream": {
"version": "0.3.1",
"resolved": "https://registry.npmjs.org/memorystream/-/memorystream-0.3.1.tgz",
"integrity": "sha512-S3UwM3yj5mtUSEfP41UZmt/0SCoVYUcU1rkXv+BQ5Ig8ndL4sPoJNBUJERafdPb5jjHJGuMgytgKvKIf58XNBw==",
- "dev": true
+ "dev": true,
+ "engines": {
+ "node": ">= 0.10.0"
+ }
},
- "meow": {
+ "node_modules/meow": {
"version": "6.1.1",
"resolved": "https://registry.npmjs.org/meow/-/meow-6.1.1.tgz",
"integrity": "sha512-3YffViIt2QWgTy6Pale5QpopX/IvU3LPL03jOTqp6pGj3VjesdO/U8CuHMKpnQr4shCNCM5fd5XFFvIIl6JBHg==",
- "requires": {
+ "dependencies": {
"@types/minimist": "^1.2.0",
"camelcase-keys": "^6.2.2",
"decamelize-keys": "^1.1.0",
@@ -8216,81 +10547,95 @@
"trim-newlines": "^3.0.0",
"type-fest": "^0.13.1",
"yargs-parser": "^18.1.3"
+ },
+ "engines": {
+ "node": ">=8"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
}
},
- "merge-descriptors": {
+ "node_modules/merge-descriptors": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz",
"integrity": "sha512-cCi6g3/Zr1iqQi6ySbseM1Xvooa98N0w31jzUYrXPX2xqObmFGHJ0tQ5u74H3mVh7wLouTseZyYIq39g8cNp1w=="
},
- "merge-source-map": {
+ "node_modules/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"
- },
"dependencies": {
- "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": "^0.6.1"
}
},
- "merge-stream": {
+ "node_modules/merge-source-map/node_modules/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,
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/merge-stream": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz",
- "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==",
- "dev": true
+ "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w=="
},
- "merge2": {
+ "node_modules/merge2": {
"version": "1.4.1",
"resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz",
- "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg=="
+ "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==",
+ "engines": {
+ "node": ">= 8"
+ }
},
- "messageformat": {
+ "node_modules/messageformat": {
"version": "2.3.0",
"resolved": "https://registry.npmjs.org/messageformat/-/messageformat-2.3.0.tgz",
"integrity": "sha512-uTzvsv0lTeQxYI2y1NPa1lItL5VRI8Gb93Y2K2ue5gBPyrbJxfDi/EYWxh2PKv5yO42AJeeqblS9MJSh/IEk4w==",
- "requires": {
+ "deprecated": "Package renamed as '@messageformat/core', see messageformat.github.io for more details. 'messageformat@4' will eventually provide a polyfill for Intl.MessageFormat, once it's been defined by Unicode & ECMA.",
+ "dependencies": {
"make-plural": "^4.3.0",
"messageformat-formatters": "^2.0.1",
"messageformat-parser": "^4.1.2"
- },
- "dependencies": {
- "make-plural": {
- "version": "4.3.0",
- "resolved": "https://registry.npmjs.org/make-plural/-/make-plural-4.3.0.tgz",
- "integrity": "sha512-xTYd4JVHpSCW+aqDof6w/MebaMVNTVYBZhbB/vi513xXdiPT92JMVCo0Jq8W2UZnzYRFeVbQiQ+I25l13JuKvA==",
- "requires": {
- "minimist": "^1.2.0"
- }
- }
}
},
- "messageformat-formatters": {
+ "node_modules/messageformat-formatters": {
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/messageformat-formatters/-/messageformat-formatters-2.0.1.tgz",
"integrity": "sha512-E/lQRXhtHwGuiQjI7qxkLp8AHbMD5r2217XNe/SREbBlSawe0lOqsFb7rflZJmlQFSULNLIqlcjjsCPlB3m3Mg=="
},
- "messageformat-parser": {
+ "node_modules/messageformat-parser": {
"version": "4.1.3",
"resolved": "https://registry.npmjs.org/messageformat-parser/-/messageformat-parser-4.1.3.tgz",
"integrity": "sha512-2fU3XDCanRqeOCkn7R5zW5VQHWf+T3hH65SzuqRvjatBK7r4uyFa5mEX+k6F9Bd04LVM5G4/BHBTUJsOdW7uyg=="
},
- "methods": {
+ "node_modules/messageformat/node_modules/make-plural": {
+ "version": "4.3.0",
+ "resolved": "https://registry.npmjs.org/make-plural/-/make-plural-4.3.0.tgz",
+ "integrity": "sha512-xTYd4JVHpSCW+aqDof6w/MebaMVNTVYBZhbB/vi513xXdiPT92JMVCo0Jq8W2UZnzYRFeVbQiQ+I25l13JuKvA==",
+ "bin": {
+ "make-plural": "bin/make-plural"
+ },
+ "optionalDependencies": {
+ "minimist": "^1.2.0"
+ }
+ },
+ "node_modules/methods": {
"version": "1.1.2",
"resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz",
- "integrity": "sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w=="
+ "integrity": "sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==",
+ "engines": {
+ "node": ">= 0.6"
+ }
},
- "micromatch": {
+ "node_modules/micromatch": {
"version": "3.1.10",
"resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz",
"integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==",
- "requires": {
+ "dependencies": {
"arr-diff": "^4.0.0",
"array-unique": "^0.3.2",
"braces": "^2.3.1",
@@ -8304,124 +10649,160 @@
"regex-not": "^1.0.0",
"snapdragon": "^0.8.1",
"to-regex": "^3.0.2"
+ },
+ "engines": {
+ "node": ">=0.10.0"
}
},
- "miller-rabin": {
+ "node_modules/miller-rabin": {
"version": "4.0.1",
"resolved": "https://registry.npmjs.org/miller-rabin/-/miller-rabin-4.0.1.tgz",
"integrity": "sha512-115fLhvZVqWwHPbClyntxEVfVDfl9DLLTuJvq3g2O/Oxi8AiNouAHvDSzHS0viUJc+V5vm3eq91Xwqn9dp4jRA==",
"dev": true,
- "requires": {
+ "dependencies": {
"bn.js": "^4.0.0",
"brorand": "^1.0.1"
},
- "dependencies": {
- "bn.js": {
- "version": "4.12.0",
- "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz",
- "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==",
- "dev": true
- }
+ "bin": {
+ "miller-rabin": "bin/miller-rabin"
}
},
- "mime": {
+ "node_modules/miller-rabin/node_modules/bn.js": {
+ "version": "4.12.0",
+ "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz",
+ "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==",
+ "dev": true
+ },
+ "node_modules/mime": {
"version": "1.6.0",
"resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz",
- "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg=="
+ "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==",
+ "bin": {
+ "mime": "cli.js"
+ },
+ "engines": {
+ "node": ">=4"
+ }
},
- "mime-db": {
+ "node_modules/mime-db": {
"version": "1.52.0",
"resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz",
- "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg=="
+ "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==",
+ "engines": {
+ "node": ">= 0.6"
+ }
},
- "mime-types": {
+ "node_modules/mime-types": {
"version": "2.1.35",
"resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz",
"integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==",
- "requires": {
+ "dependencies": {
"mime-db": "1.52.0"
+ },
+ "engines": {
+ "node": ">= 0.6"
}
},
- "min-indent": {
+ "node_modules/min-indent": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/min-indent/-/min-indent-1.0.1.tgz",
- "integrity": "sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg=="
+ "integrity": "sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg==",
+ "engines": {
+ "node": ">=4"
+ }
},
- "minimalistic-assert": {
+ "node_modules/minimalistic-assert": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz",
"integrity": "sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==",
"dev": true
},
- "minimalistic-crypto-utils": {
+ "node_modules/minimalistic-crypto-utils": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz",
"integrity": "sha512-JIYlbt6g8i5jKfJ3xz7rF0LXmv2TkDxBLUkiBeZ7bAx4GnnNMr8xFpGnOxn6GhTEHx3SjRrZEoU+j04prX1ktg==",
"dev": true
},
- "minimatch": {
+ "node_modules/minimatch": {
"version": "3.1.2",
"resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz",
"integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==",
- "requires": {
+ "dependencies": {
"brace-expansion": "^1.1.7"
+ },
+ "engines": {
+ "node": "*"
}
},
- "minimist": {
+ "node_modules/minimist": {
"version": "1.2.8",
"resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz",
- "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA=="
+ "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==",
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
},
- "minimist-options": {
+ "node_modules/minimist-options": {
"version": "4.1.0",
"resolved": "https://registry.npmjs.org/minimist-options/-/minimist-options-4.1.0.tgz",
"integrity": "sha512-Q4r8ghd80yhO/0j1O3B2BjweX3fiHg9cdOwjJd2J76Q135c+NDxGCqdYKQ1SKBuFfgWbAUzBfvYjPUEeNgqN1A==",
- "requires": {
+ "dependencies": {
"arrify": "^1.0.1",
"is-plain-obj": "^1.1.0",
"kind-of": "^6.0.3"
},
- "dependencies": {
- "arrify": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/arrify/-/arrify-1.0.1.tgz",
- "integrity": "sha512-3CYzex9M9FGQjCGMGyi6/31c8GJbgb0qGyrx5HWxPd0aCwh4cB2YjMb2Xf9UuoogrMrlO9cTqnB5rI5GHZTcUA=="
- }
+ "engines": {
+ "node": ">= 6"
}
},
- "mixin-deep": {
+ "node_modules/minimist-options/node_modules/arrify": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/arrify/-/arrify-1.0.1.tgz",
+ "integrity": "sha512-3CYzex9M9FGQjCGMGyi6/31c8GJbgb0qGyrx5HWxPd0aCwh4cB2YjMb2Xf9UuoogrMrlO9cTqnB5rI5GHZTcUA==",
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/mixin-deep": {
"version": "1.3.2",
"resolved": "https://registry.npmjs.org/mixin-deep/-/mixin-deep-1.3.2.tgz",
"integrity": "sha512-WRoDn//mXBiJ1H40rqa3vH0toePwSsGb45iInWlTySa+Uu4k3tYUSxa2v1KqAiLtvlrSzaExqS1gtk96A9zvEA==",
- "requires": {
+ "dependencies": {
"for-in": "^1.0.2",
"is-extendable": "^1.0.1"
},
- "dependencies": {
- "is-extendable": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz",
- "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==",
- "requires": {
- "is-plain-object": "^2.0.4"
- }
- }
+ "engines": {
+ "node": ">=0.10.0"
}
},
- "mkdirp": {
+ "node_modules/mixin-deep/node_modules/is-extendable": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz",
+ "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==",
+ "dependencies": {
+ "is-plain-object": "^2.0.4"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/mkdirp": {
"version": "0.5.6",
"resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz",
"integrity": "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==",
- "requires": {
+ "dependencies": {
"minimist": "^1.2.6"
+ },
+ "bin": {
+ "mkdirp": "bin/cmd.js"
}
},
- "mocha": {
+ "node_modules/mocha": {
"version": "5.2.0",
"resolved": "https://registry.npmjs.org/mocha/-/mocha-5.2.0.tgz",
"integrity": "sha512-2IUgKDhc3J7Uug+FxMXuqIyYzH7gJjXECKe/w43IGgQHTSj3InJi+yAA7T24L9bQMRKiUEHxEX37G5JpVUGLcQ==",
"dev": true,
- "requires": {
+ "dependencies": {
"browser-stdout": "1.3.1",
"commander": "2.15.1",
"debug": "3.1.0",
@@ -8434,124 +10815,195 @@
"mkdirp": "0.5.1",
"supports-color": "5.4.0"
},
- "dependencies": {
- "commander": {
- "version": "2.15.1",
- "resolved": "https://registry.npmjs.org/commander/-/commander-2.15.1.tgz",
- "integrity": "sha512-VlfT9F3V0v+jr4yxPc5gg9s62/fIVWsd2Bk2iD435um1NlGMYdVCq+MjcXnhYq2icNOizHr1kK+5TI6H0Hy0ag==",
- "dev": true
- },
- "debug": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz",
- "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==",
- "dev": true,
- "requires": {
- "ms": "2.0.0"
- }
- },
- "glob": {
- "version": "7.1.2",
- "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz",
- "integrity": "sha512-MJTUg1kjuLeQCJ+ccE4Vpa6kKVXkPYJ2mOCQyUuKLcLQsdrMCpBPUi8qVE6+YuaJkozeA9NusTAw3hLr8Xe5EQ==",
- "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"
- }
- },
- "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": "0.0.8",
- "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz",
- "integrity": "sha512-miQKw5Hv4NS1Psg2517mV4e4dYNaO3++hjAvLOAzKqZ61rH8NS1SK+vbfBWZ5PY/Me/bEWhUwqMghEW5Fb9T7Q==",
- "dev": true
- },
- "mkdirp": {
- "version": "0.5.1",
- "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz",
- "integrity": "sha512-SknJC52obPfGQPnjIkXbmA6+5H15E+fR+E4iR2oQ3zzCLbd7/ONua69R/Gw7AgkTLsRG+r5fzksYwWe1AgTyWA==",
- "dev": true,
- "requires": {
- "minimist": "0.0.8"
- }
- },
- "ms": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
- "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==",
- "dev": true
- },
- "supports-color": {
- "version": "5.4.0",
- "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.4.0.tgz",
- "integrity": "sha512-zjaXglF5nnWpsq470jSv6P9DwPvgLkuapYmfDm3JWOm0vkNTVF2tI4UrN2r6jH1qM/uc/WtxYY1hYoA2dOKj5w==",
- "dev": true,
- "requires": {
- "has-flag": "^3.0.0"
- }
- }
+ "bin": {
+ "_mocha": "bin/_mocha",
+ "mocha": "bin/mocha"
+ },
+ "engines": {
+ "node": ">= 4.0.0"
}
},
- "moment": {
+ "node_modules/mocha/node_modules/commander": {
+ "version": "2.15.1",
+ "resolved": "https://registry.npmjs.org/commander/-/commander-2.15.1.tgz",
+ "integrity": "sha512-VlfT9F3V0v+jr4yxPc5gg9s62/fIVWsd2Bk2iD435um1NlGMYdVCq+MjcXnhYq2icNOizHr1kK+5TI6H0Hy0ag==",
+ "dev": true
+ },
+ "node_modules/mocha/node_modules/debug": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz",
+ "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==",
+ "dev": true,
+ "dependencies": {
+ "ms": "2.0.0"
+ }
+ },
+ "node_modules/mocha/node_modules/glob": {
+ "version": "7.1.2",
+ "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz",
+ "integrity": "sha512-MJTUg1kjuLeQCJ+ccE4Vpa6kKVXkPYJ2mOCQyUuKLcLQsdrMCpBPUi8qVE6+YuaJkozeA9NusTAw3hLr8Xe5EQ==",
+ "dev": true,
+ "dependencies": {
+ "fs.realpath": "^1.0.0",
+ "inflight": "^1.0.4",
+ "inherits": "2",
+ "minimatch": "^3.0.4",
+ "once": "^1.3.0",
+ "path-is-absolute": "^1.0.0"
+ },
+ "engines": {
+ "node": "*"
+ }
+ },
+ "node_modules/mocha/node_modules/minimatch": {
+ "version": "3.0.4",
+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz",
+ "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==",
+ "dev": true,
+ "dependencies": {
+ "brace-expansion": "^1.1.7"
+ },
+ "engines": {
+ "node": "*"
+ }
+ },
+ "node_modules/mocha/node_modules/minimist": {
+ "version": "0.0.8",
+ "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz",
+ "integrity": "sha512-miQKw5Hv4NS1Psg2517mV4e4dYNaO3++hjAvLOAzKqZ61rH8NS1SK+vbfBWZ5PY/Me/bEWhUwqMghEW5Fb9T7Q==",
+ "dev": true
+ },
+ "node_modules/mocha/node_modules/mkdirp": {
+ "version": "0.5.1",
+ "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz",
+ "integrity": "sha512-SknJC52obPfGQPnjIkXbmA6+5H15E+fR+E4iR2oQ3zzCLbd7/ONua69R/Gw7AgkTLsRG+r5fzksYwWe1AgTyWA==",
+ "deprecated": "Legacy versions of mkdirp are no longer supported. Please update to mkdirp 1.x. (Note that the API surface has changed to use Promises in 1.x.)",
+ "dev": true,
+ "dependencies": {
+ "minimist": "0.0.8"
+ },
+ "bin": {
+ "mkdirp": "bin/cmd.js"
+ }
+ },
+ "node_modules/mocha/node_modules/ms": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
+ "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==",
+ "dev": true
+ },
+ "node_modules/mocha/node_modules/supports-color": {
+ "version": "5.4.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.4.0.tgz",
+ "integrity": "sha512-zjaXglF5nnWpsq470jSv6P9DwPvgLkuapYmfDm3JWOm0vkNTVF2tI4UrN2r6jH1qM/uc/WtxYY1hYoA2dOKj5w==",
+ "dev": true,
+ "dependencies": {
+ "has-flag": "^3.0.0"
+ },
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/moment": {
"version": "2.29.4",
"resolved": "https://registry.npmjs.org/moment/-/moment-2.29.4.tgz",
- "integrity": "sha512-5LC9SOxjSc2HF6vO2CyuTDNivEdoz2IvyJJGj6X8DJ0eFyfszE0QiEd+iXmBvUP3WHxSjFH/vIsA0EN00cgr8w=="
+ "integrity": "sha512-5LC9SOxjSc2HF6vO2CyuTDNivEdoz2IvyJJGj6X8DJ0eFyfszE0QiEd+iXmBvUP3WHxSjFH/vIsA0EN00cgr8w==",
+ "engines": {
+ "node": "*"
+ }
},
- "moment-range": {
+ "node_modules/moment-range": {
"version": "4.0.2",
"resolved": "https://registry.npmjs.org/moment-range/-/moment-range-4.0.2.tgz",
"integrity": "sha512-n8sceWwSTjmz++nFHzeNEUsYtDqjgXgcOBzsHi+BoXQU2FW+eU92LUaK8gqOiSu5PG57Q9sYj1Fz4LRDj4FtKA==",
- "requires": {
+ "dependencies": {
"es6-symbol": "^3.1.0"
+ },
+ "engines": {
+ "node": "*"
+ },
+ "peerDependencies": {
+ "moment": ">= 2"
}
},
- "moment-timezone": {
+ "node_modules/moment-timezone": {
"version": "0.5.43",
"resolved": "https://registry.npmjs.org/moment-timezone/-/moment-timezone-0.5.43.tgz",
"integrity": "sha512-72j3aNyuIsDxdF1i7CEgV2FfxM1r6aaqJyLB2vwb33mXYyoyLly+F1zbWqhA3/bVIoJ4szlUoMbUnVdid32NUQ==",
- "requires": {
+ "dependencies": {
"moment": "^2.29.4"
+ },
+ "engines": {
+ "node": "*"
}
},
- "mongodb": {
- "version": "4.17.1",
- "resolved": "https://registry.npmjs.org/mongodb/-/mongodb-4.17.1.tgz",
- "integrity": "sha512-MBuyYiPUPRTqfH2dV0ya4dcr2E5N52ocBuZ8Sgg/M030nGF78v855B3Z27mZJnp8PxjnUquEnAtjOsphgMZOlQ==",
- "requires": {
- "@aws-sdk/credential-providers": "^3.186.0",
+ "node_modules/mongodb": {
+ "version": "6.1.0",
+ "resolved": "https://registry.npmjs.org/mongodb/-/mongodb-6.1.0.tgz",
+ "integrity": "sha512-AvzNY0zMkpothZ5mJAaIo2bGDjlJQqqAbn9fvtVgwIIUPEfdrqGxqNjjbuKyrgQxg2EvCmfWdjq+4uj96c0YPw==",
+ "dependencies": {
"@mongodb-js/saslprep": "^1.1.0",
- "bson": "^4.7.2",
- "mongodb-connection-string-url": "^2.6.0",
+ "bson": "^6.1.0",
+ "mongodb-connection-string-url": "^2.6.0"
+ },
+ "engines": {
+ "node": ">=16.20.1"
+ },
+ "peerDependencies": {
+ "@aws-sdk/credential-providers": "^3.188.0",
+ "@mongodb-js/zstd": "^1.1.0",
+ "gcp-metadata": "^5.2.0",
+ "kerberos": "^2.0.1",
+ "mongodb-client-encryption": ">=6.0.0 <7",
+ "snappy": "^7.2.2",
"socks": "^2.7.1"
+ },
+ "peerDependenciesMeta": {
+ "@aws-sdk/credential-providers": {
+ "optional": true
+ },
+ "@mongodb-js/zstd": {
+ "optional": true
+ },
+ "gcp-metadata": {
+ "optional": true
+ },
+ "kerberos": {
+ "optional": true
+ },
+ "mongodb-client-encryption": {
+ "optional": true
+ },
+ "snappy": {
+ "optional": true
+ },
+ "socks": {
+ "optional": true
+ }
}
},
- "mongodb-connection-string-url": {
+ "node_modules/mongodb-connection-string-url": {
"version": "2.6.0",
"resolved": "https://registry.npmjs.org/mongodb-connection-string-url/-/mongodb-connection-string-url-2.6.0.tgz",
"integrity": "sha512-WvTZlI9ab0QYtTYnuMLgobULWhokRjtC7db9LtcVfJ+Hsnyr5eo6ZtNAt3Ly24XZScGMelOcGtm7lSn0332tPQ==",
- "requires": {
+ "dependencies": {
"@types/whatwg-url": "^8.2.1",
"whatwg-url": "^11.0.0"
}
},
- "mongoose": {
+ "node_modules/mongodb/node_modules/bson": {
+ "version": "6.2.0",
+ "resolved": "https://registry.npmjs.org/bson/-/bson-6.2.0.tgz",
+ "integrity": "sha512-ID1cI+7bazPDyL9wYy9GaQ8gEEohWvcUl/Yf0dIdutJxnmInEEyCsb4awy/OiBfall7zBA179Pahi3vCdFze3Q==",
+ "engines": {
+ "node": ">=16.20.1"
+ }
+ },
+ "node_modules/mongoose": {
"version": "5.13.20",
"resolved": "https://registry.npmjs.org/mongoose/-/mongoose-5.13.20.tgz",
"integrity": "sha512-TjGFa/XnJYt+wLmn8y9ssjyO2OhBMeEBtOHb9iJM16EWu2Du6L1Q6zSiEK2ziyYQM8agb4tumNIQFzqbxId7MA==",
- "requires": {
+ "dependencies": {
"@types/bson": "1.x || 4.0.x",
"@types/mongodb": "^3.5.27",
"bson": "^1.1.4",
@@ -8567,136 +11019,187 @@
"sift": "13.5.2",
"sliced": "1.0.1"
},
+ "engines": {
+ "node": ">=4.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/mongoose"
+ }
+ },
+ "node_modules/mongoose-legacy-pluralize": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/mongoose-legacy-pluralize/-/mongoose-legacy-pluralize-1.0.2.tgz",
+ "integrity": "sha512-Yo/7qQU4/EyIS8YDFSeenIvXxZN+ld7YdV9LqFVQJzTLye8unujAWPZ4NWKfFA+RNjh+wvTWKY9Z3E5XM6ZZiQ==",
+ "peerDependencies": {
+ "mongoose": "*"
+ }
+ },
+ "node_modules/mongoose/node_modules/bson": {
+ "version": "1.1.6",
+ "resolved": "https://registry.npmjs.org/bson/-/bson-1.1.6.tgz",
+ "integrity": "sha512-EvVNVeGo4tHxwi8L6bPj3y3itEvStdwvvlojVxxbyYfoaxJ6keLgrTuKdyfEAszFK+H3olzBuafE0yoh0D1gdg==",
+ "engines": {
+ "node": ">=0.6.19"
+ }
+ },
+ "node_modules/mongoose/node_modules/mongodb": {
+ "version": "3.7.4",
+ "resolved": "https://registry.npmjs.org/mongodb/-/mongodb-3.7.4.tgz",
+ "integrity": "sha512-K5q8aBqEXMwWdVNh94UQTwZ6BejVbFhh1uB6c5FKtPE9eUMZPUO3sRZdgIEcHSrAWmxzpG/FeODDKL388sqRmw==",
"dependencies": {
- "bson": {
- "version": "1.1.6",
- "resolved": "https://registry.npmjs.org/bson/-/bson-1.1.6.tgz",
- "integrity": "sha512-EvVNVeGo4tHxwi8L6bPj3y3itEvStdwvvlojVxxbyYfoaxJ6keLgrTuKdyfEAszFK+H3olzBuafE0yoh0D1gdg=="
+ "bl": "^2.2.1",
+ "bson": "^1.1.4",
+ "denque": "^1.4.1",
+ "optional-require": "^1.1.8",
+ "safe-buffer": "^5.1.2"
+ },
+ "engines": {
+ "node": ">=4"
+ },
+ "optionalDependencies": {
+ "saslprep": "^1.0.0"
+ },
+ "peerDependenciesMeta": {
+ "aws4": {
+ "optional": true
},
- "mongodb": {
- "version": "3.7.4",
- "resolved": "https://registry.npmjs.org/mongodb/-/mongodb-3.7.4.tgz",
- "integrity": "sha512-K5q8aBqEXMwWdVNh94UQTwZ6BejVbFhh1uB6c5FKtPE9eUMZPUO3sRZdgIEcHSrAWmxzpG/FeODDKL388sqRmw==",
- "requires": {
- "bl": "^2.2.1",
- "bson": "^1.1.4",
- "denque": "^1.4.1",
- "optional-require": "^1.1.8",
- "safe-buffer": "^5.1.2",
- "saslprep": "^1.0.0"
- },
- "dependencies": {
- "optional-require": {
- "version": "1.1.8",
- "resolved": "https://registry.npmjs.org/optional-require/-/optional-require-1.1.8.tgz",
- "integrity": "sha512-jq83qaUb0wNg9Krv1c5OQ+58EK+vHde6aBPzLvPPqJm89UQWsvSuFy9X/OSNJnFeSOKo7btE0n8Nl2+nE+z5nA==",
- "requires": {
- "require-at": "^1.0.6"
- }
- }
- }
+ "bson-ext": {
+ "optional": true
+ },
+ "kerberos": {
+ "optional": true
+ },
+ "mongodb-client-encryption": {
+ "optional": true
+ },
+ "mongodb-extjson": {
+ "optional": true
+ },
+ "snappy": {
+ "optional": true
}
}
},
- "mongoose-legacy-pluralize": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/mongoose-legacy-pluralize/-/mongoose-legacy-pluralize-1.0.2.tgz",
- "integrity": "sha512-Yo/7qQU4/EyIS8YDFSeenIvXxZN+ld7YdV9LqFVQJzTLye8unujAWPZ4NWKfFA+RNjh+wvTWKY9Z3E5XM6ZZiQ=="
+ "node_modules/mongoose/node_modules/mongodb/node_modules/optional-require": {
+ "version": "1.1.8",
+ "resolved": "https://registry.npmjs.org/optional-require/-/optional-require-1.1.8.tgz",
+ "integrity": "sha512-jq83qaUb0wNg9Krv1c5OQ+58EK+vHde6aBPzLvPPqJm89UQWsvSuFy9X/OSNJnFeSOKo7btE0n8Nl2+nE+z5nA==",
+ "dependencies": {
+ "require-at": "^1.0.6"
+ },
+ "engines": {
+ "node": ">=4"
+ }
},
- "mpath": {
+ "node_modules/mpath": {
"version": "0.8.4",
"resolved": "https://registry.npmjs.org/mpath/-/mpath-0.8.4.tgz",
- "integrity": "sha512-DTxNZomBcTWlrMW76jy1wvV37X/cNNxPW1y2Jzd4DZkAaC5ZGsm8bfGfNOthcDuRJujXLqiuS6o3Tpy0JEoh7g=="
+ "integrity": "sha512-DTxNZomBcTWlrMW76jy1wvV37X/cNNxPW1y2Jzd4DZkAaC5ZGsm8bfGfNOthcDuRJujXLqiuS6o3Tpy0JEoh7g==",
+ "engines": {
+ "node": ">=4.0.0"
+ }
},
- "mquery": {
+ "node_modules/mquery": {
"version": "3.2.5",
"resolved": "https://registry.npmjs.org/mquery/-/mquery-3.2.5.tgz",
"integrity": "sha512-VjOKHHgU84wij7IUoZzFRU07IAxd5kWJaDmyUzQlbjHjyoeK5TNeeo8ZsFDtTYnSgpW6n/nMNIHvE3u8Lbrf4A==",
- "requires": {
+ "dependencies": {
"bluebird": "3.5.1",
"debug": "3.1.0",
"regexp-clone": "^1.0.0",
"safe-buffer": "5.1.2",
"sliced": "1.0.1"
},
- "dependencies": {
- "bluebird": {
- "version": "3.5.1",
- "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.5.1.tgz",
- "integrity": "sha512-MKiLiV+I1AA596t9w1sQJ8jkiSr5+ZKi0WKrYGUn6d1Fx+Ij4tIj+m2WMQSGczs5jZVxV339chE8iwk6F64wjA=="
- },
- "debug": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz",
- "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==",
- "requires": {
- "ms": "2.0.0"
- }
- },
- "ms": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
- "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A=="
- },
- "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=="
- }
+ "engines": {
+ "node": ">=4.0.0"
}
},
- "ms": {
+ "node_modules/mquery/node_modules/bluebird": {
+ "version": "3.5.1",
+ "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.5.1.tgz",
+ "integrity": "sha512-MKiLiV+I1AA596t9w1sQJ8jkiSr5+ZKi0WKrYGUn6d1Fx+Ij4tIj+m2WMQSGczs5jZVxV339chE8iwk6F64wjA=="
+ },
+ "node_modules/mquery/node_modules/debug": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz",
+ "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==",
+ "dependencies": {
+ "ms": "2.0.0"
+ }
+ },
+ "node_modules/mquery/node_modules/ms": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
+ "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A=="
+ },
+ "node_modules/mquery/node_modules/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=="
+ },
+ "node_modules/ms": {
"version": "2.1.2",
"resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
"integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w=="
},
- "mustache": {
+ "node_modules/mustache": {
"version": "3.2.1",
"resolved": "https://registry.npmjs.org/mustache/-/mustache-3.2.1.tgz",
- "integrity": "sha512-RERvMFdLpaFfSRIEe632yDm5nsd0SDKn8hGmcUwswnyiE5mtdZLDybtHAz6hjJhawokF0hXvGLtx9mrQfm6FkA=="
+ "integrity": "sha512-RERvMFdLpaFfSRIEe632yDm5nsd0SDKn8hGmcUwswnyiE5mtdZLDybtHAz6hjJhawokF0hXvGLtx9mrQfm6FkA==",
+ "bin": {
+ "mustache": "bin/mustache"
+ },
+ "engines": {
+ "npm": ">=1.4.0"
+ }
},
- "mute-stdout": {
+ "node_modules/mute-stdout": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/mute-stdout/-/mute-stdout-1.0.1.tgz",
- "integrity": "sha512-kDcwXR4PS7caBpuRYYBUz9iVixUk3anO3f5OYFiIPwK/20vCzKCHyKoulbiDY1S53zD2bxUpxN/IJ+TnXjfvxg=="
+ "integrity": "sha512-kDcwXR4PS7caBpuRYYBUz9iVixUk3anO3f5OYFiIPwK/20vCzKCHyKoulbiDY1S53zD2bxUpxN/IJ+TnXjfvxg==",
+ "engines": {
+ "node": ">= 0.10"
+ }
},
- "mysql": {
+ "node_modules/mysql": {
"version": "2.18.1",
"resolved": "https://registry.npmjs.org/mysql/-/mysql-2.18.1.tgz",
"integrity": "sha512-Bca+gk2YWmqp2Uf6k5NFEurwY/0td0cpebAucFpY/3jhrwrVGuxU2uQFCHjU19SJfje0yQvi+rVWdq78hR5lig==",
- "requires": {
+ "dependencies": {
"bignumber.js": "9.0.0",
"readable-stream": "2.3.7",
"safe-buffer": "5.1.2",
"sqlstring": "2.3.1"
},
- "dependencies": {
- "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"
- }
- },
- "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=="
- }
+ "engines": {
+ "node": ">= 0.6"
}
},
- "mysql2": {
+ "node_modules/mysql/node_modules/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==",
+ "dependencies": {
+ "core-util-is": "~1.0.0",
+ "inherits": "~2.0.3",
+ "isarray": "~1.0.0",
+ "process-nextick-args": "~2.0.0",
+ "safe-buffer": "~5.1.1",
+ "string_decoder": "~1.1.1",
+ "util-deprecate": "~1.0.1"
+ }
+ },
+ "node_modules/mysql/node_modules/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=="
+ },
+ "node_modules/mysql2": {
"version": "1.7.0",
"resolved": "https://registry.npmjs.org/mysql2/-/mysql2-1.7.0.tgz",
"integrity": "sha512-xTWWQPjP5rcrceZQ7CSTKR/4XIDeH/cRkNH/uzvVGQ7W5c7EJ0dXeJUusk7OKhIoHj7uFKUxDVSCfLIl+jluog==",
- "requires": {
+ "dependencies": {
"denque": "^1.4.1",
"generate-function": "^2.3.1",
"iconv-lite": "^0.5.0",
@@ -8706,62 +11209,82 @@
"seq-queue": "^0.0.5",
"sqlstring": "^2.3.1"
},
- "dependencies": {
- "iconv-lite": {
- "version": "0.5.2",
- "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.5.2.tgz",
- "integrity": "sha512-kERHXvpSaB4aU3eANwidg79K8FlrN77m8G9V+0vOR3HYaRifrlwMEpT7ZBJqLSEIHnEgJTHcWK82wwLwwKwtag==",
- "requires": {
- "safer-buffer": ">= 2.1.2 < 3"
- }
- },
- "lru-cache": {
- "version": "5.1.1",
- "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz",
- "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==",
- "requires": {
- "yallist": "^3.0.2"
- }
- },
- "yallist": {
- "version": "3.1.1",
- "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz",
- "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g=="
- }
+ "engines": {
+ "node": ">= 8.0"
}
},
- "named-placeholders": {
+ "node_modules/mysql2/node_modules/iconv-lite": {
+ "version": "0.5.2",
+ "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.5.2.tgz",
+ "integrity": "sha512-kERHXvpSaB4aU3eANwidg79K8FlrN77m8G9V+0vOR3HYaRifrlwMEpT7ZBJqLSEIHnEgJTHcWK82wwLwwKwtag==",
+ "dependencies": {
+ "safer-buffer": ">= 2.1.2 < 3"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/mysql2/node_modules/lru-cache": {
+ "version": "5.1.1",
+ "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz",
+ "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==",
+ "dependencies": {
+ "yallist": "^3.0.2"
+ }
+ },
+ "node_modules/mysql2/node_modules/yallist": {
+ "version": "3.1.1",
+ "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz",
+ "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g=="
+ },
+ "node_modules/named-placeholders": {
"version": "1.1.3",
"resolved": "https://registry.npmjs.org/named-placeholders/-/named-placeholders-1.1.3.tgz",
"integrity": "sha512-eLoBxg6wE/rZkJPhU/xRX1WTpkFEwDJEN96oxFrTsqBdbT5ec295Q+CoHrL9IT0DipqKhmGcaZmwOt8OON5x1w==",
- "requires": {
+ "dependencies": {
"lru-cache": "^7.14.1"
},
- "dependencies": {
- "lru-cache": {
- "version": "7.18.3",
- "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.18.3.tgz",
- "integrity": "sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA=="
- }
+ "engines": {
+ "node": ">=12.0.0"
}
},
- "nan": {
+ "node_modules/named-placeholders/node_modules/lru-cache": {
+ "version": "7.18.3",
+ "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.18.3.tgz",
+ "integrity": "sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA==",
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/nan": {
"version": "2.18.0",
"resolved": "https://registry.npmjs.org/nan/-/nan-2.18.0.tgz",
"integrity": "sha512-W7tfG7vMOGtD30sHoZSSc/JVYiyDPEyQVso/Zz+/uQd0B0L46gtC+pHha5FFMRpil6fm/AoEcRWyOVi4+E/f8w==",
"optional": true
},
- "nanoid": {
+ "node_modules/nanoid": {
"version": "3.3.6",
"resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.6.tgz",
"integrity": "sha512-BGcqMMJuToF7i1rt+2PWSNVnWIkGCU78jBG3RxO/bZlnZPK2Cmi2QaffxGO/2RvWi9sL+FAiRiXMgsyxQ1DIDA==",
- "dev": true
+ "dev": true,
+ "funding": [
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/ai"
+ }
+ ],
+ "bin": {
+ "nanoid": "bin/nanoid.cjs"
+ },
+ "engines": {
+ "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1"
+ }
},
- "nanomatch": {
+ "node_modules/nanomatch": {
"version": "1.2.13",
"resolved": "https://registry.npmjs.org/nanomatch/-/nanomatch-1.2.13.tgz",
"integrity": "sha512-fpoe2T0RbHwBTBUOftAfBPaDEi06ufaUai0mE6Yn1kacc3SnTErfb/h+X94VXzI64rKFHYImXSvdwGGCmwOqCA==",
- "requires": {
+ "dependencies": {
"arr-diff": "^4.0.0",
"array-unique": "^0.3.2",
"define-property": "^2.0.2",
@@ -8773,111 +11296,123 @@
"regex-not": "^1.0.0",
"snapdragon": "^0.8.1",
"to-regex": "^3.0.1"
+ },
+ "engines": {
+ "node": ">=0.10.0"
}
},
- "natural-compare": {
+ "node_modules/natural-compare": {
"version": "1.4.0",
"resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz",
"integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==",
"dev": true
},
- "natural-compare-lite": {
+ "node_modules/natural-compare-lite": {
"version": "1.4.0",
"resolved": "https://registry.npmjs.org/natural-compare-lite/-/natural-compare-lite-1.4.0.tgz",
"integrity": "sha512-Tj+HTDSJJKaZnfiuw+iaF9skdPpTo2GtEly5JHnWV/hfv2Qj/9RKsGISQtLh2ox3l5EAGw487hnBee0sIJ6v2g==",
"dev": true
},
- "negotiator": {
+ "node_modules/negotiator": {
"version": "0.6.3",
"resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz",
- "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg=="
+ "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==",
+ "engines": {
+ "node": ">= 0.6"
+ }
},
- "neo-async": {
+ "node_modules/neo-async": {
"version": "2.6.2",
"resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz",
- "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==",
- "dev": true
+ "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw=="
},
- "nested-error-stacks": {
+ "node_modules/nested-error-stacks": {
"version": "2.1.1",
"resolved": "https://registry.npmjs.org/nested-error-stacks/-/nested-error-stacks-2.1.1.tgz",
"integrity": "sha512-9iN1ka/9zmX1ZvLV9ewJYEk9h7RyRRtqdK0woXcqohu8EWIerfPUjYJPg0ULy0UqP7cslmdGc8xKDJcojlKiaw=="
},
- "next-tick": {
+ "node_modules/next-tick": {
"version": "1.1.0",
"resolved": "https://registry.npmjs.org/next-tick/-/next-tick-1.1.0.tgz",
"integrity": "sha512-CXdUiJembsNjuToQvxayPZF9Vqht7hewsvy2sOWafLvi2awflj9mOC6bHIg50orX8IJvWKY9wYQ/zB2kogPslQ=="
},
- "nice-try": {
+ "node_modules/nice-try": {
"version": "1.0.5",
"resolved": "https://registry.npmjs.org/nice-try/-/nice-try-1.0.5.tgz",
"integrity": "sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==",
"dev": true
},
- "nise": {
+ "node_modules/nise": {
"version": "1.5.3",
"resolved": "https://registry.npmjs.org/nise/-/nise-1.5.3.tgz",
"integrity": "sha512-Ymbac/94xeIrMf59REBPOv0thr+CJVFMhrlAkW/gjCIE58BGQdCj0x7KRCb3yz+Ga2Rz3E9XXSvUyyxqqhjQAQ==",
"dev": true,
- "requires": {
+ "dependencies": {
"@sinonjs/formatio": "^3.2.1",
"@sinonjs/text-encoding": "^0.7.1",
"just-extend": "^4.0.2",
"lolex": "^5.0.1",
"path-to-regexp": "^1.7.0"
- },
- "dependencies": {
- "isarray": {
- "version": "0.0.1",
- "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz",
- "integrity": "sha512-D2S+3GLxWH+uhrNEcoh/fnmYeP8E8/zHl644d/jdA0g2uyXvy3sb0qxotE+ne0LtccHknQzWwZEzhak7oJ0COQ==",
- "dev": true
- },
- "lolex": {
- "version": "5.1.2",
- "resolved": "https://registry.npmjs.org/lolex/-/lolex-5.1.2.tgz",
- "integrity": "sha512-h4hmjAvHTmd+25JSwrtTIuwbKdwg5NzZVRMLn9saij4SZaepCrTCxPr35H/3bjwfMJtN+t3CX8672UIkglz28A==",
- "dev": true,
- "requires": {
- "@sinonjs/commons": "^1.7.0"
- }
- },
- "path-to-regexp": {
- "version": "1.8.0",
- "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-1.8.0.tgz",
- "integrity": "sha512-n43JRhlUKUAlibEJhPeir1ncUID16QnEjNpwzNdO3Lm4ywrBpBZ5oLD0I6br9evr1Y9JTqwRtAh7JLoOzAQdVA==",
- "dev": true,
- "requires": {
- "isarray": "0.0.1"
- }
- }
}
},
- "nocache": {
+ "node_modules/nise/node_modules/isarray": {
+ "version": "0.0.1",
+ "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz",
+ "integrity": "sha512-D2S+3GLxWH+uhrNEcoh/fnmYeP8E8/zHl644d/jdA0g2uyXvy3sb0qxotE+ne0LtccHknQzWwZEzhak7oJ0COQ==",
+ "dev": true
+ },
+ "node_modules/nise/node_modules/lolex": {
+ "version": "5.1.2",
+ "resolved": "https://registry.npmjs.org/lolex/-/lolex-5.1.2.tgz",
+ "integrity": "sha512-h4hmjAvHTmd+25JSwrtTIuwbKdwg5NzZVRMLn9saij4SZaepCrTCxPr35H/3bjwfMJtN+t3CX8672UIkglz28A==",
+ "dev": true,
+ "dependencies": {
+ "@sinonjs/commons": "^1.7.0"
+ }
+ },
+ "node_modules/nise/node_modules/path-to-regexp": {
+ "version": "1.8.0",
+ "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-1.8.0.tgz",
+ "integrity": "sha512-n43JRhlUKUAlibEJhPeir1ncUID16QnEjNpwzNdO3Lm4ywrBpBZ5oLD0I6br9evr1Y9JTqwRtAh7JLoOzAQdVA==",
+ "dev": true,
+ "dependencies": {
+ "isarray": "0.0.1"
+ }
+ },
+ "node_modules/nocache": {
"version": "2.1.0",
"resolved": "https://registry.npmjs.org/nocache/-/nocache-2.1.0.tgz",
- "integrity": "sha512-0L9FvHG3nfnnmaEQPjT9xhfN4ISk0A8/2j4M37Np4mcDesJjHgEUfgPhdCyZuFI954tjokaIj/A3NdpFNdEh4Q=="
+ "integrity": "sha512-0L9FvHG3nfnnmaEQPjT9xhfN4ISk0A8/2j4M37Np4mcDesJjHgEUfgPhdCyZuFI954tjokaIj/A3NdpFNdEh4Q==",
+ "engines": {
+ "node": ">=4.0.0"
+ }
},
- "node-cache": {
+ "node_modules/node-cache": {
"version": "4.2.1",
"resolved": "https://registry.npmjs.org/node-cache/-/node-cache-4.2.1.tgz",
"integrity": "sha512-BOb67bWg2dTyax5kdef5WfU3X8xu4wPg+zHzkvls0Q/QpYycIFRLEEIdAx9Wma43DxG6Qzn4illdZoYseKWa4A==",
- "requires": {
+ "dependencies": {
"clone": "2.x",
"lodash": "^4.17.15"
+ },
+ "engines": {
+ "node": ">= 0.4.6"
}
},
- "node-fetch": {
+ "node_modules/node-fetch": {
"version": "2.6.1",
"resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.1.tgz",
- "integrity": "sha512-V4aYg89jEoVRxRb2fJdAg8FHvI7cEyYdVAh94HH0UIK8oJxUfkjlDQN9RbMx+bEjP7+ggMiFRprSti032Oipxw=="
+ "integrity": "sha512-V4aYg89jEoVRxRb2fJdAg8FHvI7cEyYdVAh94HH0UIK8oJxUfkjlDQN9RbMx+bEjP7+ggMiFRprSti032Oipxw==",
+ "engines": {
+ "node": "4.x || >=6.0.0"
+ }
},
- "node-libs-browser": {
+ "node_modules/node-libs-browser": {
"version": "2.2.1",
"resolved": "https://registry.npmjs.org/node-libs-browser/-/node-libs-browser-2.2.1.tgz",
"integrity": "sha512-h/zcD8H9kaDZ9ALUWwlBUDo6TKF8a7qBSCSEGfjTVIYeqsioSKaAX+BN7NgiMGp6iSIXZ3PxgCu8KS3b71YK5Q==",
"dev": true,
- "requires": {
+ "dependencies": {
"assert": "^1.1.1",
"browserify-zlib": "^0.2.0",
"buffer": "^4.3.0",
@@ -8901,43 +11436,44 @@
"url": "^0.11.0",
"util": "^0.11.0",
"vm-browserify": "^1.0.1"
- },
- "dependencies": {
- "buffer": {
- "version": "4.9.2",
- "resolved": "https://registry.npmjs.org/buffer/-/buffer-4.9.2.tgz",
- "integrity": "sha512-xq+q3SRMOxGivLhBNaUdC64hDTQwejJ+H0T/NB1XMtTVEwNTrfFF3gAxiyW0Bu/xWEGhjVKgUcMhCrUy2+uCWg==",
- "dev": true,
- "requires": {
- "base64-js": "^1.0.2",
- "ieee754": "^1.1.4",
- "isarray": "^1.0.0"
- }
- },
- "punycode": {
- "version": "1.4.1",
- "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz",
- "integrity": "sha512-jmYNElW7yvO7TV33CjSmvSiE2yco3bV2czu/OzDKdMNVZQWfxCblURLhf+47syQRBntjfLdd/H0egrzIG+oaFQ==",
- "dev": true
- }
}
},
- "node-releases": {
- "version": "2.0.13",
- "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.13.tgz",
- "integrity": "sha512-uYr7J37ae/ORWdZeQ1xxMJe3NtdmqMC/JZK+geofDrkLUApKRHPd18/TxtBOJ4A0/+uUIliorNrfYV6s1b02eQ==",
+ "node_modules/node-libs-browser/node_modules/buffer": {
+ "version": "4.9.2",
+ "resolved": "https://registry.npmjs.org/buffer/-/buffer-4.9.2.tgz",
+ "integrity": "sha512-xq+q3SRMOxGivLhBNaUdC64hDTQwejJ+H0T/NB1XMtTVEwNTrfFF3gAxiyW0Bu/xWEGhjVKgUcMhCrUy2+uCWg==",
+ "dev": true,
+ "dependencies": {
+ "base64-js": "^1.0.2",
+ "ieee754": "^1.1.4",
+ "isarray": "^1.0.0"
+ }
+ },
+ "node_modules/node-libs-browser/node_modules/punycode": {
+ "version": "1.4.1",
+ "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz",
+ "integrity": "sha512-jmYNElW7yvO7TV33CjSmvSiE2yco3bV2czu/OzDKdMNVZQWfxCblURLhf+47syQRBntjfLdd/H0egrzIG+oaFQ==",
"dev": true
},
- "nodemailer": {
+ "node_modules/node-releases": {
+ "version": "2.0.13",
+ "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.13.tgz",
+ "integrity": "sha512-uYr7J37ae/ORWdZeQ1xxMJe3NtdmqMC/JZK+geofDrkLUApKRHPd18/TxtBOJ4A0/+uUIliorNrfYV6s1b02eQ=="
+ },
+ "node_modules/nodemailer": {
"version": "6.9.5",
"resolved": "https://registry.npmjs.org/nodemailer/-/nodemailer-6.9.5.tgz",
- "integrity": "sha512-/dmdWo62XjumuLc5+AYQZeiRj+PRR8y8qKtFCOyuOl1k/hckZd8durUUHs/ucKx6/8kN+wFxqKJlQ/LK/qR5FA=="
+ "integrity": "sha512-/dmdWo62XjumuLc5+AYQZeiRj+PRR8y8qKtFCOyuOl1k/hckZd8durUUHs/ucKx6/8kN+wFxqKJlQ/LK/qR5FA==",
+ "engines": {
+ "node": ">=6.0.0"
+ }
},
- "nodemon": {
+ "node_modules/nodemon": {
"version": "1.19.4",
"resolved": "https://registry.npmjs.org/nodemon/-/nodemon-1.19.4.tgz",
"integrity": "sha512-VGPaqQBNk193lrJFotBU8nvWZPqEZY2eIzymy2jjY0fJ9qIsxA0sxQ8ATPl0gZC645gijYEc1jtZvpS8QWzJGQ==",
- "requires": {
+ "hasInstallScript": true,
+ "dependencies": {
"chokidar": "^2.1.8",
"debug": "^3.2.6",
"ignore-by-default": "^1.0.1",
@@ -8949,67 +11485,87 @@
"undefsafe": "^2.0.2",
"update-notifier": "^2.5.0"
},
- "dependencies": {
- "debug": {
- "version": "3.2.7",
- "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz",
- "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==",
- "requires": {
- "ms": "^2.1.1"
- }
- },
- "semver": {
- "version": "5.7.2",
- "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz",
- "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g=="
- }
+ "bin": {
+ "nodemon": "bin/nodemon.js"
+ },
+ "engines": {
+ "node": ">=4"
}
},
- "nopt": {
+ "node_modules/nodemon/node_modules/debug": {
+ "version": "3.2.7",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz",
+ "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==",
+ "dependencies": {
+ "ms": "^2.1.1"
+ }
+ },
+ "node_modules/nodemon/node_modules/semver": {
+ "version": "5.7.2",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz",
+ "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==",
+ "bin": {
+ "semver": "bin/semver"
+ }
+ },
+ "node_modules/nopt": {
"version": "1.0.10",
"resolved": "https://registry.npmjs.org/nopt/-/nopt-1.0.10.tgz",
"integrity": "sha512-NWmpvLSqUrgrAC9HCuxEvb+PSloHpqVu+FqcO4eeF2h5qYRhA7ev6KvelyQAKtegUbC6RypJnlEOhd8vloNKYg==",
- "requires": {
+ "dependencies": {
"abbrev": "1"
+ },
+ "bin": {
+ "nopt": "bin/nopt.js"
+ },
+ "engines": {
+ "node": "*"
}
},
- "normalize-package-data": {
+ "node_modules/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==",
- "requires": {
+ "dependencies": {
"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.2",
- "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz",
- "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g=="
- }
}
},
- "normalize-path": {
+ "node_modules/normalize-package-data/node_modules/semver": {
+ "version": "5.7.2",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz",
+ "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==",
+ "bin": {
+ "semver": "bin/semver"
+ }
+ },
+ "node_modules/normalize-path": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz",
- "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA=="
+ "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==",
+ "engines": {
+ "node": ">=0.10.0"
+ }
},
- "now-and-later": {
+ "node_modules/now-and-later": {
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/now-and-later/-/now-and-later-2.0.1.tgz",
"integrity": "sha512-KGvQ0cB70AQfg107Xvs/Fbu+dGmZoTRJp2TaPwcwQm3/7PteUyN2BCgk8KBMPGBUXZdVwyWS8fDCGFygBm19UQ==",
- "requires": {
+ "dependencies": {
"once": "^1.3.2"
+ },
+ "engines": {
+ "node": ">= 0.10"
}
},
- "npm-run-all": {
+ "node_modules/npm-run-all": {
"version": "4.1.5",
"resolved": "https://registry.npmjs.org/npm-run-all/-/npm-run-all-4.1.5.tgz",
"integrity": "sha512-Oo82gJDAVcaMdi3nuoKFavkIHBRVqQ1qvMb+9LHk/cF4P6B2m8aP04hGf7oL6wZ9BuGwX1onlLhpuoofSyoQDQ==",
"dev": true,
- "requires": {
+ "dependencies": {
"ansi-styles": "^3.2.1",
"chalk": "^2.4.1",
"cross-spawn": "^6.0.5",
@@ -9020,97 +11576,130 @@
"shell-quote": "^1.6.1",
"string.prototype.padend": "^3.0.0"
},
- "dependencies": {
- "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"
- }
- },
- "load-json-file": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-4.0.0.tgz",
- "integrity": "sha512-Kx8hMakjX03tiGTLAIdJ+lL0htKnXjEZN6hk/tozf/WOuYGdZBJrZ+rCJRbVCugsjB3jMLn9746NsQIf5VjBMw==",
- "dev": true,
- "requires": {
- "graceful-fs": "^4.1.2",
- "parse-json": "^4.0.0",
- "pify": "^3.0.0",
- "strip-bom": "^3.0.0"
- }
- },
- "parse-json": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-4.0.0.tgz",
- "integrity": "sha512-aOIos8bujGN93/8Ox/jPLh7RwVnPEysynVFE+fQZyg6jKELEHwzgKdLRFHUgXJL6kylijVSBC4BvN9OmsB48Rw==",
- "dev": true,
- "requires": {
- "error-ex": "^1.3.1",
- "json-parse-better-errors": "^1.0.1"
- }
- },
- "pify": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz",
- "integrity": "sha512-C3FsVNH1udSEX48gGX1xfvwTWfsYWj5U+8/uK15BGzIGrKoUpghX8hWZwa/OFnakBiiVNmBvemTJR5mcy7iPcg==",
- "dev": true
- },
- "read-pkg": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-3.0.0.tgz",
- "integrity": "sha512-BLq/cCO9two+lBgiTYNqD6GdtK8s4NpaWrl6/rCO9w0TUS8oJl7cmToOZfRYllKTISY6nt1U7jQ53brmKqY6BA==",
- "dev": true,
- "requires": {
- "load-json-file": "^4.0.0",
- "normalize-package-data": "^2.3.2",
- "path-type": "^3.0.0"
- }
- },
- "semver": {
- "version": "5.7.2",
- "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz",
- "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==",
- "dev": true
- },
- "strip-bom": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz",
- "integrity": "sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==",
- "dev": true
- }
+ "bin": {
+ "npm-run-all": "bin/npm-run-all/index.js",
+ "run-p": "bin/run-p/index.js",
+ "run-s": "bin/run-s/index.js"
+ },
+ "engines": {
+ "node": ">= 4"
}
},
- "npm-run-path": {
+ "node_modules/npm-run-all/node_modules/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,
+ "dependencies": {
+ "nice-try": "^1.0.4",
+ "path-key": "^2.0.1",
+ "semver": "^5.5.0",
+ "shebang-command": "^1.2.0",
+ "which": "^1.2.9"
+ },
+ "engines": {
+ "node": ">=4.8"
+ }
+ },
+ "node_modules/npm-run-all/node_modules/load-json-file": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-4.0.0.tgz",
+ "integrity": "sha512-Kx8hMakjX03tiGTLAIdJ+lL0htKnXjEZN6hk/tozf/WOuYGdZBJrZ+rCJRbVCugsjB3jMLn9746NsQIf5VjBMw==",
+ "dev": true,
+ "dependencies": {
+ "graceful-fs": "^4.1.2",
+ "parse-json": "^4.0.0",
+ "pify": "^3.0.0",
+ "strip-bom": "^3.0.0"
+ },
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/npm-run-all/node_modules/parse-json": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-4.0.0.tgz",
+ "integrity": "sha512-aOIos8bujGN93/8Ox/jPLh7RwVnPEysynVFE+fQZyg6jKELEHwzgKdLRFHUgXJL6kylijVSBC4BvN9OmsB48Rw==",
+ "dev": true,
+ "dependencies": {
+ "error-ex": "^1.3.1",
+ "json-parse-better-errors": "^1.0.1"
+ },
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/npm-run-all/node_modules/pify": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz",
+ "integrity": "sha512-C3FsVNH1udSEX48gGX1xfvwTWfsYWj5U+8/uK15BGzIGrKoUpghX8hWZwa/OFnakBiiVNmBvemTJR5mcy7iPcg==",
+ "dev": true,
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/npm-run-all/node_modules/read-pkg": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-3.0.0.tgz",
+ "integrity": "sha512-BLq/cCO9two+lBgiTYNqD6GdtK8s4NpaWrl6/rCO9w0TUS8oJl7cmToOZfRYllKTISY6nt1U7jQ53brmKqY6BA==",
+ "dev": true,
+ "dependencies": {
+ "load-json-file": "^4.0.0",
+ "normalize-package-data": "^2.3.2",
+ "path-type": "^3.0.0"
+ },
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/npm-run-all/node_modules/semver": {
+ "version": "5.7.2",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz",
+ "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==",
+ "dev": true,
+ "bin": {
+ "semver": "bin/semver"
+ }
+ },
+ "node_modules/npm-run-all/node_modules/strip-bom": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz",
+ "integrity": "sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==",
+ "dev": true,
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/npm-run-path": {
"version": "2.0.2",
"resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-2.0.2.tgz",
"integrity": "sha512-lJxZYlT4DW/bRUtFh1MQIWqmLwQfAxnqWG4HhEdjMlkrJYnJn0Jrr2u3mgxqaWsdiBc76TYkTG/mhrnYTuzfHw==",
- "requires": {
+ "dependencies": {
"path-key": "^2.0.0"
+ },
+ "engines": {
+ "node": ">=4"
}
},
- "number-is-nan": {
+ "node_modules/number-is-nan": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz",
- "integrity": "sha512-4jbtZXNAsfZbAHiiqjLPBiCl16dES1zI4Hpzzxw61Tk+loF+sBDBKx1ICKKKwIqQ7M0mFn1TmkN7euSncWgHiQ=="
+ "integrity": "sha512-4jbtZXNAsfZbAHiiqjLPBiCl16dES1zI4Hpzzxw61Tk+loF+sBDBKx1ICKKKwIqQ7M0mFn1TmkN7euSncWgHiQ==",
+ "engines": {
+ "node": ">=0.10.0"
+ }
},
- "numbered": {
+ "node_modules/numbered": {
"version": "1.1.0",
"resolved": "https://registry.npmjs.org/numbered/-/numbered-1.1.0.tgz",
"integrity": "sha512-pv/ue2Odr7IfYOO0byC1KgBI10wo5YDauLhxY6/saNzAdAs0r1SotGCPzzCLNPL0xtrAwWRialLu23AAu9xO1g=="
},
- "nyc": {
+ "node_modules/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": {
+ "dependencies": {
"archy": "^1.0.0",
"caching-transform": "^3.0.2",
"convert-source-map": "^1.6.0",
@@ -9137,258 +11726,326 @@
"yargs": "^13.2.2",
"yargs-parser": "^13.0.0"
},
- "dependencies": {
- "ansi-regex": {
- "version": "4.1.1",
- "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.1.tgz",
- "integrity": "sha512-ILlv4k/3f6vfQ4OoP2AGvirOktlQ98ZEL1k9FaQjxa3L1abBgbuTDAdPOpvbGncC0BTVQrl+OM8xZGK6tWXt7g==",
- "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"
- }
- },
- "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"
- }
- },
- "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"
- }
- },
- "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"
- }
- },
- "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
- },
- "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": "sha512-VHskAKYM8RfSFXwee5t5cbN5PZeq1Wrh6qd5bkyiXIf6UQcN6w/A0eXM9r6t8d+GYOh+o6ZhiEnb88LN/Y8m2w==",
- "dev": true
- },
- "js-yaml": {
- "version": "3.14.1",
- "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz",
- "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==",
- "dev": true,
- "requires": {
- "argparse": "^1.0.7",
- "esprima": "^4.0.0"
- }
- },
- "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"
- }
- },
- "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"
- }
- },
- "p-limit": {
- "version": "2.3.0",
- "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz",
- "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==",
- "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"
- }
- },
- "path-exists": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz",
- "integrity": "sha512-bpC7GYwiDYQ4wYLe+FA8lhRjhQCMcQGuSgGGqDkg/QerRWw9CmGRT0iSOVRSZJ29NMLZgIzqaljJ63oaL4NIJQ==",
- "dev": true
- },
- "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"
- }
- },
- "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-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
- },
- "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"
- }
- },
- "semver": {
- "version": "5.7.2",
- "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz",
- "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==",
- "dev": true
- },
- "sprintf-js": {
- "version": "1.0.3",
- "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz",
- "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==",
- "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"
- }
- },
- "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"
- }
- },
- "uuid": {
- "version": "3.4.0",
- "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz",
- "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==",
- "dev": true
- },
- "which-module": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.1.tgz",
- "integrity": "sha512-iBdZ57RDvnOR9AGBhML2vFZf7h8vmBjhoaZqODJBFWHVtKkDmKuHai3cx5PgVMrX5YDNp27AofYbAwctSS+vhQ==",
- "dev": true
- },
- "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"
- }
- },
- "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
- },
- "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"
- }
- },
- "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"
- }
- }
+ "bin": {
+ "nyc": "bin/nyc.js"
+ },
+ "engines": {
+ "node": ">=6"
}
},
- "oauth2-server": {
+ "node_modules/nyc/node_modules/ansi-regex": {
+ "version": "4.1.1",
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.1.tgz",
+ "integrity": "sha512-ILlv4k/3f6vfQ4OoP2AGvirOktlQ98ZEL1k9FaQjxa3L1abBgbuTDAdPOpvbGncC0BTVQrl+OM8xZGK6tWXt7g==",
+ "dev": true,
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/nyc/node_modules/argparse": {
+ "version": "1.0.10",
+ "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz",
+ "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==",
+ "dev": true,
+ "dependencies": {
+ "sprintf-js": "~1.0.2"
+ }
+ },
+ "node_modules/nyc/node_modules/cliui": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/cliui/-/cliui-5.0.0.tgz",
+ "integrity": "sha512-PYeGSEmmHM6zvoef2w8TPzlrnNpXIjTipYK780YswmIP9vjxmd6Y2a3CB2Ks6/AU8NHjZugXvo8w3oWM2qnwXA==",
+ "dev": true,
+ "dependencies": {
+ "string-width": "^3.1.0",
+ "strip-ansi": "^5.2.0",
+ "wrap-ansi": "^5.1.0"
+ }
+ },
+ "node_modules/nyc/node_modules/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,
+ "dependencies": {
+ "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"
+ },
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/nyc/node_modules/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,
+ "dependencies": {
+ "commondir": "^1.0.1",
+ "make-dir": "^2.0.0",
+ "pkg-dir": "^3.0.0"
+ },
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/nyc/node_modules/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,
+ "dependencies": {
+ "locate-path": "^3.0.0"
+ },
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/nyc/node_modules/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,
+ "engines": {
+ "node": "6.* || 8.* || >= 10.*"
+ }
+ },
+ "node_modules/nyc/node_modules/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": "sha512-VHskAKYM8RfSFXwee5t5cbN5PZeq1Wrh6qd5bkyiXIf6UQcN6w/A0eXM9r6t8d+GYOh+o6ZhiEnb88LN/Y8m2w==",
+ "dev": true,
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/nyc/node_modules/js-yaml": {
+ "version": "3.14.1",
+ "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz",
+ "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==",
+ "dev": true,
+ "dependencies": {
+ "argparse": "^1.0.7",
+ "esprima": "^4.0.0"
+ },
+ "bin": {
+ "js-yaml": "bin/js-yaml.js"
+ }
+ },
+ "node_modules/nyc/node_modules/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,
+ "dependencies": {
+ "p-locate": "^3.0.0",
+ "path-exists": "^3.0.0"
+ },
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/nyc/node_modules/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,
+ "dependencies": {
+ "pify": "^4.0.1",
+ "semver": "^5.6.0"
+ },
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/nyc/node_modules/p-limit": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz",
+ "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==",
+ "dev": true,
+ "dependencies": {
+ "p-try": "^2.0.0"
+ },
+ "engines": {
+ "node": ">=6"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/nyc/node_modules/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,
+ "dependencies": {
+ "p-limit": "^2.0.0"
+ },
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/nyc/node_modules/path-exists": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz",
+ "integrity": "sha512-bpC7GYwiDYQ4wYLe+FA8lhRjhQCMcQGuSgGGqDkg/QerRWw9CmGRT0iSOVRSZJ29NMLZgIzqaljJ63oaL4NIJQ==",
+ "dev": true,
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/nyc/node_modules/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,
+ "dependencies": {
+ "find-up": "^3.0.0"
+ },
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/nyc/node_modules/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
+ },
+ "node_modules/nyc/node_modules/resolve-from": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz",
+ "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==",
+ "dev": true,
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/nyc/node_modules/rimraf": {
+ "version": "2.7.1",
+ "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz",
+ "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==",
+ "dev": true,
+ "dependencies": {
+ "glob": "^7.1.3"
+ },
+ "bin": {
+ "rimraf": "bin.js"
+ }
+ },
+ "node_modules/nyc/node_modules/semver": {
+ "version": "5.7.2",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz",
+ "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==",
+ "dev": true,
+ "bin": {
+ "semver": "bin/semver"
+ }
+ },
+ "node_modules/nyc/node_modules/sprintf-js": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz",
+ "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==",
+ "dev": true
+ },
+ "node_modules/nyc/node_modules/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,
+ "dependencies": {
+ "emoji-regex": "^7.0.1",
+ "is-fullwidth-code-point": "^2.0.0",
+ "strip-ansi": "^5.1.0"
+ },
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/nyc/node_modules/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,
+ "dependencies": {
+ "ansi-regex": "^4.1.0"
+ },
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/nyc/node_modules/uuid": {
+ "version": "3.4.0",
+ "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz",
+ "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==",
+ "deprecated": "Please upgrade to version 7 or higher. Older versions may use Math.random() in certain circumstances, which is known to be problematic. See https://v8.dev/blog/math-random for details.",
+ "dev": true,
+ "bin": {
+ "uuid": "bin/uuid"
+ }
+ },
+ "node_modules/nyc/node_modules/which-module": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.1.tgz",
+ "integrity": "sha512-iBdZ57RDvnOR9AGBhML2vFZf7h8vmBjhoaZqODJBFWHVtKkDmKuHai3cx5PgVMrX5YDNp27AofYbAwctSS+vhQ==",
+ "dev": true
+ },
+ "node_modules/nyc/node_modules/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,
+ "dependencies": {
+ "ansi-styles": "^3.2.0",
+ "string-width": "^3.0.0",
+ "strip-ansi": "^5.0.0"
+ },
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/nyc/node_modules/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
+ },
+ "node_modules/nyc/node_modules/yargs": {
+ "version": "13.3.2",
+ "resolved": "https://registry.npmjs.org/yargs/-/yargs-13.3.2.tgz",
+ "integrity": "sha512-AX3Zw5iPruN5ie6xGRIDgqkT+ZhnRlZMLMHAs8tg7nRruy2Nb+i5o9bwghAogtM08q1dpr2LVoS8KSTMYpWXUw==",
+ "dev": true,
+ "dependencies": {
+ "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"
+ }
+ },
+ "node_modules/nyc/node_modules/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,
+ "dependencies": {
+ "camelcase": "^5.0.0",
+ "decamelize": "^1.2.0"
+ }
+ },
+ "node_modules/oauth2-server": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/oauth2-server/-/oauth2-server-3.0.0.tgz",
"integrity": "sha512-TlDDkKECOTjQQ9pQobw/EESLbd7YVY1i0Ebos996Au88FqiLUbQ+X/cRBCq6gvpkoA0ByrDsF8c97SyRygfE6Q==",
- "requires": {
+ "dependencies": {
"basic-auth": "1.1.0",
"bluebird": "3.5.0",
"lodash": "4.17.4",
@@ -9396,271 +12053,372 @@
"statuses": "1.3.1",
"type-is": "1.6.15"
},
- "dependencies": {
- "basic-auth": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/basic-auth/-/basic-auth-1.1.0.tgz",
- "integrity": "sha512-CtGuTyWf3ig+sgRyC7uP6DM3N+5ur/p8L+FPfsd+BbIfIs74TFfCajZTHnCw6K5dqM0bZEbRIqRy1fAdiUJhTA=="
- },
- "bluebird": {
- "version": "3.5.0",
- "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.5.0.tgz",
- "integrity": "sha512-3LE8m8bqjGdoxfvf71yhFNrUcwy3NLy00SAo+b6MfJ8l+Bc2DzQ7mUHwX6pjK2AxfgV+YfsjCeVW3T5HLQTBsQ=="
- },
- "lodash": {
- "version": "4.17.4",
- "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.4.tgz",
- "integrity": "sha512-6X37Sq9KCpLSXEh8uM12AKYlviHPNNk4RxiGBn4cmKGJinbXBneWIV7iE/nXkM928O7ytHcHb6+X6Svl0f4hXg=="
- },
- "statuses": {
- "version": "1.3.1",
- "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.3.1.tgz",
- "integrity": "sha512-wuTCPGlJONk/a1kqZ4fQM2+908lC7fa7nPYpTC1EhnvqLX/IICbeP1OZGDtA374trpSq68YubKUMo8oRhN46yg=="
- },
- "type-is": {
- "version": "1.6.15",
- "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.15.tgz",
- "integrity": "sha512-0uqZYZDiBICTVXEsNcDLueZLPgZ8FgGe8lmVDQ0FcVFUeaxsPbFWiz60ZChVw8VELIt7iGuCehOrZSYjYteWKQ==",
- "requires": {
- "media-typer": "0.3.0",
- "mime-types": "~2.1.15"
- }
- }
+ "engines": {
+ "node": ">=4.0"
}
},
- "object-assign": {
+ "node_modules/oauth2-server/node_modules/basic-auth": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/basic-auth/-/basic-auth-1.1.0.tgz",
+ "integrity": "sha512-CtGuTyWf3ig+sgRyC7uP6DM3N+5ur/p8L+FPfsd+BbIfIs74TFfCajZTHnCw6K5dqM0bZEbRIqRy1fAdiUJhTA==",
+ "engines": {
+ "node": ">= 0.6"
+ }
+ },
+ "node_modules/oauth2-server/node_modules/bluebird": {
+ "version": "3.5.0",
+ "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.5.0.tgz",
+ "integrity": "sha512-3LE8m8bqjGdoxfvf71yhFNrUcwy3NLy00SAo+b6MfJ8l+Bc2DzQ7mUHwX6pjK2AxfgV+YfsjCeVW3T5HLQTBsQ=="
+ },
+ "node_modules/oauth2-server/node_modules/lodash": {
+ "version": "4.17.4",
+ "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.4.tgz",
+ "integrity": "sha512-6X37Sq9KCpLSXEh8uM12AKYlviHPNNk4RxiGBn4cmKGJinbXBneWIV7iE/nXkM928O7ytHcHb6+X6Svl0f4hXg=="
+ },
+ "node_modules/oauth2-server/node_modules/statuses": {
+ "version": "1.3.1",
+ "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.3.1.tgz",
+ "integrity": "sha512-wuTCPGlJONk/a1kqZ4fQM2+908lC7fa7nPYpTC1EhnvqLX/IICbeP1OZGDtA374trpSq68YubKUMo8oRhN46yg==",
+ "engines": {
+ "node": ">= 0.6"
+ }
+ },
+ "node_modules/oauth2-server/node_modules/type-is": {
+ "version": "1.6.15",
+ "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.15.tgz",
+ "integrity": "sha512-0uqZYZDiBICTVXEsNcDLueZLPgZ8FgGe8lmVDQ0FcVFUeaxsPbFWiz60ZChVw8VELIt7iGuCehOrZSYjYteWKQ==",
+ "dependencies": {
+ "media-typer": "0.3.0",
+ "mime-types": "~2.1.15"
+ },
+ "engines": {
+ "node": ">= 0.6"
+ }
+ },
+ "node_modules/object-assign": {
"version": "4.1.1",
"resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz",
- "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg=="
+ "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==",
+ "engines": {
+ "node": ">=0.10.0"
+ }
},
- "object-copy": {
+ "node_modules/object-copy": {
"version": "0.1.0",
"resolved": "https://registry.npmjs.org/object-copy/-/object-copy-0.1.0.tgz",
"integrity": "sha512-79LYn6VAb63zgtmAteVOWo9Vdj71ZVBy3Pbse+VqxDpEP83XuujMrGqHIwAXJ5I/aM0zU7dIyIAhifVTPrNItQ==",
- "requires": {
+ "dependencies": {
"copy-descriptor": "^0.1.0",
"define-property": "^0.2.5",
"kind-of": "^3.0.3"
},
- "dependencies": {
- "define-property": {
- "version": "0.2.5",
- "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz",
- "integrity": "sha512-Rr7ADjQZenceVOAKop6ALkkRAmH1A4Gx9hV/7ZujPUN2rkATqFO0JZLZInbAjpZYoJ1gUx8MRMQVkYemcbMSTA==",
- "requires": {
- "is-descriptor": "^0.1.0"
- }
- },
- "kind-of": {
- "version": "3.2.2",
- "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
- "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==",
- "requires": {
- "is-buffer": "^1.1.5"
- }
- }
+ "engines": {
+ "node": ">=0.10.0"
}
},
- "object-hash": {
+ "node_modules/object-copy/node_modules/define-property": {
+ "version": "0.2.5",
+ "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz",
+ "integrity": "sha512-Rr7ADjQZenceVOAKop6ALkkRAmH1A4Gx9hV/7ZujPUN2rkATqFO0JZLZInbAjpZYoJ1gUx8MRMQVkYemcbMSTA==",
+ "dependencies": {
+ "is-descriptor": "^0.1.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/object-copy/node_modules/kind-of": {
+ "version": "3.2.2",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
+ "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==",
+ "dependencies": {
+ "is-buffer": "^1.1.5"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/object-hash": {
"version": "2.2.0",
"resolved": "https://registry.npmjs.org/object-hash/-/object-hash-2.2.0.tgz",
- "integrity": "sha512-gScRMn0bS5fH+IuwyIFgnh9zBdo4DV+6GhygmWM9HyNJSgS0hScp1f5vjtm7oIIOiT9trXrShAkLFSc2IqKNgw=="
+ "integrity": "sha512-gScRMn0bS5fH+IuwyIFgnh9zBdo4DV+6GhygmWM9HyNJSgS0hScp1f5vjtm7oIIOiT9trXrShAkLFSc2IqKNgw==",
+ "engines": {
+ "node": ">= 6"
+ }
},
- "object-inspect": {
+ "node_modules/object-inspect": {
"version": "1.12.3",
"resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.3.tgz",
- "integrity": "sha512-geUvdk7c+eizMNUDkRpW1wJwgfOiOeHbxBR/hLXK1aT6zmVSO0jsQcs7fj6MGw89jC/cjGfLcNOrtMYtGqm81g=="
+ "integrity": "sha512-geUvdk7c+eizMNUDkRpW1wJwgfOiOeHbxBR/hLXK1aT6zmVSO0jsQcs7fj6MGw89jC/cjGfLcNOrtMYtGqm81g==",
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
},
- "object-keys": {
+ "node_modules/object-keys": {
"version": "1.1.1",
"resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz",
- "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA=="
+ "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==",
+ "engines": {
+ "node": ">= 0.4"
+ }
},
- "object-visit": {
+ "node_modules/object-visit": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/object-visit/-/object-visit-1.0.1.tgz",
"integrity": "sha512-GBaMwwAVK9qbQN3Scdo0OyvgPW7l3lnaVMj84uTOZlswkX0KpF6fyDBJhtTthf7pymztoN36/KEr1DyhF96zEA==",
- "requires": {
+ "dependencies": {
"isobject": "^3.0.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
}
},
- "object.assign": {
+ "node_modules/object.assign": {
"version": "4.1.4",
"resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.4.tgz",
"integrity": "sha512-1mxKf0e58bvyjSCtKYY4sRe9itRk3PJpquJOjeIkz885CczcI4IvJJDLPS72oowuSh+pBxUFROpX+TU++hxhZQ==",
- "requires": {
+ "dependencies": {
"call-bind": "^1.0.2",
"define-properties": "^1.1.4",
"has-symbols": "^1.0.3",
"object-keys": "^1.1.1"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
}
},
- "object.defaults": {
+ "node_modules/object.defaults": {
"version": "1.1.0",
"resolved": "https://registry.npmjs.org/object.defaults/-/object.defaults-1.1.0.tgz",
"integrity": "sha512-c/K0mw/F11k4dEUBMW8naXUuBuhxRCfG7W+yFy8EcijU/rSmazOUd1XAEEe6bC0OuXY4HUKjTJv7xbxIMqdxrA==",
- "requires": {
+ "dependencies": {
"array-each": "^1.0.1",
"array-slice": "^1.0.0",
"for-own": "^1.0.0",
"isobject": "^3.0.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
}
},
- "object.entries": {
+ "node_modules/object.entries": {
"version": "1.1.7",
"resolved": "https://registry.npmjs.org/object.entries/-/object.entries-1.1.7.tgz",
"integrity": "sha512-jCBs/0plmPsOnrKAfFQXRG2NFjlhZgjjcBLSmTnEhU8U6vVTsVe8ANeQJCHTl3gSsI4J+0emOoCgoKlmQPMgmA==",
"dev": true,
- "requires": {
+ "dependencies": {
"call-bind": "^1.0.2",
"define-properties": "^1.2.0",
"es-abstract": "^1.22.1"
+ },
+ "engines": {
+ "node": ">= 0.4"
}
},
- "object.fromentries": {
+ "node_modules/object.fromentries": {
"version": "2.0.7",
"resolved": "https://registry.npmjs.org/object.fromentries/-/object.fromentries-2.0.7.tgz",
"integrity": "sha512-UPbPHML6sL8PI/mOqPwsH4G6iyXcCGzLin8KvEPenOZN5lpCNBZZQ+V62vdjB1mQHrmqGQt5/OJzemUA+KJmEA==",
"dev": true,
- "requires": {
+ "dependencies": {
"call-bind": "^1.0.2",
"define-properties": "^1.2.0",
"es-abstract": "^1.22.1"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
}
},
- "object.groupby": {
+ "node_modules/object.groupby": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/object.groupby/-/object.groupby-1.0.1.tgz",
"integrity": "sha512-HqaQtqLnp/8Bn4GL16cj+CUYbnpe1bh0TtEaWvybszDG4tgxCJuRpV8VGuvNaI1fAnI4lUJzDG55MXcOH4JZcQ==",
"dev": true,
- "requires": {
+ "dependencies": {
"call-bind": "^1.0.2",
"define-properties": "^1.2.0",
"es-abstract": "^1.22.1",
"get-intrinsic": "^1.2.1"
}
},
- "object.map": {
+ "node_modules/object.map": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/object.map/-/object.map-1.0.1.tgz",
"integrity": "sha512-3+mAJu2PLfnSVGHwIWubpOFLscJANBKuB/6A4CxBstc4aqwQY0FWcsppuy4jU5GSB95yES5JHSI+33AWuS4k6w==",
- "requires": {
+ "dependencies": {
"for-own": "^1.0.0",
"make-iterator": "^1.0.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
}
},
- "object.pick": {
+ "node_modules/object.pick": {
"version": "1.3.0",
"resolved": "https://registry.npmjs.org/object.pick/-/object.pick-1.3.0.tgz",
"integrity": "sha512-tqa/UMy/CCoYmj+H5qc07qvSL9dqcs/WZENZ1JbtWBlATP+iVOe778gE6MSijnyCnORzDuX6hU+LA4SZ09YjFQ==",
- "requires": {
+ "dependencies": {
"isobject": "^3.0.1"
+ },
+ "engines": {
+ "node": ">=0.10.0"
}
},
- "object.reduce": {
+ "node_modules/object.reduce": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/object.reduce/-/object.reduce-1.0.1.tgz",
"integrity": "sha512-naLhxxpUESbNkRqc35oQ2scZSJueHGQNUfMW/0U37IgN6tE2dgDWg3whf+NEliy3F/QysrO48XKUz/nGPe+AQw==",
- "requires": {
+ "dependencies": {
"for-own": "^1.0.0",
"make-iterator": "^1.0.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
}
},
- "object.values": {
+ "node_modules/object.values": {
"version": "1.1.7",
"resolved": "https://registry.npmjs.org/object.values/-/object.values-1.1.7.tgz",
"integrity": "sha512-aU6xnDFYT3x17e/f0IiiwlGPTy2jzMySGfUB4fq6z7CV8l85CWHDk5ErhyhpfDHhrOMwGFhSQkhMGHaIotA6Ng==",
"dev": true,
- "requires": {
+ "dependencies": {
"call-bind": "^1.0.2",
"define-properties": "^1.2.0",
"es-abstract": "^1.22.1"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
}
},
- "objection": {
+ "node_modules/objection": {
"version": "3.1.1",
"resolved": "https://registry.npmjs.org/objection/-/objection-3.1.1.tgz",
"integrity": "sha512-v8dqQrFwZm9gRN3ZF4abF+hL6Jm5EbcUjOxVDan0lheOev0sggGGHBP8jgesZ68I0XXBjDFjGXCjTPZsWDu49A==",
- "requires": {
+ "dependencies": {
"ajv": "^8.6.2",
"ajv-formats": "^2.1.1",
"db-errors": "^0.2.3"
+ },
+ "engines": {
+ "node": ">=14.0.0"
+ },
+ "peerDependencies": {
+ "knex": ">=1.0.1"
}
},
- "objection-filter": {
+ "node_modules/objection-filter": {
"version": "4.3.3",
"resolved": "https://registry.npmjs.org/objection-filter/-/objection-filter-4.3.3.tgz",
"integrity": "sha512-LnY4vNeA4qijbIiMuniv37pmkwdMxz//IlrsL4PJQl5tdiKTdl7we+Y3w+NlnS6xZD7zXPvd6EPooQ3iSCB/fg==",
- "requires": {
+ "dependencies": {
"debug": "^4.3.4",
"lodash": "^4.17.5"
},
+ "engines": {
+ "node": ">=14"
+ },
+ "peerDependencies": {
+ "objection": "^2.1.2 || ^3.0.0"
+ }
+ },
+ "node_modules/objection-filter/node_modules/debug": {
+ "version": "4.3.4",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz",
+ "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==",
"dependencies": {
- "debug": {
- "version": "4.3.4",
- "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz",
- "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==",
- "requires": {
- "ms": "2.1.2"
- }
+ "ms": "2.1.2"
+ },
+ "engines": {
+ "node": ">=6.0"
+ },
+ "peerDependenciesMeta": {
+ "supports-color": {
+ "optional": true
}
}
},
- "objection-soft-delete": {
+ "node_modules/objection-soft-delete": {
"version": "1.0.7",
"resolved": "https://registry.npmjs.org/objection-soft-delete/-/objection-soft-delete-1.0.7.tgz",
- "integrity": "sha512-YGGk48DdLiK2gkyXCY4ByItWad+UCHm2VzfsYg8AnD+zhVuCN7FJhjkT8XOwQvCGprqLYuFN7ij/ClLnghUKxA=="
+ "integrity": "sha512-YGGk48DdLiK2gkyXCY4ByItWad+UCHm2VzfsYg8AnD+zhVuCN7FJhjkT8XOwQvCGprqLYuFN7ij/ClLnghUKxA==",
+ "peerDependencies": {
+ "objection": ">= 0.8"
+ }
},
- "objection-unique": {
+ "node_modules/objection-unique": {
"version": "1.2.2",
"resolved": "https://registry.npmjs.org/objection-unique/-/objection-unique-1.2.2.tgz",
"integrity": "sha512-CbePk+pzzvxnqOWvjXYRBzQ03XTT0SWwBG++NcZZM1prLN3NViyyr/Ok7lNQg3F+9eGKN8Shcu4UFYA/x02Fpw==",
- "requires": {
+ "dependencies": {
"lodash.castarray": "^4.4.0",
"lodash.compact": "^3.0.1",
"lodash.isempty": "^4.4.0"
+ },
+ "engines": {
+ "node": ">=6"
+ },
+ "peerDependencies": {
+ "objection": ">=1.0.0"
}
},
- "on-finished": {
+ "node_modules/on-finished": {
"version": "2.4.1",
"resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz",
"integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==",
- "requires": {
+ "dependencies": {
"ee-first": "1.1.1"
+ },
+ "engines": {
+ "node": ">= 0.8"
}
},
- "on-headers": {
+ "node_modules/on-headers": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/on-headers/-/on-headers-1.0.2.tgz",
- "integrity": "sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA=="
+ "integrity": "sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA==",
+ "engines": {
+ "node": ">= 0.8"
+ }
},
- "once": {
+ "node_modules/once": {
"version": "1.4.0",
"resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz",
"integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==",
- "requires": {
+ "dependencies": {
"wrappy": "1"
}
},
- "one-time": {
+ "node_modules/one-time": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/one-time/-/one-time-1.0.0.tgz",
"integrity": "sha512-5DXOiRKwuSEcQ/l0kGCF6Q3jcADFv5tSmRaJck/OqkVFcOzutB134KRSfF0xDrL39MNnqxbHBbUUcjZIhTgb2g==",
- "requires": {
+ "dependencies": {
"fn.name": "1.x.x"
}
},
- "optional-require": {
+ "node_modules/optional-require": {
"version": "1.0.3",
"resolved": "https://registry.npmjs.org/optional-require/-/optional-require-1.0.3.tgz",
- "integrity": "sha512-RV2Zp2MY2aeYK5G+B/Sps8lW5NHAzE5QClbFP15j+PWmP+T9PxlJXBOOLoSAdgwFvS4t0aMR4vpedMkbHfh0nA=="
+ "integrity": "sha512-RV2Zp2MY2aeYK5G+B/Sps8lW5NHAzE5QClbFP15j+PWmP+T9PxlJXBOOLoSAdgwFvS4t0aMR4vpedMkbHfh0nA==",
+ "engines": {
+ "node": ">=4"
+ }
},
- "optionator": {
+ "node_modules/optionator": {
"version": "0.9.3",
"resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.3.tgz",
"integrity": "sha512-JjCoypp+jKn1ttEFExxhetCKeJt9zhAgAve5FXHixTvFDW/5aEktX9bufBKLRRMdU7bNtpLfcGu94B3cdEJgjg==",
"dev": true,
- "requires": {
+ "dependencies": {
"@aashutoshrathi/word-wrap": "^1.2.3",
"deep-is": "^0.1.3",
"fast-levenshtein": "^2.0.6",
@@ -9668,174 +12426,229 @@
"prelude-ls": "^1.2.1",
"type-check": "^0.4.0"
},
- "dependencies": {
- "fast-levenshtein": {
- "version": "2.0.6",
- "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz",
- "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==",
- "dev": true
- }
+ "engines": {
+ "node": ">= 0.8.0"
}
},
- "ordered-read-streams": {
+ "node_modules/optionator/node_modules/fast-levenshtein": {
+ "version": "2.0.6",
+ "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz",
+ "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==",
+ "dev": true
+ },
+ "node_modules/ordered-read-streams": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/ordered-read-streams/-/ordered-read-streams-1.0.1.tgz",
"integrity": "sha512-Z87aSjx3r5c0ZB7bcJqIgIRX5bxR7A4aSzvIbaxd0oTkWBCOoKfuGHiKj60CHVUgg1Phm5yMZzBdt8XqRs73Mw==",
- "requires": {
+ "dependencies": {
"readable-stream": "^2.0.1"
}
},
- "os-browserify": {
+ "node_modules/os-browserify": {
"version": "0.3.0",
"resolved": "https://registry.npmjs.org/os-browserify/-/os-browserify-0.3.0.tgz",
"integrity": "sha512-gjcpUc3clBf9+210TRaDWbf+rZZZEshZ+DlXMRCeAjp0xhTrnQsKHypIy1J3d5hKdUzj69t708EHtU8P6bUn0A==",
"dev": true
},
- "os-homedir": {
+ "node_modules/os-homedir": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/os-homedir/-/os-homedir-1.0.2.tgz",
"integrity": "sha512-B5JU3cabzk8c67mRRd3ECmROafjYMXbuzlwtqdM8IbS8ktlTix8aFGb2bAGKrSRIlnfKwovGUUr72JUPyOb6kQ==",
- "dev": true
+ "dev": true,
+ "engines": {
+ "node": ">=0.10.0"
+ }
},
- "os-locale": {
+ "node_modules/os-locale": {
"version": "1.4.0",
"resolved": "https://registry.npmjs.org/os-locale/-/os-locale-1.4.0.tgz",
"integrity": "sha512-PRT7ZORmwu2MEFt4/fv3Q+mEfN4zetKxufQrkShY2oGvUms9r8otu5HfdyIFHkYXjO7laNsoVGmM2MANfuTA8g==",
- "requires": {
+ "dependencies": {
"lcid": "^1.0.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
}
},
- "p-all": {
+ "node_modules/p-all": {
"version": "2.1.0",
"resolved": "https://registry.npmjs.org/p-all/-/p-all-2.1.0.tgz",
"integrity": "sha512-HbZxz5FONzz/z2gJfk6bFca0BCiSRF8jU3yCsWOen/vR6lZjfPOu/e7L3uFzTW1i0H8TlC3vqQstEJPQL4/uLA==",
- "requires": {
+ "dependencies": {
"p-map": "^2.0.0"
},
- "dependencies": {
- "p-map": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/p-map/-/p-map-2.1.0.tgz",
- "integrity": "sha512-y3b8Kpd8OAN444hxfBbFfj1FY/RjtTd8tzYwhUqNYXx0fXx2iX4maP4Qr6qhIKbQXI02wTLAda4fYUbDagTUFw=="
- }
+ "engines": {
+ "node": ">=6"
}
},
- "p-event": {
+ "node_modules/p-all/node_modules/p-map": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/p-map/-/p-map-2.1.0.tgz",
+ "integrity": "sha512-y3b8Kpd8OAN444hxfBbFfj1FY/RjtTd8tzYwhUqNYXx0fXx2iX4maP4Qr6qhIKbQXI02wTLAda4fYUbDagTUFw==",
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/p-event": {
"version": "4.2.0",
"resolved": "https://registry.npmjs.org/p-event/-/p-event-4.2.0.tgz",
"integrity": "sha512-KXatOjCRXXkSePPb1Nbi0p0m+gQAwdlbhi4wQKJPI1HsMQS9g+Sqp2o+QHziPr7eYJyOZet836KoHEVM1mwOrQ==",
- "requires": {
+ "dependencies": {
"p-timeout": "^3.1.0"
+ },
+ "engines": {
+ "node": ">=8"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
}
},
- "p-filter": {
+ "node_modules/p-filter": {
"version": "2.1.0",
"resolved": "https://registry.npmjs.org/p-filter/-/p-filter-2.1.0.tgz",
"integrity": "sha512-ZBxxZ5sL2HghephhpGAQdoskxplTwr7ICaehZwLIlfL6acuVgZPm8yBNuRAFBGEqtD/hmUeq9eqLg2ys9Xr/yw==",
- "requires": {
+ "dependencies": {
"p-map": "^2.0.0"
},
- "dependencies": {
- "p-map": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/p-map/-/p-map-2.1.0.tgz",
- "integrity": "sha512-y3b8Kpd8OAN444hxfBbFfj1FY/RjtTd8tzYwhUqNYXx0fXx2iX4maP4Qr6qhIKbQXI02wTLAda4fYUbDagTUFw=="
- }
+ "engines": {
+ "node": ">=8"
}
},
- "p-finally": {
+ "node_modules/p-filter/node_modules/p-map": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/p-map/-/p-map-2.1.0.tgz",
+ "integrity": "sha512-y3b8Kpd8OAN444hxfBbFfj1FY/RjtTd8tzYwhUqNYXx0fXx2iX4maP4Qr6qhIKbQXI02wTLAda4fYUbDagTUFw==",
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/p-finally": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz",
- "integrity": "sha512-LICb2p9CB7FS+0eR1oqWnHhp0FljGLZCWBE9aix0Uye9W8LTQPwMTYVGWQWIw9RdQiDg4+epXQODwIYJtSJaow=="
+ "integrity": "sha512-LICb2p9CB7FS+0eR1oqWnHhp0FljGLZCWBE9aix0Uye9W8LTQPwMTYVGWQWIw9RdQiDg4+epXQODwIYJtSJaow==",
+ "engines": {
+ "node": ">=4"
+ }
},
- "p-limit": {
+ "node_modules/p-limit": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/p-limit/-/p-limit-4.0.0.tgz",
"integrity": "sha512-5b0R4txpzjPWVw/cXXUResoD4hb6U/x9BH08L7nw+GN1sezDzPdxeRvpc9c433fZhBan/wusjbCsqwqm4EIBIQ==",
- "requires": {
+ "dependencies": {
"yocto-queue": "^1.0.0"
+ },
+ "engines": {
+ "node": "^12.20.0 || ^14.13.1 || >=16.0.0"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
}
},
- "p-locate": {
+ "node_modules/p-locate": {
"version": "6.0.0",
"resolved": "https://registry.npmjs.org/p-locate/-/p-locate-6.0.0.tgz",
"integrity": "sha512-wPrq66Llhl7/4AGC6I+cqxT07LhXvWL08LNXz1fENOw0Ap4sRZZ/gZpTTJ5jpurzzzfS2W/Ge9BY3LgLjCShcw==",
- "requires": {
+ "dependencies": {
"p-limit": "^4.0.0"
+ },
+ "engines": {
+ "node": "^12.20.0 || ^14.13.1 || >=16.0.0"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
}
},
- "p-map": {
+ "node_modules/p-map": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/p-map/-/p-map-3.0.0.tgz",
"integrity": "sha512-d3qXVTF/s+W+CdJ5A29wywV2n8CQQYahlgz2bFiA+4eVNJbHJodPZ+/gXwPGh0bOqA+j8S+6+ckmvLGPk1QpxQ==",
- "requires": {
+ "dependencies": {
"aggregate-error": "^3.0.0"
+ },
+ "engines": {
+ "node": ">=8"
}
},
- "p-timeout": {
+ "node_modules/p-timeout": {
"version": "3.2.0",
"resolved": "https://registry.npmjs.org/p-timeout/-/p-timeout-3.2.0.tgz",
"integrity": "sha512-rhIwUycgwwKcP9yTOOFK/AKsAopjjCakVqLHePO3CC6Mir1Z99xT+R63jZxAT5lFZLa2inS5h+ZS2GvR99/FBg==",
- "requires": {
+ "dependencies": {
"p-finally": "^1.0.0"
+ },
+ "engines": {
+ "node": ">=8"
}
},
- "p-try": {
+ "node_modules/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=="
+ "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==",
+ "engines": {
+ "node": ">=6"
+ }
},
- "package-hash": {
+ "node_modules/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": {
+ "dependencies": {
"graceful-fs": "^4.1.15",
"hasha": "^3.0.0",
"lodash.flattendeep": "^4.4.0",
"release-zalgo": "^1.0.0"
+ },
+ "engines": {
+ "node": ">=6"
}
},
- "package-json": {
+ "node_modules/package-json": {
"version": "4.0.1",
"resolved": "https://registry.npmjs.org/package-json/-/package-json-4.0.1.tgz",
"integrity": "sha512-q/R5GrMek0vzgoomq6rm9OX+3PQve8sLwTirmK30YB3Cu0Bbt9OX9M/SIUnroN5BGJkzwGsFwDaRGD9EwBOlCA==",
- "requires": {
+ "dependencies": {
"got": "^6.7.1",
"registry-auth-token": "^3.0.1",
"registry-url": "^3.0.3",
"semver": "^5.1.0"
},
- "dependencies": {
- "semver": {
- "version": "5.7.2",
- "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz",
- "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g=="
- }
+ "engines": {
+ "node": ">=4"
}
},
- "pako": {
+ "node_modules/package-json/node_modules/semver": {
+ "version": "5.7.2",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz",
+ "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==",
+ "bin": {
+ "semver": "bin/semver"
+ }
+ },
+ "node_modules/pako": {
"version": "1.0.11",
"resolved": "https://registry.npmjs.org/pako/-/pako-1.0.11.tgz",
"integrity": "sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw==",
"dev": true
},
- "parent-module": {
+ "node_modules/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": {
+ "dependencies": {
"callsites": "^3.0.0"
+ },
+ "engines": {
+ "node": ">=6"
}
},
- "parse-asn1": {
+ "node_modules/parse-asn1": {
"version": "5.1.6",
"resolved": "https://registry.npmjs.org/parse-asn1/-/parse-asn1-5.1.6.tgz",
"integrity": "sha512-RnZRo1EPU6JBnra2vGHj0yhp6ebyjBZpmUCLHWiFhxlzvBCCpAuZ7elsBp1PVAbQN0/04VD/19rfzlBSwLstMw==",
"dev": true,
- "requires": {
+ "dependencies": {
"asn1.js": "^5.2.0",
"browserify-aes": "^1.0.0",
"evp_bytestokey": "^1.0.0",
@@ -9843,410 +12656,567 @@
"safe-buffer": "^5.1.1"
}
},
- "parse-filepath": {
+ "node_modules/parse-filepath": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/parse-filepath/-/parse-filepath-1.0.2.tgz",
"integrity": "sha512-FwdRXKCohSVeXqwtYonZTXtbGJKrn+HNyWDYVcp5yuJlesTwNH4rsmRZ+GrKAPJ5bLpRxESMeS+Rl0VCHRvB2Q==",
- "requires": {
+ "dependencies": {
"is-absolute": "^1.0.0",
"map-cache": "^0.2.0",
"path-root": "^0.1.1"
+ },
+ "engines": {
+ "node": ">=0.8"
}
},
- "parse-json": {
+ "node_modules/parse-json": {
"version": "5.2.0",
"resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz",
"integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==",
- "requires": {
+ "dependencies": {
"@babel/code-frame": "^7.0.0",
"error-ex": "^1.3.1",
"json-parse-even-better-errors": "^2.3.0",
"lines-and-columns": "^1.1.6"
+ },
+ "engines": {
+ "node": ">=8"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
}
},
- "parse-node-version": {
+ "node_modules/parse-node-version": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/parse-node-version/-/parse-node-version-1.0.1.tgz",
- "integrity": "sha512-3YHlOa/JgH6Mnpr05jP9eDG254US9ek25LyIxZlDItp2iJtwyaXQb57lBYLdT3MowkUFYEV2XXNAYIPlESvJlA=="
+ "integrity": "sha512-3YHlOa/JgH6Mnpr05jP9eDG254US9ek25LyIxZlDItp2iJtwyaXQb57lBYLdT3MowkUFYEV2XXNAYIPlESvJlA==",
+ "engines": {
+ "node": ">= 0.10"
+ }
},
- "parse-passwd": {
+ "node_modules/parse-passwd": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/parse-passwd/-/parse-passwd-1.0.0.tgz",
- "integrity": "sha512-1Y1A//QUXEZK7YKz+rD9WydcE1+EuPr6ZBgKecAB8tmoW6UFv0NREVJe1p+jRxtThkcbbKkfwIbWJe/IeE6m2Q=="
+ "integrity": "sha512-1Y1A//QUXEZK7YKz+rD9WydcE1+EuPr6ZBgKecAB8tmoW6UFv0NREVJe1p+jRxtThkcbbKkfwIbWJe/IeE6m2Q==",
+ "engines": {
+ "node": ">=0.10.0"
+ }
},
- "parseurl": {
+ "node_modules/parseurl": {
"version": "1.3.3",
"resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz",
- "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ=="
+ "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==",
+ "engines": {
+ "node": ">= 0.8"
+ }
},
- "pascalcase": {
+ "node_modules/pascalcase": {
"version": "0.1.1",
"resolved": "https://registry.npmjs.org/pascalcase/-/pascalcase-0.1.1.tgz",
- "integrity": "sha512-XHXfu/yOQRy9vYOtUDVMN60OEJjW013GoObG1o+xwQTpB9eYJX/BjXMsdW13ZDPruFhYYn0AG22w0xgQMwl3Nw=="
+ "integrity": "sha512-XHXfu/yOQRy9vYOtUDVMN60OEJjW013GoObG1o+xwQTpB9eYJX/BjXMsdW13ZDPruFhYYn0AG22w0xgQMwl3Nw==",
+ "engines": {
+ "node": ">=0.10.0"
+ }
},
- "path": {
+ "node_modules/path": {
"version": "0.11.14",
"resolved": "https://registry.npmjs.org/path/-/path-0.11.14.tgz",
"integrity": "sha512-CzEXTDgcEfa0yqMe+DJCSbEB5YCv4JZoic5xulBNFF2ifIMjNrTWbNSPNhgKfSo0MjneGIx9RLy4pCFuZPaMSQ=="
},
- "path-browserify": {
+ "node_modules/path-browserify": {
"version": "0.0.1",
"resolved": "https://registry.npmjs.org/path-browserify/-/path-browserify-0.0.1.tgz",
"integrity": "sha512-BapA40NHICOS+USX9SN4tyhq+A2RrN/Ws5F0Z5aMHDp98Fl86lX8Oti8B7uN93L4Ifv4fHOEA+pQw87gmMO/lQ==",
"dev": true
},
- "path-dirname": {
+ "node_modules/path-dirname": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/path-dirname/-/path-dirname-1.0.2.tgz",
"integrity": "sha512-ALzNPpyNq9AqXMBjeymIjFDAkAFH06mHJH/cSBHAgU0s4vfpBn6b2nf8tiRLvagKD8RbTpq2FKTBg7cl9l3c7Q=="
},
- "path-exists": {
+ "node_modules/path-exists": {
"version": "5.0.0",
"resolved": "https://registry.npmjs.org/path-exists/-/path-exists-5.0.0.tgz",
- "integrity": "sha512-RjhtfwJOxzcFmNOi6ltcbcu4Iu+FL3zEj83dk4kAS+fVpTxXLO1b38RvJgT/0QwvV/L3aY9TAnyv0EOqW4GoMQ=="
+ "integrity": "sha512-RjhtfwJOxzcFmNOi6ltcbcu4Iu+FL3zEj83dk4kAS+fVpTxXLO1b38RvJgT/0QwvV/L3aY9TAnyv0EOqW4GoMQ==",
+ "engines": {
+ "node": "^12.20.0 || ^14.13.1 || >=16.0.0"
+ }
},
- "path-is-absolute": {
+ "node_modules/path-is-absolute": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz",
- "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg=="
+ "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==",
+ "engines": {
+ "node": ">=0.10.0"
+ }
},
- "path-is-inside": {
+ "node_modules/path-is-inside": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/path-is-inside/-/path-is-inside-1.0.2.tgz",
"integrity": "sha512-DUWJr3+ULp4zXmol/SZkFf3JGsS9/SIv+Y3Rt93/UjPpDpklB5f1er4O3POIbUuUJ3FXgqte2Q7SrU6zAqwk8w=="
},
- "path-key": {
+ "node_modules/path-key": {
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz",
- "integrity": "sha512-fEHGKCSmUSDPv4uoj8AlD+joPlq3peND+HRYyxFz4KPw4z926S/b8rIuFs2FYJg3BwsxJf6A9/3eIdLaYC+9Dw=="
+ "integrity": "sha512-fEHGKCSmUSDPv4uoj8AlD+joPlq3peND+HRYyxFz4KPw4z926S/b8rIuFs2FYJg3BwsxJf6A9/3eIdLaYC+9Dw==",
+ "engines": {
+ "node": ">=4"
+ }
},
- "path-parse": {
+ "node_modules/path-parse": {
"version": "1.0.7",
"resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz",
"integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw=="
},
- "path-root": {
+ "node_modules/path-root": {
"version": "0.1.1",
"resolved": "https://registry.npmjs.org/path-root/-/path-root-0.1.1.tgz",
"integrity": "sha512-QLcPegTHF11axjfojBIoDygmS2E3Lf+8+jI6wOVmNVenrKSo3mFdSGiIgdSHenczw3wPtlVMQaFVwGmM7BJdtg==",
- "requires": {
+ "dependencies": {
"path-root-regex": "^0.1.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
}
},
- "path-root-regex": {
+ "node_modules/path-root-regex": {
"version": "0.1.2",
"resolved": "https://registry.npmjs.org/path-root-regex/-/path-root-regex-0.1.2.tgz",
- "integrity": "sha512-4GlJ6rZDhQZFE0DPVKh0e9jmZ5egZfxTkp7bcRDuPlJXbAwhxcl2dINPUAsjLdejqaLsCeg8axcLjIbvBjN4pQ=="
+ "integrity": "sha512-4GlJ6rZDhQZFE0DPVKh0e9jmZ5egZfxTkp7bcRDuPlJXbAwhxcl2dINPUAsjLdejqaLsCeg8axcLjIbvBjN4pQ==",
+ "engines": {
+ "node": ">=0.10.0"
+ }
},
- "path-to-regexp": {
+ "node_modules/path-to-regexp": {
"version": "0.1.7",
"resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz",
"integrity": "sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ=="
},
- "path-type": {
+ "node_modules/path-type": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/path-type/-/path-type-3.0.0.tgz",
"integrity": "sha512-T2ZUsdZFHgA3u4e5PfPbjd7HDDpxPnQb5jN0SrDsjNSuVXHJqtwTnWqG0B1jZrgmJ/7lj1EmVIByWt1gxGkWvg==",
- "requires": {
+ "dependencies": {
"pify": "^3.0.0"
},
- "dependencies": {
- "pify": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz",
- "integrity": "sha512-C3FsVNH1udSEX48gGX1xfvwTWfsYWj5U+8/uK15BGzIGrKoUpghX8hWZwa/OFnakBiiVNmBvemTJR5mcy7iPcg=="
- }
+ "engines": {
+ "node": ">=4"
}
},
- "pathval": {
+ "node_modules/path-type/node_modules/pify": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz",
+ "integrity": "sha512-C3FsVNH1udSEX48gGX1xfvwTWfsYWj5U+8/uK15BGzIGrKoUpghX8hWZwa/OFnakBiiVNmBvemTJR5mcy7iPcg==",
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/pathval": {
"version": "1.1.1",
"resolved": "https://registry.npmjs.org/pathval/-/pathval-1.1.1.tgz",
"integrity": "sha512-Dp6zGqpTdETdR63lehJYPeIOqpiNBNtc7BpWSLrOje7UaIsE5aY92r/AunQA7rsXvet3lrJ3JnZX29UPTKXyKQ==",
- "dev": true
+ "dev": true,
+ "engines": {
+ "node": "*"
+ }
},
- "pbkdf2": {
+ "node_modules/pbkdf2": {
"version": "3.1.2",
"resolved": "https://registry.npmjs.org/pbkdf2/-/pbkdf2-3.1.2.tgz",
"integrity": "sha512-iuh7L6jA7JEGu2WxDwtQP1ddOpaJNC4KlDEFfdQajSGgGPNi4OyDc2R7QnbY2bR9QjBVGwgvTdNJZoE7RaxUMA==",
"dev": true,
- "requires": {
+ "dependencies": {
"create-hash": "^1.1.2",
"create-hmac": "^1.1.4",
"ripemd160": "^2.0.1",
"safe-buffer": "^5.0.1",
"sha.js": "^2.4.8"
+ },
+ "engines": {
+ "node": ">=0.12"
}
},
- "pend": {
+ "node_modules/pend": {
"version": "1.2.0",
"resolved": "https://registry.npmjs.org/pend/-/pend-1.2.0.tgz",
"integrity": "sha512-F3asv42UuXchdzt+xXqfW1OGlVBe+mxa2mqI0pg5yAHZPvFmY3Y6drSf/GQ1A86WgWEN9Kzh/WrgKa6iGcHXLg=="
},
- "pg-connection-string": {
+ "node_modules/pg-connection-string": {
"version": "2.5.0",
"resolved": "https://registry.npmjs.org/pg-connection-string/-/pg-connection-string-2.5.0.tgz",
"integrity": "sha512-r5o/V/ORTA6TmUnyWZR9nCj1klXCO2CEKNRlVuJptZe85QuhFayC7WeMic7ndayT5IRIR0S0xFxFi2ousartlQ=="
},
- "picocolors": {
+ "node_modules/picocolors": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz",
"integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ=="
},
- "picomatch": {
+ "node_modules/picomatch": {
"version": "2.3.1",
"resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz",
"integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==",
- "dev": true
+ "dev": true,
+ "engines": {
+ "node": ">=8.6"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/jonschlinkert"
+ }
},
- "pidtree": {
+ "node_modules/pidtree": {
"version": "0.3.1",
"resolved": "https://registry.npmjs.org/pidtree/-/pidtree-0.3.1.tgz",
"integrity": "sha512-qQbW94hLHEqCg7nhby4yRC7G2+jYHY4Rguc2bjw7Uug4GIJuu1tvf2uHaZv5Q8zdt+WKJ6qK1FOI6amaWUo5FA==",
- "dev": true
+ "dev": true,
+ "bin": {
+ "pidtree": "bin/pidtree.js"
+ },
+ "engines": {
+ "node": ">=0.10"
+ }
},
- "pify": {
+ "node_modules/pify": {
"version": "4.0.1",
"resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz",
- "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g=="
+ "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==",
+ "engines": {
+ "node": ">=6"
+ }
},
- "pinkie": {
+ "node_modules/pinkie": {
"version": "2.0.4",
"resolved": "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz",
- "integrity": "sha512-MnUuEycAemtSaeFSjXKW/aroV7akBbY+Sv+RkyqFjgAe73F+MR0TBWKBRDkmfWq/HiFmdavfZ1G7h4SPZXaCSg=="
+ "integrity": "sha512-MnUuEycAemtSaeFSjXKW/aroV7akBbY+Sv+RkyqFjgAe73F+MR0TBWKBRDkmfWq/HiFmdavfZ1G7h4SPZXaCSg==",
+ "engines": {
+ "node": ">=0.10.0"
+ }
},
- "pinkie-promise": {
+ "node_modules/pinkie-promise": {
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz",
"integrity": "sha512-0Gni6D4UcLTbv9c57DfxDGdr41XfgUjqWZu492f0cIGr16zDU06BWP/RAEvOuo7CQ0CNjHaLlM59YJJFm3NWlw==",
- "requires": {
+ "dependencies": {
"pinkie": "^2.0.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
}
},
- "pkg-dir": {
+ "node_modules/pkg-dir": {
"version": "7.0.0",
"resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-7.0.0.tgz",
"integrity": "sha512-Ie9z/WINcxxLp27BKOCHGde4ITq9UklYKDzVo1nhk5sqGEXU3FpkwP5GM2voTGJkGd9B3Otl+Q4uwSOeSUtOBA==",
- "requires": {
+ "dependencies": {
"find-up": "^6.3.0"
+ },
+ "engines": {
+ "node": ">=14.16"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
}
},
- "plugin-error": {
+ "node_modules/plugin-error": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/plugin-error/-/plugin-error-1.0.1.tgz",
"integrity": "sha512-L1zP0dk7vGweZME2i+EeakvUNqSrdiI3F91TwEoYiGrAfUXmVv6fJIq4g82PAXxNsWOp0J7ZqQy/3Szz0ajTxA==",
- "requires": {
+ "dependencies": {
"ansi-colors": "^1.0.1",
"arr-diff": "^4.0.0",
"arr-union": "^3.1.0",
"extend-shallow": "^3.0.2"
+ },
+ "engines": {
+ "node": ">= 0.10"
}
},
- "pluralize": {
+ "node_modules/pluralize": {
"version": "8.0.0",
"resolved": "https://registry.npmjs.org/pluralize/-/pluralize-8.0.0.tgz",
- "integrity": "sha512-Nc3IT5yHzflTfbjgqWcCPpo7DaKy4FnpB0l/zCAW0Tc7jxAiuqSxHasntB3D7887LSrA93kDJ9IXovxJYxyLCA=="
+ "integrity": "sha512-Nc3IT5yHzflTfbjgqWcCPpo7DaKy4FnpB0l/zCAW0Tc7jxAiuqSxHasntB3D7887LSrA93kDJ9IXovxJYxyLCA==",
+ "engines": {
+ "node": ">=4"
+ }
},
- "posix-character-classes": {
+ "node_modules/posix-character-classes": {
"version": "0.1.1",
"resolved": "https://registry.npmjs.org/posix-character-classes/-/posix-character-classes-0.1.1.tgz",
- "integrity": "sha512-xTgYBc3fuo7Yt7JbiuFxSYGToMoz8fLoE6TC9Wx1P/u+LfeThMOAqmuyECnlBaaJb+u1m9hHiXUEtwW4OzfUJg=="
+ "integrity": "sha512-xTgYBc3fuo7Yt7JbiuFxSYGToMoz8fLoE6TC9Wx1P/u+LfeThMOAqmuyECnlBaaJb+u1m9hHiXUEtwW4OzfUJg==",
+ "engines": {
+ "node": ">=0.10.0"
+ }
},
- "postcss": {
+ "node_modules/postcss": {
"version": "8.4.30",
"resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.30.tgz",
"integrity": "sha512-7ZEao1g4kd68l97aWG/etQKPKq07us0ieSZ2TnFDk11i0ZfDW2AwKHYU8qv4MZKqN2fdBfg+7q0ES06UA73C1g==",
"dev": true,
- "requires": {
+ "funding": [
+ {
+ "type": "opencollective",
+ "url": "https://opencollective.com/postcss/"
+ },
+ {
+ "type": "tidelift",
+ "url": "https://tidelift.com/funding/github/npm/postcss"
+ },
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/ai"
+ }
+ ],
+ "dependencies": {
"nanoid": "^3.3.6",
"picocolors": "^1.0.0",
"source-map-js": "^1.0.2"
+ },
+ "engines": {
+ "node": "^10 || ^12 || >=14"
}
},
- "postcss-load-config": {
+ "node_modules/postcss-load-config": {
"version": "3.1.4",
"resolved": "https://registry.npmjs.org/postcss-load-config/-/postcss-load-config-3.1.4.tgz",
"integrity": "sha512-6DiM4E7v4coTE4uzA8U//WhtPwyhiim3eyjEMFCnUpzbrkK9wJHgKDT2mR+HbtSrd/NubVaYTOpSpjUl8NQeRg==",
"dev": true,
- "requires": {
+ "dependencies": {
"lilconfig": "^2.0.5",
"yaml": "^1.10.2"
+ },
+ "engines": {
+ "node": ">= 10"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/postcss/"
+ },
+ "peerDependencies": {
+ "postcss": ">=8.0.9",
+ "ts-node": ">=9.0.0"
+ },
+ "peerDependenciesMeta": {
+ "postcss": {
+ "optional": true
+ },
+ "ts-node": {
+ "optional": true
+ }
}
},
- "prelude-ls": {
+ "node_modules/prelude-ls": {
"version": "1.2.1",
"resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz",
"integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==",
- "dev": true
+ "dev": true,
+ "engines": {
+ "node": ">= 0.8.0"
+ }
},
- "prepend-http": {
+ "node_modules/prepend-http": {
"version": "1.0.4",
"resolved": "https://registry.npmjs.org/prepend-http/-/prepend-http-1.0.4.tgz",
- "integrity": "sha512-PhmXi5XmoyKw1Un4E+opM2KcsJInDvKyuOumcjjw3waw86ZNjHwVUOOWLc4bCzLdcKNaWBH9e99sbWzDQsVaYg=="
+ "integrity": "sha512-PhmXi5XmoyKw1Un4E+opM2KcsJInDvKyuOumcjjw3waw86ZNjHwVUOOWLc4bCzLdcKNaWBH9e99sbWzDQsVaYg==",
+ "engines": {
+ "node": ">=0.10.0"
+ }
},
- "pretty-hrtime": {
+ "node_modules/pretty-hrtime": {
"version": "1.0.3",
"resolved": "https://registry.npmjs.org/pretty-hrtime/-/pretty-hrtime-1.0.3.tgz",
- "integrity": "sha512-66hKPCr+72mlfiSjlEB1+45IjXSqvVAIy6mocupoww4tBFE9R9IhwwUGoI4G++Tc9Aq+2rxOt0RFU6gPcrte0A=="
+ "integrity": "sha512-66hKPCr+72mlfiSjlEB1+45IjXSqvVAIy6mocupoww4tBFE9R9IhwwUGoI4G++Tc9Aq+2rxOt0RFU6gPcrte0A==",
+ "engines": {
+ "node": ">= 0.8"
+ }
},
- "process": {
+ "node_modules/process": {
"version": "0.11.10",
"resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz",
"integrity": "sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A==",
- "dev": true
+ "dev": true,
+ "engines": {
+ "node": ">= 0.6.0"
+ }
},
- "process-nextick-args": {
+ "node_modules/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": {
+ "node_modules/progress": {
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/progress/-/progress-2.0.1.tgz",
- "integrity": "sha512-OE+a6vzqazc+K6LxJrX5UPyKFvGnL5CYmq2jFGNIBWHpc4QyE49/YOumcrpQFJpfejmvRtbJzgO1zPmMCqlbBg=="
+ "integrity": "sha512-OE+a6vzqazc+K6LxJrX5UPyKFvGnL5CYmq2jFGNIBWHpc4QyE49/YOumcrpQFJpfejmvRtbJzgO1zPmMCqlbBg==",
+ "engines": {
+ "node": ">=0.4.0"
+ }
},
- "progress-bar-webpack-plugin": {
+ "node_modules/progress-bar-webpack-plugin": {
"version": "2.1.0",
"resolved": "https://registry.npmjs.org/progress-bar-webpack-plugin/-/progress-bar-webpack-plugin-2.1.0.tgz",
"integrity": "sha512-UtlZbnxpYk1wufEWfhIjRn2U52zlY38uvnzFhs8rRxJxC1hSqw88JNR2Mbpqq9Kix8L1nGb3uQ+/1BiUWbigAg==",
"dev": true,
- "requires": {
+ "dependencies": {
"chalk": "^3.0.0",
"progress": "^2.0.3"
},
- "dependencies": {
- "ansi-styles": {
- "version": "4.3.0",
- "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
- "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
- "dev": true,
- "requires": {
- "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
- },
- "progress": {
- "version": "2.0.3",
- "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz",
- "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==",
- "dev": true
- },
- "supports-color": {
- "version": "7.2.0",
- "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
- "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
- "dev": true,
- "requires": {
- "has-flag": "^4.0.0"
- }
- }
+ "peerDependencies": {
+ "webpack": "^1.3.0 || ^2 || ^3 || ^4 || ^5"
}
},
- "promise": {
+ "node_modules/progress-bar-webpack-plugin/node_modules/ansi-styles": {
+ "version": "4.3.0",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
+ "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
+ "dev": true,
+ "dependencies": {
+ "color-convert": "^2.0.1"
+ },
+ "engines": {
+ "node": ">=8"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/ansi-styles?sponsor=1"
+ }
+ },
+ "node_modules/progress-bar-webpack-plugin/node_modules/chalk": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz",
+ "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==",
+ "dev": true,
+ "dependencies": {
+ "ansi-styles": "^4.1.0",
+ "supports-color": "^7.1.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/progress-bar-webpack-plugin/node_modules/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,
+ "dependencies": {
+ "color-name": "~1.1.4"
+ },
+ "engines": {
+ "node": ">=7.0.0"
+ }
+ },
+ "node_modules/progress-bar-webpack-plugin/node_modules/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
+ },
+ "node_modules/progress-bar-webpack-plugin/node_modules/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,
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/progress-bar-webpack-plugin/node_modules/progress": {
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz",
+ "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==",
+ "dev": true,
+ "engines": {
+ "node": ">=0.4.0"
+ }
+ },
+ "node_modules/progress-bar-webpack-plugin/node_modules/supports-color": {
+ "version": "7.2.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
+ "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
+ "dev": true,
+ "dependencies": {
+ "has-flag": "^4.0.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/promise": {
"version": "7.3.1",
"resolved": "https://registry.npmjs.org/promise/-/promise-7.3.1.tgz",
"integrity": "sha512-nolQXZ/4L+bP/UGlkfaIujX9BKxGwmQ9OT4mOt5yvy8iK1h3wqTEJCijzGANTCCl9nWjY41juyAn2K3Q1hLLTg==",
- "requires": {
+ "dependencies": {
"asap": "~2.0.3"
}
},
- "promisify-any": {
+ "node_modules/promisify-any": {
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/promisify-any/-/promisify-any-2.0.1.tgz",
"integrity": "sha512-pVaGouFbTVxqpVJ+T5A15olNJDASAZHYq5cXz6mWdr6/X34mVWiG9MSdzHTcVBCv4aqBP7wGspi7BUSRbEmhsw==",
- "requires": {
+ "dependencies": {
"bluebird": "^2.10.0",
"co-bluebird": "^1.1.0",
"is-generator": "^1.0.2"
},
- "dependencies": {
- "bluebird": {
- "version": "2.11.0",
- "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-2.11.0.tgz",
- "integrity": "sha512-UfFSr22dmHPQqPP9XWHRhq+gWnHCYguQGkXQlbyPtW5qTnhFWA8/iXg765tH0cAjy7l/zPJ1aBTO0g5XgA7kvQ=="
- }
+ "engines": {
+ "node": ">=0.10.0"
}
},
- "proxy-addr": {
+ "node_modules/promisify-any/node_modules/bluebird": {
+ "version": "2.11.0",
+ "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-2.11.0.tgz",
+ "integrity": "sha512-UfFSr22dmHPQqPP9XWHRhq+gWnHCYguQGkXQlbyPtW5qTnhFWA8/iXg765tH0cAjy7l/zPJ1aBTO0g5XgA7kvQ=="
+ },
+ "node_modules/proxy-addr": {
"version": "2.0.7",
"resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz",
"integrity": "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==",
- "requires": {
+ "dependencies": {
"forwarded": "0.2.0",
"ipaddr.js": "1.9.1"
+ },
+ "engines": {
+ "node": ">= 0.10"
}
},
- "proxy-from-env": {
+ "node_modules/proxy-from-env": {
"version": "1.1.0",
"resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz",
"integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg=="
},
- "pseudomap": {
+ "node_modules/pseudomap": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/pseudomap/-/pseudomap-1.0.2.tgz",
"integrity": "sha512-b/YwNhb8lk1Zz2+bXXpS/LK9OisiZZ1SNsSLxN1x2OXVEhW2Ckr/7mWE5vrC1ZTiJlD9g19jWszTmJsB+oEpFQ=="
},
- "pstree.remy": {
+ "node_modules/pstree.remy": {
"version": "1.1.8",
"resolved": "https://registry.npmjs.org/pstree.remy/-/pstree.remy-1.1.8.tgz",
"integrity": "sha512-77DZwxQmxKnu3aR542U+X8FypNzbfJ+C5XQDk3uWjWxn6151aIMGthWYRXTqT1E5oJvg+ljaa2OJi+VfvCOQ8w=="
},
- "public-encrypt": {
+ "node_modules/public-encrypt": {
"version": "4.0.3",
"resolved": "https://registry.npmjs.org/public-encrypt/-/public-encrypt-4.0.3.tgz",
"integrity": "sha512-zVpa8oKZSz5bTMTFClc1fQOnyyEzpl5ozpi1B5YcvBrdohMjH2rfsBtyXcuNuwjsDIXmBYlF2N5FlJYhR29t8Q==",
"dev": true,
- "requires": {
+ "dependencies": {
"bn.js": "^4.1.0",
"browserify-rsa": "^4.0.0",
"create-hash": "^1.1.0",
"parse-asn1": "^5.0.0",
"randombytes": "^2.0.1",
"safe-buffer": "^5.1.2"
- },
- "dependencies": {
- "bn.js": {
- "version": "4.12.0",
- "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz",
- "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==",
- "dev": true
- }
}
},
- "pug": {
+ "node_modules/public-encrypt/node_modules/bn.js": {
+ "version": "4.12.0",
+ "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz",
+ "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==",
+ "dev": true
+ },
+ "node_modules/pug": {
"version": "3.0.2",
"resolved": "https://registry.npmjs.org/pug/-/pug-3.0.2.tgz",
"integrity": "sha512-bp0I/hiK1D1vChHh6EfDxtndHji55XP/ZJKwsRqrz6lRia6ZC2OZbdAymlxdVFwd1L70ebrVJw4/eZ79skrIaw==",
- "requires": {
+ "dependencies": {
"pug-code-gen": "^3.0.2",
"pug-filters": "^4.0.0",
"pug-lexer": "^5.0.1",
@@ -10257,21 +13227,21 @@
"pug-strip-comments": "^2.0.0"
}
},
- "pug-attrs": {
+ "node_modules/pug-attrs": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/pug-attrs/-/pug-attrs-3.0.0.tgz",
"integrity": "sha512-azINV9dUtzPMFQktvTXciNAfAuVh/L/JCl0vtPCwvOA21uZrC08K/UnmrL+SXGEVc1FwzjW62+xw5S/uaLj6cA==",
- "requires": {
+ "dependencies": {
"constantinople": "^4.0.1",
"js-stringify": "^1.0.2",
"pug-runtime": "^3.0.0"
}
},
- "pug-code-gen": {
+ "node_modules/pug-code-gen": {
"version": "3.0.2",
"resolved": "https://registry.npmjs.org/pug-code-gen/-/pug-code-gen-3.0.2.tgz",
"integrity": "sha512-nJMhW16MbiGRiyR4miDTQMRWDgKplnHyeLvioEJYbk1RsPI3FuA3saEP8uwnTb2nTJEKBU90NFVWJBk4OU5qyg==",
- "requires": {
+ "dependencies": {
"constantinople": "^4.0.1",
"doctypes": "^1.1.0",
"js-stringify": "^1.0.2",
@@ -10282,16 +13252,16 @@
"with": "^7.0.0"
}
},
- "pug-error": {
+ "node_modules/pug-error": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/pug-error/-/pug-error-2.0.0.tgz",
"integrity": "sha512-sjiUsi9M4RAGHktC1drQfCr5C5eriu24Lfbt4s+7SykztEOwVZtbFk1RRq0tzLxcMxMYTBR+zMQaG07J/btayQ=="
},
- "pug-filters": {
+ "node_modules/pug-filters": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/pug-filters/-/pug-filters-4.0.0.tgz",
"integrity": "sha512-yeNFtq5Yxmfz0f9z2rMXGw/8/4i1cCFecw/Q7+D0V2DdtII5UvqE12VaZ2AY7ri6o5RNXiweGH79OCq+2RQU4A==",
- "requires": {
+ "dependencies": {
"constantinople": "^4.0.1",
"jstransformer": "1.0.0",
"pug-error": "^2.0.0",
@@ -10299,90 +13269,95 @@
"resolve": "^1.15.1"
}
},
- "pug-lexer": {
+ "node_modules/pug-lexer": {
"version": "5.0.1",
"resolved": "https://registry.npmjs.org/pug-lexer/-/pug-lexer-5.0.1.tgz",
"integrity": "sha512-0I6C62+keXlZPZkOJeVam9aBLVP2EnbeDw3An+k0/QlqdwH6rv8284nko14Na7c0TtqtogfWXcRoFE4O4Ff20w==",
- "requires": {
+ "dependencies": {
"character-parser": "^2.2.0",
"is-expression": "^4.0.0",
"pug-error": "^2.0.0"
}
},
- "pug-linker": {
+ "node_modules/pug-linker": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/pug-linker/-/pug-linker-4.0.0.tgz",
"integrity": "sha512-gjD1yzp0yxbQqnzBAdlhbgoJL5qIFJw78juN1NpTLt/mfPJ5VgC4BvkoD3G23qKzJtIIXBbcCt6FioLSFLOHdw==",
- "requires": {
+ "dependencies": {
"pug-error": "^2.0.0",
"pug-walk": "^2.0.0"
}
},
- "pug-load": {
+ "node_modules/pug-load": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/pug-load/-/pug-load-3.0.0.tgz",
"integrity": "sha512-OCjTEnhLWZBvS4zni/WUMjH2YSUosnsmjGBB1An7CsKQarYSWQ0GCVyd4eQPMFJqZ8w9xgs01QdiZXKVjk92EQ==",
- "requires": {
+ "dependencies": {
"object-assign": "^4.1.1",
"pug-walk": "^2.0.0"
}
},
- "pug-parser": {
+ "node_modules/pug-parser": {
"version": "6.0.0",
"resolved": "https://registry.npmjs.org/pug-parser/-/pug-parser-6.0.0.tgz",
"integrity": "sha512-ukiYM/9cH6Cml+AOl5kETtM9NR3WulyVP2y4HOU45DyMim1IeP/OOiyEWRr6qk5I5klpsBnbuHpwKmTx6WURnw==",
- "requires": {
+ "dependencies": {
"pug-error": "^2.0.0",
"token-stream": "1.0.0"
}
},
- "pug-runtime": {
+ "node_modules/pug-runtime": {
"version": "3.0.1",
"resolved": "https://registry.npmjs.org/pug-runtime/-/pug-runtime-3.0.1.tgz",
"integrity": "sha512-L50zbvrQ35TkpHwv0G6aLSuueDRwc/97XdY8kL3tOT0FmhgG7UypU3VztfV/LATAvmUfYi4wNxSajhSAeNN+Kg=="
},
- "pug-strip-comments": {
+ "node_modules/pug-strip-comments": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/pug-strip-comments/-/pug-strip-comments-2.0.0.tgz",
"integrity": "sha512-zo8DsDpH7eTkPHCXFeAk1xZXJbyoTfdPlNR0bK7rpOMuhBYb0f5qUVCO1xlsitYd3w5FQTK7zpNVKb3rZoUrrQ==",
- "requires": {
+ "dependencies": {
"pug-error": "^2.0.0"
}
},
- "pug-walk": {
+ "node_modules/pug-walk": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/pug-walk/-/pug-walk-2.0.0.tgz",
"integrity": "sha512-yYELe9Q5q9IQhuvqsZNwA5hfPkMJ8u92bQLIMcsMxf/VADjNtEYptU+inlufAFYcWdHlwNfZOEnOOQrZrcyJCQ=="
},
- "pump": {
+ "node_modules/pump": {
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/pump/-/pump-2.0.1.tgz",
"integrity": "sha512-ruPMNRkN3MHP1cWJc9OWr+T/xDP0jhXYCLfJcBuX54hhfIBnaQmAUMfDcG4DM5UMWByBbJY69QSphm3jtDKIkA==",
- "requires": {
+ "dependencies": {
"end-of-stream": "^1.1.0",
"once": "^1.3.1"
}
},
- "pumpify": {
+ "node_modules/pumpify": {
"version": "1.5.1",
"resolved": "https://registry.npmjs.org/pumpify/-/pumpify-1.5.1.tgz",
"integrity": "sha512-oClZI37HvuUJJxSKKrC17bZ9Cu0ZYhEAGPsPUy9KlMUmv9dKX2o77RUmq7f3XjIxbwyGwYzbzQ1L2Ks8sIradQ==",
- "requires": {
+ "dependencies": {
"duplexify": "^3.6.0",
"inherits": "^2.0.3",
"pump": "^2.0.0"
}
},
- "punycode": {
+ "node_modules/punycode": {
"version": "2.3.0",
"resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.0.tgz",
- "integrity": "sha512-rRV+zQD8tVFys26lAGR9WUuS4iUAngJScM+ZRSKtvl5tKeZ2t5bvdNFdNHBW9FWR4guGHlgmsZ1G7BSm2wTbuA=="
+ "integrity": "sha512-rRV+zQD8tVFys26lAGR9WUuS4iUAngJScM+ZRSKtvl5tKeZ2t5bvdNFdNHBW9FWR4guGHlgmsZ1G7BSm2wTbuA==",
+ "engines": {
+ "node": ">=6"
+ }
},
- "puppeteer": {
+ "node_modules/puppeteer": {
"version": "10.4.0",
"resolved": "https://registry.npmjs.org/puppeteer/-/puppeteer-10.4.0.tgz",
"integrity": "sha512-2cP8mBoqnu5gzAVpbZ0fRaobBWZM8GEUF4I1F6WbgHrKV/rz7SX8PG2wMymZgD0wo0UBlg2FBPNxlF/xlqW6+w==",
- "requires": {
+ "deprecated": "< 19.4.0 is no longer supported",
+ "hasInstallScript": true,
+ "dependencies": {
"debug": "4.3.1",
"devtools-protocol": "0.0.901419",
"extract-zip": "2.0.1",
@@ -10396,235 +13371,331 @@
"unbzip2-stream": "1.3.3",
"ws": "7.4.6"
},
+ "engines": {
+ "node": ">=10.18.1"
+ }
+ },
+ "node_modules/puppeteer/node_modules/debug": {
+ "version": "4.3.1",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.1.tgz",
+ "integrity": "sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ==",
"dependencies": {
- "debug": {
- "version": "4.3.1",
- "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.1.tgz",
- "integrity": "sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ==",
- "requires": {
- "ms": "2.1.2"
- }
- },
- "find-up": {
- "version": "4.1.0",
- "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz",
- "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==",
- "requires": {
- "locate-path": "^5.0.0",
- "path-exists": "^4.0.0"
- }
- },
- "locate-path": {
- "version": "5.0.0",
- "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz",
- "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==",
- "requires": {
- "p-locate": "^4.1.0"
- }
- },
- "p-limit": {
- "version": "2.3.0",
- "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz",
- "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==",
- "requires": {
- "p-try": "^2.0.0"
- }
- },
- "p-locate": {
- "version": "4.1.0",
- "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz",
- "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==",
- "requires": {
- "p-limit": "^2.2.0"
- }
- },
- "path-exists": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz",
- "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w=="
- },
- "pkg-dir": {
- "version": "4.2.0",
- "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz",
- "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==",
- "requires": {
- "find-up": "^4.0.0"
- }
+ "ms": "2.1.2"
+ },
+ "engines": {
+ "node": ">=6.0"
+ },
+ "peerDependenciesMeta": {
+ "supports-color": {
+ "optional": true
}
}
},
- "qim": {
+ "node_modules/puppeteer/node_modules/find-up": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz",
+ "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==",
+ "dependencies": {
+ "locate-path": "^5.0.0",
+ "path-exists": "^4.0.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/puppeteer/node_modules/locate-path": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz",
+ "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==",
+ "dependencies": {
+ "p-locate": "^4.1.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/puppeteer/node_modules/p-limit": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz",
+ "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==",
+ "dependencies": {
+ "p-try": "^2.0.0"
+ },
+ "engines": {
+ "node": ">=6"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/puppeteer/node_modules/p-locate": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz",
+ "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==",
+ "dependencies": {
+ "p-limit": "^2.2.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/puppeteer/node_modules/path-exists": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz",
+ "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==",
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/puppeteer/node_modules/pkg-dir": {
+ "version": "4.2.0",
+ "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz",
+ "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==",
+ "dependencies": {
+ "find-up": "^4.0.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/qim": {
"version": "0.0.52",
"resolved": "https://registry.npmjs.org/qim/-/qim-0.0.52.tgz",
"integrity": "sha512-CiCbUioNzXlTPQD4jt6lJRKW3/rJiwGaZzntLeohihOABi27kx2n3gmhDoOeO68OPGXHchYw9CUgauSdbFwqjg==",
- "requires": {
+ "dependencies": {
"object-assign": "^4.1.0"
}
},
- "qs": {
+ "node_modules/qs": {
"version": "6.11.0",
"resolved": "https://registry.npmjs.org/qs/-/qs-6.11.0.tgz",
"integrity": "sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q==",
- "requires": {
+ "dependencies": {
"side-channel": "^1.0.4"
+ },
+ "engines": {
+ "node": ">=0.6"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
}
},
- "querystring-es3": {
+ "node_modules/querystring-es3": {
"version": "0.2.1",
"resolved": "https://registry.npmjs.org/querystring-es3/-/querystring-es3-0.2.1.tgz",
"integrity": "sha512-773xhDQnZBMFobEiztv8LIl70ch5MSF/jUQVlhwFyBILqq96anmoctVIYz+ZRp0qbCKATTn6ev02M3r7Ga5vqA==",
- "dev": true
+ "dev": true,
+ "engines": {
+ "node": ">=0.4.x"
+ }
},
- "queue-microtask": {
+ "node_modules/queue-microtask": {
"version": "1.2.3",
"resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz",
"integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==",
- "dev": true
+ "dev": true,
+ "funding": [
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/feross"
+ },
+ {
+ "type": "patreon",
+ "url": "https://www.patreon.com/feross"
+ },
+ {
+ "type": "consulting",
+ "url": "https://feross.org/support"
+ }
+ ]
},
- "quick-lru": {
+ "node_modules/quick-lru": {
"version": "4.0.1",
"resolved": "https://registry.npmjs.org/quick-lru/-/quick-lru-4.0.1.tgz",
- "integrity": "sha512-ARhCpm70fzdcvNQfPoy49IaanKkTlRWF2JMzqhcJbhSFRZv7nPTvZJdcY7301IPmvW+/p0RgIWnQDLJxifsQ7g=="
+ "integrity": "sha512-ARhCpm70fzdcvNQfPoy49IaanKkTlRWF2JMzqhcJbhSFRZv7nPTvZJdcY7301IPmvW+/p0RgIWnQDLJxifsQ7g==",
+ "engines": {
+ "node": ">=8"
+ }
},
- "ramda": {
+ "node_modules/ramda": {
"version": "0.27.2",
"resolved": "https://registry.npmjs.org/ramda/-/ramda-0.27.2.tgz",
"integrity": "sha512-SbiLPU40JuJniHexQSAgad32hfwd+DRUdwF2PlVuI5RZD0/vahUco7R8vD86J/tcEKKF9vZrUVwgtmGCqlCKyA=="
},
- "random-bytes": {
+ "node_modules/random-bytes": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/random-bytes/-/random-bytes-1.0.0.tgz",
- "integrity": "sha512-iv7LhNVO047HzYR3InF6pUcUsPQiHTM1Qal51DcGSuZFBil1aBBWG5eHPNek7bvILMaYJ/8RU1e8w1AMdHmLQQ=="
+ "integrity": "sha512-iv7LhNVO047HzYR3InF6pUcUsPQiHTM1Qal51DcGSuZFBil1aBBWG5eHPNek7bvILMaYJ/8RU1e8w1AMdHmLQQ==",
+ "engines": {
+ "node": ">= 0.8"
+ }
},
- "randombytes": {
+ "node_modules/randombytes": {
"version": "2.1.0",
"resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz",
"integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==",
- "dev": true,
- "requires": {
+ "dependencies": {
"safe-buffer": "^5.1.0"
}
},
- "randomfill": {
+ "node_modules/randomfill": {
"version": "1.0.4",
"resolved": "https://registry.npmjs.org/randomfill/-/randomfill-1.0.4.tgz",
"integrity": "sha512-87lcbR8+MhcWcUiQ+9e+Rwx8MyR2P7qnt15ynUlbm3TU/fjbgz4GsvfSUDTemtCCtVCqb4ZcEFlyPNTh9bBTLw==",
"dev": true,
- "requires": {
+ "dependencies": {
"randombytes": "^2.0.5",
"safe-buffer": "^5.1.0"
}
},
- "range-parser": {
+ "node_modules/range-parser": {
"version": "1.2.1",
"resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz",
- "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg=="
+ "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==",
+ "engines": {
+ "node": ">= 0.6"
+ }
},
- "rate-limiter-flexible": {
+ "node_modules/rate-limiter-flexible": {
"version": "2.4.2",
"resolved": "https://registry.npmjs.org/rate-limiter-flexible/-/rate-limiter-flexible-2.4.2.tgz",
"integrity": "sha512-rMATGGOdO1suFyf/mI5LYhts71g1sbdhmd6YvdiXO2gJnd42Tt6QS4JUKJKSWVVkMtBacm6l40FR7Trjo6Iruw=="
},
- "raw-body": {
+ "node_modules/raw-body": {
"version": "2.5.2",
"resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.2.tgz",
"integrity": "sha512-8zGqypfENjCIqGhgXToC8aB2r7YrBX+AQAfIPs/Mlk+BtPTztOvTS01NRW/3Eh60J+a48lt8qsCzirQ6loCVfA==",
- "requires": {
+ "dependencies": {
"bytes": "3.1.2",
"http-errors": "2.0.0",
"iconv-lite": "0.4.24",
"unpipe": "1.0.0"
+ },
+ "engines": {
+ "node": ">= 0.8"
}
},
- "rc": {
+ "node_modules/rc": {
"version": "1.2.8",
"resolved": "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz",
"integrity": "sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==",
- "requires": {
+ "dependencies": {
"deep-extend": "^0.6.0",
"ini": "~1.3.0",
"minimist": "^1.2.0",
"strip-json-comments": "~2.0.1"
+ },
+ "bin": {
+ "rc": "cli.js"
}
},
- "read-pkg": {
+ "node_modules/read-pkg": {
"version": "5.2.0",
"resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-5.2.0.tgz",
"integrity": "sha512-Ug69mNOpfvKDAc2Q8DRpMjjzdtrnv9HcSMX+4VsZxD1aZ6ZzrIE7rlzXBtWTyhULSMKg076AW6WR5iZpD0JiOg==",
- "requires": {
+ "dependencies": {
"@types/normalize-package-data": "^2.4.0",
"normalize-package-data": "^2.5.0",
"parse-json": "^5.0.0",
"type-fest": "^0.6.0"
},
- "dependencies": {
- "type-fest": {
- "version": "0.6.0",
- "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.6.0.tgz",
- "integrity": "sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg=="
- }
+ "engines": {
+ "node": ">=8"
}
},
- "read-pkg-up": {
+ "node_modules/read-pkg-up": {
"version": "7.0.1",
"resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-7.0.1.tgz",
"integrity": "sha512-zK0TB7Xd6JpCLmlLmufqykGE+/TlOePD6qKClNW7hHDKFh/J7/7gCWGR7joEQEW1bKq3a3yUZSObOoWLFQ4ohg==",
- "requires": {
+ "dependencies": {
"find-up": "^4.1.0",
"read-pkg": "^5.2.0",
"type-fest": "^0.8.1"
},
- "dependencies": {
- "find-up": {
- "version": "4.1.0",
- "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz",
- "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==",
- "requires": {
- "locate-path": "^5.0.0",
- "path-exists": "^4.0.0"
- }
- },
- "locate-path": {
- "version": "5.0.0",
- "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz",
- "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==",
- "requires": {
- "p-locate": "^4.1.0"
- }
- },
- "p-limit": {
- "version": "2.3.0",
- "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz",
- "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==",
- "requires": {
- "p-try": "^2.0.0"
- }
- },
- "p-locate": {
- "version": "4.1.0",
- "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz",
- "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==",
- "requires": {
- "p-limit": "^2.2.0"
- }
- },
- "path-exists": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz",
- "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w=="
- },
- "type-fest": {
- "version": "0.8.1",
- "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz",
- "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA=="
- }
+ "engines": {
+ "node": ">=8"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
}
},
- "readable-stream": {
+ "node_modules/read-pkg-up/node_modules/find-up": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz",
+ "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==",
+ "dependencies": {
+ "locate-path": "^5.0.0",
+ "path-exists": "^4.0.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/read-pkg-up/node_modules/locate-path": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz",
+ "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==",
+ "dependencies": {
+ "p-locate": "^4.1.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/read-pkg-up/node_modules/p-limit": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz",
+ "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==",
+ "dependencies": {
+ "p-try": "^2.0.0"
+ },
+ "engines": {
+ "node": ">=6"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/read-pkg-up/node_modules/p-locate": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz",
+ "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==",
+ "dependencies": {
+ "p-limit": "^2.2.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/read-pkg-up/node_modules/path-exists": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz",
+ "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==",
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/read-pkg-up/node_modules/type-fest": {
+ "version": "0.8.1",
+ "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz",
+ "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==",
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/read-pkg/node_modules/type-fest": {
+ "version": "0.6.0",
+ "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.6.0.tgz",
+ "integrity": "sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg==",
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/readable-stream": {
"version": "2.3.8",
"resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz",
"integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==",
- "requires": {
+ "dependencies": {
"core-util-is": "~1.0.0",
"inherits": "~2.0.3",
"isarray": "~1.0.0",
@@ -10632,580 +13703,820 @@
"safe-buffer": "~5.1.1",
"string_decoder": "~1.1.1",
"util-deprecate": "~1.0.1"
- },
- "dependencies": {
- "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=="
- }
}
},
- "readdirp": {
+ "node_modules/readable-stream/node_modules/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=="
+ },
+ "node_modules/readdirp": {
"version": "2.2.1",
"resolved": "https://registry.npmjs.org/readdirp/-/readdirp-2.2.1.tgz",
"integrity": "sha512-1JU/8q+VgFZyxwrJ+SVIOsh+KywWGpds3NTqikiKpDMZWScmAYyKIgqkO+ARvNWJfXeXR1zxz7aHF4u4CyH6vQ==",
- "requires": {
+ "dependencies": {
"graceful-fs": "^4.1.11",
"micromatch": "^3.1.10",
"readable-stream": "^2.0.2"
+ },
+ "engines": {
+ "node": ">=0.10"
}
},
- "rechoir": {
+ "node_modules/rechoir": {
"version": "0.7.0",
"resolved": "https://registry.npmjs.org/rechoir/-/rechoir-0.7.0.tgz",
"integrity": "sha512-ADsDEH2bvbjltXEP+hTIAmeFekTFK0V2BTxMkok6qILyAJEXV0AFfoWcAq4yfll5VdIMd/RVXq0lR+wQi5ZU3Q==",
- "requires": {
+ "dependencies": {
"resolve": "^1.9.0"
+ },
+ "engines": {
+ "node": ">= 0.10"
}
},
- "redent": {
+ "node_modules/redent": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/redent/-/redent-3.0.0.tgz",
"integrity": "sha512-6tDA8g98We0zd0GvVeMT9arEOnTw9qM03L9cJXaCjrip1OO764RDBLBfrB4cwzNGDj5OA5ioymC9GkizgWJDUg==",
- "requires": {
+ "dependencies": {
"indent-string": "^4.0.0",
"strip-indent": "^3.0.0"
+ },
+ "engines": {
+ "node": ">=8"
}
},
- "referrer-policy": {
+ "node_modules/referrer-policy": {
"version": "1.2.0",
"resolved": "https://registry.npmjs.org/referrer-policy/-/referrer-policy-1.2.0.tgz",
- "integrity": "sha512-LgQJIuS6nAy1Jd88DCQRemyE3mS+ispwlqMk3b0yjZ257fI1v9c+/p6SD5gP5FGyXUIgrNOAfmyioHwZtYv2VA=="
+ "integrity": "sha512-LgQJIuS6nAy1Jd88DCQRemyE3mS+ispwlqMk3b0yjZ257fI1v9c+/p6SD5gP5FGyXUIgrNOAfmyioHwZtYv2VA==",
+ "engines": {
+ "node": ">=4.0.0"
+ }
},
- "reflect-metadata": {
+ "node_modules/reflect-metadata": {
"version": "0.1.13",
"resolved": "https://registry.npmjs.org/reflect-metadata/-/reflect-metadata-0.1.13.tgz",
"integrity": "sha512-Ts1Y/anZELhSsjMcU605fU9RE4Oi3p5ORujwbIKXfWa+0Zxs510Qrmrce5/Jowq3cHSZSJqBjypxmHarc+vEWg=="
},
- "regenerator-runtime": {
+ "node_modules/regenerator-runtime": {
"version": "0.13.11",
"resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.11.tgz",
"integrity": "sha512-kY1AZVr2Ra+t+piVaJ4gxaFaReZVH40AKNo7UCX6W+dEwBo/2oZJzqfuN1qLq1oL45o56cPaTXELwrTh8Fpggg==",
"dev": true
},
- "regex-not": {
+ "node_modules/regex-not": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/regex-not/-/regex-not-1.0.2.tgz",
"integrity": "sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A==",
- "requires": {
+ "dependencies": {
"extend-shallow": "^3.0.2",
"safe-regex": "^1.1.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
}
},
- "regexp-clone": {
+ "node_modules/regexp-clone": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/regexp-clone/-/regexp-clone-1.0.0.tgz",
"integrity": "sha512-TuAasHQNamyyJ2hb97IuBEif4qBHGjPHBS64sZwytpLEqtBQ1gPJTnOaQ6qmpET16cK14kkjbazl6+p0RRv0yw=="
},
- "regexp.prototype.flags": {
+ "node_modules/regexp.prototype.flags": {
"version": "1.5.1",
"resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.5.1.tgz",
"integrity": "sha512-sy6TXMN+hnP/wMy+ISxg3krXx7BAtWVO4UouuCN/ziM9UEne0euamVNafDfvC83bRNr95y0V5iijeDQFUNpvrg==",
"dev": true,
- "requires": {
+ "dependencies": {
"call-bind": "^1.0.2",
"define-properties": "^1.2.0",
"set-function-name": "^2.0.0"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
}
},
- "registry-auth-token": {
+ "node_modules/registry-auth-token": {
"version": "3.4.0",
"resolved": "https://registry.npmjs.org/registry-auth-token/-/registry-auth-token-3.4.0.tgz",
"integrity": "sha512-4LM6Fw8eBQdwMYcES4yTnn2TqIasbXuwDx3um+QRs7S55aMKCBKBxvPXl2RiUjHwuJLTyYfxSpmfSAjQpcuP+A==",
- "requires": {
+ "dependencies": {
"rc": "^1.1.6",
"safe-buffer": "^5.0.1"
}
},
- "registry-url": {
+ "node_modules/registry-url": {
"version": "3.1.0",
"resolved": "https://registry.npmjs.org/registry-url/-/registry-url-3.1.0.tgz",
"integrity": "sha512-ZbgR5aZEdf4UKZVBPYIgaglBmSF2Hi94s2PcIHhRGFjKYu+chjJdYfHn4rt3hB6eCKLJ8giVIIfgMa1ehDfZKA==",
- "requires": {
+ "dependencies": {
"rc": "^1.0.1"
+ },
+ "engines": {
+ "node": ">=0.10.0"
}
},
- "release-zalgo": {
+ "node_modules/release-zalgo": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/release-zalgo/-/release-zalgo-1.0.0.tgz",
"integrity": "sha512-gUAyHVHPPC5wdqX/LG4LWtRYtgjxyX78oanFNTMMyFEfOqdC54s3eE82imuWKbOeqYht2CrNf64Qb8vgmmtZGA==",
"dev": true,
- "requires": {
+ "dependencies": {
"es6-error": "^4.0.1"
+ },
+ "engines": {
+ "node": ">=4"
}
},
- "remove-bom-buffer": {
+ "node_modules/remove-bom-buffer": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/remove-bom-buffer/-/remove-bom-buffer-3.0.0.tgz",
"integrity": "sha512-8v2rWhaakv18qcvNeli2mZ/TMTL2nEyAKRvzo1WtnZBl15SHyEhrCu2/xKlJyUFKHiHgfXIyuY6g2dObJJycXQ==",
- "requires": {
+ "dependencies": {
"is-buffer": "^1.1.5",
"is-utf8": "^0.2.1"
+ },
+ "engines": {
+ "node": ">=0.10.0"
}
},
- "remove-bom-stream": {
+ "node_modules/remove-bom-stream": {
"version": "1.2.0",
"resolved": "https://registry.npmjs.org/remove-bom-stream/-/remove-bom-stream-1.2.0.tgz",
"integrity": "sha512-wigO8/O08XHb8YPzpDDT+QmRANfW6vLqxfaXm1YXhnFf3AkSLyjfG3GEFg4McZkmgL7KvCj5u2KczkvSP6NfHA==",
- "requires": {
+ "dependencies": {
"remove-bom-buffer": "^3.0.0",
"safe-buffer": "^5.1.0",
"through2": "^2.0.3"
+ },
+ "engines": {
+ "node": ">= 0.10"
}
},
- "remove-trailing-separator": {
+ "node_modules/remove-trailing-separator": {
"version": "1.1.0",
"resolved": "https://registry.npmjs.org/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz",
"integrity": "sha512-/hS+Y0u3aOfIETiaiirUFwDBDzmXPvO+jAfKTitUngIPzdKc6Z0LoFjM/CK5PL4C+eKwHohlHAb6H0VFfmmUsw=="
},
- "repeat-element": {
+ "node_modules/repeat-element": {
"version": "1.1.4",
"resolved": "https://registry.npmjs.org/repeat-element/-/repeat-element-1.1.4.tgz",
- "integrity": "sha512-LFiNfRcSu7KK3evMyYOuCzv3L10TW7yC1G2/+StMjK8Y6Vqd2MG7r/Qjw4ghtuCOjFvlnms/iMmLqpvW/ES/WQ=="
+ "integrity": "sha512-LFiNfRcSu7KK3evMyYOuCzv3L10TW7yC1G2/+StMjK8Y6Vqd2MG7r/Qjw4ghtuCOjFvlnms/iMmLqpvW/ES/WQ==",
+ "engines": {
+ "node": ">=0.10.0"
+ }
},
- "repeat-string": {
+ "node_modules/repeat-string": {
"version": "1.6.1",
"resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz",
- "integrity": "sha512-PV0dzCYDNfRi1jCDbJzpW7jNNDRuCOG/jI5ctQcGKt/clZD+YcPS3yIlWuTJMmESC8aevCFmWJy5wjAFgNqN6w=="
+ "integrity": "sha512-PV0dzCYDNfRi1jCDbJzpW7jNNDRuCOG/jI5ctQcGKt/clZD+YcPS3yIlWuTJMmESC8aevCFmWJy5wjAFgNqN6w==",
+ "engines": {
+ "node": ">=0.10"
+ }
},
- "replace-ext": {
+ "node_modules/replace-ext": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/replace-ext/-/replace-ext-1.0.1.tgz",
- "integrity": "sha512-yD5BHCe7quCgBph4rMQ+0KkIRKwWCrHDOX1p1Gp6HwjPM5kVoCdKGNhN7ydqqsX6lJEnQDKZ/tFMiEdQ1dvPEw=="
+ "integrity": "sha512-yD5BHCe7quCgBph4rMQ+0KkIRKwWCrHDOX1p1Gp6HwjPM5kVoCdKGNhN7ydqqsX6lJEnQDKZ/tFMiEdQ1dvPEw==",
+ "engines": {
+ "node": ">= 0.10"
+ }
},
- "replace-homedir": {
+ "node_modules/replace-homedir": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/replace-homedir/-/replace-homedir-1.0.0.tgz",
"integrity": "sha512-CHPV/GAglbIB1tnQgaiysb8H2yCy8WQ7lcEwQ/eT+kLj0QHV8LnJW0zpqpE7RSkrMSRoa+EBoag86clf7WAgSg==",
- "requires": {
+ "dependencies": {
"homedir-polyfill": "^1.0.1",
"is-absolute": "^1.0.0",
"remove-trailing-separator": "^1.1.0"
+ },
+ "engines": {
+ "node": ">= 0.10"
}
},
- "require-at": {
+ "node_modules/require-at": {
"version": "1.0.6",
"resolved": "https://registry.npmjs.org/require-at/-/require-at-1.0.6.tgz",
- "integrity": "sha512-7i1auJbMUrXEAZCOQ0VNJgmcT2VOKPRl2YGJwgpHpC9CE91Mv4/4UYIUm4chGJaI381ZDq1JUicFii64Hapd8g=="
+ "integrity": "sha512-7i1auJbMUrXEAZCOQ0VNJgmcT2VOKPRl2YGJwgpHpC9CE91Mv4/4UYIUm4chGJaI381ZDq1JUicFii64Hapd8g==",
+ "engines": {
+ "node": ">=4"
+ }
},
- "require-directory": {
+ "node_modules/require-directory": {
"version": "2.1.1",
"resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz",
- "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q=="
+ "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==",
+ "engines": {
+ "node": ">=0.10.0"
+ }
},
- "require-from-string": {
+ "node_modules/require-from-string": {
"version": "2.0.2",
"resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz",
- "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw=="
+ "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==",
+ "engines": {
+ "node": ">=0.10.0"
+ }
},
- "require-main-filename": {
+ "node_modules/require-main-filename": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-1.0.1.tgz",
"integrity": "sha512-IqSUtOVP4ksd1C/ej5zeEh/BIP2ajqpn8c5x+q99gvcIG/Qf0cud5raVnE/Dwd0ua9TXYDoDc0RE5hBSdz22Ug=="
},
- "resolve": {
+ "node_modules/resolve": {
"version": "1.22.6",
"resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.6.tgz",
"integrity": "sha512-njhxM7mV12JfufShqGy3Rz8j11RPdLy4xi15UurGJeoHLfJpVXKdh3ueuOqbYUcDZnffr6X739JBo5LzyahEsw==",
- "requires": {
+ "dependencies": {
"is-core-module": "^2.13.0",
"path-parse": "^1.0.7",
"supports-preserve-symlinks-flag": "^1.0.0"
+ },
+ "bin": {
+ "resolve": "bin/resolve"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
}
},
- "resolve-cwd": {
+ "node_modules/resolve-cwd": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/resolve-cwd/-/resolve-cwd-3.0.0.tgz",
"integrity": "sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg==",
"dev": true,
- "requires": {
+ "dependencies": {
"resolve-from": "^5.0.0"
+ },
+ "engines": {
+ "node": ">=8"
}
},
- "resolve-dir": {
+ "node_modules/resolve-dir": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/resolve-dir/-/resolve-dir-1.0.1.tgz",
"integrity": "sha512-R7uiTjECzvOsWSfdM0QKFNBVFcK27aHOUwdvK53BcW8zqnGdYp0Fbj82cy54+2A4P2tFM22J5kRfe1R+lM/1yg==",
- "requires": {
+ "dependencies": {
"expand-tilde": "^2.0.0",
"global-modules": "^1.0.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
}
},
- "resolve-from": {
+ "node_modules/resolve-from": {
"version": "5.0.0",
"resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz",
- "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw=="
+ "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==",
+ "engines": {
+ "node": ">=8"
+ }
},
- "resolve-options": {
+ "node_modules/resolve-options": {
"version": "1.1.0",
"resolved": "https://registry.npmjs.org/resolve-options/-/resolve-options-1.1.0.tgz",
"integrity": "sha512-NYDgziiroVeDC29xq7bp/CacZERYsA9bXYd1ZmcJlF3BcrZv5pTb4NG7SjdyKDnXZ84aC4vo2u6sNKIA1LCu/A==",
- "requires": {
+ "dependencies": {
"value-or-function": "^3.0.0"
+ },
+ "engines": {
+ "node": ">= 0.10"
}
},
- "resolve-pkg-maps": {
+ "node_modules/resolve-pkg-maps": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/resolve-pkg-maps/-/resolve-pkg-maps-1.0.0.tgz",
"integrity": "sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw==",
- "dev": true
+ "dev": true,
+ "funding": {
+ "url": "https://github.com/privatenumber/resolve-pkg-maps?sponsor=1"
+ }
},
- "resolve-url": {
+ "node_modules/resolve-url": {
"version": "0.2.1",
"resolved": "https://registry.npmjs.org/resolve-url/-/resolve-url-0.2.1.tgz",
- "integrity": "sha512-ZuF55hVUQaaczgOIwqWzkEcEidmlD/xl44x1UZnhOXcYuFN2S6+rcxpG+C1N3So0wvNI3DmJICUFfu2SxhBmvg=="
+ "integrity": "sha512-ZuF55hVUQaaczgOIwqWzkEcEidmlD/xl44x1UZnhOXcYuFN2S6+rcxpG+C1N3So0wvNI3DmJICUFfu2SxhBmvg==",
+ "deprecated": "https://github.com/lydell/resolve-url#deprecated"
},
- "ret": {
+ "node_modules/ret": {
"version": "0.1.15",
"resolved": "https://registry.npmjs.org/ret/-/ret-0.1.15.tgz",
- "integrity": "sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg=="
+ "integrity": "sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg==",
+ "engines": {
+ "node": ">=0.12"
+ }
},
- "reusify": {
+ "node_modules/reusify": {
"version": "1.0.4",
"resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz",
"integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==",
- "dev": true
+ "dev": true,
+ "engines": {
+ "iojs": ">=1.0.0",
+ "node": ">=0.10.0"
+ }
},
- "rimraf": {
+ "node_modules/rimraf": {
"version": "3.0.2",
"resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz",
"integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==",
- "requires": {
+ "dependencies": {
"glob": "^7.1.3"
+ },
+ "bin": {
+ "rimraf": "bin.js"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/isaacs"
}
},
- "ripemd160": {
+ "node_modules/ripemd160": {
"version": "2.0.2",
"resolved": "https://registry.npmjs.org/ripemd160/-/ripemd160-2.0.2.tgz",
"integrity": "sha512-ii4iagi25WusVoiC4B4lq7pbXfAp3D9v5CwfkY33vffw2+pkDjY1D8GaN7spsxvCSx8dkPqOZCEZyfxcmJG2IA==",
"dev": true,
- "requires": {
+ "dependencies": {
"hash-base": "^3.0.0",
"inherits": "^2.0.1"
}
},
- "rndm": {
+ "node_modules/rndm": {
"version": "1.2.0",
"resolved": "https://registry.npmjs.org/rndm/-/rndm-1.2.0.tgz",
"integrity": "sha512-fJhQQI5tLrQvYIYFpOnFinzv9dwmR7hRnUz1XqP3OJ1jIweTNOd6aTO4jwQSgcBSFUB+/KHJxuGneime+FdzOw=="
},
- "rtl-detect": {
+ "node_modules/rtl-detect": {
"version": "1.0.4",
"resolved": "https://registry.npmjs.org/rtl-detect/-/rtl-detect-1.0.4.tgz",
"integrity": "sha512-EBR4I2VDSSYr7PkBmFy04uhycIpDKp+21p/jARYXlCSjQksTBQcJ0HFUPOO79EPPH5JS6VAhiIQbycf0O3JAxQ=="
},
- "rtlcss": {
+ "node_modules/rtlcss": {
"version": "3.5.0",
"resolved": "https://registry.npmjs.org/rtlcss/-/rtlcss-3.5.0.tgz",
"integrity": "sha512-wzgMaMFHQTnyi9YOwsx9LjOxYXJPzS8sYnFaKm6R5ysvTkwzHiB0vxnbHwchHQT65PTdBjDG21/kQBWI7q9O7A==",
"dev": true,
- "requires": {
+ "dependencies": {
"find-up": "^5.0.0",
"picocolors": "^1.0.0",
"postcss": "^8.3.11",
"strip-json-comments": "^3.1.1"
},
- "dependencies": {
- "find-up": {
- "version": "5.0.0",
- "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz",
- "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==",
- "dev": true,
- "requires": {
- "locate-path": "^6.0.0",
- "path-exists": "^4.0.0"
- }
- },
- "locate-path": {
- "version": "6.0.0",
- "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz",
- "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==",
- "dev": true,
- "requires": {
- "p-locate": "^5.0.0"
- }
- },
- "p-limit": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz",
- "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==",
- "dev": true,
- "requires": {
- "yocto-queue": "^0.1.0"
- }
- },
- "p-locate": {
- "version": "5.0.0",
- "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz",
- "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==",
- "dev": true,
- "requires": {
- "p-limit": "^3.0.2"
- }
- },
- "path-exists": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz",
- "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==",
- "dev": true
- },
- "strip-json-comments": {
- "version": "3.1.1",
- "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz",
- "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==",
- "dev": true
- },
- "yocto-queue": {
- "version": "0.1.0",
- "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz",
- "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==",
- "dev": true
- }
+ "bin": {
+ "rtlcss": "bin/rtlcss.js"
}
},
- "run-parallel": {
+ "node_modules/rtlcss/node_modules/find-up": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz",
+ "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==",
+ "dev": true,
+ "dependencies": {
+ "locate-path": "^6.0.0",
+ "path-exists": "^4.0.0"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/rtlcss/node_modules/locate-path": {
+ "version": "6.0.0",
+ "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz",
+ "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==",
+ "dev": true,
+ "dependencies": {
+ "p-locate": "^5.0.0"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/rtlcss/node_modules/p-limit": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz",
+ "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==",
+ "dev": true,
+ "dependencies": {
+ "yocto-queue": "^0.1.0"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/rtlcss/node_modules/p-locate": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz",
+ "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==",
+ "dev": true,
+ "dependencies": {
+ "p-limit": "^3.0.2"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/rtlcss/node_modules/path-exists": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz",
+ "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==",
+ "dev": true,
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/rtlcss/node_modules/strip-json-comments": {
+ "version": "3.1.1",
+ "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz",
+ "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==",
+ "dev": true,
+ "engines": {
+ "node": ">=8"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/rtlcss/node_modules/yocto-queue": {
+ "version": "0.1.0",
+ "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz",
+ "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==",
+ "dev": true,
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/run-parallel": {
"version": "1.2.0",
"resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz",
"integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==",
"dev": true,
- "requires": {
+ "funding": [
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/feross"
+ },
+ {
+ "type": "patreon",
+ "url": "https://www.patreon.com/feross"
+ },
+ {
+ "type": "consulting",
+ "url": "https://feross.org/support"
+ }
+ ],
+ "dependencies": {
"queue-microtask": "^1.2.2"
}
},
- "run-script-webpack-plugin": {
+ "node_modules/run-script-webpack-plugin": {
"version": "0.1.1",
"resolved": "https://registry.npmjs.org/run-script-webpack-plugin/-/run-script-webpack-plugin-0.1.1.tgz",
"integrity": "sha512-PrxBRLv1K9itDKMlootSCyGhdTU+KbKGJ2wF6/k0eyo6M0YGPC58HYbS/J/QsDiwM0t7G99WcuCqto0J7omOXA==",
- "dev": true
+ "dev": true,
+ "engines": {
+ "node": ">=14"
+ }
},
- "safe-array-concat": {
+ "node_modules/safe-array-concat": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/safe-array-concat/-/safe-array-concat-1.0.1.tgz",
"integrity": "sha512-6XbUAseYE2KtOuGueyeobCySj9L4+66Tn6KQMOPQJrAJEowYKW/YR/MGJZl7FdydUdaFu4LYyDZjxf4/Nmo23Q==",
"dev": true,
- "requires": {
+ "dependencies": {
"call-bind": "^1.0.2",
"get-intrinsic": "^1.2.1",
"has-symbols": "^1.0.3",
"isarray": "^2.0.5"
},
- "dependencies": {
- "isarray": {
- "version": "2.0.5",
- "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz",
- "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==",
- "dev": true
- }
+ "engines": {
+ "node": ">=0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
}
},
- "safe-buffer": {
+ "node_modules/safe-array-concat/node_modules/isarray": {
+ "version": "2.0.5",
+ "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz",
+ "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==",
+ "dev": true
+ },
+ "node_modules/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=="
+ "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==",
+ "funding": [
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/feross"
+ },
+ {
+ "type": "patreon",
+ "url": "https://www.patreon.com/feross"
+ },
+ {
+ "type": "consulting",
+ "url": "https://feross.org/support"
+ }
+ ]
},
- "safe-regex": {
+ "node_modules/safe-regex": {
"version": "1.1.0",
"resolved": "https://registry.npmjs.org/safe-regex/-/safe-regex-1.1.0.tgz",
"integrity": "sha512-aJXcif4xnaNUzvUuC5gcb46oTS7zvg4jpMTnuqtrEPlR3vFr4pxtdTwaF1Qs3Enjn9HK+ZlwQui+a7z0SywIzg==",
- "requires": {
+ "dependencies": {
"ret": "~0.1.10"
}
},
- "safe-regex-test": {
+ "node_modules/safe-regex-test": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/safe-regex-test/-/safe-regex-test-1.0.0.tgz",
"integrity": "sha512-JBUUzyOgEwXQY1NuPtvcj/qcBDbDmEvWufhlnXZIm75DEHp+afM1r1ujJpJsV/gSM4t59tpDyPi1sd6ZaPFfsA==",
"dev": true,
- "requires": {
+ "dependencies": {
"call-bind": "^1.0.2",
"get-intrinsic": "^1.1.3",
"is-regex": "^1.1.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
}
},
- "safe-stable-stringify": {
+ "node_modules/safe-stable-stringify": {
"version": "2.4.3",
"resolved": "https://registry.npmjs.org/safe-stable-stringify/-/safe-stable-stringify-2.4.3.tgz",
- "integrity": "sha512-e2bDA2WJT0wxseVd4lsDP4+3ONX6HpMXQa1ZhFQ7SU+GjvORCmShbCMltrtIDfkYhVHrOcPtj+KhmDBdPdZD1g=="
+ "integrity": "sha512-e2bDA2WJT0wxseVd4lsDP4+3ONX6HpMXQa1ZhFQ7SU+GjvORCmShbCMltrtIDfkYhVHrOcPtj+KhmDBdPdZD1g==",
+ "engines": {
+ "node": ">=10"
+ }
},
- "safer-buffer": {
+ "node_modules/safer-buffer": {
"version": "2.1.2",
"resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz",
"integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg=="
},
- "saslprep": {
+ "node_modules/saslprep": {
"version": "1.0.3",
"resolved": "https://registry.npmjs.org/saslprep/-/saslprep-1.0.3.tgz",
"integrity": "sha512-/MY/PEMbk2SuY5sScONwhUDsV2p77Znkb/q3nSVstq/yQzYJOH/Azh29p9oJLsl3LnQwSvZDKagDGBsBwSooag==",
"optional": true,
- "requires": {
+ "dependencies": {
"sparse-bitfield": "^3.0.3"
+ },
+ "engines": {
+ "node": ">=6"
}
},
- "sass": {
+ "node_modules/sass": {
"version": "1.68.0",
"resolved": "https://registry.npmjs.org/sass/-/sass-1.68.0.tgz",
"integrity": "sha512-Lmj9lM/fef0nQswm1J2HJcEsBUba4wgNx2fea6yJHODREoMFnwRpZydBnX/RjyXw2REIwdkbqE4hrTo4qfDBUA==",
"dev": true,
- "requires": {
+ "dependencies": {
"chokidar": ">=3.0.0 <4.0.0",
"immutable": "^4.0.0",
"source-map-js": ">=0.6.2 <2.0.0"
},
- "dependencies": {
- "anymatch": {
- "version": "3.1.3",
- "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz",
- "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==",
- "dev": true,
- "requires": {
- "normalize-path": "^3.0.0",
- "picomatch": "^2.0.4"
- }
- },
- "binary-extensions": {
- "version": "2.2.0",
- "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz",
- "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==",
- "dev": true
- },
- "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"
- }
- },
- "chokidar": {
- "version": "3.5.3",
- "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz",
- "integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==",
- "dev": true,
- "requires": {
- "anymatch": "~3.1.2",
- "braces": "~3.0.2",
- "fsevents": "~2.3.2",
- "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"
- }
- },
- "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"
- }
- },
- "fsevents": {
- "version": "2.3.3",
- "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz",
- "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==",
- "dev": true,
- "optional": true
- },
- "glob-parent": {
- "version": "5.1.2",
- "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz",
- "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==",
- "dev": true,
- "requires": {
- "is-glob": "^4.0.1"
- }
- },
- "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-number": {
- "version": "7.0.0",
- "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz",
- "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==",
- "dev": true
- },
- "readdirp": {
- "version": "3.6.0",
- "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz",
- "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==",
- "dev": true,
- "requires": {
- "picomatch": "^2.2.1"
- }
- },
- "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"
- }
- }
+ "bin": {
+ "sass": "sass.js"
+ },
+ "engines": {
+ "node": ">=14.0.0"
}
},
- "schema-utils": {
+ "node_modules/sass/node_modules/anymatch": {
+ "version": "3.1.3",
+ "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz",
+ "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==",
+ "dev": true,
+ "dependencies": {
+ "normalize-path": "^3.0.0",
+ "picomatch": "^2.0.4"
+ },
+ "engines": {
+ "node": ">= 8"
+ }
+ },
+ "node_modules/sass/node_modules/binary-extensions": {
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz",
+ "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==",
+ "dev": true,
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/sass/node_modules/braces": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz",
+ "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==",
+ "dev": true,
+ "dependencies": {
+ "fill-range": "^7.0.1"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/sass/node_modules/chokidar": {
+ "version": "3.5.3",
+ "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz",
+ "integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==",
+ "dev": true,
+ "funding": [
+ {
+ "type": "individual",
+ "url": "https://paulmillr.com/funding/"
+ }
+ ],
+ "dependencies": {
+ "anymatch": "~3.1.2",
+ "braces": "~3.0.2",
+ "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"
+ },
+ "engines": {
+ "node": ">= 8.10.0"
+ },
+ "optionalDependencies": {
+ "fsevents": "~2.3.2"
+ }
+ },
+ "node_modules/sass/node_modules/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,
+ "dependencies": {
+ "to-regex-range": "^5.0.1"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/sass/node_modules/fsevents": {
+ "version": "2.3.3",
+ "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz",
+ "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==",
+ "dev": true,
+ "hasInstallScript": true,
+ "optional": true,
+ "os": [
+ "darwin"
+ ],
+ "engines": {
+ "node": "^8.16.0 || ^10.6.0 || >=11.0.0"
+ }
+ },
+ "node_modules/sass/node_modules/glob-parent": {
+ "version": "5.1.2",
+ "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz",
+ "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==",
+ "dev": true,
+ "dependencies": {
+ "is-glob": "^4.0.1"
+ },
+ "engines": {
+ "node": ">= 6"
+ }
+ },
+ "node_modules/sass/node_modules/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,
+ "dependencies": {
+ "binary-extensions": "^2.0.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/sass/node_modules/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,
+ "engines": {
+ "node": ">=0.12.0"
+ }
+ },
+ "node_modules/sass/node_modules/readdirp": {
+ "version": "3.6.0",
+ "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz",
+ "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==",
+ "dev": true,
+ "dependencies": {
+ "picomatch": "^2.2.1"
+ },
+ "engines": {
+ "node": ">=8.10.0"
+ }
+ },
+ "node_modules/sass/node_modules/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,
+ "dependencies": {
+ "is-number": "^7.0.0"
+ },
+ "engines": {
+ "node": ">=8.0"
+ }
+ },
+ "node_modules/schema-utils": {
"version": "4.2.0",
"resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.2.0.tgz",
"integrity": "sha512-L0jRsrPpjdckP3oPug3/VxNKt2trR8TcabrM6FOAAlvC/9Phcmm+cuAgTlxBqdBR1WJx7Naj9WHw+aOmheSVbw==",
- "requires": {
+ "dependencies": {
"@types/json-schema": "^7.0.9",
"ajv": "^8.9.0",
"ajv-formats": "^2.1.1",
"ajv-keywords": "^5.1.0"
+ },
+ "engines": {
+ "node": ">= 12.13.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/webpack"
}
},
- "seedrandom": {
+ "node_modules/seedrandom": {
"version": "3.0.5",
"resolved": "https://registry.npmjs.org/seedrandom/-/seedrandom-3.0.5.tgz",
"integrity": "sha512-8OwmbklUNzwezjGInmZ+2clQmExQPvomqjL7LFqOYqtmuxRgQYqOD3mHaU+MvZn5FLUeVxVfQjwLZW/n/JFuqg=="
},
- "semver": {
+ "node_modules/semver": {
"version": "7.5.4",
"resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz",
"integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==",
- "requires": {
+ "dependencies": {
"lru-cache": "^6.0.0"
+ },
+ "bin": {
+ "semver": "bin/semver.js"
+ },
+ "engines": {
+ "node": ">=10"
}
},
- "semver-diff": {
+ "node_modules/semver-diff": {
"version": "2.1.0",
"resolved": "https://registry.npmjs.org/semver-diff/-/semver-diff-2.1.0.tgz",
"integrity": "sha512-gL8F8L4ORwsS0+iQ34yCYv///jsOq0ZL7WP55d1HnJ32o7tyFYEFQZQA22mrLIacZdU6xecaBBZ+uEiffGNyXw==",
- "requires": {
+ "dependencies": {
"semver": "^5.0.3"
},
- "dependencies": {
- "semver": {
- "version": "5.7.2",
- "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz",
- "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g=="
- }
+ "engines": {
+ "node": ">=0.10.0"
}
},
- "semver-greatest-satisfied-range": {
+ "node_modules/semver-diff/node_modules/semver": {
+ "version": "5.7.2",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz",
+ "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==",
+ "bin": {
+ "semver": "bin/semver"
+ }
+ },
+ "node_modules/semver-greatest-satisfied-range": {
"version": "1.1.0",
"resolved": "https://registry.npmjs.org/semver-greatest-satisfied-range/-/semver-greatest-satisfied-range-1.1.0.tgz",
"integrity": "sha512-Ny/iyOzSSa8M5ML46IAx3iXc6tfOsYU2R4AXi2UpHk60Zrgyq6eqPj/xiOfS0rRl/iiQ/rdJkVjw/5cdUyCntQ==",
- "requires": {
+ "dependencies": {
"sver-compat": "^1.5.0"
+ },
+ "engines": {
+ "node": ">= 0.10"
}
},
- "send": {
+ "node_modules/send": {
"version": "0.18.0",
"resolved": "https://registry.npmjs.org/send/-/send-0.18.0.tgz",
"integrity": "sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg==",
- "requires": {
+ "dependencies": {
"debug": "2.6.9",
"depd": "2.0.0",
"destroy": "1.2.0",
@@ -11220,181 +14531,206 @@
"range-parser": "~1.2.1",
"statuses": "2.0.1"
},
- "dependencies": {
- "debug": {
- "version": "2.6.9",
- "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
- "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
- "requires": {
- "ms": "2.0.0"
- },
- "dependencies": {
- "ms": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
- "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A=="
- }
- }
- },
- "ms": {
- "version": "2.1.3",
- "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz",
- "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA=="
- }
+ "engines": {
+ "node": ">= 0.8.0"
}
},
- "seq-queue": {
+ "node_modules/send/node_modules/debug": {
+ "version": "2.6.9",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
+ "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
+ "dependencies": {
+ "ms": "2.0.0"
+ }
+ },
+ "node_modules/send/node_modules/debug/node_modules/ms": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
+ "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A=="
+ },
+ "node_modules/send/node_modules/ms": {
+ "version": "2.1.3",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz",
+ "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA=="
+ },
+ "node_modules/seq-queue": {
"version": "0.0.5",
"resolved": "https://registry.npmjs.org/seq-queue/-/seq-queue-0.0.5.tgz",
"integrity": "sha512-hr3Wtp/GZIc/6DAGPDcV4/9WoZhjrkXsi5B/07QgX8tsdc6ilr7BFM6PM6rbdAX1kFSDYeZGLipIZZKyQP0O5Q=="
},
- "serialize-javascript": {
+ "node_modules/serialize-javascript": {
"version": "6.0.1",
"resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.1.tgz",
"integrity": "sha512-owoXEFjWRllis8/M1Q+Cw5k8ZH40e3zhp/ovX+Xr/vi1qj6QesbyXXViFbpNvWvPNAD62SutwEXavefrLJWj7w==",
- "dev": true,
- "requires": {
+ "dependencies": {
"randombytes": "^2.1.0"
}
},
- "serve-static": {
+ "node_modules/serve-static": {
"version": "1.15.0",
"resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.15.0.tgz",
"integrity": "sha512-XGuRDNjXUijsUL0vl6nSD7cwURuzEgglbOaFuZM9g3kwDXOWVTck0jLzjPzGD+TazWbboZYu52/9/XPdUgne9g==",
- "requires": {
+ "dependencies": {
"encodeurl": "~1.0.2",
"escape-html": "~1.0.3",
"parseurl": "~1.3.3",
"send": "0.18.0"
+ },
+ "engines": {
+ "node": ">= 0.8.0"
}
},
- "set-blocking": {
+ "node_modules/set-blocking": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz",
"integrity": "sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw=="
},
- "set-function-name": {
+ "node_modules/set-function-name": {
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/set-function-name/-/set-function-name-2.0.1.tgz",
"integrity": "sha512-tMNCiqYVkXIZgc2Hnoy2IvC/f8ezc5koaRFkCjrpWzGpCd3qbZXPzVy9MAZzK1ch/X0jvSkojys3oqJN0qCmdA==",
"dev": true,
- "requires": {
+ "dependencies": {
"define-data-property": "^1.0.1",
"functions-have-names": "^1.2.3",
"has-property-descriptors": "^1.0.0"
+ },
+ "engines": {
+ "node": ">= 0.4"
}
},
- "set-value": {
+ "node_modules/set-value": {
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/set-value/-/set-value-2.0.1.tgz",
"integrity": "sha512-JxHc1weCN68wRY0fhCoXpyK55m/XPHafOmK4UWD7m2CI14GMcFypt4w/0+NV5f/ZMby2F6S2wwA7fgynh9gWSw==",
- "requires": {
+ "dependencies": {
"extend-shallow": "^2.0.1",
"is-extendable": "^0.1.1",
"is-plain-object": "^2.0.3",
"split-string": "^3.0.1"
},
- "dependencies": {
- "extend-shallow": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
- "integrity": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==",
- "requires": {
- "is-extendable": "^0.1.0"
- }
- }
+ "engines": {
+ "node": ">=0.10.0"
}
},
- "setimmediate": {
+ "node_modules/set-value/node_modules/extend-shallow": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
+ "integrity": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==",
+ "dependencies": {
+ "is-extendable": "^0.1.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/setimmediate": {
"version": "1.0.5",
"resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz",
"integrity": "sha512-MATJdZp8sLqDl/68LfQmbP8zKPLQNV6BIZoIgrscFDQ+RsvK/BxeDQOgyxKKoh0y/8h3BqVFnCqQ/gd+reiIXA==",
"dev": true
},
- "setprototypeof": {
+ "node_modules/setprototypeof": {
"version": "1.2.0",
"resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz",
"integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw=="
},
- "sha.js": {
+ "node_modules/sha.js": {
"version": "2.4.11",
"resolved": "https://registry.npmjs.org/sha.js/-/sha.js-2.4.11.tgz",
"integrity": "sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ==",
"dev": true,
- "requires": {
+ "dependencies": {
"inherits": "^2.0.1",
"safe-buffer": "^5.0.1"
+ },
+ "bin": {
+ "sha.js": "bin.js"
}
},
- "shallow-clone": {
+ "node_modules/shallow-clone": {
"version": "3.0.1",
"resolved": "https://registry.npmjs.org/shallow-clone/-/shallow-clone-3.0.1.tgz",
"integrity": "sha512-/6KqX+GVUdqPuPPd2LxDDxzX6CAbjJehAAOKlNpqqUpAqPM6HeL8f+o3a+JsyGjn2lv0WY8UsTgUJjU9Ok55NA==",
"dev": true,
- "requires": {
+ "dependencies": {
"kind-of": "^6.0.2"
+ },
+ "engines": {
+ "node": ">=8"
}
},
- "shebang-command": {
+ "node_modules/shebang-command": {
"version": "1.2.0",
"resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz",
"integrity": "sha512-EV3L1+UQWGor21OmnvojK36mhg+TyIKDh3iFBKBohr5xeXIhNBcx8oWdgkTEEQ+BEFFYdLRuqMfd5L84N1V5Vg==",
- "requires": {
+ "dependencies": {
"shebang-regex": "^1.0.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
}
},
- "shebang-regex": {
+ "node_modules/shebang-regex": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz",
- "integrity": "sha512-wpoSFAxys6b2a2wHZ1XpDSgD7N9iVjg29Ph9uV/uaP9Ex/KXlkTZTeddxDPSYQpgvzKLGJke2UU0AzoGCjNIvQ=="
+ "integrity": "sha512-wpoSFAxys6b2a2wHZ1XpDSgD7N9iVjg29Ph9uV/uaP9Ex/KXlkTZTeddxDPSYQpgvzKLGJke2UU0AzoGCjNIvQ==",
+ "engines": {
+ "node": ">=0.10.0"
+ }
},
- "shell-quote": {
+ "node_modules/shell-quote": {
"version": "1.8.1",
"resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.8.1.tgz",
"integrity": "sha512-6j1W9l1iAs/4xYBI1SYOVZyFcCis9b4KCLQ8fgAGG07QvzaRLVVRQvAy85yNmmZSjYjg4MWh4gNvlPujU/5LpA==",
- "dev": true
+ "dev": true,
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
},
- "side-channel": {
+ "node_modules/side-channel": {
"version": "1.0.4",
"resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz",
"integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==",
- "requires": {
+ "dependencies": {
"call-bind": "^1.0.0",
"get-intrinsic": "^1.0.2",
"object-inspect": "^1.9.0"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
}
},
- "sift": {
+ "node_modules/sift": {
"version": "13.5.2",
"resolved": "https://registry.npmjs.org/sift/-/sift-13.5.2.tgz",
"integrity": "sha512-+gxdEOMA2J+AI+fVsCqeNn7Tgx3M9ZN9jdi95939l1IJ8cZsqS8sqpJyOkic2SJk+1+98Uwryt/gL6XDaV+UZA=="
},
- "signal-exit": {
+ "node_modules/signal-exit": {
"version": "3.0.7",
"resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz",
"integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ=="
},
- "simple-swizzle": {
+ "node_modules/simple-swizzle": {
"version": "0.2.2",
"resolved": "https://registry.npmjs.org/simple-swizzle/-/simple-swizzle-0.2.2.tgz",
"integrity": "sha512-JA//kQgZtbuY83m+xT+tXJkmJncGMTFT+C+g2h2R9uxkYIrE2yy9sgmcLhCnw57/WSD+Eh3J97FPEDFnbXnDUg==",
- "requires": {
- "is-arrayish": "^0.3.1"
- },
"dependencies": {
- "is-arrayish": {
- "version": "0.3.2",
- "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.3.2.tgz",
- "integrity": "sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ=="
- }
+ "is-arrayish": "^0.3.1"
}
},
- "sinon": {
+ "node_modules/simple-swizzle/node_modules/is-arrayish": {
+ "version": "0.3.2",
+ "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.3.2.tgz",
+ "integrity": "sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ=="
+ },
+ "node_modules/sinon": {
"version": "7.5.0",
"resolved": "https://registry.npmjs.org/sinon/-/sinon-7.5.0.tgz",
"integrity": "sha512-AoD0oJWerp0/rY9czP/D6hDTTUYGpObhZjMpd7Cl/A6+j0xBE+ayL/ldfggkBXUs0IkvIiM1ljM8+WkOc5k78Q==",
+ "deprecated": "16.1.1",
"dev": true,
- "requires": {
+ "dependencies": {
"@sinonjs/commons": "^1.4.0",
"@sinonjs/formatio": "^3.2.1",
"@sinonjs/samsam": "^3.3.3",
@@ -11404,26 +14740,33 @@
"supports-color": "^5.5.0"
}
},
- "slash": {
+ "node_modules/slash": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/slash/-/slash-2.0.0.tgz",
- "integrity": "sha512-ZYKh3Wh2z1PpEXWr0MpSBZ0V6mZHAQfYevttO11c51CaWjGTaadiKZ+wVt1PbMlDV5qhMFslpZCemhwOK7C89A=="
+ "integrity": "sha512-ZYKh3Wh2z1PpEXWr0MpSBZ0V6mZHAQfYevttO11c51CaWjGTaadiKZ+wVt1PbMlDV5qhMFslpZCemhwOK7C89A==",
+ "engines": {
+ "node": ">=6"
+ }
},
- "sliced": {
+ "node_modules/sliced": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/sliced/-/sliced-1.0.1.tgz",
"integrity": "sha512-VZBmZP8WU3sMOZm1bdgTadsQbcscK0UM8oKxKVBs4XAhUo2Xxzm/OFMGBkPusxw9xL3Uy8LrzEqGqJhclsr0yA=="
},
- "smart-buffer": {
+ "node_modules/smart-buffer": {
"version": "4.2.0",
"resolved": "https://registry.npmjs.org/smart-buffer/-/smart-buffer-4.2.0.tgz",
- "integrity": "sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg=="
+ "integrity": "sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg==",
+ "engines": {
+ "node": ">= 6.0.0",
+ "npm": ">= 3.0.0"
+ }
},
- "snapdragon": {
+ "node_modules/snapdragon": {
"version": "0.8.2",
"resolved": "https://registry.npmjs.org/snapdragon/-/snapdragon-0.8.2.tgz",
"integrity": "sha512-FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg==",
- "requires": {
+ "dependencies": {
"base": "^0.11.1",
"debug": "^2.2.0",
"define-property": "^0.2.5",
@@ -11433,127 +14776,209 @@
"source-map-resolve": "^0.5.0",
"use": "^3.1.0"
},
- "dependencies": {
- "debug": {
- "version": "2.6.9",
- "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
- "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
- "requires": {
- "ms": "2.0.0"
- }
- },
- "define-property": {
- "version": "0.2.5",
- "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz",
- "integrity": "sha512-Rr7ADjQZenceVOAKop6ALkkRAmH1A4Gx9hV/7ZujPUN2rkATqFO0JZLZInbAjpZYoJ1gUx8MRMQVkYemcbMSTA==",
- "requires": {
- "is-descriptor": "^0.1.0"
- }
- },
- "extend-shallow": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
- "integrity": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==",
- "requires": {
- "is-extendable": "^0.1.0"
- }
- },
- "ms": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
- "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A=="
- }
+ "engines": {
+ "node": ">=0.10.0"
}
},
- "snapdragon-node": {
+ "node_modules/snapdragon-node": {
"version": "2.1.1",
"resolved": "https://registry.npmjs.org/snapdragon-node/-/snapdragon-node-2.1.1.tgz",
"integrity": "sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw==",
- "requires": {
+ "dependencies": {
"define-property": "^1.0.0",
"isobject": "^3.0.0",
"snapdragon-util": "^3.0.1"
},
- "dependencies": {
- "define-property": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz",
- "integrity": "sha512-cZTYKFWspt9jZsMscWo8sc/5lbPC9Q0N5nBLgb+Yd915iL3udB1uFgS3B8YCx66UVHq018DAVFoee7x+gxggeA==",
- "requires": {
- "is-descriptor": "^1.0.0"
- }
- },
- "is-accessor-descriptor": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz",
- "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==",
- "requires": {
- "kind-of": "^6.0.0"
- }
- },
- "is-data-descriptor": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz",
- "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==",
- "requires": {
- "kind-of": "^6.0.0"
- }
- },
- "is-descriptor": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz",
- "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==",
- "requires": {
- "is-accessor-descriptor": "^1.0.0",
- "is-data-descriptor": "^1.0.0",
- "kind-of": "^6.0.2"
- }
- }
+ "engines": {
+ "node": ">=0.10.0"
}
},
- "snapdragon-util": {
+ "node_modules/snapdragon-node/node_modules/define-property": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz",
+ "integrity": "sha512-cZTYKFWspt9jZsMscWo8sc/5lbPC9Q0N5nBLgb+Yd915iL3udB1uFgS3B8YCx66UVHq018DAVFoee7x+gxggeA==",
+ "dependencies": {
+ "is-descriptor": "^1.0.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/snapdragon-node/node_modules/is-accessor-descriptor": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz",
+ "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==",
+ "dependencies": {
+ "kind-of": "^6.0.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/snapdragon-node/node_modules/is-data-descriptor": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz",
+ "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==",
+ "dependencies": {
+ "kind-of": "^6.0.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/snapdragon-node/node_modules/is-descriptor": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz",
+ "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==",
+ "dependencies": {
+ "is-accessor-descriptor": "^1.0.0",
+ "is-data-descriptor": "^1.0.0",
+ "kind-of": "^6.0.2"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/snapdragon-util": {
"version": "3.0.1",
"resolved": "https://registry.npmjs.org/snapdragon-util/-/snapdragon-util-3.0.1.tgz",
"integrity": "sha512-mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ==",
- "requires": {
+ "dependencies": {
"kind-of": "^3.2.0"
},
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/snapdragon-util/node_modules/kind-of": {
+ "version": "3.2.2",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
+ "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==",
"dependencies": {
- "kind-of": {
- "version": "3.2.2",
- "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
- "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==",
+ "is-buffer": "^1.1.5"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/snapdragon/node_modules/debug": {
+ "version": "2.6.9",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
+ "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
+ "dependencies": {
+ "ms": "2.0.0"
+ }
+ },
+ "node_modules/snapdragon/node_modules/define-property": {
+ "version": "0.2.5",
+ "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz",
+ "integrity": "sha512-Rr7ADjQZenceVOAKop6ALkkRAmH1A4Gx9hV/7ZujPUN2rkATqFO0JZLZInbAjpZYoJ1gUx8MRMQVkYemcbMSTA==",
+ "dependencies": {
+ "is-descriptor": "^0.1.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/snapdragon/node_modules/extend-shallow": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
+ "integrity": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==",
+ "dependencies": {
+ "is-extendable": "^0.1.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/snapdragon/node_modules/ms": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
+ "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A=="
+ },
+ "node_modules/socks": {
+ "version": "2.7.1",
+ "resolved": "https://registry.npmjs.org/socks/-/socks-2.7.1.tgz",
+ "integrity": "sha512-7maUZy1N7uo6+WVEX6psASxtNlKaNVMlGQKkG/63nEDdLOWNbiUMoLK7X4uYoLhQstau72mLgfEWcXcwsaHbYQ==",
+ "dependencies": {
+ "ip": "^2.0.0",
+ "smart-buffer": "^4.2.0"
+ },
+ "engines": {
+ "node": ">= 10.13.0",
+ "npm": ">= 3.0.0"
+ }
+ },
+ "node_modules/source-map": {
+ "version": "0.5.7",
+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz",
+ "integrity": "sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ==",
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/source-map-js": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz",
+ "integrity": "sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw=="
+ },
+ "source-map-loader": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/source-map-loader/-/source-map-loader-4.0.1.tgz",
+ "integrity": "sha512-oqXpzDIByKONVY8g1NUPOTQhe0UTU5bWUl32GSkqK2LjJj0HmwTMVKxcUip0RgAYhY1mqgOxjbQM48a0mmeNfA==",
+ "requires": {
+ "abab": "^2.0.6",
+ "iconv-lite": "^0.6.3",
+ "source-map-js": "^1.0.2"
+ },
+ "dependencies": {
+ "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": {
- "is-buffer": "^1.1.5"
+ "safer-buffer": ">= 2.1.2 < 3.0.0"
}
}
}
},
- "socks": {
- "version": "2.7.1",
- "resolved": "https://registry.npmjs.org/socks/-/socks-2.7.1.tgz",
- "integrity": "sha512-7maUZy1N7uo6+WVEX6psASxtNlKaNVMlGQKkG/63nEDdLOWNbiUMoLK7X4uYoLhQstau72mLgfEWcXcwsaHbYQ==",
- "requires": {
- "ip": "^2.0.0",
- "smart-buffer": "^4.2.0"
+ "node_modules/source-map-loader": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/source-map-loader/-/source-map-loader-4.0.1.tgz",
+ "integrity": "sha512-oqXpzDIByKONVY8g1NUPOTQhe0UTU5bWUl32GSkqK2LjJj0HmwTMVKxcUip0RgAYhY1mqgOxjbQM48a0mmeNfA==",
+ "dependencies": {
+ "abab": "^2.0.6",
+ "iconv-lite": "^0.6.3",
+ "source-map-js": "^1.0.2"
+ },
+ "engines": {
+ "node": ">= 14.15.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/webpack"
+ },
+ "peerDependencies": {
+ "webpack": "^5.72.1"
}
},
- "source-map": {
- "version": "0.5.7",
- "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz",
- "integrity": "sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ=="
+ "node_modules/source-map-loader/node_modules/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==",
+ "dependencies": {
+ "safer-buffer": ">= 2.1.2 < 3.0.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
},
- "source-map-js": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz",
- "integrity": "sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==",
- "dev": true
- },
- "source-map-resolve": {
+ "node_modules/source-map-resolve": {
"version": "0.5.3",
"resolved": "https://registry.npmjs.org/source-map-resolve/-/source-map-resolve-0.5.3.tgz",
"integrity": "sha512-Htz+RnsXWk5+P2slx5Jh3Q66vhQj1Cllm0zvnaY98+NFx+Dv2CF/f5O/t8x+KaNdrdIAsruNzoh/KpialbqAnw==",
- "requires": {
+ "deprecated": "See https://github.com/lydell/source-map-resolve#deprecated",
+ "dependencies": {
"atob": "^2.1.2",
"decode-uri-component": "^0.2.0",
"resolve-url": "^0.2.1",
@@ -11561,170 +14986,189 @@
"urix": "^0.1.0"
}
},
- "source-map-support": {
+ "node_modules/source-map-support": {
"version": "0.5.21",
"resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz",
"integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==",
- "dev": true,
- "requires": {
+ "dependencies": {
"buffer-from": "^1.0.0",
"source-map": "^0.6.0"
- },
- "dependencies": {
- "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-url": {
+ "node_modules/source-map-support/node_modules/source-map": {
+ "version": "0.6.1",
+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
+ "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/source-map-url": {
"version": "0.4.1",
"resolved": "https://registry.npmjs.org/source-map-url/-/source-map-url-0.4.1.tgz",
- "integrity": "sha512-cPiFOTLUKvJFIg4SKVScy4ilPPW6rFgMgfuZJPNoDuMs3nC1HbMUycBoJw77xFIp6z1UJQJOfx6C9GMH80DiTw=="
+ "integrity": "sha512-cPiFOTLUKvJFIg4SKVScy4ilPPW6rFgMgfuZJPNoDuMs3nC1HbMUycBoJw77xFIp6z1UJQJOfx6C9GMH80DiTw==",
+ "deprecated": "See https://github.com/lydell/source-map-url#deprecated"
},
- "sparkles": {
+ "node_modules/sparkles": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/sparkles/-/sparkles-1.0.1.tgz",
- "integrity": "sha512-dSO0DDYUahUt/0/pD/Is3VIm5TGJjludZ0HVymmhYF6eNA53PVLhnUk0znSYbH8IYBuJdCE+1luR22jNLMaQdw=="
+ "integrity": "sha512-dSO0DDYUahUt/0/pD/Is3VIm5TGJjludZ0HVymmhYF6eNA53PVLhnUk0znSYbH8IYBuJdCE+1luR22jNLMaQdw==",
+ "engines": {
+ "node": ">= 0.10"
+ }
},
- "sparse-bitfield": {
+ "node_modules/sparse-bitfield": {
"version": "3.0.3",
"resolved": "https://registry.npmjs.org/sparse-bitfield/-/sparse-bitfield-3.0.3.tgz",
"integrity": "sha512-kvzhi7vqKTfkh0PZU+2D2PIllw2ymqJKujUcyPMd9Y75Nv4nPbGJZXNhxsgdQab2BmlDct1YnfQCguEvHr7VsQ==",
- "optional": true,
- "requires": {
+ "dependencies": {
"memory-pager": "^1.0.2"
}
},
- "spawn-wrap": {
+ "node_modules/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": {
+ "dependencies": {
"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"
- },
- "dependencies": {
- "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"
- }
- }
}
},
- "spdx-correct": {
+ "node_modules/spawn-wrap/node_modules/rimraf": {
+ "version": "2.7.1",
+ "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz",
+ "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==",
+ "dev": true,
+ "dependencies": {
+ "glob": "^7.1.3"
+ },
+ "bin": {
+ "rimraf": "bin.js"
+ }
+ },
+ "node_modules/spdx-correct": {
"version": "3.2.0",
"resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.2.0.tgz",
"integrity": "sha512-kN9dJbvnySHULIluDHy32WHRUu3Og7B9sbY7tsFLctQkIqnMh3hErYgdMjTYuqmcXX+lK5T1lnUt3G7zNswmZA==",
- "requires": {
+ "dependencies": {
"spdx-expression-parse": "^3.0.0",
"spdx-license-ids": "^3.0.0"
}
},
- "spdx-exceptions": {
+ "node_modules/spdx-exceptions": {
"version": "2.3.0",
"resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.3.0.tgz",
"integrity": "sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A=="
},
- "spdx-expression-parse": {
+ "node_modules/spdx-expression-parse": {
"version": "3.0.1",
"resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz",
"integrity": "sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==",
- "requires": {
+ "dependencies": {
"spdx-exceptions": "^2.1.0",
"spdx-license-ids": "^3.0.0"
}
},
- "spdx-license-ids": {
+ "node_modules/spdx-license-ids": {
"version": "3.0.15",
"resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.15.tgz",
"integrity": "sha512-lpT8hSQp9jAKp9mhtBU4Xjon8LPGBvLIuBiSVhMEtmLecTh2mO0tlqrAMp47tBXzMr13NJMQ2lf7RpQGLJ3HsQ=="
},
- "split-string": {
+ "node_modules/split-string": {
"version": "3.1.0",
"resolved": "https://registry.npmjs.org/split-string/-/split-string-3.1.0.tgz",
"integrity": "sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw==",
- "requires": {
+ "dependencies": {
"extend-shallow": "^3.0.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
}
},
- "sprintf-js": {
+ "node_modules/sprintf-js": {
"version": "1.1.3",
"resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.1.3.tgz",
"integrity": "sha512-Oo+0REFV59/rz3gfJNKQiBlwfHaSESl1pcGyABQsnnIfWOFt6JNj5gCog2U6MLZ//IGYD+nA8nI+mTShREReaA=="
},
- "sqlstring": {
+ "node_modules/sqlstring": {
"version": "2.3.1",
"resolved": "https://registry.npmjs.org/sqlstring/-/sqlstring-2.3.1.tgz",
- "integrity": "sha512-ooAzh/7dxIG5+uDik1z/Rd1vli0+38izZhGzSa34FwR7IbelPWCCKSNIl8jlL/F7ERvy8CB2jNeM1E9i9mXMAQ=="
+ "integrity": "sha512-ooAzh/7dxIG5+uDik1z/Rd1vli0+38izZhGzSa34FwR7IbelPWCCKSNIl8jlL/F7ERvy8CB2jNeM1E9i9mXMAQ==",
+ "engines": {
+ "node": ">= 0.6"
+ }
},
- "stack-trace": {
+ "node_modules/stack-trace": {
"version": "0.0.10",
"resolved": "https://registry.npmjs.org/stack-trace/-/stack-trace-0.0.10.tgz",
- "integrity": "sha512-KGzahc7puUKkzyMt+IqAep+TVNbKP+k2Lmwhub39m1AsTSkaDutx56aDCo+HLDzf/D26BIHTJWNiTG1KAJiQCg=="
+ "integrity": "sha512-KGzahc7puUKkzyMt+IqAep+TVNbKP+k2Lmwhub39m1AsTSkaDutx56aDCo+HLDzf/D26BIHTJWNiTG1KAJiQCg==",
+ "engines": {
+ "node": "*"
+ }
},
- "start-server-webpack-plugin": {
+ "node_modules/start-server-webpack-plugin": {
"version": "2.2.5",
"resolved": "https://registry.npmjs.org/start-server-webpack-plugin/-/start-server-webpack-plugin-2.2.5.tgz",
"integrity": "sha512-DRCkciwCJoCFZ+wt3wWMkR1M2mpVhJbUKFXqhK3FWyIUKYb42NnocH5sMwqgo+nPNHupqNwK/v8lgfBbr2NKdg==",
"dev": true
},
- "static-extend": {
+ "node_modules/static-extend": {
"version": "0.1.2",
"resolved": "https://registry.npmjs.org/static-extend/-/static-extend-0.1.2.tgz",
"integrity": "sha512-72E9+uLc27Mt718pMHt9VMNiAL4LMsmDbBva8mxWUCkT07fSzEGMYUCk0XWY6lp0j6RBAG4cJ3mWuZv2OE3s0g==",
- "requires": {
+ "dependencies": {
"define-property": "^0.2.5",
"object-copy": "^0.1.0"
},
- "dependencies": {
- "define-property": {
- "version": "0.2.5",
- "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz",
- "integrity": "sha512-Rr7ADjQZenceVOAKop6ALkkRAmH1A4Gx9hV/7ZujPUN2rkATqFO0JZLZInbAjpZYoJ1gUx8MRMQVkYemcbMSTA==",
- "requires": {
- "is-descriptor": "^0.1.0"
- }
- }
+ "engines": {
+ "node": ">=0.10.0"
}
},
- "statuses": {
+ "node_modules/static-extend/node_modules/define-property": {
+ "version": "0.2.5",
+ "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz",
+ "integrity": "sha512-Rr7ADjQZenceVOAKop6ALkkRAmH1A4Gx9hV/7ZujPUN2rkATqFO0JZLZInbAjpZYoJ1gUx8MRMQVkYemcbMSTA==",
+ "dependencies": {
+ "is-descriptor": "^0.1.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/statuses": {
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz",
- "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ=="
+ "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==",
+ "engines": {
+ "node": ">= 0.8"
+ }
},
- "stream-browserify": {
+ "node_modules/stream-browserify": {
"version": "2.0.2",
"resolved": "https://registry.npmjs.org/stream-browserify/-/stream-browserify-2.0.2.tgz",
"integrity": "sha512-nX6hmklHs/gr2FuxYDltq8fJA1GDlxKQCz8O/IM4atRqBH8OORmBNgfvW5gG10GT/qQ9u0CzIvr2X5Pkt6ntqg==",
"dev": true,
- "requires": {
+ "dependencies": {
"inherits": "~2.0.1",
"readable-stream": "^2.0.2"
}
},
- "stream-exhaust": {
+ "node_modules/stream-exhaust": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/stream-exhaust/-/stream-exhaust-1.0.2.tgz",
"integrity": "sha512-b/qaq/GlBK5xaq1yrK9/zFcyRSTNxmcZwFLGSTG0mXgZl/4Z6GgiyYOXOvY7N3eEvFRAG1bkDRz5EPGSvPYQlw=="
},
- "stream-http": {
+ "node_modules/stream-http": {
"version": "2.8.3",
"resolved": "https://registry.npmjs.org/stream-http/-/stream-http-2.8.3.tgz",
"integrity": "sha512-+TSkfINHDo4J+ZobQLWiMouQYB+UVYFttRA94FpEzzJ7ZdqcL4uUUQ7WkdkI4DSozGmgBUE/a47L+38PenXhUw==",
"dev": true,
- "requires": {
+ "dependencies": {
"builtin-status-codes": "^3.0.0",
"inherits": "^2.0.1",
"readable-stream": "^2.3.6",
@@ -11732,131 +15176,168 @@
"xtend": "^4.0.0"
}
},
- "stream-shift": {
+ "node_modules/stream-shift": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/stream-shift/-/stream-shift-1.0.1.tgz",
"integrity": "sha512-AiisoFqQ0vbGcZgQPY1cdP2I76glaVA/RauYR4G4thNFgkTqr90yXTo4LYX60Jl+sIlPNHHdGSwo01AvbKUSVQ=="
},
- "streamsearch": {
+ "node_modules/streamsearch": {
"version": "1.1.0",
"resolved": "https://registry.npmjs.org/streamsearch/-/streamsearch-1.1.0.tgz",
- "integrity": "sha512-Mcc5wHehp9aXz1ax6bZUyY5afg9u2rv5cqQI3mRrYkGC8rW2hM02jWuwjtL++LS5qinSyhj2QfLyNsuc+VsExg=="
+ "integrity": "sha512-Mcc5wHehp9aXz1ax6bZUyY5afg9u2rv5cqQI3mRrYkGC8rW2hM02jWuwjtL++LS5qinSyhj2QfLyNsuc+VsExg==",
+ "engines": {
+ "node": ">=10.0.0"
+ }
},
- "string-width": {
+ "node_modules/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==",
+ "dependencies": {
+ "safe-buffer": "~5.1.0"
+ }
+ },
+ "node_modules/string_decoder/node_modules/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=="
+ },
+ "node_modules/string-width": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz",
"integrity": "sha512-0XsVpQLnVCXHJfyEs8tC0zpTVIr5PKKsQtkT29IwupnPTjtPmQ3xT/4yCREF9hYkV/3M3kzcUTSAZT6a6h81tw==",
- "requires": {
+ "dependencies": {
"code-point-at": "^1.0.0",
"is-fullwidth-code-point": "^1.0.0",
"strip-ansi": "^3.0.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
}
},
- "string.prototype.padend": {
+ "node_modules/string.prototype.padend": {
"version": "3.1.5",
"resolved": "https://registry.npmjs.org/string.prototype.padend/-/string.prototype.padend-3.1.5.tgz",
"integrity": "sha512-DOB27b/2UTTD+4myKUFh+/fXWcu/UDyASIXfg+7VzoCNNGOfWvoyU/x5pvVHr++ztyt/oSYI1BcWBBG/hmlNjA==",
"dev": true,
- "requires": {
+ "dependencies": {
"call-bind": "^1.0.2",
"define-properties": "^1.2.0",
"es-abstract": "^1.22.1"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
}
},
- "string.prototype.trim": {
+ "node_modules/string.prototype.trim": {
"version": "1.2.8",
"resolved": "https://registry.npmjs.org/string.prototype.trim/-/string.prototype.trim-1.2.8.tgz",
"integrity": "sha512-lfjY4HcixfQXOfaqCvcBuOIapyaroTXhbkfJN3gcB1OtyupngWK4sEET9Knd0cXd28kTUqu/kHoV4HKSJdnjiQ==",
"dev": true,
- "requires": {
+ "dependencies": {
"call-bind": "^1.0.2",
"define-properties": "^1.2.0",
"es-abstract": "^1.22.1"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
}
},
- "string.prototype.trimend": {
+ "node_modules/string.prototype.trimend": {
"version": "1.0.7",
"resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.7.tgz",
"integrity": "sha512-Ni79DqeB72ZFq1uH/L6zJ+DKZTkOtPIHovb3YZHQViE+HDouuU4mBrLOLDn5Dde3RF8qw5qVETEjhu9locMLvA==",
"dev": true,
- "requires": {
+ "dependencies": {
"call-bind": "^1.0.2",
"define-properties": "^1.2.0",
"es-abstract": "^1.22.1"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
}
},
- "string.prototype.trimstart": {
+ "node_modules/string.prototype.trimstart": {
"version": "1.0.7",
"resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.7.tgz",
"integrity": "sha512-NGhtDFu3jCEm7B4Fy0DpLewdJQOZcQ0rGbwQ/+stjnrp2i+rlKeCvos9hOIeCmqwratM47OBxY7uFZzjxHXmrg==",
"dev": true,
- "requires": {
+ "dependencies": {
"call-bind": "^1.0.2",
"define-properties": "^1.2.0",
"es-abstract": "^1.22.1"
- }
- },
- "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"
},
- "dependencies": {
- "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=="
- }
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
}
},
- "strip-ansi": {
+ "node_modules/strip-ansi": {
"version": "3.0.1",
"resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz",
"integrity": "sha512-VhumSSbBqDTP8p2ZLKj40UjBCV4+v8bUSEpUb4KjRgWk9pbqGF4REFj6KEagidb2f/M6AzC0EmFyDNGaw9OCzg==",
- "requires": {
+ "dependencies": {
"ansi-regex": "^2.0.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
}
},
- "strip-bom": {
+ "node_modules/strip-bom": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-2.0.0.tgz",
"integrity": "sha512-kwrX1y7czp1E69n2ajbG65mIo9dqvJ+8aBQXOGVxqwvNbsXdFM6Lq37dLAY3mknUwru8CfcCbfOLL/gMo+fi3g==",
- "requires": {
+ "dependencies": {
"is-utf8": "^0.2.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
}
},
- "strip-eof": {
+ "node_modules/strip-eof": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/strip-eof/-/strip-eof-1.0.0.tgz",
- "integrity": "sha512-7FCwGGmx8mD5xQd3RPUvnSpUXHM3BWuzjtpD4TXsfcZ9EL4azvVVUscFYwD9nx8Kh+uCBC00XBtAykoMHwTh8Q=="
+ "integrity": "sha512-7FCwGGmx8mD5xQd3RPUvnSpUXHM3BWuzjtpD4TXsfcZ9EL4azvVVUscFYwD9nx8Kh+uCBC00XBtAykoMHwTh8Q==",
+ "engines": {
+ "node": ">=0.10.0"
+ }
},
- "strip-indent": {
+ "node_modules/strip-indent": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-3.0.0.tgz",
"integrity": "sha512-laJTa3Jb+VQpaC6DseHhF7dXVqHTfJPCRDaEbid/drOhgitgYku/letMUqOXFoWV0zIIUbjpdH2t+tYj4bQMRQ==",
- "requires": {
+ "dependencies": {
"min-indent": "^1.0.0"
+ },
+ "engines": {
+ "node": ">=8"
}
},
- "strip-json-comments": {
+ "node_modules/strip-json-comments": {
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz",
- "integrity": "sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ=="
+ "integrity": "sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ==",
+ "engines": {
+ "node": ">=0.10.0"
+ }
},
- "strnum": {
+ "node_modules/strnum": {
"version": "1.0.5",
"resolved": "https://registry.npmjs.org/strnum/-/strnum-1.0.5.tgz",
"integrity": "sha512-J8bbNyKKXl5qYcR36TIO8W3mVGVHrmmxsd5PAItGkmyzwJvybiw2IVq5nqd0i4LSNSkB/sx9VHllbfFdr9k1JA==",
"optional": true
},
- "superagent": {
+ "node_modules/superagent": {
"version": "8.1.2",
"resolved": "https://registry.npmjs.org/superagent/-/superagent-8.1.2.tgz",
"integrity": "sha512-6WTxW1EB6yCxV5VFOIPQruWGHqc3yI7hEmZK6h+pyk69Lk/Ut7rLUY6W/ONF2MjBuGjvmMiIpsrVJ2vjrHlslA==",
"dev": true,
- "requires": {
+ "dependencies": {
"component-emitter": "^1.3.0",
"cookiejar": "^2.1.4",
"debug": "^4.3.4",
@@ -11868,592 +15349,804 @@
"qs": "^6.11.0",
"semver": "^7.3.8"
},
+ "engines": {
+ "node": ">=6.4.0 <13 || >=14"
+ }
+ },
+ "node_modules/superagent/node_modules/debug": {
+ "version": "4.3.4",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz",
+ "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==",
+ "dev": true,
"dependencies": {
- "debug": {
- "version": "4.3.4",
- "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz",
- "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==",
- "dev": true,
- "requires": {
- "ms": "2.1.2"
- }
- },
- "mime": {
- "version": "2.6.0",
- "resolved": "https://registry.npmjs.org/mime/-/mime-2.6.0.tgz",
- "integrity": "sha512-USPkMeET31rOMiarsBNIHZKLGgvKc/LrjofAnBlOttf5ajRvqiRA8QsenbcooctK6d6Ts6aqZXBA+XbkKthiQg==",
- "dev": true
+ "ms": "2.1.2"
+ },
+ "engines": {
+ "node": ">=6.0"
+ },
+ "peerDependenciesMeta": {
+ "supports-color": {
+ "optional": true
}
}
},
- "supports-color": {
+ "node_modules/superagent/node_modules/mime": {
+ "version": "2.6.0",
+ "resolved": "https://registry.npmjs.org/mime/-/mime-2.6.0.tgz",
+ "integrity": "sha512-USPkMeET31rOMiarsBNIHZKLGgvKc/LrjofAnBlOttf5ajRvqiRA8QsenbcooctK6d6Ts6aqZXBA+XbkKthiQg==",
+ "dev": true,
+ "bin": {
+ "mime": "cli.js"
+ },
+ "engines": {
+ "node": ">=4.0.0"
+ }
+ },
+ "node_modules/supports-color": {
"version": "5.5.0",
"resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz",
"integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==",
- "requires": {
+ "dependencies": {
"has-flag": "^3.0.0"
+ },
+ "engines": {
+ "node": ">=4"
}
},
- "supports-preserve-symlinks-flag": {
+ "node_modules/supports-preserve-symlinks-flag": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz",
- "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w=="
+ "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==",
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
},
- "sver-compat": {
+ "node_modules/sver-compat": {
"version": "1.5.0",
"resolved": "https://registry.npmjs.org/sver-compat/-/sver-compat-1.5.0.tgz",
"integrity": "sha512-aFTHfmjwizMNlNE6dsGmoAM4lHjL0CyiobWaFiXWSlD7cIxshW422Nb8KbXCmR6z+0ZEPY+daXJrDyh/vuwTyg==",
- "requires": {
+ "dependencies": {
"es6-iterator": "^2.0.1",
"es6-symbol": "^3.1.1"
}
},
- "tapable": {
+ "node_modules/tapable": {
"version": "2.2.1",
"resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.1.tgz",
"integrity": "sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==",
- "dev": true
+ "engines": {
+ "node": ">=6"
+ }
},
- "tar-fs": {
+ "node_modules/tar-fs": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/tar-fs/-/tar-fs-2.0.0.tgz",
"integrity": "sha512-vaY0obB6Om/fso8a8vakQBzwholQ7v5+uy+tF3Ozvxv1KNezmVQAiWtcNmMHFSFPqL3dJA8ha6gdtFbfX9mcxA==",
- "requires": {
+ "dependencies": {
"chownr": "^1.1.1",
"mkdirp": "^0.5.1",
"pump": "^3.0.0",
"tar-stream": "^2.0.0"
- },
- "dependencies": {
- "pump": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz",
- "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==",
- "requires": {
- "end-of-stream": "^1.1.0",
- "once": "^1.3.1"
- }
- }
}
},
- "tar-stream": {
+ "node_modules/tar-fs/node_modules/pump": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz",
+ "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==",
+ "dependencies": {
+ "end-of-stream": "^1.1.0",
+ "once": "^1.3.1"
+ }
+ },
+ "node_modules/tar-stream": {
"version": "2.2.0",
"resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-2.2.0.tgz",
"integrity": "sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ==",
- "requires": {
+ "dependencies": {
"bl": "^4.0.3",
"end-of-stream": "^1.4.1",
"fs-constants": "^1.0.0",
"inherits": "^2.0.3",
"readable-stream": "^3.1.1"
},
- "dependencies": {
- "bl": {
- "version": "4.1.0",
- "resolved": "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz",
- "integrity": "sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==",
- "requires": {
- "buffer": "^5.5.0",
- "inherits": "^2.0.4",
- "readable-stream": "^3.4.0"
- }
- },
- "readable-stream": {
- "version": "3.6.2",
- "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz",
- "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==",
- "requires": {
- "inherits": "^2.0.3",
- "string_decoder": "^1.1.1",
- "util-deprecate": "^1.0.1"
- }
- }
+ "engines": {
+ "node": ">=6"
}
},
- "tarn": {
+ "node_modules/tar-stream/node_modules/bl": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz",
+ "integrity": "sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==",
+ "dependencies": {
+ "buffer": "^5.5.0",
+ "inherits": "^2.0.4",
+ "readable-stream": "^3.4.0"
+ }
+ },
+ "node_modules/tar-stream/node_modules/readable-stream": {
+ "version": "3.6.2",
+ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz",
+ "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==",
+ "dependencies": {
+ "inherits": "^2.0.3",
+ "string_decoder": "^1.1.1",
+ "util-deprecate": "^1.0.1"
+ },
+ "engines": {
+ "node": ">= 6"
+ }
+ },
+ "node_modules/tarn": {
"version": "3.0.2",
"resolved": "https://registry.npmjs.org/tarn/-/tarn-3.0.2.tgz",
- "integrity": "sha512-51LAVKUSZSVfI05vjPESNc5vwqqZpbXCsU+/+wxlOrUjk2SnFTt97v9ZgQrD4YmxYW1Px6w2KjaDitCfkvgxMQ=="
+ "integrity": "sha512-51LAVKUSZSVfI05vjPESNc5vwqqZpbXCsU+/+wxlOrUjk2SnFTt97v9ZgQrD4YmxYW1Px6w2KjaDitCfkvgxMQ==",
+ "engines": {
+ "node": ">=8.0.0"
+ }
},
- "term-size": {
+ "node_modules/term-size": {
"version": "1.2.0",
"resolved": "https://registry.npmjs.org/term-size/-/term-size-1.2.0.tgz",
"integrity": "sha512-7dPUZQGy/+m3/wjVz3ZW5dobSoD/02NxJpoXUX0WIyjfVS3l0c+b/+9phIDFA7FHzkYtwtMFgeGZ/Y8jVTeqQQ==",
- "requires": {
+ "dependencies": {
"execa": "^0.7.0"
+ },
+ "engines": {
+ "node": ">=4"
}
},
- "terser": {
+ "node_modules/terser": {
"version": "5.20.0",
"resolved": "https://registry.npmjs.org/terser/-/terser-5.20.0.tgz",
"integrity": "sha512-e56ETryaQDyebBwJIWYB2TT6f2EZ0fL0sW/JRXNMN26zZdKi2u/E/5my5lG6jNxym6qsrVXfFRmOdV42zlAgLQ==",
- "dev": true,
- "requires": {
+ "dependencies": {
"@jridgewell/source-map": "^0.3.3",
"acorn": "^8.8.2",
"commander": "^2.20.0",
"source-map-support": "~0.5.20"
},
- "dependencies": {
- "acorn": {
- "version": "8.10.0",
- "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.10.0.tgz",
- "integrity": "sha512-F0SAmZ8iUtS//m8DmCTA0jlh6TDKkHQyK6xc6V4KDTyZKA9dnvX9/3sRTVQrWm79glUAZbnmmNcdYwUIHWVybw==",
- "dev": true
- },
- "commander": {
- "version": "2.20.3",
- "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz",
- "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==",
- "dev": true
- }
+ "bin": {
+ "terser": "bin/terser"
+ },
+ "engines": {
+ "node": ">=10"
}
},
- "terser-webpack-plugin": {
+ "node_modules/terser-webpack-plugin": {
"version": "5.3.9",
"resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.3.9.tgz",
"integrity": "sha512-ZuXsqE07EcggTWQjXUj+Aot/OMcD0bMKGgF63f7UxYcu5/AJF53aIpK1YoP5xR9l6s/Hy2b+t1AM0bLNPRuhwA==",
- "dev": true,
- "requires": {
+ "dependencies": {
"@jridgewell/trace-mapping": "^0.3.17",
"jest-worker": "^27.4.5",
"schema-utils": "^3.1.1",
"serialize-javascript": "^6.0.1",
"terser": "^5.16.8"
},
- "dependencies": {
- "ajv": {
- "version": "6.12.6",
- "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz",
- "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==",
- "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"
- }
+ "engines": {
+ "node": ">= 10.13.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/webpack"
+ },
+ "peerDependencies": {
+ "webpack": "^5.1.0"
+ },
+ "peerDependenciesMeta": {
+ "@swc/core": {
+ "optional": true
},
- "ajv-keywords": {
- "version": "3.5.2",
- "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz",
- "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==",
- "dev": true
+ "esbuild": {
+ "optional": 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
- },
- "schema-utils": {
- "version": "3.3.0",
- "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.3.0.tgz",
- "integrity": "sha512-pN/yOAvcC+5rQ5nERGuwrjLlYvLTbCibnZ1I7B1LaiAz9BRBlE9GMgE/eqV30P7aJQUf7Ddimy/RsbYO/GrVGg==",
- "dev": true,
- "requires": {
- "@types/json-schema": "^7.0.8",
- "ajv": "^6.12.5",
- "ajv-keywords": "^3.5.2"
- }
+ "uglify-js": {
+ "optional": true
}
}
},
- "test-exclude": {
+ "node_modules/terser-webpack-plugin/node_modules/ajv": {
+ "version": "6.12.6",
+ "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz",
+ "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==",
+ "dependencies": {
+ "fast-deep-equal": "^3.1.1",
+ "fast-json-stable-stringify": "^2.0.0",
+ "json-schema-traverse": "^0.4.1",
+ "uri-js": "^4.2.2"
+ },
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/epoberezkin"
+ }
+ },
+ "node_modules/terser-webpack-plugin/node_modules/ajv-keywords": {
+ "version": "3.5.2",
+ "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz",
+ "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==",
+ "peerDependencies": {
+ "ajv": "^6.9.1"
+ }
+ },
+ "node_modules/terser-webpack-plugin/node_modules/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=="
+ },
+ "node_modules/terser-webpack-plugin/node_modules/schema-utils": {
+ "version": "3.3.0",
+ "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.3.0.tgz",
+ "integrity": "sha512-pN/yOAvcC+5rQ5nERGuwrjLlYvLTbCibnZ1I7B1LaiAz9BRBlE9GMgE/eqV30P7aJQUf7Ddimy/RsbYO/GrVGg==",
+ "dependencies": {
+ "@types/json-schema": "^7.0.8",
+ "ajv": "^6.12.5",
+ "ajv-keywords": "^3.5.2"
+ },
+ "engines": {
+ "node": ">= 10.13.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/webpack"
+ }
+ },
+ "node_modules/terser/node_modules/acorn": {
+ "version": "8.10.0",
+ "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.10.0.tgz",
+ "integrity": "sha512-F0SAmZ8iUtS//m8DmCTA0jlh6TDKkHQyK6xc6V4KDTyZKA9dnvX9/3sRTVQrWm79glUAZbnmmNcdYwUIHWVybw==",
+ "bin": {
+ "acorn": "bin/acorn"
+ },
+ "engines": {
+ "node": ">=0.4.0"
+ }
+ },
+ "node_modules/terser/node_modules/commander": {
+ "version": "2.20.3",
+ "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz",
+ "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ=="
+ },
+ "node_modules/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": {
+ "dependencies": {
"glob": "^7.1.3",
"minimatch": "^3.0.4",
"read-pkg-up": "^4.0.0",
"require-main-filename": "^2.0.0"
},
- "dependencies": {
- "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"
- }
- },
- "load-json-file": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-4.0.0.tgz",
- "integrity": "sha512-Kx8hMakjX03tiGTLAIdJ+lL0htKnXjEZN6hk/tozf/WOuYGdZBJrZ+rCJRbVCugsjB3jMLn9746NsQIf5VjBMw==",
- "dev": true,
- "requires": {
- "graceful-fs": "^4.1.2",
- "parse-json": "^4.0.0",
- "pify": "^3.0.0",
- "strip-bom": "^3.0.0"
- }
- },
- "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"
- }
- },
- "p-limit": {
- "version": "2.3.0",
- "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz",
- "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==",
- "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"
- }
- },
- "parse-json": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-4.0.0.tgz",
- "integrity": "sha512-aOIos8bujGN93/8Ox/jPLh7RwVnPEysynVFE+fQZyg6jKELEHwzgKdLRFHUgXJL6kylijVSBC4BvN9OmsB48Rw==",
- "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": "sha512-bpC7GYwiDYQ4wYLe+FA8lhRjhQCMcQGuSgGGqDkg/QerRWw9CmGRT0iSOVRSZJ29NMLZgIzqaljJ63oaL4NIJQ==",
- "dev": true
- },
- "pify": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz",
- "integrity": "sha512-C3FsVNH1udSEX48gGX1xfvwTWfsYWj5U+8/uK15BGzIGrKoUpghX8hWZwa/OFnakBiiVNmBvemTJR5mcy7iPcg==",
- "dev": true
- },
- "read-pkg": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-3.0.0.tgz",
- "integrity": "sha512-BLq/cCO9two+lBgiTYNqD6GdtK8s4NpaWrl6/rCO9w0TUS8oJl7cmToOZfRYllKTISY6nt1U7jQ53brmKqY6BA==",
- "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"
- }
- },
- "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
- },
- "strip-bom": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz",
- "integrity": "sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==",
- "dev": true
- }
+ "engines": {
+ "node": ">=6"
}
},
- "text-hex": {
+ "node_modules/test-exclude/node_modules/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,
+ "dependencies": {
+ "locate-path": "^3.0.0"
+ },
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/test-exclude/node_modules/load-json-file": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-4.0.0.tgz",
+ "integrity": "sha512-Kx8hMakjX03tiGTLAIdJ+lL0htKnXjEZN6hk/tozf/WOuYGdZBJrZ+rCJRbVCugsjB3jMLn9746NsQIf5VjBMw==",
+ "dev": true,
+ "dependencies": {
+ "graceful-fs": "^4.1.2",
+ "parse-json": "^4.0.0",
+ "pify": "^3.0.0",
+ "strip-bom": "^3.0.0"
+ },
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/test-exclude/node_modules/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,
+ "dependencies": {
+ "p-locate": "^3.0.0",
+ "path-exists": "^3.0.0"
+ },
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/test-exclude/node_modules/p-limit": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz",
+ "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==",
+ "dev": true,
+ "dependencies": {
+ "p-try": "^2.0.0"
+ },
+ "engines": {
+ "node": ">=6"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/test-exclude/node_modules/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,
+ "dependencies": {
+ "p-limit": "^2.0.0"
+ },
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/test-exclude/node_modules/parse-json": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-4.0.0.tgz",
+ "integrity": "sha512-aOIos8bujGN93/8Ox/jPLh7RwVnPEysynVFE+fQZyg6jKELEHwzgKdLRFHUgXJL6kylijVSBC4BvN9OmsB48Rw==",
+ "dev": true,
+ "dependencies": {
+ "error-ex": "^1.3.1",
+ "json-parse-better-errors": "^1.0.1"
+ },
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/test-exclude/node_modules/path-exists": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz",
+ "integrity": "sha512-bpC7GYwiDYQ4wYLe+FA8lhRjhQCMcQGuSgGGqDkg/QerRWw9CmGRT0iSOVRSZJ29NMLZgIzqaljJ63oaL4NIJQ==",
+ "dev": true,
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/test-exclude/node_modules/pify": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz",
+ "integrity": "sha512-C3FsVNH1udSEX48gGX1xfvwTWfsYWj5U+8/uK15BGzIGrKoUpghX8hWZwa/OFnakBiiVNmBvemTJR5mcy7iPcg==",
+ "dev": true,
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/test-exclude/node_modules/read-pkg": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-3.0.0.tgz",
+ "integrity": "sha512-BLq/cCO9two+lBgiTYNqD6GdtK8s4NpaWrl6/rCO9w0TUS8oJl7cmToOZfRYllKTISY6nt1U7jQ53brmKqY6BA==",
+ "dev": true,
+ "dependencies": {
+ "load-json-file": "^4.0.0",
+ "normalize-package-data": "^2.3.2",
+ "path-type": "^3.0.0"
+ },
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/test-exclude/node_modules/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,
+ "dependencies": {
+ "find-up": "^3.0.0",
+ "read-pkg": "^3.0.0"
+ },
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/test-exclude/node_modules/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
+ },
+ "node_modules/test-exclude/node_modules/strip-bom": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz",
+ "integrity": "sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==",
+ "dev": true,
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/text-hex": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/text-hex/-/text-hex-1.0.0.tgz",
"integrity": "sha512-uuVGNWzgJ4yhRaNSiubPY7OjISw4sw4E5Uv0wbjp+OzcbmVU/rsT8ujgcXJhn9ypzsgr5vlzpPqP+MBBKcGvbg=="
},
- "text-table": {
+ "node_modules/text-table": {
"version": "0.2.0",
"resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz",
"integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==",
"dev": true
},
- "through": {
+ "node_modules/through": {
"version": "2.3.8",
"resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz",
"integrity": "sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg=="
},
- "through2": {
+ "node_modules/through2": {
"version": "2.0.5",
"resolved": "https://registry.npmjs.org/through2/-/through2-2.0.5.tgz",
"integrity": "sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==",
- "requires": {
+ "dependencies": {
"readable-stream": "~2.3.6",
"xtend": "~4.0.1"
}
},
- "through2-filter": {
+ "node_modules/through2-filter": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/through2-filter/-/through2-filter-3.0.0.tgz",
"integrity": "sha512-jaRjI2WxN3W1V8/FMZ9HKIBXixtiqs3SQSX4/YGIiP3gL6djW48VoZq9tDqeCWs3MT8YY5wb/zli8VW8snY1CA==",
- "requires": {
+ "dependencies": {
"through2": "~2.0.0",
"xtend": "~4.0.0"
}
},
- "tildify": {
+ "node_modules/tildify": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/tildify/-/tildify-2.0.0.tgz",
- "integrity": "sha512-Cc+OraorugtXNfs50hU9KS369rFXCfgGLpfCfvlc+Ud5u6VWmUQsOAa9HbTvheQdYnrdJqqv1e5oIqXppMYnSw=="
+ "integrity": "sha512-Cc+OraorugtXNfs50hU9KS369rFXCfgGLpfCfvlc+Ud5u6VWmUQsOAa9HbTvheQdYnrdJqqv1e5oIqXppMYnSw==",
+ "engines": {
+ "node": ">=8"
+ }
},
- "time-stamp": {
+ "node_modules/time-stamp": {
"version": "1.1.0",
"resolved": "https://registry.npmjs.org/time-stamp/-/time-stamp-1.1.0.tgz",
- "integrity": "sha512-gLCeArryy2yNTRzTGKbZbloctj64jkZ57hj5zdraXue6aFgd6PmvVtEyiUU+hvU0v7q08oVv8r8ev0tRo6bvgw=="
+ "integrity": "sha512-gLCeArryy2yNTRzTGKbZbloctj64jkZ57hj5zdraXue6aFgd6PmvVtEyiUU+hvU0v7q08oVv8r8ev0tRo6bvgw==",
+ "engines": {
+ "node": ">=0.10.0"
+ }
},
- "timed-out": {
+ "node_modules/timed-out": {
"version": "4.0.1",
"resolved": "https://registry.npmjs.org/timed-out/-/timed-out-4.0.1.tgz",
- "integrity": "sha512-G7r3AhovYtr5YKOWQkta8RKAPb+J9IsO4uVmzjl8AZwfhs8UcUwTiD6gcJYSgOtzyjvQKrKYn41syHbUWMkafA=="
+ "integrity": "sha512-G7r3AhovYtr5YKOWQkta8RKAPb+J9IsO4uVmzjl8AZwfhs8UcUwTiD6gcJYSgOtzyjvQKrKYn41syHbUWMkafA==",
+ "engines": {
+ "node": ">=0.10.0"
+ }
},
- "timers-browserify": {
+ "node_modules/timers-browserify": {
"version": "2.0.12",
"resolved": "https://registry.npmjs.org/timers-browserify/-/timers-browserify-2.0.12.tgz",
"integrity": "sha512-9phl76Cqm6FhSX9Xe1ZUAMLtm1BLkKj2Qd5ApyWkXzsMRaA7dgr81kf4wJmQf/hAvg8EEyJxDo3du/0KlhPiKQ==",
"dev": true,
- "requires": {
+ "dependencies": {
"setimmediate": "^1.0.4"
+ },
+ "engines": {
+ "node": ">=0.6.0"
}
},
- "tiny-emitter": {
+ "node_modules/tiny-emitter": {
"version": "2.1.0",
"resolved": "https://registry.npmjs.org/tiny-emitter/-/tiny-emitter-2.1.0.tgz",
"integrity": "sha512-NB6Dk1A9xgQPMoGqC5CVXn123gWyte215ONT5Pp5a0yt4nlEoO1ZWeCwpncaekPHXO60i47ihFnZPiRPjRMq4Q=="
},
- "to-absolute-glob": {
+ "node_modules/tmp": {
+ "version": "0.2.1",
+ "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.2.1.tgz",
+ "integrity": "sha512-76SUhtfqR2Ijn+xllcI5P1oyannHNHByD80W1q447gU3mp9G9PSpGdWmjUOHRDPiHYacIk66W7ubDTuPF3BEtQ==",
+ "dependencies": {
+ "rimraf": "^3.0.0"
+ },
+ "engines": {
+ "node": ">=8.17.0"
+ }
+ },
+ "node_modules/tmp-promise": {
+ "version": "3.0.3",
+ "resolved": "https://registry.npmjs.org/tmp-promise/-/tmp-promise-3.0.3.tgz",
+ "integrity": "sha512-RwM7MoPojPxsOBYnyd2hy0bxtIlVrihNs9pj5SUvY8Zz1sQcQG2tG1hSr8PDxfgEB8RNKDhqbIlroIarSNDNsQ==",
+ "dependencies": {
+ "tmp": "^0.2.0"
+ }
+ },
+ "node_modules/to-absolute-glob": {
"version": "2.0.2",
"resolved": "https://registry.npmjs.org/to-absolute-glob/-/to-absolute-glob-2.0.2.tgz",
"integrity": "sha512-rtwLUQEwT8ZeKQbyFJyomBRYXyE16U5VKuy0ftxLMK/PZb2fkOsg5r9kHdauuVDbsNdIBoC/HCthpidamQFXYA==",
- "requires": {
+ "dependencies": {
"is-absolute": "^1.0.0",
"is-negated-glob": "^1.0.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
}
},
- "to-arraybuffer": {
+ "node_modules/to-arraybuffer": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/to-arraybuffer/-/to-arraybuffer-1.0.1.tgz",
"integrity": "sha512-okFlQcoGTi4LQBG/PgSYblw9VOyptsz2KJZqc6qtgGdes8VktzUQkj4BI2blit072iS8VODNcMA+tvnS9dnuMA==",
"dev": true
},
- "to-fast-properties": {
+ "node_modules/to-fast-properties": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz",
- "integrity": "sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog=="
+ "integrity": "sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==",
+ "engines": {
+ "node": ">=4"
+ }
},
- "to-object-path": {
+ "node_modules/to-object-path": {
"version": "0.3.0",
"resolved": "https://registry.npmjs.org/to-object-path/-/to-object-path-0.3.0.tgz",
"integrity": "sha512-9mWHdnGRuh3onocaHzukyvCZhzvr6tiflAy/JRFXcJX0TjgfWA9pk9t8CMbzmBE4Jfw58pXbkngtBtqYxzNEyg==",
- "requires": {
+ "dependencies": {
"kind-of": "^3.0.2"
},
- "dependencies": {
- "kind-of": {
- "version": "3.2.2",
- "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
- "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==",
- "requires": {
- "is-buffer": "^1.1.5"
- }
- }
+ "engines": {
+ "node": ">=0.10.0"
}
},
- "to-regex": {
+ "node_modules/to-object-path/node_modules/kind-of": {
+ "version": "3.2.2",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
+ "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==",
+ "dependencies": {
+ "is-buffer": "^1.1.5"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/to-regex": {
"version": "3.0.2",
"resolved": "https://registry.npmjs.org/to-regex/-/to-regex-3.0.2.tgz",
"integrity": "sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw==",
- "requires": {
+ "dependencies": {
"define-property": "^2.0.2",
"extend-shallow": "^3.0.2",
"regex-not": "^1.0.2",
"safe-regex": "^1.1.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
}
},
- "to-regex-range": {
+ "node_modules/to-regex-range": {
"version": "2.1.1",
"resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz",
"integrity": "sha512-ZZWNfCjUokXXDGXFpZehJIkZqq91BcULFq/Pi7M5i4JnxXdhMKAK682z8bCW3o8Hj1wuuzoKcW3DfVzaP6VuNg==",
- "requires": {
+ "dependencies": {
"is-number": "^3.0.0",
"repeat-string": "^1.6.1"
+ },
+ "engines": {
+ "node": ">=0.10.0"
}
},
- "to-through": {
+ "node_modules/to-through": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/to-through/-/to-through-2.0.0.tgz",
"integrity": "sha512-+QIz37Ly7acM4EMdw2PRN389OneM5+d844tirkGp4dPKzI5OE72V9OsbFp+CIYJDahZ41ZV05hNtcPAQUAm9/Q==",
- "requires": {
+ "dependencies": {
"through2": "^2.0.3"
+ },
+ "engines": {
+ "node": ">= 0.10"
}
},
- "toidentifier": {
+ "node_modules/toidentifier": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz",
- "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA=="
+ "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==",
+ "engines": {
+ "node": ">=0.6"
+ }
},
- "token-stream": {
+ "node_modules/token-stream": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/token-stream/-/token-stream-1.0.0.tgz",
"integrity": "sha512-VSsyNPPW74RpHwR8Fc21uubwHY7wMDeJLys2IX5zJNih+OnAnaifKHo+1LHT7DAdloQ7apeaaWg8l7qnf/TnEg=="
},
- "touch": {
+ "node_modules/touch": {
"version": "3.1.0",
"resolved": "https://registry.npmjs.org/touch/-/touch-3.1.0.tgz",
"integrity": "sha512-WBx8Uy5TLtOSRtIq+M03/sKDrXCLHxwDcquSP2c43Le03/9serjQBIztjRz6FkJez9D/hleyAXTBGLwwZUw9lA==",
- "requires": {
+ "dependencies": {
"nopt": "~1.0.10"
+ },
+ "bin": {
+ "nodetouch": "bin/nodetouch.js"
}
},
- "tr46": {
+ "node_modules/tr46": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/tr46/-/tr46-3.0.0.tgz",
"integrity": "sha512-l7FvfAHlcmulp8kr+flpQZmVwtu7nfRV7NZujtN0OqES8EL4O4e0qqzL0DC5gAvx/ZC/9lk6rhcUwYvkBnBnYA==",
- "requires": {
+ "dependencies": {
"punycode": "^2.1.1"
+ },
+ "engines": {
+ "node": ">=12"
}
},
- "trim-newlines": {
+ "node_modules/trim-newlines": {
"version": "3.0.1",
"resolved": "https://registry.npmjs.org/trim-newlines/-/trim-newlines-3.0.1.tgz",
- "integrity": "sha512-c1PTsA3tYrIsLGkJkzHF+w9F2EyxfXGo4UyJc4pFL++FMjnq0HJS69T3M7d//gKrFKwy429bouPescbjecU+Zw=="
+ "integrity": "sha512-c1PTsA3tYrIsLGkJkzHF+w9F2EyxfXGo4UyJc4pFL++FMjnq0HJS69T3M7d//gKrFKwy429bouPescbjecU+Zw==",
+ "engines": {
+ "node": ">=8"
+ }
},
- "triple-beam": {
+ "node_modules/triple-beam": {
"version": "1.4.1",
"resolved": "https://registry.npmjs.org/triple-beam/-/triple-beam-1.4.1.tgz",
- "integrity": "sha512-aZbgViZrg1QNcG+LULa7nhZpJTZSLm/mXnHXnbAbjmN5aSa0y7V+wvv6+4WaBtpISJzThKy+PIPxc1Nq1EJ9mg=="
+ "integrity": "sha512-aZbgViZrg1QNcG+LULa7nhZpJTZSLm/mXnHXnbAbjmN5aSa0y7V+wvv6+4WaBtpISJzThKy+PIPxc1Nq1EJ9mg==",
+ "engines": {
+ "node": ">= 14.0.0"
+ }
},
- "ts-loader": {
+ "node_modules/ts-loader": {
"version": "9.4.4",
"resolved": "https://registry.npmjs.org/ts-loader/-/ts-loader-9.4.4.tgz",
"integrity": "sha512-MLukxDHBl8OJ5Dk3y69IsKVFRA/6MwzEqBgh+OXMPB/OD01KQuWPFd1WAQP8a5PeSCAxfnkhiuWqfmFJzJQt9w==",
"dev": true,
- "requires": {
+ "dependencies": {
"chalk": "^4.1.0",
"enhanced-resolve": "^5.0.0",
"micromatch": "^4.0.0",
"semver": "^7.3.4"
},
- "dependencies": {
- "ansi-styles": {
- "version": "4.3.0",
- "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
- "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
- "dev": true,
- "requires": {
- "color-convert": "^2.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"
- }
- },
- "chalk": {
- "version": "4.1.2",
- "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz",
- "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==",
- "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
- },
- "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"
- }
- },
- "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
- },
- "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
- },
- "micromatch": {
- "version": "4.0.5",
- "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz",
- "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==",
- "dev": true,
- "requires": {
- "braces": "^3.0.2",
- "picomatch": "^2.3.1"
- }
- },
- "supports-color": {
- "version": "7.2.0",
- "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
- "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
- "dev": true,
- "requires": {
- "has-flag": "^4.0.0"
- }
- },
- "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"
- }
- }
+ "engines": {
+ "node": ">=12.0.0"
+ },
+ "peerDependencies": {
+ "typescript": "*",
+ "webpack": "^5.0.0"
}
},
- "ts-node": {
+ "node_modules/ts-loader/node_modules/ansi-styles": {
+ "version": "4.3.0",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
+ "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
+ "dev": true,
+ "dependencies": {
+ "color-convert": "^2.0.1"
+ },
+ "engines": {
+ "node": ">=8"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/ansi-styles?sponsor=1"
+ }
+ },
+ "node_modules/ts-loader/node_modules/braces": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz",
+ "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==",
+ "dev": true,
+ "dependencies": {
+ "fill-range": "^7.0.1"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/ts-loader/node_modules/chalk": {
+ "version": "4.1.2",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz",
+ "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==",
+ "dev": true,
+ "dependencies": {
+ "ansi-styles": "^4.1.0",
+ "supports-color": "^7.1.0"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/chalk?sponsor=1"
+ }
+ },
+ "node_modules/ts-loader/node_modules/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,
+ "dependencies": {
+ "color-name": "~1.1.4"
+ },
+ "engines": {
+ "node": ">=7.0.0"
+ }
+ },
+ "node_modules/ts-loader/node_modules/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
+ },
+ "node_modules/ts-loader/node_modules/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,
+ "dependencies": {
+ "to-regex-range": "^5.0.1"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/ts-loader/node_modules/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,
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/ts-loader/node_modules/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,
+ "engines": {
+ "node": ">=0.12.0"
+ }
+ },
+ "node_modules/ts-loader/node_modules/micromatch": {
+ "version": "4.0.5",
+ "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz",
+ "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==",
+ "dev": true,
+ "dependencies": {
+ "braces": "^3.0.2",
+ "picomatch": "^2.3.1"
+ },
+ "engines": {
+ "node": ">=8.6"
+ }
+ },
+ "node_modules/ts-loader/node_modules/supports-color": {
+ "version": "7.2.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
+ "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
+ "dev": true,
+ "dependencies": {
+ "has-flag": "^4.0.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/ts-loader/node_modules/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,
+ "dependencies": {
+ "is-number": "^7.0.0"
+ },
+ "engines": {
+ "node": ">=8.0"
+ }
+ },
+ "node_modules/ts-node": {
"version": "9.1.1",
"resolved": "https://registry.npmjs.org/ts-node/-/ts-node-9.1.1.tgz",
"integrity": "sha512-hPlt7ZACERQGf03M253ytLY3dHbGNGrAq9qIHWUY9XHYl1z7wYngSr3OQ5xmui8o2AaxsONxIzjafLUiWBo1Fg==",
"dev": true,
- "requires": {
+ "dependencies": {
"arg": "^4.1.0",
"create-require": "^1.1.0",
"diff": "^4.0.1",
@@ -12461,326 +16154,436 @@
"source-map-support": "^0.5.17",
"yn": "3.1.1"
},
- "dependencies": {
- "diff": {
- "version": "4.0.2",
- "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz",
- "integrity": "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==",
- "dev": true
- }
+ "bin": {
+ "ts-node": "dist/bin.js",
+ "ts-node-script": "dist/bin-script.js",
+ "ts-node-transpile-only": "dist/bin-transpile.js",
+ "ts-script": "dist/bin-script-deprecated.js"
+ },
+ "engines": {
+ "node": ">=10.0.0"
+ },
+ "peerDependencies": {
+ "typescript": ">=2.7"
}
},
- "ts-toolbelt": {
+ "node_modules/ts-node/node_modules/diff": {
+ "version": "4.0.2",
+ "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz",
+ "integrity": "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==",
+ "dev": true,
+ "engines": {
+ "node": ">=0.3.1"
+ }
+ },
+ "node_modules/ts-toolbelt": {
"version": "6.15.5",
"resolved": "https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-6.15.5.tgz",
"integrity": "sha512-FZIXf1ksVyLcfr7M317jbB67XFJhOO1YqdTcuGaq9q5jLUoTikukZ+98TPjKiP2jC5CgmYdWWYs0s2nLSU0/1A==",
"dev": true
},
- "ts-transformer-keys": {
+ "node_modules/ts-transformer-keys": {
"version": "0.4.4",
"resolved": "https://registry.npmjs.org/ts-transformer-keys/-/ts-transformer-keys-0.4.4.tgz",
- "integrity": "sha512-LrqgvaFvar01/5mbunRyeLTSIkqoC2xfcpL/90aDY6vR07DGyH+UaYGdIEsUudnlAw2Sr0pxFgdZvE0QIyI4qA=="
+ "integrity": "sha512-LrqgvaFvar01/5mbunRyeLTSIkqoC2xfcpL/90aDY6vR07DGyH+UaYGdIEsUudnlAw2Sr0pxFgdZvE0QIyI4qA==",
+ "peerDependencies": {
+ "typescript": ">=2.4.1"
+ }
},
- "tsconfig-paths": {
+ "node_modules/tsconfig-paths": {
"version": "3.14.2",
"resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-3.14.2.tgz",
"integrity": "sha512-o/9iXgCYc5L/JxCHPe3Hvh8Q/2xm5Z+p18PESBU6Ff33695QnCHBEjcytY2q19ua7Mbl/DavtBOLq+oG0RCL+g==",
"dev": true,
- "requires": {
+ "dependencies": {
"@types/json5": "^0.0.29",
"json5": "^1.0.2",
"minimist": "^1.2.6",
"strip-bom": "^3.0.0"
- },
- "dependencies": {
- "strip-bom": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz",
- "integrity": "sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==",
- "dev": true
- }
}
},
- "tsconfig-paths-webpack-plugin": {
+ "node_modules/tsconfig-paths-webpack-plugin": {
"version": "4.1.0",
"resolved": "https://registry.npmjs.org/tsconfig-paths-webpack-plugin/-/tsconfig-paths-webpack-plugin-4.1.0.tgz",
"integrity": "sha512-xWFISjviPydmtmgeUAuXp4N1fky+VCtfhOkDUFIv5ea7p4wuTomI4QTrXvFBX2S4jZsmyTSrStQl+E+4w+RzxA==",
"dev": true,
- "requires": {
+ "dependencies": {
"chalk": "^4.1.0",
"enhanced-resolve": "^5.7.0",
"tsconfig-paths": "^4.1.2"
},
- "dependencies": {
- "ansi-styles": {
- "version": "4.3.0",
- "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
- "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
- "dev": true,
- "requires": {
- "color-convert": "^2.0.1"
- }
- },
- "chalk": {
- "version": "4.1.2",
- "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz",
- "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==",
- "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
- },
- "json5": {
- "version": "2.2.3",
- "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz",
- "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==",
- "dev": true
- },
- "strip-bom": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz",
- "integrity": "sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==",
- "dev": true
- },
- "supports-color": {
- "version": "7.2.0",
- "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
- "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
- "dev": true,
- "requires": {
- "has-flag": "^4.0.0"
- }
- },
- "tsconfig-paths": {
- "version": "4.2.0",
- "resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-4.2.0.tgz",
- "integrity": "sha512-NoZ4roiN7LnbKn9QqE1amc9DJfzvZXxF4xDavcOWt1BPkdx+m+0gJuPM+S0vCe7zTJMYUP0R8pO2XMr+Y8oLIg==",
- "dev": true,
- "requires": {
- "json5": "^2.2.2",
- "minimist": "^1.2.6",
- "strip-bom": "^3.0.0"
- }
- }
+ "engines": {
+ "node": ">=10.13.0"
}
},
- "tslib": {
+ "node_modules/tsconfig-paths-webpack-plugin/node_modules/ansi-styles": {
+ "version": "4.3.0",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
+ "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
+ "dev": true,
+ "dependencies": {
+ "color-convert": "^2.0.1"
+ },
+ "engines": {
+ "node": ">=8"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/ansi-styles?sponsor=1"
+ }
+ },
+ "node_modules/tsconfig-paths-webpack-plugin/node_modules/chalk": {
+ "version": "4.1.2",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz",
+ "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==",
+ "dev": true,
+ "dependencies": {
+ "ansi-styles": "^4.1.0",
+ "supports-color": "^7.1.0"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/chalk?sponsor=1"
+ }
+ },
+ "node_modules/tsconfig-paths-webpack-plugin/node_modules/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,
+ "dependencies": {
+ "color-name": "~1.1.4"
+ },
+ "engines": {
+ "node": ">=7.0.0"
+ }
+ },
+ "node_modules/tsconfig-paths-webpack-plugin/node_modules/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
+ },
+ "node_modules/tsconfig-paths-webpack-plugin/node_modules/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,
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/tsconfig-paths-webpack-plugin/node_modules/json5": {
+ "version": "2.2.3",
+ "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz",
+ "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==",
+ "dev": true,
+ "bin": {
+ "json5": "lib/cli.js"
+ },
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/tsconfig-paths-webpack-plugin/node_modules/strip-bom": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz",
+ "integrity": "sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==",
+ "dev": true,
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/tsconfig-paths-webpack-plugin/node_modules/supports-color": {
+ "version": "7.2.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
+ "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
+ "dev": true,
+ "dependencies": {
+ "has-flag": "^4.0.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/tsconfig-paths-webpack-plugin/node_modules/tsconfig-paths": {
+ "version": "4.2.0",
+ "resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-4.2.0.tgz",
+ "integrity": "sha512-NoZ4roiN7LnbKn9QqE1amc9DJfzvZXxF4xDavcOWt1BPkdx+m+0gJuPM+S0vCe7zTJMYUP0R8pO2XMr+Y8oLIg==",
+ "dev": true,
+ "dependencies": {
+ "json5": "^2.2.2",
+ "minimist": "^1.2.6",
+ "strip-bom": "^3.0.0"
+ },
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/tsconfig-paths/node_modules/strip-bom": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz",
+ "integrity": "sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==",
+ "dev": true,
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/tslib": {
"version": "2.6.2",
"resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz",
"integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==",
"optional": true
},
- "tsscmp": {
+ "node_modules/tsscmp": {
"version": "1.0.6",
"resolved": "https://registry.npmjs.org/tsscmp/-/tsscmp-1.0.6.tgz",
- "integrity": "sha512-LxhtAkPDTkVCMQjt2h6eBVY28KCjikZqZfMcC15YBeNjkgUpdCfBu5HoiOTDu86v6smE8yOjyEktJ8hlbANHQA=="
+ "integrity": "sha512-LxhtAkPDTkVCMQjt2h6eBVY28KCjikZqZfMcC15YBeNjkgUpdCfBu5HoiOTDu86v6smE8yOjyEktJ8hlbANHQA==",
+ "engines": {
+ "node": ">=0.6.x"
+ }
},
- "tsutils": {
+ "node_modules/tsutils": {
"version": "3.21.0",
"resolved": "https://registry.npmjs.org/tsutils/-/tsutils-3.21.0.tgz",
"integrity": "sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==",
"dev": true,
- "requires": {
+ "dependencies": {
"tslib": "^1.8.1"
},
- "dependencies": {
- "tslib": {
- "version": "1.14.1",
- "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz",
- "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==",
- "dev": true
- }
+ "engines": {
+ "node": ">= 6"
+ },
+ "peerDependencies": {
+ "typescript": ">=2.8.0 || >= 3.2.0-dev || >= 3.3.0-dev || >= 3.4.0-dev || >= 3.5.0-dev || >= 3.6.0-dev || >= 3.6.0-beta || >= 3.7.0-dev || >= 3.7.0-beta"
}
},
- "tsyringe": {
+ "node_modules/tsutils/node_modules/tslib": {
+ "version": "1.14.1",
+ "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz",
+ "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==",
+ "dev": true
+ },
+ "node_modules/tsyringe": {
"version": "4.8.0",
"resolved": "https://registry.npmjs.org/tsyringe/-/tsyringe-4.8.0.tgz",
"integrity": "sha512-YB1FG+axdxADa3ncEtRnQCFq/M0lALGLxSZeVNbTU8NqhOVc51nnv2CISTcvc1kyv6EGPtXVr0v6lWeDxiijOA==",
- "requires": {
+ "dependencies": {
"tslib": "^1.9.3"
},
- "dependencies": {
- "tslib": {
- "version": "1.14.1",
- "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz",
- "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg=="
- }
+ "engines": {
+ "node": ">= 6.0.0"
}
},
- "tty-browserify": {
+ "node_modules/tsyringe/node_modules/tslib": {
+ "version": "1.14.1",
+ "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz",
+ "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg=="
+ },
+ "node_modules/tty-browserify": {
"version": "0.0.0",
"resolved": "https://registry.npmjs.org/tty-browserify/-/tty-browserify-0.0.0.tgz",
"integrity": "sha512-JVa5ijo+j/sOoHGjw0sxw734b1LhBkQ3bvUGNdxnVXDCX81Yx7TFgnZygxrIIWn23hbfTaMYLwRmAxFyDuFmIw==",
"dev": true
},
- "type": {
+ "node_modules/type": {
"version": "1.2.0",
"resolved": "https://registry.npmjs.org/type/-/type-1.2.0.tgz",
"integrity": "sha512-+5nt5AAniqsCnu2cEQQdpzCAh33kVx8n0VoFidKpB1dVVLAN/F+bgVOqOJqOnEnrhp222clB5p3vUlD+1QAnfg=="
},
- "type-check": {
+ "node_modules/type-check": {
"version": "0.4.0",
"resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz",
"integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==",
"dev": true,
- "requires": {
+ "dependencies": {
"prelude-ls": "^1.2.1"
+ },
+ "engines": {
+ "node": ">= 0.8.0"
}
},
- "type-detect": {
+ "node_modules/type-detect": {
"version": "4.0.8",
"resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz",
"integrity": "sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==",
- "dev": true
+ "dev": true,
+ "engines": {
+ "node": ">=4"
+ }
},
- "type-fest": {
+ "node_modules/type-fest": {
"version": "0.13.1",
"resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.13.1.tgz",
- "integrity": "sha512-34R7HTnG0XIJcBSn5XhDd7nNFPRcXYRZrBB2O2jdKqYODldSzBAqzsWoZYYvduky73toYS/ESqxPvkDf/F0XMg=="
+ "integrity": "sha512-34R7HTnG0XIJcBSn5XhDd7nNFPRcXYRZrBB2O2jdKqYODldSzBAqzsWoZYYvduky73toYS/ESqxPvkDf/F0XMg==",
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
},
- "type-is": {
+ "node_modules/type-is": {
"version": "1.6.18",
"resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz",
"integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==",
- "requires": {
+ "dependencies": {
"media-typer": "0.3.0",
"mime-types": "~2.1.24"
+ },
+ "engines": {
+ "node": ">= 0.6"
}
},
- "typed-array-buffer": {
+ "node_modules/typed-array-buffer": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/typed-array-buffer/-/typed-array-buffer-1.0.0.tgz",
"integrity": "sha512-Y8KTSIglk9OZEr8zywiIHG/kmQ7KWyjseXs1CbSo8vC42w7hg2HgYTxSWwP0+is7bWDc1H+Fo026CpHFwm8tkw==",
"dev": true,
- "requires": {
+ "dependencies": {
"call-bind": "^1.0.2",
"get-intrinsic": "^1.2.1",
"is-typed-array": "^1.1.10"
+ },
+ "engines": {
+ "node": ">= 0.4"
}
},
- "typed-array-byte-length": {
+ "node_modules/typed-array-byte-length": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/typed-array-byte-length/-/typed-array-byte-length-1.0.0.tgz",
"integrity": "sha512-Or/+kvLxNpeQ9DtSydonMxCx+9ZXOswtwJn17SNLvhptaXYDJvkFFP5zbfU/uLmvnBJlI4yrnXRxpdWH/M5tNA==",
"dev": true,
- "requires": {
+ "dependencies": {
"call-bind": "^1.0.2",
"for-each": "^0.3.3",
"has-proto": "^1.0.1",
"is-typed-array": "^1.1.10"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
}
},
- "typed-array-byte-offset": {
+ "node_modules/typed-array-byte-offset": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/typed-array-byte-offset/-/typed-array-byte-offset-1.0.0.tgz",
"integrity": "sha512-RD97prjEt9EL8YgAgpOkf3O4IF9lhJFr9g0htQkm0rchFp/Vx7LW5Q8fSXXub7BXAODyUQohRMyOc3faCPd0hg==",
"dev": true,
- "requires": {
+ "dependencies": {
"available-typed-arrays": "^1.0.5",
"call-bind": "^1.0.2",
"for-each": "^0.3.3",
"has-proto": "^1.0.1",
"is-typed-array": "^1.1.10"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
}
},
- "typed-array-length": {
+ "node_modules/typed-array-length": {
"version": "1.0.4",
"resolved": "https://registry.npmjs.org/typed-array-length/-/typed-array-length-1.0.4.tgz",
"integrity": "sha512-KjZypGq+I/H7HI5HlOoGHkWUUGq+Q0TPhQurLbyrVrvnKTBgzLhIJ7j6J/XTQOi0d1RjyZ0wdas8bKs2p0x3Ng==",
"dev": true,
- "requires": {
+ "dependencies": {
"call-bind": "^1.0.2",
"for-each": "^0.3.3",
"is-typed-array": "^1.1.9"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
}
},
- "typed-function": {
+ "node_modules/typed-function": {
"version": "2.1.0",
"resolved": "https://registry.npmjs.org/typed-function/-/typed-function-2.1.0.tgz",
- "integrity": "sha512-bctQIOqx2iVbWGDGPWwIm18QScpu2XRmkC19D8rQGFsjKSgteq/o1hTZvIG/wuDq8fanpBDrLkLq+aEN/6y5XQ=="
+ "integrity": "sha512-bctQIOqx2iVbWGDGPWwIm18QScpu2XRmkC19D8rQGFsjKSgteq/o1hTZvIG/wuDq8fanpBDrLkLq+aEN/6y5XQ==",
+ "engines": {
+ "node": ">= 10"
+ }
},
- "typedarray": {
+ "node_modules/typedarray": {
"version": "0.0.6",
"resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz",
"integrity": "sha512-/aCDEGatGvZ2BIk+HmLf4ifCJFwvKFNb9/JeZPMulfgFracn9QFcAf5GO8B/mweUjSoblS5In0cWhqpfs/5PQA=="
},
- "typedi": {
+ "node_modules/typedi": {
"version": "0.8.0",
"resolved": "https://registry.npmjs.org/typedi/-/typedi-0.8.0.tgz",
"integrity": "sha512-/c7Bxnm6eh5kXx2I+mTuO+2OvoWni5+rXA3PhXwVWCtJRYmz3hMok5s1AKLzoDvNAZqj/Q/acGstN0ri5aQoOA=="
},
- "typescript": {
+ "node_modules/typescript": {
"version": "3.9.10",
"resolved": "https://registry.npmjs.org/typescript/-/typescript-3.9.10.tgz",
"integrity": "sha512-w6fIxVE/H1PkLKcCPsFqKE7Kv7QUwhU8qQY2MueZXWx5cPZdwFupLgKK3vntcK98BtNHZtAF4LA/yl2a7k8R6Q==",
- "dev": true
+ "bin": {
+ "tsc": "bin/tsc",
+ "tsserver": "bin/tsserver"
+ },
+ "engines": {
+ "node": ">=4.2.0"
+ }
},
- "uid-safe": {
+ "node_modules/uid-safe": {
"version": "2.1.5",
"resolved": "https://registry.npmjs.org/uid-safe/-/uid-safe-2.1.5.tgz",
"integrity": "sha512-KPHm4VL5dDXKz01UuEd88Df+KzynaohSL9fBh096KWAxSKZQDI2uBrVqtvRM4rwrIrRRKsdLNML/lnaaVSRioA==",
- "requires": {
+ "dependencies": {
"random-bytes": "~1.0.0"
+ },
+ "engines": {
+ "node": ">= 0.8"
}
},
- "unbox-primitive": {
+ "node_modules/unbox-primitive": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.2.tgz",
"integrity": "sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==",
"dev": true,
- "requires": {
+ "dependencies": {
"call-bind": "^1.0.2",
"has-bigints": "^1.0.2",
"has-symbols": "^1.0.3",
"which-boxed-primitive": "^1.0.2"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
}
},
- "unbzip2-stream": {
+ "node_modules/unbzip2-stream": {
"version": "1.3.3",
"resolved": "https://registry.npmjs.org/unbzip2-stream/-/unbzip2-stream-1.3.3.tgz",
"integrity": "sha512-fUlAF7U9Ah1Q6EieQ4x4zLNejrRvDWUYmxXUpN3uziFYCHapjWFaCAnreY9bGgxzaMCFAPPpYNng57CypwJVhg==",
- "requires": {
+ "dependencies": {
"buffer": "^5.2.1",
"through": "^2.3.8"
}
},
- "unc-path-regex": {
+ "node_modules/unc-path-regex": {
"version": "0.1.2",
"resolved": "https://registry.npmjs.org/unc-path-regex/-/unc-path-regex-0.1.2.tgz",
- "integrity": "sha512-eXL4nmJT7oCpkZsHZUOJo8hcX3GbsiDOa0Qu9F646fi8dT3XuSVopVqAcEiVzSKKH7UoDti23wNX3qGFxcW5Qg=="
+ "integrity": "sha512-eXL4nmJT7oCpkZsHZUOJo8hcX3GbsiDOa0Qu9F646fi8dT3XuSVopVqAcEiVzSKKH7UoDti23wNX3qGFxcW5Qg==",
+ "engines": {
+ "node": ">=0.10.0"
+ }
},
- "undefsafe": {
+ "node_modules/undefsafe": {
"version": "2.0.5",
"resolved": "https://registry.npmjs.org/undefsafe/-/undefsafe-2.0.5.tgz",
"integrity": "sha512-WxONCrssBM8TSPRqN5EmsjVrsv4A8X12J4ArBiiayv3DyyG3ZlIg6yysuuSYdZsVz3TKcTg2fd//Ujd4CHV1iA=="
},
- "undertaker": {
+ "node_modules/undertaker": {
"version": "1.3.0",
"resolved": "https://registry.npmjs.org/undertaker/-/undertaker-1.3.0.tgz",
"integrity": "sha512-/RXwi5m/Mu3H6IHQGww3GNt1PNXlbeCuclF2QYR14L/2CHPz3DFZkvB5hZ0N/QUkiXWCACML2jXViIQEQc2MLg==",
- "requires": {
+ "dependencies": {
"arr-flatten": "^1.0.1",
"arr-map": "^2.0.0",
"bach": "^1.0.0",
@@ -12791,119 +16594,169 @@
"object.defaults": "^1.0.0",
"object.reduce": "^1.0.0",
"undertaker-registry": "^1.0.0"
+ },
+ "engines": {
+ "node": ">= 0.10"
}
},
- "undertaker-registry": {
+ "node_modules/undertaker-registry": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/undertaker-registry/-/undertaker-registry-1.0.1.tgz",
- "integrity": "sha512-UR1khWeAjugW3548EfQmL9Z7pGMlBgXteQpr1IZeZBtnkCJQJIJ1Scj0mb9wQaPvUZ9Q17XqW6TIaPchJkyfqw=="
+ "integrity": "sha512-UR1khWeAjugW3548EfQmL9Z7pGMlBgXteQpr1IZeZBtnkCJQJIJ1Scj0mb9wQaPvUZ9Q17XqW6TIaPchJkyfqw==",
+ "engines": {
+ "node": ">= 0.10"
+ }
},
- "union-value": {
+ "node_modules/union-value": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/union-value/-/union-value-1.0.1.tgz",
"integrity": "sha512-tJfXmxMeWYnczCVs7XAEvIV7ieppALdyepWMkHkwciRpZraG/xwT+s2JN8+pr1+8jCRf80FFzvr+MpQeeoF4Xg==",
- "requires": {
+ "dependencies": {
"arr-union": "^3.1.0",
"get-value": "^2.0.6",
"is-extendable": "^0.1.1",
"set-value": "^2.0.1"
+ },
+ "engines": {
+ "node": ">=0.10.0"
}
},
- "uniqid": {
+ "node_modules/uniqid": {
"version": "5.4.0",
"resolved": "https://registry.npmjs.org/uniqid/-/uniqid-5.4.0.tgz",
"integrity": "sha512-38JRbJ4Fj94VmnC7G/J/5n5SC7Ab46OM5iNtSstB/ko3l1b5g7ALt4qzHFgGciFkyiRNtDXtLNb+VsxtMSE77A=="
},
- "unique-stream": {
+ "node_modules/unique-stream": {
"version": "2.3.1",
"resolved": "https://registry.npmjs.org/unique-stream/-/unique-stream-2.3.1.tgz",
"integrity": "sha512-2nY4TnBE70yoxHkDli7DMazpWiP7xMdCYqU2nBRO0UB+ZpEkGsSija7MvmvnZFUeC+mrgiUfcHSr3LmRFIg4+A==",
- "requires": {
+ "dependencies": {
"json-stable-stringify-without-jsonify": "^1.0.1",
"through2-filter": "^3.0.0"
}
},
- "unique-string": {
+ "node_modules/unique-string": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/unique-string/-/unique-string-1.0.0.tgz",
"integrity": "sha512-ODgiYu03y5g76A1I9Gt0/chLCzQjvzDy7DsZGsLOE/1MrF6wriEskSncj1+/C58Xk/kPZDppSctDybCwOSaGAg==",
- "requires": {
+ "dependencies": {
"crypto-random-string": "^1.0.0"
},
- "dependencies": {
- "crypto-random-string": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/crypto-random-string/-/crypto-random-string-1.0.0.tgz",
- "integrity": "sha512-GsVpkFPlycH7/fRR7Dhcmnoii54gV1nz7y4CWyeFS14N+JVBBhY+r8amRHE4BwSYal7BPTDp8isvAlCxyFt3Hg=="
- }
+ "engines": {
+ "node": ">=4"
}
},
- "unpipe": {
+ "node_modules/unique-string/node_modules/crypto-random-string": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/crypto-random-string/-/crypto-random-string-1.0.0.tgz",
+ "integrity": "sha512-GsVpkFPlycH7/fRR7Dhcmnoii54gV1nz7y4CWyeFS14N+JVBBhY+r8amRHE4BwSYal7BPTDp8isvAlCxyFt3Hg==",
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/unpipe": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz",
- "integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ=="
+ "integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==",
+ "engines": {
+ "node": ">= 0.8"
+ }
},
- "unset-value": {
+ "node_modules/unset-value": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/unset-value/-/unset-value-1.0.0.tgz",
"integrity": "sha512-PcA2tsuGSF9cnySLHTLSh2qrQiJ70mn+r+Glzxv2TWZblxsxCC52BDlZoPCsz7STd9pN7EZetkWZBAvk4cgZdQ==",
- "requires": {
+ "dependencies": {
"has-value": "^0.3.1",
"isobject": "^3.0.0"
},
- "dependencies": {
- "has-value": {
- "version": "0.3.1",
- "resolved": "https://registry.npmjs.org/has-value/-/has-value-0.3.1.tgz",
- "integrity": "sha512-gpG936j8/MzaeID5Yif+577c17TxaDmhuyVgSwtnL/q8UUTySg8Mecb+8Cf1otgLoD7DDH75axp86ER7LFsf3Q==",
- "requires": {
- "get-value": "^2.0.3",
- "has-values": "^0.1.4",
- "isobject": "^2.0.0"
- },
- "dependencies": {
- "isobject": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz",
- "integrity": "sha512-+OUdGJlgjOBZDfxnDjYYG6zp487z0JGNQq3cYQYg5f5hKR+syHMsaztzGeml/4kGG55CSpKSpWTY+jYGgsHLgA==",
- "requires": {
- "isarray": "1.0.0"
- }
- }
- }
- },
- "has-values": {
- "version": "0.1.4",
- "resolved": "https://registry.npmjs.org/has-values/-/has-values-0.1.4.tgz",
- "integrity": "sha512-J8S0cEdWuQbqD9//tlZxiMuMNmxB8PlEwvYwuxsTmR1G5RXUePEX/SJn7aD0GMLieuZYSwNH0cQuJGwnYunXRQ=="
- }
+ "engines": {
+ "node": ">=0.10.0"
}
},
- "unzip-response": {
+ "node_modules/unset-value/node_modules/has-value": {
+ "version": "0.3.1",
+ "resolved": "https://registry.npmjs.org/has-value/-/has-value-0.3.1.tgz",
+ "integrity": "sha512-gpG936j8/MzaeID5Yif+577c17TxaDmhuyVgSwtnL/q8UUTySg8Mecb+8Cf1otgLoD7DDH75axp86ER7LFsf3Q==",
+ "dependencies": {
+ "get-value": "^2.0.3",
+ "has-values": "^0.1.4",
+ "isobject": "^2.0.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/unset-value/node_modules/has-value/node_modules/isobject": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz",
+ "integrity": "sha512-+OUdGJlgjOBZDfxnDjYYG6zp487z0JGNQq3cYQYg5f5hKR+syHMsaztzGeml/4kGG55CSpKSpWTY+jYGgsHLgA==",
+ "dependencies": {
+ "isarray": "1.0.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/unset-value/node_modules/has-values": {
+ "version": "0.1.4",
+ "resolved": "https://registry.npmjs.org/has-values/-/has-values-0.1.4.tgz",
+ "integrity": "sha512-J8S0cEdWuQbqD9//tlZxiMuMNmxB8PlEwvYwuxsTmR1G5RXUePEX/SJn7aD0GMLieuZYSwNH0cQuJGwnYunXRQ==",
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/unzip-response": {
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/unzip-response/-/unzip-response-2.0.1.tgz",
- "integrity": "sha512-N0XH6lqDtFH84JxptQoZYmloF4nzrQqqrAymNj+/gW60AO2AZgOcf4O/nUXJcYfyQkqvMo9lSupBZmmgvuVXlw=="
+ "integrity": "sha512-N0XH6lqDtFH84JxptQoZYmloF4nzrQqqrAymNj+/gW60AO2AZgOcf4O/nUXJcYfyQkqvMo9lSupBZmmgvuVXlw==",
+ "engines": {
+ "node": ">=4"
+ }
},
- "upath": {
+ "node_modules/upath": {
"version": "1.2.0",
"resolved": "https://registry.npmjs.org/upath/-/upath-1.2.0.tgz",
- "integrity": "sha512-aZwGpamFO61g3OlfT7OQCHqhGnW43ieH9WZeP7QxN/G/jS4jfqUkZxoryvJgVPEcrl5NL/ggHsSmLMHuH64Lhg=="
+ "integrity": "sha512-aZwGpamFO61g3OlfT7OQCHqhGnW43ieH9WZeP7QxN/G/jS4jfqUkZxoryvJgVPEcrl5NL/ggHsSmLMHuH64Lhg==",
+ "engines": {
+ "node": ">=4",
+ "yarn": "*"
+ }
},
- "update-browserslist-db": {
+ "node_modules/update-browserslist-db": {
"version": "1.0.13",
"resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.13.tgz",
"integrity": "sha512-xebP81SNcPuNpPP3uzeW1NYXxI3rxyJzF3pD6sH4jE7o/IX+WtSpwnVU+qIsDPyk0d3hmFQ7mjqc6AtV604hbg==",
- "dev": true,
- "requires": {
+ "funding": [
+ {
+ "type": "opencollective",
+ "url": "https://opencollective.com/browserslist"
+ },
+ {
+ "type": "tidelift",
+ "url": "https://tidelift.com/funding/github/npm/browserslist"
+ },
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/ai"
+ }
+ ],
+ "dependencies": {
"escalade": "^3.1.1",
"picocolors": "^1.0.0"
+ },
+ "bin": {
+ "update-browserslist-db": "cli.js"
+ },
+ "peerDependencies": {
+ "browserslist": ">= 4.21.0"
}
},
- "update-notifier": {
+ "node_modules/update-notifier": {
"version": "2.5.0",
"resolved": "https://registry.npmjs.org/update-notifier/-/update-notifier-2.5.0.tgz",
"integrity": "sha512-gwMdhgJHGuj/+wHJJs9e6PcCszpxR1b236igrOkUofGhqJuG+amlIKwApH1IW1WWl7ovZxsX49lMBWLxSdm5Dw==",
- "requires": {
+ "dependencies": {
"boxen": "^1.2.1",
"chalk": "^2.0.1",
"configstore": "^3.0.0",
@@ -12914,144 +16767,177 @@
"latest-version": "^3.0.0",
"semver-diff": "^2.0.0",
"xdg-basedir": "^3.0.0"
+ },
+ "engines": {
+ "node": ">=4"
}
},
- "uri-js": {
+ "node_modules/uri-js": {
"version": "4.4.1",
"resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz",
"integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==",
- "requires": {
+ "dependencies": {
"punycode": "^2.1.0"
}
},
- "urix": {
+ "node_modules/urix": {
"version": "0.1.0",
"resolved": "https://registry.npmjs.org/urix/-/urix-0.1.0.tgz",
- "integrity": "sha512-Am1ousAhSLBeB9cG/7k7r2R0zj50uDRlZHPGbazid5s9rlF1F/QKYObEKSIunSjIOkJZqwRRLpvewjEkM7pSqg=="
+ "integrity": "sha512-Am1ousAhSLBeB9cG/7k7r2R0zj50uDRlZHPGbazid5s9rlF1F/QKYObEKSIunSjIOkJZqwRRLpvewjEkM7pSqg==",
+ "deprecated": "Please see https://github.com/lydell/urix#deprecated"
},
- "url": {
+ "node_modules/url": {
"version": "0.11.3",
"resolved": "https://registry.npmjs.org/url/-/url-0.11.3.tgz",
"integrity": "sha512-6hxOLGfZASQK/cijlZnZJTq8OXAkt/3YGfQX45vvMYXpZoo8NdWZcY73K108Jf759lS1Bv/8wXnHDTSz17dSRw==",
"dev": true,
- "requires": {
+ "dependencies": {
"punycode": "^1.4.1",
"qs": "^6.11.2"
- },
- "dependencies": {
- "punycode": {
- "version": "1.4.1",
- "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz",
- "integrity": "sha512-jmYNElW7yvO7TV33CjSmvSiE2yco3bV2czu/OzDKdMNVZQWfxCblURLhf+47syQRBntjfLdd/H0egrzIG+oaFQ==",
- "dev": true
- },
- "qs": {
- "version": "6.11.2",
- "resolved": "https://registry.npmjs.org/qs/-/qs-6.11.2.tgz",
- "integrity": "sha512-tDNIz22aBzCDxLtVH++VnTfzxlfeK5CbqohpSqpJgj1Wg/cQbStNAz3NuqCs5vV+pjBsK4x4pN9HlVh7rcYRiA==",
- "dev": true,
- "requires": {
- "side-channel": "^1.0.4"
- }
- }
}
},
- "url-parse-lax": {
+ "node_modules/url-parse-lax": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/url-parse-lax/-/url-parse-lax-1.0.0.tgz",
"integrity": "sha512-BVA4lR5PIviy2PMseNd2jbFQ+jwSwQGdJejf5ctd1rEXt0Ypd7yanUK9+lYechVlN5VaTJGsu2U/3MDDu6KgBA==",
- "requires": {
+ "dependencies": {
"prepend-http": "^1.0.1"
+ },
+ "engines": {
+ "node": ">=0.10.0"
}
},
- "use": {
+ "node_modules/url/node_modules/punycode": {
+ "version": "1.4.1",
+ "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz",
+ "integrity": "sha512-jmYNElW7yvO7TV33CjSmvSiE2yco3bV2czu/OzDKdMNVZQWfxCblURLhf+47syQRBntjfLdd/H0egrzIG+oaFQ==",
+ "dev": true
+ },
+ "node_modules/url/node_modules/qs": {
+ "version": "6.11.2",
+ "resolved": "https://registry.npmjs.org/qs/-/qs-6.11.2.tgz",
+ "integrity": "sha512-tDNIz22aBzCDxLtVH++VnTfzxlfeK5CbqohpSqpJgj1Wg/cQbStNAz3NuqCs5vV+pjBsK4x4pN9HlVh7rcYRiA==",
+ "dev": true,
+ "dependencies": {
+ "side-channel": "^1.0.4"
+ },
+ "engines": {
+ "node": ">=0.6"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/use": {
"version": "3.1.1",
"resolved": "https://registry.npmjs.org/use/-/use-3.1.1.tgz",
- "integrity": "sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ=="
+ "integrity": "sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ==",
+ "engines": {
+ "node": ">=0.10.0"
+ }
},
- "util": {
+ "node_modules/util": {
"version": "0.11.1",
"resolved": "https://registry.npmjs.org/util/-/util-0.11.1.tgz",
"integrity": "sha512-HShAsny+zS2TZfaXxD9tYj4HQGlBezXZMZuM/S5PKLLoZkShZiGk9o5CzukI1LVHZvjdvZ2Sj1aW/Ndn2NB/HQ==",
"dev": true,
- "requires": {
- "inherits": "2.0.3"
- },
"dependencies": {
- "inherits": {
- "version": "2.0.3",
- "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz",
- "integrity": "sha512-x00IRNXNy63jwGkJmzPigoySHbaqpNuzKbBOmzK+g2OdZpQ9w+sxCN+VSB3ja7IAge2OP2qpfxTjeNcyjmW1uw==",
- "dev": true
- }
+ "inherits": "2.0.3"
}
},
- "util-deprecate": {
+ "node_modules/util-deprecate": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz",
"integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw=="
},
- "utils-merge": {
+ "node_modules/util/node_modules/inherits": {
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz",
+ "integrity": "sha512-x00IRNXNy63jwGkJmzPigoySHbaqpNuzKbBOmzK+g2OdZpQ9w+sxCN+VSB3ja7IAge2OP2qpfxTjeNcyjmW1uw==",
+ "dev": true
+ },
+ "node_modules/utils-merge": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz",
- "integrity": "sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA=="
+ "integrity": "sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==",
+ "engines": {
+ "node": ">= 0.4.0"
+ }
},
- "uuid": {
+ "node_modules/uuid": {
"version": "8.3.2",
"resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz",
"integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==",
- "optional": true
+ "optional": true,
+ "bin": {
+ "uuid": "dist/bin/uuid"
+ }
},
- "v8flags": {
+ "node_modules/v8flags": {
"version": "3.2.0",
"resolved": "https://registry.npmjs.org/v8flags/-/v8flags-3.2.0.tgz",
"integrity": "sha512-mH8etigqMfiGWdeXpaaqGfs6BndypxusHHcv2qSHyZkGEznCd/qAXCWWRzeowtL54147cktFOC4P5y+kl8d8Jg==",
- "requires": {
+ "dependencies": {
"homedir-polyfill": "^1.0.1"
+ },
+ "engines": {
+ "node": ">= 0.10"
}
},
- "validate-npm-package-license": {
+ "node_modules/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==",
- "requires": {
+ "dependencies": {
"spdx-correct": "^3.0.0",
"spdx-expression-parse": "^3.0.0"
}
},
- "validator": {
+ "node_modules/validator": {
"version": "13.11.0",
"resolved": "https://registry.npmjs.org/validator/-/validator-13.11.0.tgz",
- "integrity": "sha512-Ii+sehpSfZy+At5nPdnyMhx78fEoPDkR2XW/zimHEL3MyGJQOCQ7WeP20jPYRz7ZCpcKLB21NxuXHF3bxjStBQ=="
+ "integrity": "sha512-Ii+sehpSfZy+At5nPdnyMhx78fEoPDkR2XW/zimHEL3MyGJQOCQ7WeP20jPYRz7ZCpcKLB21NxuXHF3bxjStBQ==",
+ "engines": {
+ "node": ">= 0.10"
+ }
},
- "value-or-function": {
+ "node_modules/value-or-function": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/value-or-function/-/value-or-function-3.0.0.tgz",
- "integrity": "sha512-jdBB2FrWvQC/pnPtIqcLsMaQgjhdb6B7tk1MMyTKapox+tQZbdRP4uLxu/JY0t7fbfDCUMnuelzEYv5GsxHhdg=="
+ "integrity": "sha512-jdBB2FrWvQC/pnPtIqcLsMaQgjhdb6B7tk1MMyTKapox+tQZbdRP4uLxu/JY0t7fbfDCUMnuelzEYv5GsxHhdg==",
+ "engines": {
+ "node": ">= 0.10"
+ }
},
- "vary": {
+ "node_modules/vary": {
"version": "1.1.2",
"resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz",
- "integrity": "sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg=="
+ "integrity": "sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==",
+ "engines": {
+ "node": ">= 0.8"
+ }
},
- "vinyl": {
+ "node_modules/vinyl": {
"version": "2.2.1",
"resolved": "https://registry.npmjs.org/vinyl/-/vinyl-2.2.1.tgz",
"integrity": "sha512-LII3bXRFBZLlezoG5FfZVcXflZgWP/4dCwKtxd5ky9+LOtM4CS3bIRQsmR1KMnMW07jpE8fqR2lcxPZ+8sJIcw==",
- "requires": {
+ "dependencies": {
"clone": "^2.1.1",
"clone-buffer": "^1.0.0",
"clone-stats": "^1.0.0",
"cloneable-readable": "^1.0.0",
"remove-trailing-separator": "^1.0.1",
"replace-ext": "^1.0.0"
+ },
+ "engines": {
+ "node": ">= 0.10"
}
},
- "vinyl-fs": {
+ "node_modules/vinyl-fs": {
"version": "3.0.3",
"resolved": "https://registry.npmjs.org/vinyl-fs/-/vinyl-fs-3.0.3.tgz",
"integrity": "sha512-vIu34EkyNyJxmP0jscNzWBSygh7VWhqun6RmqVfXePrOwi9lhvRs//dOaGOTRUQr4tx7/zd26Tk5WeSVZitgng==",
- "requires": {
+ "dependencies": {
"fs-mkdirp-stream": "^1.0.0",
"glob-stream": "^6.1.0",
"graceful-fs": "^4.0.0",
@@ -13069,13 +16955,16 @@
"value-or-function": "^3.0.0",
"vinyl": "^2.0.0",
"vinyl-sourcemap": "^1.1.0"
+ },
+ "engines": {
+ "node": ">= 0.10"
}
},
- "vinyl-sourcemap": {
+ "node_modules/vinyl-sourcemap": {
"version": "1.1.0",
"resolved": "https://registry.npmjs.org/vinyl-sourcemap/-/vinyl-sourcemap-1.1.0.tgz",
"integrity": "sha512-NiibMgt6VJGJmyw7vtzhctDcfKch4e4n9TBeoWlirb7FMg9/1Ov9k+A5ZRAtywBpRPiyECvQRQllYM8dECegVA==",
- "requires": {
+ "dependencies": {
"append-buffer": "^1.0.2",
"convert-source-map": "^1.5.0",
"graceful-fs": "^4.1.6",
@@ -13084,65 +16973,73 @@
"remove-bom-buffer": "^3.0.0",
"vinyl": "^2.0.0"
},
- "dependencies": {
- "normalize-path": {
- "version": "2.1.1",
- "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz",
- "integrity": "sha512-3pKJwH184Xo/lnH6oyP1q2pMd7HcypqqmRs91/6/i2CGtWwIKGCkOOMTm/zXbgTEWHw1uNpNi/igc3ePOYHb6w==",
- "requires": {
- "remove-trailing-separator": "^1.0.1"
- }
- }
+ "engines": {
+ "node": ">= 0.10"
}
},
- "vinyl-sourcemaps-apply": {
+ "node_modules/vinyl-sourcemap/node_modules/normalize-path": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz",
+ "integrity": "sha512-3pKJwH184Xo/lnH6oyP1q2pMd7HcypqqmRs91/6/i2CGtWwIKGCkOOMTm/zXbgTEWHw1uNpNi/igc3ePOYHb6w==",
+ "dependencies": {
+ "remove-trailing-separator": "^1.0.1"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/vinyl-sourcemaps-apply": {
"version": "0.2.1",
"resolved": "https://registry.npmjs.org/vinyl-sourcemaps-apply/-/vinyl-sourcemaps-apply-0.2.1.tgz",
"integrity": "sha512-+oDh3KYZBoZC8hfocrbrxbLUeaYtQK7J5WU5Br9VqWqmCll3tFJqKp97GC9GmMsVIL0qnx2DgEDVxdo5EZ5sSw==",
- "requires": {
+ "dependencies": {
"source-map": "^0.5.1"
}
},
- "vm-browserify": {
+ "node_modules/vm-browserify": {
"version": "1.1.2",
"resolved": "https://registry.npmjs.org/vm-browserify/-/vm-browserify-1.1.2.tgz",
"integrity": "sha512-2ham8XPWTONajOR0ohOKOHXkm3+gaBmGut3SRuu75xLd/RRaY6vqgh8NBYYk7+RW3u5AtzPQZG8F10LHkl0lAQ==",
"dev": true
},
- "void-elements": {
+ "node_modules/void-elements": {
"version": "3.1.0",
"resolved": "https://registry.npmjs.org/void-elements/-/void-elements-3.1.0.tgz",
- "integrity": "sha512-Dhxzh5HZuiHQhbvTW9AMetFfBHDMYpo23Uo9btPXgdYP+3T5S+p+jgNy7spra+veYhBP2dCSgxR/i2Y02h5/6w=="
+ "integrity": "sha512-Dhxzh5HZuiHQhbvTW9AMetFfBHDMYpo23Uo9btPXgdYP+3T5S+p+jgNy7spra+veYhBP2dCSgxR/i2Y02h5/6w==",
+ "engines": {
+ "node": ">=0.10.0"
+ }
},
- "watchpack": {
+ "node_modules/watchpack": {
"version": "2.4.0",
"resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.4.0.tgz",
"integrity": "sha512-Lcvm7MGST/4fup+ifyKi2hjyIAwcdI4HRgtvTpIUxBRhB+RFtUh8XtDOxUfctVCnhVi+QQj49i91OyvzkJl6cg==",
- "dev": true,
- "requires": {
+ "dependencies": {
"glob-to-regexp": "^0.4.1",
"graceful-fs": "^4.1.2"
},
- "dependencies": {
- "glob-to-regexp": {
- "version": "0.4.1",
- "resolved": "https://registry.npmjs.org/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz",
- "integrity": "sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==",
- "dev": true
- }
+ "engines": {
+ "node": ">=10.13.0"
}
},
- "webidl-conversions": {
+ "node_modules/watchpack/node_modules/glob-to-regexp": {
+ "version": "0.4.1",
+ "resolved": "https://registry.npmjs.org/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz",
+ "integrity": "sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw=="
+ },
+ "node_modules/webidl-conversions": {
"version": "7.0.0",
"resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-7.0.0.tgz",
- "integrity": "sha512-VwddBukDzu71offAQR975unBIGqfKZpM+8ZX6ySk8nYhVoo5CYaZyzt3YBvYtRtO+aoGlqxPg/B87NGVZ/fu6g=="
+ "integrity": "sha512-VwddBukDzu71offAQR975unBIGqfKZpM+8ZX6ySk8nYhVoo5CYaZyzt3YBvYtRtO+aoGlqxPg/B87NGVZ/fu6g==",
+ "engines": {
+ "node": ">=12"
+ }
},
- "webpack": {
+ "node_modules/webpack": {
"version": "5.88.2",
"resolved": "https://registry.npmjs.org/webpack/-/webpack-5.88.2.tgz",
"integrity": "sha512-JmcgNZ1iKj+aiR0OvTYtWQqJwq37Pf683dY9bVORwVbUrDhLhdn/PlO2sHsFHPkj7sHNQF3JwaAkp49V+Sq1tQ==",
- "dev": true,
- "requires": {
+ "dependencies": {
"@types/eslint-scope": "^3.7.3",
"@types/estree": "^1.0.0",
"@webassemblyjs/ast": "^1.11.5",
@@ -13168,62 +17065,28 @@
"watchpack": "^2.4.0",
"webpack-sources": "^3.2.3"
},
- "dependencies": {
- "acorn": {
- "version": "8.10.0",
- "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.10.0.tgz",
- "integrity": "sha512-F0SAmZ8iUtS//m8DmCTA0jlh6TDKkHQyK6xc6V4KDTyZKA9dnvX9/3sRTVQrWm79glUAZbnmmNcdYwUIHWVybw==",
- "dev": true
- },
- "ajv": {
- "version": "6.12.6",
- "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz",
- "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==",
- "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"
- }
- },
- "ajv-keywords": {
- "version": "3.5.2",
- "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz",
- "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==",
- "dev": true
- },
- "glob-to-regexp": {
- "version": "0.4.1",
- "resolved": "https://registry.npmjs.org/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz",
- "integrity": "sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==",
- "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
- },
- "schema-utils": {
- "version": "3.3.0",
- "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.3.0.tgz",
- "integrity": "sha512-pN/yOAvcC+5rQ5nERGuwrjLlYvLTbCibnZ1I7B1LaiAz9BRBlE9GMgE/eqV30P7aJQUf7Ddimy/RsbYO/GrVGg==",
- "dev": true,
- "requires": {
- "@types/json-schema": "^7.0.8",
- "ajv": "^6.12.5",
- "ajv-keywords": "^3.5.2"
- }
+ "bin": {
+ "webpack": "bin/webpack.js"
+ },
+ "engines": {
+ "node": ">=10.13.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/webpack"
+ },
+ "peerDependenciesMeta": {
+ "webpack-cli": {
+ "optional": true
}
}
},
- "webpack-cli": {
+ "node_modules/webpack-cli": {
"version": "4.10.0",
"resolved": "https://registry.npmjs.org/webpack-cli/-/webpack-cli-4.10.0.tgz",
"integrity": "sha512-NLhDfH/h4O6UOy+0LSso42xvYypClINuMNBVVzX4vX98TmTaTUxwRbXdhucbFMd2qLaCTcLq/PdYrvi8onw90w==",
"dev": true,
- "requires": {
+ "dependencies": {
"@discoveryjs/json-ext": "^0.5.0",
"@webpack-cli/configtest": "^1.2.0",
"@webpack-cli/info": "^1.5.0",
@@ -13237,189 +17100,332 @@
"rechoir": "^0.7.0",
"webpack-merge": "^5.7.3"
},
- "dependencies": {
- "colorette": {
- "version": "2.0.20",
- "resolved": "https://registry.npmjs.org/colorette/-/colorette-2.0.20.tgz",
- "integrity": "sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w==",
- "dev": true
+ "bin": {
+ "webpack-cli": "bin/cli.js"
+ },
+ "engines": {
+ "node": ">=10.13.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/webpack"
+ },
+ "peerDependencies": {
+ "webpack": "4.x.x || 5.x.x"
+ },
+ "peerDependenciesMeta": {
+ "@webpack-cli/generators": {
+ "optional": true
},
- "commander": {
- "version": "7.2.0",
- "resolved": "https://registry.npmjs.org/commander/-/commander-7.2.0.tgz",
- "integrity": "sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==",
- "dev": true
+ "@webpack-cli/migrate": {
+ "optional": true
},
- "cross-spawn": {
- "version": "7.0.3",
- "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz",
- "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==",
- "dev": true,
- "requires": {
- "path-key": "^3.1.0",
- "shebang-command": "^2.0.0",
- "which": "^2.0.1"
- }
+ "webpack-bundle-analyzer": {
+ "optional": true
},
- "path-key": {
- "version": "3.1.1",
- "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz",
- "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==",
- "dev": true
- },
- "shebang-command": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz",
- "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==",
- "dev": true,
- "requires": {
- "shebang-regex": "^3.0.0"
- }
- },
- "shebang-regex": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz",
- "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==",
- "dev": true
- },
- "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"
- }
+ "webpack-dev-server": {
+ "optional": true
}
}
},
- "webpack-merge": {
+ "node_modules/webpack-cli/node_modules/colorette": {
+ "version": "2.0.20",
+ "resolved": "https://registry.npmjs.org/colorette/-/colorette-2.0.20.tgz",
+ "integrity": "sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w==",
+ "dev": true
+ },
+ "node_modules/webpack-cli/node_modules/commander": {
+ "version": "7.2.0",
+ "resolved": "https://registry.npmjs.org/commander/-/commander-7.2.0.tgz",
+ "integrity": "sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==",
+ "dev": true,
+ "engines": {
+ "node": ">= 10"
+ }
+ },
+ "node_modules/webpack-cli/node_modules/cross-spawn": {
+ "version": "7.0.3",
+ "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz",
+ "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==",
+ "dev": true,
+ "dependencies": {
+ "path-key": "^3.1.0",
+ "shebang-command": "^2.0.0",
+ "which": "^2.0.1"
+ },
+ "engines": {
+ "node": ">= 8"
+ }
+ },
+ "node_modules/webpack-cli/node_modules/path-key": {
+ "version": "3.1.1",
+ "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz",
+ "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==",
+ "dev": true,
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/webpack-cli/node_modules/shebang-command": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz",
+ "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==",
+ "dev": true,
+ "dependencies": {
+ "shebang-regex": "^3.0.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/webpack-cli/node_modules/shebang-regex": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz",
+ "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==",
+ "dev": true,
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/webpack-cli/node_modules/which": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz",
+ "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==",
+ "dev": true,
+ "dependencies": {
+ "isexe": "^2.0.0"
+ },
+ "bin": {
+ "node-which": "bin/node-which"
+ },
+ "engines": {
+ "node": ">= 8"
+ }
+ },
+ "node_modules/webpack-merge": {
"version": "5.9.0",
"resolved": "https://registry.npmjs.org/webpack-merge/-/webpack-merge-5.9.0.tgz",
"integrity": "sha512-6NbRQw4+Sy50vYNTw7EyOn41OZItPiXB8GNv3INSoe3PSFaHJEz3SHTrYVaRm2LilNGnFUzh0FAwqPEmU/CwDg==",
"dev": true,
- "requires": {
+ "dependencies": {
"clone-deep": "^4.0.1",
"wildcard": "^2.0.0"
+ },
+ "engines": {
+ "node": ">=10.0.0"
}
},
- "webpack-node-externals": {
+ "node_modules/webpack-node-externals": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/webpack-node-externals/-/webpack-node-externals-3.0.0.tgz",
"integrity": "sha512-LnL6Z3GGDPht/AigwRh2dvL9PQPFQ8skEpVrWZXLWBYmqcaojHNN0onvHzie6rq7EWKrrBfPYqNEzTJgiwEQDQ==",
- "dev": true
+ "dev": true,
+ "engines": {
+ "node": ">=6"
+ }
},
- "webpack-sources": {
+ "node_modules/webpack-sources": {
"version": "3.2.3",
"resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-3.2.3.tgz",
"integrity": "sha512-/DyMEOrDgLKKIG0fmvtz+4dUX/3Ghozwgm6iPp8KRhvn+eQf9+Q7GWxVNMk3+uCPWfdXYC4ExGBckIXdFEfH1w==",
- "dev": true
+ "engines": {
+ "node": ">=10.13.0"
+ }
},
- "webpack-watch-changed": {
+ "node_modules/webpack-watch-changed": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/webpack-watch-changed/-/webpack-watch-changed-1.0.0.tgz",
"integrity": "sha512-CYreNkGzQxRW5mKpij9Mnh/WXSRn9wM9fW16SAD9Gu8yQzdmbk3wVarbnrOl5v90dwWFWIVXPHA+4Z3VjJRHYQ==",
"dev": true,
- "requires": {
+ "dependencies": {
"chalk": "^2.4.2"
}
},
- "whatwg-url": {
+ "node_modules/webpack/node_modules/acorn": {
+ "version": "8.10.0",
+ "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.10.0.tgz",
+ "integrity": "sha512-F0SAmZ8iUtS//m8DmCTA0jlh6TDKkHQyK6xc6V4KDTyZKA9dnvX9/3sRTVQrWm79glUAZbnmmNcdYwUIHWVybw==",
+ "bin": {
+ "acorn": "bin/acorn"
+ },
+ "engines": {
+ "node": ">=0.4.0"
+ }
+ },
+ "node_modules/webpack/node_modules/ajv": {
+ "version": "6.12.6",
+ "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz",
+ "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==",
+ "dependencies": {
+ "fast-deep-equal": "^3.1.1",
+ "fast-json-stable-stringify": "^2.0.0",
+ "json-schema-traverse": "^0.4.1",
+ "uri-js": "^4.2.2"
+ },
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/epoberezkin"
+ }
+ },
+ "node_modules/webpack/node_modules/ajv-keywords": {
+ "version": "3.5.2",
+ "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz",
+ "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==",
+ "peerDependencies": {
+ "ajv": "^6.9.1"
+ }
+ },
+ "node_modules/webpack/node_modules/glob-to-regexp": {
+ "version": "0.4.1",
+ "resolved": "https://registry.npmjs.org/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz",
+ "integrity": "sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw=="
+ },
+ "node_modules/webpack/node_modules/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=="
+ },
+ "node_modules/webpack/node_modules/schema-utils": {
+ "version": "3.3.0",
+ "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.3.0.tgz",
+ "integrity": "sha512-pN/yOAvcC+5rQ5nERGuwrjLlYvLTbCibnZ1I7B1LaiAz9BRBlE9GMgE/eqV30P7aJQUf7Ddimy/RsbYO/GrVGg==",
+ "dependencies": {
+ "@types/json-schema": "^7.0.8",
+ "ajv": "^6.12.5",
+ "ajv-keywords": "^3.5.2"
+ },
+ "engines": {
+ "node": ">= 10.13.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/webpack"
+ }
+ },
+ "node_modules/whatwg-url": {
"version": "11.0.0",
"resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-11.0.0.tgz",
"integrity": "sha512-RKT8HExMpoYx4igMiVMY83lN6UeITKJlBQ+vR/8ZJ8OCdSiN3RwCq+9gH0+Xzj0+5IrM6i4j/6LuvzbZIQgEcQ==",
- "requires": {
+ "dependencies": {
"tr46": "^3.0.0",
"webidl-conversions": "^7.0.0"
+ },
+ "engines": {
+ "node": ">=12"
}
},
- "which": {
+ "node_modules/which": {
"version": "1.3.1",
"resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz",
"integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==",
- "requires": {
+ "dependencies": {
"isexe": "^2.0.0"
+ },
+ "bin": {
+ "which": "bin/which"
}
},
- "which-boxed-primitive": {
+ "node_modules/which-boxed-primitive": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz",
"integrity": "sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==",
"dev": true,
- "requires": {
+ "dependencies": {
"is-bigint": "^1.0.1",
"is-boolean-object": "^1.1.0",
"is-number-object": "^1.0.4",
"is-string": "^1.0.5",
"is-symbol": "^1.0.3"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
}
},
- "which-module": {
+ "node_modules/which-module": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/which-module/-/which-module-1.0.0.tgz",
"integrity": "sha512-F6+WgncZi/mJDrammbTuHe1q0R5hOXv/mBaiNA2TCNT/LTHusX0V+CJnj9XT8ki5ln2UZyyddDgHfCzyrOH7MQ=="
},
- "which-typed-array": {
+ "node_modules/which-typed-array": {
"version": "1.1.11",
"resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.11.tgz",
"integrity": "sha512-qe9UWWpkeG5yzZ0tNYxDmd7vo58HDBc39mZ0xWWpolAGADdFOzkfamWLDxkOWcvHQKVmdTyQdLD4NOfjLWTKew==",
"dev": true,
- "requires": {
+ "dependencies": {
"available-typed-arrays": "^1.0.5",
"call-bind": "^1.0.2",
"for-each": "^0.3.3",
"gopd": "^1.0.1",
"has-tostringtag": "^1.0.0"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
}
},
- "widest-line": {
+ "node_modules/widest-line": {
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/widest-line/-/widest-line-2.0.1.tgz",
"integrity": "sha512-Ba5m9/Fa4Xt9eb2ELXt77JxVDV8w7qQrH0zS/TWSJdLyAwQjWoOzpzj5lwVftDz6n/EOu3tNACS84v509qwnJA==",
- "requires": {
+ "dependencies": {
"string-width": "^2.1.1"
},
- "dependencies": {
- "ansi-regex": {
- "version": "3.0.1",
- "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.1.tgz",
- "integrity": "sha512-+O9Jct8wf++lXxxFc4hc8LsjaSq0HFzzL7cVsw8pRDIPdjKD2mT4ytDZlLuSBZ4cLKZFXIrMGO7DbQCtMJJMKw=="
- },
- "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": "sha512-VHskAKYM8RfSFXwee5t5cbN5PZeq1Wrh6qd5bkyiXIf6UQcN6w/A0eXM9r6t8d+GYOh+o6ZhiEnb88LN/Y8m2w=="
- },
- "string-width": {
- "version": "2.1.1",
- "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz",
- "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==",
- "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": "sha512-4XaJ2zQdCzROZDivEVIDPkcQn8LMFSa8kj8Gxb/Lnwzv9A8VctNZ+lfivC/sV3ivW8ElJTERXZoPBRrZKkNKow==",
- "requires": {
- "ansi-regex": "^3.0.0"
- }
- }
+ "engines": {
+ "node": ">=4"
}
},
- "wildcard": {
+ "node_modules/widest-line/node_modules/ansi-regex": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.1.tgz",
+ "integrity": "sha512-+O9Jct8wf++lXxxFc4hc8LsjaSq0HFzzL7cVsw8pRDIPdjKD2mT4ytDZlLuSBZ4cLKZFXIrMGO7DbQCtMJJMKw==",
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/widest-line/node_modules/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": "sha512-VHskAKYM8RfSFXwee5t5cbN5PZeq1Wrh6qd5bkyiXIf6UQcN6w/A0eXM9r6t8d+GYOh+o6ZhiEnb88LN/Y8m2w==",
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/widest-line/node_modules/string-width": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz",
+ "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==",
+ "dependencies": {
+ "is-fullwidth-code-point": "^2.0.0",
+ "strip-ansi": "^4.0.0"
+ },
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/widest-line/node_modules/strip-ansi": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz",
+ "integrity": "sha512-4XaJ2zQdCzROZDivEVIDPkcQn8LMFSa8kj8Gxb/Lnwzv9A8VctNZ+lfivC/sV3ivW8ElJTERXZoPBRrZKkNKow==",
+ "dependencies": {
+ "ansi-regex": "^3.0.0"
+ },
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/wildcard": {
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/wildcard/-/wildcard-2.0.1.tgz",
"integrity": "sha512-CC1bOL87PIWSBhDcTrdeLo6eGT7mCFtrg0uIJtqJUFyK+eJnzl8A1niH56uu7KMa5XFrtiV+AQuHO3n7DsHnLQ==",
"dev": true
},
- "winston": {
+ "node_modules/winston": {
"version": "3.10.0",
"resolved": "https://registry.npmjs.org/winston/-/winston-3.10.0.tgz",
"integrity": "sha512-nT6SIDaE9B7ZRO0u3UvdrimG0HkB7dSTAgInQnNR2SOPJ4bvq5q79+pXLftKmP52lJGW15+H5MCK0nM9D3KB/g==",
- "requires": {
+ "dependencies": {
"@colors/colors": "1.5.0",
"@dabh/diagnostics": "^2.0.2",
"async": "^3.2.3",
@@ -13432,122 +17438,169 @@
"triple-beam": "^1.3.0",
"winston-transport": "^4.5.0"
},
- "dependencies": {
- "is-stream": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz",
- "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg=="
- },
- "readable-stream": {
- "version": "3.6.2",
- "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz",
- "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==",
- "requires": {
- "inherits": "^2.0.3",
- "string_decoder": "^1.1.1",
- "util-deprecate": "^1.0.1"
- }
- }
+ "engines": {
+ "node": ">= 12.0.0"
}
},
- "winston-transport": {
+ "node_modules/winston-transport": {
"version": "4.5.0",
"resolved": "https://registry.npmjs.org/winston-transport/-/winston-transport-4.5.0.tgz",
"integrity": "sha512-YpZzcUzBedhlTAfJg6vJDlyEai/IFMIVcaEZZyl3UXIl4gmqRpU7AE89AHLkbzLUsv0NVmw7ts+iztqKxxPW1Q==",
- "requires": {
+ "dependencies": {
"logform": "^2.3.2",
"readable-stream": "^3.6.0",
"triple-beam": "^1.3.0"
},
- "dependencies": {
- "readable-stream": {
- "version": "3.6.2",
- "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz",
- "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==",
- "requires": {
- "inherits": "^2.0.3",
- "string_decoder": "^1.1.1",
- "util-deprecate": "^1.0.1"
- }
- }
+ "engines": {
+ "node": ">= 6.4.0"
}
},
- "with": {
+ "node_modules/winston-transport/node_modules/readable-stream": {
+ "version": "3.6.2",
+ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz",
+ "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==",
+ "dependencies": {
+ "inherits": "^2.0.3",
+ "string_decoder": "^1.1.1",
+ "util-deprecate": "^1.0.1"
+ },
+ "engines": {
+ "node": ">= 6"
+ }
+ },
+ "node_modules/winston/node_modules/is-stream": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz",
+ "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==",
+ "engines": {
+ "node": ">=8"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/winston/node_modules/readable-stream": {
+ "version": "3.6.2",
+ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz",
+ "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==",
+ "dependencies": {
+ "inherits": "^2.0.3",
+ "string_decoder": "^1.1.1",
+ "util-deprecate": "^1.0.1"
+ },
+ "engines": {
+ "node": ">= 6"
+ }
+ },
+ "node_modules/with": {
"version": "7.0.2",
"resolved": "https://registry.npmjs.org/with/-/with-7.0.2.tgz",
"integrity": "sha512-RNGKj82nUPg3g5ygxkQl0R937xLyho1J24ItRCBTr/m1YnZkzJy1hUiHUJrc/VlsDQzsCnInEGSg3bci0Lmd4w==",
- "requires": {
+ "dependencies": {
"@babel/parser": "^7.9.6",
"@babel/types": "^7.9.6",
"assert-never": "^1.2.1",
"babel-walk": "3.0.0-canary-5"
+ },
+ "engines": {
+ "node": ">= 10.0.0"
}
},
- "wrap-ansi": {
+ "node_modules/wrap-ansi": {
"version": "2.1.0",
"resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-2.1.0.tgz",
"integrity": "sha512-vAaEaDM946gbNpH5pLVNR+vX2ht6n0Bt3GXwVB1AuAqZosOvHNF3P7wDnh8KLkSqgUh0uh77le7Owgoz+Z9XBw==",
- "requires": {
+ "dependencies": {
"string-width": "^1.0.1",
"strip-ansi": "^3.0.1"
+ },
+ "engines": {
+ "node": ">=0.10.0"
}
},
- "wrappy": {
+ "node_modules/wrappy": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz",
"integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ=="
},
- "write-file-atomic": {
+ "node_modules/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==",
- "requires": {
+ "dependencies": {
"graceful-fs": "^4.1.11",
"imurmurhash": "^0.1.4",
"signal-exit": "^3.0.2"
}
},
- "ws": {
+ "node_modules/ws": {
"version": "7.4.6",
"resolved": "https://registry.npmjs.org/ws/-/ws-7.4.6.tgz",
- "integrity": "sha512-YmhHDO4MzaDLB+M9ym/mDA5z0naX8j7SIlT8f8z+I0VtzsRbekxEutHSme7NPS2qE8StCYQNUnfWdXta/Yu85A=="
+ "integrity": "sha512-YmhHDO4MzaDLB+M9ym/mDA5z0naX8j7SIlT8f8z+I0VtzsRbekxEutHSme7NPS2qE8StCYQNUnfWdXta/Yu85A==",
+ "engines": {
+ "node": ">=8.3.0"
+ },
+ "peerDependencies": {
+ "bufferutil": "^4.0.1",
+ "utf-8-validate": "^5.0.2"
+ },
+ "peerDependenciesMeta": {
+ "bufferutil": {
+ "optional": true
+ },
+ "utf-8-validate": {
+ "optional": true
+ }
+ }
},
- "x-xss-protection": {
+ "node_modules/x-xss-protection": {
"version": "1.3.0",
"resolved": "https://registry.npmjs.org/x-xss-protection/-/x-xss-protection-1.3.0.tgz",
- "integrity": "sha512-kpyBI9TlVipZO4diReZMAHWtS0MMa/7Kgx8hwG/EuZLiA6sg4Ah/4TRdASHhRRN3boobzcYgFRUFSgHRge6Qhg=="
+ "integrity": "sha512-kpyBI9TlVipZO4diReZMAHWtS0MMa/7Kgx8hwG/EuZLiA6sg4Ah/4TRdASHhRRN3boobzcYgFRUFSgHRge6Qhg==",
+ "engines": {
+ "node": ">=4.0.0"
+ }
},
- "xdg-basedir": {
+ "node_modules/xdg-basedir": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/xdg-basedir/-/xdg-basedir-3.0.0.tgz",
- "integrity": "sha512-1Dly4xqlulvPD3fZUQJLY+FUIeqN3N2MM3uqe4rCJftAvOjFa3jFGfctOgluGx4ahPbUCsZkmJILiP0Vi4T6lQ=="
+ "integrity": "sha512-1Dly4xqlulvPD3fZUQJLY+FUIeqN3N2MM3uqe4rCJftAvOjFa3jFGfctOgluGx4ahPbUCsZkmJILiP0Vi4T6lQ==",
+ "engines": {
+ "node": ">=4"
+ }
},
- "xtend": {
+ "node_modules/xtend": {
"version": "4.0.2",
"resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz",
- "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ=="
+ "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==",
+ "engines": {
+ "node": ">=0.4"
+ }
},
- "y18n": {
+ "node_modules/y18n": {
"version": "3.2.2",
"resolved": "https://registry.npmjs.org/y18n/-/y18n-3.2.2.tgz",
"integrity": "sha512-uGZHXkHnhF0XeeAPgnKfPv1bgKAYyVvmNL1xlKsPYZPaIHxGti2hHqvOCQv71XMsLxu1QjergkqogUnms5D3YQ=="
},
- "yallist": {
+ "node_modules/yallist": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz",
"integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A=="
},
- "yaml": {
+ "node_modules/yaml": {
"version": "1.10.2",
"resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.2.tgz",
"integrity": "sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==",
- "dev": true
+ "dev": true,
+ "engines": {
+ "node": ">= 6"
+ }
},
- "yargs": {
+ "node_modules/yargs": {
"version": "7.1.2",
"resolved": "https://registry.npmjs.org/yargs/-/yargs-7.1.2.tgz",
"integrity": "sha512-ZEjj/dQYQy0Zx0lgLMLR8QuaqTihnxirir7EwUHp1Axq4e3+k8jXU5K0VLbNvedv1f4EWtBonDIZm0NUr+jCcA==",
- "requires": {
+ "dependencies": {
"camelcase": "^3.0.0",
"cliui": "^3.2.0",
"decamelize": "^1.1.1",
@@ -13561,103 +17614,134 @@
"which-module": "^1.0.0",
"y18n": "^3.2.1",
"yargs-parser": "^5.0.1"
- },
- "dependencies": {
- "camelcase": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-3.0.0.tgz",
- "integrity": "sha512-4nhGqUkc4BqbBBB4Q6zLuD7lzzrHYrjKGeYaEji/3tFR5VdJu9v+LilhGIVe8wxEJPPOeWo7eg8dwY13TZ1BNg=="
- },
- "find-up": {
- "version": "1.1.2",
- "resolved": "https://registry.npmjs.org/find-up/-/find-up-1.1.2.tgz",
- "integrity": "sha512-jvElSjyuo4EMQGoTwo1uJU5pQMwTW5lS1x05zzfJuTIyLR3zwO27LYrxNg+dlvKpGOuGy/MzBdXh80g0ve5+HA==",
- "requires": {
- "path-exists": "^2.0.0",
- "pinkie-promise": "^2.0.0"
- }
- },
- "path-exists": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-2.1.0.tgz",
- "integrity": "sha512-yTltuKuhtNeFJKa1PiRzfLAU5182q1y4Eb4XCJ3PBqyzEDkAZRzBrKKBct682ls9reBVHf9udYLN5Nd+K1B9BQ==",
- "requires": {
- "pinkie-promise": "^2.0.0"
- }
- },
- "path-type": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/path-type/-/path-type-1.1.0.tgz",
- "integrity": "sha512-S4eENJz1pkiQn9Znv33Q+deTOKmbl+jj1Fl+qiP/vYezj+S8x+J3Uo0ISrx/QoEvIlOaDWJhPaRd1flJ9HXZqg==",
- "requires": {
- "graceful-fs": "^4.1.2",
- "pify": "^2.0.0",
- "pinkie-promise": "^2.0.0"
- }
- },
- "pify": {
- "version": "2.3.0",
- "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz",
- "integrity": "sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog=="
- },
- "read-pkg": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-1.1.0.tgz",
- "integrity": "sha512-7BGwRHqt4s/uVbuyoeejRn4YmFnYZiFl4AuaeXHlgZf3sONF0SOGlxs2Pw8g6hCKupo08RafIO5YXFNOKTfwsQ==",
- "requires": {
- "load-json-file": "^1.0.0",
- "normalize-package-data": "^2.3.2",
- "path-type": "^1.0.0"
- }
- },
- "read-pkg-up": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-1.0.1.tgz",
- "integrity": "sha512-WD9MTlNtI55IwYUS27iHh9tK3YoIVhxis8yKhLpTqWtml739uXc9NWTpxoHkfZf3+DkCCsXox94/VWZniuZm6A==",
- "requires": {
- "find-up": "^1.0.0",
- "read-pkg": "^1.0.0"
- }
- },
- "yargs-parser": {
- "version": "5.0.1",
- "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-5.0.1.tgz",
- "integrity": "sha512-wpav5XYiddjXxirPoCTUPbqM0PXvJ9hiBMvuJgInvo4/lAOTZzUprArw17q2O1P2+GHhbBr18/iQwjL5Z9BqfA==",
- "requires": {
- "camelcase": "^3.0.0",
- "object.assign": "^4.1.0"
- }
- }
}
},
- "yargs-parser": {
+ "node_modules/yargs-parser": {
"version": "18.1.3",
"resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-18.1.3.tgz",
"integrity": "sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ==",
- "requires": {
+ "dependencies": {
"camelcase": "^5.0.0",
"decamelize": "^1.2.0"
+ },
+ "engines": {
+ "node": ">=6"
}
},
- "yauzl": {
+ "node_modules/yargs/node_modules/camelcase": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-3.0.0.tgz",
+ "integrity": "sha512-4nhGqUkc4BqbBBB4Q6zLuD7lzzrHYrjKGeYaEji/3tFR5VdJu9v+LilhGIVe8wxEJPPOeWo7eg8dwY13TZ1BNg==",
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/yargs/node_modules/find-up": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/find-up/-/find-up-1.1.2.tgz",
+ "integrity": "sha512-jvElSjyuo4EMQGoTwo1uJU5pQMwTW5lS1x05zzfJuTIyLR3zwO27LYrxNg+dlvKpGOuGy/MzBdXh80g0ve5+HA==",
+ "dependencies": {
+ "path-exists": "^2.0.0",
+ "pinkie-promise": "^2.0.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/yargs/node_modules/path-exists": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-2.1.0.tgz",
+ "integrity": "sha512-yTltuKuhtNeFJKa1PiRzfLAU5182q1y4Eb4XCJ3PBqyzEDkAZRzBrKKBct682ls9reBVHf9udYLN5Nd+K1B9BQ==",
+ "dependencies": {
+ "pinkie-promise": "^2.0.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/yargs/node_modules/path-type": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/path-type/-/path-type-1.1.0.tgz",
+ "integrity": "sha512-S4eENJz1pkiQn9Znv33Q+deTOKmbl+jj1Fl+qiP/vYezj+S8x+J3Uo0ISrx/QoEvIlOaDWJhPaRd1flJ9HXZqg==",
+ "dependencies": {
+ "graceful-fs": "^4.1.2",
+ "pify": "^2.0.0",
+ "pinkie-promise": "^2.0.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/yargs/node_modules/pify": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz",
+ "integrity": "sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==",
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/yargs/node_modules/read-pkg": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-1.1.0.tgz",
+ "integrity": "sha512-7BGwRHqt4s/uVbuyoeejRn4YmFnYZiFl4AuaeXHlgZf3sONF0SOGlxs2Pw8g6hCKupo08RafIO5YXFNOKTfwsQ==",
+ "dependencies": {
+ "load-json-file": "^1.0.0",
+ "normalize-package-data": "^2.3.2",
+ "path-type": "^1.0.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/yargs/node_modules/read-pkg-up": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-1.0.1.tgz",
+ "integrity": "sha512-WD9MTlNtI55IwYUS27iHh9tK3YoIVhxis8yKhLpTqWtml739uXc9NWTpxoHkfZf3+DkCCsXox94/VWZniuZm6A==",
+ "dependencies": {
+ "find-up": "^1.0.0",
+ "read-pkg": "^1.0.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/yargs/node_modules/yargs-parser": {
+ "version": "5.0.1",
+ "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-5.0.1.tgz",
+ "integrity": "sha512-wpav5XYiddjXxirPoCTUPbqM0PXvJ9hiBMvuJgInvo4/lAOTZzUprArw17q2O1P2+GHhbBr18/iQwjL5Z9BqfA==",
+ "dependencies": {
+ "camelcase": "^3.0.0",
+ "object.assign": "^4.1.0"
+ }
+ },
+ "node_modules/yauzl": {
"version": "2.10.0",
"resolved": "https://registry.npmjs.org/yauzl/-/yauzl-2.10.0.tgz",
"integrity": "sha512-p4a9I6X6nu6IhoGmBqAcbJy1mlC4j27vEPZX9F4L4/vZT3Lyq1VkFHw/V/PUcB9Buo+DG3iHkT0x3Qya58zc3g==",
- "requires": {
+ "dependencies": {
"buffer-crc32": "~0.2.3",
"fd-slicer": "~1.1.0"
}
},
- "yn": {
+ "node_modules/yn": {
"version": "3.1.1",
"resolved": "https://registry.npmjs.org/yn/-/yn-3.1.1.tgz",
"integrity": "sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==",
- "dev": true
+ "dev": true,
+ "engines": {
+ "node": ">=6"
+ }
},
- "yocto-queue": {
+ "node_modules/yocto-queue": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-1.0.0.tgz",
- "integrity": "sha512-9bnSc/HEW2uRy67wc+T8UwauLuPJVn28jb+GtJY16iiKWyvmYJRXVT4UamsAEGQfPohgr2q4Tq0sQbQlxTfi1g=="
+ "integrity": "sha512-9bnSc/HEW2uRy67wc+T8UwauLuPJVn28jb+GtJY16iiKWyvmYJRXVT4UamsAEGQfPohgr2q4Tq0sQbQlxTfi1g==",
+ "engines": {
+ "node": ">=12.20"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
}
}
}
diff --git a/packages/server/package.json b/packages/server/package.json
index 038706412..d359376de 100644
--- a/packages/server/package.json
+++ b/packages/server/package.json
@@ -31,7 +31,7 @@
"agendash": "^3.1.0",
"app-root-path": "^3.0.0",
"async": "^3.2.0",
- "axios": "^0.20.0",
+ "axios": "^1.6.0",
"babel-loader": "^9.1.2",
"bcryptjs": "^2.4.3",
"bluebird": "^3.7.2",
@@ -43,7 +43,7 @@
"crypto-random-string": "^3.2.0",
"csurf": "^1.10.0",
"deep-map": "^2.0.0",
- "deepdash": "^5.3.7",
+ "deepdash": "^5.3.9",
"dotenv": "^8.1.0",
"errorhandler": "^1.5.1",
"es6-weak-map": "^2.0.3",
@@ -56,6 +56,7 @@
"express-fileupload": "^1.1.7-alpha.3",
"express-oauth-server": "^2.0.0",
"express-validator": "^6.12.2",
+ "form-data": "^4.0.0",
"gulp": "^4.0.2",
"gulp-sass": "^5.0.0",
"helmet": "^3.21.0",
@@ -95,11 +96,14 @@
"rate-limiter-flexible": "^2.1.14",
"reflect-metadata": "^0.1.13",
"rtl-detect": "^1.0.4",
+ "source-map-loader": "^4.0.1",
+ "tmp-promise": "^3.0.3",
"ts-transformer-keys": "^0.4.2",
"tsyringe": "^4.3.0",
"typedi": "^0.8.0",
"uniqid": "^5.2.0",
- "winston": "^3.2.1"
+ "winston": "^3.2.1",
+ "xlsx": "^0.18.5"
},
"devDependencies": {
"@types/lodash": "^4.14.158",
diff --git a/packages/server/resources/locales/en.json b/packages/server/resources/locales/en.json
index b021c2347..120aed816 100644
--- a/packages/server/resources/locales/en.json
+++ b/packages/server/resources/locales/en.json
@@ -176,6 +176,7 @@
"invoice.paper.conditions_title": "Conditions & terms",
"invoice.paper.notes_title": "Notes",
"invoice.paper.total": "Total",
+ "invoice.paper.subtotal": "Subtotal",
"invoice.paper.payment_amount": "Payment Amount",
"invoice.paper.balance_due": "Balance Due",
@@ -587,6 +588,7 @@
"balance_sheet.long_term_liabilities": "Long-Term Liabilities",
"balance_sheet.non_current_liabilities": "Non-Current Liabilities",
"balance_sheet.equity": "Equity",
+ "balance_sheet.net_income": "Net Income",
"balance_sheet.account_name": "Account name",
"balance_sheet.total": "Total",
diff --git a/packages/server/resources/scss/modules/invoice.scss b/packages/server/resources/scss/modules/invoice.scss
index 98d8dd1a7..c5b84f8fb 100644
--- a/packages/server/resources/scss/modules/invoice.scss
+++ b/packages/server/resources/scss/modules/invoice.scss
@@ -137,10 +137,14 @@
tbody tr.payment-amount td:last-child {
color: red
}
- tbody tr.blanace-due td {
+ tbody tr.blanace-due td{
border-top: 3px double #666;
font-weight: bold;
}
+ tbody tr.total td {
+ border-top: 1px solid #666;
+ font-weight: bold;
+ }
}
}
diff --git a/packages/server/resources/views/modules/invoice-regular.pug b/packages/server/resources/views/modules/invoice-regular.pug
index 00416b97c..edddcaf9c 100644
--- a/packages/server/resources/views/modules/invoice-regular.pug
+++ b/packages/server/resources/views/modules/invoice-regular.pug
@@ -22,12 +22,12 @@ block content
div.invoice__due-amount
div.label #{__('invoice.paper.invoice_amount')}
- div.amount #{saleInvoice.formattedAmount}
+ div.amount #{saleInvoice.totalFormatted}
div.invoice__meta
div.invoice__meta-item.invoice__meta-item--amount
span.label #{__('invoice.paper.due_amount')}
- span.value #{saleInvoice.formattedDueAmount}
+ span.value #{saleInvoice.dueAmountFormatted}
div.invoice__meta-item.invoice__meta-item--billed-to
span.label #{__("invoice.paper.billed_to")}
@@ -35,11 +35,11 @@ block content
div.invoice__meta-item.invoice__meta-item--invoice-date
span.label #{__("invoice.paper.invoice_date")}
- span.value #{saleInvoice.formattedInvoiceDate}
+ span.value #{saleInvoice.invoiceDateFormatted}
div.invoice__meta-item.invoice__meta-item--due-date
span.label #{__("invoice.paper.due_date")}
- span.value #{saleInvoice.formattedDueDate}
+ span.value #{saleInvoice.dueDateFormatted}
div.invoice__table
table
@@ -63,15 +63,22 @@ block content
div.invoice__table-total
table
tbody
+ tr.subtotal
+ td #{__('invoice.paper.subtotal')}
+ td #{saleInvoice.subtotalFormatted}
+ each tax in saleInvoice.taxes
+ tr.tax_line
+ td #{tax.name} [#{tax.taxRate}%]
+ td #{tax.taxRateAmountFormatted}
tr.total
td #{__('invoice.paper.total')}
- td #{saleInvoice.formattedAmount}
+ td #{saleInvoice.totalFormatted}
tr.payment-amount
td #{__('invoice.paper.payment_amount')}
- td #{saleInvoice.formattedPaymentAmount}
+ td #{saleInvoice.paymentAmountFormatted}
tr.blanace-due
td #{__('invoice.paper.balance_due')}
- td #{saleInvoice.formattedDueAmount}
+ td #{saleInvoice.dueAmountFormatted}
div.invoice__footer
if saleInvoice.termsConditions
diff --git a/packages/server/resources/views/modules/payment-receive-standard.pug b/packages/server/resources/views/modules/payment-receive-standard.pug
index b3aa1fe26..ee415b768 100644
--- a/packages/server/resources/views/modules/payment-receive-standard.pug
+++ b/packages/server/resources/views/modules/payment-receive-standard.pug
@@ -45,9 +45,9 @@ block content
each entry in paymentReceive.entries
tr
td.item=entry.invoice.invoiceNo
- td.date=entry.invoice.formattedInvoiceDate
- td.invoiceAmount=entry.invoice.formattedAmount
- td.paymentAmount=entry.invoice.formattedPaymentAmount
+ td.date=entry.invoice.invoiceDateFormatted
+ td.invoiceAmount=entry.invoice.totalFormatted
+ td.paymentAmount=entry.invoice.paymentAmountFormatted
div.payment__table-after
div.payment__table-total
diff --git a/packages/server/src/api/controllers/FinancialStatements/APAgingSummary.ts b/packages/server/src/api/controllers/FinancialStatements/APAgingSummary.ts
index b0dc28841..5d626896c 100644
--- a/packages/server/src/api/controllers/FinancialStatements/APAgingSummary.ts
+++ b/packages/server/src/api/controllers/FinancialStatements/APAgingSummary.ts
@@ -2,19 +2,20 @@ import { Router, Request, Response, NextFunction } from 'express';
import { query } from 'express-validator';
import { Inject } from 'typedi';
import asyncMiddleware from '@/api/middleware/asyncMiddleware';
-import APAgingSummaryReportService from '@/services/FinancialStatements/AgingSummary/APAgingSummaryService';
import BaseFinancialReportController from './BaseFinancialReportController';
import { AbilitySubject, ReportsAction } from '@/interfaces';
import CheckPolicies from '@/api/middleware/CheckPolicies';
+import { ACCEPT_TYPE } from '@/interfaces/Http';
+import { APAgingSummaryApplication } from '@/services/FinancialStatements/AgingSummary/APAgingSummaryApplication';
export default class APAgingSummaryReportController extends BaseFinancialReportController {
@Inject()
- APAgingSummaryService: APAgingSummaryReportService;
+ private APAgingSummaryApp: APAgingSummaryApplication;
/**
* Router constructor.
*/
- router() {
+ public router() {
const router = Router();
router.get(
@@ -28,8 +29,9 @@ export default class APAgingSummaryReportController extends BaseFinancialReportC
/**
* Validation schema.
+ * @returns {ValidationChain[]}
*/
- get validationSchema() {
+ private get validationSchema() {
return [
...this.sheetNumberFormatValidationSchema,
query('as_date').optional().isISO8601(),
@@ -49,42 +51,58 @@ export default class APAgingSummaryReportController extends BaseFinancialReportC
}
/**
- * Retrieve payable aging summary report.
+ * Retrieves payable aging summary report.
+ * @param {Request} req -
+ * @param {Response} res -
+ * @param {NextFunction} next -
*/
- async payableAgingSummary(req: Request, res: Response, next: NextFunction) {
- const { tenantId, settings } = req;
+ private async payableAgingSummary(
+ req: Request,
+ res: Response,
+ next: NextFunction
+ ) {
+ const { tenantId } = req;
const filter = this.matchedQueryData(req);
try {
const accept = this.accepts(req);
- const acceptType = accept.types(['json', 'application/json+table']);
+ const acceptType = accept.types([
+ ACCEPT_TYPE.APPLICATION_JSON,
+ ACCEPT_TYPE.APPLICATION_JSON_TABLE,
+ ACCEPT_TYPE.APPLICATION_CSV,
+ ACCEPT_TYPE.APPLICATION_XLSX,
+ ]);
+ // Retrieves the json table format.
+ if (ACCEPT_TYPE.APPLICATION_JSON_TABLE === acceptType) {
+ const table = await this.APAgingSummaryApp.table(tenantId, filter);
- switch (acceptType) {
- case 'application/json+table':
- const table = await this.APAgingSummaryService.APAgingSummaryTable(
- tenantId,
- filter
- );
- return res.status(200).send({
- table: {
- rows: table.rows,
- columns: table.columns,
- },
- meta: table.meta,
- query: table.query,
- });
- break;
- default:
- const { data, columns, query, meta } =
- await this.APAgingSummaryService.APAgingSummary(tenantId, filter);
+ return res.status(200).send(table);
+ // Retrieves the csv format.
+ } else if (ACCEPT_TYPE.APPLICATION_CSV === acceptType) {
+ const csv = await this.APAgingSummaryApp.csv(tenantId, filter);
- return res.status(200).send({
- data: this.transfromToResponse(data),
- columns: this.transfromToResponse(columns),
- query: this.transfromToResponse(query),
- meta: this.transfromToResponse(meta),
- });
- break;
+ res.setHeader('Content-Disposition', 'attachment; filename=output.csv');
+ res.setHeader('Content-Type', 'text/csv');
+
+ return res.send(csv);
+ // Retrieves the xlsx format.
+ } else if (ACCEPT_TYPE.APPLICATION_XLSX === acceptType) {
+ const buffer = await this.APAgingSummaryApp.xlsx(tenantId, filter);
+
+ res.setHeader(
+ 'Content-Disposition',
+ 'attachment; filename=output.xlsx'
+ );
+ res.setHeader(
+ 'Content-Type',
+ 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'
+ );
+ return res.send(buffer);
+ // Retrieves the json format.
+ } else {
+ const sheet = await this.APAgingSummaryApp.sheet(tenantId, filter);
+
+ return res.status(200).send(sheet);
}
} catch (error) {
next(error);
diff --git a/packages/server/src/api/controllers/FinancialStatements/ARAgingSummary.ts b/packages/server/src/api/controllers/FinancialStatements/ARAgingSummary.ts
index 489eb04ae..10e42e900 100644
--- a/packages/server/src/api/controllers/FinancialStatements/ARAgingSummary.ts
+++ b/packages/server/src/api/controllers/FinancialStatements/ARAgingSummary.ts
@@ -5,16 +5,18 @@ import ARAgingSummaryService from '@/services/FinancialStatements/AgingSummary/A
import BaseFinancialReportController from './BaseFinancialReportController';
import { AbilitySubject, ReportsAction } from '@/interfaces';
import CheckPolicies from '@/api/middleware/CheckPolicies';
+import { ARAgingSummaryApplication } from '@/services/FinancialStatements/AgingSummary/ARAgingSummaryApplication';
+import { ACCEPT_TYPE } from '@/interfaces/Http';
@Service()
export default class ARAgingSummaryReportController extends BaseFinancialReportController {
@Inject()
- ARAgingSummaryService: ARAgingSummaryService;
+ ARAgingSummaryApp: ARAgingSummaryApplication;
/**
* Router constructor.
*/
- router() {
+ public router() {
const router = Router();
router.get(
@@ -30,7 +32,7 @@ export default class ARAgingSummaryReportController extends BaseFinancialReportC
/**
* AR aging summary validation roles.
*/
- get validationSchema() {
+ private get validationSchema() {
return [
...this.sheetNumberFormatValidationSchema,
@@ -52,41 +54,53 @@ export default class ARAgingSummaryReportController extends BaseFinancialReportC
/**
* Retrieve AR aging summary report.
+ * @param {Request} req
+ * @param {Response} res
*/
- async receivableAgingSummary(req: Request, res: Response) {
- const { tenantId, settings } = req;
+ private async receivableAgingSummary(req: Request, res: Response) {
+ const { tenantId } = req;
const filter = this.matchedQueryData(req);
try {
const accept = this.accepts(req);
- const acceptType = accept.types(['json', 'application/json+table']);
- switch (acceptType) {
- case 'application/json+table':
- const table = await this.ARAgingSummaryService.ARAgingSummaryTable(
- tenantId,
- filter
- );
- return res.status(200).send({
- table: {
- rows: table.rows,
- columns: table.columns,
- },
- meta: table.meta,
- query: table.query,
- });
- break;
- default:
- const { data, columns, query, meta } =
- await this.ARAgingSummaryService.ARAgingSummary(tenantId, filter);
+ const acceptType = accept.types([
+ ACCEPT_TYPE.APPLICATION_JSON,
+ ACCEPT_TYPE.APPLICATION_JSON_TABLE,
+ ACCEPT_TYPE.APPLICATION_CSV,
+ ACCEPT_TYPE.APPLICATION_XLSX,
+ ]);
+ // Retrieves the xlsx format.
+ if (ACCEPT_TYPE.APPLICATION_XLSX === acceptType) {
+ const buffer = await this.ARAgingSummaryApp.xlsx(tenantId, filter);
- return res.status(200).send({
- data: this.transfromToResponse(data),
- columns: this.transfromToResponse(columns),
- query: this.transfromToResponse(query),
- meta: this.transfromToResponse(meta),
- });
- break;
+ res.setHeader(
+ 'Content-Disposition',
+ 'attachment; filename=output.xlsx'
+ );
+ res.setHeader(
+ 'Content-Type',
+ 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'
+ );
+ return res.send(buffer);
+ // Retrieves the table format.
+ } else if (ACCEPT_TYPE.APPLICATION_JSON_TABLE === acceptType) {
+ const table = await this.ARAgingSummaryApp.table(tenantId, filter);
+
+ return res.status(200).send(table);
+ // Retrieves the csv format.
+ } else if (ACCEPT_TYPE.APPLICATION_CSV === acceptType) {
+ const buffer = await this.ARAgingSummaryApp.csv(tenantId, filter);
+
+ res.setHeader('Content-Disposition', 'attachment; filename=output.csv');
+ res.setHeader('Content-Type', 'text/csv');
+
+ return res.send(buffer);
+ // Retrieves the json format.
+ } else {
+ const sheet = await this.ARAgingSummaryApp.sheet(tenantId, filter);
+
+ return res.status(200).send(sheet);
}
} catch (error) {
console.log(error);
diff --git a/packages/server/src/api/controllers/FinancialStatements/BalanceSheet.ts b/packages/server/src/api/controllers/FinancialStatements/BalanceSheet.ts
index bc9499889..0af53d723 100644
--- a/packages/server/src/api/controllers/FinancialStatements/BalanceSheet.ts
+++ b/packages/server/src/api/controllers/FinancialStatements/BalanceSheet.ts
@@ -3,25 +3,21 @@ import { Router, Request, Response, NextFunction } from 'express';
import { query, ValidationChain } from 'express-validator';
import { castArray } from 'lodash';
import asyncMiddleware from '@/api/middleware/asyncMiddleware';
-import BalanceSheetStatementService from '@/services/FinancialStatements/BalanceSheet/BalanceSheetService';
import BaseFinancialReportController from './BaseFinancialReportController';
import { AbilitySubject, ReportsAction } from '@/interfaces';
import CheckPolicies from '@/api/middleware/CheckPolicies';
-import BalanceSheetTable from '@/services/FinancialStatements/BalanceSheet/BalanceSheetTable';
-import HasTenancyService from '@/services/Tenancy/TenancyService';
+import { BalanceSheetApplication } from '@/services/FinancialStatements/BalanceSheet/BalanceSheetApplication';
+import { ACCEPT_TYPE } from '@/interfaces/Http';
@Service()
export default class BalanceSheetStatementController extends BaseFinancialReportController {
@Inject()
- balanceSheetService: BalanceSheetStatementService;
-
- @Inject()
- tenancy: HasTenancyService;
+ private balanceSheetApp: BalanceSheetApplication;
/**
* Router constructor.
*/
- router() {
+ public router() {
const router = Router();
router.get(
@@ -38,7 +34,7 @@ export default class BalanceSheetStatementController extends BaseFinancialReport
* Balance sheet validation schecma.
* @returns {ValidationChain[]}
*/
- get balanceSheetValidationSchema(): ValidationChain[] {
+ private get balanceSheetValidationSchema(): ValidationChain[] {
return [
...this.sheetNumberFormatValidationSchema,
query('accounting_method').optional().isIn(['cash', 'accrual']),
@@ -84,10 +80,12 @@ export default class BalanceSheetStatementController extends BaseFinancialReport
/**
* Retrieve the balance sheet.
+ * @param {Request} req
+ * @param {Response} res
+ * @param {NextFunction} next
*/
- async balanceSheet(req: Request, res: Response, next: NextFunction) {
- const { tenantId, settings } = req;
- const i18n = this.tenancy.i18n(tenantId);
+ private async balanceSheet(req: Request, res: Response, next: NextFunction) {
+ const { tenantId } = req;
let filter = this.matchedQueryData(req);
@@ -95,29 +93,45 @@ export default class BalanceSheetStatementController extends BaseFinancialReport
...filter,
accountsIds: castArray(filter.accountsIds),
};
-
try {
- const { data, columns, query, meta } =
- await this.balanceSheetService.balanceSheet(tenantId, filter);
-
const accept = this.accepts(req);
- const acceptType = accept.types(['json', 'application/json+table']);
- const table = new BalanceSheetTable(data, query, i18n);
+ const acceptType = accept.types([
+ ACCEPT_TYPE.APPLICATION_JSON,
+ ACCEPT_TYPE.APPLICATION_JSON_TABLE,
+ ACCEPT_TYPE.APPLICATION_XLSX,
+ ACCEPT_TYPE.APPLICATION_CSV,
+ ]);
+ // Retrieves the json table format.
+ if (ACCEPT_TYPE.APPLICATION_JSON_TABLE == acceptType) {
+ const table = await this.balanceSheetApp.table(tenantId, filter);
- switch (acceptType) {
- case 'application/json+table':
- return res.status(200).send({
- table: {
- rows: table.tableRows(),
- columns: table.tableColumns(),
- },
- query,
- meta,
- });
- case 'json':
- default:
- return res.status(200).send({ data, columns, query, meta });
+ return res.status(200).send(table);
+ // Retrieves the csv format.
+ } else if (ACCEPT_TYPE.APPLICATION_CSV === acceptType) {
+ const buffer = await this.balanceSheetApp.csv(tenantId, filter);
+
+ res.setHeader('Content-Disposition', 'attachment; filename=output.csv');
+ res.setHeader('Content-Type', 'text/csv');
+
+ return res.send(buffer);
+ // Retrieves the xlsx format.
+ } else if (ACCEPT_TYPE.APPLICATION_XLSX === acceptType) {
+ const buffer = await this.balanceSheetApp.xlsx(tenantId, filter);
+
+ res.setHeader(
+ 'Content-Disposition',
+ 'attachment; filename=output.xlsx'
+ );
+ res.setHeader(
+ 'Content-Type',
+ 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'
+ );
+ return res.send(buffer);
+ } else {
+ const sheet = await this.balanceSheetApp.sheet(tenantId, filter);
+
+ return res.status(200).send(sheet);
}
} catch (error) {
next(error);
diff --git a/packages/server/src/api/controllers/FinancialStatements/CashFlow/CashFlow.ts b/packages/server/src/api/controllers/FinancialStatements/CashFlow/CashFlow.ts
index df2f3f5dd..bab04246d 100644
--- a/packages/server/src/api/controllers/FinancialStatements/CashFlow/CashFlow.ts
+++ b/packages/server/src/api/controllers/FinancialStatements/CashFlow/CashFlow.ts
@@ -8,29 +8,20 @@ import {
ValidationChain,
} from 'express';
import BaseFinancialReportController from '../BaseFinancialReportController';
-import CashFlowStatementService from '@/services/FinancialStatements/CashFlow/CashFlowService';
-import {
- ICashFlowStatementDOO,
- ICashFlowStatement,
- AbilitySubject,
- ReportsAction,
-} from '@/interfaces';
-import CashFlowTable from '@/services/FinancialStatements/CashFlow/CashFlowTable';
-import HasTenancyService from '@/services/Tenancy/TenancyService';
+import { AbilitySubject, ReportsAction } from '@/interfaces';
import CheckPolicies from '@/api/middleware/CheckPolicies';
+import { ACCEPT_TYPE } from '@/interfaces/Http';
+import { CashflowSheetApplication } from '@/services/FinancialStatements/CashFlow/CashflowSheetApplication';
@Service()
export default class CashFlowController extends BaseFinancialReportController {
@Inject()
- cashFlowService: CashFlowStatementService;
-
- @Inject()
- tenancy: HasTenancyService;
+ private cashflowSheetApp: CashflowSheetApplication;
/**
* Router constructor.
*/
- router() {
+ public router() {
const router = Router();
router.get(
@@ -47,7 +38,7 @@ export default class CashFlowController extends BaseFinancialReportController {
* Balance sheet validation schecma.
* @returns {ValidationChain[]}
*/
- get cashflowValidationSchema(): ValidationChain[] {
+ private get cashflowValidationSchema(): ValidationChain[] {
return [
...this.sheetNumberFormatValidationSchema,
query('from_date').optional(),
@@ -67,41 +58,6 @@ export default class CashFlowController extends BaseFinancialReportController {
];
}
- /**
- * Retrieve the cashflow statment to json response.
- * @param {ICashFlowStatement} cashFlow -
- */
- private transformJsonResponse(cashFlowDOO: ICashFlowStatementDOO) {
- const { data, query, meta } = cashFlowDOO;
-
- return {
- data: this.transfromToResponse(data),
- query: this.transfromToResponse(query),
- meta: this.transfromToResponse(meta),
- };
- }
-
- /**
- * Transformes the report statement to table rows.
- * @param {ITransactionsByVendorsStatement} statement -
- */
- private transformToTableRows(
- cashFlowDOO: ICashFlowStatementDOO,
- tenantId: number
- ) {
- const i18n = this.tenancy.i18n(tenantId);
- const cashFlowTable = new CashFlowTable(cashFlowDOO, i18n);
-
- return {
- table: {
- data: cashFlowTable.tableRows(),
- columns: cashFlowTable.tableColumns(),
- },
- query: this.transfromToResponse(cashFlowDOO.query),
- meta: this.transfromToResponse(cashFlowDOO.meta),
- };
- }
-
/**
* Retrieve the cash flow statment.
* @param {Request} req
@@ -109,26 +65,52 @@ export default class CashFlowController extends BaseFinancialReportController {
* @param {NextFunction} next
* @returns {Response}
*/
- async cashFlow(req: Request, res: Response, next: NextFunction) {
- const { tenantId, settings } = req;
+ public async cashFlow(req: Request, res: Response, next: NextFunction) {
+ const { tenantId } = req;
const filter = {
...this.matchedQueryData(req),
};
try {
- const cashFlow = await this.cashFlowService.cashFlow(tenantId, filter);
-
const accept = this.accepts(req);
- const acceptType = accept.types(['json', 'application/json+table']);
- switch (acceptType) {
- case 'application/json+table':
- return res
- .status(200)
- .send(this.transformToTableRows(cashFlow, tenantId));
- case 'json':
- default:
- return res.status(200).send(this.transformJsonResponse(cashFlow));
+ const acceptType = accept.types([
+ ACCEPT_TYPE.APPLICATION_JSON,
+ ACCEPT_TYPE.APPLICATION_JSON_TABLE,
+ ACCEPT_TYPE.APPLICATION_CSV,
+ ACCEPT_TYPE.APPLICATION_XLSX,
+ ]);
+ // Retrieves the json table format.
+ if (ACCEPT_TYPE.APPLICATION_JSON_TABLE === acceptType) {
+ const table = await this.cashflowSheetApp.table(tenantId, filter);
+
+ return res.status(200).send(table);
+ // Retrieves the csv format.
+ } else if (ACCEPT_TYPE.APPLICATION_CSV === acceptType) {
+ const buffer = await this.cashflowSheetApp.csv(tenantId, filter);
+
+ res.setHeader('Content-Disposition', 'attachment; filename=output.csv');
+ res.setHeader('Content-Type', 'text/csv');
+
+ return res.status(200).send(buffer);
+ // Retrieves the pdf format.
+ } else if (ACCEPT_TYPE.APPLICATION_XLSX === acceptType) {
+ const buffer = await this.cashflowSheetApp.xlsx(tenantId, filter);
+
+ res.setHeader(
+ 'Content-Disposition',
+ 'attachment; filename=output.xlsx'
+ );
+ res.setHeader(
+ 'Content-Type',
+ 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'
+ );
+ return res.send(buffer);
+ // Retrieves the json format.
+ } else {
+ const cashflow = await this.cashflowSheetApp.sheet(tenantId, filter);
+
+ return res.status(200).send(cashflow);
}
} catch (error) {
next(error);
diff --git a/packages/server/src/api/controllers/FinancialStatements/CustomerBalanceSummary/index.ts b/packages/server/src/api/controllers/FinancialStatements/CustomerBalanceSummary/index.ts
index eb026e752..6c10543f5 100644
--- a/packages/server/src/api/controllers/FinancialStatements/CustomerBalanceSummary/index.ts
+++ b/packages/server/src/api/controllers/FinancialStatements/CustomerBalanceSummary/index.ts
@@ -1,29 +1,21 @@
import { Router, Request, Response, NextFunction } from 'express';
import { query } from 'express-validator';
import { Inject } from 'typedi';
-import {
- AbilitySubject,
- ICustomerBalanceSummaryStatement,
- ReportsAction,
-} from '@/interfaces';
+import { AbilitySubject, ReportsAction } from '@/interfaces';
import asyncMiddleware from '@/api/middleware/asyncMiddleware';
-import CustomerBalanceSummary from '@/services/FinancialStatements/CustomerBalanceSummary/CustomerBalanceSummaryService';
import BaseFinancialReportController from '../BaseFinancialReportController';
-import CustomerBalanceSummaryTableRows from '@/services/FinancialStatements/CustomerBalanceSummary/CustomerBalanceSummaryTableRows';
import CheckPolicies from '@/api/middleware/CheckPolicies';
-import HasTenancyService from '@/services/Tenancy/TenancyService';
+import { ACCEPT_TYPE } from '@/interfaces/Http';
+import { CustomerBalanceSummaryApplication } from '@/services/FinancialStatements/CustomerBalanceSummary/CustomerBalanceSummaryApplication';
export default class CustomerBalanceSummaryReportController extends BaseFinancialReportController {
@Inject()
- customerBalanceSummaryService: CustomerBalanceSummary;
-
- @Inject()
- tenancy: HasTenancyService;
+ private customerBalanceSummaryApp: CustomerBalanceSummaryApplication;
/**
* Router constructor.
*/
- router() {
+ public router() {
const router = Router();
router.get(
@@ -42,7 +34,7 @@ export default class CustomerBalanceSummaryReportController extends BaseFinancia
/**
* Validation schema.
*/
- get validationSchema() {
+ private get validationSchema() {
return [
...this.sheetNumberFormatValidationSchema,
@@ -62,75 +54,67 @@ export default class CustomerBalanceSummaryReportController extends BaseFinancia
];
}
- /**
- * Transformes the balance summary statement to table rows.
- * @param {ICustomerBalanceSummaryStatement} statement -
- */
- private transformToTableRows(
- tenantId,
- { data, query }: ICustomerBalanceSummaryStatement
- ) {
- const i18n = this.tenancy.i18n(tenantId);
- const tableRows = new CustomerBalanceSummaryTableRows(data, query, i18n);
-
- return {
- table: {
- columns: tableRows.tableColumns(),
- data: tableRows.tableRows(),
- },
- query: this.transfromToResponse(query),
- };
- }
-
- /**
- * Transformes the balance summary statement to raw json.
- * @param {ICustomerBalanceSummaryStatement} customerBalance -
- */
- private transformToJsonResponse({
- data,
- columns,
- query,
- }: ICustomerBalanceSummaryStatement) {
- return {
- data: this.transfromToResponse(data),
- columns: this.transfromToResponse(columns),
- query: this.transfromToResponse(query),
- };
- }
-
/**
* Retrieve payable aging summary report.
* @param {Request} req -
* @param {Response} res -
* @param {NextFunction} next -
*/
- async customerBalanceSummary(
+ private async customerBalanceSummary(
req: Request,
res: Response,
next: NextFunction
) {
- const { tenantId, settings } = req;
+ const { tenantId } = req;
const filter = this.matchedQueryData(req);
try {
- const customerBalanceSummary =
- await this.customerBalanceSummaryService.customerBalanceSummary(
+ const accept = this.accepts(req);
+ const acceptType = accept.types([
+ ACCEPT_TYPE.APPLICATION_JSON,
+ ACCEPT_TYPE.APPLICATION_JSON_TABLE,
+ ACCEPT_TYPE.APPLICATION_CSV,
+ ACCEPT_TYPE.APPLICATION_XLSX,
+ ]);
+
+ // Retrieves the xlsx format.
+ if (ACCEPT_TYPE.APPLICATION_XLSX === acceptType) {
+ const buffer = await this.customerBalanceSummaryApp.xlsx(
tenantId,
filter
);
- const accept = this.accepts(req);
- const acceptType = accept.types(['json', 'application/json+table']);
+ res.setHeader(
+ 'Content-Disposition',
+ 'attachment; filename=output.xlsx'
+ );
+ res.setHeader(
+ 'Content-Type',
+ 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'
+ );
+ return res.send(buffer);
+ // Retrieves the csv format.
+ } else if (ACCEPT_TYPE.APPLICATION_CSV === acceptType) {
+ const buffer = await this.customerBalanceSummaryApp.csv(
+ tenantId,
+ filter
+ );
+ res.setHeader('Content-Disposition', 'attachment; filename=output.csv');
+ res.setHeader('Content-Type', 'text/csv');
- switch (acceptType) {
- case 'application/json+table':
- return res
- .status(200)
- .send(this.transformToTableRows(tenantId, customerBalanceSummary));
- case 'application/json':
- default:
- return res
- .status(200)
- .send(this.transformToJsonResponse(customerBalanceSummary));
+ return res.send(buffer);
+ // Retrieves the json table format.
+ } else if (ACCEPT_TYPE.APPLICATION_JSON_TABLE === acceptType) {
+ const table = await this.customerBalanceSummaryApp.table(
+ tenantId,
+ filter
+ );
+ return res.status(200).send(table);
+ } else {
+ const sheet = await this.customerBalanceSummaryApp.sheet(
+ tenantId,
+ filter
+ );
+ return res.status(200).send(sheet);
}
} catch (error) {
next(error);
diff --git a/packages/server/src/api/controllers/FinancialStatements/GeneralLedger.ts b/packages/server/src/api/controllers/FinancialStatements/GeneralLedger.ts
index ac3f002a7..c86da8eae 100644
--- a/packages/server/src/api/controllers/FinancialStatements/GeneralLedger.ts
+++ b/packages/server/src/api/controllers/FinancialStatements/GeneralLedger.ts
@@ -2,15 +2,16 @@ import { Router, Request, Response, NextFunction } from 'express';
import { query, ValidationChain } from 'express-validator';
import { Inject, Service } from 'typedi';
import asyncMiddleware from '@/api/middleware/asyncMiddleware';
-import GeneralLedgerService from '@/services/FinancialStatements/GeneralLedger/GeneralLedgerService';
import BaseFinancialReportController from './BaseFinancialReportController';
import { AbilitySubject, ReportsAction } from '@/interfaces';
import CheckPolicies from '@/api/middleware/CheckPolicies';
+import { ACCEPT_TYPE } from '@/interfaces/Http';
+import { GeneralLedgerApplication } from '@/services/FinancialStatements/GeneralLedger/GeneralLedgerApplication';
@Service()
export default class GeneralLedgerReportController extends BaseFinancialReportController {
@Inject()
- generalLedgetService: GeneralLedgerService;
+ private generalLedgerApplication: GeneralLedgerApplication;
/**
* Router constructor.
@@ -61,20 +62,43 @@ export default class GeneralLedgerReportController extends BaseFinancialReportCo
* @param {Response} res -
*/
async generalLedger(req: Request, res: Response, next: NextFunction) {
- const { tenantId, settings } = req;
+ const { tenantId } = req;
const filter = this.matchedQueryData(req);
+ const accept = this.accepts(req);
- try {
- const { data, query, meta } =
- await this.generalLedgetService.generalLedger(tenantId, filter);
+ const acceptType = accept.types([
+ ACCEPT_TYPE.APPLICATION_JSON,
+ ACCEPT_TYPE.APPLICATION_JSON_TABLE,
+ ACCEPT_TYPE.APPLICATION_XLSX,
+ ACCEPT_TYPE.APPLICATION_CSV,
+ ]);
+ // Retrieves the table format.
+ if (ACCEPT_TYPE.APPLICATION_JSON_TABLE === acceptType) {
+ const table = await this.generalLedgerApplication.table(tenantId, filter);
- return res.status(200).send({
- meta: this.transfromToResponse(meta),
- data: this.transfromToResponse(data),
- query: this.transfromToResponse(query),
- });
- } catch (error) {
- next(error);
+ return res.status(200).send(table);
+ // Retrieves the csv format.
+ } else if (ACCEPT_TYPE.APPLICATION_CSV === acceptType) {
+ const buffer = await this.generalLedgerApplication.csv(tenantId, filter);
+
+ res.setHeader('Content-Disposition', 'attachment; filename=output.csv');
+ res.setHeader('Content-Type', 'text/csv');
+
+ return res.send(buffer);
+ // Retrieves the xlsx format.
+ } else if (ACCEPT_TYPE.APPLICATION_XLSX === acceptType) {
+ const buffer = await this.generalLedgerApplication.xlsx(tenantId, filter);
+
+ res.setHeader('Content-Disposition', 'attachment; filename=output.xlsx');
+ res.setHeader(
+ 'Content-Type',
+ 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'
+ );
+ return res.send(buffer);
+ // Retrieves the json format.
+ } else {
+ const sheet = await this.generalLedgerApplication.sheet(tenantId, filter);
+ return res.status(200).send(sheet);
}
}
}
diff --git a/packages/server/src/api/controllers/FinancialStatements/InventoryDetails/index.ts b/packages/server/src/api/controllers/FinancialStatements/InventoryDetails/index.ts
index 2f8df7722..07f91af4a 100644
--- a/packages/server/src/api/controllers/FinancialStatements/InventoryDetails/index.ts
+++ b/packages/server/src/api/controllers/FinancialStatements/InventoryDetails/index.ts
@@ -8,24 +8,20 @@ import {
ValidationChain,
} from 'express';
import BaseController from '@/api/controllers/BaseController';
-import InventoryDetailsService from '@/services/FinancialStatements/InventoryDetails/InventoryDetailsService';
-import InventoryDetailsTable from '@/services/FinancialStatements/InventoryDetails/InventoryDetailsTable';
-import HasTenancyService from '@/services/Tenancy/TenancyService';
import { AbilitySubject, ReportsAction } from '@/interfaces';
+import { InventortyDetailsApplication } from '@/services/FinancialStatements/InventoryDetails/InventoryDetailsApplication';
import CheckPolicies from '@/api/middleware/CheckPolicies';
+import { ACCEPT_TYPE } from '@/interfaces/Http';
@Service()
export default class InventoryDetailsController extends BaseController {
@Inject()
- inventoryDetailsService: InventoryDetailsService;
-
- @Inject()
- tenancy: HasTenancyService;
+ private inventoryItemDetailsApp: InventortyDetailsApplication;
/**
* Router constructor.
*/
- router() {
+ public router() {
const router = Router();
router.get(
@@ -45,7 +41,7 @@ export default class InventoryDetailsController extends BaseController {
* Balance sheet validation schecma.
* @returns {ValidationChain[]}
*/
- get validationSchema(): ValidationChain[] {
+ private get validationSchema(): ValidationChain[] {
return [
query('number_format.precision')
.optional()
@@ -77,69 +73,66 @@ export default class InventoryDetailsController extends BaseController {
}
/**
- * Retrieve the cashflow statment to json response.
- * @param {ICashFlowStatement} cashFlow -
- */
- private transformJsonResponse(inventoryDetails) {
- const { data, query, meta } = inventoryDetails;
-
- return {
- data: this.transfromToResponse(data),
- query: this.transfromToResponse(query),
- meta: this.transfromToResponse(meta),
- };
- }
-
- /**
- * Transformes the report statement to table rows.
- */
- private transformToTableRows(inventoryDetails, tenantId: number) {
- const i18n = this.tenancy.i18n(tenantId);
- const inventoryDetailsTable = new InventoryDetailsTable(
- inventoryDetails,
- i18n
- );
-
- return {
- table: {
- data: inventoryDetailsTable.tableData(),
- columns: inventoryDetailsTable.tableColumns(),
- },
- query: this.transfromToResponse(inventoryDetails.query),
- meta: this.transfromToResponse(inventoryDetails.meta),
- };
- }
-
- /**
- * Retrieve the cash flow statment.
+ * Retrieve the inventory item details sheet.
* @param {Request} req
* @param {Response} res
* @param {NextFunction} next
* @returns {Response}
*/
- async inventoryDetails(req: Request, res: Response, next: NextFunction) {
- const { tenantId, settings } = req;
+ private async inventoryDetails(
+ req: Request,
+ res: Response,
+ next: NextFunction
+ ) {
+ const { tenantId } = req;
const filter = {
...this.matchedQueryData(req),
};
try {
- const inventoryDetails =
- await this.inventoryDetailsService.inventoryDetails(tenantId, filter);
-
const accept = this.accepts(req);
- const acceptType = accept.types(['json', 'application/json+table']);
+ const acceptType = accept.types([
+ ACCEPT_TYPE.APPLICATION_JSON,
+ ACCEPT_TYPE.APPLICATION_JSON_TABLE,
+ ACCEPT_TYPE.APPLICATION_CSV,
+ ACCEPT_TYPE.APPLICATION_XLSX,
+ ]);
+ // Retrieves the csv format.
+ if (acceptType === ACCEPT_TYPE.APPLICATION_CSV) {
+ const buffer = await this.inventoryItemDetailsApp.csv(tenantId, filter);
- switch (acceptType) {
- case 'application/json+table':
- return res
- .status(200)
- .send(this.transformToTableRows(inventoryDetails, tenantId));
- case 'json':
- default:
- return res
- .status(200)
- .send(this.transformJsonResponse(inventoryDetails));
+ res.setHeader('Content-Disposition', 'attachment; filename=output.csv');
+ res.setHeader('Content-Type', 'text/csv');
+
+ return res.send(buffer);
+ // Retrieves the xlsx format.
+ } else if (acceptType === ACCEPT_TYPE.APPLICATION_XLSX) {
+ const buffer = await this.inventoryItemDetailsApp.xlsx(
+ tenantId,
+ filter
+ );
+ res.setHeader(
+ 'Content-Disposition',
+ 'attachment; filename=output.xlsx'
+ );
+ res.setHeader(
+ 'Content-Type',
+ 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'
+ );
+ return res.send(buffer);
+ // Retrieves the json table format.
+ } else if (acceptType === ACCEPT_TYPE.APPLICATION_JSON_TABLE) {
+ const table = await this.inventoryItemDetailsApp.table(
+ tenantId,
+ filter
+ );
+ return res.status(200).send(table);
+ } else {
+ const sheet = await this.inventoryItemDetailsApp.sheet(
+ tenantId,
+ filter
+ );
+ return res.status(200).send(sheet);
}
} catch (error) {
next(error);
diff --git a/packages/server/src/api/controllers/FinancialStatements/JournalSheet.ts b/packages/server/src/api/controllers/FinancialStatements/JournalSheet.ts
index ebd6074f4..871bc9af8 100644
--- a/packages/server/src/api/controllers/FinancialStatements/JournalSheet.ts
+++ b/packages/server/src/api/controllers/FinancialStatements/JournalSheet.ts
@@ -3,14 +3,15 @@ import { Request, Response, Router, NextFunction } from 'express';
import { castArray } from 'lodash';
import { query, oneOf } from 'express-validator';
import BaseFinancialReportController from './BaseFinancialReportController';
-import JournalSheetService from '@/services/FinancialStatements/JournalSheet/JournalSheetService';
import { AbilitySubject, ReportsAction } from '@/interfaces';
import CheckPolicies from '@/api/middleware/CheckPolicies';
+import { ACCEPT_TYPE } from '@/interfaces/Http';
+import { JournalSheetApplication } from '@/services/FinancialStatements/JournalSheet/JournalSheetApplication';
@Service()
export default class JournalSheetController extends BaseFinancialReportController {
@Inject()
- journalService: JournalSheetService;
+ private journalSheetApp: JournalSheetApplication;
/**
* Router constructor.
@@ -57,28 +58,49 @@ export default class JournalSheetController extends BaseFinancialReportControlle
* @param {Request} req -
* @param {Response} res -
*/
- async journal(req: Request, res: Response, next: NextFunction) {
- const { tenantId, settings } = req;
+ private async journal(req: Request, res: Response, next: NextFunction) {
+ const { tenantId } = req;
let filter = this.matchedQueryData(req);
filter = {
...filter,
accountsIds: castArray(filter.accountsIds),
};
+ const accept = this.accepts(req);
+ const acceptType = accept.types([
+ ACCEPT_TYPE.APPLICATION_JSON,
+ ACCEPT_TYPE.APPLICATION_JSON_TABLE,
+ ACCEPT_TYPE.APPLICATION_XLSX,
+ ACCEPT_TYPE.APPLICATION_CSV,
+ ]);
- try {
- const { data, query, meta } = await this.journalService.journalSheet(
- tenantId,
- filter
+ // Retrieves the json table format.
+ if (ACCEPT_TYPE.APPLICATION_JSON_TABLE === acceptType) {
+ const table = await this.journalSheetApp.table(tenantId, filter);
+ return res.status(200).send(table);
+ // Retrieves the csv format.
+ } else if (ACCEPT_TYPE.APPLICATION_CSV === acceptType) {
+ const buffer = await this.journalSheetApp.csv(tenantId, filter);
+
+ res.setHeader('Content-Disposition', 'attachment; filename=output.csv');
+ res.setHeader('Content-Type', 'text/csv');
+
+ return res.send(buffer);
+ // Retrieves the xlsx format.
+ } else if (ACCEPT_TYPE.APPLICATION_XLSX === acceptType) {
+ const buffer = await this.journalSheetApp.xlsx(tenantId, filter);
+
+ res.setHeader('Content-Disposition', 'attachment; filename=output.xlsx');
+ res.setHeader(
+ 'Content-Type',
+ 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'
);
+ return res.send(buffer);
+ // Retrieves the json format.
+ } else {
+ const sheet = await this.journalSheetApp.sheet(tenantId, filter);
- return res.status(200).send({
- data: this.transfromToResponse(data),
- query: this.transfromToResponse(query),
- meta: this.transfromToResponse(meta),
- });
- } catch (error) {
- next(error);
+ return res.status(200).send(sheet);
}
}
}
diff --git a/packages/server/src/api/controllers/FinancialStatements/ProfitLossSheet.ts b/packages/server/src/api/controllers/FinancialStatements/ProfitLossSheet.ts
index 233654dc0..8c2404335 100644
--- a/packages/server/src/api/controllers/FinancialStatements/ProfitLossSheet.ts
+++ b/packages/server/src/api/controllers/FinancialStatements/ProfitLossSheet.ts
@@ -1,24 +1,20 @@
import { Service, Inject } from 'typedi';
import { Router, Request, Response, NextFunction } from 'express';
import { query, ValidationChain } from 'express-validator';
-import ProfitLossSheetService from '@/services/FinancialStatements/ProfitLossSheet/ProfitLossSheetService';
import BaseFinancialReportController from './BaseFinancialReportController';
import CheckPolicies from '@/api/middleware/CheckPolicies';
import { AbilitySubject, ReportsAction } from '@/interfaces';
-import { ProfitLossSheetTable } from '@/services/FinancialStatements/ProfitLossSheet/ProfitLossSheetTable';
-import HasTenancyService from '@/services/Tenancy/TenancyService';
+import { ACCEPT_TYPE } from '@/interfaces/Http';
+import { ProfitLossSheetApplication } from '@/services/FinancialStatements/ProfitLossSheet/ProfitLossSheetApplication';
@Service()
export default class ProfitLossSheetController extends BaseFinancialReportController {
@Inject()
- profitLossSheetService: ProfitLossSheetService;
-
- @Inject()
- tenancy: HasTenancyService;
+ private profitLossSheetApp: ProfitLossSheetApplication;
/**
* Router constructor.
*/
- router() {
+ public router() {
const router = Router();
router.get(
@@ -34,7 +30,7 @@ export default class ProfitLossSheetController extends BaseFinancialReportContro
/**
* Validation schema.
*/
- get validationSchema(): ValidationChain[] {
+ private get validationSchema(): ValidationChain[] {
return [
...this.sheetNumberFormatValidationSchema,
query('basis').optional(),
@@ -85,37 +81,54 @@ export default class ProfitLossSheetController extends BaseFinancialReportContro
* @param {Request} req -
* @param {Response} res -
*/
- async profitLossSheet(req: Request, res: Response, next: NextFunction) {
- const { tenantId, settings } = req;
- const i18n = this.tenancy.i18n(tenantId);
+ private async profitLossSheet(
+ req: Request,
+ res: Response,
+ next: NextFunction
+ ) {
+ const { tenantId } = req;
const filter = this.matchedQueryData(req);
+ const accept = this.accepts(req);
+
+ const acceptType = accept.types([
+ ACCEPT_TYPE.APPLICATION_JSON,
+ ACCEPT_TYPE.APPLICATION_JSON_TABLE,
+ ACCEPT_TYPE.APPLICATION_CSV,
+ ACCEPT_TYPE.APPLICATION_XLSX,
+ ]);
try {
- const { data, query, meta } =
- await this.profitLossSheetService.profitLossSheet(tenantId, filter);
+ // Retrieves the csv format.
+ if (acceptType === ACCEPT_TYPE.APPLICATION_CSV) {
+ const sheet = await this.profitLossSheetApp.csv(tenantId, filter);
- const accept = this.accepts(req);
- const acceptType = accept.types(['json', 'application/json+table']);
+ res.setHeader('Content-Disposition', 'attachment; filename=output.csv');
+ res.setHeader('Content-Type', 'text/csv');
- switch (acceptType) {
- case 'application/json+table':
- const table = new ProfitLossSheetTable(data, query, i18n);
+ return res.send(sheet);
+ // Retrieves the json table format.
+ } else if (acceptType === ACCEPT_TYPE.APPLICATION_JSON_TABLE) {
+ const table = await this.profitLossSheetApp.table(tenantId, filter);
- return res.status(200).send({
- table: {
- rows: table.tableRows(),
- columns: table.tableColumns(),
- },
- query,
- meta,
- });
- case 'json':
- default:
- return res.status(200).send({
- data,
- query,
- meta,
- });
+ return res.status(200).send(table);
+ // Retrieves the xlsx format.
+ } else if (acceptType === ACCEPT_TYPE.APPLICATION_XLSX) {
+ const sheet = await this.profitLossSheetApp.xlsx(tenantId, filter);
+
+ res.setHeader(
+ 'Content-Disposition',
+ 'attachment; filename=output.xlsx'
+ );
+ res.setHeader(
+ 'Content-Type',
+ 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'
+ );
+ return res.send(sheet);
+ // Retrieves the json format.
+ } else {
+ const sheet = await this.profitLossSheetApp.sheet(tenantId, filter);
+
+ return res.status(200).send(sheet);
}
} catch (error) {
next(error);
diff --git a/packages/server/src/api/controllers/FinancialStatements/SalesByItems.ts b/packages/server/src/api/controllers/FinancialStatements/SalesByItems.ts
index 759165bd1..d31954398 100644
--- a/packages/server/src/api/controllers/FinancialStatements/SalesByItems.ts
+++ b/packages/server/src/api/controllers/FinancialStatements/SalesByItems.ts
@@ -16,15 +16,12 @@ export default class SalesByItemsReportController extends BaseFinancialReportCon
/**
* Router constructor.
*/
- router() {
+ public router() {
const router = Router();
router.get(
'/',
- CheckPolicies(
- ReportsAction.READ_SALES_BY_ITEMS,
- AbilitySubject.Report
- ),
+ CheckPolicies(ReportsAction.READ_SALES_BY_ITEMS, AbilitySubject.Report),
this.validationSchema,
this.validationResult,
asyncMiddleware(this.purchasesByItems.bind(this))
@@ -35,7 +32,7 @@ export default class SalesByItemsReportController extends BaseFinancialReportCon
/**
* Validation schema.
*/
- get validationSchema(): ValidationChain[] {
+ private get validationSchema(): ValidationChain[] {
return [
query('from_date').optional().isISO8601(),
query('to_date').optional().isISO8601(),
@@ -63,7 +60,11 @@ export default class SalesByItemsReportController extends BaseFinancialReportCon
* @param {Request} req -
* @param {Response} res -
*/
- async purchasesByItems(req: Request, res: Response, next: NextFunction) {
+ private async purchasesByItems(
+ req: Request,
+ res: Response,
+ next: NextFunction
+ ) {
const { tenantId } = req;
const filter = this.matchedQueryData(req);
diff --git a/packages/server/src/api/controllers/FinancialStatements/SalesTaxLiabilitySummary/index.ts b/packages/server/src/api/controllers/FinancialStatements/SalesTaxLiabilitySummary/index.ts
index 56c837288..933b5c9c4 100644
--- a/packages/server/src/api/controllers/FinancialStatements/SalesTaxLiabilitySummary/index.ts
+++ b/packages/server/src/api/controllers/FinancialStatements/SalesTaxLiabilitySummary/index.ts
@@ -1,20 +1,21 @@
+import { Inject } from 'typedi';
import { Router, Request, Response, NextFunction } from 'express';
import { query } from 'express-validator';
-import { Inject } from 'typedi';
import asyncMiddleware from '@/api/middleware/asyncMiddleware';
import BaseFinancialReportController from '../BaseFinancialReportController';
import { AbilitySubject, ReportsAction } from '@/interfaces';
import CheckPolicies from '@/api/middleware/CheckPolicies';
-import { SalesTaxLiabilitySummaryService } from '@/services/FinancialStatements/SalesTaxLiabilitySummary/SalesTaxLiabilitySummaryService';
+import { SalesTaxLiabilitySummaryApplication } from '@/services/FinancialStatements/SalesTaxLiabilitySummary/SalesTaxLiabilitySummaryApplication';
+import { ACCEPT_TYPE } from '@/interfaces/Http';
export default class SalesTaxLiabilitySummary extends BaseFinancialReportController {
@Inject()
- private salesTaxLiabilitySummaryService: SalesTaxLiabilitySummaryService;
+ private salesTaxLiabilitySummaryApp: SalesTaxLiabilitySummaryApplication;
/**
* Router constructor.
*/
- router() {
+ public router() {
const router = Router();
router.get(
@@ -31,8 +32,9 @@ export default class SalesTaxLiabilitySummary extends BaseFinancialReportControl
/**
* Validation schema.
+ * @returns {ValidationChain[]}
*/
- get validationSchema() {
+ private get validationSchema() {
return [
query('from_date').optional().isISO8601(),
query('to_date').optional().isISO8601(),
@@ -45,7 +47,7 @@ export default class SalesTaxLiabilitySummary extends BaseFinancialReportControl
* @param {Response} res -
* @param {NextFunction} next -
*/
- async salesTaxLiabilitySummary(
+ private async salesTaxLiabilitySummary(
req: Request,
res: Response,
next: NextFunction
@@ -55,33 +57,52 @@ export default class SalesTaxLiabilitySummary extends BaseFinancialReportControl
try {
const accept = this.accepts(req);
- const acceptType = accept.types(['json', 'application/json+table']);
+ const acceptType = accept.types([
+ ACCEPT_TYPE.APPLICATION_JSON,
+ ACCEPT_TYPE.APPLICATION_JSON_TABLE,
+ ACCEPT_TYPE.APPLICATION_CSV,
+ ACCEPT_TYPE.APPLICATION_XLSX,
+ ]);
- switch (acceptType) {
- case 'application/json+table':
- const salesTaxLiabilityTable =
- await this.salesTaxLiabilitySummaryService.salesTaxLiabilitySummaryTable(
- tenantId,
- filter
- );
+ // Retrieves the json table format.
+ if (acceptType === ACCEPT_TYPE.APPLICATION_JSON_TABLE) {
+ const table = await this.salesTaxLiabilitySummaryApp.table(
+ tenantId,
+ filter
+ );
+ return res.status(200).send(table);
+ // Retrieves the xlsx format.
+ } else if (acceptType === ACCEPT_TYPE.APPLICATION_XLSX) {
+ const buffer = await this.salesTaxLiabilitySummaryApp.xlsx(
+ tenantId,
+ filter
+ );
+ res.setHeader(
+ 'Content-Disposition',
+ 'attachment; filename=output.xlsx'
+ );
+ res.setHeader(
+ 'Content-Type',
+ 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'
+ );
+ return res.send(buffer);
+ // Retrieves the csv format.
+ } else if (acceptType === ACCEPT_TYPE.APPLICATION_CSV) {
+ const buffer = await this.salesTaxLiabilitySummaryApp.csv(
+ tenantId,
+ filter
+ );
+ res.setHeader('Content-Disposition', 'attachment; filename=output.csv');
+ res.setHeader('Content-Type', 'text/csv');
- return res.status(200).send({
- table: salesTaxLiabilityTable.table,
- query: salesTaxLiabilityTable.query,
- meta: salesTaxLiabilityTable.meta,
- });
- case 'json':
- default:
- const salesTaxLiability =
- await this.salesTaxLiabilitySummaryService.salesTaxLiability(
- tenantId,
- filter
- );
- return res.status(200).send({
- data: salesTaxLiability.data,
- query: salesTaxLiability.query,
- meta: salesTaxLiability.meta,
- });
+ return res.send(buffer);
+ // Retrieves the json format.
+ } else {
+ const sheet = await this.salesTaxLiabilitySummaryApp.sheet(
+ tenantId,
+ filter
+ );
+ return res.status(200).send(sheet);
}
} catch (error) {
next(error);
diff --git a/packages/server/src/api/controllers/FinancialStatements/TransactionsByCustomers/index.ts b/packages/server/src/api/controllers/FinancialStatements/TransactionsByCustomers/index.ts
index fa20ea3f3..4bc3b1f44 100644
--- a/packages/server/src/api/controllers/FinancialStatements/TransactionsByCustomers/index.ts
+++ b/packages/server/src/api/controllers/FinancialStatements/TransactionsByCustomers/index.ts
@@ -1,30 +1,22 @@
import { Router, Request, Response, NextFunction } from 'express';
import { query } from 'express-validator';
import { Inject, Service } from 'typedi';
-import {
- AbilitySubject,
- ITransactionsByCustomersStatement,
- ReportsAction,
-} from '@/interfaces';
+import { AbilitySubject, ReportsAction } from '@/interfaces';
import asyncMiddleware from '@/api/middleware/asyncMiddleware';
import BaseFinancialReportController from '../BaseFinancialReportController';
-import TransactionsByCustomersService from '@/services/FinancialStatements/TransactionsByCustomer/TransactionsByCustomersService';
-import TransactionsByCustomersTableRows from '@/services/FinancialStatements/TransactionsByCustomer/TransactionsByCustomersTableRows';
-import HasTenancyService from '@/services/Tenancy/TenancyService';
import CheckPolicies from '@/api/middleware/CheckPolicies';
+import { TransactionsByCustomerApplication } from '@/services/FinancialStatements/TransactionsByCustomer/TransactionsByCustomersApplication';
+import { ACCEPT_TYPE } from '@/interfaces/Http';
@Service()
export default class TransactionsByCustomersReportController extends BaseFinancialReportController {
@Inject()
- transactionsByCustomersService: TransactionsByCustomersService;
-
- @Inject()
- tenancy: HasTenancyService;
+ private transactionsByCustomersApp: TransactionsByCustomerApplication;
/**
* Router constructor.
*/
- router() {
+ public router() {
const router = Router();
router.get(
@@ -58,45 +50,13 @@ export default class TransactionsByCustomersReportController extends BaseFinanci
];
}
- /**
- * Transformes the statement to table rows response.
- * @param {ITransactionsByCustomersStatement} statement -
- */
- private transformToTableResponse(customersTransactions, tenantId) {
- const i18n = this.tenancy.i18n(tenantId);
- const table = new TransactionsByCustomersTableRows(
- customersTransactions,
- i18n
- );
- return {
- table: {
- rows: table.tableRows(),
- },
- };
- }
-
- /**
- * Transformes the statement to json response.
- * @param {ITransactionsByCustomersStatement} statement -
- */
- private transfromToJsonResponse(
- data,
- columns
- ): ITransactionsByCustomersStatement {
- return {
- data: this.transfromToResponse(data),
- columns: this.transfromToResponse(columns),
- query: this.transfromToResponse(query),
- };
- }
-
/**
* Retrieve payable aging summary report.
* @param {Request} req -
* @param {Response} res -
* @param {NextFunction} next -
*/
- async transactionsByCustomers(
+ private async transactionsByCustomers(
req: Request,
res: Response,
next: NextFunction
@@ -104,25 +64,51 @@ export default class TransactionsByCustomersReportController extends BaseFinanci
const { tenantId } = req;
const filter = this.matchedQueryData(req);
+ const accept = this.accepts(req);
+ const acceptType = accept.types([
+ ACCEPT_TYPE.APPLICATION_JSON,
+ ACCEPT_TYPE.APPLICATION_JSON_TABLE,
+ ACCEPT_TYPE.APPLICATION_CSV,
+ ACCEPT_TYPE.APPLICATION_XLSX,
+ ]);
try {
- const report =
- await this.transactionsByCustomersService.transactionsByCustomers(
+ // Retrieves the json table format.
+ if (ACCEPT_TYPE.APPLICATION_JSON_TABLE === acceptType) {
+ const table = await this.transactionsByCustomersApp.table(
tenantId,
filter
);
- const accept = this.accepts(req);
- const acceptType = accept.types(['json', 'application/json+table']);
+ return res.status(200).send(table);
+ // Retrieve the csv format.
+ } else if (ACCEPT_TYPE.APPLICATION_CSV === acceptType) {
+ const csv = await this.transactionsByCustomersApp.csv(tenantId, filter);
- switch (acceptType) {
- case 'json':
- return res
- .status(200)
- .send(this.transfromToJsonResponse(report.data, report.columns));
- case 'application/json+table':
- default:
- return res
- .status(200)
- .send(this.transformToTableResponse(report.data, tenantId));
+ res.setHeader('Content-Disposition', 'attachment; filename=output.csv');
+ res.setHeader('Content-Type', 'text/csv');
+
+ return res.send(csv);
+ // Retrieve the xlsx format.
+ } else if (ACCEPT_TYPE.APPLICATION_XLSX === acceptType) {
+ const buffer = await this.transactionsByCustomersApp.xlsx(
+ tenantId,
+ filter
+ );
+ res.setHeader(
+ 'Content-Disposition',
+ 'attachment; filename=output.xlsx'
+ );
+ res.setHeader(
+ 'Content-Type',
+ 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'
+ );
+ return res.send(buffer);
+ // Retrieve the json format.
+ } else {
+ const sheet = await this.transactionsByCustomersApp.sheet(
+ tenantId,
+ filter
+ );
+ return res.status(200).send(sheet);
}
} catch (error) {
next(error);
diff --git a/packages/server/src/api/controllers/FinancialStatements/TransactionsByVendors/index.ts b/packages/server/src/api/controllers/FinancialStatements/TransactionsByVendors/index.ts
index eaf8e6725..a0c1bf037 100644
--- a/packages/server/src/api/controllers/FinancialStatements/TransactionsByVendors/index.ts
+++ b/packages/server/src/api/controllers/FinancialStatements/TransactionsByVendors/index.ts
@@ -3,27 +3,19 @@ import { query, ValidationChain } from 'express-validator';
import { Inject } from 'typedi';
import asyncMiddleware from '@/api/middleware/asyncMiddleware';
import BaseFinancialReportController from '../BaseFinancialReportController';
-import TransactionsByVendorsTableRows from '@/services/FinancialStatements/TransactionsByVendor/TransactionsByVendorTableRows';
-import TransactionsByVendorsService from '@/services/FinancialStatements/TransactionsByVendor/TransactionsByVendorService';
-import {
- AbilitySubject,
- ITransactionsByVendorsStatement,
- ReportsAction,
-} from '@/interfaces';
-import HasTenancyService from '@/services/Tenancy/TenancyService';
+import { AbilitySubject, ReportsAction } from '@/interfaces';
import CheckPolicies from '@/api/middleware/CheckPolicies';
+import { ACCEPT_TYPE } from '@/interfaces/Http';
+import { TransactionsByVendorApplication } from '@/services/FinancialStatements/TransactionsByVendor/TransactionsByVendorApplication';
export default class TransactionsByVendorsReportController extends BaseFinancialReportController {
@Inject()
- transactionsByVendorsService: TransactionsByVendorsService;
-
- @Inject()
- tenancy: HasTenancyService;
+ private transactionsByVendorsApp: TransactionsByVendorApplication;
/**
* Router constructor.
*/
- router() {
+ public router() {
const router = Router();
router.get(
@@ -42,7 +34,7 @@ export default class TransactionsByVendorsReportController extends BaseFinancial
/**
* Validation schema.
*/
- get validationSchema(): ValidationChain[] {
+ private get validationSchema(): ValidationChain[] {
return [
...this.sheetNumberFormatValidationSchema,
@@ -58,64 +50,64 @@ export default class TransactionsByVendorsReportController extends BaseFinancial
];
}
- /**
- * Transformes the report statement to table rows.
- * @param {ITransactionsByVendorsStatement} statement -
- */
- private transformToTableRows(tenantId: number, transactions: any[]) {
- const i18n = this.tenancy.i18n(tenantId);
- const table = new TransactionsByVendorsTableRows(transactions, i18n);
-
- return {
- table: {
- data: table.tableRows(),
- },
- };
- }
-
- /**
- * Transformes the report statement to json response.
- * @param {ITransactionsByVendorsStatement} statement -
- */
- private transformToJsonResponse({
- data,
- columns,
- query,
- }: ITransactionsByVendorsStatement) {
- return {
- data: this.transfromToResponse(data),
- columns: this.transfromToResponse(columns),
- query: this.transfromToResponse(query),
- };
- }
-
/**
* Retrieve payable aging summary report.
* @param {Request} req -
* @param {Response} res -
* @param {NextFunction} next -
*/
- async transactionsByVendors(req: Request, res: Response, next: NextFunction) {
+ private async transactionsByVendors(
+ req: Request,
+ res: Response,
+ next: NextFunction
+ ) {
const { tenantId } = req;
const filter = this.matchedQueryData(req);
try {
- const report =
- await this.transactionsByVendorsService.transactionsByVendors(
+ const accept = this.accepts(req);
+ const acceptType = accept.types([
+ ACCEPT_TYPE.APPLICATION_JSON,
+ ACCEPT_TYPE.APPLICATION_JSON_TABLE,
+ ACCEPT_TYPE.APPLICATION_CSV,
+ ACCEPT_TYPE.APPLICATION_XLSX,
+ ]);
+
+ // Retrieves the xlsx format.
+ if (ACCEPT_TYPE.APPLICATION_XLSX === acceptType) {
+ const buffer = await this.transactionsByVendorsApp.xlsx(
tenantId,
filter
);
- const accept = this.accepts(req);
- const acceptType = accept.types(['json', 'application/json+table']);
-
- switch (acceptType) {
- case 'application/json+table':
- return res
- .status(200)
- .send(this.transformToTableRows(tenantId, report.data));
- case 'json':
- default:
- return res.status(200).send(this.transformToJsonResponse(report));
+ res.setHeader('Content-Type', 'application/vnd.openxmlformats');
+ res.setHeader(
+ 'Content-Disposition',
+ 'attachment; filename=report.xlsx'
+ );
+ return res.send(buffer);
+ // Retrieves the csv format.
+ } else if (ACCEPT_TYPE.APPLICATION_CSV === acceptType) {
+ const buffer = await this.transactionsByVendorsApp.csv(
+ tenantId,
+ filter
+ );
+ res.setHeader('Content-Type', 'text/csv');
+ res.setHeader('Content-Disposition', 'attachment; filename=report.csv');
+ return res.send(buffer);
+ // Retrieves the json table format.
+ } else if (ACCEPT_TYPE.APPLICATION_JSON_TABLE === acceptType) {
+ const table = await this.transactionsByVendorsApp.table(
+ tenantId,
+ filter
+ );
+ return res.status(200).send(table);
+ // Retrieves the json format.
+ } else {
+ const sheet = await this.transactionsByVendorsApp.sheet(
+ tenantId,
+ filter
+ );
+ return res.status(200).send(sheet);
}
} catch (error) {
next(error);
diff --git a/packages/server/src/api/controllers/FinancialStatements/TrialBalanceSheet.ts b/packages/server/src/api/controllers/FinancialStatements/TrialBalanceSheet.ts
index 4fa298fa0..ce23c1071 100644
--- a/packages/server/src/api/controllers/FinancialStatements/TrialBalanceSheet.ts
+++ b/packages/server/src/api/controllers/FinancialStatements/TrialBalanceSheet.ts
@@ -3,20 +3,22 @@ import { Request, Response, Router, NextFunction } from 'express';
import { query, ValidationChain } from 'express-validator';
import { castArray } from 'lodash';
import asyncMiddleware from '@/api/middleware/asyncMiddleware';
-import TrialBalanceSheetService from '@/services/FinancialStatements/TrialBalanceSheet/TrialBalanceSheetService';
+import TrialBalanceSheetService from '@/services/FinancialStatements/TrialBalanceSheet/TrialBalanceSheetInjectable';
import BaseFinancialReportController from './BaseFinancialReportController';
import { AbilitySubject, ReportsAction } from '@/interfaces';
import CheckPolicies from '@/api/middleware/CheckPolicies';
+import { TrialBalanceSheetApplication } from '@/services/FinancialStatements/TrialBalanceSheet/TrialBalanceSheetApplication';
+import { ACCEPT_TYPE } from '@/interfaces/Http';
@Service()
export default class TrialBalanceSheetController extends BaseFinancialReportController {
@Inject()
- trialBalanceSheetService: TrialBalanceSheetService;
+ private trialBalanceSheetApp: TrialBalanceSheetApplication;
/**
* Router constructor.
*/
- router() {
+ public router() {
const router = Router();
router.get(
@@ -36,7 +38,7 @@ export default class TrialBalanceSheetController extends BaseFinancialReportCont
* Validation schema.
* @return {ValidationChain[]}
*/
- get trialBalanceSheetValidationSchema(): ValidationChain[] {
+ private get trialBalanceSheetValidationSchema(): ValidationChain[] {
return [
...this.sheetNumberFormatValidationSchema,
query('basis').optional(),
@@ -59,28 +61,62 @@ export default class TrialBalanceSheetController extends BaseFinancialReportCont
/**
* Retrieve the trial balance sheet.
*/
- public async trialBalanceSheet(
+ private async trialBalanceSheet(
req: Request,
res: Response,
next: NextFunction
) {
- const { tenantId, settings } = req;
+ const { tenantId } = req;
let filter = this.matchedQueryData(req);
filter = {
...filter,
accountsIds: castArray(filter.accountsIds),
};
-
try {
- const { data, query, meta } =
- await this.trialBalanceSheetService.trialBalanceSheet(tenantId, filter);
+ const accept = this.accepts(req);
- return res.status(200).send({
- data: this.transfromToResponse(data),
- query: this.transfromToResponse(query),
- meta: this.transfromToResponse(meta),
- });
+ const acceptType = accept.types([
+ ACCEPT_TYPE.APPLICATION_JSON,
+ ACCEPT_TYPE.APPLICATION_JSON_TABLE,
+ ACCEPT_TYPE.APPLICATION_CSV,
+ ACCEPT_TYPE.APPLICATION_XLSX,
+ ]);
+ // Retrieves in json table format.
+ if (acceptType === ACCEPT_TYPE.APPLICATION_JSON_TABLE) {
+ const { table, meta, query } = await this.trialBalanceSheetApp.table(
+ tenantId,
+ filter
+ );
+ return res.status(200).send({ table, meta, query });
+ // Retrieves in xlsx format
+ } else if (acceptType === ACCEPT_TYPE.APPLICATION_XLSX) {
+ const buffer = await this.trialBalanceSheetApp.xlsx(tenantId, filter);
+ res.setHeader(
+ 'Content-Disposition',
+ 'attachment; filename=output.xlsx'
+ );
+ res.setHeader(
+ 'Content-Type',
+ 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'
+ );
+ return res.send(buffer);
+ // Retrieves in csv format.
+ } else if (acceptType === ACCEPT_TYPE.APPLICATION_CSV) {
+ const buffer = await this.trialBalanceSheetApp.csv(tenantId, filter);
+
+ res.setHeader('Content-Disposition', 'attachment; filename=output.csv');
+ res.setHeader('Content-Type', 'text/csv');
+
+ return res.send(buffer);
+ // Retrieves in json format.
+ } else {
+ const { data, query, meta } = await this.trialBalanceSheetApp.sheet(
+ tenantId,
+ filter
+ );
+ return res.status(200).send({ data, query, meta });
+ }
} catch (error) {
next(error);
}
diff --git a/packages/server/src/api/controllers/FinancialStatements/VendorBalanceSummary/index.ts b/packages/server/src/api/controllers/FinancialStatements/VendorBalanceSummary/index.ts
index e93891938..ade69cb62 100644
--- a/packages/server/src/api/controllers/FinancialStatements/VendorBalanceSummary/index.ts
+++ b/packages/server/src/api/controllers/FinancialStatements/VendorBalanceSummary/index.ts
@@ -3,27 +3,19 @@ import { query } from 'express-validator';
import { Inject } from 'typedi';
import asyncMiddleware from '@/api/middleware/asyncMiddleware';
import BaseFinancialReportController from '../BaseFinancialReportController';
-import VendorBalanceSummaryTableRows from '@/services/FinancialStatements/VendorBalanceSummary/VendorBalanceSummaryTableRows';
-import VendorBalanceSummaryService from '@/services/FinancialStatements/VendorBalanceSummary/VendorBalanceSummaryService';
-import {
- AbilitySubject,
- IVendorBalanceSummaryStatement,
- ReportsAction,
-} from '@/interfaces';
+import { AbilitySubject, ReportsAction } from '@/interfaces';
import CheckPolicies from '@/api/middleware/CheckPolicies';
-import HasTenancyService from '@/services/Tenancy/TenancyService';
+import { ACCEPT_TYPE } from '@/interfaces/Http';
+import { VendorBalanceSummaryApplication } from '@/services/FinancialStatements/VendorBalanceSummary/VendorBalanceSummaryApplication';
export default class VendorBalanceSummaryReportController extends BaseFinancialReportController {
@Inject()
- vendorBalanceSummaryService: VendorBalanceSummaryService;
-
- @Inject()
- tenancy: HasTenancyService;
+ private vendorBalanceSummaryApp: VendorBalanceSummaryApplication;
/**
* Router constructor.
*/
- router() {
+ public router() {
const router = Router();
router.get(
@@ -41,7 +33,7 @@ export default class VendorBalanceSummaryReportController extends BaseFinancialR
/**
* Validation schema.
*/
- get validationSchema() {
+ private get validationSchema() {
return [
...this.sheetNumberFormatValidationSchema,
query('as_date').optional().isISO8601(),
@@ -59,73 +51,62 @@ export default class VendorBalanceSummaryReportController extends BaseFinancialR
];
}
- /**
- * Transformes the report statement to table rows.
- * @param {IVendorBalanceSummaryStatement} statement -
- */
- private transformToTableRows(
- tenantId: number,
- { data, query }: IVendorBalanceSummaryStatement
- ) {
- const i18n = this.tenancy.i18n(tenantId);
- const tableData = new VendorBalanceSummaryTableRows(
- data,
- query,
- i18n
- );
- return {
- table: {
- columns: tableData.tableColumns(),
- data: tableData.tableRows(),
- },
- query,
- };
- }
-
- /**
- * Transformes the report statement to raw json.
- * @param {IVendorBalanceSummaryStatement} statement -
- */
- private transformToJsonResponse({
- data,
- columns,
- }: IVendorBalanceSummaryStatement) {
- return {
- data: this.transfromToResponse(data),
- columns: this.transfromToResponse(columns),
- query: this.transfromToResponse(query),
- };
- }
-
/**
* Retrieve vendors balance summary.
* @param {Request} req -
* @param {Response} res -
* @param {NextFunction} next -
*/
- async vendorBalanceSummary(req: Request, res: Response, next: NextFunction) {
- const { tenantId, settings } = req;
+ public async vendorBalanceSummary(
+ req: Request,
+ res: Response,
+ next: NextFunction
+ ) {
+ const { tenantId } = req;
const filter = this.matchedQueryData(req);
try {
- const vendorBalanceSummary =
- await this.vendorBalanceSummaryService.vendorBalanceSummary(
+ const accept = this.accepts(req);
+ const acceptType = accept.types([
+ ACCEPT_TYPE.APPLICATION_JSON,
+ ACCEPT_TYPE.APPLICATION_JSON_TABLE,
+ ACCEPT_TYPE.APPLICATION_CSV,
+ ACCEPT_TYPE.APPLICATION_XLSX,
+ ]);
+
+ // Retrieves the csv format.
+ if (acceptType === ACCEPT_TYPE.APPLICATION_CSV) {
+ const buffer = await this.vendorBalanceSummaryApp.csv(tenantId, filter);
+
+ res.setHeader('Content-Disposition', 'attachment; filename=output.csv');
+ res.setHeader('Content-Type', 'text/csv');
+
+ return res.send(buffer);
+ } else if (acceptType === ACCEPT_TYPE.APPLICATION_XLSX) {
+ const buffer = await this.vendorBalanceSummaryApp.xlsx(
tenantId,
filter
);
- const accept = this.accepts(req);
- const acceptType = accept.types(['json', 'application/json+table']);
-
- switch (acceptType) {
- case 'application/json+table':
- return res
- .status(200)
- .send(this.transformToTableRows(tenantId, vendorBalanceSummary));
- case 'json':
- default:
- return res
- .status(200)
- .send(this.transformToJsonResponse(vendorBalanceSummary));
+ res.setHeader(
+ 'Content-Disposition',
+ 'attachment; filename=output.xlsx'
+ );
+ res.setHeader('Content-Type', 'application/vnd.openxmlformats');
+ return res.send(buffer);
+ // Retrieves the json table format.
+ } else if (acceptType === ACCEPT_TYPE.APPLICATION_JSON_TABLE) {
+ const table = await this.vendorBalanceSummaryApp.table(
+ tenantId,
+ filter
+ );
+ return res.status(200).send(table);
+ // Retrieves the json format.
+ } else {
+ const sheet = await this.vendorBalanceSummaryApp.sheet(
+ tenantId,
+ filter
+ );
+ return res.status(200).send(sheet);
}
} catch (error) {
next(error);
diff --git a/packages/server/src/api/controllers/Organization.ts b/packages/server/src/api/controllers/Organization.ts
index c746a0484..746e4f5be 100644
--- a/packages/server/src/api/controllers/Organization.ts
+++ b/packages/server/src/api/controllers/Organization.ts
@@ -31,14 +31,14 @@ export default class OrganizationController extends BaseController {
router.post(
'/build',
- this.organizationValidationSchema,
+ this.buildOrganizationValidationSchema,
this.validationResult,
asyncMiddleware(this.build.bind(this)),
this.handleServiceErrors.bind(this)
);
router.put(
'/',
- this.organizationValidationSchema,
+ this.updateOrganizationValidationSchema,
this.validationResult,
this.asyncMiddleware(this.updateOrganization.bind(this)),
this.handleServiceErrors.bind(this)
@@ -55,7 +55,7 @@ export default class OrganizationController extends BaseController {
* Organization setup schema.
* @return {ValidationChain[]}
*/
- private get organizationValidationSchema(): ValidationChain[] {
+ private get commonOrganizationValidationSchema(): ValidationChain[] {
return [
check('name').exists().trim(),
check('industry').optional({ nullable: true }).isString().trim().escape(),
@@ -68,6 +68,29 @@ export default class OrganizationController extends BaseController {
];
}
+ /**
+ * Build organization validation schema.
+ * @returns {ValidationChain[]}
+ */
+ private get buildOrganizationValidationSchema(): ValidationChain[] {
+ return [...this.commonOrganizationValidationSchema];
+ }
+
+ /**
+ * Update organization validation schema.
+ * @returns {ValidationChain[]}
+ */
+ private get updateOrganizationValidationSchema(): ValidationChain[] {
+ return [
+ ...this.commonOrganizationValidationSchema,
+ check('tax_number')
+ .optional({ nullable: true })
+ .isString()
+ .trim()
+ .escape(),
+ ];
+ }
+
/**
* Builds tenant database and migrate database schema.
* @param {Request} req - Express request.
diff --git a/packages/server/src/api/controllers/Purchases/Bills.ts b/packages/server/src/api/controllers/Purchases/Bills.ts
index 61fc5cf70..2cd9e62de 100644
--- a/packages/server/src/api/controllers/Purchases/Bills.ts
+++ b/packages/server/src/api/controllers/Purchases/Bills.ts
@@ -122,7 +122,7 @@ export default class BillsController extends BaseController {
check('entries.*.index').exists().isNumeric().toInt(),
check('entries.*.item_id').exists().isNumeric().toInt(),
check('entries.*.rate').exists().isNumeric().toFloat(),
- check('entries.*.quantity').exists().isNumeric().toFloat(),
+ check('entries.*.quantity').exists().isNumeric().toInt(),
check('entries.*.discount')
.optional({ nullable: true })
.isNumeric()
diff --git a/packages/server/src/api/controllers/Purchases/BillsPayments.ts b/packages/server/src/api/controllers/Purchases/BillsPayments.ts
index 8959fdd8e..a663a3032 100644
--- a/packages/server/src/api/controllers/Purchases/BillsPayments.ts
+++ b/packages/server/src/api/controllers/Purchases/BillsPayments.ts
@@ -121,7 +121,7 @@ export default class BillsPayments extends BaseController {
check('entries').exists().isArray({ min: 1 }),
check('entries.*.index').optional().isNumeric().toInt(),
check('entries.*.bill_id').exists().isNumeric().toInt(),
- check('entries.*.payment_amount').exists().isNumeric().toInt(),
+ check('entries.*.payment_amount').exists().isNumeric().toFloat(),
];
}
diff --git a/packages/server/src/api/controllers/Purchases/VendorCredit.ts b/packages/server/src/api/controllers/Purchases/VendorCredit.ts
index 95405851c..3d2832308 100644
--- a/packages/server/src/api/controllers/Purchases/VendorCredit.ts
+++ b/packages/server/src/api/controllers/Purchases/VendorCredit.ts
@@ -173,7 +173,7 @@ export default class VendorCreditController extends BaseController {
check('entries.*.index').exists().isNumeric().toInt(),
check('entries.*.item_id').exists().isNumeric().toInt(),
check('entries.*.rate').exists().isNumeric().toFloat(),
- check('entries.*.quantity').exists().isNumeric().toFloat(),
+ check('entries.*.quantity').exists().isNumeric().toInt(),
check('entries.*.discount')
.optional({ nullable: true })
.isNumeric()
@@ -211,12 +211,11 @@ export default class VendorCreditController extends BaseController {
check('branch_id').optional({ nullable: true }).isNumeric().toInt(),
check('entries').isArray({ min: 1 }),
-
check('entries.*.id').optional().isNumeric().toInt(),
check('entries.*.index').exists().isNumeric().toInt(),
check('entries.*.item_id').exists().isNumeric().toInt(),
check('entries.*.rate').exists().isNumeric().toFloat(),
- check('entries.*.quantity').exists().isNumeric().toFloat(),
+ check('entries.*.quantity').exists().isNumeric().toInt(),
check('entries.*.discount')
.optional({ nullable: true })
.isNumeric()
diff --git a/packages/server/src/api/controllers/Sales/CreditNotes.ts b/packages/server/src/api/controllers/Sales/CreditNotes.ts
index 29bcae2fb..77b506c7d 100644
--- a/packages/server/src/api/controllers/Sales/CreditNotes.ts
+++ b/packages/server/src/api/controllers/Sales/CreditNotes.ts
@@ -222,7 +222,7 @@ export default class PaymentReceivesController extends BaseController {
check('entries.*.index').exists().isNumeric().toInt(),
check('entries.*.item_id').exists().isNumeric().toInt(),
check('entries.*.rate').exists().isNumeric().toFloat(),
- check('entries.*.quantity').exists().isNumeric().toFloat(),
+ check('entries.*.quantity').exists().isNumeric().toInt(),
check('entries.*.discount')
.optional({ nullable: true })
.isNumeric()
diff --git a/packages/server/src/api/controllers/Sales/PaymentReceives.ts b/packages/server/src/api/controllers/Sales/PaymentReceives.ts
index ec210ad23..20e61fe3a 100644
--- a/packages/server/src/api/controllers/Sales/PaymentReceives.ts
+++ b/packages/server/src/api/controllers/Sales/PaymentReceives.ts
@@ -1,10 +1,11 @@
import { Inject, Service } from 'typedi';
import { Router, Request, Response, NextFunction } from 'express';
-import { check, param, query, ValidationChain } from 'express-validator';
+import { body, check, param, query, ValidationChain } from 'express-validator';
import {
AbilitySubject,
IPaymentReceiveDTO,
PaymentReceiveAction,
+ PaymentReceiveMailOptsDTO,
} from '@/interfaces';
import BaseController from '@/api/controllers/BaseController';
import asyncMiddleware from '@/api/middleware/asyncMiddleware';
@@ -117,6 +118,25 @@ export default class PaymentReceivesController extends BaseController {
asyncMiddleware(this.deletePaymentReceive.bind(this)),
this.handleServiceErrors
);
+ router.post(
+ '/:id/mail',
+ [
+ ...this.paymentReceiveValidation,
+ body('subject').isString().optional(),
+ body('from').isString().optional(),
+ body('to').isString().optional(),
+ body('body').isString().optional(),
+ body('attach_invoice').optional().isBoolean().toBoolean(),
+ ],
+ this.sendPaymentReceiveByMail.bind(this),
+ this.handleServiceErrors
+ );
+ router.get(
+ '/:id/mail',
+ [...this.paymentReceiveValidation],
+ asyncMiddleware(this.getPaymentDefaultMail.bind(this)),
+ this.handleServiceErrors
+ );
return router;
}
@@ -142,7 +162,7 @@ export default class PaymentReceivesController extends BaseController {
check('entries.*.id').optional({ nullable: true }).isNumeric().toInt(),
check('entries.*.index').optional().isNumeric().toInt(),
check('entries.*.invoice_id').exists().isNumeric().toInt(),
- check('entries.*.payment_amount').exists().isNumeric().toInt(),
+ check('entries.*.payment_amount').exists().isNumeric().toFloat(),
];
}
@@ -416,27 +436,26 @@ export default class PaymentReceivesController extends BaseController {
const { id: paymentReceiveId } = req.params;
try {
- const paymentReceive =
- await this.paymentReceiveApplication.getPaymentReceive(
- tenantId,
- paymentReceiveId
- );
-
const ACCEPT_TYPE = {
APPLICATION_PDF: 'application/pdf',
APPLICATION_JSON: 'application/json',
};
res.format({
- [ACCEPT_TYPE.APPLICATION_JSON]: () => {
+ [ACCEPT_TYPE.APPLICATION_JSON]: async () => {
+ const paymentReceive =
+ await this.paymentReceiveApplication.getPaymentReceive(
+ tenantId,
+ paymentReceiveId
+ );
return res.status(200).send({
- payment_receive: this.transfromToResponse(paymentReceive),
+ payment_receive: paymentReceive,
});
},
[ACCEPT_TYPE.APPLICATION_PDF]: async () => {
const pdfContent =
await this.paymentReceiveApplication.getPaymentReceivePdf(
tenantId,
- paymentReceive
+ paymentReceiveId
);
res.set({
'Content-Type': 'application/pdf',
@@ -507,6 +526,66 @@ export default class PaymentReceivesController extends BaseController {
}
};
+ /**
+ * Sends mail invoice of the given sale invoice.
+ * @param {Request} req
+ * @param {Response} res
+ * @param {NextFunction} next
+ */
+ public sendPaymentReceiveByMail = async (
+ req: Request,
+ res: Response,
+ next: NextFunction
+ ) => {
+ const { tenantId } = req;
+ const { id: paymentReceiveId } = req.params;
+ const paymentMailDTO: PaymentReceiveMailOptsDTO = this.matchedBodyData(
+ req,
+ {
+ includeOptionals: false,
+ }
+ );
+
+ try {
+ await this.paymentReceiveApplication.notifyPaymentByMail(
+ tenantId,
+ paymentReceiveId,
+ paymentMailDTO
+ );
+ return res.status(200).send({
+ code: 200,
+ message: 'The payment notification has been sent successfully.',
+ });
+ } catch (error) {
+ next(error);
+ }
+ };
+
+ /**
+ * Retrieves the default mail options of the given payment transaction.
+ * @param {Request} req
+ * @param {Response} res
+ * @param {NextFunction} next
+ */
+ public getPaymentDefaultMail = async (
+ req: Request,
+ res: Response,
+ next: NextFunction
+ ) => {
+ const { tenantId } = req;
+ const { id: paymentReceiveId } = req.params;
+
+ try {
+ const data = await this.paymentReceiveApplication.getPaymentMailOptions(
+ tenantId,
+ paymentReceiveId
+ );
+ return res.status(200).send({ data });
+ } catch (error) {
+ next(error);
+ }
+ };
+
/**
* Handles service errors.
* @param error
@@ -514,7 +593,7 @@ export default class PaymentReceivesController extends BaseController {
* @param res
* @param next
*/
- handleServiceErrors(
+ private handleServiceErrors(
error: Error,
req: Request,
res: Response,
diff --git a/packages/server/src/api/controllers/Sales/SalesEstimates.ts b/packages/server/src/api/controllers/Sales/SalesEstimates.ts
index 9f3cf3719..b34c1ccf2 100644
--- a/packages/server/src/api/controllers/Sales/SalesEstimates.ts
+++ b/packages/server/src/api/controllers/Sales/SalesEstimates.ts
@@ -1,10 +1,11 @@
import { Router, Request, Response, NextFunction } from 'express';
-import { check, param, query } from 'express-validator';
+import { body, check, param, query } from 'express-validator';
import { Inject, Service } from 'typedi';
import {
AbilitySubject,
ISaleEstimateDTO,
SaleEstimateAction,
+ SaleEstimateMailOptionsDTO,
} from '@/interfaces';
import BaseController from '@/api/controllers/BaseController';
import asyncMiddleware from '@/api/middleware/asyncMiddleware';
@@ -121,6 +122,27 @@ export default class SalesEstimatesController extends BaseController {
this.handleServiceErrors,
this.dynamicListService.handlerErrorsToResponse
);
+ router.post(
+ '/:id/mail',
+ [
+ ...this.validateSpecificEstimateSchema,
+ body('subject').isString().optional(),
+ body('from').isString().optional(),
+ body('to').isString().optional(),
+ body('body').isString().optional(),
+ body('attach_invoice').optional().isBoolean().toBoolean(),
+ ],
+ this.validationResult,
+ asyncMiddleware(this.sendSaleEstimateMail.bind(this)),
+ this.handleServiceErrors
+ );
+ router.get(
+ '/:id/mail',
+ [...this.validateSpecificEstimateSchema],
+ this.validationResult,
+ asyncMiddleware(this.getSaleEstimateMail.bind(this)),
+ this.handleServiceErrors
+ );
return router;
}
@@ -362,22 +384,22 @@ export default class SalesEstimatesController extends BaseController {
const { tenantId } = req;
try {
- const estimate = await this.saleEstimatesApplication.getSaleEstimate(
- tenantId,
- estimateId
- );
// Response formatter.
res.format({
// JSON content type.
- [ACCEPT_TYPE.APPLICATION_JSON]: () => {
- return res.status(200).send(this.transfromToResponse({ estimate }));
+ [ACCEPT_TYPE.APPLICATION_JSON]: async () => {
+ const estimate = await this.saleEstimatesApplication.getSaleEstimate(
+ tenantId,
+ estimateId
+ );
+ return res.status(200).send({ estimate });
},
// PDF content type.
[ACCEPT_TYPE.APPLICATION_PDF]: async () => {
const pdfContent =
await this.saleEstimatesApplication.getSaleEstimatePdf(
tenantId,
- estimate
+ estimateId
);
res.set({
'Content-Type': 'application/pdf',
@@ -478,6 +500,65 @@ export default class SalesEstimatesController extends BaseController {
}
};
+ /**
+ * Send the sale estimate mail.
+ * @param {Request} req
+ * @param {Response} res
+ * @param {NextFunction} next
+ */
+ private sendSaleEstimateMail = async (
+ req: Request,
+ res: Response,
+ next: NextFunction
+ ) => {
+ const { tenantId } = req;
+ const { id: invoiceId } = req.params;
+ const saleEstimateDTO: SaleEstimateMailOptionsDTO = this.matchedBodyData(
+ req,
+ {
+ includeOptionals: false,
+ }
+ );
+ try {
+ await this.saleEstimatesApplication.sendSaleEstimateMail(
+ tenantId,
+ invoiceId,
+ saleEstimateDTO
+ );
+ return res.status(200).send({
+ code: 200,
+ message: 'The sale estimate mail has been sent successfully.',
+ });
+ } catch (error) {
+ next(error);
+ }
+ };
+
+ /**
+ * Retrieves the default mail options of the given sale estimate.
+ * @param {Request} req
+ * @param {Response} res
+ * @param {NextFunction} next
+ */
+ private getSaleEstimateMail = async (
+ req: Request,
+ res: Response,
+ next: NextFunction
+ ) => {
+ const { tenantId } = req;
+ const { id: invoiceId } = req.params;
+
+ try {
+ const data = await this.saleEstimatesApplication.getSaleEstimateMail(
+ tenantId,
+ invoiceId
+ );
+ return res.status(200).send({ data });
+ } catch (error) {
+ next(error);
+ }
+ };
+
/**
* Handles service errors.
* @param {Error} error
diff --git a/packages/server/src/api/controllers/Sales/SalesInvoices.ts b/packages/server/src/api/controllers/Sales/SalesInvoices.ts
index d90b94d8d..9e5ac8d25 100644
--- a/packages/server/src/api/controllers/Sales/SalesInvoices.ts
+++ b/packages/server/src/api/controllers/Sales/SalesInvoices.ts
@@ -1,5 +1,5 @@
import { Router, Request, Response, NextFunction } from 'express';
-import { check, param, query } from 'express-validator';
+import { body, check, param, query } from 'express-validator';
import { Service, Inject } from 'typedi';
import BaseController from '../BaseController';
import asyncMiddleware from '@/api/middleware/asyncMiddleware';
@@ -10,6 +10,7 @@ import {
ISaleInvoiceCreateDTO,
SaleInvoiceAction,
AbilitySubject,
+ SendInvoiceMailDTO,
} from '@/interfaces';
import CheckPolicies from '@/api/middleware/CheckPolicies';
import { SaleInvoiceApplication } from '@/services/Sales/Invoices/SaleInvoicesApplication';
@@ -145,6 +146,48 @@ export default class SaleInvoicesController extends BaseController {
this.handleServiceErrors,
this.dynamicListService.handlerErrorsToResponse
);
+ router.get(
+ '/:id/mail-reminder',
+ this.specificSaleInvoiceValidation,
+ this.validationResult,
+ asyncMiddleware(this.getSaleInvoiceMailReminder.bind(this)),
+ this.handleServiceErrors
+ );
+ router.post(
+ '/:id/mail-reminder',
+ [
+ ...this.specificSaleInvoiceValidation,
+ body('subject').isString().optional(),
+ body('from').isString().optional(),
+ body('to').isString().optional(),
+ body('body').isString().optional(),
+ body('attach_invoice').optional().isBoolean().toBoolean(),
+ ],
+ this.validationResult,
+ asyncMiddleware(this.sendSaleInvoiceMailReminder.bind(this)),
+ this.handleServiceErrors
+ );
+ router.post(
+ '/:id/mail',
+ [
+ ...this.specificSaleInvoiceValidation,
+ body('subject').isString().optional(),
+ body('from').isString().optional(),
+ body('to').isString().optional(),
+ body('body').isString().optional(),
+ body('attach_invoice').optional().isBoolean().toBoolean(),
+ ],
+ this.validationResult,
+ asyncMiddleware(this.sendSaleInvoiceMail.bind(this)),
+ this.handleServiceErrors
+ );
+ router.get(
+ '/:id/mail',
+ [...this.specificSaleInvoiceValidation],
+ this.validationResult,
+ asyncMiddleware(this.getSaleInvoiceMail.bind(this)),
+ this.handleServiceErrors
+ );
return router;
}
@@ -630,6 +673,119 @@ export default class SaleInvoicesController extends BaseController {
}
};
+ /**
+ * Sends mail invoice of the given sale invoice.
+ * @param {Request} req
+ * @param {Response} res
+ * @param {NextFunction} next
+ */
+ public async sendSaleInvoiceMail(
+ req: Request,
+ res: Response,
+ next: NextFunction
+ ) {
+ const { tenantId } = req;
+ const { id: invoiceId } = req.params;
+ const invoiceMailDTO: SendInvoiceMailDTO = this.matchedBodyData(req, {
+ includeOptionals: false,
+ });
+
+ try {
+ await this.saleInvoiceApplication.sendSaleInvoiceMail(
+ tenantId,
+ invoiceId,
+ invoiceMailDTO
+ );
+ return res.status(200).send({
+ code: 200,
+ message: 'The sale invoice mail has been sent successfully.',
+ });
+ } catch (error) {
+ next(error);
+ }
+ }
+
+ /**
+ * Retreivers the sale invoice reminder options.
+ * @param {Request} req
+ * @param {Response} res
+ * @param {NextFunction} next
+ */
+ public async getSaleInvoiceMailReminder(
+ req: Request,
+ res: Response,
+ next: NextFunction
+ ) {
+ const { tenantId } = req;
+ const { id: invoiceId } = req.params;
+
+ try {
+ const data = await this.saleInvoiceApplication.getSaleInvoiceMailReminder(
+ tenantId,
+ invoiceId
+ );
+ return res.status(200).send(data);
+ } catch (error) {
+ next(error);
+ }
+ }
+
+ /**
+ * Sends mail invoice of the given sale invoice.
+ * @param {Request} req
+ * @param {Response} res
+ * @param {NextFunction} next
+ */
+ public async sendSaleInvoiceMailReminder(
+ req: Request,
+ res: Response,
+ next: NextFunction
+ ) {
+ const { tenantId } = req;
+ const { id: invoiceId } = req.params;
+ const invoiceMailDTO: SendInvoiceMailDTO = this.matchedBodyData(req, {
+ includeOptionals: false,
+ });
+ try {
+ await this.saleInvoiceApplication.sendSaleInvoiceMailReminder(
+ tenantId,
+ invoiceId,
+ invoiceMailDTO
+ );
+ return res.status(200).send({
+ code: 200,
+ message: 'The sale invoice mail reminder has been sent successfully.',
+ });
+ } catch (error) {
+ next(error);
+ }
+ }
+
+ /**
+ * Retrieves the default mail options of the given sale invoice.
+ * @param {Request} req
+ * @param {Response} res
+ * @param {NextFunction} next
+ */
+ public async getSaleInvoiceMail(
+ req: Request,
+ res: Response,
+ next: NextFunction
+ ) {
+ const { tenantId } = req;
+ const { id: invoiceId } = req.params;
+
+ try {
+ const data = await this.saleInvoiceApplication.getSaleInvoiceMail(
+ tenantId,
+ invoiceId
+ );
+ return res.status(200).send({ data });
+ } catch (error) {
+ next(error);
+ }
+ }
+
/**
* Handles service errors.
* @param {Error} error
diff --git a/packages/server/src/api/controllers/Sales/SalesReceipts.ts b/packages/server/src/api/controllers/Sales/SalesReceipts.ts
index d364826b6..6151561f8 100644
--- a/packages/server/src/api/controllers/Sales/SalesReceipts.ts
+++ b/packages/server/src/api/controllers/Sales/SalesReceipts.ts
@@ -1,9 +1,9 @@
import { Router, Request, Response, NextFunction } from 'express';
-import { check, param, query } from 'express-validator';
+import { body, check, param, query } from 'express-validator';
import { Inject, Service } from 'typedi';
import asyncMiddleware from '@/api/middleware/asyncMiddleware';
import BaseController from '../BaseController';
-import { ISaleReceiptDTO } from '@/interfaces/SaleReceipt';
+import { ISaleReceiptDTO, SaleReceiptMailOpts, SaleReceiptMailOptsDTO } from '@/interfaces/SaleReceipt';
import { ServiceError } from '@/exceptions';
import DynamicListingService from '@/services/DynamicListing/DynamicListService';
import CheckPolicies from '@/api/middleware/CheckPolicies';
@@ -46,6 +46,29 @@ export default class SalesReceiptsController extends BaseController {
this.saleReceiptSmsDetails,
this.handleServiceErrors
);
+ router.post(
+ '/:id/mail',
+ [
+ ...this.specificReceiptValidationSchema,
+ body('subject').isString().optional(),
+ body('from').isString().optional(),
+ body('to').isString().optional(),
+ body('body').isString().optional(),
+ body('attach_receipt').optional().isBoolean().toBoolean(),
+ ],
+ this.validationResult,
+ asyncMiddleware(this.sendSaleReceiptMail.bind(this)),
+ this.handleServiceErrors
+ );
+ router.get(
+ '/:id/mail',
+ [
+ ...this.specificReceiptValidationSchema,
+ ],
+ this.validationResult,
+ asyncMiddleware(this.getSaleReceiptMail.bind(this)),
+ this.handleServiceErrors
+ );
router.post(
'/:id',
CheckPolicies(SaleReceiptAction.Edit, AbilitySubject.SaleReceipt),
@@ -117,7 +140,7 @@ export default class SalesReceiptsController extends BaseController {
check('entries.*.index').exists().isNumeric().toInt(),
check('entries.*.item_id').exists().isNumeric().toInt(),
check('entries.*.quantity').exists().isNumeric().toInt(),
- check('entries.*.rate').exists().isNumeric().toInt(),
+ check('entries.*.rate').exists().isNumeric().toFloat(),
check('entries.*.discount')
.optional({ nullable: true })
.isNumeric()
@@ -314,26 +337,24 @@ export default class SalesReceiptsController extends BaseController {
* @param {Response} res
* @param {NextFunction} next
*/
- async getSaleReceipt(req: Request, res: Response, next: NextFunction) {
+ public async getSaleReceipt(req: Request, res: Response, next: NextFunction) {
const { id: saleReceiptId } = req.params;
const { tenantId } = req;
try {
- const saleReceipt = await this.saleReceiptsApplication.getSaleReceipt(
- tenantId,
- saleReceiptId
- );
res.format({
- 'application/json': () => {
- return res
- .status(200)
- .send(this.transfromToResponse({ saleReceipt }));
+ 'application/json': async () => {
+ const saleReceipt = await this.saleReceiptsApplication.getSaleReceipt(
+ tenantId,
+ saleReceiptId
+ );
+ return res.status(200).send({ saleReceipt });
},
'application/pdf': async () => {
const pdfContent =
await this.saleReceiptsApplication.getSaleReceiptPdf(
tenantId,
- saleReceipt
+ saleReceiptId
);
res.set({
'Content-Type': 'application/pdf',
@@ -405,6 +426,64 @@ export default class SalesReceiptsController extends BaseController {
}
};
+ /**
+ * Sends mail notification of the given sale receipt.
+ * @param {Request} req
+ * @param {Response} res
+ * @param {NextFunction} next
+ */
+ public sendSaleReceiptMail = async (
+ req: Request,
+ res: Response,
+ next: NextFunction
+ ) => {
+ const { tenantId } = req;
+ const { id: receiptId } = req.params;
+ const receiptMailDTO: SaleReceiptMailOptsDTO = this.matchedBodyData(req, {
+ includeOptionals: false,
+ });
+
+ try {
+ await this.saleReceiptsApplication.sendSaleReceiptMail(
+ tenantId,
+ receiptId,
+ receiptMailDTO
+ );
+ return res.status(200).send({
+ code: 200,
+ message:
+ 'The sale receipt notification via sms has been sent successfully.',
+ });
+ } catch (error) {
+ next(error);
+ }
+ };
+
+ /**
+ * Retrieves the default mail options of the given sale receipt.
+ * @param {Request} req
+ * @param {Response} res
+ * @param {NextFunction} next
+ */
+ public getSaleReceiptMail = async (
+ req: Request,
+ res: Response,
+ next: NextFunction
+ ) => {
+ const { tenantId } = req;
+ const { id: receiptId } = req.params;
+
+ try {
+ const data = await this.saleReceiptsApplication.getSaleReceiptMail(
+ tenantId,
+ receiptId
+ );
+ return res.status(200).send({ data });
+ } catch (error) {
+ next(error);
+ }
+ };
+
/**
* Handles service errors.
* @param {Error} error
diff --git a/packages/server/src/before.ts b/packages/server/src/before.ts
index dbc90cd05..305fca840 100644
--- a/packages/server/src/before.ts
+++ b/packages/server/src/before.ts
@@ -5,6 +5,7 @@ global.__root_dir = path.join(__dirname, '..');
global.__resources_dir = path.join(global.__root_dir, 'resources');
global.__locales_dir = path.join(global.__resources_dir, 'locales');
global.__views_dir = path.join(global.__root_dir, 'views');
+global.__storage_dir = path.join(global.__root_dir, 'storage');
moment.prototype.toMySqlDateTime = function () {
return this.format('YYYY-MM-DD HH:mm:ss');
diff --git a/packages/server/src/config/index.ts b/packages/server/src/config/index.ts
index bc6833130..0dc9d9676 100644
--- a/packages/server/src/config/index.ts
+++ b/packages/server/src/config/index.ts
@@ -58,6 +58,7 @@ module.exports = {
secure: !!parseInt(process.env.MAIL_SECURE, 10),
username: process.env.MAIL_USERNAME,
password: process.env.MAIL_PASSWORD,
+ from: process.env.MAIL_FROM_ADDRESS,
},
/**
diff --git a/packages/server/src/data/options.ts b/packages/server/src/data/options.ts
index 023628ef8..ae35fa5da 100644
--- a/packages/server/src/data/options.ts
+++ b/packages/server/src/data/options.ts
@@ -59,6 +59,12 @@ export default {
auto_increment: {
type: 'boolean',
},
+ customer_notes: {
+ type: 'string',
+ },
+ terms_conditions: {
+ type: 'string',
+ },
},
sales_receipts: {
next_number: {
@@ -73,6 +79,12 @@ export default {
preferred_deposit_account: {
type: 'number',
},
+ receipt_message: {
+ type: 'string',
+ },
+ terms_conditions: {
+ type: 'string',
+ },
},
sales_invoices: {
next_number: {
@@ -84,6 +96,12 @@ export default {
auto_increment: {
type: 'boolean',
},
+ customer_notes: {
+ type: 'string',
+ },
+ terms_conditions: {
+ type: 'string',
+ },
},
payment_receives: {
next_number: {
@@ -147,6 +165,12 @@ export default {
auto_increment: {
type: 'boolean',
},
+ customer_notes: {
+ type: 'string',
+ },
+ terms_conditions: {
+ type: 'string',
+ },
},
vendor_credit: {
next_number: {
diff --git a/packages/server/src/database/migrations/20231108170207_create_storage_table.js b/packages/server/src/database/migrations/20231108170207_create_storage_table.js
new file mode 100644
index 000000000..51801bc85
--- /dev/null
+++ b/packages/server/src/database/migrations/20231108170207_create_storage_table.js
@@ -0,0 +1,14 @@
+exports.up = function (knex) {
+ return knex.schema.createTable('storage', (table) => {
+ table.increments('id').primary();
+ table.string('key').notNullable();
+ table.string('path').notNullable();
+ table.string('extension').notNullable();
+ table.integer('expire_in');
+ table.timestamps();
+ });
+};
+
+exports.down = function (knex) {
+ return knex.schema.dropTableIfExists('storage');
+};
diff --git a/packages/server/src/database/migrations/20231202124014_change_item_entries_rate_to_float.js b/packages/server/src/database/migrations/20231202124014_change_item_entries_rate_to_float.js
new file mode 100644
index 000000000..802440045
--- /dev/null
+++ b/packages/server/src/database/migrations/20231202124014_change_item_entries_rate_to_float.js
@@ -0,0 +1,9 @@
+exports.up = function (knex) {
+ return knex.schema.alterTable('items_entries', (table) => {
+ table.decimal('rate', 15, 5).alter();
+ });
+};
+
+exports.down = function (knex) {
+ return knex.table('items_entries', (table) => {});
+};
diff --git a/packages/server/src/interfaces/APAgingSummaryReport.ts b/packages/server/src/interfaces/APAgingSummaryReport.ts
index db6626167..6bf7c83bb 100644
--- a/packages/server/src/interfaces/APAgingSummaryReport.ts
+++ b/packages/server/src/interfaces/APAgingSummaryReport.ts
@@ -8,6 +8,7 @@ import {
IAgingSummaryData,
} from './AgingReport';
import { INumberFormatQuery } from './FinancialStatements';
+import { IFinancialTable } from './Table';
export interface IAPAgingSummaryQuery extends IAgingSummaryQuery {
vendorsIds: number[];
@@ -34,3 +35,8 @@ export interface IAPAgingSummaryMeta {
baseCurrency: string;
organizationName: string;
}
+
+export interface IAPAgingSummaryTable extends IFinancialTable {
+ query: IAPAgingSummaryQuery;
+ meta: IAPAgingSummaryMeta;
+}
diff --git a/packages/server/src/interfaces/ARAgingSummaryReport.ts b/packages/server/src/interfaces/ARAgingSummaryReport.ts
index 7d25e2b2c..d42fc8f7f 100644
--- a/packages/server/src/interfaces/ARAgingSummaryReport.ts
+++ b/packages/server/src/interfaces/ARAgingSummaryReport.ts
@@ -5,6 +5,7 @@ import {
IAgingSummaryContact,
IAgingSummaryData,
} from './AgingReport';
+import { IFinancialTable } from './Table';
export interface IARAgingSummaryQuery extends IAgingSummaryQuery {
customersIds: number[];
@@ -26,3 +27,8 @@ export interface IARAgingSummaryMeta {
organizationName: string;
baseCurrency: string;
}
+
+export interface IARAgingSummaryTable extends IFinancialTable {
+ meta: IARAgingSummaryMeta;
+ query: IARAgingSummaryQuery;
+}
diff --git a/packages/server/src/interfaces/BalanceSheet.ts b/packages/server/src/interfaces/BalanceSheet.ts
index dc2fe6f0b..a74e48ee8 100644
--- a/packages/server/src/interfaces/BalanceSheet.ts
+++ b/packages/server/src/interfaces/BalanceSheet.ts
@@ -3,12 +3,14 @@ import {
IFormatNumberSettings,
IFinancialSheetBranchesQuery,
} from './FinancialStatements';
+import { IFinancialTable } from './Table';
// Balance sheet schema nodes types.
export enum BALANCE_SHEET_SCHEMA_NODE_TYPE {
AGGREGATE = 'AGGREGATE',
ACCOUNTS = 'ACCOUNTS',
ACCOUNT = 'ACCOUNT',
+ NET_INCOME = 'NET_INCOME',
}
export enum BALANCE_SHEET_NODE_TYPE {
@@ -33,6 +35,7 @@ export enum BALANCE_SHEET_SCHEMA_NODE_ID {
LOGN_TERM_LIABILITY = 'LOGN_TERM_LIABILITY',
NON_CURRENT_LIABILITY = 'NON_CURRENT_LIABILITY',
EQUITY = 'EQUITY',
+ NET_INCOME = 'NET_INCOME',
}
// Balance sheet query.
@@ -87,7 +90,6 @@ export interface IBalanceSheetDOO {
meta: IBalanceSheetMeta;
}
-
export interface IBalanceSheetCommonNode {
total: IBalanceSheetTotal;
horizontalTotals?: IBalanceSheetTotal[];
@@ -108,7 +110,7 @@ export interface IBalanceSheetAggregateNode extends IBalanceSheetCommonNode {
id: string;
name: string;
nodeType: BALANCE_SHEET_SCHEMA_NODE_TYPE.AGGREGATE;
- children?: (IBalanceSheetAggregateNode | IBalanceSheetAccountNode)[];
+ children?: IBalanceSheetDataNode[];
}
export interface IBalanceSheetTotal {
@@ -118,6 +120,13 @@ export interface IBalanceSheetTotal {
date?: string | Date;
}
+export interface IBalanceSheetAccountsNode extends IBalanceSheetCommonNode {
+ id: number | string;
+ name: string;
+ nodeType: BALANCE_SHEET_SCHEMA_NODE_TYPE.ACCOUNTS;
+ children: IBalanceSheetAccountNode[];
+}
+
export interface IBalanceSheetAccountNode extends IBalanceSheetCommonNode {
id: number;
index: number;
@@ -128,7 +137,17 @@ export interface IBalanceSheetAccountNode extends IBalanceSheetCommonNode {
children?: IBalanceSheetAccountNode[];
}
-export type IBalanceSheetDataNode = IBalanceSheetAggregateNode;
+export interface IBalanceSheetNetIncomeNode extends IBalanceSheetCommonNode {
+ id: number;
+ name: string;
+ nodeType: BALANCE_SHEET_SCHEMA_NODE_TYPE.NET_INCOME;
+}
+
+export type IBalanceSheetDataNode =
+ | IBalanceSheetAggregateNode
+ | IBalanceSheetAccountNode
+ | IBalanceSheetAccountsNode
+ | IBalanceSheetNetIncomeNode;
export interface IBalanceSheetPercentageAmount {
amount: number;
@@ -150,9 +169,16 @@ export interface IBalanceSheetSchemaAccountNode {
accountsTypes: string[];
}
+export interface IBalanceSheetSchemaNetIncomeNode {
+ id: string;
+ name: string;
+ type: BALANCE_SHEET_SCHEMA_NODE_TYPE;
+}
+
export type IBalanceSheetSchemaNode =
| IBalanceSheetSchemaAccountNode
- | IBalanceSheetSchemaAggregateNode;
+ | IBalanceSheetSchemaAggregateNode
+ | IBalanceSheetSchemaNetIncomeNode;
export interface IBalanceSheetDatePeriods {
assocAccountNodeDatePeriods(node): any;
@@ -190,3 +216,8 @@ export enum IAccountTransactionsGroupBy {
Month = 'month',
Week = 'week',
}
+
+export interface IBalanceSheetTable extends IFinancialTable {
+ meta: IBalanceSheetMeta;
+ query: IBalanceSheetQuery;
+}
diff --git a/packages/server/src/interfaces/CashFlow.ts b/packages/server/src/interfaces/CashFlow.ts
index e9a2dc8cd..1a4a1a6a1 100644
--- a/packages/server/src/interfaces/CashFlow.ts
+++ b/packages/server/src/interfaces/CashFlow.ts
@@ -1,7 +1,7 @@
import { INumberFormatQuery } from './FinancialStatements';
import { IAccount } from './Account';
import { ILedger } from './Ledger';
-import { ITableRow } from './Table';
+import { IFinancialTable, ITableRow } from './Table';
export interface ICashFlowStatementQuery {
fromDate: Date | string;
@@ -101,6 +101,11 @@ export interface ICashFlowStatementDOO {
query: ICashFlowStatementQuery;
}
+export interface ICashFlowStatementTable extends IFinancialTable {
+ meta: ICashFlowStatementMeta;
+ query: ICashFlowStatementQuery;
+}
+
export interface ICashFlowStatementService {
cashFlow(
tenantId: number,
diff --git a/packages/server/src/interfaces/CustomerBalanceSummary.ts b/packages/server/src/interfaces/CustomerBalanceSummary.ts
index cda13f7c9..cf5b5900d 100644
--- a/packages/server/src/interfaces/CustomerBalanceSummary.ts
+++ b/packages/server/src/interfaces/CustomerBalanceSummary.ts
@@ -1,11 +1,10 @@
-import { INumberFormatQuery } from './FinancialStatements';
-
import {
IContactBalanceSummaryQuery,
IContactBalanceSummaryAmount,
IContactBalanceSummaryPercentage,
IContactBalanceSummaryTotal,
} from './ContactBalanceSummary';
+import { IFinancialTable } from './Table';
export interface ICustomerBalanceSummaryQuery
extends IContactBalanceSummaryQuery {
@@ -19,7 +18,7 @@ export interface ICustomerBalanceSummaryPercentage
extends IContactBalanceSummaryPercentage {}
export interface ICustomerBalanceSummaryCustomer {
- id: number,
+ id: number;
customerName: string;
total: ICustomerBalanceSummaryAmount;
percentageOfColumn?: ICustomerBalanceSummaryPercentage;
@@ -47,3 +46,7 @@ export interface ICustomerBalanceSummaryService {
query: ICustomerBalanceSummaryQuery
): Promise;
}
+
+export interface ICustomerBalanceSummaryTable extends IFinancialTable {
+ query: ICustomerBalanceSummaryQuery;
+}
diff --git a/packages/server/src/interfaces/GeneralLedgerSheet.ts b/packages/server/src/interfaces/GeneralLedgerSheet.ts
index bf1662086..6b863a192 100644
--- a/packages/server/src/interfaces/GeneralLedgerSheet.ts
+++ b/packages/server/src/interfaces/GeneralLedgerSheet.ts
@@ -1,3 +1,4 @@
+import { IFinancialTable } from "./Table";
export interface IGeneralLedgerSheetQuery {
@@ -36,6 +37,7 @@ export interface IGeneralLedgerSheetAccountTransaction {
referenceType?: string,
date: Date|string,
+ dateFormatted: string;
};
export interface IGeneralLedgerSheetAccountBalance {
@@ -56,6 +58,8 @@ export interface IGeneralLedgerSheetAccount {
closingBalance: IGeneralLedgerSheetAccountBalance,
}
+export type IGeneralLedgerSheetData = IGeneralLedgerSheetAccount[];
+
export interface IAccountTransaction {
id: number,
index: number,
@@ -78,4 +82,11 @@ export interface IGeneralLedgerMeta {
isCostComputeRunning: boolean,
organizationName: string,
baseCurrency: string,
-};
\ No newline at end of file
+ fromDate: string;
+ toDate: string;
+};
+
+export interface IGeneralLedgerTableData extends IFinancialTable {
+ meta: IGeneralLedgerMeta;
+ query: IGeneralLedgerSheetQuery;
+}
\ No newline at end of file
diff --git a/packages/server/src/interfaces/Http.ts b/packages/server/src/interfaces/Http.ts
new file mode 100644
index 000000000..2189cb106
--- /dev/null
+++ b/packages/server/src/interfaces/Http.ts
@@ -0,0 +1,7 @@
+export const ACCEPT_TYPE = {
+ APPLICATION_PDF: 'application/pdf',
+ APPLICATION_JSON: 'application/json',
+ APPLICATION_JSON_TABLE: 'application/json+table',
+ APPLICATION_XLSX: 'application/xlsx',
+ APPLICATION_CSV: 'application/csv',
+};
diff --git a/packages/server/src/interfaces/InventoryDetails.ts b/packages/server/src/interfaces/InventoryDetails.ts
index 733cb588a..033ec269d 100644
--- a/packages/server/src/interfaces/InventoryDetails.ts
+++ b/packages/server/src/interfaces/InventoryDetails.ts
@@ -1,13 +1,12 @@
-import {
- INumberFormatQuery,
-} from './FinancialStatements';
+import { INumberFormatQuery } from './FinancialStatements';
+import { IFinancialTable } from './Table';
export interface IInventoryDetailsQuery {
fromDate: Date | string;
toDate: Date | string;
numberFormat: INumberFormatQuery;
noneTransactions: boolean;
- itemsIds: number[]
+ itemsIds: number[];
warehousesIds?: number[];
branchesIds?: number[];
@@ -66,7 +65,7 @@ export interface IInventoryDetailsItemTransaction {
cost: IInventoryDetailsNumber;
value: IInventoryDetailsNumber;
profitMargin: IInventoryDetailsNumber;
-
+
rate: IInventoryDetailsNumber;
runningQuantity: IInventoryDetailsNumber;
@@ -80,7 +79,6 @@ export type IInventoryDetailsNode =
| IInventoryDetailsItemTransaction;
export type IInventoryDetailsData = IInventoryDetailsItem[];
-
export interface IInventoryItemDetailMeta {
isCostComputeRunning: boolean;
organizationName: string;
@@ -91,4 +89,9 @@ export interface IInvetoryItemDetailDOO {
data: IInventoryDetailsData;
query: IInventoryDetailsQuery;
meta: IInventoryItemDetailMeta;
-}
\ No newline at end of file
+}
+
+export interface IInvetoryItemDetailsTable extends IFinancialTable {
+ query: IInventoryDetailsQuery;
+ meta: IInventoryItemDetailMeta;
+}
diff --git a/packages/server/src/interfaces/JournalReport.ts b/packages/server/src/interfaces/JournalReport.ts
index 9786e1634..c003cccf0 100644
--- a/packages/server/src/interfaces/JournalReport.ts
+++ b/packages/server/src/interfaces/JournalReport.ts
@@ -1,36 +1,52 @@
import { IJournalEntry } from './Journal';
+import { IFinancialTable } from './Table';
export interface IJournalReportQuery {
- fromDate: Date | string,
- toDate: Date | string,
+ fromDate: Date | string;
+ toDate: Date | string;
numberFormat: {
- noCents: boolean,
- divideOn1000: boolean,
- },
- transactionType: string,
- transactionId: string,
+ noCents: boolean;
+ divideOn1000: boolean;
+ };
+ transactionType: string;
+ transactionId: string;
- accountsIds: number | number[],
- fromRange: number,
- toRange: number,
+ accountsIds: number | number[];
+ fromRange: number;
+ toRange: number;
}
export interface IJournalReportEntriesGroup {
- id: string,
- entries: IJournalEntry[],
- currencyCode: string,
- credit: number,
- debit: number,
- formattedCredit: string,
- formattedDebit: string,
+ id: string;
+ date: Date;
+ dateFormatted: string;
+ entries: IJournalEntry[];
+ currencyCode: string;
+ credit: number;
+ debit: number;
+ formattedCredit: string;
+ formattedDebit: string;
}
export interface IJournalReport {
- entries: IJournalReportEntriesGroup[],
+ entries: IJournalReportEntriesGroup[];
}
export interface IJournalSheetMeta {
- isCostComputeRunning: boolean,
- organizationName: string,
- baseCurrency: string,
-}
\ No newline at end of file
+ isCostComputeRunning: boolean;
+ organizationName: string;
+ baseCurrency: string;
+}
+
+export interface IJournalTable extends IFinancialTable {
+ query: IJournalReportQuery;
+ meta: IJournalSheetMeta;
+}
+
+export type IJournalTableData = IJournalReportEntriesGroup[];
+
+export interface IJournalSheet {
+ data: IJournalTableData;
+ query: IJournalReportQuery;
+ meta: IJournalSheetMeta;
+}
diff --git a/packages/server/src/interfaces/Ledger.ts b/packages/server/src/interfaces/Ledger.ts
index 0f6379676..2ab52a631 100644
--- a/packages/server/src/interfaces/Ledger.ts
+++ b/packages/server/src/interfaces/Ledger.ts
@@ -7,18 +7,25 @@ export interface ILedger {
filter(cb: (entry: ILedgerEntry) => boolean): ILedger;
whereAccountId(accountId: number): ILedger;
+ whereAccountsIds(accountsIds: number[]): ILedger;
whereContactId(contactId: number): ILedger;
whereFromDate(fromDate: Date | string): ILedger;
whereToDate(toDate: Date | string): ILedger;
whereCurrencyCode(currencyCode: string): ILedger;
whereBranch(branchId: number): ILedger;
whereItem(itemId: number): ILedger;
+ whereProject(projectId: number): ILedger;
getClosingBalance(): number;
getForeignClosingBalance(): number;
+ getClosingDebit(): number;
+ getClosingCredit(): number;
getContactsIds(): number[];
getAccountsIds(): number[];
+
+ reverse(): ILedger;
+ isEmpty(): boolean;
}
export interface ILedgerEntry {
diff --git a/packages/server/src/interfaces/Mailable.ts b/packages/server/src/interfaces/Mailable.ts
index 36cc3c81f..5682f2529 100644
--- a/packages/server/src/interfaces/Mailable.ts
+++ b/packages/server/src/interfaces/Mailable.ts
@@ -1,9 +1,17 @@
+export type IMailAttachment = MailAttachmentPath | MailAttachmentContent;
+
+export interface MailAttachmentPath {
+ filename: string;
+ path: string;
+ cid: string;
+}
+export interface MailAttachmentContent {
+ filename: string;
+ content: Buffer;
+}
export interface IMailable {
- constructor(
- view: string,
- data?: { [key: string]: string | number },
- );
+ constructor(view: string, data?: { [key: string]: string | number });
send(): Promise;
build(): void;
setData(data: { [key: string]: string | number }): IMailable;
@@ -13,4 +21,27 @@ export interface IMailable {
setView(view: string): IMailable;
render(data?: { [key: string]: string | number }): string;
getViewContent(): string;
-}
\ No newline at end of file
+}
+
+export interface AddressItem {
+ label: string;
+ mail: string;
+ primary?: boolean;
+}
+
+export interface CommonMailOptions {
+ toAddresses: AddressItem[];
+ fromAddresses: AddressItem[];
+ from: string;
+ to: string | string[];
+ subject: string;
+ body: string;
+ data?: Record;
+}
+
+export interface CommonMailOptionsDTO {
+ to?: string | string[];
+ from?: string;
+ subject?: string;
+ body?: string;
+}
diff --git a/packages/server/src/interfaces/PaymentReceive.ts b/packages/server/src/interfaces/PaymentReceive.ts
index 6f8d8552a..2926d923c 100644
--- a/packages/server/src/interfaces/PaymentReceive.ts
+++ b/packages/server/src/interfaces/PaymentReceive.ts
@@ -1,5 +1,9 @@
import { Knex } from 'knex';
-import { ISystemUser } from '@/interfaces';
+import {
+ CommonMailOptions,
+ CommonMailOptionsDTO,
+ ISystemUser,
+} from '@/interfaces';
import { ILedgerEntry } from './Ledger';
import { ISaleInvoice } from './SaleInvoice';
@@ -19,7 +23,7 @@ export interface IPaymentReceive {
createdAt: Date;
updatedAt: Date;
localAmount?: number;
- branchId?: number
+ branchId?: number;
}
export interface IPaymentReceiveCreateDTO {
customerId: number;
@@ -165,3 +169,7 @@ export type IPaymentReceiveGLCommonEntry = Pick<
| 'createdAt'
| 'branchId'
>;
+
+export interface PaymentReceiveMailOpts extends CommonMailOptions {}
+
+export interface PaymentReceiveMailOptsDTO extends CommonMailOptionsDTO {}
diff --git a/packages/server/src/interfaces/ProfitLossSheet.ts b/packages/server/src/interfaces/ProfitLossSheet.ts
index 4f2eec656..944a0a950 100644
--- a/packages/server/src/interfaces/ProfitLossSheet.ts
+++ b/packages/server/src/interfaces/ProfitLossSheet.ts
@@ -2,6 +2,7 @@ import {
IFinancialSheetBranchesQuery,
INumberFormatQuery,
} from './FinancialStatements';
+import { IFinancialTable } from './Table';
export enum ProfitLossAggregateNodeId {
INCOME = 'INCOME',
@@ -177,3 +178,9 @@ export enum ProfitLossSheetRowType {
ACCOUNT = 'ACCOUNT',
TOTAL = 'TOTAL',
}
+
+
+export interface IProfitLossSheetTable extends IFinancialTable{
+ meta: IProfitLossSheetMeta;
+ query: IProfitLossSheetQuery;
+}
\ No newline at end of file
diff --git a/packages/server/src/interfaces/Roles.ts b/packages/server/src/interfaces/Roles.ts
index cfa7276ad..f9d338268 100644
--- a/packages/server/src/interfaces/Roles.ts
+++ b/packages/server/src/interfaces/Roles.ts
@@ -1,5 +1,5 @@
+import { Knex } from 'knex';
import { Ability, RawRuleOf, ForcedSubject } from '@casl/ability';
-import Knex from 'knex';
export const actions = [
'manage',
@@ -96,7 +96,8 @@ export enum AbilitySubject {
Preferences = 'Preferences',
CreditNote = 'CreditNode',
VendorCredit = 'VendorCredit',
- Project = 'Project'
+ Project = 'Project',
+ TaxRate = 'TaxRate'
}
export interface IRoleCreatedPayload {
diff --git a/packages/server/src/interfaces/SaleEstimate.ts b/packages/server/src/interfaces/SaleEstimate.ts
index f2a820e98..171c8a0d1 100644
--- a/packages/server/src/interfaces/SaleEstimate.ts
+++ b/packages/server/src/interfaces/SaleEstimate.ts
@@ -1,6 +1,7 @@
import { Knex } from 'knex';
import { IItemEntry, IItemEntryDTO } from './ItemEntry';
import { IDynamicListFilterDTO } from '@/interfaces/DynamicFilter';
+import { CommonMailOptions, CommonMailOptionsDTO } from './Mailable';
export interface ISaleEstimate {
id?: number;
@@ -124,3 +125,11 @@ export interface ISaleEstimateApprovedEvent {
saleEstimate: ISaleEstimate;
trx: Knex.Transaction;
}
+
+export interface SaleEstimateMailOptions extends CommonMailOptions {
+ attachEstimate?: boolean;
+}
+
+export interface SaleEstimateMailOptionsDTO extends CommonMailOptionsDTO {
+ attachEstimate?: boolean;
+}
\ No newline at end of file
diff --git a/packages/server/src/interfaces/SaleInvoice.ts b/packages/server/src/interfaces/SaleInvoice.ts
index 7ef8fdea2..394319e86 100644
--- a/packages/server/src/interfaces/SaleInvoice.ts
+++ b/packages/server/src/interfaces/SaleInvoice.ts
@@ -1,5 +1,6 @@
import { Knex } from 'knex';
import { ISystemUser, IAccount, ITaxTransaction } from '@/interfaces';
+import { CommonMailOptions, CommonMailOptionsDTO } from './Mailable';
import { IDynamicListFilter } from '@/interfaces/DynamicFilter';
import { IItemEntry, IItemEntryDTO } from './ItemEntry';
@@ -186,3 +187,17 @@ export enum SaleInvoiceAction {
Writeoff = 'Writeoff',
NotifyBySms = 'NotifyBySms',
}
+
+export interface SaleInvoiceMailOptions extends CommonMailOptions {
+ attachInvoice: boolean;
+}
+
+export interface SendInvoiceMailDTO extends CommonMailOptionsDTO {
+ attachInvoice?: boolean;
+}
+
+export interface ISaleInvoiceNotifyPayload {
+ tenantId: number;
+ saleInvoiceId: number;
+ messageDTO: SendInvoiceMailDTO;
+}
diff --git a/packages/server/src/interfaces/SaleReceipt.ts b/packages/server/src/interfaces/SaleReceipt.ts
index 4d319ec4f..1e8ffa98e 100644
--- a/packages/server/src/interfaces/SaleReceipt.ts
+++ b/packages/server/src/interfaces/SaleReceipt.ts
@@ -1,5 +1,6 @@
import { Knex } from 'knex';
import { IItemEntry } from './ItemEntry';
+import { CommonMailOptions, CommonMailOptionsDTO } from './Mailable';
export interface ISaleReceipt {
id?: number;
@@ -134,3 +135,11 @@ export interface ISaleReceiptDeletingPayload {
oldSaleReceipt: ISaleReceipt;
trx: Knex.Transaction;
}
+
+export interface SaleReceiptMailOpts extends CommonMailOptions {
+ attachReceipt: boolean;
+}
+
+export interface SaleReceiptMailOptsDTO extends CommonMailOptionsDTO {
+ attachReceipt?: boolean;
+}
diff --git a/packages/server/src/interfaces/SalesTaxLiabilitySummary.ts b/packages/server/src/interfaces/SalesTaxLiabilitySummary.ts
index 8b04c9719..2fbc9f13d 100644
--- a/packages/server/src/interfaces/SalesTaxLiabilitySummary.ts
+++ b/packages/server/src/interfaces/SalesTaxLiabilitySummary.ts
@@ -1,3 +1,5 @@
+import { IFinancialTable } from "./Table";
+
export interface SalesTaxLiabilitySummaryQuery {
fromDate: Date;
toDate: Date;
@@ -49,3 +51,8 @@ export interface SalesTaxLiabilitySummaryMeta {
organizationName: string;
baseCurrency: string;
}
+
+export interface ISalesTaxLiabilitySummaryTable extends IFinancialTable {
+ query: SalesTaxLiabilitySummaryQuery;
+ meta: SalesTaxLiabilitySummaryMeta;
+}
\ No newline at end of file
diff --git a/packages/server/src/interfaces/Setup.ts b/packages/server/src/interfaces/Setup.ts
index 2a0562238..4f443bb8c 100644
--- a/packages/server/src/interfaces/Setup.ts
+++ b/packages/server/src/interfaces/Setup.ts
@@ -25,6 +25,7 @@ export interface IOrganizationUpdateDTO {
timezone: string;
fiscalYear: string;
industry: string;
+ taxNumber: string;
}
export interface IOrganizationBuildEventPayload {
diff --git a/packages/server/src/interfaces/Table.ts b/packages/server/src/interfaces/Table.ts
index 28ff72f5c..a567d2d92 100644
--- a/packages/server/src/interfaces/Table.ts
+++ b/packages/server/src/interfaces/Table.ts
@@ -10,7 +10,7 @@ export interface ITableCell {
}
export type ITableRow = {
- rows: ITableCell[];
+ cells: ITableCell[];
};
export interface ITableColumn {
@@ -28,4 +28,13 @@ export interface ITable {
export interface ITableColumnAccessor {
key: string;
accessor: string;
-}
\ No newline at end of file
+}
+
+export interface ITableData {
+ columns: ITableColumn[];
+ rows: ITableRow[];
+}
+
+export interface IFinancialTable {
+ table: ITableData;
+}
diff --git a/packages/server/src/interfaces/TransactionsByCustomers.ts b/packages/server/src/interfaces/TransactionsByCustomers.ts
index fe2fbf5e2..fcfb01ea6 100644
--- a/packages/server/src/interfaces/TransactionsByCustomers.ts
+++ b/packages/server/src/interfaces/TransactionsByCustomers.ts
@@ -1,3 +1,4 @@
+import { IFinancialTable, ITableData } from './Table';
import {
ITransactionsByContactsAmount,
ITransactionsByContactsTransaction,
@@ -26,6 +27,11 @@ export type ITransactionsByCustomersData = ITransactionsByCustomersCustomer[];
export interface ITransactionsByCustomersStatement {
data: ITransactionsByCustomersData;
+ query: ITransactionsByCustomersFilter;
+}
+
+export interface ITransactionsByCustomersTable extends IFinancialTable {
+ query: ITransactionsByCustomersFilter;
}
export interface ITransactionsByCustomersService {
diff --git a/packages/server/src/interfaces/TransactionsByVendors.ts b/packages/server/src/interfaces/TransactionsByVendors.ts
index 107c7662e..ae129bc79 100644
--- a/packages/server/src/interfaces/TransactionsByVendors.ts
+++ b/packages/server/src/interfaces/TransactionsByVendors.ts
@@ -1,3 +1,4 @@
+import { IFinancialTable } from './Table';
import {
ITransactionsByContactsAmount,
ITransactionsByContactsTransaction,
@@ -34,3 +35,7 @@ export interface ITransactionsByVendorsService {
filter: ITransactionsByVendorsFilter
): Promise;
}
+
+export interface ITransactionsByVendorTable extends IFinancialTable {
+ query: ITransactionsByVendorsFilter;
+}
\ No newline at end of file
diff --git a/packages/server/src/interfaces/TrialBalanceSheet.ts b/packages/server/src/interfaces/TrialBalanceSheet.ts
index a3cc37568..f423503ae 100644
--- a/packages/server/src/interfaces/TrialBalanceSheet.ts
+++ b/packages/server/src/interfaces/TrialBalanceSheet.ts
@@ -1,4 +1,5 @@
import { INumberFormatQuery } from './FinancialStatements';
+import { IFinancialTable } from './Table';
export interface ITrialBalanceSheetQuery {
fromDate: Date | string;
@@ -33,6 +34,7 @@ export interface ITrialBalanceAccount extends ITrialBalanceTotal {
id: number;
parentAccountId: number;
name: string;
+ formattedName: string;
code: string;
accountNormal: string;
}
@@ -47,3 +49,8 @@ export interface ITrialBalanceStatement {
query: ITrialBalanceSheetQuery;
meta: ITrialBalanceSheetMeta;
}
+
+export interface ITrialBalanceSheetTable extends IFinancialTable {
+ meta: ITrialBalanceSheetMeta;
+ query: ITrialBalanceSheetQuery;
+}
diff --git a/packages/server/src/interfaces/VendorBalanceSummary.ts b/packages/server/src/interfaces/VendorBalanceSummary.ts
index af75b2d67..d214202df 100644
--- a/packages/server/src/interfaces/VendorBalanceSummary.ts
+++ b/packages/server/src/interfaces/VendorBalanceSummary.ts
@@ -1,8 +1,9 @@
import { INumberFormatQuery } from './FinancialStatements';
+import { IFinancialTable } from './Table';
export interface IVendorBalanceSummaryQuery {
asDate: Date;
- vendorsIds: number[],
+ vendorsIds: number[];
numberFormat: INumberFormatQuery;
percentageColumn: boolean;
noneTransactions: boolean;
@@ -45,6 +46,10 @@ export interface IVendorBalanceSummaryStatement {
export interface IVendorBalanceSummaryService {
vendorBalanceSummary(
tenantId: number,
- query: IVendorBalanceSummaryQuery,
+ query: IVendorBalanceSummaryQuery
): Promise;
}
+
+export interface IVendorBalanceSummaryTable extends IFinancialTable {
+ query: IVendorBalanceSummaryQuery;
+}
diff --git a/packages/server/src/lib/Chromiumly/Chromiumly.ts b/packages/server/src/lib/Chromiumly/Chromiumly.ts
new file mode 100644
index 000000000..276ca4538
--- /dev/null
+++ b/packages/server/src/lib/Chromiumly/Chromiumly.ts
@@ -0,0 +1,26 @@
+import { ChromiumRoute, LibreOfficeRoute, PdfEngineRoute } from './_types';
+
+export class Chromiumly {
+ public static readonly GOTENBERG_ENDPOINT = process.env.GOTENBERG_URL || '';
+
+ public static readonly CHROMIUM_PATH = 'forms/chromium/convert';
+ public static readonly PDF_ENGINES_PATH = 'forms/pdfengines';
+ public static readonly LIBRE_OFFICE_PATH = 'forms/libreoffice';
+
+ public static readonly GOTENBERG_DOCS_ENDPOINT =
+ process.env.GOTENBERG_DOCS_URL || '';
+
+ public static readonly CHROMIUM_ROUTES = {
+ url: ChromiumRoute.URL,
+ html: ChromiumRoute.HTML,
+ markdown: ChromiumRoute.MARKDOWN,
+ };
+
+ public static readonly PDF_ENGINE_ROUTES = {
+ merge: PdfEngineRoute.MERGE,
+ };
+
+ public static readonly LIBRE_OFFICE_ROUTES = {
+ convert: LibreOfficeRoute.CONVERT,
+ };
+}
diff --git a/packages/server/src/lib/Chromiumly/ConvertUtils.ts b/packages/server/src/lib/Chromiumly/ConvertUtils.ts
new file mode 100644
index 000000000..38d27fd99
--- /dev/null
+++ b/packages/server/src/lib/Chromiumly/ConvertUtils.ts
@@ -0,0 +1,66 @@
+import FormData from 'form-data';
+import { GotenbergUtils } from './GotenbergUtils';
+import { PageProperties } from './_types';
+
+export class ConverterUtils {
+ public static injectPageProperties(
+ data: FormData,
+ pageProperties: PageProperties
+ ): void {
+ if (pageProperties.size) {
+ GotenbergUtils.assert(
+ pageProperties.size.width >= 1.0 && pageProperties.size.height >= 1.5,
+ 'size is smaller than the minimum printing requirements (i.e. 1.0 x 1.5 in)'
+ );
+
+ data.append('paperWidth', pageProperties.size.width);
+ data.append('paperHeight', pageProperties.size.height);
+ }
+ if (pageProperties.margins) {
+ GotenbergUtils.assert(
+ pageProperties.margins.top >= 0 &&
+ pageProperties.margins.bottom >= 0 &&
+ pageProperties.margins.left >= 0 &&
+ pageProperties.margins.left >= 0,
+ 'negative margins are not allowed'
+ );
+ data.append('marginTop', pageProperties.margins.top);
+ data.append('marginBottom', pageProperties.margins.bottom);
+ data.append('marginLeft', pageProperties.margins.left);
+ data.append('marginRight', pageProperties.margins.right);
+ }
+ if (pageProperties.preferCssPageSize) {
+ data.append(
+ 'preferCssPageSize',
+ String(pageProperties.preferCssPageSize)
+ );
+ }
+ if (pageProperties.printBackground) {
+ data.append('printBackground', String(pageProperties.printBackground));
+ }
+ if (pageProperties.landscape) {
+ data.append('landscape', String(pageProperties.landscape));
+ }
+ if (pageProperties.scale) {
+ GotenbergUtils.assert(
+ pageProperties.scale >= 0.1 && pageProperties.scale <= 2.0,
+ 'scale is outside of [0.1 - 2] range'
+ );
+ data.append('scale', pageProperties.scale);
+ }
+
+ if (pageProperties.nativePageRanges) {
+ GotenbergUtils.assert(
+ pageProperties.nativePageRanges.from > 0 &&
+ pageProperties.nativePageRanges.to > 0 &&
+ pageProperties.nativePageRanges.to >=
+ pageProperties.nativePageRanges.from,
+ 'page ranges syntax error'
+ );
+ data.append(
+ 'nativePageRanges',
+ `${pageProperties.nativePageRanges.from}-${pageProperties.nativePageRanges.to}`
+ );
+ }
+ }
+}
diff --git a/packages/server/src/lib/Chromiumly/Converter.ts b/packages/server/src/lib/Chromiumly/Converter.ts
new file mode 100644
index 000000000..cf8f70f4a
--- /dev/null
+++ b/packages/server/src/lib/Chromiumly/Converter.ts
@@ -0,0 +1,10 @@
+import { Chromiumly } from './Chromiumly';
+import { ChromiumRoute } from './_types';
+
+export abstract class Converter {
+ readonly endpoint: string;
+
+ constructor(route: ChromiumRoute) {
+ this.endpoint = `${Chromiumly.GOTENBERG_ENDPOINT}/${Chromiumly.CHROMIUM_PATH}/${Chromiumly.CHROMIUM_ROUTES[route]}`;
+ }
+}
diff --git a/packages/server/src/lib/Chromiumly/GotenbergUtils.ts b/packages/server/src/lib/Chromiumly/GotenbergUtils.ts
new file mode 100644
index 000000000..63a609792
--- /dev/null
+++ b/packages/server/src/lib/Chromiumly/GotenbergUtils.ts
@@ -0,0 +1,24 @@
+import FormData from 'form-data';
+import Axios from 'axios';
+
+export class GotenbergUtils {
+ public static assert(condition: boolean, message: string): asserts condition {
+ if (!condition) {
+ throw new Error(message);
+ }
+ }
+
+ public static async fetch(endpoint: string, data: FormData): Promise {
+ try {
+ const response = await Axios.post(endpoint, data, {
+ headers: {
+ ...data.getHeaders(),
+ },
+ responseType: 'arraybuffer', // This ensures you get a Buffer bac
+ });
+ return response.data;
+ } catch (error) {
+ console.error(error);
+ }
+ }
+}
diff --git a/packages/server/src/lib/Chromiumly/HTMLConvert.ts b/packages/server/src/lib/Chromiumly/HTMLConvert.ts
new file mode 100644
index 000000000..3eb109405
--- /dev/null
+++ b/packages/server/src/lib/Chromiumly/HTMLConvert.ts
@@ -0,0 +1,38 @@
+import { constants, createReadStream, PathLike, promises } from 'fs';
+import FormData from 'form-data';
+import { GotenbergUtils } from './GotenbergUtils';
+import { IConverter, PageProperties } from './_types';
+import { PdfFormat, ChromiumRoute } from './_types';
+import { ConverterUtils } from './ConvertUtils';
+import { Converter } from './Converter';
+
+export class HtmlConverter extends Converter implements IConverter {
+ constructor() {
+ super(ChromiumRoute.HTML);
+ }
+
+ async convert({
+ html,
+ properties,
+ pdfFormat,
+ }: {
+ html: PathLike;
+ properties?: PageProperties;
+ pdfFormat?: PdfFormat;
+ }): Promise {
+ try {
+ await promises.access(html, constants.R_OK);
+ const data = new FormData();
+ if (pdfFormat) {
+ data.append('pdfFormat', pdfFormat);
+ }
+ data.append('index.html', createReadStream(html));
+ if (properties) {
+ ConverterUtils.injectPageProperties(data, properties);
+ }
+ return GotenbergUtils.fetch(this.endpoint, data);
+ } catch (error) {
+ throw error;
+ }
+ }
+}
diff --git a/packages/server/src/lib/Chromiumly/UrlConvert.ts b/packages/server/src/lib/Chromiumly/UrlConvert.ts
new file mode 100644
index 000000000..d1a462124
--- /dev/null
+++ b/packages/server/src/lib/Chromiumly/UrlConvert.ts
@@ -0,0 +1,38 @@
+import FormData from 'form-data';
+import { IConverter, PageProperties, PdfFormat, ChromiumRoute } from './_types';
+import { ConverterUtils } from './ConvertUtils';
+import { Converter } from './Converter';
+import { GotenbergUtils } from './GotenbergUtils';
+
+export class UrlConverter extends Converter implements IConverter {
+ constructor() {
+ super(ChromiumRoute.URL);
+ }
+
+ async convert({
+ url,
+ properties,
+ pdfFormat,
+ }: {
+ url: string;
+ properties?: PageProperties;
+ pdfFormat?: PdfFormat;
+ }): Promise {
+ try {
+ const _url = new URL(url);
+ const data = new FormData();
+
+ if (pdfFormat) {
+ data.append('pdfFormat', pdfFormat);
+ }
+ data.append('url', _url.href);
+
+ if (properties) {
+ ConverterUtils.injectPageProperties(data, properties);
+ }
+ return GotenbergUtils.fetch(this.endpoint, data);
+ } catch (error) {
+ throw error;
+ }
+ }
+}
diff --git a/packages/server/src/lib/Chromiumly/_types.ts b/packages/server/src/lib/Chromiumly/_types.ts
new file mode 100644
index 000000000..453f59ed8
--- /dev/null
+++ b/packages/server/src/lib/Chromiumly/_types.ts
@@ -0,0 +1,51 @@
+import { PathLike } from 'fs';
+
+export type PageSize = {
+ width: number; // Paper width, in inches (default 8.5)
+ height: number; //Paper height, in inches (default 11)
+};
+
+export type PageMargins = {
+ top: number; // Top margin, in inches (default 0.39)
+ bottom: number; // Bottom margin, in inches (default 0.39)
+ left: number; // Left margin, in inches (default 0.39)
+ right: number; // Right margin, in inches (default 0.39)
+};
+
+export type PageProperties = {
+ size?: PageSize;
+ margins?: PageMargins;
+ preferCssPageSize?: boolean; // Define whether to prefer page size as defined by CSS (default false)
+ printBackground?: boolean; // Print the background graphics (default false)
+ landscape?: boolean; // Set the paper orientation to landscape (default false)
+ scale?: number; // The scale of the page rendering (default 1.0)
+ nativePageRanges?: { from: number; to: number }; // Page ranges to print
+};
+
+export interface IConverter {
+ convert({
+ ...args
+ }: {
+ [x: string]: string | PathLike | PageProperties | PdfFormat;
+ }): Promise;
+}
+
+export enum PdfFormat {
+ A_1a = 'PDF/A-1a',
+ A_2b = 'PDF/A-2b',
+ A_3b = 'PDF/A-3b',
+}
+
+export enum ChromiumRoute {
+ URL = 'url',
+ HTML = 'html',
+ MARKDOWN = 'markdown',
+}
+
+export enum PdfEngineRoute {
+ MERGE = 'merge',
+}
+
+export enum LibreOfficeRoute {
+ CONVERT = 'convert',
+}
diff --git a/packages/server/src/lib/Mail/index.ts b/packages/server/src/lib/Mail/index.ts
index dd79c934b..015ca02a8 100644
--- a/packages/server/src/lib/Mail/index.ts
+++ b/packages/server/src/lib/Mail/index.ts
@@ -2,18 +2,13 @@ import fs from 'fs';
import Mustache from 'mustache';
import { Container } from 'typedi';
import path from 'path';
-import { IMailable } from '@/interfaces';
-
-interface IMailAttachment {
- filename: string;
- path: string;
- cid: string;
-}
+import { IMailAttachment } from '@/interfaces';
export default class Mail {
view: string;
- subject: string;
- to: string;
+ subject: string = '';
+ content: string = '';
+ to: string | string[];
from: string = `${process.env.MAIL_FROM_NAME} ${process.env.MAIL_FROM_ADDRESS}`;
data: { [key: string]: string | number };
attachments: IMailAttachment[];
@@ -21,16 +16,24 @@ export default class Mail {
/**
* Mail options.
*/
- private get mailOptions() {
+ public get mailOptions() {
return {
to: this.to,
from: this.from,
subject: this.subject,
- html: this.render(this.data),
+ html: this.html,
attachments: this.attachments,
};
}
+ /**
+ * Retrieves the html content of the mail.
+ * @returns {string}
+ */
+ public get html() {
+ return this.view ? Mail.render(this.view, this.data) : this.content;
+ }
+
/**
* Sends the given mail to the target address.
*/
@@ -52,7 +55,7 @@ export default class Mail {
* Set send mail to address.
* @param {string} to -
*/
- setTo(to: string) {
+ setTo(to: string | string[]) {
this.to = to;
return this;
}
@@ -62,11 +65,16 @@ export default class Mail {
* @param {string} from
* @return {}
*/
- private setFrom(from: string) {
+ setFrom(from: string) {
this.from = from;
return this;
}
+ /**
+ * Set attachments to the mail.
+ * @param {IMailAttachment[]} attachments
+ * @returns {Mail}
+ */
setAttachments(attachments: IMailAttachment[]) {
this.attachments = attachments;
return this;
@@ -95,21 +103,26 @@ export default class Mail {
return this;
}
+ setContent(content: string) {
+ this.content = content;
+ return this;
+ }
+
/**
* Renders the view template with the given data.
* @param {object} data
* @return {string}
*/
- render(data): string {
- const viewContent = this.getViewContent();
+ static render(view: string, data: Record): string {
+ const viewContent = Mail.getViewContent(view);
return Mustache.render(viewContent, data);
}
/**
* Retrieve view content from the view directory.
*/
- private getViewContent(): string {
- const filePath = path.join(global.__views_dir, `/${this.view}`);
+ static getViewContent(view: string): string {
+ const filePath = path.join(global.__views_dir, `/${view}`);
return fs.readFileSync(filePath, 'utf8');
}
}
diff --git a/packages/server/src/lib/Xlsx/TableSheet.tsx b/packages/server/src/lib/Xlsx/TableSheet.tsx
new file mode 100644
index 000000000..5bffd1bcf
--- /dev/null
+++ b/packages/server/src/lib/Xlsx/TableSheet.tsx
@@ -0,0 +1,134 @@
+import xlsx, { WorkBook } from 'xlsx';
+import { IFinancialTable, ITableData } from '@/interfaces';
+import { FinancialTableStructure } from '@/services/FinancialStatements/FinancialTableStructure';
+
+interface ITableSheet {
+ convertToXLSX(): WorkBook;
+ convertToCSV(): string;
+ convertToBuffer(workbook: WorkBook, fileType: string): Buffer;
+}
+
+export class TableSheet implements ITableSheet {
+ private table: ITableData;
+
+ constructor(table: ITableData) {
+ this.table = table;
+ }
+
+ /**
+ * Retrieves the columns labels.
+ * @returns {string[]}
+ */
+ private get columns() {
+ return this.table.columns.map((col) => col.label);
+ }
+
+ /**
+ * Retrieves the columns accessors.
+ * @returns {string[]}
+ */
+ private get columnsAccessors() {
+ return this.table.columns.map((col, index) => {
+ return `${index}`;
+ });
+ }
+
+ /**
+ * Retrieves the rows data cellIndex/Value.
+ * @returns {Record}
+ */
+ private get rows() {
+ const computedRows = FinancialTableStructure.flatNestedTree(
+ this.table.rows
+ );
+ return computedRows.map((row) => {
+ const entries = row.cells.map((cell, index) => {
+ return [`${index}`, cell.value];
+ });
+ return Object.fromEntries(entries);
+ });
+ }
+
+ /**
+ * Converts the table to a CSV string.
+ * @returns {string}
+ */
+ public convertToCSV(): string {
+ // Define custom headers
+ const headers = this.columns;
+
+ // Convert data to worksheet with headers
+ const worksheet = xlsx.utils.json_to_sheet(this.rows, {
+ header: this.columnsAccessors,
+ });
+ // Add custom headers to the worksheet
+ xlsx.utils.sheet_add_aoa(worksheet, [headers], { origin: 'A1' });
+
+ // Convert worksheet to CSV format
+ const csvOutput = xlsx.utils.sheet_to_csv(worksheet);
+
+ return csvOutput;
+ }
+
+ /**
+ * Convert the array of objects to an XLSX file with styled headers
+ * @returns {Workbook}
+ */
+ public convertToXLSX(): WorkBook {
+ // Create a new workbook and a worksheet
+ const workbook = xlsx.utils.book_new();
+ const worksheet = xlsx.utils.json_to_sheet(this.rows, {
+ header: this.columnsAccessors,
+ });
+ // Add custom headers to the worksheet
+ xlsx.utils.sheet_add_aoa(worksheet, [this.columns], {
+ origin: 'A1',
+ });
+ // Adjust column width.
+ worksheet['!cols'] = this.computeXlsxColumnsWidths(this.rows);
+
+ // Append the worksheet to the workbook
+ xlsx.utils.book_append_sheet(workbook, worksheet, 'Sheet1');
+
+ return workbook;
+ }
+
+ /**
+ * Converts the given workbook to buffer of the given file type
+ * @param {WorkBook} workbook
+ * @param {string} fileType
+ * @returns {Promise}
+ */
+ public convertToBuffer(workbook: WorkBook, fileType: 'xlsx' | 'csv'): Buffer {
+ return xlsx.write(workbook, {
+ type: 'buffer',
+ bookType: fileType,
+ cellStyles: true,
+ });
+ }
+
+ /**
+ * Adjusts and computes the columns width.
+ * @param {} rows
+ * @returns {{wch: number}[]}
+ */
+ private computeXlsxColumnsWidths = (rows): { wch: number }[] => {
+ const cols = [{ wch: 60 }];
+
+ this.columns.map((column) => {
+ cols.push({ wch: column.length });
+ });
+ rows.forEach((row) => {
+ const entries = Object.entries(row);
+
+ entries.forEach(([key, value]) => {
+ if (cols[key]) {
+ cols[key].wch = Math.max(cols[key].wch, String(value).length);
+ } else {
+ cols[key] = { wch: String(value).length };
+ }
+ });
+ });
+ return cols;
+ };
+}
diff --git a/packages/server/src/loaders/express.ts b/packages/server/src/loaders/express.ts
index 696ef895b..cf9787a95 100644
--- a/packages/server/src/loaders/express.ts
+++ b/packages/server/src/loaders/express.ts
@@ -1,4 +1,5 @@
import { json, Request, Response, NextFunction } from 'express';
+import express from 'express';
import helmet from 'helmet';
import boom from 'express-boom';
import errorHandler from 'errorhandler';
@@ -42,6 +43,8 @@ export default ({ app }) => {
// Middleware for intercepting and transforming json responses.
app.use(JSONResponseTransformer(snakecaseResponseTransformer));
+ app.use('/public', express.static(path.join(global.__storage_dir)));
+
// Handle multi-media requests.
app.use(
fileUpload({
diff --git a/packages/server/src/loaders/jobs.ts b/packages/server/src/loaders/jobs.ts
index 4fa3aadb1..74c7d6b6e 100644
--- a/packages/server/src/loaders/jobs.ts
+++ b/packages/server/src/loaders/jobs.ts
@@ -5,6 +5,11 @@ import RewriteInvoicesJournalEntries from 'jobs/WriteInvoicesJEntries';
import UserInviteMailJob from 'jobs/UserInviteMail';
import OrganizationSetupJob from 'jobs/OrganizationSetup';
import OrganizationUpgrade from 'jobs/OrganizationUpgrade';
+import { SendSaleInvoiceMailJob } from '@/services/Sales/Invoices/SendSaleInvoiceMailJob';
+import { SendSaleInvoiceReminderMailJob } from '@/services/Sales/Invoices/SendSaleInvoiceMailReminderJob';
+import { SendSaleEstimateMailJob } from '@/services/Sales/Estimates/SendSaleEstimateMailJob';
+import { SaleReceiptMailNotificationJob } from '@/services/Sales/Receipts/SaleReceiptMailNotificationJob';
+import { PaymentReceiveMailNotificationJob } from '@/services/Sales/PaymentReceives/PaymentReceiveMailNotificationJob';
export default ({ agenda }: { agenda: Agenda }) => {
new ResetPasswordMailJob(agenda);
@@ -13,6 +18,11 @@ export default ({ agenda }: { agenda: Agenda }) => {
new RewriteInvoicesJournalEntries(agenda);
new OrganizationSetupJob(agenda);
new OrganizationUpgrade(agenda);
+ new SendSaleInvoiceMailJob(agenda);
+ new SendSaleInvoiceReminderMailJob(agenda);
+ new SendSaleEstimateMailJob(agenda);
+ new SaleReceiptMailNotificationJob(agenda);
+ new PaymentReceiveMailNotificationJob(agenda);
agenda.start();
};
diff --git a/packages/server/src/loaders/tenantModels.ts b/packages/server/src/loaders/tenantModels.ts
index d76c7e618..fcf1936be 100644
--- a/packages/server/src/loaders/tenantModels.ts
+++ b/packages/server/src/loaders/tenantModels.ts
@@ -60,6 +60,7 @@ import Time from 'models/Time';
import Task from 'models/Task';
import TaxRate from 'models/TaxRate';
import TaxRateTransaction from 'models/TaxRateTransaction';
+import Attachment from 'models/Attachment';
export default (knex) => {
const models = {
@@ -123,6 +124,7 @@ export default (knex) => {
Task,
TaxRate,
TaxRateTransaction,
+ Attachment
};
return mapValues(models, (model) => model.bindKnex(knex));
};
diff --git a/packages/server/src/locales/ar.json b/packages/server/src/locales/ar.json
deleted file mode 100644
index a52b13d51..000000000
--- a/packages/server/src/locales/ar.json
+++ /dev/null
@@ -1,640 +0,0 @@
-{
- "Petty Cash": "العهدة",
- "Cash": "النقدية",
- "Bank": "المصرف",
- "Other Income": "إيرادات اخري",
- "Interest Income": "إيرادات الفوائد",
- "Depreciation Expense": "مصاريف الاهلاك",
- "Interest Expense": "مصروفات الفوائد",
- "Sales of Product Income": "مبيعات دخل المنتجات",
- "Inventory Asset": "المخزون",
- "Cost of Goods Sold (COGS)": "تكلفة البضائع المباعة (COGS)",
- "Cost of Goods Sold": "تكلفة البضاعة المباعة",
- "Accounts Payable": "الذمم الدائنة",
- "Other Expense": "مصاريف أخرى",
- "Payroll Expenses": "مصاريف المرتبات",
- "Fixed Asset": "أصول ثابتة",
- "Credit Card": "بطاقة إئتمان",
- "Non-Current Asset": "أصول غير متداولة",
- "Current Asset": "أصول متداولة",
- "Other Asset": "أصول اخري",
- "Long Term Liability": "التزامات طويلة الاجل",
- "Current Liability": "التزامات قصيرة الاجل",
- "Other Liability": "التزمات اخري",
- "Equity": "حقوق الملكية",
- "Expense": "مصروف",
- "Income": "إيراد",
- "Accounts Receivable (A/R)": "الذمم المدينة",
- "Accounts Receivable": "الذمم المدينة",
- "Accounts Payable (A/P)": "الذمم الدائنة",
- "Inactive": "غير نشط",
- "Other Current Asset": "أصول متداولة اخرى",
- "Tax Payable": "الضريبة المستحقة",
- "Other Current Liability": "التزامات قصيرة الأجر اخرى",
- "Non-Current Liability": "التزامات طويلة الأجر",
- "Assets": "أصول",
- "Liabilities": "الالتزمات",
- "Account name": "أسم الحساب",
- "Account type": "نوع الحساب",
- "Account normal": "حساب عادي",
- "Description": "وصف",
- "Account code": "رمز الحساب",
- "Currency": "عملة",
- "Balance": "توازن",
- "Active": "نشيط",
- "Created at": "أنشئت في",
- "fixed_asset": "أصل ثابت",
- "Journal": "قيد",
- "Reconciliation": "تسوية",
- "Credit": "دائن",
- "Debit": "مدين",
- "Interest": "فائدة",
- "Depreciation": "اهلاك",
- "Payroll": "كشف رواتب",
- "Type": "نوع",
- "Name": "الأسم",
- "Sellable": "قابل للبيع",
- "Purchasable": "قابل للشراء",
- "Sell price": "سعر البيع",
- "Cost price": "سعر الكلفة",
- "User": "المستخدم",
- "Category": "تصنيف",
- "Note": "ملحوظة",
- "Quantity on hand": "كمية في اليد",
- "Purchase description": "وصف الشراء",
- "Sell description": "وصف البيع",
- "Sell account": "حساب البيع",
- "Cost account": "حساب التكلفة",
- "Inventory account": "حساب المخزون",
- "Payment date": "تاريخ الدفع",
- "Payment account": "حساب الدفع",
- "Amount": "كمية",
- "Reference No.": "رقم المرجع.",
- "Published": "نشرت",
- "Journal number": "رقم القيد",
- "Status": "حالة",
- "Journal type": "نوع القيد",
- "Date": "تاريخ",
- "Asset": "أصل",
- "Liability": "التزام",
- "First-in first-out (FIFO)": "الوارد أولاً يصرف أولاً (FIFO)",
- "Last-in first-out (LIFO)": "الوارد أخيرًا يصرف أولاً (LIFO)",
- "Average rate": "المعدل المتوسط",
- "Total": "الإجمالي",
- "Transaction type": "نوع المعاملة",
- "Transaction #": "عملية #",
- "Running Value": "القيمة الجارية",
- "Running quantity": "الكمية الجارية",
- "Profit Margin": "هامش الربح",
- "Value": "القيمة",
- "Rate": "السعر",
- "OPERATING ACTIVITIES": "الأنشطة التشغيلية",
- "FINANCIAL ACTIVITIES": "الأنشطة التمويلية",
- "INVESTMENT ACTIVITIES": "الانشطة الاستثمارية",
- "Net income": "صافي الدخل",
- "Adjustments net income by operating activities.": "تسويات صافي الدخل من الأنشطة التشغيلية.",
- "Net cash provided by operating activities": "صافي التدفقات النقدية من أنشطة التشغيل",
- "Net cash provided by investing activities": "صافي التدفقات النقدية من أنشطة الاستثمار",
- "Net cash provided by financing activities": "صافي التدفقات النقدية من أنشطة التمويلية",
- "Cash at beginning of period": "التدفقات النقدية في بداية الفترة",
- "NET CASH INCREASE FOR PERIOD": "زيادة التدفقات النقدية للفترة",
- "CASH AT END OF PERIOD": "صافي التدفقات النقدية في نهاية الفترة",
- "Expenses": "مصاريف",
- "Services": "خدمات",
- "Inventory": "المخزون",
- "Non Inventory": "غير المخزون",
- "Draft": "مسودة",
- "Delivered": "تم التوصيل",
- "Overdue": "متأخر",
- "Partially paid": "المدفوعة جزئيا",
- "Paid": "مدفوع",
- "Opened": "افتتح",
- "Unpaid": "غير مدفوعة",
- "Approved": "وافق",
- "Rejected": "مرفوض",
- "Invoiced": "مفوترة",
- "Expired": "منتهي الصلاحية",
- "Closed": "مغلق",
- "Manual journal": "قيد اليدوي",
- "Owner contribution": "زيادة رأس المال",
- "Transfer to account": "تحويل إلى الحساب",
- "Transfer from account": "تحويل من الحساب",
- "Other income": "إيراد اخر",
- "Other expense": "مصاريف أخرى",
- "Owner drawing": "سحب رأس المال",
- "Inventory adjustment": "تسوية المخزون",
- "Customer opening balance": "الرصيد الافتتاحي للزبون",
- "Vendor opening balance": "رصيد افتتاحي للمورد",
- "Payment made": "سند الزبون",
- "Bill": "فاتورة الشراء",
- "Payment receive": "استلام الدفع",
- "Sale receipt": "إيصال البيع",
- "Sale invoice": "فاتورة البيع",
- "Quantity": "الكمية",
- "Bank Account": "حساب البنك",
- "Saving Bank Account": "حساب التوفير البنكي",
- "Undeposited Funds": "الأموال غير المودعة",
- "Computer Equipment": "معدات كمبيوتر",
- "Office Equipment": "معدات مكتبية",
- "Uncategorized Income": "الدخل غير مصنف",
- "Sales of Service Income": "دخل مبيعات الخدمات",
- "Bank Fees and Charges": "رسوم المصرفية",
- "Exchange Gain or Loss": "ربح أو خسارة فروقات الصرف",
- "Rent": "إيجار",
- "Office expenses": "مصاريف المكتب",
- "Other Expenses": "مصاريف اخري",
- "Drawings": "السحوبات",
- "Owner's Equity": "حقوق الملكية",
- "Opening Balance Equity": "الارصدة الافتتاحية ",
- "Retained Earnings": "الأرباح المحتجزة",
- "Sales Tax Payable": "ضريبة المبيعات المستحقة",
- "Revenue Received in Advance": "الإيرادات المقبوضة مقدما",
- "Opening Balance Liabilities": "رصيد الالتزامات الافتتاحي",
- "Loan": "اقراض",
- "Owner A Drawings": "مسحوبات المالك",
- "An account that holds valuation of products or goods that available for sale.": "حساب يحمل قيم مخزون البضاعة أو السلع المتاحة للبيع.",
- "Tracks the gain and losses of the exchange differences.": "يسجل مكاسب وخسائر فروق الصرف.",
- "Any bank fees levied is recorded into the bank fees and charges account. A bank account maintenance fee, transaction charges, a late payment fee are some examples.": "يتم تسجيل أي رسوم مصرفية يتم فرضها في حساب الرسوم والمصروفات البنكية. ومن الأمثلة على ذلك رسوم صيانة الحساب المصرفي ورسوم المعاملات ورسوم الدفع المتأخر.",
- "The income activities are not associated to the core business.": "لا ترتبط انشطة الدخل إلى الأعمال الأساسية.",
- "Cash and cash equivalents": "النقد والنقد المكافئ",
- "Inventories": "مخزون البضاعة",
- "Other current assets": "الأصول متداولة الأخرى",
- "Non-Current Assets": "أصول غير المتداولة",
- "Current Liabilties": "التزامات متداولة",
- "Long-Term Liabilities": "التزامات طويلة الاجل",
- "Non-Current Liabilities": "التزامات غير متداولة",
- "Liabilities and Equity": "التزامات وحقوق الملكية",
- "Closing balance": "الرصيد الختامي",
- "Opening balance": "الرصيد الفتاحي",
- "Total {{accountName}}": "إجمالي {{accountName}}",
-
- "invoice.paper.invoice": "فاتورة",
- "invoice.paper.due_amount": "القيمة المستحقة",
- "invoice.paper.billed_to": "فاتورة إلي",
- "invoice.paper.invoice_date": "تاريخ الفاتورة",
- "invoice.paper.invoice_number": "رقم الفاتورة",
- "invoice.paper.due_date": "تاريخ الاستحقاق",
- "invoice.paper.conditions_title": "الشروط والأحكام",
- "invoice.paper.notes_title": "ملاحظات",
- "invoice.paper.total": "المجموع",
- "invoice.paper.balance_due": "مبلغ المستحق",
- "invoice.paper.payment_amount": "مبلغ المدفوع",
- "invoice.paper.invoice_amount": "قيمة الفاتورة",
-
- "item_entry.paper.item_name": "اسم الصنف",
- "item_entry.paper.rate": "السعر",
- "item_entry.paper.quantity": "الكمية",
- "item_entry.paper.total": "إجمالي",
-
- "estimate.paper.estimate": "عرض أسعار",
- "estimate.paper.billed_to": "عرض أسعار إلي",
- "estimate.paper.estimate_date": "تاريخ العرض",
- "estimate.paper.estimate_number": "رقم العرض",
- "estimate.paper.expiration_date": "تاريخ انتهاء الصلاحية",
- "estimate.paper.conditions_title": "الشروط والأحكام",
- "estimate.paper.notes_title": "ملاحظات",
- "estimate.paper.amount": "قيمة العرض",
- "estimate.paper.subtotal": "المجموع",
- "estimate.paper.total": "إجمالي",
- "estimate.paper.estimate_amount": "قيمة العرض",
-
- "receipt.paper.receipt": "إيصال",
- "receipt.paper.billed_to": "الإيصال إلي",
- "receipt.paper.receipt_date": "تاريخ الإيصال",
- "receipt.paper.receipt_number": "رقم الإيصال",
- "receipt.paper.conditions_title": "الشروط والأحكام",
- "receipt.paper.notes_title": "ملاحظات",
- "receipt.paper.receipt_amount": "قيمة الإيصال",
- "receipt.paper.total": "إجمالي",
- "receipt.paper.payment_amount": "مبلغ المدفوع",
- "receipt.paper.balance_due": "مبلغ المستحق",
- "receipt.paper.statement": "البيان",
- "receipt.paper.notes": "ملاحظات",
-
- "payment.paper.payment_receipt": "إيصال قبض",
- "payment.paper.amount_received": "القيمة المستلمه",
- "payment.paper.billed_to": "إيصال إلي",
- "payment.paper.payment_date": "تاريخ الدفع",
- "payment.paper.invoice_number": "رقم الفاتورة",
- "payment.paper.invoice_date": "تاريخ الفاتورة",
- "payment.paper.invoice_amount": "قيمة الفاتورة",
- "payment.paper.payment_amount": "قيمة الدفع",
- "payment.paper.balance_due": "المبلغ المستحق",
- "payment.paper.statement": "البيان",
-
- "credit.paper.credit_note": "اشعار دائن",
- "credit.paper.amount": "قيمة الاشعار",
- "credit.paper.remaining": "رصيد المتبقي",
- "credit.paper.billed_to": "إيصال إلي",
- "credit.paper.credit_date": "تاريخ الاشعار",
- "credit.paper.terms_conditions": "الشروط والاحكام",
- "credit.paper.notes": "ملاحظات",
- "credit.paper.total": "إجمالي",
- "credit.paper.credits_used": "قيمة المستخدمه",
- "credit.paper.credits_remaining": "قيمة المتبقية",
-
- "account.field.name": "إسم الحساب",
- "account.field.description": "الوصف",
- "account.field.slug": "Account slug",
- "account.field.code": "رقم الحساب",
- "account.field.root_type": "جذر الحساب",
- "account.field.normal": "طبيعة الحساب",
- "account.field.normal.credit": "دائن",
- "account.field.normal.debit": "مدين",
- "account.field.type": "نوع الحساب",
- "account.field.active": "Activity",
- "account.field.balance": "الرصيد",
- "account.field.created_at": "أنشئت في",
- "item.field.type": "نوع الصنف",
- "item.field.type.inventory": "مخزون",
- "item.field.type.service": "خدمة",
- "item.field.type.non-inventory": "غير مخزون",
- "item.field.name": "اسم الصنف",
- "item.field.code": "رمز الصنف",
- "item.field.sellable": "قابل للبيع",
- "item.field.purchasable": "قابل للشراء",
- "item.field.cost_price": "سعر التكلفة",
- "item.field.cost_account": "حساب التكلفة",
- "item.field.sell_account": "حساب البيع",
- "item.field.sell_description": "وصف البيع",
- "item.field.inventory_account": "حساب المخزون",
- "item.field.purchase_description": "وصف الشراء",
- "item.field.quantity_on_hand": "الكمية",
- "item.field.note": "ملاحظة",
- "item.field.category": "التصنيف",
- "item.field.active": "Active",
- "item.field.created_at": "أنشئت في",
- "item_category.field.name": "الاسم",
- "item_category.field.description": "الوصف",
- "item_category.field.count": "العدد",
- "item_category.field.created_at": "أنشئت في",
- "invoice.field.customer": "الزبون",
- "invoice.field.invoice_date": "تاريخ الفاتورة",
- "invoice.field.due_date": "تاريخ الاستحقاق",
- "invoice.field.invoice_no": "رقم الفاتورة",
- "invoice.field.reference_no": "رقم الإشاري",
- "invoice.field.invoice_message": "رسالة الفاتورة",
- "invoice.field.terms_conditions": "الشروط والأحكام",
- "invoice.field.amount": "القيمة",
- "invoice.field.payment_amount": "القيمة المدفوعة",
- "invoice.field.due_amount": "القيمة المستحقة",
- "invoice.field.status": "الحالة",
- "invoice.field.status.paid": "مدفوعة",
- "invoice.field.status.partially-paid": "المدفوعة جزئيا",
- "invoice.field.status.overdue": "متأخرة",
- "invoice.field.status.unpaid": "غير مدفوعة",
- "invoice.field.status.delivered": "تم تسليمها",
- "invoice.field.status.draft": "مسودة",
- "invoice.field.created_at": "أنشئت في",
- "estimate.field.amount": "القيمة",
- "estimate.field.estimate_number": "رقم العرض",
- "estimate.field.customer": "الزبون",
- "estimate.field.estimate_date": "تاريخ العرض",
- "estimate.field.expiration_date": "تاريخ انتهاء الصلاحية",
- "estimate.field.reference_no": "رقم الإشاري",
- "estimate.field.note": "ملاحظة",
- "estimate.field.terms_conditions": "الشروط والأحكام",
- "estimate.field.status": "الحالة",
- "estimate.field.status.delivered": "تم تسليمها",
- "estimate.field.status.rejected": "مرفوضة",
- "estimate.field.status.approved": "تم الموافقة",
- "estimate.field.status.draft": "مسودة",
- "estimate.field.created_at": "أنشئت في",
- "payment_receive.field.customer": "الزبون",
- "payment_receive.field.payment_date": "تاريخ الدفع",
- "payment_receive.field.amount": "القيمة",
- "payment_receive.field.reference_no": "رقم الإشاري",
- "payment_receive.field.deposit_account": "حساب الإيداع",
- "payment_receive.field.payment_receive_no": "رقم عملية الدفع",
- "payment_receive.field.statement": "البيان",
- "payment_receive.field.created_at": "أنشئت في",
- "bill_payment.field.vendor": "المورد",
- "bill_payment.field.amount": "القيمة",
- "bill_payment.field.due_amount": "قيمة المستحقة",
- "bill_payment.field.payment_account": "حساب الدفع",
- "bill_payment.field.payment_number": "قيمة الدفع",
- "bill_payment.field.payment_date": "تاريخ الدفع",
- "bill_payment.field.reference_no": "رقم الإشاري",
- "bill_payment.field.description": "الوصف",
- "bill_payment.field.created_at": "أنشئت في",
- "bill.field.vendor": "المورد",
- "bill.field.bill_number": "رقم الفاتورة",
- "bill.field.bill_date": "تاريخ الفاتورة",
- "bill.field.due_date": "تاريخ الاستحقاق",
- "bill.field.reference_no": "رقم الإشاري",
- "bill.field.status": "الحالة",
- "bill.field.status.paid": "مدفوعة",
- "bill.field.status.partially-paid": "مدفوعة جزئيا",
- "bill.field.status.unpaid": "غير مدفوعة",
- "bill.field.status.opened": "مفتوحة",
- "bill.field.status.draft": "مسودة",
- "bill.field.status.overdue": "متأخرة",
- "bill.field.amount": "القيمة",
- "bill.field.payment_amount": "قيم الدفع",
- "bill.field.note": "ملاحظة",
- "bill.field.created_at": "أنشئت في",
- "inventory_adjustment.field.date": "التاريخ",
- "inventory_adjustment.field.type": "النوع",
- "inventory_adjustment.field.type.increment": "زيادة",
- "inventory_adjustment.field.type.decrement": "نقصان",
- "inventory_adjustment.field.adjustment_account": "حساب التسوية",
- "inventory_adjustment.field.reason": "السبب",
- "inventory_adjustment.field.reference_no": "رقم الإشاري",
- "inventory_adjustment.field.description": "الوصف",
- "inventory_adjustment.field.published_at": "نشرت في",
- "inventory_adjustment.field.created_at": "أنشئت في",
- "expense.field.payment_date": "تاريخ الدفع",
- "expense.field.payment_account": "حساب الدفع",
- "expense.field.amount": "القيمة",
- "expense.field.reference_no": "رقم الإشاري",
- "expense.field.description": "الوصف",
- "expense.field.published": "Published",
- "expense.field.status": "الحالة",
- "expense.field.status.draft": "مسودة",
- "expense.field.status.published": "نشرت",
- "expense.field.created_at": "أنشئت في",
- "manual_journal.field.date": "التاريخ",
- "manual_journal.field.journal_number": "رقم القيد",
- "manual_journal.field.reference": "رقم الإشاري",
- "manual_journal.field.journal_type": "نوع القيد",
- "manual_journal.field.amount": "القيمة",
- "manual_journal.field.description": "الوصف",
- "manual_journal.field.status": "الحالة",
- "manual_journal.field.created_at": "أنشئت في",
- "receipt.field.amount": "القيمة",
- "receipt.field.deposit_account": "حساب الإيداع",
- "receipt.field.customer": "الزبون",
- "receipt.field.receipt_date": "تاريخ الإيصال",
- "receipt.field.receipt_number": "رقم الإيصال",
- "receipt.field.reference_no": "رقم الإشاري",
- "receipt.field.receipt_message": "رسالة الإيصال",
- "receipt.field.statement": "البيان",
- "receipt.field.created_at": "أنشئت في",
- "receipt.field.status": "الحالة",
- "receipt.field.status.draft": "مسودة",
- "receipt.field.status.closed": "مغلقة",
- "customer.field.first_name": "الاسم الأول",
- "customer.field.last_name": "الاسم الاخير",
- "customer.field.display_name": "اسم العرض",
- "customer.field.email": "بريد الالكتروني",
- "customer.field.work_phone": "هاتف عمل",
- "customer.field.personal_phone": "هاتف شخصي",
- "customer.field.company_name": "اسم الشركة",
- "customer.field.website": "موقع الكتروني",
- "customer.field.opening_balance_at": "الرصيد الافتتاحي في",
- "customer.field.opening_balance": "الرصيد الافتتاحي",
- "customer.field.created_at": "أنشئت في",
- "customer.field.balance": "الرصيد",
- "customer.field.status": "الحالة",
- "customer.field.currency": "العملة",
- "customer.field.status.active": "مفعل",
- "customer.field.status.inactive": "غير مفعل",
- "customer.field.status.overdue": "متأخر",
- "customer.field.status.unpaid": "غير دافع",
- "vendor.field.first_name": "الاسم الأول",
- "vendor.field.last_name": "الاسم الاخير",
- "vendor.field.display_name": "اسم العرض",
- "vendor.field.email": "بريد الالكتروني",
- "vendor.field.work_phone": "هاتف عمل",
- "vendor.field.personal_phone": "هاتف شخصي",
- "vendor.field.company_name": "اسم الشركة",
- "vendor.field.website": "موقع الكتروني",
- "vendor.field.opening_balance_at": "الرصيد الافتتاحي في",
- "vendor.field.opening_balance": "الرصيد الافتتاحي",
- "vendor.field.created_at": "أنشئت في",
- "vendor.field.balance": "الرصيد",
- "vendor.field.status": "الحالة",
- "vendor.field.currency": "العملة",
- "vendor.field.status.active": "مفعل",
- "vendor.field.status.inactive": "غير مفعل",
- "vendor.field.status.overdue": "متأخر",
- "vendor.field.status.unpaid": "غير دافع",
- "Invoice write-off": "شطب فاتورة",
- "transaction_type.credit_note": "اشعار دائن",
- "transaction_type.refund_credit_note": "استرجاع اموال اشعار دائن",
- "transaction_type.vendor_credit": "اشعار مدين",
- "transaction_type.refund_vendor_credit": "استرجاع اموال اشعار مدين",
- "transaction_type.landed_cost": "تحميل تكلفة",
-
- "sms_notification.invoice_details.label": "تفاصيل فاتورة البيع ",
- "sms_notification.invoice_reminder.label": "تذكير بفاتورة البيع ",
- "sms_notification.receipt_details.label": "تفاصيل إيصال البيع ",
- "sms_notification.sale_estimate_details.label": "تفاصيل فاتورة عرض اسعار ",
- "sms_notification.payment_receive_details.label": "تفاصيل سند الزبون",
- "sms_notification.customer_balance.label": "رصيد الزبون",
-
- "sms_notification.invoice_details.description": "سيتم إرسال إشعار عبر الرسائل القصيرة إلى العميل بمجرد إنشاء الفاتورة ونشرها أو عند إشعار العميل عبر رسالة نصية قصيرة بالفاتورة. ",
- "sms_notification.payment_receive.description": "سيتم إرسال إشعار رسالة شكر للدفع إلى العميل بمجرد إنشاء الدفعة ونشرها أو إشعار العميل بالدفع يدويًا. ",
- "sms_notification.receipt_details.description": "سيتم إرسال إشعار عبر الرسائل القصيرة إلى العميل بمجرد إنشاء ونشر الإيصال أو عند إشعار العميل بالإيصال يدويًا.",
- "sms_notification.customer_balance.description": "إرسال رسالة نصية قصيرة إشعار العملاء برصيدهم الحالي المستحق. ",
- "sms_notification.estimate_details.description": "سيتم إرسال إشعار عبر الرسائل القصيرة إلى عميلك بمجرد نشر العرض أو إشعار العميل بالعرض يدويًا.",
- "sms_notification.invoice_reminder.description": "سيتم ارسال إشعار SMS لتذكير الزبون بالدفع باكراً ، سواء ارسال بشكل تلقائي او يدوي.",
-
- "sms_notification.customer_balance.default_message": "عزيزي {CustomerName} ، هذا تذكير بشأن رصيد الحالي المستحق {Balance} ، يُرجى الدفع في أقرب وقت ممكن. - {CompanyName}",
- "sms_notification.payment_receive.default_message": "مرحبًا {CustomerName} ، تم القبض بقيمة {Amount} للفاتورة - {InvoiceNumber}. نحن نتطلع إلى خدمتك مرة أخرى. شكرا لك. - {CompanyName}",
- "sms_notification.estimate.default_message": "مرحبًا , {CustomerName} ، تم أنشاء فاتورة عرض اسعار - {EstimateNumber} لك. يرجى إلقاء نظرة وقبوله للمضي قدما. بانتظار ردك. - {CompanyName}",
-
- "sms_notification.invoice_details.default_message": "مرحبًا {CustomerName}, لديك مبلغ مستحق قدره {DueAmount} للفاتورة {InvoiceNumber}. - {CompanyName}",
- "sms_notification.receipt_details.default_message": "مرحبًا {CustomerName} ، لقد تم إنشاء إيصال - {ReceiptNumber} من أجلك. نتطلع إلى خدمتك مرة أخرى. شكرًا لك - {CompanyName}",
- "sms_notification.invoice_reminder.default_message": "عزيزي {CustomerName} ، يرجي سداد فاتورة - {InvoiceNumber} المستحقة. يرجى الدفع قبل تاريخ {DueDate}. شكرا لك. - {CompanyName}",
-
- "module.sale_invoices.label": "فواتير البيع",
- "module.sale_receipts.label": "إيصالات البيع",
- "module.sale_estimates.label": "فاتورة عرض اسعار ",
- "module.payment_receives.label": "سندات الزبائن ",
- "module.customers.label": "العملاء",
-
- "sms_notification.invoice.var.invoice_number": "يشير إلى رقم الفاتورة.",
- "sms_notification.invoice.var.reference_number": "يشير إلى رقم إشاري للفاتورة.",
- "sms_notification.invoice.var.customer_name": "يشير إلى اسم العميل الفاتورة",
- "sms_notification.invoice.var.due_amount": "يشير إلى مبلغ الفاتورة المستحق",
- "sms_notification.invoice.var.amount": "يشير إلى مبلغ الفاتورة.",
- "sms_notification.invoice.var.company_name": "يشير إلي اسم الشركة.",
- "sms_notification.invoice.var.due_date": "يشير إلي تاريخ استحقاق الفاتورة.",
-
- "sms_notification.receipt.var.receipt_number": "يشير إلى رقم الإيصال.",
- "sms_notification.receipt.var.reference_number": "يشير إلى رقم الإشاري للإيصال.",
- "sms_notification.receipt.var.customer_name": "يشير إلى اسم العميل الإيصال.",
- "sms_notification.receipt.var.amount": "يشير إلى مبلغ الإيصال. ",
- "sms_notification.receipt.var.company_name": "يشير إلي اسم الشركة.",
-
- "sms_notification.payment.var.payment_number": "يشير إلى رقم معاملة الدفع.",
- "sms_notification.payment.var.reference_number": "يشير إلى رقم الإشاري لعملية الدفع ",
- "sms_notification.payment.var.customer_name": "يشير إلى اسم العميل الدفع",
- "sms_notification.payment.var.amount": "يشير إلى مبلغ معاملة الدفع.",
- "sms_notification.payment.company_name": "يشير إلي اسم الشركة.",
- "sms_notification.payment.var.invoice_number": "يشير إلي رقم فاتورة التي تم دفعها.",
-
- "sms_notification.estimate.var.estimate_number": "يشير إلى رقم فاتورة عرض اسعار.",
- "sms_notification.estimate.var.reference_number": "يشير إلى رقم الإشاري لفاتورة عرض اسعار.",
- "sms_notification.estimate.var.customer_name": "يشير إلى اسم العميل الفاتورة",
- "sms_notification.estimate.var.amount": "يشير إلى قيمة الفاتورة",
- "sms_notification.estimate.var.company_name": "يشير إلي اسم الشركة.",
- "sms_notification.estimate.var.expiration_date": "يشير إلي تاريخ الصلاحية الفاتورة.",
- "sms_notification.estimate.var.estimate_date": "يشير إلي تاريخ الفاتورة.",
-
- "sms_notification.customer.var.customer_name": "يشير إلي اسم الزبون",
- "sms_notification.customer.var.balance": "يشير إلي رصيد زبون المستحق.",
- "sms_notification.customer.var.company_name": "يشير إلي اسم الشركة.",
-
- "ability.accounts": "شجرة الحسابات",
- "ability.manual_journal": "القيود اليدوية",
- "ability.cashflow": "التدفقات النقدية",
- "ability.inventory_adjustment": "تسويات المخزون",
- "ability.customers": "الزبائن",
- "ability.vendors": "الموردين",
- "ability.sale_estimates": "فواتير عرض الاسعار",
- "ability.sale_invoices": "فواتير البيع",
- "ability.sale_receipts": "إيصالات البيع",
- "ability.expenses": "المصاريف",
- "ability.payments_receive": "سندات الزبائن",
- "ability.purchase_invoices": "فواتير الشراء",
- "ability.all_reports": "كل التقارير",
- "ability.payments_made": "سندات الموردين",
- "ability.preferences": "التفضيلات",
- "ability.mutate_system_preferences": "تعديل تفضيلات النظام.",
-
- "ability.items": "الأصناف",
- "ability.view": "عرض",
- "ability.create": "إضافة",
- "ability.edit": "تعديل",
- "ability.delete": "حذف",
- "ability.transactions_locking": "إمكانية اغلاق المعاملات.",
-
- "ability.balance_sheet_report": "ميزانية العمومية",
- "ability.profit_loss_sheet": "قائمة الدخل",
- "ability.journal": "اليومية العامة",
- "ability.general_ledger": "دفتر الأستاذ العام",
- "ability.cashflow_report": "تقرير التدفقات النقدية",
- "ability.AR_aging_summary_report": "ملخص اعمار الديون للذمم المدينة",
- "ability.AP_aging_summary_report": "ملخص اعمار الديون للذمم الدائنة",
- "ability.purchases_by_items": "المشتريات حسب المنتجات",
- "ability.sales_by_items_report": "المبيعات حسب المنتجات",
- "ability.customers_transactions_report": "معاملات الزبائن",
- "ability.vendors_transactions_report": "معاملات الموردين",
- "ability.customers_summary_balance_report": "ملخص أرصدة الزبائن",
- "ability.vendors_summary_balance_report": "ملخص أرصدة الموردين",
- "ability.inventory_valuation_summary": "ملخص تقييم المخزون",
- "ability.inventory_items_details": "تفاصيل منتج المخزون",
-
- "vendor_credit.field.vendor": "المورد",
- "vendor_credit.field.amount": "القيمة",
- "vendor_credit.field.currency_code": "العملة",
- "vendor_credit.field.credit_date": "تاريخ الاشعار",
- "vendor_credit.field.credit_number": "رقم الاشعار",
- "vendor_credit.field.note": "ملاحظة",
- "vendor_credit.field.created_at": "أنشئت في",
- "vendor_credit.field.reference_no": "رقم الإشاري",
-
- "vendor_credit.field.status": "الحالة",
- "vendor_credit.field.status.draft": "مسودة",
- "vendor_credit.field.status.published": "تم نشرها",
- "vendor_credit.field.status.open": "مفتوحة",
- "vendor_credit.field.status.closed": "مغلقة",
-
- "credit_note.field.terms_conditions": "الشروط والاحكام",
- "credit_note.field.note": "ملاحظة",
- "credit_note.field.currency_code": "العملة",
- "credit_note.field.created_at": "أنشئت في",
- "credit_note.field.amount": "القيمة",
- "credit_note.field.credit_note_number": "رقم الاشعار",
- "credit_note.field.credit_note_date": "تاريخ الاشعار",
- "credit_note.field.customer": "الزبون",
- "credit_note.field.reference_no": "رقم الإشاري",
-
- "credit_note.field.status": "الحالة",
- "credit_note.field.status.draft": "مسودة",
- "credit_note.field.status.published": "تم نشرها",
- "credit_note.field.status.open": "مفتوحة",
- "credit_note.field.status.closed": "مغلقة",
-
- "transactions_locking.module.sales.label": "المبيعات",
- "transactions_locking.module.purchases.label": "المشتريات",
- "transactions_locking.module.financial.label": "المالية",
- "transactions_locking.module.all_transactions": "كل المعاملات",
-
- "transactions_locking.module.sales.desc": "فواتير البيع ، والإيصالات ، والإشعارات الدائنة ، واستلام مدفوعات الزبائن ، والأرصدة الافتتاحية للزبائن.",
- "transactions_locking.module.purchases.desc": "فواتير الشراء ومدفوعات الموردين وإشعارات المدينة والأرصدة الافتتاحية للموردين.",
- "transactions_locking.module.financial.desc": "القيود اليدوية والمصروفات وتسويات المخزون.",
-
- "inventory_adjustment.type.increment": "زيادة",
- "inventory_adjustment.type.decrement": "نقصان",
-
- "customer.type.individual": "فرد",
- "customer.type.business": "اعمال",
-
- "credit_note.view.draft": "مسودة",
- "credit_note.view.closed": "مغلقة",
- "credit_note.view.open": "مفتوحة",
- "credit_note.view.published": "نشرت",
-
- "vendor_credit.view.draft": "مسودة",
- "vendor_credit.view.closed": "مغلقة",
- "vendor_credit.view.open": "مفتوحة",
- "vendor_credit.view.published": "نشرت",
-
- "allocation_method.value.label": "القيمة",
- "allocation_method.quantity.label": "الكمية",
-
- "balance_sheet.assets": "الأصول",
- "balance_sheet.current_asset": "الأصول المتداولة",
- "balance_sheet.cash_and_cash_equivalents": "النقدية وما يعادلها",
- "balance_sheet.accounts_receivable": "الذمم المدينة",
- "balance_sheet.inventory": "المخزون",
- "balance_sheet.other_current_assets": "اصول متداولة اخرى",
- "balance_sheet.fixed_asset": "الأصول الثابتة",
- "balance_sheet.non_current_assets": "الاصول غير المتداولة",
- "balance_sheet.liabilities_and_equity": "الالتزامات وحقوق الملكية",
- "balance_sheet.liabilities": "الإلتزامات",
- "balance_sheet.current_liabilties": "الالتزامات المتداولة",
- "balance_sheet.long_term_liabilities": "الالتزامات طويلة الاجل",
- "balance_sheet.non_current_liabilities": "الالتزامات غير المتداولة",
- "balance_sheet.equity": "حقوق الملكية",
-
- "balance_sheet.account_name": "اسم الحساب",
- "balance_sheet.total": "إجمالي",
- "balance_sheet.percentage_of_column": "٪ التغير العمودي",
- "balance_sheet.percentage_of_row": "٪ التغير الأفقي",
-
- "financial_sheet.previoud_period_date": "(ف.س) {{date}}",
- "fianncial_sheet.previous_period_change": "التغيرات (ف.س)",
- "financial_sheet.previous_period_percentage": "٪ التغير (ف.س)",
-
- "financial_sheet.previous_year_date": "(س.س) {{date}}",
- "financial_sheet.previous_year_change": "التغيرات (س.س)",
- "financial_sheet.previous_year_percentage": "٪ التغير (س.س)",
- "financial_sheet.total_row": "إجمالي {{value}}",
-
- "profit_loss_sheet.income": "الإيرادات",
- "profit_loss_sheet.cost_of_sales": "تكلفة المبيعات",
- "profit_loss_sheet.gross_profit": "إجمالي الدخل",
- "profit_loss_sheet.expenses": "المصروفات",
- "profit_loss_sheet.net_operating_income": "صافي الدخل التشغيلي",
- "profit_loss_sheet.other_income": "إيرادات اخري",
- "profit_loss_sheet.other_expenses": "مصاريف اخري",
- "profit_loss_sheet.net_income": "صافي الدخل",
-
- "profit_loss_sheet.account_name": "اسم الحساب",
- "profit_loss_sheet.total": "إجمالي",
-
- "profit_loss_sheet.percentage_of_income": "٪ التغير في الإيرادات",
- "profit_loss_sheet.percentage_of_expenses": "٪ التغير في المصاريف",
- "profit_loss_sheet.percentage_of_column": "٪ التغير العمودي",
- "profit_loss_sheet.percentage_of_row": "٪ التغير الأفقي",
-
- "warehouses.primary_warehouse": "المستودع الرئيسي",
- "branches.head_branch": "الفرع الرئيسي",
-
- "account.accounts_payable.currency": "الذمم الدائنة - {{currency}}",
- "account.accounts_receivable.currency": "الذمم المدينة - {{currency}}",
-
- "role.admin.name": "الادارة",
- "role.admin.desc": "وصول غير مقيد لجميع الوحدات.",
-
- "role.staff.name": "العاملين",
- "role.staff.desc": "الوصول إلى جميع الوحدات باستثناء التقارير والإعدادات والمحاسبة.",
-
- "warehouse_transfer.view.draft.name": "مسودة",
- "warehouse_transfer.view.in_transit.name": "في النقل",
- "warehouse_transfer.view.transferred.name": "تم النقل"
-}
\ No newline at end of file
diff --git a/packages/server/src/locales/en.json b/packages/server/src/locales/en.json
deleted file mode 100644
index b021c2347..000000000
--- a/packages/server/src/locales/en.json
+++ /dev/null
@@ -1,641 +0,0 @@
-{
- "Petty Cash": "Petty Cash",
- "Cash": "Cash",
- "Bank": "Bank",
- "Other Income": "Other Income",
- "Interest Income": "Interest Income",
- "Depreciation Expense": "Depreciation Expense",
- "Interest Expense": "Interest Expense",
- "Sales of Product Income": "Sales of Product Income",
- "Inventory Asset": "Inventory Asset",
- "Cost of Goods Sold (COGS)": "Cost of Goods Sold (COGS)",
- "Cost of Goods Sold": "Cost of Goods Sold",
- "Accounts Payable": "Accounts Payable",
- "Other Expense": "Other Expense",
- "Payroll Expenses": "Payroll Expenses",
- "Fixed Asset": "Fixed Asset",
- "Credit Card": "Credit Card",
- "Non-Current Asset": "Non-Current Asset",
- "Current Asset": "Current Asset",
- "Other Asset": "Other Asset",
- "Long Term Liability": "Long Term Liability",
- "Current Liability": "Current Liability",
- "Other Liability": "Other Liability",
- "Equity": "Equity",
- "Expense": "Expense",
- "Income": "Income",
- "Accounts Receivable (A/R)": "Accounts Receivable (A/R)",
- "Accounts Receivable": "Accounts Receivable",
- "Accounts Payable (A/P)": "Accounts Payable (A/P)",
- "Inactive": "Inactive",
- "Other Current Asset": "Other Current Asset",
- "Tax Payable": "Tax Payable",
- "Other Current Liability": "Other Current Liability",
- "Non-Current Liability": "Non-Current Liability",
- "Assets": "Assets",
- "Liabilities": "Liabilities",
- "Account name": "Account name",
- "Account type": "Account type",
- "Account normal": "Account normal",
- "Description": "Description",
- "Account code": "Account code",
- "Currency": "Currency",
- "Balance": "Balance",
- "Active": "Active",
- "Created at": "Created at",
- "fixed_asset": "Fixed asset",
- "Journal": "Journal",
- "Reconciliation": "Reconciliation",
- "Credit": "Credit",
- "Debit": "Debit",
- "Interest": "Interest",
- "Depreciation": "Depreciation",
- "Payroll": "Payroll",
- "Type": "Type",
- "Name": "Name",
- "Sellable": "Sellable",
- "Purchasable": "Purchasable",
- "Sell price": "Sell price",
- "Cost price": "Cost price",
- "User": "User",
- "Category": "Category",
- "Note": "Note",
- "Quantity on hand": "Quantity on hand",
- "Quantity": "Quantity",
- "Purchase description": "Purchase description",
- "Sell description": "Sell description",
- "Sell account": "Sell account",
- "Cost account": "Cost account",
- "Inventory account": "Inventory account",
- "Payment date": "Payment date",
- "Payment account": "Payment account",
- "Amount": "Amount",
- "Reference No.": "Reference No.",
- "Journal number": "Journal number",
- "Status": "Status",
- "Journal type": "Journal type",
- "Date": "Date",
- "Asset": "Asset",
- "Liability": "Liability",
- "First-in first-out (FIFO)": "First-in first-out (FIFO)",
- "Last-in first-out (LIFO)": "Last-in first-out (LIFO)",
- "Average rate": "Average rate",
- "Total": "Total",
- "Transaction type": "Transaction type",
- "Transaction #": "Transaction #",
- "Running Value": "Running Value",
- "Running quantity": "Running quantity",
- "Profit Margin": "Profit Margin",
- "Value": "Value",
- "Rate": "Rate",
- "OPERATING ACTIVITIES": "OPERATING ACTIVITIES",
- "FINANCIAL ACTIVITIES": "FINANCIAL ACTIVITIES",
- "Net income": "Net income",
- "Adjustments net income by operating activities.": "Adjustments net income by operating activities.",
- "Net cash provided by operating activities": "Net cash provided by operating activities",
- "Net cash provided by investing activities": "Net cash provided by investing activities",
- "Net cash provided by financing activities": "Net cash provided by financing activities",
- "Cash at beginning of period": "Cash at beginning of period",
- "NET CASH INCREASE FOR PERIOD": "NET CASH INCREASE FOR PERIOD",
- "CASH AT END OF PERIOD": "CASH AT END OF PERIOD",
- "Expenses": "Expenses",
- "Services": "Services",
- "Inventory": "Inventory",
- "Non Inventory": "Non Inventory",
- "Draft": "Draft",
- "Published": "Published",
- "Delivered": "Delivered",
- "Overdue": "Overdue",
- "Partially paid": "Partially paid",
- "Paid": "Paid",
- "Opened": "Opened",
- "Unpaid": "Unpaid",
- "Approved": "Approved",
- "Rejected": "Rejected",
- "Invoiced": "Invoiced",
- "Expired": "Expired",
- "Closed": "Closed",
- "Manual journal": "Manual journal",
- "Owner contribution": "Owner contribution",
- "Transfer to account": "Transfer to account",
- "Transfer from account": "Transfer from account",
- "Other income": "Other income",
- "Other expense": "Other expense",
- "Owner drawing": "Owner drawing",
- "Inventory adjustment": "Inventory adjustment",
- "Customer opening balance": "Customer opening balance",
- "Vendor opening balance": "Vendor opening balance",
- "Payment made": "Payment made",
- "Bill": "Bill",
- "Payment receive": "Payment receive",
- "Sale receipt": "Sale receipt",
- "Sale invoice": "Sale invoice",
- "Bank Account": "Bank Account",
- "Saving Bank Account": "Saving Bank Account",
- "Undeposited Funds": "Undeposited Funds",
- "Computer Equipment": "Computer Equipment",
- "Office Equipment": "Office Equipment",
- "Uncategorized Income": "Uncategorized Income",
- "Sales of Service Income": "Sales of Service Income",
- "Bank Fees and Charges": "Bank Fees and Charges",
- "Exchange Gain or Loss": "Exchange Gain or Loss",
- "Rent": "Rent",
- "Office expenses": "Office expenses",
- "Other Expenses": "Other Expenses",
- "Drawings": "Drawings",
- "Owner's Equity": "Owner's Equity",
- "Opening Balance Equity": "Opening Balance Equity",
- "Retained Earnings": "Retained Earnings",
- "Sales Tax Payable": "Sales Tax Payable",
- "Revenue Received in Advance": "Revenue Received in Advance",
- "Opening Balance Liabilities": "Opening Balance Liabilities",
- "Loan": "Loan",
- "Owner A Drawings": "Owner A Drawings",
- "An account that holds valuation of products or goods that available for sale.": "An account that holds valuation of products or goods that available for sale.",
- "Tracks the gain and losses of the exchange differences.": "Tracks the gain and losses of the exchange differences.",
- "Any bank fees levied is recorded into the bank fees and charges account. A bank account maintenance fee, transaction charges, a late payment fee are some examples.": "Any bank fees levied is recorded into the bank fees and charges account. A bank account maintenance fee, transaction charges, a late payment fee are some examples.",
- "The income activities are not associated to the core business.": "The income activities are not associated to the core business.",
- "Cash and cash equivalents": "Cash and cash equivalents",
- "Inventories": "Inventories",
- "Other current assets": "Other current assets",
- "Non-Current Assets": "Non-Current Assets",
- "Current Liabilties": "Current Liabilties",
- "Long-Term Liabilities": "Long-Term Liabilities",
- "Non-Current Liabilities": "Non-Current Liabilities",
- "Liabilities and Equity": "Liabilities and Equity",
- "Closing balance": "Closing balance",
- "Opening Balance": "Opening balance",
- "Total {{accountName}}": "Total {{accountName}}",
- "invoice.paper.invoice": "Invoice",
- "invoice.paper.invoice_amount": "Invoice amount",
- "invoice.paper.due_amount": "Due amount",
- "invoice.paper.billed_to": "Billed to",
- "invoice.paper.invoice_date": "Invoice date",
- "invoice.paper.invoice_number": "Invoice No.",
- "invoice.paper.due_date": "Due date",
- "invoice.paper.conditions_title": "Conditions & terms",
- "invoice.paper.notes_title": "Notes",
- "invoice.paper.total": "Total",
- "invoice.paper.payment_amount": "Payment Amount",
- "invoice.paper.balance_due": "Balance Due",
-
- "item_entry.paper.item_name": "Item name",
- "item_entry.paper.rate": "Rate",
- "item_entry.paper.quantity": "Quantity",
- "item_entry.paper.total": "Total",
-
- "estimate.paper.estimate": "Estimate",
- "estimate.paper.estimate_amount": "Estimate amount",
- "estimate.paper.billed_to": "Billed to",
- "estimate.paper.estimate_date": "Estimate date",
- "estimate.paper.estimate_number": "Estimate number",
- "estimate.paper.expiration_date": "Expiration date",
- "estimate.paper.conditions_title": "Conditions & terms",
- "estimate.paper.notes_title": "Notes",
- "estimate.paper.amount": "Estimate amount",
- "estimate.paper.subtotal": "Subtotal",
- "estimate.paper.total": "Total",
-
- "receipt.paper.receipt": "Receipt",
- "receipt.paper.billed_to": "Billed to",
- "receipt.paper.receipt_date": "Receipt date",
- "receipt.paper.receipt_number": "Receipt number",
- "receipt.paper.expiration_date": "Expiration date",
- "receipt.paper.conditions_title": "Conditions & terms",
- "receipt.paper.notes": "Notes",
- "receipt.paper.statement": "Statement",
- "receipt.paper.receipt_amount": "Receipt amount",
- "receipt.paper.total": "Total",
- "receipt.paper.balance_due": "Balance Due",
- "receipt.paper.payment_amount": "Payment Amount",
-
- "credit.paper.credit_note": "Credit Note",
- "credit.paper.remaining": "Credit remaining",
- "credit.paper.amount": "Credit amount",
- "credit.paper.billed_to": "Bill to",
- "credit.paper.credit_date": "Credit date",
- "credit.paper.total": "Total",
- "credit.paper.credits_used": "Credits used",
- "credit.paper.credits_remaining": "Credits remaining",
- "credit.paper.conditions_title": "Conditions & terms",
- "credit.paper.notes": "Notes",
-
- "payment.paper.payment_receipt": "Payment Receipt",
- "payment.paper.amount_received": "Amount received",
- "payment.paper.billed_to": "Billed to",
- "payment.paper.payment_date": "Payment date",
- "payment.paper.invoice_number": "Invoice number",
- "payment.paper.invoice_date": "Invoice date",
- "payment.paper.invoice_amount": "Invoice amount",
- "payment.paper.payment_amount": "Payment amount",
- "payment.paper.balance_due": "Balance Due",
- "payment.paper.statement": "Statement",
-
- "account.field.name": "Account name",
- "account.field.description": "Description",
- "account.field.slug": "Account slug",
- "account.field.code": "Account code",
- "account.field.root_type": "Root type",
- "account.field.normal": "Account normal",
- "account.field.normal.credit": "Credit",
- "account.field.normal.debit": "Debit",
- "account.field.type": "Type",
- "account.field.active": "Activity",
- "account.field.balance": "Balance",
- "account.field.created_at": "Created at",
- "item.field.type": "Item type",
- "item.field.type.inventory": "Inventory",
- "item.field.type.service": "Service",
- "item.field.type.non-inventory": "Non inventory",
- "item.field.name": "Name",
- "item.field.code": "Code",
- "item.field.sellable": "Sellable",
- "item.field.purchasable": "Purchasable",
- "item.field.cost_price": "Cost price",
- "item.field.cost_account": "Cost account",
- "item.field.sell_account": "Sell account",
- "item.field.sell_description": "Sell description",
- "item.field.inventory_account": "Inventory account",
- "item.field.purchase_description": "Purchase description",
- "item.field.quantity_on_hand": "Quantity on hand",
- "item.field.note": "Note",
- "item.field.category": "Category",
- "item.field.active": "Active",
- "item.field.created_at": "Created at",
- "item_category.field.name": "Name",
- "item_category.field.description": "Description",
- "item_category.field.count": "Count",
- "item_category.field.created_at": "Created at",
- "invoice.field.customer": "Customer",
- "invoice.field.invoice_date": "Invoice date",
- "invoice.field.due_date": "Due date",
- "invoice.field.invoice_no": "Invoice No.",
- "invoice.field.reference_no": "Reference No.",
- "invoice.field.invoice_message": "Invoice message",
- "invoice.field.terms_conditions": "Terms & conditions",
- "invoice.field.amount": "Amount",
- "invoice.field.payment_amount": "Payment amount",
- "invoice.field.due_amount": "Due amount",
- "invoice.field.status": "Status",
- "invoice.field.status.paid": "Paid",
- "invoice.field.status.partially-paid": "Partially paid",
- "invoice.field.status.overdue": "Overdue",
- "invoice.field.status.unpaid": "Unpaid",
- "invoice.field.status.delivered": "Delivered",
- "invoice.field.status.draft": "Draft",
- "invoice.field.created_at": "Created at",
- "estimate.field.amount": "Amount",
- "estimate.field.estimate_number": "Estimate number",
- "estimate.field.customer": "Customer",
- "estimate.field.estimate_date": "Estimate date",
- "estimate.field.expiration_date": "Expiration date",
- "estimate.field.reference_no": "Reference No.",
- "estimate.field.note": "Note",
- "estimate.field.terms_conditions": "Terms & conditions",
- "estimate.field.status": "Status",
- "estimate.field.status.delivered": "Delivered",
- "estimate.field.status.rejected": "Rejected",
- "estimate.field.status.approved": "Approved",
- "estimate.field.status.draft": "Draft",
- "estimate.field.created_at": "Created at",
- "payment_receive.field.customer": "Customer",
- "payment_receive.field.payment_date": "Payment date",
- "payment_receive.field.amount": "Amount",
- "payment_receive.field.reference_no": "Reference No.",
- "payment_receive.field.deposit_account": "Deposit account",
- "payment_receive.field.payment_receive_no": "Payment receive No.",
- "payment_receive.field.statement": "Statement",
- "payment_receive.field.created_at": "Created at",
- "bill_payment.field.vendor": "Vendor",
- "bill_payment.field.amount": "Amount",
- "bill_payment.field.due_amount": "Due amount",
- "bill_payment.field.payment_account": "Payment account",
- "bill_payment.field.payment_number": "Payment number",
- "bill_payment.field.payment_date": "Payment date",
- "bill_payment.field.reference_no": "Reference No.",
- "bill_payment.field.description": "Description",
- "bill_payment.field.created_at": "Created at",
- "bill.field.vendor": "Vendor",
- "bill.field.bill_number": "Bill number",
- "bill.field.bill_date": "Bill date",
- "bill.field.due_date": "Due date",
- "bill.field.reference_no": "Reference No.",
- "bill.field.status": "Status",
- "bill.field.status.paid": "Paid",
- "bill.field.status.partially-paid": "Partially paid",
- "bill.field.status.unpaid": "Unpaid",
- "bill.field.status.opened": "Opened",
- "bill.field.status.draft": "Draft",
- "bill.field.status.overdue": "overdue",
- "bill.field.amount": "Amount",
- "bill.field.payment_amount": "Payment amount",
- "bill.field.note": "Note",
- "bill.field.created_at": "Created at",
- "inventory_adjustment.field.date": "Date",
- "inventory_adjustment.field.type": "Type",
- "inventory_adjustment.field.type.increment": "Increment",
- "inventory_adjustment.field.type.decrement": "Decrement",
- "inventory_adjustment.field.adjustment_account": "Adjustment account",
- "inventory_adjustment.field.reason": "Reason",
- "inventory_adjustment.field.reference_no": "Reference No.",
- "inventory_adjustment.field.description": "Description",
- "inventory_adjustment.field.published_at": "Published at",
- "inventory_adjustment.field.created_at": "Created at",
- "expense.field.payment_date": "Payment date",
- "expense.field.payment_account": "Payment account",
- "expense.field.amount": "Amount",
- "expense.field.reference_no": "Reference No.",
- "expense.field.description": "Description",
- "expense.field.published": "Published",
- "expense.field.status": "Status",
- "expense.field.status.draft": "Draft",
- "expense.field.status.published": "Published",
- "expense.field.created_at": "Created at",
- "manual_journal.field.date": "Date",
- "manual_journal.field.journal_number": "Journal number",
- "manual_journal.field.reference": "Reference No.",
- "manual_journal.field.journal_type": "Journal type",
- "manual_journal.field.amount": "Amount",
- "manual_journal.field.description": "Description",
- "manual_journal.field.status": "Status",
- "manual_journal.field.created_at": "Created at",
- "receipt.field.amount": "Amount",
- "receipt.field.deposit_account": "Deposit account",
- "receipt.field.customer": "Customer",
- "receipt.field.receipt_date": "Receipt date",
- "receipt.field.receipt_number": "Receipt number",
- "receipt.field.reference_no": "Reference No.",
- "receipt.field.receipt_message": "Receipt message",
- "receipt.field.statement": "Statement",
- "receipt.field.created_at": "Created at",
- "receipt.field.status": "Status",
- "receipt.field.status.draft": "Draft",
- "receipt.field.status.closed": "Closed",
- "customer.field.first_name": "First name",
- "customer.field.last_name": "Last name",
- "customer.field.display_name": "Display name",
- "customer.field.email": "Email",
- "customer.field.work_phone": "Work phone",
- "customer.field.personal_phone": "Personal phone",
- "customer.field.company_name": "Company name",
- "customer.field.website": "Website",
- "customer.field.opening_balance_at": "Opening balance at",
- "customer.field.opening_balance": "Opening balance",
- "customer.field.created_at": "Created at",
- "customer.field.balance": "Balance",
- "customer.field.status": "Status",
- "customer.field.currency": "Curreny",
- "customer.field.status.active": "Active",
- "customer.field.status.inactive": "Inactive",
- "customer.field.status.overdue": "Overdue",
- "customer.field.status.unpaid": "Unpaid",
- "vendor.field.first_name": "First name",
- "vendor.field.last_name": "Last name",
- "vendor.field.display_name": "Display name",
- "vendor.field.email": "Email",
- "vendor.field.work_phone": "Work phone",
- "vendor.field.personal_phone": "Personal phone",
- "vendor.field.company_name": "Company name",
- "vendor.field.website": "Website",
- "vendor.field.opening_balance_at": "Opening balance at",
- "vendor.field.opening_balance": "Opening balance",
- "vendor.field.created_at": "Created at",
- "vendor.field.balance": "Balance",
- "vendor.field.status": "Status",
- "vendor.field.currency": "Curreny",
- "vendor.field.status.active": "Active",
- "vendor.field.status.inactive": "Inactive",
- "vendor.field.status.overdue": "Overdue",
- "vendor.field.status.unpaid": "Unpaid",
- "Invoice write-off": "Invoice write-off",
-
- "transaction_type.credit_note": "Credit note",
- "transaction_type.refund_credit_note": "Refund credit note",
- "transaction_type.vendor_credit": "Vendor credit",
- "transaction_type.refund_vendor_credit": "Refund vendor credit",
- "transaction_type.landed_cost": "Landed cost",
-
- "sms_notification.invoice_details.label": "Sale invoice details",
- "sms_notification.invoice_reminder.label": "Sale invoice reminder",
- "sms_notification.receipt_details.label": "Sale receipt details",
- "sms_notification.sale_estimate_details.label": "Sale estimate details",
- "sms_notification.payment_receive_details.label": "Payment receive details",
- "sms_notification.customer_balance.label": "Customer balance",
-
- "sms_notification.invoice_details.description": "SMS notification will be sent to your customer once invoice created and published or when notify customer via SMS about the invoice.",
- "sms_notification.payment_receive.description": "Payment thank you message notification will be sent to customer once the payment created and published or notify customer about payment manually.",
- "sms_notification.receipt_details.description": "SMS notification will be sent to your cusotmer once receipt created and published or when notify customer about the receipt manually.",
- "sms_notification.customer_balance.description": "Send SMS to notify customers about their current outstanding balance.",
- "sms_notification.estimate_details.description": "SMS notification will be sent to your customer once estimate publish or notify customer about estimate manually.",
- "sms_notification.invoice_reminder.description": "SMS notification will be sent to remind the customer to pay earliest, either automatically or manually.",
-
- "sms_notification.customer_balance.default_message": "Dear {CustomerName}, This is reminder about your current outstanding balance of {Balance}, Please pay at the earliest. - {CompanyName}",
- "sms_notification.payment_receive.default_message": "'Hi, {CustomerName}, We have received your payment for the invoice - {InvoiceNumber}. We look forward to serving you again. Thank you. - {CompanyName}'",
- "sms_notification.estimate.default_message": "Hi, {CustomerName}, We have created an estimate - {EstimateNumber} for you. Please take a look and accept it to proceed further. Looking forward to hearing from you. - {CompanyName}",
-
- "sms_notification.invoice_details.default_message": "Hi, {CustomerName}, You have an outstanding amount of {DueAmount} for the invoice {InvoiceNumber}. - {CompanyName}",
- "sms_notification.receipt_details.default_message": "Hi, {CustomerName}, We have created receipt - {ReceiptNumber} for you. we look forward to serveing you again. Thank your - {CompanyName}",
- "sms_notification.invoice_reminder.default_message": "Dear {CustomerName}, The payment towards the invoice - {InvoiceNumber} is due. Please pay before {DueDate}. Thank you. - {CompanyName}",
-
- "module.sale_invoices.label": "Sale invoices",
- "module.sale_receipts.label": "Sale receipts",
- "module.sale_estimates.label": "Sale estimates",
- "module.payment_receives.label": "Payment receive",
- "module.customers.label": "Customers",
-
- "sms_notification.invoice.var.invoice_number": "References to invoice number.",
- "sms_notification.invoice.var.reference_number": "References to invoice reference number.",
- "sms_notification.invoice.var.customer_name": "References to invoice customer name.",
- "sms_notification.invoice.var.due_amount": "References to invoice due amount.",
- "sms_notification.invoice.var.amount": "References to invoice amount.",
- "sms_notification.invoice.var.company_name": "References to company name.",
- "sms_notification.invoice.var.due_date": "References to invoice due date.",
-
- "sms_notification.receipt.var.receipt_number": "References to receipt number.",
- "sms_notification.receipt.var.reference_number": "References to receipt reference number.",
- "sms_notification.receipt.var.customer_name": "References to receipt customer name.",
- "sms_notification.receipt.var.amount": "References to receipt amount.",
- "sms_notification.receipt.var.company_name": "References to company name.",
-
- "sms_notification.payment.var.payment_number": "References to payment transaction number.",
- "sms_notification.payment.var.reference_number": "References to payment reference number",
- "sms_notification.payment.var.customer_name": "References to payment customer name.",
- "sms_notification.payment.var.amount": "References to payment transaction amount.",
- "sms_notification.payment.company_name": "References to company name",
- "sms_notification.payment.var.invoice_number": "Reference to payment invoice number.",
-
- "sms_notification.estimate.var.estimate_number": "References to estimate number.",
- "sms_notification.estimate.var.reference_number": "References to estimate reference number.",
- "sms_notification.estimate.var.customer_name": "References to estimate customer name.",
- "sms_notification.estimate.var.amount": "References to estimate amount.",
- "sms_notification.estimate.var.company_name": "References to company name.",
- "sms_notification.estimate.var.expiration_date": "References to estimate expirtaion date.",
- "sms_notification.estimate.var.estimate_date": "References to estimate date.",
-
- "sms_notification.customer.var.customer_name": "References to customer name.",
- "sms_notification.customer.var.balance": "References to customer outstanding balance.",
- "sms_notification.customer.var.company_name": "References to company name.",
-
- "ability.accounts": "Chart of accounts",
- "ability.manual_journal": "Manual journals",
- "ability.cashflow": "Cash flow",
- "ability.inventory_adjustment": "Inventory adjustments",
- "ability.customers": "Customers",
- "ability.vendors": "vendors",
- "ability.sale_estimates": "Sale estimates",
- "ability.sale_invoices": "Sale invoices",
- "ability.sale_receipts": "Sale receipts",
- "ability.expenses": "Expenses",
- "ability.payments_receive": "Payments receive",
- "ability.purchase_invoices": "Purchase invoices",
- "ability.all_reports": "All reports",
- "ability.payments_made": "Payments made",
- "ability.preferences": "Preferences",
- "ability.mutate_system_preferences": "Mutate the system preferences.",
-
- "ability.items": "Items",
- "ability.view": "View",
- "ability.create": "Create",
- "ability.edit": "Edit",
- "ability.delete": "Delete",
- "ability.transactions_locking": "Ability to transactions locking.",
-
- "ability.balance_sheet_report": "Balance sheet.",
- "ability.profit_loss_sheet": "Profit/loss sheet",
- "ability.journal": "Journal",
- "ability.general_ledger": "General ledger",
- "ability.cashflow_report": "Cashflow",
- "ability.AR_aging_summary_report": "A/R aging summary",
- "ability.AP_aging_summary_report": "A/P aging summary",
- "ability.purchases_by_items": "Purchases by items",
- "ability.sales_by_items_report": "Sales by items",
- "ability.customers_transactions_report": "Customers transactions",
- "ability.vendors_transactions_report": "Vendors transactions",
- "ability.customers_summary_balance_report": "Customers summary balance",
- "ability.vendors_summary_balance_report": "Vendors summary balance",
- "ability.inventory_valuation_summary": "Inventory valuation summary",
- "ability.inventory_items_details": "Inventory items details",
-
- "vendor_credit.field.vendor": "Vendor name",
- "vendor_credit.field.amount": "Amount",
- "vendor_credit.field.currency_code": "Currency code",
- "vendor_credit.field.credit_date": "Credit date",
- "vendor_credit.field.credit_number": "Credit number",
- "vendor_credit.field.note": "Note",
- "vendor_credit.field.created_at": "Created at",
- "vendor_credit.field.reference_no": "Reference No.",
-
- "credit_note.field.terms_conditions": "Terms and conditions",
- "credit_note.field.note": "Note",
- "credit_note.field.currency_code": "Currency code",
- "credit_note.field.created_at": "Created at",
- "credit_note.field.amount": "Amount",
- "credit_note.field.credit_note_number": "Credit note number",
- "credit_note.field.credit_note_date": "Credit date",
- "credit_note.field.customer": "Customer",
- "credit_note.field.reference_no": "Reference No.",
-
- "Credit note": "Credit note",
- "Vendor credit": "Vendor credit",
- "Refund credit note": "Refund credit note",
- "Refund vendor credit": "Refund vendor credit",
- "credit_note.field.status": "Status",
- "credit_note.field.status.draft": "Draft",
- "credit_note.field.status.published": "Published",
- "credit_note.field.status.open": "Open",
- "credit_note.field.status.closed": "Closed",
-
- "transactions_locking.module.sales.label": "Sales",
- "transactions_locking.module.purchases.label": "Purchases",
- "transactions_locking.module.financial.label": "Financial",
- "transactions_locking.module.all_transactions": "All transactions",
-
- "transactions_locking.module.sales.desc": "Sale invoices, Receipts, credit notes, customers payment receive and customers opening balances.",
- "transactions_locking.module.purchases.desc": "Purchase invoices, vendors payments, vendor credit notes and vendors opening balances.",
- "transactions_locking.module.financial.desc": "Manual journal, expenses and inventory adjustments.",
-
- "inventory_adjustment.type.increment": "Increment",
- "inventory_adjustment.type.decrement": "Decrement",
-
- "customer.type.individual": "Individual",
- "customer.type.business": "Business",
-
- "credit_note.view.draft": "Draft",
- "credit_note.view.closed": "Closed",
- "credit_note.view.open": "Open",
- "credit_note.view.published": "Published",
-
- "vendor_credit.view.draft": "Draft",
- "vendor_credit.view.closed": "Closed",
- "vendor_credit.view.open": "Open",
- "vendor_credit.view.published": "Published",
-
- "allocation_method.value.label": "Value",
- "allocation_method.quantity.label": "Quantity",
-
- "balance_sheet.assets": "Assets",
- "balance_sheet.current_asset": "Current Asset",
- "balance_sheet.cash_and_cash_equivalents": "Cash and cash equivalents",
- "balance_sheet.accounts_receivable": "Accounts Receivable",
- "balance_sheet.inventory": "Inventory",
- "balance_sheet.other_current_assets": "Other current assets",
- "balance_sheet.fixed_asset": "Fixed Asset",
- "balance_sheet.non_current_assets": "Non-Current Assets",
- "balance_sheet.liabilities_and_equity": "Liabilities and Equity",
- "balance_sheet.liabilities": "Liabilities",
- "balance_sheet.current_liabilties": "Current Liabilties",
- "balance_sheet.long_term_liabilities": "Long-Term Liabilities",
- "balance_sheet.non_current_liabilities": "Non-Current Liabilities",
- "balance_sheet.equity": "Equity",
-
- "balance_sheet.account_name": "Account name",
- "balance_sheet.total": "Total",
- "balance_sheet.percentage_of_column": "% of Column",
- "balance_sheet.percentage_of_row": "% of Row",
-
- "financial_sheet.previoud_period_date": "{{date}} (PP)",
- "fianncial_sheet.previous_period_change": "Change (PP)",
- "financial_sheet.previous_period_percentage": "% Change (PP)",
-
- "financial_sheet.previous_year_date": "{{date}} (PY)",
- "financial_sheet.previous_year_change": "Change (PY)",
- "financial_sheet.previous_year_percentage": "% Change (PY)",
- "financial_sheet.total_row": "Total {{value}}",
-
- "profit_loss_sheet.income": "Income",
- "profit_loss_sheet.cost_of_sales": "Cost of sales",
- "profit_loss_sheet.gross_profit": "GROSS PROFIT",
- "profit_loss_sheet.expenses": "Expenses",
- "profit_loss_sheet.net_operating_income": "NET OPERATING INCOME",
- "profit_loss_sheet.other_income": "Other income",
- "profit_loss_sheet.other_expenses": "Other expenses",
- "profit_loss_sheet.net_income": "NET INCOME",
-
- "profit_loss_sheet.account_name": "Account name",
- "profit_loss_sheet.total": "Total",
-
- "profit_loss_sheet.percentage_of_income": "% of Income",
- "profit_loss_sheet.percentage_of_expenses": "% of Expenses",
- "profit_loss_sheet.percentage_of_column": "% of Column",
- "profit_loss_sheet.percentage_of_row": "% of Row",
-
- "contact_summary_balance.account_name": "Account name",
- "contact_summary_balance.total": "Total",
- "contact_summary_balance.percentage_column": "% of Column",
-
- "warehouses.primary_warehouse": "Primary warehouse",
- "branches.head_branch": "Head Branch",
-
- "account.accounts_payable.currency": "Accounts Payable (A/P) - {{currency}}",
- "account.accounts_receivable.currency": "Accounts Receivable (A/R) - {{currency}}",
-
- "role.admin.name": "Admin",
- "role.admin.desc": "Unrestricted access to all modules.",
-
- "role.staff.name": "Staff",
- "role.staff.desc": "Access to all modules except reports, settings and accountant.",
-
- "warehouse_transfer.view.draft.name": "Draft",
- "warehouse_transfer.view.in_transit.name": "In Transit",
- "warehouse_transfer.view.transferred.name": "Transferred"
-}
\ No newline at end of file
diff --git a/packages/server/src/models/Attachment.ts b/packages/server/src/models/Attachment.ts
new file mode 100644
index 000000000..9f3412d5e
--- /dev/null
+++ b/packages/server/src/models/Attachment.ts
@@ -0,0 +1,23 @@
+import { mixin } from 'objection';
+import TenantModel from 'models/TenantModel';
+import ModelSetting from './ModelSetting';
+import ModelSearchable from './ModelSearchable';
+
+export default class Attachment extends mixin(TenantModel, [
+ ModelSetting,
+ ModelSearchable,
+]) {
+ /**
+ * Table name
+ */
+ static get tableName() {
+ return 'storage';
+ }
+
+ /**
+ * Model timestamps.
+ */
+ get timestamps() {
+ return ['createdAt', 'updatedAt'];
+ }
+}
diff --git a/packages/server/src/models/Contact.ts b/packages/server/src/models/Contact.ts
index d63a2ea60..69661f639 100644
--- a/packages/server/src/models/Contact.ts
+++ b/packages/server/src/models/Contact.ts
@@ -2,6 +2,9 @@ import { Model } from 'objection';
import TenantModel from 'models/TenantModel';
export default class Contact extends TenantModel {
+ email: string;
+ displayName: string;
+
/**
* Table name
*/
diff --git a/packages/server/src/models/Customer.ts b/packages/server/src/models/Customer.ts
index 690b77d55..631763b71 100644
--- a/packages/server/src/models/Customer.ts
+++ b/packages/server/src/models/Customer.ts
@@ -24,6 +24,9 @@ export default class Customer extends mixin(TenantModel, [
CustomViewBaseModel,
ModelSearchable,
]) {
+ email: string;
+ displayName: string;
+
/**
* Query builder.
*/
@@ -76,6 +79,19 @@ export default class Customer extends mixin(TenantModel, [
return 'debit';
}
+ /**
+ *
+ */
+ get contactAddresses() {
+ return [
+ {
+ mail: this.email,
+ label: this.displayName,
+ primary: true
+ },
+ ].filter((c) => c.mail);
+ }
+
/**
* Model modifiers.
*/
diff --git a/packages/server/src/services/Accounting/Ledger.ts b/packages/server/src/services/Accounting/Ledger.ts
index 7cb71bed8..0a3ecd41e 100644
--- a/packages/server/src/services/Accounting/Ledger.ts
+++ b/packages/server/src/services/Accounting/Ledger.ts
@@ -1,5 +1,5 @@
import moment from 'moment';
-import { defaultTo, uniqBy } from 'lodash';
+import { defaultTo, sumBy, uniqBy } from 'lodash';
import { IAccountTransaction, ILedger, ILedgerEntry } from '@/interfaces';
export default class Ledger implements ILedger {
@@ -49,6 +49,15 @@ export default class Ledger implements ILedger {
return this.filter((entry) => entry.accountId === accountId);
}
+ /**
+ * Filters entries by the given accounts ids then returns a new ledger.
+ * @param {number[]} accountIds
+ * @returns {ILedger}
+ */
+ public whereAccountsIds(accountIds: number[]): ILedger {
+ return this.filter((entry) => accountIds.indexOf(entry.accountId) !== -1);
+ }
+
/**
* Filters entries that before or same the given date and returns a new ledger.
* @param {Date|string} fromDate
@@ -130,6 +139,22 @@ export default class Ledger implements ILedger {
return closingBalance;
}
+ /**
+ * Retrieves the closing credit of the entries.
+ * @returns {number}
+ */
+ public getClosingCredit(): number {
+ return sumBy(this.entries, 'credit');
+ }
+
+ /**
+ * Retrieves the closing debit of the entries.
+ * @returns {number}
+ */
+ public getClosingDebit(): number {
+ return sumBy(this.entries, 'debit');
+ }
+
/**
* Retrieve the closing balance of the entries.
* @returns {number}
diff --git a/packages/server/src/services/ChromiumlyTenancy/ChromiumlyHtmlConvert.ts b/packages/server/src/services/ChromiumlyTenancy/ChromiumlyHtmlConvert.ts
new file mode 100644
index 000000000..f6e90e3e4
--- /dev/null
+++ b/packages/server/src/services/ChromiumlyTenancy/ChromiumlyHtmlConvert.ts
@@ -0,0 +1,75 @@
+import { Inject, Service } from 'typedi';
+import path from 'path';
+import { promises as fs } from 'fs';
+import { PageProperties, PdfFormat } from '@/lib/Chromiumly/_types';
+import { UrlConverter } from '@/lib/Chromiumly/UrlConvert';
+import HasTenancyService from '../Tenancy/TenancyService';
+import { Chromiumly } from '@/lib/Chromiumly/Chromiumly';
+import { PDF_FILE_EXPIRE_IN, getPdfFilesStorageDir } from './utils';
+
+@Service()
+export class ChromiumlyHtmlConvert {
+ @Inject()
+ private tenancy: HasTenancyService;
+
+ /**
+ * Write HTML content to temporary file.
+ * @param {number} tenantId - Tenant id.
+ * @param {string} content - HTML content.
+ * @returns {Promise<[string, () => Promise]>}
+ */
+ async writeTempHtmlFile(
+ tenantId: number,
+ content: string
+ ): Promise<[string, () => Promise]> {
+ const { Attachment } = this.tenancy.models(tenantId);
+
+ const filename = `document-${Date.now()}.html`;
+ const storageDir = getPdfFilesStorageDir(filename);
+ const filePath = path.join(global.__storage_dir, storageDir);
+
+ await fs.writeFile(filePath, content);
+ await Attachment.query().insert({
+ key: filename,
+ path: storageDir,
+ expire_in: PDF_FILE_EXPIRE_IN, // ms
+ extension: 'html',
+ });
+ const cleanup = async () => {
+ await fs.unlink(filePath);
+ await Attachment.query().where('key', filename).delete();
+ };
+ return [filename, cleanup];
+ }
+
+ /**
+ * Converts the given HTML content to PDF.
+ * @param {string} html
+ * @param {PageProperties} properties
+ * @param {PdfFormat} pdfFormat
+ * @returns {Array}
+ */
+ async convert(
+ tenantId: number,
+ html: string,
+ properties?: PageProperties,
+ pdfFormat?: PdfFormat
+ ): Promise {
+ const [filename, cleanupTempFile] = await this.writeTempHtmlFile(
+ tenantId,
+ html
+ );
+ const fileDir = getPdfFilesStorageDir(filename);
+ const url = path.join(Chromiumly.GOTENBERG_DOCS_ENDPOINT, fileDir);
+ const urlConverter = new UrlConverter();
+
+ const buffer = await urlConverter.convert({
+ url,
+ properties,
+ pdfFormat,
+ });
+ await cleanupTempFile();
+
+ return buffer;
+ }
+}
diff --git a/packages/server/src/services/ChromiumlyTenancy/ChromiumlyTenancy.ts b/packages/server/src/services/ChromiumlyTenancy/ChromiumlyTenancy.ts
new file mode 100644
index 000000000..21df50a53
--- /dev/null
+++ b/packages/server/src/services/ChromiumlyTenancy/ChromiumlyTenancy.ts
@@ -0,0 +1,25 @@
+import { Inject, Service } from 'typedi';
+import { PageProperties, PdfFormat } from '@/lib/Chromiumly/_types';
+import { ChromiumlyHtmlConvert } from './ChromiumlyHtmlConvert';
+
+@Service()
+export class ChromiumlyTenancy {
+ @Inject()
+ private htmlConvert: ChromiumlyHtmlConvert;
+
+ /**
+ * Converts the given HTML content to PDF.
+ * @param {string} content
+ * @param {PageProperties} properties
+ * @param {PdfFormat} pdfFormat
+ * @returns {Promise}
+ */
+ public convertHtmlContent(
+ tenantId: number,
+ content: string,
+ properties?: PageProperties,
+ pdfFormat?: PdfFormat
+ ) {
+ return this.htmlConvert.convert(tenantId, content, properties, pdfFormat);
+ }
+}
diff --git a/packages/server/src/services/ChromiumlyTenancy/utils.ts b/packages/server/src/services/ChromiumlyTenancy/utils.ts
new file mode 100644
index 000000000..d7e5f1223
--- /dev/null
+++ b/packages/server/src/services/ChromiumlyTenancy/utils.ts
@@ -0,0 +1,8 @@
+import path from 'path';
+
+export const PDF_FILE_SUB_DIR = '/pdf';
+export const PDF_FILE_EXPIRE_IN = 40; // ms
+
+export const getPdfFilesStorageDir = (filename: string) => {
+ return path.join(PDF_FILE_SUB_DIR, filename);
+}
\ No newline at end of file
diff --git a/packages/server/src/services/CreditNotes/CreditNoteTransformer.ts b/packages/server/src/services/CreditNotes/CreditNoteTransformer.ts
index 79d731ce3..f532c2eab 100644
--- a/packages/server/src/services/CreditNotes/CreditNoteTransformer.ts
+++ b/packages/server/src/services/CreditNotes/CreditNoteTransformer.ts
@@ -1,5 +1,7 @@
import { Transformer } from '@/lib/Transformer/Transformer';
import { formatNumber } from 'utils';
+import { ItemEntryTransformer } from '../Sales/Invoices/ItemEntryTransformer';
+import { ICreditNote } from '@/interfaces';
export class CreditNoteTransformer extends Transformer {
/**
@@ -11,7 +13,8 @@ export class CreditNoteTransformer extends Transformer {
'formattedCreditsRemaining',
'formattedCreditNoteDate',
'formattedAmount',
- 'formattedCreditsUsed'
+ 'formattedCreditsUsed',
+ 'entries',
];
};
@@ -51,9 +54,20 @@ export class CreditNoteTransformer extends Transformer {
* @param {ICreditNote} credit
* @returns {string}
*/
- protected formattedCreditsUsed = (credit) => {
+ protected formattedCreditsUsed = (credit) => {
return formatNumber(credit.creditsUsed, {
currencyCode: credit.currencyCode,
});
};
+
+ /**
+ * Retrieves the entries of the credit note.
+ * @param {ICreditNote} credit
+ * @returns {}
+ */
+ protected entries = (credit) => {
+ return this.item(credit.entries, new ItemEntryTransformer(), {
+ currencyCode: credit.currencyCode,
+ });
+ };
}
diff --git a/packages/server/src/services/CreditNotes/GetCreditNotePdf.ts b/packages/server/src/services/CreditNotes/GetCreditNotePdf.ts
index 15ab728c5..c34dfd330 100644
--- a/packages/server/src/services/CreditNotes/GetCreditNotePdf.ts
+++ b/packages/server/src/services/CreditNotes/GetCreditNotePdf.ts
@@ -1,37 +1,29 @@
import { Inject, Service } from 'typedi';
-import PdfService from '@/services/PDF/PdfService';
-import { templateRender } from 'utils';
-import HasTenancyService from '@/services/Tenancy/TenancyService';
-import { Tenant } from '@/system/models';
+import { ChromiumlyTenancy } from '../ChromiumlyTenancy/ChromiumlyTenancy';
+import { TemplateInjectable } from '../TemplateInjectable/TemplateInjectable';
@Service()
export default class GetCreditNotePdf {
@Inject()
- pdfService: PdfService;
+ private chromiumlyTenancy: ChromiumlyTenancy;
@Inject()
- tenancy: HasTenancyService;
+ private templateInjectable: TemplateInjectable;
/**
* Retrieve sale invoice pdf content.
* @param {} saleInvoice -
*/
- async getCreditNotePdf(tenantId: number, creditNote) {
- const i18n = this.tenancy.i18n(tenantId);
-
- const organization = await Tenant.query()
- .findById(tenantId)
- .withGraphFetched('metadata');
-
- const htmlContent = templateRender('modules/credit-note-standard', {
- organization,
- organizationName: organization.metadata.name,
- organizationEmail: organization.metadata.email,
- creditNote,
- ...i18n,
+ public async getCreditNotePdf(tenantId: number, creditNote) {
+ const htmlContent = await this.templateInjectable.render(
+ tenantId,
+ 'modules/credit-note-standard',
+ {
+ creditNote,
+ }
+ );
+ return this.chromiumlyTenancy.convertHtmlContent(tenantId, htmlContent, {
+ margins: { top: 0, bottom: 0, left: 0, right: 0 },
});
- const pdfContent = await this.pdfService.pdfDocument(htmlContent);
-
- return pdfContent;
}
}
diff --git a/packages/server/src/services/FinancialStatements/AgingSummary/APAgingSummaryApplication.ts b/packages/server/src/services/FinancialStatements/AgingSummary/APAgingSummaryApplication.ts
new file mode 100644
index 000000000..73c08b2d8
--- /dev/null
+++ b/packages/server/src/services/FinancialStatements/AgingSummary/APAgingSummaryApplication.ts
@@ -0,0 +1,53 @@
+import { Inject, Service } from 'typedi';
+import { APAgingSummaryExportInjectable } from './APAgingSummaryExportInjectable';
+import { APAgingSummaryTableInjectable } from './APAgingSummaryTableInjectable';
+import { IAPAgingSummaryQuery } from '@/interfaces';
+import { APAgingSummaryService } from './APAgingSummaryService';
+
+@Service()
+export class APAgingSummaryApplication {
+ @Inject()
+ private APAgingSummaryTable: APAgingSummaryTableInjectable;
+
+ @Inject()
+ private APAgingSummaryExport: APAgingSummaryExportInjectable;
+
+ @Inject()
+ private APAgingSummarySheet: APAgingSummaryService;
+
+ /**
+ * Retrieve the A/P aging summary in sheet format.
+ * @param {number} tenantId
+ * @param {IAPAgingSummaryQuery} query
+ */
+ public sheet(tenantId: number, query: IAPAgingSummaryQuery) {
+ return this.APAgingSummarySheet.APAgingSummary(tenantId, query);
+ }
+
+ /**
+ * Retrieve the A/P aging summary in table format.
+ * @param {number} tenantId
+ * @param {IAPAgingSummaryQuery} query
+ */
+ public table(tenantId: number, query: IAPAgingSummaryQuery) {
+ return this.APAgingSummaryTable.table(tenantId, query);
+ }
+
+ /**
+ * Retrieve the A/P aging summary in CSV format.
+ * @param {number} tenantId
+ * @param {IAPAgingSummaryQuery} query
+ */
+ public csv(tenantId: number, query: IAPAgingSummaryQuery) {
+ return this.APAgingSummaryExport.csv(tenantId, query);
+ }
+
+ /**
+ * Retrieve the A/P aging summary in XLSX format.
+ * @param {number} tenantId
+ * @param {IAPAgingSummaryQuery} query
+ */
+ public xlsx(tenantId: number, query: IAPAgingSummaryQuery) {
+ return this.APAgingSummaryExport.xlsx(tenantId, query);
+ }
+}
diff --git a/packages/server/src/services/FinancialStatements/AgingSummary/APAgingSummaryExportInjectable.ts b/packages/server/src/services/FinancialStatements/AgingSummary/APAgingSummaryExportInjectable.ts
new file mode 100644
index 000000000..4561687e7
--- /dev/null
+++ b/packages/server/src/services/FinancialStatements/AgingSummary/APAgingSummaryExportInjectable.ts
@@ -0,0 +1,43 @@
+import { Inject, Service } from 'typedi';
+import { APAgingSummaryTableInjectable } from './APAgingSummaryTableInjectable';
+import { TableSheet } from '@/lib/Xlsx/TableSheet';
+import { IAPAgingSummaryQuery } from '@/interfaces';
+
+@Service()
+export class APAgingSummaryExportInjectable {
+ @Inject()
+ private APAgingSummaryTable: APAgingSummaryTableInjectable;
+
+ /**
+ * Retrieves the A/P aging summary sheet in XLSX format.
+ * @param {number} tenantId
+ * @param {IAPAgingSummaryQuery} query
+ * @returns {Promise}
+ */
+ public async xlsx(tenantId: number, query: IAPAgingSummaryQuery) {
+ const table = await this.APAgingSummaryTable.table(tenantId, query);
+
+ const tableSheet = new TableSheet(table.table);
+ const tableCsv = tableSheet.convertToXLSX();
+
+ return tableSheet.convertToBuffer(tableCsv, 'xlsx');
+ }
+
+ /**
+ * Retrieves the A/P aging summary sheet in CSV format.
+ * @param {number} tenantId
+ * @param {IAPAgingSummaryQuery} query
+ * @returns {Promise}
+ */
+ public async csv(
+ tenantId: number,
+ query: IAPAgingSummaryQuery
+ ): Promise {
+ const table = await this.APAgingSummaryTable.table(tenantId, query);
+
+ const tableSheet = new TableSheet(table.table);
+ const tableCsv = tableSheet.convertToCSV();
+
+ return tableCsv;
+ }
+}
diff --git a/packages/server/src/services/FinancialStatements/AgingSummary/APAgingSummaryService.ts b/packages/server/src/services/FinancialStatements/AgingSummary/APAgingSummaryService.ts
index 73860c9a5..fa3e6a2b3 100644
--- a/packages/server/src/services/FinancialStatements/AgingSummary/APAgingSummaryService.ts
+++ b/packages/server/src/services/FinancialStatements/AgingSummary/APAgingSummaryService.ts
@@ -1,14 +1,13 @@
import moment from 'moment';
import { Inject, Service } from 'typedi';
+import { isEmpty } from 'lodash';
import { IAPAgingSummaryQuery, IARAgingSummaryMeta } from '@/interfaces';
import TenancyService from '@/services/Tenancy/TenancyService';
import APAgingSummarySheet from './APAgingSummarySheet';
import { Tenant } from '@/system/models';
-import { isEmpty } from 'lodash';
-import APAgingSummaryTable from './APAgingSummaryTable';
@Service()
-export default class PayableAgingSummaryService {
+export class APAgingSummaryService {
@Inject()
tenancy: TenancyService;
@@ -18,7 +17,7 @@ export default class PayableAgingSummaryService {
/**
* Default report query.
*/
- get defaultQuery(): IAPAgingSummaryQuery {
+ private get defaultQuery(): IAPAgingSummaryQuery {
return {
asDate: moment().format('YYYY-MM-DD'),
agingDaysBefore: 30,
@@ -119,21 +118,4 @@ export default class PayableAgingSummaryService {
meta: this.reportMetadata(tenantId),
};
}
-
- /**
- * Retrieves A/P aging summary in table format.
- * @param {number} tenantId
- * @param {IAPAgingSummaryQuery} query
- */
- async APAgingSummaryTable(tenantId: number, query: IAPAgingSummaryQuery) {
- const report = await this.APAgingSummary(tenantId, query);
- const table = new APAgingSummaryTable(report.data, query, {});
-
- return {
- columns: table.tableColumns(),
- rows: table.tableRows(),
- meta: report.meta,
- query: report.query,
- };
- }
}
diff --git a/packages/server/src/services/FinancialStatements/AgingSummary/APAgingSummaryTableInjectable.ts b/packages/server/src/services/FinancialStatements/AgingSummary/APAgingSummaryTableInjectable.ts
new file mode 100644
index 000000000..f9eda1613
--- /dev/null
+++ b/packages/server/src/services/FinancialStatements/AgingSummary/APAgingSummaryTableInjectable.ts
@@ -0,0 +1,36 @@
+import { Inject, Service } from 'typedi';
+import { IAPAgingSummaryQuery, IAPAgingSummaryTable } from '@/interfaces';
+import { APAgingSummaryService } from './APAgingSummaryService';
+import APAgingSummaryTable from './APAgingSummaryTable';
+
+@Service()
+export class APAgingSummaryTableInjectable {
+ @Inject()
+ private APAgingSummarySheet: APAgingSummaryService;
+
+ /**
+ * Retrieves A/P aging summary in table format.
+ * @param {number} tenantId
+ * @param {IAPAgingSummaryQuery} query
+ * @returns {Promise}
+ */
+ public async table(
+ tenantId: number,
+ query: IAPAgingSummaryQuery
+ ): Promise {
+ const report = await this.APAgingSummarySheet.APAgingSummary(
+ tenantId,
+ query
+ );
+ const table = new APAgingSummaryTable(report.data, query, {});
+
+ return {
+ table: {
+ columns: table.tableColumns(),
+ rows: table.tableRows(),
+ },
+ meta: report.meta,
+ query: report.query,
+ };
+ }
+}
diff --git a/packages/server/src/services/FinancialStatements/AgingSummary/ARAgingSummaryApplication.ts b/packages/server/src/services/FinancialStatements/AgingSummary/ARAgingSummaryApplication.ts
new file mode 100644
index 000000000..d3282ca4b
--- /dev/null
+++ b/packages/server/src/services/FinancialStatements/AgingSummary/ARAgingSummaryApplication.ts
@@ -0,0 +1,53 @@
+import { Inject, Service } from 'typedi';
+import { IARAgingSummaryQuery } from '@/interfaces';
+import { ARAgingSummaryTableInjectable } from './ARAgingSummaryTableInjectable';
+import { ARAgingSummaryExportInjectable } from './ARAgingSummaryExportInjectable';
+import ARAgingSummaryService from './ARAgingSummaryService';
+
+@Service()
+export class ARAgingSummaryApplication {
+ @Inject()
+ private ARAgingSummaryTable: ARAgingSummaryTableInjectable;
+
+ @Inject()
+ private ARAgingSummaryExport: ARAgingSummaryExportInjectable;
+
+ @Inject()
+ private ARAgingSummarySheet: ARAgingSummaryService;
+
+ /**
+ * Retrieve the A/R aging summary sheet.
+ * @param {number} tenantId
+ * @param {IAPAgingSummaryQuery} query
+ */
+ public sheet(tenantId: number, query: IARAgingSummaryQuery) {
+ return this.ARAgingSummarySheet.ARAgingSummary(tenantId, query);
+ }
+
+ /**
+ * Retrieve the A/R aging summary in table format.
+ * @param {number} tenantId
+ * @param {IAPAgingSummaryQuery} query
+ */
+ public table(tenantId: number, query: IARAgingSummaryQuery) {
+ return this.ARAgingSummaryTable.table(tenantId, query);
+ }
+
+ /**
+ * Retrieve the A/R aging summary in XLSX format.
+ * @param {number} tenantId
+ * @param {IAPAgingSummaryQuery} query
+ */
+ public xlsx(tenantId: number, query: IARAgingSummaryQuery) {
+ return this.ARAgingSummaryExport.xlsx(tenantId, query);
+ }
+
+ /**
+ * Retrieve the A/R aging summary in CSV format.
+ * @param {number} tenantId
+ * @param {IAPAgingSummaryQuery} query
+ */
+ public csv(tenantId: number, query: IARAgingSummaryQuery) {
+ return this.ARAgingSummaryExport.csv(tenantId, query);
+ }
+}
diff --git a/packages/server/src/services/FinancialStatements/AgingSummary/ARAgingSummaryExportInjectable.ts b/packages/server/src/services/FinancialStatements/AgingSummary/ARAgingSummaryExportInjectable.ts
new file mode 100644
index 000000000..25c3dd064
--- /dev/null
+++ b/packages/server/src/services/FinancialStatements/AgingSummary/ARAgingSummaryExportInjectable.ts
@@ -0,0 +1,46 @@
+import { Inject, Service } from 'typedi';
+import { TableSheet } from '@/lib/Xlsx/TableSheet';
+import { ARAgingSummaryTableInjectable } from './ARAgingSummaryTableInjectable';
+import { IARAgingSummaryQuery } from '@/interfaces';
+
+@Service()
+export class ARAgingSummaryExportInjectable {
+ @Inject()
+ private ARAgingSummaryTable: ARAgingSummaryTableInjectable;
+
+ /**
+ * Retrieves the A/R aging summary sheet in XLSX format.
+ * @param {number} tenantId
+ * @param {IARAgingSummaryQuery} query
+ * @returns {Promise}
+ */
+ public async xlsx(
+ tenantId: number,
+ query: IARAgingSummaryQuery
+ ): Promise {
+ const table = await this.ARAgingSummaryTable.table(tenantId, query);
+
+ const tableSheet = new TableSheet(table.table);
+ const tableCsv = tableSheet.convertToXLSX();
+
+ return tableSheet.convertToBuffer(tableCsv, 'xlsx');
+ }
+
+ /**
+ * Retrieves the A/R aging summary sheet in CSV format.
+ * @param {number} tenantId
+ * @param {ICashFlowStatementQuery} query
+ * @returns {Promise}
+ */
+ public async csv(
+ tenantId: number,
+ query: IARAgingSummaryQuery
+ ): Promise {
+ const table = await this.ARAgingSummaryTable.table(tenantId, query);
+
+ const tableSheet = new TableSheet(table.table);
+ const tableCsv = tableSheet.convertToCSV();
+
+ return tableCsv;
+ }
+}
diff --git a/packages/server/src/services/FinancialStatements/AgingSummary/ARAgingSummaryService.ts b/packages/server/src/services/FinancialStatements/AgingSummary/ARAgingSummaryService.ts
index 60bdb8675..e13dfc276 100644
--- a/packages/server/src/services/FinancialStatements/AgingSummary/ARAgingSummaryService.ts
+++ b/packages/server/src/services/FinancialStatements/AgingSummary/ARAgingSummaryService.ts
@@ -5,7 +5,6 @@ import { IARAgingSummaryQuery, IARAgingSummaryMeta } from '@/interfaces';
import TenancyService from '@/services/Tenancy/TenancyService';
import ARAgingSummarySheet from './ARAgingSummarySheet';
import { Tenant } from '@/system/models';
-import ARAgingSummaryTable from './ARAgingSummaryTable';
@Service()
export default class ARAgingSummaryService {
@@ -118,21 +117,4 @@ export default class ARAgingSummaryService {
meta: this.reportMetadata(tenantId),
};
}
-
- /**
- * Retrieves A/R aging summary in table format.
- * @param {number} tenantId
- * @param {IARAgingSummaryQuery} query
- */
- async ARAgingSummaryTable(tenantId: number, query: IARAgingSummaryQuery) {
- const report = await this.ARAgingSummary(tenantId, query);
- const table = new ARAgingSummaryTable(report.data, query, {});
-
- return {
- columns: table.tableColumns(),
- rows: table.tableRows(),
- meta: report.meta,
- query,
- };
- }
}
diff --git a/packages/server/src/services/FinancialStatements/AgingSummary/ARAgingSummaryTableInjectable.ts b/packages/server/src/services/FinancialStatements/AgingSummary/ARAgingSummaryTableInjectable.ts
new file mode 100644
index 000000000..10ac9ee8c
--- /dev/null
+++ b/packages/server/src/services/FinancialStatements/AgingSummary/ARAgingSummaryTableInjectable.ts
@@ -0,0 +1,36 @@
+import { IARAgingSummaryQuery, IARAgingSummaryTable } from '@/interfaces';
+import { Inject, Service } from 'typedi';
+import ARAgingSummaryTable from './ARAgingSummaryTable';
+import ARAgingSummaryService from './ARAgingSummaryService';
+
+@Service()
+export class ARAgingSummaryTableInjectable {
+ @Inject()
+ private ARAgingSummarySheet: ARAgingSummaryService;
+
+ /**
+ * Retrieves A/R aging summary in table format.
+ * @param {number} tenantId
+ * @param {IARAgingSummaryQuery} query
+ * @returns {Promise}
+ */
+ public async table(
+ tenantId: number,
+ query: IARAgingSummaryQuery
+ ): Promise {
+ const report = await this.ARAgingSummarySheet.ARAgingSummary(
+ tenantId,
+ query
+ );
+ const table = new ARAgingSummaryTable(report.data, query, {});
+
+ return {
+ table: {
+ columns: table.tableColumns(),
+ rows: table.tableRows(),
+ },
+ meta: report.meta,
+ query,
+ };
+ }
+}
diff --git a/packages/server/src/services/FinancialStatements/BalanceSheet/BalanceSheet.ts b/packages/server/src/services/FinancialStatements/BalanceSheet/BalanceSheet.ts
index 28c9b9197..e07b91dbf 100644
--- a/packages/server/src/services/FinancialStatements/BalanceSheet/BalanceSheet.ts
+++ b/packages/server/src/services/FinancialStatements/BalanceSheet/BalanceSheet.ts
@@ -1,18 +1,10 @@
import * as R from 'ramda';
-import { defaultTo, isEmpty, sumBy } from 'lodash';
import FinancialSheet from '../FinancialSheet';
import {
- IBalanceSheetAggregateNode,
- IBalanceSheetAccountNode,
- BALANCE_SHEET_SCHEMA_NODE_TYPE,
IBalanceSheetQuery,
INumberFormatQuery,
- IAccount,
IBalanceSheetSchemaNode,
- IBalanceSheetSchemaAggregateNode,
IBalanceSheetDataNode,
- IBalanceSheetSchemaAccountNode,
- IBalanceSheetCommonNode,
} from '../../../interfaces';
import { BalanceSheetSchema } from './BalanceSheetSchema';
import { BalanceSheetPercentage } from './BalanceSheetPercentage';
@@ -24,8 +16,14 @@ import { FinancialSheetStructure } from '../FinancialSheetStructure';
import BalanceSheetRepository from './BalanceSheetRepository';
import { BalanceSheetQuery } from './BalanceSheetQuery';
import { BalanceSheetFiltering } from './BalanceSheetFiltering';
+import { BalanceSheetNetIncome } from './BalanceSheetNetIncome';
+import { BalanceSheetAggregators } from './BalanceSheetAggregators';
+import { BalanceSheetAccounts } from './BalanceSheetAccounts';
export default class BalanceSheet extends R.compose(
+ BalanceSheetAggregators,
+ BalanceSheetAccounts,
+ BalanceSheetNetIncome,
BalanceSheetFiltering,
BalanceSheetDatePeriods,
BalanceSheetComparsionPreviousPeriod,
@@ -53,6 +51,9 @@ export default class BalanceSheet extends R.compose(
*/
readonly baseCurrency: string;
+ /**
+ * Localization.
+ */
readonly i18n: any;
/**
@@ -77,216 +78,18 @@ export default class BalanceSheet extends R.compose(
}
/**
- * Retrieve the accounts node of accounts types.
- * @param {string} accountsTypes
- * @returns {IAccount[]}
+ * Parses report schema nodes.
+ * @param {IBalanceSheetSchemaNode[]} schema
+ * @returns {IBalanceSheetDataNode[]}
*/
- private getAccountsByAccountTypes = (accountsTypes: string[]): IAccount[] => {
- const mapAccountsByTypes = R.map((accountType) =>
- defaultTo(this.repository.accountsByType.get(accountType), [])
- );
- return R.compose(R.flatten, mapAccountsByTypes)(accountsTypes);
- };
-
- /**
- * Mappes the aggregate schema node type.
- * @param {IBalanceSheetSchemaAggregateNode} node - Schema node.
- * @return {IBalanceSheetAggregateNode}
- */
- private reportSchemaAggregateNodeMapper = (
- node: IBalanceSheetSchemaAggregateNode
- ): IBalanceSheetAggregateNode => {
- const total = this.getTotalOfNodes(node.children);
-
- return {
- name: this.i18n.__(node.name),
- id: node.id,
- nodeType: BALANCE_SHEET_SCHEMA_NODE_TYPE.AGGREGATE,
- total: this.getTotalAmountMeta(total),
- children: node.children,
- };
- };
-
- /**
- * Compose shema aggregate node of balance sheet schema.
- * @param {IBalanceSheetSchemaAggregateNode} node
- * @returns {IBalanceSheetSchemaAggregateNode}
- */
- private schemaAggregateNodeCompose = (
- node: IBalanceSheetSchemaAggregateNode
- ) => {
- return R.compose(
- this.aggregateNodeTotalMapper,
- this.reportSchemaAggregateNodeMapper
- )(node);
- };
-
- /**
- * Mappes the account model to report account node.
- * @param {IAccount} account
- * @returns {IBalanceSheetAccountNode}
- */
- private reportSchemaAccountNodeMapper = (
- account: IAccount
- ): IBalanceSheetAccountNode => {
- const total = this.repository.totalAccountsLedger
- .whereAccountId(account.id)
- .getClosingBalance();
-
- return {
- id: account.id,
- index: account.index,
- name: account.name,
- code: account.code,
- total: this.getAmountMeta(total),
- nodeType: BALANCE_SHEET_SCHEMA_NODE_TYPE.ACCOUNT,
- };
- };
-
- /**
- *
- * @param {IAccount} account
- * @returns {IBalanceSheetAccountNode}
- */
- private reportSchemaAccountNodeComposer = (
- account: IAccount
- ): IBalanceSheetAccountNode => {
- return R.compose(
- R.when(
- this.query.isPreviousYearActive,
- this.previousYearAccountNodeComposer
- ),
- R.when(
- this.query.isPreviousPeriodActive,
- this.previousPeriodAccountNodeComposer
- ),
- R.when(
- this.query.isDatePeriodsColumnsType,
- this.assocAccountNodeDatePeriods
- ),
- this.reportSchemaAccountNodeMapper
- )(account);
- };
-
- /**
- * Retrieve the total of the given nodes.
- * @param {IBalanceSheetCommonNode[]} nodes
- * @returns {number}
- */
- private getTotalOfNodes = (nodes: IBalanceSheetCommonNode[]) => {
- return sumBy(nodes, 'total.amount');
- };
-
- /**
- * Retrieve the report accounts node by the given accounts types.
- * @param {string[]} accountsTypes
- * @returns {}
- */
- private getAccountsNodesByAccountTypes = (accountsTypes: string[]) => {
- const accounts = this.getAccountsByAccountTypes(accountsTypes);
-
- return R.compose(R.map(this.reportSchemaAccountNodeComposer))(accounts);
- };
-
- /**
- * Mappes the accounts schema node type.
- * @param {IBalanceSheetSchemaNode} node - Schema node.
- * @returns {IBalanceSheetAccountNode}
- */
- private reportSchemaAccountsNodeMapper = (
- node: IBalanceSheetSchemaAccountNode
- ): IBalanceSheetAccountNode => {
- const accounts = this.getAccountsNodesByAccountTypes(node.accountsTypes);
- const total = this.getTotalOfNodes(accounts);
-
- return {
- id: node.id,
- name: this.i18n.__(node.name),
- type: node.type,
- nodeType: BALANCE_SHEET_SCHEMA_NODE_TYPE.ACCOUNTS,
- children: accounts,
- total: this.getTotalAmountMeta(total),
- };
- };
-
- /**
- * Compose account schema node to report node.
- * @param {IBalanceSheetSchemaAccountNode} node
- * @returns {IBalanceSheetAccountNode}
- */
- private reportSchemaAccountsNodeComposer = (
- node: IBalanceSheetSchemaAccountNode
- ): IBalanceSheetAccountNode => {
- return R.compose(
- R.when(
- this.query.isPreviousYearActive,
- this.previousYearAggregateNodeComposer
- ),
- R.when(
- this.query.isPreviousPeriodActive,
- this.previousPeriodAggregateNodeComposer
- ),
- R.when(
- this.query.isDatePeriodsColumnsType,
- this.assocAccountsNodeDatePeriods
- ),
- this.reportSchemaAccountsNodeMapper
- )(node);
- };
-
- /**
- * Mappes the given report schema node.
- * @param {IBalanceSheetSchemaNode} node - Schema node.
- * @return {IBalanceSheetDataNode}
- */
- private reportSchemaNodeMapper = (
- schemaNode: IBalanceSheetSchemaNode
- ): IBalanceSheetDataNode => {
- return R.compose(
- R.when(
- this.isSchemaNodeType(BALANCE_SHEET_SCHEMA_NODE_TYPE.AGGREGATE),
- this.schemaAggregateNodeCompose
- ),
- R.when(
- this.isSchemaNodeType(BALANCE_SHEET_SCHEMA_NODE_TYPE.ACCOUNTS),
- this.reportSchemaAccountsNodeComposer
- )
- )(schemaNode);
- };
-
- /**
- * Mappes the report schema nodes.
- * @param {IBalanceSheetSchemaNode[]} nodes -
- * @return {IBalanceSheetStructureSection[]}
- */
- private reportSchemaAccountNodesMapper = (
- schemaNodes: IBalanceSheetSchemaNode[]
+ public parseSchemaNodes = (
+ schema: IBalanceSheetSchemaNode[]
): IBalanceSheetDataNode[] => {
- return this.mapNodesDeepReverse(schemaNodes, this.reportSchemaNodeMapper);
- };
-
- /**
- * Sets total amount that calculated from node children.
- * @param {IBalanceSheetSection} node
- * @returns {IBalanceSheetDataNode}
- */
- private aggregateNodeTotalMapper = (
- node: IBalanceSheetDataNode
- ): IBalanceSheetDataNode => {
return R.compose(
- R.when(
- this.query.isPreviousYearActive,
- this.previousYearAggregateNodeComposer
- ),
- R.when(
- this.query.isPreviousPeriodActive,
- this.previousPeriodAggregateNodeComposer
- ),
- R.when(
- this.query.isDatePeriodsColumnsType,
- this.assocAggregateNodeDatePeriods
- )
- )(node);
+ this.aggregatesSchemaParser,
+ this.netIncomeSchemaParser,
+ this.accountsSchemaParser
+ )(schema) as IBalanceSheetDataNode[];
};
/**
@@ -299,7 +102,7 @@ export default class BalanceSheet extends R.compose(
return R.compose(
this.reportFilterPlugin,
this.reportPercentageCompose,
- this.reportSchemaAccountNodesMapper
+ this.parseSchemaNodes
)(balanceSheetSchema);
};
}
diff --git a/packages/server/src/services/FinancialStatements/BalanceSheet/BalanceSheetAccounts.ts b/packages/server/src/services/FinancialStatements/BalanceSheet/BalanceSheetAccounts.ts
new file mode 100644
index 000000000..1e077f2e0
--- /dev/null
+++ b/packages/server/src/services/FinancialStatements/BalanceSheet/BalanceSheetAccounts.ts
@@ -0,0 +1,182 @@
+import * as R from 'ramda';
+import { defaultTo, toArray } from 'lodash';
+import { FinancialSheetStructure } from '../FinancialSheetStructure';
+import {
+ BALANCE_SHEET_SCHEMA_NODE_TYPE,
+ IAccount,
+ IBalanceSheetAccountNode,
+ IBalanceSheetAccountsNode,
+ IBalanceSheetDataNode,
+ IBalanceSheetSchemaAccountNode,
+ IBalanceSheetSchemaNode,
+ INumberFormatQuery,
+} from '@/interfaces';
+import { BalanceSheetNetIncome } from './BalanceSheetNetIncome';
+import { BalanceSheetFiltering } from './BalanceSheetFiltering';
+import { BalanceSheetDatePeriods } from './BalanceSheetDatePeriods';
+import { BalanceSheetComparsionPreviousPeriod } from './BalanceSheetComparsionPreviousPeriod';
+import { BalanceSheetComparsionPreviousYear } from './BalanceSheetComparsionPreviousYear';
+import { BalanceSheetPercentage } from './BalanceSheetPercentage';
+import { BalanceSheetSchema } from './BalanceSheetSchema';
+import { BalanceSheetBase } from './BalanceSheetBase';
+import { BalanceSheetQuery } from './BalanceSheetQuery';
+
+export const BalanceSheetAccounts = (Base: any) =>
+ class extends R.compose(
+ BalanceSheetNetIncome,
+ BalanceSheetFiltering,
+ BalanceSheetDatePeriods,
+ BalanceSheetComparsionPreviousPeriod,
+ BalanceSheetComparsionPreviousYear,
+ BalanceSheetPercentage,
+ BalanceSheetSchema,
+ BalanceSheetBase,
+ FinancialSheetStructure
+ )(Base) {
+ /**
+ * Balance sheet query.
+ * @param {BalanceSheetQuery}
+ */
+ readonly query: BalanceSheetQuery;
+
+ /**
+ * Balance sheet number format query.
+ * @param {INumberFormatQuery}
+ */
+ readonly numberFormat: INumberFormatQuery;
+
+ /**
+ * Base currency of the organization.
+ * @param {string}
+ */
+ readonly baseCurrency: string;
+
+ /**
+ * Localization.
+ */
+ readonly i18n: any;
+
+ /**
+ * Retrieve the accounts node of accounts types.
+ * @param {string} accountsTypes
+ * @returns {IAccount[]}
+ */
+ private getAccountsByAccountTypes = (
+ accountsTypes: string[]
+ ): IAccount[] => {
+ const mapAccountsByTypes = R.map((accountType) =>
+ defaultTo(this.repository.accountsByType.get(accountType), [])
+ );
+ return R.compose(R.flatten, mapAccountsByTypes)(accountsTypes);
+ };
+
+ /**
+ * Mappes the account model to report account node.
+ * @param {IAccount} account
+ * @returns {IBalanceSheetAccountNode}
+ */
+ private reportSchemaAccountNodeMapper = (
+ account: IAccount
+ ): IBalanceSheetAccountNode => {
+ const total = this.repository.totalAccountsLedger
+ .whereAccountId(account.id)
+ .getClosingBalance();
+
+ return {
+ id: account.id,
+ index: account.index,
+ name: account.name,
+ code: account.code,
+ total: this.getAmountMeta(total),
+ nodeType: BALANCE_SHEET_SCHEMA_NODE_TYPE.ACCOUNT,
+ };
+ };
+
+ /**
+ * Mappes the given account model to the balance sheet account node.
+ * @param {IAccount} account
+ * @returns {IBalanceSheetAccountNode}
+ */
+ private reportSchemaAccountNodeComposer = (
+ account: IAccount
+ ): IBalanceSheetAccountNode => {
+ return R.compose(
+ R.when(
+ this.query.isPreviousYearActive,
+ this.previousYearAccountNodeComposer
+ ),
+ R.when(
+ this.query.isPreviousPeriodActive,
+ this.previousPeriodAccountNodeComposer
+ ),
+ R.when(
+ this.query.isDatePeriodsColumnsType,
+ this.assocAccountNodeDatePeriods
+ ),
+ this.reportSchemaAccountNodeMapper
+ )(account);
+ };
+
+ // -----------------------------
+ // - Accounts Node Praser
+ // -----------------------------
+ /**
+ * Retrieve the report accounts node by the given accounts types.
+ * @param {string[]} accountsTypes
+ * @returns {IBalanceSheetAccountNode[]}
+ */
+ private getAccountsNodesByAccountTypes = (
+ accountsTypes: string[]
+ ): IBalanceSheetAccountNode[] => {
+ const accounts = this.getAccountsByAccountTypes(accountsTypes);
+ return R.map(this.reportSchemaAccountNodeComposer, accounts);
+ };
+
+ /**
+ * Mappes the accounts schema node type.
+ * @param {IBalanceSheetSchemaNode} node - Schema node.
+ * @returns {IBalanceSheetAccountNode}
+ */
+ private reportSchemaAccountsNodeMapper = (
+ node: IBalanceSheetSchemaAccountNode
+ ): IBalanceSheetAccountsNode => {
+ const accounts = this.getAccountsNodesByAccountTypes(node.accountsTypes);
+ const children = toArray(node?.children);
+
+ return {
+ id: node.id,
+ name: this.i18n.__(node.name),
+ nodeType: BALANCE_SHEET_SCHEMA_NODE_TYPE.ACCOUNTS,
+ type: BALANCE_SHEET_SCHEMA_NODE_TYPE.ACCOUNTS,
+ children: [...accounts, ...children],
+ total: this.getTotalAmountMeta(0),
+ };
+ };
+
+ /**
+ * Mappes the given report schema node.
+ * @param {IBalanceSheetSchemaNode | IBalanceSheetDataNode} node - Schema node.
+ * @return {IBalanceSheetSchemaNode | IBalanceSheetDataNode}
+ */
+ private reportAccountSchemaParser = (
+ node: IBalanceSheetSchemaNode | IBalanceSheetDataNode
+ ): IBalanceSheetSchemaNode | IBalanceSheetDataNode => {
+ return R.compose(
+ R.when(
+ this.isSchemaNodeType(BALANCE_SHEET_SCHEMA_NODE_TYPE.ACCOUNTS),
+ this.reportSchemaAccountsNodeMapper
+ )
+ )(node);
+ };
+
+ /**
+ * Parses the report accounts schema nodes.
+ * @param {IBalanceSheetSchemaNode[]} nodes -
+ * @return {IBalanceSheetStructureSection[]}
+ */
+ public accountsSchemaParser = (
+ nodes: (IBalanceSheetSchemaNode | IBalanceSheetDataNode)[]
+ ): (IBalanceSheetDataNode | IBalanceSheetSchemaNode)[] => {
+ return this.mapNodesDeepReverse(nodes, this.reportAccountSchemaParser);
+ };
+ };
diff --git a/packages/server/src/services/FinancialStatements/BalanceSheet/BalanceSheetAggregators.ts b/packages/server/src/services/FinancialStatements/BalanceSheet/BalanceSheetAggregators.ts
new file mode 100644
index 000000000..2ed4ebbd2
--- /dev/null
+++ b/packages/server/src/services/FinancialStatements/BalanceSheet/BalanceSheetAggregators.ts
@@ -0,0 +1,142 @@
+import * as R from 'ramda';
+import { FinancialPreviousPeriod } from '../FinancialPreviousPeriod';
+import { FinancialHorizTotals } from '../FinancialHorizTotals';
+import { FinancialSheetStructure } from '../FinancialSheetStructure';
+import {
+ BALANCE_SHEET_SCHEMA_NODE_TYPE,
+ IBalanceSheetAggregateNode,
+ IBalanceSheetDataNode,
+ IBalanceSheetSchemaAggregateNode,
+ IBalanceSheetSchemaNode,
+ INumberFormatQuery,
+} from '@/interfaces';
+import { BalanceSheetDatePeriods } from './BalanceSheetDatePeriods';
+import { BalanceSheetComparsionPreviousPeriod } from './BalanceSheetComparsionPreviousPeriod';
+import { BalanceSheetComparsionPreviousYear } from './BalanceSheetComparsionPreviousYear';
+import { BalanceSheetPercentage } from './BalanceSheetPercentage';
+import { BalanceSheetSchema } from './BalanceSheetSchema';
+import { BalanceSheetBase } from './BalanceSheetBase';
+import { BalanceSheetQuery } from './BalanceSheetQuery';
+
+export const BalanceSheetAggregators = (Base: any) =>
+ class extends R.compose(
+ BalanceSheetDatePeriods,
+ BalanceSheetComparsionPreviousPeriod,
+ BalanceSheetComparsionPreviousYear,
+ BalanceSheetPercentage,
+ BalanceSheetSchema,
+ BalanceSheetBase,
+ FinancialSheetStructure
+ )(Base) {
+ /**
+ * Balance sheet query.
+ * @param {BalanceSheetQuery}
+ */
+ readonly query: BalanceSheetQuery;
+
+ /**
+ * Balance sheet number format query.
+ * @param {INumberFormatQuery}
+ */
+ readonly numberFormat: INumberFormatQuery;
+
+ /**
+ * Base currency of the organization.
+ * @param {string}
+ */
+ readonly baseCurrency: string;
+
+ /**
+ * Localization.
+ */
+ readonly i18n: any;
+
+ /**
+ * Sets total amount that calculated from node children.
+ * @param {IBalanceSheetSection} node
+ * @returns {IBalanceSheetDataNode}
+ */
+ private aggregateNodeTotalMapper = (
+ node: IBalanceSheetDataNode
+ ): IBalanceSheetDataNode => {
+ return R.compose(
+ R.when(
+ this.query.isPreviousYearActive,
+ this.previousYearAggregateNodeComposer
+ ),
+ R.when(
+ this.query.isPreviousPeriodActive,
+ this.previousPeriodAggregateNodeComposer
+ ),
+ R.when(
+ this.query.isDatePeriodsColumnsType,
+ this.assocAggregateNodeDatePeriods
+ )
+ )(node);
+ };
+
+ /**
+ * Mappes the aggregate schema node type.
+ * @param {IBalanceSheetSchemaAggregateNode} node - Schema node.
+ * @return {IBalanceSheetAggregateNode}
+ */
+ private reportSchemaAggregateNodeMapper = (
+ node: IBalanceSheetSchemaAggregateNode
+ ): IBalanceSheetAggregateNode => {
+ const total = this.getTotalOfNodes(node.children);
+
+ return {
+ name: this.i18n.__(node.name),
+ id: node.id,
+ nodeType: BALANCE_SHEET_SCHEMA_NODE_TYPE.AGGREGATE,
+ type: BALANCE_SHEET_SCHEMA_NODE_TYPE.AGGREGATE,
+ total: this.getTotalAmountMeta(total),
+ children: node.children,
+ };
+ };
+
+ /**
+ * Compose shema aggregate node of balance sheet schema.
+ * @param {IBalanceSheetSchemaAggregateNode} node
+ * @returns {IBalanceSheetSchemaAggregateNode}
+ */
+ private schemaAggregateNodeCompose = (
+ node: IBalanceSheetSchemaAggregateNode
+ ) => {
+ return R.compose(
+ this.aggregateNodeTotalMapper,
+ this.reportSchemaAggregateNodeMapper
+ )(node);
+ };
+
+ /**
+ * Mappes the given report schema node.
+ * @param {IBalanceSheetSchemaNode} node - Schema node.
+ * @return {IBalanceSheetDataNode}
+ */
+ private reportAggregateSchemaParser = (
+ node: IBalanceSheetSchemaNode
+ ): IBalanceSheetDataNode => {
+ return R.compose(
+ R.when(
+ this.isSchemaNodeType(BALANCE_SHEET_SCHEMA_NODE_TYPE.AGGREGATE),
+ this.schemaAggregateNodeCompose
+ ),
+ R.when(
+ this.isSchemaNodeType(BALANCE_SHEET_SCHEMA_NODE_TYPE.ACCOUNTS),
+ this.schemaAggregateNodeCompose
+ )
+ )(node);
+ };
+
+ /**
+ * Mappes the report schema nodes.
+ * @param {IBalanceSheetSchemaNode[]} nodes -
+ * @return {IBalanceSheetStructureSection[]}
+ */
+ public aggregatesSchemaParser = (
+ nodes: (IBalanceSheetSchemaNode | IBalanceSheetDataNode)[]
+ ): (IBalanceSheetDataNode | IBalanceSheetSchemaNode)[] => {
+ return this.mapNodesDeepReverse(nodes, this.reportAggregateSchemaParser);
+ };
+ };
diff --git a/packages/server/src/services/FinancialStatements/BalanceSheet/BalanceSheetApplication.ts b/packages/server/src/services/FinancialStatements/BalanceSheet/BalanceSheetApplication.ts
new file mode 100644
index 000000000..01ab77bfe
--- /dev/null
+++ b/packages/server/src/services/FinancialStatements/BalanceSheet/BalanceSheetApplication.ts
@@ -0,0 +1,57 @@
+import { Inject, Service } from 'typedi';
+import { IBalanceSheetQuery } from '@/interfaces';
+import { BalanceSheetExportInjectable } from './BalanceSheetExportInjectable';
+import { BalanceSheetTableInjectable } from './BalanceSheetTableInjectable';
+import BalanceSheetStatementService from './BalanceSheetInjectable';
+
+@Service()
+export class BalanceSheetApplication {
+ @Inject()
+ public balanceSheetExport: BalanceSheetExportInjectable;
+
+ @Inject()
+ public balanceSheetTable: BalanceSheetTableInjectable;
+
+ @Inject()
+ public balanceSheet: BalanceSheetStatementService;
+
+ /**
+ * Retrieves the balnace sheet in json format.
+ * @param {numnber} tenantId
+ * @param {IBalanceSheetQuery} query
+ * @returns {Promise}
+ */
+ public sheet(tenantId: number, query: IBalanceSheetQuery) {
+ return this.balanceSheet.balanceSheet(tenantId, query);
+ }
+
+ /**
+ * Retrieves the balance sheet in table format.
+ * @param {number} tenantId
+ * @param {IBalanceSheetQuery} query
+ * @returns {Promise}
+ */
+ public table(tenantId: number, query: IBalanceSheetQuery) {
+ return this.balanceSheetTable.table(tenantId, query);
+ }
+
+ /**
+ * Retrieves the balance sheet in XLSX format.
+ * @param {number} tenantId
+ * @param {IBalanceSheetQuery} query
+ * @returns {Promise}
+ */
+ public xlsx(tenantId: number, query: IBalanceSheetQuery) {
+ return this.balanceSheetExport.xlsx(tenantId, query);
+ }
+
+ /**
+ * Retrieves the balance sheet in CSV format.
+ * @param {number} tenantId
+ * @param {IBalanceSheetQuery} query
+ * @returns {Promise}
+ */
+ public csv(tenantId: number, query: IBalanceSheetQuery): Promise {
+ return this.balanceSheetExport.csv(tenantId, query);
+ }
+}
diff --git a/packages/server/src/services/FinancialStatements/BalanceSheet/BalanceSheetComparsionPreviousPeriod.ts b/packages/server/src/services/FinancialStatements/BalanceSheet/BalanceSheetComparsionPreviousPeriod.ts
index 23db25a10..951176b74 100644
--- a/packages/server/src/services/FinancialStatements/BalanceSheet/BalanceSheetComparsionPreviousPeriod.ts
+++ b/packages/server/src/services/FinancialStatements/BalanceSheet/BalanceSheetComparsionPreviousPeriod.ts
@@ -6,6 +6,7 @@ import {
IBalanceSheetAggregateNode,
IBalanceSheetTotal,
IBalanceSheetCommonNode,
+ IBalanceSheetComparsions,
} from '@/interfaces';
import { FinancialPreviousPeriod } from '../FinancialPreviousPeriod';
import { FinancialHorizTotals } from '../FinancialHorizTotals';
diff --git a/packages/server/src/services/FinancialStatements/BalanceSheet/BalanceSheetComparsionPreviousYear.ts b/packages/server/src/services/FinancialStatements/BalanceSheet/BalanceSheetComparsionPreviousYear.ts
index 4486269e2..d5d048039 100644
--- a/packages/server/src/services/FinancialStatements/BalanceSheet/BalanceSheetComparsionPreviousYear.ts
+++ b/packages/server/src/services/FinancialStatements/BalanceSheet/BalanceSheetComparsionPreviousYear.ts
@@ -156,13 +156,14 @@ export const BalanceSheetComparsionPreviousYear = (Base: any) =>
* @param {IBalanceSheetCommonNode} node
* @returns {IBalanceSheetCommonNode}
*/
- private assocPreviousYearAggregateHorizNode = (
+ public assocPreviousYearAggregateHorizNode = (
node: IBalanceSheetCommonNode
- ) => {
+ ): IBalanceSheetCommonNode => {
const horizontalTotals = R.addIndex(R.map)(
this.previousYearAggregateHorizNodeComposer(node),
node.horizontalTotals
- );
+ ) as IBalanceSheetTotal[];
+
return R.assoc('horizontalTotals', horizontalTotals, node);
};
@@ -258,12 +259,11 @@ export const BalanceSheetComparsionPreviousYear = (Base: any) =>
// ------------------------------
// # Horizontal Nodes - Aggregate.
// ------------------------------
-
/**
* Detarmines whether the given node has horizontal totals.
* @param {IBalanceSheetCommonNode} node
* @returns {boolean}
*/
- private isNodeHasHorizontalTotals = (node: IBalanceSheetCommonNode) =>
+ public isNodeHasHorizontalTotals = (node: IBalanceSheetCommonNode) =>
!isEmpty(node.horizontalTotals);
};
diff --git a/packages/server/src/services/FinancialStatements/BalanceSheet/BalanceSheetDatePeriods.ts b/packages/server/src/services/FinancialStatements/BalanceSheet/BalanceSheetDatePeriods.ts
index 632ef9e9e..9ac6af1ce 100644
--- a/packages/server/src/services/FinancialStatements/BalanceSheet/BalanceSheetDatePeriods.ts
+++ b/packages/server/src/services/FinancialStatements/BalanceSheet/BalanceSheetDatePeriods.ts
@@ -107,9 +107,9 @@ export const BalanceSheetDatePeriods = (Base: FinancialSheet) =>
/**
*
- * @param {IBalanceSheetAccountNode} node
- * @param {Date} fromDate
- * @param {Date} toDate
+ * @param {IBalanceSheetAccountNode} node
+ * @param {Date} fromDate
+ * @param {Date} toDate
* @returns {IBalanceSheetAccountNode}
*/
private getAccountNodeDatePeriod = (
@@ -201,7 +201,7 @@ export const BalanceSheetDatePeriods = (Base: FinancialSheet) =>
};
/**
- *
+ *
* @param node
* @returns
*/
diff --git a/packages/server/src/services/FinancialStatements/BalanceSheet/BalanceSheetExportInjectable.ts b/packages/server/src/services/FinancialStatements/BalanceSheet/BalanceSheetExportInjectable.ts
new file mode 100644
index 000000000..2c43d5f80
--- /dev/null
+++ b/packages/server/src/services/FinancialStatements/BalanceSheet/BalanceSheetExportInjectable.ts
@@ -0,0 +1,43 @@
+import { Inject, Service } from 'typedi';
+import { BalanceSheetTableInjectable } from './BalanceSheetTableInjectable';
+import { TableSheet } from '@/lib/Xlsx/TableSheet';
+import { IBalanceSheetQuery } from '@/interfaces';
+
+@Service()
+export class BalanceSheetExportInjectable {
+ @Inject()
+ private balanceSheetTable: BalanceSheetTableInjectable;
+
+ /**
+ * Retrieves the trial balance sheet in XLSX format.
+ * @param {number} tenantId
+ * @param {ITrialBalanceSheetQuery} query
+ * @returns {Promise}
+ */
+ public async xlsx(tenantId: number, query: IBalanceSheetQuery) {
+ const table = await this.balanceSheetTable.table(tenantId, query);
+
+ const tableSheet = new TableSheet(table.table);
+ const tableCsv = tableSheet.convertToXLSX();
+
+ return tableSheet.convertToBuffer(tableCsv, 'xlsx');
+ }
+
+ /**
+ * Retrieves the trial balance sheet in CSV format.
+ * @param {number} tenantId
+ * @param {ITrialBalanceSheetQuery} query
+ * @returns {Promise}
+ */
+ public async csv(
+ tenantId: number,
+ query: IBalanceSheetQuery
+ ): Promise {
+ const table = await this.balanceSheetTable.table(tenantId, query);
+
+ const tableSheet = new TableSheet(table.table);
+ const tableCsv = tableSheet.convertToCSV();
+
+ return tableCsv;
+ }
+}
diff --git a/packages/server/src/services/FinancialStatements/BalanceSheet/BalanceSheetFilter.ts b/packages/server/src/services/FinancialStatements/BalanceSheet/BalanceSheetFilter.ts
deleted file mode 100644
index 8b1378917..000000000
--- a/packages/server/src/services/FinancialStatements/BalanceSheet/BalanceSheetFilter.ts
+++ /dev/null
@@ -1 +0,0 @@
-
diff --git a/packages/server/src/services/FinancialStatements/BalanceSheet/BalanceSheetService.ts b/packages/server/src/services/FinancialStatements/BalanceSheet/BalanceSheetInjectable.ts
similarity index 96%
rename from packages/server/src/services/FinancialStatements/BalanceSheet/BalanceSheetService.ts
rename to packages/server/src/services/FinancialStatements/BalanceSheet/BalanceSheetInjectable.ts
index b0470c745..02e136ca1 100644
--- a/packages/server/src/services/FinancialStatements/BalanceSheet/BalanceSheetService.ts
+++ b/packages/server/src/services/FinancialStatements/BalanceSheet/BalanceSheetInjectable.ts
@@ -19,13 +19,10 @@ export default class BalanceSheetStatementService
implements IBalanceSheetStatementService
{
@Inject()
- tenancy: TenancyService;
-
- @Inject('logger')
- logger: any;
+ private tenancy: TenancyService;
@Inject()
- inventoryService: InventoryService;
+ private inventoryService: InventoryService;
/**
* Defaults balance sheet filter query.
@@ -94,10 +91,8 @@ export default class BalanceSheetStatementService
/**
* Retrieve balance sheet statement.
- * -------------
* @param {number} tenantId
* @param {IBalanceSheetQuery} query
- *
* @return {IBalanceSheetStatement}
*/
public async balanceSheet(
diff --git a/packages/server/src/services/FinancialStatements/BalanceSheet/BalanceSheetNetIncome.ts b/packages/server/src/services/FinancialStatements/BalanceSheet/BalanceSheetNetIncome.ts
new file mode 100644
index 000000000..a6695b370
--- /dev/null
+++ b/packages/server/src/services/FinancialStatements/BalanceSheet/BalanceSheetNetIncome.ts
@@ -0,0 +1,226 @@
+import * as R from 'ramda';
+import {
+ BALANCE_SHEET_SCHEMA_NODE_TYPE,
+ IBalanceSheetDataNode,
+ IBalanceSheetNetIncomeNode,
+ IBalanceSheetSchemaNetIncomeNode,
+ IBalanceSheetSchemaNode,
+ IBalanceSheetTotalPeriod,
+} from '@/interfaces';
+import { BalanceSheetComparsionPreviousYear } from './BalanceSheetComparsionPreviousYear';
+import { BalanceSheetComparsionPreviousPeriod } from './BalanceSheetComparsionPreviousPeriod';
+import { FinancialPreviousPeriod } from '../FinancialPreviousPeriod';
+import { FinancialHorizTotals } from '../FinancialHorizTotals';
+import BalanceSheetRepository from './BalanceSheetRepository';
+import { BalanceSheetQuery } from './BalanceSheetQuery';
+import { BalanceSheetNetIncomePP } from './BalanceSheetNetIncomePP';
+import { BalanceSheetNetIncomePY } from './BalanceSheetNetIncomePY';
+
+export const BalanceSheetNetIncome = (Base: any) =>
+ class extends R.compose(
+ BalanceSheetNetIncomePP,
+ BalanceSheetNetIncomePY,
+ BalanceSheetComparsionPreviousYear,
+ BalanceSheetComparsionPreviousPeriod,
+ FinancialPreviousPeriod,
+ FinancialHorizTotals
+ )(Base) {
+ private repository: BalanceSheetRepository;
+ private query: BalanceSheetQuery;
+
+ /**
+ * Retrieves the closing balance of income accounts.
+ * @returns {number}
+ */
+ private getIncomeTotal = () => {
+ const closeingBalance = this.repository.incomeLedger.getClosingBalance();
+ return closeingBalance;
+ };
+
+ /**
+ * Retrieves the closing balance of expenses accounts.
+ * @returns {number}
+ */
+ private getExpensesTotal = () => {
+ const closingBalance = this.repository.expensesLedger.getClosingBalance();
+ return closingBalance;
+ };
+
+ /**
+ * Retrieves the total net income.
+ * @returns {number}
+ */
+ protected getNetIncomeTotal = () => {
+ const income = this.getIncomeTotal();
+ const expenses = this.getExpensesTotal();
+
+ return income - expenses;
+ };
+
+ /**
+ * Mappes the aggregate schema node type.
+ * @param {IBalanceSheetSchemaNetIncomeNode} node - Schema node.
+ * @return {IBalanceSheetAggregateNode}
+ */
+ protected schemaNetIncomeNodeMapper = (
+ node: IBalanceSheetSchemaNetIncomeNode
+ ): IBalanceSheetNetIncomeNode => {
+ const total = this.getNetIncomeTotal();
+
+ return {
+ id: node.id,
+ name: this.i18n.__(node.name),
+ nodeType: BALANCE_SHEET_SCHEMA_NODE_TYPE.NET_INCOME,
+ total: this.getTotalAmountMeta(total),
+ };
+ };
+
+ /**
+ * Mapps the net income shcema node to report node.
+ * @param {IBalanceSheetSchemaNetIncomeNode} node
+ * @returns {IBalanceSheetNetIncomeNode}
+ */
+ protected schemaNetIncomeNodeCompose = (
+ node: IBalanceSheetSchemaNetIncomeNode
+ ): IBalanceSheetNetIncomeNode => {
+ return R.compose(
+ R.when(
+ this.query.isPreviousYearActive,
+ this.previousYearNetIncomeNodeCompose
+ ),
+ R.when(
+ this.query.isPreviousPeriodActive,
+ this.previousPeriodNetIncomeNodeCompose
+ ),
+ R.when(
+ this.query.isDatePeriodsColumnsType,
+ this.assocNetIncomeDatePeriodsNode
+ ),
+ this.schemaNetIncomeNodeMapper
+ )(node);
+ };
+
+ // --------------------------------
+ // # Date Periods
+ // --------------------------------
+ /**
+ * Retreives total income of the given date period.
+ * @param {number} accountId -
+ * @param {Date} toDate -
+ * @returns {number}
+ */
+ private getIncomeDatePeriodTotal = (toDate: Date): number => {
+ const periodTotalBetween = this.repository.incomePeriodsAccountsLedger
+ .whereToDate(toDate)
+ .getClosingBalance();
+
+ const periodOpening =
+ this.repository.incomePeriodsOpeningAccountsLedger.getClosingBalance();
+
+ return periodOpening + periodTotalBetween;
+ };
+
+ /**
+ * Retrieves total expense of the given date period.
+ * @param {number} accountId -
+ * @param {Date} toDate -
+ * @returns {number}
+ */
+ private getExpensesDatePeriodTotal = (toDate: Date): number => {
+ const periodTotalBetween = this.repository.expensesPeriodsAccountsLedger
+ .whereToDate(toDate)
+ .getClosingBalance();
+
+ const periodOpening =
+ this.repository.expensesOpeningAccountLedger.getClosingBalance();
+
+ return periodOpening + periodTotalBetween;
+ };
+
+ /**
+ * Retrieve the given net income date period total.
+ * @param {number} accountId
+ * @param {Date} toDate
+ * @returns {number}
+ */
+ private getNetIncomeDatePeriodTotal = (toDate: Date): number => {
+ const income = this.getIncomeDatePeriodTotal(toDate);
+ const expense = this.getExpensesDatePeriodTotal(toDate);
+
+ return income - expense;
+ };
+
+ /**
+ * Retrieves the net income date period node.
+ * @param {IBalanceSheetNetIncomeNode} node
+ * @param {Date} fromDate
+ * @param {Date} toDate
+ * @returns {IBalanceSheetNetIncomeNode}
+ */
+ private getNetIncomeDatePeriodNode = (
+ node: IBalanceSheetNetIncomeNode,
+ fromDate: Date,
+ toDate: Date
+ ): IBalanceSheetTotalPeriod => {
+ const periodTotal = this.getNetIncomeDatePeriodTotal(toDate);
+
+ return this.getDatePeriodTotalMeta(periodTotal, fromDate, toDate);
+ };
+
+ /**
+ * Retrieve total date periods of the given net income node.
+ * @param {IBalanceSheetNetIncomeNode} node
+ * @returns {IBalanceSheetNetIncomeNode}
+ */
+ private getNetIncomeDatePeriodsNode = (
+ node: IBalanceSheetNetIncomeNode
+ ): IBalanceSheetTotalPeriod[] => {
+ return this.getReportNodeDatePeriods(
+ node,
+ this.getNetIncomeDatePeriodNode
+ );
+ };
+
+ /**
+ * Assoc total date periods to net income node.
+ * @param {IBalanceSheetNetIncomeNode} node
+ * @returns {IBalanceSheetNetIncomeNode}
+ */
+ public assocNetIncomeDatePeriodsNode = (
+ node: IBalanceSheetNetIncomeNode
+ ): IBalanceSheetNetIncomeNode => {
+ const datePeriods = this.getNetIncomeDatePeriodsNode(node);
+
+ return R.assoc('horizontalTotals', datePeriods, node);
+ };
+
+ // -----------------------------
+ // - Net Income Nodes Praser
+ // -----------------------------
+ /**
+ * Mappes the given report schema node.
+ * @param {IBalanceSheetSchemaNode} node - Schema node.
+ * @return {IBalanceSheetDataNode}
+ */
+ private reportNetIncomeNodeSchemaParser = (
+ schemaNode: IBalanceSheetSchemaNode
+ ): IBalanceSheetDataNode => {
+ return R.compose(
+ R.when(
+ this.isSchemaNodeType(BALANCE_SHEET_SCHEMA_NODE_TYPE.NET_INCOME),
+ this.schemaNetIncomeNodeCompose
+ )
+ )(schemaNode);
+ };
+
+ /**
+ * Parses the report net income schema nodes.
+ * @param {(IBalanceSheetSchemaNode | IBalanceSheetDataNode)[]} nodes -
+ * @return {IBalanceSheetDataNode[]}
+ */
+ public netIncomeSchemaParser = (
+ nodes: (IBalanceSheetSchemaNode | IBalanceSheetDataNode)[]
+ ): IBalanceSheetDataNode[] => {
+ return this.mapNodesDeep(nodes, this.reportNetIncomeNodeSchemaParser);
+ };
+ };
diff --git a/packages/server/src/services/FinancialStatements/BalanceSheet/BalanceSheetNetIncomeDatePeriods.ts b/packages/server/src/services/FinancialStatements/BalanceSheet/BalanceSheetNetIncomeDatePeriods.ts
new file mode 100644
index 000000000..63bfa362a
--- /dev/null
+++ b/packages/server/src/services/FinancialStatements/BalanceSheet/BalanceSheetNetIncomeDatePeriods.ts
@@ -0,0 +1,120 @@
+import * as R from 'ramda';
+import {
+ IBalanceSheetNetIncomeNode,
+ IBalanceSheetTotalPeriod,
+} from '@/interfaces';
+import { BalanceSheetComparsionPreviousYear } from './BalanceSheetComparsionPreviousYear';
+import { BalanceSheetComparsionPreviousPeriod } from './BalanceSheetComparsionPreviousPeriod';
+import { FinancialPreviousPeriod } from '../FinancialPreviousPeriod';
+import { FinancialHorizTotals } from '../FinancialHorizTotals';
+import BalanceSheetRepository from './BalanceSheetRepository';
+import { BalanceSheetQuery } from './BalanceSheetQuery';
+import { BalanceSheetNetIncomePP } from './BalanceSheetNetIncomePP';
+import { BalanceSheetNetIncomePY } from './BalanceSheetNetIncomePY';
+
+export const BalanceSheetNetIncomeDatePeriods = (Base: any) =>
+ class extends R.compose(
+ BalanceSheetNetIncomePP,
+ BalanceSheetNetIncomePY,
+ BalanceSheetComparsionPreviousYear,
+ BalanceSheetComparsionPreviousPeriod,
+ FinancialPreviousPeriod,
+ FinancialHorizTotals
+ )(Base) {
+ private repository: BalanceSheetRepository;
+ private query: BalanceSheetQuery;
+
+ // --------------------------------
+ // # Date Periods
+ // --------------------------------
+ /**
+ * Retreives total income of the given date period.
+ * @param {number} accountId -
+ * @param {Date} toDate -
+ * @returns {number}
+ */
+ private getIncomeDatePeriodTotal = (toDate: Date): number => {
+ const periodTotalBetween = this.repository.incomePeriodsAccountsLedger
+ .whereToDate(toDate)
+ .getClosingBalance();
+
+ const periodOpening =
+ this.repository.incomePeriodsOpeningAccountsLedger.getClosingBalance();
+
+ return periodOpening + periodTotalBetween;
+ };
+
+ /**
+ * Retrieves total expense of the given date period.
+ * @param {number} accountId -
+ * @param {Date} toDate -
+ * @returns {number}
+ */
+ private getExpensesDatePeriodTotal = (toDate: Date): number => {
+ const periodTotalBetween = this.repository.expensesPeriodsAccountsLedger
+ .whereToDate(toDate)
+ .getClosingBalance();
+
+ const periodOpening =
+ this.repository.expensesOpeningAccountLedger.getClosingBalance();
+
+ return periodOpening + periodTotalBetween;
+ };
+
+ /**
+ * Retrieve the given net income date period total.
+ * @param {number} accountId
+ * @param {Date} toDate
+ * @returns {number}
+ */
+ private getNetIncomeDatePeriodTotal = (toDate: Date): number => {
+ const income = this.getIncomeDatePeriodTotal(toDate);
+ const expense = this.getExpensesDatePeriodTotal(toDate);
+
+ return income - expense;
+ };
+
+ /**
+ * Retrieves the net income date period node.
+ * @param {IBalanceSheetNetIncomeNode} node
+ * @param {Date} fromDate
+ * @param {Date} toDate
+ * @returns {IBalanceSheetNetIncomeNode}
+ */
+ private getNetIncomeDatePeriodNode = (
+ node: IBalanceSheetNetIncomeNode,
+ fromDate: Date,
+ toDate: Date
+ ): IBalanceSheetTotalPeriod => {
+ const periodTotal = this.getNetIncomeDatePeriodTotal(toDate);
+
+ return this.getDatePeriodTotalMeta(periodTotal, fromDate, toDate);
+ };
+
+ /**
+ * Retrieve total date periods of the given net income node.
+ * @param {IBalanceSheetNetIncomeNode} node
+ * @returns {IBalanceSheetNetIncomeNode}
+ */
+ private getNetIncomeDatePeriodsNode = (
+ node: IBalanceSheetNetIncomeNode
+ ): IBalanceSheetTotalPeriod[] => {
+ return this.getReportNodeDatePeriods(
+ node,
+ this.getNetIncomeDatePeriodNode
+ );
+ };
+
+ /**
+ * Assoc total date periods to net income node.
+ * @param {IBalanceSheetNetIncomeNode} node
+ * @returns {IBalanceSheetNetIncomeNode}
+ */
+ public assocNetIncomeDatePeriodsNode = (
+ node: IBalanceSheetNetIncomeNode
+ ): IBalanceSheetNetIncomeNode => {
+ const datePeriods = this.getNetIncomeDatePeriodsNode(node);
+
+ return R.assoc('horizontalTotals', datePeriods, node);
+ };
+ };
diff --git a/packages/server/src/services/FinancialStatements/BalanceSheet/BalanceSheetNetIncomeDatePeriodsPP.ts b/packages/server/src/services/FinancialStatements/BalanceSheet/BalanceSheetNetIncomeDatePeriodsPP.ts
new file mode 100644
index 000000000..94038de38
--- /dev/null
+++ b/packages/server/src/services/FinancialStatements/BalanceSheet/BalanceSheetNetIncomeDatePeriodsPP.ts
@@ -0,0 +1,127 @@
+import * as R from 'ramda';
+import { BalanceSheetComparsionPreviousPeriod } from './BalanceSheetComparsionPreviousPeriod';
+import { FinancialPreviousPeriod } from '../FinancialPreviousPeriod';
+import { FinancialHorizTotals } from '../FinancialHorizTotals';
+import { IBalanceSheetNetIncomeNode, IBalanceSheetTotal } from '@/interfaces';
+import { BalanceSheetQuery } from './BalanceSheetQuery';
+import BalanceSheetRepository from './BalanceSheetRepository';
+
+export const BalanceSheetNetIncomeDatePeriodsPP = (Base: any) =>
+ class extends R.compose(
+ BalanceSheetComparsionPreviousPeriod,
+ FinancialPreviousPeriod,
+ FinancialHorizTotals
+ )(Base) {
+ query: BalanceSheetQuery;
+ repository: BalanceSheetRepository;
+
+ /**
+ * Retrieves the PY total income of the given date period.
+ * @param {number} accountId -
+ * @param {Date} toDate -
+ * @return {number}
+ */
+ private getPPIncomeDatePeriodTotal = R.curry((toDate: Date) => {
+ const PYPeriodsTotal = this.repository.incomePPPeriodsAccountsLedger
+ .whereToDate(toDate)
+ .getClosingBalance();
+
+ const PYPeriodsOpeningTotal =
+ this.repository.incomePPPeriodsOpeningAccountLedger.getClosingBalance();
+
+ return PYPeriodsOpeningTotal + PYPeriodsTotal;
+ });
+
+ /**
+ * Retrieves the PY total expense of the given date period.
+ * @param {number} accountId -
+ * @param {Date} toDate -
+ * @returns {number}
+ */
+ private getPPExpenseDatePeriodTotal = R.curry((toDate: Date) => {
+ const PYPeriodsTotal = this.repository.expensePPPeriodsAccountsLedger
+ .whereToDate(toDate)
+ .getClosingBalance();
+
+ const PYPeriodsOpeningTotal =
+ this.repository.expensePPPeriodsOpeningAccountLedger.getClosingBalance();
+
+ return PYPeriodsOpeningTotal + PYPeriodsTotal;
+ });
+
+ /**
+ * Retrieve the given net income total of the given period.
+ * @param {number} accountId - Account id.
+ * @param {Date} toDate - To date.
+ * @returns {number}
+ */
+ private getPPNetIncomeDatePeriodTotal = R.curry((toDate: Date) => {
+ const income = this.getPPIncomeDatePeriodTotal(toDate);
+ const expense = this.getPPExpenseDatePeriodTotal(toDate);
+
+ return income - expense;
+ });
+
+ /**
+ * Assoc preivous period to account horizontal total node.
+ * @param {IBalanceSheetAccountNode} node
+ * @returns {}
+ */
+ private assocPreviousPeriodNetIncomeHorizTotal = R.curry(
+ (node: IBalanceSheetNetIncomeNode, totalNode) => {
+ const total = this.getPPNetIncomeDatePeriodTotal(
+ totalNode.previousPeriodToDate.date
+ );
+ return R.assoc('previousPeriod', this.getAmountMeta(total), totalNode);
+ }
+ );
+
+ /**
+ * Compose previous period to aggregate horizontal nodes.
+ * @param {IBalanceSheetTotal} node
+ * @returns {IBalanceSheetTotal}
+ */
+ private previousPeriodNetIncomeHorizNodeComposer = R.curry(
+ (
+ node: IBalanceSheetNetIncomeNode,
+ horiontalTotalNode: IBalanceSheetTotal
+ ): IBalanceSheetTotal => {
+ return R.compose(
+ R.when(
+ this.query.isPreviousPeriodPercentageActive,
+ this.assocPreviousPeriodTotalPercentageNode
+ ),
+ R.when(
+ this.query.isPreviousPeriodChangeActive,
+ this.assocPreviousPeriodTotalChangeNode
+ ),
+ R.when(
+ this.query.isPreviousPeriodActive,
+ this.assocPreviousPeriodNetIncomeHorizTotal(node)
+ ),
+ R.when(
+ this.query.isPreviousPeriodActive,
+ this.assocPreviousPeriodHorizNodeFromToDates(
+ this.query.displayColumnsBy
+ )
+ )
+ )(horiontalTotalNode);
+ }
+ );
+
+ /**
+ * Associate the PP to net income horizontal nodes.
+ * @param {IBalanceSheetCommonNode} node
+ * @returns {IBalanceSheetCommonNode}
+ */
+ public assocPreviousPeriodNetIncomeHorizNode = (
+ node: IBalanceSheetNetIncomeNode
+ ): IBalanceSheetNetIncomeNode => {
+ const horizontalTotals = R.addIndex(R.map)(
+ this.previousPeriodNetIncomeHorizNodeComposer(node),
+ node.horizontalTotals
+ ) as IBalanceSheetTotal[];
+
+ return R.assoc('horizontalTotals', horizontalTotals, node);
+ };
+ };
diff --git a/packages/server/src/services/FinancialStatements/BalanceSheet/BalanceSheetNetIncomeDatePeriodsPY.ts b/packages/server/src/services/FinancialStatements/BalanceSheet/BalanceSheetNetIncomeDatePeriodsPY.ts
new file mode 100644
index 000000000..3e4a289e9
--- /dev/null
+++ b/packages/server/src/services/FinancialStatements/BalanceSheet/BalanceSheetNetIncomeDatePeriodsPY.ts
@@ -0,0 +1,122 @@
+import * as R from 'ramda';
+import { BalanceSheetComparsionPreviousYear } from './BalanceSheetComparsionPreviousYear';
+import { FinancialPreviousPeriod } from '../FinancialPreviousPeriod';
+import { FinancialHorizTotals } from '../FinancialHorizTotals';
+import { IBalanceSheetNetIncomeNode, IBalanceSheetTotal } from '@/interfaces';
+import { BalanceSheetQuery } from './BalanceSheetQuery';
+import BalanceSheetRepository from './BalanceSheetRepository';
+
+export const BalanceSheetNetIncomeDatePeriodsPY = (Base: any) =>
+ class extends R.compose(
+ BalanceSheetComparsionPreviousYear,
+ FinancialPreviousPeriod,
+ FinancialHorizTotals
+ )(Base) {
+ query: BalanceSheetQuery;
+ repository: BalanceSheetRepository;
+
+ /**
+ * Retrieves the PY total income of the given date period.
+ * @param {Date} toDate -
+ * @return {number}
+ */
+ private getPYIncomeDatePeriodTotal = R.curry((toDate: Date) => {
+ const PYPeriodsTotal = this.repository.incomePYPeriodsAccountsLedger
+ .whereToDate(toDate)
+ .getClosingBalance();
+
+ const PYPeriodsOpeningTotal =
+ this.repository.incomePYPeriodsOpeningAccountLedger.getClosingBalance();
+
+ return PYPeriodsOpeningTotal + PYPeriodsTotal;
+ });
+
+ /**
+ * Retrieves the PY total expense of the given date period.
+ * @param {Date} toDate -
+ * @returns {number}
+ */
+ private getPYExpenseDatePeriodTotal = R.curry((toDate: Date) => {
+ const PYPeriodsTotal = this.repository.expensePYPeriodsAccountsLedger
+ .whereToDate(toDate)
+ .getClosingBalance();
+
+ const PYPeriodsOpeningTotal =
+ this.repository.expensePYPeriodsOpeningAccountLedger.getClosingBalance();
+
+ return PYPeriodsOpeningTotal + PYPeriodsTotal;
+ });
+
+ /**
+ * Retrieve the given net income total of the given period.
+ * @param {Date} toDate - To date.
+ * @returns {number}
+ */
+ private getPYNetIncomeDatePeriodTotal = R.curry((toDate: Date) => {
+ const income = this.getPYIncomeDatePeriodTotal(toDate);
+ const expense = this.getPYExpenseDatePeriodTotal(toDate);
+
+ return income - expense;
+ });
+
+ /**
+ * Assoc preivous year to account horizontal total node.
+ * @param {IBalanceSheetAccountNode} node
+ * @returns {}
+ */
+ private assocPreviousYearNetIncomeHorizTotal = R.curry(
+ (node: IBalanceSheetNetIncomeNode, totalNode) => {
+ const total = this.getPYNetIncomeDatePeriodTotal(
+ totalNode.previousYearToDate.date
+ );
+ return R.assoc('previousYear', this.getAmountMeta(total), totalNode);
+ }
+ );
+
+ /**
+ * Compose PY to net income horizontal nodes.
+ * @param {IBalanceSheetTotal} node
+ * @returns {IBalanceSheetTotal}
+ */
+ private previousYearNetIncomeHorizNodeComposer = R.curry(
+ (
+ node: IBalanceSheetNetIncomeNode,
+ horiontalTotalNode: IBalanceSheetTotal
+ ): IBalanceSheetTotal => {
+ return R.compose(
+ R.when(
+ this.query.isPreviousYearPercentageActive,
+ this.assocPreviousYearTotalPercentageNode
+ ),
+ R.when(
+ this.query.isPreviousYearChangeActive,
+ this.assocPreviousYearTotalChangeNode
+ ),
+ R.when(
+ this.query.isPreviousYearActive,
+ this.assocPreviousYearNetIncomeHorizTotal(node)
+ ),
+ R.when(
+ this.query.isPreviousYearActive,
+ this.assocPreviousYearHorizNodeFromToDates
+ )
+ )(horiontalTotalNode);
+ }
+ );
+
+ /**
+ * Associate the PY to net income horizontal nodes.
+ * @param {IBalanceSheetCommonNode} node
+ * @returns {IBalanceSheetCommonNode}
+ */
+ public assocPreviousYearNetIncomeHorizNode = (
+ node: IBalanceSheetNetIncomeNode
+ ): IBalanceSheetNetIncomeNode => {
+ const horizontalTotals = R.addIndex(R.map)(
+ this.previousYearNetIncomeHorizNodeComposer(node),
+ node.horizontalTotals
+ ) as IBalanceSheetTotal[];
+
+ return R.assoc('horizontalTotals', horizontalTotals, node);
+ };
+ };
diff --git a/packages/server/src/services/FinancialStatements/BalanceSheet/BalanceSheetNetIncomePP.ts b/packages/server/src/services/FinancialStatements/BalanceSheet/BalanceSheetNetIncomePP.ts
new file mode 100644
index 000000000..c377511a3
--- /dev/null
+++ b/packages/server/src/services/FinancialStatements/BalanceSheet/BalanceSheetNetIncomePP.ts
@@ -0,0 +1,75 @@
+import * as R from 'ramda';
+import {
+ IBalanceSheetDataNode,
+ IBalanceSheetNetIncomeNode,
+} from '@/interfaces';
+import { BalanceSheetComparsionPreviousPeriod } from './BalanceSheetComparsionPreviousPeriod';
+import { FinancialPreviousPeriod } from '../FinancialPreviousPeriod';
+import { FinancialHorizTotals } from '../FinancialHorizTotals';
+import BalanceSheetRepository from './BalanceSheetRepository';
+import { BalanceSheetQuery } from './BalanceSheetQuery';
+import { BalanceSheetNetIncomeDatePeriodsPP } from './BalanceSheetNetIncomeDatePeriodsPP';
+
+export const BalanceSheetNetIncomePP = (Base: any) =>
+ class extends R.compose(
+ BalanceSheetNetIncomeDatePeriodsPP,
+ BalanceSheetComparsionPreviousPeriod,
+ FinancialPreviousPeriod,
+ FinancialHorizTotals
+ )(Base) {
+ private repository: BalanceSheetRepository;
+ private query: BalanceSheetQuery;
+
+ // -------------------------------
+ // # Previous Period (PP)
+ // -------------------------------
+ /**
+ * Retrieves the PP net income.
+ * @returns {}
+ */
+ protected getPreviousPeriodNetIncome = () => {
+ const income = this.repository.incomePPAccountsLedger.getClosingBalance();
+ const expense =
+ this.repository.expensePPAccountsLedger.getClosingBalance();
+
+ return income - expense;
+ };
+
+ /**
+ * Associates the previous period to account node.
+ * @param {IBalanceSheetDataNode} node
+ * @returns {IBalanceSheetDataNode}
+ */
+ protected assocPreviousPeriodNetIncomeNode = (
+ node: IBalanceSheetDataNode
+ ): IBalanceSheetDataNode => {
+ const total = this.getPreviousPeriodNetIncome();
+
+ return R.assoc('previousPeriod', this.getAmountMeta(total), node);
+ };
+
+ /**
+ * Previous period account node composer.
+ * @param {IBalanceSheetNetIncomeNode} node
+ * @returns {IBalanceSheetNetIncomeNode}
+ */
+ protected previousPeriodNetIncomeNodeCompose = (
+ node: IBalanceSheetNetIncomeNode
+ ): IBalanceSheetNetIncomeNode => {
+ return R.compose(
+ R.when(
+ this.isNodeHasHorizTotals,
+ this.assocPreviousPeriodNetIncomeHorizNode
+ ),
+ R.when(
+ this.query.isPreviousPeriodPercentageActive,
+ this.assocPreviousPeriodPercentageNode
+ ),
+ R.when(
+ this.query.isPreviousPeriodChangeActive,
+ this.assocPreviousPeriodChangeNode
+ ),
+ this.assocPreviousPeriodNetIncomeNode
+ )(node);
+ };
+ };
diff --git a/packages/server/src/services/FinancialStatements/BalanceSheet/BalanceSheetNetIncomePY.ts b/packages/server/src/services/FinancialStatements/BalanceSheet/BalanceSheetNetIncomePY.ts
new file mode 100644
index 000000000..29d57813c
--- /dev/null
+++ b/packages/server/src/services/FinancialStatements/BalanceSheet/BalanceSheetNetIncomePY.ts
@@ -0,0 +1,79 @@
+import * as R from 'ramda';
+import {
+ IBalanceSheetDataNode,
+ IBalanceSheetNetIncomeNode,
+} from '@/interfaces';
+import { BalanceSheetComparsionPreviousYear } from './BalanceSheetComparsionPreviousYear';
+import { BalanceSheetComparsionPreviousPeriod } from './BalanceSheetComparsionPreviousPeriod';
+import { FinancialPreviousPeriod } from '../FinancialPreviousPeriod';
+import { FinancialHorizTotals } from '../FinancialHorizTotals';
+import BalanceSheetRepository from './BalanceSheetRepository';
+import { BalanceSheetQuery } from './BalanceSheetQuery';
+import { BalanceSheetNetIncomeDatePeriodsPY } from './BalanceSheetNetIncomeDatePeriodsPY';
+
+export const BalanceSheetNetIncomePY = (Base: any) =>
+ class extends R.compose(
+ BalanceSheetNetIncomeDatePeriodsPY,
+ BalanceSheetComparsionPreviousYear,
+ BalanceSheetComparsionPreviousPeriod,
+ FinancialPreviousPeriod,
+ FinancialHorizTotals
+ )(Base) {
+ private repository: BalanceSheetRepository;
+ private query: BalanceSheetQuery;
+
+ // ------------------------------
+ // # Previous Year (PY)
+ // ------------------------------
+ /**
+ * Retrieves the previous year (PY) net income.
+ * @returns {number}
+ */
+ protected getPreviousYearNetIncome = () => {
+ const income =
+ this.repository.incomePYTotalAccountsLedger.getClosingBalance();
+ const expense =
+ this.repository.expensePYTotalAccountsLedger.getClosingBalance();
+
+ return income - expense;
+ };
+
+ /**
+ * Assoc previous year on aggregate node.
+ * @param {IBalanceSheetAccountNode} node
+ * @returns {IBalanceSheetAccountNode}
+ */
+ protected assocPreviousYearNetIncomeNode = (
+ node: IBalanceSheetNetIncomeNode
+ ): IBalanceSheetNetIncomeNode => {
+ const total = this.getPreviousYearNetIncome();
+
+ return R.assoc('previousYear', this.getTotalAmountMeta(total), node);
+ };
+
+ /**
+ * Assoc previous year attributes to aggregate node.
+ * @param {IBalanceSheetAccountNode} node
+ * @returns {IBalanceSheetAccountNode}
+ */
+ protected previousYearNetIncomeNodeCompose = (
+ node: IBalanceSheetNetIncomeNode
+ ): IBalanceSheetNetIncomeNode => {
+ return R.compose(
+ R.when(
+ this.query.isPreviousYearPercentageActive,
+ this.assocPreviousYearTotalPercentageNode
+ ),
+ R.when(
+ this.query.isPreviousYearChangeActive,
+ this.assocPreviousYearTotalChangeNode
+ ),
+ // Associate the PY to date periods horizontal nodes.
+ R.when(
+ this.isNodeHasHorizontalTotals,
+ this.assocPreviousYearNetIncomeHorizNode
+ ),
+ this.assocPreviousYearNetIncomeNode
+ )(node);
+ };
+ };
diff --git a/packages/server/src/services/FinancialStatements/BalanceSheet/BalanceSheetQuery.ts b/packages/server/src/services/FinancialStatements/BalanceSheet/BalanceSheetQuery.ts
index 0692de8d9..1a636952a 100644
--- a/packages/server/src/services/FinancialStatements/BalanceSheet/BalanceSheetQuery.ts
+++ b/packages/server/src/services/FinancialStatements/BalanceSheet/BalanceSheetQuery.ts
@@ -12,26 +12,31 @@ export class BalanceSheetQuery extends R.compose(FinancialDateRanges)(
* @param {IBalanceSheetQuery}
*/
public readonly query: IBalanceSheetQuery;
+
/**
* Previous year to date.
* @param {Date}
*/
public readonly PYToDate: Date;
+
/**
* Previous year from date.
* @param {Date}
*/
public readonly PYFromDate: Date;
+
/**
* Previous period to date.
* @param {Date}
*/
public readonly PPToDate: Date;
+
/**
* Previous period from date.
* @param {Date}
*/
public readonly PPFromDate: Date;
+
/**
* Constructor method
* @param {IBalanceSheetQuery} query
diff --git a/packages/server/src/services/FinancialStatements/BalanceSheet/BalanceSheetRepository.ts b/packages/server/src/services/FinancialStatements/BalanceSheet/BalanceSheetRepository.ts
index e9de1be43..001f266be 100644
--- a/packages/server/src/services/FinancialStatements/BalanceSheet/BalanceSheetRepository.ts
+++ b/packages/server/src/services/FinancialStatements/BalanceSheet/BalanceSheetRepository.ts
@@ -3,6 +3,7 @@ import * as R from 'ramda';
import { Knex } from 'knex';
import { isEmpty } from 'lodash';
import {
+ IAccount,
IAccountTransactionsGroupBy,
IBalanceSheetQuery,
ILedger,
@@ -11,9 +12,12 @@ import { transformToMapBy } from 'utils';
import Ledger from '@/services/Accounting/Ledger';
import { BalanceSheetQuery } from './BalanceSheetQuery';
import { FinancialDatePeriods } from '../FinancialDatePeriods';
+import { ACCOUNT_PARENT_TYPE, ACCOUNT_TYPE } from '@/data/AccountTypes';
+import { BalanceSheetRepositoryNetIncome } from './BalanceSheetRepositoryNetIncome';
@Service()
export default class BalanceSheetRepository extends R.compose(
+ BalanceSheetRepositoryNetIncome,
FinancialDatePeriods
)(class {}) {
/**
@@ -65,8 +69,22 @@ export default class BalanceSheetRepository extends R.compose(
*/
public readonly PPFromDate: Date;
+ /**
+ * Total closing accounts ledger.
+ * @param {Ledger}
+ */
public totalAccountsLedger: Ledger;
+ /**
+ * Total income accounts ledger.
+ */
+ public incomeLedger: Ledger;
+
+ /**
+ * Total expense accounts ledger.
+ */
+ public expensesLedger: Ledger;
+
/**
* Transactions group type.
* @param {IAccountTransactionsGroupBy}
@@ -171,6 +189,8 @@ export default class BalanceSheetRepository extends R.compose(
) {
await this.initPeriodsPreviousPeriod();
}
+ //
+ await this.asyncInitializeNetIncome();
};
// ----------------------------
@@ -181,6 +201,7 @@ export default class BalanceSheetRepository extends R.compose(
this.accounts = accounts;
this.accountsByType = transformToMapBy(accounts, 'accountType');
+ this.accountsByParentType = transformToMapBy(accounts, 'accountParentType');
};
// ----------------------------
@@ -309,14 +330,15 @@ export default class BalanceSheetRepository extends R.compose(
/**
* Closing accounts date periods.
- * @param openingDate
- * @param datePeriodsType
+ * @param {Date} fromDate
+ * @param {Date} toDate
+ * @param {string} datePeriodsType
* @returns
*/
public accountsDatePeriods = async (
fromDate: Date,
toDate: Date,
- datePeriodsType
+ datePeriodsType: string
) => {
const { AccountTransaction } = this.models;
@@ -336,6 +358,7 @@ export default class BalanceSheetRepository extends R.compose(
/**
* Retrieve the opening balance transactions of the report.
+ * @param {Date|string} openingDate -
*/
public closingAccountsTotal = async (openingDate: Date | string) => {
const { AccountTransaction } = this.models;
diff --git a/packages/server/src/services/FinancialStatements/BalanceSheet/BalanceSheetRepositoryNetIncome.ts b/packages/server/src/services/FinancialStatements/BalanceSheet/BalanceSheetRepositoryNetIncome.ts
new file mode 100644
index 000000000..74e21acd2
--- /dev/null
+++ b/packages/server/src/services/FinancialStatements/BalanceSheet/BalanceSheetRepositoryNetIncome.ts
@@ -0,0 +1,222 @@
+import * as R from 'ramda';
+import { IAccount, ILedger } from '@/interfaces';
+import { FinancialDatePeriods } from '../FinancialDatePeriods';
+import { ACCOUNT_PARENT_TYPE } from '@/data/AccountTypes';
+
+export const BalanceSheetRepositoryNetIncome = (Base) =>
+ class extends R.compose(FinancialDatePeriods)(Base) {
+ // -----------------------
+ // # Net Income
+ // -----------------------
+ public incomeAccounts: IAccount[];
+ public incomeAccountsIds: number[];
+
+ public expenseAccounts: IAccount[];
+ public expenseAccountsIds: number[];
+
+ public incomePeriodsAccountsLedger: ILedger;
+ public incomePeriodsOpeningAccountsLedger: ILedger;
+ public expensesPeriodsAccountsLedger: ILedger;
+ public expensesOpeningAccountLedger: ILedger;
+
+ public incomePPAccountsLedger: ILedger;
+ public expensePPAccountsLedger: ILedger;
+
+ public incomePPPeriodsAccountsLedger: ILedger;
+ public incomePPPeriodsOpeningAccountLedger: ILedger;
+ public expensePPPeriodsAccountsLedger: ILedger;
+ public expensePPPeriodsOpeningAccountLedger: ILedger;
+
+ public incomePYTotalAccountsLedger: ILedger;
+ public expensePYTotalAccountsLedger: ILedger;
+
+ public incomePYPeriodsAccountsLedger: ILedger;
+ public incomePYPeriodsOpeningAccountLedger: ILedger;
+ public expensePYPeriodsAccountsLedger: ILedger;
+ public expensePYPeriodsOpeningAccountLedger: ILedger;
+
+ /**
+ * Async initialize.
+ * @returns {Promise}
+ */
+ public asyncInitializeNetIncome = async () => {
+ await this.initAccounts();
+ await this.initAccountsTotalLedger();
+
+ // Net Income
+ this.initIncomeAccounts();
+ this.initExpenseAccounts();
+
+ this.initIncomeTotalLedger();
+ this.initExpensesTotalLedger();
+
+ // Date periods
+ if (this.query.isDatePeriodsColumnsType()) {
+ this.initNetIncomeDatePeriods();
+ }
+ // Previous Year (PY).
+ if (this.query.isPreviousYearActive()) {
+ this.initNetIncomePreviousYear();
+ }
+ // Previous Period (PP).
+ if (this.query.isPreviousPeriodActive()) {
+ this.initNetIncomePreviousPeriod();
+ }
+ // Previous Year (PY) / Date Periods.
+ if (
+ this.query.isPreviousYearActive() &&
+ this.query.isDatePeriodsColumnsType()
+ ) {
+ this.initNetIncomePeriodsPreviewYear();
+ }
+ // Previous Period (PP) / Date Periods.
+ if (
+ this.query.isPreviousPeriodActive() &&
+ this.query.isDatePeriodsColumnsType()
+ ) {
+ this.initNetIncomePeriodsPreviousPeriod();
+ }
+ };
+
+ // ----------------------------
+ // # Net Income
+ // ----------------------------
+ /**
+ * Initialize income accounts.
+ */
+ private initIncomeAccounts = () => {
+ const incomeAccounts = this.accountsByParentType.get(
+ ACCOUNT_PARENT_TYPE.INCOME
+ );
+ const incomeAccountsIds = incomeAccounts.map((a) => a.id);
+
+ this.incomeAccounts = incomeAccounts;
+ this.incomeAccountsIds = incomeAccountsIds;
+ };
+
+ /**
+ * Initialize expense accounts.
+ */
+ private initExpenseAccounts = () => {
+ const expensesAccounts = this.accountsByParentType.get(
+ ACCOUNT_PARENT_TYPE.EXPENSE
+ );
+ const expensesAccountsIds = expensesAccounts.map((a) => a.id);
+
+ this.expenseAccounts = expensesAccounts;
+ this.expenseAccountsIds = expensesAccountsIds;
+ };
+
+ /**
+ * Initialize the income total ledger.
+ */
+ private initIncomeTotalLedger = (): void => {
+ // Inject to the repository.
+ this.incomeLedger = this.totalAccountsLedger.whereAccountsIds(
+ this.incomeAccountsIds
+ );
+ };
+
+ /**
+ * Initialize the expenses total ledger.
+ */
+ private initExpensesTotalLedger = (): void => {
+ this.expensesLedger = this.totalAccountsLedger.whereAccountsIds(
+ this.expenseAccountsIds
+ );
+ };
+
+ // ----------------------------
+ // # Net Income - Date Periods
+ // ----------------------------
+ /**
+ * Initialize the net income date periods.
+ */
+ public initNetIncomeDatePeriods = () => {
+ this.incomePeriodsAccountsLedger =
+ this.periodsAccountsLedger.whereAccountsIds(this.incomeAccountsIds);
+
+ this.incomePeriodsOpeningAccountsLedger =
+ this.periodsOpeningAccountLedger.whereAccountsIds(
+ this.incomeAccountsIds
+ );
+
+ this.expensesPeriodsAccountsLedger =
+ this.periodsAccountsLedger.whereAccountsIds(this.expenseAccountsIds);
+
+ this.expensesOpeningAccountLedger =
+ this.periodsOpeningAccountLedger.whereAccountsIds(
+ this.expenseAccountsIds
+ );
+ };
+
+ // ----------------------------
+ // # Net Income - Previous Period
+ // ----------------------------
+ /**
+ * Initialize the total net income PP.
+ */
+ public initNetIncomePreviousPeriod = () => {
+ this.incomePPAccountsLedger = this.PPTotalAccountsLedger.whereAccountsIds(
+ this.incomeAccountsIds
+ );
+ this.expensePPAccountsLedger =
+ this.PPTotalAccountsLedger.whereAccountsIds(this.expenseAccountsIds);
+ };
+
+ /**
+ * Initialize the net income periods of previous period.
+ */
+ public initNetIncomePeriodsPreviousPeriod = () => {
+ this.incomePPPeriodsAccountsLedger =
+ this.PPPeriodsAccountsLedger.whereAccountsIds(this.incomeAccountsIds);
+
+ this.incomePPPeriodsOpeningAccountLedger =
+ this.PPPeriodsOpeningAccountLedger.whereAccountsIds(
+ this.incomeAccountsIds
+ );
+
+ this.expensePPPeriodsAccountsLedger =
+ this.PPPeriodsAccountsLedger.whereAccountsIds(this.expenseAccountsIds);
+
+ this.expensePPPeriodsOpeningAccountLedger =
+ this.PPPeriodsOpeningAccountLedger.whereAccountsIds(
+ this.expenseAccountsIds
+ );
+ };
+
+ // ----------------------------
+ // # Net Income - Previous Year
+ // ----------------------------
+ /**
+ * Initialize the net income PY total.
+ */
+ public initNetIncomePreviousYear = () => {
+ this.incomePYTotalAccountsLedger =
+ this.PYTotalAccountsLedger.whereAccountsIds(this.incomeAccountsIds);
+
+ this.expensePYTotalAccountsLedger =
+ this.PYTotalAccountsLedger.whereAccountsIds(this.expenseAccountsIds);
+ };
+
+ /**
+ * Initialize the net income PY periods.
+ */
+ public initNetIncomePeriodsPreviewYear = () => {
+ this.incomePYPeriodsAccountsLedger =
+ this.PYPeriodsAccountsLedger.whereAccountsIds(this.incomeAccountsIds);
+
+ this.incomePYPeriodsOpeningAccountLedger =
+ this.PYPeriodsOpeningAccountLedger.whereAccountsIds(
+ this.incomeAccountsIds
+ );
+
+ this.expensePYPeriodsAccountsLedger =
+ this.PYPeriodsAccountsLedger.whereAccountsIds(this.expenseAccountsIds);
+
+ this.expensePYPeriodsOpeningAccountLedger =
+ this.PYPeriodsOpeningAccountLedger.whereAccountsIds(
+ this.expenseAccountsIds
+ );
+ };
+ };
diff --git a/packages/server/src/services/FinancialStatements/BalanceSheet/BalanceSheetSchema.ts b/packages/server/src/services/FinancialStatements/BalanceSheet/BalanceSheetSchema.ts
index a7faa81c5..5ef897506 100644
--- a/packages/server/src/services/FinancialStatements/BalanceSheet/BalanceSheetSchema.ts
+++ b/packages/server/src/services/FinancialStatements/BalanceSheet/BalanceSheetSchema.ts
@@ -7,12 +7,11 @@ import {
import { ACCOUNT_TYPE } from '@/data/AccountTypes';
import { FinancialSchema } from '../FinancialSchema';
-
export const BalanceSheetSchema = (Base) =>
class extends R.compose(FinancialSchema)(Base) {
/**
* Retrieves the balance sheet schema.
- * @returns
+ * @returns
*/
getSchema = () => {
return getBalanceSheetSchema();
@@ -115,6 +114,13 @@ export const getBalanceSheetSchema = () => [
id: BALANCE_SHEET_SCHEMA_NODE_ID.EQUITY,
type: BALANCE_SHEET_SCHEMA_NODE_TYPE.ACCOUNTS,
accountsTypes: [ACCOUNT_TYPE.EQUITY],
+ children: [
+ {
+ name: 'balance_sheet.net_income',
+ id: BALANCE_SHEET_SCHEMA_NODE_ID.NET_INCOME,
+ type: BALANCE_SHEET_SCHEMA_NODE_TYPE.NET_INCOME,
+ },
+ ],
},
],
alwaysShow: true,
diff --git a/packages/server/src/services/FinancialStatements/BalanceSheet/BalanceSheetTable.ts b/packages/server/src/services/FinancialStatements/BalanceSheet/BalanceSheetTable.ts
index 43bf9c1b5..349b1a8f4 100644
--- a/packages/server/src/services/FinancialStatements/BalanceSheet/BalanceSheetTable.ts
+++ b/packages/server/src/services/FinancialStatements/BalanceSheet/BalanceSheetTable.ts
@@ -8,6 +8,10 @@ import {
BALANCE_SHEET_SCHEMA_NODE_TYPE,
IBalanceSheetDataNode,
IBalanceSheetSchemaNode,
+ IBalanceSheetNetIncomeNode,
+ IBalanceSheetAccountNode,
+ IBalanceSheetAccountsNode,
+ IBalanceSheetAggregateNode,
} from '@/interfaces';
import { tableRowMapper } from 'utils';
import FinancialSheet from '../FinancialSheet';
@@ -108,11 +112,13 @@ export default class BalanceSheetTable extends R.compose(
};
/**
- *
- * @param node
+ * Retrieves the table row from the given report aggregate node.
+ * @param {IBalanceSheetAggregateNode} node
* @returns {ITableRow}
*/
- private aggregateNodeTableRowsMapper = (node): ITableRow => {
+ private aggregateNodeTableRowsMapper = (
+ node: IBalanceSheetAggregateNode
+ ): ITableRow => {
const columns = this.commonColumnsAccessors();
const meta = {
rowTypes: [IROW_TYPE.AGGREGATE],
@@ -122,11 +128,13 @@ export default class BalanceSheetTable extends R.compose(
};
/**
- *
- * @param node
+ * Retrieves the table row from the given report accounts node.
+ * @param {IBalanceSheetAccountsNode} node
* @returns {ITableRow}
*/
- private accountsNodeTableRowsMapper = (node): ITableRow => {
+ private accountsNodeTableRowsMapper = (
+ node: IBalanceSheetAccountsNode
+ ): ITableRow => {
const columns = this.commonColumnsAccessors();
const meta = {
rowTypes: [IROW_TYPE.ACCOUNTS],
@@ -136,11 +144,13 @@ export default class BalanceSheetTable extends R.compose(
};
/**
- *
- * @param {} node
+ * Retrieves the table row from the given report account node.
+ * @param {IBalanceSheetAccountNode} node
* @returns {ITableRow}
*/
- private accountNodeTableRowsMapper = (node): ITableRow => {
+ private accountNodeTableRowsMapper = (
+ node: IBalanceSheetAccountNode
+ ): ITableRow => {
const columns = this.commonColumnsAccessors();
const meta = {
@@ -150,6 +160,22 @@ export default class BalanceSheetTable extends R.compose(
return tableRowMapper(node, columns, meta);
};
+ /**
+ * Retrieves the table row from the given report net income node.
+ * @param {IBalanceSheetNetIncomeNode} node
+ * @returns {ITableRow}
+ */
+ private netIncomeNodeTableRowsMapper = (
+ node: IBalanceSheetNetIncomeNode
+ ): ITableRow => {
+ const columns = this.commonColumnsAccessors();
+ const meta = {
+ rowTypes: [IROW_TYPE.NET_INCOME],
+ id: node.id,
+ };
+ return tableRowMapper(node, columns, meta);
+ };
+
/**
* Mappes the given report node to table rows.
* @param {IBalanceSheetDataNode} node -
@@ -169,6 +195,10 @@ export default class BalanceSheetTable extends R.compose(
this.isNodeType(BALANCE_SHEET_SCHEMA_NODE_TYPE.ACCOUNT),
this.accountNodeTableRowsMapper,
],
+ [
+ this.isNodeType(BALANCE_SHEET_SCHEMA_NODE_TYPE.NET_INCOME),
+ this.netIncomeNodeTableRowsMapper,
+ ],
])(node);
};
diff --git a/packages/server/src/services/FinancialStatements/BalanceSheet/BalanceSheetTableInjectable.ts b/packages/server/src/services/FinancialStatements/BalanceSheet/BalanceSheetTableInjectable.ts
new file mode 100644
index 000000000..3eb769350
--- /dev/null
+++ b/packages/server/src/services/FinancialStatements/BalanceSheet/BalanceSheetTableInjectable.ts
@@ -0,0 +1,42 @@
+import { Inject, Service } from 'typedi';
+import BalanceSheetStatementService from './BalanceSheetInjectable';
+import BalanceSheetTable from './BalanceSheetTable';
+import { IBalanceSheetQuery, IBalanceSheetTable } from '@/interfaces';
+import HasTenancyService from '@/services/Tenancy/TenancyService';
+
+@Service()
+export class BalanceSheetTableInjectable {
+ @Inject()
+ private tenancy: HasTenancyService;
+
+ @Inject()
+ private balanceSheetService: BalanceSheetStatementService;
+
+ /**
+ * Retrieves the balance sheet in table format.
+ * @param {number} tenantId
+ * @param {number} query
+ * @returns {Promise}
+ */
+ public async table(
+ tenantId: number,
+ filter: IBalanceSheetQuery
+ ): Promise {
+ const i18n = this.tenancy.i18n(tenantId);
+
+ const { data, query, meta } = await this.balanceSheetService.balanceSheet(
+ tenantId,
+ filter
+ );
+ const table = new BalanceSheetTable(data, query, i18n);
+
+ return {
+ table: {
+ columns: table.tableColumns(),
+ rows: table.tableRows(),
+ },
+ query,
+ meta,
+ };
+ }
+}
diff --git a/packages/server/src/services/FinancialStatements/BalanceSheet/constants.ts b/packages/server/src/services/FinancialStatements/BalanceSheet/constants.ts
index ad447a199..8862408a1 100644
--- a/packages/server/src/services/FinancialStatements/BalanceSheet/constants.ts
+++ b/packages/server/src/services/FinancialStatements/BalanceSheet/constants.ts
@@ -9,5 +9,6 @@ export enum IROW_TYPE {
AGGREGATE = 'AGGREGATE',
ACCOUNTS = 'ACCOUNTS',
ACCOUNT = 'ACCOUNT',
+ NET_INCOME = 'NET_INCOME',
TOTAL = 'TOTAL',
}
diff --git a/packages/server/src/services/FinancialStatements/CashFlow/CashflowExportInjectable.ts b/packages/server/src/services/FinancialStatements/CashFlow/CashflowExportInjectable.ts
new file mode 100644
index 000000000..8562cfbf5
--- /dev/null
+++ b/packages/server/src/services/FinancialStatements/CashFlow/CashflowExportInjectable.ts
@@ -0,0 +1,46 @@
+import { Inject, Service } from 'typedi';
+import { ICashFlowStatementQuery } from '@/interfaces';
+import { TableSheet } from '@/lib/Xlsx/TableSheet';
+import { CashflowTableInjectable } from './CashflowTableInjectable';
+
+@Service()
+export class CashflowExportInjectable {
+ @Inject()
+ private cashflowSheetTable: CashflowTableInjectable;
+
+ /**
+ * Retrieves the cashflow sheet in XLSX format.
+ * @param {number} tenantId
+ * @param {ICashFlowStatementQuery} query
+ * @returns {Promise}
+ */
+ public async xlsx(
+ tenantId: number,
+ query: ICashFlowStatementQuery
+ ): Promise {
+ const table = await this.cashflowSheetTable.table(tenantId, query);
+
+ const tableSheet = new TableSheet(table.table);
+ const tableCsv = tableSheet.convertToXLSX();
+
+ return tableSheet.convertToBuffer(tableCsv, 'xlsx');
+ }
+
+ /**
+ * Retrieves the cashflow sheet in CSV format.
+ * @param {number} tenantId
+ * @param {ICashFlowStatementQuery} query
+ * @returns {Promise}
+ */
+ public async csv(
+ tenantId: number,
+ query: ICashFlowStatementQuery
+ ): Promise {
+ const table = await this.cashflowSheetTable.table(tenantId, query);
+
+ const tableSheet = new TableSheet(table.table);
+ const tableCsv = tableSheet.convertToCSV();
+
+ return tableCsv;
+ }
+}
diff --git a/packages/server/src/services/FinancialStatements/CashFlow/CashflowSheetApplication.ts b/packages/server/src/services/FinancialStatements/CashFlow/CashflowSheetApplication.ts
new file mode 100644
index 000000000..0fd8b7357
--- /dev/null
+++ b/packages/server/src/services/FinancialStatements/CashFlow/CashflowSheetApplication.ts
@@ -0,0 +1,58 @@
+import { Inject, Service } from 'typedi';
+import { CashflowExportInjectable } from './CashflowExportInjectable';
+import { ICashFlowStatementQuery } from '@/interfaces';
+import CashFlowStatementService from './CashFlowService';
+import { CashflowTableInjectable } from './CashflowTableInjectable';
+
+@Service()
+export class CashflowSheetApplication {
+ @Inject()
+ private cashflowExport: CashflowExportInjectable;
+
+ @Inject()
+ private cashflowSheet: CashFlowStatementService;
+
+ @Inject()
+ private cashflowTable: CashflowTableInjectable;
+
+ /**
+ * Retrieves the cashflow sheet
+ * @param {number} tenantId
+ * @param {ICashFlowStatementQuery} query
+ */
+ public async sheet(tenantId: number, query: ICashFlowStatementQuery) {
+ return this.cashflowSheet.cashFlow(tenantId, query);
+ }
+
+ /**
+ * Retrieves the cashflow sheet in table format.
+ * @param {number} tenantId
+ * @param {ICashFlowStatementQuery} query
+ */
+ public async table(tenantId: number, query: ICashFlowStatementQuery) {
+ return this.cashflowTable.table(tenantId, query);
+ }
+
+ /**
+ * Retrieves the cashflow sheet in XLSX format.
+ * @param {number} tenantId
+ * @param {ICashFlowStatementQuery} query
+ * @returns {Promise}
+ */
+ public async xlsx(tenantId: number, query: ICashFlowStatementQuery) {
+ return this.cashflowExport.xlsx(tenantId, query);
+ }
+
+ /**
+ * Retrieves the cashflow sheet in CSV format.
+ * @param {number} tenantId
+ * @param {ICashFlowStatementQuery} query
+ * @returns {Promise}
+ */
+ public async csv(
+ tenantId: number,
+ query: ICashFlowStatementQuery
+ ): Promise {
+ return this.cashflowExport.csv(tenantId, query);
+ }
+}
diff --git a/packages/server/src/services/FinancialStatements/CashFlow/CashflowTableInjectable.ts b/packages/server/src/services/FinancialStatements/CashFlow/CashflowTableInjectable.ts
new file mode 100644
index 000000000..0a54071f2
--- /dev/null
+++ b/packages/server/src/services/FinancialStatements/CashFlow/CashflowTableInjectable.ts
@@ -0,0 +1,37 @@
+import { Inject, Service } from "typedi";
+import { ICashFlowStatementQuery, ICashFlowStatementTable } from "@/interfaces";
+import HasTenancyService from "@/services/Tenancy/TenancyService";
+import CashFlowTable from "./CashFlowTable";
+import CashFlowStatementService from "./CashFlowService";
+
+@Service()
+export class CashflowTableInjectable {
+ @Inject()
+ private tenancy: HasTenancyService;
+
+ @Inject()
+ private cashflowSheet: CashFlowStatementService;
+
+ /**
+ * Retrieves the cash flow table.
+ * @returns {Promise}
+ */
+ public async table(
+ tenantId: number,
+ query: ICashFlowStatementQuery
+ ): Promise {
+ const i18n = this.tenancy.i18n(tenantId);
+
+ const cashflowDOO = await this.cashflowSheet.cashFlow(tenantId, query);
+ const cashflowTable = new CashFlowTable(cashflowDOO, i18n);
+
+ return {
+ table: {
+ columns: cashflowTable.tableColumns(),
+ rows: cashflowTable.tableRows(),
+ },
+ query: cashflowDOO.query,
+ meta: cashflowDOO.meta,
+ };
+ }
+}
diff --git a/packages/server/src/services/FinancialStatements/CustomerBalanceSummary/CustomerBalanceSummaryApplication.ts b/packages/server/src/services/FinancialStatements/CustomerBalanceSummary/CustomerBalanceSummaryApplication.ts
new file mode 100644
index 000000000..964cd91a9
--- /dev/null
+++ b/packages/server/src/services/FinancialStatements/CustomerBalanceSummary/CustomerBalanceSummaryApplication.ts
@@ -0,0 +1,60 @@
+import { Inject, Service } from 'typedi';
+import { CustomerBalanceSummaryExportInjectable } from './CustomerBalanceSummaryExportInjectable';
+import { CustomerBalanceSummaryTableInjectable } from './CustomerBalanceSummaryTableInjectable';
+import { ICustomerBalanceSummaryQuery } from '@/interfaces';
+import { CustomerBalanceSummaryService } from './CustomerBalanceSummaryService';
+
+@Service()
+export class CustomerBalanceSummaryApplication {
+ @Inject()
+ private customerBalanceSummaryTable: CustomerBalanceSummaryTableInjectable;
+
+ @Inject()
+ private customerBalanceSummaryExport: CustomerBalanceSummaryExportInjectable;
+
+ @Inject()
+ private customerBalanceSummarySheet: CustomerBalanceSummaryService;
+
+ /**
+ * Retrieves the customer balance sheet in json format.
+ * @param {number} tenantId
+ * @param {ICustomerBalanceSummaryQuery} query
+ * @returns {Promise}
+ */
+ public sheet(tenantId: number, query: ICustomerBalanceSummaryQuery) {
+ return this.customerBalanceSummarySheet.customerBalanceSummary(
+ tenantId,
+ query
+ );
+ }
+
+ /**
+ * Retrieves the customer balance sheet in json format.
+ * @param {number} tenantId
+ * @param {ICustomerBalanceSummaryQuery} query
+ * @returns {Promise}
+ */
+ public table(tenantId: number, query: ICustomerBalanceSummaryQuery) {
+ return this.customerBalanceSummaryTable.table(tenantId, query);
+ }
+
+ /**
+ * Retrieves the customer balance sheet in XLSX format.
+ * @param {number} tenantId
+ * @param {ICustomerBalanceSummaryQuery} query
+ * @returns {Promise}
+ */
+ public xlsx(tenantId: number, query: ICustomerBalanceSummaryQuery) {
+ return this.customerBalanceSummaryExport.xlsx(tenantId, query);
+ }
+
+ /**
+ * Retrieves the customer balance sheet in CSV format.
+ * @param {number} tenantId
+ * @param {ICustomerBalanceSummaryQuery} query
+ * @returns {Promise}
+ */
+ public csv(tenantId: number, query: ICustomerBalanceSummaryQuery) {
+ return this.customerBalanceSummaryExport.csv(tenantId, query);
+ }
+}
diff --git a/packages/server/src/services/FinancialStatements/CustomerBalanceSummary/CustomerBalanceSummaryExportInjectable.ts b/packages/server/src/services/FinancialStatements/CustomerBalanceSummary/CustomerBalanceSummaryExportInjectable.ts
new file mode 100644
index 000000000..97fec14d8
--- /dev/null
+++ b/packages/server/src/services/FinancialStatements/CustomerBalanceSummary/CustomerBalanceSummaryExportInjectable.ts
@@ -0,0 +1,43 @@
+import { Inject, Service } from 'typedi';
+import { ICustomerBalanceSummaryQuery } from '@/interfaces';
+import { CustomerBalanceSummaryTableInjectable } from './CustomerBalanceSummaryTableInjectable';
+import { TableSheet } from '@/lib/Xlsx/TableSheet';
+
+@Service()
+export class CustomerBalanceSummaryExportInjectable {
+ @Inject()
+ private customerBalanceSummaryTable: CustomerBalanceSummaryTableInjectable;
+
+ /**
+ * Retrieves the cashflow sheet in XLSX format.
+ * @param {number} tenantId
+ * @param {ICustomerBalanceSummaryQuery} query
+ * @returns {Promise}
+ */
+ public async xlsx(tenantId: number, query: ICustomerBalanceSummaryQuery) {
+ const table = await this.customerBalanceSummaryTable.table(tenantId, query);
+
+ const tableSheet = new TableSheet(table.table);
+ const tableCsv = tableSheet.convertToXLSX();
+
+ return tableSheet.convertToBuffer(tableCsv, 'xlsx');
+ }
+
+ /**
+ * Retrieves the cashflow sheet in CSV format.
+ * @param {number} tenantId
+ * @param {ICustomerBalanceSummaryQuery} query
+ * @returns {Promise}
+ */
+ public async csv(
+ tenantId: number,
+ query: ICustomerBalanceSummaryQuery
+ ): Promise {
+ const table = await this.customerBalanceSummaryTable.table(tenantId, query);
+
+ const tableSheet = new TableSheet(table.table);
+ const tableCsv = tableSheet.convertToCSV();
+
+ return tableCsv;
+ }
+}
diff --git a/packages/server/src/services/FinancialStatements/CustomerBalanceSummary/CustomerBalanceSummaryService.ts b/packages/server/src/services/FinancialStatements/CustomerBalanceSummary/CustomerBalanceSummaryService.ts
index 01ec0e050..78afc3bb2 100644
--- a/packages/server/src/services/FinancialStatements/CustomerBalanceSummary/CustomerBalanceSummaryService.ts
+++ b/packages/server/src/services/FinancialStatements/CustomerBalanceSummary/CustomerBalanceSummaryService.ts
@@ -1,7 +1,5 @@
import { Inject } from 'typedi';
import moment from 'moment';
-import { isEmpty, map } from 'lodash';
-import TenancyService from '@/services/Tenancy/TenancyService';
import * as R from 'ramda';
import {
ICustomerBalanceSummaryService,
@@ -11,28 +9,21 @@ import {
ILedgerEntry,
} from '@/interfaces';
import { CustomerBalanceSummaryReport } from './CustomerBalanceSummary';
-
import Ledger from '@/services/Accounting/Ledger';
import CustomerBalanceSummaryRepository from './CustomerBalanceSummaryRepository';
import { Tenant } from '@/system/models';
-export default class CustomerBalanceSummaryService
+export class CustomerBalanceSummaryService
implements ICustomerBalanceSummaryService
{
@Inject()
- tenancy: TenancyService;
-
- @Inject('logger')
- logger: any;
-
- @Inject()
- reportRepository: CustomerBalanceSummaryRepository;
+ private reportRepository: CustomerBalanceSummaryRepository;
/**
* Defaults balance sheet filter query.
* @return {ICustomerBalanceSummaryQuery}
*/
- get defaultQuery(): ICustomerBalanceSummaryQuery {
+ private get defaultQuery(): ICustomerBalanceSummaryQuery {
return {
asDate: moment().format('YYYY-MM-DD'),
numberFormat: {
@@ -43,13 +34,12 @@ export default class CustomerBalanceSummaryService
negativeFormat: 'mines',
},
percentageColumn: false,
-
+
noneZero: false,
noneTransactions: true,
};
}
-
/**
* Retrieve the customers ledger entries mapped from accounts transactions.
* @param {number} tenantId
@@ -75,7 +65,7 @@ export default class CustomerBalanceSummaryService
* @param {ICustomerBalanceSummaryQuery} query
* @return {Promise}
*/
- async customerBalanceSummary(
+ public async customerBalanceSummary(
tenantId: number,
query: ICustomerBalanceSummaryQuery
): Promise {
@@ -86,13 +76,6 @@ export default class CustomerBalanceSummaryService
// Merges the default query and request query.
const filter = { ...this.defaultQuery, ...query };
- this.logger.info(
- '[customer_balance_summary] trying to calculate the report.',
- {
- filter,
- tenantId,
- }
- );
// Retrieve the customers list ordered by the display name.
const customers = await this.reportRepository.getCustomers(
tenantId,
@@ -111,7 +94,7 @@ export default class CustomerBalanceSummaryService
ledger,
customers,
filter,
- tenant.metadata.baseCurrency,
+ tenant.metadata.baseCurrency
);
return {
diff --git a/packages/server/src/services/FinancialStatements/CustomerBalanceSummary/CustomerBalanceSummaryTableInjectable.ts b/packages/server/src/services/FinancialStatements/CustomerBalanceSummary/CustomerBalanceSummaryTableInjectable.ts
new file mode 100644
index 000000000..56450d4ca
--- /dev/null
+++ b/packages/server/src/services/FinancialStatements/CustomerBalanceSummary/CustomerBalanceSummaryTableInjectable.ts
@@ -0,0 +1,44 @@
+import { Inject, Service } from 'typedi';
+import { CustomerBalanceSummaryService } from './CustomerBalanceSummaryService';
+import HasTenancyService from '@/services/Tenancy/TenancyService';
+import {
+ ICustomerBalanceSummaryQuery,
+ ICustomerBalanceSummaryTable,
+} from '@/interfaces';
+import { CustomerBalanceSummaryTable } from './CustomerBalanceSummaryTableRows';
+
+@Service()
+export class CustomerBalanceSummaryTableInjectable {
+ @Inject()
+ private customerBalanceSummaryService: CustomerBalanceSummaryService;
+
+ @Inject()
+ private tenancy: HasTenancyService;
+
+ /**
+ * Retrieves the customer balance sheet in table format.
+ * @param {number} tenantId
+ * @param {ICustomerBalanceSummaryQuery} filter
+ * @returns {Promise}
+ */
+ public async table(
+ tenantId: number,
+ filter: ICustomerBalanceSummaryQuery
+ ): Promise {
+ const i18n = this.tenancy.i18n(tenantId);
+ const { data, query } =
+ await this.customerBalanceSummaryService.customerBalanceSummary(
+ tenantId,
+ filter
+ );
+ const tableRows = new CustomerBalanceSummaryTable(data, filter, i18n);
+
+ return {
+ table: {
+ columns: tableRows.tableColumns(),
+ rows: tableRows.tableRows(),
+ },
+ query,
+ };
+ }
+}
diff --git a/packages/server/src/services/FinancialStatements/CustomerBalanceSummary/CustomerBalanceSummaryTableRows.ts b/packages/server/src/services/FinancialStatements/CustomerBalanceSummary/CustomerBalanceSummaryTableRows.ts
index b55a12613..e6cdc6415 100644
--- a/packages/server/src/services/FinancialStatements/CustomerBalanceSummary/CustomerBalanceSummaryTableRows.ts
+++ b/packages/server/src/services/FinancialStatements/CustomerBalanceSummary/CustomerBalanceSummaryTableRows.ts
@@ -15,7 +15,7 @@ enum TABLE_ROWS_TYPES {
TOTAL = 'TOTAL',
}
-export default class CustomerBalanceSummaryTable {
+export class CustomerBalanceSummaryTable {
report: ICustomerBalanceSummaryData;
query: ICustomerBalanceSummaryQuery;
i18n: any;
diff --git a/packages/server/src/services/FinancialStatements/FinancialTableStructure.ts b/packages/server/src/services/FinancialStatements/FinancialTableStructure.ts
new file mode 100644
index 000000000..6b3bb38b7
--- /dev/null
+++ b/packages/server/src/services/FinancialStatements/FinancialTableStructure.ts
@@ -0,0 +1,48 @@
+import { ITableRow } from '@/interfaces';
+import { flatNestedTree } from '@/utils/deepdash';
+import { repeat } from 'lodash';
+
+interface FlatNestTreeOpts {
+ nestedPrefix?: string;
+ nestedPrefixIndex?: number;
+}
+
+export class FinancialTableStructure {
+ /**
+ * Converts the given table object with nested rows in flat rows.
+ * @param {ITableRow[]}
+ * @param {FlatNestTreeOpts}
+ * @returns {ITableRow[]}
+ */
+ public static flatNestedTree = (
+ obj: ITableRow[],
+ options?: FlatNestTreeOpts
+ ): ITableRow[] => {
+ const parsedOptions = {
+ nestedPrefix: ' ',
+ nestedPrefixIndex: 0,
+ ...options,
+ };
+ const { nestedPrefixIndex, nestedPrefix } = parsedOptions;
+
+ return flatNestedTree(
+ obj,
+ (item, key, context) => {
+ const cells = item.cells.map((cell, index) => {
+ return {
+ ...cell,
+ value:
+ (context.depth > 1 && nestedPrefixIndex === index
+ ? repeat(nestedPrefix, context.depth)
+ : '') + cell.value,
+ };
+ });
+ return {
+ ...item,
+ cells,
+ };
+ },
+ parsedOptions
+ );
+ };
+}
diff --git a/packages/server/src/services/FinancialStatements/GeneralLedger/GeneralLedger.ts b/packages/server/src/services/FinancialStatements/GeneralLedger/GeneralLedger.ts
index 512ed37d7..5e12e9078 100644
--- a/packages/server/src/services/FinancialStatements/GeneralLedger/GeneralLedger.ts
+++ b/packages/server/src/services/FinancialStatements/GeneralLedger/GeneralLedger.ts
@@ -10,6 +10,7 @@ import {
IContact,
} from '@/interfaces';
import FinancialSheet from '../FinancialSheet';
+import moment from 'moment';
/**
* General ledger sheet.
@@ -88,8 +89,10 @@ export default class GeneralLedgerSheet extends FinancialSheet {
const newEntry = {
date: entry.date,
+ dateFormatted: moment(entry.date).format('YYYY MMM DD'),
entryId: entry.id,
+ transactionNumber: entry.transactionNumber,
referenceType: entry.referenceType,
referenceId: entry.referenceId,
referenceTypeFormatted: this.i18n.__(entry.referenceTypeFormatted),
diff --git a/packages/server/src/services/FinancialStatements/GeneralLedger/GeneralLedgerApplication.ts b/packages/server/src/services/FinancialStatements/GeneralLedger/GeneralLedgerApplication.ts
new file mode 100644
index 000000000..924b0da8c
--- /dev/null
+++ b/packages/server/src/services/FinancialStatements/GeneralLedger/GeneralLedgerApplication.ts
@@ -0,0 +1,66 @@
+import { Inject } from 'typedi';
+import {
+ IGeneralLedgerSheetQuery,
+ IGeneralLedgerTableData,
+} from '@/interfaces';
+import { GeneralLedgerTableInjectable } from './GeneralLedgerTableInjectable';
+import { GeneralLedgerExportInjectable } from './GeneralLedgerExport';
+import { GeneralLedgerService } from './GeneralLedgerService';
+
+export class GeneralLedgerApplication {
+ @Inject()
+ private GLTable: GeneralLedgerTableInjectable;
+
+ @Inject()
+ private GLExport: GeneralLedgerExportInjectable;
+
+ @Inject()
+ private GLSheet: GeneralLedgerService;
+
+ /**
+ * Retrieves the G/L sheet in json format.
+ * @param {number} tenantId
+ * @param {IGeneralLedgerSheetQuery} query
+ */
+ public sheet(tenantId: number, query: IGeneralLedgerSheetQuery) {
+ return this.GLSheet.generalLedger(tenantId, query);
+ }
+
+ /**
+ * Retrieves the G/L sheet in table format.
+ * @param {number} tenantId
+ * @param {IGeneralLedgerSheetQuery} query
+ * @returns {Promise}
+ */
+ public table(
+ tenantId: number,
+ query: IGeneralLedgerSheetQuery
+ ): Promise {
+ return this.GLTable.table(tenantId, query);
+ }
+
+ /**
+ * Retrieves the G/L sheet in xlsx format.
+ * @param {number} tenantId
+ * @param {IGeneralLedgerSheetQuery} query
+ * @returns {}
+ */
+ public xlsx(
+ tenantId: number,
+ query: IGeneralLedgerSheetQuery
+ ): Promise {
+ return this.GLExport.xlsx(tenantId, query);
+ }
+
+ /**
+ * Retrieves the G/L sheet in csv format.
+ * @param {number} tenantId -
+ * @param {IGeneralLedgerSheetQuery} query -
+ */
+ public csv(
+ tenantId: number,
+ query: IGeneralLedgerSheetQuery
+ ): Promise {
+ return this.GLExport.csv(tenantId, query);
+ }
+}
diff --git a/packages/server/src/services/FinancialStatements/GeneralLedger/GeneralLedgerExport.ts b/packages/server/src/services/FinancialStatements/GeneralLedger/GeneralLedgerExport.ts
new file mode 100644
index 000000000..f05c817c2
--- /dev/null
+++ b/packages/server/src/services/FinancialStatements/GeneralLedger/GeneralLedgerExport.ts
@@ -0,0 +1,43 @@
+import { IGeneralLedgerSheetQuery } from '@/interfaces';
+import { TableSheet } from '@/lib/Xlsx/TableSheet';
+import { Inject, Service } from 'typedi';
+import { GeneralLedgerTableInjectable } from './GeneralLedgerTableInjectable';
+
+@Service()
+export class GeneralLedgerExportInjectable {
+ @Inject()
+ private generalLedgerTable: GeneralLedgerTableInjectable;
+
+ /**
+ * Retrieves the general ledger sheet in XLSX format.
+ * @param {number} tenantId
+ * @param {IGeneralLedgerSheetQuery} query
+ * @returns {Promise}
+ */
+ public async xlsx(tenantId: number, query: IGeneralLedgerSheetQuery) {
+ const table = await this.generalLedgerTable.table(tenantId, query);
+
+ const tableSheet = new TableSheet(table.table);
+ const tableCsv = tableSheet.convertToXLSX();
+
+ return tableSheet.convertToBuffer(tableCsv, 'xlsx');
+ }
+
+ /**
+ * Retrieves the general ledger sheet in CSV format.
+ * @param {number} tenantId
+ * @param {IGeneralLedgerSheetQuery} query
+ * @returns {Promise}
+ */
+ public async csv(
+ tenantId: number,
+ query: IGeneralLedgerSheetQuery
+ ): Promise {
+ const table = await this.generalLedgerTable.table(tenantId, query);
+
+ const tableSheet = new TableSheet(table.table);
+ const tableCsv = tableSheet.convertToCSV();
+
+ return tableCsv;
+ }
+}
diff --git a/packages/server/src/services/FinancialStatements/GeneralLedger/GeneralLedgerService.ts b/packages/server/src/services/FinancialStatements/GeneralLedger/GeneralLedgerService.ts
index 012a05b94..100239e39 100644
--- a/packages/server/src/services/FinancialStatements/GeneralLedger/GeneralLedgerService.ts
+++ b/packages/server/src/services/FinancialStatements/GeneralLedger/GeneralLedgerService.ts
@@ -15,7 +15,7 @@ const ERRORS = {
};
@Service()
-export default class GeneralLedgerService {
+export class GeneralLedgerService {
@Inject()
tenancy: TenancyService;
@@ -64,7 +64,7 @@ export default class GeneralLedgerService {
* @param {number} tenantId -
* @returns {IGeneralLedgerMeta}
*/
- reportMetadata(tenantId: number): IGeneralLedgerMeta {
+ reportMetadata(tenantId: number, filter): IGeneralLedgerMeta {
const settings = this.tenancy.settings(tenantId);
const isCostComputeRunning = this.inventoryService
@@ -78,11 +78,15 @@ export default class GeneralLedgerService {
group: 'organization',
key: 'base_currency',
});
+ const fromDate = moment(filter.fromDate).format('YYYY MMM DD');
+ const toDate = moment(filter.toDate).format('YYYY MMM DD');
return {
isCostComputeRunning: parseBoolean(isCostComputeRunning, false),
organizationName,
- baseCurrency
+ baseCurrency,
+ fromDate,
+ toDate
};
}
@@ -166,7 +170,7 @@ export default class GeneralLedgerService {
return {
data: reportData,
query: filter,
- meta: this.reportMetadata(tenantId),
+ meta: this.reportMetadata(tenantId, filter),
};
}
}
diff --git a/packages/server/src/services/FinancialStatements/GeneralLedger/GeneralLedgerTable.ts b/packages/server/src/services/FinancialStatements/GeneralLedger/GeneralLedgerTable.ts
new file mode 100644
index 000000000..1820ab095
--- /dev/null
+++ b/packages/server/src/services/FinancialStatements/GeneralLedger/GeneralLedgerTable.ts
@@ -0,0 +1,256 @@
+import * as R from 'ramda';
+import {
+ IColumnMapperMeta,
+ IGeneralLedgerMeta,
+ IGeneralLedgerSheetAccount,
+ IGeneralLedgerSheetAccountTransaction,
+ IGeneralLedgerSheetData,
+ IGeneralLedgerSheetQuery,
+ ITableColumn,
+ ITableColumnAccessor,
+ ITableRow,
+} from '@/interfaces';
+import FinancialSheet from '../FinancialSheet';
+import { FinancialSheetStructure } from '../FinancialSheetStructure';
+import { FinancialTable } from '../FinancialTable';
+import { tableRowMapper } from '@/utils';
+import { ROW_TYPE } from './utils';
+
+export class GeneralLedgerTable extends R.compose(
+ FinancialTable,
+ FinancialSheetStructure
+)(FinancialSheet) {
+ private data: IGeneralLedgerSheetData;
+ private query: IGeneralLedgerSheetQuery;
+ private meta: IGeneralLedgerMeta;
+
+ /**
+ * Creates an instance of `GeneralLedgerTable`.
+ * @param {IGeneralLedgerSheetData} data
+ * @param {IGeneralLedgerSheetQuery} query
+ */
+ constructor(
+ data: IGeneralLedgerSheetData,
+ query: IGeneralLedgerSheetQuery,
+ meta: IGeneralLedgerMeta
+ ) {
+ super();
+
+ this.data = data;
+ this.query = query;
+ this.meta = meta;
+ }
+
+ /**
+ * Retrieves the common table accessors.
+ * @returns {ITableColumnAccessor[]}
+ */
+ private accountColumnsAccessors(): ITableColumnAccessor[] {
+ return [
+ { key: 'date', accessor: 'name' },
+ { key: 'account_name', accessor: '_empty_' },
+ { key: 'reference_type', accessor: '_empty_' },
+ { key: 'reference_number', accessor: '_empty_' },
+ { key: 'description', accessor: 'description' },
+ { key: 'credit', accessor: '_empty_' },
+ { key: 'debit', accessor: '_empty_' },
+ { key: 'amount', accessor: 'amount.formattedAmount' },
+ { key: 'running_balance', accessor: 'closingBalance.formattedAmount' },
+ ];
+ }
+
+ /**
+ * Retrieves the transaction column accessors.
+ * @returns {ITableColumnAccessor[]}
+ */
+ private transactionColumnAccessors(): ITableColumnAccessor[] {
+ return [
+ { key: 'date', accessor: 'dateFormatted' },
+ { key: 'account_name', accessor: 'account.name' },
+ { key: 'reference_type', accessor: 'referenceTypeFormatted' },
+ { key: 'reference_number', accessor: 'transactionNumber' },
+ { key: 'description', accessor: 'note' },
+ { key: 'credit', accessor: 'formattedCredit' },
+ { key: 'debit', accessor: 'formattedDebit' },
+ { key: 'amount', accessor: 'formattedAmount' },
+ { key: 'running_balance', accessor: 'formattedRunningBalance' },
+ ];
+ }
+
+ /**
+ * Retrieves the opening row column accessors.
+ * @returns {ITableRowIColumnMapperMeta[]}
+ */
+ private openingBalanceColumnsAccessors(): IColumnMapperMeta[] {
+ return [
+ { key: 'date', value: this.meta.fromDate },
+ { key: 'account_name', value: 'Opening Balance' },
+ { key: 'reference_type', accessor: '_empty_' },
+ { key: 'reference_number', accessor: '_empty_' },
+ { key: 'description', accessor: 'description' },
+ { key: 'credit', accessor: '_empty_' },
+ { key: 'debit', accessor: '_empty_' },
+ { key: 'amount', accessor: 'openingBalance.formattedAmount' },
+ { key: 'running_balance', accessor: 'openingBalance.formattedAmount' },
+ ];
+ }
+
+ /**
+ * Closing balance row column accessors.
+ * @returns {ITableColumnAccessor[]}
+ */
+ private closingBalanceColumnAccessors(): IColumnMapperMeta[] {
+ return [
+ { key: 'date', value: this.meta.toDate },
+ { key: 'account_name', value: 'Closing Balance' },
+ { key: 'reference_type', accessor: '_empty_' },
+ { key: 'reference_number', accessor: '_empty_' },
+ { key: 'description', accessor: '_empty_' },
+ { key: 'credit', accessor: '_empty_' },
+ { key: 'debit', accessor: '_empty_' },
+ { key: 'amount', accessor: 'closingBalance.formattedAmount' },
+ { key: 'running_balance', accessor: 'closingBalance.formattedAmount' },
+ ];
+ }
+
+ /**
+ * Retrieves the common table columns.
+ * @returns {ITableColumn[]}
+ */
+ private commonColumns(): ITableColumn[] {
+ return [
+ { key: 'date', label: 'Date' },
+ { key: 'account_name', label: 'Account Name' },
+ { key: 'reference_type', label: 'Transaction Type' },
+ { key: 'reference_number', label: 'Transaction #' },
+ { key: 'description', label: 'Description' },
+ { key: 'credit', label: 'Credit' },
+ { key: 'debit', label: 'Debit' },
+ { key: 'amount', label: 'Amount' },
+ { key: 'running_balance', label: 'Running Balance' },
+ ];
+ }
+
+ /**
+ * Maps the given transaction node to table row.
+ * @param {IGeneralLedgerSheetAccountTransaction} transaction
+ * @returns {ITableRow}
+ */
+ private transactionMapper = R.curry(
+ (
+ account: IGeneralLedgerSheetAccount,
+ transaction: IGeneralLedgerSheetAccountTransaction
+ ): ITableRow => {
+ const columns = this.transactionColumnAccessors();
+ const data = { ...transaction, account };
+ const meta = {
+ rowTypes: [ROW_TYPE.TRANSACTION],
+ };
+ return tableRowMapper(data, columns, meta);
+ }
+ );
+
+ /**
+ * Maps the given transactions nodes to table rows.
+ * @param {IGeneralLedgerSheetAccountTransaction[]} transactions
+ * @returns {ITableRow[]}
+ */
+ private transactionsMapper = (
+ account: IGeneralLedgerSheetAccount
+ ): ITableRow[] => {
+ const transactionMapper = this.transactionMapper(account);
+
+ return R.map(transactionMapper)(account.transactions);
+ };
+
+ /**
+ * Maps the given account node to opening balance table row.
+ * @param {IGeneralLedgerSheetAccount} account
+ * @returns {ITableRow}
+ */
+ private openingBalanceMapper = (
+ account: IGeneralLedgerSheetAccount
+ ): ITableRow => {
+ const columns = this.openingBalanceColumnsAccessors();
+ const meta = {
+ rowTypes: [ROW_TYPE.OPENING_BALANCE],
+ };
+ return tableRowMapper(account, columns, meta);
+ };
+
+ /**
+ * Maps the given account node to closing balance table row.
+ * @param {IGeneralLedgerSheetAccount} account
+ * @returns {ITableRow}
+ */
+ private closingBalanceMapper = (account: IGeneralLedgerSheetAccount) => {
+ const columns = this.closingBalanceColumnAccessors();
+ const meta = {
+ rowTypes: [ROW_TYPE.CLOSING_BALANCE],
+ };
+ return tableRowMapper(account, columns, meta);
+ };
+
+ /**
+ * Maps the given account node to transactions table rows.
+ * @param {IGeneralLedgerSheetAccount} account
+ * @returns {ITableRow[]}
+ */
+ private transactionsNode = (
+ account: IGeneralLedgerSheetAccount
+ ): ITableRow[] => {
+ const openingBalance = this.openingBalanceMapper(account);
+ const transactions = this.transactionsMapper(account);
+ const closingBalance = this.closingBalanceMapper(account);
+
+ return R.when(
+ R.always(R.not(R.isEmpty(transactions))),
+ R.prepend(openingBalance)
+ )([...transactions, closingBalance]) as ITableRow[];
+ };
+
+ /**
+ * Maps the given account node to the table rows.
+ * @param {IGeneralLedgerSheetAccount} account
+ * @returns {ITableRow}
+ */
+ private accountMapper = (account: IGeneralLedgerSheetAccount): ITableRow => {
+ const columns = this.accountColumnsAccessors();
+ const transactions = this.transactionsNode(account);
+ const meta = {
+ rowTypes: [ROW_TYPE.ACCOUNT],
+ };
+ const row = tableRowMapper(account, columns, meta);
+
+ return R.assoc('children', transactions)(row);
+ };
+
+ /**
+ * Maps the given account node to table rows.
+ * @param {IGeneralLedgerSheetAccount[]} accounts
+ * @returns {ITableRow[]}
+ */
+ private accountsMapper = (
+ accounts: IGeneralLedgerSheetAccount[]
+ ): ITableRow[] => {
+ return this.mapNodesDeep(accounts, this.accountMapper);
+ };
+
+ /**
+ * Retrieves the table rows.
+ * @returns {ITableRow[]}
+ */
+ public tableRows(): ITableRow[] {
+ return R.compose(this.accountsMapper)(this.data);
+ }
+
+ /**
+ * Retrieves the table columns.
+ * @returns {ITableColumn[]}
+ */
+ public tableColumns(): ITableColumn[] {
+ const columns = this.commonColumns();
+
+ return R.compose(this.tableColumnsCellIndexing)(columns);
+ }
+}
diff --git a/packages/server/src/services/FinancialStatements/GeneralLedger/GeneralLedgerTableInjectable.ts b/packages/server/src/services/FinancialStatements/GeneralLedger/GeneralLedgerTableInjectable.ts
new file mode 100644
index 000000000..c830c29c2
--- /dev/null
+++ b/packages/server/src/services/FinancialStatements/GeneralLedger/GeneralLedgerTableInjectable.ts
@@ -0,0 +1,45 @@
+import {
+ IGeneralLedgerSheetQuery,
+ IGeneralLedgerTableData,
+} from '@/interfaces';
+import { Inject, Service } from 'typedi';
+import { GeneralLedgerService } from './GeneralLedgerService';
+import HasTenancyService from '@/services/Tenancy/TenancyService';
+import { GeneralLedgerTable } from './GeneralLedgerTable';
+
+@Service()
+export class GeneralLedgerTableInjectable {
+ @Inject()
+ private tenancy: HasTenancyService;
+
+ @Inject()
+ private GLSheet: GeneralLedgerService;
+
+ /**
+ * Retrieves the G/L table.
+ * @param {number} tenantId
+ * @param {IGeneralLedgerSheetQuery} query
+ * @returns {Promise}
+ */
+ public async table(
+ tenantId: number,
+ query: IGeneralLedgerSheetQuery
+ ): Promise {
+ const {
+ data: sheetData,
+ query: sheetQuery,
+ meta: sheetMeta,
+ } = await this.GLSheet.generalLedger(tenantId, query);
+
+ const table = new GeneralLedgerTable(sheetData, sheetQuery, sheetMeta);
+
+ return {
+ table: {
+ columns: table.tableColumns(),
+ rows: table.tableRows(),
+ },
+ query: sheetQuery,
+ meta: sheetMeta,
+ };
+ }
+}
diff --git a/packages/server/src/services/FinancialStatements/GeneralLedger/utils.ts b/packages/server/src/services/FinancialStatements/GeneralLedger/utils.ts
new file mode 100644
index 000000000..07418ae37
--- /dev/null
+++ b/packages/server/src/services/FinancialStatements/GeneralLedger/utils.ts
@@ -0,0 +1,6 @@
+export enum ROW_TYPE {
+ ACCOUNT = 'ACCOUNT',
+ OPENING_BALANCE = 'OPENING_BALANCE',
+ TRANSACTION = 'TRANSACTION',
+ CLOSING_BALANCE = 'CLOSING_BALANCE',
+}
diff --git a/packages/server/src/services/FinancialStatements/InventoryDetails/InventoryDetails.ts b/packages/server/src/services/FinancialStatements/InventoryDetails/InventoryDetails.ts
index d09cf19cd..489acff3e 100644
--- a/packages/server/src/services/FinancialStatements/InventoryDetails/InventoryDetails.ts
+++ b/packages/server/src/services/FinancialStatements/InventoryDetails/InventoryDetails.ts
@@ -29,7 +29,7 @@ enum INodeTypes {
CLOSING_ENTRY = 'CLOSING_ENTRY',
}
-export default class InventoryDetails extends FinancialSheet {
+export class InventoryDetails extends FinancialSheet {
readonly inventoryTransactionsByItemId: Map;
readonly openingBalanceTransactions: Map;
readonly query: IInventoryDetailsQuery;
diff --git a/packages/server/src/services/FinancialStatements/InventoryDetails/InventoryDetailsApplication.ts b/packages/server/src/services/FinancialStatements/InventoryDetails/InventoryDetailsApplication.ts
new file mode 100644
index 000000000..a2639094e
--- /dev/null
+++ b/packages/server/src/services/FinancialStatements/InventoryDetails/InventoryDetailsApplication.ts
@@ -0,0 +1,66 @@
+import {
+ IInventoryDetailsQuery,
+ IInvetoryItemDetailsTable,
+} from '@/interfaces';
+import { Inject, Service } from 'typedi';
+import { InventoryDetailsExportInjectable } from './InventoryDetailsExportInjectable';
+import { InventoryDetailsTableInjectable } from './InventoryDetailsTableInjectable';
+import { InventoryDetailsService } from './InventoryDetailsService';
+
+@Service()
+export class InventortyDetailsApplication {
+ @Inject()
+ private inventoryDetailsExport: InventoryDetailsExportInjectable;
+
+ @Inject()
+ private inventoryDetailsTable: InventoryDetailsTableInjectable;
+
+ @Inject()
+ private inventoryDetails: InventoryDetailsService;
+
+ /**
+ * Retrieves the inventory details report in sheet format.
+ * @param {number} tenantId
+ * @param {IInventoryDetailsQuery} query
+ * @returns {Promise}
+ */
+ public sheet(tenantId: number, query: IInventoryDetailsQuery) {
+ return this.inventoryDetails.inventoryDetails(tenantId, query);
+ }
+
+ /**
+ * Retrieve the inventory details report in table format.
+ * @param {number} tenantId
+ * @param {IInventoryDetailsQuery} query
+ * @returns
+ */
+ public table(
+ tenantId: number,
+ query: IInventoryDetailsQuery
+ ): Promise {
+ return this.inventoryDetailsTable.table(tenantId, query);
+ }
+
+ /**
+ * Retrieves the inventory details report in XLSX format.
+ * @param {number} tenantId
+ * @param {IInventoryDetailsQuery} query
+ * @returns {Promise}
+ */
+ public xlsx(
+ tenantId: number,
+ query: IInventoryDetailsQuery
+ ): Promise {
+ return this.inventoryDetailsExport.xlsx(tenantId, query);
+ }
+
+ /**
+ * Retrieves the inventory details report in CSV format.
+ * @param {number} tenantId
+ * @param {IInventoryDetailsQuery} query
+ * @returns {Promise}
+ */
+ public csv(tenantId: number, query: IInventoryDetailsQuery): Promise {
+ return this.inventoryDetailsExport.csv(tenantId, query);
+ }
+}
diff --git a/packages/server/src/services/FinancialStatements/InventoryDetails/InventoryDetailsExportInjectable.ts b/packages/server/src/services/FinancialStatements/InventoryDetails/InventoryDetailsExportInjectable.ts
new file mode 100644
index 000000000..bede24eb4
--- /dev/null
+++ b/packages/server/src/services/FinancialStatements/InventoryDetails/InventoryDetailsExportInjectable.ts
@@ -0,0 +1,43 @@
+import { Inject, Service } from 'typedi';
+import { IInventoryDetailsQuery } from '@/interfaces';
+import { TableSheet } from '@/lib/Xlsx/TableSheet';
+import { InventoryDetailsTableInjectable } from './InventoryDetailsTableInjectable';
+
+@Service()
+export class InventoryDetailsExportInjectable {
+ @Inject()
+ private inventoryDetailsTable: InventoryDetailsTableInjectable;
+
+ /**
+ * Retrieves the trial balance sheet in XLSX format.
+ * @param {number} tenantId
+ * @param {IInventoryDetailsQuery} query
+ * @returns {Promise}
+ */
+ public async xlsx(tenantId: number, query: IInventoryDetailsQuery) {
+ const table = await this.inventoryDetailsTable.table(tenantId, query);
+
+ const tableSheet = new TableSheet(table.table);
+ const tableCsv = tableSheet.convertToXLSX();
+
+ return tableSheet.convertToBuffer(tableCsv, 'xlsx');
+ }
+
+ /**
+ * Retrieves the trial balance sheet in CSV format.
+ * @param {number} tenantId
+ * @param {IInventoryDetailsQuery} query
+ * @returns {Promise}
+ */
+ public async csv(
+ tenantId: number,
+ query: IInventoryDetailsQuery
+ ): Promise {
+ const table = await this.inventoryDetailsTable.table(tenantId, query);
+
+ const tableSheet = new TableSheet(table.table);
+ const tableCsv = tableSheet.convertToCSV();
+
+ return tableCsv;
+ }
+}
diff --git a/packages/server/src/services/FinancialStatements/InventoryDetails/InventoryDetailsService.ts b/packages/server/src/services/FinancialStatements/InventoryDetails/InventoryDetailsService.ts
index cdeca4f39..d74137753 100644
--- a/packages/server/src/services/FinancialStatements/InventoryDetails/InventoryDetailsService.ts
+++ b/packages/server/src/services/FinancialStatements/InventoryDetails/InventoryDetailsService.ts
@@ -6,7 +6,7 @@ import {
IInventoryItemDetailMeta,
} from '@/interfaces';
import TenancyService from '@/services/Tenancy/TenancyService';
-import InventoryDetails from './InventoryDetails';
+import { InventoryDetails } from './InventoryDetails';
import FinancialSheet from '../FinancialSheet';
import InventoryDetailsRepository from './InventoryDetailsRepository';
import InventoryService from '@/services/Inventory/Inventory';
@@ -14,7 +14,7 @@ import { parseBoolean } from 'utils';
import { Tenant } from '@/system/models';
@Service()
-export default class InventoryDetailsService extends FinancialSheet {
+export class InventoryDetailsService extends FinancialSheet {
@Inject()
private tenancy: TenancyService;
diff --git a/packages/server/src/services/FinancialStatements/InventoryDetails/InventoryDetailsTable.ts b/packages/server/src/services/FinancialStatements/InventoryDetails/InventoryDetailsTable.ts
index 98d5522f2..1fa6d602d 100644
--- a/packages/server/src/services/FinancialStatements/InventoryDetails/InventoryDetailsTable.ts
+++ b/packages/server/src/services/FinancialStatements/InventoryDetails/InventoryDetailsTable.ts
@@ -20,13 +20,13 @@ enum IROW_TYPE {
const MAP_CONFIG = { childrenPath: 'children', pathFormat: 'array' };
-export default class InventoryDetailsTable {
+export class InventoryDetailsTable {
i18n: any;
report: any;
/**
* Constructor method.
- * @param {ICashFlowStatement} reportStatement - Report statement.
+ * @param {ICashFlowStatement} report - Report statement.
*/
constructor(reportStatement, i18n) {
this.report = reportStatement;
@@ -172,7 +172,7 @@ export default class InventoryDetailsTable {
* Retrieve the table rows of the inventory item details.
* @returns {ITableRow[]}
*/
- public tableData = (): ITableRow[] => {
+ public tableRows = (): ITableRow[] => {
return this.itemsMapper(this.report.data);
};
diff --git a/packages/server/src/services/FinancialStatements/InventoryDetails/InventoryDetailsTableInjectable.ts b/packages/server/src/services/FinancialStatements/InventoryDetails/InventoryDetailsTableInjectable.ts
new file mode 100644
index 000000000..7cf803b46
--- /dev/null
+++ b/packages/server/src/services/FinancialStatements/InventoryDetails/InventoryDetailsTableInjectable.ts
@@ -0,0 +1,45 @@
+import HasTenancyService from '@/services/Tenancy/TenancyService';
+import { Inject, Service } from 'typedi';
+import { InventoryDetailsTable } from './InventoryDetailsTable';
+import {
+ IInventoryDetailsQuery,
+ IInvetoryItemDetailsTable,
+} from '@/interfaces';
+import { InventoryDetailsService } from './InventoryDetailsService';
+
+@Service()
+export class InventoryDetailsTableInjectable {
+ @Inject()
+ private tenancy: HasTenancyService;
+
+ @Inject()
+ private inventoryDetails: InventoryDetailsService;
+
+ /**
+ * Retrieves the inventory item details in table format.
+ * @param {number} tenantId
+ * @param {IInventoryDetailsQuery} query
+ * @returns {Promise}
+ */
+ public async table(
+ tenantId: number,
+ query: IInventoryDetailsQuery
+ ): Promise {
+ const i18n = this.tenancy.i18n(tenantId);
+
+ const inventoryDetails = await this.inventoryDetails.inventoryDetails(
+ tenantId,
+ query
+ );
+ const table = new InventoryDetailsTable(inventoryDetails, i18n);
+
+ return {
+ table: {
+ rows: table.tableRows(),
+ columns: table.tableColumns(),
+ },
+ query: inventoryDetails.query,
+ meta: inventoryDetails.meta,
+ };
+ }
+}
diff --git a/packages/server/src/services/FinancialStatements/JournalSheet/JournalSheet.ts b/packages/server/src/services/FinancialStatements/JournalSheet/JournalSheet.ts
index ee184a5a1..89725db3b 100644
--- a/packages/server/src/services/FinancialStatements/JournalSheet/JournalSheet.ts
+++ b/packages/server/src/services/FinancialStatements/JournalSheet/JournalSheet.ts
@@ -6,8 +6,10 @@ import {
IJournalReportQuery,
IJournalReport,
IContact,
+ IJournalTableData,
} from '@/interfaces';
import FinancialSheet from '../FinancialSheet';
+import moment from 'moment';
export default class JournalSheet extends FinancialSheet {
readonly tenantId: number;
@@ -96,6 +98,8 @@ export default class JournalSheet extends FinancialSheet {
return {
date: groupEntry.date,
+ dateFormatted: moment(groupEntry.date).format('YYYY MMM DD'),
+
referenceType: groupEntry.referenceType,
referenceId: groupEntry.referenceId,
referenceTypeFormatted: this.i18n.__(groupEntry.referenceTypeFormatted),
@@ -131,7 +135,7 @@ export default class JournalSheet extends FinancialSheet {
* Retrieve journal report.
* @return {IJournalReport}
*/
- reportData(): IJournalReport {
+ reportData(): IJournalTableData {
return this.entriesWalker(this.journal.entries);
}
}
diff --git a/packages/server/src/services/FinancialStatements/JournalSheet/JournalSheetApplication.ts b/packages/server/src/services/FinancialStatements/JournalSheet/JournalSheetApplication.ts
new file mode 100644
index 000000000..4c403ff58
--- /dev/null
+++ b/packages/server/src/services/FinancialStatements/JournalSheet/JournalSheetApplication.ts
@@ -0,0 +1,59 @@
+import { Inject } from 'typedi';
+import { JournalSheetService } from './JournalSheetService';
+import { JournalSheetTableInjectable } from './JournalSheetTableInjectable';
+import { IJournalReportQuery, IJournalTable } from '@/interfaces';
+import { JournalSheetExportInjectable } from './JournalSheetExport';
+
+export class JournalSheetApplication {
+ @Inject()
+ private journalSheetTable: JournalSheetTableInjectable;
+
+ @Inject()
+ private journalSheet: JournalSheetService;
+
+ @Inject()
+ private journalExport: JournalSheetExportInjectable;
+
+ /**
+ * Retrieves the journal sheet.
+ * @param {number} tenantId
+ * @param {IJournalReportQuery} query
+ * @returns {}
+ */
+ public sheet(tenantId: number, query: IJournalReportQuery) {
+ return this.journalSheet.journalSheet(tenantId, query);
+ }
+
+ /**
+ * Retrieves the journal sheet in table format.
+ * @param {number} tenantId
+ * @param {IJournalReportQuery} query
+ * @returns {Promise}
+ */
+ public table(
+ tenantId: number,
+ query: IJournalReportQuery
+ ): Promise {
+ return this.journalSheetTable.table(tenantId, query);
+ }
+
+ /**
+ * Retrieves the journal sheet in xlsx format.
+ * @param {number} tenantId
+ * @param {IJournalReportQuery} query
+ * @returns
+ */
+ public xlsx(tenantId: number, query: IJournalReportQuery) {
+ return this.journalExport.xlsx(tenantId, query);
+ }
+
+ /**
+ * Retrieves the journal sheet in csv format.
+ * @param {number} tenantId
+ * @param {IJournalReportQuery} query
+ * @returns
+ */
+ public csv(tenantId: number, query: IJournalReportQuery) {
+ return this.journalExport.csv(tenantId, query);
+ }
+}
diff --git a/packages/server/src/services/FinancialStatements/JournalSheet/JournalSheetExport.ts b/packages/server/src/services/FinancialStatements/JournalSheet/JournalSheetExport.ts
new file mode 100644
index 000000000..815c0a308
--- /dev/null
+++ b/packages/server/src/services/FinancialStatements/JournalSheet/JournalSheetExport.ts
@@ -0,0 +1,43 @@
+import { Inject, Service } from 'typedi';
+import { TableSheet } from '@/lib/Xlsx/TableSheet';
+import { IJournalReportQuery } from '@/interfaces';
+import { JournalSheetTableInjectable } from './JournalSheetTableInjectable';
+
+@Service()
+export class JournalSheetExportInjectable {
+ @Inject()
+ private journalSheetTable: JournalSheetTableInjectable;
+
+ /**
+ * Retrieves the trial balance sheet in XLSX format.
+ * @param {number} tenantId
+ * @param {IJournalReportQuery} query
+ * @returns {Promise}
+ */
+ public async xlsx(tenantId: number, query: IJournalReportQuery) {
+ const table = await this.journalSheetTable.table(tenantId, query);
+
+ const tableSheet = new TableSheet(table.table);
+ const tableCsv = tableSheet.convertToXLSX();
+
+ return tableSheet.convertToBuffer(tableCsv, 'xlsx');
+ }
+
+ /**
+ * Retrieves the trial balance sheet in CSV format.
+ * @param {number} tenantId
+ * @param {IJournalReportQuery} query
+ * @returns {Promise}
+ */
+ public async csv(
+ tenantId: number,
+ query: IJournalReportQuery
+ ): Promise {
+ const table = await this.journalSheetTable.table(tenantId, query);
+
+ const tableSheet = new TableSheet(table.table);
+ const tableCsv = tableSheet.convertToCSV();
+
+ return tableCsv;
+ }
+}
diff --git a/packages/server/src/services/FinancialStatements/JournalSheet/JournalSheetService.ts b/packages/server/src/services/FinancialStatements/JournalSheet/JournalSheetService.ts
index fe0a071ff..69a319ff3 100644
--- a/packages/server/src/services/FinancialStatements/JournalSheet/JournalSheetService.ts
+++ b/packages/server/src/services/FinancialStatements/JournalSheet/JournalSheetService.ts
@@ -1,24 +1,25 @@
import { Service, Inject } from 'typedi';
import moment from 'moment';
-import { IJournalReportQuery, IJournalSheetMeta } from '@/interfaces';
-
+import {
+ IJournalReportQuery,
+ IJournalSheet,
+ IJournalSheetMeta,
+ IJournalTableData,
+} from '@/interfaces';
import JournalSheet from './JournalSheet';
import TenancyService from '@/services/Tenancy/TenancyService';
import Journal from '@/services/Accounting/JournalPoster';
import InventoryService from '@/services/Inventory/Inventory';
-import { parseBoolean, transformToMap } from 'utils';
import { Tenant } from '@/system/models';
+import { parseBoolean, transformToMap } from 'utils';
@Service()
-export default class JournalSheetService {
+export class JournalSheetService {
@Inject()
- tenancy: TenancyService;
+ private tenancy: TenancyService;
@Inject()
- inventoryService: InventoryService;
-
- @Inject('logger')
- logger: any;
+ private inventoryService: InventoryService;
/**
* Default journal sheet filter queyr.
@@ -67,9 +68,13 @@ export default class JournalSheetService {
/**
* Journal sheet.
* @param {number} tenantId
- * @param {IJournalSheetFilterQuery} query
+ * @param {IJournalReportQuery} query
+ * @returns {Promise}
*/
- async journalSheet(tenantId: number, query: IJournalReportQuery) {
+ async journalSheet(
+ tenantId: number,
+ query: IJournalReportQuery
+ ): Promise {
const i18n = this.tenancy.i18n(tenantId);
const { accountRepository, transactionsRepository, contactRepository } =
this.tenancy.repositories(tenantId);
@@ -80,11 +85,6 @@ export default class JournalSheetService {
...this.defaultQuery,
...query,
};
- this.logger.info('[journal] trying to calculate the report.', {
- tenantId,
- filter,
- });
-
const tenant = await Tenant.query()
.findById(tenantId)
.withGraphFetched('metadata');
diff --git a/packages/server/src/services/FinancialStatements/JournalSheet/JournalSheetTable.ts b/packages/server/src/services/FinancialStatements/JournalSheet/JournalSheetTable.ts
new file mode 100644
index 000000000..724e2ec2b
--- /dev/null
+++ b/packages/server/src/services/FinancialStatements/JournalSheet/JournalSheetTable.ts
@@ -0,0 +1,232 @@
+import * as R from 'ramda';
+import { first } from 'lodash';
+import {
+ IColumnMapperMeta,
+ IJournalEntry,
+ IJournalReportEntriesGroup,
+ IJournalReportQuery,
+ IJournalTableData,
+ ITableColumn,
+ ITableColumnAccessor,
+ ITableRow,
+} from '@/interfaces';
+import { tableRowMapper } from '@/utils';
+import { FinancialTable } from '../FinancialTable';
+import { FinancialSheetStructure } from '../FinancialSheetStructure';
+import FinancialSheet from '../FinancialSheet';
+import { ROW_TYPE } from './types';
+
+export class JournalSheetTable extends R.compose(
+ FinancialTable,
+ FinancialSheetStructure
+)(FinancialSheet) {
+ private data: IJournalTableData;
+ private query: IJournalReportQuery;
+ private i18n: any;
+
+ /**
+ * Constructor method.
+ * @param {IJournalTableData} data
+ * @param {IJournalReportQuery} query
+ * @param i18n
+ */
+ constructor(data: IJournalTableData, query: IJournalReportQuery, i18n: any) {
+ super();
+
+ this.data = data;
+ this.query = query;
+ this.i18n = i18n;
+ }
+
+ /**
+ * Retrieves the common table accessors.
+ * @returns {ITableColumnAccessor[]}
+ */
+ private groupColumnsAccessors = (): ITableColumnAccessor[] => {
+ return [
+ { key: 'date', accessor: 'dateFormatted' },
+ { key: 'transaction_type', accessor: 'referenceTypeFormatted' },
+ { key: 'transaction_number', accessor: 'entry.transactionNumber' },
+ { key: 'description', accessor: 'entry.note' },
+ { key: 'account_code', accessor: 'entry.accountCode' },
+ { key: 'account_name', accessor: 'entry.accountName' },
+ { key: 'credit', accessor: 'entry.formattedCredit' },
+ { key: 'debit', accessor: 'entry.formattedDebit' },
+ ];
+ };
+
+ /**
+ * Retrieves the group entry accessors.
+ * @returns {ITableColumnAccessor[]}
+ */
+ private entryColumnsAccessors = (): ITableColumnAccessor[] => {
+ return [
+ { key: 'date', accessor: '_empty_' },
+ { key: 'transaction_type', accessor: '_empty_' },
+ { key: 'transaction_number', accessor: 'transactionNumber' },
+ { key: 'description', accessor: 'note' },
+ { key: 'account_code', accessor: 'accountCode' },
+ { key: 'account_name', accessor: 'accountName' },
+ { key: 'credit', accessor: 'formattedCredit' },
+ { key: 'debit', accessor: 'formattedDebit' },
+ ];
+ };
+
+ /**
+ * Retrieves the total entry column accessors.
+ * @returns {ITableColumnAccessor[]}
+ */
+ private totalEntryColumnAccessors = (): ITableColumnAccessor[] => {
+ return [
+ { key: 'date', accessor: '_empty_' },
+ { key: 'transaction_type', accessor: '_empty_' },
+ { key: 'transaction_number', accessor: '_empty_' },
+ { key: 'description', accessor: '_empty_' },
+ { key: 'account_code', accessor: '_empty_' },
+ { key: 'account_name', accessor: '_empty_' },
+ { key: 'credit', accessor: 'formattedCredit' },
+ { key: 'debit', accessor: 'formattedDebit' },
+ ];
+ };
+
+ /**
+ * Retrieves the total entry column accessors.
+ * @returns {IColumnMapperMeta[]}
+ */
+ private blankEnrtyColumnAccessors = (): IColumnMapperMeta[] => {
+ return [
+ { key: 'date', value: '' },
+ { key: 'transaction_type', value: '' },
+ { key: 'transaction_number', value: '' },
+ { key: 'description', value: '' },
+ { key: 'account_code', value: '' },
+ { key: 'account_name', value: '' },
+ { key: 'credit', value: '' },
+ { key: 'debit', value: '' },
+ ];
+ };
+
+ /**
+ * Retrieves the common columns.
+ * @returns {ITableColumn[]}
+ */
+ private commonColumns(): ITableColumn[] {
+ return [
+ { key: 'date', label: 'Date' },
+ { key: 'transaction_type', label: 'Transaction Type' },
+ { key: 'transaction_number', label: 'Num.' },
+ { key: 'description', label: 'Description' },
+ { key: 'account_code', label: 'Acc. Code' },
+ { key: 'account_name', label: 'Account' },
+ { key: 'credit', label: 'Credit' },
+ { key: 'debit', label: 'Debit' },
+ ];
+ }
+
+ /**
+ * Maps the group and first entry to table row.
+ * @param {IJournalReportEntriesGroup} group
+ * @returns {ITableRow}
+ */
+ private firstEntryGroupMapper = (
+ group: IJournalReportEntriesGroup
+ ): ITableRow => {
+ const meta = {
+ rowTypes: [ROW_TYPE.ENTRY],
+ };
+ const computedGroup = { ...group, entry: first(group.entries) };
+ const columns = this.groupColumnsAccessors();
+
+ return tableRowMapper(computedGroup, columns, meta);
+ };
+
+ /**
+ * Maps the given group entry to table rows.
+ * @param {IJournalEntry} entry
+ * @returns {ITableRow}
+ */
+ private entryMapper = (entry: IJournalEntry): ITableRow => {
+ const columns = this.entryColumnsAccessors();
+ const meta = {
+ rowTypes: [ROW_TYPE.ENTRY],
+ };
+ return tableRowMapper(entry, columns, meta);
+ };
+
+ /**
+ * Maps the given group entries to table rows.
+ * @param {IJournalReportEntriesGroup} group
+ * @returns {ITableRow[]}
+ */
+ private entriesMapper = (group: IJournalReportEntriesGroup): ITableRow[] => {
+ const entries = R.remove(0, 1, group.entries);
+
+ return R.map(this.entryMapper, entries);
+ };
+
+ /**
+ * Maps the given group entry to total table row.
+ * @param {IJournalReportEntriesGroup} group
+ * @returns {ITableRow}
+ */
+ public totalEntryMapper = (group: IJournalReportEntriesGroup): ITableRow => {
+ const total = this.totalEntryColumnAccessors();
+ const meta = {
+ rowTypes: [ROW_TYPE.TOTAL],
+ };
+ return tableRowMapper(group, total, meta);
+ };
+
+ /**
+ * Retrieves the blank entry row.
+ * @returns {ITableRow}
+ */
+ private blankEntryMapper = (): ITableRow => {
+ const columns = this.blankEnrtyColumnAccessors();
+ const meta = {};
+ return tableRowMapper({} as IJournalEntry, columns, meta);
+ };
+
+ /**
+ * Maps the entry group to table rows.
+ * @param {IJournalReportEntriesGroup} group -
+ * @returns {ITableRow}
+ */
+ private groupMapper = (group: IJournalReportEntriesGroup): ITableRow[] => {
+ const firstRow = this.firstEntryGroupMapper(group);
+ const lastRows = this.entriesMapper(group);
+ const totalRow = this.totalEntryMapper(group);
+ const blankRow = this.blankEntryMapper();
+
+ return [firstRow, ...lastRows, totalRow, blankRow];
+ };
+
+ /**
+ * Maps the given group entries to table rows.
+ * @param {IJournalReportEntriesGroup[]} entries -
+ * @returns {ITableRow[]}
+ */
+ private groupsMapper = (
+ entries: IJournalReportEntriesGroup[]
+ ): ITableRow[] => {
+ return R.compose(R.flatten, R.map(this.groupMapper))(entries);
+ };
+
+ /**
+ * Retrieves the table data rows.
+ * @returns {ITableRow[]}
+ */
+ public tableData(): ITableRow[] {
+ return R.compose(this.groupsMapper)(this.data);
+ }
+
+ /**
+ * Retrieves the table columns.
+ * @returns {ITableColumn[]}
+ */
+ public tableColumns(): ITableColumn[] {
+ const columns = this.commonColumns();
+
+ return R.compose(this.tableColumnsCellIndexing)(columns);
+ }
+}
diff --git a/packages/server/src/services/FinancialStatements/JournalSheet/JournalSheetTableInjectable.ts b/packages/server/src/services/FinancialStatements/JournalSheet/JournalSheetTableInjectable.ts
new file mode 100644
index 000000000..0754d78f8
--- /dev/null
+++ b/packages/server/src/services/FinancialStatements/JournalSheet/JournalSheetTableInjectable.ts
@@ -0,0 +1,39 @@
+import HasTenancyService from '@/services/Tenancy/TenancyService';
+import { Inject } from 'typedi';
+import { JournalSheetService } from './JournalSheetService';
+import { IJournalReportQuery, IJournalTable } from '@/interfaces';
+import { JournalSheetTable } from './JournalSheetTable';
+
+export class JournalSheetTableInjectable {
+ @Inject()
+ private tenancy: HasTenancyService;
+
+ @Inject()
+ private journalSheetService: JournalSheetService;
+
+ /**
+ * Retrieves the journal sheet in table format.
+ * @param {number} tenantId
+ * @param {IJournalReportQuery} query
+ * @returns {Promise}
+ */
+ public async table(
+ tenantId: number,
+ query: IJournalReportQuery
+ ): Promise {
+ const journal = await this.journalSheetService.journalSheet(
+ tenantId,
+ query
+ );
+ const table = new JournalSheetTable(journal.data, journal.query, {});
+
+ return {
+ table: {
+ columns: table.tableColumns(),
+ rows: table.tableData(),
+ },
+ query: journal.query,
+ meta: journal.meta,
+ };
+ }
+}
diff --git a/packages/server/src/services/FinancialStatements/JournalSheet/types.ts b/packages/server/src/services/FinancialStatements/JournalSheet/types.ts
new file mode 100644
index 000000000..6eff84957
--- /dev/null
+++ b/packages/server/src/services/FinancialStatements/JournalSheet/types.ts
@@ -0,0 +1,5 @@
+
+export enum ROW_TYPE {
+ ENTRY = 'ENTRY',
+ TOTAL = 'TOTAL'
+};
\ No newline at end of file
diff --git a/packages/server/src/services/FinancialStatements/ProfitLossSheet/ProfitLossSheetApplication.ts b/packages/server/src/services/FinancialStatements/ProfitLossSheet/ProfitLossSheetApplication.ts
new file mode 100644
index 000000000..eee89e73a
--- /dev/null
+++ b/packages/server/src/services/FinancialStatements/ProfitLossSheet/ProfitLossSheetApplication.ts
@@ -0,0 +1,60 @@
+import { Inject, Service } from 'typedi';
+import { ProfitLossSheetExportInjectable } from './ProfitLossSheetExportInjectable';
+import { ProfitLossSheetTableInjectable } from './ProfitLossSheetTableInjectable';
+import { IProfitLossSheetQuery, IProfitLossSheetTable } from '@/interfaces';
+import ProfitLossSheetService from './ProfitLossSheetService';
+
+@Service()
+export class ProfitLossSheetApplication {
+ @Inject()
+ private profitLossTable: ProfitLossSheetTableInjectable;
+
+ @Inject()
+ private profitLossExport: ProfitLossSheetExportInjectable;
+
+ @Inject()
+ private profitLossSheet: ProfitLossSheetService;
+
+ /**
+ * Retreives the profit/loss sheet.
+ * @param {number} tenantId
+ * @param {IProfitLossSheetQuery} query
+ * @returns {}
+ */
+ public sheet(tenantId: number, query: IProfitLossSheetQuery) {
+ return this.profitLossSheet.profitLossSheet(tenantId, query);
+ }
+
+ /**
+ * Retrieves the profit/loss sheet table format.
+ * @param {number} tenantId
+ * @param {IProfitLossSheetQuery} query
+ * @returns {Promise}
+ */
+ public table(
+ tenantId: number,
+ query: IProfitLossSheetQuery
+ ): Promise {
+ return this.profitLossTable.table(tenantId, query);
+ }
+
+ /**
+ * Retrieves the profit/loss sheet in csv format.
+ * @param {number} tenantId
+ * @param {IProfitLossSheetQuery} query
+ * @returns {Promise}
+ */
+ public csv(tenantId: number, query: IProfitLossSheetQuery): Promise {
+ return this.profitLossExport.csv(tenantId, query);
+ }
+
+ /**
+ * Retrieves the profit/loss sheet in xlsx format.
+ * @param {number} tenantId
+ * @param {IProfitLossSheetQuery} query
+ * @returns {Promise}
+ */
+ public xlsx(tenantId: number, query: IProfitLossSheetQuery): Promise {
+ return this.profitLossExport.xlsx(tenantId, query);
+ }
+}
diff --git a/packages/server/src/services/FinancialStatements/ProfitLossSheet/ProfitLossSheetExportInjectable.ts b/packages/server/src/services/FinancialStatements/ProfitLossSheet/ProfitLossSheetExportInjectable.ts
new file mode 100644
index 000000000..ba2371797
--- /dev/null
+++ b/packages/server/src/services/FinancialStatements/ProfitLossSheet/ProfitLossSheetExportInjectable.ts
@@ -0,0 +1,43 @@
+import { Inject, Service } from 'typedi';
+import { IProfitLossSheetQuery } from '@/interfaces';
+import { TableSheet } from '@/lib/Xlsx/TableSheet';
+import { ProfitLossSheetTableInjectable } from './ProfitLossSheetTableInjectable';
+
+@Service()
+export class ProfitLossSheetExportInjectable {
+ @Inject()
+ private profitLossSheetTable: ProfitLossSheetTableInjectable;
+
+ /**
+ * Retrieves the profit/loss sheet in XLSX format.
+ * @param {number} tenantId
+ * @param {IProfitLossSheetQuery} query
+ * @returns {Promise}
+ */
+ public async xlsx(tenantId: number, query: IProfitLossSheetQuery) {
+ const table = await this.profitLossSheetTable.table(tenantId, query);
+
+ const tableSheet = new TableSheet(table.table);
+ const tableCsv = tableSheet.convertToXLSX();
+
+ return tableSheet.convertToBuffer(tableCsv, 'xlsx');
+ }
+
+ /**
+ * Retrieves the profit/loss sheet in CSV format.
+ * @param {number} tenantId
+ * @param {IProfitLossSheetQuery} query
+ * @returns {Promise}
+ */
+ public async csv(
+ tenantId: number,
+ query: IProfitLossSheetQuery
+ ): Promise {
+ const table = await this.profitLossSheetTable.table(tenantId, query);
+
+ const tableSheet = new TableSheet(table.table);
+ const tableCsv = tableSheet.convertToCSV();
+
+ return tableCsv;
+ }
+}
diff --git a/packages/server/src/services/FinancialStatements/ProfitLossSheet/ProfitLossSheetService.ts b/packages/server/src/services/FinancialStatements/ProfitLossSheet/ProfitLossSheetService.ts
index 14d17fc5a..20cf9a170 100644
--- a/packages/server/src/services/FinancialStatements/ProfitLossSheet/ProfitLossSheetService.ts
+++ b/packages/server/src/services/FinancialStatements/ProfitLossSheet/ProfitLossSheetService.ts
@@ -16,39 +16,10 @@ import { ProfitLossSheetRepository } from './ProfitLossSheetRepository';
@Service()
export default class ProfitLossSheetService {
@Inject()
- tenancy: TenancyService;
-
- @Inject('logger')
- logger: any;
+ private tenancy: TenancyService;
@Inject()
- inventoryService: InventoryService;
-
- /**
- * Retrieve the trial balance sheet meta.
- * @param {number} tenantId - Tenant id.
- * @returns {ITrialBalanceSheetMeta}
- */
- reportMetadata(tenantId: number): IProfitLossSheetMeta {
- const settings = this.tenancy.settings(tenantId);
-
- const isCostComputeRunning =
- this.inventoryService.isItemsCostComputeRunning(tenantId);
- const organizationName = settings.get({
- group: 'organization',
- key: 'name',
- });
- const baseCurrency = settings.get({
- group: 'organization',
- key: 'base_currency',
- });
-
- return {
- isCostComputeRunning: parseBoolean(isCostComputeRunning, false),
- organizationName,
- baseCurrency,
- };
- }
+ private inventoryService: InventoryService;
/**
* Retrieve profit/loss sheet statement.
@@ -56,7 +27,7 @@ export default class ProfitLossSheetService {
* @param {IProfitLossSheetQuery} query
* @return { }
*/
- profitLossSheet = async (
+ public profitLossSheet = async (
tenantId: number,
query: IProfitLossSheetQuery
): Promise<{
@@ -70,13 +41,6 @@ export default class ProfitLossSheetService {
// Merges the given query with default filter query.
const filter = mergeQueryWithDefaults(query);
- // Get the given accounts or throw not found service error.
- // if (filter.accountsIds.length > 0) {
- // await this.accountsService.getAccountsOrThrowError(
- // tenantId,
- // filter.accountsIds
- // );
- // }
const tenant = await Tenant.query()
.findById(tenantId)
.withGraphFetched('metadata');
@@ -101,4 +65,30 @@ export default class ProfitLossSheetService {
meta: this.reportMetadata(tenantId),
};
};
+
+ /**
+ * Retrieve the trial balance sheet meta.
+ * @param {number} tenantId - Tenant id.
+ * @returns {ITrialBalanceSheetMeta}
+ */
+ private reportMetadata(tenantId: number): IProfitLossSheetMeta {
+ const settings = this.tenancy.settings(tenantId);
+
+ const isCostComputeRunning =
+ this.inventoryService.isItemsCostComputeRunning(tenantId);
+ const organizationName = settings.get({
+ group: 'organization',
+ key: 'name',
+ });
+ const baseCurrency = settings.get({
+ group: 'organization',
+ key: 'base_currency',
+ });
+
+ return {
+ isCostComputeRunning: parseBoolean(isCostComputeRunning, false),
+ organizationName,
+ baseCurrency,
+ };
+ }
}
diff --git a/packages/server/src/services/FinancialStatements/ProfitLossSheet/ProfitLossSheetTableInjectable.ts b/packages/server/src/services/FinancialStatements/ProfitLossSheet/ProfitLossSheetTableInjectable.ts
new file mode 100644
index 000000000..326e7aaef
--- /dev/null
+++ b/packages/server/src/services/FinancialStatements/ProfitLossSheet/ProfitLossSheetTableInjectable.ts
@@ -0,0 +1,42 @@
+import { Inject, Service } from 'typedi';
+import ProfitLossSheetService from './ProfitLossSheetService';
+import { ProfitLossSheetTable } from './ProfitLossSheetTable';
+import { IProfitLossSheetQuery, IProfitLossSheetTable } from '@/interfaces';
+import HasTenancyService from '@/services/Tenancy/TenancyService';
+
+@Service()
+export class ProfitLossSheetTableInjectable {
+ @Inject()
+ private profitLossSheet: ProfitLossSheetService;
+
+ @Inject()
+ private tenancy: HasTenancyService;
+
+ /**
+ * Retrieves the profit/loss sheet in table format.
+ * @param {number} tenantId
+ * @param {IProfitLossSheetQuery} filter
+ * @returns {Promise}
+ */
+ public async table(
+ tenantId: number,
+ filter: IProfitLossSheetQuery
+ ): Promise {
+ const i18n = this.tenancy.i18n(tenantId);
+
+ const { data, query, meta } = await this.profitLossSheet.profitLossSheet(
+ tenantId,
+ filter
+ );
+ const table = new ProfitLossSheetTable(data, query, i18n);
+
+ return {
+ table: {
+ rows: table.tableRows(),
+ columns: table.tableColumns(),
+ },
+ query,
+ meta,
+ };
+ }
+}
diff --git a/packages/server/src/services/FinancialStatements/SalesByItems/SalesByItemsService.ts b/packages/server/src/services/FinancialStatements/SalesByItems/SalesByItemsService.ts
index 7570ef572..6f81e1489 100644
--- a/packages/server/src/services/FinancialStatements/SalesByItems/SalesByItemsService.ts
+++ b/packages/server/src/services/FinancialStatements/SalesByItems/SalesByItemsService.ts
@@ -87,10 +87,6 @@ export default class SalesByItemsReportService {
...this.defaultQuery,
...query,
};
- this.logger.info('[sales_by_items] trying to calculate the report.', {
- filter,
- tenantId,
- });
// Inventory items for sales report.
const inventoryItems = await Item.query().onBuild((q) => {
q.where('type', 'inventory');
diff --git a/packages/server/src/services/FinancialStatements/SalesTaxLiabilitySummary/SalesTaxLiabilitySummaryApplication.ts b/packages/server/src/services/FinancialStatements/SalesTaxLiabilitySummary/SalesTaxLiabilitySummaryApplication.ts
new file mode 100644
index 000000000..f0e5a5248
--- /dev/null
+++ b/packages/server/src/services/FinancialStatements/SalesTaxLiabilitySummary/SalesTaxLiabilitySummaryApplication.ts
@@ -0,0 +1,63 @@
+import { Inject, Service } from 'typedi';
+import { SalesTaxLiabilitySummaryQuery } from '@/interfaces/SalesTaxLiabilitySummary';
+import { SalesTaxLiabilitySummaryTableInjectable } from './SalesTaxLiabilitySummaryTableInjectable';
+import { SalesTaxLiabilitySummaryExportInjectable } from './SalesTaxLiabilitySummaryExportInjectable';
+import { SalesTaxLiabilitySummaryService } from './SalesTaxLiabilitySummaryService';
+
+@Service()
+export class SalesTaxLiabilitySummaryApplication {
+ @Inject()
+ private salesTaxLiabilitySheet: SalesTaxLiabilitySummaryService;
+
+ @Inject()
+ private salesTaxLiabilityExport: SalesTaxLiabilitySummaryExportInjectable;
+
+ @Inject()
+ private salesTaxLiabilityTable: SalesTaxLiabilitySummaryTableInjectable;
+
+ /**
+ * Retrieves the sales tax liability summary in json format.
+ * @param {number} tenantId
+ * @param {SalesTaxLiabilitySummaryQuery} query
+ * @returns {Promise}
+ */
+ public sheet(tenantId: number, query: SalesTaxLiabilitySummaryQuery) {
+ return this.salesTaxLiabilitySheet.salesTaxLiability(tenantId, query);
+ }
+
+ /**
+ * Retrieves the sales tax liability summary in table format.
+ * @param {number} tenantId
+ * @param {SalesTaxLiabilitySummaryQuery} query
+ * @return {Promise}
+ */
+ public table(tenantId: number, query: SalesTaxLiabilitySummaryQuery) {
+ return this.salesTaxLiabilityTable.table(tenantId, query);
+ }
+
+ /**
+ * Retrieves the sales tax liability summary in XLSX format.
+ * @param {number} tenantId
+ * @param {SalesTaxLiabilitySummaryQuery} query
+ * @returns {Promise}
+ */
+ public xlsx(
+ tenantId: number,
+ query: SalesTaxLiabilitySummaryQuery
+ ): Promise {
+ return this.salesTaxLiabilityExport.xlsx(tenantId, query);
+ }
+
+ /**
+ * Retrieves the sales tax liability summary in CSV format.
+ * @param {number} tenantId
+ * @param {SalesTaxLiabilitySummaryQuery} query
+ * @returns {Promise}
+ */
+ public csv(
+ tenantId: number,
+ query: SalesTaxLiabilitySummaryQuery
+ ): Promise {
+ return this.salesTaxLiabilityExport.csv(tenantId, query);
+ }
+}
diff --git a/packages/server/src/services/FinancialStatements/SalesTaxLiabilitySummary/SalesTaxLiabilitySummaryExportInjectable.ts b/packages/server/src/services/FinancialStatements/SalesTaxLiabilitySummary/SalesTaxLiabilitySummaryExportInjectable.ts
new file mode 100644
index 000000000..932743679
--- /dev/null
+++ b/packages/server/src/services/FinancialStatements/SalesTaxLiabilitySummary/SalesTaxLiabilitySummaryExportInjectable.ts
@@ -0,0 +1,46 @@
+import { SalesTaxLiabilitySummaryQuery } from '@/interfaces/SalesTaxLiabilitySummary';
+import { TableSheet } from '@/lib/Xlsx/TableSheet';
+import { Inject, Service } from 'typedi';
+import { SalesTaxLiabilitySummaryTableInjectable } from './SalesTaxLiabilitySummaryTableInjectable';
+
+@Service()
+export class SalesTaxLiabilitySummaryExportInjectable {
+ @Inject()
+ private salesTaxLiabilityTable: SalesTaxLiabilitySummaryTableInjectable;
+
+ /**
+ * Retrieves the cashflow sheet in XLSX format.
+ * @param {number} tenantId
+ * @param {ICashFlowStatementQuery} query
+ * @returns {Promise}
+ */
+ public async xlsx(
+ tenantId: number,
+ query: SalesTaxLiabilitySummaryQuery
+ ): Promise {
+ const table = await this.salesTaxLiabilityTable.table(tenantId, query);
+
+ const tableSheet = new TableSheet(table.table);
+ const tableCsv = tableSheet.convertToXLSX();
+
+ return tableSheet.convertToBuffer(tableCsv, 'xlsx');
+ }
+
+ /**
+ * Retrieves the cashflow sheet in CSV format.
+ * @param {number} tenantId
+ * @param {ICashFlowStatementQuery} query
+ * @returns {Promise}
+ */
+ public async csv(
+ tenantId: number,
+ query: SalesTaxLiabilitySummaryQuery
+ ): Promise {
+ const table = await this.salesTaxLiabilityTable.table(tenantId, query);
+
+ const tableSheet = new TableSheet(table.table);
+ const tableCsv = tableSheet.convertToCSV();
+
+ return tableCsv;
+ }
+}
diff --git a/packages/server/src/services/FinancialStatements/SalesTaxLiabilitySummary/SalesTaxLiabilitySummaryService.ts b/packages/server/src/services/FinancialStatements/SalesTaxLiabilitySummary/SalesTaxLiabilitySummaryService.ts
index 09fa9283b..a1ec7a771 100644
--- a/packages/server/src/services/FinancialStatements/SalesTaxLiabilitySummary/SalesTaxLiabilitySummaryService.ts
+++ b/packages/server/src/services/FinancialStatements/SalesTaxLiabilitySummary/SalesTaxLiabilitySummaryService.ts
@@ -5,7 +5,6 @@ import {
SalesTaxLiabilitySummaryQuery,
} from '@/interfaces/SalesTaxLiabilitySummary';
import { SalesTaxLiabilitySummary } from './SalesTaxLiabilitySummary';
-import { SalesTaxLiabilitySummaryTable } from './SalesTaxLiabilitySummaryTable';
import HasTenancyService from '@/services/Tenancy/TenancyService';
@Service()
@@ -47,32 +46,6 @@ export class SalesTaxLiabilitySummaryService {
};
}
- /**
- * Retrieve sales tax liability summary table.
- * @param {number} tenantId
- * @param {SalesTaxLiabilitySummaryQuery} query
- * @returns
- */
- public async salesTaxLiabilitySummaryTable(
- tenantId: number,
- query: SalesTaxLiabilitySummaryQuery
- ) {
- const report = await this.salesTaxLiability(tenantId, query);
-
- // Creates the sales tax liability summary table.
- const table = new SalesTaxLiabilitySummaryTable(report.data, query);
-
- return {
- table: {
- rows: table.tableRows(),
- columns: table.tableColumns(),
- },
- data: report.data,
- query: report.query,
- meta: report.meta,
- };
- }
-
/**
* Retrieve the report meta.
* @param {number} tenantId -
diff --git a/packages/server/src/services/FinancialStatements/SalesTaxLiabilitySummary/SalesTaxLiabilitySummaryTableInjectable.ts b/packages/server/src/services/FinancialStatements/SalesTaxLiabilitySummary/SalesTaxLiabilitySummaryTableInjectable.ts
new file mode 100644
index 000000000..907cab2ad
--- /dev/null
+++ b/packages/server/src/services/FinancialStatements/SalesTaxLiabilitySummary/SalesTaxLiabilitySummaryTableInjectable.ts
@@ -0,0 +1,40 @@
+import { Inject, Service } from 'typedi';
+import {
+ ISalesTaxLiabilitySummaryTable,
+ SalesTaxLiabilitySummaryQuery,
+} from '@/interfaces/SalesTaxLiabilitySummary';
+import { SalesTaxLiabilitySummaryTable } from './SalesTaxLiabilitySummaryTable';
+import { SalesTaxLiabilitySummaryService } from './SalesTaxLiabilitySummaryService';
+
+@Service()
+export class SalesTaxLiabilitySummaryTableInjectable {
+ @Inject()
+ private salesTaxLiability: SalesTaxLiabilitySummaryService;
+
+ /**
+ * Retrieve sales tax liability summary table.
+ * @param {number} tenantId
+ * @param {SalesTaxLiabilitySummaryQuery} query
+ * @returns {Promise}
+ */
+ public async table(
+ tenantId: number,
+ query: SalesTaxLiabilitySummaryQuery
+ ): Promise {
+ const report = await this.salesTaxLiability.salesTaxLiability(
+ tenantId,
+ query
+ );
+ // Creates the sales tax liability summary table.
+ const table = new SalesTaxLiabilitySummaryTable(report.data, query);
+
+ return {
+ table: {
+ rows: table.tableRows(),
+ columns: table.tableColumns(),
+ },
+ query: report.query,
+ meta: report.meta,
+ };
+ }
+}
diff --git a/packages/server/src/services/FinancialStatements/TransactionsByCustomer/TransactionsByCustomers.ts b/packages/server/src/services/FinancialStatements/TransactionsByCustomer/TransactionsByCustomers.ts
index 3ab624830..e35692bd5 100644
--- a/packages/server/src/services/FinancialStatements/TransactionsByCustomer/TransactionsByCustomers.ts
+++ b/packages/server/src/services/FinancialStatements/TransactionsByCustomer/TransactionsByCustomers.ts
@@ -139,11 +139,4 @@ export default class TransactionsByCustomers extends TransactionsByContact {
public reportData(): ITransactionsByCustomersData {
return this.customersMapper(this.customers);
}
-
- /**
- * Retrieve the report columns.
- */
- public reportColumns() {
- return [];
- }
}
diff --git a/packages/server/src/services/FinancialStatements/TransactionsByCustomer/TransactionsByCustomersApplication.ts b/packages/server/src/services/FinancialStatements/TransactionsByCustomer/TransactionsByCustomersApplication.ts
new file mode 100644
index 000000000..b729c219a
--- /dev/null
+++ b/packages/server/src/services/FinancialStatements/TransactionsByCustomer/TransactionsByCustomersApplication.ts
@@ -0,0 +1,72 @@
+import { Inject, Service } from 'typedi';
+import {
+ ITransactionsByCustomersFilter,
+ ITransactionsByCustomersStatement,
+} from '@/interfaces';
+import { TransactionsByCustomersTableInjectable } from './TransactionsByCustomersTableInjectable';
+import { TransactionsByCustomersExportInjectable } from './TransactionsByCustomersExportInjectable';
+import { TransactionsByCustomersSheet } from './TransactionsByCustomersService';
+
+@Service()
+export class TransactionsByCustomerApplication {
+ @Inject()
+ private transactionsByCustomersTable: TransactionsByCustomersTableInjectable;
+
+ @Inject()
+ private transactionsByCustomersExport: TransactionsByCustomersExportInjectable;
+
+ @Inject()
+ private transactionsByCustomersSheet: TransactionsByCustomersSheet;
+
+ /**
+ * Retrieves the transactions by customers sheet in json format.
+ * @param {number} tenantId
+ * @param {ITransactionsByCustomersFilter} query
+ * @returns {Promise}
+ */
+ public sheet(
+ tenantId: number,
+ query: ITransactionsByCustomersFilter
+ ): Promise {
+ return this.transactionsByCustomersSheet.transactionsByCustomers(
+ tenantId,
+ query
+ );
+ }
+
+ /**
+ * Retrieves the transactions by vendors sheet in table format.
+ * @param {number} tenantId
+ * @param {ITransactionsByCustomersFilter} query
+ * @returns {Promise}
+ */
+ public table(tenantId: number, query: ITransactionsByCustomersFilter) {
+ return this.transactionsByCustomersTable.table(tenantId, query);
+ }
+
+ /**
+ * Retrieves the transactions by vendors sheet in CSV format.
+ * @param {number} tenantId
+ * @param {ITransactionsByCustomersFilter} query
+ * @returns {Promise}
+ */
+ public csv(
+ tenantId: number,
+ query: ITransactionsByCustomersFilter
+ ): Promise {
+ return this.transactionsByCustomersExport.csv(tenantId, query);
+ }
+
+ /**
+ * Retrieves the transactions by vendors sheet in XLSX format.
+ * @param {number} tenantId
+ * @param {ITransactionsByCustomersFilter} query
+ * @returns {Promise}
+ */
+ public xlsx(
+ tenantId: number,
+ query: ITransactionsByCustomersFilter
+ ): Promise {
+ return this.transactionsByCustomersExport.xlsx(tenantId, query);
+ }
+}
diff --git a/packages/server/src/services/FinancialStatements/TransactionsByCustomer/TransactionsByCustomersExportInjectable.ts b/packages/server/src/services/FinancialStatements/TransactionsByCustomer/TransactionsByCustomersExportInjectable.ts
new file mode 100644
index 000000000..d5dbffcff
--- /dev/null
+++ b/packages/server/src/services/FinancialStatements/TransactionsByCustomer/TransactionsByCustomersExportInjectable.ts
@@ -0,0 +1,46 @@
+import { Inject, Service } from 'typedi';
+import { ITransactionsByCustomersFilter } from '@/interfaces';
+import { TableSheet } from '@/lib/Xlsx/TableSheet';
+import { TransactionsByCustomersTableInjectable } from './TransactionsByCustomersTableInjectable';
+
+@Service()
+export class TransactionsByCustomersExportInjectable {
+ @Inject()
+ private transactionsByCustomerTable: TransactionsByCustomersTableInjectable;
+
+ /**
+ * Retrieves the cashflow sheet in XLSX format.
+ * @param {number} tenantId
+ * @param {ITransactionsByCustomersFilter} query
+ * @returns {Promise}
+ */
+ public async xlsx(
+ tenantId: number,
+ query: ITransactionsByCustomersFilter
+ ): Promise {
+ const table = await this.transactionsByCustomerTable.table(tenantId, query);
+
+ const tableSheet = new TableSheet(table.table);
+ const tableCsv = tableSheet.convertToXLSX();
+
+ return tableSheet.convertToBuffer(tableCsv, 'xlsx');
+ }
+
+ /**
+ * Retrieves the cashflow sheet in CSV format.
+ * @param {number} tenantId
+ * @param {ITransactionsByCustomersFilter} query
+ * @returns {Promise}
+ */
+ public async csv(
+ tenantId: number,
+ query: ITransactionsByCustomersFilter
+ ): Promise {
+ const table = await this.transactionsByCustomerTable.table(tenantId, query);
+
+ const tableSheet = new TableSheet(table.table);
+ const tableCsv = tableSheet.convertToCSV();
+
+ return tableCsv;
+ }
+}
diff --git a/packages/server/src/services/FinancialStatements/TransactionsByCustomer/TransactionsByCustomersRepository.ts b/packages/server/src/services/FinancialStatements/TransactionsByCustomer/TransactionsByCustomersRepository.ts
index fd66d8f1e..09579e2b2 100644
--- a/packages/server/src/services/FinancialStatements/TransactionsByCustomer/TransactionsByCustomersRepository.ts
+++ b/packages/server/src/services/FinancialStatements/TransactionsByCustomer/TransactionsByCustomersRepository.ts
@@ -1,16 +1,16 @@
+import { Inject } from 'typedi';
import { isEmpty, map } from 'lodash';
import { IAccount, IAccountTransaction } from '@/interfaces';
import { ACCOUNT_TYPE } from '@/data/AccountTypes';
import HasTenancyService from '@/services/Tenancy/TenancyService';
-import { Inject } from 'typedi';
export default class TransactionsByCustomersRepository {
@Inject()
- tenancy: HasTenancyService;
+ private tenancy: HasTenancyService;
/**
* Retrieve the report customers.
- * @param {number} tenantId
+ * @param {number} tenantId
* @returns {Promise}
*/
public async getCustomers(tenantId: number, customersIds?: number[]) {
diff --git a/packages/server/src/services/FinancialStatements/TransactionsByCustomer/TransactionsByCustomersService.ts b/packages/server/src/services/FinancialStatements/TransactionsByCustomer/TransactionsByCustomersService.ts
index a6f56d9fe..3fbf8cf06 100644
--- a/packages/server/src/services/FinancialStatements/TransactionsByCustomer/TransactionsByCustomersService.ts
+++ b/packages/server/src/services/FinancialStatements/TransactionsByCustomer/TransactionsByCustomersService.ts
@@ -13,23 +13,20 @@ import Ledger from '@/services/Accounting/Ledger';
import TransactionsByCustomersRepository from './TransactionsByCustomersRepository';
import { Tenant } from '@/system/models';
-export default class TransactionsByCustomersService
+export class TransactionsByCustomersSheet
implements ITransactionsByCustomersService
{
@Inject()
- tenancy: TenancyService;
-
- @Inject('logger')
- logger: any;
+ private tenancy: TenancyService;
@Inject()
- reportRepository: TransactionsByCustomersRepository;
+ private reportRepository: TransactionsByCustomersRepository;
/**
* Defaults balance sheet filter query.
* @return {ICustomerBalanceSummaryQuery}
*/
- get defaultQuery(): ITransactionsByCustomersFilter {
+ private get defaultQuery(): ITransactionsByCustomersFilter {
return {
fromDate: moment().startOf('month').format('YYYY-MM-DD'),
toDate: moment().format('YYYY-MM-DD'),
@@ -165,7 +162,6 @@ export default class TransactionsByCustomersService
return {
data: reportInstance.reportData(),
- columns: reportInstance.reportColumns(),
query: filter,
};
}
diff --git a/packages/server/src/services/FinancialStatements/TransactionsByCustomer/TransactionsByCustomersTableRows.ts b/packages/server/src/services/FinancialStatements/TransactionsByCustomer/TransactionsByCustomersTable.ts
similarity index 81%
rename from packages/server/src/services/FinancialStatements/TransactionsByCustomer/TransactionsByCustomersTableRows.ts
rename to packages/server/src/services/FinancialStatements/TransactionsByCustomer/TransactionsByCustomersTable.ts
index 5c4e1ceb3..7016cf853 100644
--- a/packages/server/src/services/FinancialStatements/TransactionsByCustomer/TransactionsByCustomersTableRows.ts
+++ b/packages/server/src/services/FinancialStatements/TransactionsByCustomer/TransactionsByCustomersTable.ts
@@ -1,6 +1,6 @@
import * as R from 'ramda';
-import { tableRowMapper, tableMapper } from 'utils';
-import { ITransactionsByCustomersCustomer, ITableRow } from '@/interfaces';
+import { tableRowMapper } from 'utils';
+import { ITransactionsByCustomersCustomer, ITableRow, ITableColumn } from '@/interfaces';
import TransactionsByContactsTableRows from '../TransactionsByContact/TransactionsByContactTableRows';
enum ROW_TYPE {
@@ -10,17 +10,14 @@ enum ROW_TYPE {
CUSTOMER = 'CUSTOMER',
}
-export default class TransactionsByCustomersTableRows extends TransactionsByContactsTableRows {
+export class TransactionsByCustomersTable extends TransactionsByContactsTableRows {
private customersTransactions: ITransactionsByCustomersCustomer[];
/**
* Constructor method.
* @param {ITransactionsByCustomersCustomer[]} customersTransactions - Customers transactions.
*/
- constructor(
- customersTransactions: ITransactionsByCustomersCustomer[],
- i18n
- ) {
+ constructor(customersTransactions: ITransactionsByCustomersCustomer[], i18n) {
super();
this.customersTransactions = customersTransactions;
this.i18n = i18n;
@@ -75,4 +72,12 @@ export default class TransactionsByCustomersTableRows extends TransactionsByCont
this.customersTransactions
);
};
+
+ /**
+ * Retrieve the table columns of transactions by customers report.
+ * @returns {ITableColumn[]}
+ */
+ public tableColumns = (): ITableColumn[] => {
+ return [];
+ }
}
diff --git a/packages/server/src/services/FinancialStatements/TransactionsByCustomer/TransactionsByCustomersTableInjectable.ts b/packages/server/src/services/FinancialStatements/TransactionsByCustomer/TransactionsByCustomersTableInjectable.ts
new file mode 100644
index 000000000..fb1c61311
--- /dev/null
+++ b/packages/server/src/services/FinancialStatements/TransactionsByCustomer/TransactionsByCustomersTableInjectable.ts
@@ -0,0 +1,44 @@
+import { Inject, Service } from 'typedi';
+import { ITransactionsByCustomersFilter, ITransactionsByCustomersTable } from '@/interfaces';
+import { TransactionsByCustomersSheet } from './TransactionsByCustomersService';
+import HasTenancyService from '@/services/Tenancy/TenancyService';
+import { TransactionsByCustomersTable } from './TransactionsByCustomersTable';
+
+@Service()
+export class TransactionsByCustomersTableInjectable {
+ @Inject()
+ private transactionsByCustomerService: TransactionsByCustomersSheet;
+
+ @Inject()
+ private tenancy: HasTenancyService;
+
+ /**
+ * Retrieves the transactions by customers sheet in table format.
+ * @param {number} tenantId
+ * @param {ITransactionsByCustomersFilter} filter
+ * @returns {Promise}
+ */
+ public async table(
+ tenantId: number,
+ filter: ITransactionsByCustomersFilter
+ ): Promise {
+ const i18n = this.tenancy.i18n(tenantId);
+
+ const customersTransactions =
+ await this.transactionsByCustomerService.transactionsByCustomers(
+ tenantId,
+ filter
+ );
+ const table = new TransactionsByCustomersTable(
+ customersTransactions.data,
+ i18n
+ );
+ return {
+ table: {
+ rows: table.tableRows(),
+ columns: table.tableColumns(),
+ },
+ query: customersTransactions.query,
+ };
+ }
+}
diff --git a/packages/server/src/services/FinancialStatements/TransactionsByVendor/TransactionsByVendor.ts b/packages/server/src/services/FinancialStatements/TransactionsByVendor/TransactionsByVendor.ts
index 5bc9276c0..500e548f7 100644
--- a/packages/server/src/services/FinancialStatements/TransactionsByVendor/TransactionsByVendor.ts
+++ b/packages/server/src/services/FinancialStatements/TransactionsByVendor/TransactionsByVendor.ts
@@ -137,11 +137,4 @@ export default class TransactionsByVendors extends TransactionsByContact {
public reportData(): ITransactionsByVendorsData {
return this.vendorsMapper(this.contacts);
}
-
- /**
- * Retrieve the report columns.
- */
- public reportColumns() {
- return [];
- }
}
diff --git a/packages/server/src/services/FinancialStatements/TransactionsByVendor/TransactionsByVendorApplication.ts b/packages/server/src/services/FinancialStatements/TransactionsByVendor/TransactionsByVendorApplication.ts
new file mode 100644
index 000000000..d8d424a30
--- /dev/null
+++ b/packages/server/src/services/FinancialStatements/TransactionsByVendor/TransactionsByVendorApplication.ts
@@ -0,0 +1,75 @@
+import { Inject, Service } from 'typedi';
+import {
+ ITransactionsByVendorTable,
+ ITransactionsByVendorsFilter,
+ ITransactionsByVendorsStatement,
+} from '@/interfaces';
+import { TransactionsByVendorExportInjectable } from './TransactionsByVendorExportInjectable';
+import { TransactionsByVendorTableInjectable } from './TransactionsByVendorTableInjectable';
+import { TransactionsByVendorsInjectable } from './TransactionsByVendorInjectable';
+
+@Service()
+export class TransactionsByVendorApplication {
+ @Inject()
+ private transactionsByVendorTable: TransactionsByVendorTableInjectable;
+
+ @Inject()
+ private transactionsByVendorExport: TransactionsByVendorExportInjectable;
+
+ @Inject()
+ private transactionsByVendorSheet: TransactionsByVendorsInjectable;
+
+ /**
+ * Retrieves the transactions by vendor in sheet format.
+ * @param {number} tenantId
+ * @param {ITransactionsByVendorsFilter} query
+ * @returns {Promise}
+ */
+ public sheet(
+ tenantId: number,
+ query: ITransactionsByVendorsFilter
+ ): Promise {
+ return this.transactionsByVendorSheet.transactionsByVendors(
+ tenantId,
+ query
+ );
+ }
+
+ /**
+ * Retrieves the transactions by vendor in table format.
+ * @param {number} tenantId
+ * @param {ITransactionsByVendorsFilter} query
+ * @returns {Promise}
+ */
+ public table(
+ tenantId: number,
+ query: ITransactionsByVendorsFilter
+ ): Promise {
+ return this.transactionsByVendorTable.table(tenantId, query);
+ }
+
+ /**
+ * Retrieves the transactions by vendor in CSV format.
+ * @param {number} tenantId
+ * @param {ITransactionsByVendorsFilter} query
+ * @returns {Promise}
+ */
+ public csv(
+ tenantId: number,
+ query: ITransactionsByVendorsFilter
+ ): Promise {
+ return this.transactionsByVendorExport.csv(tenantId, query);
+ }
+
+ /**
+ * Retrieves the transactions by vendor in XLSX format.
+ * @param {number} tenantId
+ * @param {ITransactionsByVendorsFilter} query
+ */
+ public xlsx(
+ tenantId: number,
+ query: ITransactionsByVendorsFilter
+ ): Promise {
+ return this.transactionsByVendorExport.xlsx(tenantId, query);
+ }
+}
diff --git a/packages/server/src/services/FinancialStatements/TransactionsByVendor/TransactionsByVendorExportInjectable.ts b/packages/server/src/services/FinancialStatements/TransactionsByVendor/TransactionsByVendorExportInjectable.ts
new file mode 100644
index 000000000..1d547e752
--- /dev/null
+++ b/packages/server/src/services/FinancialStatements/TransactionsByVendor/TransactionsByVendorExportInjectable.ts
@@ -0,0 +1,46 @@
+import { Inject, Service } from 'typedi';
+import { ITransactionsByVendorsFilter } from '@/interfaces';
+import { TableSheet } from '@/lib/Xlsx/TableSheet';
+import { TransactionsByVendorTableInjectable } from './TransactionsByVendorTableInjectable';
+
+@Service()
+export class TransactionsByVendorExportInjectable {
+ @Inject()
+ private transactionsByVendorTable: TransactionsByVendorTableInjectable;
+
+ /**
+ * Retrieves the cashflow sheet in XLSX format.
+ * @param {number} tenantId
+ * @param {ITransactionsByVendorsFilter} query
+ * @returns {Promise}
+ */
+ public async xlsx(
+ tenantId: number,
+ query: ITransactionsByVendorsFilter
+ ): Promise {
+ const table = await this.transactionsByVendorTable.table(tenantId, query);
+
+ const tableSheet = new TableSheet(table.table);
+ const tableCsv = tableSheet.convertToXLSX();
+
+ return tableSheet.convertToBuffer(tableCsv, 'xlsx');
+ }
+
+ /**
+ * Retrieves the cashflow sheet in CSV format.
+ * @param {number} tenantId
+ * @param {ICashFlowStatementQuery} query
+ * @returns {Promise}
+ */
+ public async csv(
+ tenantId: number,
+ query: ITransactionsByVendorsFilter
+ ): Promise {
+ const table = await this.transactionsByVendorTable.table(tenantId, query);
+
+ const tableSheet = new TableSheet(table.table);
+ const tableCsv = tableSheet.convertToCSV();
+
+ return tableCsv;
+ }
+}
diff --git a/packages/server/src/services/FinancialStatements/TransactionsByVendor/TransactionsByVendorService.ts b/packages/server/src/services/FinancialStatements/TransactionsByVendor/TransactionsByVendorInjectable.ts
similarity index 94%
rename from packages/server/src/services/FinancialStatements/TransactionsByVendor/TransactionsByVendorService.ts
rename to packages/server/src/services/FinancialStatements/TransactionsByVendor/TransactionsByVendorInjectable.ts
index c112a059a..a24041929 100644
--- a/packages/server/src/services/FinancialStatements/TransactionsByVendor/TransactionsByVendorService.ts
+++ b/packages/server/src/services/FinancialStatements/TransactionsByVendor/TransactionsByVendorInjectable.ts
@@ -1,7 +1,6 @@
import { Inject } from 'typedi';
import moment from 'moment';
import * as R from 'ramda';
-import { map } from 'lodash';
import TenancyService from '@/services/Tenancy/TenancyService';
import {
ITransactionsByVendorsService,
@@ -14,17 +13,14 @@ import Ledger from '@/services/Accounting/Ledger';
import TransactionsByVendorRepository from './TransactionsByVendorRepository';
import { Tenant } from '@/system/models';
-export default class TransactionsByVendorsService
+export class TransactionsByVendorsInjectable
implements ITransactionsByVendorsService
{
@Inject()
- tenancy: TenancyService;
-
- @Inject('logger')
- logger: any;
+ private tenancy: TenancyService;
@Inject()
- reportRepository: TransactionsByVendorRepository;
+ private reportRepository: TransactionsByVendorRepository;
/**
* Defaults balance sheet filter query.
@@ -136,7 +132,7 @@ export default class TransactionsByVendorsService
const { accountRepository } = this.tenancy.repositories(tenantId);
const i18n = this.tenancy.i18n(tenantId);
-
+
const tenant = await Tenant.query()
.findById(tenantId)
.withGraphFetched('metadata');
@@ -171,7 +167,6 @@ export default class TransactionsByVendorsService
);
return {
data: reportInstance.reportData(),
- columns: reportInstance.reportColumns(),
query: filter,
};
}
diff --git a/packages/server/src/services/FinancialStatements/TransactionsByVendor/TransactionsByVendorTableRows.ts b/packages/server/src/services/FinancialStatements/TransactionsByVendor/TransactionsByVendorTable.ts
similarity index 76%
rename from packages/server/src/services/FinancialStatements/TransactionsByVendor/TransactionsByVendorTableRows.ts
rename to packages/server/src/services/FinancialStatements/TransactionsByVendor/TransactionsByVendorTable.ts
index e37eeb8fe..14ad3c1b4 100644
--- a/packages/server/src/services/FinancialStatements/TransactionsByVendor/TransactionsByVendorTableRows.ts
+++ b/packages/server/src/services/FinancialStatements/TransactionsByVendor/TransactionsByVendorTable.ts
@@ -1,6 +1,10 @@
import * as R from 'ramda';
import { tableRowMapper } from 'utils';
-import { ITransactionsByVendorsVendor, ITableRow } from '@/interfaces';
+import {
+ ITransactionsByVendorsVendor,
+ ITableRow,
+ ITableColumn,
+} from '@/interfaces';
import TransactionsByContactsTableRows from '../TransactionsByContact/TransactionsByContactTableRows';
enum ROW_TYPE {
@@ -10,16 +14,15 @@ enum ROW_TYPE {
VENDOR = 'VENDOR',
}
-export default class TransactionsByVendorsTableRows extends TransactionsByContactsTableRows {
- vendorsTransactions: ITransactionsByVendorsVendor[];
+export class TransactionsByVendorsTable extends TransactionsByContactsTableRows {
+ private vendorsTransactions: ITransactionsByVendorsVendor[];
/**
* Constructor method.
+ * @param {ITransactionsByVendorsVendor[]} vendorsTransactions -
+ * @param {any} i18n
*/
- constructor(
- vendorsTransactions: ITransactionsByVendorsVendor[],
- i18n
- ) {
+ constructor(vendorsTransactions: ITransactionsByVendorsVendor[], i18n) {
super();
this.vendorsTransactions = vendorsTransactions;
@@ -73,4 +76,12 @@ export default class TransactionsByVendorsTableRows extends TransactionsByContac
public tableRows = (): ITableRow[] => {
return R.map(this.vendorRowsMapper)(this.vendorsTransactions);
};
+
+ /**
+ * Retrieve the table columns of transactions by vendors report.
+ * @returns {ITableColumn[]}
+ */
+ public tableColumns = (): ITableColumn[] => {
+ return [];
+ };
}
diff --git a/packages/server/src/services/FinancialStatements/TransactionsByVendor/TransactionsByVendorTableInjectable.ts b/packages/server/src/services/FinancialStatements/TransactionsByVendor/TransactionsByVendorTableInjectable.ts
new file mode 100644
index 000000000..5b42b88e7
--- /dev/null
+++ b/packages/server/src/services/FinancialStatements/TransactionsByVendor/TransactionsByVendorTableInjectable.ts
@@ -0,0 +1,44 @@
+import { Inject, Service } from 'typedi';
+import HasTenancyService from '@/services/Tenancy/TenancyService';
+import { TransactionsByVendorsTable } from './TransactionsByVendorTable';
+import {
+ ITransactionsByVendorTable,
+ ITransactionsByVendorsFilter,
+} from '@/interfaces';
+import { TransactionsByVendorsInjectable } from './TransactionsByVendorInjectable';
+
+@Service()
+export class TransactionsByVendorTableInjectable {
+ @Inject()
+ private tenancy: HasTenancyService;
+
+ @Inject()
+ private transactionsByVendor: TransactionsByVendorsInjectable;
+
+ /**
+ * Retrieves the transactions by vendor in table format.
+ * @param {number} tenantId
+ * @param {ITransactionsByReferenceQuery} query
+ * @returns {Promise}
+ */
+ public async table(
+ tenantId: number,
+ query: ITransactionsByVendorsFilter
+ ): Promise {
+ const i18n = this.tenancy.i18n(tenantId);
+
+ const sheet = await this.transactionsByVendor.transactionsByVendors(
+ tenantId,
+ query
+ );
+ const table = new TransactionsByVendorsTable(sheet.data, i18n);
+
+ return {
+ table: {
+ rows: table.tableRows(),
+ columns: table.tableColumns(),
+ },
+ query,
+ };
+ }
+}
diff --git a/packages/server/src/services/FinancialStatements/TrialBalanceSheet/TrialBalanceExportInjectable.ts b/packages/server/src/services/FinancialStatements/TrialBalanceSheet/TrialBalanceExportInjectable.ts
new file mode 100644
index 000000000..a515f1beb
--- /dev/null
+++ b/packages/server/src/services/FinancialStatements/TrialBalanceSheet/TrialBalanceExportInjectable.ts
@@ -0,0 +1,43 @@
+import { TableSheet } from '@/lib/Xlsx/TableSheet';
+import { ITrialBalanceSheetQuery } from '@/interfaces';
+import { Inject, Service } from 'typedi';
+import { TrialBalanceSheetTableInjectable } from './TrialBalanceSheetTableInjectable';
+
+@Service()
+export class TrialBalanceExportInjectable {
+ @Inject()
+ private trialBalanceSheetTable: TrialBalanceSheetTableInjectable;
+
+ /**
+ * Retrieves the trial balance sheet in XLSX format.
+ * @param {number} tenantId
+ * @param {ITrialBalanceSheetQuery} query
+ * @returns {Promise}
+ */
+ public async xlsx(tenantId: number, query: ITrialBalanceSheetQuery) {
+ const table = await this.trialBalanceSheetTable.table(tenantId, query);
+
+ const tableSheet = new TableSheet(table.table);
+ const tableCsv = tableSheet.convertToXLSX();
+
+ return tableSheet.convertToBuffer(tableCsv, 'xlsx');
+ }
+
+ /**
+ * Retrieves the trial balance sheet in CSV format.
+ * @param {number} tenantId
+ * @param {ITrialBalanceSheetQuery} query
+ * @returns {Promise}
+ */
+ public async csv(
+ tenantId: number,
+ query: ITrialBalanceSheetQuery
+ ): Promise {
+ const table = await this.trialBalanceSheetTable.table(tenantId, query);
+
+ const tableSheet = new TableSheet(table.table);
+ const tableCsv = tableSheet.convertToCSV();
+
+ return tableCsv;
+ }
+}
diff --git a/packages/server/src/services/FinancialStatements/TrialBalanceSheet/TrialBalanceSheet.ts b/packages/server/src/services/FinancialStatements/TrialBalanceSheet/TrialBalanceSheet.ts
index 980bd1dd4..38ed3a944 100644
--- a/packages/server/src/services/FinancialStatements/TrialBalanceSheet/TrialBalanceSheet.ts
+++ b/packages/server/src/services/FinancialStatements/TrialBalanceSheet/TrialBalanceSheet.ts
@@ -10,13 +10,26 @@ import {
} from '@/interfaces';
import FinancialSheet from '../FinancialSheet';
import { allPassedConditionsPass, flatToNestedArray } from 'utils';
+import { TrialBalanceSheetRepository } from './TrialBalanceSheetRepository';
export default class TrialBalanceSheet extends FinancialSheet {
- tenantId: number;
- query: ITrialBalanceSheetQuery;
- accounts: IAccount & { type: IAccountType }[];
- journalFinancial: any;
- baseCurrency: string;
+ /**
+ * Trial balance sheet query.
+ * @param {ITrialBalanceSheetQuery} query
+ */
+ private query: ITrialBalanceSheetQuery;
+
+ /**
+ * Trial balance sheet repository.
+ * @param {TrialBalanceSheetRepository}
+ */
+ private repository: TrialBalanceSheetRepository;
+
+ /**
+ * Organization base currency.
+ * @param {string}
+ */
+ private baseCurrency: string;
/**
* Constructor method.
@@ -28,20 +41,58 @@ export default class TrialBalanceSheet extends FinancialSheet {
constructor(
tenantId: number,
query: ITrialBalanceSheetQuery,
- accounts: IAccount & { type: IAccountType }[],
- journalFinancial: any,
+ repository: TrialBalanceSheetRepository,
baseCurrency: string
) {
super();
this.tenantId = tenantId;
this.query = query;
- this.accounts = accounts;
- this.journalFinancial = journalFinancial;
+ this.repository = repository;
this.numberFormat = this.query.numberFormat;
this.baseCurrency = baseCurrency;
}
+ /**
+ * Retrieves the closing credit of the given account.
+ * @param {number} accountId
+ * @returns {number}
+ */
+ public getClosingAccountCredit(accountId: number) {
+ const depsAccountsIds =
+ this.repository.accountsDepGraph.dependenciesOf(accountId);
+
+ return this.repository.totalAccountsLedger
+ .whereAccountsIds([accountId, ...depsAccountsIds])
+ .getClosingCredit();
+ }
+
+ /**
+ * Retrieves the closing debit of the given account.
+ * @param {number} accountId
+ * @returns {number}
+ */
+ public getClosingAccountDebit(accountId: number) {
+ const depsAccountsIds =
+ this.repository.accountsDepGraph.dependenciesOf(accountId);
+
+ return this.repository.totalAccountsLedger
+ .whereAccountsIds([accountId, ...depsAccountsIds])
+ .getClosingDebit();
+ }
+
+ /**
+ * Retrieves the closing total of the given account.
+ * @param {number} accountId
+ * @returns {number}
+ */
+ public getClosingAccountTotal(accountId: number) {
+ const credit = this.getClosingAccountCredit(accountId);
+ const debit = this.getClosingAccountDebit(accountId);
+
+ return debit - credit;
+ }
+
/**
* Account mapper.
* @param {IAccount} account
@@ -50,23 +101,28 @@ export default class TrialBalanceSheet extends FinancialSheet {
private accountTransformer = (
account: IAccount & { type: IAccountType }
): ITrialBalanceAccount => {
- const trial = this.journalFinancial.getTrialBalanceWithDepands(account.id);
+ const debit = this.getClosingAccountDebit(account.id);
+ const credit = this.getClosingAccountCredit(account.id);
+ const balance = this.getClosingAccountTotal(account.id);
return {
id: account.id,
parentAccountId: account.parentAccountId,
name: account.name,
+ formattedName: account.code
+ ? `${account.name} - ${account.code}`
+ : `${account.name}`,
code: account.code,
accountNormal: account.accountNormal,
- credit: trial.credit,
- debit: trial.debit,
- balance: trial.balance,
+ credit,
+ debit,
+ balance,
currencyCode: this.baseCurrency,
- formattedCredit: this.formatNumber(trial.credit),
- formattedDebit: this.formatNumber(trial.debit),
- formattedBalance: this.formatNumber(trial.balance),
+ formattedCredit: this.formatNumber(credit),
+ formattedDebit: this.formatNumber(debit),
+ formattedBalance: this.formatNumber(balance),
};
};
@@ -117,10 +173,7 @@ export default class TrialBalanceSheet extends FinancialSheet {
private filterNoneTransactions = (
accountNode: ITrialBalanceAccount
): boolean => {
- const entries = this.journalFinancial.getAccountEntriesWithDepents(
- accountNode.id
- );
- return entries.length > 0;
+ return false === this.repository.totalAccountsLedger.isEmpty();
};
/**
@@ -200,11 +253,11 @@ export default class TrialBalanceSheet extends FinancialSheet {
*/
public reportData(): ITrialBalanceSheetData {
// Don't return noting if the journal has no transactions.
- if (this.journalFinancial.isEmpty()) {
+ if (this.repository.totalAccountsLedger.isEmpty()) {
return null;
}
// Retrieve accounts nodes.
- const accounts = this.accountsSection(this.accounts);
+ const accounts = this.accountsSection(this.repository.accounts);
// Retrieve account node.
const total = this.tatalSection(accounts);
diff --git a/packages/server/src/services/FinancialStatements/TrialBalanceSheet/TrialBalanceSheetApplication.ts b/packages/server/src/services/FinancialStatements/TrialBalanceSheet/TrialBalanceSheetApplication.ts
new file mode 100644
index 000000000..a771c8f15
--- /dev/null
+++ b/packages/server/src/services/FinancialStatements/TrialBalanceSheet/TrialBalanceSheetApplication.ts
@@ -0,0 +1,60 @@
+import { Inject, Service } from 'typedi';
+import { TrialBalanceSheetTableInjectable } from './TrialBalanceSheetTableInjectable';
+import { TrialBalanceExportInjectable } from './TrialBalanceExportInjectable';
+import { ITrialBalanceSheetQuery, ITrialBalanceStatement } from '@/interfaces';
+import TrialBalanceSheetService from './TrialBalanceSheetInjectable';
+
+@Service()
+export class TrialBalanceSheetApplication {
+ @Inject()
+ private sheetService: TrialBalanceSheetService;
+
+ @Inject()
+ private tablable: TrialBalanceSheetTableInjectable;
+
+ @Inject()
+ private exportable: TrialBalanceExportInjectable;
+
+ /**
+ * Retrieves the trial balance sheet.
+ * @param {number} tenantId
+ * @param {ITrialBalanceSheetQuery} query
+ * @returns {Promise}
+ */
+ public sheet(
+ tenantId: number,
+ query: ITrialBalanceSheetQuery
+ ): Promise {
+ return this.sheetService.trialBalanceSheet(tenantId, query);
+ }
+
+ /**
+ * Retrieves the trial balance sheet in table format.
+ * @param {number} tenantId
+ * @param {ITrialBalanceSheetQuery} query
+ * @returns {Promise}
+ */
+ public table(tenantId: number, query: ITrialBalanceSheetQuery) {
+ return this.tablable.table(tenantId, query);
+ }
+
+ /**
+ * Retrieve the trial balance sheet in CSV format.
+ * @param {number} tenantId
+ * @param {ITrialBalanceSheetQuery} query
+ * @returns {Promise}
+ */
+ public csv(tenantId: number, query: ITrialBalanceSheetQuery) {
+ return this.exportable.csv(tenantId, query);
+ }
+
+ /**
+ * Retrieve the trial balance sheet in XLSX format.
+ * @param {number} tenantId
+ * @param {ITrialBalanceSheetQuery} query
+ * @returns {Promise}
+ */
+ public async xlsx(tenantId: number, query: ITrialBalanceSheetQuery) {
+ return this.exportable.xlsx(tenantId, query);
+ }
+}
diff --git a/packages/server/src/services/FinancialStatements/TrialBalanceSheet/TrialBalanceSheetService.ts b/packages/server/src/services/FinancialStatements/TrialBalanceSheet/TrialBalanceSheetInjectable.ts
similarity index 65%
rename from packages/server/src/services/FinancialStatements/TrialBalanceSheet/TrialBalanceSheetService.ts
rename to packages/server/src/services/FinancialStatements/TrialBalanceSheet/TrialBalanceSheetInjectable.ts
index f22624a3e..bc880ec99 100644
--- a/packages/server/src/services/FinancialStatements/TrialBalanceSheet/TrialBalanceSheetService.ts
+++ b/packages/server/src/services/FinancialStatements/TrialBalanceSheet/TrialBalanceSheetInjectable.ts
@@ -1,13 +1,17 @@
import { Service, Inject } from 'typedi';
import moment from 'moment';
import TenancyService from '@/services/Tenancy/TenancyService';
-import Journal from '@/services/Accounting/JournalPoster';
-import { ITrialBalanceSheetMeta, ITrialBalanceSheetQuery, ITrialBalanceStatement } from '@/interfaces';
+import {
+ ITrialBalanceSheetMeta,
+ ITrialBalanceSheetQuery,
+ ITrialBalanceStatement,
+} from '@/interfaces';
import TrialBalanceSheet from './TrialBalanceSheet';
import FinancialSheet from '../FinancialSheet';
import InventoryService from '@/services/Inventory/Inventory';
import { parseBoolean } from 'utils';
import { Tenant } from '@/system/models';
+import { TrialBalanceSheetRepository } from './TrialBalanceSheetRepository';
@Service()
export default class TrialBalanceSheetService extends FinancialSheet {
@@ -24,7 +28,7 @@ export default class TrialBalanceSheetService extends FinancialSheet {
* Defaults trial balance sheet filter query.
* @return {IBalanceSheetQuery}
*/
- get defaultQuery(): ITrialBalanceSheetQuery {
+ private get defaultQuery(): ITrialBalanceSheetQuery {
return {
fromDate: moment().startOf('year').format('YYYY-MM-DD'),
toDate: moment().format('YYYY-MM-DD'),
@@ -48,12 +52,11 @@ export default class TrialBalanceSheetService extends FinancialSheet {
* @param {number} tenantId - Tenant id.
* @returns {ITrialBalanceSheetMeta}
*/
- reportMetadata(tenantId: number): ITrialBalanceSheetMeta {
+ private reportMetadata(tenantId: number): ITrialBalanceSheetMeta {
const settings = this.tenancy.settings(tenantId);
- const isCostComputeRunning = this.inventoryService.isItemsCostComputeRunning(
- tenantId
- );
+ const isCostComputeRunning =
+ this.inventoryService.isItemsCostComputeRunning(tenantId);
const organizationName = settings.get({
group: 'organization',
key: 'name',
@@ -72,10 +75,8 @@ export default class TrialBalanceSheetService extends FinancialSheet {
/**
* Retrieve trial balance sheet statement.
- * -------------
* @param {number} tenantId
* @param {IBalanceSheetQuery} query
- *
* @return {IBalanceSheetStatement}
*/
public async trialBalanceSheet(
@@ -86,43 +87,26 @@ export default class TrialBalanceSheetService extends FinancialSheet {
...this.defaultQuery,
...query,
};
- const {
- accountRepository,
- transactionsRepository,
- } = this.tenancy.repositories(tenantId);
-
const tenant = await Tenant.query()
.findById(tenantId)
.withGraphFetched('metadata');
- this.logger.info('[trial_balance_sheet] trying to calcualte the report.', {
- tenantId,
- filter,
- });
- // Retrieve all accounts on the storage.
- const accounts = await accountRepository.all();
- const accountsGraph = await accountRepository.getDependencyGraph();
+ const models = this.tenancy.models(tenantId);
+ const repos = this.tenancy.repositories(tenantId);
- // Retrieve all journal transactions based on the given query.
- const transactions = await transactionsRepository.journal({
- fromDate: query.fromDate,
- toDate: query.toDate,
- sumationCreditDebit: true,
- branchesIds: query.branchesIds
- });
- // Transform transactions array to journal collection.
- const transactionsJournal = Journal.fromTransactions(
- transactions,
- tenantId,
- accountsGraph
+ const trialBalanceSheetRepos = new TrialBalanceSheetRepository(
+ models,
+ repos,
+ filter
);
+ await trialBalanceSheetRepos.asyncInitialize();
+
// Trial balance report instance.
const trialBalanceInstance = new TrialBalanceSheet(
tenantId,
filter,
- accounts,
- transactionsJournal,
- tenant.metadata.baseCurrency,
+ trialBalanceSheetRepos,
+ tenant.metadata.baseCurrency
);
// Trial balance sheet data.
const trialBalanceSheetData = trialBalanceInstance.reportData();
diff --git a/packages/server/src/services/FinancialStatements/TrialBalanceSheet/TrialBalanceSheetRepository.ts b/packages/server/src/services/FinancialStatements/TrialBalanceSheet/TrialBalanceSheetRepository.ts
new file mode 100644
index 000000000..1c37edd4d
--- /dev/null
+++ b/packages/server/src/services/FinancialStatements/TrialBalanceSheet/TrialBalanceSheetRepository.ts
@@ -0,0 +1,105 @@
+import { ITrialBalanceSheetQuery } from '@/interfaces';
+import Ledger from '@/services/Accounting/Ledger';
+import { Knex } from 'knex';
+import { isEmpty } from 'lodash';
+import { Service } from 'typedi';
+
+@Service()
+export class TrialBalanceSheetRepository {
+ private query: ITrialBalanceSheetQuery;
+ private models: any;
+ public accounts: any;
+ public accountsDepGraph;
+
+ /**
+ * Total closing accounts ledger.
+ * @param {Ledger}
+ */
+ public totalAccountsLedger: Ledger;
+
+ /**
+ * Constructor method.
+ * @param {number} tenantId
+ * @param {IBalanceSheetQuery} query
+ */
+ constructor(models: any, repos: any, query: ITrialBalanceSheetQuery) {
+ this.query = query;
+ this.repos = repos;
+ this.models = models;
+ }
+
+ /**
+ * Async initialize.
+ * @returns {Promise}
+ */
+ public asyncInitialize = async () => {
+ await this.initAccounts();
+ await this.initAccountsClosingTotalLedger();
+ };
+
+ // ----------------------------
+ // # Accounts
+ // ----------------------------
+ /**
+ * Initialize accounts.
+ * @returns {Promise}
+ */
+ public initAccounts = async () => {
+ const accounts = await this.getAccounts();
+ const accountsDepGraph =
+ await this.repos.accountRepository.getDependencyGraph();
+
+ this.accountsDepGraph = accountsDepGraph;
+ this.accounts = accounts;
+ };
+
+ /**
+ * Initialize all accounts closing total ledger.
+ * @return {Promise}
+ */
+ public initAccountsClosingTotalLedger = async (): Promise => {
+ const totalByAccounts = await this.closingAccountsTotal(this.query.toDate);
+
+ this.totalAccountsLedger = Ledger.fromTransactions(totalByAccounts);
+ };
+
+ /**
+ * Retrieve accounts of the report.
+ * @return {Promise}
+ */
+ private getAccounts = () => {
+ const { Account } = this.models;
+
+ return Account.query();
+ };
+
+ /**
+ * Retrieve the opening balance transactions of the report.
+ * @param {Date|string} openingDate -
+ */
+ public closingAccountsTotal = async (openingDate: Date | string) => {
+ const { AccountTransaction } = this.models;
+
+ return AccountTransaction.query().onBuild((query) => {
+ query.sum('credit as credit');
+ query.sum('debit as debit');
+ query.groupBy('accountId');
+ query.select(['accountId']);
+
+ query.modify('filterDateRange', null, openingDate);
+ query.withGraphFetched('account');
+
+ this.commonFilterBranchesQuery(query);
+ });
+ };
+
+ /**
+ * Common branches filter query.
+ * @param {Knex.QueryBuilder} query
+ */
+ private commonFilterBranchesQuery = (query: Knex.QueryBuilder) => {
+ if (!isEmpty(this.query.branchesIds)) {
+ query.modify('filterByBranches', this.query.branchesIds);
+ }
+ };
+}
diff --git a/packages/server/src/services/FinancialStatements/TrialBalanceSheet/TrialBalanceSheetTable.ts b/packages/server/src/services/FinancialStatements/TrialBalanceSheet/TrialBalanceSheetTable.ts
new file mode 100644
index 000000000..1cbb2e7e6
--- /dev/null
+++ b/packages/server/src/services/FinancialStatements/TrialBalanceSheet/TrialBalanceSheetTable.ts
@@ -0,0 +1,146 @@
+import * as R from 'ramda';
+import FinancialSheet from '../FinancialSheet';
+import { FinancialTable } from '../FinancialTable';
+import {
+ IBalanceSheetStatementData,
+ ITableColumn,
+ ITableColumnAccessor,
+ ITableRow,
+ ITrialBalanceAccount,
+ ITrialBalanceSheetData,
+ ITrialBalanceSheetQuery,
+ ITrialBalanceTotal,
+} from '@/interfaces';
+import { tableRowMapper } from '@/utils';
+import { IROW_TYPE } from '../BalanceSheet/constants';
+import { FinancialSheetStructure } from '../FinancialSheetStructure';
+
+export class TrialBalanceSheetTable extends R.compose(
+ FinancialTable,
+ FinancialSheetStructure
+)(FinancialSheet) {
+ /**
+ * @param {ITrialBalanceSheetData}
+ */
+ public data: ITrialBalanceSheetData;
+
+ /**
+ * Balance sheet query.
+ * @param {ITrialBalanceSheetQuery}
+ */
+ public query: ITrialBalanceSheetQuery;
+
+ /**
+ * Constructor method.
+ * @param {IBalanceSheetStatementData} reportData -
+ * @param {ITrialBalanceSheetQuery} query -
+ */
+ constructor(
+ data: ITrialBalanceSheetData,
+ query: ITrialBalanceSheetQuery,
+ i18n: any
+ ) {
+ super();
+
+ this.data = data;
+ this.query = query;
+ this.i18n = i18n;
+ }
+
+ /**
+ * Retrieve the common columns for all report nodes.
+ * @param {ITableColumnAccessor[]}
+ */
+ private commonColumnsAccessors = (): ITableColumnAccessor[] => {
+ return [
+ { key: 'account', accessor: 'formattedName' },
+ { key: 'debit', accessor: 'formattedDebit' },
+ { key: 'credit', accessor: 'formattedCredit' },
+ { key: 'total', accessor: 'formattedBalance' },
+ ];
+ };
+
+ /**
+ * Maps the account node to table row.
+ * @param {ITrialBalanceAccount} node -
+ * @returns {ITableRow}
+ */
+ private accountNodeTableRowsMapper = (
+ node: ITrialBalanceAccount
+ ): ITableRow => {
+ const columns = this.commonColumnsAccessors();
+ const meta = {
+ rowTypes: [IROW_TYPE.ACCOUNT],
+ id: node.id,
+ };
+ return tableRowMapper(node, columns, meta);
+ };
+
+ /**
+ * Maps the total node to table row.
+ * @param {ITrialBalanceTotal} node -
+ * @returns {ITableRow}
+ */
+ private totalNodeTableRowsMapper = (node: ITrialBalanceTotal): ITableRow => {
+ const columns = this.commonColumnsAccessors();
+ const meta = {
+ rowTypes: [IROW_TYPE.TOTAL],
+ id: node.id,
+ };
+ return tableRowMapper(node, columns, meta);
+ };
+
+ /**
+ * Mappes the given report sections to table rows.
+ * @param {IBalanceSheetDataNode[]} nodes -
+ * @return {ITableRow}
+ */
+ private accountsToTableRowsMap = (
+ nodes: ITrialBalanceAccount[]
+ ): ITableRow[] => {
+ return this.mapNodesDeep(nodes, this.accountNodeTableRowsMapper);
+ };
+
+ /**
+ * Retrieves the accounts table rows of the given report data.
+ * @returns {ITableRow[]}
+ */
+ private accountsTableRows = (): ITableRow[] => {
+ return this.accountsToTableRowsMap(this.data.accounts);
+ };
+
+ /**
+ * Maps the given total node to table row.
+ * @returns {ITableRow}
+ */
+ private totalTableRow = (): ITableRow => {
+ return this.totalNodeTableRowsMapper(this.data.total);
+ };
+
+ /**
+ * Retrieves the table rows.
+ * @returns {ITableRow[]}
+ */
+ public tableRows = (): ITableRow[] => {
+ return R.compose(
+ R.append(this.totalTableRow()),
+ R.concat(this.accountsTableRows())
+ )([]);
+ };
+
+ /**
+ * Retrrieves the table columns.
+ * @returns {ITableColumn[]}
+ */
+ public tableColumns = (): ITableColumn[] => {
+ return R.compose(
+ this.tableColumnsCellIndexing,
+ R.concat([
+ { key: 'account_name', label: 'Account' },
+ { key: 'debit', label: 'Debit' },
+ { key: 'credit', label: 'Credit' },
+ { key: 'total', label: 'Total' },
+ ])
+ )([]);
+ };
+}
diff --git a/packages/server/src/services/FinancialStatements/TrialBalanceSheet/TrialBalanceSheetTableInjectable.ts b/packages/server/src/services/FinancialStatements/TrialBalanceSheet/TrialBalanceSheetTableInjectable.ts
new file mode 100644
index 000000000..e62a1dde2
--- /dev/null
+++ b/packages/server/src/services/FinancialStatements/TrialBalanceSheet/TrialBalanceSheetTableInjectable.ts
@@ -0,0 +1,33 @@
+import { Inject, Service } from 'typedi';
+import { ITrialBalanceSheetQuery, ITrialBalanceSheetTable } from '@/interfaces';
+import { TrialBalanceSheetTable } from './TrialBalanceSheetTable';
+import TrialBalanceSheetService from './TrialBalanceSheetInjectable';
+
+@Service()
+export class TrialBalanceSheetTableInjectable {
+ @Inject()
+ private sheet: TrialBalanceSheetService;
+
+ /**
+ * Retrieves the trial balance sheet table.
+ * @param {number} tenantId
+ * @param {ITrialBalanceSheetQuery} query
+ * @returns {Promise}
+ */
+ public async table(
+ tenantId: number,
+ query: ITrialBalanceSheetQuery
+ ): Promise {
+ const trialBalance = await this.sheet.trialBalanceSheet(tenantId, query);
+ const table = new TrialBalanceSheetTable(trialBalance.data, query, {});
+
+ return {
+ table: {
+ columns: table.tableColumns(),
+ rows: table.tableRows(),
+ },
+ meta: trialBalance.meta,
+ query: trialBalance.query,
+ };
+ }
+}
diff --git a/packages/server/src/services/FinancialStatements/TrialBalanceSheet/_constants.ts b/packages/server/src/services/FinancialStatements/TrialBalanceSheet/_constants.ts
new file mode 100644
index 000000000..91e8c595f
--- /dev/null
+++ b/packages/server/src/services/FinancialStatements/TrialBalanceSheet/_constants.ts
@@ -0,0 +1,5 @@
+
+export enum IROW_TYPE {
+ ACCOUNT = 'ACCOUNT',
+ TOTAL = 'TOTAL',
+}
\ No newline at end of file
diff --git a/packages/server/src/services/FinancialStatements/VendorBalanceSummary/VendorBalanceSummary.ts b/packages/server/src/services/FinancialStatements/VendorBalanceSummary/VendorBalanceSummary.ts
index 1d84d593f..2e5e09aa4 100644
--- a/packages/server/src/services/FinancialStatements/VendorBalanceSummary/VendorBalanceSummary.ts
+++ b/packages/server/src/services/FinancialStatements/VendorBalanceSummary/VendorBalanceSummary.ts
@@ -101,8 +101,4 @@ export class VendorBalanceSummaryReport extends ContactBalanceSummaryReport {
return { vendors, total };
}
-
- reportColumns() {
- return [];
- }
}
diff --git a/packages/server/src/services/FinancialStatements/VendorBalanceSummary/VendorBalanceSummaryApplication.ts b/packages/server/src/services/FinancialStatements/VendorBalanceSummary/VendorBalanceSummaryApplication.ts
new file mode 100644
index 000000000..5fe4bc74d
--- /dev/null
+++ b/packages/server/src/services/FinancialStatements/VendorBalanceSummary/VendorBalanceSummaryApplication.ts
@@ -0,0 +1,62 @@
+import { Inject, Service } from 'typedi';
+import { IVendorBalanceSummaryQuery } from '@/interfaces';
+import { VendorBalanceSummaryTableInjectable } from './VendorBalanceSummaryTableInjectable';
+import { VendorBalanceSummaryExportInjectable } from './VendorBalanceSummaryExportInjectable';
+import { VendorBalanceSummaryService } from './VendorBalanceSummaryService';
+
+@Service()
+export class VendorBalanceSummaryApplication {
+ @Inject()
+ private vendorBalanceSummaryTable: VendorBalanceSummaryTableInjectable;
+
+ @Inject()
+ private vendorBalanceSummarySheet: VendorBalanceSummaryService;
+
+ @Inject()
+ private vendorBalanceSummaryExport: VendorBalanceSummaryExportInjectable;
+
+ /**
+ * Retrieves the vendor balance summary sheet in sheet format.
+ * @param {number} tenantId
+ * @param {IVendorBalanceSummaryQuery} query
+ */
+ public sheet(tenantId: number, query: IVendorBalanceSummaryQuery) {
+ return this.vendorBalanceSummarySheet.vendorBalanceSummary(tenantId, query);
+ }
+
+ /**
+ * Retrieves the vendor balance summary sheet in table format.
+ * @param {number} tenantId
+ * @param {IVendorBalanceSummaryQuery} query
+ * @returns {}
+ */
+ public table(tenantId: number, query: IVendorBalanceSummaryQuery) {
+ return this.vendorBalanceSummaryTable.table(tenantId, query);
+ }
+
+ /**
+ * Retrieves the vendor balance summary sheet in xlsx format.
+ * @param {number} tenantId
+ * @param {IVendorBalanceSummaryQuery} query
+ * @returns {Promise}
+ */
+ public xlsx(
+ tenantId: number,
+ query: IVendorBalanceSummaryQuery
+ ): Promise {
+ return this.vendorBalanceSummaryExport.xlsx(tenantId, query);
+ }
+
+ /**
+ * Retrieves the vendor balance summary sheet in csv format.
+ * @param {number} tenantId
+ * @param {IVendorBalanceSummaryQuery} query
+ * @returns {Promise}
+ */
+ public csv(
+ tenantId: number,
+ query: IVendorBalanceSummaryQuery
+ ): Promise {
+ return this.vendorBalanceSummaryExport.csv(tenantId, query);
+ }
+}
diff --git a/packages/server/src/services/FinancialStatements/VendorBalanceSummary/VendorBalanceSummaryExportInjectable.ts b/packages/server/src/services/FinancialStatements/VendorBalanceSummary/VendorBalanceSummaryExportInjectable.ts
new file mode 100644
index 000000000..ba278f88d
--- /dev/null
+++ b/packages/server/src/services/FinancialStatements/VendorBalanceSummary/VendorBalanceSummaryExportInjectable.ts
@@ -0,0 +1,43 @@
+import { Inject, Service } from 'typedi';
+import { IVendorBalanceSummaryQuery } from '@/interfaces';
+import { VendorBalanceSummaryTableInjectable } from './VendorBalanceSummaryTableInjectable';
+import { TableSheet } from '@/lib/Xlsx/TableSheet';
+
+@Service()
+export class VendorBalanceSummaryExportInjectable {
+ @Inject()
+ private customerBalanceSummaryTable: VendorBalanceSummaryTableInjectable;
+
+ /**
+ * Retrieves the vendor balance summary sheet in XLSX format.
+ * @param {number} tenantId
+ * @param {IVendorBalanceSummaryQuery} query
+ * @returns {Promise}
+ */
+ public async xlsx(tenantId: number, query: IVendorBalanceSummaryQuery) {
+ const table = await this.customerBalanceSummaryTable.table(tenantId, query);
+
+ const tableSheet = new TableSheet(table.table);
+ const tableCsv = tableSheet.convertToXLSX();
+
+ return tableSheet.convertToBuffer(tableCsv, 'xlsx');
+ }
+
+ /**
+ * Retrieves the vendor balance summary sheet in CSV format.
+ * @param {number} tenantId
+ * @param {IVendorBalanceSummaryQuery} query
+ * @returns {Promise}
+ */
+ public async csv(
+ tenantId: number,
+ query: IVendorBalanceSummaryQuery
+ ): Promise {
+ const table = await this.customerBalanceSummaryTable.table(tenantId, query);
+
+ const tableSheet = new TableSheet(table.table);
+ const tableCsv = tableSheet.convertToCSV();
+
+ return tableCsv;
+ }
+}
diff --git a/packages/server/src/services/FinancialStatements/VendorBalanceSummary/VendorBalanceSummaryRepository.ts b/packages/server/src/services/FinancialStatements/VendorBalanceSummary/VendorBalanceSummaryRepository.ts
index a8d67089d..721291b7d 100644
--- a/packages/server/src/services/FinancialStatements/VendorBalanceSummary/VendorBalanceSummaryRepository.ts
+++ b/packages/server/src/services/FinancialStatements/VendorBalanceSummary/VendorBalanceSummaryRepository.ts
@@ -7,7 +7,7 @@ import { ACCOUNT_TYPE } from '@/data/AccountTypes';
@Service()
export default class VendorBalanceSummaryRepository {
@Inject()
- tenancy: HasTenancyService;
+ private tenancy: HasTenancyService;
/**
* Retrieve the report vendors.
diff --git a/packages/server/src/services/FinancialStatements/VendorBalanceSummary/VendorBalanceSummaryService.ts b/packages/server/src/services/FinancialStatements/VendorBalanceSummary/VendorBalanceSummaryService.ts
index 82dc0475d..b1a361b87 100644
--- a/packages/server/src/services/FinancialStatements/VendorBalanceSummary/VendorBalanceSummaryService.ts
+++ b/packages/server/src/services/FinancialStatements/VendorBalanceSummary/VendorBalanceSummaryService.ts
@@ -1,10 +1,8 @@
import { Inject } from 'typedi';
import moment from 'moment';
-import { map } from 'lodash';
import * as R from 'ramda';
import TenancyService from '@/services/Tenancy/TenancyService';
import {
- IVendor,
IVendorBalanceSummaryService,
IVendorBalanceSummaryQuery,
IVendorBalanceSummaryStatement,
@@ -15,15 +13,12 @@ import Ledger from '@/services/Accounting/Ledger';
import VendorBalanceSummaryRepository from './VendorBalanceSummaryRepository';
import { Tenant } from '@/system/models';
-export default class VendorBalanceSummaryService
+export class VendorBalanceSummaryService
implements IVendorBalanceSummaryService
{
@Inject()
tenancy: TenancyService;
- @Inject('logger')
- logger: any;
-
@Inject()
reportRepo: VendorBalanceSummaryRepository;
@@ -31,7 +26,7 @@ export default class VendorBalanceSummaryService
* Defaults balance sheet filter query.
* @return {IVendorBalanceSummaryQuery}
*/
- get defaultQuery(): IVendorBalanceSummaryQuery {
+ private get defaultQuery(): IVendorBalanceSummaryQuery {
return {
asDate: moment().format('YYYY-MM-DD'),
numberFormat: {
@@ -72,7 +67,7 @@ export default class VendorBalanceSummaryService
* @param {IVendorBalanceSummaryQuery} query -
* @return {Promise}
*/
- async vendorBalanceSummary(
+ public async vendorBalanceSummary(
tenantId: number,
query: IVendorBalanceSummaryQuery
): Promise {
@@ -81,13 +76,7 @@ export default class VendorBalanceSummaryService
.withGraphFetched('metadata');
const filter = { ...this.defaultQuery, ...query };
- this.logger.info(
- '[customer_balance_summary] trying to calculate the report.',
- {
- filter,
- tenantId,
- }
- );
+
// Retrieve the vendors transactions.
const vendorsEntries = await this.getReportVendorsEntries(
tenantId,
@@ -111,7 +100,6 @@ export default class VendorBalanceSummaryService
return {
data: reportInstance.reportData(),
- columns: reportInstance.reportColumns(),
query: filter,
};
}
diff --git a/packages/server/src/services/FinancialStatements/VendorBalanceSummary/VendorBalanceSummaryTableInjectable.ts b/packages/server/src/services/FinancialStatements/VendorBalanceSummary/VendorBalanceSummaryTableInjectable.ts
new file mode 100644
index 000000000..aec97e6f1
--- /dev/null
+++ b/packages/server/src/services/FinancialStatements/VendorBalanceSummary/VendorBalanceSummaryTableInjectable.ts
@@ -0,0 +1,44 @@
+import {
+ IVendorBalanceSummaryQuery,
+ IVendorBalanceSummaryTable,
+} from '@/interfaces';
+import HasTenancyService from '@/services/Tenancy/TenancyService';
+import { Inject, Service } from 'typedi';
+import { VendorBalanceSummaryTable } from './VendorBalanceSummaryTableRows';
+import { VendorBalanceSummaryService } from './VendorBalanceSummaryService';
+
+@Service()
+export class VendorBalanceSummaryTableInjectable {
+ @Inject()
+ private tenancy: HasTenancyService;
+
+ @Inject()
+ private vendorBalanceSummarySheet: VendorBalanceSummaryService;
+
+ /**
+ * Retrieves the vendor balance summary sheet in table format.
+ * @param {number} tenantId
+ * @param {IVendorBalanceSummaryQuery} query
+ * @returns {Promise}
+ */
+ public async table(
+ tenantId: number,
+ query: IVendorBalanceSummaryQuery
+ ): Promise {
+ const i18n = this.tenancy.i18n(tenantId);
+
+ const { data } = await this.vendorBalanceSummarySheet.vendorBalanceSummary(
+ tenantId,
+ query
+ );
+ const table = new VendorBalanceSummaryTable(data, query, i18n);
+
+ return {
+ table: {
+ columns: table.tableColumns(),
+ rows: table.tableRows(),
+ },
+ query,
+ };
+ }
+}
diff --git a/packages/server/src/services/FinancialStatements/VendorBalanceSummary/VendorBalanceSummaryTableRows.ts b/packages/server/src/services/FinancialStatements/VendorBalanceSummary/VendorBalanceSummaryTableRows.ts
index d65ced56e..2095ea087 100644
--- a/packages/server/src/services/FinancialStatements/VendorBalanceSummary/VendorBalanceSummaryTableRows.ts
+++ b/packages/server/src/services/FinancialStatements/VendorBalanceSummary/VendorBalanceSummaryTableRows.ts
@@ -15,7 +15,7 @@ enum TABLE_ROWS_TYPES {
TOTAL = 'TOTAL',
}
-export default class VendorBalanceSummaryTable {
+export class VendorBalanceSummaryTable {
i18n: any;
report: IVendorBalanceSummaryData;
query: IVendorBalanceSummaryQuery;
diff --git a/packages/server/src/services/MailNotification/ContactMailNotification.ts b/packages/server/src/services/MailNotification/ContactMailNotification.ts
new file mode 100644
index 000000000..e1e733a79
--- /dev/null
+++ b/packages/server/src/services/MailNotification/ContactMailNotification.ts
@@ -0,0 +1,106 @@
+import { Inject, Service } from 'typedi';
+import { CommonMailOptions } from '@/interfaces';
+import HasTenancyService from '@/services/Tenancy/TenancyService';
+import { MailTenancy } from '@/services/MailTenancy/MailTenancy';
+import { formatSmsMessage } from '@/utils';
+import { Tenant } from '@/system/models';
+
+@Service()
+export class ContactMailNotification {
+ @Inject()
+ private mailTenancy: MailTenancy;
+
+ @Inject()
+ private tenancy: HasTenancyService;
+
+ /**
+ * Parses the default message options.
+ * @param {number} tenantId -
+ * @param {number} invoiceId -
+ * @param {string} subject -
+ * @param {string} body -
+ * @returns {Promise}
+ */
+ public async getDefaultMailOptions(
+ tenantId: number,
+ contactId: number,
+ subject: string = '',
+ body: string = ''
+ ): Promise {
+ const { Customer } = this.tenancy.models(tenantId);
+ const contact = await Customer.query()
+ .findById(contactId)
+ .throwIfNotFound();
+
+ const toAddresses = contact.contactAddresses;
+ const fromAddresses = await this.mailTenancy.senders(tenantId);
+
+ const toAddress = toAddresses.find((a) => a.primary);
+ const fromAddress = fromAddresses.find((a) => a.primary);
+
+ const to = toAddress?.mail || '';
+ const from = fromAddress?.mail || '';
+
+ return {
+ subject,
+ body,
+ to,
+ from,
+ fromAddresses,
+ toAddresses,
+ };
+ }
+
+ /**
+ * Retrieves the mail options of the given contact.
+ * @param {number} tenantId - Tenant id.
+ * @param {number} invoiceId - Invoice id.
+ * @param {string} defaultSubject - Default subject text.
+ * @param {string} defaultBody - Default body text.
+ * @returns {Promise}
+ */
+ public async getMailOptions(
+ tenantId: number,
+ contactId: number,
+ defaultSubject?: string,
+ defaultBody?: string,
+ formatterData?: Record
+ ): Promise {
+ const mailOpts = await this.getDefaultMailOptions(
+ tenantId,
+ contactId,
+ defaultSubject,
+ defaultBody
+ );
+ const commonFormatArgs = await this.getCommonFormatArgs(tenantId);
+ const formatArgs = {
+ ...commonFormatArgs,
+ ...formatterData,
+ };
+ const subject = formatSmsMessage(mailOpts.subject, formatArgs);
+ const body = formatSmsMessage(mailOpts.body, formatArgs);
+
+ return {
+ ...mailOpts,
+ subject,
+ body,
+ };
+ }
+
+ /**
+ * Retrieves the common format args.
+ * @param {number} tenantId
+ * @returns {Promise>}
+ */
+ public async getCommonFormatArgs(
+ tenantId: number
+ ): Promise> {
+ const organization = await Tenant.query()
+ .findById(tenantId)
+ .withGraphFetched('metadata');
+
+ return {
+ CompanyName: organization.metadata.name,
+ };
+ }
+}
diff --git a/packages/server/src/services/MailNotification/constants.ts b/packages/server/src/services/MailNotification/constants.ts
new file mode 100644
index 000000000..95b720d70
--- /dev/null
+++ b/packages/server/src/services/MailNotification/constants.ts
@@ -0,0 +1,6 @@
+export const ERRORS = {
+ MAIL_FROM_NOT_FOUND: 'Mail from address not found',
+ MAIL_TO_NOT_FOUND: 'Mail to address not found',
+ MAIL_SUBJECT_NOT_FOUND: 'Mail subject not found',
+ MAIL_BODY_NOT_FOUND: 'Mail body not found',
+};
diff --git a/packages/server/src/services/MailNotification/utils.ts b/packages/server/src/services/MailNotification/utils.ts
new file mode 100644
index 000000000..b9e37b297
--- /dev/null
+++ b/packages/server/src/services/MailNotification/utils.ts
@@ -0,0 +1,33 @@
+import { isEmpty } from 'lodash';
+import { ServiceError } from '@/exceptions';
+import { CommonMailOptions, CommonMailOptionsDTO } from '@/interfaces';
+import { ERRORS } from './constants';
+
+/**
+ * Merges the mail options with incoming options.
+ * @param {Partial} mailOptions
+ * @param {Partial} overridedOptions
+ * @throws {ServiceError}
+ */
+export function parseAndValidateMailOptions(
+ mailOptions: Partial,
+ overridedOptions: Partial
+) {
+ const mergedMessageOptions = {
+ ...mailOptions,
+ ...overridedOptions,
+ };
+ if (isEmpty(mergedMessageOptions.from)) {
+ throw new ServiceError(ERRORS.MAIL_FROM_NOT_FOUND);
+ }
+ if (isEmpty(mergedMessageOptions.to)) {
+ throw new ServiceError(ERRORS.MAIL_TO_NOT_FOUND);
+ }
+ if (isEmpty(mergedMessageOptions.subject)) {
+ throw new ServiceError(ERRORS.MAIL_SUBJECT_NOT_FOUND);
+ }
+ if (isEmpty(mergedMessageOptions.body)) {
+ throw new ServiceError(ERRORS.MAIL_BODY_NOT_FOUND);
+ }
+ return mergedMessageOptions;
+}
diff --git a/packages/server/src/services/MailTenancy/MailTenancy.ts b/packages/server/src/services/MailTenancy/MailTenancy.ts
new file mode 100644
index 000000000..6f8e82e11
--- /dev/null
+++ b/packages/server/src/services/MailTenancy/MailTenancy.ts
@@ -0,0 +1,25 @@
+import config from '@/config';
+import { Tenant } from "@/system/models";
+import { Service } from 'typedi';
+
+
+@Service()
+export class MailTenancy {
+ /**
+ * Retrieves the senders mails of the given tenant.
+ * @param {number} tenantId
+ */
+ public async senders(tenantId: number) {
+ const tenant = await Tenant.query()
+ .findById(tenantId)
+ .withGraphFetched('metadata');
+
+ return [
+ {
+ mail: config.mail.from,
+ label: tenant.metadata.name,
+ primary: true,
+ }
+ ].filter((item) => item.mail)
+ }
+}
\ No newline at end of file
diff --git a/packages/server/src/services/PDF/PdfService.ts b/packages/server/src/services/PDF/PdfService.ts
deleted file mode 100644
index 10eb5e8b1..000000000
--- a/packages/server/src/services/PDF/PdfService.ts
+++ /dev/null
@@ -1,26 +0,0 @@
-import { Service } from 'typedi';
-import puppeteer from 'puppeteer';
-import config from '@/config';
-
-@Service()
-export default class PdfService {
-
- /**
- * Pdf document.
- * @param content
- * @returns
- */
- async pdfDocument(content: string) {
- const browser = await puppeteer.connect({
- browserWSEndpoint: config.puppeteer.browserWSEndpoint,
- });
- const page = await browser.newPage();
- await page.setContent(content);
-
- const pdf = await page.pdf({ format: 'a4' });
-
- await browser.close();
-
- return pdf;
- }
-}
diff --git a/packages/server/src/services/Purchases/BillPayments/BillPaymentEntryTransformer.ts b/packages/server/src/services/Purchases/BillPayments/BillPaymentEntryTransformer.ts
new file mode 100644
index 000000000..19dcbacb5
--- /dev/null
+++ b/packages/server/src/services/Purchases/BillPayments/BillPaymentEntryTransformer.ts
@@ -0,0 +1,20 @@
+import { Transformer } from '@/lib/Transformer/Transformer';
+import { formatNumber } from '@/utils';
+
+export class BillPaymentEntryTransformer extends Transformer {
+ /**
+ * Include these attributes to bill payment object.
+ * @returns {Array}
+ */
+ public includeAttributes = (): string[] => {
+ return ['paymentAmountFormatted'];
+ };
+
+ /**
+ * Retreives the payment amount formatted.
+ * @returns {string}
+ */
+ protected paymentAmountFormatted(entry) {
+ return formatNumber(entry.paymentAmount, { money: false });
+ }
+}
diff --git a/packages/server/src/services/Purchases/BillPayments/BillPaymentTransformer.ts b/packages/server/src/services/Purchases/BillPayments/BillPaymentTransformer.ts
index 4345f028b..a6662dc2d 100644
--- a/packages/server/src/services/Purchases/BillPayments/BillPaymentTransformer.ts
+++ b/packages/server/src/services/Purchases/BillPayments/BillPaymentTransformer.ts
@@ -1,6 +1,7 @@
import { IBillPayment } from '@/interfaces';
import { Transformer } from '@/lib/Transformer/Transformer';
import { formatNumber } from 'utils';
+import { BillPaymentEntryTransformer } from './BillPaymentEntryTransformer';
export class BillPaymentTransformer extends Transformer {
/**
@@ -8,7 +9,7 @@ export class BillPaymentTransformer extends Transformer {
* @returns {Array}
*/
public includeAttributes = (): string[] => {
- return ['formattedPaymentDate', 'formattedAmount'];
+ return ['formattedPaymentDate', 'formattedAmount', 'entries'];
};
/**
@@ -30,4 +31,11 @@ export class BillPaymentTransformer extends Transformer {
currencyCode: billPayment.currencyCode,
});
};
+
+ /**
+ * Retreives the bill payment entries.
+ */
+ protected entries = (billPayment) => {
+ return this.item(billPayment.entries, new BillPaymentEntryTransformer());
+ };
}
diff --git a/packages/server/src/services/Purchases/Bills/PurchaseInvoiceTransformer.ts b/packages/server/src/services/Purchases/Bills/PurchaseInvoiceTransformer.ts
index 07d3a78d6..4ec163d8b 100644
--- a/packages/server/src/services/Purchases/Bills/PurchaseInvoiceTransformer.ts
+++ b/packages/server/src/services/Purchases/Bills/PurchaseInvoiceTransformer.ts
@@ -1,5 +1,6 @@
import { IBill } from '@/interfaces';
import { Transformer } from '@/lib/Transformer/Transformer';
+import { ItemEntryTransformer } from '@/services/Sales/Invoices/ItemEntryTransformer';
import { SaleInvoiceTaxEntryTransformer } from '@/services/Sales/Invoices/SaleInvoiceTaxEntryTransformer';
import { formatNumber } from 'utils';
@@ -23,6 +24,7 @@ export class PurchaseInvoiceTransformer extends Transformer {
'totalFormatted',
'totalLocalFormatted',
'taxes',
+ 'entries',
];
};
@@ -178,4 +180,15 @@ export class PurchaseInvoiceTransformer extends Transformer {
currencyCode: bill.currencyCode,
});
};
+
+ /**
+ * Retrieves the entries of the bill.
+ * @param {Bill} credit
+ * @returns {}
+ */
+ protected entries = (bill) => {
+ return this.item(bill.entries, new ItemEntryTransformer(), {
+ currencyCode: bill.currencyCode,
+ });
+ };
}
diff --git a/packages/server/src/services/Purchases/VendorCredits/VendorCreditTransformer.ts b/packages/server/src/services/Purchases/VendorCredits/VendorCreditTransformer.ts
index f4d75409e..3d74ee770 100644
--- a/packages/server/src/services/Purchases/VendorCredits/VendorCreditTransformer.ts
+++ b/packages/server/src/services/Purchases/VendorCredits/VendorCreditTransformer.ts
@@ -1,4 +1,6 @@
+import { IVendorCredit } from '@/interfaces';
import { Transformer } from '@/lib/Transformer/Transformer';
+import { ItemEntryTransformer } from '@/services/Sales/Invoices/ItemEntryTransformer';
import { formatNumber } from 'utils';
export class VendorCreditTransformer extends Transformer {
@@ -8,9 +10,10 @@ export class VendorCreditTransformer extends Transformer {
*/
public includeAttributes = (): string[] => {
return [
- 'formattedVendorCreditDate',
'formattedAmount',
+ 'formattedVendorCreditDate',
'formattedCreditsRemaining',
+ 'entries',
];
};
@@ -44,4 +47,15 @@ export class VendorCreditTransformer extends Transformer {
currencyCode: credit.currencyCode,
});
};
+
+ /**
+ * Retrieves the entries of the bill.
+ * @param {IVendorCredit} vendorCredit
+ * @returns {}
+ */
+ protected entries = (vendorCredit) => {
+ return this.item(vendorCredit.entries, new ItemEntryTransformer(), {
+ currencyCode: vendorCredit.currencyCode,
+ });
+ };
}
diff --git a/packages/server/src/services/Sales/Estimates/SaleEstimateTransformer.ts b/packages/server/src/services/Sales/Estimates/SaleEstimateTransformer.ts
index 770a13c3c..1102f7bd0 100644
--- a/packages/server/src/services/Sales/Estimates/SaleEstimateTransformer.ts
+++ b/packages/server/src/services/Sales/Estimates/SaleEstimateTransformer.ts
@@ -1,7 +1,7 @@
-import { Service } from 'typedi';
import { ISaleEstimate } from '@/interfaces';
import { Transformer } from '@/lib/Transformer/Transformer';
import { formatNumber } from 'utils';
+import { ItemEntryTransformer } from '../Invoices/ItemEntryTransformer';
export class SaleEstimateTransfromer extends Transformer {
/**
@@ -16,6 +16,7 @@ export class SaleEstimateTransfromer extends Transformer {
'formattedDeliveredAtDate',
'formattedApprovedAtDate',
'formattedRejectedAtDate',
+ 'entries',
];
};
@@ -74,4 +75,15 @@ export class SaleEstimateTransfromer extends Transformer {
currencyCode: estimate.currencyCode,
});
};
+
+ /**
+ * Retrieves the entries of the sale estimate.
+ * @param {ISaleEstimate} estimate
+ * @returns {}
+ */
+ protected entries = (estimate) => {
+ return this.item(estimate.entries, new ItemEntryTransformer(), {
+ currencyCode: estimate.currencyCode,
+ });
+ };
}
diff --git a/packages/server/src/services/Sales/Estimates/SaleEstimatesApplication.ts b/packages/server/src/services/Sales/Estimates/SaleEstimatesApplication.ts
index 3f63b27de..f1c7b3cdf 100644
--- a/packages/server/src/services/Sales/Estimates/SaleEstimatesApplication.ts
+++ b/packages/server/src/services/Sales/Estimates/SaleEstimatesApplication.ts
@@ -7,6 +7,8 @@ import {
ISaleEstimate,
ISaleEstimateDTO,
ISalesEstimatesFilter,
+ SaleEstimateMailOptions,
+ SaleEstimateMailOptionsDTO,
} from '@/interfaces';
import { EditSaleEstimate } from './EditSaleEstimate';
import { DeleteSaleEstimate } from './DeleteSaleEstimate';
@@ -17,6 +19,7 @@ import { ApproveSaleEstimate } from './ApproveSaleEstimate';
import { RejectSaleEstimate } from './RejectSaleEstimate';
import { SaleEstimateNotifyBySms } from './SaleEstimateSmsNotify';
import { SaleEstimatesPdf } from './SaleEstimatesPdf';
+import { SendSaleEstimateMail } from './SendSaleEstimateMail';
@Service()
export class SaleEstimatesApplication {
@@ -50,6 +53,9 @@ export class SaleEstimatesApplication {
@Inject()
private saleEstimatesPdfService: SaleEstimatesPdf;
+ @Inject()
+ private sendEstimateMailService: SendSaleEstimateMail;
+
/**
* Create a sale estimate.
* @param {number} tenantId - The tenant id.
@@ -198,15 +204,49 @@ export class SaleEstimatesApplication {
};
/**
- *
+ * Retrieve the PDF content of the given sale estimate.
* @param {number} tenantId
- * @param {} saleEstimate
+ * @param {number} saleEstimateId
* @returns
*/
- public getSaleEstimatePdf(tenantId: number, saleEstimate) {
+ public getSaleEstimatePdf(tenantId: number, saleEstimateId: number) {
return this.saleEstimatesPdfService.getSaleEstimatePdf(
tenantId,
- saleEstimate
+ saleEstimateId
+ );
+ }
+
+ /**
+ * Send the reminder mail of the given sale estimate.
+ * @param {number} tenantId
+ * @param {number} saleEstimateId
+ * @returns {Promise}
+ */
+ public sendSaleEstimateMail(
+ tenantId: number,
+ saleEstimateId: number,
+ saleEstimateMailOpts: SaleEstimateMailOptionsDTO
+ ): Promise {
+ return this.sendEstimateMailService.triggerMail(
+ tenantId,
+ saleEstimateId,
+ saleEstimateMailOpts
+ );
+ }
+
+ /**
+ * Retrieves the default mail options of the given sale estimate.
+ * @param {number} tenantId
+ * @param {number} saleEstimateId
+ * @returns {Promise}
+ */
+ public getSaleEstimateMail(
+ tenantId: number,
+ saleEstimateId: number
+ ): Promise {
+ return this.sendEstimateMailService.getMailOptions(
+ tenantId,
+ saleEstimateId
);
}
}
diff --git a/packages/server/src/services/Sales/Estimates/SaleEstimatesPdf.ts b/packages/server/src/services/Sales/Estimates/SaleEstimatesPdf.ts
index 0bd932f99..af1d2098c 100644
--- a/packages/server/src/services/Sales/Estimates/SaleEstimatesPdf.ts
+++ b/packages/server/src/services/Sales/Estimates/SaleEstimatesPdf.ts
@@ -1,36 +1,38 @@
import { Inject, Service } from 'typedi';
-import PdfService from '@/services/PDF/PdfService';
-import { templateRender } from 'utils';
-import HasTenancyService from '@/services/Tenancy/TenancyService';
-import { Tenant } from '@/system/models';
+import { ChromiumlyTenancy } from '@/services/ChromiumlyTenancy/ChromiumlyTenancy';
+import { TemplateInjectable } from '@/services/TemplateInjectable/TemplateInjectable';
+import { GetSaleEstimate } from './GetSaleEstimate';
@Service()
export class SaleEstimatesPdf {
@Inject()
- private pdfService: PdfService;
+ private chromiumlyTenancy: ChromiumlyTenancy;
@Inject()
- private tenancy: HasTenancyService;
+ private templateInjectable: TemplateInjectable;
+
+ @Inject()
+ private getSaleEstimate: GetSaleEstimate;
/**
* Retrieve sale invoice pdf content.
- * @param {} saleInvoice -
+ * @param {number} tenantId -
+ * @param {ISaleInvoice} saleInvoice -
*/
- async getSaleEstimatePdf(tenantId: number, saleEstimate) {
- const i18n = this.tenancy.i18n(tenantId);
-
- const organization = await Tenant.query()
- .findById(tenantId)
- .withGraphFetched('metadata');
-
- const htmlContent = templateRender('modules/estimate-regular', {
- saleEstimate,
- organizationName: organization.metadata.name,
- organizationEmail: organization.metadata.email,
- ...i18n,
+ public async getSaleEstimatePdf(tenantId: number, saleEstimateId: number) {
+ const saleEstimate = await this.getSaleEstimate.getEstimate(
+ tenantId,
+ saleEstimateId
+ );
+ const htmlContent = await this.templateInjectable.render(
+ tenantId,
+ 'modules/estimate-regular',
+ {
+ saleEstimate,
+ }
+ );
+ return this.chromiumlyTenancy.convertHtmlContent(tenantId, htmlContent, {
+ margins: { top: 0, bottom: 0, left: 0, right: 0 },
});
- const pdfContent = await this.pdfService.pdfDocument(htmlContent);
-
- return pdfContent;
}
}
diff --git a/packages/server/src/services/Sales/Estimates/SendSaleEstimateMail.ts b/packages/server/src/services/Sales/Estimates/SendSaleEstimateMail.ts
new file mode 100644
index 000000000..258496306
--- /dev/null
+++ b/packages/server/src/services/Sales/Estimates/SendSaleEstimateMail.ts
@@ -0,0 +1,146 @@
+import { Inject, Service } from 'typedi';
+import Mail from '@/lib/Mail';
+import HasTenancyService from '@/services/Tenancy/TenancyService';
+import {
+ DEFAULT_ESTIMATE_REMINDER_MAIL_CONTENT,
+ DEFAULT_ESTIMATE_REMINDER_MAIL_SUBJECT,
+} from './constants';
+import { SaleEstimatesPdf } from './SaleEstimatesPdf';
+import { GetSaleEstimate } from './GetSaleEstimate';
+import {
+ SaleEstimateMailOptions,
+ SaleEstimateMailOptionsDTO,
+} from '@/interfaces';
+import { ContactMailNotification } from '@/services/MailNotification/ContactMailNotification';
+import { parseAndValidateMailOptions } from '@/services/MailNotification/utils';
+
+@Service()
+export class SendSaleEstimateMail {
+ @Inject()
+ private tenancy: HasTenancyService;
+
+ @Inject()
+ private estimatePdf: SaleEstimatesPdf;
+
+ @Inject()
+ private getSaleEstimateService: GetSaleEstimate;
+
+ @Inject()
+ private contactMailNotification: ContactMailNotification;
+
+ @Inject('agenda')
+ private agenda: any;
+
+ /**
+ * Triggers the reminder mail of the given sale estimate.
+ * @param {number} tenantId -
+ * @param {number} saleEstimateId -
+ * @param {SaleEstimateMailOptionsDTO} messageOptions -
+ * @returns {Promise}
+ */
+ public async triggerMail(
+ tenantId: number,
+ saleEstimateId: number,
+ messageOptions: SaleEstimateMailOptionsDTO
+ ): Promise {
+ const payload = {
+ tenantId,
+ saleEstimateId,
+ messageOptions,
+ };
+ await this.agenda.now('sale-estimate-mail-send', payload);
+ }
+
+ /**
+ * Formates the text of the mail.
+ * @param {number} tenantId - Tenant id.
+ * @param {number} estimateId - Estimate id.
+ * @returns {Promise>}
+ */
+ public formatterData = async (tenantId: number, estimateId: number) => {
+ const estimate = await this.getSaleEstimateService.getEstimate(
+ tenantId,
+ estimateId
+ );
+ return {
+ CustomerName: estimate.customer.displayName,
+ EstimateNumber: estimate.estimateNumber,
+ EstimateDate: estimate.formattedEstimateDate,
+ EstimateAmount: estimate.formattedAmount,
+ EstimateExpirationDate: estimate.formattedExpirationDate,
+ };
+ };
+
+ /**
+ * Retrieves the mail options.
+ * @param {number} tenantId
+ * @param {number} saleEstimateId
+ * @returns {Promise}
+ */
+ public getMailOptions = async (
+ tenantId: number,
+ saleEstimateId: number
+ ): Promise => {
+ const { SaleEstimate } = this.tenancy.models(tenantId);
+
+ const saleEstimate = await SaleEstimate.query()
+ .findById(saleEstimateId)
+ .throwIfNotFound();
+
+ const formatterData = await this.formatterData(tenantId, saleEstimateId);
+
+ const mailOptions = await this.contactMailNotification.getMailOptions(
+ tenantId,
+ saleEstimate.customerId,
+ DEFAULT_ESTIMATE_REMINDER_MAIL_SUBJECT,
+ DEFAULT_ESTIMATE_REMINDER_MAIL_CONTENT,
+ formatterData
+ );
+ return {
+ ...mailOptions,
+ data: formatterData,
+ attachEstimate: true
+ };
+ };
+
+ /**
+ * Sends the mail notification of the given sale estimate.
+ * @param {number} tenantId
+ * @param {number} saleEstimateId
+ * @param {SaleEstimateMailOptions} messageOptions
+ * @returns {Promise}
+ */
+ public async sendMail(
+ tenantId: number,
+ saleEstimateId: number,
+ messageOptions: SaleEstimateMailOptionsDTO
+ ): Promise {
+ const localMessageOpts = await this.getMailOptions(
+ tenantId,
+ saleEstimateId
+ );
+ // Overrides and validates the given mail options.
+ const messageOpts = parseAndValidateMailOptions(
+ localMessageOpts,
+ messageOptions
+ );
+ const mail = new Mail()
+ .setSubject(messageOpts.subject)
+ .setTo(messageOpts.to)
+ .setContent(messageOpts.body);
+
+ if (messageOpts.attachEstimate) {
+ const estimatePdfBuffer = await this.estimatePdf.getSaleEstimatePdf(
+ tenantId,
+ saleEstimateId
+ );
+ mail.setAttachments([
+ {
+ filename: messageOpts.data?.EstimateNumber || 'estimate.pdf',
+ content: estimatePdfBuffer,
+ },
+ ]);
+ }
+ await mail.send();
+ }
+}
diff --git a/packages/server/src/services/Sales/Estimates/SendSaleEstimateMailJob.ts b/packages/server/src/services/Sales/Estimates/SendSaleEstimateMailJob.ts
new file mode 100644
index 000000000..b5e8eda39
--- /dev/null
+++ b/packages/server/src/services/Sales/Estimates/SendSaleEstimateMailJob.ts
@@ -0,0 +1,36 @@
+import Container, { Service } from 'typedi';
+import { SendSaleEstimateMail } from './SendSaleEstimateMail';
+
+@Service()
+export class SendSaleEstimateMailJob {
+ /**
+ * Constructor method.
+ */
+ constructor(agenda) {
+ agenda.define(
+ 'sale-estimate-mail-send',
+ { priority: 'high', concurrency: 2 },
+ this.handler
+ );
+ }
+
+ /**
+ * Triggers sending invoice mail.
+ */
+ private handler = async (job, done: Function) => {
+ const { tenantId, saleEstimateId, messageOptions } = job.attrs.data;
+ const sendSaleEstimateMail = Container.get(SendSaleEstimateMail);
+
+ try {
+ await sendSaleEstimateMail.sendMail(
+ tenantId,
+ saleEstimateId,
+ messageOptions
+ );
+ done();
+ } catch (error) {
+ console.log(error);
+ done(error);
+ }
+ };
+}
diff --git a/packages/server/src/services/Sales/Estimates/constants.ts b/packages/server/src/services/Sales/Estimates/constants.ts
index 2b58c74a8..6b689a0e1 100644
--- a/packages/server/src/services/Sales/Estimates/constants.ts
+++ b/packages/server/src/services/Sales/Estimates/constants.ts
@@ -1,3 +1,18 @@
+export const DEFAULT_ESTIMATE_REMINDER_MAIL_SUBJECT =
+ 'Estimate {EstimateNumber} is awaiting your approval';
+export const DEFAULT_ESTIMATE_REMINDER_MAIL_CONTENT = `Dear {CustomerName}
+Thank you for your business, You can view or print your estimate from attachements.
+
+Estimate #{EstimateNumber}
+Expiration Date : {EstimateExpirationDate}
+Amount : {EstimateAmount}
+
+
+
+Regards
+{CompanyName}
+
+`;
export const ERRORS = {
SALE_ESTIMATE_NOT_FOUND: 'SALE_ESTIMATE_NOT_FOUND',
@@ -8,7 +23,7 @@ export const ERRORS = {
CUSTOMER_HAS_SALES_ESTIMATES: 'CUSTOMER_HAS_SALES_ESTIMATES',
SALE_ESTIMATE_NO_IS_REQUIRED: 'SALE_ESTIMATE_NO_IS_REQUIRED',
SALE_ESTIMATE_ALREADY_DELIVERED: 'SALE_ESTIMATE_ALREADY_DELIVERED',
- SALE_ESTIMATE_ALREADY_APPROVED: 'SALE_ESTIMATE_ALREADY_APPROVED'
+ SALE_ESTIMATE_ALREADY_APPROVED: 'SALE_ESTIMATE_ALREADY_APPROVED',
};
export const DEFAULT_VIEW_COLUMNS = [];
diff --git a/packages/server/src/services/Sales/Invoices/CommandSaleInvoiceValidators.ts b/packages/server/src/services/Sales/Invoices/CommandSaleInvoiceValidators.ts
index 983abcc6f..c0786ad4b 100644
--- a/packages/server/src/services/Sales/Invoices/CommandSaleInvoiceValidators.ts
+++ b/packages/server/src/services/Sales/Invoices/CommandSaleInvoiceValidators.ts
@@ -21,6 +21,9 @@ export class CommandSaleInvoiceValidators {
/**
* Validate whether sale invoice number unqiue on the storage.
+ * @param {number} tenantId -
+ * @param {string} invoiceNumber -
+ * @param {number} notInvoiceId -
*/
public async validateInvoiceNumberUnique(
tenantId: number,
diff --git a/packages/server/src/services/Sales/Invoices/GetSaleInvoice.ts b/packages/server/src/services/Sales/Invoices/GetSaleInvoice.ts
index f2245afef..b57f86ed9 100644
--- a/packages/server/src/services/Sales/Invoices/GetSaleInvoice.ts
+++ b/packages/server/src/services/Sales/Invoices/GetSaleInvoice.ts
@@ -24,8 +24,7 @@ export class GetSaleInvoice {
*/
public async getSaleInvoice(
tenantId: number,
- saleInvoiceId: number,
- authorizedUser: ISystemUser
+ saleInvoiceId: number
): Promise {
const { SaleInvoice } = this.tenancy.models(tenantId);
diff --git a/packages/server/src/services/Sales/Invoices/GetSaleInvoiceMailReminder.ts b/packages/server/src/services/Sales/Invoices/GetSaleInvoiceMailReminder.ts
new file mode 100644
index 000000000..2a65d316e
--- /dev/null
+++ b/packages/server/src/services/Sales/Invoices/GetSaleInvoiceMailReminder.ts
@@ -0,0 +1,3 @@
+export class GetSaleInvoiceMailReminder {
+ public getInvoiceMailReminder(tenantId: number, saleInvoiceId: number) {}
+}
diff --git a/packages/server/src/services/Sales/Invoices/ItemEntryTransformer.ts b/packages/server/src/services/Sales/Invoices/ItemEntryTransformer.ts
new file mode 100644
index 000000000..ad0d88525
--- /dev/null
+++ b/packages/server/src/services/Sales/Invoices/ItemEntryTransformer.ts
@@ -0,0 +1,37 @@
+import { IItemEntry } from '@/interfaces';
+import { Transformer } from '@/lib/Transformer/Transformer';
+import { formatNumber } from '@/utils';
+
+export class ItemEntryTransformer extends Transformer {
+ /**
+ * Include these attributes to item entry object.
+ * @returns {Array}
+ */
+ public includeAttributes = (): string[] => {
+ return ['rateFormatted', 'totalFormatted'];
+ };
+
+ /**
+ * Retrieves the formatted rate of item entry.
+ * @param {IItemEntry} itemEntry -
+ * @returns {string}
+ */
+ protected rateFormatted = (entry: IItemEntry): string => {
+ return formatNumber(entry.rate, {
+ currencyCode: this.context.currencyCode,
+ money: false,
+ });
+ };
+
+ /**
+ * Retrieves the formatted total of item entry.
+ * @param {IItemEntry} entry
+ * @returns {string}
+ */
+ protected totalFormatted = (entry: IItemEntry): string => {
+ return formatNumber(entry.total, {
+ currencyCode: this.context.currencyCode,
+ money: false,
+ });
+ };
+}
diff --git a/packages/server/src/services/Sales/Invoices/SaleInvoicePdf.ts b/packages/server/src/services/Sales/Invoices/SaleInvoicePdf.ts
index edd98139f..9cccf94ef 100644
--- a/packages/server/src/services/Sales/Invoices/SaleInvoicePdf.ts
+++ b/packages/server/src/services/Sales/Invoices/SaleInvoicePdf.ts
@@ -1,37 +1,54 @@
import { Inject, Service } from 'typedi';
-import PdfService from '@/services/PDF/PdfService';
-import { templateRender } from 'utils';
+import { ChromiumlyTenancy } from '@/services/ChromiumlyTenancy/ChromiumlyTenancy';
+import { TemplateInjectable } from '@/services/TemplateInjectable/TemplateInjectable';
import HasTenancyService from '@/services/Tenancy/TenancyService';
-import { Tenant } from '@/system/models';
+import { CommandSaleInvoiceValidators } from './CommandSaleInvoiceValidators';
@Service()
export class SaleInvoicePdf {
@Inject()
- pdfService: PdfService;
+ private chromiumlyTenancy: ChromiumlyTenancy;
@Inject()
- tenancy: HasTenancyService;
+ private templateInjectable: TemplateInjectable;
+
+ @Inject()
+ private validators: CommandSaleInvoiceValidators;
+
+ @Inject()
+ private tenancy: HasTenancyService;
/**
* Retrieve sale invoice pdf content.
- * @param {} saleInvoice -
+ * @param {number} tenantId - Tenant Id.
+ * @param {ISaleInvoice} saleInvoice -
+ * @returns {Promise}
*/
- async saleInvoicePdf(tenantId: number, saleInvoice) {
- const i18n = this.tenancy.i18n(tenantId);
+ public async saleInvoicePdf(
+ tenantId: number,
+ invoiceId: number
+ ): Promise {
+ const { SaleInvoice } = this.tenancy.models(tenantId);
- const organization = await Tenant.query()
- .findById(tenantId)
- .withGraphFetched('metadata');
+ const saleInvoice = await SaleInvoice.query()
+ .findById(invoiceId)
+ .withGraphFetched('entries.item')
+ .withGraphFetched('entries.tax')
+ .withGraphFetched('customer')
+ .withGraphFetched('taxes.taxRate');
- const htmlContent = templateRender('modules/invoice-regular', {
- organization,
- organizationName: organization.metadata.name,
- organizationEmail: organization.metadata.email,
- saleInvoice,
- ...i18n,
+ // Validates the given sale invoice existance.
+ this.validators.validateInvoiceExistance(saleInvoice);
+
+ const htmlContent = await this.templateInjectable.render(
+ tenantId,
+ 'modules/invoice-regular',
+ {
+ saleInvoice,
+ }
+ );
+ return this.chromiumlyTenancy.convertHtmlContent(tenantId, htmlContent, {
+ margins: { top: 0, bottom: 0, left: 0, right: 0 },
});
- const pdfContent = await this.pdfService.pdfDocument(htmlContent);
-
- return pdfContent;
}
}
diff --git a/packages/server/src/services/Sales/Invoices/SaleInvoiceTransformer.ts b/packages/server/src/services/Sales/Invoices/SaleInvoiceTransformer.ts
index 979b312a9..878160b96 100644
--- a/packages/server/src/services/Sales/Invoices/SaleInvoiceTransformer.ts
+++ b/packages/server/src/services/Sales/Invoices/SaleInvoiceTransformer.ts
@@ -1,6 +1,7 @@
import { Transformer } from '@/lib/Transformer/Transformer';
import { formatNumber } from 'utils';
import { SaleInvoiceTaxEntryTransformer } from './SaleInvoiceTaxEntryTransformer';
+import { ItemEntryTransformer } from './ItemEntryTransformer';
export class SaleInvoiceTransformer extends Transformer {
/**
@@ -23,6 +24,7 @@ export class SaleInvoiceTransformer extends Transformer {
'totalFormatted',
'totalLocalFormatted',
'taxes',
+ 'entries',
];
};
@@ -95,6 +97,7 @@ export class SaleInvoiceTransformer extends Transformer {
protected subtotalFormatted = (invoice): string => {
return formatNumber(invoice.subtotal, {
currencyCode: this.context.organization.baseCurrency,
+ money: false,
});
};
@@ -176,4 +179,15 @@ export class SaleInvoiceTransformer extends Transformer {
currencyCode: invoice.currencyCode,
});
};
+
+ /**
+ * Retrieves the entries of the sale invoice.
+ * @param {ISaleInvoice} invoice
+ * @returns {}
+ */
+ protected entries = (invoice) => {
+ return this.item(invoice.entries, new ItemEntryTransformer(), {
+ currencyCode: invoice.currencyCode,
+ });
+ };
}
diff --git a/packages/server/src/services/Sales/Invoices/SaleInvoicesApplication.ts b/packages/server/src/services/Sales/Invoices/SaleInvoicesApplication.ts
index 8a37386f9..bc3f8c24b 100644
--- a/packages/server/src/services/Sales/Invoices/SaleInvoicesApplication.ts
+++ b/packages/server/src/services/Sales/Invoices/SaleInvoicesApplication.ts
@@ -11,6 +11,7 @@ import {
ISystemUser,
ITenantUser,
InvoiceNotificationType,
+ SendInvoiceMailDTO,
} from '@/interfaces';
import { Inject, Service } from 'typedi';
import { CreateSaleInvoice } from './CreateSaleInvoice';
@@ -24,6 +25,9 @@ import { WriteoffSaleInvoice } from './WriteoffSaleInvoice';
import { SaleInvoicePdf } from './SaleInvoicePdf';
import { GetInvoicePaymentsService } from './GetInvoicePaymentsService';
import { SaleInvoiceNotifyBySms } from './SaleInvoiceNotifyBySms';
+import { SendInvoiceMailReminder } from './SendSaleInvoiceMailReminder';
+import { SendSaleInvoiceMail } from './SendSaleInvoiceMail';
+import { GetSaleInvoiceMailReminder } from './GetSaleInvoiceMailReminder';
@Service()
export class SaleInvoiceApplication {
@@ -60,6 +64,15 @@ export class SaleInvoiceApplication {
@Inject()
private invoiceSms: SaleInvoiceNotifyBySms;
+ @Inject()
+ private sendInvoiceReminderService: SendInvoiceMailReminder;
+
+ @Inject()
+ private sendSaleInvoiceMailService: SendSaleInvoiceMail;
+
+ @Inject()
+ private getSaleInvoiceReminderService: GetSaleInvoiceMailReminder;
+
/**
* Creates a new sale invoice with associated GL entries.
* @param {number} tenantId
@@ -236,13 +249,13 @@ export class SaleInvoiceApplication {
};
/**
- *
- * @param {number} tenantId ]
- * @param saleInvoice
- * @returns
+ * Retrieves the pdf buffer of the given sale invoice.
+ * @param {number} tenantId - Tenant id.
+ * @param {number} saleInvoice
+ * @returns {Promise}
*/
- public saleInvoicePdf(tenantId: number, saleInvoice) {
- return this.pdfSaleInvoiceService.saleInvoicePdf(tenantId, saleInvoice);
+ public saleInvoicePdf(tenantId: number, saleInvoiceId: number) {
+ return this.pdfSaleInvoiceService.saleInvoicePdf(tenantId, saleInvoiceId);
}
/**
@@ -279,4 +292,67 @@ export class SaleInvoiceApplication {
invoiceSmsDetailsDTO
);
};
+
+ /**
+ * Retrieves the metadata of invoice mail reminder.
+ * @param {number} tenantId
+ * @param {number} saleInvoiceId
+ * @returns {}
+ */
+ public getSaleInvoiceMailReminder(tenantId: number, saleInvoiceId: number) {
+ return this.sendInvoiceReminderService.getMailOption(
+ tenantId,
+ saleInvoiceId
+ );
+ }
+
+ /**
+ * Sends reminder of the given invoice to the invoice's customer.
+ * @param {number} tenantId
+ * @param {number} saleInvoiceId
+ * @returns {}
+ */
+ public sendSaleInvoiceMailReminder(
+ tenantId: number,
+ saleInvoiceId: number,
+ messageDTO: SendInvoiceMailDTO
+ ) {
+ return this.sendInvoiceReminderService.triggerMail(
+ tenantId,
+ saleInvoiceId,
+ messageDTO
+ );
+ }
+
+ /**
+ * Sends the invoice mail of the given sale invoice.
+ * @param {number} tenantId
+ * @param {number} saleInvoiceId
+ * @param {SendInvoiceMailDTO} messageDTO
+ * @returns {Promise}
+ */
+ public sendSaleInvoiceMail(
+ tenantId: number,
+ saleInvoiceId: number,
+ messageDTO: SendInvoiceMailDTO
+ ) {
+ return this.sendSaleInvoiceMailService.triggerMail(
+ tenantId,
+ saleInvoiceId,
+ messageDTO
+ );
+ }
+
+ /**
+ * Retrieves the default mail options of the given sale invoice.
+ * @param {number} tenantId
+ * @param {number} saleInvoiceid
+ * @returns {Promise}
+ */
+ public getSaleInvoiceMail(tenantId: number, saleInvoiceid: number) {
+ return this.sendSaleInvoiceMailService.getMailOption(
+ tenantId,
+ saleInvoiceid
+ );
+ }
}
diff --git a/packages/server/src/services/Sales/Invoices/SendInvoiceInvoiceMailCommon.ts b/packages/server/src/services/Sales/Invoices/SendInvoiceInvoiceMailCommon.ts
new file mode 100644
index 000000000..52ef46a59
--- /dev/null
+++ b/packages/server/src/services/Sales/Invoices/SendInvoiceInvoiceMailCommon.ts
@@ -0,0 +1,83 @@
+import { Inject, Service } from 'typedi';
+import { SaleInvoiceMailOptions } from '@/interfaces';
+import HasTenancyService from '@/services/Tenancy/TenancyService';
+import { GetSaleInvoice } from './GetSaleInvoice';
+import { ContactMailNotification } from '@/services/MailNotification/ContactMailNotification';
+import {
+ DEFAULT_INVOICE_MAIL_CONTENT,
+ DEFAULT_INVOICE_MAIL_SUBJECT,
+} from './constants';
+
+@Service()
+export class SendSaleInvoiceMailCommon {
+ @Inject()
+ private tenancy: HasTenancyService;
+
+ @Inject()
+ private getSaleInvoiceService: GetSaleInvoice;
+
+ @Inject()
+ private contactMailNotification: ContactMailNotification;
+
+ /**
+ * Retrieves the mail options.
+ * @param {number} tenantId - Tenant id.
+ * @param {number} invoiceId - Invoice id.
+ * @param {string} defaultSubject - Subject text.
+ * @param {string} defaultBody - Subject body.
+ * @returns {Promise}
+ */
+ public async getMailOption(
+ tenantId: number,
+ invoiceId: number,
+ defaultSubject: string = DEFAULT_INVOICE_MAIL_SUBJECT,
+ defaultBody: string = DEFAULT_INVOICE_MAIL_CONTENT
+ ): Promise {
+ const { SaleInvoice } = this.tenancy.models(tenantId);
+
+ const saleInvoice = await SaleInvoice.query()
+ .findById(invoiceId)
+ .throwIfNotFound();
+
+ const formatterData = await this.formatText(tenantId, invoiceId);
+
+ const mailOptions = await this.contactMailNotification.getMailOptions(
+ tenantId,
+ saleInvoice.customerId,
+ defaultSubject,
+ defaultBody,
+ formatterData
+ );
+ return {
+ ...mailOptions,
+ attachInvoice: true,
+ };
+ }
+
+ /**
+ * Retrieves the formatted text of the given sale invoice.
+ * @param {number} tenantId - Tenant id.
+ * @param {number} invoiceId - Sale invoice id.
+ * @param {string} text - The given text.
+ * @returns {Promise}
+ */
+ public formatText = async (
+ tenantId: number,
+ invoiceId: number
+ ): Promise> => {
+ const invoice = await this.getSaleInvoiceService.getSaleInvoice(
+ tenantId,
+ invoiceId
+ );
+
+ return {
+ CustomerName: invoice.customer.displayName,
+ InvoiceNumber: invoice.invoiceNo,
+ InvoiceDueAmount: invoice.dueAmountFormatted,
+ InvoiceDueDate: invoice.dueDateFormatted,
+ InvoiceDate: invoice.invoiceDateFormatted,
+ InvoiceAmount: invoice.totalFormatted,
+ OverdueDays: invoice.overdueDays,
+ };
+ };
+}
diff --git a/packages/server/src/services/Sales/Invoices/SendSaleInvoiceMail.ts b/packages/server/src/services/Sales/Invoices/SendSaleInvoiceMail.ts
new file mode 100644
index 000000000..05db4f73e
--- /dev/null
+++ b/packages/server/src/services/Sales/Invoices/SendSaleInvoiceMail.ts
@@ -0,0 +1,95 @@
+import { Inject, Service } from 'typedi';
+import Mail from '@/lib/Mail';
+import { SendInvoiceMailDTO } from '@/interfaces';
+import { SaleInvoicePdf } from './SaleInvoicePdf';
+import { SendSaleInvoiceMailCommon } from './SendInvoiceInvoiceMailCommon';
+import {
+ DEFAULT_INVOICE_MAIL_CONTENT,
+ DEFAULT_INVOICE_MAIL_SUBJECT,
+} from './constants';
+import { parseAndValidateMailOptions } from '@/services/MailNotification/utils';
+
+@Service()
+export class SendSaleInvoiceMail {
+ @Inject()
+ private invoicePdf: SaleInvoicePdf;
+
+ @Inject()
+ private invoiceMail: SendSaleInvoiceMailCommon;
+
+ @Inject('agenda')
+ private agenda: any;
+
+ /**
+ * Sends the invoice mail of the given sale invoice.
+ * @param {number} tenantId
+ * @param {number} saleInvoiceId
+ * @param {SendInvoiceMailDTO} messageDTO
+ */
+ public async triggerMail(
+ tenantId: number,
+ saleInvoiceId: number,
+ messageDTO: SendInvoiceMailDTO
+ ) {
+ const payload = {
+ tenantId,
+ saleInvoiceId,
+ messageDTO,
+ };
+ await this.agenda.now('sale-invoice-mail-send', payload);
+ }
+
+ /**
+ * Retrieves the mail options of the given sale invoice.
+ * @param {number} tenantId
+ * @param {number} saleInvoiceId
+ * @returns {Promise}
+ */
+ public async getMailOption(tenantId: number, saleInvoiceId: number) {
+ return this.invoiceMail.getMailOption(
+ tenantId,
+ saleInvoiceId,
+ DEFAULT_INVOICE_MAIL_SUBJECT,
+ DEFAULT_INVOICE_MAIL_CONTENT
+ );
+ }
+
+ /**
+ * Triggers the mail invoice.
+ * @param {number} tenantId
+ * @param {number} saleInvoiceId
+ * @param {SendInvoiceMailDTO} messageDTO
+ * @returns {Promise}
+ */
+ public async sendMail(
+ tenantId: number,
+ saleInvoiceId: number,
+ messageDTO: SendInvoiceMailDTO
+ ) {
+ const defaultMessageOpts = await this.getMailOption(
+ tenantId,
+ saleInvoiceId
+ );
+ // Merge message opts with default options and validate the incoming options.
+ const messageOpts = parseAndValidateMailOptions(
+ defaultMessageOpts,
+ messageDTO
+ );
+ const mail = new Mail()
+ .setSubject(messageOpts.subject)
+ .setTo(messageOpts.to)
+ .setContent(messageOpts.body);
+
+ if (messageOpts.attachInvoice) {
+ // Retrieves document buffer of the invoice pdf document.
+ const invoicePdfBuffer = await this.invoicePdf.saleInvoicePdf(
+ tenantId,
+ saleInvoiceId
+ );
+ mail.setAttachments([
+ { filename: 'invoice.pdf', content: invoicePdfBuffer },
+ ]);
+ }
+ await mail.send();
+ }
+}
diff --git a/packages/server/src/services/Sales/Invoices/SendSaleInvoiceMailJob.ts b/packages/server/src/services/Sales/Invoices/SendSaleInvoiceMailJob.ts
new file mode 100644
index 000000000..3c1e49a6c
--- /dev/null
+++ b/packages/server/src/services/Sales/Invoices/SendSaleInvoiceMailJob.ts
@@ -0,0 +1,33 @@
+import Container, { Service } from 'typedi';
+import events from '@/subscribers/events';
+import { SendSaleInvoiceMail } from './SendSaleInvoiceMail';
+
+@Service()
+export class SendSaleInvoiceMailJob {
+ /**
+ * Constructor method.
+ */
+ constructor(agenda) {
+ agenda.define(
+ 'sale-invoice-mail-send',
+ { priority: 'high', concurrency: 2 },
+ this.handler
+ );
+ }
+
+ /**
+ * Triggers sending invoice mail.
+ */
+ private handler = async (job, done: Function) => {
+ const { tenantId, saleInvoiceId, messageDTO } = job.attrs.data;
+ const sendInvoiceMail = Container.get(SendSaleInvoiceMail);
+
+ try {
+ await sendInvoiceMail.sendMail(tenantId, saleInvoiceId, messageDTO);
+ done();
+ } catch (error) {
+ console.log(error);
+ done(error);
+ }
+ };
+}
diff --git a/packages/server/src/services/Sales/Invoices/SendSaleInvoiceMailReminder.ts b/packages/server/src/services/Sales/Invoices/SendSaleInvoiceMailReminder.ts
new file mode 100644
index 000000000..f16db0172
--- /dev/null
+++ b/packages/server/src/services/Sales/Invoices/SendSaleInvoiceMailReminder.ts
@@ -0,0 +1,91 @@
+import { Inject, Service } from 'typedi';
+import { SendInvoiceMailDTO } from '@/interfaces';
+import Mail from '@/lib/Mail';
+import { SaleInvoicePdf } from './SaleInvoicePdf';
+import { SendSaleInvoiceMailCommon } from './SendInvoiceInvoiceMailCommon';
+import {
+ DEFAULT_INVOICE_REMINDER_MAIL_CONTENT,
+ DEFAULT_INVOICE_REMINDER_MAIL_SUBJECT,
+} from './constants';
+import { parseAndValidateMailOptions } from '@/services/MailNotification/utils';
+
+@Service()
+export class SendInvoiceMailReminder {
+ @Inject('agenda')
+ private agenda: any;
+
+ @Inject()
+ private invoicePdf: SaleInvoicePdf;
+
+ @Inject()
+ private invoiceCommonMail: SendSaleInvoiceMailCommon;
+
+ /**
+ * Triggers the reminder mail of the given sale invoice.
+ * @param {number} tenantId
+ * @param {number} saleInvoiceId
+ */
+ public async triggerMail(
+ tenantId: number,
+ saleInvoiceId: number,
+ messageOptions: SendInvoiceMailDTO
+ ) {
+ const payload = {
+ tenantId,
+ saleInvoiceId,
+ messageOptions,
+ };
+ await this.agenda.now('sale-invoice-reminder-mail-send', payload);
+ }
+
+ /**
+ * Retrieves the mail options of the given sale invoice.
+ * @param {number} tenantId
+ * @param {number} saleInvoiceId
+ * @returns {Promise}
+ */
+ public async getMailOption(tenantId: number, saleInvoiceId: number) {
+ return this.invoiceCommonMail.getMailOption(
+ tenantId,
+ saleInvoiceId,
+ DEFAULT_INVOICE_REMINDER_MAIL_SUBJECT,
+ DEFAULT_INVOICE_REMINDER_MAIL_CONTENT
+ );
+ }
+
+ /**
+ * Triggers the mail invoice.
+ * @param {number} tenantId
+ * @param {number} saleInvoiceId
+ * @param {SendInvoiceMailDTO} messageOptions
+ * @returns {Promise}
+ */
+ public async sendMail(
+ tenantId: number,
+ saleInvoiceId: number,
+ messageOptions: SendInvoiceMailDTO
+ ) {
+ const localMessageOpts = await this.getMailOption(tenantId, saleInvoiceId);
+
+ const messageOpts = parseAndValidateMailOptions(
+ localMessageOpts,
+ messageOptions
+ );
+ const mail = new Mail()
+ .setSubject(messageOpts.subject)
+ .setTo(messageOpts.to)
+ .setContent(messageOpts.body);
+
+ if (messageOpts.attachInvoice) {
+ // Retrieves document buffer of the invoice pdf document.
+ const invoicePdfBuffer = await this.invoicePdf.saleInvoicePdf(
+ tenantId,
+ saleInvoiceId
+ );
+ mail.setAttachments([
+ { filename: 'invoice.pdf', content: invoicePdfBuffer },
+ ]);
+ }
+ await mail.send();
+ }
+}
diff --git a/packages/server/src/services/Sales/Invoices/SendSaleInvoiceMailReminderJob.ts b/packages/server/src/services/Sales/Invoices/SendSaleInvoiceMailReminderJob.ts
new file mode 100644
index 000000000..6570a153f
--- /dev/null
+++ b/packages/server/src/services/Sales/Invoices/SendSaleInvoiceMailReminderJob.ts
@@ -0,0 +1,32 @@
+import Container, { Service } from 'typedi';
+import { SendInvoiceMailReminder } from './SendSaleInvoiceMailReminder';
+
+@Service()
+export class SendSaleInvoiceReminderMailJob {
+ /**
+ * Constructor method.
+ */
+ constructor(agenda) {
+ agenda.define(
+ 'sale-invoice-reminder-mail-send',
+ { priority: 'high', concurrency: 1 },
+ this.handler
+ );
+ }
+
+ /**
+ * Triggers sending invoice mail.
+ */
+ private handler = async (job, done: Function) => {
+ const { tenantId, saleInvoiceId, messageOptions } = job.attrs.data;
+ const sendInvoiceMail = Container.get(SendInvoiceMailReminder);
+
+ try {
+ await sendInvoiceMail.sendMail(tenantId, saleInvoiceId, messageOptions);
+ done();
+ } catch (error) {
+ console.log(error);
+ done(error);
+ }
+ };
+}
diff --git a/packages/server/src/services/Sales/Invoices/constants.ts b/packages/server/src/services/Sales/Invoices/constants.ts
index 018dec027..404b7e613 100644
--- a/packages/server/src/services/Sales/Invoices/constants.ts
+++ b/packages/server/src/services/Sales/Invoices/constants.ts
@@ -1,3 +1,35 @@
+export const DEFAULT_INVOICE_MAIL_SUBJECT =
+ 'Invoice {InvoiceNumber} from {CompanyName}';
+export const DEFAULT_INVOICE_MAIL_CONTENT = `
+Dear {CustomerName}
+Thank you for your business, You can view or print your invoice from attachements.
+
+Invoice #{InvoiceNumber}
+Due Date : {InvoiceDueDate}
+Amount : {InvoiceAmount}
+
+
+
+Regards
+{CompanyName}
+
+`;
+
+export const DEFAULT_INVOICE_REMINDER_MAIL_SUBJECT =
+ 'Invoice {InvoiceNumber} reminder from {CompanyName}';
+export const DEFAULT_INVOICE_REMINDER_MAIL_CONTENT = `
+Dear {CustomerName}
+You might have missed the payment date and the invoice is now overdue by {OverdueDays} days.
+Invoice #{InvoiceNumber}
+Due Date : {InvoiceDueDate}
+Amount : {InvoiceAmount}
+
+
+Regards
+{CompanyName}
+
+`;
+
export const ERRORS = {
INVOICE_NUMBER_NOT_UNIQUE: 'INVOICE_NUMBER_NOT_UNIQUE',
SALE_INVOICE_NOT_FOUND: 'SALE_INVOICE_NOT_FOUND',
@@ -16,6 +48,7 @@ export const ERRORS = {
PAYMENT_ACCOUNT_CURRENCY_INVALID: 'PAYMENT_ACCOUNT_CURRENCY_INVALID',
SALE_INVOICE_ALREADY_WRITTEN_OFF: 'SALE_INVOICE_ALREADY_WRITTEN_OFF',
SALE_INVOICE_NOT_WRITTEN_OFF: 'SALE_INVOICE_NOT_WRITTEN_OFF',
+ NO_INVOICE_CUSTOMER_EMAIL_ADDR: 'NO_INVOICE_CUSTOMER_EMAIL_ADDR',
};
export const DEFAULT_VIEW_COLUMNS = [];
diff --git a/packages/server/src/services/Sales/PaymentReceives/GetPaymentReceiveInvoices.ts b/packages/server/src/services/Sales/PaymentReceives/GetPaymentReceiveInvoices.ts
index 48629770c..901c6b492 100644
--- a/packages/server/src/services/Sales/PaymentReceives/GetPaymentReceiveInvoices.ts
+++ b/packages/server/src/services/Sales/PaymentReceives/GetPaymentReceiveInvoices.ts
@@ -1,5 +1,5 @@
-import HasTenancyService from '@/services/Tenancy/TenancyService';
import { Inject, Service } from 'typedi';
+import HasTenancyService from '@/services/Tenancy/TenancyService';
import { PaymentReceiveValidators } from './PaymentReceiveValidators';
@Service()
diff --git a/packages/server/src/services/Sales/PaymentReceives/GetPaymentReeceivePdf.ts b/packages/server/src/services/Sales/PaymentReceives/GetPaymentReeceivePdf.ts
index 24949425d..e3d3cfb26 100644
--- a/packages/server/src/services/Sales/PaymentReceives/GetPaymentReeceivePdf.ts
+++ b/packages/server/src/services/Sales/PaymentReceives/GetPaymentReeceivePdf.ts
@@ -1,37 +1,42 @@
import { Inject, Service } from 'typedi';
-import PdfService from '@/services/PDF/PdfService';
-import { templateRender } from 'utils';
-import HasTenancyService from '@/services/Tenancy/TenancyService';
-import { Tenant } from '@/system/models';
+import { ChromiumlyTenancy } from '@/services/ChromiumlyTenancy/ChromiumlyTenancy';
+import { TemplateInjectable } from '@/services/TemplateInjectable/TemplateInjectable';
+import { GetPaymentReceive } from './GetPaymentReceive';
@Service()
export default class GetPaymentReceivePdf {
@Inject()
- private pdfService: PdfService;
+ private chromiumlyTenancy: ChromiumlyTenancy;
@Inject()
- private tenancy: HasTenancyService;
+ private templateInjectable: TemplateInjectable;
+
+ @Inject()
+ private getPaymentService: GetPaymentReceive;
/**
* Retrieve sale invoice pdf content.
- * @param {} saleInvoice -
+ * @param {number} tenantId -
+ * @param {IPaymentReceive} paymentReceive -
+ * @returns {Promise}
*/
- async getPaymentReceivePdf(tenantId: number, paymentReceive) {
- const i18n = this.tenancy.i18n(tenantId);
-
- const organization = await Tenant.query()
- .findById(tenantId)
- .withGraphFetched('metadata');
-
- const htmlContent = templateRender('modules/payment-receive-standard', {
- organization,
- organizationName: organization.metadata.name,
- organizationEmail: organization.metadata.email,
- paymentReceive,
- ...i18n,
+ async getPaymentReceivePdf(
+ tenantId: number,
+ paymentReceiveId: number
+ ): Promise {
+ const paymentReceive = await this.getPaymentService.getPaymentReceive(
+ tenantId,
+ paymentReceiveId
+ );
+ const htmlContent = await this.templateInjectable.render(
+ tenantId,
+ 'modules/payment-receive-standard',
+ {
+ paymentReceive,
+ }
+ );
+ return this.chromiumlyTenancy.convertHtmlContent(tenantId, htmlContent, {
+ margins: { top: 0, bottom: 0, left: 0, right: 0 },
});
- const pdfContent = await this.pdfService.pdfDocument(htmlContent);
-
- return pdfContent;
}
}
diff --git a/packages/server/src/services/Sales/PaymentReceives/PaymentReceiveEntryTransformer.ts b/packages/server/src/services/Sales/PaymentReceives/PaymentReceiveEntryTransformer.ts
new file mode 100644
index 000000000..fe9fe9b67
--- /dev/null
+++ b/packages/server/src/services/Sales/PaymentReceives/PaymentReceiveEntryTransformer.ts
@@ -0,0 +1,29 @@
+import { Transformer } from '@/lib/Transformer/Transformer';
+import { SaleInvoiceTransformer } from '../Invoices/SaleInvoiceTransformer';
+import { formatNumber } from '@/utils';
+
+export class PaymentReceiveEntryTransfromer extends Transformer {
+ /**
+ * Include these attributes to payment receive entry object.
+ * @returns {Array}
+ */
+ public includeAttributes = (): string[] => {
+ return ['paymentAmountFormatted', 'entry'];
+ };
+
+ /**
+ * Retreives the payment amount formatted.
+ * @param entry
+ * @returns {string}
+ */
+ protected paymentAmountFormatted(entry) {
+ return formatNumber(entry.paymentAmount, { money: false });
+ }
+
+ /**
+ * Retreives the transformed invoice.
+ */
+ protected invoice(entry) {
+ return this.item(entry.invoice, new SaleInvoiceTransformer());
+ }
+}
diff --git a/packages/server/src/services/Sales/PaymentReceives/PaymentReceiveMailNotification.ts b/packages/server/src/services/Sales/PaymentReceives/PaymentReceiveMailNotification.ts
new file mode 100644
index 000000000..acb1ea7a1
--- /dev/null
+++ b/packages/server/src/services/Sales/PaymentReceives/PaymentReceiveMailNotification.ts
@@ -0,0 +1,128 @@
+import { Inject, Service } from 'typedi';
+import {
+ PaymentReceiveMailOpts,
+ PaymentReceiveMailOptsDTO,
+ SendInvoiceMailDTO,
+} from '@/interfaces';
+import Mail from '@/lib/Mail';
+import HasTenancyService from '@/services/Tenancy/TenancyService';
+import {
+ DEFAULT_PAYMENT_MAIL_CONTENT,
+ DEFAULT_PAYMENT_MAIL_SUBJECT,
+} from './constants';
+import { GetPaymentReceive } from './GetPaymentReceive';
+import { ContactMailNotification } from '@/services/MailNotification/ContactMailNotification';
+import { parseAndValidateMailOptions } from '@/services/MailNotification/utils';
+
+@Service()
+export class SendPaymentReceiveMailNotification {
+ @Inject()
+ private tenancy: HasTenancyService;
+
+ @Inject()
+ private getPaymentService: GetPaymentReceive;
+
+ @Inject()
+ private contactMailNotification: ContactMailNotification;
+
+ @Inject('agenda')
+ private agenda: any;
+
+ /**
+ * Sends the mail of the given payment receive.
+ * @param {number} tenantId
+ * @param {number} paymentReceiveId
+ * @param {PaymentReceiveMailOptsDTO} messageDTO
+ * @returns {Promise}
+ */
+ public async triggerMail(
+ tenantId: number,
+ paymentReceiveId: number,
+ messageDTO: PaymentReceiveMailOptsDTO
+ ): Promise {
+ const payload = {
+ tenantId,
+ paymentReceiveId,
+ messageDTO,
+ };
+ await this.agenda.now('payment-receive-mail-send', payload);
+ }
+
+ /**
+ * Retrieves the default payment mail options.
+ * @param {number} tenantId - Tenant id.
+ * @param {number} paymentReceiveId - Payment receive id.
+ * @returns {Promise}
+ */
+ public getMailOptions = async (
+ tenantId: number,
+ paymentId: number
+ ): Promise => {
+ const { PaymentReceive } = this.tenancy.models(tenantId);
+
+ const paymentReceive = await PaymentReceive.query()
+ .findById(paymentId)
+ .throwIfNotFound();
+
+ const formatterData = await this.textFormatter(tenantId, paymentId);
+
+ return this.contactMailNotification.getMailOptions(
+ tenantId,
+ paymentReceive.customerId,
+ DEFAULT_PAYMENT_MAIL_SUBJECT,
+ DEFAULT_PAYMENT_MAIL_CONTENT,
+ formatterData
+ );
+ };
+
+ /**
+ * Retrieves the formatted text of the given sale invoice.
+ * @param {number} tenantId - Tenant id.
+ * @param {number} invoiceId - Sale invoice id.
+ * @param {string} text - The given text.
+ * @returns {Promise}
+ */
+ public textFormatter = async (
+ tenantId: number,
+ invoiceId: number
+ ): Promise> => {
+ const payment = await this.getPaymentService.getPaymentReceive(
+ tenantId,
+ invoiceId
+ );
+ return {
+ CustomerName: payment.customer.displayName,
+ PaymentNumber: payment.payment_receive_no,
+ PaymentDate: payment.formattedPaymentDate,
+ PaymentAmount: payment.formattedAmount,
+ };
+ };
+
+ /**
+ * Triggers the mail invoice.
+ * @param {number} tenantId
+ * @param {number} saleInvoiceId
+ * @param {SendInvoiceMailDTO} messageDTO
+ * @returns {Promise}
+ */
+ public async sendMail(
+ tenantId: number,
+ paymentReceiveId: number,
+ messageDTO: SendInvoiceMailDTO
+ ): Promise {
+ const defaultMessageOpts = await this.getMailOptions(
+ tenantId,
+ paymentReceiveId
+ );
+ // Parsed message opts with default options.
+ const parsedMessageOpts = parseAndValidateMailOptions(
+ defaultMessageOpts,
+ messageDTO
+ );
+ await new Mail()
+ .setSubject(parsedMessageOpts.subject)
+ .setTo(parsedMessageOpts.to)
+ .setContent(parsedMessageOpts.body)
+ .send();
+ }
+}
diff --git a/packages/server/src/services/Sales/PaymentReceives/PaymentReceiveMailNotificationJob.ts b/packages/server/src/services/Sales/PaymentReceives/PaymentReceiveMailNotificationJob.ts
new file mode 100644
index 000000000..b29570d42
--- /dev/null
+++ b/packages/server/src/services/Sales/PaymentReceives/PaymentReceiveMailNotificationJob.ts
@@ -0,0 +1,32 @@
+import Container, { Service } from 'typedi';
+import { SendPaymentReceiveMailNotification } from './PaymentReceiveMailNotification';
+
+@Service()
+export class PaymentReceiveMailNotificationJob {
+ /**
+ * Constructor method.
+ */
+ constructor(agenda) {
+ agenda.define(
+ 'payment-receive-mail-send',
+ { priority: 'high', concurrency: 2 },
+ this.handler
+ );
+ }
+
+ /**
+ * Triggers sending payment notification via mail.
+ */
+ private handler = async (job, done: Function) => {
+ const { tenantId, paymentReceiveId, messageDTO } = job.attrs.data;
+ const paymentMail = Container.get(SendPaymentReceiveMailNotification);
+
+ try {
+ await paymentMail.sendMail(tenantId, paymentReceiveId, messageDTO);
+ done();
+ } catch (error) {
+ console.log(error);
+ done(error);
+ }
+ };
+}
diff --git a/packages/server/src/services/Sales/PaymentReceives/PaymentReceiveTransformer.ts b/packages/server/src/services/Sales/PaymentReceives/PaymentReceiveTransformer.ts
index 0cb45a973..afce4203b 100644
--- a/packages/server/src/services/Sales/PaymentReceives/PaymentReceiveTransformer.ts
+++ b/packages/server/src/services/Sales/PaymentReceives/PaymentReceiveTransformer.ts
@@ -2,6 +2,7 @@ import { IPaymentReceive, IPaymentReceiveEntry } from '@/interfaces';
import { Transformer } from '@/lib/Transformer/Transformer';
import { formatNumber } from 'utils';
import { SaleInvoiceTransformer } from '../Invoices/SaleInvoiceTransformer';
+import { PaymentReceiveEntryTransfromer } from './PaymentReceiveEntryTransformer';
export class PaymentReceiveTransfromer extends Transformer {
/**
@@ -45,14 +46,11 @@ export class PaymentReceiveTransfromer extends Transformer {
};
/**
- * Retrieves the
- * @param {IPaymentReceive} payment
+ * Retrieves the payment entries.
+ * @param {IPaymentReceive} payment
* @returns {IPaymentReceiveEntry[]}
*/
protected entries = (payment: IPaymentReceive): IPaymentReceiveEntry[] => {
- return payment?.entries?.map((entry) => ({
- ...entry,
- invoice: this.item(entry.invoice, new SaleInvoiceTransformer()),
- }));
+ return this.item(payment.entries, new PaymentReceiveEntryTransfromer());
};
}
diff --git a/packages/server/src/services/Sales/PaymentReceives/PaymentReceivesApplication.ts b/packages/server/src/services/Sales/PaymentReceives/PaymentReceivesApplication.ts
index afeca6010..0d5669bf8 100644
--- a/packages/server/src/services/Sales/PaymentReceives/PaymentReceivesApplication.ts
+++ b/packages/server/src/services/Sales/PaymentReceives/PaymentReceivesApplication.ts
@@ -7,6 +7,7 @@ import {
IPaymentReceiveSmsDetails,
IPaymentReceivesFilter,
ISystemUser,
+ PaymentReceiveMailOptsDTO,
} from '@/interfaces';
import { Inject, Service } from 'typedi';
import { CreatePaymentReceive } from './CreatePaymentReceive';
@@ -17,7 +18,7 @@ import { GetPaymentReceive } from './GetPaymentReceive';
import { GetPaymentReceiveInvoices } from './GetPaymentReceiveInvoices';
import { PaymentReceiveNotifyBySms } from './PaymentReceiveSmsNotify';
import GetPaymentReceivePdf from './GetPaymentReeceivePdf';
-import { PaymentReceive } from '@/models';
+import { SendPaymentReceiveMailNotification } from './PaymentReceiveMailNotification';
@Service()
export class PaymentReceivesApplication {
@@ -42,6 +43,9 @@ export class PaymentReceivesApplication {
@Inject()
private paymentSmsNotify: PaymentReceiveNotifyBySms;
+ @Inject()
+ private paymentMailNotify: SendPaymentReceiveMailNotification;
+
@Inject()
private getPaymentReceivePdfService: GetPaymentReceivePdf;
@@ -176,18 +180,47 @@ export class PaymentReceivesApplication {
};
/**
- * Retrieve PDF content of the given payment receive.
+ * Notify customer via mail about payment receive details.
+ * @param {number} tenantId
+ * @param {number} paymentReceiveId
+ * @param {IPaymentReceiveMailOpts} messageOpts
+ * @returns {Promise}
+ */
+ public notifyPaymentByMail(
+ tenantId: number,
+ paymentReceiveId: number,
+ messageOpts: PaymentReceiveMailOptsDTO
+ ): Promise {
+ return this.paymentMailNotify.triggerMail(
+ tenantId,
+ paymentReceiveId,
+ messageOpts
+ );
+ }
+
+ /**
+ * Retrieves the default mail options of the given payment transaction.
+ * @param {number} tenantId
+ * @param {number} paymentReceiveId
+ * @returns {Promise}
+ */
+ public getPaymentMailOptions(tenantId: number, paymentReceiveId: number) {
+ return this.paymentMailNotify.getMailOptions(tenantId, paymentReceiveId);
+ }
+
+ /**
+ * Retrieve pdf content of the given payment receive.
* @param {number} tenantId
* @param {PaymentReceive} paymentReceive
* @returns
*/
public getPaymentReceivePdf = (
tenantId: number,
- paymentReceive: PaymentReceive
+ paymentReceiveId: number
) => {
return this.getPaymentReceivePdfService.getPaymentReceivePdf(
tenantId,
- paymentReceive
+ paymentReceiveId
);
};
}
diff --git a/packages/server/src/services/Sales/PaymentReceives/constants.ts b/packages/server/src/services/Sales/PaymentReceives/constants.ts
index ccd8d75ee..405939617 100644
--- a/packages/server/src/services/Sales/PaymentReceives/constants.ts
+++ b/packages/server/src/services/Sales/PaymentReceives/constants.ts
@@ -1,3 +1,18 @@
+export const DEFAULT_PAYMENT_MAIL_SUBJECT = 'Payment Received by {CompanyName}';
+export const DEFAULT_PAYMENT_MAIL_CONTENT = `
+Dear {CustomerName}
+Thank you for your payment. It was a pleasure doing business with you. We look forward to work together again!
+
+Payment Date : {PaymentDate}
+Amount : {PaymentAmount}
+
+
+
+Regards
+{CompanyName}
+
+`;
+
export const ERRORS = {
PAYMENT_RECEIVE_NO_EXISTS: 'PAYMENT_RECEIVE_NO_EXISTS',
PAYMENT_RECEIVE_NOT_EXISTS: 'PAYMENT_RECEIVE_NOT_EXISTS',
@@ -12,6 +27,7 @@ export const ERRORS = {
PAYMENT_CUSTOMER_SHOULD_NOT_UPDATE: 'PAYMENT_CUSTOMER_SHOULD_NOT_UPDATE',
CUSTOMER_HAS_PAYMENT_RECEIVES: 'CUSTOMER_HAS_PAYMENT_RECEIVES',
PAYMENT_ACCOUNT_CURRENCY_INVALID: 'PAYMENT_ACCOUNT_CURRENCY_INVALID',
+ NO_INVOICE_CUSTOMER_EMAIL_ADDR: 'NO_INVOICE_CUSTOMER_EMAIL_ADDR',
};
export const DEFAULT_VIEWS = [];
diff --git a/packages/server/src/services/Sales/Receipts/SaleReceiptApplication.ts b/packages/server/src/services/Sales/Receipts/SaleReceiptApplication.ts
index 8dfdd4c75..d4c87df29 100644
--- a/packages/server/src/services/Sales/Receipts/SaleReceiptApplication.ts
+++ b/packages/server/src/services/Sales/Receipts/SaleReceiptApplication.ts
@@ -5,6 +5,8 @@ import {
IPaginationMeta,
ISaleReceipt,
ISalesReceiptsFilter,
+ SaleReceiptMailOpts,
+ SaleReceiptMailOptsDTO,
} from '@/interfaces';
import { EditSaleReceipt } from './EditSaleReceipt';
import { GetSaleReceipt } from './GetSaleReceipt';
@@ -13,6 +15,7 @@ import { GetSaleReceipts } from './GetSaleReceipts';
import { CloseSaleReceipt } from './CloseSaleReceipt';
import { SaleReceiptsPdf } from './SaleReceiptsPdfService';
import { SaleReceiptNotifyBySms } from './SaleReceiptNotifyBySms';
+import { SaleReceiptMailNotification } from './SaleReceiptMailNotification';
@Service()
export class SaleReceiptApplication {
@@ -40,6 +43,9 @@ export class SaleReceiptApplication {
@Inject()
private saleReceiptNotifyBySmsService: SaleReceiptNotifyBySms;
+ @Inject()
+ private saleReceiptNotifyByMailService: SaleReceiptMailNotification;
+
/**
* Creates a new sale receipt with associated entries.
* @param {number} tenantId
@@ -166,4 +172,39 @@ export class SaleReceiptApplication {
saleReceiptId
);
}
+
+ /**
+ * Sends the receipt mail of the given sale receipt.
+ * @param {number} tenantId
+ * @param {number} saleReceiptId
+ * @param {SaleReceiptMailOptsDTO} messageOpts
+ * @returns {Promise}
+ */
+ public sendSaleReceiptMail(
+ tenantId: number,
+ saleReceiptId: number,
+ messageOpts: SaleReceiptMailOptsDTO
+ ): Promise {
+ return this.saleReceiptNotifyByMailService.triggerMail(
+ tenantId,
+ saleReceiptId,
+ messageOpts
+ );
+ }
+
+ /**
+ * Retrieves the default mail options of the given sale receipt.
+ * @param {number} tenantId
+ * @param {number} saleReceiptId
+ * @returns {Promise}
+ */
+ public getSaleReceiptMail(
+ tenantId: number,
+ saleReceiptId: number
+ ): Promise {
+ return this.saleReceiptNotifyByMailService.getMailOptions(
+ tenantId,
+ saleReceiptId
+ );
+ }
}
diff --git a/packages/server/src/services/Sales/Receipts/SaleReceiptMailNotification.ts b/packages/server/src/services/Sales/Receipts/SaleReceiptMailNotification.ts
new file mode 100644
index 000000000..572bed2f8
--- /dev/null
+++ b/packages/server/src/services/Sales/Receipts/SaleReceiptMailNotification.ts
@@ -0,0 +1,142 @@
+import HasTenancyService from '@/services/Tenancy/TenancyService';
+import { Inject, Service } from 'typedi';
+import Mail from '@/lib/Mail';
+import { GetSaleReceipt } from './GetSaleReceipt';
+import { SaleReceiptsPdf } from './SaleReceiptsPdfService';
+import {
+ DEFAULT_RECEIPT_MAIL_CONTENT,
+ DEFAULT_RECEIPT_MAIL_SUBJECT,
+} from './constants';
+import { SaleReceiptMailOpts, SaleReceiptMailOptsDTO } from '@/interfaces';
+import { ContactMailNotification } from '@/services/MailNotification/ContactMailNotification';
+import { parseAndValidateMailOptions } from '@/services/MailNotification/utils';
+
+@Service()
+export class SaleReceiptMailNotification {
+ @Inject()
+ private tenancy: HasTenancyService;
+
+ @Inject()
+ private getSaleReceiptService: GetSaleReceipt;
+
+ @Inject()
+ private receiptPdfService: SaleReceiptsPdf;
+
+ @Inject()
+ private contactMailNotification: ContactMailNotification;
+
+ @Inject('agenda')
+ private agenda: any;
+
+ /**
+ * Sends the receipt mail of the given sale receipt.
+ * @param {number} tenantId
+ * @param {number} saleReceiptId
+ * @param {SaleReceiptMailOptsDTO} messageDTO
+ */
+ public async triggerMail(
+ tenantId: number,
+ saleReceiptId: number,
+ messageOpts: SaleReceiptMailOptsDTO
+ ) {
+ const payload = {
+ tenantId,
+ saleReceiptId,
+ messageOpts,
+ };
+ await this.agenda.now('sale-receipt-mail-send', payload);
+ }
+
+ /**
+ * Retrieves the mail options of the given sale receipt.
+ * @param {number} tenantId
+ * @param {number} saleReceiptId
+ * @returns {Promise}
+ */
+ public async getMailOptions(
+ tenantId: number,
+ saleReceiptId: number
+ ): Promise {
+ const { SaleReceipt } = this.tenancy.models(tenantId);
+
+ const saleReceipt = await SaleReceipt.query()
+ .findById(saleReceiptId)
+ .throwIfNotFound();
+
+ const formattedData = await this.textFormatter(tenantId, saleReceiptId);
+
+ const mailOpts = await this.contactMailNotification.getMailOptions(
+ tenantId,
+ saleReceipt.customerId,
+ DEFAULT_RECEIPT_MAIL_SUBJECT,
+ DEFAULT_RECEIPT_MAIL_CONTENT,
+ formattedData
+ );
+ return {
+ ...mailOpts,
+ attachReceipt: true,
+ };
+ }
+
+ /**
+ * Retrieves the formatted text of the given sale receipt.
+ * @param {number} tenantId - Tenant id.
+ * @param {number} receiptId - Sale receipt id.
+ * @param {string} text - The given text.
+ * @returns {Promise}
+ */
+ public textFormatter = async (
+ tenantId: number,
+ receiptId: number
+ ): Promise> => {
+ const receipt = await this.getSaleReceiptService.getSaleReceipt(
+ tenantId,
+ receiptId
+ );
+ return {
+ CustomerName: receipt.customer.displayName,
+ ReceiptNumber: receipt.receiptNumber,
+ ReceiptDate: receipt.formattedReceiptDate,
+ ReceiptAmount: receipt.formattedAmount,
+ };
+ };
+
+ /**
+ * Triggers the mail notification of the given sale receipt.
+ * @param {number} tenantId - Tenant id.
+ * @param {number} saleReceiptId - Sale receipt id.
+ * @param {SaleReceiptMailOpts} messageDTO - Overrided message options.
+ * @returns {Promise}
+ */
+ public async sendMail(
+ tenantId: number,
+ saleReceiptId: number,
+ messageOpts: SaleReceiptMailOptsDTO
+ ) {
+ const defaultMessageOpts = await this.getMailOptions(
+ tenantId,
+ saleReceiptId
+ );
+ // Merges message opts with default options.
+ const parsedMessageOpts = parseAndValidateMailOptions(
+ defaultMessageOpts,
+ messageOpts
+ );
+ const mail = new Mail()
+ .setSubject(parsedMessageOpts.subject)
+ .setTo(parsedMessageOpts.to)
+ .setContent(parsedMessageOpts.body);
+
+ if (parsedMessageOpts.attachReceipt) {
+ // Retrieves document buffer of the receipt pdf document.
+ const receiptPdfBuffer = await this.receiptPdfService.saleReceiptPdf(
+ tenantId,
+ saleReceiptId
+ );
+ mail.setAttachments([
+ { filename: 'receipt.pdf', content: receiptPdfBuffer },
+ ]);
+ }
+ await mail.send();
+ }
+}
diff --git a/packages/server/src/services/Sales/Receipts/SaleReceiptMailNotificationJob.ts b/packages/server/src/services/Sales/Receipts/SaleReceiptMailNotificationJob.ts
new file mode 100644
index 000000000..f32325114
--- /dev/null
+++ b/packages/server/src/services/Sales/Receipts/SaleReceiptMailNotificationJob.ts
@@ -0,0 +1,36 @@
+import Container, { Service } from 'typedi';
+import { SaleReceiptMailNotification } from './SaleReceiptMailNotification';
+
+@Service()
+export class SaleReceiptMailNotificationJob {
+ /**
+ * Constructor method.
+ */
+ constructor(agenda) {
+ agenda.define(
+ 'sale-receipt-mail-send',
+ { priority: 'high', concurrency: 2 },
+ this.handler
+ );
+ }
+
+ /**
+ * Triggers sending invoice mail.
+ */
+ private handler = async (job, done: Function) => {
+ const { tenantId, saleReceiptId, messageOpts } = job.attrs.data;
+ const receiveMailNotification = Container.get(SaleReceiptMailNotification);
+
+ try {
+ await receiveMailNotification.sendMail(
+ tenantId,
+ saleReceiptId,
+ messageOpts
+ );
+ done();
+ } catch (error) {
+ console.log(error);
+ done(error);
+ }
+ };
+}
diff --git a/packages/server/src/services/Sales/Receipts/SaleReceiptTransformer.ts b/packages/server/src/services/Sales/Receipts/SaleReceiptTransformer.ts
index 0469adfa0..c8b950711 100644
--- a/packages/server/src/services/Sales/Receipts/SaleReceiptTransformer.ts
+++ b/packages/server/src/services/Sales/Receipts/SaleReceiptTransformer.ts
@@ -2,6 +2,7 @@ import { Service } from 'typedi';
import { ISaleReceipt } from '@/interfaces';
import { Transformer } from '@/lib/Transformer/Transformer';
import { formatNumber } from 'utils';
+import { ItemEntryTransformer } from '../Invoices/ItemEntryTransformer';
@Service()
export class SaleReceiptTransformer extends Transformer {
@@ -10,7 +11,12 @@ export class SaleReceiptTransformer extends Transformer {
* @returns {Array}
*/
public includeAttributes = (): string[] => {
- return ['formattedAmount', 'formattedReceiptDate', 'formattedClosedAtDate'];
+ return [
+ 'formattedAmount',
+ 'formattedReceiptDate',
+ 'formattedClosedAtDate',
+ 'entries',
+ ];
};
/**
@@ -41,4 +47,15 @@ export class SaleReceiptTransformer extends Transformer {
currencyCode: receipt.currencyCode,
});
};
+
+ /**
+ * Retrieves the entries of the credit note.
+ * @param {ISaleReceipt} credit
+ * @returns {}
+ */
+ protected entries = (receipt) => {
+ return this.item(receipt.entries, new ItemEntryTransformer(), {
+ currencyCode: receipt.currencyCode,
+ });
+ };
}
diff --git a/packages/server/src/services/Sales/Receipts/SaleReceiptsPdfService.ts b/packages/server/src/services/Sales/Receipts/SaleReceiptsPdfService.ts
index 55863b4d8..cad2b5f93 100644
--- a/packages/server/src/services/Sales/Receipts/SaleReceiptsPdfService.ts
+++ b/packages/server/src/services/Sales/Receipts/SaleReceiptsPdfService.ts
@@ -1,36 +1,39 @@
import { Inject, Service } from 'typedi';
-import PdfService from '@/services/PDF/PdfService';
-import { templateRender } from 'utils';
-import HasTenancyService from '@/services/Tenancy/TenancyService';
-import { Tenant } from '@/system/models';
+import { TemplateInjectable } from '@/services/TemplateInjectable/TemplateInjectable';
+import { ChromiumlyTenancy } from '@/services/ChromiumlyTenancy/ChromiumlyTenancy';
+import { GetSaleReceipt } from './GetSaleReceipt';
@Service()
export class SaleReceiptsPdf {
@Inject()
- pdfService: PdfService;
+ private chromiumlyTenancy: ChromiumlyTenancy;
@Inject()
- tenancy: HasTenancyService;
+ private templateInjectable: TemplateInjectable;
+
+ @Inject()
+ private getSaleReceiptService: GetSaleReceipt;
/**
- * Retrieve sale invoice pdf content.
- * @param {} saleInvoice -
+ * Retrieves sale invoice pdf content.
+ * @param {number} tenantId -
+ * @param {number} saleInvoiceId -
+ * @returns {Promise}
*/
- async saleReceiptPdf(tenantId: number, saleReceipt) {
- const i18n = this.tenancy.i18n(tenantId);
-
- const organization = await Tenant.query()
- .findById(tenantId)
- .withGraphFetched('metadata');
-
- const htmlContent = templateRender('modules/receipt-regular', {
- saleReceipt,
- organizationName: organization.metadata.name,
- organizationEmail: organization.metadata.email,
- ...i18n,
+ public async saleReceiptPdf(tenantId: number, saleReceiptId: number) {
+ const saleReceipt = await this.getSaleReceiptService.getSaleReceipt(
+ tenantId,
+ saleReceiptId
+ );
+ const htmlContent = await this.templateInjectable.render(
+ tenantId,
+ 'modules/receipt-regular',
+ {
+ saleReceipt,
+ }
+ );
+ return this.chromiumlyTenancy.convertHtmlContent(tenantId, htmlContent, {
+ margins: { top: 0, bottom: 0, left: 0, right: 0 },
});
- const pdfContent = await this.pdfService.pdfDocument(htmlContent);
-
- return pdfContent;
}
}
diff --git a/packages/server/src/services/Sales/Receipts/constants.ts b/packages/server/src/services/Sales/Receipts/constants.ts
index bf0cdef18..084af9214 100644
--- a/packages/server/src/services/Sales/Receipts/constants.ts
+++ b/packages/server/src/services/Sales/Receipts/constants.ts
@@ -1,3 +1,19 @@
+export const DEFAULT_RECEIPT_MAIL_SUBJECT =
+ 'Receipt {ReceiptNumber} from {CompanyName}';
+export const DEFAULT_RECEIPT_MAIL_CONTENT = `
+Dear {CustomerName}
+Thank you for your business, You can view or print your receipt from attachements.
+
+Receipt #{ReceiptNumber}
+Amount : {ReceiptAmount}
+
+
+
+Regards
+{CompanyName}
+
+`;
+
export const ERRORS = {
SALE_RECEIPT_NOT_FOUND: 'SALE_RECEIPT_NOT_FOUND',
DEPOSIT_ACCOUNT_NOT_FOUND: 'DEPOSIT_ACCOUNT_NOT_FOUND',
@@ -6,6 +22,7 @@ export const ERRORS = {
SALE_RECEIPT_IS_ALREADY_CLOSED: 'SALE_RECEIPT_IS_ALREADY_CLOSED',
SALE_RECEIPT_NO_IS_REQUIRED: 'SALE_RECEIPT_NO_IS_REQUIRED',
CUSTOMER_HAS_SALES_INVOICES: 'CUSTOMER_HAS_SALES_INVOICES',
+ NO_INVOICE_CUSTOMER_EMAIL_ADDR: 'NO_INVOICE_CUSTOMER_EMAIL_ADDR'
};
export const DEFAULT_VIEW_COLUMNS = [];
diff --git a/packages/server/src/services/TemplateInjectable/TemplateInjectable.ts b/packages/server/src/services/TemplateInjectable/TemplateInjectable.ts
new file mode 100644
index 000000000..fd2c965a8
--- /dev/null
+++ b/packages/server/src/services/TemplateInjectable/TemplateInjectable.ts
@@ -0,0 +1,35 @@
+import { Inject, Service } from 'typedi';
+import HasTenancyService from '../Tenancy/TenancyService';
+import { templateRender } from '@/utils';
+import { Tenant } from '@/system/models';
+
+@Service()
+export class TemplateInjectable {
+ @Inject()
+ private tenancy: HasTenancyService;
+
+ /**
+ * Renders the given filename of the template.
+ * @param {number} tenantId
+ * @param {string} filename
+ * @returns {string}
+ */
+ public async render(
+ tenantId: number,
+ filename: string,
+ options: Record
+ ) {
+ const i18n = this.tenancy.i18n(tenantId);
+
+ const organization = await Tenant.query()
+ .findById(tenantId)
+ .withGraphFetched('metadata');
+
+ return templateRender(filename, {
+ organizationName: organization.metadata.name,
+ organizationEmail: organization.metadata.email,
+ __: i18n.__,
+ ...options
+ });
+ }
+}
diff --git a/packages/server/src/subscribers/events.ts b/packages/server/src/subscribers/events.ts
index 24ca0a0a3..e54f48152 100644
--- a/packages/server/src/subscribers/events.ts
+++ b/packages/server/src/subscribers/events.ts
@@ -129,6 +129,9 @@ export default {
onNotifySms: 'onSaleInvoiceNotifySms',
onNotifiedSms: 'onSaleInvoiceNotifiedSms',
+
+ onNotifyMail: 'onSaleInvoiceNotifyMail',
+ onNotifyReminderMail: 'onSaleInvoiceNotifyReminderMail'
},
/**
@@ -160,6 +163,8 @@ export default {
onRejecting: 'onSaleEstimateRejecting',
onRejected: 'onSaleEstimateRejected',
+
+ onNotifyMail: 'onSaleEstimateNotifyMail'
},
/**
diff --git a/packages/server/src/system/migrations/20231012112401_add_tax_number_column_to_tenants_metadata_table.js b/packages/server/src/system/migrations/20231012112401_add_tax_number_column_to_tenants_metadata_table.js
new file mode 100644
index 000000000..ce7de80f0
--- /dev/null
+++ b/packages/server/src/system/migrations/20231012112401_add_tax_number_column_to_tenants_metadata_table.js
@@ -0,0 +1,11 @@
+exports.up = function (knex) {
+ return knex.schema.table('tenants_metadata', (table) => {
+ table.string('tax_number')
+ });
+};
+
+exports.down = function (knex) {
+ return knex.schema.table('tenants_metadata', (table) => {
+ table.dropColumn('tax_number');
+ });
+};
diff --git a/packages/server/src/utils/deepdash.ts b/packages/server/src/utils/deepdash.ts
index 5d4ef60df..0ce65216a 100644
--- a/packages/server/src/utils/deepdash.ts
+++ b/packages/server/src/utils/deepdash.ts
@@ -41,10 +41,10 @@ const mapValuesDeepReverse = (nodes, callback, config?) => {
);
const mappedNode = callback(node, children);
- _.set(clonedNodes, pathString, {
- ...mappedNode,
- ...(!_.isEmpty(children) ? { children } : {}),
- });
+ if (!mappedNode.children && children) {
+ mappedNode.children = children;
+ }
+ _.set(clonedNodes, pathString, mappedNode);
});
return clonedNodes;
};
@@ -78,6 +78,27 @@ const filterNodesDeep = (predicate, nodes) => {
);
};
+const flatNestedTree = (obj, mapper, options) => {
+ return reduceDeep(
+ obj,
+ (accumulator, value, key, parentValue, context) => {
+ const computedValue = _.omit(value, ['children']);
+ const mappedValue = mapper
+ ? mapper(computedValue, key, context)
+ : computedValue;
+
+ accumulator.push(mappedValue);
+ return accumulator;
+ },
+ [],
+ {
+ childrenPath: 'children',
+ pathFormat: 'array',
+ ...options,
+ }
+ );
+};
+
export {
iteratee,
condense,
@@ -103,4 +124,5 @@ export {
someDeep,
mapValuesDeepReverse,
filterNodesDeep,
+ flatNestedTree,
};
diff --git a/packages/server/src/utils/index.ts b/packages/server/src/utils/index.ts
index 2b09381d1..919cd7af7 100644
--- a/packages/server/src/utils/index.ts
+++ b/packages/server/src/utils/index.ts
@@ -372,7 +372,7 @@ const mergeObjectsBykey = (object1, object2, key) => {
};
function templateRender(filePath, options) {
- const basePath = path.join(__dirname, '../../resources/views');
+ const basePath = path.join(global.__resources_dir, '/views');
return pug.renderFile(`${basePath}/${filePath}.pug`, options);
}
diff --git a/packages/server/src/utils/table.ts b/packages/server/src/utils/table.ts
index a6d39be94..74f5c3170 100644
--- a/packages/server/src/utils/table.ts
+++ b/packages/server/src/utils/table.ts
@@ -22,7 +22,9 @@ export function tableRowMapper(
): ITableRow {
const cells = columns.map((column) => ({
key: column.key,
- value: column.value ? column.value : getAccessor(object, column.accessor),
+ value: column.value
+ ? column.value
+ : getAccessor(object, column.accessor) || '',
}));
return {
diff --git a/packages/server/storage/.gitignore b/packages/server/storage/.gitignore
new file mode 100644
index 000000000..8a4307f28
--- /dev/null
+++ b/packages/server/storage/.gitignore
@@ -0,0 +1,3 @@
+*
+!pdf/
+!.gitignore
\ No newline at end of file
diff --git a/packages/server/storage/pdf/.gitignore b/packages/server/storage/pdf/.gitignore
new file mode 100644
index 000000000..c96a04f00
--- /dev/null
+++ b/packages/server/storage/pdf/.gitignore
@@ -0,0 +1,2 @@
+*
+!.gitignore
\ No newline at end of file
diff --git a/packages/webapp/Dockerfile b/packages/webapp/Dockerfile
index 6415a6510..41054a525 100644
--- a/packages/webapp/Dockerfile
+++ b/packages/webapp/Dockerfile
@@ -1,17 +1,26 @@
-FROM node:14.15.0 as build
+FROM node:18.16.0-alpine as build
USER root
WORKDIR /app
-# Install dependencies
-COPY package*.json ./
-COPY lerna.json ./
+# Copy application dependency manifests to the container image.
+COPY ./package*.json ./
+COPY ./pnpm-lock.yaml ./pnpm-lock.yaml
+COPY ./pnpm-workspace.yaml ./pnpm-workspace.yaml
+COPY ./lerna.json ./lerna.json
+COPY ./packages/webapp/package*.json ./packages/webapp/
-COPY ./packages/webapp/package*.json /app/packages/webapp/
+# Install application dependencies
+RUN apk update
+RUN apk add python3 build-base chromium
-RUN npm install
-RUN npm run bootstrap
+# Set PYHTON env
+ENV PYTHON=/usr/bin/python3
+
+# Install pnpm packages dependencies
+RUN npm install -g pnpm
+RUN pnpm install
# Build webapp package
COPY ./packages/webapp /app/packages/webapp
diff --git a/packages/webapp/craco.config.js b/packages/webapp/craco.config.js
index 724a886c9..4d444d065 100644
--- a/packages/webapp/craco.config.js
+++ b/packages/webapp/craco.config.js
@@ -5,5 +5,13 @@ module.exports = {
alias: {
'@': path.resolve(__dirname, 'src'),
},
+ configure: {
+ resolve: {
+ fallback: { path: require.resolve('path-browserify') },
+ },
+ },
+ },
+ devServer: {
+ allowedHosts: process.env.GITPOD_HOST ? 'all' : 'auto'
},
};
diff --git a/packages/webapp/package.json b/packages/webapp/package.json
index 1d6481add..c1c2415aa 100644
--- a/packages/webapp/package.json
+++ b/packages/webapp/package.json
@@ -20,6 +20,13 @@
"@testing-library/jest-dom": "^4.2.4",
"@testing-library/react": "^9.4.0",
"@testing-library/user-event": "^7.2.1",
+ "@tiptap/extension-color": "latest",
+ "@tiptap/extension-text-style": "2.1.13",
+ "@tiptap/core": "2.1.13",
+ "@tiptap/pm": "2.1.13",
+ "@tiptap/extension-list-item": "2.1.13",
+ "@tiptap/react": "2.1.13",
+ "@tiptap/starter-kit": "2.1.13",
"@types/jest": "^26.0.15",
"@types/js-money": "^0.6.1",
"@types/lodash": "^4.14.172",
@@ -37,7 +44,7 @@
"@typescript-eslint/parser": "^2.10.0",
"@welldone-software/why-did-you-render": "^6.0.0-rc.1",
"accounting": "^0.4.1",
- "axios": "^0.21.2",
+ "axios": "^1.6.0",
"basscss": "^8.0.2",
"camelcase": "^5.3.1",
"classnames": "^2.3.2",
diff --git a/packages/webapp/src/components/Dashboard/Dashboard.tsx b/packages/webapp/src/components/Dashboard/Dashboard.tsx
index 2637128cf..467963849 100644
--- a/packages/webapp/src/components/Dashboard/Dashboard.tsx
+++ b/packages/webapp/src/components/Dashboard/Dashboard.tsx
@@ -51,8 +51,8 @@ export default function Dashboard() {
-
+
diff --git a/packages/webapp/src/components/DialogsContainer.tsx b/packages/webapp/src/components/DialogsContainer.tsx
index d4e5ae105..684aef05a 100644
--- a/packages/webapp/src/components/DialogsContainer.tsx
+++ b/packages/webapp/src/components/DialogsContainer.tsx
@@ -46,6 +46,10 @@ import ProjectBillableEntriesFormDialog from '@/containers/Projects/containers/P
import TaxRateFormDialog from '@/containers/TaxRates/dialogs/TaxRateFormDialog/TaxRateFormDialog';
import { DialogsName } from '@/constants/dialogs';
import InvoiceExchangeRateChangeDialog from '@/containers/Sales/Invoices/InvoiceForm/Dialogs/InvoiceExchangeRateChangeDialog';
+import InvoiceMailDialog from '@/containers/Sales/Invoices/InvoiceMailDialog/InvoiceMailDialog';
+import EstimateMailDialog from '@/containers/Sales/Estimates/EstimateMailDialog/EstimateMailDialog';
+import ReceiptMailDialog from '@/containers/Sales/Receipts/ReceiptMailDialog/ReceiptMailDialog';
+import PaymentMailDialog from '@/containers/Sales/PaymentReceives/PaymentMailDialog/PaymentMailDialog';
/**
* Dialogs container.
@@ -138,6 +142,10 @@ export default function DialogsContainer() {
+
+
+
+
);
}
diff --git a/packages/webapp/src/components/Forms/FRichEditor.tsx b/packages/webapp/src/components/Forms/FRichEditor.tsx
new file mode 100644
index 000000000..d490f87f5
--- /dev/null
+++ b/packages/webapp/src/components/Forms/FRichEditor.tsx
@@ -0,0 +1,52 @@
+import React from 'react';
+import { FieldConfig, FieldProps } from 'formik';
+import { Field } from '@blueprintjs-formik/core';
+import { RichEditor, RichEditorProps } from '../../components/RichEditor';
+
+export interface FRichEditorProps
+ extends Omit,
+ RichEditorProps {
+ name: string;
+ value?: string;
+}
+
+interface FieldToRichEditorProps
+ extends FieldProps,
+ Omit {}
+
+/**
+ * Transformes the field props to `RichEditor` props.
+ * @param {FieldToRichEditorProps}
+ * @returns {HTMLSelectProps}
+ */
+function fieldToRichEditor({
+ field: { onBlur: onFieldBlur, ...field },
+ form: { touched, errors, ...form },
+ ...props
+}: FieldToRichEditorProps): RichEditorProps {
+ return {
+ ...field,
+ ...props,
+ onChange: (value: string) => {
+ form.setFieldValue(field.name, value);
+ },
+ };
+}
+
+/**
+ * Transformes field props to `RichEditor` props.
+ * @param {FieldToRichEditorProps}
+ * @returns {JSX.Element}
+ */
+function FieldToRichEditor({ ...props }: FieldToRichEditorProps): JSX.Element {
+ return ;
+}
+
+/**
+ * Rich editor wrapper to bind with Formik.
+ * @param {FRichEditorProps} props -
+ * @returns {JSX.Element}
+ */
+export function FRichEditor({ ...props }: FRichEditorProps): JSX.Element {
+ return ;
+}
diff --git a/packages/webapp/src/components/Forms/index.tsx b/packages/webapp/src/components/Forms/index.tsx
index d4fb2aec0..c638ac029 100644
--- a/packages/webapp/src/components/Forms/index.tsx
+++ b/packages/webapp/src/components/Forms/index.tsx
@@ -4,4 +4,5 @@ export * from './FMoneyInputGroup';
export * from './BlueprintFormik';
export * from './InputPrependText';
export * from './InputPrependButton';
-export * from './MoneyInputGroup';
\ No newline at end of file
+export * from './MoneyInputGroup';
+export * from './FRichEditor';
\ No newline at end of file
diff --git a/packages/webapp/src/components/RichEditor/RichEditor.style.scss b/packages/webapp/src/components/RichEditor/RichEditor.style.scss
new file mode 100644
index 000000000..942fdf81e
--- /dev/null
+++ b/packages/webapp/src/components/RichEditor/RichEditor.style.scss
@@ -0,0 +1,66 @@
+/* Basic editor styles */
+.tiptap {
+ color: #222;
+
+ &:focus-visible {
+ outline: none;
+ }
+
+ >*+* {
+ margin-top: 0.75em;
+ }
+
+ ul,
+ ol {
+ padding: 0 1rem;
+ }
+
+ h1,
+ h2,
+ h3,
+ h4,
+ h5,
+ h6 {
+ line-height: 1.1;
+ }
+
+ code {
+ background: rgba(#ffffff, 0.1);
+ color: rgba(#ffffff, 0.6);
+ border: 1px solid rgba(#ffffff, 0.1);
+ border-radius: 0.5rem;
+ padding: 0.2rem;
+ }
+
+ pre {
+ background: rgba(#ffffff, 0.1);
+ font-family: "JetBrainsMono", monospace;
+ padding: 0.75rem 1rem;
+ border-radius: 0.5rem;
+
+ code {
+ color: inherit;
+ padding: 0;
+ background: none;
+ font-size: 0.8rem;
+ border: none;
+ }
+ }
+
+ img {
+ max-width: 100%;
+ height: auto;
+ }
+
+ blockquote {
+ margin-left: 0;
+ padding-left: 1rem;
+ border-left: 2px solid rgba(#ffffff, 0.4);
+
+ hr {
+ border: none;
+ border-top: 2px solid rgba(#ffffff, 0.1);
+ margin: 2rem 0;
+ }
+ }
+}
\ No newline at end of file
diff --git a/packages/webapp/src/components/RichEditor/RichEditor.tsx b/packages/webapp/src/components/RichEditor/RichEditor.tsx
new file mode 100644
index 000000000..da82fb09f
--- /dev/null
+++ b/packages/webapp/src/components/RichEditor/RichEditor.tsx
@@ -0,0 +1,58 @@
+// @ts-nocheck
+import { Color } from '@tiptap/extension-color';
+import ListItem from '@tiptap/extension-list-item';
+import TextStyle from '@tiptap/extension-text-style';
+import { EditorProvider } from '@tiptap/react';
+import StarterKit from '@tiptap/starter-kit';
+import { useUncontrolled } from '@/hooks/useUncontrolled';
+import { Box } from '../Layout/Box';
+import './RichEditor.style.scss';
+
+const extensions = [
+ Color.configure({ types: [TextStyle.name, ListItem.name] }),
+ TextStyle.configure({ types: [ListItem.name] }),
+ StarterKit.configure({
+ bulletList: {
+ keepMarks: true,
+ keepAttributes: false,
+ },
+ orderedList: {
+ keepMarks: true,
+ keepAttributes: false,
+ },
+ }),
+];
+
+export interface RichEditorProps {
+ value?: string;
+ initialValue?: string;
+ onChange?: (value: string) => void;
+ className?: string;
+}
+export const RichEditor = ({
+ value,
+ initialValue,
+ onChange,
+ className,
+}: RichEditorProps) => {
+ const [content, handleChange] = useUncontrolled({
+ value,
+ initialValue,
+ onChange,
+ finalValue: '',
+ });
+
+ const handleBlur = ({ editor }) => {
+ handleChange(editor.getHTML());
+ };
+
+ return (
+
+
+
+ );
+};
diff --git a/packages/webapp/src/components/RichEditor/index.ts b/packages/webapp/src/components/RichEditor/index.ts
new file mode 100644
index 000000000..226b701f3
--- /dev/null
+++ b/packages/webapp/src/components/RichEditor/index.ts
@@ -0,0 +1 @@
+export * from './RichEditor';
\ No newline at end of file
diff --git a/packages/webapp/src/constants/dialogs.ts b/packages/webapp/src/constants/dialogs.ts
index e9c82bdd4..c9bb52a0e 100644
--- a/packages/webapp/src/constants/dialogs.ts
+++ b/packages/webapp/src/constants/dialogs.ts
@@ -48,5 +48,9 @@ export enum DialogsName {
ProjectBillableEntriesForm = 'project-billable-entries',
InvoiceNumberSettings = 'InvoiceNumberSettings',
TaxRateForm = 'tax-rate-form',
- InvoiceExchangeRateChangeNotice = 'InvoiceExchangeRateChangeNotice'
+ InvoiceExchangeRateChangeNotice = 'InvoiceExchangeRateChangeNotice',
+ InvoiceMail = 'invoice-mail',
+ EstimateMail = 'estimate-mail',
+ ReceiptMail = 'receipt-mail',
+ PaymentMail = 'payment-mail',
}
diff --git a/packages/webapp/src/constants/preferencesMenu.tsx b/packages/webapp/src/constants/preferencesMenu.tsx
index f90c7ed04..0925532ff 100644
--- a/packages/webapp/src/constants/preferencesMenu.tsx
+++ b/packages/webapp/src/constants/preferencesMenu.tsx
@@ -12,6 +12,22 @@ export default [
text: ,
href: '/preferences/users',
},
+ {
+ text: ,
+ href: '/preferences/estimates',
+ },
+ {
+ text: ,
+ href: '/preferences/invoices',
+ },
+ {
+ text: ,
+ href: '/preferences/receipts',
+ },
+ {
+ text: ,
+ href: '/preferences/credit-notes',
+ },
{
text: ,
href: '/preferences/currencies',
diff --git a/packages/webapp/src/containers/Accounts/AccountsDataTable.tsx b/packages/webapp/src/containers/Accounts/AccountsDataTable.tsx
index dfa4b90be..edcfe2e18 100644
--- a/packages/webapp/src/containers/Accounts/AccountsDataTable.tsx
+++ b/packages/webapp/src/containers/Accounts/AccountsDataTable.tsx
@@ -32,7 +32,7 @@ function AccountsDataTable({
// #withAlertsDialog
openAlert,
- // #withDial
+ // #withDialog
openDialog,
// #withDrawerActions
diff --git a/packages/webapp/src/containers/Authentication/Authentication.tsx b/packages/webapp/src/containers/Authentication/Authentication.tsx
index 8d2887849..8b05570c4 100644
--- a/packages/webapp/src/containers/Authentication/Authentication.tsx
+++ b/packages/webapp/src/containers/Authentication/Authentication.tsx
@@ -8,9 +8,9 @@ import { TransitionGroup, CSSTransition } from 'react-transition-group';
import authenticationRoutes from '@/routes/authentication';
import { Icon, FormattedMessage as T } from '@/components';
import { useIsAuthenticated } from '@/hooks/state';
+import { AuthMetaBootProvider } from './AuthMetaBoot';
import '@/style/pages/Authentication/Auth.scss';
-import { AuthMetaBootProvider } from './AuthMetaBoot';
export function Authentication() {
const to = { pathname: '/' };
diff --git a/packages/webapp/src/containers/Customers/CustomerForm/CustomerForm.schema.tsx b/packages/webapp/src/containers/Customers/CustomerForm/CustomerForm.schema.tsx
index f93810ac3..8cdb5d308 100644
--- a/packages/webapp/src/containers/Customers/CustomerForm/CustomerForm.schema.tsx
+++ b/packages/webapp/src/containers/Customers/CustomerForm/CustomerForm.schema.tsx
@@ -29,7 +29,7 @@ const Schema = Yup.object().shape({
billing_address_2: Yup.string().trim(),
billing_address_city: Yup.string().trim(),
billing_address_state: Yup.string().trim(),
- billing_address_postcode: Yup.number().nullable(),
+ billing_address_postcode: Yup.string().nullable(),
billing_address_phone: Yup.number(),
shipping_address_country: Yup.string().trim(),
@@ -37,7 +37,7 @@ const Schema = Yup.object().shape({
shipping_address_2: Yup.string().trim(),
shipping_address_city: Yup.string().trim(),
shipping_address_state: Yup.string().trim(),
- shipping_address_postcode: Yup.number().nullable(),
+ shipping_address_postcode: Yup.string().nullable(),
shipping_address_phone: Yup.number(),
opening_balance: Yup.number().nullable(),
diff --git a/packages/webapp/src/containers/Drawers/BillDrawer/utils.tsx b/packages/webapp/src/containers/Drawers/BillDrawer/utils.tsx
index 39cf8052d..9b9691ddf 100644
--- a/packages/webapp/src/containers/Drawers/BillDrawer/utils.tsx
+++ b/packages/webapp/src/containers/Drawers/BillDrawer/utils.tsx
@@ -63,8 +63,7 @@ export const useBillReadonlyEntriesTableColumns = () => {
},
{
Header: intl.get('rate'),
- accessor: 'rate',
- Cell: FormatNumberCell,
+ accessor: 'rate_formatted',
width: getColumnWidth(entries, 'rate', {
minWidth: 60,
magicSpacing: 5,
@@ -75,9 +74,8 @@ export const useBillReadonlyEntriesTableColumns = () => {
},
{
Header: intl.get('amount'),
- accessor: 'amount',
- Cell: FormatNumberCell,
- width: getColumnWidth(entries, 'amount', {
+ accessor: 'total_formatted',
+ width: getColumnWidth(entries, 'total_formatted', {
minWidth: 60,
magicSpacing: 5,
}),
diff --git a/packages/webapp/src/containers/Drawers/CreditNoteDetailDrawer/utils.tsx b/packages/webapp/src/containers/Drawers/CreditNoteDetailDrawer/utils.tsx
index b9bb3a1e8..85e57c5ee 100644
--- a/packages/webapp/src/containers/Drawers/CreditNoteDetailDrawer/utils.tsx
+++ b/packages/webapp/src/containers/Drawers/CreditNoteDetailDrawer/utils.tsx
@@ -60,9 +60,8 @@ export const useCreditNoteReadOnlyEntriesColumns = () => {
},
{
Header: intl.get('rate'),
- accessor: 'rate',
- Cell: FormatNumberCell,
- width: getColumnWidth(entries, 'rate', {
+ accessor: 'rate_formatted',
+ width: getColumnWidth(entries, 'rate_formatted', {
minWidth: 60,
magicSpacing: 5,
}),
@@ -72,9 +71,8 @@ export const useCreditNoteReadOnlyEntriesColumns = () => {
},
{
Header: intl.get('amount'),
- accessor: 'amount',
- Cell: FormatNumberCell,
- width: getColumnWidth(entries, 'amount', {
+ accessor: 'total_formatted',
+ width: getColumnWidth(entries, 'total_formatted', {
minWidth: 60,
magicSpacing: 5,
}),
diff --git a/packages/webapp/src/containers/Drawers/EstimateDetailDrawer/EstimateDetailActionsBar.tsx b/packages/webapp/src/containers/Drawers/EstimateDetailDrawer/EstimateDetailActionsBar.tsx
index 6f1ca3e91..3ac2b1b75 100644
--- a/packages/webapp/src/containers/Drawers/EstimateDetailDrawer/EstimateDetailActionsBar.tsx
+++ b/packages/webapp/src/containers/Drawers/EstimateDetailDrawer/EstimateDetailActionsBar.tsx
@@ -1,5 +1,4 @@
// @ts-nocheck
-import React from 'react';
import { useHistory } from 'react-router-dom';
import {
@@ -22,10 +21,12 @@ import {
Icon,
FormattedMessage as T,
Can,
+ Choose,
} from '@/components';
import { compose } from '@/utils';
import { DRAWERS } from '@/constants/drawers';
+import { DialogsName } from '@/constants/dialogs';
/**
* Estimate read-only details actions bar of the drawer.
@@ -51,7 +52,6 @@ function EstimateDetailActionsBar({
history.push(`/estimates/${estimateId}/edit`);
closeDrawer(DRAWERS.ESTIMATE_DETAILS);
};
-
// Handle delete sale estimate.
const handleDeleteEstimate = () => {
openAlert('estimate-delete', { estimateId });
@@ -65,6 +65,10 @@ function EstimateDetailActionsBar({
const handleNotifyViaSMS = () => {
openDialog('notify-estimate-via-sms', { estimateId });
};
+ // Handles the estimate mail dialog.
+ const handleMailEstimate = () => {
+ openDialog(DialogsName.EstimateMail, { estimateId });
+ };
return (
@@ -78,13 +82,21 @@ function EstimateDetailActionsBar({
/>
+
+ }
+ text={'Send Mail'}
+ onClick={handleMailEstimate}
+ />
}
text={ }
onClick={handlePrintEstimate}
/>
+
- }
- />
-
- }
- interactionKind={PopoverInteractionKind.CLICK}
- position={Position.BOTTOM_LEFT}
- modifiers={{
- offset: { offset: '0, 4' },
- }}
- >
- } minimal={true} />
-
- );
-}
\ No newline at end of file
+export const EstimateMoreMenuItems = R.compose(withAlertsActions)(
+ ({
+ // # withAlertsActions,
+ openAlert,
+
+ // # rest
+ payload: { onNotifyViaSMS },
+ }) => {
+ const { estimateId, estimate } = useEstimateDetailDrawerContext();
+
+ // Handle cancel/confirm estimate approve.
+ const handleApproveEstimate = () => {
+ openAlert('estimate-Approve', { estimateId });
+ };
+ // Handle cancel/confirm estimate reject.
+ const handleRejectEstimate = () => {
+ openAlert('estimate-reject', { estimateId });
+ };
+
+ return (
+
+ }
+ />
+
+
+
+
+ }
+ onClick={handleApproveEstimate}
+ />
+
+
+
+
+ }
+ onClick={handleRejectEstimate}
+ />
+
+
+
+
+ }
+ onClick={handleApproveEstimate}
+ />
+
+
+ }
+ onClick={handleRejectEstimate}
+ />
+
+
+
+
+ }
+ interactionKind={PopoverInteractionKind.CLICK}
+ position={Position.BOTTOM_LEFT}
+ modifiers={{
+ offset: { offset: '0, 4' },
+ }}
+ >
+ } minimal={true} />
+
+ );
+ },
+);
diff --git a/packages/webapp/src/containers/Drawers/EstimateDetailDrawer/utils.tsx b/packages/webapp/src/containers/Drawers/EstimateDetailDrawer/utils.tsx
index 3172feae4..71c869c7e 100644
--- a/packages/webapp/src/containers/Drawers/EstimateDetailDrawer/utils.tsx
+++ b/packages/webapp/src/containers/Drawers/EstimateDetailDrawer/utils.tsx
@@ -47,9 +47,8 @@ export const useEstimateReadonlyEntriesColumns = () => {
},
{
Header: intl.get('rate'),
- accessor: 'rate',
- Cell: FormatNumberCell,
- width: getColumnWidth(entries, 'rate', {
+ accessor: 'rate_formatted',
+ width: getColumnWidth(entries, 'rate_formatted', {
minWidth: 60,
magicSpacing: 5,
}),
@@ -59,9 +58,9 @@ export const useEstimateReadonlyEntriesColumns = () => {
},
{
Header: intl.get('amount'),
- accessor: 'amount',
+ accessor: 'total_formatted',
Cell: FormatNumberCell,
- width: getColumnWidth(entries, 'amount', {
+ width: getColumnWidth(entries, 'total_formatted', {
minWidth: 60,
magicSpacing: 5,
}),
diff --git a/packages/webapp/src/containers/Drawers/InvoiceDetailDrawer/InvoiceDetailActionsBar.tsx b/packages/webapp/src/containers/Drawers/InvoiceDetailDrawer/InvoiceDetailActionsBar.tsx
index 425664b10..4a2482165 100644
--- a/packages/webapp/src/containers/Drawers/InvoiceDetailDrawer/InvoiceDetailActionsBar.tsx
+++ b/packages/webapp/src/containers/Drawers/InvoiceDetailDrawer/InvoiceDetailActionsBar.tsx
@@ -31,6 +31,7 @@ import {
import { compose } from '@/utils';
import { BadDebtMenuItem } from './utils';
import { DRAWERS } from '@/constants/drawers';
+import { DialogsName } from '@/constants/dialogs';
/**
* Invoice details action bar.
@@ -93,6 +94,10 @@ function InvoiceDetailActionsBar({
openAlert('cancel-bad-debt', { invoiceId });
};
+ const handleMailInvoice = () => {
+ openDialog(DialogsName.InvoiceMail, { invoiceId });
+ };
+
return (
@@ -117,12 +122,19 @@ function InvoiceDetailActionsBar({
+ }
+ onClick={handleMailInvoice}
+ className={Classes.MINIMAL}
+ />
}
text={ }
onClick={handlePrintInvoice}
/>
+
}
- value={ }
+ value={invoice.subtotal_formatted}
borderStyle={TotalLineBorderStyle.SingleDark}
/>
{invoice.taxes.map((taxRate) => (
diff --git a/packages/webapp/src/containers/Drawers/InvoiceDetailDrawer/utils.tsx b/packages/webapp/src/containers/Drawers/InvoiceDetailDrawer/utils.tsx
index 063c335eb..fc2d3d1b4 100644
--- a/packages/webapp/src/containers/Drawers/InvoiceDetailDrawer/utils.tsx
+++ b/packages/webapp/src/containers/Drawers/InvoiceDetailDrawer/utils.tsx
@@ -64,24 +64,22 @@ export const useInvoiceReadonlyEntriesColumns = () => {
},
{
Header: intl.get('rate'),
- accessor: 'rate',
- Cell: FormatNumberCell,
+ accessor: 'rate_formatted',
align: 'right',
disableSortBy: true,
textOverview: true,
- width: getColumnWidth(entries, 'rate', {
+ width: getColumnWidth(entries, 'rate_formatted', {
minWidth: 60,
magicSpacing: 5,
}),
},
{
Header: intl.get('amount'),
- accessor: 'amount',
- Cell: FormatNumberCell,
+ accessor: 'total_formatted',
align: 'right',
disableSortBy: true,
textOverview: true,
- width: getColumnWidth(entries, 'amount', {
+ width: getColumnWidth(entries, 'total_formatted', {
minWidth: 60,
magicSpacing: 5,
}),
diff --git a/packages/webapp/src/containers/Drawers/PaymentMadeDetailDrawer/utils.tsx b/packages/webapp/src/containers/Drawers/PaymentMadeDetailDrawer/utils.tsx
index 4721e88c4..939778772 100644
--- a/packages/webapp/src/containers/Drawers/PaymentMadeDetailDrawer/utils.tsx
+++ b/packages/webapp/src/containers/Drawers/PaymentMadeDetailDrawer/utils.tsx
@@ -52,9 +52,8 @@ export const usePaymentMadeEntriesColumns = () => {
},
{
Header: intl.get('payment_amount'),
- accessor: 'payment_amount',
- Cell: FormatNumberCell,
- width: getColumnWidth(entries, 'payment_amount', {
+ accessor: 'payment_amount_formatted',
+ width: getColumnWidth(entries, 'payment_amount_formatted', {
minWidth: 60,
magicSpacing: 5,
}),
diff --git a/packages/webapp/src/containers/Drawers/PaymentReceiveDetailDrawer/PaymentReceiveActionsBar.tsx b/packages/webapp/src/containers/Drawers/PaymentReceiveDetailDrawer/PaymentReceiveActionsBar.tsx
index 6ca7a4d50..6cfa62edc 100644
--- a/packages/webapp/src/containers/Drawers/PaymentReceiveDetailDrawer/PaymentReceiveActionsBar.tsx
+++ b/packages/webapp/src/containers/Drawers/PaymentReceiveDetailDrawer/PaymentReceiveActionsBar.tsx
@@ -28,6 +28,7 @@ import {
import { compose } from '@/utils';
import { DRAWERS } from '@/constants/drawers';
+import { DialogsName } from '@/constants/dialogs';
/**
* Payment receive actions bar.
@@ -68,6 +69,10 @@ function PaymentReceiveActionsBar({
openDialog('payment-pdf-preview', { paymentReceiveId });
};
+ const handleMailPaymentReceive = () => {
+ openDialog(DialogsName.PaymentMail, { paymentReceiveId });
+ };
+
return (
@@ -81,12 +86,19 @@ function PaymentReceiveActionsBar({
+ }
+ onClick={handleMailPaymentReceive}
+ />
}
text={ }
onClick={handlePrintPaymentReceive}
/>
+
{
},
{
Header: intl.get('payment_amount'),
- accessor: 'invoice.payment_amount',
- Cell: FormatNumberCell,
+ accessor: 'payment_amount_formatted',
align: 'right',
- width: getColumnWidth(entries, 'invoice.payment_amount', {
+ width: getColumnWidth(entries, 'payment_amount_formatted', {
minWidth: 60,
magicSpacing: 5,
}),
diff --git a/packages/webapp/src/containers/Drawers/ReceiptDetailDrawer/ReceiptDetailActionBar.tsx b/packages/webapp/src/containers/Drawers/ReceiptDetailDrawer/ReceiptDetailActionBar.tsx
index b3e43b6ed..9ca00216a 100644
--- a/packages/webapp/src/containers/Drawers/ReceiptDetailDrawer/ReceiptDetailActionBar.tsx
+++ b/packages/webapp/src/containers/Drawers/ReceiptDetailDrawer/ReceiptDetailActionBar.tsx
@@ -24,6 +24,7 @@ import { useReceiptDetailDrawerContext } from './ReceiptDetailDrawerProvider';
import { SaleReceiptAction, AbilitySubject } from '@/constants/abilityOption';
import { safeCallback, compose } from '@/utils';
import { DRAWERS } from '@/constants/drawers';
+import { DialogsName } from '@/constants/dialogs';
/**
* Receipt details actions bar.
@@ -60,6 +61,9 @@ function ReceiptDetailActionBar({
const handleNotifyViaSMS = () => {
openDialog('notify-receipt-via-sms', { receiptId });
};
+ const handleReceiptMail = () => {
+ openDialog(DialogsName.ReceiptMail, { receiptId });
+ };
return (
@@ -74,6 +78,12 @@ function ReceiptDetailActionBar({
+ }
+ onClick={handleReceiptMail}
+ />
}
diff --git a/packages/webapp/src/containers/Drawers/ReceiptDetailDrawer/ReceiptDetailDrawerProvider.tsx b/packages/webapp/src/containers/Drawers/ReceiptDetailDrawer/ReceiptDetailDrawerProvider.tsx
index 577ef092e..ae87dfe02 100644
--- a/packages/webapp/src/containers/Drawers/ReceiptDetailDrawer/ReceiptDetailDrawerProvider.tsx
+++ b/packages/webapp/src/containers/Drawers/ReceiptDetailDrawer/ReceiptDetailDrawerProvider.tsx
@@ -18,12 +18,9 @@ function ReceiptDetailDrawerProvider({ receiptId, ...props }) {
const { featureCan } = useFeatureCan();
// Fetch sale receipt details.
- const { data: receipt, isFetching: isReceiptLoading } = useReceipt(
- receiptId,
- {
- enabled: !!receiptId,
- },
- );
+ const { data: receipt, isLoading: isReceiptLoading } = useReceipt(receiptId, {
+ enabled: !!receiptId,
+ });
// Provider.
const provider = {
diff --git a/packages/webapp/src/containers/Drawers/ReceiptDetailDrawer/ReceiptDetailTableFooter.tsx b/packages/webapp/src/containers/Drawers/ReceiptDetailDrawer/ReceiptDetailTableFooter.tsx
index 56ee5c87b..657606f17 100644
--- a/packages/webapp/src/containers/Drawers/ReceiptDetailDrawer/ReceiptDetailTableFooter.tsx
+++ b/packages/webapp/src/containers/Drawers/ReceiptDetailDrawer/ReceiptDetailTableFooter.tsx
@@ -23,7 +23,7 @@ export default function ReceiptDetailTableFooter() {
}
- value={ }
+ value={receipt.formatted_amount}
/>
}
diff --git a/packages/webapp/src/containers/Drawers/ReceiptDetailDrawer/utils.tsx b/packages/webapp/src/containers/Drawers/ReceiptDetailDrawer/utils.tsx
index cf48f1d9a..0241d3e76 100644
--- a/packages/webapp/src/containers/Drawers/ReceiptDetailDrawer/utils.tsx
+++ b/packages/webapp/src/containers/Drawers/ReceiptDetailDrawer/utils.tsx
@@ -43,8 +43,7 @@ export const useReceiptReadonlyEntriesTableColumns = () => {
{
Header: intl.get('rate'),
accessor: 'rate',
- Cell: FormatNumberCell,
- width: getColumnWidth(entries, 'rate', {
+ width: getColumnWidth(entries, 'rate_formatted', {
minWidth: 60,
magicSpacing: 5,
}),
@@ -55,8 +54,7 @@ export const useReceiptReadonlyEntriesTableColumns = () => {
{
Header: intl.get('amount'),
accessor: 'amount',
- Cell: FormatNumberCell,
- width: getColumnWidth(entries, 'amount', {
+ width: getColumnWidth(entries, 'total_formatted', {
minWidth: 60,
magicSpacing: 5,
}),
diff --git a/packages/webapp/src/containers/Drawers/VendorCreditDetailDrawer/VendorCreditDetailDrawerFooter.tsx b/packages/webapp/src/containers/Drawers/VendorCreditDetailDrawer/VendorCreditDetailDrawerFooter.tsx
index 42fd4eb60..e11cbce67 100644
--- a/packages/webapp/src/containers/Drawers/VendorCreditDetailDrawer/VendorCreditDetailDrawerFooter.tsx
+++ b/packages/webapp/src/containers/Drawers/VendorCreditDetailDrawer/VendorCreditDetailDrawerFooter.tsx
@@ -23,7 +23,7 @@ export default function VendorCreditDetailDrawerFooter() {
}
- value={ }
+ value={vendorCredit.formatted_amount}
borderStyle={TotalLineBorderStyle.SingleDark}
/>
{
},
{
Header: intl.get('rate'),
- accessor: 'rate',
- Cell: FormatNumberCell,
- width: getColumnWidth(entries, 'rate', {
+ accessor: 'rate_formatted',
+ width: getColumnWidth(entries, 'rate_formatted', {
minWidth: 60,
magicSpacing: 5,
}),
@@ -73,9 +72,8 @@ export const useVendorCreditReadonlyEntriesTableColumns = () => {
},
{
Header: intl.get('amount'),
- accessor: 'amount',
- Cell: FormatNumberCell,
- width: getColumnWidth(entries, 'amount', {
+ accessor: 'total_formatted',
+ width: getColumnWidth(entries, 'total_formatted', {
minWidth: 60,
magicSpacing: 5,
}),
diff --git a/packages/webapp/src/containers/Entries/utils.tsx b/packages/webapp/src/containers/Entries/utils.tsx
index 50f6555e3..326669cd4 100644
--- a/packages/webapp/src/containers/Entries/utils.tsx
+++ b/packages/webapp/src/containers/Entries/utils.tsx
@@ -284,26 +284,31 @@ export const useComposeRowsOnRemoveTableRow = () => {
/**
* Retrieves the aggregate tax rates from the given item entries.
+ * @param {string} currencyCode -
+ * @param {any} taxRates -
+ * @param {any} entries -
*/
-export const aggregateItemEntriesTaxRates = R.curry((taxRates, entries) => {
- const taxRatesById = keyBy(taxRates, 'id');
+export const aggregateItemEntriesTaxRates = R.curry(
+ (currencyCode, taxRates, entries) => {
+ const taxRatesById = keyBy(taxRates, 'id');
- // Calculate the total tax amount of invoice entries.
- const filteredEntries = entries.filter((e) => e.tax_rate_id);
- const groupedTaxRates = groupBy(filteredEntries, 'tax_rate_id');
+ // Calculate the total tax amount of invoice entries.
+ const filteredEntries = entries.filter((e) => e.tax_rate_id);
+ const groupedTaxRates = groupBy(filteredEntries, 'tax_rate_id');
- return Object.keys(groupedTaxRates).map((taxRateId) => {
- const taxRate = taxRatesById[taxRateId];
- const taxRates = groupedTaxRates[taxRateId];
- const totalTaxAmount = sumBy(taxRates, 'tax_amount');
- const taxAmountFormatted = formattedAmount(totalTaxAmount, 'USD');
+ return Object.keys(groupedTaxRates).map((taxRateId) => {
+ const taxRate = taxRatesById[taxRateId];
+ const taxRates = groupedTaxRates[taxRateId];
+ const totalTaxAmount = sumBy(taxRates, 'tax_amount');
+ const taxAmountFormatted = formattedAmount(totalTaxAmount, currencyCode);
- return {
- taxRateId,
- taxRate: taxRate.rate,
- label: `${taxRate.name} [${taxRate.rate}%]`,
- taxAmount: totalTaxAmount,
- taxAmountFormatted,
- };
- });
-});
+ return {
+ taxRateId,
+ taxRate: taxRate.rate,
+ label: `${taxRate.name} [${taxRate.rate}%]`,
+ taxAmount: totalTaxAmount,
+ taxAmountFormatted,
+ };
+ });
+ },
+);
diff --git a/packages/webapp/src/containers/FinancialStatements/APAgingSummary/APAgingSummaryActionsBar.tsx b/packages/webapp/src/containers/FinancialStatements/APAgingSummary/APAgingSummaryActionsBar.tsx
index de806ab2f..f0473ab58 100644
--- a/packages/webapp/src/containers/FinancialStatements/APAgingSummary/APAgingSummaryActionsBar.tsx
+++ b/packages/webapp/src/containers/FinancialStatements/APAgingSummary/APAgingSummaryActionsBar.tsx
@@ -15,6 +15,7 @@ import { DashboardActionsBar, FormattedMessage as T, Icon } from '@/components';
import { useAPAgingSummaryContext } from './APAgingSummaryProvider';
import NumberFormatDropdown from '@/components/NumberFormatDropdown';
+import { APAgingSummaryExportMenu } from './components';
import withAPAgingSummary from './withAPAgingSummary';
import withAPAgingSummaryActions from './withAPAgingSummaryActions';
@@ -106,11 +107,18 @@ function APAgingSummaryActionsBar({
icon={ }
text={ }
/>
- }
- text={ }
- />
+ }
+ interactionKind={PopoverInteractionKind.CLICK}
+ placement="bottom-start"
+ minimal
+ >
+ }
+ text={ }
+ />
+
);
diff --git a/packages/webapp/src/containers/FinancialStatements/APAgingSummary/APAgingSummaryProvider.tsx b/packages/webapp/src/containers/FinancialStatements/APAgingSummary/APAgingSummaryProvider.tsx
index 367140711..28611a13d 100644
--- a/packages/webapp/src/containers/FinancialStatements/APAgingSummary/APAgingSummaryProvider.tsx
+++ b/packages/webapp/src/containers/FinancialStatements/APAgingSummary/APAgingSummaryProvider.tsx
@@ -27,6 +27,7 @@ function APAgingSummaryProvider({ filter, ...props }) {
isAPAgingLoading,
isAPAgingFetching,
refetch,
+ query,
};
return (
diff --git a/packages/webapp/src/containers/FinancialStatements/APAgingSummary/components.tsx b/packages/webapp/src/containers/FinancialStatements/APAgingSummary/components.tsx
index f6af9931a..b313bab50 100644
--- a/packages/webapp/src/containers/FinancialStatements/APAgingSummary/components.tsx
+++ b/packages/webapp/src/containers/FinancialStatements/APAgingSummary/components.tsx
@@ -1,10 +1,23 @@
// @ts-nocheck
-import React, { useMemo } from 'react';
+import { useRef } from 'react';
+import classNames from 'classnames';
-import { If } from '@/components';
+import { AppToaster, If, Stack } from '@/components';
import FinancialLoadingBar from '../FinancialLoadingBar';
import { useAPAgingSummaryContext } from './APAgingSummaryProvider';
import { agingSummaryDynamicColumns } from '../AgingSummary/dynamicColumns';
+import {
+ Classes,
+ Intent,
+ Menu,
+ MenuItem,
+ ProgressBar,
+ Text,
+} from '@blueprintjs/core';
+import {
+ useAPAgingSheetCsvExport,
+ useAPAgingSheetXlsxExport,
+} from '@/hooks/query';
/**
* Retrieve AP aging summary columns.
@@ -29,3 +42,87 @@ export function APAgingSummarySheetLoadingBar() {
);
}
+
+/**
+ * A/P aging summary export menu.
+ * @returns {JSX.Element}
+ */
+export function APAgingSummaryExportMenu() {
+ const toastKey = useRef(null);
+ const commonToastConfig = {
+ isCloseButtonShown: true,
+ timeout: 2000,
+ };
+ const { query } = useAPAgingSummaryContext();
+
+ const openProgressToast = (amount: number) => {
+ return (
+
+ The report has been exported successfully.
+ = 100,
+ })}
+ intent={amount < 100 ? Intent.PRIMARY : Intent.SUCCESS}
+ value={amount / 100}
+ />
+
+ );
+ };
+ // Export the report to xlsx.
+ const { mutateAsync: xlsxExport } = useAPAgingSheetXlsxExport(query, {
+ onDownloadProgress: (xlsxExportProgress: number) => {
+ if (!toastKey.current) {
+ toastKey.current = AppToaster.show({
+ message: openProgressToast(xlsxExportProgress),
+ ...commonToastConfig,
+ });
+ } else {
+ AppToaster.show(
+ {
+ message: openProgressToast(xlsxExportProgress),
+ ...commonToastConfig,
+ },
+ toastKey.current,
+ );
+ }
+ },
+ });
+ // Export the report to csv.
+ const { mutateAsync: csvExport } = useAPAgingSheetCsvExport(query, {
+ onDownloadProgress: (xlsxExportProgress: number) => {
+ if (!toastKey.current) {
+ toastKey.current = AppToaster.show({
+ message: openProgressToast(xlsxExportProgress),
+ ...commonToastConfig,
+ });
+ } else {
+ AppToaster.show(
+ {
+ message: openProgressToast(xlsxExportProgress),
+ ...commonToastConfig,
+ },
+ toastKey.current,
+ );
+ }
+ },
+ });
+ // Handle csv export button click.
+ const handleCsvExportBtnClick = () => {
+ csvExport();
+ };
+ // Handle xlsx export button click.
+ const handleXlsxExportBtnClick = () => {
+ xlsxExport();
+ };
+
+ return (
+
+
+
+
+ );
+}
diff --git a/packages/webapp/src/containers/FinancialStatements/ARAgingSummary/ARAgingSummaryActionsBar.tsx b/packages/webapp/src/containers/FinancialStatements/ARAgingSummary/ARAgingSummaryActionsBar.tsx
index bccef0742..4b34f94aa 100644
--- a/packages/webapp/src/containers/FinancialStatements/ARAgingSummary/ARAgingSummaryActionsBar.tsx
+++ b/packages/webapp/src/containers/FinancialStatements/ARAgingSummary/ARAgingSummaryActionsBar.tsx
@@ -19,6 +19,7 @@ import withARAgingSummaryActions from './withARAgingSummaryActions';
import withARAgingSummary from './withARAgingSummary';
import { compose, safeInvoke } from '@/utils';
+import { ARAgingSummaryExportMenu } from './components';
/**
* A/R Aging summary sheet - Actions bar.
@@ -107,11 +108,18 @@ function ARAgingSummaryActionsBar({
icon={ }
text={ }
/>
- }
- text={ }
- />
+ }
+ interactionKind={PopoverInteractionKind.CLICK}
+ placement="bottom-start"
+ minimal
+ >
+ }
+ text={ }
+ />
+
);
diff --git a/packages/webapp/src/containers/FinancialStatements/ARAgingSummary/components.tsx b/packages/webapp/src/containers/FinancialStatements/ARAgingSummary/components.tsx
index e2e89a8db..19166c101 100644
--- a/packages/webapp/src/containers/FinancialStatements/ARAgingSummary/components.tsx
+++ b/packages/webapp/src/containers/FinancialStatements/ARAgingSummary/components.tsx
@@ -1,10 +1,23 @@
// @ts-nocheck
-import React from 'react';
+import React, { useRef } from 'react';
+import classNames from 'classnames';
+import {
+ Classes,
+ Intent,
+ Menu,
+ MenuItem,
+ ProgressBar,
+ Text,
+} from '@blueprintjs/core';
import { useARAgingSummaryContext } from './ARAgingSummaryProvider';
-import { If, FormattedMessage as T } from '@/components';
+import { AppToaster, If, Stack, FormattedMessage as T } from '@/components';
import FinancialLoadingBar from '../FinancialLoadingBar';
import { agingSummaryDynamicColumns } from '../AgingSummary/dynamicColumns';
+import {
+ useARAgingSheetCsvExport,
+ useARAgingSheetXlsxExport,
+} from '@/hooks/query';
/**
* Retrieve AR aging summary columns.
@@ -29,3 +42,88 @@ export function ARAgingSummarySheetLoadingBar() {
);
}
+
+/**
+ * A/R aging summary export menu.
+ * @returns {JSX.Element}
+ */
+export function ARAgingSummaryExportMenu() {
+ const toastKey = useRef(null);
+ const commonToastConfig = {
+ isCloseButtonShown: true,
+ timeout: 2000,
+ };
+ const { query } = useARAgingSummaryContext();
+
+ const openProgressToast = (amount: number) => {
+ return (
+
+ The report has been exported successfully.
+ = 100,
+ })}
+ intent={amount < 100 ? Intent.PRIMARY : Intent.SUCCESS}
+ value={amount / 100}
+ />
+
+ );
+ };
+
+ // Export the report to xlsx.
+ const { mutateAsync: xlsxExport } = useARAgingSheetXlsxExport(query, {
+ onDownloadProgress: (xlsxExportProgress: number) => {
+ if (!toastKey.current) {
+ toastKey.current = AppToaster.show({
+ message: openProgressToast(xlsxExportProgress),
+ ...commonToastConfig,
+ });
+ } else {
+ AppToaster.show(
+ {
+ message: openProgressToast(xlsxExportProgress),
+ ...commonToastConfig,
+ },
+ toastKey.current,
+ );
+ }
+ },
+ });
+ // Export the report to csv.
+ const { mutateAsync: csvExport } = useARAgingSheetCsvExport(query, {
+ onDownloadProgress: (xlsxExportProgress: number) => {
+ if (!toastKey.current) {
+ toastKey.current = AppToaster.show({
+ message: openProgressToast(xlsxExportProgress),
+ ...commonToastConfig,
+ });
+ } else {
+ AppToaster.show(
+ {
+ message: openProgressToast(xlsxExportProgress),
+ ...commonToastConfig,
+ },
+ toastKey.current,
+ );
+ }
+ },
+ });
+ // Handle csv export button click.
+ const handleCsvExportBtnClick = () => {
+ csvExport();
+ };
+ // Handle xlsx export button click.
+ const handleXlsxExportBtnClick = () => {
+ xlsxExport();
+ };
+
+ return (
+
+
+
+
+ );
+}
diff --git a/packages/webapp/src/containers/FinancialStatements/BalanceSheet/BalanceSheetActionsBar.tsx b/packages/webapp/src/containers/FinancialStatements/BalanceSheet/BalanceSheetActionsBar.tsx
index dd50cd541..0421ea2ae 100644
--- a/packages/webapp/src/containers/FinancialStatements/BalanceSheet/BalanceSheetActionsBar.tsx
+++ b/packages/webapp/src/containers/FinancialStatements/BalanceSheet/BalanceSheetActionsBar.tsx
@@ -1,5 +1,4 @@
// @ts-nocheck
-import React from 'react';
import {
NavbarGroup,
Button,
@@ -13,11 +12,12 @@ import classNames from 'classnames';
import { DashboardActionsBar, FormattedMessage as T, Icon } from '@/components';
import NumberFormatDropdown from '@/components/NumberFormatDropdown';
+import { BalanceSheetExportMenu } from './components';
-import { compose, saveInvoke } from '@/utils';
import { useBalanceSheetContext } from './BalanceSheetProvider';
import withBalanceSheet from './withBalanceSheet';
import withBalanceSheetActions from './withBalanceSheetActions';
+import { compose, saveInvoke } from '@/utils';
/**
* Balance sheet - actions bar.
@@ -114,11 +114,18 @@ function BalanceSheetActionsBar({
icon={ }
text={ }
/>
- }
- text={ }
- />
+ }
+ interactionKind={PopoverInteractionKind.CLICK}
+ placement="bottom-start"
+ minimal
+ >
+ }
+ text={ }
+ />
+
);
diff --git a/packages/webapp/src/containers/FinancialStatements/BalanceSheet/BalanceSheetTable.tsx b/packages/webapp/src/containers/FinancialStatements/BalanceSheet/BalanceSheetTable.tsx
index 4bd899f79..b4623e4b2 100644
--- a/packages/webapp/src/containers/FinancialStatements/BalanceSheet/BalanceSheetTable.tsx
+++ b/packages/webapp/src/containers/FinancialStatements/BalanceSheet/BalanceSheetTable.tsx
@@ -62,6 +62,7 @@ const BalanceSheetDataTable = styled(ReportDataTable)`
border-bottom: 0;
padding-top: 0.32rem;
padding-bottom: 0.32rem;
+ color: #252A31;
}
&.is-expanded {
.td:not(.name) .cell-inner {
@@ -72,6 +73,7 @@ const BalanceSheetDataTable = styled(ReportDataTable)`
.td {
font-weight: 500;
border-top: 1px solid #bbb;
+ color: #000;
}
}
diff --git a/packages/webapp/src/containers/FinancialStatements/BalanceSheet/components.tsx b/packages/webapp/src/containers/FinancialStatements/BalanceSheet/components.tsx
index 08f946f75..7a27c33c4 100644
--- a/packages/webapp/src/containers/FinancialStatements/BalanceSheet/components.tsx
+++ b/packages/webapp/src/containers/FinancialStatements/BalanceSheet/components.tsx
@@ -1,13 +1,32 @@
// @ts-nocheck
-import React from 'react';
-import { Button } from '@blueprintjs/core';
+import React, { useRef } from 'react';
+import {
+ Button,
+ Classes,
+ Intent,
+ Menu,
+ MenuItem,
+ ProgressBar,
+ Text,
+} from '@blueprintjs/core';
+import classNames from 'classnames';
-import { FormattedMessage as T, Icon, If } from '@/components';
+import {
+ FormattedMessage as T,
+ Icon,
+ If,
+ Stack,
+ AppToaster,
+} from '@/components';
import FinancialLoadingBar from '../FinancialLoadingBar';
import { useBalanceSheetContext } from './BalanceSheetProvider';
import { FinancialComputeAlert } from '../FinancialReportPage';
import { dynamicColumns } from './dynamicColumns';
+import {
+ useBalanceSheetCsvExport,
+ useBalanceSheetXlsxExport,
+} from '@/hooks/query';
/**
* Balance sheet alerts.
@@ -66,3 +85,88 @@ export const useBalanceSheetColumns = () => {
[table],
);
};
+
+/**
+ * Retrieves the balance sheet export menu.
+ * @returns {JSX.Element}
+ */
+export const BalanceSheetExportMenu = () => {
+ const toastKey = useRef(null);
+ const commonToastConfig = {
+ isCloseButtonShown: true,
+ timeout: 2000,
+ };
+ const { query } = useBalanceSheetContext();
+
+ const openProgressToast = (amount: number) => {
+ return (
+
+ The report has been exported successfully.
+ = 100,
+ })}
+ intent={amount < 100 ? Intent.PRIMARY : Intent.SUCCESS}
+ value={amount / 100}
+ />
+
+ );
+ };
+
+ // Export the report to xlsx.
+ const { mutateAsync: xlsxExport } = useBalanceSheetXlsxExport(query, {
+ onDownloadProgress: (xlsxExportProgress: number) => {
+ if (!toastKey.current) {
+ toastKey.current = AppToaster.show({
+ message: openProgressToast(xlsxExportProgress),
+ ...commonToastConfig,
+ });
+ } else {
+ AppToaster.show(
+ {
+ message: openProgressToast(xlsxExportProgress),
+ ...commonToastConfig,
+ },
+ toastKey.current,
+ );
+ }
+ },
+ });
+ // Export the report to csv.
+ const { mutateAsync: csvExport } = useBalanceSheetCsvExport(query, {
+ onDownloadProgress: (xlsxExportProgress: number) => {
+ if (!toastKey.current) {
+ toastKey.current = AppToaster.show({
+ message: openProgressToast(xlsxExportProgress),
+ ...commonToastConfig,
+ });
+ } else {
+ AppToaster.show(
+ {
+ message: openProgressToast(xlsxExportProgress),
+ ...commonToastConfig,
+ },
+ toastKey.current,
+ );
+ }
+ },
+ });
+ // Handle csv export button click.
+ const handleCsvExportBtnClick = () => {
+ csvExport().then(() => {});
+ };
+ // Handle xlsx export button click.
+ const handleXlsxExportBtnClick = () => {
+ xlsxExport().then(() => {});
+ };
+
+ return (
+
+
+
+
+ );
+};
diff --git a/packages/webapp/src/containers/FinancialStatements/CashFlowStatement/CashFlowStatementActionsBar.tsx b/packages/webapp/src/containers/FinancialStatements/CashFlowStatement/CashFlowStatementActionsBar.tsx
index 559f86053..957b7e733 100644
--- a/packages/webapp/src/containers/FinancialStatements/CashFlowStatement/CashFlowStatementActionsBar.tsx
+++ b/packages/webapp/src/containers/FinancialStatements/CashFlowStatement/CashFlowStatementActionsBar.tsx
@@ -19,6 +19,7 @@ import withCashFlowStatement from './withCashFlowStatement';
import withCashFlowStatementActions from './withCashFlowStatementActions';
import { compose, saveInvoke } from '@/utils';
+import { CashflowSheetExportMenu } from './components';
/**
* Cash flow statement actions bar.
@@ -115,11 +116,18 @@ function CashFlowStatementActionsBar({
icon={ }
text={ }
/>
- }
- text={ }
- />
+ }
+ interactionKind={PopoverInteractionKind.CLICK}
+ placement="bottom-start"
+ minimal
+ >
+ }
+ text={ }
+ />
+
);
diff --git a/packages/webapp/src/containers/FinancialStatements/CashFlowStatement/CashFlowStatementTable.tsx b/packages/webapp/src/containers/FinancialStatements/CashFlowStatement/CashFlowStatementTable.tsx
index f2c557465..1b8bb3dd3 100644
--- a/packages/webapp/src/containers/FinancialStatements/CashFlowStatement/CashFlowStatementTable.tsx
+++ b/packages/webapp/src/containers/FinancialStatements/CashFlowStatement/CashFlowStatementTable.tsx
@@ -60,9 +60,8 @@ const CashflowStatementDataTable = styled(DataTable)`
border-bottom: 0;
padding-top: 0.32rem;
padding-bottom: 0.32rem;
+ color: #252a31;
}
-
- // &.row-type--AGGREGATE,
&.row_type--ACCOUNTS {
border-top: 1px solid #bbb;
}
@@ -72,6 +71,9 @@ const CashflowStatementDataTable = styled(DataTable)`
&.row_type--TOTAL {
font-weight: 500;
+ .td {
+ color: #000;
+ }
&:not(:first-child) .td {
border-top: 1px solid #bbb;
}
diff --git a/packages/webapp/src/containers/FinancialStatements/CashFlowStatement/components.tsx b/packages/webapp/src/containers/FinancialStatements/CashFlowStatement/components.tsx
index 1d1af31f5..ee86944f6 100644
--- a/packages/webapp/src/containers/FinancialStatements/CashFlowStatement/components.tsx
+++ b/packages/webapp/src/containers/FinancialStatements/CashFlowStatement/components.tsx
@@ -1,8 +1,27 @@
// @ts-nocheck
-import React from 'react';
-import { Button } from '@blueprintjs/core';
+import React, { useRef } from 'react';
+import {
+ Button,
+ Classes,
+ Intent,
+ Menu,
+ MenuItem,
+ ProgressBar,
+ Text,
+} from '@blueprintjs/core';
+import classNames from 'classnames';
-import { Icon, If, FormattedMessage as T } from '@/components';
+import {
+ AppToaster,
+ Icon,
+ If,
+ Stack,
+ FormattedMessage as T,
+} from '@/components';
+import {
+ useCashFlowStatementCsvExport,
+ useCashFlowStatementXlsxExport,
+} from '@/hooks/query';
import FinancialLoadingBar from '../FinancialLoadingBar';
import { dynamicColumns } from './dynamicColumns';
@@ -65,3 +84,88 @@ export function CashFlowStatementAlerts() {
);
}
+
+/**
+ * Cashflow sheet export menu.
+ * @returns {JSX.Element}
+ */
+export function CashflowSheetExportMenu() {
+ const toastKey = useRef(null);
+ const commonToastConfig = {
+ isCloseButtonShown: true,
+ timeout: 2000,
+ };
+ const { query } = useCashFlowStatementContext();
+
+ const openProgressToast = (amount: number) => {
+ return (
+
+ The report has been exported successfully.
+ = 100,
+ })}
+ intent={amount < 100 ? Intent.PRIMARY : Intent.SUCCESS}
+ value={amount / 100}
+ />
+
+ );
+ };
+
+ // Export the report to xlsx.
+ const { mutateAsync: xlsxExport } = useCashFlowStatementXlsxExport(query, {
+ onDownloadProgress: (xlsxExportProgress: number) => {
+ if (!toastKey.current) {
+ toastKey.current = AppToaster.show({
+ message: openProgressToast(xlsxExportProgress),
+ ...commonToastConfig,
+ });
+ } else {
+ AppToaster.show(
+ {
+ message: openProgressToast(xlsxExportProgress),
+ ...commonToastConfig,
+ },
+ toastKey.current,
+ );
+ }
+ },
+ });
+ // Export the report to csv.
+ const { mutateAsync: csvExport } = useCashFlowStatementCsvExport(query, {
+ onDownloadProgress: (xlsxExportProgress: number) => {
+ if (!toastKey.current) {
+ toastKey.current = AppToaster.show({
+ message: openProgressToast(xlsxExportProgress),
+ ...commonToastConfig,
+ });
+ } else {
+ AppToaster.show(
+ {
+ message: openProgressToast(xlsxExportProgress),
+ ...commonToastConfig,
+ },
+ toastKey.current,
+ );
+ }
+ },
+ });
+ // Handle csv export button click.
+ const handleCsvExportBtnClick = () => {
+ csvExport();
+ };
+ // Handle xlsx export button click.
+ const handleXlsxExportBtnClick = () => {
+ xlsxExport();
+ };
+
+ return (
+
+
+
+
+ );
+}
diff --git a/packages/webapp/src/containers/FinancialStatements/CustomersBalanceSummary/CustomersBalanceSummaryActionsBar.tsx b/packages/webapp/src/containers/FinancialStatements/CustomersBalanceSummary/CustomersBalanceSummaryActionsBar.tsx
index 81d8a7848..f22fea1e6 100644
--- a/packages/webapp/src/containers/FinancialStatements/CustomersBalanceSummary/CustomersBalanceSummaryActionsBar.tsx
+++ b/packages/webapp/src/containers/FinancialStatements/CustomersBalanceSummary/CustomersBalanceSummaryActionsBar.tsx
@@ -17,6 +17,7 @@ import withCustomersBalanceSummary from './withCustomersBalanceSummary';
import withCustomersBalanceSummaryActions from './withCustomersBalanceSummaryActions';
import { useCustomersBalanceSummaryContext } from './CustomersBalanceSummaryProvider';
import { compose, saveInvoke } from '@/utils';
+import { CustomerBalanceSummaryExportMenu } from './components';
/**
* customer balance summary action bar.
@@ -35,7 +36,7 @@ function CustomersBalanceSummaryActionsBar({
const { refetch, isCustomersBalanceLoading } =
useCustomersBalanceSummaryContext();
- // handle filter toggle click.
+ // Handle filter toggle click.
const handleFilterToggleClick = () => {
toggleCustomerBalanceFilterDrawer();
};
@@ -112,11 +113,18 @@ function CustomersBalanceSummaryActionsBar({
icon={ }
text={ }
/>
- }
- text={ }
- />
+ }
+ interactionKind={PopoverInteractionKind.CLICK}
+ placement="bottom-start"
+ minimal
+ >
+ }
+ text={ }
+ />
+
);
diff --git a/packages/webapp/src/containers/FinancialStatements/CustomersBalanceSummary/CustomersBalanceSummaryProvider.tsx b/packages/webapp/src/containers/FinancialStatements/CustomersBalanceSummary/CustomersBalanceSummaryProvider.tsx
index 63f26ca2e..c9d40b22b 100644
--- a/packages/webapp/src/containers/FinancialStatements/CustomersBalanceSummary/CustomersBalanceSummaryProvider.tsx
+++ b/packages/webapp/src/containers/FinancialStatements/CustomersBalanceSummary/CustomersBalanceSummaryProvider.tsx
@@ -31,6 +31,7 @@ function CustomersBalanceSummaryProvider({ filter, ...props }) {
isCustomersBalanceLoading,
refetch,
+ query
};
return (
diff --git a/packages/webapp/src/containers/FinancialStatements/CustomersBalanceSummary/CustomersBalanceSummaryTable.tsx b/packages/webapp/src/containers/FinancialStatements/CustomersBalanceSummary/CustomersBalanceSummaryTable.tsx
index c03ca5cde..69fb340c7 100644
--- a/packages/webapp/src/containers/FinancialStatements/CustomersBalanceSummary/CustomersBalanceSummaryTable.tsx
+++ b/packages/webapp/src/containers/FinancialStatements/CustomersBalanceSummary/CustomersBalanceSummaryTable.tsx
@@ -32,7 +32,7 @@ export default function CustomersBalanceSummaryTable({
>
);
}
+
+/**
+ * Customer balance summary export menu.
+ */
+export function CustomerBalanceSummaryExportMenu() {
+ const toastKey = useRef(null);
+ const commonToastConfig = {
+ isCloseButtonShown: true,
+ timeout: 2000,
+ };
+ const { query } = useCustomersBalanceSummaryContext();
+
+ const openProgressToast = (amount: number) => {
+ return (
+
+ The report has been exported successfully.
+ = 100,
+ })}
+ intent={amount < 100 ? Intent.PRIMARY : Intent.SUCCESS}
+ value={amount / 100}
+ />
+
+ );
+ };
+ // Export the report to xlsx.
+ const { mutateAsync: xlsxExport } = useCustomerBalanceSummaryXlsxExport(
+ query,
+ {
+ onDownloadProgress: (xlsxExportProgress: number) => {
+ if (!toastKey.current) {
+ toastKey.current = AppToaster.show({
+ message: openProgressToast(xlsxExportProgress),
+ ...commonToastConfig,
+ });
+ } else {
+ AppToaster.show(
+ {
+ message: openProgressToast(xlsxExportProgress),
+ ...commonToastConfig,
+ },
+ toastKey.current,
+ );
+ }
+ },
+ },
+ );
+ // Export the report to csv.
+ const { mutateAsync: csvExport } = useCustomerBalanceSummaryCsvExport(query, {
+ onDownloadProgress: (xlsxExportProgress: number) => {
+ if (!toastKey.current) {
+ toastKey.current = AppToaster.show({
+ message: openProgressToast(xlsxExportProgress),
+ ...commonToastConfig,
+ });
+ } else {
+ AppToaster.show(
+ {
+ message: openProgressToast(xlsxExportProgress),
+ ...commonToastConfig,
+ },
+ toastKey.current,
+ );
+ }
+ },
+ });
+ // Handle csv export button click.
+ const handleCsvExportBtnClick = () => {
+ csvExport();
+ };
+ // Handle xlsx export button click.
+ const handleXlsxExportBtnClick = () => {
+ xlsxExport();
+ };
+
+ return (
+
+
+
+
+ );
+}
diff --git a/packages/webapp/src/containers/FinancialStatements/CustomersTransactions/CustomersTransactionsActionsBar.tsx b/packages/webapp/src/containers/FinancialStatements/CustomersTransactions/CustomersTransactionsActionsBar.tsx
index 3b80a051a..044bf9e9d 100644
--- a/packages/webapp/src/containers/FinancialStatements/CustomersTransactions/CustomersTransactionsActionsBar.tsx
+++ b/packages/webapp/src/containers/FinancialStatements/CustomersTransactions/CustomersTransactionsActionsBar.tsx
@@ -9,9 +9,10 @@ import {
PopoverInteractionKind,
Position,
} from '@blueprintjs/core';
-import { DashboardActionsBar, FormattedMessage as T, Icon } from '@/components';
import classNames from 'classnames';
+import { DashboardActionsBar, FormattedMessage as T, Icon } from '@/components';
+import { CustomersTransactionsExportMenu } from './components';
import NumberFormatDropdown from '@/components/NumberFormatDropdown';
import { useCustomersTransactionsContext } from './CustomersTransactionsProvider';
@@ -114,11 +115,18 @@ function CustomersTransactionsActionsBar({
icon={ }
text={ }
/>
- }
- text={ }
- />
+ }
+ interactionKind={PopoverInteractionKind.CLICK}
+ placement="bottom-start"
+ minimal
+ >
+ }
+ text={ }
+ />
+
);
diff --git a/packages/webapp/src/containers/FinancialStatements/CustomersTransactions/components.tsx b/packages/webapp/src/containers/FinancialStatements/CustomersTransactions/components.tsx
index b1137e130..5bf73e1c1 100644
--- a/packages/webapp/src/containers/FinancialStatements/CustomersTransactions/components.tsx
+++ b/packages/webapp/src/containers/FinancialStatements/CustomersTransactions/components.tsx
@@ -1,12 +1,24 @@
// @ts-nocheck
-import React from 'react';
+import React, { useRef } from 'react';
import intl from 'react-intl-universal';
-import { If } from '@/components';
+import { AppToaster, If, Stack } from '@/components';
import { Align } from '@/constants';
import { getColumnWidth } from '@/utils';
import { useCustomersTransactionsContext } from './CustomersTransactionsProvider';
import FinancialLoadingBar from '../FinancialLoadingBar';
-
+import {
+ Classes,
+ Intent,
+ Menu,
+ MenuItem,
+ ProgressBar,
+ Text,
+} from '@blueprintjs/core';
+import {
+ useCustomersTransactionsCsvExport,
+ useCustomersTransactionsXlsxExport,
+} from '@/hooks/query';
+import classNames from 'classnames';
/**
* Retrieve customers transactions columns.
@@ -92,3 +104,91 @@ export function CustomersTransactionsLoadingBar() {
);
}
+
+/**
+ * Customers transactions export menu.
+ * @returns {JSX.Element}
+ */
+export function CustomersTransactionsExportMenu() {
+ const toastKey = useRef(null);
+ const commonToastConfig = {
+ isCloseButtonShown: true,
+ timeout: 2000,
+ };
+ const { query } = useCustomersTransactionsContext();
+
+ const openProgressToast = (amount: number) => {
+ return (
+
+ The report has been exported successfully.
+ = 100,
+ })}
+ intent={amount < 100 ? Intent.PRIMARY : Intent.SUCCESS}
+ value={amount / 100}
+ />
+
+ );
+ };
+
+ // Export the report to xlsx.
+ const { mutateAsync: xlsxExport } = useCustomersTransactionsXlsxExport(
+ query,
+ {
+ onDownloadProgress: (xlsxExportProgress: number) => {
+ if (!toastKey.current) {
+ toastKey.current = AppToaster.show({
+ message: openProgressToast(xlsxExportProgress),
+ ...commonToastConfig,
+ });
+ } else {
+ AppToaster.show(
+ {
+ message: openProgressToast(xlsxExportProgress),
+ ...commonToastConfig,
+ },
+ toastKey.current,
+ );
+ }
+ },
+ },
+ );
+ // Export the report to csv.
+ const { mutateAsync: csvExport } = useCustomersTransactionsCsvExport(query, {
+ onDownloadProgress: (xlsxExportProgress: number) => {
+ if (!toastKey.current) {
+ toastKey.current = AppToaster.show({
+ message: openProgressToast(xlsxExportProgress),
+ ...commonToastConfig,
+ });
+ } else {
+ AppToaster.show(
+ {
+ message: openProgressToast(xlsxExportProgress),
+ ...commonToastConfig,
+ },
+ toastKey.current,
+ );
+ }
+ },
+ });
+ // Handle csv export button click.
+ const handleCsvExportBtnClick = () => {
+ csvExport();
+ };
+ // Handle xlsx export button click.
+ const handleXlsxExportBtnClick = () => {
+ xlsxExport();
+ };
+
+ return (
+
+
+
+
+ );
+}
diff --git a/packages/webapp/src/containers/FinancialStatements/GeneralLedger/GeneralLedgerActionsBar.tsx b/packages/webapp/src/containers/FinancialStatements/GeneralLedger/GeneralLedgerActionsBar.tsx
index 971da31d9..e450c78bb 100644
--- a/packages/webapp/src/containers/FinancialStatements/GeneralLedger/GeneralLedgerActionsBar.tsx
+++ b/packages/webapp/src/containers/FinancialStatements/GeneralLedger/GeneralLedgerActionsBar.tsx
@@ -12,6 +12,7 @@ import {
import classNames from 'classnames';
import { DashboardActionsBar, FormattedMessage as T, Icon } from '@/components';
+import { GeneralLedgerSheetExportMenu } from './components';
import { useGeneralLedgerContext } from './GeneralLedgerProvider';
import { compose } from '@/utils';
@@ -84,11 +85,18 @@ function GeneralLedgerActionsBar({
icon={ }
text={ }
/>
- }
- text={ }
- />
+ }
+ interactionKind={PopoverInteractionKind.CLICK}
+ placement="bottom-start"
+ minimal
+ >
+ }
+ text={ }
+ />
+
);
diff --git a/packages/webapp/src/containers/FinancialStatements/GeneralLedger/GeneralLedgerHeaderDimensionsPanelProvider.tsx b/packages/webapp/src/containers/FinancialStatements/GeneralLedger/GeneralLedgerHeaderDimensionsPanelProvider.tsx
index c1afde8bd..2b2683df2 100644
--- a/packages/webapp/src/containers/FinancialStatements/GeneralLedger/GeneralLedgerHeaderDimensionsPanelProvider.tsx
+++ b/packages/webapp/src/containers/FinancialStatements/GeneralLedger/GeneralLedgerHeaderDimensionsPanelProvider.tsx
@@ -10,7 +10,7 @@ const GeneralLedgerHeaderDimensionsPanelContext = React.createContext();
/**
* General Ledger Header Dimensions Panel provider.
- * @returns
+ * @returns {JSX.Element}
*/
function GeneralLedgerHeaderDimensionsPanelProvider({ query, ...props }) {
// Features guard.
diff --git a/packages/webapp/src/containers/FinancialStatements/GeneralLedger/GeneralLedgerProvider.tsx b/packages/webapp/src/containers/FinancialStatements/GeneralLedger/GeneralLedgerProvider.tsx
index b30bf42da..d38464d77 100644
--- a/packages/webapp/src/containers/FinancialStatements/GeneralLedger/GeneralLedgerProvider.tsx
+++ b/packages/webapp/src/containers/FinancialStatements/GeneralLedger/GeneralLedgerProvider.tsx
@@ -29,6 +29,7 @@ function GeneralLedgerProvider({ query, ...props }) {
sheetRefresh: refetch,
isFetching,
isLoading,
+ httpRequest: requestQuery
};
return (
diff --git a/packages/webapp/src/containers/FinancialStatements/GeneralLedger/GeneralLedgerTable.tsx b/packages/webapp/src/containers/FinancialStatements/GeneralLedger/GeneralLedgerTable.tsx
index b46038fcc..13a012be0 100644
--- a/packages/webapp/src/containers/FinancialStatements/GeneralLedger/GeneralLedgerTable.tsx
+++ b/packages/webapp/src/containers/FinancialStatements/GeneralLedger/GeneralLedgerTable.tsx
@@ -1,5 +1,5 @@
// @ts-nocheck
-import React, { useMemo } from 'react';
+import { useMemo } from 'react';
import intl from 'react-intl-universal';
import styled from 'styled-components';
@@ -13,7 +13,7 @@ import {
} from '@/components';
import { useGeneralLedgerContext } from './GeneralLedgerProvider';
-import { useGeneralLedgerTableColumns } from './components';
+import { useGeneralLedgerTableColumns } from './dynamicColumns';
/**
* General ledger table.
@@ -21,7 +21,7 @@ import { useGeneralLedgerTableColumns } from './components';
export default function GeneralLedgerTable({ companyName }) {
// General ledger context.
const {
- generalLedger: { tableRows, query },
+ generalLedger: { query, table },
isLoading,
} = useGeneralLedgerContext();
@@ -30,8 +30,8 @@ export default function GeneralLedgerTable({ companyName }) {
// Default expanded rows of general ledger table.
const expandedRows = useMemo(
- () => defaultExpanderReducer(tableRows, 1),
- [tableRows],
+ () => defaultExpanderReducer(table.rows, 1),
+ [table.rows],
);
return (
@@ -48,7 +48,7 @@ export default function GeneralLedgerTable({ companyName }) {
'this_report_does_not_contain_any_data_between_date_period',
)}
columns={columns}
- data={tableRows}
+ data={table.rows}
rowClassNames={tableRowTypesToClassnames}
expanded={expandedRows}
virtualizedRows={true}
@@ -79,23 +79,20 @@ const GeneralLedgerDataTable = styled(ReportDataTable)`
opacity: 0;
}
}
-
.tr:not(.no-results) .td:not(:first-of-type) {
border-left: 1px solid #ececec;
}
.tr:last-child .td {
border-bottom: 1px solid #ececec;
}
-
.tr.row_type {
- &--ACCOUNT_ROW {
+ &--ACCOUNT {
.td {
&.date {
font-weight: 500;
.cell-inner {
- white-space: nowrap;
- position: relative;
+ position: absolute;
}
}
}
@@ -103,7 +100,6 @@ const GeneralLedgerDataTable = styled(ReportDataTable)`
border-top: 1px solid #ddd;
}
}
-
&--OPENING_BALANCE,
&--CLOSING_BALANCE {
.amount {
diff --git a/packages/webapp/src/containers/FinancialStatements/GeneralLedger/components.tsx b/packages/webapp/src/containers/FinancialStatements/GeneralLedger/components.tsx
index 441892178..25ff495da 100644
--- a/packages/webapp/src/containers/FinancialStatements/GeneralLedger/components.tsx
+++ b/packages/webapp/src/containers/FinancialStatements/GeneralLedger/components.tsx
@@ -1,107 +1,31 @@
// @ts-nocheck
-import React from 'react';
-import intl from 'react-intl-universal';
-import { Button } from '@blueprintjs/core';
-import { FormattedMessage as T, Icon, If } from '@/components';
+import React, { useRef } from 'react';
+import classNames from 'classnames';
+import {
+ Button,
+ Classes,
+ Intent,
+ Menu,
+ MenuItem,
+ ProgressBar,
+ Text,
+} from '@blueprintjs/core';
+import {
+ FormattedMessage as T,
+ Icon,
+ If,
+ Stack,
+ AppToaster,
+} from '@/components';
-import { getColumnWidth } from '@/utils';
import { useGeneralLedgerContext } from './GeneralLedgerProvider';
import FinancialLoadingBar from '../FinancialLoadingBar';
import { FinancialComputeAlert } from '../FinancialReportPage';
-import { Align } from '@/constants';
-
-/**
- * Retrieve the general ledger table columns.
- */
-export function useGeneralLedgerTableColumns() {
- // General ledger context.
- const {
- generalLedger: { tableRows },
- } = useGeneralLedgerContext();
-
- return React.useMemo(
- () => [
- {
- Header: intl.get('date'),
- accessor: 'date',
- className: 'date',
- width: 120,
- },
- {
- Header: intl.get('account_name'),
- accessor: 'name',
- className: 'name',
- textOverview: true,
- },
- {
- Header: intl.get('transaction_type'),
- accessor: 'reference_type_formatted',
- className: 'transaction_type',
- width: 125,
- textOverview: true,
- },
- {
- Header: intl.get('transaction_number'),
- accessor: 'reference_id',
- className: 'transaction_number',
- width: 100,
- textOverview: true,
- },
- {
- Header: intl.get('description'),
- accessor: 'note',
- className: 'description',
- textOverview: true,
- },
- {
- Header: intl.get('credit'),
- accessor: 'formatted_credit',
- className: 'credit',
- width: getColumnWidth(tableRows, 'formatted_credit', {
- minWidth: 100,
- magicSpacing: 10,
- }),
- textOverview: true,
- align: Align.Right,
- },
- {
- Header: intl.get('debit'),
- accessor: 'formatted_debit',
- className: 'debit',
- width: getColumnWidth(tableRows, 'formatted_debit', {
- minWidth: 100,
- magicSpacing: 10,
- }),
- textOverview: true,
- align: Align.Right,
- },
- {
- Header: intl.get('amount'),
- accessor: 'formatted_amount',
- className: 'amount',
- width: getColumnWidth(tableRows, 'formatted_amount', {
- minWidth: 100,
- magicSpacing: 10,
- }),
- textOverview: true,
- align: Align.Right,
- },
- {
- Header: intl.get('running_balance'),
- accessor: 'formatted_running_balance',
- className: 'running_balance',
- width: getColumnWidth(tableRows, 'formatted_running_balance', {
- minWidth: 100,
- magicSpacing: 10,
- }),
- textOverview: true,
- align: Align.Right,
- },
- ],
- [tableRows],
- );
-}
+import {
+ useGeneralLedgerSheetCsvExport,
+ useGeneralLedgerSheetXlsxExport,
+} from '@/hooks/query';
/**
* General ledger sheet alerts.
@@ -144,3 +68,93 @@ export function GeneralLedgerSheetLoadingBar() {
);
}
+
+/**
+ * Renders the G/L sheet export menu.
+ * @returns {JSX.Element}
+ */
+export const GeneralLedgerSheetExportMenu = () => {
+ const toastKey = useRef(null);
+ const commonToastConfig = {
+ isCloseButtonShown: true,
+ timeout: 2000,
+ };
+ const { httpRequest } = useGeneralLedgerContext();
+
+ const openProgressToast = (amount: number) => {
+ return (
+
+ The report has been exported successfully.
+ = 100,
+ })}
+ intent={amount < 100 ? Intent.PRIMARY : Intent.SUCCESS}
+ value={amount / 100}
+ />
+
+ );
+ };
+ // Export the report to xlsx.
+ const { mutateAsync: xlsxExport } = useGeneralLedgerSheetXlsxExport(
+ httpRequest,
+ {
+ onDownloadProgress: (xlsxExportProgress: number) => {
+ if (!toastKey.current) {
+ toastKey.current = AppToaster.show({
+ message: openProgressToast(xlsxExportProgress),
+ ...commonToastConfig,
+ });
+ } else {
+ AppToaster.show(
+ {
+ message: openProgressToast(xlsxExportProgress),
+ ...commonToastConfig,
+ },
+ toastKey.current,
+ );
+ }
+ },
+ },
+ );
+ // Export the report to csv.
+ const { mutateAsync: csvExport } = useGeneralLedgerSheetCsvExport(
+ httpRequest,
+ {
+ onDownloadProgress: (xlsxExportProgress: number) => {
+ if (!toastKey.current) {
+ toastKey.current = AppToaster.show({
+ message: openProgressToast(xlsxExportProgress),
+ ...commonToastConfig,
+ });
+ } else {
+ AppToaster.show(
+ {
+ message: openProgressToast(xlsxExportProgress),
+ ...commonToastConfig,
+ },
+ toastKey.current,
+ );
+ }
+ },
+ },
+ );
+ // Handle csv export button click.
+ const handleCsvExportBtnClick = () => {
+ csvExport();
+ };
+ // Handle xlsx export button click.
+ const handleXlsxExportBtnClick = () => {
+ xlsxExport();
+ };
+
+ return (
+
+
+
+
+ );
+};
diff --git a/packages/webapp/src/containers/FinancialStatements/GeneralLedger/dynamicColumns.ts b/packages/webapp/src/containers/FinancialStatements/GeneralLedger/dynamicColumns.ts
new file mode 100644
index 000000000..503fe3fb6
--- /dev/null
+++ b/packages/webapp/src/containers/FinancialStatements/GeneralLedger/dynamicColumns.ts
@@ -0,0 +1,117 @@
+// @ts-nocheck
+import { getColumnWidth } from '@/utils';
+import * as R from 'ramda';
+import { useGeneralLedgerContext } from './GeneralLedgerProvider';
+import { Align } from '@/constants';
+
+const getTableCellValueAccessor = (index) => `cells[${index}].value`;
+
+const getReportColWidth = (data, accessor, headerText) => {
+ return getColumnWidth(
+ data,
+ accessor,
+ { magicSpacing: 10, minWidth: 100 },
+ headerText,
+ );
+};
+
+/**
+ * Account name column mapper.
+ */
+const commonColumnMapper = R.curry((data, column) => {
+ const accessor = getTableCellValueAccessor(column.cell_index);
+
+ return {
+ key: column.key,
+ Header: column.label,
+ accessor,
+ className: column.key,
+ textOverview: true,
+ };
+});
+
+/**
+ * Numeric columns accessor.
+ */
+const numericColumnAccessor = R.curry((data, column) => {
+ const accessor = getTableCellValueAccessor(column.cell_index);
+ const width = getReportColWidth(data, accessor, column.label);
+
+ return {
+ ...column,
+ align: Align.Right,
+ width,
+ };
+});
+
+/**
+ * Date column accessor.
+ */
+const dateColumnAccessor = R.curry((column) => {
+ return {
+ ...column,
+ width: 120,
+ };
+});
+
+/**
+ * Transaction type column accessor.
+ */
+const transactionTypeColumnAccessor = (column) => {
+ return {
+ ...column,
+ width: 125,
+ };
+};
+
+/**
+ * Transaction number column accessor.
+ */
+const transactionIdColumnAccessor = (column) => {
+ return {
+ ...column,
+ width: 80,
+ };
+};
+
+const dynamiColumnMapper = R.curry((data, column) => {
+ const _numericColumnAccessor = numericColumnAccessor(data);
+
+ return R.compose(
+ R.when(R.pathEq(['key'], 'date'), dateColumnAccessor),
+ R.when(
+ R.pathEq(['key'], 'reference_type'),
+ transactionTypeColumnAccessor,
+ ),
+ R.when(
+ R.pathEq(['key'], 'reference_number'),
+ transactionIdColumnAccessor,
+ ),
+ R.when(R.pathEq(['key'], 'credit'), _numericColumnAccessor),
+ R.when(R.pathEq(['key'], 'debit'), _numericColumnAccessor),
+ R.when(R.pathEq(['key'], 'amount'), _numericColumnAccessor),
+ R.when(R.pathEq(['key'], 'running_balance'), _numericColumnAccessor),
+ commonColumnMapper(data),
+ )(column);
+});
+
+/**
+ * Composes the dynamic columns that fetched from request to columns to table component.
+ */
+export const dynamicColumns = R.curry((data, columns) => {
+ return R.map(dynamiColumnMapper(data), columns);
+});
+
+/**
+ * Retrieves the G/L sheet table columns for table component.
+ */
+export const useGeneralLedgerTableColumns = () => {
+ const { generalLedger } = useGeneralLedgerContext();
+
+ if (!generalLedger) {
+ throw new Error('asdfadsf');
+ }
+ const { table } = generalLedger;
+
+ return dynamicColumns(table.rows, table.columns);
+};
diff --git a/packages/webapp/src/containers/FinancialStatements/InventoryItemDetails/InventoryItemDetailsActionsBar.tsx b/packages/webapp/src/containers/FinancialStatements/InventoryItemDetails/InventoryItemDetailsActionsBar.tsx
index 94dea9531..da4d6c4df 100644
--- a/packages/webapp/src/containers/FinancialStatements/InventoryItemDetails/InventoryItemDetailsActionsBar.tsx
+++ b/packages/webapp/src/containers/FinancialStatements/InventoryItemDetails/InventoryItemDetailsActionsBar.tsx
@@ -13,6 +13,7 @@ import { DashboardActionsBar, Icon, FormattedMessage as T } from '@/components';
import classNames from 'classnames';
import NumberFormatDropdown from '@/components/NumberFormatDropdown';
+import { InventoryItemDetailsExportMenu } from './components';
import { useInventoryItemDetailsContext } from './InventoryItemDetailsProvider';
import withInventoryItemDetails from './withInventoryItemDetails';
@@ -112,11 +113,18 @@ function InventoryItemDetailsActionsBar({
icon={ }
text={ }
/>
- }
- text={ }
- />
+ }
+ interactionKind={PopoverInteractionKind.CLICK}
+ placement="bottom-start"
+ minimal
+ >
+ }
+ text={ }
+ />
+
);
diff --git a/packages/webapp/src/containers/FinancialStatements/InventoryItemDetails/components.tsx b/packages/webapp/src/containers/FinancialStatements/InventoryItemDetails/components.tsx
index b56f91a23..f5842d032 100644
--- a/packages/webapp/src/containers/FinancialStatements/InventoryItemDetails/components.tsx
+++ b/packages/webapp/src/containers/FinancialStatements/InventoryItemDetails/components.tsx
@@ -1,12 +1,32 @@
// @ts-nocheck
-import React from 'react';
-import { Button } from '@blueprintjs/core';
-import { Icon, If, FormattedMessage as T } from '@/components';
+import React, { useRef } from 'react';
+import {
+ Button,
+ Classes,
+ Intent,
+ Menu,
+ MenuItem,
+ ProgressBar,
+ Text,
+} from '@blueprintjs/core';
+import classNames from 'classnames';
+import {
+ AppToaster,
+ Icon,
+ If,
+ Stack,
+ FormattedMessage as T,
+} from '@/components';
import { dynamicColumns } from './utils';
import FinancialLoadingBar from '../FinancialLoadingBar';
+import {
+ useInventoryItemDetailsCsvExport,
+ useInventoryItemDetailsXlsxExport,
+} from '@/hooks/query';
import { useInventoryItemDetailsContext } from './InventoryItemDetailsProvider';
import { FinancialComputeAlert } from '../FinancialReportPage';
+import { useInventoryValuationHttpQuery } from './utils2';
/**
* Retrieve inventory item details columns.
@@ -70,3 +90,94 @@ export function InventoryItemDetailsAlerts() {
);
}
+
+/**
+ * Inventory item details export menu.
+ * @returns {JSX.Element}
+ */
+export function InventoryItemDetailsExportMenu() {
+ const toastKey = useRef(null);
+ const commonToastConfig = {
+ isCloseButtonShown: true,
+ timeout: 2000,
+ };
+ const httpQuery = useInventoryValuationHttpQuery();
+
+ const openProgressToast = (amount: number) => {
+ return (
+
+ The report has been exported successfully.
+ = 100,
+ })}
+ intent={amount < 100 ? Intent.PRIMARY : Intent.SUCCESS}
+ value={amount / 100}
+ />
+
+ );
+ };
+
+ // Export the report to xlsx.
+ const { mutateAsync: xlsxExport } = useInventoryItemDetailsXlsxExport(
+ httpQuery,
+ {
+ onDownloadProgress: (xlsxExportProgress: number) => {
+ if (!toastKey.current) {
+ toastKey.current = AppToaster.show({
+ message: openProgressToast(xlsxExportProgress),
+ ...commonToastConfig,
+ });
+ } else {
+ AppToaster.show(
+ {
+ message: openProgressToast(xlsxExportProgress),
+ ...commonToastConfig,
+ },
+ toastKey.current,
+ );
+ }
+ },
+ },
+ );
+ // Export the report to csv.
+ const { mutateAsync: csvExport } = useInventoryItemDetailsCsvExport(
+ httpQuery,
+ {
+ onDownloadProgress: (xlsxExportProgress: number) => {
+ if (!toastKey.current) {
+ toastKey.current = AppToaster.show({
+ message: openProgressToast(xlsxExportProgress),
+ ...commonToastConfig,
+ });
+ } else {
+ AppToaster.show(
+ {
+ message: openProgressToast(xlsxExportProgress),
+ ...commonToastConfig,
+ },
+ toastKey.current,
+ );
+ }
+ },
+ },
+ );
+ // Handle csv export button click.
+ const handleCsvExportBtnClick = () => {
+ csvExport();
+ };
+ // Handle xlsx export button click.
+ const handleXlsxExportBtnClick = () => {
+ xlsxExport();
+ };
+
+ return (
+
+
+
+
+ );
+}
diff --git a/packages/webapp/src/containers/FinancialStatements/InventoryItemDetails/utils2.tsx b/packages/webapp/src/containers/FinancialStatements/InventoryItemDetails/utils2.tsx
index 4293cf610..d786403be 100644
--- a/packages/webapp/src/containers/FinancialStatements/InventoryItemDetails/utils2.tsx
+++ b/packages/webapp/src/containers/FinancialStatements/InventoryItemDetails/utils2.tsx
@@ -7,6 +7,7 @@ import intl from 'react-intl-universal';
import { useAppQueryString } from '@/hooks';
import { transformToForm } from '@/utils';
+import { transformFilterFormToQuery } from '../common';
/**
* Retrieves inventory item details default query.
@@ -73,3 +74,13 @@ export const useInventoryValuationQuery = () => {
setLocationQuery,
};
};
+
+/**
+ * Retrieves the inventory valuation http query.
+ * @returns {Object}
+ */
+export const useInventoryValuationHttpQuery = () => {
+ const { query } = useInventoryValuationQuery();
+
+ return React.useMemo(() => transformFilterFormToQuery(query), [query]);
+};
diff --git a/packages/webapp/src/containers/FinancialStatements/Journal/JournalActionsBar.tsx b/packages/webapp/src/containers/FinancialStatements/Journal/JournalActionsBar.tsx
index b5ee2b467..5e49ee11a 100644
--- a/packages/webapp/src/containers/FinancialStatements/Journal/JournalActionsBar.tsx
+++ b/packages/webapp/src/containers/FinancialStatements/Journal/JournalActionsBar.tsx
@@ -18,6 +18,7 @@ import withJournal from './withJournal';
import { compose } from '@/utils';
import { useJournalSheetContext } from './JournalProvider';
+import { JournalSheetExportMenu } from './components';
/**
* Journal sheeet - Actions bar.
@@ -85,11 +86,18 @@ function JournalActionsBar({
icon={ }
text={ }
/>
- }
- text={ }
- />
+ }
+ interactionKind={PopoverInteractionKind.CLICK}
+ placement="bottom-start"
+ minimal
+ >
+ }
+ text={ }
+ />
+
);
diff --git a/packages/webapp/src/containers/FinancialStatements/Journal/JournalProvider.tsx b/packages/webapp/src/containers/FinancialStatements/Journal/JournalProvider.tsx
index 372dc2b70..b13efe9a6 100644
--- a/packages/webapp/src/containers/FinancialStatements/Journal/JournalProvider.tsx
+++ b/packages/webapp/src/containers/FinancialStatements/Journal/JournalProvider.tsx
@@ -28,6 +28,7 @@ function JournalSheetProvider({ query, ...props }) {
isLoading,
isFetching,
refetchSheet: refetch,
+ httpQuery: requestQuery
};
return (
diff --git a/packages/webapp/src/containers/FinancialStatements/Journal/JournalTable.tsx b/packages/webapp/src/containers/FinancialStatements/Journal/JournalTable.tsx
index f1004dadc..104d66386 100644
--- a/packages/webapp/src/containers/FinancialStatements/Journal/JournalTable.tsx
+++ b/packages/webapp/src/containers/FinancialStatements/Journal/JournalTable.tsx
@@ -11,10 +11,10 @@ import {
TableVirtualizedListRows,
} from '@/components';
-import { useJournalTableColumns } from './components';
import { useJournalSheetContext } from './JournalProvider';
import { defaultExpanderReducer, tableRowTypesToClassnames } from '@/utils';
+import { useJournalSheetColumns } from './dynamicColumns';
/**
* Journal sheet table.
@@ -23,12 +23,12 @@ import { defaultExpanderReducer, tableRowTypesToClassnames } from '@/utils';
export function JournalTable({ companyName }) {
// Journal sheet context.
const {
- journalSheet: { tableRows, query },
+ journalSheet: { table, query },
isLoading,
} = useJournalSheetContext();
- // Retreive the journal table columns.
- const columns = useJournalTableColumns();
+ // Retrieves the journal table columns.
+ const columns = useJournalSheetColumns();
// Default expanded rows of general journal table.
const expandedRows = useMemo(() => defaultExpanderReducer([], 1), []);
@@ -39,13 +39,13 @@ export function JournalTable({ companyName }) {
sheetType={intl.get('journal_sheet')}
fromDate={query.from_date}
toDate={query.to_date}
- name="journal"
loading={isLoading}
fullWidth={true}
+ name="journal"
>
{
- return React.useMemo(
- () => [
- {
- Header: intl.get('date'),
- accessor: (row) =>
- row.date ? moment(row.date).format('YYYY MMM DD') : '',
- className: 'date',
- width: 100,
- textOverview: true,
- },
- {
- Header: intl.get('transaction_type'),
- accessor: 'reference_type_formatted',
- className: 'reference_type_formatted',
- width: 120,
- textOverview: true,
- },
- {
- Header: intl.get('num'),
- accessor: 'transaction_number',
- className: 'reference_id',
- width: 70,
- textOverview: true,
- },
- {
- Header: intl.get('description'),
- accessor: 'note',
- className: 'note',
- textOverview: true,
- },
- {
- Header: intl.get('acc_code'),
- accessor: 'account_code',
- width: 95,
- className: 'account_code',
- textOverview: true,
- },
- {
- Header: intl.get('account'),
- accessor: 'account_name',
- className: 'account_name',
- textOverview: true,
- },
- {
- Header: intl.get('credit'),
- accessor: 'formatted_credit',
- align: Align.Right,
- },
- {
- Header: intl.get('debit'),
- accessor: 'formatted_debit',
- align: Align.Right,
- },
- ],
- [],
- );
-};
+import {
+ useJournalSheetCsvExport,
+ useJournalSheetXlsxExport,
+} from '@/hooks/query';
/**
* Journal sheet loading bar.
@@ -115,3 +69,87 @@ export function JournalSheetAlerts() {
);
}
+
+/**
+ * Retrieves the journal sheet export menu.
+ * @returns {JSX.Element}
+ */
+export const JournalSheetExportMenu = () => {
+ const toastKey = useRef(null);
+ const commonToastConfig = {
+ isCloseButtonShown: true,
+ timeout: 2000,
+ };
+ const { httpQuery } = useJournalSheetContext();
+
+ const openProgressToast = (amount: number) => {
+ return (
+
+ The report has been exported successfully.
+ = 100,
+ })}
+ intent={amount < 100 ? Intent.PRIMARY : Intent.SUCCESS}
+ value={amount / 100}
+ />
+
+ );
+ };
+ // Exports the report to xlsx.
+ const { mutateAsync: xlsxExport } = useJournalSheetXlsxExport(httpQuery, {
+ onDownloadProgress: (xlsxExportProgress: number) => {
+ if (!toastKey.current) {
+ toastKey.current = AppToaster.show({
+ message: openProgressToast(xlsxExportProgress),
+ ...commonToastConfig,
+ });
+ } else {
+ AppToaster.show(
+ {
+ message: openProgressToast(xlsxExportProgress),
+ ...commonToastConfig,
+ },
+ toastKey.current,
+ );
+ }
+ },
+ });
+ // Exports the report to csv.
+ const { mutateAsync: csvExport } = useJournalSheetCsvExport(httpQuery, {
+ onDownloadProgress: (xlsxExportProgress: number) => {
+ if (!toastKey.current) {
+ toastKey.current = AppToaster.show({
+ message: openProgressToast(xlsxExportProgress),
+ ...commonToastConfig,
+ });
+ } else {
+ AppToaster.show(
+ {
+ message: openProgressToast(xlsxExportProgress),
+ ...commonToastConfig,
+ },
+ toastKey.current,
+ );
+ }
+ },
+ });
+ // Handle csv export button click.
+ const handleCsvExportBtnClick = () => {
+ csvExport();
+ };
+ // Handle xlsx export button click.
+ const handleXlsxExportBtnClick = () => {
+ xlsxExport();
+ };
+
+ return (
+
+
+
+
+ );
+};
diff --git a/packages/webapp/src/containers/FinancialStatements/Journal/dynamicColumns.ts b/packages/webapp/src/containers/FinancialStatements/Journal/dynamicColumns.ts
new file mode 100644
index 000000000..a7acd7743
--- /dev/null
+++ b/packages/webapp/src/containers/FinancialStatements/Journal/dynamicColumns.ts
@@ -0,0 +1,134 @@
+// @ts-nocheck
+import { Align } from '@/constants';
+import { getColumnWidth } from '@/utils';
+import * as R from 'ramda';
+import { useJournalSheetContext } from './JournalProvider';
+
+const getTableCellValueAccessor = (index) => `cells[${index}].value`;
+
+const getReportColWidth = (data, accessor, headerText) => {
+ return getColumnWidth(
+ data,
+ accessor,
+ { magicSpacing: 10, minWidth: 100 },
+ headerText,
+ );
+};
+
+/**
+ * Common column mapper.
+ */
+const commonAccessor = R.curry((data, column) => {
+ const accessor = getTableCellValueAccessor(column.cell_index);
+
+ return {
+ key: column.key,
+ Header: column.label,
+ accessor,
+ className: column.key,
+ textOverview: true,
+ align: Align.Left,
+ };
+});
+
+/**
+ * Numeric columns accessor.
+ */
+const numericColumnAccessor = R.curry((data, column) => {
+ const accessor = getTableCellValueAccessor(column.cell_index);
+ const width = getReportColWidth(data, accessor, column.label);
+
+ return {
+ ...column,
+ align: Align.Right,
+ width,
+ };
+});
+
+/**
+ * Date column accessor.
+ */
+const dateColumnAccessor = (column) => {
+ return {
+ ...column,
+ width: 100,
+ };
+};
+
+/**
+ * Transaction type column accessor.
+ */
+const transactionTypeColumnAccessor = (column) => {
+ return {
+ ...column,
+ width: 120,
+ };
+};
+
+/**
+ * Transaction number column accessor.
+ */
+const transactionNumberColumnAccessor = (column) => {
+ return {
+ ...column,
+ width: 70,
+ };
+};
+
+/**
+ * Account code column accessor.
+ */
+const accountCodeColumnAccessor = (column) => {
+ return {
+ ...column,
+ width: 70,
+ };
+};
+
+/**
+ * Dynamic column mapper.
+ * @param {} data -
+ * @param {} column -
+ */
+const dynamicColumnMapper = R.curry((data, column) => {
+ const _commonAccessor = commonAccessor(data);
+ const _numericColumnAccessor = numericColumnAccessor(data);
+
+ return R.compose(
+ R.when(R.pathEq(['key'], 'date'), dateColumnAccessor),
+ R.when(
+ R.pathEq(['key'], 'transaction_type'),
+ transactionTypeColumnAccessor,
+ ),
+ R.when(
+ R.pathEq(['key'], 'transaction_number'),
+ transactionNumberColumnAccessor,
+ ),
+ R.when(R.pathEq(['key'], 'account_code'), accountCodeColumnAccessor),
+ R.when(R.pathEq(['key'], 'credit'), _numericColumnAccessor),
+ R.when(R.pathEq(['key'], 'debit'), _numericColumnAccessor),
+ _commonAccessor,
+ )(column);
+});
+
+/**
+ * Composes the fetched dynamic columns from the server to the columns to pass it
+ * to the table component.
+ */
+export const dynamicColumns = (columns, data) => {
+ return R.map(dynamicColumnMapper(data), columns);
+};
+
+/**
+ * Retrieves the table columns of journal sheet.
+ */
+export const useJournalSheetColumns = () => {
+ const { journalSheet } = useJournalSheetContext();
+
+ if (!journalSheet) {
+ throw new Error('The journal sheet is not loaded');
+ }
+ const { table } = journalSheet;
+
+ return dynamicColumns(table.columns, table.rows);
+};
diff --git a/packages/webapp/src/containers/FinancialStatements/Journal/utils.tsx b/packages/webapp/src/containers/FinancialStatements/Journal/utils.tsx
index f65f027ed..22cf34638 100644
--- a/packages/webapp/src/containers/FinancialStatements/Journal/utils.tsx
+++ b/packages/webapp/src/containers/FinancialStatements/Journal/utils.tsx
@@ -1,6 +1,5 @@
// @ts-nocheck
import React from 'react';
-import { castArray } from 'lodash';
import moment from 'moment';
import { useAppQueryString } from '@/hooks';
diff --git a/packages/webapp/src/containers/FinancialStatements/ProfitLossSheet/ProfitLossActionsBar.tsx b/packages/webapp/src/containers/FinancialStatements/ProfitLossSheet/ProfitLossActionsBar.tsx
index 34545766a..3988ff7f2 100644
--- a/packages/webapp/src/containers/FinancialStatements/ProfitLossSheet/ProfitLossActionsBar.tsx
+++ b/packages/webapp/src/containers/FinancialStatements/ProfitLossSheet/ProfitLossActionsBar.tsx
@@ -19,6 +19,7 @@ import withProfitLoss from './withProfitLoss';
import { compose, saveInvoke } from '@/utils';
import { useProfitLossSheetContext } from './ProfitLossProvider';
+import { ProfitLossSheetExportMenu } from './components';
/**
* Profit/Loss sheet actions bar.
@@ -110,11 +111,18 @@ function ProfitLossActionsBar({
icon={ }
text={ }
/>
- }
- text={ }
- />
+ }
+ interactionKind={PopoverInteractionKind.CLICK}
+ placement="bottom-start"
+ minimal
+ >
+ }
+ text={ }
+ />
+
);
diff --git a/packages/webapp/src/containers/FinancialStatements/ProfitLossSheet/ProfitLossProvider.tsx b/packages/webapp/src/containers/FinancialStatements/ProfitLossSheet/ProfitLossProvider.tsx
index b422013b6..0ea7bbe93 100644
--- a/packages/webapp/src/containers/FinancialStatements/ProfitLossSheet/ProfitLossProvider.tsx
+++ b/packages/webapp/src/containers/FinancialStatements/ProfitLossSheet/ProfitLossProvider.tsx
@@ -1,5 +1,5 @@
// @ts-nocheck
-import React, { createContext, useContext } from 'react';
+import React, { createContext, useContext, useMemo } from 'react';
import FinancialReportPage from '../FinancialReportPage';
import { useProfitLossSheet } from '@/hooks/query';
import { transformFilterFormToQuery } from '../common';
@@ -11,15 +11,18 @@ const ProfitLossSheetContext = createContext();
* @returns {React.JSX}
*/
function ProfitLossSheetProvider({ query, ...props }) {
+
+ const innerQuery = useMemo(() => {
+ return transformFilterFormToQuery(query);
+ }, [query]);
+
const {
data: profitLossSheet,
isFetching,
isLoading,
refetch,
} = useProfitLossSheet(
- {
- ...transformFilterFormToQuery(query),
- },
+ innerQuery,
{ keepPreviousData: true },
);
@@ -28,6 +31,7 @@ function ProfitLossSheetProvider({ query, ...props }) {
isLoading,
isFetching,
sheetRefetch: refetch,
+ query: innerQuery
};
return (
diff --git a/packages/webapp/src/containers/FinancialStatements/ProfitLossSheet/ProfitLossSheetTable.tsx b/packages/webapp/src/containers/FinancialStatements/ProfitLossSheet/ProfitLossSheetTable.tsx
index 933408534..7abef5dc4 100644
--- a/packages/webapp/src/containers/FinancialStatements/ProfitLossSheet/ProfitLossSheetTable.tsx
+++ b/packages/webapp/src/containers/FinancialStatements/ProfitLossSheet/ProfitLossSheetTable.tsx
@@ -61,6 +61,7 @@ const ProfitLossDataTable = styled(ReportDataTable)`
border-bottom: 0;
padding-top: 0.32rem;
padding-bottom: 0.32rem;
+ color: #252A31;
}
&.is-expanded {
.td:not(.name) .cell-inner {
@@ -71,6 +72,7 @@ const ProfitLossDataTable = styled(ReportDataTable)`
.td {
font-weight: 500;
border-top: 1px solid #bbb;
+ color: #000;
}
}
&:last-of-type .td {
diff --git a/packages/webapp/src/containers/FinancialStatements/ProfitLossSheet/components.tsx b/packages/webapp/src/containers/FinancialStatements/ProfitLossSheet/components.tsx
index e64255953..97a4fa860 100644
--- a/packages/webapp/src/containers/FinancialStatements/ProfitLossSheet/components.tsx
+++ b/packages/webapp/src/containers/FinancialStatements/ProfitLossSheet/components.tsx
@@ -1,11 +1,29 @@
// @ts-nocheck
-import React from 'react';
-import { Button } from '@blueprintjs/core';
-import { Icon, If, FormattedMessage as T } from '@/components';
-
+import React, { useRef } from 'react';
+import {
+ Button,
+ Classes,
+ Intent,
+ Menu,
+ MenuItem,
+ ProgressBar,
+ Text,
+} from '@blueprintjs/core';
+import {
+ AppToaster,
+ Icon,
+ If,
+ Stack,
+ FormattedMessage as T,
+} from '@/components';
import { useProfitLossSheetContext } from './ProfitLossProvider';
import { FinancialComputeAlert } from '../FinancialReportPage';
import FinancialLoadingBar from '../FinancialLoadingBar';
+import {
+ useProfitLossSheetCsvExport,
+ useProfitLossSheetXlsxExport,
+} from '@/hooks/query';
+import classNames from 'classnames';
/**
* Profit/loss sheet loading bar.
@@ -50,3 +68,87 @@ export function ProfitLossSheetAlerts() {
);
}
+
+/**
+ * Profit/loss sheet export menu.
+ */
+export const ProfitLossSheetExportMenu = () => {
+ const toastKey = useRef(null);
+ const commonToastConfig = {
+ isCloseButtonShown: true,
+ timeout: 2000,
+ };
+ const { query } = useProfitLossSheetContext();
+
+ const openProgressToast = (amount: number) => {
+ return (
+
+ The report has been exported successfully.
+ = 100,
+ })}
+ intent={amount < 100 ? Intent.PRIMARY : Intent.SUCCESS}
+ value={amount / 100}
+ />
+
+ );
+ };
+
+ // Export the report to xlsx.
+ const { mutateAsync: xlsxExport } = useProfitLossSheetXlsxExport(query, {
+ onDownloadProgress: (xlsxExportProgress: number) => {
+ if (!toastKey.current) {
+ toastKey.current = AppToaster.show({
+ message: openProgressToast(xlsxExportProgress),
+ ...commonToastConfig,
+ });
+ } else {
+ AppToaster.show(
+ {
+ message: openProgressToast(xlsxExportProgress),
+ ...commonToastConfig,
+ },
+ toastKey.current,
+ );
+ }
+ },
+ });
+ // Export the report to csv.
+ const { mutateAsync: csvExport } = useProfitLossSheetCsvExport(query, {
+ onDownloadProgress: (xlsxExportProgress: number) => {
+ if (!toastKey.current) {
+ toastKey.current = AppToaster.show({
+ message: openProgressToast(xlsxExportProgress),
+ ...commonToastConfig,
+ });
+ } else {
+ AppToaster.show(
+ {
+ message: openProgressToast(xlsxExportProgress),
+ ...commonToastConfig,
+ },
+ toastKey.current,
+ );
+ }
+ },
+ });
+ // Handle csv export button click.
+ const handleCsvExportBtnClick = () => {
+ csvExport();
+ };
+ // Handle xlsx export button click.
+ const handleXlsxExportBtnClick = () => {
+ xlsxExport();
+ };
+
+ return (
+
+
+
+
+ );
+};
diff --git a/packages/webapp/src/containers/FinancialStatements/SalesTaxLiabilitySummary/SalesTaxLiabilitySummaryActionsBar.tsx b/packages/webapp/src/containers/FinancialStatements/SalesTaxLiabilitySummary/SalesTaxLiabilitySummaryActionsBar.tsx
index 9c551ff24..d4d0de97e 100644
--- a/packages/webapp/src/containers/FinancialStatements/SalesTaxLiabilitySummary/SalesTaxLiabilitySummaryActionsBar.tsx
+++ b/packages/webapp/src/containers/FinancialStatements/SalesTaxLiabilitySummary/SalesTaxLiabilitySummaryActionsBar.tsx
@@ -18,6 +18,7 @@ import { compose, saveInvoke } from '@/utils';
import { useSalesTaxLiabilitySummaryContext } from './SalesTaxLiabilitySummaryBoot';
import withSalesTaxLiabilitySummary from './withSalesTaxLiabilitySummary';
import withSalesTaxLiabilitySummaryActions from './withSalesTaxLiabilitySummaryActions';
+import { SalesTaxLiabilityExportMenu } from './components';
/**
* Sales tax liability summary - actions bar.
@@ -113,11 +114,18 @@ function SalesTaxLiabilitySummaryActionsBar({
icon={ }
text={ }
/>
- }
- text={ }
- />
+ }
+ interactionKind={PopoverInteractionKind.CLICK}
+ placement="bottom-start"
+ minimal
+ >
+ }
+ text={ }
+ />
+
);
diff --git a/packages/webapp/src/containers/FinancialStatements/SalesTaxLiabilitySummary/components.tsx b/packages/webapp/src/containers/FinancialStatements/SalesTaxLiabilitySummary/components.tsx
index 6e4221b60..10fed35b6 100644
--- a/packages/webapp/src/containers/FinancialStatements/SalesTaxLiabilitySummary/components.tsx
+++ b/packages/webapp/src/containers/FinancialStatements/SalesTaxLiabilitySummary/components.tsx
@@ -1,8 +1,22 @@
// @ts-nocheck
-import React from 'react';
-
+import { useRef } from 'react';
+import classNames from 'classnames';
+import {
+ Classes,
+ Intent,
+ Menu,
+ MenuItem,
+ ProgressBar,
+ Text,
+} from '@blueprintjs/core';
import { useSalesTaxLiabilitySummaryContext } from './SalesTaxLiabilitySummaryBoot';
import FinancialLoadingBar from '../FinancialLoadingBar';
+import { AppToaster, Stack } from '@/components';
+import {
+ useSalesTaxLiabilitySummaryCsvExport,
+ useSalesTaxLiabilitySummaryXlsxExport,
+} from '@/hooks/query';
+import { useSalesByItemsContext } from '../SalesByItems/SalesByItemProvider';
/**
* Sales tax liability summary loading bar.
@@ -15,3 +29,94 @@ export function SalesTaxLiabilitySummaryLoadingBar() {
}
return ;
}
+
+/**
+ *
+ * @returns {JSX.Element}
+ */
+export function SalesTaxLiabilityExportMenu() {
+ const toastKey = useRef(null);
+ const commonToastConfig = {
+ isCloseButtonShown: true,
+ timeout: 2000,
+ };
+ const { query } = useSalesTaxLiabilitySummaryContext();
+
+ const openProgressToast = (amount: number) => {
+ return (
+
+ The report has been exported successfully.
+ = 100,
+ })}
+ intent={amount < 100 ? Intent.PRIMARY : Intent.SUCCESS}
+ value={amount / 100}
+ />
+
+ );
+ };
+
+ // Export the report to xlsx.
+ const { mutateAsync: xlsxExport } = useSalesTaxLiabilitySummaryXlsxExport(
+ query,
+ {
+ onDownloadProgress: (xlsxExportProgress: number) => {
+ if (!toastKey.current) {
+ toastKey.current = AppToaster.show({
+ message: openProgressToast(xlsxExportProgress),
+ ...commonToastConfig,
+ });
+ } else {
+ AppToaster.show(
+ {
+ message: openProgressToast(xlsxExportProgress),
+ ...commonToastConfig,
+ },
+ toastKey.current,
+ );
+ }
+ },
+ },
+ );
+ // Export the report to csv.
+ const { mutateAsync: csvExport } = useSalesTaxLiabilitySummaryCsvExport(
+ query,
+ {
+ onDownloadProgress: (xlsxExportProgress: number) => {
+ if (!toastKey.current) {
+ toastKey.current = AppToaster.show({
+ message: openProgressToast(xlsxExportProgress),
+ ...commonToastConfig,
+ });
+ } else {
+ AppToaster.show(
+ {
+ message: openProgressToast(xlsxExportProgress),
+ ...commonToastConfig,
+ },
+ toastKey.current,
+ );
+ }
+ },
+ },
+ );
+ // Handle csv export button click.
+ const handleCsvExportBtnClick = () => {
+ csvExport();
+ };
+ // Handle xlsx export button click.
+ const handleXlsxExportBtnClick = () => {
+ xlsxExport();
+ };
+
+ return (
+
+
+
+
+ );
+}
diff --git a/packages/webapp/src/containers/FinancialStatements/TrialBalanceSheet/TrialBalanceActionsBar.tsx b/packages/webapp/src/containers/FinancialStatements/TrialBalanceSheet/TrialBalanceActionsBar.tsx
index b409a44cd..198a5761f 100644
--- a/packages/webapp/src/containers/FinancialStatements/TrialBalanceSheet/TrialBalanceActionsBar.tsx
+++ b/packages/webapp/src/containers/FinancialStatements/TrialBalanceSheet/TrialBalanceActionsBar.tsx
@@ -18,6 +18,7 @@ import withTrialBalance from './withTrialBalance';
import withTrialBalanceActions from './withTrialBalanceActions';
import { compose, saveInvoke } from '@/utils';
import { useTrialBalanceSheetContext } from './TrialBalanceProvider';
+import { TrialBalanceSheetExportMenu } from './components';
function TrialBalanceActionsBar({
// #withTrialBalance
@@ -109,11 +110,18 @@ function TrialBalanceActionsBar({
icon={ }
text={ }
/>
- }
- text={ }
- />
+ }
+ interactionKind={PopoverInteractionKind.CLICK}
+ placement="bottom-start"
+ minimal
+ >
+ }
+ text={ }
+ />
+
);
diff --git a/packages/webapp/src/containers/FinancialStatements/TrialBalanceSheet/TrialBalanceSheet.tsx b/packages/webapp/src/containers/FinancialStatements/TrialBalanceSheet/TrialBalanceSheet.tsx
index 904edbccc..5156f4358 100644
--- a/packages/webapp/src/containers/FinancialStatements/TrialBalanceSheet/TrialBalanceSheet.tsx
+++ b/packages/webapp/src/containers/FinancialStatements/TrialBalanceSheet/TrialBalanceSheet.tsx
@@ -15,7 +15,6 @@ import {
} from './components';
import withTrialBalanceActions from './withTrialBalanceActions';
-
import { compose } from '@/utils';
/**
diff --git a/packages/webapp/src/containers/FinancialStatements/TrialBalanceSheet/TrialBalanceSheetTable.tsx b/packages/webapp/src/containers/FinancialStatements/TrialBalanceSheet/TrialBalanceSheetTable.tsx
index 9909f4e27..d3c630bb5 100644
--- a/packages/webapp/src/containers/FinancialStatements/TrialBalanceSheet/TrialBalanceSheetTable.tsx
+++ b/packages/webapp/src/containers/FinancialStatements/TrialBalanceSheet/TrialBalanceSheetTable.tsx
@@ -8,8 +8,7 @@ import { tableRowTypesToClassnames } from '@/utils';
import { ReportDataTable, FinancialSheet } from '@/components';
import { useTrialBalanceSheetContext } from './TrialBalanceProvider';
-import { useTrialBalanceTableColumns } from './components';
-
+import { useTrialBalanceSheetTableColumns } from './hooks';
/**
* Trial Balance sheet data table.
@@ -17,12 +16,12 @@ import { useTrialBalanceTableColumns } from './components';
export default function TrialBalanceSheetTable({ companyName }) {
// Trial balance sheet context.
const {
- trialBalanceSheet: { tableRows, query },
+ trialBalanceSheet: { table, query },
isLoading,
} = useTrialBalanceSheetContext();
// Trial balance sheet table columns.
- const columns = useTrialBalanceTableColumns();
+ const columns = useTrialBalanceSheetTableColumns();
return (
{
- const width = getColumnWidth(data, `credit`, { minWidth: 140 });
-
- return {
- Header: intl.get('credit'),
- Cell: CellTextSpan,
- accessor: 'formatted_credit',
- className: 'credit',
- width,
- textOverview: true,
- align: Align.Right,
- };
-};
-
-/**
- * Retrieves the debit column.
- */
-const getDebitColumn = (data) => {
- return {
- Header: intl.get('debit'),
- Cell: CellTextSpan,
- accessor: 'formatted_debit',
- width: getColumnWidth(data, `debit`, { minWidth: 140 }),
- textOverview: true,
- align: Align.Right,
- };
-};
-
-/**
- * Retrieves the balance column.
- */
-const getBalanceColumn = (data) => {
- return {
- Header: intl.get('balance'),
- Cell: CellTextSpan,
- accessor: 'formatted_balance',
- className: 'balance',
- width: getColumnWidth(data, `balance`, { minWidth: 140 }),
- textOverview: true,
- align: Align.Right,
- };
-};
-
-/**
- * Retrieve trial balance sheet table columns.
- */
-export const useTrialBalanceTableColumns = () => {
- // Trial balance sheet context.
- const {
- trialBalanceSheet: { tableRows },
- } = useTrialBalanceSheetContext();
-
- return React.useMemo(
- () => [
- {
- Header: intl.get('account_name'),
- accessor: (row) => (row.code ? `${row.name} - ${row.code}` : row.name),
- className: 'name',
- width: 350,
- textOverview: true,
- },
- getCreditColumn(tableRows),
- getDebitColumn(tableRows),
- getBalanceColumn(tableRows),
- ],
- [tableRows],
- );
-};
+import {
+ useTrialBalanceSheetCsvExport,
+ useTrialBalanceSheetXlsxExport,
+} from '@/hooks/query';
+import { useTrialBalanceSheetHttpQuery } from './utils';
/**
* Trial balance sheet progress loading bar.
@@ -100,11 +43,8 @@ export function TrialBalanceSheetLoadingBar() {
* Trial balance sheet alerts.
*/
export function TrialBalanceSheetAlerts() {
- const {
- trialBalanceSheet: { meta },
- isLoading,
- refetchSheet,
- } = useTrialBalanceSheetContext();
+ const { trialBalanceSheet, isLoading, refetchSheet } =
+ useTrialBalanceSheetContext();
// Handle refetch the sheet.
const handleRecalcReport = () => {
@@ -115,7 +55,7 @@ export function TrialBalanceSheetAlerts() {
return null;
}
// Can't continue if the cost compute job is not running.
- if (!meta.is_cost_compute_running) {
+ if (!trialBalanceSheet?.meta.is_cost_compute_running) {
return null;
}
@@ -130,3 +70,89 @@ export function TrialBalanceSheetAlerts() {
);
}
+
+/**
+ * Trial balance sheet export menu.
+ */
+export const TrialBalanceSheetExportMenu = () => {
+ const toastKey = useRef(null);
+ const commonToastConfig = {
+ isCloseButtonShown: true,
+ timeout: 2000,
+ };
+ const httpQuery = useTrialBalanceSheetHttpQuery();
+
+ const openProgressToast = (amount: number) => {
+ return (
+
+ The report has been exported successfully.
+ = 100,
+ })}
+ intent={amount < 100 ? Intent.PRIMARY : Intent.SUCCESS}
+ value={amount / 100}
+ />
+
+ );
+ };
+ // Export the report to xlsx.
+ const { mutateAsync: xlsxExport } = useTrialBalanceSheetXlsxExport(
+ httpQuery,
+ {
+ onDownloadProgress: (xlsxExportProgress: number) => {
+ if (!toastKey.current) {
+ toastKey.current = AppToaster.show({
+ message: openProgressToast(xlsxExportProgress),
+ ...commonToastConfig,
+ });
+ } else {
+ AppToaster.show(
+ {
+ message: openProgressToast(xlsxExportProgress),
+ ...commonToastConfig,
+ },
+ toastKey.current,
+ );
+ }
+ },
+ },
+ );
+ // Export the report to csv.
+ const { mutateAsync: csvExport } = useTrialBalanceSheetCsvExport(httpQuery, {
+ onDownloadProgress: (xlsxExportProgress: number) => {
+ if (!toastKey.current) {
+ toastKey.current = AppToaster.show({
+ message: openProgressToast(xlsxExportProgress),
+ ...commonToastConfig,
+ });
+ } else {
+ AppToaster.show(
+ {
+ message: openProgressToast(xlsxExportProgress),
+ ...commonToastConfig,
+ },
+ toastKey.current,
+ );
+ }
+ },
+ });
+ // Handle csv export button click.
+ const handleCsvExportBtnClick = () => {
+ csvExport();
+ };
+ // Handle xlsx export button click.
+ const handleXlsxExportBtnClick = () => {
+ xlsxExport();
+ };
+
+ return (
+
+
+
+
+ );
+};
diff --git a/packages/webapp/src/containers/FinancialStatements/TrialBalanceSheet/dynamicColumns.ts b/packages/webapp/src/containers/FinancialStatements/TrialBalanceSheet/dynamicColumns.ts
new file mode 100644
index 000000000..c7f23f2aa
--- /dev/null
+++ b/packages/webapp/src/containers/FinancialStatements/TrialBalanceSheet/dynamicColumns.ts
@@ -0,0 +1,56 @@
+// @ts-nocheck
+import * as R from 'ramda';
+import { Align } from '@/constants';
+import { getColumnWidth } from '@/utils';
+
+const ACCOUNT_NAME_COLUMN_WIDTH = 320;
+const AMOUNT_COLUMNS_MIN_WIDTH = 120;
+const AMOUNT_COLUMNS_MAGIC_SPACING = 10;
+
+const getTableCellValueAccessor = (index: number) => `cells[${index}].value`;
+
+const accountNameAccessor = R.curry((data, column) => {
+ const accessor = getTableCellValueAccessor(column.cell_index);
+
+ return {
+ Header: column.label,
+ id: column.key,
+ accessor,
+ className: column.key,
+ width: ACCOUNT_NAME_COLUMN_WIDTH,
+ };
+});
+
+const amountAccessor = R.curry((data, column) => {
+ const accessor = getTableCellValueAccessor(column.cell_index);
+
+ return {
+ Header: column.label,
+ id: column.key,
+ accessor,
+ className: column.key,
+ width: getColumnWidth(data, accessor, {
+ magicSpacing: AMOUNT_COLUMNS_MAGIC_SPACING,
+ minWidth: AMOUNT_COLUMNS_MIN_WIDTH,
+ }),
+ align: Align.Right,
+ };
+});
+
+const dynamicColumnMapper = R.curry((data, column) => {
+ const accountNameColumn = accountNameAccessor(data);
+ const creditColumn = amountAccessor(data);
+ const debitColumn = amountAccessor(data);
+ const totalColumn = amountAccessor(data);
+
+ return R.compose(
+ R.when(R.pathEq(['key'], 'account_name'), accountNameColumn),
+ R.when(R.pathEq(['key'], 'credit'), creditColumn),
+ R.when(R.pathEq(['key'], 'debit'), debitColumn),
+ R.when(R.pathEq(['key'], 'total'), totalColumn),
+ )(column);
+});
+
+export const trialBalancesheetDynamicColumns = (columns, data) => {
+ return R.map(dynamicColumnMapper(data), columns);
+};
diff --git a/packages/webapp/src/containers/FinancialStatements/TrialBalanceSheet/hooks.ts b/packages/webapp/src/containers/FinancialStatements/TrialBalanceSheet/hooks.ts
new file mode 100644
index 000000000..47bcc293d
--- /dev/null
+++ b/packages/webapp/src/containers/FinancialStatements/TrialBalanceSheet/hooks.ts
@@ -0,0 +1,18 @@
+// @ts-nocheck
+import React from 'react';
+import { useTrialBalanceSheetContext } from './TrialBalanceProvider';
+import { trialBalancesheetDynamicColumns } from './dynamicColumns';
+
+/**
+ * Retrieves the trial balance sheet columns.
+ */
+export const useTrialBalanceSheetTableColumns = () => {
+ const {
+ trialBalanceSheet: { table },
+ } = useTrialBalanceSheetContext();
+
+ return React.useMemo(
+ () => trialBalancesheetDynamicColumns(table.columns, table.rows),
+ [table],
+ );
+};
diff --git a/packages/webapp/src/containers/FinancialStatements/TrialBalanceSheet/utils.tsx b/packages/webapp/src/containers/FinancialStatements/TrialBalanceSheet/utils.tsx
index 62be9afa8..f28dac8bf 100644
--- a/packages/webapp/src/containers/FinancialStatements/TrialBalanceSheet/utils.tsx
+++ b/packages/webapp/src/containers/FinancialStatements/TrialBalanceSheet/utils.tsx
@@ -5,6 +5,7 @@ import { castArray } from 'lodash';
import { useAppQueryString } from '@/hooks';
import { transformToForm } from '@/utils';
+import { transformFilterFormToQuery } from '../common';
/**
* Retrieves the default trial balance query.
@@ -56,3 +57,13 @@ export const useTrialBalanceSheetQuery = () => {
setLocationQuery,
};
};
+
+/**
+ * Retrieves the trial balance sheet http query.
+ * @returns {object}
+ */
+export const useTrialBalanceSheetHttpQuery = () => {
+ const { query } = useTrialBalanceSheetQuery();
+
+ return React.useMemo(() => transformFilterFormToQuery(query), [query]);
+};
diff --git a/packages/webapp/src/containers/FinancialStatements/VendorsBalanceSummary/VendorsBalanceSummaryActionsBar.tsx b/packages/webapp/src/containers/FinancialStatements/VendorsBalanceSummary/VendorsBalanceSummaryActionsBar.tsx
index c89d21f20..7e37ba792 100644
--- a/packages/webapp/src/containers/FinancialStatements/VendorsBalanceSummary/VendorsBalanceSummaryActionsBar.tsx
+++ b/packages/webapp/src/containers/FinancialStatements/VendorsBalanceSummary/VendorsBalanceSummaryActionsBar.tsx
@@ -19,6 +19,7 @@ import withVendorsBalanceSummaryActions from './withVendorsBalanceSummaryActions
import { useVendorsBalanceSummaryContext } from './VendorsBalanceSummaryProvider';
import { saveInvoke, compose } from '@/utils';
+import { VendorSummarySheetExportMenu } from './components';
/**
* Vendors balance summary action bar.
@@ -106,11 +107,18 @@ function VendorsBalanceSummaryActionsBar({
icon={ }
text={ }
/>
- }
- text={ }
- />
+ }
+ interactionKind={PopoverInteractionKind.CLICK}
+ placement="bottom-start"
+ minimal
+ >
+ }
+ text={ }
+ />
+
);
diff --git a/packages/webapp/src/containers/FinancialStatements/VendorsBalanceSummary/VendorsBalanceSummaryTable.tsx b/packages/webapp/src/containers/FinancialStatements/VendorsBalanceSummary/VendorsBalanceSummaryTable.tsx
index a3bbfa122..dc2ac5561 100644
--- a/packages/webapp/src/containers/FinancialStatements/VendorsBalanceSummary/VendorsBalanceSummaryTable.tsx
+++ b/packages/webapp/src/containers/FinancialStatements/VendorsBalanceSummary/VendorsBalanceSummaryTable.tsx
@@ -31,7 +31,7 @@ export default function VendorsBalanceSummaryTable({
>
);
}
+
+/**
+ * Vendor summary sheet export menu.
+ * @returns {JSX.Element}
+ */
+export function VendorSummarySheetExportMenu() {
+ const toastKey = useRef(null);
+ const commonToastConfig = {
+ isCloseButtonShown: true,
+ timeout: 2000,
+ };
+ const openProgressToast = (amount: number) => {
+ return (
+
+ The report has been exported successfully.
+ = 100,
+ })}
+ intent={amount < 100 ? Intent.PRIMARY : Intent.SUCCESS}
+ value={amount / 100}
+ />
+
+ );
+ };
+
+ // Export the report to xlsx.
+ const { mutateAsync: xlsxExport } = useVendorBalanceSummaryXlsxExport({
+ onDownloadProgress: (xlsxExportProgress: number) => {
+ if (!toastKey.current) {
+ toastKey.current = AppToaster.show({
+ message: openProgressToast(xlsxExportProgress),
+ ...commonToastConfig,
+ });
+ } else {
+ AppToaster.show(
+ {
+ message: openProgressToast(xlsxExportProgress),
+ ...commonToastConfig,
+ },
+ toastKey.current,
+ );
+ }
+ },
+ });
+ // Export the report to csv.
+ const { mutateAsync: csvExport } = useVendorBalanceSummaryCsvExport({
+ onDownloadProgress: (xlsxExportProgress: number) => {
+ if (!toastKey.current) {
+ toastKey.current = AppToaster.show({
+ message: openProgressToast(xlsxExportProgress),
+ ...commonToastConfig,
+ });
+ } else {
+ AppToaster.show(
+ {
+ message: openProgressToast(xlsxExportProgress),
+ ...commonToastConfig,
+ },
+ toastKey.current,
+ );
+ }
+ },
+ });
+ // Handle csv export button click.
+ const handleCsvExportBtnClick = () => {
+ csvExport().then(() => {});
+ };
+ // Handle xlsx export button click.
+ const handleXlsxExportBtnClick = () => {
+ xlsxExport().then(() => {});
+ };
+
+ return (
+
+
+
+
+ );
+}
diff --git a/packages/webapp/src/containers/FinancialStatements/VendorsTransactions/VendorsTransactionsActionsBar.tsx b/packages/webapp/src/containers/FinancialStatements/VendorsTransactions/VendorsTransactionsActionsBar.tsx
index 52595565f..8b5fbc600 100644
--- a/packages/webapp/src/containers/FinancialStatements/VendorsTransactions/VendorsTransactionsActionsBar.tsx
+++ b/packages/webapp/src/containers/FinancialStatements/VendorsTransactions/VendorsTransactionsActionsBar.tsx
@@ -19,6 +19,7 @@ import withVendorsTransaction from './withVendorsTransaction';
import withVendorsTransactionsActions from './withVendorsTransactionsActions';
import { compose, saveInvoke } from '@/utils';
+import { VendorTransactionsExportMenu } from './components';
/**
* vendors transactions actions bar.
@@ -114,11 +115,18 @@ function VendorsTransactionsActionsBar({
icon={ }
text={ }
/>
- }
- text={ }
- />
+ }
+ interactionKind={PopoverInteractionKind.CLICK}
+ placement="bottom-start"
+ minimal
+ >
+ }
+ text={ }
+ />
+
);
diff --git a/packages/webapp/src/containers/FinancialStatements/VendorsTransactions/components.tsx b/packages/webapp/src/containers/FinancialStatements/VendorsTransactions/components.tsx
index ee078f215..120a321bb 100644
--- a/packages/webapp/src/containers/FinancialStatements/VendorsTransactions/components.tsx
+++ b/packages/webapp/src/containers/FinancialStatements/VendorsTransactions/components.tsx
@@ -1,11 +1,24 @@
// @ts-nocheck
-import React from 'react';
+import React, { useRef } from 'react';
import intl from 'react-intl-universal';
+import {
+ Classes,
+ Intent,
+ Menu,
+ MenuItem,
+ ProgressBar,
+ Text,
+} from '@blueprintjs/core';
+import classNames from 'classnames';
-import { If } from '@/components';
+import { AppToaster, If, Stack } from '@/components';
import { useVendorsTransactionsContext } from './VendorsTransactionsProvider';
import FinancialLoadingBar from '../FinancialLoadingBar';
import { getColumnWidth } from '@/utils';
+import {
+ useVendorsTransactionsCsvExport,
+ useVendorsTransactionsXlsxExport,
+} from '@/hooks/query';
/**
* Retrieve vendors transactions columns.
@@ -77,7 +90,7 @@ export const useVendorsTransactionsColumns = () => {
};
/**
- * vendors transactions loading bar.
+ * Vendors transactions loading bar.
*/
export function VendorsTransactionsLoadingBar() {
const { isVendorsTransactionFetching } = useVendorsTransactionsContext();
@@ -88,3 +101,86 @@ export function VendorsTransactionsLoadingBar() {
);
}
+
+/**
+ * Vendor transactions export menu.
+ */
+export function VendorTransactionsExportMenu() {
+ const toastKey = useRef(null);
+ const commonToastConfig = {
+ isCloseButtonShown: true,
+ timeout: 2000,
+ };
+ const { query } = useVendorsTransactionsContext();
+
+ const openProgressToast = (amount: number) => {
+ return (
+
+ The report has been exported successfully.
+ = 100,
+ })}
+ intent={amount < 100 ? Intent.PRIMARY : Intent.SUCCESS}
+ value={amount / 100}
+ />
+
+ );
+ };
+ // Export the report to xlsx.
+ const { mutateAsync: xlsxExport } = useVendorsTransactionsXlsxExport(query, {
+ onDownloadProgress: (xlsxExportProgress: number) => {
+ if (!toastKey.current) {
+ toastKey.current = AppToaster.show({
+ message: openProgressToast(xlsxExportProgress),
+ ...commonToastConfig,
+ });
+ } else {
+ AppToaster.show(
+ {
+ message: openProgressToast(xlsxExportProgress),
+ ...commonToastConfig,
+ },
+ toastKey.current,
+ );
+ }
+ },
+ });
+ // Export the report to csv.
+ const { mutateAsync: csvExport } = useVendorsTransactionsCsvExport({
+ onDownloadProgress: (xlsxExportProgress: number) => {
+ if (!toastKey.current) {
+ toastKey.current = AppToaster.show({
+ message: openProgressToast(xlsxExportProgress),
+ ...commonToastConfig,
+ });
+ } else {
+ AppToaster.show(
+ {
+ message: openProgressToast(xlsxExportProgress),
+ ...commonToastConfig,
+ },
+ toastKey.current,
+ );
+ }
+ },
+ });
+ // Handle csv export button click.
+ const handleCsvExportBtnClick = () => {
+ csvExport();
+ };
+ // Handle xlsx export button click.
+ const handleXlsxExportBtnClick = () => {
+ xlsxExport();
+ };
+
+ return (
+
+
+
+
+ );
+}
diff --git a/packages/webapp/src/containers/Preferences/CreditNotes/PreferencesCreditNotes.tsx b/packages/webapp/src/containers/Preferences/CreditNotes/PreferencesCreditNotes.tsx
new file mode 100644
index 000000000..4d2909f0e
--- /dev/null
+++ b/packages/webapp/src/containers/Preferences/CreditNotes/PreferencesCreditNotes.tsx
@@ -0,0 +1,14 @@
+// @ts-nocheck
+import { PreferencesCreditNotesBoot } from './PreferencesCreditNotesFormBoot';
+import { PreferencesCreditNotesFormPage } from './PreferencesCreditNotesFormPage';
+
+/**
+ * Credit notes preferences.
+ */
+export function PreferencesCreditNotes() {
+ return (
+
+
+
+ );
+}
diff --git a/packages/webapp/src/containers/Preferences/CreditNotes/PreferencesCreditNotesForm.schema.ts b/packages/webapp/src/containers/Preferences/CreditNotes/PreferencesCreditNotesForm.schema.ts
new file mode 100644
index 000000000..0e3901591
--- /dev/null
+++ b/packages/webapp/src/containers/Preferences/CreditNotes/PreferencesCreditNotesForm.schema.ts
@@ -0,0 +1,9 @@
+// @ts-nocheck
+import * as Yup from 'yup';
+
+const Schema = Yup.object().shape({
+ termsConditions: Yup.string().optional(),
+ customerNotes: Yup.string().optional(),
+});
+
+export const PreferencesCreditNotesFormSchema = Schema;
diff --git a/packages/webapp/src/containers/Preferences/CreditNotes/PreferencesCreditNotesForm.tsx b/packages/webapp/src/containers/Preferences/CreditNotes/PreferencesCreditNotesForm.tsx
new file mode 100644
index 000000000..649ffa557
--- /dev/null
+++ b/packages/webapp/src/containers/Preferences/CreditNotes/PreferencesCreditNotesForm.tsx
@@ -0,0 +1,74 @@
+// @ts-nocheck
+import styled from 'styled-components';
+import { Form } from 'formik';
+import { Button, Intent } from '@blueprintjs/core';
+import { useHistory } from 'react-router-dom';
+
+import { FormattedMessage as T, FFormGroup, FTextArea } from '@/components';
+
+/**
+ * Preferences credit notes form.
+ */
+export function PreferencesCreditNotesForm({ isSubmitting }) {
+ const history = useHistory();
+
+ // Handle close click.
+ const handleCloseClick = () => {
+ history.go(-1);
+ };
+
+ return (
+
+ );
+}
+
+const CardFooterActions = styled.div`
+ padding-top: 16px;
+ border-top: 1px solid #e0e7ea;
+ margin-top: 30px;
+
+ .bp4-button {
+ min-width: 70px;
+
+ + .bp4-button {
+ margin-left: 10px;
+ }
+ }
+`;
diff --git a/packages/webapp/src/containers/Preferences/CreditNotes/PreferencesCreditNotesFormBoot.tsx b/packages/webapp/src/containers/Preferences/CreditNotes/PreferencesCreditNotesFormBoot.tsx
new file mode 100644
index 000000000..0eb34f3d4
--- /dev/null
+++ b/packages/webapp/src/containers/Preferences/CreditNotes/PreferencesCreditNotesFormBoot.tsx
@@ -0,0 +1,55 @@
+// @ts-nocheck
+import React from 'react';
+import styled from 'styled-components';
+import classNames from 'classnames';
+import { CLASSES } from '@/constants/classes';
+import { useSettings } from '@/hooks/query';
+import PreferencesPageLoader from '../PreferencesPageLoader';
+import { Card } from '@/components';
+
+const PreferencesCreditNotesFormContext = React.createContext();
+
+function PreferencesCreditNotesBoot({ ...props }) {
+ // Fetches organization settings.
+ const { isLoading: isSettingsLoading } = useSettings();
+
+ // Provider state.
+ const provider = {
+ isSettingsLoading,
+ };
+ // Detarmines whether if any query is loading.
+ const isLoading = isSettingsLoading;
+
+ return (
+
+
+ {isLoading ? (
+
+ ) : (
+
+ )}
+
+
+ );
+}
+
+const PreferencesCreditNotesCard = styled(Card)`
+ padding: 25px;
+
+ .bp4-form-group {
+ max-width: 600px;
+ }
+`;
+
+const usePreferencesCreditNotesFormContext = () =>
+ React.useContext(PreferencesCreditNotesFormContext);
+
+export { PreferencesCreditNotesBoot, usePreferencesCreditNotesFormContext };
diff --git a/packages/webapp/src/containers/Preferences/CreditNotes/PreferencesCreditNotesFormPage.tsx b/packages/webapp/src/containers/Preferences/CreditNotes/PreferencesCreditNotesFormPage.tsx
new file mode 100644
index 000000000..4fc3956c8
--- /dev/null
+++ b/packages/webapp/src/containers/Preferences/CreditNotes/PreferencesCreditNotesFormPage.tsx
@@ -0,0 +1,82 @@
+// @ts-nocheck
+import { useEffect } from 'react';
+import intl from 'react-intl-universal';
+import { Formik } from 'formik';
+import * as R from 'ramda';
+import { Intent } from '@blueprintjs/core';
+
+import { AppToaster } from '@/components';
+import { PreferencesCreditNotesFormSchema } from './PreferencesCreditNotesForm.schema';
+import { PreferencesCreditNotesForm } from './PreferencesCreditNotesForm';
+import withDashboardActions from '@/containers/Dashboard/withDashboardActions';
+
+import { compose, transformToForm, transfromToSnakeCase } from '@/utils';
+import withSettings from '@/containers/Settings/withSettings';
+import { transferObjectOptionsToArray } from '../Accountant/utils';
+import { useSaveSettings } from '@/hooks/query';
+
+const defaultValues = {
+ termsConditions: '',
+ customerNotes: '',
+};
+
+/**
+ * Preferences - Credit Notes.
+ */
+function PreferencesCreditNotesFormPageRoot({
+ // #withDashboardActions
+ changePreferencesPageTitle,
+
+ // #withSettings
+ creditNoteSettings,
+}) {
+ // Save settings.
+ const { mutateAsync: saveSettingMutate } = useSaveSettings();
+
+ useEffect(() => {
+ changePreferencesPageTitle(intl.get('preferences.creditNotes'));
+ }, [changePreferencesPageTitle]);
+
+ // Initial values.
+ const initialValues = {
+ ...defaultValues,
+ ...transformToForm(creditNoteSettings, defaultValues),
+ };
+ // Handle the form submit.
+ const handleFormSubmit = (values, { setSubmitting }) => {
+ const options = R.compose(
+ transferObjectOptionsToArray,
+ transfromToSnakeCase,
+ )({ creditNote: { ...values } });
+
+ // Handle request success.
+ const onSuccess = () => {
+ AppToaster.show({
+ message: intl.get('preferences.credit_notes.success_message'),
+ intent: Intent.SUCCESS,
+ });
+ setSubmitting(false);
+ };
+ // Handle request error.
+ const onError = () => {
+ setSubmitting(false);
+ };
+ saveSettingMutate({ options }).then(onSuccess).catch(onError);
+ };
+
+ return (
+
+ );
+}
+
+export const PreferencesCreditNotesFormPage = compose(
+ withDashboardActions,
+ withSettings(({ creditNoteSettings }) => ({
+ creditNoteSettings: creditNoteSettings,
+ })),
+)(PreferencesCreditNotesFormPageRoot);
diff --git a/packages/webapp/src/containers/Preferences/Estimates/PreferencesEstimates.tsx b/packages/webapp/src/containers/Preferences/Estimates/PreferencesEstimates.tsx
new file mode 100644
index 000000000..d7a8b484d
--- /dev/null
+++ b/packages/webapp/src/containers/Preferences/Estimates/PreferencesEstimates.tsx
@@ -0,0 +1,14 @@
+// @ts-nocheck
+import { PreferencesEstimatesBoot } from './PreferencesEstimatesFormBoot';
+import { PreferencesEstimatesFormPage } from './PreferencesEstimatesFormPage';
+
+/**
+ * Estimates preferences.
+ */
+export function PreferencesEstimates() {
+ return (
+
+
+
+ );
+}
diff --git a/packages/webapp/src/containers/Preferences/Estimates/PreferencesEstimatesForm.schema.ts b/packages/webapp/src/containers/Preferences/Estimates/PreferencesEstimatesForm.schema.ts
new file mode 100644
index 000000000..b6cf3eab6
--- /dev/null
+++ b/packages/webapp/src/containers/Preferences/Estimates/PreferencesEstimatesForm.schema.ts
@@ -0,0 +1,9 @@
+// @ts-nocheck
+import * as Yup from 'yup';
+
+const Schema = Yup.object().shape({
+ termsConditions: Yup.string().optional(),
+ customerNotes: Yup.string().optional(),
+});
+
+export const PreferencesEstimatesFormSchema = Schema;
diff --git a/packages/webapp/src/containers/Preferences/Estimates/PreferencesEstimatesForm.tsx b/packages/webapp/src/containers/Preferences/Estimates/PreferencesEstimatesForm.tsx
new file mode 100644
index 000000000..7e17acc10
--- /dev/null
+++ b/packages/webapp/src/containers/Preferences/Estimates/PreferencesEstimatesForm.tsx
@@ -0,0 +1,74 @@
+// @ts-nocheck
+import styled from 'styled-components';
+import { Form } from 'formik';
+import { Button, Intent } from '@blueprintjs/core';
+import { useHistory } from 'react-router-dom';
+
+import { FormattedMessage as T, FFormGroup, FTextArea } from '@/components';
+
+/**
+ * Preferences estimates form.
+ */
+export function PreferencesEstimatesForm({ isSubmitting }) {
+ const history = useHistory();
+
+ // Handle close click.
+ const handleCloseClick = () => {
+ history.go(-1);
+ };
+
+ return (
+
+ );
+}
+
+const CardFooterActions = styled.div`
+ padding-top: 16px;
+ border-top: 1px solid #e0e7ea;
+ margin-top: 30px;
+
+ .bp4-button {
+ min-width: 70px;
+
+ + .bp4-button {
+ margin-left: 10px;
+ }
+ }
+`;
diff --git a/packages/webapp/src/containers/Preferences/Estimates/PreferencesEstimatesFormBoot.tsx b/packages/webapp/src/containers/Preferences/Estimates/PreferencesEstimatesFormBoot.tsx
new file mode 100644
index 000000000..d39d3c817
--- /dev/null
+++ b/packages/webapp/src/containers/Preferences/Estimates/PreferencesEstimatesFormBoot.tsx
@@ -0,0 +1,55 @@
+// @ts-nocheck
+import React from 'react';
+import classNames from 'classnames';
+import { CLASSES } from '@/constants/classes';
+import { useSettings } from '@/hooks/query';
+import PreferencesPageLoader from '../PreferencesPageLoader';
+import styled from 'styled-components';
+import { Card } from '@/components';
+
+const PreferencesEstimatesFormContext = React.createContext();
+
+function PreferencesEstimatesBoot({ ...props }) {
+ // Fetches organization settings.
+ const { isLoading: isSettingsLoading } = useSettings();
+
+ // Provider state.
+ const provider = {
+ isSettingsLoading,
+ };
+ // Detarmines whether if any query is loading.
+ const isLoading = isSettingsLoading;
+
+ return (
+
+
+ {isLoading ? (
+
+ ) : (
+
+ )}
+
+
+ );
+}
+
+const usePreferencesEstimatesFormContext = () =>
+ React.useContext(PreferencesEstimatesFormContext);
+
+const PreferencesEstimatesCard = styled(Card)`
+ padding: 25px;
+
+ .bp4-form-group {
+ max-width: 600px;
+ }
+`;
+
+export { PreferencesEstimatesBoot, usePreferencesEstimatesFormContext };
diff --git a/packages/webapp/src/containers/Preferences/Estimates/PreferencesEstimatesFormPage.tsx b/packages/webapp/src/containers/Preferences/Estimates/PreferencesEstimatesFormPage.tsx
new file mode 100644
index 000000000..39d849ed3
--- /dev/null
+++ b/packages/webapp/src/containers/Preferences/Estimates/PreferencesEstimatesFormPage.tsx
@@ -0,0 +1,82 @@
+// @ts-nocheck
+import React, { useEffect } from 'react';
+import intl from 'react-intl-universal';
+import { Formik } from 'formik';
+import { Intent } from '@blueprintjs/core';
+import * as R from 'ramda';
+
+import { AppToaster } from '@/components';
+import { PreferencesEstimatesFormSchema } from './PreferencesEstimatesForm.schema';
+import { PreferencesEstimatesForm } from './PreferencesEstimatesForm';
+import withDashboardActions from '@/containers/Dashboard/withDashboardActions';
+import withSettings from '@/containers/Settings/withSettings';
+
+import { transferObjectOptionsToArray } from '../Accountant/utils';
+import { compose, transformToForm, transfromToSnakeCase } from '@/utils';
+import { useSaveSettings } from '@/hooks/query';
+
+const defaultValues = {
+ termsConditions: '',
+ customerNotes: '',
+};
+
+/**
+ * Preferences estimates form.
+ */
+function PreferencesEstimatesFormPageRoot({
+ // #withDashboardActions
+ changePreferencesPageTitle,
+
+ // #withSettings
+ estimatesSettings,
+}) {
+ // Save Organization Settings.
+ const { mutateAsync: saveSettingMutate } = useSaveSettings();
+
+ useEffect(() => {
+ changePreferencesPageTitle(intl.get('preferences.estimates'));
+ }, [changePreferencesPageTitle]);
+
+ // Initial values.
+ const initialValues = {
+ ...defaultValues,
+ ...transformToForm(estimatesSettings, defaultValues),
+ };
+ // Handle the form submit.
+ const handleFormSubmit = (values, { setSubmitting }) => {
+ const options = R.compose(
+ transferObjectOptionsToArray,
+ transfromToSnakeCase,
+ )({ salesEstimates: { ...values } });
+
+ // Handle request success.
+ const onSuccess = (response) => {
+ AppToaster.show({
+ message: intl.get('preferences.estimates.success_message'),
+ intent: Intent.SUCCESS,
+ });
+ setSubmitting(false);
+ };
+ // Handle request error.
+ const onError = () => {
+ setSubmitting(false);
+ };
+ saveSettingMutate({ options }).then(onSuccess).catch(onError);
+ };
+
+ return (
+
+ );
+}
+
+export const PreferencesEstimatesFormPage = compose(
+ withDashboardActions,
+ withSettings(({ estimatesSettings }) => ({
+ estimatesSettings: estimatesSettings,
+ })),
+)(PreferencesEstimatesFormPageRoot);
diff --git a/packages/webapp/src/containers/Preferences/General/General.schema.tsx b/packages/webapp/src/containers/Preferences/General/General.schema.tsx
index 249a9c6e9..e118872cd 100644
--- a/packages/webapp/src/containers/Preferences/General/General.schema.tsx
+++ b/packages/webapp/src/containers/Preferences/General/General.schema.tsx
@@ -6,6 +6,9 @@ const Schema = Yup.object().shape({
name: Yup.string()
.required()
.label(intl.get('organization_name_')),
+ tax_number: Yup.string()
+ .nullable()
+ .label(intl.get('organization_tax_number_')),
industry: Yup.string()
.nullable()
.label(intl.get('organization_industry_')),
diff --git a/packages/webapp/src/containers/Preferences/General/GeneralForm.tsx b/packages/webapp/src/containers/Preferences/General/GeneralForm.tsx
index a4eb2e106..d67d0ea65 100644
--- a/packages/webapp/src/containers/Preferences/General/GeneralForm.tsx
+++ b/packages/webapp/src/containers/Preferences/General/GeneralForm.tsx
@@ -59,6 +59,17 @@ export default function PreferencesGeneralForm({ isSubmitting }) {
+ {/* ---------- Organization Tax Number ---------- */}
+ }
+ inline={true}
+ helperText={ }
+ fastField={true}
+ >
+
+
+
{/* ---------- Industry ---------- */}
+
+ {isLoading ? (
+
+ ) : (
+
+ )}
+
+
+ );
+}
+
+const PreferencesInvoicesCard = styled(Card)`
+ padding: 25px;
+
+ .bp4-form-group{
+ max-width: 600px;
+ }
+`;
+
+const usePreferencesInvoiceFormContext = () =>
+ React.useContext(PreferencesInvoiceFormContext);
+
+export { PreferencesInvoicesBoot, usePreferencesInvoiceFormContext };
diff --git a/packages/webapp/src/containers/Preferences/Invoices/PreferencesInvoiceFormPage.tsx b/packages/webapp/src/containers/Preferences/Invoices/PreferencesInvoiceFormPage.tsx
new file mode 100644
index 000000000..097b8f996
--- /dev/null
+++ b/packages/webapp/src/containers/Preferences/Invoices/PreferencesInvoiceFormPage.tsx
@@ -0,0 +1,82 @@
+// @ts-nocheck
+import React, { useEffect } from 'react';
+import intl from 'react-intl-universal';
+import { Formik } from 'formik';
+import { Intent } from '@blueprintjs/core';
+import * as R from 'ramda';
+
+import { AppToaster } from '@/components';
+import { PreferencesInvoiceFormSchema } from './PreferencesInvoiceForm.schema';
+import { PreferencesInvoicesForm } from './PreferencesInvoicesForm';
+import withDashboardActions from '@/containers/Dashboard/withDashboardActions';
+
+import { compose, transformToForm, transfromToSnakeCase } from '@/utils';
+import withSettings from '@/containers/Settings/withSettings';
+import { transferObjectOptionsToArray } from '../Accountant/utils';
+import { useSaveSettings } from '@/hooks/query';
+
+const defaultValues = {
+ termsConditions: '',
+ customerNotes: '',
+};
+
+/**
+ * Preferences - Invoices.
+ */
+function PreferencesInvoiceFormPage({
+ // #withDashboardActions
+ changePreferencesPageTitle,
+
+ // #withSettings
+ invoiceSettings,
+}) {
+ // Save settings.
+ const { mutateAsync: saveSettingMutate } = useSaveSettings();
+
+ useEffect(() => {
+ changePreferencesPageTitle(intl.get('preferences.invoices'));
+ }, [changePreferencesPageTitle]);
+
+ // Initial values.
+ const initialValues = {
+ ...defaultValues,
+ ...transformToForm(invoiceSettings, defaultValues),
+ };
+ // Handle the form submit.
+ const handleFormSubmit = (values, { setSubmitting }) => {
+ const options = R.compose(
+ transferObjectOptionsToArray,
+ transfromToSnakeCase,
+ )({ salesInvoices: { ...values } });
+
+ // Handle request success.
+ const onSuccess = () => {
+ AppToaster.show({
+ message: intl.get('preferences.invoices.success_message'),
+ intent: Intent.SUCCESS,
+ });
+ setSubmitting(false);
+ };
+ // Handle request error.
+ const onError = () => {
+ setSubmitting(false);
+ };
+ saveSettingMutate({ options }).then(onSuccess).catch(onError);
+ };
+
+ return (
+
+ );
+}
+
+export default compose(
+ withDashboardActions,
+ withSettings(({ invoiceSettings }) => ({
+ invoiceSettings: invoiceSettings,
+ })),
+)(PreferencesInvoiceFormPage);
diff --git a/packages/webapp/src/containers/Preferences/Invoices/PreferencesInvoices.tsx b/packages/webapp/src/containers/Preferences/Invoices/PreferencesInvoices.tsx
new file mode 100644
index 000000000..da349ea9a
--- /dev/null
+++ b/packages/webapp/src/containers/Preferences/Invoices/PreferencesInvoices.tsx
@@ -0,0 +1,14 @@
+// @ts-nocheck
+import { PreferencesInvoicesBoot } from './PreferencesInvoiceFormBoot';
+import PreferencesInvoiceFormPage from './PreferencesInvoiceFormPage';
+
+/**
+ * items preferences.
+ */
+export default function PreferencesInvoices() {
+ return (
+
+
+
+ );
+}
diff --git a/packages/webapp/src/containers/Preferences/Invoices/PreferencesInvoicesForm.tsx b/packages/webapp/src/containers/Preferences/Invoices/PreferencesInvoicesForm.tsx
new file mode 100644
index 000000000..9237c58e8
--- /dev/null
+++ b/packages/webapp/src/containers/Preferences/Invoices/PreferencesInvoicesForm.tsx
@@ -0,0 +1,74 @@
+// @ts-nocheck
+import styled from 'styled-components';
+import { Form } from 'formik';
+import { Button, Intent } from '@blueprintjs/core';
+import { useHistory } from 'react-router-dom';
+
+import { FormattedMessage as T, FFormGroup, FTextArea } from '@/components';
+
+/**
+ * Invoices preferences form.
+ */
+export function PreferencesInvoicesForm({ isSubmitting }) {
+ const history = useHistory();
+
+ // Handle close click.
+ const handleCloseClick = () => {
+ history.go(-1);
+ };
+
+ return (
+
+
+ {/* ---------- Terms & Conditions ---------- */}
+ }
+ fastField={true}
+ >
+
+
+
+
+
+
+
+
+
+
+
+
+ );
+}
+
+const CardFooterActions = styled.div`
+ padding-top: 16px;
+ border-top: 1px solid #e0e7ea;
+ margin-top: 30px;
+
+ .bp4-button {
+ min-width: 70px;
+
+ + .bp4-button {
+ margin-left: 10px;
+ }
+ }
+`;
diff --git a/packages/webapp/src/containers/Preferences/Receipts/PreferencesReceipts.tsx b/packages/webapp/src/containers/Preferences/Receipts/PreferencesReceipts.tsx
new file mode 100644
index 000000000..83fc663a2
--- /dev/null
+++ b/packages/webapp/src/containers/Preferences/Receipts/PreferencesReceipts.tsx
@@ -0,0 +1,14 @@
+// @ts-nocheck
+import { PreferencesReceiptsBoot } from './PreferencesReceiptsFormBoot';
+import { PreferencesReceiptsFormPage } from './PreferencesReceiptsFormPage';
+
+/**
+ * Preferences - Receipts.
+ */
+export function PreferencesReceipts() {
+ return (
+
+
+
+ );
+}
diff --git a/packages/webapp/src/containers/Preferences/Receipts/PreferencesReceiptsForm.schema.ts b/packages/webapp/src/containers/Preferences/Receipts/PreferencesReceiptsForm.schema.ts
new file mode 100644
index 000000000..f28cc9407
--- /dev/null
+++ b/packages/webapp/src/containers/Preferences/Receipts/PreferencesReceiptsForm.schema.ts
@@ -0,0 +1,9 @@
+// @ts-nocheck
+import * as Yup from 'yup';
+
+const Schema = Yup.object().shape({
+ termsConditions: Yup.string().optional(),
+ customerNotes: Yup.string().optional(),
+});
+
+export const PreferencesReceiptsFormSchema = Schema;
diff --git a/packages/webapp/src/containers/Preferences/Receipts/PreferencesReceiptsForm.tsx b/packages/webapp/src/containers/Preferences/Receipts/PreferencesReceiptsForm.tsx
new file mode 100644
index 000000000..42836de51
--- /dev/null
+++ b/packages/webapp/src/containers/Preferences/Receipts/PreferencesReceiptsForm.tsx
@@ -0,0 +1,74 @@
+// @ts-nocheck
+import styled from 'styled-components';
+import { Form } from 'formik';
+import { Button, Intent } from '@blueprintjs/core';
+import { useHistory } from 'react-router-dom';
+
+import { FormattedMessage as T, FFormGroup, FTextArea } from '@/components';
+
+/**
+ * Preferences general form.
+ */
+export function PreferencesReceiptsForm({ isSubmitting }) {
+ const history = useHistory();
+
+ // Handle close click.
+ const handleCloseClick = () => {
+ history.go(-1);
+ };
+
+ return (
+
+ );
+}
+
+const CardFooterActions = styled.div`
+ padding-top: 16px;
+ border-top: 1px solid #e0e7ea;
+ margin-top: 30px;
+
+ .bp4-button {
+ min-width: 70px;
+
+ + .bp4-button {
+ margin-left: 10px;
+ }
+ }
+`;
diff --git a/packages/webapp/src/containers/Preferences/Receipts/PreferencesReceiptsFormBoot.tsx b/packages/webapp/src/containers/Preferences/Receipts/PreferencesReceiptsFormBoot.tsx
new file mode 100644
index 000000000..539980a4e
--- /dev/null
+++ b/packages/webapp/src/containers/Preferences/Receipts/PreferencesReceiptsFormBoot.tsx
@@ -0,0 +1,56 @@
+// @ts-nocheck
+import React from 'react';
+import classNames from 'classnames';
+import styled from 'styled-components';
+import { CLASSES } from '@/constants/classes';
+import { useSettings } from '@/hooks/query';
+import PreferencesPageLoader from '../PreferencesPageLoader';
+import { Card } from '@/components';
+
+const PreferencesReceiptsFormContext = React.createContext();
+
+function PreferencesReceiptsBoot({ ...props }) {
+ // Fetches organization settings.
+ const { isLoading: isSettingsLoading } = useSettings();
+
+ // Provider state.
+ const provider = {
+ isSettingsLoading,
+ };
+
+ // Detarmines whether if any query is loading.
+ const isLoading = isSettingsLoading;
+
+ return (
+
+
+ {isLoading ? (
+
+ ) : (
+
+ )}
+
+
+ );
+}
+
+const PreferencesReceiptsCard = styled(Card)`
+ padding: 25px;
+
+ .bp4-form-group {
+ max-width: 600px;
+ }
+`;
+
+const usePreferencesReceiptsFormContext = () =>
+ React.useContext(PreferencesReceiptsFormContext);
+
+export { PreferencesReceiptsBoot, usePreferencesReceiptsFormContext };
diff --git a/packages/webapp/src/containers/Preferences/Receipts/PreferencesReceiptsFormPage.tsx b/packages/webapp/src/containers/Preferences/Receipts/PreferencesReceiptsFormPage.tsx
new file mode 100644
index 000000000..f5da0d06a
--- /dev/null
+++ b/packages/webapp/src/containers/Preferences/Receipts/PreferencesReceiptsFormPage.tsx
@@ -0,0 +1,82 @@
+// @ts-nocheck
+import React, { useEffect } from 'react';
+import intl from 'react-intl-universal';
+import { Formik } from 'formik';
+import { Intent } from '@blueprintjs/core';
+import * as R from 'ramda';
+
+import { AppToaster } from '@/components';
+import { PreferencesReceiptsFormSchema } from './PreferencesReceiptsForm.schema';
+import { PreferencesReceiptsForm } from './PreferencesReceiptsForm';
+import withDashboardActions from '@/containers/Dashboard/withDashboardActions';
+
+import { compose, transformToForm, transfromToSnakeCase } from '@/utils';
+import withSettings from '@/containers/Settings/withSettings';
+import { useSaveSettings } from '@/hooks/query';
+import { transferObjectOptionsToArray } from '../Accountant/utils';
+
+const defaultValues = {
+ termsConditions: '',
+ receiptMessage: '',
+};
+
+/**
+ * Preferences - Receipts.
+ */
+function PreferencesReceiptsFormPageRoot({
+ // #withDashboardActions
+ changePreferencesPageTitle,
+
+ // #withSettings
+ receiptSettings,
+}) {
+ // Save settings.
+ const { mutateAsync: saveSettingMutate } = useSaveSettings();
+
+ useEffect(() => {
+ changePreferencesPageTitle(intl.get('preferences.receipts'));
+ }, [changePreferencesPageTitle]);
+
+ // Initial values.
+ const initialValues = {
+ ...defaultValues,
+ ...transformToForm(receiptSettings, defaultValues),
+ };
+ // Handle the form submit.
+ const handleFormSubmit = (values, { setSubmitting }) => {
+ const options = R.compose(
+ transferObjectOptionsToArray,
+ transfromToSnakeCase,
+ )({ salesReceipts: { ...values } });
+
+ // Handle request success.
+ const onSuccess = () => {
+ AppToaster.show({
+ message: intl.get('preferences.receipts.success_message'),
+ intent: Intent.SUCCESS,
+ });
+ setSubmitting(false);
+ };
+ // Handle request error.
+ const onError = () => {
+ setSubmitting(false);
+ };
+ saveSettingMutate({ options }).then(onSuccess).catch(onError);
+ };
+
+ return (
+
+ );
+}
+
+export const PreferencesReceiptsFormPage = compose(
+ withDashboardActions,
+ withSettings(({ receiptSettings }) => ({
+ receiptSettings: receiptSettings,
+ })),
+)(PreferencesReceiptsFormPageRoot);
diff --git a/packages/webapp/src/containers/Purchases/Bills/BillForm/utils.tsx b/packages/webapp/src/containers/Purchases/Bills/BillForm/utils.tsx
index 2d82bfea5..763573b30 100644
--- a/packages/webapp/src/containers/Purchases/Bills/BillForm/utils.tsx
+++ b/packages/webapp/src/containers/Purchases/Bills/BillForm/utils.tsx
@@ -322,8 +322,8 @@ export const useBillAggregatedTaxRates = () => {
const { taxRates } = useBillFormContext();
const aggregateTaxRates = React.useMemo(
- () => aggregateItemEntriesTaxRates(taxRates),
- [taxRates],
+ () => aggregateItemEntriesTaxRates(values.currency_code, taxRates),
+ [values.currency_code, taxRates],
);
// Calculate the total tax amount of bill entries.
return React.useMemo(() => {
diff --git a/packages/webapp/src/containers/Sales/CreditNotes/CreditNoteForm/CreditNoteForm.tsx b/packages/webapp/src/containers/Sales/CreditNotes/CreditNoteForm/CreditNoteForm.tsx
index ec8467061..1d51ecbc6 100644
--- a/packages/webapp/src/containers/Sales/CreditNotes/CreditNoteForm/CreditNoteForm.tsx
+++ b/packages/webapp/src/containers/Sales/CreditNotes/CreditNoteForm/CreditNoteForm.tsx
@@ -5,7 +5,7 @@ import classNames from 'classnames';
import { useHistory } from 'react-router-dom';
import { Formik, Form } from 'formik';
import { Intent } from '@blueprintjs/core';
-import { isEmpty } from 'lodash';
+import { defaultTo, isEmpty } from 'lodash';
import { CLASSES } from '@/constants/classes';
import {
CreateCreditNoteFormSchema,
@@ -48,6 +48,8 @@ function CreditNoteForm({
creditAutoIncrement,
creditNumberPrefix,
creditNextNumber,
+ creditCustomerNotes,
+ creditTermsConditions,
// #withCurrentOrganization
organization: { base_currency },
@@ -68,22 +70,21 @@ function CreditNoteForm({
const creditNumber = transactionNumber(creditNumberPrefix, creditNextNumber);
// Initial values.
- const initialValues = React.useMemo(
- () => ({
- ...(!isEmpty(creditNote)
- ? { ...transformToEditForm(creditNote) }
- : {
- ...defaultCreditNote,
- ...(creditAutoIncrement && {
- credit_note_number: creditNumber,
- }),
- entries: orderingLinesIndexes(defaultCreditNote.entries),
- currency_code: base_currency,
- ...newCreditNote,
+ const initialValues = {
+ ...(!isEmpty(creditNote)
+ ? { ...transformToEditForm(creditNote) }
+ : {
+ ...defaultCreditNote,
+ ...(creditAutoIncrement && {
+ credit_note_number: creditNumber,
}),
- }),
- [],
- );
+ entries: orderingLinesIndexes(defaultCreditNote.entries),
+ currency_code: base_currency,
+ terms_conditions: defaultTo(creditTermsConditions, ''),
+ note: defaultTo(creditCustomerNotes, ''),
+ ...newCreditNote,
+ }),
+ };
// Handles form submit.
const handleFormSubmit = (
@@ -178,6 +179,8 @@ export default compose(
creditAutoIncrement: creditNoteSettings?.autoIncrement,
creditNextNumber: creditNoteSettings?.nextNumber,
creditNumberPrefix: creditNoteSettings?.numberPrefix,
+ creditCustomerNotes: creditNoteSettings?.customerNotes,
+ creditTermsConditions: creditNoteSettings?.termsConditions,
})),
withCurrentOrganization(),
)(CreditNoteForm);
diff --git a/packages/webapp/src/containers/Sales/Estimates/EstimateForm/EstimateForm.tsx b/packages/webapp/src/containers/Sales/Estimates/EstimateForm/EstimateForm.tsx
index a4db1cfff..f9cd24673 100644
--- a/packages/webapp/src/containers/Sales/Estimates/EstimateForm/EstimateForm.tsx
+++ b/packages/webapp/src/containers/Sales/Estimates/EstimateForm/EstimateForm.tsx
@@ -4,7 +4,7 @@ import intl from 'react-intl-universal';
import classNames from 'classnames';
import { Formik, Form } from 'formik';
import { Intent } from '@blueprintjs/core';
-import { sumBy, isEmpty } from 'lodash';
+import { sumBy, isEmpty, defaultTo } from 'lodash';
import { useHistory } from 'react-router-dom';
import { CLASSES } from '@/constants/classes';
@@ -43,6 +43,8 @@ function EstimateForm({
estimateNextNumber,
estimateNumberPrefix,
estimateAutoIncrementMode,
+ estimateCustomerNotes,
+ estimateTermsConditions,
// #withCurrentOrganization
organization: { base_currency },
@@ -60,25 +62,23 @@ function EstimateForm({
estimateNumberPrefix,
estimateNextNumber,
);
-
// Initial values in create and edit mode.
- const initialValues = useMemo(
- () => ({
- ...(!isEmpty(estimate)
- ? { ...transformToEditForm(estimate) }
- : {
- ...defaultEstimate,
- // If the auto-increment mode is enabled, take the next estimate
- // number from the settings.
- ...(estimateAutoIncrementMode && {
- estimate_number: estimateNumber,
- }),
- entries: orderingLinesIndexes(defaultEstimate.entries),
- currency_code: base_currency,
+ const initialValues = {
+ ...(!isEmpty(estimate)
+ ? { ...transformToEditForm(estimate) }
+ : {
+ ...defaultEstimate,
+ // If the auto-increment mode is enabled, take the next estimate
+ // number from the settings.
+ ...(estimateAutoIncrementMode && {
+ estimate_number: estimateNumber,
}),
- }),
- [estimate, estimateNumber, estimateAutoIncrementMode, base_currency],
- );
+ entries: orderingLinesIndexes(defaultEstimate.entries),
+ currency_code: base_currency,
+ terms_conditions: defaultTo(estimateTermsConditions, ''),
+ note: defaultTo(estimateCustomerNotes, ''),
+ }),
+ };
// Handles form submit.
const handleFormSubmit = (
@@ -181,6 +181,8 @@ export default compose(
estimateNextNumber: estimatesSettings?.nextNumber,
estimateNumberPrefix: estimatesSettings?.numberPrefix,
estimateAutoIncrementMode: estimatesSettings?.autoIncrement,
+ estimateCustomerNotes: estimatesSettings?.customerNotes,
+ estimateTermsConditions: estimatesSettings?.termsConditions,
})),
withCurrentOrganization(),
)(EstimateForm);
diff --git a/packages/webapp/src/containers/Sales/Estimates/EstimateMailDialog/EstimateMailDialog.tsx b/packages/webapp/src/containers/Sales/Estimates/EstimateMailDialog/EstimateMailDialog.tsx
new file mode 100644
index 000000000..9965db833
--- /dev/null
+++ b/packages/webapp/src/containers/Sales/Estimates/EstimateMailDialog/EstimateMailDialog.tsx
@@ -0,0 +1,38 @@
+// @ts-nocheck
+import React from 'react';
+import { Dialog, DialogSuspense } from '@/components';
+import withDialogRedux from '@/components/DialogReduxConnect';
+import { compose } from '@/utils';
+
+const EstimateMailDialogContent = React.lazy(
+ () => import('./EstimateMailDialogContent'),
+);
+
+/**
+ * Invoice mail dialog.
+ */
+function EstimateMailDialog({
+ dialogName,
+ payload: { estimateId = null },
+ isOpen,
+}) {
+ return (
+
+
+
+
+
+ );
+}
+
+export default compose(withDialogRedux())(EstimateMailDialog);
diff --git a/packages/webapp/src/containers/Sales/Estimates/EstimateMailDialog/EstimateMailDialogBoot.tsx b/packages/webapp/src/containers/Sales/Estimates/EstimateMailDialog/EstimateMailDialogBoot.tsx
new file mode 100644
index 000000000..d68afb4c5
--- /dev/null
+++ b/packages/webapp/src/containers/Sales/Estimates/EstimateMailDialog/EstimateMailDialogBoot.tsx
@@ -0,0 +1,44 @@
+// @ts-nocheck
+import React, { createContext } from 'react';
+import { useSaleEstimateDefaultOptions } from '@/hooks/query';
+import { DialogContent } from '@/components';
+
+interface EstimateMailDialogBootValues {
+ estimateId: number;
+ mailOptions: any;
+}
+
+const EstimateMailDialagBoot = createContext();
+
+interface EstimateMailDialogBootProps {
+ estimateId: number;
+ children: React.ReactNode;
+}
+
+/**
+ * Estimate mail dialog boot provider.
+ */
+function EstimateMailDialogBoot({
+ estimateId,
+ ...props
+}: EstimateMailDialogBootProps) {
+ const { data: mailOptions, isLoading: isMailOptionsLoading } =
+ useSaleEstimateDefaultOptions(estimateId);
+
+ const provider = {
+ saleEstimateId: estimateId,
+ mailOptions,
+ isMailOptionsLoading,
+ };
+
+ return (
+
+
+
+ );
+}
+
+const useEstimateMailDialogBoot = () =>
+ React.useContext(EstimateMailDialagBoot);
+
+export { EstimateMailDialogBoot, useEstimateMailDialogBoot };
diff --git a/packages/webapp/src/containers/Sales/Estimates/EstimateMailDialog/EstimateMailDialogContent.tsx b/packages/webapp/src/containers/Sales/Estimates/EstimateMailDialog/EstimateMailDialogContent.tsx
new file mode 100644
index 000000000..ad67bb048
--- /dev/null
+++ b/packages/webapp/src/containers/Sales/Estimates/EstimateMailDialog/EstimateMailDialogContent.tsx
@@ -0,0 +1,17 @@
+import { EstimateMailDialogBoot } from './EstimateMailDialogBoot';
+import { EstimateMailDialogForm } from './EstimateMailDialogForm';
+
+interface EstimateMailDialogContentProps {
+ dialogName: string;
+ estimateId: number;
+}
+export default function EstimateMailDialogContent({
+ dialogName,
+ estimateId,
+}: EstimateMailDialogContentProps) {
+ return (
+
+
+
+ )
+}
diff --git a/packages/webapp/src/containers/Sales/Estimates/EstimateMailDialog/EstimateMailDialogForm.tsx b/packages/webapp/src/containers/Sales/Estimates/EstimateMailDialog/EstimateMailDialogForm.tsx
new file mode 100644
index 000000000..f8811cdbb
--- /dev/null
+++ b/packages/webapp/src/containers/Sales/Estimates/EstimateMailDialog/EstimateMailDialogForm.tsx
@@ -0,0 +1,75 @@
+// @ts-nocheck
+import { Formik } from 'formik';
+import * as R from 'ramda';
+import { useEstimateMailDialogBoot } from './EstimateMailDialogBoot';
+import { DialogsName } from '@/constants/dialogs';
+import withDialogActions from '@/containers/Dialog/withDialogActions';
+import { useSendSaleEstimateMail } from '@/hooks/query';
+import { EstimateMailDialogFormContent } from './EstimateMailDialogFormContent';
+import {
+ initialMailNotificationValues,
+ MailNotificationFormValues,
+ transformMailFormToInitialValues,
+ transformMailFormToRequest,
+} from '@/containers/SendMailNotification/utils';
+import { Intent } from '@blueprintjs/core';
+import { AppToaster } from '@/components';
+
+const initialFormValues = {
+ ...initialMailNotificationValues,
+ attachEstimate: true,
+};
+
+interface EstimateMailFormValues extends MailNotificationFormValues {
+ attachEstimate: boolean;
+}
+
+function EstimateMailDialogFormRoot({
+ // #withDialogClose
+ closeDialog,
+}) {
+ const { mutateAsync: sendEstimateMail } = useSendSaleEstimateMail();
+ const { mailOptions, saleEstimateId } = useEstimateMailDialogBoot();
+
+ const initialValues = transformMailFormToInitialValues(
+ mailOptions,
+ initialFormValues,
+ );
+ // Handle the form submitting.
+ const handleSubmit = (values: EstimateMailFormValues, { setSubmitting }) => {
+ const reqValues = transformMailFormToRequest(values);
+
+ setSubmitting(true);
+ sendEstimateMail([saleEstimateId, reqValues])
+ .then(() => {
+ AppToaster.show({
+ message: 'The mail notification has been sent successfully.',
+ intent: Intent.SUCCESS,
+ });
+ closeDialog(DialogsName.EstimateMail);
+ setSubmitting(false);
+ })
+ .catch((error) => {
+ setSubmitting(false);
+ closeDialog(DialogsName.EstimateMail);
+ AppToaster.show({
+ message: 'Something went wrong.',
+ intent: Intent.DANGER,
+ });
+ });
+ };
+
+ const handleClose = () => {
+ closeDialog(DialogsName.EstimateMail);
+ };
+
+ return (
+
+
+
+ );
+}
+
+export const EstimateMailDialogForm = R.compose(withDialogActions)(
+ EstimateMailDialogFormRoot,
+);
diff --git a/packages/webapp/src/containers/Sales/Estimates/EstimateMailDialog/EstimateMailDialogFormContent.tsx b/packages/webapp/src/containers/Sales/Estimates/EstimateMailDialog/EstimateMailDialogFormContent.tsx
new file mode 100644
index 000000000..668c7a4c9
--- /dev/null
+++ b/packages/webapp/src/containers/Sales/Estimates/EstimateMailDialog/EstimateMailDialogFormContent.tsx
@@ -0,0 +1,66 @@
+// @ts-nocheck
+import { Form, useFormikContext } from 'formik';
+import { Button, Classes, Intent } from '@blueprintjs/core';
+import styled from 'styled-components';
+import { FFormGroup, FSwitch } from '@/components';
+import { MailNotificationForm } from '@/containers/SendMailNotification';
+import { saveInvoke } from '@/utils';
+import { useEstimateMailDialogBoot } from './EstimateMailDialogBoot';
+
+interface EstimateMailDialogFormContentProps {
+ onClose?: () => void;
+}
+
+export function EstimateMailDialogFormContent({
+ onClose,
+}: EstimateMailDialogFormContentProps) {
+ const { isSubmitting } = useFormikContext();
+ const { mailOptions } = useEstimateMailDialogBoot();
+
+ const handleClose = () => {
+ saveInvoke(onClose);
+ };
+
+ return (
+
+ );
+}
+
+const AttachFormGroup = styled(FFormGroup)`
+ background: #f8f9fb;
+ margin-top: 0.6rem;
+ padding: 4px 14px;
+ border-radius: 5px;
+ border: 1px solid #dcdcdd;
+`;
diff --git a/packages/webapp/src/containers/Sales/Estimates/EstimateMailDialog/index.ts b/packages/webapp/src/containers/Sales/Estimates/EstimateMailDialog/index.ts
new file mode 100644
index 000000000..bebbc8bef
--- /dev/null
+++ b/packages/webapp/src/containers/Sales/Estimates/EstimateMailDialog/index.ts
@@ -0,0 +1 @@
+export * from './EstimateMailDialog';
\ No newline at end of file
diff --git a/packages/webapp/src/containers/Sales/Estimates/EstimatesLanding/EstimatesDataTable.tsx b/packages/webapp/src/containers/Sales/Estimates/EstimatesLanding/EstimatesDataTable.tsx
index 402771604..dec1d548c 100644
--- a/packages/webapp/src/containers/Sales/Estimates/EstimatesLanding/EstimatesDataTable.tsx
+++ b/packages/webapp/src/containers/Sales/Estimates/EstimatesLanding/EstimatesDataTable.tsx
@@ -22,6 +22,7 @@ import { useEstimatesListContext } from './EstimatesListProvider';
import { useMemorizedColumnsWidths } from '@/hooks';
import { compose } from '@/utils';
import { DRAWERS } from '@/constants/drawers';
+import { DialogsName } from '@/constants/dialogs';
/**
* Estimates datatable.
@@ -100,6 +101,11 @@ function EstimatesDataTable({
openDrawer(DRAWERS.ESTIMATE_DETAILS, { estimateId: cell.row.original.id });
};
+ // Handle mail send estimate.
+ const handleMailSendEstimate = ({ id }) => {
+ openDialog(DialogsName.EstimateMail, { estimateId: id });
+ }
+
// Local storage memorizing columns widths.
const [initialColumnsWidths, , handleColumnResizing] =
useMemorizedColumnsWidths(TABLES.ESTIMATES);
@@ -153,6 +159,7 @@ function EstimatesDataTable({
onConvert: handleConvertToInvoice,
onViewDetails: handleViewDetailEstimate,
onPrint: handlePrintEstimate,
+ onSendMail: handleMailSendEstimate,
}}
/>
diff --git a/packages/webapp/src/containers/Sales/Estimates/EstimatesLanding/components.tsx b/packages/webapp/src/containers/Sales/Estimates/EstimatesLanding/components.tsx
index a596a419a..5edfd9051 100644
--- a/packages/webapp/src/containers/Sales/Estimates/EstimatesLanding/components.tsx
+++ b/packages/webapp/src/containers/Sales/Estimates/EstimatesLanding/components.tsx
@@ -64,6 +64,7 @@ export function ActionsMenu({
onConvert,
onViewDetails,
onPrint,
+ onSendMail
},
}) {
return (
@@ -129,6 +130,11 @@ export function ActionsMenu({
+ }
+ text={'Send Mail'}
+ onClick={safeCallback(onSendMail, original)}
+ />
}
text={intl.get('print')}
diff --git a/packages/webapp/src/containers/Sales/Invoices/InvoiceForm/InvoiceForm.tsx b/packages/webapp/src/containers/Sales/Invoices/InvoiceForm/InvoiceForm.tsx
index 7a975551d..6b9f234ac 100644
--- a/packages/webapp/src/containers/Sales/Invoices/InvoiceForm/InvoiceForm.tsx
+++ b/packages/webapp/src/containers/Sales/Invoices/InvoiceForm/InvoiceForm.tsx
@@ -4,7 +4,7 @@ import intl from 'react-intl-universal';
import classNames from 'classnames';
import { Formik, Form } from 'formik';
import { Intent } from '@blueprintjs/core';
-import { sumBy, isEmpty } from 'lodash';
+import { sumBy, isEmpty, defaultTo } from 'lodash';
import { useHistory } from 'react-router-dom';
import { CLASSES } from '@/constants/classes';
import {
@@ -44,6 +44,8 @@ function InvoiceForm({
invoiceNextNumber,
invoiceNumberPrefix,
invoiceAutoIncrementMode,
+ invoiceCustomerNotes,
+ invoiceTermsConditions,
// #withCurrentOrganization
organization: { base_currency },
@@ -79,6 +81,8 @@ function InvoiceForm({
}),
entries: orderingLinesIndexes(defaultInvoice.entries),
currency_code: base_currency,
+ invoice_message: defaultTo(invoiceCustomerNotes, ''),
+ terms_conditions: defaultTo(invoiceTermsConditions, ''),
...newInvoice,
}),
};
@@ -193,6 +197,8 @@ export default compose(
invoiceNextNumber: invoiceSettings?.nextNumber,
invoiceNumberPrefix: invoiceSettings?.numberPrefix,
invoiceAutoIncrementMode: invoiceSettings?.autoIncrement,
+ invoiceCustomerNotes: invoiceSettings?.customerNotes,
+ invoiceTermsConditions: invoiceSettings?.termsConditions,
})),
withCurrentOrganization(),
)(InvoiceForm);
diff --git a/packages/webapp/src/containers/Sales/Invoices/InvoiceForm/utils.tsx b/packages/webapp/src/containers/Sales/Invoices/InvoiceForm/utils.tsx
index b059a48fa..f77bfce9d 100644
--- a/packages/webapp/src/containers/Sales/Invoices/InvoiceForm/utils.tsx
+++ b/packages/webapp/src/containers/Sales/Invoices/InvoiceForm/utils.tsx
@@ -333,8 +333,8 @@ export const useInvoiceAggregatedTaxRates = () => {
const { taxRates } = useInvoiceFormContext();
const aggregateTaxRates = React.useMemo(
- () => aggregateItemEntriesTaxRates(taxRates),
- [taxRates],
+ () => aggregateItemEntriesTaxRates(values.currency_code, taxRates),
+ [values.currency_code, taxRates],
);
// Calculate the total tax amount of invoice entries.
return React.useMemo(() => {
diff --git a/packages/webapp/src/containers/Sales/Invoices/InvoiceMailDialog/InvoiceMailDialog.tsx b/packages/webapp/src/containers/Sales/Invoices/InvoiceMailDialog/InvoiceMailDialog.tsx
new file mode 100644
index 000000000..63430ce10
--- /dev/null
+++ b/packages/webapp/src/containers/Sales/Invoices/InvoiceMailDialog/InvoiceMailDialog.tsx
@@ -0,0 +1,37 @@
+// @ts-nocheck
+import React from 'react';
+import { Dialog, DialogSuspense } from '@/components';
+import withDialogRedux from '@/components/DialogReduxConnect';
+import { compose } from '@/utils';
+
+const InvoiceMailDialogContent = React.lazy(
+ () => import('./InvoiceMailDialogContent'),
+);
+
+/**
+ * Invoice mail dialog.
+ */
+function InvoiceMailDialog({
+ dialogName,
+ payload: { invoiceId = null },
+ isOpen,
+}) {
+ return (
+
+
+
+
+
+ );
+}
+export default compose(withDialogRedux())(InvoiceMailDialog);
diff --git a/packages/webapp/src/containers/Sales/Invoices/InvoiceMailDialog/InvoiceMailDialogBoot.tsx b/packages/webapp/src/containers/Sales/Invoices/InvoiceMailDialog/InvoiceMailDialogBoot.tsx
new file mode 100644
index 000000000..ae16a0cf2
--- /dev/null
+++ b/packages/webapp/src/containers/Sales/Invoices/InvoiceMailDialog/InvoiceMailDialogBoot.tsx
@@ -0,0 +1,44 @@
+// @ts-nocheck
+import React, { createContext } from 'react';
+import { useSaleInvoiceDefaultOptions } from '@/hooks/query';
+import { DialogContent } from '@/components';
+
+interface InvoiceMailDialogBootValues {
+ invoiceId: number;
+ mailOptions: any;
+}
+
+const InvoiceMailDialagBoot = createContext();
+
+interface InvoiceMailDialogBootProps {
+ invoiceId: number;
+ children: React.ReactNode;
+}
+
+/**
+ * Invoice mail dialog boot provider.
+ */
+function InvoiceMailDialogBoot({
+ invoiceId,
+ ...props
+}: InvoiceMailDialogBootProps) {
+ const { data: mailOptions, isLoading: isMailOptionsLoading } =
+ useSaleInvoiceDefaultOptions(invoiceId);
+
+ const provider = {
+ saleInvoiceId: invoiceId,
+ mailOptions,
+ isMailOptionsLoading,
+ };
+
+ return (
+
+
+
+ );
+}
+
+const useInvoiceMailDialogBoot = () =>
+ React.useContext(InvoiceMailDialagBoot);
+
+export { InvoiceMailDialogBoot, useInvoiceMailDialogBoot };
diff --git a/packages/webapp/src/containers/Sales/Invoices/InvoiceMailDialog/InvoiceMailDialogContent.tsx b/packages/webapp/src/containers/Sales/Invoices/InvoiceMailDialog/InvoiceMailDialogContent.tsx
new file mode 100644
index 000000000..37f3f091f
--- /dev/null
+++ b/packages/webapp/src/containers/Sales/Invoices/InvoiceMailDialog/InvoiceMailDialogContent.tsx
@@ -0,0 +1,17 @@
+import { InvoiceMailDialogBoot } from './InvoiceMailDialogBoot';
+import { InvoiceMailDialogForm } from './InvoiceMailDialogForm';
+
+interface InvoiceMailDialogContentProps {
+ dialogName: string;
+ invoiceId: number;
+}
+export default function InvoiceMailDialogContent({
+ dialogName,
+ invoiceId,
+}: InvoiceMailDialogContentProps) {
+ return (
+
+
+
+ );
+}
diff --git a/packages/webapp/src/containers/Sales/Invoices/InvoiceMailDialog/InvoiceMailDialogForm.schema.ts b/packages/webapp/src/containers/Sales/Invoices/InvoiceMailDialog/InvoiceMailDialogForm.schema.ts
new file mode 100644
index 000000000..1c365ac4a
--- /dev/null
+++ b/packages/webapp/src/containers/Sales/Invoices/InvoiceMailDialog/InvoiceMailDialogForm.schema.ts
@@ -0,0 +1,9 @@
+// @ts-nocheck
+import * as Yup from 'yup';
+
+export const InvoiceMailFormSchema = Yup.object().shape({
+ from: Yup.array().required().min(1).max(5).label('From address'),
+ to: Yup.array().required().min(1).max(5).label('To address'),
+ subject: Yup.string().required().label('Mail subject'),
+ body: Yup.string().required().label('Mail body'),
+});
diff --git a/packages/webapp/src/containers/Sales/Invoices/InvoiceMailDialog/InvoiceMailDialogForm.tsx b/packages/webapp/src/containers/Sales/Invoices/InvoiceMailDialog/InvoiceMailDialogForm.tsx
new file mode 100644
index 000000000..794ed890d
--- /dev/null
+++ b/packages/webapp/src/containers/Sales/Invoices/InvoiceMailDialog/InvoiceMailDialogForm.tsx
@@ -0,0 +1,79 @@
+// @ts-nocheck
+import { Formik } from 'formik';
+import * as R from 'ramda';
+import { Intent } from '@blueprintjs/core';
+import { useInvoiceMailDialogBoot } from './InvoiceMailDialogBoot';
+import { DialogsName } from '@/constants/dialogs';
+import { AppToaster } from '@/components';
+import { useSendSaleInvoiceMail } from '@/hooks/query';
+import withDialogActions from '@/containers/Dialog/withDialogActions';
+import { InvoiceMailDialogFormContent } from './InvoiceMailDialogFormContent';
+import { InvoiceMailFormSchema } from './InvoiceMailDialogForm.schema';
+import {
+ MailNotificationFormValues,
+ initialMailNotificationValues,
+ transformMailFormToRequest,
+ transformMailFormToInitialValues,
+} from '@/containers/SendMailNotification/utils';
+
+const initialFormValues = {
+ ...initialMailNotificationValues,
+ attachInvoice: true,
+};
+
+interface InvoiceMailFormValues extends MailNotificationFormValues {
+ attachInvoice: boolean;
+}
+
+function InvoiceMailDialogFormRoot({
+ // #withDialogActions
+ closeDialog,
+}) {
+ const { mailOptions, saleInvoiceId } = useInvoiceMailDialogBoot();
+ const { mutateAsync: sendInvoiceMail } = useSendSaleInvoiceMail();
+
+ const initialValues = transformMailFormToInitialValues(
+ mailOptions,
+ initialFormValues,
+ );
+ // Handle the form submitting.
+ const handleSubmit = (values: InvoiceMailFormValues, { setSubmitting }) => {
+ const reqValues = transformMailFormToRequest(values);
+
+ setSubmitting(true);
+ sendInvoiceMail([saleInvoiceId, reqValues])
+ .then(() => {
+ AppToaster.show({
+ message: 'The mail notification has been sent successfully.',
+ intent: Intent.SUCCESS,
+ });
+ closeDialog(DialogsName.InvoiceMail);
+ setSubmitting(false);
+ })
+ .catch(() => {
+ AppToaster.show({
+ message: 'Something went wrong.',
+ intent: Intent.DANGER,
+ });
+ setSubmitting(false);
+ });
+ };
+ // Handle the close button click.
+ const handleClose = () => {
+ closeDialog(DialogsName.InvoiceMail);
+ };
+
+ return (
+
+
+
+ );
+}
+
+export const InvoiceMailDialogForm = R.compose(withDialogActions)(
+ InvoiceMailDialogFormRoot,
+);
diff --git a/packages/webapp/src/containers/Sales/Invoices/InvoiceMailDialog/InvoiceMailDialogFormContent.tsx b/packages/webapp/src/containers/Sales/Invoices/InvoiceMailDialog/InvoiceMailDialogFormContent.tsx
new file mode 100644
index 000000000..07e104027
--- /dev/null
+++ b/packages/webapp/src/containers/Sales/Invoices/InvoiceMailDialog/InvoiceMailDialogFormContent.tsx
@@ -0,0 +1,66 @@
+// @ts-nocheck
+import { Form, useFormikContext } from 'formik';
+import { Button, Classes, Intent } from '@blueprintjs/core';
+import styled from 'styled-components';
+import { FFormGroup, FSwitch } from '@/components';
+import { MailNotificationForm } from '@/containers/SendMailNotification';
+import { saveInvoke } from '@/utils';
+import { useInvoiceMailDialogBoot } from './InvoiceMailDialogBoot';
+
+interface SendMailNotificationFormProps {
+ onClose?: () => void;
+}
+
+export function InvoiceMailDialogFormContent({
+ onClose,
+}: SendMailNotificationFormProps) {
+ const { isSubmitting } = useFormikContext();
+ const { mailOptions } = useInvoiceMailDialogBoot();
+
+ const handleClose = () => {
+ saveInvoke(onClose);
+ };
+
+ return (
+
+ );
+}
+
+const AttachFormGroup = styled(FFormGroup)`
+ background: #f8f9fb;
+ margin-top: 0.6rem;
+ padding: 4px 14px;
+ border-radius: 5px;
+ border: 1px solid #dcdcdd;
+`;
diff --git a/packages/webapp/src/containers/Sales/Invoices/InvoiceMailDialog/index.ts b/packages/webapp/src/containers/Sales/Invoices/InvoiceMailDialog/index.ts
new file mode 100644
index 000000000..b64dcaaf3
--- /dev/null
+++ b/packages/webapp/src/containers/Sales/Invoices/InvoiceMailDialog/index.ts
@@ -0,0 +1 @@
+export * from './InvoiceMailDialog';
\ No newline at end of file
diff --git a/packages/webapp/src/containers/Sales/Invoices/InvoicesLanding/InvoicesDataTable.tsx b/packages/webapp/src/containers/Sales/Invoices/InvoicesLanding/InvoicesDataTable.tsx
index c2f5a78df..75ba9b7f6 100644
--- a/packages/webapp/src/containers/Sales/Invoices/InvoicesLanding/InvoicesDataTable.tsx
+++ b/packages/webapp/src/containers/Sales/Invoices/InvoicesLanding/InvoicesDataTable.tsx
@@ -26,6 +26,7 @@ import { useInvoicesListContext } from './InvoicesListProvider';
import { compose } from '@/utils';
import { DRAWERS } from '@/constants/drawers';
+import { DialogsName } from '@/constants/dialogs';
/**
* Invoices datatable.
@@ -98,6 +99,11 @@ function InvoicesDataTable({
openDialog('invoice-pdf-preview', { invoiceId: id });
};
+ // Handle send mail invoice.
+ const handleSendMailInvoice = ({ id }) => {
+ openDialog(DialogsName.InvoiceMail, { invoiceId: id });
+ };
+
// Handle cell click.
const handleCellClick = (cell, event) => {
openDrawer(DRAWERS.INVOICE_DETAILS, { invoiceId: cell.row.original.id });
@@ -157,6 +163,7 @@ function InvoicesDataTable({
onViewDetails: handleViewDetailInvoice,
onPrint: handlePrintInvoice,
onConvert: handleConvertToCreitNote,
+ onSendMail: handleSendMailInvoice
}}
/>
diff --git a/packages/webapp/src/containers/Sales/Invoices/InvoicesLanding/components.tsx b/packages/webapp/src/containers/Sales/Invoices/InvoicesLanding/components.tsx
index c5ebc3aee..2739ad9e5 100644
--- a/packages/webapp/src/containers/Sales/Invoices/InvoicesLanding/components.tsx
+++ b/packages/webapp/src/containers/Sales/Invoices/InvoicesLanding/components.tsx
@@ -128,6 +128,7 @@ export function ActionsMenu({
onQuick,
onViewDetails,
onPrint,
+ onSendMail
},
row: { original },
}) {
@@ -150,7 +151,6 @@ export function ActionsMenu({
text={intl.get('invoice.convert_to_credit_note')}
onClick={safeCallback(onConvert, original)}
/>
-
}
@@ -169,6 +169,11 @@ export function ActionsMenu({
+ }
+ text={'Send Mail'}
+ onClick={safeCallback(onSendMail, original)}
+ />
}
text={intl.get('print')}
diff --git a/packages/webapp/src/containers/Sales/PaymentReceives/PaymentMailDialog/PaymentMailDialog.tsx b/packages/webapp/src/containers/Sales/PaymentReceives/PaymentMailDialog/PaymentMailDialog.tsx
new file mode 100644
index 000000000..6da51d03e
--- /dev/null
+++ b/packages/webapp/src/containers/Sales/PaymentReceives/PaymentMailDialog/PaymentMailDialog.tsx
@@ -0,0 +1,37 @@
+// @ts-nocheck
+import React from 'react';
+import { Dialog, DialogSuspense } from '@/components';
+import withDialogRedux from '@/components/DialogReduxConnect';
+import { compose } from '@/utils';
+
+const PaymentMailDialogContent = React.lazy(
+ () => import('./PaymentMailDialogContent'),
+);
+
+/**
+ * Payment mail dialog.
+ */
+function PaymentMailDialog({
+ dialogName,
+ payload: { paymentReceiveId = null },
+ isOpen,
+}) {
+ return (
+
+
+
+
+
+ );
+}
+export default compose(withDialogRedux())(PaymentMailDialog);
diff --git a/packages/webapp/src/containers/Sales/PaymentReceives/PaymentMailDialog/PaymentMailDialogBoot.tsx b/packages/webapp/src/containers/Sales/PaymentReceives/PaymentMailDialog/PaymentMailDialogBoot.tsx
new file mode 100644
index 000000000..aa08bd2e1
--- /dev/null
+++ b/packages/webapp/src/containers/Sales/PaymentReceives/PaymentMailDialog/PaymentMailDialogBoot.tsx
@@ -0,0 +1,45 @@
+// @ts-nocheck
+import React, { createContext } from 'react';
+import { usePaymentReceiveDefaultOptions } from '@/hooks/query';
+import { DialogContent } from '@/components';
+
+interface PaymentMailDialogBootValues {
+ paymentReceiveId: number;
+ mailOptions: any;
+}
+
+const PaymentMailDialogBootContext =
+ createContext();
+
+interface PaymentMailDialogBootProps {
+ paymentReceiveId: number;
+ children: React.ReactNode;
+}
+
+/**
+ * Payment mail dialog boot provider.
+ */
+function PaymentMailDialogBoot({
+ paymentReceiveId,
+ ...props
+}: PaymentMailDialogBootProps) {
+ const { data: mailOptions, isLoading: isMailOptionsLoading } =
+ usePaymentReceiveDefaultOptions(paymentReceiveId);
+
+ const provider = {
+ mailOptions,
+ isMailOptionsLoading,
+ paymentReceiveId
+ };
+
+ return (
+
+
+
+ );
+}
+
+const usePaymentMailDialogBoot = () =>
+ React.useContext(PaymentMailDialogBootContext);
+
+export { PaymentMailDialogBoot, usePaymentMailDialogBoot };
diff --git a/packages/webapp/src/containers/Sales/PaymentReceives/PaymentMailDialog/PaymentMailDialogContent.tsx b/packages/webapp/src/containers/Sales/PaymentReceives/PaymentMailDialog/PaymentMailDialogContent.tsx
new file mode 100644
index 000000000..12fa57e05
--- /dev/null
+++ b/packages/webapp/src/containers/Sales/PaymentReceives/PaymentMailDialog/PaymentMailDialogContent.tsx
@@ -0,0 +1,17 @@
+import { PaymentMailDialogBoot } from './PaymentMailDialogBoot';
+import { PaymentMailDialogForm } from './PaymentMailDialogForm';
+
+interface PaymentMailDialogContentProps {
+ dialogName: string;
+ paymentReceiveId: number;
+}
+export default function PaymentMailDialogContent({
+ dialogName,
+ paymentReceiveId,
+}: PaymentMailDialogContentProps) {
+ return (
+
+
+
+ );
+}
diff --git a/packages/webapp/src/containers/Sales/PaymentReceives/PaymentMailDialog/PaymentMailDialogForm.tsx b/packages/webapp/src/containers/Sales/PaymentReceives/PaymentMailDialog/PaymentMailDialogForm.tsx
new file mode 100644
index 000000000..bf0aa578b
--- /dev/null
+++ b/packages/webapp/src/containers/Sales/PaymentReceives/PaymentMailDialog/PaymentMailDialogForm.tsx
@@ -0,0 +1,78 @@
+// @ts-nocheck
+import { Formik, FormikBag } from 'formik';
+import * as R from 'ramda';
+import { Intent } from '@blueprintjs/core';
+import { usePaymentMailDialogBoot } from './PaymentMailDialogBoot';
+import withDialogActions from '@/containers/Dialog/withDialogActions';
+import { DialogsName } from '@/constants/dialogs';
+import { useSendPaymentReceiveMail } from '@/hooks/query';
+import { PaymentMailDialogFormContent } from './PaymentMailDialogFormContent';
+import {
+ MailNotificationFormValues,
+ initialMailNotificationValues,
+ transformMailFormToRequest,
+ transformMailFormToInitialValues,
+} from '@/containers/SendMailNotification/utils';
+import { AppToaster } from '@/components';
+
+const initialFormValues = {
+ ...initialMailNotificationValues,
+ attachPayment: true,
+};
+
+interface PaymentMailFormValue extends MailNotificationFormValues {
+ attachPayment: boolean;
+}
+
+export function PaymentMailDialogFormRoot({
+ // #withDialogActions
+ closeDialog,
+}) {
+ const { mailOptions, paymentReceiveId } = usePaymentMailDialogBoot();
+ const { mutateAsync: sendPaymentMail } = useSendPaymentReceiveMail();
+
+ const initialValues = transformMailFormToInitialValues(
+ mailOptions,
+ initialFormValues,
+ );
+ // Handles the form submitting.
+ const handleSubmit = (
+ values: PaymentMailFormValue,
+ { setSubmitting }: FormikBag,
+ ) => {
+ const reqValues = transformMailFormToRequest(values);
+
+ setSubmitting(true);
+ sendPaymentMail([paymentReceiveId, reqValues])
+ .then(() => {
+ AppToaster.show({
+ message: 'The mail notification has been sent successfully.',
+ intent: Intent.SUCCESS,
+ });
+ setSubmitting(false);
+ closeDialog(DialogsName.PaymentMail);
+ })
+ .catch(() => {
+ AppToaster.show({
+ message: 'Something went wrong.',
+ intent: Intent.DANGER,
+ });
+ setSubmitting(false);
+ closeDialog(DialogsName.PaymentMail);
+ });
+ };
+
+ const handleClose = () => {
+ closeDialog(DialogsName.PaymentMail);
+ };
+
+ return (
+
+
+
+ );
+}
+
+export const PaymentMailDialogForm = R.compose(withDialogActions)(
+ PaymentMailDialogFormRoot,
+);
diff --git a/packages/webapp/src/containers/Sales/PaymentReceives/PaymentMailDialog/PaymentMailDialogFormContent.tsx b/packages/webapp/src/containers/Sales/PaymentReceives/PaymentMailDialog/PaymentMailDialogFormContent.tsx
new file mode 100644
index 000000000..5a04f0f28
--- /dev/null
+++ b/packages/webapp/src/containers/Sales/PaymentReceives/PaymentMailDialog/PaymentMailDialogFormContent.tsx
@@ -0,0 +1,66 @@
+// @ts-nocheck
+import { Form, useFormikContext } from 'formik';
+import { Button, Classes, Intent } from '@blueprintjs/core';
+import styled from 'styled-components';
+import { FFormGroup, FSwitch } from '@/components';
+import { MailNotificationForm } from '@/containers/SendMailNotification';
+import { saveInvoke } from '@/utils';
+import { usePaymentMailDialogBoot } from './PaymentMailDialogBoot';
+
+interface PaymentMailDialogFormContentProps {
+ onClose?: () => void;
+}
+
+export function PaymentMailDialogFormContent({
+ onClose,
+}: PaymentMailDialogFormContentProps) {
+ const { mailOptions } = usePaymentMailDialogBoot();
+ const { isSubmitting } = useFormikContext();
+
+ const handleClose = () => {
+ saveInvoke(onClose);
+ };
+
+ return (
+
+ );
+}
+
+const AttachFormGroup = styled(FFormGroup)`
+ background: #f8f9fb;
+ margin-top: 0.6rem;
+ padding: 4px 14px;
+ border-radius: 5px;
+ border: 1px solid #dcdcdd;
+`;
diff --git a/packages/webapp/src/containers/Sales/PaymentReceives/PaymentMailDialog/index.ts b/packages/webapp/src/containers/Sales/PaymentReceives/PaymentMailDialog/index.ts
new file mode 100644
index 000000000..5a2fbde70
--- /dev/null
+++ b/packages/webapp/src/containers/Sales/PaymentReceives/PaymentMailDialog/index.ts
@@ -0,0 +1 @@
+export * from './PaymentMailDialog';
\ No newline at end of file
diff --git a/packages/webapp/src/containers/Sales/PaymentReceives/PaymentsLanding/PaymentReceivesTable.tsx b/packages/webapp/src/containers/Sales/PaymentReceives/PaymentsLanding/PaymentReceivesTable.tsx
index 15a8346df..82e7f7cb5 100644
--- a/packages/webapp/src/containers/Sales/PaymentReceives/PaymentsLanding/PaymentReceivesTable.tsx
+++ b/packages/webapp/src/containers/Sales/PaymentReceives/PaymentsLanding/PaymentReceivesTable.tsx
@@ -17,12 +17,14 @@ import withPaymentReceives from './withPaymentReceives';
import withPaymentReceivesActions from './withPaymentReceivesActions';
import withAlertsActions from '@/containers/Alert/withAlertActions';
import withDrawerActions from '@/containers/Drawer/withDrawerActions';
+import withDialogActions from '@/containers/Dialog/withDialogActions';
import withSettings from '@/containers/Settings/withSettings';
import { usePaymentReceivesColumns, ActionsMenu } from './components';
import { usePaymentReceivesListContext } from './PaymentReceiptsListProvider';
import { useMemorizedColumnsWidths } from '@/hooks';
import { DRAWERS } from '@/constants/drawers';
+import { DialogsName } from '@/constants/dialogs';
/**
* Payment receives datatable.
@@ -31,15 +33,15 @@ function PaymentReceivesDataTable({
// #withPaymentReceivesActions
setPaymentReceivesTableState,
- // #withPaymentReceives
- paymentReceivesTableState,
-
// #withAlertsActions
openAlert,
// #withDrawerActions
openDrawer,
+ // #withDialogActions
+ openDialog,
+
// #withSettings
paymentReceivesTableSize,
}) {
@@ -73,6 +75,11 @@ function PaymentReceivesDataTable({
openDrawer(DRAWERS.PAYMENT_RECEIVE_DETAILS, { paymentReceiveId: id });
};
+ // Handle mail send payment receive.
+ const handleSendMailPayment = ({ id }) => {
+ openDialog(DialogsName.PaymentMail, { paymentReceiveId: id });
+ };
+
// Handle cell click.
const handleCellClick = (cell, event) => {
openDrawer(DRAWERS.PAYMENT_RECEIVE_DETAILS, {
@@ -129,6 +136,7 @@ function PaymentReceivesDataTable({
onDelete: handleDeletePaymentReceive,
onEdit: handleEditPaymentReceive,
onViewDetails: handleViewDetailPaymentReceive,
+ onSendMail: handleSendMailPayment,
}}
/>
@@ -139,6 +147,7 @@ export default compose(
withPaymentReceivesActions,
withAlertsActions,
withDrawerActions,
+ withDialogActions,
withPaymentReceives(({ paymentReceivesTableState }) => ({
paymentReceivesTableState,
})),
diff --git a/packages/webapp/src/containers/Sales/PaymentReceives/PaymentsLanding/components.tsx b/packages/webapp/src/containers/Sales/PaymentReceives/PaymentsLanding/components.tsx
index 4af4f14ba..fd6aec581 100644
--- a/packages/webapp/src/containers/Sales/PaymentReceives/PaymentsLanding/components.tsx
+++ b/packages/webapp/src/containers/Sales/PaymentReceives/PaymentsLanding/components.tsx
@@ -15,14 +15,17 @@ import {
import { FormatDateCell, Money, Icon, Can } from '@/components';
import { safeCallback } from '@/utils';
import { CLASSES } from '@/constants/classes';
-import { PaymentReceiveAction, AbilitySubject } from '@/constants/abilityOption';
+import {
+ PaymentReceiveAction,
+ AbilitySubject,
+} from '@/constants/abilityOption';
/**
* Table actions menu.
*/
export function ActionsMenu({
row: { original: paymentReceive },
- payload: { onEdit, onDelete, onViewDetails },
+ payload: { onEdit, onDelete, onViewDetails, onSendMail },
}) {
return (
@@ -31,6 +34,11 @@ export function ActionsMenu({
text={intl.get('view_details')}
onClick={safeCallback(onViewDetails, paymentReceive)}
/>
+ }
+ text={'Send Mail'}
+ onClick={safeCallback(onSendMail, paymentReceive)}
+ />
({
- ...(!isEmpty(receipt)
- ? { ...transformToEditForm(receipt) }
- : {
- ...defaultReceipt,
- ...(receiptAutoIncrement && {
- receipt_number: nextReceiptNumber,
- }),
- deposit_account_id: parseInt(preferredDepositAccount),
- entries: orderingLinesIndexes(defaultReceipt.entries),
- currency_code: base_currency,
+ const initialValues = {
+ ...(!isEmpty(receipt)
+ ? { ...transformToEditForm(receipt) }
+ : {
+ ...defaultReceipt,
+ ...(receiptAutoIncrement && {
+ receipt_number: nextReceiptNumber,
}),
- }),
- [receipt, preferredDepositAccount, nextReceiptNumber, receiptAutoIncrement],
- );
-
+ deposit_account_id: parseInt(preferredDepositAccount),
+ entries: orderingLinesIndexes(defaultReceipt.entries),
+ currency_code: base_currency,
+ receipt_message: receiptMessage,
+ terms_conditions: receiptTermsConditions,
+ }),
+ };
// Handle the form submit.
const handleFormSubmit = (
values,
@@ -184,6 +183,8 @@ export default compose(
receiptNextNumber: receiptSettings?.nextNumber,
receiptNumberPrefix: receiptSettings?.numberPrefix,
receiptAutoIncrement: receiptSettings?.autoIncrement,
+ receiptMessage: receiptSettings?.receiptMessage,
+ receiptTermsConditions: receiptSettings?.termsConditions,
preferredDepositAccount: receiptSettings?.preferredDepositAccount,
})),
withCurrentOrganization(),
diff --git a/packages/webapp/src/containers/Sales/Receipts/ReceiptForm/utils.tsx b/packages/webapp/src/containers/Sales/Receipts/ReceiptForm/utils.tsx
index e8c019e7a..d58cb6179 100644
--- a/packages/webapp/src/containers/Sales/Receipts/ReceiptForm/utils.tsx
+++ b/packages/webapp/src/containers/Sales/Receipts/ReceiptForm/utils.tsx
@@ -7,7 +7,6 @@ import { omit, first } from 'lodash';
import { useFormikContext } from 'formik';
import {
defaultFastFieldShouldUpdate,
- transactionNumber,
repeatValue,
transformToForm,
formattedAmount,
@@ -50,7 +49,7 @@ export const defaultReceipt = {
receipt_date: moment(new Date()).format('YYYY-MM-DD'),
reference_no: '',
receipt_message: '',
- statement: '',
+ terms_conditions: '',
closed: '',
branch_id: '',
warehouse_id: '',
diff --git a/packages/webapp/src/containers/Sales/Receipts/ReceiptMailDialog/ReceiptMailDialog.tsx b/packages/webapp/src/containers/Sales/Receipts/ReceiptMailDialog/ReceiptMailDialog.tsx
new file mode 100644
index 000000000..a64ad5531
--- /dev/null
+++ b/packages/webapp/src/containers/Sales/Receipts/ReceiptMailDialog/ReceiptMailDialog.tsx
@@ -0,0 +1,37 @@
+// @ts-nocheck
+import React from 'react';
+import { Dialog, DialogSuspense } from '@/components';
+import withDialogRedux from '@/components/DialogReduxConnect';
+import { compose } from '@/utils';
+
+const ReceiptMailDialogContent = React.lazy(
+ () => import('./ReceiptMailDialogContent'),
+);
+
+/**
+ * Invoice mail dialog.
+ */
+function ReceiptMailDialog({
+ dialogName,
+ payload: { receiptId = null },
+ isOpen,
+}) {
+ return (
+
+
+
+
+
+ );
+}
+export default compose(withDialogRedux())(ReceiptMailDialog);
diff --git a/packages/webapp/src/containers/Sales/Receipts/ReceiptMailDialog/ReceiptMailDialogBoot.tsx b/packages/webapp/src/containers/Sales/Receipts/ReceiptMailDialog/ReceiptMailDialogBoot.tsx
new file mode 100644
index 000000000..09eeb55f1
--- /dev/null
+++ b/packages/webapp/src/containers/Sales/Receipts/ReceiptMailDialog/ReceiptMailDialogBoot.tsx
@@ -0,0 +1,45 @@
+// @ts-nocheck
+import React, { createContext } from 'react';
+import { useSaleReceiptDefaultOptions } from '@/hooks/query';
+import { DialogContent } from '@/components';
+
+interface ReceiptMailDialogBootValues {
+ receiptId: number;
+ mailOptions: any;
+}
+
+const ReceiptMailDialogBootContext =
+ createContext();
+
+interface ReceiptMailDialogBootProps {
+ receiptId: number;
+ children: React.ReactNode;
+}
+
+/**
+ * Receipt mail dialog boot provider.
+ */
+function ReceiptMailDialogBoot({
+ receiptId,
+ ...props
+}: ReceiptMailDialogBootProps) {
+ const { data: mailOptions, isLoading: isMailOptionsLoading } =
+ useSaleReceiptDefaultOptions(receiptId);
+
+ const provider = {
+ saleReceiptId: receiptId,
+ mailOptions,
+ isMailOptionsLoading,
+ };
+
+ return (
+
+
+
+ );
+}
+
+const useReceiptMailDialogBoot = () =>
+ React.useContext(ReceiptMailDialogBootContext);
+
+export { ReceiptMailDialogBoot, useReceiptMailDialogBoot };
diff --git a/packages/webapp/src/containers/Sales/Receipts/ReceiptMailDialog/ReceiptMailDialogContent.tsx b/packages/webapp/src/containers/Sales/Receipts/ReceiptMailDialog/ReceiptMailDialogContent.tsx
new file mode 100644
index 000000000..955620f86
--- /dev/null
+++ b/packages/webapp/src/containers/Sales/Receipts/ReceiptMailDialog/ReceiptMailDialogContent.tsx
@@ -0,0 +1,18 @@
+import React from 'react';
+import { ReceiptMailDialogBoot } from './ReceiptMailDialogBoot';
+import { ReceiptMailDialogForm } from './ReceiptMailDialogForm';
+
+interface ReceiptMailDialogContentProps {
+ dialogName: string
+ receiptId: number;
+}
+export default function ReceiptMailDialogContent({
+ dialogName,
+ receiptId,
+}: ReceiptMailDialogContentProps) {
+ return (
+
+
+
+ );
+}
diff --git a/packages/webapp/src/containers/Sales/Receipts/ReceiptMailDialog/ReceiptMailDialogForm.tsx b/packages/webapp/src/containers/Sales/Receipts/ReceiptMailDialog/ReceiptMailDialogForm.tsx
new file mode 100644
index 000000000..fb9b845af
--- /dev/null
+++ b/packages/webapp/src/containers/Sales/Receipts/ReceiptMailDialog/ReceiptMailDialogForm.tsx
@@ -0,0 +1,74 @@
+// @ts-nocheck
+import { Formik, FormikBag } from 'formik';
+import * as R from 'ramda';
+import { Intent } from '@blueprintjs/core';
+import { useReceiptMailDialogBoot } from './ReceiptMailDialogBoot';
+import withDialogActions from '@/containers/Dialog/withDialogActions';
+import { DialogsName } from '@/constants/dialogs';
+import { useSendSaleReceiptMail } from '@/hooks/query';
+import { ReceiptMailDialogFormContent } from './ReceiptMailDialogFormContent';
+import {
+ initialMailNotificationValues,
+ MailNotificationFormValues,
+ transformMailFormToInitialValues,
+ transformMailFormToRequest,
+} from '@/containers/SendMailNotification/utils';
+import { AppToaster } from '@/components';
+
+const initialFormValues = {
+ ...initialMailNotificationValues,
+ attachReceipt: true,
+};
+interface ReceiptMailFormValues extends MailNotificationFormValues {
+ attachReceipt: boolean;
+}
+
+function ReceiptMailDialogFormRoot({ closeDialog }) {
+ const { mailOptions, saleReceiptId } = useReceiptMailDialogBoot();
+ const { mutateAsync: sendReceiptMail } = useSendSaleReceiptMail();
+
+ // Transformes mail options to initial form values.
+ const initialValues = transformMailFormToInitialValues(
+ mailOptions,
+ initialFormValues,
+ );
+ // Handle the form submitting.
+ const handleSubmit = (
+ values: ReceiptMailFormValues,
+ { setSubmitting }: FormikBag,
+ ) => {
+ const reqValues = transformMailFormToRequest(values);
+
+ setSubmitting(true);
+ sendReceiptMail([saleReceiptId, reqValues])
+ .then(() => {
+ AppToaster.show({
+ message: 'The mail notification has been sent successfully.',
+ intent: Intent.SUCCESS,
+ });
+ closeDialog(DialogsName.ReceiptMail);
+ setSubmitting(false);
+ })
+ .catch(() => {
+ AppToaster.show({
+ message: 'Something went wrong.',
+ intent: Intent.DANGER,
+ });
+ setSubmitting(false);
+ });
+ };
+ // Handle the close button click.
+ const handleClose = () => {
+ closeDialog(DialogsName.ReceiptMail);
+ };
+
+ return (
+
+
+
+ );
+}
+
+export const ReceiptMailDialogForm = R.compose(withDialogActions)(
+ ReceiptMailDialogFormRoot,
+);
diff --git a/packages/webapp/src/containers/Sales/Receipts/ReceiptMailDialog/ReceiptMailDialogFormContent.tsx b/packages/webapp/src/containers/Sales/Receipts/ReceiptMailDialog/ReceiptMailDialogFormContent.tsx
new file mode 100644
index 000000000..d824d35af
--- /dev/null
+++ b/packages/webapp/src/containers/Sales/Receipts/ReceiptMailDialog/ReceiptMailDialogFormContent.tsx
@@ -0,0 +1,66 @@
+// @ts-nocheck
+import { Form, useFormikContext } from 'formik';
+import { Button, Classes, Intent } from '@blueprintjs/core';
+import styled from 'styled-components';
+import { FFormGroup, FSwitch } from '@/components';
+import { MailNotificationForm } from '@/containers/SendMailNotification';
+import { useReceiptMailDialogBoot } from './ReceiptMailDialogBoot';
+import { saveInvoke } from '@/utils';
+
+interface SendMailNotificationFormProps {
+ onClose?: () => void;
+}
+
+export function ReceiptMailDialogFormContent({
+ onClose,
+}: SendMailNotificationFormProps) {
+ const { mailOptions } = useReceiptMailDialogBoot();
+ const { isSubmitting } = useFormikContext();
+
+ const handleClose = () => {
+ saveInvoke(onClose);
+ };
+
+ return (
+
+ );
+}
+
+const AttachFormGroup = styled(FFormGroup)`
+ background: #f8f9fb;
+ margin-top: 0.6rem;
+ padding: 4px 14px;
+ border-radius: 5px;
+ border: 1px solid #dcdcdd;
+`;
diff --git a/packages/webapp/src/containers/Sales/Receipts/ReceiptMailDialog/index.tsx b/packages/webapp/src/containers/Sales/Receipts/ReceiptMailDialog/index.tsx
new file mode 100644
index 000000000..575fb462b
--- /dev/null
+++ b/packages/webapp/src/containers/Sales/Receipts/ReceiptMailDialog/index.tsx
@@ -0,0 +1 @@
+export * from './ReceiptMailDialog';
\ No newline at end of file
diff --git a/packages/webapp/src/containers/Sales/Receipts/ReceiptsLanding/ReceiptActionsBar.tsx b/packages/webapp/src/containers/Sales/Receipts/ReceiptsLanding/ReceiptActionsBar.tsx
index 828ff5a70..7517cf104 100644
--- a/packages/webapp/src/containers/Sales/Receipts/ReceiptsLanding/ReceiptActionsBar.tsx
+++ b/packages/webapp/src/containers/Sales/Receipts/ReceiptsLanding/ReceiptActionsBar.tsx
@@ -140,7 +140,6 @@ function ReceiptActionsBar({
icon={ }
text={ }
/>
-
{
+ openDialog(DialogsName.ReceiptMail, { receiptId: id });
+ };
+
// Local storage memorizing columns widths.
const [initialColumnsWidths, , handleColumnResizing] =
useMemorizedColumnsWidths(TABLES.RECEIPTS);
@@ -141,6 +147,7 @@ function ReceiptsDataTable({
onClose: handleCloseReceipt,
onViewDetails: handleViewDetailReceipt,
onPrint: handlePrintInvoice,
+ onSendMail: handleSendMailReceipt,
}}
/>
diff --git a/packages/webapp/src/containers/Sales/Receipts/ReceiptsLanding/components.tsx b/packages/webapp/src/containers/Sales/Receipts/ReceiptsLanding/components.tsx
index 4d843937e..e76b2d9c6 100644
--- a/packages/webapp/src/containers/Sales/Receipts/ReceiptsLanding/components.tsx
+++ b/packages/webapp/src/containers/Sales/Receipts/ReceiptsLanding/components.tsx
@@ -24,7 +24,7 @@ import { SaleReceiptAction, AbilitySubject } from '@/constants/abilityOption';
* @returns {React.JSX}
*/
export function ActionsMenu({
- payload: { onEdit, onDelete, onClose, onDrawer, onViewDetails, onPrint },
+ payload: { onEdit, onDelete, onClose, onSendMail, onViewDetails, onPrint },
row: { original: receipt },
}) {
return (
@@ -51,6 +51,11 @@ export function ActionsMenu({
+ }
+ text={'Send Mail'}
+ onClick={safeCallback(onSendMail, receipt)}
+ />
}
text={intl.get('print')}
diff --git a/packages/webapp/src/containers/SendMailNotification/MailNotificationForm.tsx b/packages/webapp/src/containers/SendMailNotification/MailNotificationForm.tsx
new file mode 100644
index 000000000..74712a606
--- /dev/null
+++ b/packages/webapp/src/containers/SendMailNotification/MailNotificationForm.tsx
@@ -0,0 +1,130 @@
+// @ts-nocheck
+import {
+ Box,
+ FFormGroup,
+ FInputGroup,
+ FMultiSelect,
+ FRichEditor,
+} from '@/components';
+import styled from 'styled-components';
+import { SelectOptionProps } from '@blueprintjs-formik/select';
+
+interface MailNotificationFormProps {
+ fromAddresses: SelectOptionProps[];
+ toAddresses: SelectOptionProps[];
+}
+
+const commonAddressSelect = {
+ placeholder: '',
+ labelAccessor: '',
+ valueAccessor: 'mail',
+ tagAccessor: (item) => `<${item.label}> (${item.mail})`,
+ textAccessor: (item) => `<${item.label}> (${item.mail})`,
+};
+
+export function MailNotificationForm({
+ fromAddresses,
+ toAddresses,
+}: MailNotificationFormProps) {
+ return (
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ );
+}
+
+const MailMessageEditor = styled(FRichEditor)`
+ padding: 15px;
+ border: 1px solid #dedfe9;
+ border-top: 0;
+ border-bottom-left-radius: 5px;
+ border-bottom-right-radius: 5px;
+`;
+
+const HeaderBox = styled('div')`
+ border-top-right-radius: 5px;
+ border-top-left-radius: 5px;
+ border: 1px solid #dddfe9;
+ border-bottom: 2px solid #eaeaef;
+ padding: 6px 15px;
+
+ .bp4-form-group {
+ margin: 0;
+ padding-top: 8px;
+ padding-bottom: 8px;
+
+ &:not(:last-of-type) {
+ border-bottom: 1px solid #dddfe9;
+ }
+ &:first-of-type {
+ padding-top: 0;
+ }
+ &:last-of-type {
+ padding-bottom: 0;
+ }
+ }
+
+ .bp4-form-content {
+ flex: 1 0;
+ }
+
+ .bp4-label {
+ min-width: 65px;
+ color: #738091;
+ }
+
+ .bp4-input {
+ border-color: transparent;
+ padding: 0;
+
+ &:focus,
+ &.bp4-active {
+ box-shadow: 0 0 0 0;
+ }
+ }
+
+ .bp4-input-ghost {
+ margin-top: 5px;
+ }
+ .bp4-tag-input-values {
+ margin: 0;
+ }
+`;
diff --git a/packages/webapp/src/containers/SendMailNotification/index.ts b/packages/webapp/src/containers/SendMailNotification/index.ts
new file mode 100644
index 000000000..5662fe7c9
--- /dev/null
+++ b/packages/webapp/src/containers/SendMailNotification/index.ts
@@ -0,0 +1 @@
+export * from './MailNotificationForm';
\ No newline at end of file
diff --git a/packages/webapp/src/containers/SendMailNotification/utils.ts b/packages/webapp/src/containers/SendMailNotification/utils.ts
new file mode 100644
index 000000000..59d0f6420
--- /dev/null
+++ b/packages/webapp/src/containers/SendMailNotification/utils.ts
@@ -0,0 +1,44 @@
+import { castArray, first } from 'lodash';
+import { transformToForm } from '@/utils';
+
+export const initialMailNotificationValues = {
+ from: [],
+ to: [],
+ subject: '',
+ body: '',
+};
+
+export interface MailNotificationFormValues {
+ from: string[];
+ to: string[];
+ subject: string;
+ body: string;
+}
+
+export const transformMailFormToRequest = (
+ values: MailNotificationFormValues,
+) => {
+ return {
+ ...values,
+ from: first(values.from),
+ to: values.to?.join(', '),
+ };
+};
+
+/**
+ * Transformes the mail options response values to form initial values.
+ * @param {any} mailOptions
+ * @param {MailNotificationFormValues} initialValues
+ * @returns {MailNotificationFormValues}
+ */
+export const transformMailFormToInitialValues = (
+ mailOptions: any,
+ initialValues: MailNotificationFormValues,
+): MailNotificationFormValues => {
+ return {
+ ...initialValues,
+ ...transformToForm(mailOptions, initialValues),
+ from: mailOptions.from ? castArray(mailOptions.from) : [],
+ to: mailOptions.to ? castArray(mailOptions.to) : [],
+ };
+};
diff --git a/packages/webapp/src/containers/Vendors/VendorForm/VendorForm.schema.tsx b/packages/webapp/src/containers/Vendors/VendorForm/VendorForm.schema.tsx
index 6eb0edf71..5e64c61f0 100644
--- a/packages/webapp/src/containers/Vendors/VendorForm/VendorForm.schema.tsx
+++ b/packages/webapp/src/containers/Vendors/VendorForm/VendorForm.schema.tsx
@@ -22,7 +22,7 @@ const Schema = Yup.object().shape({
billing_address_2: Yup.string().trim(),
billing_address_city: Yup.string().trim(),
billing_address_state: Yup.string().trim(),
- billing_address_postcode: Yup.number().nullable(),
+ billing_address_postcode: Yup.string().nullable(),
billing_address_phone: Yup.number(),
shipping_address_country: Yup.string().trim(),
@@ -30,7 +30,7 @@ const Schema = Yup.object().shape({
shipping_address_2: Yup.string().trim(),
shipping_address_city: Yup.string().trim(),
shipping_address_state: Yup.string().trim(),
- shipping_address_postcode: Yup.number().nullable(),
+ shipping_address_postcode: Yup.string().nullable(),
shipping_address_phone: Yup.number(),
opening_balance: Yup.number().nullable(),
diff --git a/packages/webapp/src/hooks/query/estimates.tsx b/packages/webapp/src/hooks/query/estimates.tsx
index 8bb3c2731..9ab867857 100644
--- a/packages/webapp/src/hooks/query/estimates.tsx
+++ b/packages/webapp/src/hooks/query/estimates.tsx
@@ -239,3 +239,33 @@ export function useEstimateSMSDetail(estimateId, props, requestProps) {
},
);
}
+
+export function useSendSaleEstimateMail(props) {
+ const queryClient = useQueryClient();
+ const apiRequest = useApiRequest();
+
+ return useMutation(
+ ([id, values]) => apiRequest.post(`sales/estimates/${id}/mail`, values),
+ {
+ onSuccess: (res, [id, values]) => {
+ // Common invalidate queries.
+ commonInvalidateQueries(queryClient);
+ },
+ ...props,
+ },
+ );
+}
+
+export function useSaleEstimateDefaultOptions(estimateId, props) {
+ return useRequestQuery(
+ [t.SALE_ESTIMATE_MAIL_OPTIONS, estimateId],
+ {
+ method: 'get',
+ url: `sales/estimates/${estimateId}/mail`,
+ },
+ {
+ select: (res) => res.data.data,
+ ...props,
+ },
+ );
+}
diff --git a/packages/webapp/src/hooks/query/financialReports.tsx b/packages/webapp/src/hooks/query/financialReports.tsx
index e0919584d..e10951472 100644
--- a/packages/webapp/src/hooks/query/financialReports.tsx
+++ b/packages/webapp/src/hooks/query/financialReports.tsx
@@ -1,16 +1,12 @@
// @ts-nocheck
import { useRequestQuery } from '../useQueryRequest';
import {
- trialBalanceSheetReducer,
- generalLedgerTableRowsReducer,
- journalTableRowsReducer,
- ARAgingSummaryTableRowsMapper,
- APAgingSummaryTableRowsMapper,
inventoryValuationReducer,
purchasesByItemsReducer,
salesByItemsReducer,
} from '@/containers/FinancialStatements/reducers';
import t from './types';
+import { useDownloadFile } from '../useDownloadFile';
/**
* Retrieve balance sheet.
@@ -33,6 +29,34 @@ export function useBalanceSheet(query, props) {
);
}
+export const useBalanceSheetXlsxExport = (query, args) => {
+ return useDownloadFile({
+ url: '/financial_statements/balance_sheet',
+ config: {
+ headers: {
+ accept: 'application/xlsx',
+ },
+ params: query,
+ },
+ filename: 'balance_sheet.xlsx',
+ ...args,
+ });
+};
+
+export const useBalanceSheetCsvExport = (query, args) => {
+ return useDownloadFile({
+ url: '/financial_statements/balance_sheet',
+ config: {
+ headers: {
+ accept: 'application/csv',
+ },
+ params: query,
+ },
+ filename: 'balance_sheet.csv',
+ ...args,
+ });
+};
+
/**
* Retrieve trial balance sheet.
*/
@@ -43,22 +67,45 @@ export function useTrialBalanceSheet(query, props) {
method: 'get',
url: '/financial_statements/trial_balance_sheet',
params: query,
+ headers: {
+ Accept: 'application/json+table',
+ },
},
{
- select: (res) => ({
- tableRows: trialBalanceSheetReducer(res.data.data),
- ...res.data,
- }),
- defaultData: {
- tableRows: [],
- data: [],
- query: {},
- },
+ select: (res) => res.data,
...props,
},
);
}
+export const useTrialBalanceSheetXlsxExport = (query, args) => {
+ return useDownloadFile({
+ url: '/financial_statements/trial_balance_sheet',
+ config: {
+ headers: {
+ accept: 'application/xlsx',
+ },
+ params: query,
+ },
+ filename: 'trial_balance_sheet.xlsx',
+ ...args,
+ });
+};
+
+export const useTrialBalanceSheetCsvExport = (query, args) => {
+ return useDownloadFile({
+ url: '/financial_statements/trial_balance_sheet',
+ config: {
+ headers: {
+ accept: 'application/csv',
+ },
+ params: query,
+ },
+ filename: 'trial_balance_sheet.csv',
+ ...args,
+ });
+};
+
/**
* Retrieve profit/loss (P&L) sheet.
*/
@@ -80,6 +127,34 @@ export function useProfitLossSheet(query, props) {
);
}
+export const useProfitLossSheetXlsxExport = (query, args) => {
+ return useDownloadFile({
+ url: '/financial_statements/profit_loss_sheet',
+ config: {
+ headers: {
+ accept: 'application/xlsx',
+ },
+ params: query,
+ },
+ filename: 'profit_loss_sheet.xlsx',
+ ...args,
+ });
+};
+
+export const useProfitLossSheetCsvExport = (query, args) => {
+ return useDownloadFile({
+ url: '/financial_statements/profit_loss_sheet',
+ config: {
+ headers: {
+ accept: 'application/csv',
+ },
+ params: query,
+ },
+ filename: 'profit_loss_sheet.csv',
+ ...args,
+ });
+};
+
/**
* Retrieve general ledger (GL) sheet.
*/
@@ -90,21 +165,44 @@ export function useGeneralLedgerSheet(query, props) {
method: 'get',
url: '/financial_statements/general_ledger',
params: query,
+ headers: {
+ Accept: 'application/json+table',
+ },
},
{
- select: (res) => ({
- tableRows: generalLedgerTableRowsReducer(res.data.data),
- ...res.data,
- }),
- defaultData: {
- tableRows: [],
- data: {},
- query: {},
- },
+ select: (res) => res.data,
...props,
},
);
}
+export const useGeneralLedgerSheetXlsxExport = (query, args) => {
+return useDownloadFile({
+ url: '/financial_statements/general_ledger',
+ config: {
+ headers: {
+ accept: 'application/xlsx',
+ },
+ params: query,
+ },
+ filename: 'general_ledger.xlsx',
+ ...args,
+});
+};
+
+export const useGeneralLedgerSheetCsvExport = (query, args) => {
+return useDownloadFile({
+ url: '/financial_statements/general_ledger',
+ config: {
+ headers: {
+ accept: 'application/csv',
+ },
+ params: query,
+ },
+ filename: 'general_ledger.csv',
+ ...args,
+});
+};
+
/**
* Retrieve journal sheet.
@@ -112,22 +210,49 @@ export function useGeneralLedgerSheet(query, props) {
export function useJournalSheet(query, props) {
return useRequestQuery(
[t.FINANCIAL_REPORT, t.JOURNAL, query],
- { method: 'get', url: '/financial_statements/journal', params: query },
{
- select: (res) => ({
- tableRows: journalTableRowsReducer(res.data.data),
- ...res.data,
- }),
- defaultData: {
- data: {},
- tableRows: [],
- query: {},
+ method: 'get',
+ url: '/financial_statements/journal',
+ params: query,
+ headers: {
+ Accept: 'application/json+table',
},
+ },
+ {
+ select: (res) => res.data,
...props,
},
);
}
+export const useJournalSheetXlsxExport = (query, args) => {
+ return useDownloadFile({
+ url: '/financial_statements/journal',
+ config: {
+ headers: {
+ accept: 'application/xlsx',
+ },
+ params: query,
+ },
+ filename: 'journal.xlsx',
+ ...args,
+ });
+};
+
+export const useJournalSheetCsvExport = (query, args) => {
+ return useDownloadFile({
+ url: '/financial_statements/journal',
+ config: {
+ headers: {
+ accept: 'application/csv',
+ },
+ params: query,
+ },
+ filename: 'journal.csv',
+ ...args,
+ });
+};
+
/**
* Retrieve A/R aging summary report.
*/
@@ -149,6 +274,34 @@ export function useARAgingSummaryReport(query, props) {
);
}
+export const useARAgingSheetXlsxExport = (query, args) => {
+ return useDownloadFile({
+ url: '/financial_statements/receivable_aging_summary',
+ config: {
+ headers: {
+ accept: 'application/xlsx',
+ },
+ params: query,
+ },
+ filename: 'receivable_aging_summary.xlsx',
+ ...args,
+ });
+};
+
+export const useARAgingSheetCsvExport = (query, args) => {
+ return useDownloadFile({
+ url: '/financial_statements/receivable_aging_summary',
+ config: {
+ headers: {
+ accept: 'application/csv',
+ },
+ params: query,
+ },
+ filename: 'receivable_aging_summary.csv',
+ ...args,
+ });
+};
+
/**
* Retrieve A/P aging summary report.
*/
@@ -170,6 +323,34 @@ export function useAPAgingSummaryReport(query, props) {
);
}
+export const useAPAgingSheetXlsxExport = (query, args) => {
+ return useDownloadFile({
+ url: '/financial_statements/payable_aging_summary',
+ config: {
+ headers: {
+ accept: 'application/xlsx',
+ },
+ params: query,
+ },
+ filename: 'payable_aging_summary.xlsx',
+ ...args,
+ });
+};
+
+export const useAPAgingSheetCsvExport = (query, args) => {
+ return useDownloadFile({
+ url: '/financial_statements/payable_aging_summary',
+ config: {
+ headers: {
+ accept: 'application/csv',
+ },
+ params: query,
+ },
+ filename: 'payable_aging_summary.csv',
+ ...args,
+ });
+};
+
/**
* Retrieve inventory valuation.
*/
@@ -275,6 +456,34 @@ export function useCustomerBalanceSummaryReport(query, props) {
);
}
+export const useCustomerBalanceSummaryXlsxExport = (query, args) => {
+ return useDownloadFile({
+ url: '/financial_statements/customer-balance-summary',
+ config: {
+ headers: {
+ accept: 'application/xlsx',
+ },
+ params: query,
+ },
+ filename: 'customer_balance_summary.xlsx',
+ ...args,
+ });
+};
+
+export const useCustomerBalanceSummaryCsvExport = (query, args) => {
+ return useDownloadFile({
+ url: '/financial_statements/customer-balance-summary',
+ config: {
+ headers: {
+ accept: 'application/csv',
+ },
+ params: query,
+ },
+ filename: 'customer_balance_summary.csv',
+ ...args,
+ });
+};
+
/**
* Retrieve vendors balance summary report.
*/
@@ -304,6 +513,36 @@ export function useVendorsBalanceSummaryReport(query, props) {
);
}
+export const useVendorBalanceSummaryXlsxExport = (args) => {
+ const url = '/financial_statements/vendor-balance-summary';
+ const config = {
+ headers: {
+ accept: 'application/xlsx',
+ },
+ };
+ const filename = 'vendor_balance_summary.xlsx';
+
+ return useDownloadFile({
+ url,
+ config,
+ filename,
+ ...args,
+ });
+};
+
+export const useVendorBalanceSummaryCsvExport = (args) => {
+ return useDownloadFile({
+ url: '/financial_statements/vendor-balance-summary',
+ config: {
+ headers: {
+ accept: 'application/csv',
+ },
+ },
+ filename: 'vendor_balance_summary.csv',
+ ...args,
+ });
+};
+
/**
* Retrieve customers transactions report.
*/
@@ -332,6 +571,38 @@ export function useCustomersTransactionsReport(query, props) {
);
}
+export const useCustomersTransactionsXlsxExport = (query, args) => {
+ const url = '/financial_statements/transactions-by-customers';
+ const config = {
+ headers: {
+ accept: 'application/xlsx',
+ },
+ params: query,
+ };
+ const filename = 'customers_transactions.xlsx';
+
+ return useDownloadFile({
+ url,
+ config,
+ filename,
+ ...args,
+ });
+};
+
+export const useCustomersTransactionsCsvExport = (query, args) => {
+ return useDownloadFile({
+ url: '/financial_statements/transactions-by-customers',
+ config: {
+ headers: {
+ accept: 'application/csv',
+ },
+ params: query,
+ },
+ filename: 'customers_transactions.csv',
+ ...args,
+ });
+};
+
/**
* Retrieve vendors transactions report.
*/
@@ -349,7 +620,7 @@ export function useVendorsTransactionsReport(query, props) {
{
select: (res) => ({
data: res.data.table,
- tableRows: res.data.table.data,
+ tableRows: res.data.table.rows,
}),
defaultData: {
tableRows: [],
@@ -360,6 +631,38 @@ export function useVendorsTransactionsReport(query, props) {
);
}
+export const useVendorsTransactionsXlsxExport = (query, args) => {
+ const url = '/financial_statements/transactions-by-vendors';
+ const config = {
+ headers: {
+ accept: 'application/xlsx',
+ },
+ params: query,
+ };
+ const filename = 'transactions_by_vendor.xlsx';
+
+ return useDownloadFile({
+ url,
+ config,
+ filename,
+ ...args,
+ });
+};
+
+export const useVendorsTransactionsCsvExport = (query, args) => {
+ return useDownloadFile({
+ url: '/financial_statements/transactions-by-vendors',
+ config: {
+ headers: {
+ accept: 'application/csv',
+ },
+ params: query,
+ },
+ filename: 'transactions_by_vendor.csv',
+ ...args,
+ });
+};
+
/**
* Retrieve cash flow statement report.
*/
@@ -379,7 +682,7 @@ export function useCashFlowStatementReport(query, props) {
columns: res.data.table.columns,
query: res.data.query,
meta: res.data.meta,
- tableRows: res.data.table.data,
+ tableRows: res.data.table.rows,
}),
defaultData: {
tableRows: [],
@@ -392,6 +695,42 @@ export function useCashFlowStatementReport(query, props) {
);
}
+export const useCashFlowStatementXlsxExport = (query, args) => {
+ const url = '/financial_statements/cash-flow';
+ const config = {
+ headers: {
+ accept: 'application/xlsx',
+ },
+ params: query,
+ };
+ const filename = 'cashflow_statement.xlsx';
+
+ return useDownloadFile({
+ url,
+ config,
+ filename,
+ ...args,
+ });
+};
+
+export const useCashFlowStatementCsvExport = (query, args) => {
+ const url = '/financial_statements/cash-flow';
+ const config = {
+ headers: {
+ accept: 'application/csv',
+ },
+ params: query,
+ };
+ const filename = 'cashflow_statement.csv';
+
+ return useDownloadFile({
+ url,
+ config,
+ filename,
+ ...args,
+ });
+};
+
/**
* Retrieve inventory item detail report.
*/
@@ -411,7 +750,7 @@ export function useInventoryItemDetailsReport(query, props) {
columns: res.data.table.columns,
query: res.data.query,
meta: res.data.meta,
- tableRows: res.data.table.data,
+ tableRows: res.data.table.rows,
}),
defaultData: {
tableRows: [],
@@ -424,6 +763,34 @@ export function useInventoryItemDetailsReport(query, props) {
);
}
+export const useInventoryItemDetailsXlsxExport = (query, args) => {
+ return useDownloadFile({
+ url: '/financial_statements/inventory-item-details',
+ config: {
+ headers: {
+ accept: 'application/xlsx',
+ },
+ params: query,
+ },
+ filename: 'inventory_item_details.xlsx',
+ ...args,
+ });
+};
+
+export const useInventoryItemDetailsCsvExport = (query, args) => {
+ return useDownloadFile({
+ url: '/financial_statements/inventory-item-details',
+ config: {
+ headers: {
+ accept: 'application/csv',
+ },
+ params: query,
+ },
+ filename: 'inventory_item_details.csv',
+ ...args,
+ });
+};
+
/**
* Retrieve transactions by reference report.
*/
@@ -465,3 +832,31 @@ export function useSalesTaxLiabilitySummary(query, props) {
},
);
}
+
+export const useSalesTaxLiabilitySummaryXlsxExport = (query, args) => {
+ return useDownloadFile({
+ url: '/financial_statements/sales-tax-liability-summary',
+ config: {
+ headers: {
+ accept: 'application/xlsx',
+ },
+ params: query,
+ },
+ filename: 'sales_tax_liability_summary.xlsx',
+ ...args,
+ });
+};
+
+export const useSalesTaxLiabilitySummaryCsvExport = (query, args) => {
+ return useDownloadFile({
+ url: '/financial_statements/sales-tax-liability-summary',
+ config: {
+ headers: {
+ accept: 'application/csv',
+ },
+ params: query,
+ },
+ filename: 'sales_tax_liability_summary.csv',
+ ...args,
+ });
+};
diff --git a/packages/webapp/src/hooks/query/invoices.tsx b/packages/webapp/src/hooks/query/invoices.tsx
index 13009042c..2adbf87e0 100644
--- a/packages/webapp/src/hooks/query/invoices.tsx
+++ b/packages/webapp/src/hooks/query/invoices.tsx
@@ -306,3 +306,34 @@ export function useInvoicePaymentTransactions(invoiceId, props) {
},
);
}
+
+export function useSendSaleInvoiceMail(props) {
+ const queryClient = useQueryClient();
+ const apiRequest = useApiRequest();
+
+ return useMutation(
+ ([id, values]) => apiRequest.post(`sales/invoices/${id}/mail`, values),
+ {
+ onSuccess: (res, [id, values]) => {
+ // Common invalidate queries.
+ commonInvalidateQueries(queryClient);
+ },
+ ...props,
+ },
+ );
+}
+
+export function useSaleInvoiceDefaultOptions(invoiceId, props) {
+ return useRequestQuery(
+ [t.SALE_INVOICE_DEFAULT_OPTIONS, invoiceId],
+ {
+ method: 'get',
+ url: `sales/invoices/${invoiceId}/mail`,
+ },
+ {
+ select: (res) => res.data.data,
+ ...props,
+ },
+ );
+}
+
diff --git a/packages/webapp/src/hooks/query/paymentReceives.tsx b/packages/webapp/src/hooks/query/paymentReceives.tsx
index 49d53ad67..376993e19 100644
--- a/packages/webapp/src/hooks/query/paymentReceives.tsx
+++ b/packages/webapp/src/hooks/query/paymentReceives.tsx
@@ -234,3 +234,34 @@ export function usePaymentReceiveSMSDetail(
export function usePdfPaymentReceive(paymentReceiveId) {
return useRequestPdf(`sales/payment_receives/${paymentReceiveId}`);
}
+
+export function useSendPaymentReceiveMail(props) {
+ const queryClient = useQueryClient();
+ const apiRequest = useApiRequest();
+
+ return useMutation(
+ ([id, values]) =>
+ apiRequest.post(`sales/payment_receives/${id}/mail`, values),
+ {
+ onSuccess: (res, [id, values]) => {
+ // Common invalidate queries.
+ commonInvalidateQueries(queryClient);
+ },
+ ...props,
+ },
+ );
+}
+
+export function usePaymentReceiveDefaultOptions(paymentReceiveId, props) {
+ return useRequestQuery(
+ [t.PAYMENT_RECEIVE_MAIL_OPTIONS, paymentReceiveId],
+ {
+ method: 'get',
+ url: `sales/payment_receives/${paymentReceiveId}/mail`,
+ },
+ {
+ select: (res) => res.data.data,
+ ...props,
+ },
+ );
+}
diff --git a/packages/webapp/src/hooks/query/receipts.tsx b/packages/webapp/src/hooks/query/receipts.tsx
index 907cfc8af..7a6ae2ce9 100644
--- a/packages/webapp/src/hooks/query/receipts.tsx
+++ b/packages/webapp/src/hooks/query/receipts.tsx
@@ -207,3 +207,36 @@ export function useReceiptSMSDetail(receiptId, props, requestProps) {
},
);
}
+
+/**
+ *
+ */
+export function useSendSaleReceiptMail(props) {
+ const queryClient = useQueryClient();
+ const apiRequest = useApiRequest();
+
+ return useMutation(
+ ([id, values]) => apiRequest.post(`sales/receipts/${id}/mail`, values),
+ {
+ onSuccess: () => {
+ // Invalidate queries.
+ commonInvalidateQueries(queryClient);
+ },
+ ...props,
+ },
+ );
+}
+
+export function useSaleReceiptDefaultOptions(invoiceId, props) {
+ return useRequestQuery(
+ [t.SALE_RECEIPT_MAIL_OPTIONS, invoiceId],
+ {
+ method: 'get',
+ url: `sales/receipts/${invoiceId}/mail`,
+ },
+ {
+ select: (res) => res.data.data,
+ ...props,
+ },
+ );
+}
diff --git a/packages/webapp/src/hooks/query/types.tsx b/packages/webapp/src/hooks/query/types.tsx
index fbce84ae3..9d3446c77 100644
--- a/packages/webapp/src/hooks/query/types.tsx
+++ b/packages/webapp/src/hooks/query/types.tsx
@@ -69,6 +69,7 @@ const SALE_ESTIMATES = {
SALE_ESTIMATE: 'SALE_ESTIMATE',
SALE_ESTIMATE_SMS_DETAIL: 'SALE_ESTIMATE_SMS_DETAIL',
NOTIFY_SALE_ESTIMATE_BY_SMS: 'NOTIFY_SALE_ESTIMATE_BY_SMS',
+ SALE_ESTIMATE_MAIL_OPTIONS: 'SALE_ESTIMATE_MAIL_OPTIONS',
};
const SALE_RECEIPTS = {
@@ -76,6 +77,7 @@ const SALE_RECEIPTS = {
SALE_RECEIPT: 'SALE_RECEIPT',
SALE_RECEIPT_SMS_DETAIL: 'SALE_RECEIPT_SMS_DETAIL',
NOTIFY_SALE_RECEIPT_BY_SMS: 'NOTIFY_SALE_RECEIPT_BY_SMS',
+ SALE_RECEIPT_MAIL_OPTIONS: 'SALE_RECEIPT_MAIL_OPTIONS'
};
const INVENTORY_ADJUSTMENTS = {
@@ -101,6 +103,7 @@ const PAYMENT_RECEIVES = {
PAYMENT_RECEIVE_EDIT_PAGE: 'PAYMENT_RECEIVE_EDIT_PAGE',
PAYMENT_RECEIVE_SMS_DETAIL: 'PAYMENT_RECEIVE_SMS_DETAIL',
NOTIFY_PAYMENT_RECEIVE_BY_SMS: 'NOTIFY_PAYMENT_RECEIVE_BY_SMS',
+ PAYMENT_RECEIVE_MAIL_OPTIONS: 'PAYMENT_RECEIVE_MAIL_OPTIONS',
};
const SALE_INVOICES = {
@@ -112,6 +115,7 @@ const SALE_INVOICES = {
BAD_DEBT: 'BAD_DEBT',
CANCEL_BAD_DEBT: 'CANCEL_BAD_DEBT',
SALE_INVOICE_PAYMENT_TRANSACTIONS: 'SALE_INVOICE_PAYMENT_TRANSACTIONS',
+ SALE_INVOICE_DEFAULT_OPTIONS: 'SALE_INVOICE_DEFAULT_OPTIONS'
};
const USERS = {
diff --git a/packages/webapp/src/hooks/useDownloadFile.ts b/packages/webapp/src/hooks/useDownloadFile.ts
new file mode 100644
index 000000000..3237f2a79
--- /dev/null
+++ b/packages/webapp/src/hooks/useDownloadFile.ts
@@ -0,0 +1,72 @@
+// @ts-nocheck
+import axios, { AxiosError, AxiosRequestConfig } from 'axios';
+import { useState } from 'react';
+import { useMutation } from 'react-query';
+import useApiRequest from './useRequest';
+
+interface IArgs {
+ url: string;
+ filename: string;
+ mime?: string;
+ config?: AxiosRequestConfig;
+ onDownloadProgress?: (progress: number) => void;
+}
+
+export const useDownloadFile = (args: IArgs) => {
+ const apiRequest = useApiRequest();
+
+ const mutation = useMutation(() =>
+ apiRequest
+ .get(args.url, {
+ responseType: 'blob',
+ onDownloadProgress: (ev) => {
+ args.onDownloadProgress &&
+ args.onDownloadProgress(Math.round((ev.loaded * 100) / ev.total));
+ },
+ ...args.config,
+ })
+ .then((res) => {
+ downloadFile(res.data, args.filename, args.mime);
+ return res;
+ }),
+ );
+ return { ...mutation };
+};
+
+export function downloadFile(data, filename, mime, bom) {
+ var blobData = typeof bom !== 'undefined' ? [bom, data] : [data];
+ var blob = new Blob(blobData, { type: mime || 'application/octet-stream' });
+ if (typeof window.navigator.msSaveBlob !== 'undefined') {
+ // IE workaround for "HTML7007: One or more blob URLs were
+ // revoked by closing the blob for which they were created.
+ // These URLs will no longer resolve as the data backing
+ // the URL has been freed."
+ window.navigator.msSaveBlob(blob, filename);
+ } else {
+ var blobURL =
+ window.URL && window.URL.createObjectURL
+ ? window.URL.createObjectURL(blob)
+ : window.webkitURL.createObjectURL(blob);
+ var tempLink = document.createElement('a');
+ tempLink.style.display = 'none';
+ tempLink.href = blobURL;
+ tempLink.setAttribute('download', filename);
+
+ // Safari thinks _blank anchor are pop ups. We only want to set _blank
+ // target if the browser does not support the HTML5 download attribute.
+ // This allows you to download files in desktop safari if pop up blocking
+ // is enabled.
+ if (typeof tempLink.download === 'undefined') {
+ tempLink.setAttribute('target', '_blank');
+ }
+
+ document.body.appendChild(tempLink);
+ tempLink.click();
+
+ // Fixes "webkit blob resource error 1"
+ setTimeout(function () {
+ document.body.removeChild(tempLink);
+ window.URL.revokeObjectURL(blobURL);
+ }, 200);
+ }
+}
diff --git a/packages/webapp/src/hooks/useRequest.tsx b/packages/webapp/src/hooks/useRequest.tsx
index 12635ad0a..3ce81ae3c 100644
--- a/packages/webapp/src/hooks/useRequest.tsx
+++ b/packages/webapp/src/hooks/useRequest.tsx
@@ -30,13 +30,13 @@ export default function useApiRequest() {
const locale = currentLocale;
if (token) {
- request.headers.common['X-Access-Token'] = token;
+ request.headers['X-Access-Token'] = token;
}
if (organizationId) {
- request.headers.common['organization-id'] = organizationId;
+ request.headers['organization-id'] = organizationId;
}
if (locale) {
- request.headers.common['Accept-Language'] = locale;
+ request.headers['Accept-Language'] = locale;
}
return request;
},
diff --git a/packages/webapp/src/lang/ar/index.json b/packages/webapp/src/lang/ar/index.json
index b2325c53f..976b049d6 100644
--- a/packages/webapp/src/lang/ar/index.json
+++ b/packages/webapp/src/lang/ar/index.json
@@ -407,7 +407,6 @@
"display_name": "اسم العرض",
"the_customer_has_been_created_successfully": "تم إنشاء زبون جديد بنجاح.",
"select_contact": "حدد جهة اتصال",
- "contact": "جهة اتصال",
"contacts": "جهات الاتصال",
"close_sidebar": "إغلاق الشريط الجانبي.",
"open_sidebar": "فتح الشريط الجانبي.",
@@ -804,7 +803,6 @@
"all_customers": "كل الزبائن",
"all_vendors": "كل الموردين",
"selected_customers": "{عدد} العملاء المحددين",
- "transaction_number": " العملية",
"running_balance": "الرصيد التحليلي",
"view_all": "مشاهدة الكل",
"payment_via_voucher": "الدفع عن طريق القسيمة",
@@ -871,7 +869,6 @@
"inventory_valuation": "تقييم المخزون",
"payable_accounts_should_assign_with_vendors": "يجب تعيين حسابات الدفع مع البائعين.",
"account_paper": "ورقة الحساب",
- "transaction_date": "تاريخ العملة",
"account_normal": "طبيعة الحساب",
"published_at": "نشرت في",
"customers_balance_summary": "ملخص رصيد الزبائن",
@@ -922,7 +919,6 @@
"drag_drop_files_here_or_click_here": "قم بسحب/إسقاط الملفات هنا أو انقر هنا.",
"enter_an_item": "أدخل منتج ...",
"due_amount": "القيمة المستحقة",
- "invoice_details": "تفاصيل الفاتورة",
"setting_your_auto_generated_estimate_number": "عيين رقم العرض الذي تم إنشاؤه تلقائيًا",
"setting_your_auto_generated_journal_number": "عيين رقم قيد اليدوي الذي تم إنشاؤه تلقائيًا",
"setting_your_auto_generated_invoice_number": "عيين رقم الفاتورة الذي تم إنشاؤه تلقائيًا",
@@ -934,7 +930,6 @@
"receive_full_amount": "استلام المبلغ كاملاً",
"manage_the_organization_s_services_and_products": "إدارة الخدمات والمنتجات للمنشأة.",
"here_a_list_of_your_organization_products_and_services": "هنا قائمة بمنتجات وخدمات عملك ، لاستخدامها عند إنشاء فواتير أو فواتير لموردين أو البائعين.",
- "receipt_details": "تفاصيل الإيصال",
"bill_details": "تفاصيل الفاتورة",
"new_bill_payment": "سند مورد جديد",
"new_sale_invoice": "فاتورة بيع جديدة",
@@ -1148,7 +1143,6 @@
"conditions_and_terms": "Conditions and terms",
"allocate_landed_coast": "تحميل تكلفة اضافية",
"transaction_date": "تاريخ المعاملة",
- "transaction_type": "نوع المعاملة",
"transaction_id": "رقم المعاملة",
"transaction_number": "رقم المعاملة",
"transaction_line": "سطر المعاملة",
@@ -1177,7 +1171,6 @@
"contact": "جهة الاتصال",
"invoice_details": "تفاصيل الفاتورة",
"receipt_details": "تفاصيل الإيصال",
- "payment_receive_details": "تفاصيل سند الزبون",
"payment_made_details": "تفاصيل سند المورد",
"New item category": "اضافة تصنيف صنف جديد",
"New service": "اضافة خدمة جديدة",
diff --git a/packages/webapp/src/lang/en/index.json b/packages/webapp/src/lang/en/index.json
index 1b2e25f1f..5522f57d6 100644
--- a/packages/webapp/src/lang/en/index.json
+++ b/packages/webapp/src/lang/en/index.json
@@ -37,6 +37,7 @@
"success": "Success",
"register_a_new_organization": "Register a New Organization.",
"organization_name": "Organization Name",
+ "organization_tax_number": "Organization Tax Number",
"email": "Email",
"email_address": "Email Address",
"register": "Register",
@@ -339,6 +340,7 @@
"item_type_": "Item type",
"item_name_": "Item name",
"organization_industry_": "Organization industry",
+ "organization_tax_number_": "Organization tax number",
"base_currency_": "Base currency",
"date_format_": "Date format",
"category_name_": "Category name",
@@ -406,7 +408,6 @@
"display_name": "Display Name",
"the_customer_has_been_created_successfully": "The customer has been created successfully.",
"select_contact": "Select contact",
- "contact": "Contact",
"contacts": "Contacts",
"close_sidebar": "Close sidebar.",
"open_sidebar": "Open sidebar.",
@@ -794,7 +795,6 @@
"all_customers": "All Customers",
"all_vendors": "All Vendors",
"selected_customers": "{count} Selected Customers",
- "transaction_number": "Transaction #",
"running_balance": "Running balance",
"view_all": "View all",
"payment_via_voucher": "Payment via voucher",
@@ -865,8 +865,6 @@
"inventory_valuation": "Inventory valuation",
"payable_accounts_should_assign_with_vendors": "Payable accounts should assign with vendors.",
"account_paper": "Account Paper",
- "transaction_date": "Transaction date",
- "transaction_type": "Transaction type",
"account_normal": "Account normal",
"published_at": "Published at",
"customers_balance_summary": "Customers Balance Summary",
@@ -1128,7 +1126,6 @@
"transaction_date": "Transaction date",
"transaction_type": "Transaction type",
"transaction_id": "Transaction #",
- "transaction_number": "Transaction number",
"transaction_line": "Transaction line",
"allocation_method": "Allocation method",
"other_income_account": "Other income account",
@@ -1155,9 +1152,6 @@
"journal_entries": "Journal Entries",
"contact": "Contact",
"invoice_details": "Invoice details",
- "receipt_details": "Receipt details",
- "payment_receive_details": "Payment receive details",
- "payment_made_details": "Payment made details",
"New item category": "New item category",
"New service": "New service",
"New inventory item": "New inventory item",
@@ -1804,6 +1798,7 @@
"balance_sheet.total_change": "Total Change",
"balance_sheet.change": "% Change",
"balance_sheet.previous_period": "Previous Period (PP)",
+ "balance_sheet.net_income": "Net Income",
"profit_loss_sheet.comparisons": "Comparisons",
"profit_loss_sheet.dimensions": "Dimensions",
"profit_loss_sheet.previous_year": "Previous Year",
@@ -2295,5 +2290,27 @@
"sidebar.new_project": "New Project",
"sidebar.new_time_entry": "New Time Entry",
"sidebar.project_profitability_summary": "Project Profitability Summary",
- "global_error.too_many_requests": "Too many requests"
-}
+ "global_error.too_many_requests": "Too many requests",
+
+ "pref.invoices.termsConditions.field": "Terms & Conditions",
+ "pref.invoices.customerNotes.field": "Customer Notes",
+
+ "pref.creditNotes.termsConditions.field": "Terms & Conditions",
+ "pref.creditNotes.customerNotes.field": "Customer Notes",
+
+ "pref.estimates.termsConditions.field": "Terms & Conditions",
+ "pref.estimates.customerNotes.field": "Customer Notes",
+
+ "pref.receipts.termsConditions.field": "Terms & Conditions",
+ "pref.receipts.receiptMessage.field": "Receipt Message",
+
+ "preferences.invoices": "Invoices",
+ "preferences.estimates": "Estimates",
+ "preferences.creditNotes": "Credit Notes",
+ "preferences.receipts": "Receipts",
+
+ "preferences.estimates.success_message": "The preferences have been saved successfully.",
+ "preferences.credit_notes.success_message": "The preferences have been saved successfully.",
+ "preferences.receipts.success_message": "The preferences have been saved successfully.",
+ "preferences.invoices.success_message": "The preferences have been saved successfully."
+}
\ No newline at end of file
diff --git a/packages/webapp/src/routes/preferences.tsx b/packages/webapp/src/routes/preferences.tsx
index 775efcf82..8031230ed 100644
--- a/packages/webapp/src/routes/preferences.tsx
+++ b/packages/webapp/src/routes/preferences.tsx
@@ -9,6 +9,10 @@ import SMSIntegration from '../containers/Preferences/SMSIntegration';
import DefaultRoute from '../containers/Preferences/DefaultRoute';
import Warehouses from '../containers/Preferences/Warehouses';
import Branches from '../containers/Preferences/Branches';
+import Invoices from '../containers/Preferences/Invoices/PreferencesInvoices';
+import { PreferencesCreditNotes } from '../containers/Preferences/CreditNotes/PreferencesCreditNotes';
+import { PreferencesEstimates } from '@/containers/Preferences/Estimates/PreferencesEstimates';
+import{ PreferencesReceipts } from '@/containers/Preferences/Receipts/PreferencesReceipts'
const BASE_URL = '/preferences';
@@ -23,6 +27,26 @@ export default [
component: Users,
exact: true,
},
+ {
+ path: `${BASE_URL}/invoices`,
+ component: Invoices,
+ exact: true,
+ },
+ {
+ path: `${BASE_URL}/credit-notes`,
+ component: PreferencesCreditNotes,
+ exact: true,
+ },
+ {
+ path: `${BASE_URL}/estimates`,
+ component: PreferencesEstimates,
+ exact: true,
+ },
+ {
+ path: `${BASE_URL}/receipts`,
+ component: PreferencesReceipts,
+ exact: true,
+ },
{
path: `${BASE_URL}/roles`,
component: Roles,
diff --git a/packages/webapp/src/static/json/icons.tsx b/packages/webapp/src/static/json/icons.tsx
index b13e9ffa5..e60213bb8 100644
--- a/packages/webapp/src/static/json/icons.tsx
+++ b/packages/webapp/src/static/json/icons.tsx
@@ -561,8 +561,14 @@ export default {
},
'content-copy': {
path: [
- 'M15 0H5c-.55 0-1 .45-1 1v2h2V2h8v7h-1v2h2c.55 0 1-.45 1-1V1c0-.55-.45-1-1-1zm-4 4H1c-.55 0-1 .45-1 1v10c0 .55.45 1 1 1h10c.55 0 1-.45 1-1V5c0-.55-.45-1-1-1zm-1 10H2V6h8v8z'
+ 'M15 0H5c-.55 0-1 .45-1 1v2h2V2h8v7h-1v2h2c.55 0 1-.45 1-1V1c0-.55-.45-1-1-1zm-4 4H1c-.55 0-1 .45-1 1v10c0 .55.45 1 1 1h10c.55 0 1-.45 1-1V5c0-.55-.45-1-1-1zm-1 10H2V6h8v8z',
],
- viewBox: '0 0 16 16'
- }
+ viewBox: '0 0 16 16',
+ },
+ envelope: {
+ path: [
+ 'M0 4.01v11.91l6.27-6.27L0 4.01zm18.91-1.03H1.09L10 10.97l8.91-7.99zm-5.18 6.66L20 15.92V4.01l-6.27 5.63zm-3.23 2.9c-.13.12-.31.19-.5.19s-.37-.07-.5-.19l-2.11-1.89-6.33 6.33h17.88l-6.33-6.33-2.11 1.89z',
+ ],
+ viewBox: '0 0 20 20',
+ },
};
diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml
index fb23e7f02..a3cdf6aa5 100644
--- a/pnpm-lock.yaml
+++ b/pnpm-lock.yaml
@@ -66,8 +66,8 @@ importers:
specifier: ^3.2.0
version: 3.2.4
axios:
- specifier: ^0.20.0
- version: 0.20.0
+ specifier: ^1.6.0
+ version: 1.6.0
babel-loader:
specifier: ^9.1.2
version: 9.1.2(@babel/core@7.20.12)(webpack@5.76.0)
@@ -102,7 +102,7 @@ importers:
specifier: ^2.0.0
version: 2.0.0
deepdash:
- specifier: ^5.3.7
+ specifier: ^5.3.9
version: 5.3.9
dotenv:
specifier: ^8.1.0
@@ -140,6 +140,9 @@ importers:
express-validator:
specifier: ^6.12.2
version: 6.14.3
+ form-data:
+ specifier: ^4.0.0
+ version: 4.0.0
gulp:
specifier: ^4.0.2
version: 4.0.2
@@ -257,6 +260,12 @@ importers:
rtl-detect:
specifier: ^1.0.4
version: 1.0.4
+ source-map-loader:
+ specifier: ^4.0.1
+ version: 4.0.1(webpack@5.76.0)
+ tmp-promise:
+ specifier: ^3.0.3
+ version: 3.0.3
ts-transformer-keys:
specifier: ^0.4.2
version: 0.4.4(typescript@3.9.10)
@@ -272,6 +281,9 @@ importers:
winston:
specifier: ^3.2.1
version: 3.8.2
+ xlsx:
+ specifier: ^0.18.5
+ version: 0.18.5
devDependencies:
'@types/lodash':
specifier: ^4.14.158
@@ -459,6 +471,27 @@ importers:
'@testing-library/user-event':
specifier: ^7.2.1
version: 7.2.1(@testing-library/dom@8.20.0)
+ '@tiptap/core':
+ specifier: 2.1.13
+ version: 2.1.13(@tiptap/pm@2.1.13)
+ '@tiptap/extension-color':
+ specifier: latest
+ version: 2.1.13(@tiptap/core@2.1.13)(@tiptap/extension-text-style@2.1.13)
+ '@tiptap/extension-list-item':
+ specifier: 2.1.13
+ version: 2.1.13(@tiptap/core@2.1.13)
+ '@tiptap/extension-text-style':
+ specifier: 2.1.13
+ version: 2.1.13(@tiptap/core@2.1.13)
+ '@tiptap/pm':
+ specifier: 2.1.13
+ version: 2.1.13
+ '@tiptap/react':
+ specifier: 2.1.13
+ version: 2.1.13(@tiptap/core@2.1.13)(@tiptap/pm@2.1.13)(react-dom@18.2.0)(react@18.2.0)
+ '@tiptap/starter-kit':
+ specifier: 2.1.13
+ version: 2.1.13(@tiptap/pm@2.1.13)
'@types/jest':
specifier: ^26.0.15
version: 26.0.24
@@ -511,8 +544,8 @@ importers:
specifier: ^0.4.1
version: 0.4.1
axios:
- specifier: ^0.21.2
- version: 0.21.4
+ specifier: ^1.6.0
+ version: 1.6.0
basscss:
specifier: ^8.0.2
version: 8.1.0
@@ -5678,6 +5711,34 @@ packages:
reselect: 4.1.7
dev: false
+ /@remirror/core-constants@2.0.2:
+ resolution: {integrity: sha512-dyHY+sMF0ihPus3O27ODd4+agdHMEmuRdyiZJ2CCWjPV5UFmn17ZbElvk6WOGVE4rdCJKZQCrPV2BcikOMLUGQ==}
+ dev: false
+
+ /@remirror/core-helpers@3.0.0:
+ resolution: {integrity: sha512-tusEgQJIqg4qKj6HSBUFcyRnWnziw3neh4T9wOmsPGHFC3w9kl5KSrDb9UAgE8uX6y32FnS7vJ955mWOl3n50A==}
+ dependencies:
+ '@remirror/core-constants': 2.0.2
+ '@remirror/types': 1.0.1
+ '@types/object.omit': 3.0.3
+ '@types/object.pick': 1.3.4
+ '@types/throttle-debounce': 2.1.0
+ case-anything: 2.1.13
+ dash-get: 1.0.2
+ deepmerge: 4.3.1
+ fast-deep-equal: 3.1.3
+ make-error: 1.3.6
+ object.omit: 3.0.0
+ object.pick: 1.3.0
+ throttle-debounce: 3.0.1
+ dev: false
+
+ /@remirror/types@1.0.1:
+ resolution: {integrity: sha512-VlZQxwGnt1jtQ18D6JqdIF+uFZo525WEqrfp9BOc3COPpK4+AWCgdnAWL+ho6imWcoINlGjR/+3b6y5C1vBVEA==}
+ dependencies:
+ type-fest: 2.19.0
+ dev: false
+
/@rollup/plugin-babel@5.3.1(@babel/core@7.20.12)(rollup@2.79.1):
resolution: {integrity: sha512-WFfdLWU/xVWKeRQnKmIAQULUI7Il0gZnBIH/ZFO069wYIfPu+8zrfp/KMW0atmELoRDq8FbiP3VCss9MhCut7Q==}
engines: {node: '>= 10.0.0'}
@@ -5956,6 +6017,273 @@ packages:
'@testing-library/dom': 8.20.0
dev: false
+ /@tiptap/core@2.1.13(@tiptap/pm@2.1.13):
+ resolution: {integrity: sha512-cMC8bgTN63dj1Mv82iDeeLl6sa9kY0Pug8LSalxVEptRmyFVsVxGgu2/6Y3T+9aCYScxfS06EkA8SdzFMAwYTQ==}
+ peerDependencies:
+ '@tiptap/pm': ^2.0.0
+ dependencies:
+ '@tiptap/pm': 2.1.13
+ dev: false
+
+ /@tiptap/extension-blockquote@2.1.13(@tiptap/core@2.1.13):
+ resolution: {integrity: sha512-oe6wSQACmODugoP9XH3Ouffjy4BsOBWfTC+dETHNCG6ZED6ShHN3CB9Vr7EwwRgmm2WLaKAjMO1sVumwH+Z1rg==}
+ peerDependencies:
+ '@tiptap/core': ^2.0.0
+ dependencies:
+ '@tiptap/core': 2.1.13(@tiptap/pm@2.1.13)
+ dev: false
+
+ /@tiptap/extension-bold@2.1.13(@tiptap/core@2.1.13):
+ resolution: {integrity: sha512-6cHsQTh/rUiG4jkbJer3vk7g60I5tBwEBSGpdxmEHh83RsvevD8+n92PjA24hYYte5RNlATB011E1wu8PVhSvw==}
+ peerDependencies:
+ '@tiptap/core': ^2.0.0
+ dependencies:
+ '@tiptap/core': 2.1.13(@tiptap/pm@2.1.13)
+ dev: false
+
+ /@tiptap/extension-bubble-menu@2.1.13(@tiptap/core@2.1.13)(@tiptap/pm@2.1.13):
+ resolution: {integrity: sha512-Hm7e1GX3AI6lfaUmr6WqsS9MMyXIzCkhh+VQi6K8jj4Q4s8kY4KPoAyD/c3v9pZ/dieUtm2TfqrOCkbHzsJQBg==}
+ peerDependencies:
+ '@tiptap/core': ^2.0.0
+ '@tiptap/pm': ^2.0.0
+ dependencies:
+ '@tiptap/core': 2.1.13(@tiptap/pm@2.1.13)
+ '@tiptap/pm': 2.1.13
+ tippy.js: 6.3.7
+ dev: false
+
+ /@tiptap/extension-bullet-list@2.1.13(@tiptap/core@2.1.13):
+ resolution: {integrity: sha512-NkWlQ5bLPUlcROj6G/d4oqAxMf3j3wfndGOPp0z8OoXJtVbVoXl/aMSlLbVgE6n8r6CS8MYxKhXNxrb7Ll2foA==}
+ peerDependencies:
+ '@tiptap/core': ^2.0.0
+ dependencies:
+ '@tiptap/core': 2.1.13(@tiptap/pm@2.1.13)
+ dev: false
+
+ /@tiptap/extension-code-block@2.1.13(@tiptap/core@2.1.13)(@tiptap/pm@2.1.13):
+ resolution: {integrity: sha512-E3tweNExPOV+t1ODKX0MDVsS0aeHGWc1ECt+uyp6XwzsN0bdF2A5+pttQqM7sTcMnQkVACGFbn9wDeLRRcfyQg==}
+ peerDependencies:
+ '@tiptap/core': ^2.0.0
+ '@tiptap/pm': ^2.0.0
+ dependencies:
+ '@tiptap/core': 2.1.13(@tiptap/pm@2.1.13)
+ '@tiptap/pm': 2.1.13
+ dev: false
+
+ /@tiptap/extension-code@2.1.13(@tiptap/core@2.1.13):
+ resolution: {integrity: sha512-f5fLYlSgliVVa44vd7lQGvo49+peC+Z2H0Fn84TKNCH7tkNZzouoJsHYn0/enLaQ9Sq+24YPfqulfiwlxyiT8w==}
+ peerDependencies:
+ '@tiptap/core': ^2.0.0
+ dependencies:
+ '@tiptap/core': 2.1.13(@tiptap/pm@2.1.13)
+ dev: false
+
+ /@tiptap/extension-color@2.1.13(@tiptap/core@2.1.13)(@tiptap/extension-text-style@2.1.13):
+ resolution: {integrity: sha512-T3tJXCIfFxzIlGOhvbPVIZa3y36YZRPYIo2TKsgkTz8LiMob6hRXXNFjsrFDp2Fnu3DrBzyvrorsW7767s4eYg==}
+ peerDependencies:
+ '@tiptap/core': ^2.0.0
+ '@tiptap/extension-text-style': ^2.0.0
+ dependencies:
+ '@tiptap/core': 2.1.13(@tiptap/pm@2.1.13)
+ '@tiptap/extension-text-style': 2.1.13(@tiptap/core@2.1.13)
+ dev: false
+
+ /@tiptap/extension-document@2.1.13(@tiptap/core@2.1.13):
+ resolution: {integrity: sha512-wLwiTWsVmZTGIE5duTcHRmW4ulVxNW4nmgfpk95+mPn1iKyNGtrVhGWleLhBlTj+DWXDtcfNWZgqZkZNzhkqYQ==}
+ peerDependencies:
+ '@tiptap/core': ^2.0.0
+ dependencies:
+ '@tiptap/core': 2.1.13(@tiptap/pm@2.1.13)
+ dev: false
+
+ /@tiptap/extension-dropcursor@2.1.13(@tiptap/core@2.1.13)(@tiptap/pm@2.1.13):
+ resolution: {integrity: sha512-NAyJi4BJxH7vl/2LNS1X0ndwFKjEtX+cRgshXCnMyh7qNpIRW6Plczapc/W1OiMncOEhZJfpZfkRSfwG01FWFg==}
+ peerDependencies:
+ '@tiptap/core': ^2.0.0
+ '@tiptap/pm': ^2.0.0
+ dependencies:
+ '@tiptap/core': 2.1.13(@tiptap/pm@2.1.13)
+ '@tiptap/pm': 2.1.13
+ dev: false
+
+ /@tiptap/extension-floating-menu@2.1.13(@tiptap/core@2.1.13)(@tiptap/pm@2.1.13):
+ resolution: {integrity: sha512-9Oz7pk1Nts2+EyY+rYfnREGbLzQ5UFazAvRhF6zAJdvyuDmAYm0Jp6s0GoTrpV0/dJEISoFaNpPdMJOb9EBNRw==}
+ peerDependencies:
+ '@tiptap/core': ^2.0.0
+ '@tiptap/pm': ^2.0.0
+ dependencies:
+ '@tiptap/core': 2.1.13(@tiptap/pm@2.1.13)
+ '@tiptap/pm': 2.1.13
+ tippy.js: 6.3.7
+ dev: false
+
+ /@tiptap/extension-gapcursor@2.1.13(@tiptap/core@2.1.13)(@tiptap/pm@2.1.13):
+ resolution: {integrity: sha512-Cl5apsoTcyPPCgE3ThufxQxZ1wyqqh+9uxUN9VF9AbeTkid6oPZvKXwaILf6AFnkSy+SuKrb9kZD2iaezxpzXw==}
+ peerDependencies:
+ '@tiptap/core': ^2.0.0
+ '@tiptap/pm': ^2.0.0
+ dependencies:
+ '@tiptap/core': 2.1.13(@tiptap/pm@2.1.13)
+ '@tiptap/pm': 2.1.13
+ dev: false
+
+ /@tiptap/extension-hard-break@2.1.13(@tiptap/core@2.1.13):
+ resolution: {integrity: sha512-TGkMzMQayuKg+vN4du0x1ahEItBLcCT1jdWeRsjdM8gHfzbPLdo4PQhVsvm1I0xaZmbJZelhnVsUwRZcIu1WNA==}
+ peerDependencies:
+ '@tiptap/core': ^2.0.0
+ dependencies:
+ '@tiptap/core': 2.1.13(@tiptap/pm@2.1.13)
+ dev: false
+
+ /@tiptap/extension-heading@2.1.13(@tiptap/core@2.1.13):
+ resolution: {integrity: sha512-PEmc19QLmlVUTiHWoF0hpgNTNPNU0nlaFmMKskzO+cx5Df4xvHmv/UqoIwp7/UFbPMkfVJT1ozQU7oD1IWn9Hg==}
+ peerDependencies:
+ '@tiptap/core': ^2.0.0
+ dependencies:
+ '@tiptap/core': 2.1.13(@tiptap/pm@2.1.13)
+ dev: false
+
+ /@tiptap/extension-history@2.1.13(@tiptap/core@2.1.13)(@tiptap/pm@2.1.13):
+ resolution: {integrity: sha512-1ouitThGTBUObqw250aDwGLMNESBH5PRXIGybsCFO1bktdmWtEw7m72WY41EuX2BH8iKJpcYPerl3HfY1vmCNw==}
+ peerDependencies:
+ '@tiptap/core': ^2.0.0
+ '@tiptap/pm': ^2.0.0
+ dependencies:
+ '@tiptap/core': 2.1.13(@tiptap/pm@2.1.13)
+ '@tiptap/pm': 2.1.13
+ dev: false
+
+ /@tiptap/extension-horizontal-rule@2.1.13(@tiptap/core@2.1.13)(@tiptap/pm@2.1.13):
+ resolution: {integrity: sha512-7OgjgNqZXvBejgULNdMSma2M1nzv4bbZG+FT5XMFZmEOxR9IB1x/RzChjPdeicff2ZK2sfhMBc4Y9femF5XkUg==}
+ peerDependencies:
+ '@tiptap/core': ^2.0.0
+ '@tiptap/pm': ^2.0.0
+ dependencies:
+ '@tiptap/core': 2.1.13(@tiptap/pm@2.1.13)
+ '@tiptap/pm': 2.1.13
+ dev: false
+
+ /@tiptap/extension-italic@2.1.13(@tiptap/core@2.1.13):
+ resolution: {integrity: sha512-HyDJfuDn5hzwGKZiANcvgz6wcum6bEgb4wmJnfej8XanTMJatNVv63TVxCJ10dSc9KGpPVcIkg6W8/joNXIEbw==}
+ peerDependencies:
+ '@tiptap/core': ^2.0.0
+ dependencies:
+ '@tiptap/core': 2.1.13(@tiptap/pm@2.1.13)
+ dev: false
+
+ /@tiptap/extension-list-item@2.1.13(@tiptap/core@2.1.13):
+ resolution: {integrity: sha512-6e8iiCWXOiJTl1XOwVW2tc0YG18h70HUtEHFCx2m5HspOGFKsFEaSS3qYxOheM9HxlmQeDt8mTtqftRjEFRxPQ==}
+ peerDependencies:
+ '@tiptap/core': ^2.0.0
+ dependencies:
+ '@tiptap/core': 2.1.13(@tiptap/pm@2.1.13)
+ dev: false
+
+ /@tiptap/extension-ordered-list@2.1.13(@tiptap/core@2.1.13):
+ resolution: {integrity: sha512-UO4ZAL5Vrr1WwER5VjgmeNIWHpqy9cnIRo1En07gZ0OWTjs1eITPcu+4TCn1ZG6DhoFvAQzE5DTxxdhIotg+qw==}
+ peerDependencies:
+ '@tiptap/core': ^2.0.0
+ dependencies:
+ '@tiptap/core': 2.1.13(@tiptap/pm@2.1.13)
+ dev: false
+
+ /@tiptap/extension-paragraph@2.1.13(@tiptap/core@2.1.13):
+ resolution: {integrity: sha512-cEoZBJrsQn69FPpUMePXG/ltGXtqKISgypj70PEHXt5meKDjpmMVSY4/8cXvFYEYsI9GvIwyAK0OrfAHiSoROA==}
+ peerDependencies:
+ '@tiptap/core': ^2.0.0
+ dependencies:
+ '@tiptap/core': 2.1.13(@tiptap/pm@2.1.13)
+ dev: false
+
+ /@tiptap/extension-strike@2.1.13(@tiptap/core@2.1.13):
+ resolution: {integrity: sha512-VN6zlaCNCbyJUCDyBFxavw19XmQ4LkCh8n20M8huNqW77lDGXA2A7UcWLHaNBpqAijBRu9mWI8l4Bftyf2fcAw==}
+ peerDependencies:
+ '@tiptap/core': ^2.0.0
+ dependencies:
+ '@tiptap/core': 2.1.13(@tiptap/pm@2.1.13)
+ dev: false
+
+ /@tiptap/extension-text-style@2.1.13(@tiptap/core@2.1.13):
+ resolution: {integrity: sha512-K9/pNHxpZKQoc++crxrsppVUSeHv8YevfY2FkJ4YMaekGcX+q4BRrHR0tOfii4izAUPJF2L0/PexLQaWXtAY1w==}
+ peerDependencies:
+ '@tiptap/core': ^2.0.0
+ dependencies:
+ '@tiptap/core': 2.1.13(@tiptap/pm@2.1.13)
+ dev: false
+
+ /@tiptap/extension-text@2.1.13(@tiptap/core@2.1.13):
+ resolution: {integrity: sha512-zzsTTvu5U67a8WjImi6DrmpX2Q/onLSaj+LRWPh36A1Pz2WaxW5asZgaS+xWCnR+UrozlCALWa01r7uv69jq0w==}
+ peerDependencies:
+ '@tiptap/core': ^2.0.0
+ dependencies:
+ '@tiptap/core': 2.1.13(@tiptap/pm@2.1.13)
+ dev: false
+
+ /@tiptap/pm@2.1.13:
+ resolution: {integrity: sha512-zNbA7muWsHuVg12GrTgN/j119rLePPq5M8dZgkKxUwdw8VmU3eUyBp1SihPEXJ2U0MGdZhNhFX7Y74g11u66sg==}
+ dependencies:
+ prosemirror-changeset: 2.2.1
+ prosemirror-collab: 1.3.1
+ prosemirror-commands: 1.5.2
+ prosemirror-dropcursor: 1.8.1
+ prosemirror-gapcursor: 1.3.2
+ prosemirror-history: 1.3.2
+ prosemirror-inputrules: 1.3.0
+ prosemirror-keymap: 1.2.2
+ prosemirror-markdown: 1.12.0
+ prosemirror-menu: 1.2.4
+ prosemirror-model: 1.19.4
+ prosemirror-schema-basic: 1.2.2
+ prosemirror-schema-list: 1.3.0
+ prosemirror-state: 1.4.3
+ prosemirror-tables: 1.3.5
+ prosemirror-trailing-node: 2.0.7(prosemirror-model@1.19.4)(prosemirror-state@1.4.3)(prosemirror-view@1.32.7)
+ prosemirror-transform: 1.8.0
+ prosemirror-view: 1.32.7
+ dev: false
+
+ /@tiptap/react@2.1.13(@tiptap/core@2.1.13)(@tiptap/pm@2.1.13)(react-dom@18.2.0)(react@18.2.0):
+ resolution: {integrity: sha512-Dq3f8EtJnpImP3iDtJo+7bulnN9SJZRZcVVzxHXccLcC2MxtmDdlPGZjP+wxO800nd8toSIOd5734fPNf/YcfA==}
+ peerDependencies:
+ '@tiptap/core': ^2.0.0
+ '@tiptap/pm': ^2.0.0
+ react: ^17.0.0 || ^18.0.0
+ react-dom: ^17.0.0 || ^18.0.0
+ dependencies:
+ '@tiptap/core': 2.1.13(@tiptap/pm@2.1.13)
+ '@tiptap/extension-bubble-menu': 2.1.13(@tiptap/core@2.1.13)(@tiptap/pm@2.1.13)
+ '@tiptap/extension-floating-menu': 2.1.13(@tiptap/core@2.1.13)(@tiptap/pm@2.1.13)
+ '@tiptap/pm': 2.1.13
+ react: 18.2.0
+ react-dom: 18.2.0(react@18.2.0)
+ dev: false
+
+ /@tiptap/starter-kit@2.1.13(@tiptap/pm@2.1.13):
+ resolution: {integrity: sha512-ph/mUR/OwPtPkZ5rNHINxubpABn8fHnvJSdhXFrY/q6SKoaO11NZXgegRaiG4aL7O6Sz4LsZVw6Sm0Ae+GJmrg==}
+ dependencies:
+ '@tiptap/core': 2.1.13(@tiptap/pm@2.1.13)
+ '@tiptap/extension-blockquote': 2.1.13(@tiptap/core@2.1.13)
+ '@tiptap/extension-bold': 2.1.13(@tiptap/core@2.1.13)
+ '@tiptap/extension-bullet-list': 2.1.13(@tiptap/core@2.1.13)
+ '@tiptap/extension-code': 2.1.13(@tiptap/core@2.1.13)
+ '@tiptap/extension-code-block': 2.1.13(@tiptap/core@2.1.13)(@tiptap/pm@2.1.13)
+ '@tiptap/extension-document': 2.1.13(@tiptap/core@2.1.13)
+ '@tiptap/extension-dropcursor': 2.1.13(@tiptap/core@2.1.13)(@tiptap/pm@2.1.13)
+ '@tiptap/extension-gapcursor': 2.1.13(@tiptap/core@2.1.13)(@tiptap/pm@2.1.13)
+ '@tiptap/extension-hard-break': 2.1.13(@tiptap/core@2.1.13)
+ '@tiptap/extension-heading': 2.1.13(@tiptap/core@2.1.13)
+ '@tiptap/extension-history': 2.1.13(@tiptap/core@2.1.13)(@tiptap/pm@2.1.13)
+ '@tiptap/extension-horizontal-rule': 2.1.13(@tiptap/core@2.1.13)(@tiptap/pm@2.1.13)
+ '@tiptap/extension-italic': 2.1.13(@tiptap/core@2.1.13)
+ '@tiptap/extension-list-item': 2.1.13(@tiptap/core@2.1.13)
+ '@tiptap/extension-ordered-list': 2.1.13(@tiptap/core@2.1.13)
+ '@tiptap/extension-paragraph': 2.1.13(@tiptap/core@2.1.13)
+ '@tiptap/extension-strike': 2.1.13(@tiptap/core@2.1.13)
+ '@tiptap/extension-text': 2.1.13(@tiptap/core@2.1.13)
+ transitivePeerDependencies:
+ - '@tiptap/pm'
+ dev: false
+
/@tootallnate/once@1.1.2:
resolution: {integrity: sha512-RbzJvlNzmRq5c3O09UipeuXno4tA1FE6ikOjxZK0tuxVv3412l64l5t1W5pj4+rJq9vpkm/kwiR07aZXnsKPxw==}
engines: {node: '>= 6'}
@@ -6264,6 +6592,14 @@ packages:
/@types/normalize-package-data@2.4.1:
resolution: {integrity: sha512-Gj7cI7z+98M282Tqmp2K5EIsoouUEzbBJhQQzDE3jSIRk6r9gsz0oUokqIUR4u1R3dMHo0pDHM7sNOHyhulypw==}
+ /@types/object.omit@3.0.3:
+ resolution: {integrity: sha512-xrq4bQTBGYY2cw+gV4PzoG2Lv3L0pjZ1uXStRRDQoATOYW1lCsFQHhQ+OkPhIcQoqLjAq7gYif7D14Qaa6Zbew==}
+ dev: false
+
+ /@types/object.pick@1.3.4:
+ resolution: {integrity: sha512-5PjwB0uP2XDp3nt5u5NJAG2DORHIRClPzWT/TTZhJ2Ekwe8M5bA9tvPdi9NO/n2uvu2/ictat8kgqvLfcIE1SA==}
+ dev: false
+
/@types/parse-json@4.0.0:
resolution: {integrity: sha512-//oorEZjL6sbPcKUaCdIGlIUeH26mgzimjBB77G6XRgnDl/L5wOnpyBGRe/Mmf5CVW3PwEBE1NjiMZ/ssFh4wA==}
@@ -6461,6 +6797,10 @@ packages:
pretty-format: 25.5.0
dev: false
+ /@types/throttle-debounce@2.1.0:
+ resolution: {integrity: sha512-5eQEtSCoESnh2FsiLTxE121IiE60hnMqcb435fShf4bpLRjEu1Eoekht23y6zXS9Ts3l+Szu3TARnTsA0GkOkQ==}
+ dev: false
+
/@types/triple-beam@1.3.2:
resolution: {integrity: sha512-txGIh+0eDFzKGC25zORnswy+br1Ha7hj5cMVwKIU7+s0U2AxxJru/jZSMU6OC9MJWP6+pc/hc6ZjyZShpsyY2g==}
dev: false
@@ -7211,6 +7551,11 @@ packages:
regex-parser: 2.2.11
dev: false
+ /adler-32@1.3.1:
+ resolution: {integrity: sha512-ynZ4w/nUUv5rrsR8UUGoe1VC9hZj6V5hU9Qw1HlMDJGEJw5S7TfTErWTjMys6M7vr0YWcPqs3qAr4ss0nDfP+A==}
+ engines: {node: '>=0.8'}
+ dev: false
+
/agenda@4.4.0:
resolution: {integrity: sha512-7fIO4indmmrtkDmj2woOBJnhHIM7jPtkdGR4VOApB46eeBrPGUnO28RFrmjHebc3PMDnKJI0PWFyu9L9VotgJg==}
engines: {node: '>=12.9.0'}
@@ -7816,32 +8161,14 @@ packages:
engines: {node: '>=4'}
dev: false
- /axios@0.20.0:
- resolution: {integrity: sha512-ANA4rr2BDcmmAQLOKft2fufrtuvlqR+cXNNinUmvfeSNCOF98PZL+7M/v1zIdGo7OLjEA9J2gXJL+j4zGsl0bA==}
- deprecated: Critical security vulnerability fixed in v0.21.1. For more information, see https://github.com/axios/axios/pull/3410
- dependencies:
- follow-redirects: 1.15.2
- transitivePeerDependencies:
- - debug
- dev: false
-
- /axios@0.21.4:
- resolution: {integrity: sha512-ut5vewkiu8jjGBdqpM44XxjuCjq9LAKeHVmoVfHVzy8eHgxxq8SbAVQNovDA8mVi05kP0Ea/n/UzcSHcTJQfNg==}
- dependencies:
- follow-redirects: 1.15.2
- transitivePeerDependencies:
- - debug
- dev: false
-
- /axios@1.3.2:
- resolution: {integrity: sha512-1M3O703bYqYuPhbHeya5bnhpYVsDDRyQSabNja04mZtboLNSuZ4YrltestrLXfHgmzua4TpUqRiVKbiQuo2epw==}
+ /axios@1.6.0:
+ resolution: {integrity: sha512-EZ1DYihju9pwVB+jg67ogm+Tmqc6JmhamRN6I4Zt8DfZu5lbcQGw3ozH9lFejSJgs/ibaef3A9PMXPLeefFGJg==}
dependencies:
follow-redirects: 1.15.2
form-data: 4.0.0
proxy-from-env: 1.1.0
transitivePeerDependencies:
- debug
- dev: true
/axobject-query@3.2.1:
resolution: {integrity: sha512-jsyHu61e6N4Vbz/v18DHwWYKK0bSWLqn47eeDSKPB7m8tqMHF9YJ+mhIk2lVteyZrY8tnSj/jHOv4YiTCuCJgg==}
@@ -8840,6 +9167,11 @@ packages:
engines: {node: '>=0.10.0'}
dev: false
+ /case-anything@2.1.13:
+ resolution: {integrity: sha512-zlOQ80VrQ2Ue+ymH5OuM/DlDq64mEm+B9UTdHULv5osUMD6HalNTblf2b1u/m6QecjsnOkBpqVZ+XPwIVsy7Ng==}
+ engines: {node: '>=12.13'}
+ dev: false
+
/case-sensitive-paths-webpack-plugin@2.4.0:
resolution: {integrity: sha512-roIFONhcxog0JSSWbvVAh3OocukmSgpqOH6YpMkCvav/ySIV3JKg4Dc8vYtQjYi/UxpNE36r/9v+VqTQqgkYmw==}
engines: {node: '>=4'}
@@ -8849,6 +9181,14 @@ packages:
resolution: {integrity: sha512-4tYFyifaFfGacoiObjJegolkwSU4xQNGbVgUiNYVUxbQ2x2lUsFvY4hVgVzGiIe6WLOPqycWXA40l+PWsxthUw==}
dev: false
+ /cfb@1.2.2:
+ resolution: {integrity: sha512-KfdUZsSOw19/ObEWasvBP/Ac4reZvAGauZhs6S/gqNhXhI7cKwvlH7ulj+dOEYnca4bm4SGo8C1bTAQvnTjgQA==}
+ engines: {node: '>=0.8'}
+ dependencies:
+ adler-32: 1.3.1
+ crc-32: 1.2.2
+ dev: false
+
/chai-http@4.3.0:
resolution: {integrity: sha512-zFTxlN7HLMv+7+SPXZdkd5wUlK+KxH6Q7bIEMiEx0FK3zuuMqL7cwICAQ0V1+yYRozBburYuxN1qZstgHpFZQg==}
engines: {node: '>=4'}
@@ -9189,6 +9529,11 @@ packages:
engines: {node: '>=0.10.0'}
dev: false
+ /codepage@1.15.0:
+ resolution: {integrity: sha512-3g6NUTPd/YtuuGrhMnOMRjFc+LJw/bnMp3+0r/Wcz3IXUuCosKRJvMphm5+Q+bvTVGcJJuRvVLuYba+WojaFaA==}
+ engines: {node: '>=0.8'}
+ dev: false
+
/collect-v8-coverage@1.0.2:
resolution: {integrity: sha512-lHl4d5/ONEbLlJvaJNtsF/Lz+WvB07u2ycqTYbdrq7UypDXailES4valYb2eWiJFxZlVmpGekfqoxQhzyFdT4Q==}
dev: false
@@ -9724,6 +10069,12 @@ packages:
- supports-color
dev: false
+ /crc-32@1.2.2:
+ resolution: {integrity: sha512-ROmzCKrTnOwybPcJApAA6WBWij23HVfGVNKqqrZpuyZOHqK2CwHSvpGuyt/UNNvaIjEd8X5IFGp4Mh+Ie1IHJQ==}
+ engines: {node: '>=0.8'}
+ hasBin: true
+ dev: false
+
/create-ecdh@4.0.4:
resolution: {integrity: sha512-mf+TCx8wWc9VpuxfP2ht0iSISLZnt0JgWlrOKZiNqyUZWnjIaCIVNQArMHnCZKfEYRg6IM7A+NeJoN8gf/Ws0A==}
dependencies:
@@ -9762,6 +10113,10 @@ packages:
/create-require@1.1.1:
resolution: {integrity: sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==}
+ /crelt@1.0.6:
+ resolution: {integrity: sha512-VQ2MBenTq1fWZUH9DJNGti7kKv6EeAuYr3cLwxUWhIu1baTaXh4Ib5W2CqHVqib4/MqbYGJqiL3Zb8GJZr3l4g==}
+ dev: false
+
/cron-parser@3.5.0:
resolution: {integrity: sha512-wyVZtbRs6qDfFd8ap457w3XVntdvqcwBGxBoTvJQH9KGVKL/fB+h2k3C8AqiVxvUQKN1Ps/Ns46CNViOpVDhfQ==}
engines: {node: '>=0.8'}
@@ -10156,6 +10511,10 @@ packages:
engines: {node: '>=8'}
dev: true
+ /dash-get@1.0.2:
+ resolution: {integrity: sha512-4FbVrHDwfOASx7uQVxeiCTo7ggSdYZbqs8lH+WU6ViypPlDbe9y6IP5VVUDQBv9DcnyaiPT5XT0UWHgJ64zLeQ==}
+ dev: false
+
/dashdash@1.14.1:
resolution: {integrity: sha512-jRFi8UDGo6j+odZiEpjazZaWqEal3w/basFjQHQEwVtZJGDpxbH1MeYluwCS8Xq5wmLJooDlMgvVarmWfGM44g==}
engines: {node: '>=0.10'}
@@ -10927,6 +11286,11 @@ packages:
resolution: {integrity: sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==}
dev: false
+ /entities@4.5.0:
+ resolution: {integrity: sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==}
+ engines: {node: '>=0.12'}
+ dev: false
+
/env-paths@2.2.1:
resolution: {integrity: sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A==}
engines: {node: '>=6'}
@@ -12476,7 +12840,6 @@ packages:
asynckit: 0.4.0
combined-stream: 1.0.8
mime-types: 2.1.35
- dev: true
/formidable@1.2.6:
resolution: {integrity: sha512-KcpbcpuLNOwrEjnbpMC0gS+X8ciDoZE1kkqzat4a8vrprf+s9pKNQ/QIwWfbfs4ltgmFl3MD177SNTkve3BwGQ==}
@@ -12503,6 +12866,11 @@ packages:
engines: {node: '>= 0.6'}
dev: false
+ /frac@1.1.2:
+ resolution: {integrity: sha512-w/XBfkibaTl3YDqASwfDUqkna4Z2p9cFSr1aHDt0WoMTECnRfBOv2WArlZILlqgWlmdIlALXGpM2AOhEk5W3IA==}
+ engines: {node: '>=0.8'}
+ dev: false
+
/fraction.js@4.2.0:
resolution: {integrity: sha512-MhLuK+2gUcnZe8ZHlaaINnQLl0xRIGRfcGk2yl8xoQAfHrSsL3rYu6FCmBdkdbhc9EPlwyGHewaRsvwRMJtAlA==}
dev: false
@@ -16292,6 +16660,12 @@ packages:
engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0}
dev: true
+ /linkify-it@5.0.0:
+ resolution: {integrity: sha512-5aHCbzQRADcdP+ATqnDuhhJ/MRIqDkZX5pyjFHRRysS8vZ5AbqGEoFIb6pYHPZ+L/OC2Lc+xT8uHVVR5CAK/wQ==}
+ dependencies:
+ uc.micro: 2.0.0
+ dev: false
+
/load-json-file@1.1.0:
resolution: {integrity: sha512-cy7ZdNRXdablkXYNI049pthVeXFurRyb9+hA/dZzerZ0pGTx42z+y+ssxBaVV2l70t1muq5IdKhn4UtcoGUY9A==}
engines: {node: '>=0.10.0'}
@@ -16700,6 +17074,18 @@ packages:
object-visit: 1.0.1
dev: false
+ /markdown-it@14.0.0:
+ resolution: {integrity: sha512-seFjF0FIcPt4P9U39Bq1JYblX0KZCjDLFFQPHpL5AzHpqPEKtosxmdq/LTVZnjfH7tjt9BxStm+wXcDBNuYmzw==}
+ hasBin: true
+ dependencies:
+ argparse: 2.0.1
+ entities: 4.5.0
+ linkify-it: 5.0.0
+ mdurl: 2.0.0
+ punycode.js: 2.3.1
+ uc.micro: 2.0.0
+ dev: false
+
/match-sorter@4.2.1:
resolution: {integrity: sha512-s+3h9TiZU9U1pWhIERHf8/f4LmBN6IXaRgo2CI17+XGByGS1GvG5VvXK9pcGyCjGe3WM3mSYRC3ipGrd5UEVgw==}
dependencies:
@@ -16763,6 +17149,10 @@ packages:
resolution: {integrity: sha512-iV3XNKw06j5Q7mi6h+9vbx23Tv7JkjEVgKHW4pimwyDGWm0OIQntJJ+u1C6mg6mK1EaTv42XQ7w76yuzH7M2cA==}
dev: false
+ /mdurl@2.0.0:
+ resolution: {integrity: sha512-Lf+9+2r+Tdp5wXDXC4PcIBjTDtq4UKjCPMQhKIuzpJNW0b96kVqSwW0bT7FhRSfmAiFYgP+SCRvdrDozfh0U5w==}
+ dev: false
+
/media-typer@0.3.0:
resolution: {integrity: sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==}
engines: {node: '>= 0.6'}
@@ -17853,7 +18243,7 @@ packages:
'@yarnpkg/lockfile': 1.1.0
'@yarnpkg/parsers': 3.0.0-rc.38
'@zkochan/js-yaml': 0.0.6
- axios: 1.3.2
+ axios: 1.6.0
chalk: 4.1.2
cli-cursor: 3.1.0
cli-spinners: 2.6.1
@@ -18047,6 +18437,13 @@ packages:
make-iterator: 1.0.1
dev: false
+ /object.omit@3.0.0:
+ resolution: {integrity: sha512-EO+BCv6LJfu+gBIF3ggLicFebFLN5zqzz/WWJlMFfkMyGth+oBkhxzDl0wx2W4GkLzuQs/FsSkXZb2IMWQqmBQ==}
+ engines: {node: '>=0.10.0'}
+ dependencies:
+ is-extendable: 1.0.1
+ dev: false
+
/object.pick@1.3.0:
resolution: {integrity: sha512-tqa/UMy/CCoYmj+H5qc07qvSL9dqcs/WZENZ1JbtWBlATP+iVOe778gE6MSijnyCnORzDuX6hU+LA4SZ09YjFQ==}
engines: {node: '>=0.10.0'}
@@ -18223,6 +18620,10 @@ packages:
readable-stream: 2.3.7
dev: false
+ /orderedmap@2.1.1:
+ resolution: {integrity: sha512-TvAWxi0nDe1j/rtMcWcIj94+Ffe6n7zhow33h40SKxmsmozs6dz/e+EajymfoFcHd7sxNn8yHM8839uixMOV6g==}
+ dev: false
+
/os-browserify@0.3.0:
resolution: {integrity: sha512-gjcpUc3clBf9+210TRaDWbf+rZZZEshZ+DlXMRCeAjp0xhTrnQsKHypIy1J3d5hKdUzj69t708EHtU8P6bUn0A==}
dev: true
@@ -19803,6 +20204,149 @@ packages:
resolution: {integrity: sha512-IJUkICM5dP5znhCckHSv30Q4b5/JA5enCtkRHYaOVOAocnH/1BQEYTC5NMfT3AVl/iXKdr3aqQbQn9DxyWknwA==}
dev: false
+ /prosemirror-changeset@2.2.1:
+ resolution: {integrity: sha512-J7msc6wbxB4ekDFj+n9gTW/jav/p53kdlivvuppHsrZXCaQdVgRghoZbSS3kwrRyAstRVQ4/+u5k7YfLgkkQvQ==}
+ dependencies:
+ prosemirror-transform: 1.8.0
+ dev: false
+
+ /prosemirror-collab@1.3.1:
+ resolution: {integrity: sha512-4SnynYR9TTYaQVXd/ieUvsVV4PDMBzrq2xPUWutHivDuOshZXqQ5rGbZM84HEaXKbLdItse7weMGOUdDVcLKEQ==}
+ dependencies:
+ prosemirror-state: 1.4.3
+ dev: false
+
+ /prosemirror-commands@1.5.2:
+ resolution: {integrity: sha512-hgLcPaakxH8tu6YvVAaILV2tXYsW3rAdDR8WNkeKGcgeMVQg3/TMhPdVoh7iAmfgVjZGtcOSjKiQaoeKjzd2mQ==}
+ dependencies:
+ prosemirror-model: 1.19.4
+ prosemirror-state: 1.4.3
+ prosemirror-transform: 1.8.0
+ dev: false
+
+ /prosemirror-dropcursor@1.8.1:
+ resolution: {integrity: sha512-M30WJdJZLyXHi3N8vxN6Zh5O8ZBbQCz0gURTfPmTIBNQ5pxrdU7A58QkNqfa98YEjSAL1HUyyU34f6Pm5xBSGw==}
+ dependencies:
+ prosemirror-state: 1.4.3
+ prosemirror-transform: 1.8.0
+ prosemirror-view: 1.32.7
+ dev: false
+
+ /prosemirror-gapcursor@1.3.2:
+ resolution: {integrity: sha512-wtjswVBd2vaQRrnYZaBCbyDqr232Ed4p2QPtRIUK5FuqHYKGWkEwl08oQM4Tw7DOR0FsasARV5uJFvMZWxdNxQ==}
+ dependencies:
+ prosemirror-keymap: 1.2.2
+ prosemirror-model: 1.19.4
+ prosemirror-state: 1.4.3
+ prosemirror-view: 1.32.7
+ dev: false
+
+ /prosemirror-history@1.3.2:
+ resolution: {integrity: sha512-/zm0XoU/N/+u7i5zepjmZAEnpvjDtzoPWW6VmKptcAnPadN/SStsBjMImdCEbb3seiNTpveziPTIrXQbHLtU1g==}
+ dependencies:
+ prosemirror-state: 1.4.3
+ prosemirror-transform: 1.8.0
+ prosemirror-view: 1.32.7
+ rope-sequence: 1.3.4
+ dev: false
+
+ /prosemirror-inputrules@1.3.0:
+ resolution: {integrity: sha512-z1GRP2vhh5CihYMQYsJSa1cOwXb3SYxALXOIfAkX8nZserARtl9LiL+CEl+T+OFIsXc3mJIHKhbsmRzC0HDAXA==}
+ dependencies:
+ prosemirror-state: 1.4.3
+ prosemirror-transform: 1.8.0
+ dev: false
+
+ /prosemirror-keymap@1.2.2:
+ resolution: {integrity: sha512-EAlXoksqC6Vbocqc0GtzCruZEzYgrn+iiGnNjsJsH4mrnIGex4qbLdWWNza3AW5W36ZRrlBID0eM6bdKH4OStQ==}
+ dependencies:
+ prosemirror-state: 1.4.3
+ w3c-keyname: 2.2.8
+ dev: false
+
+ /prosemirror-markdown@1.12.0:
+ resolution: {integrity: sha512-6F5HS8Z0HDYiS2VQDZzfZP6A0s/I0gbkJy8NCzzDMtcsz3qrfqyroMMeoSjAmOhDITyon11NbXSzztfKi+frSQ==}
+ dependencies:
+ markdown-it: 14.0.0
+ prosemirror-model: 1.19.4
+ dev: false
+
+ /prosemirror-menu@1.2.4:
+ resolution: {integrity: sha512-S/bXlc0ODQup6aiBbWVsX/eM+xJgCTAfMq/nLqaO5ID/am4wS0tTCIkzwytmao7ypEtjj39i7YbJjAgO20mIqA==}
+ dependencies:
+ crelt: 1.0.6
+ prosemirror-commands: 1.5.2
+ prosemirror-history: 1.3.2
+ prosemirror-state: 1.4.3
+ dev: false
+
+ /prosemirror-model@1.19.4:
+ resolution: {integrity: sha512-RPmVXxUfOhyFdayHawjuZCxiROsm9L4FCUA6pWI+l7n2yCBsWy9VpdE1hpDHUS8Vad661YLY9AzqfjLhAKQ4iQ==}
+ dependencies:
+ orderedmap: 2.1.1
+ dev: false
+
+ /prosemirror-schema-basic@1.2.2:
+ resolution: {integrity: sha512-/dT4JFEGyO7QnNTe9UaKUhjDXbTNkiWTq/N4VpKaF79bBjSExVV2NXmJpcM7z/gD7mbqNjxbmWW5nf1iNSSGnw==}
+ dependencies:
+ prosemirror-model: 1.19.4
+ dev: false
+
+ /prosemirror-schema-list@1.3.0:
+ resolution: {integrity: sha512-Hz/7gM4skaaYfRPNgr421CU4GSwotmEwBVvJh5ltGiffUJwm7C8GfN/Bc6DR1EKEp5pDKhODmdXXyi9uIsZl5A==}
+ dependencies:
+ prosemirror-model: 1.19.4
+ prosemirror-state: 1.4.3
+ prosemirror-transform: 1.8.0
+ dev: false
+
+ /prosemirror-state@1.4.3:
+ resolution: {integrity: sha512-goFKORVbvPuAQaXhpbemJFRKJ2aixr+AZMGiquiqKxaucC6hlpHNZHWgz5R7dS4roHiwq9vDctE//CZ++o0W1Q==}
+ dependencies:
+ prosemirror-model: 1.19.4
+ prosemirror-transform: 1.8.0
+ prosemirror-view: 1.32.7
+ dev: false
+
+ /prosemirror-tables@1.3.5:
+ resolution: {integrity: sha512-JSZ2cCNlApu/ObAhdPyotrjBe2cimniniTpz60YXzbL0kZ+47nEYk2LWbfKU2lKpBkUNquta2PjteoNi4YCluQ==}
+ dependencies:
+ prosemirror-keymap: 1.2.2
+ prosemirror-model: 1.19.4
+ prosemirror-state: 1.4.3
+ prosemirror-transform: 1.8.0
+ prosemirror-view: 1.32.7
+ dev: false
+
+ /prosemirror-trailing-node@2.0.7(prosemirror-model@1.19.4)(prosemirror-state@1.4.3)(prosemirror-view@1.32.7):
+ resolution: {integrity: sha512-8zcZORYj/8WEwsGo6yVCRXFMOfBo0Ub3hCUvmoWIZYfMP26WqENU0mpEP27w7mt8buZWuGrydBewr0tOArPb1Q==}
+ peerDependencies:
+ prosemirror-model: ^1.19.0
+ prosemirror-state: ^1.4.2
+ prosemirror-view: ^1.31.2
+ dependencies:
+ '@remirror/core-constants': 2.0.2
+ '@remirror/core-helpers': 3.0.0
+ escape-string-regexp: 4.0.0
+ prosemirror-model: 1.19.4
+ prosemirror-state: 1.4.3
+ prosemirror-view: 1.32.7
+ dev: false
+
+ /prosemirror-transform@1.8.0:
+ resolution: {integrity: sha512-BaSBsIMv52F1BVVMvOmp1yzD3u65uC3HTzCBQV1WDPqJRQ2LuHKcyfn0jwqodo8sR9vVzMzZyI+Dal5W9E6a9A==}
+ dependencies:
+ prosemirror-model: 1.19.4
+ dev: false
+
+ /prosemirror-view@1.32.7:
+ resolution: {integrity: sha512-pvxiOoD4shW41X5bYDjRQk3DSG4fMqxh36yPMt7VYgU3dWRmqFzWJM/R6zeo1KtC8nyk717ZbQND3CC9VNeptw==}
+ dependencies:
+ prosemirror-model: 1.19.4
+ prosemirror-state: 1.4.3
+ prosemirror-transform: 1.8.0
+ dev: false
+
/proto-list@1.2.4:
resolution: {integrity: sha512-vtK/94akxsTMhe0/cbfpR+syPuszcuwhqVjJq26CuNDgFGj682oRBXOP5MJpv2r7JtE8MsiepGIqvvOTBwn2vA==}
dev: true
@@ -19957,6 +20501,11 @@ packages:
pump: 2.0.1
dev: false
+ /punycode.js@2.3.1:
+ resolution: {integrity: sha512-uxFIHU0YlHYhDQtV4R9J6a52SLx28BCjT+4ieh7IGbgwVJWO+km431c4yRlREUAsAmt/uMjQUyQHNEPf0M39CA==}
+ engines: {node: '>=6'}
+ dev: false
+
/punycode@1.3.2:
resolution: {integrity: sha512-RofWgt/7fL5wP1Y7fxE7/EmTLzQVnB0ycyibJ0OOHIlJqTNzglYFxVwETOcIoJqJmpDXJ9xImDv+Fq34F/d4Dw==}
dev: true
@@ -21478,6 +22027,10 @@ packages:
fsevents: 2.3.2
dev: false
+ /rope-sequence@1.3.4:
+ resolution: {integrity: sha512-UT5EDe2cu2E/6O4igUr5PSFs23nvvukicWHx6GnOPlHAiiYbzNuCRQCuiUdHJQcqKalLKlrYJnjY0ySGsXNQXQ==}
+ dev: false
+
/rsvp@4.8.5:
resolution: {integrity: sha512-nfMOlASu9OnRJo1mbEk2cz0D56a1MBNrJ7orjRZQG10XDyuvwksKbuXNp6qa+kbn839HwjwhBzhFmdsaEAfauA==}
engines: {node: 6.* || >= 7.*}
@@ -22111,6 +22664,18 @@ packages:
webpack: 5.76.0(webpack-cli@4.10.0)
dev: false
+ /source-map-loader@4.0.1(webpack@5.76.0):
+ resolution: {integrity: sha512-oqXpzDIByKONVY8g1NUPOTQhe0UTU5bWUl32GSkqK2LjJj0HmwTMVKxcUip0RgAYhY1mqgOxjbQM48a0mmeNfA==}
+ engines: {node: '>= 14.15.0'}
+ peerDependencies:
+ webpack: ^5.72.1
+ dependencies:
+ abab: 2.0.6
+ iconv-lite: 0.6.3
+ source-map-js: 1.0.2
+ webpack: 5.76.0(webpack-cli@4.10.0)
+ dev: false
+
/source-map-resolve@0.5.3:
resolution: {integrity: sha512-Htz+RnsXWk5+P2slx5Jh3Q66vhQj1Cllm0zvnaY98+NFx+Dv2CF/f5O/t8x+KaNdrdIAsruNzoh/KpialbqAnw==}
deprecated: See https://github.com/lydell/source-map-resolve#deprecated
@@ -22270,6 +22835,13 @@ packages:
engines: {node: '>= 0.6'}
dev: false
+ /ssf@0.11.2:
+ resolution: {integrity: sha512-+idbmIXoYET47hH+d7dfm2epdOMUDjqcB4648sTZ+t2JwoyBFL/insLfB/racrDmsKB3diwsDA696pZMieAC5g==}
+ engines: {node: '>=0.8'}
+ dependencies:
+ frac: 1.1.2
+ dev: false
+
/sshpk@1.17.0:
resolution: {integrity: sha512-/9HIEs1ZXGhSPE8X6Ccm7Nam1z8KcoCqPdI7ecm1N33EzAetWahvQWVqLZtaZQ+IDKX4IyA2o0gBzqIMkAagHQ==}
engines: {node: '>=0.10.0'}
@@ -23078,6 +23650,11 @@ packages:
engines: {node: '>=8'}
dev: false
+ /throttle-debounce@3.0.1:
+ resolution: {integrity: sha512-dTEWWNu6JmeVXY0ZYoPuH5cRIwc0MeGbJwah9KUNYSJwommQpCzTySTpEe8Gs1J23aeWEuAobe4Ag7EHVt/LOg==}
+ engines: {node: '>=10'}
+ dev: false
+
/through2-filter@3.0.0:
resolution: {integrity: sha512-jaRjI2WxN3W1V8/FMZ9HKIBXixtiqs3SQSX4/YGIiP3gL6djW48VoZq9tDqeCWs3MT8YY5wb/zli8VW8snY1CA==}
dependencies:
@@ -23144,6 +23721,18 @@ packages:
resolution: {integrity: sha512-lBN9zLN/oAf68o3zNXYrdCt1kP8WsiGW8Oo2ka41b2IM5JL/S1CTyX1rW0mb/zSuJun0ZUrDxx4sqvYS2FWzPA==}
dev: false
+ /tippy.js@6.3.7:
+ resolution: {integrity: sha512-E1d3oP2emgJ9dRQZdf3Kkn0qJgI6ZLpyS5z6ZkY1DF3kaQaBsGZsndEpHwx+eC+tYM41HaSNvNtLx8tU57FzTQ==}
+ dependencies:
+ '@popperjs/core': 2.11.8
+ dev: false
+
+ /tmp-promise@3.0.3:
+ resolution: {integrity: sha512-RwM7MoPojPxsOBYnyd2hy0bxtIlVrihNs9pj5SUvY8Zz1sQcQG2tG1hSr8PDxfgEB8RNKDhqbIlroIarSNDNsQ==}
+ dependencies:
+ tmp: 0.2.1
+ dev: false
+
/tmp@0.0.33:
resolution: {integrity: sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==}
engines: {node: '>=0.6.0'}
@@ -23156,7 +23745,6 @@ packages:
engines: {node: '>=8.17.0'}
dependencies:
rimraf: 3.0.2
- dev: true
/tmpl@1.0.5:
resolution: {integrity: sha512-3f0uOEAQwIqGuWW2MVzYg8fV/QNnc/IpuJNG837rLuczAaLVHslWHZQj4IGiEl5Hs3kkbhwL9Ab7Hrsmuj+Smw==}
@@ -23523,6 +24111,11 @@ packages:
resolution: {integrity: sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==}
engines: {node: '>=8'}
+ /type-fest@2.19.0:
+ resolution: {integrity: sha512-RAH822pAdBgcNMAfWnCBU3CFZcfZ/i1eZjwFU/dsLKumyuuP3niueg2UAukXYF0E2AAoc82ZSSf9J0WQBinzHA==}
+ engines: {node: '>=12.20'}
+ dev: false
+
/type-is@1.6.15:
resolution: {integrity: sha512-0uqZYZDiBICTVXEsNcDLueZLPgZ8FgGe8lmVDQ0FcVFUeaxsPbFWiz60ZChVw8VELIt7iGuCehOrZSYjYteWKQ==}
engines: {node: '>= 0.6'}
@@ -23615,6 +24208,10 @@ packages:
engines: {node: '>=4.2.0'}
hasBin: true
+ /uc.micro@2.0.0:
+ resolution: {integrity: sha512-DffL94LsNOccVn4hyfRe5rdKa273swqeA5DJpMOeFmEn1wCDc7nAbbB0gXlgBCL7TNzeTv6G7XVWzan7iJtfig==}
+ dev: false
+
/uglify-js@3.17.4:
resolution: {integrity: sha512-T9q82TJI9e/C1TAxYvfb16xO120tMVFZrGA3f9/P4424DNu6ypK103y0GPFVa17yotwSyZW5iYXgjYHkGrJW/g==}
engines: {node: '>=0.8.0'}
@@ -24079,6 +24676,10 @@ packages:
browser-process-hrtime: 1.0.0
dev: false
+ /w3c-keyname@2.2.8:
+ resolution: {integrity: sha512-dpojBhNsCNN7T82Tm7k26A6G9ML3NkhDsnw9n/eoxSRlVBB4CEtIQ/KTCLI2Fwf3ataSXRhYFkQi3SlnFwPvPQ==}
+ dev: false
+
/w3c-xmlserializer@1.1.2:
resolution: {integrity: sha512-p10l/ayESzrBMYWRID6xbuCKh2Fp77+sA0doRuGn4tTIMrrZVeqfpKjXHY+oDh3K4nLdPgNwMTVP6Vp4pvqbNg==}
dependencies:
@@ -24551,10 +25152,20 @@ packages:
babel-walk: 3.0.0-canary-5
dev: false
+ /wmf@1.0.2:
+ resolution: {integrity: sha512-/p9K7bEh0Dj6WbXg4JG0xvLQmIadrner1bi45VMJTfnbVHsc7yIajZyoSoK60/dtVBs12Fm6WkUI5/3WAVsNMw==}
+ engines: {node: '>=0.8'}
+ dev: false
+
/word-wrap@1.2.4:
resolution: {integrity: sha512-2V81OA4ugVo5pRo46hAoD2ivUJx8jXmWXfUkY4KFNw0hEptvN0QfH3K4nHiwzGeKl5rFKedV48QVoqYavy4YpA==}
engines: {node: '>=0.10.0'}
+ /word@0.3.0:
+ resolution: {integrity: sha512-OELeY0Q61OXpdUfTp+oweA/vtLVg5VDOXh+3he3PNzLGG/y0oylSOC1xRVj0+l4vQ3tj/bB1HVHv1ocXkQceFA==}
+ engines: {node: '>=0.8'}
+ dev: false
+
/wordwrap@1.0.0:
resolution: {integrity: sha512-gvVzJFlPycKc5dZN4yPkP8w7Dc37BtP1yczEneOb4uq34pXZcvrtRTmWV8W+Ume+XCxKgbjM+nevkyFPMybd4Q==}
dev: true
@@ -24884,6 +25495,20 @@ packages:
engines: {node: '>=4'}
dev: false
+ /xlsx@0.18.5:
+ resolution: {integrity: sha512-dmg3LCjBPHZnQp5/F/+nnTa+miPJxUXB6vtk42YjBBKayDNagxGEeIdWApkYPOf3Z3pm3k62Knjzp7lMeTEtFQ==}
+ engines: {node: '>=0.8'}
+ hasBin: true
+ dependencies:
+ adler-32: 1.3.1
+ cfb: 1.2.2
+ codepage: 1.15.0
+ crc-32: 1.2.2
+ ssf: 0.11.2
+ wmf: 1.0.2
+ word: 0.3.0
+ dev: false
+
/xml-name-validator@3.0.0:
resolution: {integrity: sha512-A5CUptxDsvxKJEU3yO6DuWBSJz/qizqzJKOMIfUJHETbBw/sFaDxgd6fxm1ewUaM0jZ444Fc5vC5ROYurg/4Pw==}
dev: false