diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml
index 32f6881aa..6e19d03a4 100644
--- a/.github/workflows/ci.yml
+++ b/.github/workflows/ci.yml
@@ -184,7 +184,7 @@ jobs:
cache-dependency-path: 'src-ui/package-lock.json'
- name: Cache frontend dependencies
id: cache-frontend-deps
- uses: actions/cache@v3
+ uses: actions/cache@v4
with:
path: |
~/.npm
@@ -221,7 +221,7 @@ jobs:
cache-dependency-path: 'src-ui/package-lock.json'
- name: Cache frontend dependencies
id: cache-frontend-deps
- uses: actions/cache@v3
+ uses: actions/cache@v4
with:
path: |
~/.npm
@@ -283,7 +283,7 @@ jobs:
merge-multiple: true
-
name: Upload frontend coverage to Codecov
- uses: codecov/codecov-action@v3
+ uses: codecov/codecov-action@v4
with:
# not required for public repos, but intermittently fails otherwise
token: ${{ secrets.CODECOV_TOKEN }}
@@ -299,7 +299,7 @@ jobs:
path: src/
-
name: Upload coverage to Codecov
- uses: codecov/codecov-action@v3
+ uses: codecov/codecov-action@v4
with:
# not required for public repos, but intermittently fails otherwise
token: ${{ secrets.CODECOV_TOKEN }}
diff --git a/README.md b/README.md
index 612cf954f..75c8d8edd 100644
--- a/README.md
+++ b/README.md
@@ -3,6 +3,7 @@
[](https://docs.paperless-ngx.com)
[](https://codecov.io/gh/paperless-ngx/paperless-ngx)
[](https://matrix.to/#/%23paperlessngx%3Amatrix.org)
+[](https://demo.paperless-ngx.com)
@@ -20,6 +21,8 @@ Paperless-ngx is a document management system that transforms your physical docu
Paperless-ngx is the official successor to the original [Paperless](https://github.com/the-paperless-project/paperless) & [Paperless-ng](https://github.com/jonaswinkler/paperless-ng) projects and is designed to distribute the responsibility of advancing and supporting the project among a team of people. [Consider joining us!](#community-support)
+Thanks to the generous folks at [DigitalOcean](https://m.do.co/c/8d70b916d462), a demo is available at [demo.paperless-ngx.com](https://demo.paperless-ngx.com) using login `demo` / `demo`. _Note: demo content is reset frequently and confidential information should not be uploaded._
+
- [Features](#features)
- [Getting started](#getting-started)
- [Contributing](#contributing)
@@ -30,6 +33,16 @@ Paperless-ngx is the official successor to the original [Paperless](https://gith
- [Affiliated Projects](#affiliated-projects)
- [Important Note](#important-note)
+This project is supported by:
+
+
+
+
+
+
+
+
+
# Features
diff --git a/docker/paperless_cmd.sh b/docker/paperless_cmd.sh
index 81a7c6334..afedb1599 100755
--- a/docker/paperless_cmd.sh
+++ b/docker/paperless_cmd.sh
@@ -1,14 +1,15 @@
#!/usr/bin/env bash
+SUPERVISORD_WORKING_DIR="${PAPERLESS_SUPERVISORD_WORKING_DIR:-$PWD}"
rootless_args=()
if [ "$(id -u)" == "$(id -u paperless)" ]; then
rootless_args=(
--user
paperless
--logfile
- supervisord.log
+ "${SUPERVISORD_WORKING_DIR}/supervisord.log"
--pidfile
- supervisord.pid
+ "${SUPERVISORD_WORKING_DIR}/supervisord.pid"
)
fi
diff --git a/docs/advanced_usage.md b/docs/advanced_usage.md
index 1d76b10d6..04626fe41 100644
--- a/docs/advanced_usage.md
+++ b/docs/advanced_usage.md
@@ -517,6 +517,18 @@ existing tables) with:
an older system may fix issues that can arise while setting up Paperless-ngx but
`utf8mb3` can cause issues with consumption (where `utf8mb4` does not).
+### Missing timezones
+
+MySQL as well as MariaDB do not have any timezone information by default (though some
+docker images such as the official MariaDB image take care of this for you) which will
+cause unexpected behavior with date-based queries.
+
+To fix this, execute one of the following commands:
+
+MySQL: `mysql_tzinfo_to_sql /usr/share/zoneinfo | mysql -u root mysql -p`
+
+MariaDB: `mariadb-tzinfo-to-sql /usr/share/zoneinfo | mariadb -u root mysql -p`
+
## Barcodes {#barcodes}
Paperless is able to utilize barcodes for automatically performing some tasks.
diff --git a/docs/api.md b/docs/api.md
index 97ccf4c3a..bd5154ada 100644
--- a/docs/api.md
+++ b/docs/api.md
@@ -139,7 +139,7 @@ document. Paperless only reports PDF metadata at this point.
## Authorization
-The REST api provides three different forms of authentication.
+The REST api provides four different forms of authentication.
1. Basic authentication
@@ -177,6 +177,12 @@ The REST api provides three different forms of authentication.
Tokens can also be managed in the Django admin.
+4. Remote User authentication
+
+ If enabled (see
+ [configuration](configuration.md#PAPERLESS_ENABLE_HTTP_REMOTE_USER_API)),
+ you can authenticate against the API using Remote User auth.
+
## Searching for documents
Full text searching is available on the `/api/documents/` endpoint. Two
@@ -185,7 +191,7 @@ results:
- `/api/documents/?query=your%20search%20query`: Search for a document
using a full text query. For details on the syntax, see [Basic Usage - Searching](usage.md#basic-usage_searching).
-- `/api/documents/?more_like=1234`: Search for documents similar to
+- `/api/documents/?more_like_id=1234`: Search for documents similar to
the document with id 1234.
Pagination works exactly the same as it does for normal requests on this
@@ -324,6 +330,64 @@ granted). You can pass the parameter `full_perms=true` to API calls to view the
full permissions of objects in a format that mirrors the `set_permissions`
parameter above.
+## Bulk Editing
+
+The API supports various bulk-editing operations which are executed asynchronously.
+
+### Documents
+
+For bulk operations on documents, use the endpoint `/api/bulk_edit/` which accepts
+a json payload of the format:
+
+```json
+{
+ "documents": [LIST_OF_DOCUMENT_IDS],
+ "method": METHOD, // see below
+ "parameters": args // see below
+}
+```
+
+The following methods are supported:
+
+- `set_correspondent`
+ - Requires `parameters`: `{ "correspondent": CORRESPONDENT_ID }`
+- `set_document_type`
+ - Requires `parameters`: `{ "document_type": DOCUMENT_TYPE_ID }`
+- `set_storage_path`
+ - Requires `parameters`: `{ "storage_path": STORAGE_PATH_ID }`
+- `add_tag`
+ - Requires `parameters`: `{ "tag": TAG_ID }`
+- `remove_tag`
+ - Requires `parameters`: `{ "tag": TAG_ID }`
+- `modify_tags`
+ - Requires `parameters`: `{ "add_tags": [LIST_OF_TAG_IDS] }` and / or `{ "remove_tags": [LIST_OF_TAG_IDS] }`
+- `delete`
+ - No `parameters` required
+- `redo_ocr`
+ - No `parameters` required
+- `set_permissions`
+ - Requires `parameters`:
+ - `"permissions": PERMISSIONS_OBJ` (see format [above](#permissions)) and / or
+ - `"owner": OWNER_ID or null`
+ - `"merge": true or false` (defaults to false)
+ - The `merge` flag determines if the supplied permissions will overwrite all existing permissions (including
+ removing them) or be merged with existing permissions.
+
+### Objects
+
+Bulk editing for objects (tags, document types etc.) currently supports only updating permissions, using
+the endpoint: `/api/bulk_edit_object_perms/` which requires a json payload of the format:
+
+```json
+{
+ "objects": [LIST_OF_OBJECT_IDS],
+ "object_type": "tags", "correspondents", "document_types" or "storage_paths"
+ "owner": OWNER_ID // optional
+ "permissions": { "view": { "users": [] ... }, "change": { ... } }, // (see 'set_permissions' format above)
+ "merge": true / false // defaults to false, see above
+}
+```
+
## API Versioning
The REST API is versioned since Paperless-ngx 1.3.0.
@@ -380,3 +444,13 @@ Initial API version.
color to use for a specific tag, which is either black or white
depending on the brightness of `Tag.color`.
- Removed field `Tag.colour`.
+
+#### Version 3
+
+- Permissions endpoints have been added.
+- The format of the `/api/ui_settings/` has changed.
+
+#### Version 4
+
+- Consumption templates were refactored to workflows and API endpoints
+ changed as such.
diff --git a/docs/changelog.md b/docs/changelog.md
index 0607d8b56..4009bb584 100644
--- a/docs/changelog.md
+++ b/docs/changelog.md
@@ -1,5 +1,15 @@
# Changelog
+## paperless-ngx 2.4.3
+
+### Bug Fixes
+
+- Fix: Ensure the scratch directory exists before consuming via the folder [@stumpylog](https://github.com/stumpylog) ([#5579](https://github.com/paperless-ngx/paperless-ngx/pull/5579))
+
+### All App Changes
+
+- Fix: Ensure the scratch directory exists before consuming via the folder [@stumpylog](https://github.com/stumpylog) ([#5579](https://github.com/paperless-ngx/paperless-ngx/pull/5579))
+
## paperless-ngx 2.4.2
### Bug Fixes
diff --git a/docs/configuration.md b/docs/configuration.md
index 525b834dd..e99e0a085 100644
--- a/docs/configuration.md
+++ b/docs/configuration.md
@@ -34,6 +34,8 @@ matcher.
`redis://:@:`
- With the requirepass option PAPERLESS_REDIS =
`redis://:@:`
+ - To include the redis database index PAPERLESS_REDIS =
+ `redis://:@:/`
[More information on securing your Redis
Instance](https://redis.io/docs/getting-started/#securing-redis).
@@ -462,9 +464,21 @@ applications.
Defaults to "false" which disables this feature.
+#### [`PAPERLESS_ENABLE_HTTP_REMOTE_USER_API=`](#PAPERLESS_ENABLE_HTTP_REMOTE_USER_API) {#PAPERLESS_ENABLE_HTTP_REMOTE_USER_API}
+
+: Allows authentication via HTTP_REMOTE_USER directly against the API
+
+ !!! warning
+
+ See the warning above about securing your installation when using remote user header authentication. This setting is separate from
+ `PAPERLESS_ENABLE_HTTP_REMOTE_USER` to avoid introducing a security vulnerability to existing reverse proxy setups. As above,
+ ensure that your reverse proxy does not simply pass the `Remote-User` header from the internet to paperless.
+
+ Defaults to "false" which disables this feature.
+
#### [`PAPERLESS_HTTP_REMOTE_USER_HEADER_NAME=`](#PAPERLESS_HTTP_REMOTE_USER_HEADER_NAME) {#PAPERLESS_HTTP_REMOTE_USER_HEADER_NAME}
-: If "PAPERLESS_ENABLE_HTTP_REMOTE_USER" is enabled, this
+: If "PAPERLESS_ENABLE_HTTP_REMOTE_USER" or `PAPERLESS_ENABLE_HTTP_REMOTE_USER_API` are enabled, this
property allows to customize the name of the HTTP header from which
the authenticated username is extracted. Values are in terms of
[HttpRequest.META](https://docs.djangoproject.com/en/4.1/ref/request-response/#django.http.HttpRequest.META).
@@ -1378,6 +1392,12 @@ started by the container.
You can read more about this in the [advanced documentation](advanced_usage.md#celery-monitoring).
+#### [`PAPERLESS_SUPERVISORD_WORKING_DIR=`](#PAPERLESS_SUPERVISORD_WORKING_DIR) {#PAPERLESS_SUPERVISORD_WORKING_DIR}
+
+: If this environment variable is defined, the `supervisord.log` and `supervisord.pid` file will be created under the specified path in `PAPERLESS_SUPERVISORD_WORKING_DIR`. Setting `PAPERLESS_SUPERVISORD_WORKING_DIR=/tmp` and `PYTHONPYCACHEPREFIX=/tmp/pycache` would allow paperless to work on a read-only filesystem.
+
+ Please take note that the `PAPERLESS_DATA_DIR` and `PAPERLESS_MEDIA_ROOT` paths still have to be writable, just like the `PAPERLESS_SUPERVISORD_WORKING_DIR`. The can be archived by using bind or volume mounts. Only works in the container is run as user *paperless*
+
## Frontend Settings
#### [`PAPERLESS_APP_TITLE=`](#PAPERLESS_APP_TITLE) {#PAPERLESS_APP_TITLE}
diff --git a/docs/index.md b/docs/index.md
index 58a943566..c54171106 100644
--- a/docs/index.md
+++ b/docs/index.md
@@ -6,6 +6,14 @@
physical documents into a searchable online archive so you can keep, well, _less paper_.
[Get started](setup.md){ .md-button .md-button--primary .index-callout }
+[Demo](https://demo.paperless-ngx.com){ .md-button .md-button--secondary target=\_blank }
+
+
diff --git a/mkdocs.yml b/mkdocs.yml
index 8e1e822af..7aa0a89e1 100644
--- a/mkdocs.yml
+++ b/mkdocs.yml
@@ -73,4 +73,6 @@ extra:
link: https://matrix.to/#/#paperless:matrix.org
plugins:
- search
- - glightbox
+ - glightbox:
+ skip_classes:
+ - no-lightbox
diff --git a/src-ui/angular.json b/src-ui/angular.json
index ad328c072..92f15d769 100644
--- a/src-ui/angular.json
+++ b/src-ui/angular.json
@@ -31,6 +31,7 @@
"fr-FR": "src/locale/messages.fr_FR.xlf",
"hu-HU": "src/locale/messages.hu_HU.xlf",
"it-IT": "src/locale/messages.it_IT.xlf",
+ "ja-JP": "src/locale/messages.ja_JP.xlf",
"lb-LU": "src/locale/messages.lb_LU.xlf",
"nl-NL": "src/locale/messages.nl_NL.xlf",
"no-NO": "src/locale/messages.no_NO.xlf",
diff --git a/src-ui/e2e/dashboard/requests/api-dashboard2.har b/src-ui/e2e/dashboard/requests/api-dashboard2.har
index 2436a6272..b3c2dda5a 100644
--- a/src-ui/e2e/dashboard/requests/api-dashboard2.har
+++ b/src-ui/e2e/dashboard/requests/api-dashboard2.har
@@ -2700,7 +2700,7 @@
"bodySize": -1
},
"response": {
- "status": -1,
+ "status": 200,
"statusText": "",
"httpVersion": "HTTP/1.1",
"cookies": [],
@@ -2734,7 +2734,7 @@
"bodySize": -1
},
"response": {
- "status": -1,
+ "status": 200,
"statusText": "",
"httpVersion": "HTTP/1.1",
"cookies": [],
@@ -2768,7 +2768,7 @@
"bodySize": -1
},
"response": {
- "status": -1,
+ "status": 200,
"statusText": "",
"httpVersion": "HTTP/1.1",
"cookies": [],
@@ -2802,7 +2802,7 @@
"bodySize": -1
},
"response": {
- "status": -1,
+ "status": 200,
"statusText": "",
"httpVersion": "HTTP/1.1",
"cookies": [],
@@ -2836,7 +2836,7 @@
"bodySize": -1
},
"response": {
- "status": -1,
+ "status": 200,
"statusText": "",
"httpVersion": "HTTP/1.1",
"cookies": [],
@@ -2870,7 +2870,7 @@
"bodySize": -1
},
"response": {
- "status": -1,
+ "status": 200,
"statusText": "",
"httpVersion": "HTTP/1.1",
"cookies": [],
@@ -2904,7 +2904,7 @@
"bodySize": -1
},
"response": {
- "status": -1,
+ "status": 200,
"statusText": "",
"httpVersion": "HTTP/1.1",
"cookies": [],
@@ -2938,7 +2938,7 @@
"bodySize": -1
},
"response": {
- "status": -1,
+ "status": 200,
"statusText": "",
"httpVersion": "HTTP/1.1",
"cookies": [],
@@ -2972,7 +2972,7 @@
"bodySize": -1
},
"response": {
- "status": -1,
+ "status": 200,
"statusText": "",
"httpVersion": "HTTP/1.1",
"cookies": [],
@@ -3006,7 +3006,7 @@
"bodySize": -1
},
"response": {
- "status": -1,
+ "status": 200,
"statusText": "",
"httpVersion": "HTTP/1.1",
"cookies": [],
@@ -3040,7 +3040,7 @@
"bodySize": -1
},
"response": {
- "status": -1,
+ "status": 200,
"statusText": "",
"httpVersion": "HTTP/1.1",
"cookies": [],
@@ -3074,7 +3074,7 @@
"bodySize": -1
},
"response": {
- "status": -1,
+ "status": 200,
"statusText": "",
"httpVersion": "HTTP/1.1",
"cookies": [],
@@ -3108,7 +3108,7 @@
"bodySize": -1
},
"response": {
- "status": -1,
+ "status": 200,
"statusText": "",
"httpVersion": "HTTP/1.1",
"cookies": [],
@@ -3142,7 +3142,7 @@
"bodySize": -1
},
"response": {
- "status": -1,
+ "status": 200,
"statusText": "",
"httpVersion": "HTTP/1.1",
"cookies": [],
@@ -3176,7 +3176,7 @@
"bodySize": -1
},
"response": {
- "status": -1,
+ "status": 200,
"statusText": "",
"httpVersion": "HTTP/1.1",
"cookies": [],
@@ -3210,7 +3210,7 @@
"bodySize": -1
},
"response": {
- "status": -1,
+ "status": 200,
"statusText": "",
"httpVersion": "HTTP/1.1",
"cookies": [],
@@ -3244,7 +3244,7 @@
"bodySize": -1
},
"response": {
- "status": -1,
+ "status": 200,
"statusText": "",
"httpVersion": "HTTP/1.1",
"cookies": [],
@@ -3278,7 +3278,7 @@
"bodySize": -1
},
"response": {
- "status": -1,
+ "status": 200,
"statusText": "",
"httpVersion": "HTTP/1.1",
"cookies": [],
@@ -3312,7 +3312,7 @@
"bodySize": -1
},
"response": {
- "status": -1,
+ "status": 200,
"statusText": "",
"httpVersion": "HTTP/1.1",
"cookies": [],
diff --git a/src-ui/e2e/dashboard/requests/api-dashboard4.har b/src-ui/e2e/dashboard/requests/api-dashboard4.har
index ca0101d59..dff0c3202 100644
--- a/src-ui/e2e/dashboard/requests/api-dashboard4.har
+++ b/src-ui/e2e/dashboard/requests/api-dashboard4.har
@@ -425,7 +425,7 @@
"bodySize": -1
},
"response": {
- "status": -1,
+ "status": 200,
"statusText": "",
"httpVersion": "HTTP/1.1",
"cookies": [],
@@ -470,7 +470,7 @@
"bodySize": -1
},
"response": {
- "status": -1,
+ "status": 200,
"statusText": "",
"httpVersion": "HTTP/1.1",
"cookies": [],
@@ -645,7 +645,7 @@
"bodySize": -1
},
"response": {
- "status": -1,
+ "status": 200,
"statusText": "",
"httpVersion": "HTTP/1.1",
"cookies": [],
@@ -685,7 +685,7 @@
"bodySize": -1
},
"response": {
- "status": -1,
+ "status": 200,
"statusText": "",
"httpVersion": "HTTP/1.1",
"cookies": [],
@@ -729,7 +729,7 @@
"bodySize": -1
},
"response": {
- "status": -1,
+ "status": 200,
"statusText": "",
"httpVersion": "HTTP/1.1",
"cookies": [],
diff --git a/src-ui/e2e/document-detail/requests/api-document-detail.har b/src-ui/e2e/document-detail/requests/api-document-detail.har
index c3892a121..15705a4b3 100644
--- a/src-ui/e2e/document-detail/requests/api-document-detail.har
+++ b/src-ui/e2e/document-detail/requests/api-document-detail.har
@@ -843,7 +843,7 @@
"bodySize": -1
},
"response": {
- "status": -1,
+ "status": 200,
"statusText": "",
"httpVersion": "HTTP/1.1",
"cookies": [],
@@ -994,7 +994,7 @@
"bodySize": -1
},
"response": {
- "status": -1,
+ "status": 200,
"statusText": "",
"httpVersion": "HTTP/1.1",
"cookies": [],
diff --git a/src-ui/e2e/document-detail/requests/api-document-detail2.har b/src-ui/e2e/document-detail/requests/api-document-detail2.har
index ee3166211..30cf005b8 100644
--- a/src-ui/e2e/document-detail/requests/api-document-detail2.har
+++ b/src-ui/e2e/document-detail/requests/api-document-detail2.har
@@ -996,7 +996,7 @@
"bodySize": -1
},
"response": {
- "status": -1,
+ "status": 200,
"statusText": "",
"httpVersion": "HTTP/1.1",
"cookies": [],
@@ -1301,7 +1301,7 @@
"bodySize": -1
},
"response": {
- "status": -1,
+ "status": 200,
"statusText": "",
"httpVersion": "HTTP/1.1",
"cookies": [],
@@ -1484,7 +1484,7 @@
"bodySize": -1
},
"response": {
- "status": -1,
+ "status": 200,
"statusText": "",
"httpVersion": "HTTP/1.1",
"cookies": [],
@@ -1518,7 +1518,7 @@
"bodySize": -1
},
"response": {
- "status": -1,
+ "status": 200,
"statusText": "",
"httpVersion": "HTTP/1.1",
"cookies": [],
@@ -1552,7 +1552,7 @@
"bodySize": -1
},
"response": {
- "status": -1,
+ "status": 200,
"statusText": "",
"httpVersion": "HTTP/1.1",
"cookies": [],
@@ -1586,7 +1586,7 @@
"bodySize": -1
},
"response": {
- "status": -1,
+ "status": 200,
"statusText": "",
"httpVersion": "HTTP/1.1",
"cookies": [],
@@ -1620,7 +1620,7 @@
"bodySize": -1
},
"response": {
- "status": -1,
+ "status": 200,
"statusText": "",
"httpVersion": "HTTP/1.1",
"cookies": [],
@@ -1654,7 +1654,7 @@
"bodySize": -1
},
"response": {
- "status": -1,
+ "status": 200,
"statusText": "",
"httpVersion": "HTTP/1.1",
"cookies": [],
@@ -1688,7 +1688,7 @@
"bodySize": -1
},
"response": {
- "status": -1,
+ "status": 200,
"statusText": "",
"httpVersion": "HTTP/1.1",
"cookies": [],
@@ -1722,7 +1722,7 @@
"bodySize": -1
},
"response": {
- "status": -1,
+ "status": 200,
"statusText": "",
"httpVersion": "HTTP/1.1",
"cookies": [],
@@ -1756,7 +1756,7 @@
"bodySize": -1
},
"response": {
- "status": -1,
+ "status": 200,
"statusText": "",
"httpVersion": "HTTP/1.1",
"cookies": [],
@@ -1790,7 +1790,7 @@
"bodySize": -1
},
"response": {
- "status": -1,
+ "status": 200,
"statusText": "",
"httpVersion": "HTTP/1.1",
"cookies": [],
@@ -1824,7 +1824,7 @@
"bodySize": -1
},
"response": {
- "status": -1,
+ "status": 200,
"statusText": "",
"httpVersion": "HTTP/1.1",
"cookies": [],
@@ -1858,7 +1858,7 @@
"bodySize": -1
},
"response": {
- "status": -1,
+ "status": 200,
"statusText": "",
"httpVersion": "HTTP/1.1",
"cookies": [],
@@ -1892,7 +1892,7 @@
"bodySize": -1
},
"response": {
- "status": -1,
+ "status": 200,
"statusText": "",
"httpVersion": "HTTP/1.1",
"cookies": [],
@@ -1926,7 +1926,7 @@
"bodySize": -1
},
"response": {
- "status": -1,
+ "status": 200,
"statusText": "",
"httpVersion": "HTTP/1.1",
"cookies": [],
@@ -1960,7 +1960,7 @@
"bodySize": -1
},
"response": {
- "status": -1,
+ "status": 200,
"statusText": "",
"httpVersion": "HTTP/1.1",
"cookies": [],
@@ -1994,7 +1994,7 @@
"bodySize": -1
},
"response": {
- "status": -1,
+ "status": 200,
"statusText": "",
"httpVersion": "HTTP/1.1",
"cookies": [],
@@ -2028,7 +2028,7 @@
"bodySize": -1
},
"response": {
- "status": -1,
+ "status": 200,
"statusText": "",
"httpVersion": "HTTP/1.1",
"cookies": [],
@@ -2062,7 +2062,7 @@
"bodySize": -1
},
"response": {
- "status": -1,
+ "status": 200,
"statusText": "",
"httpVersion": "HTTP/1.1",
"cookies": [],
@@ -2096,7 +2096,7 @@
"bodySize": -1
},
"response": {
- "status": -1,
+ "status": 200,
"statusText": "",
"httpVersion": "HTTP/1.1",
"cookies": [],
@@ -2130,7 +2130,7 @@
"bodySize": -1
},
"response": {
- "status": -1,
+ "status": 200,
"statusText": "",
"httpVersion": "HTTP/1.1",
"cookies": [],
@@ -2164,7 +2164,7 @@
"bodySize": -1
},
"response": {
- "status": -1,
+ "status": 200,
"statusText": "",
"httpVersion": "HTTP/1.1",
"cookies": [],
@@ -2198,7 +2198,7 @@
"bodySize": -1
},
"response": {
- "status": -1,
+ "status": 200,
"statusText": "",
"httpVersion": "HTTP/1.1",
"cookies": [],
@@ -2232,7 +2232,7 @@
"bodySize": -1
},
"response": {
- "status": -1,
+ "status": 200,
"statusText": "",
"httpVersion": "HTTP/1.1",
"cookies": [],
@@ -2266,7 +2266,7 @@
"bodySize": -1
},
"response": {
- "status": -1,
+ "status": 200,
"statusText": "",
"httpVersion": "HTTP/1.1",
"cookies": [],
@@ -2300,7 +2300,7 @@
"bodySize": -1
},
"response": {
- "status": -1,
+ "status": 200,
"statusText": "",
"httpVersion": "HTTP/1.1",
"cookies": [],
@@ -2334,7 +2334,7 @@
"bodySize": -1
},
"response": {
- "status": -1,
+ "status": 200,
"statusText": "",
"httpVersion": "HTTP/1.1",
"cookies": [],
@@ -2368,7 +2368,7 @@
"bodySize": -1
},
"response": {
- "status": -1,
+ "status": 200,
"statusText": "",
"httpVersion": "HTTP/1.1",
"cookies": [],
@@ -2402,7 +2402,7 @@
"bodySize": -1
},
"response": {
- "status": -1,
+ "status": 200,
"statusText": "",
"httpVersion": "HTTP/1.1",
"cookies": [],
@@ -2436,7 +2436,7 @@
"bodySize": -1
},
"response": {
- "status": -1,
+ "status": 200,
"statusText": "",
"httpVersion": "HTTP/1.1",
"cookies": [],
@@ -2470,7 +2470,7 @@
"bodySize": -1
},
"response": {
- "status": -1,
+ "status": 200,
"statusText": "",
"httpVersion": "HTTP/1.1",
"cookies": [],
diff --git a/src-ui/messages.xlf b/src-ui/messages.xlf
index e7263e0f2..9f163e3b8 100644
--- a/src-ui/messages.xlf
+++ b/src-ui/messages.xlf
@@ -458,7 +458,7 @@
src/app/components/admin/settings/settings.component.html
- 338
+ 346
src/app/components/common/edit-dialog/correspondent-edit-dialog/correspondent-edit-dialog.component.html
@@ -600,7 +600,7 @@
src/app/components/admin/settings/settings.component.html
- 326
+ 334
src/app/components/admin/tasks/tasks.component.html
@@ -620,7 +620,7 @@
src/app/components/common/permissions-dialog/permissions-dialog.component.html
- 20
+ 23
src/app/components/dashboard/dashboard.component.html
@@ -667,7 +667,7 @@
src/app/components/admin/settings/settings.component.html
- 285
+ 293
src/app/components/app-frame/app-frame.component.html
@@ -878,39 +878,53 @@
157
+
+ Document editing
+
+ src/app/components/admin/settings/settings.component.html
+ 161
+
+
+
+ Automatically remove inbox tag(s) on save
+
+ src/app/components/admin/settings/settings.component.html
+ 165
+
+
Bulk editing
src/app/components/admin/settings/settings.component.html
- 161
+ 169
Show confirmation dialogs
src/app/components/admin/settings/settings.component.html
- 165
+ 173
Deleting documents will always ask for confirmation.
src/app/components/admin/settings/settings.component.html
- 165
+ 173
Apply on close
src/app/components/admin/settings/settings.component.html
- 166
+ 174
Notes
src/app/components/admin/settings/settings.component.html
- 170
+ 178
src/app/components/document-list/document-list.component.html
@@ -918,21 +932,21 @@
src/app/services/rest/document.service.ts
- 25
+ 32
Enable notes
src/app/components/admin/settings/settings.component.html
- 174
+ 182
Permissions
src/app/components/admin/settings/settings.component.html
- 182
+ 190
src/app/components/common/edit-dialog/group-edit-dialog/group-edit-dialog.component.html
@@ -952,11 +966,11 @@
src/app/components/document-list/bulk-editor/bulk-editor.component.html
- 70
+ 78
src/app/components/document-list/filter-editor/filter-editor.component.html
- 82
+ 90
src/app/components/manage/mail/mail.component.html
@@ -987,28 +1001,28 @@
Default Permissions
src/app/components/admin/settings/settings.component.html
- 185
+ 193
Settings apply to this user account for objects (Tags, Mail Rules, etc.) created via the web UI
src/app/components/admin/settings/settings.component.html
- 189,191
+ 197,199
Default Owner
src/app/components/admin/settings/settings.component.html
- 196
+ 204
Objects without an owner can be viewed and edited by all users
src/app/components/admin/settings/settings.component.html
- 200
+ 208
src/app/components/common/input/permissions/permissions-form/permissions-form.component.html
@@ -1019,18 +1033,18 @@
Default View Permissions
src/app/components/admin/settings/settings.component.html
- 205
+ 213
Users:
src/app/components/admin/settings/settings.component.html
- 210
+ 218
src/app/components/admin/settings/settings.component.html
- 237
+ 245
src/app/components/common/edit-dialog/workflow-edit-dialog/workflow-edit-dialog.component.html
@@ -1053,11 +1067,11 @@
Groups:
src/app/components/admin/settings/settings.component.html
- 220
+ 228
src/app/components/admin/settings/settings.component.html
- 247
+ 255
src/app/components/common/edit-dialog/workflow-edit-dialog/workflow-edit-dialog.component.html
@@ -1080,14 +1094,14 @@
Default Edit Permissions
src/app/components/admin/settings/settings.component.html
- 232
+ 240
Edit permissions also grant viewing permissions
src/app/components/admin/settings/settings.component.html
- 256
+ 264
src/app/components/common/edit-dialog/workflow-edit-dialog/workflow-edit-dialog.component.html
@@ -1102,56 +1116,56 @@
Notifications
src/app/components/admin/settings/settings.component.html
- 264
+ 272
Document processing
src/app/components/admin/settings/settings.component.html
- 267
+ 275
Show notifications when new documents are detected
src/app/components/admin/settings/settings.component.html
- 271
+ 279
Show notifications when document processing completes successfully
src/app/components/admin/settings/settings.component.html
- 272
+ 280
Show notifications when document processing fails
src/app/components/admin/settings/settings.component.html
- 273
+ 281
Suppress notifications on dashboard
src/app/components/admin/settings/settings.component.html
- 274
+ 282
This will suppress all messages about document processing status on the dashboard.
src/app/components/admin/settings/settings.component.html
- 274
+ 282
Saved views
src/app/components/admin/settings/settings.component.html
- 282
+ 290
src/app/components/app-frame/app-frame.component.html
@@ -1162,14 +1176,14 @@
Show warning when closing saved views with unsaved changes
src/app/components/admin/settings/settings.component.html
- 288
+ 296
Views
src/app/components/admin/settings/settings.component.html
- 292
+ 300
src/app/components/document-list/document-list.component.html
@@ -1180,7 +1194,7 @@
Name
src/app/components/admin/settings/settings.component.html
- 298
+ 306
src/app/components/admin/tasks/tasks.component.html
@@ -1287,14 +1301,14 @@
Appears on
src/app/components/admin/settings/settings.component.html
- 302,303
+ 310,311
Show on dashboard
src/app/components/admin/settings/settings.component.html
- 305
+ 313
src/app/components/document-list/save-view-config-dialog/save-view-config-dialog.component.html
@@ -1305,7 +1319,7 @@
Show in sidebar
src/app/components/admin/settings/settings.component.html
- 309
+ 317
src/app/components/document-list/save-view-config-dialog/save-view-config-dialog.component.html
@@ -1316,7 +1330,7 @@
Actions
src/app/components/admin/settings/settings.component.html
- 313
+ 321
src/app/components/admin/tasks/tasks.component.html
@@ -1340,7 +1354,7 @@
src/app/components/document-list/bulk-editor/bulk-editor.component.html
- 76
+ 84
src/app/components/manage/custom-fields/custom-fields.component.html
@@ -1379,7 +1393,7 @@
Delete
src/app/components/admin/settings/settings.component.html
- 314
+ 322
src/app/components/admin/users-groups/users-groups.component.html
@@ -1415,7 +1429,7 @@
src/app/components/document-list/bulk-editor/bulk-editor.component.html
- 128
+ 136
src/app/components/manage/custom-fields/custom-fields.component.html
@@ -1474,7 +1488,7 @@
No saved views defined.
src/app/components/admin/settings/settings.component.html
- 320
+ 328
@@ -1495,7 +1509,7 @@
Error retrieving users
src/app/components/admin/settings/settings.component.ts
- 158
+ 159
src/app/components/admin/users-groups/users-groups.component.ts
@@ -1506,7 +1520,7 @@
Error retrieving groups
src/app/components/admin/settings/settings.component.ts
- 177
+ 178
src/app/components/admin/users-groups/users-groups.component.ts
@@ -1517,35 +1531,35 @@
Saved view " " deleted.
src/app/components/admin/settings/settings.component.ts
- 376
+ 380
Settings were saved successfully.
src/app/components/admin/settings/settings.component.ts
- 498
+ 506
Settings were saved successfully. Reload is required to apply some changes.
src/app/components/admin/settings/settings.component.ts
- 502
+ 510
Reload now
src/app/components/admin/settings/settings.component.ts
- 503
+ 511
An error occurred while saving settings.
src/app/components/admin/settings/settings.component.ts
- 513
+ 521
src/app/components/app-frame/app-frame.component.ts
@@ -1556,7 +1570,7 @@
Error while storing settings on server.
src/app/components/admin/settings/settings.component.ts
- 547
+ 555
@@ -1613,11 +1627,11 @@
src/app/components/document-list/filter-editor/filter-editor.component.html
- 68
+ 76
src/app/services/rest/document.service.ts
- 22
+ 29
@@ -1787,7 +1801,7 @@
src/app/components/common/permissions-filter-dropdown/permissions-filter-dropdown.component.html
- 76
+ 77
@@ -1843,7 +1857,7 @@
src/app/components/dashboard/widgets/saved-view-widget/saved-view-widget.component.html
- 27
+ 33
src/app/components/document-list/document-card-large/document-card-large.component.html
@@ -1967,15 +1981,15 @@
src/app/components/document-detail/document-detail.component.ts
- 733
+ 762
src/app/components/document-list/bulk-editor/bulk-editor.component.ts
- 461
+ 489
src/app/components/document-list/bulk-editor/bulk-editor.component.ts
- 500
+ 528
src/app/components/manage/custom-fields/custom-fields.component.ts
@@ -2006,11 +2020,11 @@
src/app/components/document-detail/document-detail.component.ts
- 735
+ 764
src/app/components/document-list/bulk-editor/bulk-editor.component.ts
- 502
+ 530
src/app/components/manage/custom-fields/custom-fields.component.ts
@@ -2237,7 +2251,7 @@
src/app/components/dashboard/widgets/saved-view-widget/saved-view-widget.component.html
- 18
+ 19
src/app/components/dashboard/widgets/statistics-widget/statistics-widget.component.html
@@ -2245,11 +2259,11 @@
src/app/components/document-list/bulk-editor/bulk-editor.component.html
- 20
+ 21
src/app/components/document-list/filter-editor/filter-editor.component.html
- 32
+ 33
@@ -2438,23 +2452,23 @@
src/app/components/common/permissions-dialog/permissions-dialog.component.html
- 23
+ 26
src/app/components/document-list/bulk-editor/bulk-editor.component.ts
- 323
+ 351
src/app/components/document-list/bulk-editor/bulk-editor.component.ts
- 363
+ 391
src/app/components/document-list/bulk-editor/bulk-editor.component.ts
- 401
+ 429
src/app/components/document-list/bulk-editor/bulk-editor.component.ts
- 439
+ 467
@@ -2505,7 +2519,7 @@
src/app/components/common/permissions-dialog/permissions-dialog.component.html
- 22
+ 25
src/app/components/common/profile-edit-dialog/profile-edit-dialog.component.html
@@ -3923,6 +3937,13 @@
15
+
+ Merge with existing permissions
+
+ src/app/components/common/permissions-dialog/permissions-dialog.component.html
+ 14
+
+
Set permissions
@@ -3937,11 +3958,18 @@
33
-
- Note that permissions set here will override any existing permissions
+
+ Existing owner, user and group permissions will be merged with these settings.
src/app/components/common/permissions-dialog/permissions-dialog.component.ts
- 71
+ 74
+
+
+
+ Any and all existing owner, user and group permissions will be replaced.
+
+ src/app/components/common/permissions-dialog/permissions-dialog.component.ts
+ 75
@@ -3976,7 +4004,7 @@
Hide unowned
src/app/components/common/permissions-filter-dropdown/permissions-filter-dropdown.component.html
- 86
+ 88
@@ -4327,18 +4355,18 @@
src/app/components/document-list/filter-editor/filter-editor.component.ts
- 109
+ 115
src/app/services/rest/document.service.ts
- 20
+ 27
Correspondent
src/app/components/dashboard/widgets/saved-view-widget/saved-view-widget.component.html
- 19
+ 22
src/app/components/document-detail/document-detail.component.html
@@ -4346,7 +4374,7 @@
src/app/components/document-list/bulk-editor/bulk-editor.component.html
- 32
+ 35
src/app/components/document-list/document-list.component.html
@@ -4354,25 +4382,25 @@
src/app/components/document-list/filter-editor/filter-editor.component.html
- 41
+ 44
src/app/services/rest/document.service.ts
- 19
+ 26
View Preview
src/app/components/dashboard/widgets/saved-view-widget/saved-view-widget.component.html
- 39
+ 47
Download
src/app/components/dashboard/widgets/saved-view-widget/saved-view-widget.component.html
- 47
+ 55
src/app/components/document-detail/document-detail.component.html
@@ -4380,7 +4408,7 @@
src/app/components/document-list/bulk-editor/bulk-editor.component.html
- 94
+ 102
src/app/components/document-list/document-card-large/document-card-large.component.html
@@ -4395,7 +4423,7 @@
No documents
src/app/components/dashboard/widgets/saved-view-widget/saved-view-widget.component.html
- 57
+ 65
@@ -4513,7 +4541,7 @@
src/app/components/document-list/bulk-editor/bulk-editor.component.ts
- 268
+ 296
this string is used to separate processing, failed and added on the file upload widget
@@ -4606,7 +4634,7 @@
src/app/components/document-list/bulk-editor/bulk-editor.component.html
- 79
+ 87
@@ -4667,7 +4695,7 @@
src/app/components/document-list/bulk-editor/bulk-editor.component.html
- 43
+ 48
src/app/components/document-list/document-list.component.html
@@ -4675,11 +4703,11 @@
src/app/components/document-list/filter-editor/filter-editor.component.html
- 49
+ 54
src/app/services/rest/document.service.ts
- 21
+ 28
@@ -4690,7 +4718,7 @@
src/app/components/document-list/bulk-editor/bulk-editor.component.html
- 54
+ 61
src/app/components/document-list/document-list.component.html
@@ -4698,7 +4726,7 @@
src/app/components/document-list/filter-editor/filter-editor.component.html
- 57
+ 64
@@ -4842,78 +4870,78 @@
An error occurred loading content:
src/app/components/document-detail/document-detail.component.ts
- 298,300
+ 325,327
Document changes detected
src/app/components/document-detail/document-detail.component.ts
- 321
+ 348
The version of this document in your browser session appears older than the existing version.
src/app/components/document-detail/document-detail.component.ts
- 322
+ 349
Saving the document here may overwrite other changes that were made. To restore the existing version, discard your changes or close the document.
src/app/components/document-detail/document-detail.component.ts
- 323
+ 350
Ok
src/app/components/document-detail/document-detail.component.ts
- 325
+ 352
Error retrieving metadata
src/app/components/document-detail/document-detail.component.ts
- 465
+ 492
Error retrieving suggestions.
src/app/components/document-detail/document-detail.component.ts
- 490
+ 517
Document saved successfully.
src/app/components/document-detail/document-detail.component.ts
- 608
+ 637
src/app/components/document-detail/document-detail.component.ts
- 617
+ 646
Error saving document
src/app/components/document-detail/document-detail.component.ts
- 621
+ 650
src/app/components/document-detail/document-detail.component.ts
- 662
+ 691
Confirm delete
src/app/components/document-detail/document-detail.component.ts
- 688
+ 717
src/app/components/manage/management-list/management-list.component.ts
@@ -4924,67 +4952,67 @@
Do you really want to delete document " "?
src/app/components/document-detail/document-detail.component.ts
- 689
+ 718
The files for this document will be deleted permanently. This operation cannot be undone.
src/app/components/document-detail/document-detail.component.ts
- 690
+ 719
Delete document
src/app/components/document-detail/document-detail.component.ts
- 692
+ 721
Error deleting document
src/app/components/document-detail/document-detail.component.ts
- 711
+ 740
Redo OCR confirm
src/app/components/document-detail/document-detail.component.ts
- 731
+ 760
src/app/components/document-list/bulk-editor/bulk-editor.component.ts
- 498
+ 526
This operation will permanently redo OCR for this document.
src/app/components/document-detail/document-detail.component.ts
- 732
+ 761
Redo OCR operation will begin in the background. Close and re-open or reload this document after the operation has completed to see new content.
src/app/components/document-detail/document-detail.component.ts
- 743
+ 772
Error executing operation
src/app/components/document-detail/document-detail.component.ts
- 754
+ 783
Page Fit
src/app/components/document-detail/document-detail.component.ts
- 823
+ 852
@@ -5005,97 +5033,97 @@
Filter tags
src/app/components/document-list/bulk-editor/bulk-editor.component.html
- 21
+ 22
src/app/components/document-list/filter-editor/filter-editor.component.html
- 33
+ 34
Filter correspondents
src/app/components/document-list/bulk-editor/bulk-editor.component.html
- 33
+ 36
src/app/components/document-list/filter-editor/filter-editor.component.html
- 42
+ 45
Filter document types
src/app/components/document-list/bulk-editor/bulk-editor.component.html
- 44
+ 49
src/app/components/document-list/filter-editor/filter-editor.component.html
- 50
+ 55
Filter storage paths
src/app/components/document-list/bulk-editor/bulk-editor.component.html
- 55
+ 62
src/app/components/document-list/filter-editor/filter-editor.component.html
- 58
+ 65
Include:
src/app/components/document-list/bulk-editor/bulk-editor.component.html
- 100
+ 108
Archived files
src/app/components/document-list/bulk-editor/bulk-editor.component.html
- 104,106
+ 112,114
Original files
src/app/components/document-list/bulk-editor/bulk-editor.component.html
- 110,112
+ 118,120
Use formatted filename
src/app/components/document-list/bulk-editor/bulk-editor.component.html
- 117,119
+ 125,127
Error executing bulk operation
src/app/components/document-list/bulk-editor/bulk-editor.component.ts
- 185
+ 213
" "
src/app/components/document-list/bulk-editor/bulk-editor.component.ts
- 260
+ 288
src/app/components/document-list/bulk-editor/bulk-editor.component.ts
- 266
+ 294
" " and " "
src/app/components/document-list/bulk-editor/bulk-editor.component.ts
- 262
+ 290
This is for messages like 'modify "tag1" and "tag2"'
@@ -5103,7 +5131,7 @@
and " "
src/app/components/document-list/bulk-editor/bulk-editor.component.ts
- 270,272
+ 298,300
this is for messages like 'modify "tag1", "tag2" and "tag3"'
@@ -5111,14 +5139,14 @@
Confirm tags assignment
src/app/components/document-list/bulk-editor/bulk-editor.component.ts
- 287
+ 315
This operation will add the tag " " to selected document(s).
src/app/components/document-list/bulk-editor/bulk-editor.component.ts
- 293
+ 321
@@ -5127,14 +5155,14 @@
)"/> to selected document(s).
src/app/components/document-list/bulk-editor/bulk-editor.component.ts
- 298,300
+ 326,328
This operation will remove the tag " " from selected document(s).
src/app/components/document-list/bulk-editor/bulk-editor.component.ts
- 306
+ 334
@@ -5143,7 +5171,7 @@
)"/> from selected document(s).
src/app/components/document-list/bulk-editor/bulk-editor.component.ts
- 311,313
+ 339,341
@@ -5154,98 +5182,98 @@
)"/> on selected document(s).
src/app/components/document-list/bulk-editor/bulk-editor.component.ts
- 315,319
+ 343,347
Confirm correspondent assignment
src/app/components/document-list/bulk-editor/bulk-editor.component.ts
- 356
+ 384
This operation will assign the correspondent " " to selected document(s).
src/app/components/document-list/bulk-editor/bulk-editor.component.ts
- 358
+ 386
This operation will remove the correspondent from selected document(s).
src/app/components/document-list/bulk-editor/bulk-editor.component.ts
- 360
+ 388
Confirm document type assignment
src/app/components/document-list/bulk-editor/bulk-editor.component.ts
- 394
+ 422
This operation will assign the document type " " to selected document(s).
src/app/components/document-list/bulk-editor/bulk-editor.component.ts
- 396
+ 424
This operation will remove the document type from selected document(s).
src/app/components/document-list/bulk-editor/bulk-editor.component.ts
- 398
+ 426
Confirm storage path assignment
src/app/components/document-list/bulk-editor/bulk-editor.component.ts
- 432
+ 460
This operation will assign the storage path " " to selected document(s).
src/app/components/document-list/bulk-editor/bulk-editor.component.ts
- 434
+ 462
This operation will remove the storage path from selected document(s).
src/app/components/document-list/bulk-editor/bulk-editor.component.ts
- 436
+ 464
Delete confirm
src/app/components/document-list/bulk-editor/bulk-editor.component.ts
- 459
+ 487
This operation will permanently delete selected document(s).
src/app/components/document-list/bulk-editor/bulk-editor.component.ts
- 460
+ 488
Delete document(s)
src/app/components/document-list/bulk-editor/bulk-editor.component.ts
- 463
+ 491
This operation will permanently redo OCR for selected document(s).
src/app/components/document-list/bulk-editor/bulk-editor.component.ts
- 499
+ 527
@@ -5460,7 +5488,7 @@
src/app/components/document-list/filter-editor/filter-editor.component.html
- 88
+ 96
@@ -5485,11 +5513,11 @@
src/app/components/document-list/filter-editor/filter-editor.component.ts
- 114
+ 120
src/app/services/rest/document.service.ts
- 18
+ 25
@@ -5521,7 +5549,7 @@
src/app/services/rest/document.service.ts
- 26
+ 33
@@ -5567,11 +5595,11 @@
src/app/components/document-list/filter-editor/filter-editor.component.html
- 74
+ 82
src/app/services/rest/document.service.ts
- 23
+ 30
@@ -5599,63 +5627,63 @@
Title & content
src/app/components/document-list/filter-editor/filter-editor.component.ts
- 112
+ 118
Custom fields
src/app/components/document-list/filter-editor/filter-editor.component.ts
- 117
+ 123
Advanced search
src/app/components/document-list/filter-editor/filter-editor.component.ts
- 121
+ 127
More like
src/app/components/document-list/filter-editor/filter-editor.component.ts
- 127
+ 133
equals
src/app/components/document-list/filter-editor/filter-editor.component.ts
- 133
+ 139
is empty
src/app/components/document-list/filter-editor/filter-editor.component.ts
- 137
+ 143
is not empty
src/app/components/document-list/filter-editor/filter-editor.component.ts
- 141
+ 147
greater than
src/app/components/document-list/filter-editor/filter-editor.component.ts
- 145
+ 151
less than
src/app/components/document-list/filter-editor/filter-editor.component.ts
- 149
+ 155
@@ -5664,14 +5692,14 @@
)?.name"/>
src/app/components/document-list/filter-editor/filter-editor.component.ts
- 166,168
+ 175,177
Without correspondent
src/app/components/document-list/filter-editor/filter-editor.component.ts
- 170
+ 179
@@ -5680,14 +5708,14 @@
)?.name"/>
src/app/components/document-list/filter-editor/filter-editor.component.ts
- 176,178
+ 185,187
Without document type
src/app/components/document-list/filter-editor/filter-editor.component.ts
- 180
+ 189
@@ -5696,14 +5724,14 @@
)?.name"/>
src/app/components/document-list/filter-editor/filter-editor.component.ts
- 186,188
+ 195,197
Without storage path
src/app/components/document-list/filter-editor/filter-editor.component.ts
- 190
+ 199
@@ -5711,49 +5739,49 @@
?.name"/>
src/app/components/document-list/filter-editor/filter-editor.component.ts
- 194,195
+ 203,204
Without any tag
src/app/components/document-list/filter-editor/filter-editor.component.ts
- 199
+ 208
Title:
src/app/components/document-list/filter-editor/filter-editor.component.ts
- 203
+ 212
ASN:
src/app/components/document-list/filter-editor/filter-editor.component.ts
- 206
+ 215
Owner:
src/app/components/document-list/filter-editor/filter-editor.component.ts
- 209
+ 218
Owner not in:
src/app/components/document-list/filter-editor/filter-editor.component.ts
- 212
+ 221
Without an owner
src/app/components/document-list/filter-editor/filter-editor.component.ts
- 215
+ 224
@@ -6100,18 +6128,18 @@
Permissions updated
src/app/components/manage/mail/mail.component.ts
- 211
+ 212
Error updating permissions
src/app/components/manage/mail/mail.component.ts
- 215
+ 217
src/app/components/manage/management-list/management-list.component.ts
- 300
+ 301
@@ -6277,7 +6305,7 @@
Permissions updated successfully
src/app/components/manage/management-list/management-list.component.ts
- 293
+ 294
@@ -6906,14 +6934,14 @@
Modified
src/app/services/rest/document.service.ts
- 24
+ 31
Search score
src/app/services/rest/document.service.ts
- 33
+ 40
Score is a value returned by the full text search engine and specifies how well a result matches the given query
@@ -7029,137 +7057,144 @@
130
+
+ Japanese
+
+ src/app/services/settings.service.ts
+ 136
+
+
Luxembourgish
src/app/services/settings.service.ts
- 136
+ 142
Dutch
src/app/services/settings.service.ts
- 142
+ 148
Norwegian
src/app/services/settings.service.ts
- 148
+ 154
Polish
src/app/services/settings.service.ts
- 154
+ 160
Portuguese (Brazil)
src/app/services/settings.service.ts
- 160
+ 166
Portuguese
src/app/services/settings.service.ts
- 166
+ 172
Romanian
src/app/services/settings.service.ts
- 172
+ 178
Russian
src/app/services/settings.service.ts
- 178
+ 184
Slovak
src/app/services/settings.service.ts
- 184
+ 190
Slovenian
src/app/services/settings.service.ts
- 190
+ 196
Serbian
src/app/services/settings.service.ts
- 196
+ 202
Swedish
src/app/services/settings.service.ts
- 202
+ 208
Turkish
src/app/services/settings.service.ts
- 208
+ 214
Ukrainian
src/app/services/settings.service.ts
- 214
+ 220
Chinese Simplified
src/app/services/settings.service.ts
- 220
+ 226
ISO 8601
src/app/services/settings.service.ts
- 228
+ 234
Successfully completed one-time migratration of settings to the database!
src/app/services/settings.service.ts
- 471
+ 477
Unable to migrate settings to the database, please try saving manually.
src/app/services/settings.service.ts
- 472
+ 478
You can restart the tour from the settings page.
src/app/services/settings.service.ts
- 542
+ 548
diff --git a/src-ui/package-lock.json b/src-ui/package-lock.json
index f51e4056e..d554b98cd 100644
--- a/src-ui/package-lock.json
+++ b/src-ui/package-lock.json
@@ -9,17 +9,17 @@
"version": "0.0.0",
"hasInstallScript": true,
"dependencies": {
- "@angular/cdk": "^17.0.4",
- "@angular/common": "~17.0.8",
- "@angular/compiler": "~17.0.8",
- "@angular/core": "~17.0.8",
- "@angular/forms": "~17.0.8",
- "@angular/localize": "~17.0.8",
- "@angular/platform-browser": "~17.0.8",
- "@angular/platform-browser-dynamic": "~17.0.8",
- "@angular/router": "~17.0.8",
+ "@angular/cdk": "^17.1.2",
+ "@angular/common": "~17.1.2",
+ "@angular/compiler": "~17.1.2",
+ "@angular/core": "~17.1.2",
+ "@angular/forms": "~17.1.2",
+ "@angular/localize": "~17.1.2",
+ "@angular/platform-browser": "~17.1.2",
+ "@angular/platform-browser-dynamic": "~17.1.2",
+ "@angular/router": "~17.1.2",
"@ng-bootstrap/ng-bootstrap": "^16.0.0",
- "@ng-select/ng-select": "^12.0.4",
+ "@ng-select/ng-select": "^12.0.6",
"@ngneat/dirty-check-forms": "^3.0.3",
"@popperjs/core": "^2.11.8",
"bootstrap": "^5.3.2",
@@ -29,33 +29,33 @@
"ngx-color": "^9.0.0",
"ngx-cookie-service": "^17.0.1",
"ngx-file-drop": "^16.0.0",
- "ngx-ui-tour-ng-bootstrap": "^14.0.1",
+ "ngx-ui-tour-ng-bootstrap": "^14.0.2",
"pdfjs-dist": "^3.11.174",
"rxjs": "^7.8.1",
"tslib": "^2.6.2",
"uuid": "^9.0.1",
- "zone.js": "^0.14.2"
+ "zone.js": "^0.14.3"
},
"devDependencies": {
"@angular-builders/jest": "17.0.0",
- "@angular-devkit/build-angular": "~17.0.8",
- "@angular-eslint/builder": "17.1.1",
- "@angular-eslint/eslint-plugin": "17.1.1",
- "@angular-eslint/eslint-plugin-template": "17.1.1",
- "@angular-eslint/schematics": "17.1.1",
- "@angular-eslint/template-parser": "17.1.1",
- "@angular/cli": "~17.0.8",
- "@angular/compiler-cli": "~17.0.7",
- "@playwright/test": "^1.40.1",
- "@types/jest": "^29.5.10",
- "@types/node": "^20.10.6",
- "@typescript-eslint/eslint-plugin": "^6.17.0",
- "@typescript-eslint/parser": "^6.17.0",
+ "@angular-devkit/build-angular": "~17.1.2",
+ "@angular-eslint/builder": "17.2.1",
+ "@angular-eslint/eslint-plugin": "17.2.1",
+ "@angular-eslint/eslint-plugin-template": "17.2.1",
+ "@angular-eslint/schematics": "17.2.1",
+ "@angular-eslint/template-parser": "17.2.1",
+ "@angular/cli": "~17.1.2",
+ "@angular/compiler-cli": "~17.1.2",
+ "@playwright/test": "^1.41.2",
+ "@types/jest": "^29.5.12",
+ "@types/node": "^20.11.16",
+ "@typescript-eslint/eslint-plugin": "^6.20.0",
+ "@typescript-eslint/parser": "^6.20.0",
"concurrently": "^8.2.2",
"eslint": "^8.56.0",
"jest": "29.7.0",
"jest-environment-jsdom": "^29.7.0",
- "jest-preset-angular": "^13.1.4",
+ "jest-preset-angular": "^14.0.0",
"jest-websocket-mock": "^2.5.0",
"patch-package": "^8.0.0",
"ts-node": "~10.9.1",
@@ -107,13 +107,41 @@
"jest": ">=29"
}
},
- "node_modules/@angular-devkit/architect": {
- "version": "0.1700.8",
- "resolved": "https://registry.npmjs.org/@angular-devkit/architect/-/architect-0.1700.8.tgz",
- "integrity": "sha512-SWVr3CvwO6T0yW2ytszCwBT1g92vyFkwbVUxqE93urYnoD8PvP+81GH5YwVjHQTgvhP4eXQMGZ9hpHx57VOrWQ==",
+ "node_modules/@angular-builders/jest/node_modules/jest-preset-angular": {
+ "version": "13.1.4",
+ "resolved": "https://registry.npmjs.org/jest-preset-angular/-/jest-preset-angular-13.1.4.tgz",
+ "integrity": "sha512-XKeWa8Qt7p37SzlJ85qEXgig06SgkfrzV057X2GSMqfz/HLJmTUjMFkHJKe65ZaQumNQWCcXpxXREr6EfZ9bow==",
"dev": true,
"dependencies": {
- "@angular-devkit/core": "17.0.8",
+ "bs-logger": "^0.2.6",
+ "esbuild-wasm": ">=0.13.8",
+ "jest-environment-jsdom": "^29.0.0",
+ "jest-util": "^29.0.0",
+ "pretty-format": "^29.0.0",
+ "ts-jest": "^29.0.0"
+ },
+ "engines": {
+ "node": "^14.15.0 || >=16.10.0"
+ },
+ "optionalDependencies": {
+ "esbuild": ">=0.13.8"
+ },
+ "peerDependencies": {
+ "@angular-devkit/build-angular": ">=13.0.0 <18.0.0",
+ "@angular/compiler-cli": ">=13.0.0 <18.0.0",
+ "@angular/core": ">=13.0.0 <18.0.0",
+ "@angular/platform-browser-dynamic": ">=13.0.0 <18.0.0",
+ "jest": "^29.0.0",
+ "typescript": ">=4.4"
+ }
+ },
+ "node_modules/@angular-devkit/architect": {
+ "version": "0.1701.2",
+ "resolved": "https://registry.npmjs.org/@angular-devkit/architect/-/architect-0.1701.2.tgz",
+ "integrity": "sha512-g3gn5Ht6r9bCeFeAYF+HboZB8IvgvqqdeOnaWNaXJLI0ymEkpbqRdqrHGuVKHJV7JOMNXC7GPJEctBC6SXxOxA==",
+ "dev": true,
+ "dependencies": {
+ "@angular-devkit/core": "17.1.2",
"rxjs": "7.8.1"
},
"engines": {
@@ -123,42 +151,40 @@
}
},
"node_modules/@angular-devkit/build-angular": {
- "version": "17.0.8",
- "resolved": "https://registry.npmjs.org/@angular-devkit/build-angular/-/build-angular-17.0.8.tgz",
- "integrity": "sha512-u7R5yX92ZxOL/LfxiKGGqlBo86100sJ5Rabavn8DeGtYP8N0qgwCcNwlW2zaMoUlkw2geMnxcxIX5VJI4iFPUA==",
+ "version": "17.1.2",
+ "resolved": "https://registry.npmjs.org/@angular-devkit/build-angular/-/build-angular-17.1.2.tgz",
+ "integrity": "sha512-QIDTP+TjiCKCYRZYb8to4ymvIV1Djcfd5c17VdgMGhRqIQAAK1V4f4A1njdhGYOrgsLajZQAnKvFfk2ZMeI37A==",
"dev": true,
"dependencies": {
"@ampproject/remapping": "2.2.1",
- "@angular-devkit/architect": "0.1700.8",
- "@angular-devkit/build-webpack": "0.1700.8",
- "@angular-devkit/core": "17.0.8",
- "@babel/core": "7.23.2",
- "@babel/generator": "7.23.0",
+ "@angular-devkit/architect": "0.1701.2",
+ "@angular-devkit/build-webpack": "0.1701.2",
+ "@angular-devkit/core": "17.1.2",
+ "@babel/core": "7.23.7",
+ "@babel/generator": "7.23.6",
"@babel/helper-annotate-as-pure": "7.22.5",
"@babel/helper-split-export-declaration": "7.22.6",
- "@babel/plugin-transform-async-generator-functions": "7.23.2",
- "@babel/plugin-transform-async-to-generator": "7.22.5",
- "@babel/plugin-transform-runtime": "7.23.2",
- "@babel/preset-env": "7.23.2",
- "@babel/runtime": "7.23.2",
+ "@babel/plugin-transform-async-generator-functions": "7.23.7",
+ "@babel/plugin-transform-async-to-generator": "7.23.3",
+ "@babel/plugin-transform-runtime": "7.23.7",
+ "@babel/preset-env": "7.23.7",
+ "@babel/runtime": "7.23.7",
"@discoveryjs/json-ext": "0.5.7",
- "@ngtools/webpack": "17.0.8",
- "@vitejs/plugin-basic-ssl": "1.0.1",
+ "@ngtools/webpack": "17.1.2",
+ "@vitejs/plugin-basic-ssl": "1.0.2",
"ansi-colors": "4.1.3",
"autoprefixer": "10.4.16",
"babel-loader": "9.1.3",
"babel-plugin-istanbul": "6.1.1",
- "browser-sync": "2.29.3",
"browserslist": "^4.21.5",
- "chokidar": "3.5.3",
"copy-webpack-plugin": "11.0.0",
"critters": "0.0.20",
"css-loader": "6.8.1",
- "esbuild-wasm": "0.19.5",
- "fast-glob": "3.3.1",
+ "esbuild-wasm": "0.19.11",
+ "fast-glob": "3.3.2",
"http-proxy-middleware": "2.0.6",
"https-proxy-agent": "7.0.2",
- "inquirer": "9.2.11",
+ "inquirer": "9.2.12",
"jsonc-parser": "3.2.0",
"karma-source-map-support": "1.4.0",
"less": "4.2.0",
@@ -167,27 +193,28 @@
"loader-utils": "3.2.1",
"magic-string": "0.30.5",
"mini-css-extract-plugin": "2.7.6",
- "mrmime": "1.0.1",
+ "mrmime": "2.0.0",
"open": "8.4.2",
"ora": "5.4.1",
"parse5-html-rewriting-stream": "7.0.0",
"picomatch": "3.0.1",
- "piscina": "4.1.0",
- "postcss": "8.4.31",
- "postcss-loader": "7.3.3",
+ "piscina": "4.2.1",
+ "postcss": "8.4.33",
+ "postcss-loader": "7.3.4",
"resolve-url-loader": "5.0.0",
"rxjs": "7.8.1",
- "sass": "1.69.5",
- "sass-loader": "13.3.2",
+ "sass": "1.69.7",
+ "sass-loader": "13.3.3",
"semver": "7.5.4",
- "source-map-loader": "4.0.1",
+ "source-map-loader": "5.0.0",
"source-map-support": "0.5.21",
- "terser": "5.24.0",
+ "terser": "5.26.0",
"text-table": "0.2.0",
"tree-kill": "1.2.2",
"tslib": "2.6.2",
- "undici": "5.27.2",
- "vite": "4.5.1",
+ "undici": "6.2.1",
+ "vite": "5.0.12",
+ "watchpack": "2.4.0",
"webpack": "5.89.0",
"webpack-dev-middleware": "6.1.1",
"webpack-dev-server": "4.15.1",
@@ -200,20 +227,22 @@
"yarn": ">= 1.13.0"
},
"optionalDependencies": {
- "esbuild": "0.19.5"
+ "esbuild": "0.19.11"
},
"peerDependencies": {
"@angular/compiler-cli": "^17.0.0",
"@angular/localize": "^17.0.0",
"@angular/platform-server": "^17.0.0",
"@angular/service-worker": "^17.0.0",
+ "@web/test-runner": "^0.18.0",
+ "browser-sync": "^3.0.2",
"jest": "^29.5.0",
"jest-environment-jsdom": "^29.5.0",
"karma": "^6.3.0",
"ng-packagr": "^17.0.0",
"protractor": "^7.0.0",
"tailwindcss": "^2.0.0 || ^3.0.0",
- "typescript": ">=5.2 <5.3"
+ "typescript": ">=5.2 <5.4"
},
"peerDependenciesMeta": {
"@angular/localize": {
@@ -225,6 +254,12 @@
"@angular/service-worker": {
"optional": true
},
+ "@web/test-runner": {
+ "optional": true
+ },
+ "browser-sync": {
+ "optional": true
+ },
"jest": {
"optional": true
},
@@ -245,13 +280,74 @@
}
}
},
- "node_modules/@angular-devkit/build-webpack": {
- "version": "0.1700.8",
- "resolved": "https://registry.npmjs.org/@angular-devkit/build-webpack/-/build-webpack-0.1700.8.tgz",
- "integrity": "sha512-GA7QlCAlYB3uBkRaUYgIC/Vfajb9jMmouwYiAAEm34ZyP3ThFjdqsYd/A/exnuESt5o6Bh++C/PI34sV3lawRA==",
+ "node_modules/@angular-devkit/build-angular/node_modules/@babel/core": {
+ "version": "7.23.7",
+ "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.23.7.tgz",
+ "integrity": "sha512-+UpDgowcmqe36d4NwqvKsyPMlOLNGMsfMmQ5WGCu+siCe3t3dfe9njrzGfdN4qq+bcNUt0+Vw6haRxBOycs4dw==",
"dev": true,
"dependencies": {
- "@angular-devkit/architect": "0.1700.8",
+ "@ampproject/remapping": "^2.2.0",
+ "@babel/code-frame": "^7.23.5",
+ "@babel/generator": "^7.23.6",
+ "@babel/helper-compilation-targets": "^7.23.6",
+ "@babel/helper-module-transforms": "^7.23.3",
+ "@babel/helpers": "^7.23.7",
+ "@babel/parser": "^7.23.6",
+ "@babel/template": "^7.22.15",
+ "@babel/traverse": "^7.23.7",
+ "@babel/types": "^7.23.6",
+ "convert-source-map": "^2.0.0",
+ "debug": "^4.1.0",
+ "gensync": "^1.0.0-beta.2",
+ "json5": "^2.2.3",
+ "semver": "^6.3.1"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/babel"
+ }
+ },
+ "node_modules/@angular-devkit/build-angular/node_modules/@babel/core/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/@angular-devkit/build-angular/node_modules/convert-source-map": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz",
+ "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==",
+ "dev": true
+ },
+ "node_modules/@angular-devkit/build-angular/node_modules/fast-glob": {
+ "version": "3.3.2",
+ "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.2.tgz",
+ "integrity": "sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==",
+ "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/@angular-devkit/build-webpack": {
+ "version": "0.1701.2",
+ "resolved": "https://registry.npmjs.org/@angular-devkit/build-webpack/-/build-webpack-0.1701.2.tgz",
+ "integrity": "sha512-LqfSO5iTbiYByDadUET/8uIun8vSHMEdtoxiil/kdZ5T0NG0p7K8QqUMnWgg6suwO6kFfYJkMiS8Dq3Y/ONUNQ==",
+ "dev": true,
+ "dependencies": {
+ "@angular-devkit/architect": "0.1701.2",
"rxjs": "7.8.1"
},
"engines": {
@@ -265,9 +361,9 @@
}
},
"node_modules/@angular-devkit/core": {
- "version": "17.0.8",
- "resolved": "https://registry.npmjs.org/@angular-devkit/core/-/core-17.0.8.tgz",
- "integrity": "sha512-gI8+SOwGUwr0WOlFrhLjohLolMzcguuoR0LTZEcGjdXvQyPgH4NDSRIIrfWCdu+ZVhfy76o3zQYdYc9QN8NrjQ==",
+ "version": "17.1.2",
+ "resolved": "https://registry.npmjs.org/@angular-devkit/core/-/core-17.1.2.tgz",
+ "integrity": "sha512-ku+/W/HMCBacSWFppenr9y6Lx8mDuTuQvn1IkTyBLiJOpWnzgVbx9kHDeaDchGa1PwLlJUBBrv27t3qgJOIDPw==",
"dev": true,
"dependencies": {
"ajv": "8.12.0",
@@ -292,12 +388,12 @@
}
},
"node_modules/@angular-devkit/schematics": {
- "version": "17.0.8",
- "resolved": "https://registry.npmjs.org/@angular-devkit/schematics/-/schematics-17.0.8.tgz",
- "integrity": "sha512-syo814SVWfJvne448IijjZvpWbuqJsEutdNqHWLTewTfX2U3KrIAr/XRVcXQMuyMvLCDiuxjMgEJxOIP7mcIPw==",
+ "version": "17.1.2",
+ "resolved": "https://registry.npmjs.org/@angular-devkit/schematics/-/schematics-17.1.2.tgz",
+ "integrity": "sha512-8S9RuM8olFN/gwN+mjbuF1CwHX61f0i59EGXz9tXLnKRUTjsRR+8vVMTAmX0dvVAT5fJTG/T69X+HX7FeumdqA==",
"dev": true,
"dependencies": {
- "@angular-devkit/core": "17.0.8",
+ "@angular-devkit/core": "17.1.2",
"jsonc-parser": "3.2.0",
"magic-string": "0.30.5",
"ora": "5.4.1",
@@ -310,13 +406,13 @@
}
},
"node_modules/@angular-eslint/builder": {
- "version": "17.1.1",
- "resolved": "https://registry.npmjs.org/@angular-eslint/builder/-/builder-17.1.1.tgz",
- "integrity": "sha512-QGnIaypNP1osDObTIRJ5JF1KdMBn2oghZXMZAFN+qc+4+EX0SLfrSVw0YTZRH1Sg8ns3/Q+E6jYrswrhV1JmKQ==",
+ "version": "17.2.1",
+ "resolved": "https://registry.npmjs.org/@angular-eslint/builder/-/builder-17.2.1.tgz",
+ "integrity": "sha512-O30eaR0wCPiP+zKWvXj2JM8hVq30Wok2rp7zJMFm3PurjF9nWIIyexXkE5fa538DYZYxu8N3gQRqhpv5jvTXCg==",
"dev": true,
"dependencies": {
- "@nx/devkit": "17.1.3",
- "nx": "17.1.3"
+ "@nx/devkit": "17.2.8",
+ "nx": "17.2.8"
},
"peerDependencies": {
"eslint": "^7.20.0 || ^8.0.0",
@@ -324,19 +420,19 @@
}
},
"node_modules/@angular-eslint/bundled-angular-compiler": {
- "version": "17.1.1",
- "resolved": "https://registry.npmjs.org/@angular-eslint/bundled-angular-compiler/-/bundled-angular-compiler-17.1.1.tgz",
- "integrity": "sha512-xRlSh9qjdUdUKAy/0UQsxX7wf1tHApAsHsfismebPriqfmVAPyEg4HBrM8ImWaZxiqaTGC1AyHsUBQD5FK8o6w==",
+ "version": "17.2.1",
+ "resolved": "https://registry.npmjs.org/@angular-eslint/bundled-angular-compiler/-/bundled-angular-compiler-17.2.1.tgz",
+ "integrity": "sha512-puC0itsZv2QlrDOCcWtq1KZH+DvfrpV+mV78HHhi6+h25R5iIhr8ARKcl3EQxFjvrFq34jhG8pSupxKvFbHVfA==",
"dev": true
},
"node_modules/@angular-eslint/eslint-plugin": {
- "version": "17.1.1",
- "resolved": "https://registry.npmjs.org/@angular-eslint/eslint-plugin/-/eslint-plugin-17.1.1.tgz",
- "integrity": "sha512-fFOBlCOVObVu3gjLj+0BypqO1ZR/0bfJnDElqMdYwJG7zRaFT8NNQbrOo/q/GQoqOFoNna6mw3teTGsd5JnL2A==",
+ "version": "17.2.1",
+ "resolved": "https://registry.npmjs.org/@angular-eslint/eslint-plugin/-/eslint-plugin-17.2.1.tgz",
+ "integrity": "sha512-9yA81BHpsaCUKRBtHGN3ieAy8HpIoffzPQMu34lYqZFT4yGHGhYmhQjNSQGBRbV2LD9dVv2U35rMHNmUcozXpw==",
"dev": true,
"dependencies": {
- "@angular-eslint/utils": "17.1.1",
- "@typescript-eslint/utils": "6.13.1"
+ "@angular-eslint/utils": "17.2.1",
+ "@typescript-eslint/utils": "6.19.0"
},
"peerDependencies": {
"eslint": "^7.20.0 || ^8.0.0",
@@ -344,15 +440,15 @@
}
},
"node_modules/@angular-eslint/eslint-plugin-template": {
- "version": "17.1.1",
- "resolved": "https://registry.npmjs.org/@angular-eslint/eslint-plugin-template/-/eslint-plugin-template-17.1.1.tgz",
- "integrity": "sha512-unZ6QNwtxuB8Eni7UPdw7uK6iZipZUXIsH+ZuLMOxwFgGMqeRnpv8SW0212rto3d/Ec0jESzVHKcwZ9pT+jxgw==",
+ "version": "17.2.1",
+ "resolved": "https://registry.npmjs.org/@angular-eslint/eslint-plugin-template/-/eslint-plugin-template-17.2.1.tgz",
+ "integrity": "sha512-hl1hcHtcm90wyVL1OQGTz16oA0KHon+FFb3Qg0fLXObaXxA495Ecefd9ub5Xxg4JEOPRDi29bF1Y3YKpwflgeg==",
"dev": true,
"dependencies": {
- "@angular-eslint/bundled-angular-compiler": "17.1.1",
- "@angular-eslint/utils": "17.1.1",
- "@typescript-eslint/type-utils": "6.13.1",
- "@typescript-eslint/utils": "6.13.1",
+ "@angular-eslint/bundled-angular-compiler": "17.2.1",
+ "@angular-eslint/utils": "17.2.1",
+ "@typescript-eslint/type-utils": "6.19.0",
+ "@typescript-eslint/utils": "6.19.0",
"aria-query": "5.3.0",
"axobject-query": "4.0.0"
},
@@ -361,17 +457,293 @@
"typescript": "*"
}
},
- "node_modules/@angular-eslint/schematics": {
- "version": "17.1.1",
- "resolved": "https://registry.npmjs.org/@angular-eslint/schematics/-/schematics-17.1.1.tgz",
- "integrity": "sha512-Bkt8iOXWRQGSrcLRGzdyJLvSPcIChW5+dh5lXa5GhdLmVAF7jpjxqGwW0rNb5JhLa/phyH0XQIpLBaOPtacSMA==",
+ "node_modules/@angular-eslint/eslint-plugin-template/node_modules/@angular-eslint/utils": {
+ "version": "17.2.1",
+ "resolved": "https://registry.npmjs.org/@angular-eslint/utils/-/utils-17.2.1.tgz",
+ "integrity": "sha512-qQYTBXy90dWM7fhhpa5i9lTtqqhJisvRa+naCrQx9kBgR458JScLdkVIdcZ9D/rPiDCmKiVUfgcDISnjUeqTqg==",
"dev": true,
"dependencies": {
- "@angular-eslint/eslint-plugin": "17.1.1",
- "@angular-eslint/eslint-plugin-template": "17.1.1",
- "@nx/devkit": "17.1.3",
+ "@angular-eslint/bundled-angular-compiler": "17.2.1",
+ "@typescript-eslint/utils": "6.19.0"
+ },
+ "peerDependencies": {
+ "eslint": "^7.20.0 || ^8.0.0",
+ "typescript": "*"
+ }
+ },
+ "node_modules/@angular-eslint/eslint-plugin-template/node_modules/@typescript-eslint/scope-manager": {
+ "version": "6.19.0",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-6.19.0.tgz",
+ "integrity": "sha512-dO1XMhV2ehBI6QN8Ufi7I10wmUovmLU0Oru3n5LVlM2JuzB4M+dVphCPLkVpKvGij2j/pHBWuJ9piuXx+BhzxQ==",
+ "dev": true,
+ "dependencies": {
+ "@typescript-eslint/types": "6.19.0",
+ "@typescript-eslint/visitor-keys": "6.19.0"
+ },
+ "engines": {
+ "node": "^16.0.0 || >=18.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/typescript-eslint"
+ }
+ },
+ "node_modules/@angular-eslint/eslint-plugin-template/node_modules/@typescript-eslint/types": {
+ "version": "6.19.0",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-6.19.0.tgz",
+ "integrity": "sha512-lFviGV/vYhOy3m8BJ/nAKoAyNhInTdXpftonhWle66XHAtT1ouBlkjL496b5H5hb8dWXHwtypTqgtb/DEa+j5A==",
+ "dev": true,
+ "engines": {
+ "node": "^16.0.0 || >=18.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/typescript-eslint"
+ }
+ },
+ "node_modules/@angular-eslint/eslint-plugin-template/node_modules/@typescript-eslint/typescript-estree": {
+ "version": "6.19.0",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-6.19.0.tgz",
+ "integrity": "sha512-o/zefXIbbLBZ8YJ51NlkSAt2BamrK6XOmuxSR3hynMIzzyMY33KuJ9vuMdFSXW+H0tVvdF9qBPTHA91HDb4BIQ==",
+ "dev": true,
+ "dependencies": {
+ "@typescript-eslint/types": "6.19.0",
+ "@typescript-eslint/visitor-keys": "6.19.0",
+ "debug": "^4.3.4",
+ "globby": "^11.1.0",
+ "is-glob": "^4.0.3",
+ "minimatch": "9.0.3",
+ "semver": "^7.5.4",
+ "ts-api-utils": "^1.0.1"
+ },
+ "engines": {
+ "node": "^16.0.0 || >=18.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/typescript-eslint"
+ },
+ "peerDependenciesMeta": {
+ "typescript": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/@angular-eslint/eslint-plugin-template/node_modules/@typescript-eslint/utils": {
+ "version": "6.19.0",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-6.19.0.tgz",
+ "integrity": "sha512-QR41YXySiuN++/dC9UArYOg4X86OAYP83OWTewpVx5ct1IZhjjgTLocj7QNxGhWoTqknsgpl7L+hGygCO+sdYw==",
+ "dev": true,
+ "dependencies": {
+ "@eslint-community/eslint-utils": "^4.4.0",
+ "@types/json-schema": "^7.0.12",
+ "@types/semver": "^7.5.0",
+ "@typescript-eslint/scope-manager": "6.19.0",
+ "@typescript-eslint/types": "6.19.0",
+ "@typescript-eslint/typescript-estree": "6.19.0",
+ "semver": "^7.5.4"
+ },
+ "engines": {
+ "node": "^16.0.0 || >=18.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/typescript-eslint"
+ },
+ "peerDependencies": {
+ "eslint": "^7.0.0 || ^8.0.0"
+ }
+ },
+ "node_modules/@angular-eslint/eslint-plugin-template/node_modules/@typescript-eslint/visitor-keys": {
+ "version": "6.19.0",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-6.19.0.tgz",
+ "integrity": "sha512-hZaUCORLgubBvtGpp1JEFEazcuEdfxta9j4iUwdSAr7mEsYYAp3EAUyCZk3VEEqGj6W+AV4uWyrDGtrlawAsgQ==",
+ "dev": true,
+ "dependencies": {
+ "@typescript-eslint/types": "6.19.0",
+ "eslint-visitor-keys": "^3.4.1"
+ },
+ "engines": {
+ "node": "^16.0.0 || >=18.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/typescript-eslint"
+ }
+ },
+ "node_modules/@angular-eslint/eslint-plugin-template/node_modules/brace-expansion": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz",
+ "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==",
+ "dev": true,
+ "dependencies": {
+ "balanced-match": "^1.0.0"
+ }
+ },
+ "node_modules/@angular-eslint/eslint-plugin-template/node_modules/minimatch": {
+ "version": "9.0.3",
+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.3.tgz",
+ "integrity": "sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==",
+ "dev": true,
+ "dependencies": {
+ "brace-expansion": "^2.0.1"
+ },
+ "engines": {
+ "node": ">=16 || 14 >=14.17"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/isaacs"
+ }
+ },
+ "node_modules/@angular-eslint/eslint-plugin/node_modules/@angular-eslint/utils": {
+ "version": "17.2.1",
+ "resolved": "https://registry.npmjs.org/@angular-eslint/utils/-/utils-17.2.1.tgz",
+ "integrity": "sha512-qQYTBXy90dWM7fhhpa5i9lTtqqhJisvRa+naCrQx9kBgR458JScLdkVIdcZ9D/rPiDCmKiVUfgcDISnjUeqTqg==",
+ "dev": true,
+ "dependencies": {
+ "@angular-eslint/bundled-angular-compiler": "17.2.1",
+ "@typescript-eslint/utils": "6.19.0"
+ },
+ "peerDependencies": {
+ "eslint": "^7.20.0 || ^8.0.0",
+ "typescript": "*"
+ }
+ },
+ "node_modules/@angular-eslint/eslint-plugin/node_modules/@typescript-eslint/scope-manager": {
+ "version": "6.19.0",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-6.19.0.tgz",
+ "integrity": "sha512-dO1XMhV2ehBI6QN8Ufi7I10wmUovmLU0Oru3n5LVlM2JuzB4M+dVphCPLkVpKvGij2j/pHBWuJ9piuXx+BhzxQ==",
+ "dev": true,
+ "dependencies": {
+ "@typescript-eslint/types": "6.19.0",
+ "@typescript-eslint/visitor-keys": "6.19.0"
+ },
+ "engines": {
+ "node": "^16.0.0 || >=18.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/typescript-eslint"
+ }
+ },
+ "node_modules/@angular-eslint/eslint-plugin/node_modules/@typescript-eslint/types": {
+ "version": "6.19.0",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-6.19.0.tgz",
+ "integrity": "sha512-lFviGV/vYhOy3m8BJ/nAKoAyNhInTdXpftonhWle66XHAtT1ouBlkjL496b5H5hb8dWXHwtypTqgtb/DEa+j5A==",
+ "dev": true,
+ "engines": {
+ "node": "^16.0.0 || >=18.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/typescript-eslint"
+ }
+ },
+ "node_modules/@angular-eslint/eslint-plugin/node_modules/@typescript-eslint/typescript-estree": {
+ "version": "6.19.0",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-6.19.0.tgz",
+ "integrity": "sha512-o/zefXIbbLBZ8YJ51NlkSAt2BamrK6XOmuxSR3hynMIzzyMY33KuJ9vuMdFSXW+H0tVvdF9qBPTHA91HDb4BIQ==",
+ "dev": true,
+ "dependencies": {
+ "@typescript-eslint/types": "6.19.0",
+ "@typescript-eslint/visitor-keys": "6.19.0",
+ "debug": "^4.3.4",
+ "globby": "^11.1.0",
+ "is-glob": "^4.0.3",
+ "minimatch": "9.0.3",
+ "semver": "^7.5.4",
+ "ts-api-utils": "^1.0.1"
+ },
+ "engines": {
+ "node": "^16.0.0 || >=18.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/typescript-eslint"
+ },
+ "peerDependenciesMeta": {
+ "typescript": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/@angular-eslint/eslint-plugin/node_modules/@typescript-eslint/utils": {
+ "version": "6.19.0",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-6.19.0.tgz",
+ "integrity": "sha512-QR41YXySiuN++/dC9UArYOg4X86OAYP83OWTewpVx5ct1IZhjjgTLocj7QNxGhWoTqknsgpl7L+hGygCO+sdYw==",
+ "dev": true,
+ "dependencies": {
+ "@eslint-community/eslint-utils": "^4.4.0",
+ "@types/json-schema": "^7.0.12",
+ "@types/semver": "^7.5.0",
+ "@typescript-eslint/scope-manager": "6.19.0",
+ "@typescript-eslint/types": "6.19.0",
+ "@typescript-eslint/typescript-estree": "6.19.0",
+ "semver": "^7.5.4"
+ },
+ "engines": {
+ "node": "^16.0.0 || >=18.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/typescript-eslint"
+ },
+ "peerDependencies": {
+ "eslint": "^7.0.0 || ^8.0.0"
+ }
+ },
+ "node_modules/@angular-eslint/eslint-plugin/node_modules/@typescript-eslint/visitor-keys": {
+ "version": "6.19.0",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-6.19.0.tgz",
+ "integrity": "sha512-hZaUCORLgubBvtGpp1JEFEazcuEdfxta9j4iUwdSAr7mEsYYAp3EAUyCZk3VEEqGj6W+AV4uWyrDGtrlawAsgQ==",
+ "dev": true,
+ "dependencies": {
+ "@typescript-eslint/types": "6.19.0",
+ "eslint-visitor-keys": "^3.4.1"
+ },
+ "engines": {
+ "node": "^16.0.0 || >=18.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/typescript-eslint"
+ }
+ },
+ "node_modules/@angular-eslint/eslint-plugin/node_modules/brace-expansion": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz",
+ "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==",
+ "dev": true,
+ "dependencies": {
+ "balanced-match": "^1.0.0"
+ }
+ },
+ "node_modules/@angular-eslint/eslint-plugin/node_modules/minimatch": {
+ "version": "9.0.3",
+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.3.tgz",
+ "integrity": "sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==",
+ "dev": true,
+ "dependencies": {
+ "brace-expansion": "^2.0.1"
+ },
+ "engines": {
+ "node": ">=16 || 14 >=14.17"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/isaacs"
+ }
+ },
+ "node_modules/@angular-eslint/schematics": {
+ "version": "17.2.1",
+ "resolved": "https://registry.npmjs.org/@angular-eslint/schematics/-/schematics-17.2.1.tgz",
+ "integrity": "sha512-7ldtIePI4ZTp/TBpeOZkzfv30HSAn//4TgtFuqvojudI8n8batV5FqQ0VNm1e0zitl75t8Zwtr0KYT4I6vh59g==",
+ "dev": true,
+ "dependencies": {
+ "@angular-eslint/eslint-plugin": "17.2.1",
+ "@angular-eslint/eslint-plugin-template": "17.2.1",
+ "@nx/devkit": "17.2.8",
"ignore": "5.3.0",
- "nx": "17.1.3",
+ "nx": "17.2.8",
"strip-json-comments": "3.1.1",
"tmp": "0.2.1"
},
@@ -380,37 +752,39 @@
}
},
"node_modules/@angular-eslint/template-parser": {
- "version": "17.1.1",
- "resolved": "https://registry.npmjs.org/@angular-eslint/template-parser/-/template-parser-17.1.1.tgz",
- "integrity": "sha512-ofL46rNhRVeSxrSQF0vwhKMco+vJuo+ZGjSOzFmT9N3KAMB0j+WXTbpyGGMy0gQSBc4W6p+j+zxGa2CR2xb6wA==",
+ "version": "17.2.1",
+ "resolved": "https://registry.npmjs.org/@angular-eslint/template-parser/-/template-parser-17.2.1.tgz",
+ "integrity": "sha512-WPQYFvRju0tCDXQ/pwrzC911pE07JvpeDgcN2elhzV6lxDHJEZpA5O9pnW9qgNA6J6XM9Q7dBkJ22ztAzC4WFw==",
"dev": true,
"dependencies": {
- "@angular-eslint/bundled-angular-compiler": "17.1.1",
- "eslint-scope": "^7.0.0"
+ "@angular-eslint/bundled-angular-compiler": "17.2.1",
+ "eslint-scope": "^8.0.0"
},
"peerDependencies": {
"eslint": "^7.20.0 || ^8.0.0",
"typescript": "*"
}
},
- "node_modules/@angular-eslint/utils": {
- "version": "17.1.1",
- "resolved": "https://registry.npmjs.org/@angular-eslint/utils/-/utils-17.1.1.tgz",
- "integrity": "sha512-CTNPOb05S/DII/Fm8JYUvKo+B4u/ctHjGJ0X1YXUR0q31oaGqTE3KePGq76+Y6swRDf9NjUIcfcnZp3u3j4CBQ==",
+ "node_modules/@angular-eslint/template-parser/node_modules/eslint-scope": {
+ "version": "8.0.0",
+ "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-8.0.0.tgz",
+ "integrity": "sha512-zj3Byw6jX4TcFCJmxOzLt6iol5FAr9xQyZZSQjEzW2UiCJXLwXdRIKCYVFftnpZckaC9Ps9xlC7jB8tSeWWOaw==",
"dev": true,
"dependencies": {
- "@angular-eslint/bundled-angular-compiler": "17.1.1",
- "@typescript-eslint/utils": "6.13.1"
+ "esrecurse": "^4.3.0",
+ "estraverse": "^5.2.0"
},
- "peerDependencies": {
- "eslint": "^7.20.0 || ^8.0.0",
- "typescript": "*"
+ "engines": {
+ "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
+ },
+ "funding": {
+ "url": "https://opencollective.com/eslint"
}
},
"node_modules/@angular/cdk": {
- "version": "17.0.4",
- "resolved": "https://registry.npmjs.org/@angular/cdk/-/cdk-17.0.4.tgz",
- "integrity": "sha512-mh/EuIR0NPfpNqAXBSZWuJeBMXUvUDYdKhiFWZet5NLO1bDgFe1MGLBjtW4us95k4BZsMLbCKNxJgc+4JqwUvg==",
+ "version": "17.1.2",
+ "resolved": "https://registry.npmjs.org/@angular/cdk/-/cdk-17.1.2.tgz",
+ "integrity": "sha512-eu9D60RQv213qi7oh6ae9Z+d6+AG/aqi0y70Ag9BjwqTiatDiYvSySxswxYYKdzPp0hx0ZUTGi16LqtT6pyj6Q==",
"dependencies": {
"tslib": "^2.3.0"
},
@@ -424,25 +798,25 @@
}
},
"node_modules/@angular/cli": {
- "version": "17.0.8",
- "resolved": "https://registry.npmjs.org/@angular/cli/-/cli-17.0.8.tgz",
- "integrity": "sha512-yZXYNLAFv9u2qypsVqtS+rRCsnjsIPYXr6TcI/r5buzOtC7UQ2lleYsWJqX47SsyGMk/o3gaYg5Bj2I5mmRDLA==",
+ "version": "17.1.2",
+ "resolved": "https://registry.npmjs.org/@angular/cli/-/cli-17.1.2.tgz",
+ "integrity": "sha512-U1W6XZNrfeRkXW2fO3AU25rRttqZahVkhzcK3lAtJ8+lSrStCOF7x1gz6tmFZFte1fNHQrXqD0yIDkd8H2/cvw==",
"dev": true,
"dependencies": {
- "@angular-devkit/architect": "0.1700.8",
- "@angular-devkit/core": "17.0.8",
- "@angular-devkit/schematics": "17.0.8",
- "@schematics/angular": "17.0.8",
+ "@angular-devkit/architect": "0.1701.2",
+ "@angular-devkit/core": "17.1.2",
+ "@angular-devkit/schematics": "17.1.2",
+ "@schematics/angular": "17.1.2",
"@yarnpkg/lockfile": "1.1.0",
"ansi-colors": "4.1.3",
"ini": "4.1.1",
- "inquirer": "9.2.11",
+ "inquirer": "9.2.12",
"jsonc-parser": "3.2.0",
"npm-package-arg": "11.0.1",
"npm-pick-manifest": "9.0.0",
"open": "8.4.2",
"ora": "5.4.1",
- "pacote": "17.0.4",
+ "pacote": "17.0.5",
"resolve": "1.22.8",
"semver": "7.5.4",
"symbol-observable": "4.0.0",
@@ -458,9 +832,9 @@
}
},
"node_modules/@angular/common": {
- "version": "17.0.8",
- "resolved": "https://registry.npmjs.org/@angular/common/-/common-17.0.8.tgz",
- "integrity": "sha512-fFfwtdg7H+OkqnvV/ENu8F8KGfgIiH16DDbQqYY5KQyyQB+SMsoVW29F1fGx6Y30s7ZlsLOy6cHhgrw74itkSw==",
+ "version": "17.1.2",
+ "resolved": "https://registry.npmjs.org/@angular/common/-/common-17.1.2.tgz",
+ "integrity": "sha512-y/wD+zuPaPgK3dB80Q63qBtuu5TuryKuUgjWrOmrguBWV9oiJRhKQrcp1gVw9vVrowmbDBKGtPMS622Q4oxOWQ==",
"dependencies": {
"tslib": "^2.3.0"
},
@@ -468,14 +842,14 @@
"node": "^18.13.0 || >=20.9.0"
},
"peerDependencies": {
- "@angular/core": "17.0.8",
+ "@angular/core": "17.1.2",
"rxjs": "^6.5.3 || ^7.4.0"
}
},
"node_modules/@angular/compiler": {
- "version": "17.0.8",
- "resolved": "https://registry.npmjs.org/@angular/compiler/-/compiler-17.0.8.tgz",
- "integrity": "sha512-48jWypuhBGTrUUbkz1vB9gjbKKZ3hpuJ2DUUncd331Yw4tqkqZQbBa/E3ei4IHiCxEvW2uX3lI4AwlhuozmUtA==",
+ "version": "17.1.2",
+ "resolved": "https://registry.npmjs.org/@angular/compiler/-/compiler-17.1.2.tgz",
+ "integrity": "sha512-1vJuQRM5V01nC6qsLvBKrHVZXpzbK0YKubwVQUXCSfDNZBcDFak3SQcwU4C2t880rU3ZvFDB1UWfk7CKn5w9Kw==",
"dependencies": {
"tslib": "^2.3.0"
},
@@ -483,7 +857,7 @@
"node": "^18.13.0 || >=20.9.0"
},
"peerDependencies": {
- "@angular/core": "17.0.8"
+ "@angular/core": "17.1.2"
},
"peerDependenciesMeta": {
"@angular/core": {
@@ -492,9 +866,9 @@
}
},
"node_modules/@angular/compiler-cli": {
- "version": "17.0.8",
- "resolved": "https://registry.npmjs.org/@angular/compiler-cli/-/compiler-cli-17.0.8.tgz",
- "integrity": "sha512-ny2SMVgl+icjMuU5ZM57yFGUrhjR0hNxfCn0otAD3jUFliz/Onu9l6EPRKA5Cr8MZx3mg3rTLSBMD17YT8rsOg==",
+ "version": "17.1.2",
+ "resolved": "https://registry.npmjs.org/@angular/compiler-cli/-/compiler-cli-17.1.2.tgz",
+ "integrity": "sha512-4P4ttCe4IF9yq7bxCDxbVW7purN7qV0nqofP5Tth1xCsgIJeGmOMMQJN5RJCZNrAPMkvMv39eV878sgcDjbpOA==",
"dependencies": {
"@babel/core": "7.23.2",
"@jridgewell/sourcemap-codec": "^1.4.14",
@@ -514,14 +888,14 @@
"node": "^18.13.0 || >=20.9.0"
},
"peerDependencies": {
- "@angular/compiler": "17.0.8",
- "typescript": ">=5.2 <5.3"
+ "@angular/compiler": "17.1.2",
+ "typescript": ">=5.2 <5.4"
}
},
"node_modules/@angular/core": {
- "version": "17.0.8",
- "resolved": "https://registry.npmjs.org/@angular/core/-/core-17.0.8.tgz",
- "integrity": "sha512-tzYsK24LdkNuKNJK6efF4XOqspvF/qOe9j/n1Y61a6mNvFwsJFGbcmdZMby4hI/YRm6oIDoIIFjSep8ycp6Pbw==",
+ "version": "17.1.2",
+ "resolved": "https://registry.npmjs.org/@angular/core/-/core-17.1.2.tgz",
+ "integrity": "sha512-0M787BZVgYSVogHCUzo/dFrT56TgfQoEsOQngHMpyERJZv6dycXZlRdHc6TzvHUa+Uu/MNjn/RclBR8063bdWA==",
"dependencies": {
"tslib": "^2.3.0"
},
@@ -534,9 +908,9 @@
}
},
"node_modules/@angular/forms": {
- "version": "17.0.8",
- "resolved": "https://registry.npmjs.org/@angular/forms/-/forms-17.0.8.tgz",
- "integrity": "sha512-WZBHbMQjaSovAzOMhKqZN+m7eUPGfOzh9rKFKvj6UQLIJ9qSpEpqlvL0omU1z/47s3XXeLiBzomMiRfQISJvvw==",
+ "version": "17.1.2",
+ "resolved": "https://registry.npmjs.org/@angular/forms/-/forms-17.1.2.tgz",
+ "integrity": "sha512-n1WsZAL2IVOB6ocROKR6CFOR14PIC9RGAB41SwTfPhJeBM1kjW48bXY0sw97TasxM4mWJKGCmFXu0jQwkoeSpQ==",
"dependencies": {
"tslib": "^2.3.0"
},
@@ -544,18 +918,19 @@
"node": "^18.13.0 || >=20.9.0"
},
"peerDependencies": {
- "@angular/common": "17.0.8",
- "@angular/core": "17.0.8",
- "@angular/platform-browser": "17.0.8",
+ "@angular/common": "17.1.2",
+ "@angular/core": "17.1.2",
+ "@angular/platform-browser": "17.1.2",
"rxjs": "^6.5.3 || ^7.4.0"
}
},
"node_modules/@angular/localize": {
- "version": "17.0.8",
- "resolved": "https://registry.npmjs.org/@angular/localize/-/localize-17.0.8.tgz",
- "integrity": "sha512-1zW8qWKNMH3r/x4KpwzzUmVY+iN76vYdhjA6gzZDnpJxpon9eyljNEildj9+zSWeNUr2LgJ6HnkIX9q1f3mXfA==",
+ "version": "17.1.2",
+ "resolved": "https://registry.npmjs.org/@angular/localize/-/localize-17.1.2.tgz",
+ "integrity": "sha512-9HE1vrgcz90EgU/eZKtUZJlec5kePvTj3pNim1/FLsEjDpN8sBn1QYrPTIWDCySSXPAkMfAcZBODYdPBXWVi8A==",
"dependencies": {
"@babel/core": "7.23.2",
+ "@types/babel__core": "7.20.2",
"fast-glob": "3.3.1",
"yargs": "^17.2.1"
},
@@ -568,14 +943,26 @@
"node": "^18.13.0 || >=20.9.0"
},
"peerDependencies": {
- "@angular/compiler": "17.0.8",
- "@angular/compiler-cli": "17.0.8"
+ "@angular/compiler": "17.1.2",
+ "@angular/compiler-cli": "17.1.2"
+ }
+ },
+ "node_modules/@angular/localize/node_modules/@types/babel__core": {
+ "version": "7.20.2",
+ "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.20.2.tgz",
+ "integrity": "sha512-pNpr1T1xLUc2l3xJKuPtsEky3ybxN3m4fJkknfIpTCTfIZCDW57oAg+EfCgIIp2rvCe0Wn++/FfodDS4YXxBwA==",
+ "dependencies": {
+ "@babel/parser": "^7.20.7",
+ "@babel/types": "^7.20.7",
+ "@types/babel__generator": "*",
+ "@types/babel__template": "*",
+ "@types/babel__traverse": "*"
}
},
"node_modules/@angular/platform-browser": {
- "version": "17.0.8",
- "resolved": "https://registry.npmjs.org/@angular/platform-browser/-/platform-browser-17.0.8.tgz",
- "integrity": "sha512-XaI+p2AxQaIHzR761lhPUf4OcOp46WDW0IfbvOzaezHE+8r81joZyVSDQPgXSa/aRfI58YhcfUavuGqyU3PphA==",
+ "version": "17.1.2",
+ "resolved": "https://registry.npmjs.org/@angular/platform-browser/-/platform-browser-17.1.2.tgz",
+ "integrity": "sha512-unfpA5OLnqDmDb/oAQR2t2iROpOg02qwZayxyFg4MUZdDdnghPCfX77L2sr6oVVa7OJfKYFlmwmBXX1H3zjcXA==",
"dependencies": {
"tslib": "^2.3.0"
},
@@ -583,9 +970,9 @@
"node": "^18.13.0 || >=20.9.0"
},
"peerDependencies": {
- "@angular/animations": "17.0.8",
- "@angular/common": "17.0.8",
- "@angular/core": "17.0.8"
+ "@angular/animations": "17.1.2",
+ "@angular/common": "17.1.2",
+ "@angular/core": "17.1.2"
},
"peerDependenciesMeta": {
"@angular/animations": {
@@ -594,9 +981,9 @@
}
},
"node_modules/@angular/platform-browser-dynamic": {
- "version": "17.0.8",
- "resolved": "https://registry.npmjs.org/@angular/platform-browser-dynamic/-/platform-browser-dynamic-17.0.8.tgz",
- "integrity": "sha512-BIXNKnfBZb8sdluQ7WIhIXFuVnsJJ0SV+aiMKzQ7B6XhWoAXZQnlvON2thydjIIVuCvaF3YmWTbILI2K8YZ2jQ==",
+ "version": "17.1.2",
+ "resolved": "https://registry.npmjs.org/@angular/platform-browser-dynamic/-/platform-browser-dynamic-17.1.2.tgz",
+ "integrity": "sha512-xiWVDHbA+owDhKo5SAnzZtawA1ktGthlCl3YTI+vmkJpF6axkYOqR7YL+aEQX/y/5GSK+oR+03SgAnYcpOwKlQ==",
"dependencies": {
"tslib": "^2.3.0"
},
@@ -604,16 +991,16 @@
"node": "^18.13.0 || >=20.9.0"
},
"peerDependencies": {
- "@angular/common": "17.0.8",
- "@angular/compiler": "17.0.8",
- "@angular/core": "17.0.8",
- "@angular/platform-browser": "17.0.8"
+ "@angular/common": "17.1.2",
+ "@angular/compiler": "17.1.2",
+ "@angular/core": "17.1.2",
+ "@angular/platform-browser": "17.1.2"
}
},
"node_modules/@angular/router": {
- "version": "17.0.8",
- "resolved": "https://registry.npmjs.org/@angular/router/-/router-17.0.8.tgz",
- "integrity": "sha512-ptphcRe1RG/mIS60R7ZPilkkrxautqB0sOhds3h5VP3g628G1a2HWzvnmvjEfpJWDMFivV32VJMMBtTLqGr+0Q==",
+ "version": "17.1.2",
+ "resolved": "https://registry.npmjs.org/@angular/router/-/router-17.1.2.tgz",
+ "integrity": "sha512-8OexxiiscRdfEiB6jOKlZFyAKZtvIQvh0ugW6U7nAXPV5XsA2UL80sXkc829eH0DnJn2Wj/HS6ZNGgG81PWDHg==",
"dependencies": {
"tslib": "^2.3.0"
},
@@ -621,9 +1008,9 @@
"node": "^18.13.0 || >=20.9.0"
},
"peerDependencies": {
- "@angular/common": "17.0.8",
- "@angular/core": "17.0.8",
- "@angular/platform-browser": "17.0.8",
+ "@angular/common": "17.1.2",
+ "@angular/core": "17.1.2",
+ "@angular/platform-browser": "17.1.2",
"rxjs": "^6.5.3 || ^7.4.0"
}
},
@@ -696,11 +1083,11 @@
}
},
"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==",
+ "version": "7.23.6",
+ "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.23.6.tgz",
+ "integrity": "sha512-qrSfCYxYQB5owCmGLbl8XRpX1ytXlpueOb0N0UmQwA073KZxejgQTzAmJezxvpwQD9uGtK2shHdi55QT+MbjIw==",
"dependencies": {
- "@babel/types": "^7.23.0",
+ "@babel/types": "^7.23.6",
"@jridgewell/gen-mapping": "^0.3.2",
"@jridgewell/trace-mapping": "^0.3.17",
"jsesc": "^2.5.1"
@@ -757,9 +1144,9 @@
}
},
"node_modules/@babel/helper-create-class-features-plugin": {
- "version": "7.23.6",
- "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.23.6.tgz",
- "integrity": "sha512-cBXU1vZni/CpGF29iTu4YRbOZt3Wat6zCoMDxRF1MayiEc4URxOj31tT65HUM0CRpMowA3HCJaAOVOUnMf96cw==",
+ "version": "7.23.10",
+ "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.23.10.tgz",
+ "integrity": "sha512-2XpP2XhkXzgxecPNEEK8Vz8Asj9aRxt08oKOqtiZoqV2UGZ5T+EkyP9sXQ9nwMxBIG34a7jmasVqoMop7VdPUw==",
"dev": true,
"dependencies": {
"@babel/helper-annotate-as-pure": "^7.22.5",
@@ -815,9 +1202,9 @@
}
},
"node_modules/@babel/helper-define-polyfill-provider": {
- "version": "0.4.4",
- "resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.4.4.tgz",
- "integrity": "sha512-QcJMILQCu2jm5TFPGA3lCpJJTeEP+mqeXooG/NZbg/h5FTFi6V0+99ahlRsW8/kRLyb24LZVCCiclDedhLKcBA==",
+ "version": "0.5.0",
+ "resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.5.0.tgz",
+ "integrity": "sha512-NovQquuQLAQ5HuyjCz7WQP9MjRj7dx++yspwiyUiGl9ZyadHRSql1HZh5ogRd8W8w6YM6EQ/NTB8rgjLt5W65Q==",
"dev": true,
"dependencies": {
"@babel/helper-compilation-targets": "^7.22.6",
@@ -1030,13 +1417,13 @@
}
},
"node_modules/@babel/helpers": {
- "version": "7.23.6",
- "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.23.6.tgz",
- "integrity": "sha512-wCfsbN4nBidDRhpDhvcKlzHWCTlgJYUUdSJfzXb2NuBssDSIjc3xcb+znA7l+zYsFljAcGM0aFkN40cR3lXiGA==",
+ "version": "7.23.9",
+ "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.23.9.tgz",
+ "integrity": "sha512-87ICKgU5t5SzOT7sBMfCOZQ2rHjRU+Pcb9BoILMYz600W6DkVRLFBPwQ18gwUVvggqXivaUakpnxWQGbpywbBQ==",
"dependencies": {
- "@babel/template": "^7.22.15",
- "@babel/traverse": "^7.23.6",
- "@babel/types": "^7.23.6"
+ "@babel/template": "^7.23.9",
+ "@babel/traverse": "^7.23.9",
+ "@babel/types": "^7.23.9"
},
"engines": {
"node": ">=6.9.0"
@@ -1056,9 +1443,9 @@
}
},
"node_modules/@babel/parser": {
- "version": "7.23.6",
- "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.23.6.tgz",
- "integrity": "sha512-Z2uID7YJ7oNvAI20O9X0bblw7Qqs8Q2hFy0R9tAfnfLkp5MW0UH9eUvnDSnFwKZ0AvgS1ucqR4KzvVHgnke1VQ==",
+ "version": "7.23.9",
+ "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.23.9.tgz",
+ "integrity": "sha512-9tcKgqKbs3xGJ+NtKF2ndOBBLVwPjl1SHxPQkd36r3Dlirw3xWUeGaTbqr7uGZcTaxkVNwc+03SVP7aCdWrTlA==",
"bin": {
"parser": "bin/babel-parser.js"
},
@@ -1098,6 +1485,22 @@
"@babel/core": "^7.13.0"
}
},
+ "node_modules/@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly": {
+ "version": "7.23.7",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly/-/plugin-bugfix-v8-static-class-fields-redefine-readonly-7.23.7.tgz",
+ "integrity": "sha512-LlRT7HgaifEpQA1ZgLVOIJZZFVPWN5iReq/7/JixwBtwcoeVGDBD53ZV28rrsLYOZs1Y/EHhA8N/Z6aazHR8cw==",
+ "dev": true,
+ "dependencies": {
+ "@babel/helper-environment-visitor": "^7.22.20",
+ "@babel/helper-plugin-utils": "^7.22.5"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0"
+ }
+ },
"node_modules/@babel/plugin-proposal-private-property-in-object": {
"version": "7.21.0-placeholder-for-preset-env.2",
"resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.21.0-placeholder-for-preset-env.2.tgz",
@@ -1403,9 +1806,9 @@
}
},
"node_modules/@babel/plugin-transform-async-generator-functions": {
- "version": "7.23.2",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-generator-functions/-/plugin-transform-async-generator-functions-7.23.2.tgz",
- "integrity": "sha512-BBYVGxbDVHfoeXbOwcagAkOQAm9NxoTdMGfTqghu1GrvadSaw6iW3Je6IcL5PNOw8VwjxqBECXy50/iCQSY/lQ==",
+ "version": "7.23.7",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-generator-functions/-/plugin-transform-async-generator-functions-7.23.7.tgz",
+ "integrity": "sha512-PdxEpL71bJp1byMG0va5gwQcXHxuEYC/BgI/e88mGTtohbZN28O5Yit0Plkkm/dBzCF/BxmbNcses1RH1T+urA==",
"dev": true,
"dependencies": {
"@babel/helper-environment-visitor": "^7.22.20",
@@ -1421,14 +1824,14 @@
}
},
"node_modules/@babel/plugin-transform-async-to-generator": {
- "version": "7.22.5",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.22.5.tgz",
- "integrity": "sha512-b1A8D8ZzE/VhNDoV1MSJTnpKkCG5bJo+19R4o4oy03zM7ws8yEMK755j61Dc3EyvdysbqH5BOOTquJ7ZX9C6vQ==",
+ "version": "7.23.3",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.23.3.tgz",
+ "integrity": "sha512-A7LFsKi4U4fomjqXJlZg/u0ft/n8/7n7lpffUP/ZULx/DtV9SGlNKZolHH6PE8Xl1ngCc0M11OaeZptXVkfKSw==",
"dev": true,
"dependencies": {
- "@babel/helper-module-imports": "^7.22.5",
+ "@babel/helper-module-imports": "^7.22.15",
"@babel/helper-plugin-utils": "^7.22.5",
- "@babel/helper-remap-async-to-generator": "^7.22.5"
+ "@babel/helper-remap-async-to-generator": "^7.22.20"
},
"engines": {
"node": ">=6.9.0"
@@ -1501,16 +1904,15 @@
}
},
"node_modules/@babel/plugin-transform-classes": {
- "version": "7.23.5",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.23.5.tgz",
- "integrity": "sha512-jvOTR4nicqYC9yzOHIhXG5emiFEOpappSJAl73SDSEDcybD+Puuze8Tnpb9p9qEyYup24tq891gkaygIFvWDqg==",
+ "version": "7.23.8",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.23.8.tgz",
+ "integrity": "sha512-yAYslGsY1bX6Knmg46RjiCiNSwJKv2IUC8qOdYKqMMr0491SXFhcHqOdRDeCRohOOIzwN/90C6mQ9qAKgrP7dg==",
"dev": true,
"dependencies": {
"@babel/helper-annotate-as-pure": "^7.22.5",
- "@babel/helper-compilation-targets": "^7.22.15",
+ "@babel/helper-compilation-targets": "^7.23.6",
"@babel/helper-environment-visitor": "^7.22.20",
"@babel/helper-function-name": "^7.23.0",
- "@babel/helper-optimise-call-expression": "^7.22.5",
"@babel/helper-plugin-utils": "^7.22.5",
"@babel/helper-replace-supers": "^7.22.20",
"@babel/helper-split-export-declaration": "^7.22.6",
@@ -1762,9 +2164,9 @@
}
},
"node_modules/@babel/plugin-transform-modules-systemjs": {
- "version": "7.23.3",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.23.3.tgz",
- "integrity": "sha512-ZxyKGTkF9xT9YJuKQRo19ewf3pXpopuYQd8cDXqNzc3mUNbOME0RKMoZxviQk74hwzfQsEe66dE92MaZbdHKNQ==",
+ "version": "7.23.9",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.23.9.tgz",
+ "integrity": "sha512-KDlPRM6sLo4o1FkiSlXoAa8edLXFsKKIda779fbLrvmeuc3itnjCtaO6RrtoaANsIJANj+Vk1zqbZIMhkCAHVw==",
"dev": true,
"dependencies": {
"@babel/helper-hoist-variables": "^7.22.5",
@@ -2022,16 +2424,16 @@
}
},
"node_modules/@babel/plugin-transform-runtime": {
- "version": "7.23.2",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.23.2.tgz",
- "integrity": "sha512-XOntj6icgzMS58jPVtQpiuF6ZFWxQiJavISGx5KGjRj+3gqZr8+N6Kx+N9BApWzgS+DOjIZfXXj0ZesenOWDyA==",
+ "version": "7.23.7",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.23.7.tgz",
+ "integrity": "sha512-fa0hnfmiXc9fq/weK34MUV0drz2pOL/vfKWvN7Qw127hiUPabFCUMgAbYWcchRzMJit4o5ARsK/s+5h0249pLw==",
"dev": true,
"dependencies": {
"@babel/helper-module-imports": "^7.22.15",
"@babel/helper-plugin-utils": "^7.22.5",
- "babel-plugin-polyfill-corejs2": "^0.4.6",
- "babel-plugin-polyfill-corejs3": "^0.8.5",
- "babel-plugin-polyfill-regenerator": "^0.5.3",
+ "babel-plugin-polyfill-corejs2": "^0.4.7",
+ "babel-plugin-polyfill-corejs3": "^0.8.7",
+ "babel-plugin-polyfill-regenerator": "^0.5.4",
"semver": "^6.3.1"
},
"engines": {
@@ -2190,25 +2592,26 @@
}
},
"node_modules/@babel/preset-env": {
- "version": "7.23.2",
- "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.23.2.tgz",
- "integrity": "sha512-BW3gsuDD+rvHL2VO2SjAUNTBe5YrjsTiDyqamPDWY723na3/yPQ65X5oQkFVJZ0o50/2d+svm1rkPoJeR1KxVQ==",
+ "version": "7.23.7",
+ "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.23.7.tgz",
+ "integrity": "sha512-SY27X/GtTz/L4UryMNJ6p4fH4nsgWbz84y9FE0bQeWJP6O5BhgVCt53CotQKHCOeXJel8VyhlhujhlltKms/CA==",
"dev": true,
"dependencies": {
- "@babel/compat-data": "^7.23.2",
- "@babel/helper-compilation-targets": "^7.22.15",
+ "@babel/compat-data": "^7.23.5",
+ "@babel/helper-compilation-targets": "^7.23.6",
"@babel/helper-plugin-utils": "^7.22.5",
- "@babel/helper-validator-option": "^7.22.15",
- "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": "^7.22.15",
- "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": "^7.22.15",
+ "@babel/helper-validator-option": "^7.23.5",
+ "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": "^7.23.3",
+ "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": "^7.23.3",
+ "@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly": "^7.23.7",
"@babel/plugin-proposal-private-property-in-object": "7.21.0-placeholder-for-preset-env.2",
"@babel/plugin-syntax-async-generators": "^7.8.4",
"@babel/plugin-syntax-class-properties": "^7.12.13",
"@babel/plugin-syntax-class-static-block": "^7.14.5",
"@babel/plugin-syntax-dynamic-import": "^7.8.3",
"@babel/plugin-syntax-export-namespace-from": "^7.8.3",
- "@babel/plugin-syntax-import-assertions": "^7.22.5",
- "@babel/plugin-syntax-import-attributes": "^7.22.5",
+ "@babel/plugin-syntax-import-assertions": "^7.23.3",
+ "@babel/plugin-syntax-import-attributes": "^7.23.3",
"@babel/plugin-syntax-import-meta": "^7.10.4",
"@babel/plugin-syntax-json-strings": "^7.8.3",
"@babel/plugin-syntax-logical-assignment-operators": "^7.10.4",
@@ -2220,59 +2623,58 @@
"@babel/plugin-syntax-private-property-in-object": "^7.14.5",
"@babel/plugin-syntax-top-level-await": "^7.14.5",
"@babel/plugin-syntax-unicode-sets-regex": "^7.18.6",
- "@babel/plugin-transform-arrow-functions": "^7.22.5",
- "@babel/plugin-transform-async-generator-functions": "^7.23.2",
- "@babel/plugin-transform-async-to-generator": "^7.22.5",
- "@babel/plugin-transform-block-scoped-functions": "^7.22.5",
- "@babel/plugin-transform-block-scoping": "^7.23.0",
- "@babel/plugin-transform-class-properties": "^7.22.5",
- "@babel/plugin-transform-class-static-block": "^7.22.11",
- "@babel/plugin-transform-classes": "^7.22.15",
- "@babel/plugin-transform-computed-properties": "^7.22.5",
- "@babel/plugin-transform-destructuring": "^7.23.0",
- "@babel/plugin-transform-dotall-regex": "^7.22.5",
- "@babel/plugin-transform-duplicate-keys": "^7.22.5",
- "@babel/plugin-transform-dynamic-import": "^7.22.11",
- "@babel/plugin-transform-exponentiation-operator": "^7.22.5",
- "@babel/plugin-transform-export-namespace-from": "^7.22.11",
- "@babel/plugin-transform-for-of": "^7.22.15",
- "@babel/plugin-transform-function-name": "^7.22.5",
- "@babel/plugin-transform-json-strings": "^7.22.11",
- "@babel/plugin-transform-literals": "^7.22.5",
- "@babel/plugin-transform-logical-assignment-operators": "^7.22.11",
- "@babel/plugin-transform-member-expression-literals": "^7.22.5",
- "@babel/plugin-transform-modules-amd": "^7.23.0",
- "@babel/plugin-transform-modules-commonjs": "^7.23.0",
- "@babel/plugin-transform-modules-systemjs": "^7.23.0",
- "@babel/plugin-transform-modules-umd": "^7.22.5",
+ "@babel/plugin-transform-arrow-functions": "^7.23.3",
+ "@babel/plugin-transform-async-generator-functions": "^7.23.7",
+ "@babel/plugin-transform-async-to-generator": "^7.23.3",
+ "@babel/plugin-transform-block-scoped-functions": "^7.23.3",
+ "@babel/plugin-transform-block-scoping": "^7.23.4",
+ "@babel/plugin-transform-class-properties": "^7.23.3",
+ "@babel/plugin-transform-class-static-block": "^7.23.4",
+ "@babel/plugin-transform-classes": "^7.23.5",
+ "@babel/plugin-transform-computed-properties": "^7.23.3",
+ "@babel/plugin-transform-destructuring": "^7.23.3",
+ "@babel/plugin-transform-dotall-regex": "^7.23.3",
+ "@babel/plugin-transform-duplicate-keys": "^7.23.3",
+ "@babel/plugin-transform-dynamic-import": "^7.23.4",
+ "@babel/plugin-transform-exponentiation-operator": "^7.23.3",
+ "@babel/plugin-transform-export-namespace-from": "^7.23.4",
+ "@babel/plugin-transform-for-of": "^7.23.6",
+ "@babel/plugin-transform-function-name": "^7.23.3",
+ "@babel/plugin-transform-json-strings": "^7.23.4",
+ "@babel/plugin-transform-literals": "^7.23.3",
+ "@babel/plugin-transform-logical-assignment-operators": "^7.23.4",
+ "@babel/plugin-transform-member-expression-literals": "^7.23.3",
+ "@babel/plugin-transform-modules-amd": "^7.23.3",
+ "@babel/plugin-transform-modules-commonjs": "^7.23.3",
+ "@babel/plugin-transform-modules-systemjs": "^7.23.3",
+ "@babel/plugin-transform-modules-umd": "^7.23.3",
"@babel/plugin-transform-named-capturing-groups-regex": "^7.22.5",
- "@babel/plugin-transform-new-target": "^7.22.5",
- "@babel/plugin-transform-nullish-coalescing-operator": "^7.22.11",
- "@babel/plugin-transform-numeric-separator": "^7.22.11",
- "@babel/plugin-transform-object-rest-spread": "^7.22.15",
- "@babel/plugin-transform-object-super": "^7.22.5",
- "@babel/plugin-transform-optional-catch-binding": "^7.22.11",
- "@babel/plugin-transform-optional-chaining": "^7.23.0",
- "@babel/plugin-transform-parameters": "^7.22.15",
- "@babel/plugin-transform-private-methods": "^7.22.5",
- "@babel/plugin-transform-private-property-in-object": "^7.22.11",
- "@babel/plugin-transform-property-literals": "^7.22.5",
- "@babel/plugin-transform-regenerator": "^7.22.10",
- "@babel/plugin-transform-reserved-words": "^7.22.5",
- "@babel/plugin-transform-shorthand-properties": "^7.22.5",
- "@babel/plugin-transform-spread": "^7.22.5",
- "@babel/plugin-transform-sticky-regex": "^7.22.5",
- "@babel/plugin-transform-template-literals": "^7.22.5",
- "@babel/plugin-transform-typeof-symbol": "^7.22.5",
- "@babel/plugin-transform-unicode-escapes": "^7.22.10",
- "@babel/plugin-transform-unicode-property-regex": "^7.22.5",
- "@babel/plugin-transform-unicode-regex": "^7.22.5",
- "@babel/plugin-transform-unicode-sets-regex": "^7.22.5",
+ "@babel/plugin-transform-new-target": "^7.23.3",
+ "@babel/plugin-transform-nullish-coalescing-operator": "^7.23.4",
+ "@babel/plugin-transform-numeric-separator": "^7.23.4",
+ "@babel/plugin-transform-object-rest-spread": "^7.23.4",
+ "@babel/plugin-transform-object-super": "^7.23.3",
+ "@babel/plugin-transform-optional-catch-binding": "^7.23.4",
+ "@babel/plugin-transform-optional-chaining": "^7.23.4",
+ "@babel/plugin-transform-parameters": "^7.23.3",
+ "@babel/plugin-transform-private-methods": "^7.23.3",
+ "@babel/plugin-transform-private-property-in-object": "^7.23.4",
+ "@babel/plugin-transform-property-literals": "^7.23.3",
+ "@babel/plugin-transform-regenerator": "^7.23.3",
+ "@babel/plugin-transform-reserved-words": "^7.23.3",
+ "@babel/plugin-transform-shorthand-properties": "^7.23.3",
+ "@babel/plugin-transform-spread": "^7.23.3",
+ "@babel/plugin-transform-sticky-regex": "^7.23.3",
+ "@babel/plugin-transform-template-literals": "^7.23.3",
+ "@babel/plugin-transform-typeof-symbol": "^7.23.3",
+ "@babel/plugin-transform-unicode-escapes": "^7.23.3",
+ "@babel/plugin-transform-unicode-property-regex": "^7.23.3",
+ "@babel/plugin-transform-unicode-regex": "^7.23.3",
+ "@babel/plugin-transform-unicode-sets-regex": "^7.23.3",
"@babel/preset-modules": "0.1.6-no-external-plugins",
- "@babel/types": "^7.23.0",
- "babel-plugin-polyfill-corejs2": "^0.4.6",
- "babel-plugin-polyfill-corejs3": "^0.8.5",
- "babel-plugin-polyfill-regenerator": "^0.5.3",
+ "babel-plugin-polyfill-corejs2": "^0.4.7",
+ "babel-plugin-polyfill-corejs3": "^0.8.7",
+ "babel-plugin-polyfill-regenerator": "^0.5.4",
"core-js-compat": "^3.31.0",
"semver": "^6.3.1"
},
@@ -2313,9 +2715,9 @@
"dev": true
},
"node_modules/@babel/runtime": {
- "version": "7.23.2",
- "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.23.2.tgz",
- "integrity": "sha512-mM8eg4yl5D6i3lu2QKPuPH4FArvJ8KhTofbE7jwMUv9KX5mBvwPAqnV3MlyBNqdp9RyRKP6Yck8TrfYrPvX3bg==",
+ "version": "7.23.7",
+ "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.23.7.tgz",
+ "integrity": "sha512-w06OXVOFso7LcbzMiDGt+3X7Rh7Ho8MmgPoWU3rarH+8upf+wSU/grlGbWzQyr3DkdN6ZeuMFjpdwW0Q+HxobA==",
"dev": true,
"dependencies": {
"regenerator-runtime": "^0.14.0"
@@ -2325,22 +2727,22 @@
}
},
"node_modules/@babel/template": {
- "version": "7.22.15",
- "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.22.15.tgz",
- "integrity": "sha512-QPErUVm4uyJa60rkI73qneDacvdvzxshT3kksGqlGWYdOTIUOwJ7RDUL8sGqslY1uXWSL6xMFKEXDS3ox2uF0w==",
+ "version": "7.23.9",
+ "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.23.9.tgz",
+ "integrity": "sha512-+xrD2BWLpvHKNmX2QbpdpsBaWnRxahMwJjO+KZk2JOElj5nSmKezyS1B4u+QbHMTX69t4ukm6hh9lsYQ7GHCKA==",
"dependencies": {
- "@babel/code-frame": "^7.22.13",
- "@babel/parser": "^7.22.15",
- "@babel/types": "^7.22.15"
+ "@babel/code-frame": "^7.23.5",
+ "@babel/parser": "^7.23.9",
+ "@babel/types": "^7.23.9"
},
"engines": {
"node": ">=6.9.0"
}
},
"node_modules/@babel/traverse": {
- "version": "7.23.6",
- "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.23.6.tgz",
- "integrity": "sha512-czastdK1e8YByZqezMPFiZ8ahwVMh/ESl9vPgvgdB9AmFMGP5jfpFax74AQgl5zj4XHzqeYAg2l8PuUeRS1MgQ==",
+ "version": "7.23.9",
+ "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.23.9.tgz",
+ "integrity": "sha512-I/4UJ9vs90OkBtY6iiiTORVMyIhJ4kAVmsKo9KFc8UOxMeUfi2hvtIBsET5u9GizXE6/GFSuKCTNfgCswuEjRg==",
"dependencies": {
"@babel/code-frame": "^7.23.5",
"@babel/generator": "^7.23.6",
@@ -2348,8 +2750,8 @@
"@babel/helper-function-name": "^7.23.0",
"@babel/helper-hoist-variables": "^7.22.5",
"@babel/helper-split-export-declaration": "^7.22.6",
- "@babel/parser": "^7.23.6",
- "@babel/types": "^7.23.6",
+ "@babel/parser": "^7.23.9",
+ "@babel/types": "^7.23.9",
"debug": "^4.3.1",
"globals": "^11.1.0"
},
@@ -2357,24 +2759,10 @@
"node": ">=6.9.0"
}
},
- "node_modules/@babel/traverse/node_modules/@babel/generator": {
- "version": "7.23.6",
- "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.23.6.tgz",
- "integrity": "sha512-qrSfCYxYQB5owCmGLbl8XRpX1ytXlpueOb0N0UmQwA073KZxejgQTzAmJezxvpwQD9uGtK2shHdi55QT+MbjIw==",
- "dependencies": {
- "@babel/types": "^7.23.6",
- "@jridgewell/gen-mapping": "^0.3.2",
- "@jridgewell/trace-mapping": "^0.3.17",
- "jsesc": "^2.5.1"
- },
- "engines": {
- "node": ">=6.9.0"
- }
- },
"node_modules/@babel/types": {
- "version": "7.23.6",
- "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.23.6.tgz",
- "integrity": "sha512-+uarb83brBzPKN38NX1MkB6vb6+mwvR6amUulqAE7ccQw1pEl+bCia9TbdG1lsnFP7lZySvUn37CHyXQdfTwzg==",
+ "version": "7.23.9",
+ "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.23.9.tgz",
+ "integrity": "sha512-dQjSq/7HaSjRM43FFGnv5keM2HsxpmyV1PfaSVm0nzzjwwTmjOe6J4bC8e3+pTEIgHaHj+1ZlLThRJ2auc/w1Q==",
"dependencies": {
"@babel/helper-string-parser": "^7.23.4",
"@babel/helper-validator-identifier": "^7.22.20",
@@ -2429,10 +2817,26 @@
"node": ">=10.0.0"
}
},
+ "node_modules/@esbuild/aix-ppc64": {
+ "version": "0.19.11",
+ "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.19.11.tgz",
+ "integrity": "sha512-FnzU0LyE3ySQk7UntJO4+qIiQgI7KoODnZg5xzXIrFJlKd2P2gwHsHY4927xj9y5PJmJSzULiUCWmv7iWnNa7g==",
+ "cpu": [
+ "ppc64"
+ ],
+ "dev": true,
+ "optional": true,
+ "os": [
+ "aix"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
"node_modules/@esbuild/android-arm": {
- "version": "0.19.5",
- "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.19.5.tgz",
- "integrity": "sha512-bhvbzWFF3CwMs5tbjf3ObfGqbl/17ict2/uwOSfr3wmxDE6VdS2GqY/FuzIPe0q0bdhj65zQsvqfArI9MY6+AA==",
+ "version": "0.19.11",
+ "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.19.11.tgz",
+ "integrity": "sha512-5OVapq0ClabvKvQ58Bws8+wkLCV+Rxg7tUVbo9xu034Nm536QTII4YzhaFriQ7rMrorfnFKUsArD2lqKbFY4vw==",
"cpu": [
"arm"
],
@@ -2446,9 +2850,9 @@
}
},
"node_modules/@esbuild/android-arm64": {
- "version": "0.19.5",
- "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.19.5.tgz",
- "integrity": "sha512-5d1OkoJxnYQfmC+Zd8NBFjkhyCNYwM4n9ODrycTFY6Jk1IGiZ+tjVJDDSwDt77nK+tfpGP4T50iMtVi4dEGzhQ==",
+ "version": "0.19.11",
+ "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.19.11.tgz",
+ "integrity": "sha512-aiu7K/5JnLj//KOnOfEZ0D90obUkRzDMyqd/wNAUQ34m4YUPVhRZpnqKV9uqDGxT7cToSDnIHsGooyIczu9T+Q==",
"cpu": [
"arm64"
],
@@ -2462,9 +2866,9 @@
}
},
"node_modules/@esbuild/android-x64": {
- "version": "0.19.5",
- "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.19.5.tgz",
- "integrity": "sha512-9t+28jHGL7uBdkBjL90QFxe7DVA+KGqWlHCF8ChTKyaKO//VLuoBricQCgwhOjA1/qOczsw843Fy4cbs4H3DVA==",
+ "version": "0.19.11",
+ "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.19.11.tgz",
+ "integrity": "sha512-eccxjlfGw43WYoY9QgB82SgGgDbibcqyDTlk3l3C0jOVHKxrjdc9CTwDUQd0vkvYg5um0OH+GpxYvp39r+IPOg==",
"cpu": [
"x64"
],
@@ -2478,9 +2882,9 @@
}
},
"node_modules/@esbuild/darwin-arm64": {
- "version": "0.19.5",
- "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.19.5.tgz",
- "integrity": "sha512-mvXGcKqqIqyKoxq26qEDPHJuBYUA5KizJncKOAf9eJQez+L9O+KfvNFu6nl7SCZ/gFb2QPaRqqmG0doSWlgkqw==",
+ "version": "0.19.11",
+ "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.19.11.tgz",
+ "integrity": "sha512-ETp87DRWuSt9KdDVkqSoKoLFHYTrkyz2+65fj9nfXsaV3bMhTCjtQfw3y+um88vGRKRiF7erPrh/ZuIdLUIVxQ==",
"cpu": [
"arm64"
],
@@ -2494,9 +2898,9 @@
}
},
"node_modules/@esbuild/darwin-x64": {
- "version": "0.19.5",
- "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.19.5.tgz",
- "integrity": "sha512-Ly8cn6fGLNet19s0X4unjcniX24I0RqjPv+kurpXabZYSXGM4Pwpmf85WHJN3lAgB8GSth7s5A0r856S+4DyiA==",
+ "version": "0.19.11",
+ "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.19.11.tgz",
+ "integrity": "sha512-fkFUiS6IUK9WYUO/+22omwetaSNl5/A8giXvQlcinLIjVkxwTLSktbF5f/kJMftM2MJp9+fXqZ5ezS7+SALp4g==",
"cpu": [
"x64"
],
@@ -2510,9 +2914,9 @@
}
},
"node_modules/@esbuild/freebsd-arm64": {
- "version": "0.19.5",
- "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.19.5.tgz",
- "integrity": "sha512-GGDNnPWTmWE+DMchq1W8Sd0mUkL+APvJg3b11klSGUDvRXh70JqLAO56tubmq1s2cgpVCSKYywEiKBfju8JztQ==",
+ "version": "0.19.11",
+ "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.19.11.tgz",
+ "integrity": "sha512-lhoSp5K6bxKRNdXUtHoNc5HhbXVCS8V0iZmDvyWvYq9S5WSfTIHU2UGjcGt7UeS6iEYp9eeymIl5mJBn0yiuxA==",
"cpu": [
"arm64"
],
@@ -2526,9 +2930,9 @@
}
},
"node_modules/@esbuild/freebsd-x64": {
- "version": "0.19.5",
- "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.19.5.tgz",
- "integrity": "sha512-1CCwDHnSSoA0HNwdfoNY0jLfJpd7ygaLAp5EHFos3VWJCRX9DMwWODf96s9TSse39Br7oOTLryRVmBoFwXbuuQ==",
+ "version": "0.19.11",
+ "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.19.11.tgz",
+ "integrity": "sha512-JkUqn44AffGXitVI6/AbQdoYAq0TEullFdqcMY/PCUZ36xJ9ZJRtQabzMA+Vi7r78+25ZIBosLTOKnUXBSi1Kw==",
"cpu": [
"x64"
],
@@ -2542,9 +2946,9 @@
}
},
"node_modules/@esbuild/linux-arm": {
- "version": "0.19.5",
- "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.19.5.tgz",
- "integrity": "sha512-lrWXLY/vJBzCPC51QN0HM71uWgIEpGSjSZZADQhq7DKhPcI6NH1IdzjfHkDQws2oNpJKpR13kv7/pFHBbDQDwQ==",
+ "version": "0.19.11",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.19.11.tgz",
+ "integrity": "sha512-3CRkr9+vCV2XJbjwgzjPtO8T0SZUmRZla+UL1jw+XqHZPkPgZiyWvbDvl9rqAN8Zl7qJF0O/9ycMtjU67HN9/Q==",
"cpu": [
"arm"
],
@@ -2558,9 +2962,9 @@
}
},
"node_modules/@esbuild/linux-arm64": {
- "version": "0.19.5",
- "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.19.5.tgz",
- "integrity": "sha512-o3vYippBmSrjjQUCEEiTZ2l+4yC0pVJD/Dl57WfPwwlvFkrxoSO7rmBZFii6kQB3Wrn/6GwJUPLU5t52eq2meA==",
+ "version": "0.19.11",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.19.11.tgz",
+ "integrity": "sha512-LneLg3ypEeveBSMuoa0kwMpCGmpu8XQUh+mL8XXwoYZ6Be2qBnVtcDI5azSvh7vioMDhoJFZzp9GWp9IWpYoUg==",
"cpu": [
"arm64"
],
@@ -2574,9 +2978,9 @@
}
},
"node_modules/@esbuild/linux-ia32": {
- "version": "0.19.5",
- "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.19.5.tgz",
- "integrity": "sha512-MkjHXS03AXAkNp1KKkhSKPOCYztRtK+KXDNkBa6P78F8Bw0ynknCSClO/ztGszILZtyO/lVKpa7MolbBZ6oJtQ==",
+ "version": "0.19.11",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.19.11.tgz",
+ "integrity": "sha512-caHy++CsD8Bgq2V5CodbJjFPEiDPq8JJmBdeyZ8GWVQMjRD0sU548nNdwPNvKjVpamYYVL40AORekgfIubwHoA==",
"cpu": [
"ia32"
],
@@ -2590,9 +2994,9 @@
}
},
"node_modules/@esbuild/linux-loong64": {
- "version": "0.19.5",
- "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.19.5.tgz",
- "integrity": "sha512-42GwZMm5oYOD/JHqHska3Jg0r+XFb/fdZRX+WjADm3nLWLcIsN27YKtqxzQmGNJgu0AyXg4HtcSK9HuOk3v1Dw==",
+ "version": "0.19.11",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.19.11.tgz",
+ "integrity": "sha512-ppZSSLVpPrwHccvC6nQVZaSHlFsvCQyjnvirnVjbKSHuE5N24Yl8F3UwYUUR1UEPaFObGD2tSvVKbvR+uT1Nrg==",
"cpu": [
"loong64"
],
@@ -2606,9 +3010,9 @@
}
},
"node_modules/@esbuild/linux-mips64el": {
- "version": "0.19.5",
- "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.19.5.tgz",
- "integrity": "sha512-kcjndCSMitUuPJobWCnwQ9lLjiLZUR3QLQmlgaBfMX23UEa7ZOrtufnRds+6WZtIS9HdTXqND4yH8NLoVVIkcg==",
+ "version": "0.19.11",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.19.11.tgz",
+ "integrity": "sha512-B5x9j0OgjG+v1dF2DkH34lr+7Gmv0kzX6/V0afF41FkPMMqaQ77pH7CrhWeR22aEeHKaeZVtZ6yFwlxOKPVFyg==",
"cpu": [
"mips64el"
],
@@ -2622,9 +3026,9 @@
}
},
"node_modules/@esbuild/linux-ppc64": {
- "version": "0.19.5",
- "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.19.5.tgz",
- "integrity": "sha512-yJAxJfHVm0ZbsiljbtFFP1BQKLc8kUF6+17tjQ78QjqjAQDnhULWiTA6u0FCDmYT1oOKS9PzZ2z0aBI+Mcyj7Q==",
+ "version": "0.19.11",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.19.11.tgz",
+ "integrity": "sha512-MHrZYLeCG8vXblMetWyttkdVRjQlQUb/oMgBNurVEnhj4YWOr4G5lmBfZjHYQHHN0g6yDmCAQRR8MUHldvvRDA==",
"cpu": [
"ppc64"
],
@@ -2638,9 +3042,9 @@
}
},
"node_modules/@esbuild/linux-riscv64": {
- "version": "0.19.5",
- "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.19.5.tgz",
- "integrity": "sha512-5u8cIR/t3gaD6ad3wNt1MNRstAZO+aNyBxu2We8X31bA8XUNyamTVQwLDA1SLoPCUehNCymhBhK3Qim1433Zag==",
+ "version": "0.19.11",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.19.11.tgz",
+ "integrity": "sha512-f3DY++t94uVg141dozDu4CCUkYW+09rWtaWfnb3bqe4w5NqmZd6nPVBm+qbz7WaHZCoqXqHz5p6CM6qv3qnSSQ==",
"cpu": [
"riscv64"
],
@@ -2654,9 +3058,9 @@
}
},
"node_modules/@esbuild/linux-s390x": {
- "version": "0.19.5",
- "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.19.5.tgz",
- "integrity": "sha512-Z6JrMyEw/EmZBD/OFEFpb+gao9xJ59ATsoTNlj39jVBbXqoZm4Xntu6wVmGPB/OATi1uk/DB+yeDPv2E8PqZGw==",
+ "version": "0.19.11",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.19.11.tgz",
+ "integrity": "sha512-A5xdUoyWJHMMlcSMcPGVLzYzpcY8QP1RtYzX5/bS4dvjBGVxdhuiYyFwp7z74ocV7WDc0n1harxmpq2ePOjI0Q==",
"cpu": [
"s390x"
],
@@ -2670,9 +3074,9 @@
}
},
"node_modules/@esbuild/linux-x64": {
- "version": "0.19.5",
- "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.19.5.tgz",
- "integrity": "sha512-psagl+2RlK1z8zWZOmVdImisMtrUxvwereIdyJTmtmHahJTKb64pAcqoPlx6CewPdvGvUKe2Jw+0Z/0qhSbG1A==",
+ "version": "0.19.11",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.19.11.tgz",
+ "integrity": "sha512-grbyMlVCvJSfxFQUndw5mCtWs5LO1gUlwP4CDi4iJBbVpZcqLVT29FxgGuBJGSzyOxotFG4LoO5X+M1350zmPA==",
"cpu": [
"x64"
],
@@ -2686,9 +3090,9 @@
}
},
"node_modules/@esbuild/netbsd-x64": {
- "version": "0.19.5",
- "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.19.5.tgz",
- "integrity": "sha512-kL2l+xScnAy/E/3119OggX8SrWyBEcqAh8aOY1gr4gPvw76la2GlD4Ymf832UCVbmuWeTf2adkZDK+h0Z/fB4g==",
+ "version": "0.19.11",
+ "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.19.11.tgz",
+ "integrity": "sha512-13jvrQZJc3P230OhU8xgwUnDeuC/9egsjTkXN49b3GcS5BKvJqZn86aGM8W9pd14Kd+u7HuFBMVtrNGhh6fHEQ==",
"cpu": [
"x64"
],
@@ -2702,9 +3106,9 @@
}
},
"node_modules/@esbuild/openbsd-x64": {
- "version": "0.19.5",
- "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.19.5.tgz",
- "integrity": "sha512-sPOfhtzFufQfTBgRnE1DIJjzsXukKSvZxloZbkJDG383q0awVAq600pc1nfqBcl0ice/WN9p4qLc39WhBShRTA==",
+ "version": "0.19.11",
+ "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.19.11.tgz",
+ "integrity": "sha512-ysyOGZuTp6SNKPE11INDUeFVVQFrhcNDVUgSQVDzqsqX38DjhPEPATpid04LCoUr2WXhQTEZ8ct/EgJCUDpyNw==",
"cpu": [
"x64"
],
@@ -2718,9 +3122,9 @@
}
},
"node_modules/@esbuild/sunos-x64": {
- "version": "0.19.5",
- "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.19.5.tgz",
- "integrity": "sha512-dGZkBXaafuKLpDSjKcB0ax0FL36YXCvJNnztjKV+6CO82tTYVDSH2lifitJ29jxRMoUhgkg9a+VA/B03WK5lcg==",
+ "version": "0.19.11",
+ "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.19.11.tgz",
+ "integrity": "sha512-Hf+Sad9nVwvtxy4DXCZQqLpgmRTQqyFyhT3bZ4F2XlJCjxGmRFF0Shwn9rzhOYRB61w9VMXUkxlBy56dk9JJiQ==",
"cpu": [
"x64"
],
@@ -2734,9 +3138,9 @@
}
},
"node_modules/@esbuild/win32-arm64": {
- "version": "0.19.5",
- "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.19.5.tgz",
- "integrity": "sha512-dWVjD9y03ilhdRQ6Xig1NWNgfLtf2o/STKTS+eZuF90fI2BhbwD6WlaiCGKptlqXlURVB5AUOxUj09LuwKGDTg==",
+ "version": "0.19.11",
+ "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.19.11.tgz",
+ "integrity": "sha512-0P58Sbi0LctOMOQbpEOvOL44Ne0sqbS0XWHMvvrg6NE5jQ1xguCSSw9jQeUk2lfrXYsKDdOe6K+oZiwKPilYPQ==",
"cpu": [
"arm64"
],
@@ -2750,9 +3154,9 @@
}
},
"node_modules/@esbuild/win32-ia32": {
- "version": "0.19.5",
- "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.19.5.tgz",
- "integrity": "sha512-4liggWIA4oDgUxqpZwrDhmEfAH4d0iljanDOK7AnVU89T6CzHon/ony8C5LeOdfgx60x5cnQJFZwEydVlYx4iw==",
+ "version": "0.19.11",
+ "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.19.11.tgz",
+ "integrity": "sha512-6YOrWS+sDJDmshdBIQU+Uoyh7pQKrdykdefC1avn76ss5c+RN6gut3LZA4E2cH5xUEp5/cA0+YxRaVtRAb0xBg==",
"cpu": [
"ia32"
],
@@ -2766,9 +3170,9 @@
}
},
"node_modules/@esbuild/win32-x64": {
- "version": "0.19.5",
- "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.19.5.tgz",
- "integrity": "sha512-czTrygUsB/jlM8qEW5MD8bgYU2Xg14lo6kBDXW6HdxKjh8M5PzETGiSHaz9MtbXBYDloHNUAUW2tMiKW4KM9Mw==",
+ "version": "0.19.11",
+ "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.19.11.tgz",
+ "integrity": "sha512-vfkhltrjCAb603XaFhqhAF4LGDi2M4OrCRrFusyQ+iTLQ/o60QQXxc9cZC/FFpihBI9N1Grn6SMKVJ4KP7Fuiw==",
"cpu": [
"x64"
],
@@ -3910,9 +4314,9 @@
}
},
"node_modules/@ng-select/ng-select": {
- "version": "12.0.4",
- "resolved": "https://registry.npmjs.org/@ng-select/ng-select/-/ng-select-12.0.4.tgz",
- "integrity": "sha512-bcvYLCdmKtJBZRLFLfnKauPqVlJJDecMzU4pZ360h1V8EsE4BCHoabNJQptqOESigcxBY1bpAe0i6aKu6JgL5Q==",
+ "version": "12.0.6",
+ "resolved": "https://registry.npmjs.org/@ng-select/ng-select/-/ng-select-12.0.6.tgz",
+ "integrity": "sha512-Xn3r10hQ60hXbS8tOiuT412OLYQrsS6QfGojuJBNy2Ns0rFrsZVV2T3TlBq75ZKXBTUgL9ZMQvCilx6z0SxkDw==",
"dependencies": {
"tslib": "^2.3.1"
},
@@ -3942,9 +4346,9 @@
}
},
"node_modules/@ngtools/webpack": {
- "version": "17.0.8",
- "resolved": "https://registry.npmjs.org/@ngtools/webpack/-/webpack-17.0.8.tgz",
- "integrity": "sha512-wx0XBMrbpDeailK2uIhp/ZVMC3GK3BWwJjUu5SbT4BFrcoi2Zd9/9m0RCBAY54UXLBCqKd+ih7pJ6JSvprZmWw==",
+ "version": "17.1.2",
+ "resolved": "https://registry.npmjs.org/@ngtools/webpack/-/webpack-17.1.2.tgz",
+ "integrity": "sha512-MdNVSIp0x8AK26L+CxMTXH4weq2sNIp4C09RSdk7y6UkfBxMA3O0jTto9tW3ehkBaaGZ4dSiWkXA8L/ydMiQmA==",
"dev": true,
"engines": {
"node": "^18.13.0 || >=20.9.0",
@@ -3953,7 +4357,7 @@
},
"peerDependencies": {
"@angular/compiler-cli": "^17.0.0",
- "typescript": ">=5.2 <5.3",
+ "typescript": ">=5.2 <5.4",
"webpack": "^5.54.0"
}
},
@@ -4019,9 +4423,9 @@
}
},
"node_modules/@npmcli/agent/node_modules/lru-cache": {
- "version": "10.1.0",
- "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.1.0.tgz",
- "integrity": "sha512-/1clY/ui8CzjKFyjdvwPWJUYKiFVXG2I2cY0ssG7h4+hwk+XOIX7ZSG9Q7TW8TW3Kp3BUSqgFWBLgL4PJ+Blag==",
+ "version": "10.2.0",
+ "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.2.0.tgz",
+ "integrity": "sha512-2bIM8x+VAf6JT4bKAljS1qUWgMsqZRPGJS6FSahIMPVvctcNhyVp7AJu7quxOW9jwkryBReKZY5tY5JYv2n/7Q==",
"dev": true,
"engines": {
"node": "14 || >=16.14"
@@ -4040,9 +4444,9 @@
}
},
"node_modules/@npmcli/git": {
- "version": "5.0.3",
- "resolved": "https://registry.npmjs.org/@npmcli/git/-/git-5.0.3.tgz",
- "integrity": "sha512-UZp9NwK+AynTrKvHn5k3KviW/hA5eENmFsu3iAPe7sWRt0lFUdsY/wXIYjpDFe7cdSNwOIzbObfwgt6eL5/2zw==",
+ "version": "5.0.4",
+ "resolved": "https://registry.npmjs.org/@npmcli/git/-/git-5.0.4.tgz",
+ "integrity": "sha512-nr6/WezNzuYUppzXRaYu/W4aT5rLxdXqEFupbh6e/ovlYFQ8hpu1UUPV3Ir/YTl+74iXl2ZOMlGzudh9ZPUchQ==",
"dev": true,
"dependencies": {
"@npmcli/promise-spawn": "^7.0.0",
@@ -4068,9 +4472,9 @@
}
},
"node_modules/@npmcli/git/node_modules/lru-cache": {
- "version": "10.1.0",
- "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.1.0.tgz",
- "integrity": "sha512-/1clY/ui8CzjKFyjdvwPWJUYKiFVXG2I2cY0ssG7h4+hwk+XOIX7ZSG9Q7TW8TW3Kp3BUSqgFWBLgL4PJ+Blag==",
+ "version": "10.2.0",
+ "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.2.0.tgz",
+ "integrity": "sha512-2bIM8x+VAf6JT4bKAljS1qUWgMsqZRPGJS6FSahIMPVvctcNhyVp7AJu7quxOW9jwkryBReKZY5tY5JYv2n/7Q==",
"dev": true,
"engines": {
"node": "14 || >=16.14"
@@ -4116,10 +4520,83 @@
"node": "^14.17.0 || ^16.13.0 || >=18.0.0"
}
},
+ "node_modules/@npmcli/package-json": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/@npmcli/package-json/-/package-json-5.0.0.tgz",
+ "integrity": "sha512-OI2zdYBLhQ7kpNPaJxiflofYIpkNLi+lnGdzqUOfRmCF3r2l1nadcjtCYMJKv/Utm/ZtlffaUuTiAktPHbc17g==",
+ "dev": true,
+ "dependencies": {
+ "@npmcli/git": "^5.0.0",
+ "glob": "^10.2.2",
+ "hosted-git-info": "^7.0.0",
+ "json-parse-even-better-errors": "^3.0.0",
+ "normalize-package-data": "^6.0.0",
+ "proc-log": "^3.0.0",
+ "semver": "^7.5.3"
+ },
+ "engines": {
+ "node": "^16.14.0 || >=18.0.0"
+ }
+ },
+ "node_modules/@npmcli/package-json/node_modules/brace-expansion": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz",
+ "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==",
+ "dev": true,
+ "dependencies": {
+ "balanced-match": "^1.0.0"
+ }
+ },
+ "node_modules/@npmcli/package-json/node_modules/glob": {
+ "version": "10.3.10",
+ "resolved": "https://registry.npmjs.org/glob/-/glob-10.3.10.tgz",
+ "integrity": "sha512-fa46+tv1Ak0UPK1TOy/pZrIybNNt4HCv7SDzwyfiOZkvZLEbjsZkJBPtDHVshZjbecAoAGSC20MjLDG/qr679g==",
+ "dev": true,
+ "dependencies": {
+ "foreground-child": "^3.1.0",
+ "jackspeak": "^2.3.5",
+ "minimatch": "^9.0.1",
+ "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0",
+ "path-scurry": "^1.10.1"
+ },
+ "bin": {
+ "glob": "dist/esm/bin.mjs"
+ },
+ "engines": {
+ "node": ">=16 || 14 >=14.17"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/isaacs"
+ }
+ },
+ "node_modules/@npmcli/package-json/node_modules/json-parse-even-better-errors": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-3.0.1.tgz",
+ "integrity": "sha512-aatBvbL26wVUCLmbWdCpeu9iF5wOyWpagiKkInA+kfws3sWdBrTnsvN2CKcyCYyUrc7rebNBlK6+kteg7ksecg==",
+ "dev": true,
+ "engines": {
+ "node": "^14.17.0 || ^16.13.0 || >=18.0.0"
+ }
+ },
+ "node_modules/@npmcli/package-json/node_modules/minimatch": {
+ "version": "9.0.3",
+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.3.tgz",
+ "integrity": "sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==",
+ "dev": true,
+ "dependencies": {
+ "brace-expansion": "^2.0.1"
+ },
+ "engines": {
+ "node": ">=16 || 14 >=14.17"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/isaacs"
+ }
+ },
"node_modules/@npmcli/promise-spawn": {
- "version": "7.0.0",
- "resolved": "https://registry.npmjs.org/@npmcli/promise-spawn/-/promise-spawn-7.0.0.tgz",
- "integrity": "sha512-wBqcGsMELZna0jDblGd7UXgOby45TQaMWmbFwWX+SEotk4HV6zG2t6rT9siyLhPk4P6YYqgfL1UO8nMWDBVJXQ==",
+ "version": "7.0.1",
+ "resolved": "https://registry.npmjs.org/@npmcli/promise-spawn/-/promise-spawn-7.0.1.tgz",
+ "integrity": "sha512-P4KkF9jX3y+7yFUxgcUdDtLy+t4OlDGuEBLNs57AZsfSfg+uV6MLndqGpnl4831ggaEdXwR50XFoZP4VFtHolg==",
"dev": true,
"dependencies": {
"which": "^4.0.0"
@@ -4153,15 +4630,15 @@
}
},
"node_modules/@npmcli/run-script": {
- "version": "7.0.2",
- "resolved": "https://registry.npmjs.org/@npmcli/run-script/-/run-script-7.0.2.tgz",
- "integrity": "sha512-Omu0rpA8WXvcGeY6DDzyRoY1i5DkCBkzyJ+m2u7PD6quzb0TvSqdIPOkTn8ZBOj7LbbcbMfZ3c5skwSu6m8y2w==",
+ "version": "7.0.4",
+ "resolved": "https://registry.npmjs.org/@npmcli/run-script/-/run-script-7.0.4.tgz",
+ "integrity": "sha512-9ApYM/3+rBt9V80aYg6tZfzj3UWdiYyCt7gJUD1VJKvWF5nwKDSICXbYIQbspFTq6TOpbsEtIC0LArB8d9PFmg==",
"dev": true,
"dependencies": {
"@npmcli/node-gyp": "^3.0.0",
+ "@npmcli/package-json": "^5.0.0",
"@npmcli/promise-spawn": "^7.0.0",
"node-gyp": "^10.0.0",
- "read-package-json-fast": "^3.0.0",
"which": "^4.0.0"
},
"engines": {
@@ -4193,21 +4670,21 @@
}
},
"node_modules/@nrwl/devkit": {
- "version": "17.1.3",
- "resolved": "https://registry.npmjs.org/@nrwl/devkit/-/devkit-17.1.3.tgz",
- "integrity": "sha512-8HfIY7P3yIYfQ/XKuHoq0GGLA9GpwWtBlI9kPQ0ygjuJ9BkpiGMtQvO6003zs7c6vpc2vNeG+Jmi72+EKvoN5A==",
+ "version": "17.2.8",
+ "resolved": "https://registry.npmjs.org/@nrwl/devkit/-/devkit-17.2.8.tgz",
+ "integrity": "sha512-l2dFy5LkWqSA45s6pee6CoqJeluH+sjRdVnAAQfjLHRNSx6mFAKblyzq5h1f4P0EUCVVVqLs+kVqmNx5zxYqvw==",
"dev": true,
"dependencies": {
- "@nx/devkit": "17.1.3"
+ "@nx/devkit": "17.2.8"
}
},
"node_modules/@nrwl/tao": {
- "version": "17.1.3",
- "resolved": "https://registry.npmjs.org/@nrwl/tao/-/tao-17.1.3.tgz",
- "integrity": "sha512-9YpfEkUpVqOweqgQvMDcWApNx4jhCqBNH5IByZj302Enp3TLnQSvhuX5Dfr8hNQRQokIpEn6tW8SGTctTM5LXw==",
+ "version": "17.2.8",
+ "resolved": "https://registry.npmjs.org/@nrwl/tao/-/tao-17.2.8.tgz",
+ "integrity": "sha512-Qpk5YKeJ+LppPL/wtoDyNGbJs2MsTi6qyX/RdRrEc8lc4bk6Cw3Oul1qTXCI6jT0KzTz+dZtd0zYD/G7okkzvg==",
"dev": true,
"dependencies": {
- "nx": "17.1.3",
+ "nx": "17.2.8",
"tslib": "^2.3.0"
},
"bin": {
@@ -4215,12 +4692,12 @@
}
},
"node_modules/@nx/devkit": {
- "version": "17.1.3",
- "resolved": "https://registry.npmjs.org/@nx/devkit/-/devkit-17.1.3.tgz",
- "integrity": "sha512-1Is7ooovg3kdGJ5VdkePulRUDaMYLLULr+LwXgx7oHSW7AY2iCmhkoOE/vSR7DJ6rkey2gYx7eT1IoRoORiIaQ==",
+ "version": "17.2.8",
+ "resolved": "https://registry.npmjs.org/@nx/devkit/-/devkit-17.2.8.tgz",
+ "integrity": "sha512-6LtiQihtZwqz4hSrtT5cCG5XMCWppG6/B8c1kNksg97JuomELlWyUyVF+sxmeERkcLYFaKPTZytP0L3dmCFXaw==",
"dev": true,
"dependencies": {
- "@nrwl/devkit": "17.1.3",
+ "@nrwl/devkit": "17.2.8",
"ejs": "^3.1.7",
"enquirer": "~2.3.6",
"ignore": "^5.0.4",
@@ -4266,9 +4743,9 @@
"dev": true
},
"node_modules/@nx/nx-darwin-arm64": {
- "version": "17.1.3",
- "resolved": "https://registry.npmjs.org/@nx/nx-darwin-arm64/-/nx-darwin-arm64-17.1.3.tgz",
- "integrity": "sha512-f4qLa0y3C4uuhYKgq+MU892WaQvtvmHqrEhHINUOxYXNiLy2sgyJPW0mOZvzXtC4dPaUmiVaFP5RMVzc8Lxhtg==",
+ "version": "17.2.8",
+ "resolved": "https://registry.npmjs.org/@nx/nx-darwin-arm64/-/nx-darwin-arm64-17.2.8.tgz",
+ "integrity": "sha512-dMb0uxug4hM7tusISAU1TfkDK3ixYmzc1zhHSZwpR7yKJIyKLtUpBTbryt8nyso37AS1yH+dmfh2Fj2WxfBHTg==",
"cpu": [
"arm64"
],
@@ -4282,9 +4759,9 @@
}
},
"node_modules/@nx/nx-darwin-x64": {
- "version": "17.1.3",
- "resolved": "https://registry.npmjs.org/@nx/nx-darwin-x64/-/nx-darwin-x64-17.1.3.tgz",
- "integrity": "sha512-kh76ZjqkLeQUIAfTa9G/DFFf+e1sZ5ipDzk7zFGhZ2k68PoQoFdsFOO3C513JmuEdavspts6Hkifsqh61TaE+A==",
+ "version": "17.2.8",
+ "resolved": "https://registry.npmjs.org/@nx/nx-darwin-x64/-/nx-darwin-x64-17.2.8.tgz",
+ "integrity": "sha512-0cXzp1tGr7/6lJel102QiLA4NkaLCkQJj6VzwbwuvmuCDxPbpmbz7HC1tUteijKBtOcdXit1/MEoEU007To8Bw==",
"cpu": [
"x64"
],
@@ -4298,9 +4775,9 @@
}
},
"node_modules/@nx/nx-freebsd-x64": {
- "version": "17.1.3",
- "resolved": "https://registry.npmjs.org/@nx/nx-freebsd-x64/-/nx-freebsd-x64-17.1.3.tgz",
- "integrity": "sha512-CRuVL5ZSLb+Gc8vwMUUe9Pl/1Z26YtXMKTahBMQh2dac63vzLgzqIV4c66aduUl1x2M0kGYBSIIRG9z0/BgWeg==",
+ "version": "17.2.8",
+ "resolved": "https://registry.npmjs.org/@nx/nx-freebsd-x64/-/nx-freebsd-x64-17.2.8.tgz",
+ "integrity": "sha512-YFMgx5Qpp2btCgvaniDGdu7Ctj56bfFvbbaHQWmOeBPK1krNDp2mqp8HK6ZKOfEuDJGOYAp7HDtCLvdZKvJxzA==",
"cpu": [
"x64"
],
@@ -4314,9 +4791,9 @@
}
},
"node_modules/@nx/nx-linux-arm-gnueabihf": {
- "version": "17.1.3",
- "resolved": "https://registry.npmjs.org/@nx/nx-linux-arm-gnueabihf/-/nx-linux-arm-gnueabihf-17.1.3.tgz",
- "integrity": "sha512-KDBmd5tSrg93g/oij/eGW4yeVNVK3DBIM4VYAS2vtkIgVOGoqcQ+SEIeMK3nMUJP9jGyblt3QNj5ZsJBtScwQw==",
+ "version": "17.2.8",
+ "resolved": "https://registry.npmjs.org/@nx/nx-linux-arm-gnueabihf/-/nx-linux-arm-gnueabihf-17.2.8.tgz",
+ "integrity": "sha512-iN2my6MrhLRkVDtdivQHugK8YmR7URo1wU9UDuHQ55z3tEcny7LV3W9NSsY9UYPK/FrxdDfevj0r2hgSSdhnzA==",
"cpu": [
"arm"
],
@@ -4330,9 +4807,9 @@
}
},
"node_modules/@nx/nx-linux-arm64-gnu": {
- "version": "17.1.3",
- "resolved": "https://registry.npmjs.org/@nx/nx-linux-arm64-gnu/-/nx-linux-arm64-gnu-17.1.3.tgz",
- "integrity": "sha512-W2tNL/7sIwoQKLmuy68Usd6TZzIZvxZt4UE30kDwGc2RSap6RCHAvDbzSxtW+L4+deC9UxX0Tty0VuW+J8FjSg==",
+ "version": "17.2.8",
+ "resolved": "https://registry.npmjs.org/@nx/nx-linux-arm64-gnu/-/nx-linux-arm64-gnu-17.2.8.tgz",
+ "integrity": "sha512-Iy8BjoW6mOKrSMiTGujUcNdv+xSM1DALTH6y3iLvNDkGbjGK1Re6QNnJAzqcXyDpv32Q4Fc57PmuexyysZxIGg==",
"cpu": [
"arm64"
],
@@ -4346,9 +4823,9 @@
}
},
"node_modules/@nx/nx-linux-arm64-musl": {
- "version": "17.1.3",
- "resolved": "https://registry.npmjs.org/@nx/nx-linux-arm64-musl/-/nx-linux-arm64-musl-17.1.3.tgz",
- "integrity": "sha512-Oto3gkLd7yweuVUCsSHwm4JkAIbcxpPJP0ycRHI/PRHPMIOPiMX8r651QM1amMyKAbJtAe047nyb9Sh1X0FA4A==",
+ "version": "17.2.8",
+ "resolved": "https://registry.npmjs.org/@nx/nx-linux-arm64-musl/-/nx-linux-arm64-musl-17.2.8.tgz",
+ "integrity": "sha512-9wkAxWzknjpzdofL1xjtU6qPFF1PHlvKCZI3hgEYJDo4mQiatGI+7Ttko+lx/ZMP6v4+Umjtgq7+qWrApeKamQ==",
"cpu": [
"arm64"
],
@@ -4362,9 +4839,9 @@
}
},
"node_modules/@nx/nx-linux-x64-gnu": {
- "version": "17.1.3",
- "resolved": "https://registry.npmjs.org/@nx/nx-linux-x64-gnu/-/nx-linux-x64-gnu-17.1.3.tgz",
- "integrity": "sha512-pJS994sa5PBPFak93RydTB9KdEmiVb3rgiSB7PDBegphERbzHEB77B7G8M5TZ62dGlMdplIEKmdhY5XNqeAf9A==",
+ "version": "17.2.8",
+ "resolved": "https://registry.npmjs.org/@nx/nx-linux-x64-gnu/-/nx-linux-x64-gnu-17.2.8.tgz",
+ "integrity": "sha512-sjG1bwGsjLxToasZ3lShildFsF0eyeGu+pOQZIp9+gjFbeIkd19cTlCnHrOV9hoF364GuKSXQyUlwtFYFR4VTQ==",
"cpu": [
"x64"
],
@@ -4378,9 +4855,9 @@
}
},
"node_modules/@nx/nx-linux-x64-musl": {
- "version": "17.1.3",
- "resolved": "https://registry.npmjs.org/@nx/nx-linux-x64-musl/-/nx-linux-x64-musl-17.1.3.tgz",
- "integrity": "sha512-4Hcx5Fg/88jV+bcTr6P0dM4unXNvKgrGJe3oK9/sgEhiW6pD2UAFjv16CCSRcWhDUAzUDqcwnD2fgg+vnAJG6g==",
+ "version": "17.2.8",
+ "resolved": "https://registry.npmjs.org/@nx/nx-linux-x64-musl/-/nx-linux-x64-musl-17.2.8.tgz",
+ "integrity": "sha512-QiakXZ1xBCIptmkGEouLHQbcM4klQkcr+kEaz2PlNwy/sW3gH1b/1c0Ed5J1AN9xgQxWspriAONpScYBRgxdhA==",
"cpu": [
"x64"
],
@@ -4394,9 +4871,9 @@
}
},
"node_modules/@nx/nx-win32-arm64-msvc": {
- "version": "17.1.3",
- "resolved": "https://registry.npmjs.org/@nx/nx-win32-arm64-msvc/-/nx-win32-arm64-msvc-17.1.3.tgz",
- "integrity": "sha512-dUasEuskmDxUL36XA0GZqSb9233suE4wKhxrMobyFBzHUZ2tq/unzOpPjYfqDBie4QIvF8tEpAjQsLds8LWgbw==",
+ "version": "17.2.8",
+ "resolved": "https://registry.npmjs.org/@nx/nx-win32-arm64-msvc/-/nx-win32-arm64-msvc-17.2.8.tgz",
+ "integrity": "sha512-XBWUY/F/GU3vKN9CAxeI15gM4kr3GOBqnzFZzoZC4qJt2hKSSUEWsMgeZtsMgeqEClbi4ZyCCkY7YJgU32WUGA==",
"cpu": [
"arm64"
],
@@ -4410,9 +4887,9 @@
}
},
"node_modules/@nx/nx-win32-x64-msvc": {
- "version": "17.1.3",
- "resolved": "https://registry.npmjs.org/@nx/nx-win32-x64-msvc/-/nx-win32-x64-msvc-17.1.3.tgz",
- "integrity": "sha512-eTuTpBHFvA5NFJh/iosmqCL4JOAjDrwXLSMgfKrZKjiApHMG1T/5Hb+PrsNpt+WnGp94ur7c4Dtx4xD5vlpAEw==",
+ "version": "17.2.8",
+ "resolved": "https://registry.npmjs.org/@nx/nx-win32-x64-msvc/-/nx-win32-x64-msvc-17.2.8.tgz",
+ "integrity": "sha512-HTqDv+JThlLzbcEm/3f+LbS5/wYQWzb5YDXbP1wi7nlCTihNZOLNqGOkEmwlrR5tAdNHPRpHSmkYg4305W0CtA==",
"cpu": [
"x64"
],
@@ -4436,12 +4913,12 @@
}
},
"node_modules/@playwright/test": {
- "version": "1.40.1",
- "resolved": "https://registry.npmjs.org/@playwright/test/-/test-1.40.1.tgz",
- "integrity": "sha512-EaaawMTOeEItCRvfmkI9v6rBkF1svM8wjl/YPRrg2N2Wmp+4qJYkWtJsbew1szfKKDm6fPLy4YAanBhIlf9dWw==",
+ "version": "1.41.2",
+ "resolved": "https://registry.npmjs.org/@playwright/test/-/test-1.41.2.tgz",
+ "integrity": "sha512-qQB9h7KbibJzrDpkXkYvsmiDJK14FULCCZgEcoe2AvFAS64oCirWTwzTlAYEbKaRxWs5TFesE1Na6izMv3HfGg==",
"dev": true,
"dependencies": {
- "playwright": "1.40.1"
+ "playwright": "1.41.2"
},
"bin": {
"playwright": "cli.js"
@@ -4459,14 +4936,183 @@
"url": "https://opencollective.com/popperjs"
}
},
+ "node_modules/@rollup/rollup-android-arm-eabi": {
+ "version": "4.9.6",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.9.6.tgz",
+ "integrity": "sha512-MVNXSSYN6QXOulbHpLMKYi60ppyO13W9my1qogeiAqtjb2yR4LSmfU2+POvDkLzhjYLXz9Rf9+9a3zFHW1Lecg==",
+ "cpu": [
+ "arm"
+ ],
+ "dev": true,
+ "optional": true,
+ "os": [
+ "android"
+ ]
+ },
+ "node_modules/@rollup/rollup-android-arm64": {
+ "version": "4.9.6",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.9.6.tgz",
+ "integrity": "sha512-T14aNLpqJ5wzKNf5jEDpv5zgyIqcpn1MlwCrUXLrwoADr2RkWA0vOWP4XxbO9aiO3dvMCQICZdKeDrFl7UMClw==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "optional": true,
+ "os": [
+ "android"
+ ]
+ },
+ "node_modules/@rollup/rollup-darwin-arm64": {
+ "version": "4.9.6",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.9.6.tgz",
+ "integrity": "sha512-CqNNAyhRkTbo8VVZ5R85X73H3R5NX9ONnKbXuHisGWC0qRbTTxnF1U4V9NafzJbgGM0sHZpdO83pLPzq8uOZFw==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "optional": true,
+ "os": [
+ "darwin"
+ ]
+ },
+ "node_modules/@rollup/rollup-darwin-x64": {
+ "version": "4.9.6",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.9.6.tgz",
+ "integrity": "sha512-zRDtdJuRvA1dc9Mp6BWYqAsU5oeLixdfUvkTHuiYOHwqYuQ4YgSmi6+/lPvSsqc/I0Omw3DdICx4Tfacdzmhog==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "optional": true,
+ "os": [
+ "darwin"
+ ]
+ },
+ "node_modules/@rollup/rollup-linux-arm-gnueabihf": {
+ "version": "4.9.6",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.9.6.tgz",
+ "integrity": "sha512-oNk8YXDDnNyG4qlNb6is1ojTOGL/tRhbbKeE/YuccItzerEZT68Z9gHrY3ROh7axDc974+zYAPxK5SH0j/G+QQ==",
+ "cpu": [
+ "arm"
+ ],
+ "dev": true,
+ "optional": true,
+ "os": [
+ "linux"
+ ]
+ },
+ "node_modules/@rollup/rollup-linux-arm64-gnu": {
+ "version": "4.9.6",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.9.6.tgz",
+ "integrity": "sha512-Z3O60yxPtuCYobrtzjo0wlmvDdx2qZfeAWTyfOjEDqd08kthDKexLpV97KfAeUXPosENKd8uyJMRDfFMxcYkDQ==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "optional": true,
+ "os": [
+ "linux"
+ ]
+ },
+ "node_modules/@rollup/rollup-linux-arm64-musl": {
+ "version": "4.9.6",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.9.6.tgz",
+ "integrity": "sha512-gpiG0qQJNdYEVad+1iAsGAbgAnZ8j07FapmnIAQgODKcOTjLEWM9sRb+MbQyVsYCnA0Im6M6QIq6ax7liws6eQ==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "optional": true,
+ "os": [
+ "linux"
+ ]
+ },
+ "node_modules/@rollup/rollup-linux-riscv64-gnu": {
+ "version": "4.9.6",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.9.6.tgz",
+ "integrity": "sha512-+uCOcvVmFUYvVDr27aiyun9WgZk0tXe7ThuzoUTAukZJOwS5MrGbmSlNOhx1j80GdpqbOty05XqSl5w4dQvcOA==",
+ "cpu": [
+ "riscv64"
+ ],
+ "dev": true,
+ "optional": true,
+ "os": [
+ "linux"
+ ]
+ },
+ "node_modules/@rollup/rollup-linux-x64-gnu": {
+ "version": "4.9.6",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.9.6.tgz",
+ "integrity": "sha512-HUNqM32dGzfBKuaDUBqFB7tP6VMN74eLZ33Q9Y1TBqRDn+qDonkAUyKWwF9BR9unV7QUzffLnz9GrnKvMqC/fw==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "optional": true,
+ "os": [
+ "linux"
+ ]
+ },
+ "node_modules/@rollup/rollup-linux-x64-musl": {
+ "version": "4.9.6",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.9.6.tgz",
+ "integrity": "sha512-ch7M+9Tr5R4FK40FHQk8VnML0Szi2KRujUgHXd/HjuH9ifH72GUmw6lStZBo3c3GB82vHa0ZoUfjfcM7JiiMrQ==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "optional": true,
+ "os": [
+ "linux"
+ ]
+ },
+ "node_modules/@rollup/rollup-win32-arm64-msvc": {
+ "version": "4.9.6",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.9.6.tgz",
+ "integrity": "sha512-VD6qnR99dhmTQ1mJhIzXsRcTBvTjbfbGGwKAHcu+52cVl15AC/kplkhxzW/uT0Xl62Y/meBKDZvoJSJN+vTeGA==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "optional": true,
+ "os": [
+ "win32"
+ ]
+ },
+ "node_modules/@rollup/rollup-win32-ia32-msvc": {
+ "version": "4.9.6",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.9.6.tgz",
+ "integrity": "sha512-J9AFDq/xiRI58eR2NIDfyVmTYGyIZmRcvcAoJ48oDld/NTR8wyiPUu2X/v1navJ+N/FGg68LEbX3Ejd6l8B7MQ==",
+ "cpu": [
+ "ia32"
+ ],
+ "dev": true,
+ "optional": true,
+ "os": [
+ "win32"
+ ]
+ },
+ "node_modules/@rollup/rollup-win32-x64-msvc": {
+ "version": "4.9.6",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.9.6.tgz",
+ "integrity": "sha512-jqzNLhNDvIZOrt69Ce4UjGRpXJBzhUBzawMwnaDAwyHriki3XollsewxWzOzz+4yOFDkuJHtTsZFwMxhYJWmLQ==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "optional": true,
+ "os": [
+ "win32"
+ ]
+ },
"node_modules/@schematics/angular": {
- "version": "17.0.8",
- "resolved": "https://registry.npmjs.org/@schematics/angular/-/angular-17.0.8.tgz",
- "integrity": "sha512-1h5mwKFv1B/L5JWZ0mxnC4ms06iwnSi/w+GgRZPeM3P5BpuZuvAkFiClNnM55iLlQJXRQioPNLM3sOsz7spR6w==",
+ "version": "17.1.2",
+ "resolved": "https://registry.npmjs.org/@schematics/angular/-/angular-17.1.2.tgz",
+ "integrity": "sha512-1GlH0POaN7hVDF1sAm90E5SvAqnKK+PbD1oKSpug9l+1AUQ3vOamyGhEAaO+IxUqvNdgqZexxd5o9MyySTT2Zw==",
"dev": true,
"dependencies": {
- "@angular-devkit/core": "17.0.8",
- "@angular-devkit/schematics": "17.0.8",
+ "@angular-devkit/core": "17.1.2",
+ "@angular-devkit/schematics": "17.1.2",
"jsonc-parser": "3.2.0"
},
"engines": {
@@ -4497,9 +5143,9 @@
"dev": true
},
"node_modules/@sigstore/bundle": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/@sigstore/bundle/-/bundle-2.1.0.tgz",
- "integrity": "sha512-89uOo6yh/oxaU8AeOUnVrTdVMcGk9Q1hJa7Hkvalc6G3Z3CupWk4Xe9djSgJm9fMkH69s0P0cVHUoKSOemLdng==",
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/@sigstore/bundle/-/bundle-2.1.1.tgz",
+ "integrity": "sha512-v3/iS+1nufZdKQ5iAlQKcCsoh0jffQyABvYIxKsZQFWc4ubuGjwZklFHpDgV6O6T7vvV78SW5NHI91HFKEcxKg==",
"dev": true,
"dependencies": {
"@sigstore/protobuf-specs": "^0.2.1"
@@ -4508,6 +5154,15 @@
"node": "^16.14.0 || >=18.0.0"
}
},
+ "node_modules/@sigstore/core": {
+ "version": "0.2.0",
+ "resolved": "https://registry.npmjs.org/@sigstore/core/-/core-0.2.0.tgz",
+ "integrity": "sha512-THobAPPZR9pDH2CAvDLpkrYedt7BlZnsyxDe+Isq4ZmGfPy5juOFZq487vCU2EgKD7aHSiTfE/i7sN7aEdzQnA==",
+ "dev": true,
+ "engines": {
+ "node": "^16.14.0 || >=18.0.0"
+ }
+ },
"node_modules/@sigstore/protobuf-specs": {
"version": "0.2.1",
"resolved": "https://registry.npmjs.org/@sigstore/protobuf-specs/-/protobuf-specs-0.2.1.tgz",
@@ -4518,12 +5173,13 @@
}
},
"node_modules/@sigstore/sign": {
- "version": "2.2.0",
- "resolved": "https://registry.npmjs.org/@sigstore/sign/-/sign-2.2.0.tgz",
- "integrity": "sha512-AAbmnEHDQv6CSfrWA5wXslGtzLPtAtHZleKOgxdQYvx/s76Fk6T6ZVt7w2IGV9j1UrFeBocTTQxaXG2oRrDhYA==",
+ "version": "2.2.1",
+ "resolved": "https://registry.npmjs.org/@sigstore/sign/-/sign-2.2.1.tgz",
+ "integrity": "sha512-U5sKQEj+faE1MsnLou1f4DQQHeFZay+V9s9768lw48J4pKykPj34rWyI1lsMOGJ3Mae47Ye6q3HAJvgXO21rkQ==",
"dev": true,
"dependencies": {
- "@sigstore/bundle": "^2.1.0",
+ "@sigstore/bundle": "^2.1.1",
+ "@sigstore/core": "^0.2.0",
"@sigstore/protobuf-specs": "^0.2.1",
"make-fetch-happen": "^13.0.0"
},
@@ -4532,13 +5188,27 @@
}
},
"node_modules/@sigstore/tuf": {
- "version": "2.2.0",
- "resolved": "https://registry.npmjs.org/@sigstore/tuf/-/tuf-2.2.0.tgz",
- "integrity": "sha512-KKATZ5orWfqd9ZG6MN8PtCIx4eevWSuGRKQvofnWXRpyMyUEpmrzg5M5BrCpjM+NfZ0RbNGOh5tCz/P2uoRqOA==",
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/@sigstore/tuf/-/tuf-2.3.0.tgz",
+ "integrity": "sha512-S98jo9cpJwO1mtQ+2zY7bOdcYyfVYCUaofCG6wWRzk3pxKHVAkSfshkfecto2+LKsx7Ovtqbgb2LS8zTRhxJ9Q==",
"dev": true,
"dependencies": {
"@sigstore/protobuf-specs": "^0.2.1",
- "tuf-js": "^2.1.0"
+ "tuf-js": "^2.2.0"
+ },
+ "engines": {
+ "node": "^16.14.0 || >=18.0.0"
+ }
+ },
+ "node_modules/@sigstore/verify": {
+ "version": "0.1.0",
+ "resolved": "https://registry.npmjs.org/@sigstore/verify/-/verify-0.1.0.tgz",
+ "integrity": "sha512-2UzMNYAa/uaz11NhvgRnIQf4gpLTJ59bhb8ESXaoSS5sxedfS+eLak8bsdMc+qpNQfITUTFoSKFx5h8umlRRiA==",
+ "dev": true,
+ "dependencies": {
+ "@sigstore/bundle": "^2.1.1",
+ "@sigstore/core": "^0.2.0",
+ "@sigstore/protobuf-specs": "^0.2.1"
},
"engines": {
"node": "^16.14.0 || >=18.0.0"
@@ -4568,12 +5238,6 @@
"@sinonjs/commons": "^3.0.0"
}
},
- "node_modules/@socket.io/component-emitter": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/@socket.io/component-emitter/-/component-emitter-3.1.0.tgz",
- "integrity": "sha512-+9jVqKhRSpsc591z5vX+X5Yyw+he/HCB4iQ/RYxw35CEPaY1gnsNE43nf9n9AaYjAQrTiI/mOwKUKdUs9vf7Xg==",
- "dev": true
- },
"node_modules/@tootallnate/once": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-2.0.0.tgz",
@@ -4670,7 +5334,6 @@
"version": "7.6.7",
"resolved": "https://registry.npmjs.org/@types/babel__generator/-/babel__generator-7.6.7.tgz",
"integrity": "sha512-6Sfsq+EaaLrw4RmdFWE9Onp63TOUue71AWb4Gpa6JxzgTYtimbM086WnYTy2U67AofR++QKCo08ZP6pwx8YFHQ==",
- "dev": true,
"dependencies": {
"@babel/types": "^7.0.0"
}
@@ -4679,7 +5342,6 @@
"version": "7.4.4",
"resolved": "https://registry.npmjs.org/@types/babel__template/-/babel__template-7.4.4.tgz",
"integrity": "sha512-h/NUaSyG5EyxBIp8YRxo4RMe2/qQgvyowRwVMzhYhBCONbW8PUsg4lkFMrhgZhUe5z3L3MiLDuvyJ/CaPa2A8A==",
- "dev": true,
"dependencies": {
"@babel/parser": "^7.1.0",
"@babel/types": "^7.0.0"
@@ -4689,7 +5351,6 @@
"version": "7.20.4",
"resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.20.4.tgz",
"integrity": "sha512-mSM/iKUk5fDDrEV/e83qY+Cr3I1+Q3qqTuEn++HAWYjEa1+NxZr6CNrcJGf2ZTnq4HoFGC3zaTPZTobCzCFukA==",
- "dev": true,
"dependencies": {
"@babel/types": "^7.20.7"
}
@@ -4732,21 +5393,6 @@
"@types/node": "*"
}
},
- "node_modules/@types/cookie": {
- "version": "0.4.1",
- "resolved": "https://registry.npmjs.org/@types/cookie/-/cookie-0.4.1.tgz",
- "integrity": "sha512-XW/Aa8APYr6jSVVA1y/DEIZX0/GMKLEVekNG727R8cs56ahETkRAy/3DR7+fJyh7oUgGwNQaRfXCun0+KbWY7Q==",
- "dev": true
- },
- "node_modules/@types/cors": {
- "version": "2.8.17",
- "resolved": "https://registry.npmjs.org/@types/cors/-/cors-2.8.17.tgz",
- "integrity": "sha512-8CGDvrBj1zgo2qE+oS3pOCyYNqCPryMWY2bGfwA0dcfopWGgxs+78df0Rs3rc9THP4JkOhLsAa+15VdpAqkcUA==",
- "dev": true,
- "dependencies": {
- "@types/node": "*"
- }
- },
"node_modules/@types/eslint": {
"version": "8.44.9",
"resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-8.44.9.tgz",
@@ -4786,9 +5432,9 @@
}
},
"node_modules/@types/express-serve-static-core": {
- "version": "4.17.41",
- "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.17.41.tgz",
- "integrity": "sha512-OaJ7XLaelTgrvlZD8/aa0vvvxZdUmlCn6MtWeB7TkiKW70BQLc9XEPpDLPdbo52ZhXUCrznlWdCHWxJWtdyajA==",
+ "version": "4.17.42",
+ "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.17.42.tgz",
+ "integrity": "sha512-ckM3jm2bf/MfB3+spLPWYPUH573plBFwpOhqQ2WottxYV85j1HQFlxmnTq57X1yHY9awZPig06hL/cLMgNWHIQ==",
"dev": true,
"dependencies": {
"@types/node": "*",
@@ -4846,9 +5492,9 @@
}
},
"node_modules/@types/jest": {
- "version": "29.5.11",
- "resolved": "https://registry.npmjs.org/@types/jest/-/jest-29.5.11.tgz",
- "integrity": "sha512-S2mHmYIVe13vrm6q4kN6fLYYAka15ALQki/vgDC3mIukEOx8WJlv0kQPM+d4w8Gp6u0uSdKND04IlTXBv0rwnQ==",
+ "version": "29.5.12",
+ "resolved": "https://registry.npmjs.org/@types/jest/-/jest-29.5.12.tgz",
+ "integrity": "sha512-eDC8bTvT/QhYdxJAulQikueigY5AsdBRH2yDKW3yveW7svY3+DzN84/2NUgkw10RTiJbWqZrTtoGVdYlvFJdLw==",
"dev": true,
"dependencies": {
"expect": "^29.0.0",
@@ -4879,18 +5525,18 @@
"dev": true
},
"node_modules/@types/node": {
- "version": "20.10.6",
- "resolved": "https://registry.npmjs.org/@types/node/-/node-20.10.6.tgz",
- "integrity": "sha512-Vac8H+NlRNNlAmDfGUP7b5h/KA+AtWIzuXy0E6OyP8f1tCLYAtPvKRRDJjAPqhpCb0t6U2j7/xqAuLEebW2kiw==",
+ "version": "20.11.16",
+ "resolved": "https://registry.npmjs.org/@types/node/-/node-20.11.16.tgz",
+ "integrity": "sha512-gKb0enTmRCzXSSUJDq6/sPcqrfCv2mkkG6Jt/clpn5eiCbKTY+SgZUxo+p8ZKMof5dCp9vHQUAB7wOUTod22wQ==",
"dev": true,
"dependencies": {
"undici-types": "~5.26.4"
}
},
"node_modules/@types/node-forge": {
- "version": "1.3.10",
- "resolved": "https://registry.npmjs.org/@types/node-forge/-/node-forge-1.3.10.tgz",
- "integrity": "sha512-y6PJDYN4xYBxwd22l+OVH35N+1fCYWiuC3aiP2SlXVE6Lo7SS+rSx9r89hLxrP4pn6n1lBGhHJ12pj3F3Mpttw==",
+ "version": "1.3.11",
+ "resolved": "https://registry.npmjs.org/@types/node-forge/-/node-forge-1.3.11.tgz",
+ "integrity": "sha512-FQx220y22OKNTqaByeBGqHWYz4cl94tpcxeFdvBo3wjG6XPBuZ0BNgNZRV5J5TFmmcsJ4IzsLkmGRiQbnYsBEQ==",
"dev": true,
"dependencies": {
"@types/node": "*"
@@ -4996,16 +5642,16 @@
"dev": true
},
"node_modules/@typescript-eslint/eslint-plugin": {
- "version": "6.17.0",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-6.17.0.tgz",
- "integrity": "sha512-Vih/4xLXmY7V490dGwBQJTpIZxH4ZFH6eCVmQ4RFkB+wmaCTDAx4dtgoWwMNGKLkqRY1L6rPqzEbjorRnDo4rQ==",
+ "version": "6.20.0",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-6.20.0.tgz",
+ "integrity": "sha512-fTwGQUnjhoYHeSF6m5pWNkzmDDdsKELYrOBxhjMrofPqCkoC2k3B2wvGHFxa1CTIqkEn88nlW1HVMztjo2K8Hg==",
"dev": true,
"dependencies": {
"@eslint-community/regexpp": "^4.5.1",
- "@typescript-eslint/scope-manager": "6.17.0",
- "@typescript-eslint/type-utils": "6.17.0",
- "@typescript-eslint/utils": "6.17.0",
- "@typescript-eslint/visitor-keys": "6.17.0",
+ "@typescript-eslint/scope-manager": "6.20.0",
+ "@typescript-eslint/type-utils": "6.20.0",
+ "@typescript-eslint/utils": "6.20.0",
+ "@typescript-eslint/visitor-keys": "6.20.0",
"debug": "^4.3.4",
"graphemer": "^1.4.0",
"ignore": "^5.2.4",
@@ -5031,13 +5677,13 @@
}
},
"node_modules/@typescript-eslint/eslint-plugin/node_modules/@typescript-eslint/type-utils": {
- "version": "6.17.0",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-6.17.0.tgz",
- "integrity": "sha512-hDXcWmnbtn4P2B37ka3nil3yi3VCQO2QEB9gBiHJmQp5wmyQWqnjA85+ZcE8c4FqnaB6lBwMrPkgd4aBYz3iNg==",
+ "version": "6.20.0",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-6.20.0.tgz",
+ "integrity": "sha512-qnSobiJQb1F5JjN0YDRPHruQTrX7ICsmltXhkV536mp4idGAYrIyr47zF/JmkJtEcAVnIz4gUYJ7gOZa6SmN4g==",
"dev": true,
"dependencies": {
- "@typescript-eslint/typescript-estree": "6.17.0",
- "@typescript-eslint/utils": "6.17.0",
+ "@typescript-eslint/typescript-estree": "6.20.0",
+ "@typescript-eslint/utils": "6.20.0",
"debug": "^4.3.4",
"ts-api-utils": "^1.0.1"
},
@@ -5058,17 +5704,17 @@
}
},
"node_modules/@typescript-eslint/eslint-plugin/node_modules/@typescript-eslint/utils": {
- "version": "6.17.0",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-6.17.0.tgz",
- "integrity": "sha512-LofsSPjN/ITNkzV47hxas2JCsNCEnGhVvocfyOcLzT9c/tSZE7SfhS/iWtzP1lKNOEfLhRTZz6xqI8N2RzweSQ==",
+ "version": "6.20.0",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-6.20.0.tgz",
+ "integrity": "sha512-/EKuw+kRu2vAqCoDwDCBtDRU6CTKbUmwwI7SH7AashZ+W+7o8eiyy6V2cdOqN49KsTcASWsC5QeghYuRDTyOOg==",
"dev": true,
"dependencies": {
"@eslint-community/eslint-utils": "^4.4.0",
"@types/json-schema": "^7.0.12",
"@types/semver": "^7.5.0",
- "@typescript-eslint/scope-manager": "6.17.0",
- "@typescript-eslint/types": "6.17.0",
- "@typescript-eslint/typescript-estree": "6.17.0",
+ "@typescript-eslint/scope-manager": "6.20.0",
+ "@typescript-eslint/types": "6.20.0",
+ "@typescript-eslint/typescript-estree": "6.20.0",
"semver": "^7.5.4"
},
"engines": {
@@ -5083,15 +5729,15 @@
}
},
"node_modules/@typescript-eslint/parser": {
- "version": "6.17.0",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-6.17.0.tgz",
- "integrity": "sha512-C4bBaX2orvhK+LlwrY8oWGmSl4WolCfYm513gEccdWZj0CwGadbIADb0FtVEcI+WzUyjyoBj2JRP8g25E6IB8A==",
+ "version": "6.20.0",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-6.20.0.tgz",
+ "integrity": "sha512-bYerPDF/H5v6V76MdMYhjwmwgMA+jlPVqjSDq2cRqMi8bP5sR3Z+RLOiOMad3nsnmDVmn2gAFCyNgh/dIrfP/w==",
"dev": true,
"dependencies": {
- "@typescript-eslint/scope-manager": "6.17.0",
- "@typescript-eslint/types": "6.17.0",
- "@typescript-eslint/typescript-estree": "6.17.0",
- "@typescript-eslint/visitor-keys": "6.17.0",
+ "@typescript-eslint/scope-manager": "6.20.0",
+ "@typescript-eslint/types": "6.20.0",
+ "@typescript-eslint/typescript-estree": "6.20.0",
+ "@typescript-eslint/visitor-keys": "6.20.0",
"debug": "^4.3.4"
},
"engines": {
@@ -5111,13 +5757,13 @@
}
},
"node_modules/@typescript-eslint/scope-manager": {
- "version": "6.17.0",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-6.17.0.tgz",
- "integrity": "sha512-RX7a8lwgOi7am0k17NUO0+ZmMOX4PpjLtLRgLmT1d3lBYdWH4ssBUbwdmc5pdRX8rXon8v9x8vaoOSpkHfcXGA==",
+ "version": "6.20.0",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-6.20.0.tgz",
+ "integrity": "sha512-p4rvHQRDTI1tGGMDFQm+GtxP1ZHyAh64WANVoyEcNMpaTFn3ox/3CcgtIlELnRfKzSs/DwYlDccJEtr3O6qBvA==",
"dev": true,
"dependencies": {
- "@typescript-eslint/types": "6.17.0",
- "@typescript-eslint/visitor-keys": "6.17.0"
+ "@typescript-eslint/types": "6.20.0",
+ "@typescript-eslint/visitor-keys": "6.20.0"
},
"engines": {
"node": "^16.0.0 || >=18.0.0"
@@ -5128,13 +5774,13 @@
}
},
"node_modules/@typescript-eslint/type-utils": {
- "version": "6.13.1",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-6.13.1.tgz",
- "integrity": "sha512-A2qPlgpxx2v//3meMqQyB1qqTg1h1dJvzca7TugM3Yc2USDY+fsRBiojAEo92HO7f5hW5mjAUF6qobOPzlBCBQ==",
+ "version": "6.19.0",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-6.19.0.tgz",
+ "integrity": "sha512-mcvS6WSWbjiSxKCwBcXtOM5pRkPQ6kcDds/juxcy/727IQr3xMEcwr/YLHW2A2+Fp5ql6khjbKBzOyjuPqGi/w==",
"dev": true,
"dependencies": {
- "@typescript-eslint/typescript-estree": "6.13.1",
- "@typescript-eslint/utils": "6.13.1",
+ "@typescript-eslint/typescript-estree": "6.19.0",
+ "@typescript-eslint/utils": "6.19.0",
"debug": "^4.3.4",
"ts-api-utils": "^1.0.1"
},
@@ -5154,10 +5800,27 @@
}
}
},
+ "node_modules/@typescript-eslint/type-utils/node_modules/@typescript-eslint/scope-manager": {
+ "version": "6.19.0",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-6.19.0.tgz",
+ "integrity": "sha512-dO1XMhV2ehBI6QN8Ufi7I10wmUovmLU0Oru3n5LVlM2JuzB4M+dVphCPLkVpKvGij2j/pHBWuJ9piuXx+BhzxQ==",
+ "dev": true,
+ "dependencies": {
+ "@typescript-eslint/types": "6.19.0",
+ "@typescript-eslint/visitor-keys": "6.19.0"
+ },
+ "engines": {
+ "node": "^16.0.0 || >=18.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/typescript-eslint"
+ }
+ },
"node_modules/@typescript-eslint/type-utils/node_modules/@typescript-eslint/types": {
- "version": "6.13.1",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-6.13.1.tgz",
- "integrity": "sha512-gjeEskSmiEKKFIbnhDXUyiqVma1gRCQNbVZ1C8q7Zjcxh3WZMbzWVfGE9rHfWd1msQtPS0BVD9Jz9jded44eKg==",
+ "version": "6.19.0",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-6.19.0.tgz",
+ "integrity": "sha512-lFviGV/vYhOy3m8BJ/nAKoAyNhInTdXpftonhWle66XHAtT1ouBlkjL496b5H5hb8dWXHwtypTqgtb/DEa+j5A==",
"dev": true,
"engines": {
"node": "^16.0.0 || >=18.0.0"
@@ -5168,16 +5831,17 @@
}
},
"node_modules/@typescript-eslint/type-utils/node_modules/@typescript-eslint/typescript-estree": {
- "version": "6.13.1",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-6.13.1.tgz",
- "integrity": "sha512-sBLQsvOC0Q7LGcUHO5qpG1HxRgePbT6wwqOiGLpR8uOJvPJbfs0mW3jPA3ujsDvfiVwVlWUDESNXv44KtINkUQ==",
+ "version": "6.19.0",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-6.19.0.tgz",
+ "integrity": "sha512-o/zefXIbbLBZ8YJ51NlkSAt2BamrK6XOmuxSR3hynMIzzyMY33KuJ9vuMdFSXW+H0tVvdF9qBPTHA91HDb4BIQ==",
"dev": true,
"dependencies": {
- "@typescript-eslint/types": "6.13.1",
- "@typescript-eslint/visitor-keys": "6.13.1",
+ "@typescript-eslint/types": "6.19.0",
+ "@typescript-eslint/visitor-keys": "6.19.0",
"debug": "^4.3.4",
"globby": "^11.1.0",
"is-glob": "^4.0.3",
+ "minimatch": "9.0.3",
"semver": "^7.5.4",
"ts-api-utils": "^1.0.1"
},
@@ -5194,13 +5858,38 @@
}
}
},
- "node_modules/@typescript-eslint/type-utils/node_modules/@typescript-eslint/visitor-keys": {
- "version": "6.13.1",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-6.13.1.tgz",
- "integrity": "sha512-NDhQUy2tg6XGNBGDRm1XybOHSia8mcXmlbKWoQP+nm1BIIMxa55shyJfZkHpEBN62KNPLrocSM2PdPcaLgDKMQ==",
+ "node_modules/@typescript-eslint/type-utils/node_modules/@typescript-eslint/utils": {
+ "version": "6.19.0",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-6.19.0.tgz",
+ "integrity": "sha512-QR41YXySiuN++/dC9UArYOg4X86OAYP83OWTewpVx5ct1IZhjjgTLocj7QNxGhWoTqknsgpl7L+hGygCO+sdYw==",
"dev": true,
"dependencies": {
- "@typescript-eslint/types": "6.13.1",
+ "@eslint-community/eslint-utils": "^4.4.0",
+ "@types/json-schema": "^7.0.12",
+ "@types/semver": "^7.5.0",
+ "@typescript-eslint/scope-manager": "6.19.0",
+ "@typescript-eslint/types": "6.19.0",
+ "@typescript-eslint/typescript-estree": "6.19.0",
+ "semver": "^7.5.4"
+ },
+ "engines": {
+ "node": "^16.0.0 || >=18.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/typescript-eslint"
+ },
+ "peerDependencies": {
+ "eslint": "^7.0.0 || ^8.0.0"
+ }
+ },
+ "node_modules/@typescript-eslint/type-utils/node_modules/@typescript-eslint/visitor-keys": {
+ "version": "6.19.0",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-6.19.0.tgz",
+ "integrity": "sha512-hZaUCORLgubBvtGpp1JEFEazcuEdfxta9j4iUwdSAr7mEsYYAp3EAUyCZk3VEEqGj6W+AV4uWyrDGtrlawAsgQ==",
+ "dev": true,
+ "dependencies": {
+ "@typescript-eslint/types": "6.19.0",
"eslint-visitor-keys": "^3.4.1"
},
"engines": {
@@ -5211,10 +5900,34 @@
"url": "https://opencollective.com/typescript-eslint"
}
},
+ "node_modules/@typescript-eslint/type-utils/node_modules/brace-expansion": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz",
+ "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==",
+ "dev": true,
+ "dependencies": {
+ "balanced-match": "^1.0.0"
+ }
+ },
+ "node_modules/@typescript-eslint/type-utils/node_modules/minimatch": {
+ "version": "9.0.3",
+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.3.tgz",
+ "integrity": "sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==",
+ "dev": true,
+ "dependencies": {
+ "brace-expansion": "^2.0.1"
+ },
+ "engines": {
+ "node": ">=16 || 14 >=14.17"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/isaacs"
+ }
+ },
"node_modules/@typescript-eslint/types": {
- "version": "6.17.0",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-6.17.0.tgz",
- "integrity": "sha512-qRKs9tvc3a4RBcL/9PXtKSehI/q8wuU9xYJxe97WFxnzH8NWWtcW3ffNS+EWg8uPvIerhjsEZ+rHtDqOCiH57A==",
+ "version": "6.20.0",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-6.20.0.tgz",
+ "integrity": "sha512-MM9mfZMAhiN4cOEcUOEx+0HmuaW3WBfukBZPCfwSqFnQy0grXYtngKCqpQN339X3RrwtzspWJrpbrupKYUSBXQ==",
"dev": true,
"engines": {
"node": "^16.0.0 || >=18.0.0"
@@ -5225,13 +5938,13 @@
}
},
"node_modules/@typescript-eslint/typescript-estree": {
- "version": "6.17.0",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-6.17.0.tgz",
- "integrity": "sha512-gVQe+SLdNPfjlJn5VNGhlOhrXz4cajwFd5kAgWtZ9dCZf4XJf8xmgCTLIqec7aha3JwgLI2CK6GY1043FRxZwg==",
+ "version": "6.20.0",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-6.20.0.tgz",
+ "integrity": "sha512-RnRya9q5m6YYSpBN7IzKu9FmLcYtErkDkc8/dKv81I9QiLLtVBHrjz+Ev/crAqgMNW2FCsoZF4g2QUylMnJz+g==",
"dev": true,
"dependencies": {
- "@typescript-eslint/types": "6.17.0",
- "@typescript-eslint/visitor-keys": "6.17.0",
+ "@typescript-eslint/types": "6.20.0",
+ "@typescript-eslint/visitor-keys": "6.20.0",
"debug": "^4.3.4",
"globby": "^11.1.0",
"is-glob": "^4.0.3",
@@ -5276,112 +5989,13 @@
"url": "https://github.com/sponsors/isaacs"
}
},
- "node_modules/@typescript-eslint/utils": {
- "version": "6.13.1",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-6.13.1.tgz",
- "integrity": "sha512-ouPn/zVoan92JgAegesTXDB/oUp6BP1v8WpfYcqh649ejNc9Qv+B4FF2Ff626kO1xg0wWwwG48lAJ4JuesgdOw==",
- "dev": true,
- "dependencies": {
- "@eslint-community/eslint-utils": "^4.4.0",
- "@types/json-schema": "^7.0.12",
- "@types/semver": "^7.5.0",
- "@typescript-eslint/scope-manager": "6.13.1",
- "@typescript-eslint/types": "6.13.1",
- "@typescript-eslint/typescript-estree": "6.13.1",
- "semver": "^7.5.4"
- },
- "engines": {
- "node": "^16.0.0 || >=18.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/typescript-eslint"
- },
- "peerDependencies": {
- "eslint": "^7.0.0 || ^8.0.0"
- }
- },
- "node_modules/@typescript-eslint/utils/node_modules/@typescript-eslint/scope-manager": {
- "version": "6.13.1",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-6.13.1.tgz",
- "integrity": "sha512-BW0kJ7ceiKi56GbT2KKzZzN+nDxzQK2DS6x0PiSMPjciPgd/JRQGMibyaN2cPt2cAvuoH0oNvn2fwonHI+4QUQ==",
- "dev": true,
- "dependencies": {
- "@typescript-eslint/types": "6.13.1",
- "@typescript-eslint/visitor-keys": "6.13.1"
- },
- "engines": {
- "node": "^16.0.0 || >=18.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/typescript-eslint"
- }
- },
- "node_modules/@typescript-eslint/utils/node_modules/@typescript-eslint/types": {
- "version": "6.13.1",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-6.13.1.tgz",
- "integrity": "sha512-gjeEskSmiEKKFIbnhDXUyiqVma1gRCQNbVZ1C8q7Zjcxh3WZMbzWVfGE9rHfWd1msQtPS0BVD9Jz9jded44eKg==",
- "dev": true,
- "engines": {
- "node": "^16.0.0 || >=18.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/typescript-eslint"
- }
- },
- "node_modules/@typescript-eslint/utils/node_modules/@typescript-eslint/typescript-estree": {
- "version": "6.13.1",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-6.13.1.tgz",
- "integrity": "sha512-sBLQsvOC0Q7LGcUHO5qpG1HxRgePbT6wwqOiGLpR8uOJvPJbfs0mW3jPA3ujsDvfiVwVlWUDESNXv44KtINkUQ==",
- "dev": true,
- "dependencies": {
- "@typescript-eslint/types": "6.13.1",
- "@typescript-eslint/visitor-keys": "6.13.1",
- "debug": "^4.3.4",
- "globby": "^11.1.0",
- "is-glob": "^4.0.3",
- "semver": "^7.5.4",
- "ts-api-utils": "^1.0.1"
- },
- "engines": {
- "node": "^16.0.0 || >=18.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/typescript-eslint"
- },
- "peerDependenciesMeta": {
- "typescript": {
- "optional": true
- }
- }
- },
- "node_modules/@typescript-eslint/utils/node_modules/@typescript-eslint/visitor-keys": {
- "version": "6.13.1",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-6.13.1.tgz",
- "integrity": "sha512-NDhQUy2tg6XGNBGDRm1XybOHSia8mcXmlbKWoQP+nm1BIIMxa55shyJfZkHpEBN62KNPLrocSM2PdPcaLgDKMQ==",
- "dev": true,
- "dependencies": {
- "@typescript-eslint/types": "6.13.1",
- "eslint-visitor-keys": "^3.4.1"
- },
- "engines": {
- "node": "^16.0.0 || >=18.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/typescript-eslint"
- }
- },
"node_modules/@typescript-eslint/visitor-keys": {
- "version": "6.17.0",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-6.17.0.tgz",
- "integrity": "sha512-H6VwB/k3IuIeQOyYczyyKN8wH6ed8EwliaYHLxOIhyF0dYEIsN8+Bk3GE19qafeMKyZJJHP8+O1HiFhFLUNKSg==",
+ "version": "6.20.0",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-6.20.0.tgz",
+ "integrity": "sha512-E8Cp98kRe4gKHjJD4NExXKz/zOJ1A2hhZc+IMVD6i7w4yjIvh6VyuRI0gRtxAsXtoC35uGMaQ9rjI2zJaXDEAw==",
"dev": true,
"dependencies": {
- "@typescript-eslint/types": "6.17.0",
+ "@typescript-eslint/types": "6.20.0",
"eslint-visitor-keys": "^3.4.1"
},
"engines": {
@@ -5399,15 +6013,15 @@
"dev": true
},
"node_modules/@vitejs/plugin-basic-ssl": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/@vitejs/plugin-basic-ssl/-/plugin-basic-ssl-1.0.1.tgz",
- "integrity": "sha512-pcub+YbFtFhaGRTo1832FQHQSHvMrlb43974e2eS8EKleR3p1cDdkJFPci1UhwkEf1J9Bz+wKBSzqpKp7nNj2A==",
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/@vitejs/plugin-basic-ssl/-/plugin-basic-ssl-1.0.2.tgz",
+ "integrity": "sha512-DKHKVtpI+eA5fvObVgQ3QtTGU70CcCnedalzqmGSR050AzKZMdUzgC8KmlOneHWH8dF2hJ3wkC9+8FDVAaDRCw==",
"dev": true,
"engines": {
"node": ">=14.6.0"
},
"peerDependencies": {
- "vite": "^3.0.0 || ^4.0.0"
+ "vite": "^3.0.0 || ^4.0.0 || ^5.0.0"
}
},
"node_modules/@webassemblyjs/ast": {
@@ -5902,9 +6516,9 @@
}
},
"node_modules/array-flatten": {
- "version": "2.1.2",
- "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-2.1.2.tgz",
- "integrity": "sha512-hNfzcOV8W4NdualtqBFPyVO+54DSJuZGY9qT4pRroB6S9e3iiido2ISIC5h9R2sPJ8H3FHCIiEnsv1lPXO3KtQ==",
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz",
+ "integrity": "sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==",
"dev": true
},
"node_modules/array-union": {
@@ -5922,15 +6536,6 @@
"integrity": "sha512-baNZyqaaLhyLVKm/DlvdW051MSgO6b8eVfIezl9E5PqWxFgzLm/wQntEW4zOytVburDEr0JlALEpdOFwvErLsg==",
"dev": true
},
- "node_modules/async-each-series": {
- "version": "0.1.1",
- "resolved": "https://registry.npmjs.org/async-each-series/-/async-each-series-0.1.1.tgz",
- "integrity": "sha512-p4jj6Fws4Iy2m0iCmI2am2ZNZCgbdgE+P8F/8csmn2vx7ixXrO2zGcuNsD46X5uZSVecmkEy/M06X2vG8KD6dQ==",
- "dev": true,
- "engines": {
- "node": ">=0.8.0"
- }
- },
"node_modules/asynckit": {
"version": "0.4.0",
"resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz",
@@ -5984,12 +6589,14 @@
}
},
"node_modules/axios": {
- "version": "0.21.4",
- "resolved": "https://registry.npmjs.org/axios/-/axios-0.21.4.tgz",
- "integrity": "sha512-ut5vewkiu8jjGBdqpM44XxjuCjq9LAKeHVmoVfHVzy8eHgxxq8SbAVQNovDA8mVi05kP0Ea/n/UzcSHcTJQfNg==",
+ "version": "1.6.7",
+ "resolved": "https://registry.npmjs.org/axios/-/axios-1.6.7.tgz",
+ "integrity": "sha512-/hDJGff6/c7u0hDkvkGxR/oy6CbCs8ziCsC7SqmhjfozqiJGc8Z11wrv9z9lYfY4K8l+H9TpjcMDX0xOZmx+RA==",
"dev": true,
"dependencies": {
- "follow-redirects": "^1.14.0"
+ "follow-redirects": "^1.15.4",
+ "form-data": "^4.0.0",
+ "proxy-from-env": "^1.1.0"
}
},
"node_modules/axobject-query": {
@@ -6141,13 +6748,13 @@
}
},
"node_modules/babel-plugin-polyfill-corejs2": {
- "version": "0.4.7",
- "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.4.7.tgz",
- "integrity": "sha512-LidDk/tEGDfuHW2DWh/Hgo4rmnw3cduK6ZkOI1NPFceSK3n/yAGeOsNT7FLnSGHkXj3RHGSEVkN3FsCTY6w2CQ==",
+ "version": "0.4.8",
+ "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.4.8.tgz",
+ "integrity": "sha512-OtIuQfafSzpo/LhnJaykc0R/MMnuLSSVjVYy9mHArIZ9qTCSZ6TpWCuEKZYVoN//t8HqBNScHrOtCrIK5IaGLg==",
"dev": true,
"dependencies": {
"@babel/compat-data": "^7.22.6",
- "@babel/helper-define-polyfill-provider": "^0.4.4",
+ "@babel/helper-define-polyfill-provider": "^0.5.0",
"semver": "^6.3.1"
},
"peerDependencies": {
@@ -6176,13 +6783,29 @@
"@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0"
}
},
- "node_modules/babel-plugin-polyfill-regenerator": {
- "version": "0.5.4",
- "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.5.4.tgz",
- "integrity": "sha512-S/x2iOCvDaCASLYsOOgWOq4bCfKYVqvO/uxjkaYyZ3rVsVE3CeAI/c84NpyuBBymEgNvHgjEot3a9/Z/kXvqsg==",
+ "node_modules/babel-plugin-polyfill-corejs3/node_modules/@babel/helper-define-polyfill-provider": {
+ "version": "0.4.4",
+ "resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.4.4.tgz",
+ "integrity": "sha512-QcJMILQCu2jm5TFPGA3lCpJJTeEP+mqeXooG/NZbg/h5FTFi6V0+99ahlRsW8/kRLyb24LZVCCiclDedhLKcBA==",
"dev": true,
"dependencies": {
- "@babel/helper-define-polyfill-provider": "^0.4.4"
+ "@babel/helper-compilation-targets": "^7.22.6",
+ "@babel/helper-plugin-utils": "^7.22.5",
+ "debug": "^4.1.1",
+ "lodash.debounce": "^4.0.8",
+ "resolve": "^1.14.2"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0"
+ }
+ },
+ "node_modules/babel-plugin-polyfill-regenerator": {
+ "version": "0.5.5",
+ "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.5.5.tgz",
+ "integrity": "sha512-OJGYZlhLqBh2DDHeqAxWB1XIvr49CxiJ2gIt61/PU55CQK4Z58OzMqjDe1zwQdQk+rBYsRc+1rJmdajM3gimHg==",
+ "dev": true,
+ "dependencies": {
+ "@babel/helper-define-polyfill-provider": "^0.5.0"
},
"peerDependencies": {
"@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0"
@@ -6253,15 +6876,6 @@
}
]
},
- "node_modules/base64id": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/base64id/-/base64id-2.0.0.tgz",
- "integrity": "sha512-lGe34o6EHj9y3Kts9R4ZYs/Gr+6N7MCaMlIFA3F1R2O5/m7K06AxfSeO5530PEERE6/WyEg3lsuyw4GHlPZHog==",
- "dev": true,
- "engines": {
- "node": "^4.5.0 || >= 5.9"
- }
- },
"node_modules/batch": {
"version": "0.6.1",
"resolved": "https://registry.npmjs.org/batch/-/batch-0.6.1.tgz",
@@ -6320,6 +6934,15 @@
"npm": "1.2.8000 || >= 1.4.16"
}
},
+ "node_modules/body-parser/node_modules/bytes": {
+ "version": "3.1.2",
+ "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz",
+ "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==",
+ "dev": true,
+ "engines": {
+ "node": ">= 0.8"
+ }
+ },
"node_modules/body-parser/node_modules/debug": {
"version": "2.6.9",
"resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
@@ -6329,57 +6952,18 @@
"ms": "2.0.0"
}
},
- "node_modules/body-parser/node_modules/destroy": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz",
- "integrity": "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==",
- "dev": true,
- "engines": {
- "node": ">= 0.8",
- "npm": "1.2.8000 || >= 1.4.16"
- }
- },
"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==",
"dev": true
},
- "node_modules/body-parser/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==",
- "dev": true,
- "dependencies": {
- "ee-first": "1.1.1"
- },
- "engines": {
- "node": ">= 0.8"
- }
- },
- "node_modules/body-parser/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==",
- "dev": true,
- "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/bonjour-service": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/bonjour-service/-/bonjour-service-1.1.1.tgz",
- "integrity": "sha512-Z/5lQRMOG9k7W+FkeGTNjh7htqn/2LMnfOvBZ8pynNZCM9MwkQkI3zeI4oz09uWdcgmgHugVvBqxGg4VQJ5PCg==",
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/bonjour-service/-/bonjour-service-1.2.1.tgz",
+ "integrity": "sha512-oSzCS2zV14bh2kji6vNe7vrpJYCHGvcZnlffFQ1MEoX/WOeQ/teD8SYWKR942OI3INjq8OMNJlbPK5LLLUxFDw==",
"dev": true,
"dependencies": {
- "array-flatten": "^2.1.2",
- "dns-equal": "^1.0.0",
"fast-deep-equal": "^3.1.3",
"multicast-dns": "^7.2.5"
}
@@ -6429,218 +7013,6 @@
"node": ">=8"
}
},
- "node_modules/browser-sync": {
- "version": "2.29.3",
- "resolved": "https://registry.npmjs.org/browser-sync/-/browser-sync-2.29.3.tgz",
- "integrity": "sha512-NiM38O6XU84+MN+gzspVmXV2fTOoe+jBqIBx3IBdhZrdeURr6ZgznJr/p+hQ+KzkKEiGH/GcC4SQFSL0jV49bg==",
- "dev": true,
- "dependencies": {
- "browser-sync-client": "^2.29.3",
- "browser-sync-ui": "^2.29.3",
- "bs-recipes": "1.3.4",
- "chalk": "4.1.2",
- "chokidar": "^3.5.1",
- "connect": "3.6.6",
- "connect-history-api-fallback": "^1",
- "dev-ip": "^1.0.1",
- "easy-extender": "^2.3.4",
- "eazy-logger": "^4.0.1",
- "etag": "^1.8.1",
- "fresh": "^0.5.2",
- "fs-extra": "3.0.1",
- "http-proxy": "^1.18.1",
- "immutable": "^3",
- "localtunnel": "^2.0.1",
- "micromatch": "^4.0.2",
- "opn": "5.3.0",
- "portscanner": "2.2.0",
- "raw-body": "^2.3.2",
- "resp-modifier": "6.0.2",
- "rx": "4.1.0",
- "send": "0.16.2",
- "serve-index": "1.9.1",
- "serve-static": "1.13.2",
- "server-destroy": "1.0.1",
- "socket.io": "^4.4.1",
- "ua-parser-js": "^1.0.33",
- "yargs": "^17.3.1"
- },
- "bin": {
- "browser-sync": "dist/bin.js"
- },
- "engines": {
- "node": ">= 8.0.0"
- }
- },
- "node_modules/browser-sync-client": {
- "version": "2.29.3",
- "resolved": "https://registry.npmjs.org/browser-sync-client/-/browser-sync-client-2.29.3.tgz",
- "integrity": "sha512-4tK5JKCl7v/3aLbmCBMzpufiYLsB1+UI+7tUXCCp5qF0AllHy/jAqYu6k7hUF3hYtlClKpxExWaR+rH+ny07wQ==",
- "dev": true,
- "dependencies": {
- "etag": "1.8.1",
- "fresh": "0.5.2",
- "mitt": "^1.1.3"
- },
- "engines": {
- "node": ">=8.0.0"
- }
- },
- "node_modules/browser-sync-ui": {
- "version": "2.29.3",
- "resolved": "https://registry.npmjs.org/browser-sync-ui/-/browser-sync-ui-2.29.3.tgz",
- "integrity": "sha512-kBYOIQjU/D/3kYtUIJtj82e797Egk1FB2broqItkr3i4eF1qiHbFCG6srksu9gWhfmuM/TNG76jMfzAdxEPakg==",
- "dev": true,
- "dependencies": {
- "async-each-series": "0.1.1",
- "chalk": "4.1.2",
- "connect-history-api-fallback": "^1",
- "immutable": "^3",
- "server-destroy": "1.0.1",
- "socket.io-client": "^4.4.1",
- "stream-throttle": "^0.1.3"
- }
- },
- "node_modules/browser-sync-ui/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/browser-sync-ui/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/browser-sync-ui/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/browser-sync-ui/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/browser-sync-ui/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/browser-sync-ui/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/browser-sync/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/browser-sync/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/browser-sync/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/browser-sync/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/browser-sync/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/browser-sync/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/browserslist": {
"version": "4.22.2",
"resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.22.2.tgz",
@@ -6684,12 +7056,6 @@
"node": ">= 6"
}
},
- "node_modules/bs-recipes": {
- "version": "1.3.4",
- "resolved": "https://registry.npmjs.org/bs-recipes/-/bs-recipes-1.3.4.tgz",
- "integrity": "sha512-BXvDkqhDNxXEjeGM8LFkSbR+jzmP/CYpCiVKYn+soB1dDldeU15EBNDkwVXndKuX35wnNUaPd0qSoQEAkmQtMw==",
- "dev": true
- },
"node_modules/bser": {
"version": "2.1.1",
"resolved": "https://registry.npmjs.org/bser/-/bser-2.1.1.tgz",
@@ -6739,18 +7105,18 @@
}
},
"node_modules/bytes": {
- "version": "3.1.2",
- "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz",
- "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==",
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz",
+ "integrity": "sha512-pMhOfFDPiv9t5jjIXkHosWmkSyQbvsgEVNkz0ERHbuLh2T/7j4Mqqpz523Fe8MVY89KC6Sh/QfS2sM+SjgFDcw==",
"dev": true,
"engines": {
"node": ">= 0.8"
}
},
"node_modules/cacache": {
- "version": "18.0.1",
- "resolved": "https://registry.npmjs.org/cacache/-/cacache-18.0.1.tgz",
- "integrity": "sha512-g4Uf2CFZPaxtJKre6qr4zqLDOOPU7bNVhWjlNhvzc51xaTOx2noMOLhfFkTAqwtrAZAKQUuDfyjitzilpA8WsQ==",
+ "version": "18.0.2",
+ "resolved": "https://registry.npmjs.org/cacache/-/cacache-18.0.2.tgz",
+ "integrity": "sha512-r3NU8h/P+4lVUHfeRw1dtgQYar3DZMm4/cm2bZgOvrFC/su7budSOeqh52VJIC4U4iG1WWwV6vRW0znqBvxNuw==",
"dev": true,
"dependencies": {
"@npmcli/fs": "^3.1.0",
@@ -6802,9 +7168,9 @@
}
},
"node_modules/cacache/node_modules/lru-cache": {
- "version": "10.1.0",
- "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.1.0.tgz",
- "integrity": "sha512-/1clY/ui8CzjKFyjdvwPWJUYKiFVXG2I2cY0ssG7h4+hwk+XOIX7ZSG9Q7TW8TW3Kp3BUSqgFWBLgL4PJ+Blag==",
+ "version": "10.2.0",
+ "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.2.0.tgz",
+ "integrity": "sha512-2bIM8x+VAf6JT4bKAljS1qUWgMsqZRPGJS6FSahIMPVvctcNhyVp7AJu7quxOW9jwkryBReKZY5tY5JYv2n/7Q==",
"dev": true,
"engines": {
"node": "14 || >=16.14"
@@ -7206,15 +7572,6 @@
"node": ">= 0.8.0"
}
},
- "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==",
- "dev": true,
- "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",
@@ -7354,45 +7711,15 @@
"url": "https://github.com/chalk/supports-color?sponsor=1"
}
},
- "node_modules/connect": {
- "version": "3.6.6",
- "resolved": "https://registry.npmjs.org/connect/-/connect-3.6.6.tgz",
- "integrity": "sha512-OO7axMmPpu/2XuX1+2Yrg0ddju31B6xLZMWkJ5rYBu4YRmRVlOjvlY6kw2FJKiAzyxGwnrDUAG4s1Pf0sbBMCQ==",
- "dev": true,
- "dependencies": {
- "debug": "2.6.9",
- "finalhandler": "1.1.0",
- "parseurl": "~1.3.2",
- "utils-merge": "1.0.1"
- },
- "engines": {
- "node": ">= 0.10.0"
- }
- },
"node_modules/connect-history-api-fallback": {
- "version": "1.6.0",
- "resolved": "https://registry.npmjs.org/connect-history-api-fallback/-/connect-history-api-fallback-1.6.0.tgz",
- "integrity": "sha512-e54B99q/OUoH64zYYRf3HBP5z24G38h5D3qXu23JGRoigpX5Ss4r9ZnDk3g0Z8uQC2x2lPaJ+UlWBc1ZWBWdLg==",
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/connect-history-api-fallback/-/connect-history-api-fallback-2.0.0.tgz",
+ "integrity": "sha512-U73+6lQFmfiNPrYbXqr6kZ1i1wiRqXnp2nhMsINseWXO8lDau0LGEffJ8kQi4EjLZympVgRdvqjAgiZ1tgzDDA==",
"dev": true,
"engines": {
"node": ">=0.8"
}
},
- "node_modules/connect/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/connect/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/console-control-strings": {
"version": "1.1.0",
"resolved": "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz",
@@ -7426,9 +7753,9 @@
"integrity": "sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A=="
},
"node_modules/cookie": {
- "version": "0.4.2",
- "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.2.tgz",
- "integrity": "sha512-aSWTXFzaKWkvHO1Ny/s+ePFpvKsPnjc551iI41v3ny/ow6tBG5Vd+FuqGNhh1LxOmVzOlGUriIlOaokOvhaStA==",
+ "version": "0.5.0",
+ "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.5.0.tgz",
+ "integrity": "sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw==",
"dev": true,
"engines": {
"node": ">= 0.6"
@@ -7520,9 +7847,9 @@
}
},
"node_modules/core-js-compat": {
- "version": "3.34.0",
- "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.34.0.tgz",
- "integrity": "sha512-4ZIyeNbW/Cn1wkMMDy+mvrRUxrwFNjKwbhCfQpDd+eLgYipDqp8oGFGtLmhh18EDPKA0g3VUBYOxQGGwvWLVpA==",
+ "version": "3.35.1",
+ "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.35.1.tgz",
+ "integrity": "sha512-sftHa5qUJY3rs9Zht1WEnmkvXputCyDBczPnr7QDgL8n3qrF3CMXY4VPSYtOLLiOUJcah2WNXREd48iOl6mQIw==",
"dev": true,
"dependencies": {
"browserslist": "^4.22.2"
@@ -7538,19 +7865,6 @@
"integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==",
"dev": true
},
- "node_modules/cors": {
- "version": "2.8.5",
- "resolved": "https://registry.npmjs.org/cors/-/cors-2.8.5.tgz",
- "integrity": "sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g==",
- "dev": true,
- "dependencies": {
- "object-assign": "^4",
- "vary": "^1"
- },
- "engines": {
- "node": ">= 0.10"
- }
- },
"node_modules/cosmiconfig": {
"version": "8.3.6",
"resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-8.3.6.tgz",
@@ -8055,10 +8369,14 @@
}
},
"node_modules/destroy": {
- "version": "1.0.4",
- "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.0.4.tgz",
- "integrity": "sha512-3NdhDuEXnfun/z7x9GOElY49LoqVHoGScmOKwmxhsS8N5Y+Z8KyPPDnaSzqWgYt/ji4mqwfTS34Htrk0zPIXVg==",
- "dev": true
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz",
+ "integrity": "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==",
+ "dev": true,
+ "engines": {
+ "node": ">= 0.8",
+ "npm": "1.2.8000 || >= 1.4.16"
+ }
},
"node_modules/detect-libc": {
"version": "2.0.2",
@@ -8084,18 +8402,6 @@
"integrity": "sha512-T0NIuQpnTvFDATNuHN5roPwSBG83rFsuO+MXXH9/3N1eFbn4wcPjttvjMLEPWJ0RGUYgQE7cGgS3tNxbqCGM7g==",
"dev": true
},
- "node_modules/dev-ip": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/dev-ip/-/dev-ip-1.0.1.tgz",
- "integrity": "sha512-LmVkry/oDShEgSZPNgqCIp2/TlqtExeGmymru3uCELnfyjY11IzpAproLYs+1X88fXO6DBoYP3ul2Xo2yz2j6A==",
- "dev": true,
- "bin": {
- "dev-ip": "lib/dev-ip.js"
- },
- "engines": {
- "node": ">= 0.8.0"
- }
- },
"node_modules/diff": {
"version": "4.0.2",
"resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz",
@@ -8126,12 +8432,6 @@
"node": ">=8"
}
},
- "node_modules/dns-equal": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/dns-equal/-/dns-equal-1.0.0.tgz",
- "integrity": "sha512-z+paD6YUQsk+AbGCEM4PrOXSss5gd66QfcVBFTKR/HpFL9jCqikS94HYwKww6fQyO7IxrIIyUu+g0Ka9tUS2Cg==",
- "dev": true
- },
"node_modules/dns-packet": {
"version": "5.6.1",
"resolved": "https://registry.npmjs.org/dns-packet/-/dns-packet-5.6.1.tgz",
@@ -8257,100 +8557,6 @@
"integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==",
"dev": true
},
- "node_modules/easy-extender": {
- "version": "2.3.4",
- "resolved": "https://registry.npmjs.org/easy-extender/-/easy-extender-2.3.4.tgz",
- "integrity": "sha512-8cAwm6md1YTiPpOvDULYJL4ZS6WfM5/cTeVVh4JsvyYZAoqlRVUpHL9Gr5Fy7HA6xcSZicUia3DeAgO3Us8E+Q==",
- "dev": true,
- "dependencies": {
- "lodash": "^4.17.10"
- },
- "engines": {
- "node": ">= 4.0.0"
- }
- },
- "node_modules/eazy-logger": {
- "version": "4.0.1",
- "resolved": "https://registry.npmjs.org/eazy-logger/-/eazy-logger-4.0.1.tgz",
- "integrity": "sha512-2GSFtnnC6U4IEKhEI7+PvdxrmjJ04mdsj3wHZTFiw0tUtG4HCWzTr13ZYTk8XOGnA1xQMaDljoBOYlk3D/MMSw==",
- "dev": true,
- "dependencies": {
- "chalk": "4.1.2"
- },
- "engines": {
- "node": ">= 0.8.0"
- }
- },
- "node_modules/eazy-logger/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/eazy-logger/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/eazy-logger/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/eazy-logger/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/eazy-logger/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/eazy-logger/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/ee-first": {
"version": "1.1.1",
"resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz",
@@ -8444,91 +8650,6 @@
"once": "^1.4.0"
}
},
- "node_modules/engine.io": {
- "version": "6.5.4",
- "resolved": "https://registry.npmjs.org/engine.io/-/engine.io-6.5.4.tgz",
- "integrity": "sha512-KdVSDKhVKyOi+r5uEabrDLZw2qXStVvCsEB/LN3mw4WFi6Gx50jTyuxYVCwAAC0U46FdnzP/ScKRBTXb/NiEOg==",
- "dev": true,
- "dependencies": {
- "@types/cookie": "^0.4.1",
- "@types/cors": "^2.8.12",
- "@types/node": ">=10.0.0",
- "accepts": "~1.3.4",
- "base64id": "2.0.0",
- "cookie": "~0.4.1",
- "cors": "~2.8.5",
- "debug": "~4.3.1",
- "engine.io-parser": "~5.2.1",
- "ws": "~8.11.0"
- },
- "engines": {
- "node": ">=10.2.0"
- }
- },
- "node_modules/engine.io-client": {
- "version": "6.5.3",
- "resolved": "https://registry.npmjs.org/engine.io-client/-/engine.io-client-6.5.3.tgz",
- "integrity": "sha512-9Z0qLB0NIisTRt1DZ/8U2k12RJn8yls/nXMZLn+/N8hANT3TcYjKFKcwbw5zFQiN4NTde3TSY9zb79e1ij6j9Q==",
- "dev": true,
- "dependencies": {
- "@socket.io/component-emitter": "~3.1.0",
- "debug": "~4.3.1",
- "engine.io-parser": "~5.2.1",
- "ws": "~8.11.0",
- "xmlhttprequest-ssl": "~2.0.0"
- }
- },
- "node_modules/engine.io-client/node_modules/ws": {
- "version": "8.11.0",
- "resolved": "https://registry.npmjs.org/ws/-/ws-8.11.0.tgz",
- "integrity": "sha512-HPG3wQd9sNQoT9xHyNCXoDUa+Xw/VevmY9FoHyQ+g+rrMn4j6FB4np7Z0OhdTgjx6MgQLK7jwSy1YecU1+4Asg==",
- "dev": true,
- "engines": {
- "node": ">=10.0.0"
- },
- "peerDependencies": {
- "bufferutil": "^4.0.1",
- "utf-8-validate": "^5.0.2"
- },
- "peerDependenciesMeta": {
- "bufferutil": {
- "optional": true
- },
- "utf-8-validate": {
- "optional": true
- }
- }
- },
- "node_modules/engine.io-parser": {
- "version": "5.2.1",
- "resolved": "https://registry.npmjs.org/engine.io-parser/-/engine.io-parser-5.2.1.tgz",
- "integrity": "sha512-9JktcM3u18nU9N2Lz3bWeBgxVgOKpw7yhRaoxQA3FUDZzzw+9WlA6p4G4u0RixNkg14fH7EfEc/RhpurtiROTQ==",
- "dev": true,
- "engines": {
- "node": ">=10.0.0"
- }
- },
- "node_modules/engine.io/node_modules/ws": {
- "version": "8.11.0",
- "resolved": "https://registry.npmjs.org/ws/-/ws-8.11.0.tgz",
- "integrity": "sha512-HPG3wQd9sNQoT9xHyNCXoDUa+Xw/VevmY9FoHyQ+g+rrMn4j6FB4np7Z0OhdTgjx6MgQLK7jwSy1YecU1+4Asg==",
- "dev": true,
- "engines": {
- "node": ">=10.0.0"
- },
- "peerDependencies": {
- "bufferutil": "^4.0.1",
- "utf-8-validate": "^5.0.2"
- },
- "peerDependenciesMeta": {
- "bufferutil": {
- "optional": true
- },
- "utf-8-validate": {
- "optional": true
- }
- }
- },
"node_modules/enhanced-resolve": {
"version": "5.15.0",
"resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.15.0.tgz",
@@ -8610,12 +8731,11 @@
"dev": true
},
"node_modules/esbuild": {
- "version": "0.19.5",
- "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.19.5.tgz",
- "integrity": "sha512-bUxalY7b1g8vNhQKdB24QDmHeY4V4tw/s6Ak5z+jJX9laP5MoQseTOMemAr0gxssjNcH0MCViG8ONI2kksvfFQ==",
+ "version": "0.19.11",
+ "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.19.11.tgz",
+ "integrity": "sha512-HJ96Hev2hX/6i5cDVwcqiJBBtuo9+FeIJOtZ9W1kA5M6AMJRHUZlpYZ1/SbEwtO0ioNAW8rUooVpC/WehY2SfA==",
"dev": true,
"hasInstallScript": true,
- "optional": true,
"bin": {
"esbuild": "bin/esbuild"
},
@@ -8623,34 +8743,35 @@
"node": ">=12"
},
"optionalDependencies": {
- "@esbuild/android-arm": "0.19.5",
- "@esbuild/android-arm64": "0.19.5",
- "@esbuild/android-x64": "0.19.5",
- "@esbuild/darwin-arm64": "0.19.5",
- "@esbuild/darwin-x64": "0.19.5",
- "@esbuild/freebsd-arm64": "0.19.5",
- "@esbuild/freebsd-x64": "0.19.5",
- "@esbuild/linux-arm": "0.19.5",
- "@esbuild/linux-arm64": "0.19.5",
- "@esbuild/linux-ia32": "0.19.5",
- "@esbuild/linux-loong64": "0.19.5",
- "@esbuild/linux-mips64el": "0.19.5",
- "@esbuild/linux-ppc64": "0.19.5",
- "@esbuild/linux-riscv64": "0.19.5",
- "@esbuild/linux-s390x": "0.19.5",
- "@esbuild/linux-x64": "0.19.5",
- "@esbuild/netbsd-x64": "0.19.5",
- "@esbuild/openbsd-x64": "0.19.5",
- "@esbuild/sunos-x64": "0.19.5",
- "@esbuild/win32-arm64": "0.19.5",
- "@esbuild/win32-ia32": "0.19.5",
- "@esbuild/win32-x64": "0.19.5"
+ "@esbuild/aix-ppc64": "0.19.11",
+ "@esbuild/android-arm": "0.19.11",
+ "@esbuild/android-arm64": "0.19.11",
+ "@esbuild/android-x64": "0.19.11",
+ "@esbuild/darwin-arm64": "0.19.11",
+ "@esbuild/darwin-x64": "0.19.11",
+ "@esbuild/freebsd-arm64": "0.19.11",
+ "@esbuild/freebsd-x64": "0.19.11",
+ "@esbuild/linux-arm": "0.19.11",
+ "@esbuild/linux-arm64": "0.19.11",
+ "@esbuild/linux-ia32": "0.19.11",
+ "@esbuild/linux-loong64": "0.19.11",
+ "@esbuild/linux-mips64el": "0.19.11",
+ "@esbuild/linux-ppc64": "0.19.11",
+ "@esbuild/linux-riscv64": "0.19.11",
+ "@esbuild/linux-s390x": "0.19.11",
+ "@esbuild/linux-x64": "0.19.11",
+ "@esbuild/netbsd-x64": "0.19.11",
+ "@esbuild/openbsd-x64": "0.19.11",
+ "@esbuild/sunos-x64": "0.19.11",
+ "@esbuild/win32-arm64": "0.19.11",
+ "@esbuild/win32-ia32": "0.19.11",
+ "@esbuild/win32-x64": "0.19.11"
}
},
"node_modules/esbuild-wasm": {
- "version": "0.19.5",
- "resolved": "https://registry.npmjs.org/esbuild-wasm/-/esbuild-wasm-0.19.5.tgz",
- "integrity": "sha512-7zmLLn2QCj93XfMmHtzrDJ1UBuOHB2CZz1ghoCEZiRajxjUvHsF40PnbzFIY/pmesqPRaEtEWii0uzsTbnAgrA==",
+ "version": "0.19.11",
+ "resolved": "https://registry.npmjs.org/esbuild-wasm/-/esbuild-wasm-0.19.11.tgz",
+ "integrity": "sha512-MIhnpc1TxERUHomteO/ZZHp+kUawGEc03D/8vMHGzffLvbFLeDe6mwxqEZwlqBNY7SLWbyp6bBQAcCen8+wpjQ==",
"dev": true,
"bin": {
"esbuild": "bin/esbuild"
@@ -9083,12 +9204,6 @@
"node": ">= 0.6"
}
},
- "node_modules/eventemitter-asyncresource": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/eventemitter-asyncresource/-/eventemitter-asyncresource-1.0.0.tgz",
- "integrity": "sha512-39F7TBIV0G7gTelxwbEqnwhp90eqCPON1k0NwNfwhgKn4Co4ybUbj2pECcXT0B3ztRKZ7Pw1JujUUgmQJHcVAQ==",
- "dev": true
- },
"node_modules/eventemitter3": {
"version": "4.0.7",
"resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.7.tgz",
@@ -9200,21 +9315,6 @@
"node": ">= 0.10.0"
}
},
- "node_modules/express/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==",
- "dev": true
- },
- "node_modules/express/node_modules/cookie": {
- "version": "0.5.0",
- "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.5.0.tgz",
- "integrity": "sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw==",
- "dev": true,
- "engines": {
- "node": ">= 0.6"
- }
- },
"node_modules/express/node_modules/debug": {
"version": "2.6.9",
"resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
@@ -9224,106 +9324,12 @@
"ms": "2.0.0"
}
},
- "node_modules/express/node_modules/destroy": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz",
- "integrity": "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==",
- "dev": true,
- "engines": {
- "node": ">= 0.8",
- "npm": "1.2.8000 || >= 1.4.16"
- }
- },
- "node_modules/express/node_modules/finalhandler": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.2.0.tgz",
- "integrity": "sha512-5uXcUVftlQMFnWC9qu/svkWv3GTd2PfUhK/3PLkYNAe7FbqJMt3515HaxE6eRL74GdsriiwujiawdaB1BpEISg==",
- "dev": true,
- "dependencies": {
- "debug": "2.6.9",
- "encodeurl": "~1.0.2",
- "escape-html": "~1.0.3",
- "on-finished": "2.4.1",
- "parseurl": "~1.3.3",
- "statuses": "2.0.1",
- "unpipe": "~1.0.0"
- },
- "engines": {
- "node": ">= 0.8"
- }
- },
"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==",
"dev": true
},
- "node_modules/express/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==",
- "dev": true,
- "dependencies": {
- "ee-first": "1.1.1"
- },
- "engines": {
- "node": ">= 0.8"
- }
- },
- "node_modules/express/node_modules/send": {
- "version": "0.18.0",
- "resolved": "https://registry.npmjs.org/send/-/send-0.18.0.tgz",
- "integrity": "sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg==",
- "dev": true,
- "dependencies": {
- "debug": "2.6.9",
- "depd": "2.0.0",
- "destroy": "1.2.0",
- "encodeurl": "~1.0.2",
- "escape-html": "~1.0.3",
- "etag": "~1.8.1",
- "fresh": "0.5.2",
- "http-errors": "2.0.0",
- "mime": "1.6.0",
- "ms": "2.1.3",
- "on-finished": "2.4.1",
- "range-parser": "~1.2.1",
- "statuses": "2.0.1"
- },
- "engines": {
- "node": ">= 0.8.0"
- }
- },
- "node_modules/express/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==",
- "dev": true
- },
- "node_modules/express/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==",
- "dev": true,
- "dependencies": {
- "encodeurl": "~1.0.2",
- "escape-html": "~1.0.3",
- "parseurl": "~1.3.3",
- "send": "0.18.0"
- },
- "engines": {
- "node": ">= 0.8.0"
- }
- },
- "node_modules/express/node_modules/statuses": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz",
- "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==",
- "dev": true,
- "engines": {
- "node": ">= 0.8"
- }
- },
"node_modules/external-editor": {
"version": "3.1.0",
"resolved": "https://registry.npmjs.org/external-editor/-/external-editor-3.1.0.tgz",
@@ -9499,17 +9505,17 @@
}
},
"node_modules/finalhandler": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.0.tgz",
- "integrity": "sha512-ejnvM9ZXYzp6PUPUyQBMBf0Co5VX2gr5H2VQe2Ui2jWXNlxv+PYZo8wpAymJNJdLsG1R4p+M4aynF8KuoUEwRw==",
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.2.0.tgz",
+ "integrity": "sha512-5uXcUVftlQMFnWC9qu/svkWv3GTd2PfUhK/3PLkYNAe7FbqJMt3515HaxE6eRL74GdsriiwujiawdaB1BpEISg==",
"dev": true,
"dependencies": {
"debug": "2.6.9",
- "encodeurl": "~1.0.1",
+ "encodeurl": "~1.0.2",
"escape-html": "~1.0.3",
- "on-finished": "~2.3.0",
- "parseurl": "~1.3.2",
- "statuses": "~1.3.1",
+ "on-finished": "2.4.1",
+ "parseurl": "~1.3.3",
+ "statuses": "2.0.1",
"unpipe": "~1.0.0"
},
"engines": {
@@ -9599,9 +9605,9 @@
"dev": true
},
"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==",
+ "version": "1.15.5",
+ "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.5.tgz",
+ "integrity": "sha512-vSFWUON1B+yAw1VN4xMfxgn5fTUiaOzAJCKBwIIgT/+7CuGy9+r+5gITvP62j3RmaD5Ph65UaERdOSRGUzZtgw==",
"dev": true,
"funding": [
{
@@ -9698,14 +9704,17 @@
"dev": true
},
"node_modules/fs-extra": {
- "version": "3.0.1",
- "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-3.0.1.tgz",
- "integrity": "sha512-V3Z3WZWVUYd8hoCL5xfXJCaHWYzmtwW5XWYSlLgERi8PWd8bx1kUHUk8L1BT57e49oKnDDD180mjfrHc1yA9rg==",
+ "version": "11.2.0",
+ "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-11.2.0.tgz",
+ "integrity": "sha512-PmDi3uwK5nFuXh7XDTlVnS17xJS7vW36is2+w3xcv8SVxiB4NyATf4ctkVY5bkSjX0Y4nbvZCq1/EjtEyr9ktw==",
"dev": true,
"dependencies": {
- "graceful-fs": "^4.1.2",
- "jsonfile": "^3.0.0",
- "universalify": "^0.1.0"
+ "graceful-fs": "^4.2.0",
+ "jsonfile": "^6.0.1",
+ "universalify": "^2.0.0"
+ },
+ "engines": {
+ "node": ">=14.14"
}
},
"node_modules/fs-minipass": {
@@ -10013,9 +10022,9 @@
}
},
"node_modules/hosted-git-info/node_modules/lru-cache": {
- "version": "10.1.0",
- "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.1.0.tgz",
- "integrity": "sha512-/1clY/ui8CzjKFyjdvwPWJUYKiFVXG2I2cY0ssG7h4+hwk+XOIX7ZSG9Q7TW8TW3Kp3BUSqgFWBLgL4PJ+Blag==",
+ "version": "10.2.0",
+ "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.2.0.tgz",
+ "integrity": "sha512-2bIM8x+VAf6JT4bKAljS1qUWgMsqZRPGJS6FSahIMPVvctcNhyVp7AJu7quxOW9jwkryBReKZY5tY5JYv2n/7Q==",
"dev": true,
"engines": {
"node": "14 || >=16.14"
@@ -10150,15 +10159,6 @@
"node": ">= 0.8"
}
},
- "node_modules/http-errors/node_modules/statuses": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz",
- "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==",
- "dev": true,
- "engines": {
- "node": ">= 0.8"
- }
- },
"node_modules/http-parser-js": {
"version": "0.5.8",
"resolved": "https://registry.npmjs.org/http-parser-js/-/http-parser-js-0.5.8.tgz",
@@ -10354,13 +10354,10 @@
}
},
"node_modules/immutable": {
- "version": "3.8.2",
- "resolved": "https://registry.npmjs.org/immutable/-/immutable-3.8.2.tgz",
- "integrity": "sha512-15gZoQ38eYjEjxkorfbcgBKBL6R7T459OuK+CpcWt7O3KF4uPCx2tD0uFETlUDIyo+1789crbMhTvQBSR5yBMg==",
- "dev": true,
- "engines": {
- "node": ">=0.10.0"
- }
+ "version": "4.3.5",
+ "resolved": "https://registry.npmjs.org/immutable/-/immutable-4.3.5.tgz",
+ "integrity": "sha512-8eabxkth9gZatlwl5TBuJnCsoTADlL6ftEr7A4qgdaTsPyreilDSnUk57SO+jfKcNtxPa22U5KK6DSeAYhpBJw==",
+ "dev": true
},
"node_modules/import-fresh": {
"version": "3.3.0",
@@ -10462,12 +10459,12 @@
}
},
"node_modules/inquirer": {
- "version": "9.2.11",
- "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-9.2.11.tgz",
- "integrity": "sha512-B2LafrnnhbRzCWfAdOXisUzL89Kg8cVJlYmhqoi3flSiV/TveO+nsXwgKr9h9PIo+J1hz7nBSk6gegRIMBBf7g==",
+ "version": "9.2.12",
+ "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-9.2.12.tgz",
+ "integrity": "sha512-mg3Fh9g2zfuVWJn6lhST0O7x4n03k7G8Tx5nvikJkbq8/CK47WDVm+UznF0G6s5Zi0KcyUisr6DU8T67N5U+1Q==",
"dev": true,
"dependencies": {
- "@ljharb/through": "^2.3.9",
+ "@ljharb/through": "^2.3.11",
"ansi-escapes": "^4.3.2",
"chalk": "^5.3.0",
"cli-cursor": "^3.1.0",
@@ -10617,15 +10614,6 @@
"node": ">=0.12.0"
}
},
- "node_modules/is-number-like": {
- "version": "1.0.8",
- "resolved": "https://registry.npmjs.org/is-number-like/-/is-number-like-1.0.8.tgz",
- "integrity": "sha512-6rZi3ezCyFcn5L71ywzz2bS5b2Igl1En3eTlZlvKjpz1n3IZLAYMbKYAIQgFmEu0GENg92ziU/faEOA/aixjbA==",
- "dev": true,
- "dependencies": {
- "lodash.isfinite": "^3.3.2"
- }
- },
"node_modules/is-path-inside": {
"version": "3.0.3",
"resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz",
@@ -11779,9 +11767,9 @@
}
},
"node_modules/jest-preset-angular": {
- "version": "13.1.4",
- "resolved": "https://registry.npmjs.org/jest-preset-angular/-/jest-preset-angular-13.1.4.tgz",
- "integrity": "sha512-XKeWa8Qt7p37SzlJ85qEXgig06SgkfrzV057X2GSMqfz/HLJmTUjMFkHJKe65ZaQumNQWCcXpxXREr6EfZ9bow==",
+ "version": "14.0.0",
+ "resolved": "https://registry.npmjs.org/jest-preset-angular/-/jest-preset-angular-14.0.0.tgz",
+ "integrity": "sha512-gXGgzuGbpw3MRBMe/NGCu3r2E//GKmhtFveo0XUIXMvQ3je0vcOtK+WYjxtxFTTh2xFgrA/loY5BxBcKia/GaA==",
"dev": true,
"dependencies": {
"bs-logger": "^0.2.6",
@@ -11798,10 +11786,10 @@
"esbuild": ">=0.13.8"
},
"peerDependencies": {
- "@angular-devkit/build-angular": ">=13.0.0 <18.0.0",
- "@angular/compiler-cli": ">=13.0.0 <18.0.0",
- "@angular/core": ">=13.0.0 <18.0.0",
- "@angular/platform-browser-dynamic": ">=13.0.0 <18.0.0",
+ "@angular-devkit/build-angular": ">=15.0.0 <18.0.0",
+ "@angular/compiler-cli": ">=15.0.0 <18.0.0",
+ "@angular/core": ">=15.0.0 <18.0.0",
+ "@angular/platform-browser-dynamic": ">=15.0.0 <18.0.0",
"jest": "^29.0.0",
"typescript": ">=4.4"
}
@@ -12760,10 +12748,13 @@
"dev": true
},
"node_modules/jsonfile": {
- "version": "3.0.1",
- "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-3.0.1.tgz",
- "integrity": "sha512-oBko6ZHlubVB5mRFkur5vgYR1UyqX+S6Y/oCfLhqNdcc2fYFlDpIoNc7AfKS1KOGcnNAkvsr0grLck9ANM815w==",
+ "version": "6.1.0",
+ "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz",
+ "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==",
"dev": true,
+ "dependencies": {
+ "universalify": "^2.0.0"
+ },
"optionalDependencies": {
"graceful-fs": "^4.1.6"
}
@@ -12969,12 +12960,6 @@
}
}
},
- "node_modules/limiter": {
- "version": "1.1.5",
- "resolved": "https://registry.npmjs.org/limiter/-/limiter-1.1.5.tgz",
- "integrity": "sha512-FWWMIEOxz3GwUI4Ts/IvgVy6LPvoMPgjMdQ185nN6psJyBJ4yOpzqm695/h5umdLJg2vW3GR5iG11MAkR2AzJA==",
- "dev": true
- },
"node_modules/lines-and-columns": {
"version": "2.0.4",
"resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-2.0.4.tgz",
@@ -13002,129 +12987,6 @@
"node": ">= 12.13.0"
}
},
- "node_modules/localtunnel": {
- "version": "2.0.2",
- "resolved": "https://registry.npmjs.org/localtunnel/-/localtunnel-2.0.2.tgz",
- "integrity": "sha512-n418Cn5ynvJd7m/N1d9WVJISLJF/ellZnfsLnx8WBWGzxv/ntNcFkJ1o6se5quUhCplfLGBNL5tYHiq5WF3Nug==",
- "dev": true,
- "dependencies": {
- "axios": "0.21.4",
- "debug": "4.3.2",
- "openurl": "1.1.1",
- "yargs": "17.1.1"
- },
- "bin": {
- "lt": "bin/lt.js"
- },
- "engines": {
- "node": ">=8.3.0"
- }
- },
- "node_modules/localtunnel/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/localtunnel/node_modules/cliui": {
- "version": "7.0.4",
- "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz",
- "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==",
- "dev": true,
- "dependencies": {
- "string-width": "^4.2.0",
- "strip-ansi": "^6.0.0",
- "wrap-ansi": "^7.0.0"
- }
- },
- "node_modules/localtunnel/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/localtunnel/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/localtunnel/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==",
- "dev": true,
- "dependencies": {
- "ms": "2.1.2"
- },
- "engines": {
- "node": ">=6.0"
- },
- "peerDependenciesMeta": {
- "supports-color": {
- "optional": true
- }
- }
- },
- "node_modules/localtunnel/node_modules/wrap-ansi": {
- "version": "7.0.0",
- "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz",
- "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==",
- "dev": true,
- "dependencies": {
- "ansi-styles": "^4.0.0",
- "string-width": "^4.1.0",
- "strip-ansi": "^6.0.0"
- },
- "engines": {
- "node": ">=10"
- },
- "funding": {
- "url": "https://github.com/chalk/wrap-ansi?sponsor=1"
- }
- },
- "node_modules/localtunnel/node_modules/yargs": {
- "version": "17.1.1",
- "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.1.1.tgz",
- "integrity": "sha512-c2k48R0PwKIqKhPMWjeiF6y2xY/gPMUlro0sgxqXpbOIohWiLNXWslsootttv7E1e73QPAMQSg5FeySbVcpsPQ==",
- "dev": true,
- "dependencies": {
- "cliui": "^7.0.2",
- "escalade": "^3.1.1",
- "get-caller-file": "^2.0.5",
- "require-directory": "^2.1.1",
- "string-width": "^4.2.0",
- "y18n": "^5.0.5",
- "yargs-parser": "^20.2.2"
- },
- "engines": {
- "node": ">=12"
- }
- },
- "node_modules/localtunnel/node_modules/yargs-parser": {
- "version": "20.2.9",
- "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz",
- "integrity": "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==",
- "dev": true,
- "engines": {
- "node": ">=10"
- }
- },
"node_modules/locate-path": {
"version": "5.0.0",
"resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz",
@@ -13155,12 +13017,6 @@
"integrity": "sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow==",
"dev": true
},
- "node_modules/lodash.isfinite": {
- "version": "3.3.2",
- "resolved": "https://registry.npmjs.org/lodash.isfinite/-/lodash.isfinite-3.3.2.tgz",
- "integrity": "sha512-7FGG40uhC8Mm633uKW1r58aElFlBlxCrg9JfSi3P6aYiWmfiWF0PgMd86ZUsxE5GwWPdHoS2+48bwTh2VPkIQA==",
- "dev": true
- },
"node_modules/lodash.memoize": {
"version": "4.1.2",
"resolved": "https://registry.npmjs.org/lodash.memoize/-/lodash.memoize-4.1.2.tgz",
@@ -13713,12 +13569,6 @@
"integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==",
"devOptional": true
},
- "node_modules/mitt": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/mitt/-/mitt-1.2.0.tgz",
- "integrity": "sha512-r6lj77KlwqLhIUku9UWYes7KJtsczvolZkzp8hbaDPPaE24OmWl5s539Mytlj22siEQKosZ26qCBgda2PKwoJw==",
- "dev": true
- },
"node_modules/mkdirp": {
"version": "1.0.4",
"resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz",
@@ -13741,9 +13591,9 @@
}
},
"node_modules/mrmime": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/mrmime/-/mrmime-1.0.1.tgz",
- "integrity": "sha512-hzzEagAgDyoU1Q6yg5uI+AorQgdvMCur3FcKf7NhMKWsaYg+RnbTyHRa/9IlLF9rf455MOCtcqqrQQ83pPP7Uw==",
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/mrmime/-/mrmime-2.0.0.tgz",
+ "integrity": "sha512-eu38+hdgojoyq63s+yTpN4XMBdt5l8HhMhc4VKLO9KM5caLIBvUm4thi7fFaxyTmCKeNnXZ5pAlBwCUnhA09uw==",
"dev": true,
"engines": {
"node": ">=10"
@@ -13910,9 +13760,9 @@
}
},
"node_modules/ngx-ui-tour-core": {
- "version": "12.0.0",
- "resolved": "https://registry.npmjs.org/ngx-ui-tour-core/-/ngx-ui-tour-core-12.0.0.tgz",
- "integrity": "sha512-K2RnLMJHZvXjMAkdI1+N46tBLklnardf7Hm98bIAzc6w+5yyq53ttOJBFRk/fXSJZ7qFAfepPmyuInz6v6QYWg==",
+ "version": "12.0.1",
+ "resolved": "https://registry.npmjs.org/ngx-ui-tour-core/-/ngx-ui-tour-core-12.0.1.tgz",
+ "integrity": "sha512-IkkSY8l+3huQ5D7cPZ7tnAtP7ijQ85ggsOIohekE/DHqXReX988S2xuXh5A0pU8bS+HLJw2wlC1/XohOknVumA==",
"dependencies": {
"tslib": "^2.0.0"
},
@@ -13924,11 +13774,11 @@
}
},
"node_modules/ngx-ui-tour-ng-bootstrap": {
- "version": "14.0.1",
- "resolved": "https://registry.npmjs.org/ngx-ui-tour-ng-bootstrap/-/ngx-ui-tour-ng-bootstrap-14.0.1.tgz",
- "integrity": "sha512-/mFHXmTPgpnSYNH0ejgZ3xW3/VXnR3qI24C6Crhqv8ftqxM/1C1fDtY6nJAjfgB+dEu5BIqLMdcT12BdF6UGNw==",
+ "version": "14.0.2",
+ "resolved": "https://registry.npmjs.org/ngx-ui-tour-ng-bootstrap/-/ngx-ui-tour-ng-bootstrap-14.0.2.tgz",
+ "integrity": "sha512-2w9p5GHG/YDIwOQG+pct2s19P7hvtYbX73rYYV3FF86dXe00xPA7gGl2uSg48H3GjmSD0DeeKPzVWULwSBYNrw==",
"dependencies": {
- "ngx-ui-tour-core": "12.0.0",
+ "ngx-ui-tour-core": "12.0.1",
"tslib": "^2.0.0"
},
"peerDependencies": {
@@ -14035,9 +13885,9 @@
}
},
"node_modules/node-gyp-build": {
- "version": "4.7.1",
- "resolved": "https://registry.npmjs.org/node-gyp-build/-/node-gyp-build-4.7.1.tgz",
- "integrity": "sha512-wTSrZ+8lsRRa3I3H8Xr65dLWSgCvY2l4AOnaeKdPA9TB/WYMPaTcrzf3rXvFoVvjKNVnu0CcWSx54qq9GKRUYg==",
+ "version": "4.8.0",
+ "resolved": "https://registry.npmjs.org/node-gyp-build/-/node-gyp-build-4.8.0.tgz",
+ "integrity": "sha512-u6fs2AEUljNho3EYTJNBfImO5QTo/J/1Etd+NVdCj7qWKUSN/bSLkZwhDv7I+w/MSC6qJ4cknepkAYykDdK8og==",
"dev": true,
"optional": true,
"bin": {
@@ -14229,9 +14079,9 @@
}
},
"node_modules/npm-packlist": {
- "version": "8.0.1",
- "resolved": "https://registry.npmjs.org/npm-packlist/-/npm-packlist-8.0.1.tgz",
- "integrity": "sha512-MQpL27ZrsJQ2kiAuQPpZb5LtJwydNRnI15QWXsf3WHERu4rzjRj6Zju/My2fov7tLuu3Gle/uoIX/DDZ3u4O4Q==",
+ "version": "8.0.2",
+ "resolved": "https://registry.npmjs.org/npm-packlist/-/npm-packlist-8.0.2.tgz",
+ "integrity": "sha512-shYrPFIS/JLP4oQmAwDyk5HcyysKW8/JLTEA32S0Z5TzvpaeeX2yMFfoK1fjEBnCBvVyIB/Jj/GBFdm0wsgzbA==",
"dev": true,
"dependencies": {
"ignore-walk": "^6.0.4"
@@ -14316,13 +14166,13 @@
"dev": true
},
"node_modules/nx": {
- "version": "17.1.3",
- "resolved": "https://registry.npmjs.org/nx/-/nx-17.1.3.tgz",
- "integrity": "sha512-6LYoTt01nS1d/dvvYtRs+pEAMQmUVsd2fr/a8+X1cDjWrb8wsf1O3DwlBTqKOXOazpS3eOr0Ukc9N1svbu7uXA==",
+ "version": "17.2.8",
+ "resolved": "https://registry.npmjs.org/nx/-/nx-17.2.8.tgz",
+ "integrity": "sha512-rM5zXbuXLEuqQqcjVjClyvHwRJwt+NVImR2A6KFNG40Z60HP6X12wAxxeLHF5kXXTDRU0PFhf/yACibrpbPrAw==",
"dev": true,
"hasInstallScript": true,
"dependencies": {
- "@nrwl/tao": "17.1.3",
+ "@nrwl/tao": "17.2.8",
"@yarnpkg/lockfile": "^1.1.0",
"@yarnpkg/parsers": "3.0.0-rc.46",
"@zkochan/js-yaml": "0.0.6",
@@ -14354,7 +14204,6 @@
"tmp": "~0.2.1",
"tsconfig-paths": "^4.1.2",
"tslib": "^2.3.0",
- "v8-compile-cache": "2.3.0",
"yargs": "^17.6.2",
"yargs-parser": "21.1.1"
},
@@ -14363,16 +14212,16 @@
"nx-cloud": "bin/nx-cloud.js"
},
"optionalDependencies": {
- "@nx/nx-darwin-arm64": "17.1.3",
- "@nx/nx-darwin-x64": "17.1.3",
- "@nx/nx-freebsd-x64": "17.1.3",
- "@nx/nx-linux-arm-gnueabihf": "17.1.3",
- "@nx/nx-linux-arm64-gnu": "17.1.3",
- "@nx/nx-linux-arm64-musl": "17.1.3",
- "@nx/nx-linux-x64-gnu": "17.1.3",
- "@nx/nx-linux-x64-musl": "17.1.3",
- "@nx/nx-win32-arm64-msvc": "17.1.3",
- "@nx/nx-win32-x64-msvc": "17.1.3"
+ "@nx/nx-darwin-arm64": "17.2.8",
+ "@nx/nx-darwin-x64": "17.2.8",
+ "@nx/nx-freebsd-x64": "17.2.8",
+ "@nx/nx-linux-arm-gnueabihf": "17.2.8",
+ "@nx/nx-linux-arm64-gnu": "17.2.8",
+ "@nx/nx-linux-arm64-musl": "17.2.8",
+ "@nx/nx-linux-x64-gnu": "17.2.8",
+ "@nx/nx-linux-x64-musl": "17.2.8",
+ "@nx/nx-win32-arm64-msvc": "17.2.8",
+ "@nx/nx-win32-x64-msvc": "17.2.8"
},
"peerDependencies": {
"@swc-node/register": "^1.6.7",
@@ -14408,17 +14257,6 @@
"integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==",
"dev": true
},
- "node_modules/nx/node_modules/axios": {
- "version": "1.6.2",
- "resolved": "https://registry.npmjs.org/axios/-/axios-1.6.2.tgz",
- "integrity": "sha512-7i24Ri4pmDRfJTR7LDBhsOTtcm+9kjX5WiY1X3wIisx6G9So3pfMkEiU7emUBe46oceVImccTEM3k6C5dbVW8A==",
- "dev": true,
- "dependencies": {
- "follow-redirects": "^1.15.0",
- "form-data": "^4.0.0",
- "proxy-from-env": "^1.1.0"
- }
- },
"node_modules/nx/node_modules/chalk": {
"version": "4.1.2",
"resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz",
@@ -14468,20 +14306,6 @@
"url": "https://github.com/sponsors/sindresorhus"
}
},
- "node_modules/nx/node_modules/fs-extra": {
- "version": "11.2.0",
- "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-11.2.0.tgz",
- "integrity": "sha512-PmDi3uwK5nFuXh7XDTlVnS17xJS7vW36is2+w3xcv8SVxiB4NyATf4ctkVY5bkSjX0Y4nbvZCq1/EjtEyr9ktw==",
- "dev": true,
- "dependencies": {
- "graceful-fs": "^4.2.0",
- "jsonfile": "^6.0.1",
- "universalify": "^2.0.0"
- },
- "engines": {
- "node": ">=14.14"
- }
- },
"node_modules/nx/node_modules/glob": {
"version": "7.1.4",
"resolved": "https://registry.npmjs.org/glob/-/glob-7.1.4.tgz",
@@ -14520,18 +14344,6 @@
"js-yaml": "bin/js-yaml.js"
}
},
- "node_modules/nx/node_modules/jsonfile": {
- "version": "6.1.0",
- "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz",
- "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==",
- "dev": true,
- "dependencies": {
- "universalify": "^2.0.0"
- },
- "optionalDependencies": {
- "graceful-fs": "^4.1.6"
- }
- },
"node_modules/nx/node_modules/lru-cache": {
"version": "6.0.0",
"resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz",
@@ -14583,15 +14395,6 @@
"node": ">=8"
}
},
- "node_modules/nx/node_modules/universalify": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.1.tgz",
- "integrity": "sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==",
- "dev": true,
- "engines": {
- "node": ">= 10.0.0"
- }
- },
"node_modules/nx/node_modules/yallist": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz",
@@ -14602,7 +14405,7 @@
"version": "4.1.1",
"resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz",
"integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==",
- "devOptional": true,
+ "optional": true,
"engines": {
"node": ">=0.10.0"
}
@@ -14632,9 +14435,9 @@
"dev": true
},
"node_modules/on-finished": {
- "version": "2.3.0",
- "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz",
- "integrity": "sha512-ikqdkGAAyf/X/gPhXGvfgAytDZtDbr+bkNUJ0N9h5MI/dmdgCs3l6hoHrcUv41sRKew3jIwrp4qQDXiK99Utww==",
+ "version": "2.4.1",
+ "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz",
+ "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==",
"dev": true,
"dependencies": {
"ee-first": "1.1.1"
@@ -14693,33 +14496,6 @@
"url": "https://github.com/sponsors/sindresorhus"
}
},
- "node_modules/openurl": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/openurl/-/openurl-1.1.1.tgz",
- "integrity": "sha512-d/gTkTb1i1GKz5k3XE3XFV/PxQ1k45zDqGP2OA7YhgsaLoqm6qRvARAZOFer1fcXritWlGBRCu/UgeS4HAnXAA==",
- "dev": true
- },
- "node_modules/opn": {
- "version": "5.3.0",
- "resolved": "https://registry.npmjs.org/opn/-/opn-5.3.0.tgz",
- "integrity": "sha512-bYJHo/LOmoTd+pfiYhfZDnf9zekVJrY+cnS2a5F2x+w5ppvTqObojTP7WiFG+kVZs9Inw+qQ/lw7TroWwhdd2g==",
- "dev": true,
- "dependencies": {
- "is-wsl": "^1.1.0"
- },
- "engines": {
- "node": ">=4"
- }
- },
- "node_modules/opn/node_modules/is-wsl": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-1.1.0.tgz",
- "integrity": "sha512-gfygJYZ2gLTDlmbWMI0CE2MwnFzSN/2SZfkMlItC4K/JBlsWVDB0bO6XhqcY13YXE7iMcAJnzTCJjPiTeJJ0Mw==",
- "dev": true,
- "engines": {
- "node": ">=4"
- }
- },
"node_modules/optionator": {
"version": "0.9.3",
"resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.3.tgz",
@@ -14940,9 +14716,9 @@
}
},
"node_modules/pacote": {
- "version": "17.0.4",
- "resolved": "https://registry.npmjs.org/pacote/-/pacote-17.0.4.tgz",
- "integrity": "sha512-eGdLHrV/g5b5MtD5cTPyss+JxOlaOloSMG3UwPMAvL8ywaLJ6beONPF40K4KKl/UI6q5hTKCJq5rCu8tkF+7Dg==",
+ "version": "17.0.5",
+ "resolved": "https://registry.npmjs.org/pacote/-/pacote-17.0.5.tgz",
+ "integrity": "sha512-TAE0m20zSDMnchPja9vtQjri19X3pZIyRpm2TJVeI+yU42leJBBDTRYhOcWFsPhaMxf+3iwQkFiKz16G9AEeeA==",
"dev": true,
"dependencies": {
"@npmcli/git": "^5.0.0",
@@ -15172,18 +14948,6 @@
"node": ">=8"
}
},
- "node_modules/patch-package/node_modules/jsonfile": {
- "version": "6.1.0",
- "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz",
- "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==",
- "dev": true,
- "dependencies": {
- "universalify": "^2.0.0"
- },
- "optionalDependencies": {
- "graceful-fs": "^4.1.6"
- }
- },
"node_modules/patch-package/node_modules/open": {
"version": "7.4.2",
"resolved": "https://registry.npmjs.org/open/-/open-7.4.2.tgz",
@@ -15245,15 +15009,6 @@
"node": ">=0.6.0"
}
},
- "node_modules/patch-package/node_modules/universalify": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.1.tgz",
- "integrity": "sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==",
- "dev": true,
- "engines": {
- "node": ">= 10.0.0"
- }
- },
"node_modules/path-exists": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz",
@@ -15304,9 +15059,9 @@
}
},
"node_modules/path-scurry/node_modules/lru-cache": {
- "version": "10.1.0",
- "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.1.0.tgz",
- "integrity": "sha512-/1clY/ui8CzjKFyjdvwPWJUYKiFVXG2I2cY0ssG7h4+hwk+XOIX7ZSG9Q7TW8TW3Kp3BUSqgFWBLgL4PJ+Blag==",
+ "version": "10.2.0",
+ "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.2.0.tgz",
+ "integrity": "sha512-2bIM8x+VAf6JT4bKAljS1qUWgMsqZRPGJS6FSahIMPVvctcNhyVp7AJu7quxOW9jwkryBReKZY5tY5JYv2n/7Q==",
"dev": true,
"engines": {
"node": "14 || >=16.14"
@@ -15385,12 +15140,11 @@
}
},
"node_modules/piscina": {
- "version": "4.1.0",
- "resolved": "https://registry.npmjs.org/piscina/-/piscina-4.1.0.tgz",
- "integrity": "sha512-sjbLMi3sokkie+qmtZpkfMCUJTpbxJm/wvaPzU28vmYSsTSW8xk9JcFUsbqGJdtPpIQ9tuj+iDcTtgZjwnOSig==",
+ "version": "4.2.1",
+ "resolved": "https://registry.npmjs.org/piscina/-/piscina-4.2.1.tgz",
+ "integrity": "sha512-LShp0+lrO+WIzB9LXO+ZmO4zGHxtTJNZhEO56H9SSu+JPaUQb6oLcTCzWi5IL2DS8/vIkCE88ElahuSSw4TAkA==",
"dev": true,
"dependencies": {
- "eventemitter-asyncresource": "^1.0.0",
"hdr-histogram-js": "^2.0.1",
"hdr-histogram-percentiles-obj": "^3.0.0"
},
@@ -15496,12 +15250,12 @@
}
},
"node_modules/playwright": {
- "version": "1.40.1",
- "resolved": "https://registry.npmjs.org/playwright/-/playwright-1.40.1.tgz",
- "integrity": "sha512-2eHI7IioIpQ0bS1Ovg/HszsN/XKNwEG1kbzSDDmADpclKc7CyqkHw7Mg2JCz/bbCxg25QUPcjksoMW7JcIFQmw==",
+ "version": "1.41.2",
+ "resolved": "https://registry.npmjs.org/playwright/-/playwright-1.41.2.tgz",
+ "integrity": "sha512-v0bOa6H2GJChDL8pAeLa/LZC4feoAMbSQm1/jF/ySsWWoaNItvrMP7GEkvEEFyCTUYKMxjQKaTSg5up7nR6/8A==",
"dev": true,
"dependencies": {
- "playwright-core": "1.40.1"
+ "playwright-core": "1.41.2"
},
"bin": {
"playwright": "cli.js"
@@ -15514,9 +15268,9 @@
}
},
"node_modules/playwright-core": {
- "version": "1.40.1",
- "resolved": "https://registry.npmjs.org/playwright-core/-/playwright-core-1.40.1.tgz",
- "integrity": "sha512-+hkOycxPiV534c4HhpfX6yrlawqVUzITRKwHAmYfmsVreltEl6fAZJ3DPfLMOODw0H3s1Itd6MDCWmP1fl/QvQ==",
+ "version": "1.41.2",
+ "resolved": "https://registry.npmjs.org/playwright-core/-/playwright-core-1.41.2.tgz",
+ "integrity": "sha512-VaTvwCA4Y8kxEe+kfm2+uUUw5Lubf38RxF7FpBxLPmGe5sdNkSg5e3ChEigaGrX7qdqT3pt2m/98LiyvU2x6CA==",
"dev": true,
"bin": {
"playwright-core": "cli.js"
@@ -15539,33 +15293,10 @@
"node": "^8.16.0 || ^10.6.0 || >=11.0.0"
}
},
- "node_modules/portscanner": {
- "version": "2.2.0",
- "resolved": "https://registry.npmjs.org/portscanner/-/portscanner-2.2.0.tgz",
- "integrity": "sha512-IFroCz/59Lqa2uBvzK3bKDbDDIEaAY8XJ1jFxcLWTqosrsc32//P4VuSB2vZXoHiHqOmx8B5L5hnKOxL/7FlPw==",
- "dev": true,
- "dependencies": {
- "async": "^2.6.0",
- "is-number-like": "^1.0.3"
- },
- "engines": {
- "node": ">=0.4",
- "npm": ">=1.0.0"
- }
- },
- "node_modules/portscanner/node_modules/async": {
- "version": "2.6.4",
- "resolved": "https://registry.npmjs.org/async/-/async-2.6.4.tgz",
- "integrity": "sha512-mzo5dfJYwAn29PeiJ0zvwTo04zj8HDJj0Mn8TD7sno7q12prdbnasKJHhkm2c1LgrhlJ0teaea8860oxi51mGA==",
- "dev": true,
- "dependencies": {
- "lodash": "^4.17.14"
- }
- },
"node_modules/postcss": {
- "version": "8.4.31",
- "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.31.tgz",
- "integrity": "sha512-PS08Iboia9mts/2ygV3eLpY5ghnUcfLV/EXTOW1E2qYxJKGGBUtNjN76FYHnMs36RmARn41bC0AZmn+rR0OVpQ==",
+ "version": "8.4.33",
+ "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.33.tgz",
+ "integrity": "sha512-Kkpbhhdjw2qQs2O2DGX+8m5OVqEcbB9HRBvuYM9pgrjEFUg30A9LmXNlTAUj4S9kgtGyrMbTzVjH7E+s5Re2yg==",
"dev": true,
"funding": [
{
@@ -15582,7 +15313,7 @@
}
],
"dependencies": {
- "nanoid": "^3.3.6",
+ "nanoid": "^3.3.7",
"picocolors": "^1.0.0",
"source-map-js": "^1.0.2"
},
@@ -15591,14 +15322,14 @@
}
},
"node_modules/postcss-loader": {
- "version": "7.3.3",
- "resolved": "https://registry.npmjs.org/postcss-loader/-/postcss-loader-7.3.3.tgz",
- "integrity": "sha512-YgO/yhtevGO/vJePCQmTxiaEwER94LABZN0ZMT4A0vsak9TpO+RvKRs7EmJ8peIlB9xfXCsS7M8LjqncsUZ5HA==",
+ "version": "7.3.4",
+ "resolved": "https://registry.npmjs.org/postcss-loader/-/postcss-loader-7.3.4.tgz",
+ "integrity": "sha512-iW5WTTBSC5BfsBJ9daFMPVrLT36MrNiC6fqOZTTaHjBNX6Pfd5p+hSBqe/fEeNd7pc13QiAyGt7VdGMw4eRC4A==",
"dev": true,
"dependencies": {
- "cosmiconfig": "^8.2.0",
- "jiti": "^1.18.2",
- "semver": "^7.3.8"
+ "cosmiconfig": "^8.3.5",
+ "jiti": "^1.20.0",
+ "semver": "^7.5.4"
},
"engines": {
"node": ">= 14.15.0"
@@ -15909,9 +15640,9 @@
}
},
"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==",
+ "version": "2.5.1",
+ "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.1.tgz",
+ "integrity": "sha512-qqJBtEyVgS0ZmPGdCFPWJ3FreoqvG4MVQln/kCgF7Olq95IbOp0/BWyMwbdtn4VTvkM8Y7khCQ2Xgk/tcrCXig==",
"dev": true,
"dependencies": {
"bytes": "3.1.2",
@@ -15923,6 +15654,15 @@
"node": ">= 0.8"
}
},
+ "node_modules/raw-body/node_modules/bytes": {
+ "version": "3.1.2",
+ "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz",
+ "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==",
+ "dev": true,
+ "engines": {
+ "node": ">= 0.8"
+ }
+ },
"node_modules/react-is": {
"version": "18.2.0",
"resolved": "https://registry.npmjs.org/react-is/-/react-is-18.2.0.tgz",
@@ -16248,34 +15988,6 @@
"node": ">=10"
}
},
- "node_modules/resp-modifier": {
- "version": "6.0.2",
- "resolved": "https://registry.npmjs.org/resp-modifier/-/resp-modifier-6.0.2.tgz",
- "integrity": "sha512-U1+0kWC/+4ncRFYqQWTx/3qkfE6a4B/h3XXgmXypfa0SPZ3t7cbbaFk297PjQS/yov24R18h6OZe6iZwj3NSLw==",
- "dev": true,
- "dependencies": {
- "debug": "^2.2.0",
- "minimatch": "^3.0.2"
- },
- "engines": {
- "node": ">= 0.8.0"
- }
- },
- "node_modules/resp-modifier/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/resp-modifier/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/restore-cursor": {
"version": "3.1.0",
"resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-3.1.0.tgz",
@@ -16323,18 +16035,34 @@
}
},
"node_modules/rollup": {
- "version": "3.29.4",
- "resolved": "https://registry.npmjs.org/rollup/-/rollup-3.29.4.tgz",
- "integrity": "sha512-oWzmBZwvYrU0iJHtDmhsm662rC15FRXmcjCk1xD771dFDx5jJ02ufAQQTn0etB2emNk4J9EZg/yWKpsn9BWGRw==",
+ "version": "4.9.6",
+ "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.9.6.tgz",
+ "integrity": "sha512-05lzkCS2uASX0CiLFybYfVkwNbKZG5NFQ6Go0VWyogFTXXbR039UVsegViTntkk4OglHBdF54ccApXRRuXRbsg==",
"dev": true,
+ "dependencies": {
+ "@types/estree": "1.0.5"
+ },
"bin": {
"rollup": "dist/bin/rollup"
},
"engines": {
- "node": ">=14.18.0",
+ "node": ">=18.0.0",
"npm": ">=8.0.0"
},
"optionalDependencies": {
+ "@rollup/rollup-android-arm-eabi": "4.9.6",
+ "@rollup/rollup-android-arm64": "4.9.6",
+ "@rollup/rollup-darwin-arm64": "4.9.6",
+ "@rollup/rollup-darwin-x64": "4.9.6",
+ "@rollup/rollup-linux-arm-gnueabihf": "4.9.6",
+ "@rollup/rollup-linux-arm64-gnu": "4.9.6",
+ "@rollup/rollup-linux-arm64-musl": "4.9.6",
+ "@rollup/rollup-linux-riscv64-gnu": "4.9.6",
+ "@rollup/rollup-linux-x64-gnu": "4.9.6",
+ "@rollup/rollup-linux-x64-musl": "4.9.6",
+ "@rollup/rollup-win32-arm64-msvc": "4.9.6",
+ "@rollup/rollup-win32-ia32-msvc": "4.9.6",
+ "@rollup/rollup-win32-x64-msvc": "4.9.6",
"fsevents": "~2.3.2"
}
},
@@ -16369,12 +16097,6 @@
"queue-microtask": "^1.2.2"
}
},
- "node_modules/rx": {
- "version": "4.1.0",
- "resolved": "https://registry.npmjs.org/rx/-/rx-4.1.0.tgz",
- "integrity": "sha512-CiaiuN6gapkdl+cZUr67W6I8jquN4lkak3vtIsIWCl4XIPP8ffsoyN6/+PuGXnQy8Cu8W2y9Xxh31Rq4M6wUug==",
- "dev": true
- },
"node_modules/rxjs": {
"version": "7.8.1",
"resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.8.1.tgz",
@@ -16410,9 +16132,9 @@
"dev": true
},
"node_modules/sass": {
- "version": "1.69.5",
- "resolved": "https://registry.npmjs.org/sass/-/sass-1.69.5.tgz",
- "integrity": "sha512-qg2+UCJibLr2LCVOt3OlPhr/dqVHWOa9XtZf2OjbLs/T4VPSJ00udtgJxH3neXZm+QqX8B+3cU7RaLqp1iVfcQ==",
+ "version": "1.69.7",
+ "resolved": "https://registry.npmjs.org/sass/-/sass-1.69.7.tgz",
+ "integrity": "sha512-rzj2soDeZ8wtE2egyLXgOOHQvaC2iosZrkF6v3EUG+tBwEvhqUCzm0VP3k9gHF9LXbSrRhT5SksoI56Iw8NPnQ==",
"dev": true,
"dependencies": {
"chokidar": ">=3.0.0 <4.0.0",
@@ -16427,9 +16149,9 @@
}
},
"node_modules/sass-loader": {
- "version": "13.3.2",
- "resolved": "https://registry.npmjs.org/sass-loader/-/sass-loader-13.3.2.tgz",
- "integrity": "sha512-CQbKl57kdEv+KDLquhC+gE3pXt74LEAzm+tzywcA0/aHZuub8wTErbjAoNI57rPUWRYRNC5WUnNl8eGJNbDdwg==",
+ "version": "13.3.3",
+ "resolved": "https://registry.npmjs.org/sass-loader/-/sass-loader-13.3.3.tgz",
+ "integrity": "sha512-mt5YN2F1MOZr3d/wBRcZxeFgwgkH44wVc2zohO2YF6JiOMkiXe4BYRZpSu2sO1g71mo/j16txzUhsKZlqjVGzA==",
"dev": true,
"dependencies": {
"neo-async": "^2.6.2"
@@ -16463,12 +16185,6 @@
}
}
},
- "node_modules/sass/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
- },
"node_modules/sax": {
"version": "1.3.0",
"resolved": "https://registry.npmjs.org/sax/-/sax-1.3.0.tgz",
@@ -16557,24 +16273,24 @@
"integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A=="
},
"node_modules/send": {
- "version": "0.16.2",
- "resolved": "https://registry.npmjs.org/send/-/send-0.16.2.tgz",
- "integrity": "sha512-E64YFPUssFHEFBvpbbjr44NCLtI1AohxQ8ZSiJjQLskAdKuriYEP6VyGEsRDH8ScozGpkaX1BGvhanqCwkcEZw==",
+ "version": "0.18.0",
+ "resolved": "https://registry.npmjs.org/send/-/send-0.18.0.tgz",
+ "integrity": "sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg==",
"dev": true,
"dependencies": {
"debug": "2.6.9",
- "depd": "~1.1.2",
- "destroy": "~1.0.4",
+ "depd": "2.0.0",
+ "destroy": "1.2.0",
"encodeurl": "~1.0.2",
"escape-html": "~1.0.3",
"etag": "~1.8.1",
"fresh": "0.5.2",
- "http-errors": "~1.6.2",
- "mime": "1.4.1",
- "ms": "2.0.0",
- "on-finished": "~2.3.0",
- "range-parser": "~1.2.0",
- "statuses": "~1.4.0"
+ "http-errors": "2.0.0",
+ "mime": "1.6.0",
+ "ms": "2.1.3",
+ "on-finished": "2.4.1",
+ "range-parser": "~1.2.1",
+ "statuses": "2.0.1"
},
"engines": {
"node": ">= 0.8.0"
@@ -16589,66 +16305,18 @@
"ms": "2.0.0"
}
},
- "node_modules/send/node_modules/depd": {
- "version": "1.1.2",
- "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz",
- "integrity": "sha512-7emPTl6Dpo6JRXOXjLRxck+FlLRX5847cLKEn00PLAgc3g2hTZZgr+e4c2v6QpSmLeFP3n5yUo7ft6avBK/5jQ==",
- "dev": true,
- "engines": {
- "node": ">= 0.6"
- }
- },
- "node_modules/send/node_modules/http-errors": {
- "version": "1.6.3",
- "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.6.3.tgz",
- "integrity": "sha512-lks+lVC8dgGyh97jxvxeYTWQFvh4uw4yC12gVl63Cg30sjPX4wuGcdkICVXDAESr6OJGjqGA8Iz5mkeN6zlD7A==",
- "dev": true,
- "dependencies": {
- "depd": "~1.1.2",
- "inherits": "2.0.3",
- "setprototypeof": "1.1.0",
- "statuses": ">= 1.4.0 < 2"
- },
- "engines": {
- "node": ">= 0.6"
- }
- },
- "node_modules/send/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/send/node_modules/mime": {
- "version": "1.4.1",
- "resolved": "https://registry.npmjs.org/mime/-/mime-1.4.1.tgz",
- "integrity": "sha512-KI1+qOZu5DcW6wayYHSzR/tXKCDC5Om4s1z2QJjDULzLcmf3DvzS7oluY4HCTrc+9FiKmWUgeNLg7W3uIQvxtQ==",
- "dev": true,
- "bin": {
- "mime": "cli.js"
- }
- },
- "node_modules/send/node_modules/ms": {
+ "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==",
"dev": true
},
- "node_modules/send/node_modules/setprototypeof": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.0.tgz",
- "integrity": "sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ==",
+ "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==",
"dev": true
},
- "node_modules/send/node_modules/statuses": {
- "version": "1.4.0",
- "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.4.0.tgz",
- "integrity": "sha512-zhSCtt8v2NDrRlPQpCNtw/heZLtfUDqxBM1udqikb/Hbk52LK4nQSwr10u77iopCW5LsyHpuXS0GnEc48mLeew==",
- "dev": true,
- "engines": {
- "node": ">= 0.6"
- }
- },
"node_modules/serialize-javascript": {
"version": "6.0.1",
"resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.1.tgz",
@@ -16737,26 +16405,20 @@
}
},
"node_modules/serve-static": {
- "version": "1.13.2",
- "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.13.2.tgz",
- "integrity": "sha512-p/tdJrO4U387R9oMjb1oj7qSMaMfmOyd4j9hOFoxZe2baQszgHcSWjuya/CiT5kgZZKRudHNOA0pYXOl8rQ5nw==",
+ "version": "1.15.0",
+ "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.15.0.tgz",
+ "integrity": "sha512-XGuRDNjXUijsUL0vl6nSD7cwURuzEgglbOaFuZM9g3kwDXOWVTck0jLzjPzGD+TazWbboZYu52/9/XPdUgne9g==",
"dev": true,
"dependencies": {
"encodeurl": "~1.0.2",
"escape-html": "~1.0.3",
- "parseurl": "~1.3.2",
- "send": "0.16.2"
+ "parseurl": "~1.3.3",
+ "send": "0.18.0"
},
"engines": {
"node": ">= 0.8.0"
}
},
- "node_modules/server-destroy": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/server-destroy/-/server-destroy-1.0.1.tgz",
- "integrity": "sha512-rb+9B5YBIEzYcD6x2VKidaa+cqYBJQKnU4oe4E3ANwRRN56yk/ua1YCJT1n21NTS8w6CcOclAKNP3PhdCXKYtQ==",
- "dev": true
- },
"node_modules/set-blocking": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz",
@@ -16847,15 +16509,17 @@
"devOptional": true
},
"node_modules/sigstore": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/sigstore/-/sigstore-2.1.0.tgz",
- "integrity": "sha512-kPIj+ZLkyI3QaM0qX8V/nSsweYND3W448pwkDgS6CQ74MfhEkIR8ToK5Iyx46KJYRjseVcD3Rp9zAmUAj6ZjPw==",
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/sigstore/-/sigstore-2.2.0.tgz",
+ "integrity": "sha512-fcU9clHwEss2/M/11FFM8Jwc4PjBgbhXoNskoK5guoK0qGQBSeUbQZRJ+B2fDFIvhyf0gqCaPrel9mszbhAxug==",
"dev": true,
"dependencies": {
- "@sigstore/bundle": "^2.1.0",
+ "@sigstore/bundle": "^2.1.1",
+ "@sigstore/core": "^0.2.0",
"@sigstore/protobuf-specs": "^0.2.1",
- "@sigstore/sign": "^2.1.0",
- "@sigstore/tuf": "^2.1.0"
+ "@sigstore/sign": "^2.2.1",
+ "@sigstore/tuf": "^2.3.0",
+ "@sigstore/verify": "^0.1.0"
},
"engines": {
"node": "^16.14.0 || >=18.0.0"
@@ -16917,82 +16581,6 @@
"npm": ">= 3.0.0"
}
},
- "node_modules/socket.io": {
- "version": "4.7.2",
- "resolved": "https://registry.npmjs.org/socket.io/-/socket.io-4.7.2.tgz",
- "integrity": "sha512-bvKVS29/I5fl2FGLNHuXlQaUH/BlzX1IN6S+NKLNZpBsPZIDH+90eQmCs2Railn4YUiww4SzUedJ6+uzwFnKLw==",
- "dev": true,
- "dependencies": {
- "accepts": "~1.3.4",
- "base64id": "~2.0.0",
- "cors": "~2.8.5",
- "debug": "~4.3.2",
- "engine.io": "~6.5.2",
- "socket.io-adapter": "~2.5.2",
- "socket.io-parser": "~4.2.4"
- },
- "engines": {
- "node": ">=10.2.0"
- }
- },
- "node_modules/socket.io-adapter": {
- "version": "2.5.2",
- "resolved": "https://registry.npmjs.org/socket.io-adapter/-/socket.io-adapter-2.5.2.tgz",
- "integrity": "sha512-87C3LO/NOMc+eMcpcxUBebGjkpMDkNBS9tf7KJqcDsmL936EChtVva71Dw2q4tQcuVC+hAUy4an2NO/sYXmwRA==",
- "dev": true,
- "dependencies": {
- "ws": "~8.11.0"
- }
- },
- "node_modules/socket.io-adapter/node_modules/ws": {
- "version": "8.11.0",
- "resolved": "https://registry.npmjs.org/ws/-/ws-8.11.0.tgz",
- "integrity": "sha512-HPG3wQd9sNQoT9xHyNCXoDUa+Xw/VevmY9FoHyQ+g+rrMn4j6FB4np7Z0OhdTgjx6MgQLK7jwSy1YecU1+4Asg==",
- "dev": true,
- "engines": {
- "node": ">=10.0.0"
- },
- "peerDependencies": {
- "bufferutil": "^4.0.1",
- "utf-8-validate": "^5.0.2"
- },
- "peerDependenciesMeta": {
- "bufferutil": {
- "optional": true
- },
- "utf-8-validate": {
- "optional": true
- }
- }
- },
- "node_modules/socket.io-client": {
- "version": "4.7.2",
- "resolved": "https://registry.npmjs.org/socket.io-client/-/socket.io-client-4.7.2.tgz",
- "integrity": "sha512-vtA0uD4ibrYD793SOIAwlo8cj6haOeMHrGvwPxJsxH7CeIksqJ+3Zc06RvWTIFgiSqx4A3sOnTXpfAEE2Zyz6w==",
- "dev": true,
- "dependencies": {
- "@socket.io/component-emitter": "~3.1.0",
- "debug": "~4.3.2",
- "engine.io-client": "~6.5.2",
- "socket.io-parser": "~4.2.4"
- },
- "engines": {
- "node": ">=10.0.0"
- }
- },
- "node_modules/socket.io-parser": {
- "version": "4.2.4",
- "resolved": "https://registry.npmjs.org/socket.io-parser/-/socket.io-parser-4.2.4.tgz",
- "integrity": "sha512-/GbIKmo8ioc+NIWIhwdecY0ge+qVBSMdgxGygevmdHj24bsfgtCmcUUcQ5ZzcylGFHsN3k4HB4Cgkl96KVnuew==",
- "dev": true,
- "dependencies": {
- "@socket.io/component-emitter": "~3.1.0",
- "debug": "~4.3.1"
- },
- "engines": {
- "node": ">=10.0.0"
- }
- },
"node_modules/sockjs": {
"version": "0.3.24",
"resolved": "https://registry.npmjs.org/sockjs/-/sockjs-0.3.24.tgz",
@@ -17060,17 +16648,16 @@
}
},
"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==",
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/source-map-loader/-/source-map-loader-5.0.0.tgz",
+ "integrity": "sha512-k2Dur7CbSLcAH73sBcIkV5xjPV4SzqO1NJ7+XaQl8if3VODDUj3FNchNGpqgJSKbvUfJuhVdv8K2Eu8/TNl2eA==",
"dev": true,
"dependencies": {
- "abab": "^2.0.6",
"iconv-lite": "^0.6.3",
"source-map-js": "^1.0.2"
},
"engines": {
- "node": ">= 14.15.0"
+ "node": ">= 18.12.0"
},
"funding": {
"type": "opencollective",
@@ -17128,9 +16715,9 @@
}
},
"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==",
+ "version": "2.4.0",
+ "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.4.0.tgz",
+ "integrity": "sha512-hcjppoJ68fhxA/cjbN4T8N6uCUejN8yFw69ttpqtBeCbF3u13n7mb31NB9jKwGTTWWnt9IbRA/mf1FprYS8wfw==",
"dev": true
},
"node_modules/spdx-expression-parse": {
@@ -17219,28 +16806,12 @@
}
},
"node_modules/statuses": {
- "version": "1.3.1",
- "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.3.1.tgz",
- "integrity": "sha512-wuTCPGlJONk/a1kqZ4fQM2+908lC7fa7nPYpTC1EhnvqLX/IICbeP1OZGDtA374trpSq68YubKUMo8oRhN46yg==",
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz",
+ "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==",
"dev": true,
"engines": {
- "node": ">= 0.6"
- }
- },
- "node_modules/stream-throttle": {
- "version": "0.1.3",
- "resolved": "https://registry.npmjs.org/stream-throttle/-/stream-throttle-0.1.3.tgz",
- "integrity": "sha512-889+B9vN9dq7/vLbGyuHeZ6/ctf5sNuGWsDy89uNxkFTAgzy0eK7+w5fL3KLNRTkLle7EgZGvHUphZW0Q26MnQ==",
- "dev": true,
- "dependencies": {
- "commander": "^2.2.0",
- "limiter": "^1.0.5"
- },
- "bin": {
- "throttleproxy": "bin/throttleproxy.js"
- },
- "engines": {
- "node": ">= 0.10.0"
+ "node": ">= 0.8"
}
},
"node_modules/string_decoder": {
@@ -17484,9 +17055,9 @@
"devOptional": true
},
"node_modules/terser": {
- "version": "5.24.0",
- "resolved": "https://registry.npmjs.org/terser/-/terser-5.24.0.tgz",
- "integrity": "sha512-ZpGR4Hy3+wBEzVEnHvstMvqpD/nABNelQn/z2r0fjVWGQsN3bpOLzQlqDxmb4CDZnXq5lpjnQ+mHQLAOpfM5iw==",
+ "version": "5.26.0",
+ "resolved": "https://registry.npmjs.org/terser/-/terser-5.26.0.tgz",
+ "integrity": "sha512-dytTGoE2oHgbNV9nTzgBEPaqAWvcJNl66VZ0BkJqlvp71IjO8CxdBx/ykCNb47cLnCmCvRZ6ZR0tLkqvZCdVBQ==",
"dev": true,
"dependencies": {
"@jridgewell/source-map": "^0.3.3",
@@ -17872,9 +17443,9 @@
"integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q=="
},
"node_modules/tuf-js": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/tuf-js/-/tuf-js-2.1.0.tgz",
- "integrity": "sha512-eD7YPPjVlMzdggrOeE8zwoegUaG/rt6Bt3jwoQPunRiNVzgcCE009UDFJKJjG+Gk9wFu6W/Vi+P5d/5QpdD9jA==",
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/tuf-js/-/tuf-js-2.2.0.tgz",
+ "integrity": "sha512-ZSDngmP1z6zw+FIkIBjvOp/II/mIub/O7Pp12j1WNsiCpg5R5wAc//i555bBQsE44O94btLt0xM/Zr2LQjwdCg==",
"dev": true,
"dependencies": {
"@tufjs/models": "2.0.0",
@@ -17949,39 +17520,16 @@
"node": ">=14.17"
}
},
- "node_modules/ua-parser-js": {
- "version": "1.0.37",
- "resolved": "https://registry.npmjs.org/ua-parser-js/-/ua-parser-js-1.0.37.tgz",
- "integrity": "sha512-bhTyI94tZofjo+Dn8SN6Zv8nBDvyXTymAdM3LDI/0IboIUwTu1rEhW7v2TfiVsoYWgkQ4kOVqnI8APUFbIQIFQ==",
- "dev": true,
- "funding": [
- {
- "type": "opencollective",
- "url": "https://opencollective.com/ua-parser-js"
- },
- {
- "type": "paypal",
- "url": "https://paypal.me/faisalman"
- },
- {
- "type": "github",
- "url": "https://github.com/sponsors/faisalman"
- }
- ],
- "engines": {
- "node": "*"
- }
- },
"node_modules/undici": {
- "version": "5.27.2",
- "resolved": "https://registry.npmjs.org/undici/-/undici-5.27.2.tgz",
- "integrity": "sha512-iS857PdOEy/y3wlM3yRp+6SNQQ6xU0mmZcwRSriqk+et/cwWAtwmIGf6WkoDN2EK/AMdCO/dfXzIwi+rFMrjjQ==",
+ "version": "6.2.1",
+ "resolved": "https://registry.npmjs.org/undici/-/undici-6.2.1.tgz",
+ "integrity": "sha512-7Wa9thEM6/LMnnKtxJHlc8SrTlDmxqJecgz1iy8KlsN0/iskQXOQCuPkrZLXbElPaSw5slFFyKIKXyJ3UtbApw==",
"dev": true,
"dependencies": {
"@fastify/busboy": "^2.0.0"
},
"engines": {
- "node": ">=14.0"
+ "node": ">=18.0"
}
},
"node_modules/undici-types": {
@@ -18055,12 +17603,12 @@
}
},
"node_modules/universalify": {
- "version": "0.1.2",
- "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz",
- "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==",
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.1.tgz",
+ "integrity": "sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==",
"dev": true,
"engines": {
- "node": ">= 4.0.0"
+ "node": ">= 10.0.0"
}
},
"node_modules/unpipe": {
@@ -18147,12 +17695,6 @@
"uuid": "dist/bin/uuid"
}
},
- "node_modules/v8-compile-cache": {
- "version": "2.3.0",
- "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.3.0.tgz",
- "integrity": "sha512-l8lCEmLcLYZh4nbunNZvQCJc5pv7+RCwa8q/LdUx8u7lsWvPDKmpodJAJNwkAhJC//dFY48KuIEmjtd4RViDrA==",
- "dev": true
- },
"node_modules/v8-compile-cache-lib": {
"version": "3.0.1",
"resolved": "https://registry.npmjs.org/v8-compile-cache-lib/-/v8-compile-cache-lib-3.0.1.tgz",
@@ -18211,29 +17753,29 @@
}
},
"node_modules/vite": {
- "version": "4.5.1",
- "resolved": "https://registry.npmjs.org/vite/-/vite-4.5.1.tgz",
- "integrity": "sha512-AXXFaAJ8yebyqzoNB9fu2pHoo/nWX+xZlaRwoeYUxEqBO+Zj4msE5G+BhGBll9lYEKv9Hfks52PAF2X7qDYXQA==",
+ "version": "5.0.12",
+ "resolved": "https://registry.npmjs.org/vite/-/vite-5.0.12.tgz",
+ "integrity": "sha512-4hsnEkG3q0N4Tzf1+t6NdN9dg/L3BM+q8SWgbSPnJvrgH2kgdyzfVJwbR1ic69/4uMJJ/3dqDZZE5/WwqW8U1w==",
"dev": true,
"dependencies": {
- "esbuild": "^0.18.10",
- "postcss": "^8.4.27",
- "rollup": "^3.27.1"
+ "esbuild": "^0.19.3",
+ "postcss": "^8.4.32",
+ "rollup": "^4.2.0"
},
"bin": {
"vite": "bin/vite.js"
},
"engines": {
- "node": "^14.18.0 || >=16.0.0"
+ "node": "^18.0.0 || >=20.0.0"
},
"funding": {
"url": "https://github.com/vitejs/vite?sponsor=1"
},
"optionalDependencies": {
- "fsevents": "~2.3.2"
+ "fsevents": "~2.3.3"
},
"peerDependencies": {
- "@types/node": ">= 14",
+ "@types/node": "^18.0.0 || >=20.0.0",
"less": "*",
"lightningcss": "^1.21.0",
"sass": "*",
@@ -18265,395 +17807,6 @@
}
}
},
- "node_modules/vite/node_modules/@esbuild/android-arm": {
- "version": "0.18.20",
- "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.18.20.tgz",
- "integrity": "sha512-fyi7TDI/ijKKNZTUJAQqiG5T7YjJXgnzkURqmGj13C6dCqckZBLdl4h7bkhHt/t0WP+zO9/zwroDvANaOqO5Sw==",
- "cpu": [
- "arm"
- ],
- "dev": true,
- "optional": true,
- "os": [
- "android"
- ],
- "engines": {
- "node": ">=12"
- }
- },
- "node_modules/vite/node_modules/@esbuild/android-arm64": {
- "version": "0.18.20",
- "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.18.20.tgz",
- "integrity": "sha512-Nz4rJcchGDtENV0eMKUNa6L12zz2zBDXuhj/Vjh18zGqB44Bi7MBMSXjgunJgjRhCmKOjnPuZp4Mb6OKqtMHLQ==",
- "cpu": [
- "arm64"
- ],
- "dev": true,
- "optional": true,
- "os": [
- "android"
- ],
- "engines": {
- "node": ">=12"
- }
- },
- "node_modules/vite/node_modules/@esbuild/android-x64": {
- "version": "0.18.20",
- "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.18.20.tgz",
- "integrity": "sha512-8GDdlePJA8D6zlZYJV/jnrRAi6rOiNaCC/JclcXpB+KIuvfBN4owLtgzY2bsxnx666XjJx2kDPUmnTtR8qKQUg==",
- "cpu": [
- "x64"
- ],
- "dev": true,
- "optional": true,
- "os": [
- "android"
- ],
- "engines": {
- "node": ">=12"
- }
- },
- "node_modules/vite/node_modules/@esbuild/darwin-arm64": {
- "version": "0.18.20",
- "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.18.20.tgz",
- "integrity": "sha512-bxRHW5kHU38zS2lPTPOyuyTm+S+eobPUnTNkdJEfAddYgEcll4xkT8DB9d2008DtTbl7uJag2HuE5NZAZgnNEA==",
- "cpu": [
- "arm64"
- ],
- "dev": true,
- "optional": true,
- "os": [
- "darwin"
- ],
- "engines": {
- "node": ">=12"
- }
- },
- "node_modules/vite/node_modules/@esbuild/darwin-x64": {
- "version": "0.18.20",
- "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.18.20.tgz",
- "integrity": "sha512-pc5gxlMDxzm513qPGbCbDukOdsGtKhfxD1zJKXjCCcU7ju50O7MeAZ8c4krSJcOIJGFR+qx21yMMVYwiQvyTyQ==",
- "cpu": [
- "x64"
- ],
- "dev": true,
- "optional": true,
- "os": [
- "darwin"
- ],
- "engines": {
- "node": ">=12"
- }
- },
- "node_modules/vite/node_modules/@esbuild/freebsd-arm64": {
- "version": "0.18.20",
- "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.18.20.tgz",
- "integrity": "sha512-yqDQHy4QHevpMAaxhhIwYPMv1NECwOvIpGCZkECn8w2WFHXjEwrBn3CeNIYsibZ/iZEUemj++M26W3cNR5h+Tw==",
- "cpu": [
- "arm64"
- ],
- "dev": true,
- "optional": true,
- "os": [
- "freebsd"
- ],
- "engines": {
- "node": ">=12"
- }
- },
- "node_modules/vite/node_modules/@esbuild/freebsd-x64": {
- "version": "0.18.20",
- "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.18.20.tgz",
- "integrity": "sha512-tgWRPPuQsd3RmBZwarGVHZQvtzfEBOreNuxEMKFcd5DaDn2PbBxfwLcj4+aenoh7ctXcbXmOQIn8HI6mCSw5MQ==",
- "cpu": [
- "x64"
- ],
- "dev": true,
- "optional": true,
- "os": [
- "freebsd"
- ],
- "engines": {
- "node": ">=12"
- }
- },
- "node_modules/vite/node_modules/@esbuild/linux-arm": {
- "version": "0.18.20",
- "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.18.20.tgz",
- "integrity": "sha512-/5bHkMWnq1EgKr1V+Ybz3s1hWXok7mDFUMQ4cG10AfW3wL02PSZi5kFpYKrptDsgb2WAJIvRcDm+qIvXf/apvg==",
- "cpu": [
- "arm"
- ],
- "dev": true,
- "optional": true,
- "os": [
- "linux"
- ],
- "engines": {
- "node": ">=12"
- }
- },
- "node_modules/vite/node_modules/@esbuild/linux-arm64": {
- "version": "0.18.20",
- "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.18.20.tgz",
- "integrity": "sha512-2YbscF+UL7SQAVIpnWvYwM+3LskyDmPhe31pE7/aoTMFKKzIc9lLbyGUpmmb8a8AixOL61sQ/mFh3jEjHYFvdA==",
- "cpu": [
- "arm64"
- ],
- "dev": true,
- "optional": true,
- "os": [
- "linux"
- ],
- "engines": {
- "node": ">=12"
- }
- },
- "node_modules/vite/node_modules/@esbuild/linux-ia32": {
- "version": "0.18.20",
- "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.18.20.tgz",
- "integrity": "sha512-P4etWwq6IsReT0E1KHU40bOnzMHoH73aXp96Fs8TIT6z9Hu8G6+0SHSw9i2isWrD2nbx2qo5yUqACgdfVGx7TA==",
- "cpu": [
- "ia32"
- ],
- "dev": true,
- "optional": true,
- "os": [
- "linux"
- ],
- "engines": {
- "node": ">=12"
- }
- },
- "node_modules/vite/node_modules/@esbuild/linux-loong64": {
- "version": "0.18.20",
- "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.18.20.tgz",
- "integrity": "sha512-nXW8nqBTrOpDLPgPY9uV+/1DjxoQ7DoB2N8eocyq8I9XuqJ7BiAMDMf9n1xZM9TgW0J8zrquIb/A7s3BJv7rjg==",
- "cpu": [
- "loong64"
- ],
- "dev": true,
- "optional": true,
- "os": [
- "linux"
- ],
- "engines": {
- "node": ">=12"
- }
- },
- "node_modules/vite/node_modules/@esbuild/linux-mips64el": {
- "version": "0.18.20",
- "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.18.20.tgz",
- "integrity": "sha512-d5NeaXZcHp8PzYy5VnXV3VSd2D328Zb+9dEq5HE6bw6+N86JVPExrA6O68OPwobntbNJ0pzCpUFZTo3w0GyetQ==",
- "cpu": [
- "mips64el"
- ],
- "dev": true,
- "optional": true,
- "os": [
- "linux"
- ],
- "engines": {
- "node": ">=12"
- }
- },
- "node_modules/vite/node_modules/@esbuild/linux-ppc64": {
- "version": "0.18.20",
- "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.18.20.tgz",
- "integrity": "sha512-WHPyeScRNcmANnLQkq6AfyXRFr5D6N2sKgkFo2FqguP44Nw2eyDlbTdZwd9GYk98DZG9QItIiTlFLHJHjxP3FA==",
- "cpu": [
- "ppc64"
- ],
- "dev": true,
- "optional": true,
- "os": [
- "linux"
- ],
- "engines": {
- "node": ">=12"
- }
- },
- "node_modules/vite/node_modules/@esbuild/linux-riscv64": {
- "version": "0.18.20",
- "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.18.20.tgz",
- "integrity": "sha512-WSxo6h5ecI5XH34KC7w5veNnKkju3zBRLEQNY7mv5mtBmrP/MjNBCAlsM2u5hDBlS3NGcTQpoBvRzqBcRtpq1A==",
- "cpu": [
- "riscv64"
- ],
- "dev": true,
- "optional": true,
- "os": [
- "linux"
- ],
- "engines": {
- "node": ">=12"
- }
- },
- "node_modules/vite/node_modules/@esbuild/linux-s390x": {
- "version": "0.18.20",
- "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.18.20.tgz",
- "integrity": "sha512-+8231GMs3mAEth6Ja1iK0a1sQ3ohfcpzpRLH8uuc5/KVDFneH6jtAJLFGafpzpMRO6DzJ6AvXKze9LfFMrIHVQ==",
- "cpu": [
- "s390x"
- ],
- "dev": true,
- "optional": true,
- "os": [
- "linux"
- ],
- "engines": {
- "node": ">=12"
- }
- },
- "node_modules/vite/node_modules/@esbuild/linux-x64": {
- "version": "0.18.20",
- "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.18.20.tgz",
- "integrity": "sha512-UYqiqemphJcNsFEskc73jQ7B9jgwjWrSayxawS6UVFZGWrAAtkzjxSqnoclCXxWtfwLdzU+vTpcNYhpn43uP1w==",
- "cpu": [
- "x64"
- ],
- "dev": true,
- "optional": true,
- "os": [
- "linux"
- ],
- "engines": {
- "node": ">=12"
- }
- },
- "node_modules/vite/node_modules/@esbuild/netbsd-x64": {
- "version": "0.18.20",
- "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.18.20.tgz",
- "integrity": "sha512-iO1c++VP6xUBUmltHZoMtCUdPlnPGdBom6IrO4gyKPFFVBKioIImVooR5I83nTew5UOYrk3gIJhbZh8X44y06A==",
- "cpu": [
- "x64"
- ],
- "dev": true,
- "optional": true,
- "os": [
- "netbsd"
- ],
- "engines": {
- "node": ">=12"
- }
- },
- "node_modules/vite/node_modules/@esbuild/openbsd-x64": {
- "version": "0.18.20",
- "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.18.20.tgz",
- "integrity": "sha512-e5e4YSsuQfX4cxcygw/UCPIEP6wbIL+se3sxPdCiMbFLBWu0eiZOJ7WoD+ptCLrmjZBK1Wk7I6D/I3NglUGOxg==",
- "cpu": [
- "x64"
- ],
- "dev": true,
- "optional": true,
- "os": [
- "openbsd"
- ],
- "engines": {
- "node": ">=12"
- }
- },
- "node_modules/vite/node_modules/@esbuild/sunos-x64": {
- "version": "0.18.20",
- "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.18.20.tgz",
- "integrity": "sha512-kDbFRFp0YpTQVVrqUd5FTYmWo45zGaXe0X8E1G/LKFC0v8x0vWrhOWSLITcCn63lmZIxfOMXtCfti/RxN/0wnQ==",
- "cpu": [
- "x64"
- ],
- "dev": true,
- "optional": true,
- "os": [
- "sunos"
- ],
- "engines": {
- "node": ">=12"
- }
- },
- "node_modules/vite/node_modules/@esbuild/win32-arm64": {
- "version": "0.18.20",
- "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.18.20.tgz",
- "integrity": "sha512-ddYFR6ItYgoaq4v4JmQQaAI5s7npztfV4Ag6NrhiaW0RrnOXqBkgwZLofVTlq1daVTQNhtI5oieTvkRPfZrePg==",
- "cpu": [
- "arm64"
- ],
- "dev": true,
- "optional": true,
- "os": [
- "win32"
- ],
- "engines": {
- "node": ">=12"
- }
- },
- "node_modules/vite/node_modules/@esbuild/win32-ia32": {
- "version": "0.18.20",
- "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.18.20.tgz",
- "integrity": "sha512-Wv7QBi3ID/rROT08SABTS7eV4hX26sVduqDOTe1MvGMjNd3EjOz4b7zeexIR62GTIEKrfJXKL9LFxTYgkyeu7g==",
- "cpu": [
- "ia32"
- ],
- "dev": true,
- "optional": true,
- "os": [
- "win32"
- ],
- "engines": {
- "node": ">=12"
- }
- },
- "node_modules/vite/node_modules/@esbuild/win32-x64": {
- "version": "0.18.20",
- "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.18.20.tgz",
- "integrity": "sha512-kTdfRcSiDfQca/y9QIkng02avJ+NCaQvrMejlsB3RRv5sE9rRoeBPISaZpKxHELzRxZyLvNts1P27W3wV+8geQ==",
- "cpu": [
- "x64"
- ],
- "dev": true,
- "optional": true,
- "os": [
- "win32"
- ],
- "engines": {
- "node": ">=12"
- }
- },
- "node_modules/vite/node_modules/esbuild": {
- "version": "0.18.20",
- "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.18.20.tgz",
- "integrity": "sha512-ceqxoedUrcayh7Y7ZX6NdbbDzGROiyVBgC4PriJThBKSVPWnnFHZAkfI1lJT8QFkOwH4qOS2SJkS4wvpGl8BpA==",
- "dev": true,
- "hasInstallScript": true,
- "bin": {
- "esbuild": "bin/esbuild"
- },
- "engines": {
- "node": ">=12"
- },
- "optionalDependencies": {
- "@esbuild/android-arm": "0.18.20",
- "@esbuild/android-arm64": "0.18.20",
- "@esbuild/android-x64": "0.18.20",
- "@esbuild/darwin-arm64": "0.18.20",
- "@esbuild/darwin-x64": "0.18.20",
- "@esbuild/freebsd-arm64": "0.18.20",
- "@esbuild/freebsd-x64": "0.18.20",
- "@esbuild/linux-arm": "0.18.20",
- "@esbuild/linux-arm64": "0.18.20",
- "@esbuild/linux-ia32": "0.18.20",
- "@esbuild/linux-loong64": "0.18.20",
- "@esbuild/linux-mips64el": "0.18.20",
- "@esbuild/linux-ppc64": "0.18.20",
- "@esbuild/linux-riscv64": "0.18.20",
- "@esbuild/linux-s390x": "0.18.20",
- "@esbuild/linux-x64": "0.18.20",
- "@esbuild/netbsd-x64": "0.18.20",
- "@esbuild/openbsd-x64": "0.18.20",
- "@esbuild/sunos-x64": "0.18.20",
- "@esbuild/win32-arm64": "0.18.20",
- "@esbuild/win32-ia32": "0.18.20",
- "@esbuild/win32-x64": "0.18.20"
- }
- },
"node_modules/w3c-xmlserializer": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/w3c-xmlserializer/-/w3c-xmlserializer-4.0.0.tgz",
@@ -18685,17 +17838,6 @@
"node": ">=12.0.0"
}
},
- "node_modules/wait-on/node_modules/axios": {
- "version": "1.6.2",
- "resolved": "https://registry.npmjs.org/axios/-/axios-1.6.2.tgz",
- "integrity": "sha512-7i24Ri4pmDRfJTR7LDBhsOTtcm+9kjX5WiY1X3wIisx6G9So3pfMkEiU7emUBe46oceVImccTEM3k6C5dbVW8A==",
- "dev": true,
- "dependencies": {
- "follow-redirects": "^1.15.0",
- "form-data": "^4.0.0",
- "proxy-from-env": "^1.1.0"
- }
- },
"node_modules/walker": {
"version": "1.0.8",
"resolved": "https://registry.npmjs.org/walker/-/walker-1.0.8.tgz",
@@ -18879,15 +18021,6 @@
}
}
},
- "node_modules/webpack-dev-server/node_modules/connect-history-api-fallback": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/connect-history-api-fallback/-/connect-history-api-fallback-2.0.0.tgz",
- "integrity": "sha512-U73+6lQFmfiNPrYbXqr6kZ1i1wiRqXnp2nhMsINseWXO8lDau0LGEffJ8kQi4EjLZympVgRdvqjAgiZ1tgzDDA==",
- "dev": true,
- "engines": {
- "node": ">=0.8"
- }
- },
"node_modules/webpack-dev-server/node_modules/webpack-dev-middleware": {
"version": "5.3.3",
"resolved": "https://registry.npmjs.org/webpack-dev-middleware/-/webpack-dev-middleware-5.3.3.tgz",
@@ -19278,15 +18411,6 @@
"integrity": "sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw==",
"dev": true
},
- "node_modules/xmlhttprequest-ssl": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/xmlhttprequest-ssl/-/xmlhttprequest-ssl-2.0.0.tgz",
- "integrity": "sha512-QKxVRxiRACQcVuQEYFsI1hhkrMlrXHPegbbd1yn9UHOmRxY+si12nQYzri3vbzt8VdTTRviqcKxcyllFas5z2A==",
- "dev": true,
- "engines": {
- "node": ">=0.4.0"
- }
- },
"node_modules/y18n": {
"version": "5.0.8",
"resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz",
@@ -19356,9 +18480,9 @@
}
},
"node_modules/zone.js": {
- "version": "0.14.2",
- "resolved": "https://registry.npmjs.org/zone.js/-/zone.js-0.14.2.tgz",
- "integrity": "sha512-X4U7J1isDhoOmHmFWiLhloWc2lzMkdnumtfQ1LXzf/IOZp5NQYuMUTaviVzG/q1ugMBIXzin2AqeVJUoSEkNyQ==",
+ "version": "0.14.3",
+ "resolved": "https://registry.npmjs.org/zone.js/-/zone.js-0.14.3.tgz",
+ "integrity": "sha512-jYoNqF046Q+JfcZSItRSt+oXFcpXL88yq7XAZjb/NKTS7w2hHpKjRJ3VlFD1k75wMaRRXNUt5vrZVlygiMyHbA==",
"dependencies": {
"tslib": "^2.3.0"
}
diff --git a/src-ui/package.json b/src-ui/package.json
index baefa35c3..72e03e270 100644
--- a/src-ui/package.json
+++ b/src-ui/package.json
@@ -11,17 +11,17 @@
},
"private": true,
"dependencies": {
- "@angular/cdk": "^17.0.4",
- "@angular/common": "~17.0.8",
- "@angular/compiler": "~17.0.8",
- "@angular/core": "~17.0.8",
- "@angular/forms": "~17.0.8",
- "@angular/localize": "~17.0.8",
- "@angular/platform-browser": "~17.0.8",
- "@angular/platform-browser-dynamic": "~17.0.8",
- "@angular/router": "~17.0.8",
+ "@angular/cdk": "^17.1.2",
+ "@angular/common": "~17.1.2",
+ "@angular/compiler": "~17.1.2",
+ "@angular/core": "~17.1.2",
+ "@angular/forms": "~17.1.2",
+ "@angular/localize": "~17.1.2",
+ "@angular/platform-browser": "~17.1.2",
+ "@angular/platform-browser-dynamic": "~17.1.2",
+ "@angular/router": "~17.1.2",
"@ng-bootstrap/ng-bootstrap": "^16.0.0",
- "@ng-select/ng-select": "^12.0.4",
+ "@ng-select/ng-select": "^12.0.6",
"@ngneat/dirty-check-forms": "^3.0.3",
"@popperjs/core": "^2.11.8",
"bootstrap": "^5.3.2",
@@ -31,33 +31,33 @@
"ngx-color": "^9.0.0",
"ngx-cookie-service": "^17.0.1",
"ngx-file-drop": "^16.0.0",
- "ngx-ui-tour-ng-bootstrap": "^14.0.1",
+ "ngx-ui-tour-ng-bootstrap": "^14.0.2",
"pdfjs-dist": "^3.11.174",
"rxjs": "^7.8.1",
"tslib": "^2.6.2",
"uuid": "^9.0.1",
- "zone.js": "^0.14.2"
+ "zone.js": "^0.14.3"
},
"devDependencies": {
"@angular-builders/jest": "17.0.0",
- "@angular-devkit/build-angular": "~17.0.8",
- "@angular-eslint/builder": "17.1.1",
- "@angular-eslint/eslint-plugin": "17.1.1",
- "@angular-eslint/eslint-plugin-template": "17.1.1",
- "@angular-eslint/schematics": "17.1.1",
- "@angular-eslint/template-parser": "17.1.1",
- "@angular/cli": "~17.0.8",
- "@angular/compiler-cli": "~17.0.7",
- "@playwright/test": "^1.40.1",
- "@types/jest": "^29.5.10",
- "@types/node": "^20.10.6",
- "@typescript-eslint/eslint-plugin": "^6.17.0",
- "@typescript-eslint/parser": "^6.17.0",
+ "@angular-devkit/build-angular": "~17.1.2",
+ "@angular-eslint/builder": "17.2.1",
+ "@angular-eslint/eslint-plugin": "17.2.1",
+ "@angular-eslint/eslint-plugin-template": "17.2.1",
+ "@angular-eslint/schematics": "17.2.1",
+ "@angular-eslint/template-parser": "17.2.1",
+ "@angular/cli": "~17.1.2",
+ "@angular/compiler-cli": "~17.1.2",
+ "@playwright/test": "^1.41.2",
+ "@types/jest": "^29.5.12",
+ "@types/node": "^20.11.16",
+ "@typescript-eslint/eslint-plugin": "^6.20.0",
+ "@typescript-eslint/parser": "^6.20.0",
"concurrently": "^8.2.2",
"eslint": "^8.56.0",
"jest": "29.7.0",
"jest-environment-jsdom": "^29.7.0",
- "jest-preset-angular": "^13.1.4",
+ "jest-preset-angular": "^14.0.0",
"jest-websocket-mock": "^2.5.0",
"patch-package": "^8.0.0",
"ts-node": "~10.9.1",
diff --git a/src-ui/setup-jest.ts b/src-ui/setup-jest.ts
index 494d90d39..f2767ebf0 100644
--- a/src-ui/setup-jest.ts
+++ b/src-ui/setup-jest.ts
@@ -23,6 +23,7 @@ import localeFi from '@angular/common/locales/fi'
import localeFr from '@angular/common/locales/fr'
import localeHu from '@angular/common/locales/hu'
import localeIt from '@angular/common/locales/it'
+import localeJa from '@angular/common/locales/ja'
import localeLb from '@angular/common/locales/lb'
import localeNl from '@angular/common/locales/nl'
import localeNo from '@angular/common/locales/no'
@@ -53,6 +54,7 @@ registerLocaleData(localeFi)
registerLocaleData(localeFr)
registerLocaleData(localeHu)
registerLocaleData(localeIt)
+registerLocaleData(localeJa)
registerLocaleData(localeLb)
registerLocaleData(localeNl)
registerLocaleData(localeNo)
diff --git a/src-ui/src/app/app.module.ts b/src-ui/src/app/app.module.ts
index 6d39bfecf..a20a69eb8 100644
--- a/src-ui/src/app/app.module.ts
+++ b/src-ui/src/app/app.module.ts
@@ -295,6 +295,7 @@ import localeFi from '@angular/common/locales/fi'
import localeFr from '@angular/common/locales/fr'
import localeHu from '@angular/common/locales/hu'
import localeIt from '@angular/common/locales/it'
+import localeJa from '@angular/common/locales/ja'
import localeLb from '@angular/common/locales/lb'
import localeNl from '@angular/common/locales/nl'
import localeNo from '@angular/common/locales/no'
@@ -325,6 +326,7 @@ registerLocaleData(localeFi)
registerLocaleData(localeFr)
registerLocaleData(localeHu)
registerLocaleData(localeIt)
+registerLocaleData(localeJa)
registerLocaleData(localeLb)
registerLocaleData(localeNl)
registerLocaleData(localeNo)
diff --git a/src-ui/src/app/components/admin/settings/settings.component.html b/src-ui/src/app/components/admin/settings/settings.component.html
index 52e706f2f..8b239e772 100644
--- a/src-ui/src/app/components/admin/settings/settings.component.html
+++ b/src-ui/src/app/components/admin/settings/settings.component.html
@@ -158,6 +158,14 @@
+ Document editing
+
+
+
Bulk editing
diff --git a/src-ui/src/app/components/admin/settings/settings.component.spec.ts b/src-ui/src/app/components/admin/settings/settings.component.spec.ts
index 7ce13c675..6e105ed11 100644
--- a/src-ui/src/app/components/admin/settings/settings.component.spec.ts
+++ b/src-ui/src/app/components/admin/settings/settings.component.spec.ts
@@ -289,7 +289,7 @@ describe('SettingsComponent', () => {
expect(toastErrorSpy).toHaveBeenCalled()
expect(storeSpy).toHaveBeenCalled()
expect(appearanceSettingsSpy).not.toHaveBeenCalled()
- expect(setSpy).toHaveBeenCalledTimes(24)
+ expect(setSpy).toHaveBeenCalledTimes(25)
// succeed
storeSpy.mockReturnValueOnce(of(true))
diff --git a/src-ui/src/app/components/admin/settings/settings.component.ts b/src-ui/src/app/components/admin/settings/settings.component.ts
index 2bfe5d1c8..a77a556bf 100644
--- a/src-ui/src/app/components/admin/settings/settings.component.ts
+++ b/src-ui/src/app/components/admin/settings/settings.component.ts
@@ -88,6 +88,7 @@ export class SettingsComponent
defaultPermsViewGroups: new FormControl(null),
defaultPermsEditUsers: new FormControl(null),
defaultPermsEditGroups: new FormControl(null),
+ documentEditingRemoveInboxTags: new FormControl(null),
notificationsConsumerNewDocument: new FormControl(null),
notificationsConsumerSuccess: new FormControl(null),
@@ -271,6 +272,9 @@ export class SettingsComponent
defaultPermsEditGroups: this.settings.get(
SETTINGS_KEYS.DEFAULT_PERMS_EDIT_GROUPS
),
+ documentEditingRemoveInboxTags: this.settings.get(
+ SETTINGS_KEYS.DOCUMENT_EDITING_REMOVE_INBOX_TAGS
+ ),
savedViews: {},
}
}
@@ -484,6 +488,10 @@ export class SettingsComponent
SETTINGS_KEYS.DEFAULT_PERMS_EDIT_GROUPS,
this.settingsForm.value.defaultPermsEditGroups
)
+ this.settings.set(
+ SETTINGS_KEYS.DOCUMENT_EDITING_REMOVE_INBOX_TAGS,
+ this.settingsForm.value.documentEditingRemoveInboxTags
+ )
this.settings.setLanguage(this.settingsForm.value.displayLanguage)
this.settings
.storeSettings()
diff --git a/src-ui/src/app/components/common/input/number/number.component.spec.ts b/src-ui/src/app/components/common/input/number/number.component.spec.ts
index 9024614bb..df775a5ba 100644
--- a/src-ui/src/app/components/common/input/number/number.component.spec.ts
+++ b/src-ui/src/app/components/common/input/number/number.component.spec.ts
@@ -47,22 +47,25 @@ describe('NumberComponent', () => {
expect(component.value).toEqual(1002)
})
- it('should support float & monetary values', () => {
- component.writeValue(11.13)
- expect(component.value).toEqual(11)
+ it('should support float, monetary values & scientific notation', () => {
+ const mockFn = jest.fn()
+ component.registerOnChange(mockFn)
+
+ component.step = 1
+ component.onChange(11.13)
+ expect(mockFn).toHaveBeenCalledWith(11)
+
+ component.onChange(1.23456789e8)
+ expect(mockFn).toHaveBeenCalledWith(123456789)
+
+ component.step = 0.01
+ component.onChange(11.1)
+ expect(mockFn).toHaveBeenCalledWith('11.10')
+ })
+
+ it('should display monetary values fixed to 2 decimals', () => {
component.step = 0.01
component.writeValue(11.1)
expect(component.value).toEqual('11.10')
- component.step = 0.1
- component.writeValue(12.3456)
- expect(component.value).toEqual(12.3456)
- // float (step = .1) doesn't force 2 decimals
- component.writeValue(11.1)
- expect(component.value).toEqual(11.1)
- })
-
- it('should support scientific notation', () => {
- component.writeValue(1.23456789e8)
- expect(component.value).toEqual(123456789)
})
})
diff --git a/src-ui/src/app/components/common/input/number/number.component.ts b/src-ui/src/app/components/common/input/number/number.component.ts
index 6675e4498..abfd788af 100644
--- a/src-ui/src/app/components/common/input/number/number.component.ts
+++ b/src-ui/src/app/components/common/input/number/number.component.ts
@@ -36,9 +36,18 @@ export class NumberComponent extends AbstractInputComponent {
})
}
+ registerOnChange(fn: any): void {
+ this.onChange = (newValue: any) => {
+ // number validation
+ if (this.step === 1 && newValue?.toString().indexOf('e') === -1)
+ newValue = parseInt(newValue, 10)
+ if (this.step === 0.01) newValue = parseFloat(newValue).toFixed(2)
+ fn(newValue)
+ }
+ }
+
writeValue(newValue: any): void {
- if (this.step === 1 && newValue?.toString().indexOf('e') === -1)
- newValue = parseInt(newValue, 10)
+ // Allow monetary values to be displayed with 2 decimals
if (this.step === 0.01) newValue = parseFloat(newValue).toFixed(2)
super.writeValue(newValue)
}
diff --git a/src-ui/src/app/components/common/input/switch/switch.component.html b/src-ui/src/app/components/common/input/switch/switch.component.html
index 489106fcb..5acef7a75 100644
--- a/src-ui/src/app/components/common/input/switch/switch.component.html
+++ b/src-ui/src/app/components/common/input/switch/switch.component.html
@@ -15,7 +15,7 @@
}
}
-
+
@if (horizontal) {
diff --git a/src-ui/src/app/components/common/permissions-dialog/permissions-dialog.component.html b/src-ui/src/app/components/common/permissions-dialog/permissions-dialog.component.html
index 37ab7efbd..fd88002ba 100644
--- a/src-ui/src/app/components/common/permissions-dialog/permissions-dialog.component.html
+++ b/src-ui/src/app/components/common/permissions-dialog/permissions-dialog.component.html
@@ -5,12 +5,15 @@
- @if (!object && message) {
-
- }
-
@@ -20,5 +23,5 @@
Loading...
}
Cancel
-
Confirm
+
Confirm
diff --git a/src-ui/src/app/components/common/permissions-dialog/permissions-dialog.component.spec.ts b/src-ui/src/app/components/common/permissions-dialog/permissions-dialog.component.spec.ts
index 3f601d771..bc8ccdecb 100644
--- a/src-ui/src/app/components/common/permissions-dialog/permissions-dialog.component.spec.ts
+++ b/src-ui/src/app/components/common/permissions-dialog/permissions-dialog.component.spec.ts
@@ -11,6 +11,7 @@ import { NgSelectModule } from '@ng-select/ng-select'
import { FormsModule, ReactiveFormsModule } from '@angular/forms'
import { PermissionsUserComponent } from '../input/permissions/permissions-user/permissions-user.component'
import { PermissionsGroupComponent } from '../input/permissions/permissions-group/permissions-group.component'
+import { SwitchComponent } from '../input/switch/switch.component'
const set_permissions = {
owner: 10,
@@ -37,6 +38,7 @@ describe('PermissionsDialogComponent', () => {
PermissionsDialogComponent,
SafeHtmlPipe,
SelectComponent,
+ SwitchComponent,
PermissionsFormComponent,
PermissionsUserComponent,
PermissionsGroupComponent,
@@ -112,4 +114,23 @@ describe('PermissionsDialogComponent', () => {
expect(component.title).toEqual(`Edit permissions for ${obj.name}`)
expect(component.permissions).toEqual(set_permissions)
})
+
+ it('should toggle hint based on object existence (if editing) or merge flag', () => {
+ component.form.get('merge').setValue(true)
+ expect(component.hint.includes('Existing')).toBeTruthy()
+ component.form.get('merge').setValue(false)
+ expect(component.hint.includes('will be replaced')).toBeTruthy()
+ component.object = {}
+ expect(component.hint).toBeNull()
+ })
+
+ it('should emit permissions and merge flag on confirm', () => {
+ const confirmSpy = jest.spyOn(component.confirmClicked, 'emit')
+ component.form.get('permissions_form').setValue(set_permissions)
+ component.confirm()
+ expect(confirmSpy).toHaveBeenCalledWith({
+ permissions: set_permissions,
+ merge: true,
+ })
+ })
})
diff --git a/src-ui/src/app/components/common/permissions-dialog/permissions-dialog.component.ts b/src-ui/src/app/components/common/permissions-dialog/permissions-dialog.component.ts
index 9a514387c..afe1bebb3 100644
--- a/src-ui/src/app/components/common/permissions-dialog/permissions-dialog.component.ts
+++ b/src-ui/src/app/components/common/permissions-dialog/permissions-dialog.component.ts
@@ -32,6 +32,7 @@ export class PermissionsDialogComponent {
this.o = o
this.title = $localize`Edit permissions for ` + o['name']
this.form.patchValue({
+ merge: true,
permissions_form: {
owner: o.owner,
set_permissions: o.permissions,
@@ -43,8 +44,9 @@ export class PermissionsDialogComponent {
return this.o
}
- form = new FormGroup({
+ public form = new FormGroup({
permissions_form: new FormControl(),
+ merge: new FormControl(true),
})
buttonsEnabled: boolean = true
@@ -66,11 +68,21 @@ export class PermissionsDialogComponent {
}
}
- @Input()
- message =
- $localize`Note that permissions set here will override any existing permissions`
+ get hint(): string {
+ if (this.object) return null
+ return this.form.get('merge').value
+ ? $localize`Existing owner, user and group permissions will be merged with these settings.`
+ : $localize`Any and all existing owner, user and group permissions will be replaced.`
+ }
cancelClicked() {
this.activeModal.close()
}
+
+ confirm() {
+ this.confirmClicked.emit({
+ permissions: this.permissions,
+ merge: this.form.get('merge').value,
+ })
+ }
}
diff --git a/src-ui/src/app/components/common/permissions-filter-dropdown/permissions-filter-dropdown.component.html b/src-ui/src/app/components/common/permissions-filter-dropdown/permissions-filter-dropdown.component.html
index f95434c8f..d20986c57 100644
--- a/src-ui/src/app/components/common/permissions-filter-dropdown/permissions-filter-dropdown.component.html
+++ b/src-ui/src/app/components/common/permissions-filter-dropdown/permissions-filter-dropdown.component.html
@@ -62,22 +62,24 @@
}
-
-
-
-
+ @if (permissionsService.currentUserCan(PermissionAction.View, PermissionType.User)) {
+
+
+
+
+ }
@if (selectionModel.ownerFilter === OwnerFilterType.NONE || selectionModel.ownerFilter === OwnerFilterType.NOT_SELF) {
diff --git a/src-ui/src/app/components/common/permissions-filter-dropdown/permissions-filter-dropdown.component.ts b/src-ui/src/app/components/common/permissions-filter-dropdown/permissions-filter-dropdown.component.ts
index 3f5c3e68d..b0c3e8817 100644
--- a/src-ui/src/app/components/common/permissions-filter-dropdown/permissions-filter-dropdown.component.ts
+++ b/src-ui/src/app/components/common/permissions-filter-dropdown/permissions-filter-dropdown.component.ts
@@ -67,7 +67,7 @@ export class PermissionsFilterDropdownComponent extends ComponentWithPermissions
}
constructor(
- permissionsService: PermissionsService,
+ public permissionsService: PermissionsService,
userService: UserService,
private settingsService: SettingsService
) {
diff --git a/src-ui/src/app/components/dashboard/widgets/saved-view-widget/saved-view-widget.component.html b/src-ui/src/app/components/dashboard/widgets/saved-view-widget/saved-view-widget.component.html
index 0a7a852ed..de46991d2 100644
--- a/src-ui/src/app/components/dashboard/widgets/saved-view-widget/saved-view-widget.component.html
+++ b/src-ui/src/app/components/dashboard/widgets/saved-view-widget/saved-view-widget.component.html
@@ -15,8 +15,14 @@
Created
Title
- Tags
- Correspondent
+ @if (permissionsService.currentUserCan(PermissionAction.View, PermissionType.Tag)) {
+ Tags
+ }
+ @if (permissionsService.currentUserCan(PermissionAction.View, PermissionType.Correspondent)) {
+ Correspondent
+ } @else {
+
+ }
@@ -26,13 +32,15 @@
{{doc.title | documentTitle}}
-
- @for (t of doc.tags$ | async; track t) {
-
- }
-
+ @if (permissionsService.currentUserCan(PermissionAction.View, PermissionType.Tag)) {
+
+ @for (t of doc.tags$ | async; track t) {
+
+ }
+
+ }
- @if (doc.correspondent !== null) {
+ @if (permissionsService.currentUserCan(PermissionAction.View, PermissionType.Correspondent) && doc.correspondent !== null) {
{{(doc.correspondent$ | async)?.name}}
}
diff --git a/src-ui/src/app/components/dashboard/widgets/saved-view-widget/saved-view-widget.component.ts b/src-ui/src/app/components/dashboard/widgets/saved-view-widget/saved-view-widget.component.ts
index aa1b160cf..c81ea5484 100644
--- a/src-ui/src/app/components/dashboard/widgets/saved-view-widget/saved-view-widget.component.ts
+++ b/src-ui/src/app/components/dashboard/widgets/saved-view-widget/saved-view-widget.component.ts
@@ -22,6 +22,7 @@ import { DocumentListViewService } from 'src/app/services/document-list-view.ser
import { ComponentWithPermissions } from 'src/app/components/with-permissions/with-permissions.component'
import { NgbPopover } from '@ng-bootstrap/ng-bootstrap'
import { queryParamsFromFilterRules } from 'src/app/utils/query-params'
+import { PermissionsService } from 'src/app/services/permissions.service'
@Component({
selector: 'pngx-saved-view-widget',
@@ -40,7 +41,8 @@ export class SavedViewWidgetComponent
private list: DocumentListViewService,
private consumerStatusService: ConsumerStatusService,
public openDocumentsService: OpenDocumentsService,
- public documentListViewService: DocumentListViewService
+ public documentListViewService: DocumentListViewService,
+ public permissionsService: PermissionsService
) {
super()
}
diff --git a/src-ui/src/app/components/document-detail/document-detail.component.spec.ts b/src-ui/src/app/components/document-detail/document-detail.component.spec.ts
index af0e0e78e..a30588970 100644
--- a/src-ui/src/app/components/document-detail/document-detail.component.spec.ts
+++ b/src-ui/src/app/components/document-detail/document-detail.component.spec.ts
@@ -1,5 +1,8 @@
import { DatePipe } from '@angular/common'
-import { HttpClientTestingModule } from '@angular/common/http/testing'
+import {
+ HttpClientTestingModule,
+ HttpTestingController,
+} from '@angular/common/http/testing'
import {
ComponentFixture,
TestBed,
@@ -71,6 +74,7 @@ import { CustomFieldDataType } from 'src/app/data/custom-field'
import { CustomFieldsService } from 'src/app/services/rest/custom-fields.service'
import { PdfViewerComponent } from '../common/pdf-viewer/pdf-viewer.component'
import { NgxBootstrapIconsModule, allIcons } from 'ngx-bootstrap-icons'
+import { environment } from 'src/environments/environment'
const doc: Document = {
id: 3,
@@ -136,6 +140,7 @@ describe('DocumentDetailComponent', () => {
let documentListViewService: DocumentListViewService
let settingsService: SettingsService
let customFieldsService: CustomFieldsService
+ let httpTestingController: HttpTestingController
let currentUserCan = true
let currentUserHasObjectPermissions = true
@@ -266,6 +271,7 @@ describe('DocumentDetailComponent', () => {
settingsService.currentUser = { id: 1 }
customFieldsService = TestBed.inject(CustomFieldsService)
fixture = TestBed.createComponent(DocumentDetailComponent)
+ httpTestingController = TestBed.inject(HttpTestingController)
component = fixture.componentInstance
})
@@ -350,6 +356,26 @@ describe('DocumentDetailComponent', () => {
expect(component.documentForm.disabled).toBeTruthy()
})
+ it('should not attempt to retrieve objects if user does not have permissions', () => {
+ currentUserCan = false
+ initNormally()
+ expect(component.correspondents).toBeUndefined()
+ expect(component.documentTypes).toBeUndefined()
+ expect(component.storagePaths).toBeUndefined()
+ expect(component.users).toBeUndefined()
+ httpTestingController.expectNone(`${environment.apiBaseUrl}documents/tags/`)
+ httpTestingController.expectNone(
+ `${environment.apiBaseUrl}documents/correspondents/`
+ )
+ httpTestingController.expectNone(
+ `${environment.apiBaseUrl}documents/document_types/`
+ )
+ httpTestingController.expectNone(
+ `${environment.apiBaseUrl}documents/storage_paths/`
+ )
+ currentUserCan = true
+ })
+
it('should support creating document type', () => {
initNormally()
let openModal: NgbModalRef
diff --git a/src-ui/src/app/components/document-detail/document-detail.component.ts b/src-ui/src/app/components/document-detail/document-detail.component.ts
index 0ce9fa007..a1162ab7f 100644
--- a/src-ui/src/app/components/document-detail/document-detail.component.ts
+++ b/src-ui/src/app/components/document-detail/document-detail.component.ts
@@ -250,25 +250,50 @@ export class DocumentDetailComponent
Object.assign(this.document, docValues)
})
- this.correspondentService
- .listAll()
- .pipe(first(), takeUntil(this.unsubscribeNotifier))
- .subscribe((result) => (this.correspondents = result.results))
-
- this.documentTypeService
- .listAll()
- .pipe(first(), takeUntil(this.unsubscribeNotifier))
- .subscribe((result) => (this.documentTypes = result.results))
-
- this.storagePathService
- .listAll()
- .pipe(first(), takeUntil(this.unsubscribeNotifier))
- .subscribe((result) => (this.storagePaths = result.results))
-
- this.userService
- .listAll()
- .pipe(first(), takeUntil(this.unsubscribeNotifier))
- .subscribe((result) => (this.users = result.results))
+ if (
+ this.permissionsService.currentUserCan(
+ PermissionAction.View,
+ PermissionType.Correspondent
+ )
+ ) {
+ this.correspondentService
+ .listAll()
+ .pipe(first(), takeUntil(this.unsubscribeNotifier))
+ .subscribe((result) => (this.correspondents = result.results))
+ }
+ if (
+ this.permissionsService.currentUserCan(
+ PermissionAction.View,
+ PermissionType.DocumentType
+ )
+ ) {
+ this.documentTypeService
+ .listAll()
+ .pipe(first(), takeUntil(this.unsubscribeNotifier))
+ .subscribe((result) => (this.documentTypes = result.results))
+ }
+ if (
+ this.permissionsService.currentUserCan(
+ PermissionAction.View,
+ PermissionType.StoragePath
+ )
+ ) {
+ this.storagePathService
+ .listAll()
+ .pipe(first(), takeUntil(this.unsubscribeNotifier))
+ .subscribe((result) => (this.storagePaths = result.results))
+ }
+ if (
+ this.permissionsService.currentUserCan(
+ PermissionAction.View,
+ PermissionType.User
+ )
+ ) {
+ this.userService
+ .listAll()
+ .pipe(first(), takeUntil(this.unsubscribeNotifier))
+ .subscribe((result) => (this.users = result.results))
+ }
this.getCustomFields()
@@ -605,7 +630,9 @@ export class DocumentDetailComponent
.update(this.document)
.pipe(first())
.subscribe({
- next: () => {
+ next: (docValues) => {
+ // in case data changed while saving eg removing inbox_tags
+ this.documentForm.patchValue(docValues)
this.store.next(this.documentForm.value)
this.toastService.showInfo($localize`Document saved successfully.`)
close && this.close()
diff --git a/src-ui/src/app/components/document-list/bulk-editor/bulk-editor.component.html b/src-ui/src/app/components/document-list/bulk-editor/bulk-editor.component.html
index b101c2742..0c261df67 100644
--- a/src-ui/src/app/components/document-list/bulk-editor/bulk-editor.component.html
+++ b/src-ui/src/app/components/document-list/bulk-editor/bulk-editor.component.html
@@ -17,51 +17,59 @@
Edit:
-
-
-
-
-
-
-
-
+ @if (permissionService.currentUserCan(PermissionAction.View, PermissionType.Tag)) {
+
+
+ }
+ @if (permissionService.currentUserCan(PermissionAction.View, PermissionType.Correspondent)) {
+
+
+ }
+ @if (permissionService.currentUserCan(PermissionAction.View, PermissionType.DocumentType)) {
+
+
+ }
+ @if (permissionService.currentUserCan(PermissionAction.View, PermissionType.StoragePath)) {
+
+
+ }
diff --git a/src-ui/src/app/components/document-list/bulk-editor/bulk-editor.component.spec.ts b/src-ui/src/app/components/document-list/bulk-editor/bulk-editor.component.spec.ts
index af41d298c..42f8b6d1d 100644
--- a/src-ui/src/app/components/document-list/bulk-editor/bulk-editor.component.spec.ts
+++ b/src-ui/src/app/components/document-list/bulk-editor/bulk-editor.component.spec.ts
@@ -41,6 +41,7 @@ import { PermissionsUserComponent } from '../../common/input/permissions/permiss
import { NgSelectModule } from '@ng-select/ng-select'
import { GroupService } from 'src/app/services/rest/group.service'
import { NgxBootstrapIconsModule, allIcons } from 'ngx-bootstrap-icons'
+import { SwitchComponent } from '../../common/input/switch/switch.component'
const selectionData: SelectionData = {
selected_tags: [
@@ -81,6 +82,7 @@ describe('BulkEditorComponent', () => {
SelectComponent,
PermissionsGroupComponent,
PermissionsUserComponent,
+ SwitchComponent,
],
providers: [
PermissionsService,
@@ -851,7 +853,18 @@ describe('BulkEditorComponent', () => {
fixture.detectChanges()
component.setPermissions()
expect(modal).not.toBeUndefined()
- modal.componentInstance.confirmClicked.next()
+ const perms = {
+ permissions: {
+ view_users: [],
+ change_users: [],
+ view_groups: [],
+ change_groups: [],
+ },
+ }
+ modal.componentInstance.confirmClicked.emit({
+ permissions: perms,
+ merge: true,
+ })
let req = httpTestingController.expectOne(
`${environment.apiBaseUrl}documents/bulk_edit/`
)
@@ -859,7 +872,10 @@ describe('BulkEditorComponent', () => {
expect(req.request.body).toEqual({
documents: [3, 4],
method: 'set_permissions',
- parameters: undefined,
+ parameters: {
+ permissions: perms.permissions,
+ merge: true,
+ },
})
httpTestingController.match(
`${environment.apiBaseUrl}documents/?page=1&page_size=50&ordering=-created&truncate_content=true`
@@ -868,4 +884,22 @@ describe('BulkEditorComponent', () => {
`${environment.apiBaseUrl}documents/?page=1&page_size=100000&fields=id`
) // listAllFilteredIds
})
+
+ it('should not attempt to retrieve objects if user does not have permissions', () => {
+ jest.spyOn(permissionsService, 'currentUserCan').mockReturnValue(true)
+ expect(component.tags).toBeUndefined()
+ expect(component.correspondents).toBeUndefined()
+ expect(component.documentTypes).toBeUndefined()
+ expect(component.storagePaths).toBeUndefined()
+ httpTestingController.expectNone(`${environment.apiBaseUrl}documents/tags/`)
+ httpTestingController.expectNone(
+ `${environment.apiBaseUrl}documents/correspondents/`
+ )
+ httpTestingController.expectNone(
+ `${environment.apiBaseUrl}documents/document_types/`
+ )
+ httpTestingController.expectNone(
+ `${environment.apiBaseUrl}documents/storage_paths/`
+ )
+ })
})
diff --git a/src-ui/src/app/components/document-list/bulk-editor/bulk-editor.component.ts b/src-ui/src/app/components/document-list/bulk-editor/bulk-editor.component.ts
index 91b714b24..49d4c070f 100644
--- a/src-ui/src/app/components/document-list/bulk-editor/bulk-editor.component.ts
+++ b/src-ui/src/app/components/document-list/bulk-editor/bulk-editor.component.ts
@@ -115,22 +115,50 @@ export class BulkEditorComponent
}
ngOnInit() {
- this.tagService
- .listAll()
- .pipe(first())
- .subscribe((result) => (this.tags = result.results))
- this.correspondentService
- .listAll()
- .pipe(first())
- .subscribe((result) => (this.correspondents = result.results))
- this.documentTypeService
- .listAll()
- .pipe(first())
- .subscribe((result) => (this.documentTypes = result.results))
- this.storagePathService
- .listAll()
- .pipe(first())
- .subscribe((result) => (this.storagePaths = result.results))
+ if (
+ this.permissionService.currentUserCan(
+ PermissionAction.View,
+ PermissionType.Tag
+ )
+ ) {
+ this.tagService
+ .listAll()
+ .pipe(first())
+ .subscribe((result) => (this.tags = result.results))
+ }
+ if (
+ this.permissionService.currentUserCan(
+ PermissionAction.View,
+ PermissionType.Correspondent
+ )
+ ) {
+ this.correspondentService
+ .listAll()
+ .pipe(first())
+ .subscribe((result) => (this.correspondents = result.results))
+ }
+ if (
+ this.permissionService.currentUserCan(
+ PermissionAction.View,
+ PermissionType.DocumentType
+ )
+ ) {
+ this.documentTypeService
+ .listAll()
+ .pipe(first())
+ .subscribe((result) => (this.documentTypes = result.results))
+ }
+ if (
+ this.permissionService.currentUserCan(
+ PermissionAction.View,
+ PermissionType.StoragePath
+ )
+ ) {
+ this.storagePathService
+ .listAll()
+ .pipe(first())
+ .subscribe((result) => (this.storagePaths = result.results))
+ }
this.downloadForm
.get('downloadFileTypeArchive')
@@ -512,9 +540,14 @@ export class BulkEditorComponent
let modal = this.modalService.open(PermissionsDialogComponent, {
backdrop: 'static',
})
- modal.componentInstance.confirmClicked.subscribe((permissions) => {
- modal.componentInstance.buttonsEnabled = false
- this.executeBulkOperation(modal, 'set_permissions', permissions)
- })
+ modal.componentInstance.confirmClicked.subscribe(
+ ({ permissions, merge }) => {
+ modal.componentInstance.buttonsEnabled = false
+ this.executeBulkOperation(modal, 'set_permissions', {
+ ...permissions,
+ merge,
+ })
+ }
+ )
}
}
diff --git a/src-ui/src/app/components/document-list/document-card-small/document-card-small.component.ts b/src-ui/src/app/components/document-list/document-card-small/document-card-small.component.ts
index bd565a9fb..2ca1a3408 100644
--- a/src-ui/src/app/components/document-list/document-card-small/document-card-small.component.ts
+++ b/src-ui/src/app/components/document-list/document-card-small/document-card-small.component.ts
@@ -79,7 +79,7 @@ export class DocumentCardSmallComponent extends ComponentWithPermissions {
getTagsLimited$() {
const limit = this.document.notes.length > 0 ? 6 : 7
- return this.document.tags$.pipe(
+ return this.document.tags$?.pipe(
map((tags) => {
if (tags.length > limit) {
this.moreTags = tags.length - (limit - 1)
diff --git a/src-ui/src/app/components/document-list/filter-editor/filter-editor.component.html b/src-ui/src/app/components/document-list/filter-editor/filter-editor.component.html
index 54427ad31..89900e087 100644
--- a/src-ui/src/app/components/document-list/filter-editor/filter-editor.component.html
+++ b/src-ui/src/app/components/document-list/filter-editor/filter-editor.component.html
@@ -18,7 +18,7 @@
}
@if (_textFilter) {
-
+
}
@@ -29,7 +29,8 @@
-
-
+ }
+ @if (permissionsService.currentUserCan(PermissionAction.View, PermissionType.Correspondent)) {
+
-
-
+ }
+ @if (permissionsService.currentUserCan(PermissionAction.View, PermissionType.DocumentType)) {
+
+ }
+ @if (permissionsService.currentUserCan(PermissionAction.View, PermissionType.StoragePath)) {
+
+ [allowSelectNone]="true">
+ }
{
let fixture: ComponentFixture
let documentService: DocumentService
let settingsService: SettingsService
+ let permissionsService: PermissionsService
+ let httpTestingController: HttpTestingController
beforeEach(fakeAsync(() => {
TestBed.configureTestingModule({
@@ -199,6 +209,15 @@ describe('FilterEditorComponent', () => {
documentService = TestBed.inject(DocumentService)
settingsService = TestBed.inject(SettingsService)
settingsService.currentUser = users[0]
+ permissionsService = TestBed.inject(PermissionsService)
+ jest
+ .spyOn(permissionsService, 'currentUserCan')
+ .mockImplementation((action, type) => {
+ // a little hack-ish, permissions filter dropdown causes reactive forms issue due to ng-select
+ // trying to apply formControlName
+ return type !== PermissionType.User
+ })
+ httpTestingController = TestBed.inject(HttpTestingController)
fixture = TestBed.createComponent(FilterEditorComponent)
component = fixture.componentInstance
component.filterRules = []
@@ -206,6 +225,24 @@ describe('FilterEditorComponent', () => {
tick()
}))
+ it('should not attempt to retrieve objects if user does not have permissions', () => {
+ jest.spyOn(permissionsService, 'currentUserCan').mockReset()
+ jest
+ .spyOn(permissionsService, 'currentUserCan')
+ .mockImplementation((action, type) => false)
+ component.ngOnInit()
+ httpTestingController.expectNone(`${environment.apiBaseUrl}documents/tags/`)
+ httpTestingController.expectNone(
+ `${environment.apiBaseUrl}documents/correspondents/`
+ )
+ httpTestingController.expectNone(
+ `${environment.apiBaseUrl}documents/document_types/`
+ )
+ httpTestingController.expectNone(
+ `${environment.apiBaseUrl}documents/storage_paths/`
+ )
+ })
+
// SET filterRules
it('should ingest text filter rules for doc title', fakeAsync(() => {
diff --git a/src-ui/src/app/components/document-list/filter-editor/filter-editor.component.ts b/src-ui/src/app/components/document-list/filter-editor/filter-editor.component.ts
index 03e1db539..b11874d7c 100644
--- a/src-ui/src/app/components/document-list/filter-editor/filter-editor.component.ts
+++ b/src-ui/src/app/components/document-list/filter-editor/filter-editor.component.ts
@@ -70,6 +70,12 @@ import {
OwnerFilterType,
PermissionsSelectionModel,
} from '../../common/permissions-filter-dropdown/permissions-filter-dropdown.component'
+import {
+ PermissionAction,
+ PermissionType,
+ PermissionsService,
+} from 'src/app/services/permissions.service'
+import { ComponentWithPermissions } from '../../with-permissions/with-permissions.component'
const TEXT_FILTER_TARGET_TITLE = 'title'
const TEXT_FILTER_TARGET_TITLE_CONTENT = 'title-content'
@@ -155,7 +161,10 @@ const DEFAULT_TEXT_FILTER_MODIFIER_OPTIONS = [
templateUrl: './filter-editor.component.html',
styleUrls: ['./filter-editor.component.scss'],
})
-export class FilterEditorComponent implements OnInit, OnDestroy {
+export class FilterEditorComponent
+ extends ComponentWithPermissions
+ implements OnInit, OnDestroy
+{
generateFilterName() {
if (this.filterRules.length == 1) {
let rule = this.filterRules[0]
@@ -224,8 +233,11 @@ export class FilterEditorComponent implements OnInit, OnDestroy {
private tagService: TagService,
private correspondentService: CorrespondentService,
private documentService: DocumentService,
- private storagePathService: StoragePathService
- ) {}
+ private storagePathService: StoragePathService,
+ public permissionsService: PermissionsService
+ ) {
+ super()
+ }
@ViewChild('textFilterInput')
textFilterInput: ElementRef
@@ -872,18 +884,46 @@ export class FilterEditorComponent implements OnInit, OnDestroy {
subscription: Subscription
ngOnInit() {
- this.tagService
- .listAll()
- .subscribe((result) => (this.tags = result.results))
- this.correspondentService
- .listAll()
- .subscribe((result) => (this.correspondents = result.results))
- this.documentTypeService
- .listAll()
- .subscribe((result) => (this.documentTypes = result.results))
- this.storagePathService
- .listAll()
- .subscribe((result) => (this.storagePaths = result.results))
+ if (
+ this.permissionsService.currentUserCan(
+ PermissionAction.View,
+ PermissionType.Tag
+ )
+ ) {
+ this.tagService
+ .listAll()
+ .subscribe((result) => (this.tags = result.results))
+ }
+ if (
+ this.permissionsService.currentUserCan(
+ PermissionAction.View,
+ PermissionType.Correspondent
+ )
+ ) {
+ this.correspondentService
+ .listAll()
+ .subscribe((result) => (this.correspondents = result.results))
+ }
+ if (
+ this.permissionsService.currentUserCan(
+ PermissionAction.View,
+ PermissionType.DocumentType
+ )
+ ) {
+ this.documentTypeService
+ .listAll()
+ .subscribe((result) => (this.documentTypes = result.results))
+ }
+ if (
+ this.permissionsService.currentUserCan(
+ PermissionAction.View,
+ PermissionType.StoragePath
+ )
+ ) {
+ this.storagePathService
+ .listAll()
+ .subscribe((result) => (this.storagePaths = result.results))
+ }
this.textFilterDebounce = new Subject()
diff --git a/src-ui/src/app/components/manage/mail/mail.component.spec.ts b/src-ui/src/app/components/manage/mail/mail.component.spec.ts
index 5680d8faa..fcc5bcc6b 100644
--- a/src-ui/src/app/components/manage/mail/mail.component.spec.ts
+++ b/src-ui/src/app/components/manage/mail/mail.component.spec.ts
@@ -41,6 +41,7 @@ import { TagsComponent } from '../../common/input/tags/tags.component'
import { FormsModule, ReactiveFormsModule } from '@angular/forms'
import { EditDialogMode } from '../../common/edit-dialog/edit-dialog.component'
import { NgxBootstrapIconsModule, allIcons } from 'ngx-bootstrap-icons'
+import { SwitchComponent } from '../../common/input/switch/switch.component'
const mailAccounts = [
{ id: 1, name: 'account1' },
@@ -82,6 +83,7 @@ describe('MailComponent', () => {
PermissionsGroupComponent,
PermissionsDialogComponent,
PermissionsFormComponent,
+ SwitchComponent,
],
providers: [CustomDatePipe, DatePipe, PermissionsGuard],
imports: [
@@ -267,11 +269,11 @@ describe('MailComponent', () => {
rulePatchSpy.mockReturnValueOnce(
throwError(() => new Error('error saving perms'))
)
- dialog.confirmClicked.emit(perms)
+ dialog.confirmClicked.emit({ permissions: perms, merge: true })
expect(rulePatchSpy).toHaveBeenCalled()
expect(toastErrorSpy).toHaveBeenCalled()
rulePatchSpy.mockReturnValueOnce(of(mailRules[0] as MailRule))
- dialog.confirmClicked.emit(perms)
+ dialog.confirmClicked.emit({ permissions: perms, merge: true })
expect(toastInfoSpy).toHaveBeenCalledWith('Permissions updated')
modalService.dismissAll()
@@ -299,8 +301,7 @@ describe('MailComponent', () => {
expect(modal).not.toBeUndefined()
let dialog = modal.componentInstance as PermissionsDialogComponent
expect(dialog.object).toEqual(mailAccounts[0])
- dialog = modal.componentInstance as PermissionsDialogComponent
- dialog.confirmClicked.emit(perms)
+ dialog.confirmClicked.emit({ permissions: perms, merge: true })
expect(accountPatchSpy).toHaveBeenCalled()
})
})
diff --git a/src-ui/src/app/components/manage/mail/mail.component.ts b/src-ui/src/app/components/manage/mail/mail.component.ts
index 9bb33c03b..d8820ed38 100644
--- a/src-ui/src/app/components/manage/mail/mail.component.ts
+++ b/src-ui/src/app/components/manage/mail/mail.component.ts
@@ -200,22 +200,27 @@ export class MailComponent
const dialog: PermissionsDialogComponent =
modal.componentInstance as PermissionsDialogComponent
dialog.object = object
- modal.componentInstance.confirmClicked.subscribe((permissions) => {
- modal.componentInstance.buttonsEnabled = false
- const service: AbstractPaperlessService =
- 'account' in object ? this.mailRuleService : this.mailAccountService
- object.owner = permissions['owner']
- object['set_permissions'] = permissions['set_permissions']
- service.patch(object).subscribe({
- next: () => {
- this.toastService.showInfo($localize`Permissions updated`)
- modal.close()
- },
- error: (e) => {
- this.toastService.showError($localize`Error updating permissions`, e)
- },
- })
- })
+ modal.componentInstance.confirmClicked.subscribe(
+ ({ permissions, merge }) => {
+ modal.componentInstance.buttonsEnabled = false
+ const service: AbstractPaperlessService =
+ 'account' in object ? this.mailRuleService : this.mailAccountService
+ object.owner = permissions['owner']
+ object['set_permissions'] = permissions['set_permissions']
+ service.patch(object).subscribe({
+ next: () => {
+ this.toastService.showInfo($localize`Permissions updated`)
+ modal.close()
+ },
+ error: (e) => {
+ this.toastService.showError(
+ $localize`Error updating permissions`,
+ e
+ )
+ },
+ })
+ }
+ )
}
userCanEdit(obj: ObjectWithPermissions): boolean {
diff --git a/src-ui/src/app/components/manage/management-list/management-list.component.spec.ts b/src-ui/src/app/components/manage/management-list/management-list.component.spec.ts
index 44a3452d7..6196a3c8a 100644
--- a/src-ui/src/app/components/manage/management-list/management-list.component.spec.ts
+++ b/src-ui/src/app/components/manage/management-list/management-list.component.spec.ts
@@ -264,13 +264,19 @@ describe('ManagementListComponent', () => {
throwError(() => new Error('error setting permissions'))
)
const errorToastSpy = jest.spyOn(toastService, 'showError')
- modal.componentInstance.confirmClicked.emit()
+ modal.componentInstance.confirmClicked.emit({
+ permissions: {},
+ merge: true,
+ })
expect(bulkEditPermsSpy).toHaveBeenCalled()
expect(errorToastSpy).toHaveBeenCalled()
const successToastSpy = jest.spyOn(toastService, 'showInfo')
bulkEditPermsSpy.mockReturnValueOnce(of('OK'))
- modal.componentInstance.confirmClicked.emit()
+ modal.componentInstance.confirmClicked.emit({
+ permissions: {},
+ merge: true,
+ })
expect(bulkEditPermsSpy).toHaveBeenCalled()
expect(successToastSpy).toHaveBeenCalled()
})
diff --git a/src-ui/src/app/components/manage/management-list/management-list.component.ts b/src-ui/src/app/components/manage/management-list/management-list.component.ts
index e20b5d4a7..a89b5e4f6 100644
--- a/src-ui/src/app/components/manage/management-list/management-list.component.ts
+++ b/src-ui/src/app/components/manage/management-list/management-list.component.ts
@@ -279,12 +279,13 @@ export abstract class ManagementListComponent
backdrop: 'static',
})
modal.componentInstance.confirmClicked.subscribe(
- (permissions: { owner: number; set_permissions: PermissionsObject }) => {
+ ({ permissions, merge }) => {
modal.componentInstance.buttonsEnabled = false
this.service
.bulk_update_permissions(
Array.from(this.selectedObjects),
- permissions
+ permissions,
+ merge
)
.subscribe({
next: () => {
diff --git a/src-ui/src/app/data/document.ts b/src-ui/src/app/data/document.ts
index 2bdb954ce..910666f10 100644
--- a/src-ui/src/app/data/document.ts
+++ b/src-ui/src/app/data/document.ts
@@ -63,4 +63,7 @@ export interface Document extends ObjectWithPermissions {
__search_hit__?: SearchHit
custom_fields?: CustomFieldInstance[]
+
+ // write-only field
+ remove_inbox_tags?: boolean
}
diff --git a/src-ui/src/app/data/ui-settings.ts b/src-ui/src/app/data/ui-settings.ts
index e23e490e9..e55f25278 100644
--- a/src-ui/src/app/data/ui-settings.ts
+++ b/src-ui/src/app/data/ui-settings.ts
@@ -53,6 +53,8 @@ export const SETTINGS_KEYS = {
DEFAULT_PERMS_VIEW_GROUPS: 'general-settings:permissions:default-view-groups',
DEFAULT_PERMS_EDIT_USERS: 'general-settings:permissions:default-edit-users',
DEFAULT_PERMS_EDIT_GROUPS: 'general-settings:permissions:default-edit-groups',
+ DOCUMENT_EDITING_REMOVE_INBOX_TAGS:
+ 'general-settings:document-editing:remove-inbox-tags',
}
export const SETTINGS: UiSetting[] = [
@@ -206,4 +208,9 @@ export const SETTINGS: UiSetting[] = [
type: 'string',
default: '',
},
+ {
+ key: SETTINGS_KEYS.DOCUMENT_EDITING_REMOVE_INBOX_TAGS,
+ type: 'boolean',
+ default: false,
+ },
]
diff --git a/src-ui/src/app/services/rest/abstract-name-filter-service.spec.ts b/src-ui/src/app/services/rest/abstract-name-filter-service.spec.ts
index 70ae211e5..e09270701 100644
--- a/src-ui/src/app/services/rest/abstract-name-filter-service.spec.ts
+++ b/src-ui/src/app/services/rest/abstract-name-filter-service.spec.ts
@@ -53,10 +53,14 @@ export const commonAbstractNameFilterPaperlessServiceTests = (
},
}
subscription = service
- .bulk_update_permissions([1, 2], {
- owner,
- set_permissions: permissions,
- })
+ .bulk_update_permissions(
+ [1, 2],
+ {
+ owner,
+ set_permissions: permissions,
+ },
+ true
+ )
.subscribe()
const req = httpTestingController.expectOne(
`${environment.apiBaseUrl}bulk_edit_object_perms/`
diff --git a/src-ui/src/app/services/rest/abstract-name-filter-service.ts b/src-ui/src/app/services/rest/abstract-name-filter-service.ts
index 5e0377cb9..b38994086 100644
--- a/src-ui/src/app/services/rest/abstract-name-filter-service.ts
+++ b/src-ui/src/app/services/rest/abstract-name-filter-service.ts
@@ -26,13 +26,15 @@ export abstract class AbstractNameFilterService<
bulk_update_permissions(
objects: Array,
- permissions: { owner: number; set_permissions: PermissionsObject }
+ permissions: { owner: number; set_permissions: PermissionsObject },
+ merge: boolean
): Observable {
return this.http.post(`${this.baseUrl}bulk_edit_object_perms/`, {
objects,
object_type: this.resourceName,
owner: permissions.owner,
permissions: permissions.set_permissions,
+ merge,
})
}
}
diff --git a/src-ui/src/app/services/rest/document.service.spec.ts b/src-ui/src/app/services/rest/document.service.spec.ts
index 8576a2399..1f3ccc0af 100644
--- a/src-ui/src/app/services/rest/document.service.spec.ts
+++ b/src-ui/src/app/services/rest/document.service.spec.ts
@@ -7,10 +7,13 @@ import { TestBed } from '@angular/core/testing'
import { environment } from 'src/environments/environment'
import { DocumentService } from './document.service'
import { FILTER_TITLE } from 'src/app/data/filter-rule-type'
+import { SettingsService } from '../settings.service'
+import { SETTINGS_KEYS } from 'src/app/data/ui-settings'
let httpTestingController: HttpTestingController
let service: DocumentService
let subscription: Subscription
+let settingsService: SettingsService
const endpoint = 'documents'
const documents = [
{
@@ -34,6 +37,17 @@ const documents = [
},
]
+beforeEach(() => {
+ TestBed.configureTestingModule({
+ providers: [DocumentService],
+ imports: [HttpClientTestingModule],
+ })
+
+ httpTestingController = TestBed.inject(HttpTestingController)
+ service = TestBed.inject(DocumentService)
+ settingsService = TestBed.inject(SettingsService)
+})
+
describe(`DocumentService`, () => {
// common tests e.g. commonAbstractPaperlessServiceTests differ slightly
it('should call appropriate api endpoint for list all', () => {
@@ -237,16 +251,21 @@ describe(`DocumentService`, () => {
)
expect(req.request.method).toEqual('GET')
})
-})
-beforeEach(() => {
- TestBed.configureTestingModule({
- providers: [DocumentService],
- imports: [HttpClientTestingModule],
+ it('should pass remove_inbox_tags setting to update', () => {
+ subscription = service.update(documents[0]).subscribe()
+ let req = httpTestingController.expectOne(
+ `${environment.apiBaseUrl}${endpoint}/${documents[0].id}/`
+ )
+ expect(req.request.body.remove_inbox_tags).toEqual(false)
+
+ settingsService.set(SETTINGS_KEYS.DOCUMENT_EDITING_REMOVE_INBOX_TAGS, true)
+ subscription = service.update(documents[0]).subscribe()
+ req = httpTestingController.expectOne(
+ `${environment.apiBaseUrl}${endpoint}/${documents[0].id}/`
+ )
+ expect(req.request.body.remove_inbox_tags).toEqual(true)
})
-
- httpTestingController = TestBed.inject(HttpTestingController)
- service = TestBed.inject(DocumentService)
})
afterEach(() => {
diff --git a/src-ui/src/app/services/rest/document.service.ts b/src-ui/src/app/services/rest/document.service.ts
index ee0f26187..37147b818 100644
--- a/src-ui/src/app/services/rest/document.service.ts
+++ b/src-ui/src/app/services/rest/document.service.ts
@@ -2,7 +2,7 @@ import { Injectable } from '@angular/core'
import { Document } from 'src/app/data/document'
import { DocumentMetadata } from 'src/app/data/document-metadata'
import { AbstractPaperlessService } from './abstract-paperless-service'
-import { HttpClient, HttpParams } from '@angular/common/http'
+import { HttpClient } from '@angular/common/http'
import { Observable } from 'rxjs'
import { Results } from 'src/app/data/results'
import { FilterRule } from 'src/app/data/filter-rule'
@@ -13,6 +13,13 @@ import { TagService } from './tag.service'
import { DocumentSuggestions } from 'src/app/data/document-suggestions'
import { queryParamsFromFilterRules } from '../../utils/query-params'
import { StoragePathService } from './storage-path.service'
+import {
+ PermissionAction,
+ PermissionType,
+ PermissionsService,
+} from '../permissions.service'
+import { SettingsService } from '../settings.service'
+import { SETTINGS, SETTINGS_KEYS } from 'src/app/data/ui-settings'
export const DOCUMENT_SORT_FIELDS = [
{ field: 'archive_serial_number', name: $localize`ASN` },
@@ -57,21 +64,41 @@ export class DocumentService extends AbstractPaperlessService {
private correspondentService: CorrespondentService,
private documentTypeService: DocumentTypeService,
private tagService: TagService,
- private storagePathService: StoragePathService
+ private storagePathService: StoragePathService,
+ private permissionsService: PermissionsService,
+ private settingsService: SettingsService
) {
super(http, 'documents')
}
addObservablesToDocument(doc: Document) {
- if (doc.correspondent) {
+ if (
+ doc.correspondent &&
+ this.permissionsService.currentUserCan(
+ PermissionAction.View,
+ PermissionType.Correspondent
+ )
+ ) {
doc.correspondent$ = this.correspondentService.getCached(
doc.correspondent
)
}
- if (doc.document_type) {
+ if (
+ doc.document_type &&
+ this.permissionsService.currentUserCan(
+ PermissionAction.View,
+ PermissionType.DocumentType
+ )
+ ) {
doc.document_type$ = this.documentTypeService.getCached(doc.document_type)
}
- if (doc.tags) {
+ if (
+ doc.tags &&
+ this.permissionsService.currentUserCan(
+ PermissionAction.View,
+ PermissionType.Tag
+ )
+ ) {
doc.tags$ = this.tagService
.getCachedMany(doc.tags)
.pipe(
@@ -80,7 +107,13 @@ export class DocumentService extends AbstractPaperlessService {
)
)
}
- if (doc.storage_path) {
+ if (
+ doc.storage_path &&
+ this.permissionsService.currentUserCan(
+ PermissionAction.View,
+ PermissionType.StoragePath
+ )
+ ) {
doc.storage_path$ = this.storagePathService.getCached(doc.storage_path)
}
return doc
@@ -150,6 +183,9 @@ export class DocumentService extends AbstractPaperlessService {
update(o: Document): Observable {
// we want to only set created_date
o.created = undefined
+ o.remove_inbox_tags = this.settingsService.get(
+ SETTINGS_KEYS.DOCUMENT_EDITING_REMOVE_INBOX_TAGS
+ )
return super.update(o)
}
diff --git a/src-ui/src/app/services/settings.service.ts b/src-ui/src/app/services/settings.service.ts
index 4bbeb1dde..67804fa12 100644
--- a/src-ui/src/app/services/settings.service.ts
+++ b/src-ui/src/app/services/settings.service.ts
@@ -131,6 +131,12 @@ const LANGUAGE_OPTIONS = [
englishName: 'Italian',
dateInputFormat: 'dd/mm/yyyy',
},
+ {
+ code: 'ja-jp',
+ name: $localize`Japanese`,
+ englishName: 'Japanese',
+ dateInputFormat: 'yyyy/mm/dd',
+ },
{
code: 'lb-lu',
name: $localize`Luxembourgish`,
diff --git a/src-ui/src/environments/environment.prod.ts b/src-ui/src/environments/environment.prod.ts
index 7a3cc2b55..6135915d9 100644
--- a/src-ui/src/environments/environment.prod.ts
+++ b/src-ui/src/environments/environment.prod.ts
@@ -5,7 +5,7 @@ export const environment = {
apiBaseUrl: document.baseURI + 'api/',
apiVersion: '4',
appTitle: 'Paperless-ngx',
- version: '2.4.2-dev',
+ version: '2.4.3-dev',
webSocketHost: window.location.host,
webSocketProtocol: window.location.protocol == 'https:' ? 'wss:' : 'ws:',
webSocketBaseUrl: base_url.pathname + 'ws/',
diff --git a/src-ui/src/locale/messages.ar_AR.xlf b/src-ui/src/locale/messages.ar_AR.xlf
index fc011ced2..05504d097 100644
--- a/src-ui/src/locale/messages.ar_AR.xlf
+++ b/src-ui/src/locale/messages.ar_AR.xlf
@@ -589,7 +589,7 @@
src/app/components/admin/config/config.component.ts
107
- Invalid JSON
+ JSON غير صالح
Configuration updated
@@ -657,7 +657,7 @@
src/app/components/admin/tasks/tasks.component.html
16
- Auto refresh
+ تحديث تلقائي
Loading...
diff --git a/src-ui/src/locale/messages.el_GR.xlf b/src-ui/src/locale/messages.el_GR.xlf
index 0534ac946..a2237ba11 100644
--- a/src-ui/src/locale/messages.el_GR.xlf
+++ b/src-ui/src/locale/messages.el_GR.xlf
@@ -497,7 +497,7 @@
src/app/components/admin/config/config.component.html
34
- Enable
+ Ενεργοποίηση
Discard
@@ -589,7 +589,7 @@
src/app/components/admin/config/config.component.ts
107
- Invalid JSON
+ Μη έγκυρο JSON
Configuration updated
@@ -657,7 +657,7 @@
src/app/components/admin/tasks/tasks.component.html
16
- Auto refresh
+ Αυτόματη ανανέωση
Loading...
@@ -2469,7 +2469,7 @@
src/app/components/dashboard/widgets/statistics-widget/statistics-widget.component.html
74
- Document Types
+ Τύποι Εγγράφων
Storage Paths
@@ -2485,7 +2485,7 @@
src/app/components/dashboard/widgets/statistics-widget/statistics-widget.component.html
82
- Storage Paths
+ Διαδρομές Αποθήκευσης
Custom Fields
@@ -2521,7 +2521,7 @@
src/app/components/manage/workflows/workflows.component.html
2
- Workflows
+ Ροές εργασίας
Mail
@@ -3981,7 +3981,7 @@
src/app/components/common/edit-dialog/workflow-edit-dialog/workflow-edit-dialog.component.ts
54
- Consumption Started
+ Η Κατανάλωση Ξεκίνησε
Document Added
@@ -4307,7 +4307,7 @@
src/app/components/common/page-header/page-header.component.html
9
- What's this?
+ Τι είναι αυτό;
Read more
@@ -4419,7 +4419,7 @@
src/app/components/common/profile-edit-dialog/profile-edit-dialog.component.html
3
- Edit Profile
+ Επεξεργασία Προφίλ
Confirm Email
@@ -4427,7 +4427,7 @@
src/app/components/common/profile-edit-dialog/profile-edit-dialog.component.html
13
- Confirm Email
+ Επιβεβαίωση Email
Confirm Password
@@ -4435,7 +4435,7 @@
src/app/components/common/profile-edit-dialog/profile-edit-dialog.component.html
23
- Confirm Password
+ Επιβεβαίωση Κωδικού
API Auth Token
@@ -4443,7 +4443,7 @@
src/app/components/common/profile-edit-dialog/profile-edit-dialog.component.html
31
- API Auth Token
+ API Auth Token
Copy
@@ -4843,7 +4843,7 @@
src/app/components/dashboard/widgets/saved-view-widget/saved-view-widget.component.html
57
- No documents
+ Δεν υπάρχουν έγγραφα
Statistics
@@ -5054,7 +5054,7 @@
src/app/components/document-detail/document-detail.component.html
9
- -
+ -
+
@@ -5062,7 +5062,7 @@
src/app/components/document-detail/document-detail.component.html
17
- +
+ +
Download original
@@ -5378,7 +5378,7 @@
src/app/components/document-detail/document-detail.component.ts
325
- Ok
+ Οκ
Error retrieving metadata
@@ -7096,7 +7096,7 @@
src/app/data/custom-field.ts
17
- Boolean
+ Δυαδικό
Date
@@ -7104,7 +7104,7 @@
src/app/data/custom-field.ts
21
- Date
+ Ημερομηνία
Integer
@@ -7112,7 +7112,7 @@
src/app/data/custom-field.ts
25
- Integer
+ Ακέραιος
Number
@@ -7120,7 +7120,7 @@
src/app/data/custom-field.ts
29
- Number
+ Αριθμός
Monetary
@@ -7128,7 +7128,7 @@
src/app/data/custom-field.ts
33
- Monetary
+ Νομισματικό
Text
@@ -7136,7 +7136,7 @@
src/app/data/custom-field.ts
37
- Text
+ Κείμενο
Url
diff --git a/src-ui/src/locale/messages.fr_FR.xlf b/src-ui/src/locale/messages.fr_FR.xlf
index e765bbb6c..b5ac8eea2 100644
--- a/src-ui/src/locale/messages.fr_FR.xlf
+++ b/src-ui/src/locale/messages.fr_FR.xlf
@@ -449,21 +449,21 @@
Enfin, au nom de chaque contributeur à ce projet soutenu par la communauté, merci d'utiliser Paperless-ngx !
-
+
Application Configuration
src/app/components/admin/config/config.component.html
2
- Configuration de l'application
+ Configuration de l'application
-
+
Global app configuration options which apply to <strong>every</strong> user of this install of Paperless-ngx. Options can also be set using environment variables or the configuration file but the value here will always take precedence.
src/app/components/admin/config/config.component.html
4
- Les options de configuration de l'application globaux s'appliquent à <strong>tous</strong> les utilisateurs de cette installation de Paperless-ngx. Les options peuvent aussi être définies en utilisant les variables d'environnement ou le fichier de configuration mais la valeur ici sera toujours prioritaire.
+ Les options de configuration de l'application globaux s'appliquent à <strong>tous</strong> les utilisateurs de cette installation de Paperless-ngx. Les options peuvent aussi être définies en utilisant les variables d'environnement ou le fichier de configuration mais la valeur ici sera toujours prioritaire.
@@ -483,13 +483,13 @@
-
+
Read the documentation about this setting
src/app/components/admin/config/config.component.html
25
- Lire la documentation à propos de ce paramètre
+ Lire la documentation à propos de ce paramètre
Enable
@@ -591,13 +591,13 @@
JSON non valide
-
+
Configuration updated
src/app/components/admin/config/config.component.ts
151
- Configuration mise a jour
+ Configuration mise à jour
An error occurred updating configuration
@@ -607,21 +607,21 @@
Une erreur s'est produite lors de la mise à jour de la configuration
-
+
File successfully updated
src/app/components/admin/config/config.component.ts
178
- Fichier téléversé avec succès
+ Fichier téléversé avec succès
-
+
An error occurred uploading file
src/app/components/admin/config/config.component.ts
183
- Une erreur s'est produite lors du téléversement du fichier
+ Une erreur s'est produite lors du téléversement du fichier
Logs
@@ -639,13 +639,13 @@
Journaux
-
+
Review the log files for the application and for email checking.
src/app/components/admin/logs/logs.component.html
4
- Consultez les fichiers journaux pour l'application et pour la vérification des courriels.
+ Consultez les journaux de l'application ainsi que ceux des courriels.
Auto refresh
@@ -755,13 +755,13 @@
Paramètres
-
+
Options to customize appearance, notifications, saved views and more. Settings apply to the <strong>current user only</strong>.
src/app/components/admin/settings/settings.component.html
4
- Options pour personnaliser l'apparence, les notifrications, les vues sauvegardées et bien plus. Les paramètres s'appliquent à l'<strong>utilisateur actuel uniquement</strong>.
+ Options pour personnaliser l'apparence, les notifications, les vues sauvegardées et bien plus. Les paramètres s'appliquent à l'<strong>utilisateur actuel uniquement</strong>.
Start tour
@@ -1825,39 +1825,39 @@
src/app/components/admin/tasks/tasks.component.html
111
- ( sélectionné(s))
+ ( sélectionné(s))
-
+
Failed
src/app/components/admin/tasks/tasks.component.html
123,125
- Échoué(s)
+ Échoué(s)
-
+
Complete
src/app/components/admin/tasks/tasks.component.html
131,133
- Terminé(s)
+ Terminé(s)
-
+
Started
src/app/components/admin/tasks/tasks.component.html
139,141
- Commencé(s)
+ Commencé(s)
-
+
Queued
src/app/components/admin/tasks/tasks.component.html
147,149
- En attente
+ En attente
Dismiss selected
@@ -1939,13 +1939,13 @@
Utilisateurs & Groupes
-
+
Create, delete and edit users and groups.
src/app/components/admin/users-groups/users-groups.component.html
4
- Créez, supprimez et modifiez les utilisateurs et les groupes.
+ Créez, supprimez et modifiez les utilisateurs et les groupes.
Users
@@ -2275,13 +2275,13 @@
Erreur lors de la supression du groupe.
-
+
by Paperless-ngx
src/app/components/app-frame/app-frame.component.html
20
- par Paperless-ngx
+ par Paperless-ngx
Search documents
@@ -2543,7 +2543,7 @@
Administration
-
+
Configuration
src/app/components/app-frame/app-frame.component.html
@@ -2553,7 +2553,7 @@
src/app/components/app-frame/app-frame.component.html
242
- Configuration
+ Configuration
GitHub
@@ -4184,13 +4184,13 @@
Aucun document trouvé
-
+
Upload
src/app/components/common/input/file/file.component.html
15
- Téléverser
+ Téléverser
Show password
@@ -4269,13 +4269,13 @@
Aucun élément trouvé
-
+
Note: value has not yet been set and will not apply until explicitly changed
src/app/components/common/input/switch/switch.component.html
39
- Note : la valeur n'a pas encore été définie et ne sera pas appliquée jusqu'à ce que ce soit changé explicitement
+ Note : la valeur n'a pas encore été définie et ne sera pas appliquée jusqu'à ce que ce soit changé explicitement
Add tag
@@ -4301,21 +4301,21 @@
Ouvrir le lien
-
+
What's this?
src/app/components/common/page-header/page-header.component.html
9
- Qu'est-ce ?
+ Qu'est-ce ?
-
+
Read more
src/app/components/common/page-header/page-header.component.html
15
- En savoir plus
+ En savoir plus
Set permissions
@@ -4709,21 +4709,21 @@
Copier l'erreur brute
-
+
Hello , welcome to
src/app/components/dashboard/dashboard.component.ts
38
- Bonjour , bienvenue sur
+ Bonjour , bienvenue sur
-
+
Welcome to
src/app/components/dashboard/dashboard.component.ts
40
- Bienvenue sur
+ Bienvenue sur
Dashboard updated
@@ -5308,13 +5308,13 @@
Prévisualisation
-
+
Notes
src/app/components/document-detail/document-detail.component.html
272,275
- Notes
+ Notes
Save & next
@@ -5362,7 +5362,7 @@
src/app/components/document-detail/document-detail.component.ts
322
- La version de ce docuemnt dans dans la session de votre navigateur semble plus ancien que la version existante.
+ La version de ce document dans la session de votre navigateur semble plus ancien que la version existante.
Saving the document here may overwrite other changes that were made. To restore the existing version, discard your changes or close the document.
@@ -5370,15 +5370,15 @@
src/app/components/document-detail/document-detail.component.ts
323
- Sauvegarder le document ici peut écraser les autres modifications qui ont été faites. Pour restaurer la version existante, annulez vos modificatons ou fermez le document.
+ Sauvegarder le document ici peut écraser les autres modifications qui ont été faites. Pour restaurer la version existante, annulez vos modifications ou fermez le document.
-
+
Ok
src/app/components/document-detail/document-detail.component.ts
325
- OK
+ OK
Error retrieving metadata
@@ -6482,13 +6482,13 @@
Voulez-vous vraiment supprimer le correspondant " " ?
-
+
Customize the data fields that can be attached to documents.
src/app/components/manage/custom-fields/custom-fields.component.html
4
- Personnalisez les champs de données qui peuvent être joints aux documents.
+ Personnalisez les champs de données qui peuvent être joints aux documents.
Add Field
@@ -6994,13 +6994,13 @@
Voulez-vous vraiment supprimer l'étiquette " " ?
-
+
Use workflows to customize the behavior of Paperless-ngx when events 'trigger' a workflow.
src/app/components/manage/workflows/workflows.component.html
4
- Utilisez les workflows pour personnaliser le comportement de Paperless-ngx lorsque des événements « déclenchent » un workflow.
+ Utilisez les workflows pour personnaliser le comportement de Paperless-ngx lorsque des événements « déclenchent » un workflow.
Add Workflow
@@ -7250,13 +7250,13 @@
Aucun : désactiver le rapprochement
-
+
General Settings
src/app/data/paperless-config.ts
50
- Paramètres généraux
+ Paramètres généraux
OCR Settings
@@ -7370,21 +7370,21 @@
Arguments OCR
-
+
Application Logo
src/app/data/paperless-config.ts
171
- Logo de l'application
+ Logo de l'application
-
+
Application Title
src/app/data/paperless-config.ts
178
- Titre de l'application
+ Nom de l'application
Warning: You have unsaved changes to your document(s).
diff --git a/src/documents/bulk_edit.py b/src/documents/bulk_edit.py
index ab0049eaa..ba001fd14 100644
--- a/src/documents/bulk_edit.py
+++ b/src/documents/bulk_edit.py
@@ -129,13 +129,17 @@ def redo_ocr(doc_ids):
return "OK"
-def set_permissions(doc_ids, set_permissions, owner=None):
+def set_permissions(doc_ids, set_permissions, owner=None, merge=False):
qs = Document.objects.filter(id__in=doc_ids)
- qs.update(owner=owner)
+ if merge:
+ # If merging, only set owner for documents that don't have an owner
+ qs.filter(owner__isnull=True).update(owner=owner)
+ else:
+ qs.update(owner=owner)
for doc in qs:
- set_permissions_for_object(set_permissions, doc)
+ set_permissions_for_object(permissions=set_permissions, object=doc, merge=merge)
affected_docs = [doc.id for doc in qs]
diff --git a/src/documents/caching.py b/src/documents/caching.py
new file mode 100644
index 000000000..9b8607dd8
--- /dev/null
+++ b/src/documents/caching.py
@@ -0,0 +1,197 @@
+import logging
+from binascii import hexlify
+from dataclasses import dataclass
+from typing import TYPE_CHECKING
+from typing import Final
+from typing import Optional
+
+from django.core.cache import cache
+
+from documents.models import Document
+
+if TYPE_CHECKING:
+ from documents.classifier import DocumentClassifier
+
+logger = logging.getLogger("paperless.caching")
+
+
+@dataclass(frozen=True)
+class MetadataCacheData:
+ original_checksum: str
+ original_metadata: list
+ archive_checksum: Optional[str]
+ archive_metadata: Optional[list]
+
+
+@dataclass(frozen=True)
+class SuggestionCacheData:
+ classifier_version: int
+ classifier_hash: str
+ suggestions: dict
+
+
+CLASSIFIER_VERSION_KEY: Final[str] = "classifier_version"
+CLASSIFIER_HASH_KEY: Final[str] = "classifier_hash"
+CLASSIFIER_MODIFIED_KEY: Final[str] = "classifier_modified"
+
+CACHE_1_MINUTE: Final[int] = 60
+CACHE_5_MINUTES: Final[int] = 5 * CACHE_1_MINUTE
+CACHE_50_MINUTES: Final[int] = 50 * CACHE_1_MINUTE
+
+
+def get_suggestion_cache_key(document_id: int) -> str:
+ """
+ Returns the basic key for a document's suggestions
+ """
+ return f"doc_{document_id}_suggest"
+
+
+def get_suggestion_cache(document_id: int) -> Optional[SuggestionCacheData]:
+ """
+ If possible, return the cached suggestions for the given document ID.
+ The classifier needs to be matching in format and hash and the suggestions need to
+ have been cached once.
+ """
+ from documents.classifier import DocumentClassifier
+
+ doc_key = get_suggestion_cache_key(document_id)
+ cache_hits = cache.get_many([CLASSIFIER_VERSION_KEY, CLASSIFIER_HASH_KEY, doc_key])
+ # The document suggestions are in the cache
+ if doc_key in cache_hits:
+ doc_suggestions: SuggestionCacheData = cache_hits[doc_key]
+ # The classifier format is the same
+ # The classifier hash is the same
+ # Then the suggestions can be used
+ if (
+ CLASSIFIER_VERSION_KEY in cache_hits
+ and cache_hits[CLASSIFIER_VERSION_KEY] == DocumentClassifier.FORMAT_VERSION
+ and cache_hits[CLASSIFIER_VERSION_KEY] == doc_suggestions.classifier_version
+ ) and (
+ CLASSIFIER_HASH_KEY in cache_hits
+ and cache_hits[CLASSIFIER_HASH_KEY] == doc_suggestions.classifier_hash
+ ):
+ return doc_suggestions
+ else: # pragma: no cover
+ # Remove the key because something didn't match
+ cache.delete(doc_key)
+ return None
+
+
+def set_suggestions_cache(
+ document_id: int,
+ suggestions: dict,
+ classifier: Optional["DocumentClassifier"],
+ *,
+ timeout=CACHE_50_MINUTES,
+) -> None:
+ """
+ Caches the given suggestions, which were generated by the given classifier. If there is no classifier,
+ this function is a no-op (there won't be suggestions then anyway)
+ """
+ if classifier is not None:
+ doc_key = get_suggestion_cache_key(document_id)
+ print(classifier.last_auto_type_hash)
+ cache.set(
+ doc_key,
+ SuggestionCacheData(
+ classifier.FORMAT_VERSION,
+ hexlify(classifier.last_auto_type_hash).decode(),
+ suggestions,
+ ),
+ timeout,
+ )
+
+
+def refresh_suggestions_cache(
+ document_id: int,
+ *,
+ timeout: int = CACHE_50_MINUTES,
+) -> None:
+ """
+ Refreshes the expiration of the suggestions for the given document ID
+ to the given timeout
+ """
+ doc_key = get_suggestion_cache_key(document_id)
+ cache.touch(doc_key, timeout)
+
+
+def get_metadata_cache_key(document_id: int) -> str:
+ """
+ Returns the basic key for a document's metadata
+ """
+ return f"doc_{document_id}_metadata"
+
+
+def get_metadata_cache(document_id: int) -> Optional[MetadataCacheData]:
+ """
+ Returns the cached document metadata for the given document ID, as long as the metadata
+ was cached once and the checksums have not changed
+ """
+ doc_key = get_metadata_cache_key(document_id)
+ doc_metadata: Optional[MetadataCacheData] = cache.get(doc_key)
+ # The metadata exists in the cache
+ if doc_metadata is not None:
+ try:
+ doc = Document.objects.get(pk=document_id)
+ # The original checksums match
+ # If it has one, the archive checksums match
+ # Then, we can use the metadata
+ if (
+ doc_metadata.original_checksum == doc.checksum
+ and doc.has_archive_version
+ and doc_metadata.archive_checksum is not None
+ and doc_metadata.archive_checksum == doc.archive_checksum
+ ):
+ # Refresh cache
+ cache.touch(doc_key, CACHE_50_MINUTES)
+ return doc_metadata
+ else: # pragma: no cover
+ # Something didn't match, delete the key
+ cache.delete(doc_key)
+ except Document.DoesNotExist: # pragma: no cover
+ # Basically impossible, but the key existed, but the Document didn't
+ cache.delete(doc_key)
+ return None
+
+
+def set_metadata_cache(
+ document: Document,
+ original_metadata: list,
+ archive_metadata: Optional[list],
+ *,
+ timeout=CACHE_50_MINUTES,
+) -> None:
+ """
+ Sets the metadata into cache for the given Document
+ """
+ doc_key = get_metadata_cache_key(document.pk)
+ cache.set(
+ doc_key,
+ MetadataCacheData(
+ document.checksum,
+ original_metadata,
+ document.archive_checksum,
+ archive_metadata,
+ ),
+ timeout,
+ )
+
+
+def refresh_metadata_cache(
+ document_id: int,
+ *,
+ timeout: int = CACHE_50_MINUTES,
+) -> None:
+ """
+ Refreshes the expiration of the metadata for the given document ID
+ to the given timeout
+ """
+ doc_key = get_metadata_cache_key(document_id)
+ cache.touch(doc_key, timeout)
+
+
+def get_thumbnail_modified_key(document_id: int) -> str:
+ """
+ Builds the key to store a thumbnail's timestamp
+ """
+ return f"doc_{document_id}_thumbnail_modified"
diff --git a/src/documents/classifier.py b/src/documents/classifier.py
index 5833e373e..6180a8671 100644
--- a/src/documents/classifier.py
+++ b/src/documents/classifier.py
@@ -10,8 +10,13 @@ from pathlib import Path
from typing import Optional
from django.conf import settings
+from django.core.cache import cache
from sklearn.exceptions import InconsistentVersionWarning
+from documents.caching import CACHE_50_MINUTES
+from documents.caching import CLASSIFIER_HASH_KEY
+from documents.caching import CLASSIFIER_MODIFIED_KEY
+from documents.caching import CLASSIFIER_VERSION_KEY
from documents.models import Document
from documents.models import MatchingModel
@@ -208,6 +213,15 @@ class DocumentClassifier:
and self.last_doc_change_time >= latest_doc_change
) and self.last_auto_type_hash == hasher.digest():
logger.info("No updates since last training")
+ # Set the classifier information into the cache
+ # Caching for 50 minutes, so slightly less than the normal retrain time
+ cache.set(
+ CLASSIFIER_MODIFIED_KEY,
+ self.last_doc_change_time,
+ CACHE_50_MINUTES,
+ )
+ cache.set(CLASSIFIER_HASH_KEY, hasher.hexdigest(), CACHE_50_MINUTES)
+ cache.set(CLASSIFIER_VERSION_KEY, self.FORMAT_VERSION, CACHE_50_MINUTES)
return False
# subtract 1 since -1 (null) is also part of the classes.
@@ -322,6 +336,12 @@ class DocumentClassifier:
self.last_doc_change_time = latest_doc_change
self.last_auto_type_hash = hasher.digest()
+ # Set the classifier information into the cache
+ # Caching for 50 minutes, so slightly less than the normal retrain time
+ cache.set(CLASSIFIER_MODIFIED_KEY, self.last_doc_change_time, CACHE_50_MINUTES)
+ cache.set(CLASSIFIER_HASH_KEY, hasher.hexdigest(), CACHE_50_MINUTES)
+ cache.set(CLASSIFIER_VERSION_KEY, self.FORMAT_VERSION, CACHE_50_MINUTES)
+
return True
def preprocess_content(self, content: str) -> str: # pragma: no cover
diff --git a/src/documents/conditionals.py b/src/documents/conditionals.py
index 07e6850fb..1b53dfe2b 100644
--- a/src/documents/conditionals.py
+++ b/src/documents/conditionals.py
@@ -1,9 +1,16 @@
-import pickle
from datetime import datetime
+from datetime import timezone
from typing import Optional
from django.conf import settings
+from django.core.cache import cache
+from documents.caching import CACHE_5_MINUTES
+from documents.caching import CACHE_50_MINUTES
+from documents.caching import CLASSIFIER_HASH_KEY
+from documents.caching import CLASSIFIER_MODIFIED_KEY
+from documents.caching import CLASSIFIER_VERSION_KEY
+from documents.caching import get_thumbnail_modified_key
from documents.classifier import DocumentClassifier
from documents.models import Document
@@ -14,18 +21,25 @@ def suggestions_etag(request, pk: int) -> Optional[str]:
suggestions if the classifier has not been changed and the suggested dates
setting is also unchanged
- TODO: It would be nice to not duplicate the partial loading and the loading
- between here and the actual classifier
"""
+ # If no model file, no etag at all
if not settings.MODEL_FILE.exists():
return None
- with open(settings.MODEL_FILE, "rb") as f:
- schema_version = pickle.load(f)
- if schema_version != DocumentClassifier.FORMAT_VERSION:
- return None
- _ = pickle.load(f)
- last_auto_type_hash: bytes = pickle.load(f)
- return f"{last_auto_type_hash}:{settings.NUMBER_OF_SUGGESTED_DATES}"
+ # Check cache information
+ cache_hits = cache.get_many(
+ [CLASSIFIER_VERSION_KEY, CLASSIFIER_HASH_KEY],
+ )
+ # If the version differs somehow, no etag
+ if (
+ CLASSIFIER_VERSION_KEY in cache_hits
+ and cache_hits[CLASSIFIER_VERSION_KEY] != DocumentClassifier.FORMAT_VERSION
+ ):
+ return None
+ elif CLASSIFIER_HASH_KEY in cache_hits:
+ # Refresh the cache and return the hash digest and the dates setting
+ cache.touch(CLASSIFIER_HASH_KEY, CACHE_5_MINUTES)
+ return f"{cache_hits[CLASSIFIER_HASH_KEY]}:{settings.NUMBER_OF_SUGGESTED_DATES}"
+ return None
def suggestions_last_modified(request, pk: int) -> Optional[datetime]:
@@ -34,14 +48,23 @@ def suggestions_last_modified(request, pk: int) -> Optional[datetime]:
as there is not way to track the suggested date setting modification, but it seems
unlikely that changes too often
"""
+ # No file, no last modified
if not settings.MODEL_FILE.exists():
return None
- with open(settings.MODEL_FILE, "rb") as f:
- schema_version = pickle.load(f)
- if schema_version != DocumentClassifier.FORMAT_VERSION:
- return None
- last_doc_change_time = pickle.load(f)
- return last_doc_change_time
+ cache_hits = cache.get_many(
+ [CLASSIFIER_VERSION_KEY, CLASSIFIER_MODIFIED_KEY],
+ )
+ # If the version differs somehow, no last modified
+ if (
+ CLASSIFIER_VERSION_KEY in cache_hits
+ and cache_hits[CLASSIFIER_VERSION_KEY] != DocumentClassifier.FORMAT_VERSION
+ ):
+ return None
+ elif CLASSIFIER_MODIFIED_KEY in cache_hits:
+ # Refresh the cache and return the last modified
+ cache.touch(CLASSIFIER_MODIFIED_KEY, CACHE_5_MINUTES)
+ return cache_hits[CLASSIFIER_MODIFIED_KEY]
+ return None
def metadata_etag(request, pk: int) -> Optional[str]:
@@ -52,7 +75,7 @@ def metadata_etag(request, pk: int) -> Optional[str]:
try:
doc = Document.objects.get(pk=pk)
return doc.checksum
- except Document.DoesNotExist:
+ except Document.DoesNotExist: # pragma: no cover
return None
return None
@@ -66,7 +89,7 @@ def metadata_last_modified(request, pk: int) -> Optional[datetime]:
try:
doc = Document.objects.get(pk=pk)
return doc.modified
- except Document.DoesNotExist:
+ except Document.DoesNotExist: # pragma: no cover
return None
return None
@@ -82,6 +105,46 @@ def preview_etag(request, pk: int) -> Optional[str]:
and request.query_params["original"] == "true"
)
return doc.checksum if use_original else doc.archive_checksum
- except Document.DoesNotExist:
+ except Document.DoesNotExist: # pragma: no cover
return None
return None
+
+
+def preview_last_modified(request, pk: int) -> Optional[datetime]:
+ """
+ Uses the documents modified time to set the Last-Modified header. Not strictly
+ speaking correct, but close enough and quick
+ """
+ try:
+ doc = Document.objects.get(pk=pk)
+ return doc.modified
+ except Document.DoesNotExist: # pragma: no cover
+ return None
+ return None
+
+
+def thumbnail_last_modified(request, pk: int) -> Optional[datetime]:
+ """
+ Returns the filesystem last modified either from cache or from filesystem.
+ Cache should be (slightly?) faster than filesystem
+ """
+ try:
+ doc = Document.objects.get(pk=pk)
+ if not doc.thumbnail_path.exists():
+ return None
+ doc_key = get_thumbnail_modified_key(pk)
+
+ cache_hit = cache.get(doc_key)
+ if cache_hit is not None:
+ cache.touch(doc_key, CACHE_50_MINUTES)
+ return cache_hit
+
+ # No cache, get the timestamp and cache the datetime
+ last_modified = datetime.fromtimestamp(
+ doc.thumbnail_path.stat().st_mtime,
+ tz=timezone.utc,
+ )
+ cache.set(doc_key, last_modified, CACHE_50_MINUTES)
+ return last_modified
+ except Document.DoesNotExist: # pragma: no cover
+ return None
diff --git a/src/documents/management/commands/document_consumer.py b/src/documents/management/commands/document_consumer.py
index 16bcf9bd9..919530544 100644
--- a/src/documents/management/commands/document_consumer.py
+++ b/src/documents/management/commands/document_consumer.py
@@ -232,6 +232,9 @@ class Command(BaseCommand):
if not os.path.isdir(directory):
raise CommandError(f"Consumption directory {directory} does not exist")
+ # Consumer will need this
+ settings.SCRATCH_DIR.mkdir(parents=True, exist_ok=True)
+
if recursive:
for dirpath, _, filenames in os.walk(directory):
for filename in filenames:
diff --git a/src/documents/parsers.py b/src/documents/parsers.py
index 12e5d6b33..b791d8322 100644
--- a/src/documents/parsers.py
+++ b/src/documents/parsers.py
@@ -140,6 +140,7 @@ def run_convert(
type=None,
depth=None,
auto_orient=False,
+ use_cropbox=False,
extra=None,
logging_group=None,
) -> None:
@@ -158,6 +159,7 @@ def run_convert(
args += ["-type", str(type)] if type else []
args += ["-depth", str(depth)] if depth else []
args += ["-auto-orient"] if auto_orient else []
+ args += ["-define", "pdf:use-cropbox=true"] if use_cropbox else []
args += [input_file, output_file]
logger.debug("Execute: " + " ".join(args), extra={"group": logging_group})
@@ -229,6 +231,7 @@ def make_thumbnail_from_pdf(in_path, temp_dir, logging_group=None) -> str:
strip=True,
trim=False,
auto_orient=True,
+ use_cropbox=True,
input_file=f"{in_path}[0]",
output_file=out_path,
logging_group=logging_group,
diff --git a/src/documents/serialisers.py b/src/documents/serialisers.py
index 942d22fe5..2a2fc46a7 100644
--- a/src/documents/serialisers.py
+++ b/src/documents/serialisers.py
@@ -81,7 +81,7 @@ class MatchingModelSerializer(serializers.ModelSerializer):
slug = SerializerMethodField()
def validate(self, data):
- # see https://github.com/encode/django-rest-framework/issues/7173
+ # TODO: remove pending https://github.com/encode/django-rest-framework/issues/7173
name = data["name"] if "name" in data else self.instance.name
owner = (
data["owner"]
@@ -441,6 +441,17 @@ class CustomFieldSerializer(serializers.ModelSerializer):
"data_type",
]
+ def validate(self, attrs):
+ # TODO: remove pending https://github.com/encode/django-rest-framework/issues/7173
+ name = attrs["name"] if "name" in attrs else self.instance.name
+ if ("name" in attrs) and self.Meta.model.objects.filter(
+ name=name,
+ ).exists():
+ raise serializers.ValidationError(
+ {"error": "Object violates name unique constraint"},
+ )
+ return super().validate(attrs)
+
class ReadWriteSerializerMethodField(serializers.SerializerMethodField):
"""
@@ -638,6 +649,11 @@ class DocumentSerializer(
allow_null=True,
)
+ remove_inbox_tags = serializers.BooleanField(
+ default=False,
+ write_only=True,
+ )
+
def get_original_file_name(self, obj):
return obj.original_filename
@@ -681,12 +697,48 @@ class DocumentSerializer(
custom_field_instance.field,
doc_id,
)
+ if (
+ "remove_inbox_tags" in validated_data
+ and validated_data["remove_inbox_tags"]
+ ):
+ tag_ids_being_added = (
+ [
+ tag.id
+ for tag in validated_data["tags"]
+ if tag not in instance.tags.all()
+ ]
+ if "tags" in validated_data
+ else []
+ )
+ inbox_tags_not_being_added = Tag.objects.filter(is_inbox_tag=True).exclude(
+ id__in=tag_ids_being_added,
+ )
+ if "tags" in validated_data:
+ validated_data["tags"] = [
+ tag
+ for tag in validated_data["tags"]
+ if tag not in inbox_tags_not_being_added
+ ]
+ else:
+ validated_data["tags"] = [
+ tag
+ for tag in instance.tags.all()
+ if tag not in inbox_tags_not_being_added
+ ]
super().update(instance, validated_data)
return instance
def __init__(self, *args, **kwargs):
self.truncate_content = kwargs.pop("truncate_content", False)
+ # return full permissions if we're doing a PATCH or PUT
+ context = kwargs.get("context")
+ if (
+ context.get("request").method == "PATCH"
+ or context.get("request").method == "PUT"
+ ):
+ kwargs["full_perms"] = True
+
super().__init__(*args, **kwargs)
class Meta:
@@ -714,6 +766,7 @@ class DocumentSerializer(
"set_permissions",
"notes",
"custom_fields",
+ "remove_inbox_tags",
)
@@ -916,6 +969,8 @@ class BulkEditSerializer(DocumentListSerializer, SetPermissionsMixin):
)
if "owner" in parameters and parameters["owner"] is not None:
self._validate_owner(parameters["owner"])
+ if "merge" not in parameters:
+ parameters["merge"] = False
def validate(self, attrs):
method = attrs["method"]
@@ -1258,6 +1313,12 @@ class BulkEditObjectPermissionsSerializer(serializers.Serializer, SetPermissions
write_only=True,
)
+ merge = serializers.BooleanField(
+ default=False,
+ write_only=True,
+ required=False,
+ )
+
def get_object_class(self, object_type):
object_class = None
if object_type == "tags":
diff --git a/src/documents/tests/test_api_bulk_edit.py b/src/documents/tests/test_api_bulk_edit.py
index c2dc69a1e..4cf9909c0 100644
--- a/src/documents/tests/test_api_bulk_edit.py
+++ b/src/documents/tests/test_api_bulk_edit.py
@@ -765,6 +765,58 @@ class TestBulkEdit(DirectoriesMixin, APITestCase):
self.assertCountEqual(args[0], [self.doc2.id, self.doc3.id])
self.assertEqual(len(kwargs["set_permissions"]["view"]["users"]), 2)
+ @mock.patch("documents.serialisers.bulk_edit.set_permissions")
+ def test_set_permissions_merge(self, m):
+ m.return_value = "OK"
+ user1 = User.objects.create(username="user1")
+ user2 = User.objects.create(username="user2")
+ permissions = {
+ "view": {
+ "users": [user1.id, user2.id],
+ "groups": None,
+ },
+ "change": {
+ "users": [user1.id],
+ "groups": None,
+ },
+ }
+
+ response = self.client.post(
+ "/api/documents/bulk_edit/",
+ json.dumps(
+ {
+ "documents": [self.doc2.id, self.doc3.id],
+ "method": "set_permissions",
+ "parameters": {"set_permissions": permissions},
+ },
+ ),
+ content_type="application/json",
+ )
+
+ self.assertEqual(response.status_code, status.HTTP_200_OK)
+
+ m.assert_called()
+ args, kwargs = m.call_args
+ self.assertEqual(kwargs["merge"], False)
+
+ response = self.client.post(
+ "/api/documents/bulk_edit/",
+ json.dumps(
+ {
+ "documents": [self.doc2.id, self.doc3.id],
+ "method": "set_permissions",
+ "parameters": {"set_permissions": permissions, "merge": True},
+ },
+ ),
+ content_type="application/json",
+ )
+
+ self.assertEqual(response.status_code, status.HTTP_200_OK)
+
+ m.assert_called()
+ args, kwargs = m.call_args
+ self.assertEqual(kwargs["merge"], True)
+
@mock.patch("documents.serialisers.bulk_edit.set_permissions")
def test_insufficient_permissions_ownership(self, m):
"""
diff --git a/src/documents/tests/test_api_custom_fields.py b/src/documents/tests/test_api_custom_fields.py
index cf33e2800..33124a48c 100644
--- a/src/documents/tests/test_api_custom_fields.py
+++ b/src/documents/tests/test_api_custom_fields.py
@@ -53,6 +53,29 @@ class TestCustomField(DirectoriesMixin, APITestCase):
self.assertEqual(data["name"], name)
self.assertEqual(data["data_type"], field_type)
+ def test_create_custom_field_nonunique_name(self):
+ """
+ GIVEN:
+ - Custom field exists
+ WHEN:
+ - API request to create custom field with the same name
+ THEN:
+ - HTTP 400 is returned
+ """
+ CustomField.objects.create(
+ name="Test Custom Field",
+ data_type=CustomField.FieldDataType.STRING,
+ )
+
+ resp = self.client.post(
+ self.ENDPOINT,
+ data={
+ "data_type": "string",
+ "name": "Test Custom Field",
+ },
+ )
+ self.assertEqual(resp.status_code, status.HTTP_400_BAD_REQUEST)
+
def test_create_custom_field_instance(self):
"""
GIVEN:
diff --git a/src/documents/tests/test_api_documents.py b/src/documents/tests/test_api_documents.py
index 510e2b1b3..d7ae1eeb7 100644
--- a/src/documents/tests/test_api_documents.py
+++ b/src/documents/tests/test_api_documents.py
@@ -4,6 +4,7 @@ import shutil
import tempfile
import uuid
import zoneinfo
+from binascii import hexlify
from datetime import timedelta
from pathlib import Path
from unittest import mock
@@ -13,12 +14,17 @@ from dateutil import parser
from django.conf import settings
from django.contrib.auth.models import Permission
from django.contrib.auth.models import User
+from django.core.cache import cache
from django.test import override_settings
from django.utils import timezone
from guardian.shortcuts import assign_perm
from rest_framework import status
from rest_framework.test import APITestCase
+from documents.caching import CACHE_50_MINUTES
+from documents.caching import CLASSIFIER_HASH_KEY
+from documents.caching import CLASSIFIER_MODIFIED_KEY
+from documents.caching import CLASSIFIER_VERSION_KEY
from documents.models import Correspondent
from documents.models import CustomField
from documents.models import CustomFieldInstance
@@ -40,6 +46,7 @@ class TestDocumentApi(DirectoriesMixin, DocumentConsumeDelayMixin, APITestCase):
self.user = User.objects.create_superuser(username="temp_admin")
self.client.force_authenticate(user=self.user)
+ cache.clear()
def testDocuments(self):
response = self.client.get("/api/documents/").data
@@ -1162,6 +1169,9 @@ class TestDocumentApi(DirectoriesMixin, DocumentConsumeDelayMixin, APITestCase):
self.assertEqual(meta["original_size"], os.stat(source_file).st_size)
self.assertEqual(meta["archive_size"], os.stat(archive_file).st_size)
+ response = self.client.get(f"/api/documents/{doc.pk}/metadata/")
+ self.assertEqual(response.status_code, status.HTTP_200_OK)
+
def test_get_metadata_invalid_doc(self):
response = self.client.get("/api/documents/34576/metadata/")
self.assertEqual(response.status_code, status.HTTP_404_NOT_FOUND)
@@ -1266,7 +1276,7 @@ class TestDocumentApi(DirectoriesMixin, DocumentConsumeDelayMixin, APITestCase):
},
)
- @mock.patch("documents.conditionals.pickle.load")
+ @mock.patch("documents.views.load_classifier")
@mock.patch("documents.views.match_storage_paths")
@mock.patch("documents.views.match_document_types")
@mock.patch("documents.views.match_tags")
@@ -1278,7 +1288,7 @@ class TestDocumentApi(DirectoriesMixin, DocumentConsumeDelayMixin, APITestCase):
match_tags,
match_document_types,
match_storage_paths,
- mocked_pickle_load,
+ mocked_load,
):
"""
GIVEN:
@@ -1287,23 +1297,43 @@ class TestDocumentApi(DirectoriesMixin, DocumentConsumeDelayMixin, APITestCase):
- Classifier has not been modified
THEN:
- Subsequent requests are returned alright
- - ETag and last modified are called
+ - ETag and last modified headers are set
"""
- settings.MODEL_FILE.touch()
+ # setup the cache how the classifier does it
from documents.classifier import DocumentClassifier
- last_modified = timezone.now()
+ settings.MODEL_FILE.touch()
- # ETag first, then modified
- mock_effect = [
- DocumentClassifier.FORMAT_VERSION,
- "dont care",
- b"thisisachecksum",
- DocumentClassifier.FORMAT_VERSION,
- last_modified,
+ classifier_checksum_bytes = b"thisisachecksum"
+ classifier_checksum_hex = hexlify(classifier_checksum_bytes).decode()
+
+ # Two loads, so two side effects
+ mocked_load.side_effect = [
+ mock.Mock(
+ last_auto_type_hash=classifier_checksum_bytes,
+ FORMAT_VERSION=DocumentClassifier.FORMAT_VERSION,
+ ),
+ mock.Mock(
+ last_auto_type_hash=classifier_checksum_bytes,
+ FORMAT_VERSION=DocumentClassifier.FORMAT_VERSION,
+ ),
]
- mocked_pickle_load.side_effect = mock_effect
+
+ last_modified = timezone.now()
+ cache.set(CLASSIFIER_MODIFIED_KEY, last_modified, CACHE_50_MINUTES)
+ cache.set(CLASSIFIER_HASH_KEY, classifier_checksum_hex, CACHE_50_MINUTES)
+ cache.set(
+ CLASSIFIER_VERSION_KEY,
+ DocumentClassifier.FORMAT_VERSION,
+ CACHE_50_MINUTES,
+ )
+
+ # Mock the matching
+ match_correspondents.return_value = [Correspondent(id=88), Correspondent(id=2)]
+ match_tags.return_value = [Tag(id=56), Tag(id=123)]
+ match_document_types.return_value = [DocumentType(id=23)]
+ match_storage_paths.return_value = [StoragePath(id=99), StoragePath(id=77)]
doc = Document.objects.create(
title="test",
@@ -1311,12 +1341,8 @@ class TestDocumentApi(DirectoriesMixin, DocumentConsumeDelayMixin, APITestCase):
content="this is an invoice from 12.04.2022!",
)
- match_correspondents.return_value = [Correspondent(id=88), Correspondent(id=2)]
- match_tags.return_value = [Tag(id=56), Tag(id=123)]
- match_document_types.return_value = [DocumentType(id=23)]
- match_storage_paths.return_value = [StoragePath(id=99), StoragePath(id=77)]
-
response = self.client.get(f"/api/documents/{doc.pk}/suggestions/")
+ self.assertEqual(response.status_code, status.HTTP_200_OK)
self.assertEqual(
response.data,
{
@@ -1327,7 +1353,6 @@ class TestDocumentApi(DirectoriesMixin, DocumentConsumeDelayMixin, APITestCase):
"dates": ["2022-04-12"],
},
)
- mocked_pickle_load.assert_called()
self.assertIn("Last-Modified", response.headers)
self.assertEqual(
response.headers["Last-Modified"],
@@ -1336,15 +1361,11 @@ class TestDocumentApi(DirectoriesMixin, DocumentConsumeDelayMixin, APITestCase):
self.assertIn("ETag", response.headers)
self.assertEqual(
response.headers["ETag"],
- f"\"b'thisisachecksum':{settings.NUMBER_OF_SUGGESTED_DATES}\"",
+ f'"{classifier_checksum_hex}:{settings.NUMBER_OF_SUGGESTED_DATES}"',
)
- mocked_pickle_load.rest_mock()
- mocked_pickle_load.side_effect = mock_effect
-
response = self.client.get(f"/api/documents/{doc.pk}/suggestions/")
self.assertEqual(response.status_code, status.HTTP_200_OK)
- mocked_pickle_load.assert_called()
@mock.patch("documents.parsers.parse_date_generator")
@override_settings(NUMBER_OF_SUGGESTED_DATES=0)
@@ -2080,6 +2101,72 @@ class TestDocumentApi(DirectoriesMixin, DocumentConsumeDelayMixin, APITestCase):
self.assertEqual(resp.status_code, status.HTTP_200_OK)
self.assertEqual(resp.content, b"1")
+ def test_remove_inbox_tags(self):
+ """
+ GIVEN:
+ - Existing document with or without inbox tags
+ WHEN:
+ - API request to update document, with or without `remove_inbox_tags` flag
+ THEN:
+ - Inbox tags are removed as long as they are not being added
+ """
+ tag1 = Tag.objects.create(name="tag1", color="#abcdef")
+ inbox_tag1 = Tag.objects.create(
+ name="inbox1",
+ color="#abcdef",
+ is_inbox_tag=True,
+ )
+ inbox_tag2 = Tag.objects.create(
+ name="inbox2",
+ color="#abcdef",
+ is_inbox_tag=True,
+ )
+
+ doc1 = Document.objects.create(
+ title="test",
+ mime_type="application/pdf",
+ content="this is a document 1",
+ checksum="1",
+ )
+ doc1.tags.add(tag1)
+ doc1.tags.add(inbox_tag1)
+ doc1.tags.add(inbox_tag2)
+ doc1.save()
+
+ # Remove inbox tags defaults to false
+ resp = self.client.patch(
+ f"/api/documents/{doc1.pk}/",
+ {
+ "title": "New title",
+ },
+ )
+ doc1.refresh_from_db()
+ self.assertEqual(resp.status_code, status.HTTP_200_OK)
+ self.assertEqual(doc1.tags.count(), 3)
+
+ # Remove inbox tags set to true
+ resp = self.client.patch(
+ f"/api/documents/{doc1.pk}/",
+ {
+ "remove_inbox_tags": True,
+ },
+ )
+ doc1.refresh_from_db()
+ self.assertEqual(resp.status_code, status.HTTP_200_OK)
+ self.assertEqual(doc1.tags.count(), 1)
+
+ # Remove inbox tags set to true but adding a new inbox tag
+ resp = self.client.patch(
+ f"/api/documents/{doc1.pk}/",
+ {
+ "remove_inbox_tags": True,
+ "tags": [inbox_tag1.pk, tag1.pk],
+ },
+ )
+ doc1.refresh_from_db()
+ self.assertEqual(resp.status_code, status.HTTP_200_OK)
+ self.assertEqual(doc1.tags.count(), 2)
+
class TestDocumentApiV2(DirectoriesMixin, APITestCase):
def setUp(self):
diff --git a/src/documents/tests/test_api_permissions.py b/src/documents/tests/test_api_permissions.py
index a0b22586b..851608f37 100644
--- a/src/documents/tests/test_api_permissions.py
+++ b/src/documents/tests/test_api_permissions.py
@@ -700,8 +700,8 @@ class TestBulkEditObjectPermissions(APITestCase):
def setUp(self):
super().setUp()
- user = User.objects.create_superuser(username="temp_admin")
- self.client.force_authenticate(user=user)
+ self.temp_admin = User.objects.create_superuser(username="temp_admin")
+ self.client.force_authenticate(user=self.temp_admin)
self.t1 = Tag.objects.create(name="t1")
self.t2 = Tag.objects.create(name="t2")
@@ -822,6 +822,79 @@ class TestBulkEditObjectPermissions(APITestCase):
self.assertEqual(response.status_code, status.HTTP_200_OK)
self.assertEqual(StoragePath.objects.get(pk=self.sp1.id).owner, self.user3)
+ def test_bulk_object_set_permissions_merge(self):
+ """
+ GIVEN:
+ - Existing objects
+ WHEN:
+ - bulk_edit_object_perms API endpoint is called with merge=True or merge=False (default)
+ THEN:
+ - Permissions and / or owner are replaced or merged, depending on the merge flag
+ """
+ permissions = {
+ "view": {
+ "users": [self.user1.id, self.user2.id],
+ "groups": [],
+ },
+ "change": {
+ "users": [self.user1.id],
+ "groups": [],
+ },
+ }
+
+ assign_perm("view_tag", self.user3, self.t1)
+ self.t1.owner = self.user3
+ self.t1.save()
+
+ # merge=True
+ response = self.client.post(
+ "/api/bulk_edit_object_perms/",
+ json.dumps(
+ {
+ "objects": [self.t1.id, self.t2.id],
+ "object_type": "tags",
+ "owner": self.user1.id,
+ "permissions": permissions,
+ "merge": True,
+ },
+ ),
+ content_type="application/json",
+ )
+
+ self.t1.refresh_from_db()
+ self.t2.refresh_from_db()
+
+ self.assertEqual(response.status_code, status.HTTP_200_OK)
+ # user3 should still be owner of t1 since was set prior
+ self.assertEqual(self.t1.owner, self.user3)
+ # user1 should now be owner of t2 since it didn't have an owner
+ self.assertEqual(self.t2.owner, self.user1)
+
+ # user1 should be added
+ self.assertIn(self.user1, get_users_with_perms(self.t1))
+ # user3 should be preserved
+ self.assertIn(self.user3, get_users_with_perms(self.t1))
+
+ # merge=False (default)
+ response = self.client.post(
+ "/api/bulk_edit_object_perms/",
+ json.dumps(
+ {
+ "objects": [self.t1.id, self.t2.id],
+ "object_type": "tags",
+ "permissions": permissions,
+ "merge": False,
+ },
+ ),
+ content_type="application/json",
+ )
+
+ self.assertEqual(response.status_code, status.HTTP_200_OK)
+ # user1 should be added
+ self.assertIn(self.user1, get_users_with_perms(self.t1))
+ # user3 should be removed
+ self.assertNotIn(self.user3, get_users_with_perms(self.t1))
+
def test_bulk_edit_object_permissions_insufficient_perms(self):
"""
GIVEN:
diff --git a/src/documents/tests/test_bulk_edit.py b/src/documents/tests/test_bulk_edit.py
new file mode 100644
index 000000000..ad622ca24
--- /dev/null
+++ b/src/documents/tests/test_bulk_edit.py
@@ -0,0 +1,110 @@
+from unittest import mock
+
+from django.contrib.auth.models import Group
+from django.contrib.auth.models import User
+from django.test import TestCase
+from guardian.shortcuts import assign_perm
+from guardian.shortcuts import get_groups_with_perms
+from guardian.shortcuts import get_users_with_perms
+
+from documents.bulk_edit import set_permissions
+from documents.models import Document
+from documents.tests.utils import DirectoriesMixin
+
+
+class TestBulkEditPermissions(DirectoriesMixin, TestCase):
+ def setUp(self):
+ super().setUp()
+
+ self.doc1 = Document.objects.create(checksum="A", title="A")
+ self.doc2 = Document.objects.create(checksum="B", title="B")
+ self.doc3 = Document.objects.create(checksum="C", title="C")
+
+ self.owner = User.objects.create(username="test_owner")
+ self.user1 = User.objects.create(username="user1")
+ self.user2 = User.objects.create(username="user2")
+ self.group1 = Group.objects.create(name="group1")
+ self.group2 = Group.objects.create(name="group2")
+
+ @mock.patch("documents.tasks.bulk_update_documents.delay")
+ def test_set_permissions(self, m):
+ doc_ids = [self.doc1.id, self.doc2.id, self.doc3.id]
+
+ assign_perm("view_document", self.group1, self.doc1)
+
+ permissions = {
+ "view": {
+ "users": [self.user1.id, self.user2.id],
+ "groups": [self.group2.id],
+ },
+ "change": {
+ "users": [self.user1.id],
+ "groups": [self.group2.id],
+ },
+ }
+
+ set_permissions(
+ doc_ids,
+ set_permissions=permissions,
+ owner=self.owner,
+ merge=False,
+ )
+ m.assert_called_once()
+
+ self.assertEqual(Document.objects.filter(owner=self.owner).count(), 3)
+ self.assertEqual(Document.objects.filter(id__in=doc_ids).count(), 3)
+
+ users_with_perms = get_users_with_perms(
+ self.doc1,
+ )
+ self.assertEqual(users_with_perms.count(), 2)
+
+ # group1 should be replaced by group2
+ groups_with_perms = get_groups_with_perms(
+ self.doc1,
+ )
+ self.assertEqual(groups_with_perms.count(), 1)
+
+ @mock.patch("documents.tasks.bulk_update_documents.delay")
+ def test_set_permissions_merge(self, m):
+ doc_ids = [self.doc1.id, self.doc2.id, self.doc3.id]
+
+ self.doc1.owner = self.user1
+ self.doc1.save()
+
+ assign_perm("view_document", self.user1, self.doc1)
+ assign_perm("view_document", self.group1, self.doc1)
+
+ permissions = {
+ "view": {
+ "users": [self.user2.id],
+ "groups": [self.group2.id],
+ },
+ "change": {
+ "users": [self.user2.id],
+ "groups": [self.group2.id],
+ },
+ }
+ set_permissions(
+ doc_ids,
+ set_permissions=permissions,
+ owner=self.owner,
+ merge=True,
+ )
+ m.assert_called_once()
+
+ # when merge is true owner doesn't get replaced if its not empty
+ self.assertEqual(Document.objects.filter(owner=self.owner).count(), 2)
+ self.assertEqual(Document.objects.filter(id__in=doc_ids).count(), 3)
+
+ # merge of user1 which was pre-existing and user2
+ users_with_perms = get_users_with_perms(
+ self.doc1,
+ )
+ self.assertEqual(users_with_perms.count(), 2)
+
+ # group1 should be merged by group2
+ groups_with_perms = get_groups_with_perms(
+ self.doc1,
+ )
+ self.assertEqual(groups_with_perms.count(), 2)
diff --git a/src/documents/views.py b/src/documents/views.py
index 9d44ecbc4..0578cdb24 100644
--- a/src/documents/views.py
+++ b/src/documents/views.py
@@ -35,6 +35,7 @@ from django.utils.translation import get_language
from django.views import View
from django.views.decorators.cache import cache_control
from django.views.decorators.http import condition
+from django.views.decorators.http import last_modified
from django.views.generic import TemplateView
from django_filters.rest_framework import DjangoFilterBackend
from langdetect import detect
@@ -62,12 +63,21 @@ from documents import bulk_edit
from documents.bulk_download import ArchiveOnlyStrategy
from documents.bulk_download import OriginalAndArchiveStrategy
from documents.bulk_download import OriginalsOnlyStrategy
+from documents.caching import CACHE_50_MINUTES
+from documents.caching import get_metadata_cache
+from documents.caching import get_suggestion_cache
+from documents.caching import refresh_metadata_cache
+from documents.caching import refresh_suggestions_cache
+from documents.caching import set_metadata_cache
+from documents.caching import set_suggestions_cache
from documents.classifier import load_classifier
from documents.conditionals import metadata_etag
from documents.conditionals import metadata_last_modified
from documents.conditionals import preview_etag
+from documents.conditionals import preview_last_modified
from documents.conditionals import suggestions_etag
from documents.conditionals import suggestions_last_modified
+from documents.conditionals import thumbnail_last_modified
from documents.data_models import ConsumableDocument
from documents.data_models import DocumentMetadataOverrides
from documents.data_models import DocumentSource
@@ -379,10 +389,12 @@ class DocumentViewSet(
try:
return parser.extract_metadata(file, mime_type)
- except Exception:
+ except Exception: # pragma: no cover
+ logger.exception(f"Issue getting metadata for {file}")
# TODO: cover GPG errors, remove later.
return []
- else:
+ else: # pragma: no cover
+ logger.warning(f"No parser for {mime_type}")
return []
def get_filesize(self, filename):
@@ -407,16 +419,37 @@ class DocumentViewSet(
except Document.DoesNotExist:
raise Http404
+ document_cached_metadata = get_metadata_cache(doc.pk)
+
+ archive_metadata = None
+ archive_filesize = None
+ if document_cached_metadata is not None:
+ original_metadata = document_cached_metadata.original_metadata
+ archive_metadata = document_cached_metadata.archive_metadata
+ refresh_metadata_cache(doc.pk)
+ else:
+ original_metadata = self.get_metadata(doc.source_path, doc.mime_type)
+
+ if doc.has_archive_version:
+ archive_filesize = self.get_filesize(doc.archive_path)
+ archive_metadata = self.get_metadata(
+ doc.archive_path,
+ "application/pdf",
+ )
+ set_metadata_cache(doc, original_metadata, archive_metadata)
+
meta = {
"original_checksum": doc.checksum,
"original_size": self.get_filesize(doc.source_path),
"original_mime_type": doc.mime_type,
"media_filename": doc.filename,
"has_archive_version": doc.has_archive_version,
- "original_metadata": self.get_metadata(doc.source_path, doc.mime_type),
+ "original_metadata": original_metadata,
"archive_checksum": doc.archive_checksum,
"archive_media_filename": doc.archive_filename,
"original_filename": doc.original_filename,
+ "archive_size": archive_filesize,
+ "archive_metadata": archive_metadata,
}
lang = "en"
@@ -426,16 +459,6 @@ class DocumentViewSet(
pass
meta["lang"] = lang
- if doc.has_archive_version:
- meta["archive_size"] = self.get_filesize(doc.archive_path)
- meta["archive_metadata"] = self.get_metadata(
- doc.archive_path,
- "application/pdf",
- )
- else:
- meta["archive_size"] = None
- meta["archive_metadata"] = None
-
return Response(meta)
@action(methods=["get"], detail=True)
@@ -454,6 +477,12 @@ class DocumentViewSet(
):
return HttpResponseForbidden("Insufficient permissions")
+ document_suggestions = get_suggestion_cache(doc.pk)
+
+ if document_suggestions is not None:
+ refresh_suggestions_cache(doc.pk)
+ return Response(document_suggestions.suggestions)
+
classifier = load_classifier()
dates = []
@@ -463,27 +492,30 @@ class DocumentViewSet(
{i for i in itertools.islice(gen, settings.NUMBER_OF_SUGGESTED_DATES)},
)
- return Response(
- {
- "correspondents": [
- c.id for c in match_correspondents(doc, classifier, request.user)
- ],
- "tags": [t.id for t in match_tags(doc, classifier, request.user)],
- "document_types": [
- dt.id for dt in match_document_types(doc, classifier, request.user)
- ],
- "storage_paths": [
- dt.id for dt in match_storage_paths(doc, classifier, request.user)
- ],
- "dates": [
- date.strftime("%Y-%m-%d") for date in dates if date is not None
- ],
- },
- )
+ resp_data = {
+ "correspondents": [
+ c.id for c in match_correspondents(doc, classifier, request.user)
+ ],
+ "tags": [t.id for t in match_tags(doc, classifier, request.user)],
+ "document_types": [
+ dt.id for dt in match_document_types(doc, classifier, request.user)
+ ],
+ "storage_paths": [
+ dt.id for dt in match_storage_paths(doc, classifier, request.user)
+ ],
+ "dates": [date.strftime("%Y-%m-%d") for date in dates if date is not None],
+ }
+
+ # Cache the suggestions and the classifier hash for later
+ set_suggestions_cache(doc.pk, resp_data, classifier)
+
+ return Response(resp_data)
@action(methods=["get"], detail=True)
@method_decorator(cache_control(public=False, max_age=5 * 60))
- @method_decorator(condition(etag_func=preview_etag))
+ @method_decorator(
+ condition(etag_func=preview_etag, last_modified_func=preview_last_modified),
+ )
def preview(self, request, pk=None):
try:
response = self.file_response(pk, request, "inline")
@@ -492,7 +524,8 @@ class DocumentViewSet(
raise Http404
@action(methods=["get"], detail=True)
- @method_decorator(cache_control(public=False, max_age=315360000))
+ @method_decorator(cache_control(public=False, max_age=CACHE_50_MINUTES))
+ @method_decorator(last_modified(thumbnail_last_modified))
def thumb(self, request, pk=None):
try:
doc = Document.objects.get(id=pk)
@@ -506,8 +539,6 @@ class DocumentViewSet(
handle = GnuPG.decrypted(doc.thumbnail_file)
else:
handle = doc.thumbnail_file
- # TODO: Send ETag information and use that to send new thumbnails
- # if available
return HttpResponse(handle, content_type="image/webp")
except (FileNotFoundError, Document.DoesNotExist):
@@ -1385,6 +1416,7 @@ class BulkEditObjectPermissionsView(GenericAPIView, PassUserMixin):
object_class = serializer.get_object_class(object_type)
permissions = serializer.validated_data.get("permissions")
owner = serializer.validated_data.get("owner")
+ merge = serializer.validated_data.get("merge")
if not user.is_superuser:
objs = object_class.objects.filter(pk__in=object_ids)
@@ -1396,12 +1428,21 @@ class BulkEditObjectPermissionsView(GenericAPIView, PassUserMixin):
try:
qs = object_class.objects.filter(id__in=object_ids)
- if "owner" in serializer.validated_data:
- qs.update(owner=owner)
+ # if merge is true, we dont want to remove the owner
+ if "owner" in serializer.validated_data and (
+ not merge or (merge and owner is not None)
+ ):
+ # if merge is true, we dont want to overwrite the owner
+ qs_owner_update = qs.filter(owner__isnull=True) if merge else qs
+ qs_owner_update.update(owner=owner)
if "permissions" in serializer.validated_data:
for obj in qs:
- set_permissions_for_object(permissions, obj)
+ set_permissions_for_object(
+ permissions=permissions,
+ object=obj,
+ merge=merge,
+ )
return Response({"result": "OK"})
except Exception as e:
diff --git a/src/locale/ar_AR/LC_MESSAGES/django.po b/src/locale/ar_AR/LC_MESSAGES/django.po
index 426f9910f..a14e82ec6 100644
--- a/src/locale/ar_AR/LC_MESSAGES/django.po
+++ b/src/locale/ar_AR/LC_MESSAGES/django.po
@@ -3,7 +3,7 @@ msgstr ""
"Project-Id-Version: paperless-ngx\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2024-01-05 21:26-0800\n"
-"PO-Revision-Date: 2024-01-25 22:18\n"
+"PO-Revision-Date: 2024-01-27 00:22\n"
"Last-Translator: \n"
"Language-Team: Arabic\n"
"Language: ar_SA\n"
@@ -931,7 +931,7 @@ msgstr "لا ورقي"
#: paperless/models.py:25
msgid "pdf"
-msgstr ""
+msgstr "pdf"
#: paperless/models.py:26
msgid "pdfa"
@@ -951,15 +951,15 @@ msgstr ""
#: paperless/models.py:38
msgid "skip"
-msgstr ""
+msgstr "تخطي"
#: paperless/models.py:39
msgid "redo"
-msgstr ""
+msgstr "إعادة"
#: paperless/models.py:40
msgid "force"
-msgstr ""
+msgstr "إجبار"
#: paperless/models.py:41
msgid "skip_noarchive"
@@ -967,7 +967,7 @@ msgstr ""
#: paperless/models.py:49
msgid "never"
-msgstr ""
+msgstr "أبداً"
#: paperless/models.py:50
msgid "with_text"
@@ -975,7 +975,7 @@ msgstr ""
#: paperless/models.py:51
msgid "always"
-msgstr ""
+msgstr "دائماً"
#: paperless/models.py:59
msgid "clean"
@@ -987,7 +987,7 @@ msgstr ""
#: paperless/models.py:61
msgid "none"
-msgstr ""
+msgstr "لا شيء"
#: paperless/models.py:69
msgid "LeaveColorUnchanged"
@@ -995,7 +995,7 @@ msgstr ""
#: paperless/models.py:70
msgid "RGB"
-msgstr ""
+msgstr "RGB"
#: paperless/models.py:71
msgid "UseDeviceIndependentColor"
@@ -1003,15 +1003,15 @@ msgstr ""
#: paperless/models.py:72
msgid "Gray"
-msgstr ""
+msgstr "رمادي"
#: paperless/models.py:73
msgid "CMYK"
-msgstr ""
+msgstr "CMYK"
#: paperless/models.py:82
msgid "Sets the output PDF type"
-msgstr ""
+msgstr "تعيين نوع إخراج PDF"
#: paperless/models.py:94
msgid "Do OCR from page 1 to this value"
diff --git a/src/locale/de_DE/LC_MESSAGES/django.po b/src/locale/de_DE/LC_MESSAGES/django.po
index 7ca31681a..ca6feea0b 100644
--- a/src/locale/de_DE/LC_MESSAGES/django.po
+++ b/src/locale/de_DE/LC_MESSAGES/django.po
@@ -3,7 +3,7 @@ msgstr ""
"Project-Id-Version: paperless-ngx\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2024-01-05 21:26-0800\n"
-"PO-Revision-Date: 2024-01-19 12:09\n"
+"PO-Revision-Date: 2024-01-27 00:22\n"
"Last-Translator: \n"
"Language-Team: German\n"
"Language: de_DE\n"
@@ -601,7 +601,7 @@ msgstr "Benutzerdefiniertes Feld"
#: documents/models.py:782
msgid "custom fields"
-msgstr "Benutzerdefinierte Felder"
+msgstr "Benutzerdef. Felder"
#: documents/models.py:844
msgid "custom field instance"
diff --git a/src/locale/el_GR/LC_MESSAGES/django.po b/src/locale/el_GR/LC_MESSAGES/django.po
index 262c6b2ec..a88d02f75 100644
--- a/src/locale/el_GR/LC_MESSAGES/django.po
+++ b/src/locale/el_GR/LC_MESSAGES/django.po
@@ -3,7 +3,7 @@ msgstr ""
"Project-Id-Version: paperless-ngx\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2024-01-05 21:26-0800\n"
-"PO-Revision-Date: 2024-01-22 12:09\n"
+"PO-Revision-Date: 2024-01-27 12:08\n"
"Last-Translator: \n"
"Language-Team: Greek\n"
"Language: el_GR\n"
@@ -425,11 +425,11 @@ msgstr "δεν έχει ιδιοκτήτη σε"
#: documents/models.py:458
msgid "has custom field value"
-msgstr ""
+msgstr "έχει προσαρμοσμένη τιμή πεδίου"
#: documents/models.py:459
msgid "is shared by me"
-msgstr ""
+msgstr "μοιράζεται από μένα"
#: documents/models.py:469
msgid "rule type"
@@ -613,7 +613,7 @@ msgstr "στιγμιότυπα προσαρμοσμένων πεδίων"
#: documents/models.py:902
msgid "Consumption Started"
-msgstr ""
+msgstr "Η Κατανάλωση Ξεκίνησε"
#: documents/models.py:903
msgid "Document Added"
@@ -753,7 +753,7 @@ msgstr ""
#: documents/models.py:1114
msgid "actions"
-msgstr ""
+msgstr "ενέργειες"
#: documents/models.py:1117
msgid "enabled"
@@ -939,15 +939,15 @@ msgstr "pdfa"
#: paperless/models.py:27
msgid "pdfa-1"
-msgstr ""
+msgstr "pdfa-1"
#: paperless/models.py:28
msgid "pdfa-2"
-msgstr ""
+msgstr "pdfa-2"
#: paperless/models.py:29
msgid "pdfa-3"
-msgstr ""
+msgstr "pdfa-3"
#: paperless/models.py:38
msgid "skip"
@@ -967,7 +967,7 @@ msgstr ""
#: paperless/models.py:49
msgid "never"
-msgstr ""
+msgstr "ποτέ"
#: paperless/models.py:50
msgid "with_text"
diff --git a/src/locale/en_US/LC_MESSAGES/django.po b/src/locale/en_US/LC_MESSAGES/django.po
index ce77ebe79..0c7242462 100644
--- a/src/locale/en_US/LC_MESSAGES/django.po
+++ b/src/locale/en_US/LC_MESSAGES/django.po
@@ -2,7 +2,7 @@ msgid ""
msgstr ""
"Project-Id-Version: paperless-ngx\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2024-01-05 21:26-0800\n"
+"POT-Creation-Date: 2024-02-02 20:17-0800\n"
"PO-Revision-Date: 2022-02-17 04:17\n"
"Last-Translator: \n"
"Language-Team: English\n"
@@ -21,31 +21,31 @@ msgstr ""
msgid "Documents"
msgstr ""
-#: documents/models.py:36 documents/models.py:736
+#: documents/models.py:36 documents/models.py:739
msgid "owner"
msgstr ""
-#: documents/models.py:53 documents/models.py:894
+#: documents/models.py:53 documents/models.py:897
msgid "None"
msgstr ""
-#: documents/models.py:54 documents/models.py:895
+#: documents/models.py:54 documents/models.py:898
msgid "Any word"
msgstr ""
-#: documents/models.py:55 documents/models.py:896
+#: documents/models.py:55 documents/models.py:899
msgid "All words"
msgstr ""
-#: documents/models.py:56 documents/models.py:897
+#: documents/models.py:56 documents/models.py:900
msgid "Exact match"
msgstr ""
-#: documents/models.py:57 documents/models.py:898
+#: documents/models.py:57 documents/models.py:901
msgid "Regular expression"
msgstr ""
-#: documents/models.py:58 documents/models.py:899
+#: documents/models.py:58 documents/models.py:902
msgid "Fuzzy word"
msgstr ""
@@ -53,20 +53,20 @@ msgstr ""
msgid "Automatic"
msgstr ""
-#: documents/models.py:62 documents/models.py:402 documents/models.py:1099
+#: documents/models.py:62 documents/models.py:397 documents/models.py:1102
#: paperless_mail/models.py:18 paperless_mail/models.py:93
msgid "name"
msgstr ""
-#: documents/models.py:64 documents/models.py:955
+#: documents/models.py:64 documents/models.py:958
msgid "match"
msgstr ""
-#: documents/models.py:67 documents/models.py:958
+#: documents/models.py:67 documents/models.py:961
msgid "matching algorithm"
msgstr ""
-#: documents/models.py:72 documents/models.py:963
+#: documents/models.py:72 documents/models.py:966
msgid "is insensitive"
msgstr ""
@@ -132,7 +132,7 @@ msgstr ""
msgid "title"
msgstr ""
-#: documents/models.py:171 documents/models.py:650
+#: documents/models.py:171 documents/models.py:653
msgid "content"
msgstr ""
@@ -162,8 +162,8 @@ msgstr ""
msgid "The checksum of the archived document."
msgstr ""
-#: documents/models.py:205 documents/models.py:385 documents/models.py:656
-#: documents/models.py:694 documents/models.py:764 documents/models.py:801
+#: documents/models.py:205 documents/models.py:385 documents/models.py:659
+#: documents/models.py:697 documents/models.py:767 documents/models.py:804
msgid "created"
msgstr ""
@@ -211,7 +211,7 @@ msgstr ""
msgid "The position of this document in your physical document archive."
msgstr ""
-#: documents/models.py:279 documents/models.py:667 documents/models.py:721
+#: documents/models.py:279 documents/models.py:670 documents/models.py:724
msgid "document"
msgstr ""
@@ -259,530 +259,530 @@ msgstr ""
msgid "logs"
msgstr ""
-#: documents/models.py:399 documents/models.py:466
-msgid "saved view"
-msgstr ""
-
#: documents/models.py:400
-msgid "saved views"
-msgstr ""
-
-#: documents/models.py:405
msgid "show on dashboard"
msgstr ""
-#: documents/models.py:408
+#: documents/models.py:403
msgid "show in sidebar"
msgstr ""
-#: documents/models.py:412
+#: documents/models.py:407
msgid "sort field"
msgstr ""
-#: documents/models.py:417
+#: documents/models.py:412
msgid "sort reverse"
msgstr ""
-#: documents/models.py:422
-msgid "title contains"
+#: documents/models.py:416 documents/models.py:469
+msgid "saved view"
msgstr ""
-#: documents/models.py:423
-msgid "content contains"
-msgstr ""
-
-#: documents/models.py:424
-msgid "ASN is"
+#: documents/models.py:417
+msgid "saved views"
msgstr ""
#: documents/models.py:425
-msgid "correspondent is"
+msgid "title contains"
msgstr ""
#: documents/models.py:426
-msgid "document type is"
+msgid "content contains"
msgstr ""
#: documents/models.py:427
-msgid "is in inbox"
+msgid "ASN is"
msgstr ""
#: documents/models.py:428
-msgid "has tag"
+msgid "correspondent is"
msgstr ""
#: documents/models.py:429
-msgid "has any tag"
+msgid "document type is"
msgstr ""
#: documents/models.py:430
-msgid "created before"
+msgid "is in inbox"
msgstr ""
#: documents/models.py:431
-msgid "created after"
+msgid "has tag"
msgstr ""
#: documents/models.py:432
-msgid "created year is"
+msgid "has any tag"
msgstr ""
#: documents/models.py:433
-msgid "created month is"
+msgid "created before"
msgstr ""
#: documents/models.py:434
-msgid "created day is"
+msgid "created after"
msgstr ""
#: documents/models.py:435
-msgid "added before"
+msgid "created year is"
msgstr ""
#: documents/models.py:436
-msgid "added after"
+msgid "created month is"
msgstr ""
#: documents/models.py:437
-msgid "modified before"
+msgid "created day is"
msgstr ""
#: documents/models.py:438
-msgid "modified after"
+msgid "added before"
msgstr ""
#: documents/models.py:439
-msgid "does not have tag"
+msgid "added after"
msgstr ""
#: documents/models.py:440
-msgid "does not have ASN"
+msgid "modified before"
msgstr ""
#: documents/models.py:441
-msgid "title or content contains"
+msgid "modified after"
msgstr ""
#: documents/models.py:442
-msgid "fulltext query"
+msgid "does not have tag"
msgstr ""
#: documents/models.py:443
-msgid "more like this"
+msgid "does not have ASN"
msgstr ""
#: documents/models.py:444
-msgid "has tags in"
+msgid "title or content contains"
msgstr ""
#: documents/models.py:445
-msgid "ASN greater than"
+msgid "fulltext query"
msgstr ""
#: documents/models.py:446
-msgid "ASN less than"
+msgid "more like this"
msgstr ""
#: documents/models.py:447
-msgid "storage path is"
+msgid "has tags in"
msgstr ""
#: documents/models.py:448
-msgid "has correspondent in"
+msgid "ASN greater than"
msgstr ""
#: documents/models.py:449
-msgid "does not have correspondent in"
+msgid "ASN less than"
msgstr ""
#: documents/models.py:450
-msgid "has document type in"
+msgid "storage path is"
msgstr ""
#: documents/models.py:451
-msgid "does not have document type in"
+msgid "has correspondent in"
msgstr ""
#: documents/models.py:452
-msgid "has storage path in"
+msgid "does not have correspondent in"
msgstr ""
#: documents/models.py:453
-msgid "does not have storage path in"
+msgid "has document type in"
msgstr ""
#: documents/models.py:454
-msgid "owner is"
+msgid "does not have document type in"
msgstr ""
#: documents/models.py:455
-msgid "has owner in"
+msgid "has storage path in"
msgstr ""
#: documents/models.py:456
-msgid "does not have owner"
+msgid "does not have storage path in"
msgstr ""
#: documents/models.py:457
-msgid "does not have owner in"
+msgid "owner is"
msgstr ""
#: documents/models.py:458
-msgid "has custom field value"
+msgid "has owner in"
msgstr ""
#: documents/models.py:459
+msgid "does not have owner"
+msgstr ""
+
+#: documents/models.py:460
+msgid "does not have owner in"
+msgstr ""
+
+#: documents/models.py:461
+msgid "has custom field value"
+msgstr ""
+
+#: documents/models.py:462
msgid "is shared by me"
msgstr ""
-#: documents/models.py:469
+#: documents/models.py:472
msgid "rule type"
msgstr ""
-#: documents/models.py:471
+#: documents/models.py:474
msgid "value"
msgstr ""
-#: documents/models.py:474
+#: documents/models.py:477
msgid "filter rule"
msgstr ""
-#: documents/models.py:475
+#: documents/models.py:478
msgid "filter rules"
msgstr ""
-#: documents/models.py:586
+#: documents/models.py:589
msgid "Task ID"
msgstr ""
-#: documents/models.py:587
+#: documents/models.py:590
msgid "Celery ID for the Task that was run"
msgstr ""
-#: documents/models.py:592
+#: documents/models.py:595
msgid "Acknowledged"
msgstr ""
-#: documents/models.py:593
+#: documents/models.py:596
msgid "If the task is acknowledged via the frontend or API"
msgstr ""
-#: documents/models.py:599
+#: documents/models.py:602
msgid "Task Filename"
msgstr ""
-#: documents/models.py:600
+#: documents/models.py:603
msgid "Name of the file which the Task was run for"
msgstr ""
-#: documents/models.py:606
+#: documents/models.py:609
msgid "Task Name"
msgstr ""
-#: documents/models.py:607
+#: documents/models.py:610
msgid "Name of the Task which was run"
msgstr ""
-#: documents/models.py:614
+#: documents/models.py:617
msgid "Task State"
msgstr ""
-#: documents/models.py:615
+#: documents/models.py:618
msgid "Current state of the task being run"
msgstr ""
-#: documents/models.py:620
+#: documents/models.py:623
msgid "Created DateTime"
msgstr ""
-#: documents/models.py:621
+#: documents/models.py:624
msgid "Datetime field when the task result was created in UTC"
msgstr ""
-#: documents/models.py:626
+#: documents/models.py:629
msgid "Started DateTime"
msgstr ""
-#: documents/models.py:627
+#: documents/models.py:630
msgid "Datetime field when the task was started in UTC"
msgstr ""
-#: documents/models.py:632
+#: documents/models.py:635
msgid "Completed DateTime"
msgstr ""
-#: documents/models.py:633
+#: documents/models.py:636
msgid "Datetime field when the task was completed in UTC"
msgstr ""
-#: documents/models.py:638
+#: documents/models.py:641
msgid "Result Data"
msgstr ""
-#: documents/models.py:640
+#: documents/models.py:643
msgid "The data returned by the task"
msgstr ""
-#: documents/models.py:652
+#: documents/models.py:655
msgid "Note for the document"
msgstr ""
-#: documents/models.py:676
+#: documents/models.py:679
msgid "user"
msgstr ""
-#: documents/models.py:681
+#: documents/models.py:684
msgid "note"
msgstr ""
-#: documents/models.py:682
+#: documents/models.py:685
msgid "notes"
msgstr ""
-#: documents/models.py:690
+#: documents/models.py:693
msgid "Archive"
msgstr ""
-#: documents/models.py:691
+#: documents/models.py:694
msgid "Original"
msgstr ""
-#: documents/models.py:702
+#: documents/models.py:705
msgid "expiration"
msgstr ""
-#: documents/models.py:709
+#: documents/models.py:712
msgid "slug"
msgstr ""
-#: documents/models.py:741
+#: documents/models.py:744
msgid "share link"
msgstr ""
-#: documents/models.py:742
+#: documents/models.py:745
msgid "share links"
msgstr ""
-#: documents/models.py:754
+#: documents/models.py:757
msgid "String"
msgstr ""
-#: documents/models.py:755
+#: documents/models.py:758
msgid "URL"
msgstr ""
-#: documents/models.py:756
+#: documents/models.py:759
msgid "Date"
msgstr ""
-#: documents/models.py:757
+#: documents/models.py:760
msgid "Boolean"
msgstr ""
-#: documents/models.py:758
+#: documents/models.py:761
msgid "Integer"
msgstr ""
-#: documents/models.py:759
+#: documents/models.py:762
msgid "Float"
msgstr ""
-#: documents/models.py:760
+#: documents/models.py:763
msgid "Monetary"
msgstr ""
-#: documents/models.py:761
+#: documents/models.py:764
msgid "Document Link"
msgstr ""
-#: documents/models.py:773
+#: documents/models.py:776
msgid "data type"
msgstr ""
-#: documents/models.py:781
+#: documents/models.py:784
msgid "custom field"
msgstr ""
-#: documents/models.py:782
+#: documents/models.py:785
msgid "custom fields"
msgstr ""
-#: documents/models.py:844
+#: documents/models.py:847
msgid "custom field instance"
msgstr ""
-#: documents/models.py:845
+#: documents/models.py:848
msgid "custom field instances"
msgstr ""
-#: documents/models.py:902
+#: documents/models.py:905
msgid "Consumption Started"
msgstr ""
-#: documents/models.py:903
+#: documents/models.py:906
msgid "Document Added"
msgstr ""
-#: documents/models.py:904
+#: documents/models.py:907
msgid "Document Updated"
msgstr ""
-#: documents/models.py:907
+#: documents/models.py:910
msgid "Consume Folder"
msgstr ""
-#: documents/models.py:908
+#: documents/models.py:911
msgid "Api Upload"
msgstr ""
-#: documents/models.py:909
+#: documents/models.py:912
msgid "Mail Fetch"
msgstr ""
-#: documents/models.py:912
+#: documents/models.py:915
msgid "Workflow Trigger Type"
msgstr ""
-#: documents/models.py:924
+#: documents/models.py:927
msgid "filter path"
msgstr ""
-#: documents/models.py:929
+#: documents/models.py:932
msgid ""
"Only consume documents with a path that matches this if specified. Wildcards "
"specified as * are allowed. Case insensitive."
msgstr ""
-#: documents/models.py:936
+#: documents/models.py:939
msgid "filter filename"
msgstr ""
-#: documents/models.py:941 paperless_mail/models.py:148
+#: documents/models.py:944 paperless_mail/models.py:148
msgid ""
"Only consume documents which entirely match this filename if specified. "
"Wildcards such as *.pdf or *invoice* are allowed. Case insensitive."
msgstr ""
-#: documents/models.py:952
+#: documents/models.py:955
msgid "filter documents from this mail rule"
msgstr ""
-#: documents/models.py:968
+#: documents/models.py:971
msgid "has these tag(s)"
msgstr ""
-#: documents/models.py:976
+#: documents/models.py:979
msgid "has this document type"
msgstr ""
-#: documents/models.py:984
+#: documents/models.py:987
msgid "has this correspondent"
msgstr ""
-#: documents/models.py:988
+#: documents/models.py:991
msgid "workflow trigger"
msgstr ""
-#: documents/models.py:989
+#: documents/models.py:992
msgid "workflow triggers"
msgstr ""
-#: documents/models.py:997
+#: documents/models.py:1000
msgid "Assignment"
msgstr ""
-#: documents/models.py:1000
+#: documents/models.py:1003
msgid "Workflow Action Type"
msgstr ""
-#: documents/models.py:1006
+#: documents/models.py:1009
msgid "assign title"
msgstr ""
-#: documents/models.py:1011
+#: documents/models.py:1014
msgid ""
"Assign a document title, can include some placeholders, see documentation."
msgstr ""
-#: documents/models.py:1019 paperless_mail/models.py:216
+#: documents/models.py:1022 paperless_mail/models.py:216
msgid "assign this tag"
msgstr ""
-#: documents/models.py:1027 paperless_mail/models.py:224
+#: documents/models.py:1030 paperless_mail/models.py:224
msgid "assign this document type"
msgstr ""
-#: documents/models.py:1035 paperless_mail/models.py:238
+#: documents/models.py:1038 paperless_mail/models.py:238
msgid "assign this correspondent"
msgstr ""
-#: documents/models.py:1043
+#: documents/models.py:1046
msgid "assign this storage path"
msgstr ""
-#: documents/models.py:1052
+#: documents/models.py:1055
msgid "assign this owner"
msgstr ""
-#: documents/models.py:1059
+#: documents/models.py:1062
msgid "grant view permissions to these users"
msgstr ""
-#: documents/models.py:1066
+#: documents/models.py:1069
msgid "grant view permissions to these groups"
msgstr ""
-#: documents/models.py:1073
+#: documents/models.py:1076
msgid "grant change permissions to these users"
msgstr ""
-#: documents/models.py:1080
+#: documents/models.py:1083
msgid "grant change permissions to these groups"
msgstr ""
-#: documents/models.py:1087
+#: documents/models.py:1090
msgid "assign these custom fields"
msgstr ""
-#: documents/models.py:1091
+#: documents/models.py:1094
msgid "workflow action"
msgstr ""
-#: documents/models.py:1092
+#: documents/models.py:1095
msgid "workflow actions"
msgstr ""
-#: documents/models.py:1101 paperless_mail/models.py:95
+#: documents/models.py:1104 paperless_mail/models.py:95
msgid "order"
msgstr ""
-#: documents/models.py:1107
+#: documents/models.py:1110
msgid "triggers"
msgstr ""
-#: documents/models.py:1114
+#: documents/models.py:1117
msgid "actions"
msgstr ""
-#: documents/models.py:1117
+#: documents/models.py:1120
msgid "enabled"
msgstr ""
-#: documents/serialisers.py:111
+#: documents/serialisers.py:112
#, python-format
msgid "Invalid regular expression: %(error)s"
msgstr ""
-#: documents/serialisers.py:405
+#: documents/serialisers.py:406
msgid "Invalid color."
msgstr ""
-#: documents/serialisers.py:999
+#: documents/serialisers.py:1049
#, python-format
msgid "File type %(type)s not supported"
msgstr ""
-#: documents/serialisers.py:1102
+#: documents/serialisers.py:1152
msgid "Invalid variable detected."
msgstr ""
@@ -944,267 +944,279 @@ msgstr ""
msgid "Paperless"
msgstr ""
-#: paperless/models.py:25
+#: paperless/models.py:26
msgid "pdf"
msgstr ""
-#: paperless/models.py:26
+#: paperless/models.py:27
msgid "pdfa"
msgstr ""
-#: paperless/models.py:27
+#: paperless/models.py:28
msgid "pdfa-1"
msgstr ""
-#: paperless/models.py:28
+#: paperless/models.py:29
msgid "pdfa-2"
msgstr ""
-#: paperless/models.py:29
+#: paperless/models.py:30
msgid "pdfa-3"
msgstr ""
-#: paperless/models.py:38
+#: paperless/models.py:39
msgid "skip"
msgstr ""
-#: paperless/models.py:39
+#: paperless/models.py:40
msgid "redo"
msgstr ""
-#: paperless/models.py:40
+#: paperless/models.py:41
msgid "force"
msgstr ""
-#: paperless/models.py:41
+#: paperless/models.py:42
msgid "skip_noarchive"
msgstr ""
-#: paperless/models.py:49
+#: paperless/models.py:50
msgid "never"
msgstr ""
-#: paperless/models.py:50
+#: paperless/models.py:51
msgid "with_text"
msgstr ""
-#: paperless/models.py:51
+#: paperless/models.py:52
msgid "always"
msgstr ""
-#: paperless/models.py:59
+#: paperless/models.py:60
msgid "clean"
msgstr ""
-#: paperless/models.py:60
+#: paperless/models.py:61
msgid "clean-final"
msgstr ""
-#: paperless/models.py:61
+#: paperless/models.py:62
msgid "none"
msgstr ""
-#: paperless/models.py:69
+#: paperless/models.py:70
msgid "LeaveColorUnchanged"
msgstr ""
-#: paperless/models.py:70
+#: paperless/models.py:71
msgid "RGB"
msgstr ""
-#: paperless/models.py:71
+#: paperless/models.py:72
msgid "UseDeviceIndependentColor"
msgstr ""
-#: paperless/models.py:72
+#: paperless/models.py:73
msgid "Gray"
msgstr ""
-#: paperless/models.py:73
+#: paperless/models.py:74
msgid "CMYK"
msgstr ""
-#: paperless/models.py:82
+#: paperless/models.py:83
msgid "Sets the output PDF type"
msgstr ""
-#: paperless/models.py:94
+#: paperless/models.py:95
msgid "Do OCR from page 1 to this value"
msgstr ""
-#: paperless/models.py:100
+#: paperless/models.py:101
msgid "Do OCR using these languages"
msgstr ""
-#: paperless/models.py:107
+#: paperless/models.py:108
msgid "Sets the OCR mode"
msgstr ""
-#: paperless/models.py:115
+#: paperless/models.py:116
msgid "Controls the generation of an archive file"
msgstr ""
-#: paperless/models.py:123
+#: paperless/models.py:124
msgid "Sets image DPI fallback value"
msgstr ""
-#: paperless/models.py:130
+#: paperless/models.py:131
msgid "Controls the unpaper cleaning"
msgstr ""
-#: paperless/models.py:137
+#: paperless/models.py:138
msgid "Enables deskew"
msgstr ""
-#: paperless/models.py:140
+#: paperless/models.py:141
msgid "Enables page rotation"
msgstr ""
-#: paperless/models.py:145
+#: paperless/models.py:146
msgid "Sets the threshold for rotation of pages"
msgstr ""
-#: paperless/models.py:151
+#: paperless/models.py:152
msgid "Sets the maximum image size for decompression"
msgstr ""
-#: paperless/models.py:157
+#: paperless/models.py:158
msgid "Sets the Ghostscript color conversion strategy"
msgstr ""
-#: paperless/models.py:165
+#: paperless/models.py:166
msgid "Adds additional user arguments for OCRMyPDF"
msgstr ""
-#: paperless/models.py:170
+#: paperless/models.py:171
+msgid "Application title"
+msgstr ""
+
+#: paperless/models.py:178
+msgid "Application logo"
+msgstr ""
+
+#: paperless/models.py:188
msgid "paperless application settings"
msgstr ""
-#: paperless/settings.py:601
+#: paperless/settings.py:617
msgid "English (US)"
msgstr ""
-#: paperless/settings.py:602
+#: paperless/settings.py:618
msgid "Arabic"
msgstr ""
-#: paperless/settings.py:603
+#: paperless/settings.py:619
msgid "Afrikaans"
msgstr ""
-#: paperless/settings.py:604
+#: paperless/settings.py:620
msgid "Belarusian"
msgstr ""
-#: paperless/settings.py:605
+#: paperless/settings.py:621
msgid "Bulgarian"
msgstr ""
-#: paperless/settings.py:606
+#: paperless/settings.py:622
msgid "Catalan"
msgstr ""
-#: paperless/settings.py:607
+#: paperless/settings.py:623
msgid "Czech"
msgstr ""
-#: paperless/settings.py:608
+#: paperless/settings.py:624
msgid "Danish"
msgstr ""
-#: paperless/settings.py:609
+#: paperless/settings.py:625
msgid "German"
msgstr ""
-#: paperless/settings.py:610
+#: paperless/settings.py:626
msgid "Greek"
msgstr ""
-#: paperless/settings.py:611
+#: paperless/settings.py:627
msgid "English (GB)"
msgstr ""
-#: paperless/settings.py:612
+#: paperless/settings.py:628
msgid "Spanish"
msgstr ""
-#: paperless/settings.py:613
+#: paperless/settings.py:629
msgid "Finnish"
msgstr ""
-#: paperless/settings.py:614
+#: paperless/settings.py:630
msgid "French"
msgstr ""
-#: paperless/settings.py:615
+#: paperless/settings.py:631
msgid "Hungarian"
msgstr ""
-#: paperless/settings.py:616
+#: paperless/settings.py:632
msgid "Italian"
msgstr ""
-#: paperless/settings.py:617
+#: paperless/settings.py:633
+msgid "Japanese"
+msgstr ""
+
+#: paperless/settings.py:634
msgid "Luxembourgish"
msgstr ""
-#: paperless/settings.py:618
+#: paperless/settings.py:635
msgid "Norwegian"
msgstr ""
-#: paperless/settings.py:619
+#: paperless/settings.py:636
msgid "Dutch"
msgstr ""
-#: paperless/settings.py:620
+#: paperless/settings.py:637
msgid "Polish"
msgstr ""
-#: paperless/settings.py:621
+#: paperless/settings.py:638
msgid "Portuguese (Brazil)"
msgstr ""
-#: paperless/settings.py:622
+#: paperless/settings.py:639
msgid "Portuguese"
msgstr ""
-#: paperless/settings.py:623
+#: paperless/settings.py:640
msgid "Romanian"
msgstr ""
-#: paperless/settings.py:624
+#: paperless/settings.py:641
msgid "Russian"
msgstr ""
-#: paperless/settings.py:625
+#: paperless/settings.py:642
msgid "Slovak"
msgstr ""
-#: paperless/settings.py:626
+#: paperless/settings.py:643
msgid "Slovenian"
msgstr ""
-#: paperless/settings.py:627
+#: paperless/settings.py:644
msgid "Serbian"
msgstr ""
-#: paperless/settings.py:628
+#: paperless/settings.py:645
msgid "Swedish"
msgstr ""
-#: paperless/settings.py:629
+#: paperless/settings.py:646
msgid "Turkish"
msgstr ""
-#: paperless/settings.py:630
+#: paperless/settings.py:647
msgid "Ukrainian"
msgstr ""
-#: paperless/settings.py:631
+#: paperless/settings.py:648
msgid "Chinese Simplified"
msgstr ""
-#: paperless/urls.py:205
+#: paperless/urls.py:214
msgid "Paperless-ngx administration"
msgstr ""
diff --git a/src/locale/fr_FR/LC_MESSAGES/django.po b/src/locale/fr_FR/LC_MESSAGES/django.po
index 27064025e..fb2bed995 100644
--- a/src/locale/fr_FR/LC_MESSAGES/django.po
+++ b/src/locale/fr_FR/LC_MESSAGES/django.po
@@ -3,7 +3,7 @@ msgstr ""
"Project-Id-Version: paperless-ngx\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2024-01-05 21:26-0800\n"
-"PO-Revision-Date: 2024-01-25 00:24\n"
+"PO-Revision-Date: 2024-01-28 00:24\n"
"Last-Translator: \n"
"Language-Team: French\n"
"Language: fr_FR\n"
diff --git a/src/paperless/auth.py b/src/paperless/auth.py
index a23b01cb4..98e2a8b30 100644
--- a/src/paperless/auth.py
+++ b/src/paperless/auth.py
@@ -47,3 +47,11 @@ class HttpRemoteUserMiddleware(PersistentRemoteUserMiddleware):
"""
header = settings.HTTP_REMOTE_USER_HEADER_NAME
+
+
+class PaperlessRemoteUserAuthentication(authentication.RemoteUserAuthentication):
+ """
+ REMOTE_USER authentication for DRF which overrides the default header.
+ """
+
+ header = settings.HTTP_REMOTE_USER_HEADER_NAME
diff --git a/src/paperless/settings.py b/src/paperless/settings.py
index eb33e6241..4f7894acc 100644
--- a/src/paperless/settings.py
+++ b/src/paperless/settings.py
@@ -420,19 +420,34 @@ if AUTO_LOGIN_USERNAME:
# regular login in case the provided user does not exist.
MIDDLEWARE.insert(_index + 1, "paperless.auth.AutoLoginMiddleware")
-ENABLE_HTTP_REMOTE_USER = __get_boolean("PAPERLESS_ENABLE_HTTP_REMOTE_USER")
-HTTP_REMOTE_USER_HEADER_NAME = os.getenv(
- "PAPERLESS_HTTP_REMOTE_USER_HEADER_NAME",
- "HTTP_REMOTE_USER",
-)
-if ENABLE_HTTP_REMOTE_USER:
- MIDDLEWARE.append("paperless.auth.HttpRemoteUserMiddleware")
- AUTHENTICATION_BACKENDS.insert(0, "django.contrib.auth.backends.RemoteUserBackend")
- REST_FRAMEWORK["DEFAULT_AUTHENTICATION_CLASSES"].append(
- "rest_framework.authentication.RemoteUserAuthentication",
+def _parse_remote_user_settings() -> str:
+ global MIDDLEWARE, AUTHENTICATION_BACKENDS, REST_FRAMEWORK
+ enable = __get_boolean("PAPERLESS_ENABLE_HTTP_REMOTE_USER")
+ enable_api = __get_boolean("PAPERLESS_ENABLE_HTTP_REMOTE_USER_API")
+ if enable or enable_api:
+ MIDDLEWARE.append("paperless.auth.HttpRemoteUserMiddleware")
+ AUTHENTICATION_BACKENDS.insert(
+ 0,
+ "django.contrib.auth.backends.RemoteUserBackend",
+ )
+
+ if enable_api:
+ REST_FRAMEWORK["DEFAULT_AUTHENTICATION_CLASSES"].insert(
+ 0,
+ "paperless.auth.PaperlessRemoteUserAuthentication",
+ )
+
+ header_name = os.getenv(
+ "PAPERLESS_HTTP_REMOTE_USER_HEADER_NAME",
+ "HTTP_REMOTE_USER",
)
+ return header_name
+
+
+HTTP_REMOTE_USER_HEADER_NAME = _parse_remote_user_settings()
+
# X-Frame options for embedded PDF display:
X_FRAME_OPTIONS = "ANY" if DEBUG else "SAMEORIGIN"
@@ -615,6 +630,7 @@ LANGUAGES = [
("fr-fr", _("French")),
("hu-hu", _("Hungarian")),
("it-it", _("Italian")),
+ ("ja-jp", _("Japanese")),
("lb-lu", _("Luxembourgish")),
("no-no", _("Norwegian")),
("nl-nl", _("Dutch")),
@@ -746,8 +762,12 @@ CELERY_BEAT_SCHEDULE_FILENAME = os.path.join(DATA_DIR, "celerybeat-schedule.db")
# django setting.
CACHES = {
"default": {
- "BACKEND": "django.core.cache.backends.redis.RedisCache",
+ "BACKEND": os.environ.get(
+ "PAPERLESS_CACHE_BACKEND",
+ "django.core.cache.backends.redis.RedisCache",
+ ),
"LOCATION": _CHANNELS_REDIS_URL,
+ "KEY_PREFIX": os.getenv("PAPERLESS_REDIS_PREFIX", ""),
},
}
diff --git a/src/paperless/tests/test_remote_user.py b/src/paperless/tests/test_remote_user.py
new file mode 100644
index 000000000..c5d7a6db4
--- /dev/null
+++ b/src/paperless/tests/test_remote_user.py
@@ -0,0 +1,110 @@
+import os
+from unittest import mock
+
+from django.contrib.auth.models import User
+from rest_framework import status
+from rest_framework.test import APITestCase
+
+from documents.tests.utils import DirectoriesMixin
+from paperless.settings import _parse_remote_user_settings
+
+
+class TestRemoteUser(DirectoriesMixin, APITestCase):
+ def setUp(self):
+ super().setUp()
+
+ self.user = User.objects.create_superuser(
+ username="temp_admin",
+ )
+
+ def test_remote_user(self):
+ """
+ GIVEN:
+ - Configured user
+ - Remote user auth is enabled
+ WHEN:
+ - Call is made to root
+ THEN:
+ - Call succeeds
+ """
+
+ with mock.patch.dict(
+ os.environ,
+ {
+ "PAPERLESS_ENABLE_HTTP_REMOTE_USER": "True",
+ },
+ ):
+ _parse_remote_user_settings()
+
+ response = self.client.get("/documents/")
+
+ self.assertEqual(
+ response.status_code,
+ status.HTTP_302_FOUND,
+ )
+
+ response = self.client.get(
+ "/documents/",
+ headers={
+ "Remote-User": self.user.username,
+ },
+ )
+
+ self.assertEqual(response.status_code, status.HTTP_200_OK)
+
+ def test_remote_user_api(self):
+ """
+ GIVEN:
+ - Configured user
+ - Remote user auth is enabled for the API
+ WHEN:
+ - API call is made to get documents
+ THEN:
+ - Call succeeds
+ """
+
+ with mock.patch.dict(
+ os.environ,
+ {
+ "PAPERLESS_ENABLE_HTTP_REMOTE_USER_API": "True",
+ },
+ ):
+ _parse_remote_user_settings()
+
+ response = self.client.get("/api/documents/")
+
+ # 403 testing locally, 401 on ci...
+ self.assertIn(
+ response.status_code,
+ [status.HTTP_401_UNAUTHORIZED, status.HTTP_403_FORBIDDEN],
+ )
+
+ response = self.client.get(
+ "/api/documents/",
+ headers={
+ "Remote-User": self.user.username,
+ },
+ )
+
+ self.assertEqual(response.status_code, status.HTTP_200_OK)
+
+ def test_remote_user_header_setting(self):
+ """
+ GIVEN:
+ - Remote user header name is set
+ WHEN:
+ - Settings are parsed
+ THEN:
+ - Correct header name is returned
+ """
+
+ with mock.patch.dict(
+ os.environ,
+ {
+ "PAPERLESS_ENABLE_HTTP_REMOTE_USER": "True",
+ "PAPERLESS_HTTP_REMOTE_USER_HEADER_NAME": "HTTP_FOO",
+ },
+ ):
+ header_name = _parse_remote_user_settings()
+
+ self.assertEqual(header_name, "HTTP_FOO")
diff --git a/src/paperless/version.py b/src/paperless/version.py
index b5d8f6e02..b1926ccfb 100644
--- a/src/paperless/version.py
+++ b/src/paperless/version.py
@@ -1,6 +1,6 @@
from typing import Final
-__version__: Final[tuple[int, int, int]] = (2, 4, 2)
+__version__: Final[tuple[int, int, int]] = (2, 4, 3)
# Version string like X.Y.Z
__full_version_str__: Final[str] = ".".join(map(str, __version__))
# Version string like X.Y
diff --git a/src/setup.cfg b/src/setup.cfg
index dc5e9e33a..1877cb16e 100644
--- a/src/setup.cfg
+++ b/src/setup.cfg
@@ -3,6 +3,7 @@ DJANGO_SETTINGS_MODULE = paperless.settings
addopts = --pythonwarnings=all --cov --cov-report=html --cov-report=xml --numprocesses auto --maxprocesses=16 --quiet --durations=50
env =
PAPERLESS_DISABLE_DBHANDLER=true
+ PAPERLESS_CACHE_BACKEND=django.core.cache.backends.locmem.LocMemCache
[coverage:run]
source =