From bee44817f7fd7794685017af2127c4ec04382979 Mon Sep 17 00:00:00 2001 From: nklomp Date: Wed, 22 Mar 2023 14:47:04 +0100 Subject: [PATCH 01/16] feat: Add Key value store based on a typescript port of the keyv package. Includes TypeORM, Map based and Tiered Key Value storage. --- packages/kv-store/CHANGELOG.md | 0 packages/kv-store/LICENSE | 201 +++++++++++ packages/kv-store/README.md | 2 + packages/kv-store/package.json | 53 +++ .../src/__tests__/keyv-typeorm.test.ts | 66 ++++ packages/kv-store/src/__tests__/keyv.test.ts | 28 ++ packages/kv-store/src/index.ts | 10 + packages/kv-store/src/key-value-store.ts | 106 ++++++ packages/kv-store/src/key-value-types.ts | 85 +++++ .../kv-store/src/keyv-ts-impl/keyv-types.ts | 75 +++++ packages/kv-store/src/keyv-ts-impl/keyv.ts | 315 ++++++++++++++++++ .../kv-store/src/keyv-ts-impl/tiered/index.ts | 120 +++++++ .../kv-store/src/keyv-ts-impl/tiered/types.ts | 16 + .../typeorm/entities/keyValueStoreEntity.ts | 41 +++ .../src/keyv-ts-impl/typeorm/index.ts | 108 ++++++ .../src/keyv-ts-impl/typeorm/types.ts | 16 + packages/kv-store/tsconfig.json | 13 + 17 files changed, 1255 insertions(+) create mode 100644 packages/kv-store/CHANGELOG.md create mode 100644 packages/kv-store/LICENSE create mode 100644 packages/kv-store/README.md create mode 100644 packages/kv-store/package.json create mode 100644 packages/kv-store/src/__tests__/keyv-typeorm.test.ts create mode 100644 packages/kv-store/src/__tests__/keyv.test.ts create mode 100644 packages/kv-store/src/index.ts create mode 100644 packages/kv-store/src/key-value-store.ts create mode 100644 packages/kv-store/src/key-value-types.ts create mode 100644 packages/kv-store/src/keyv-ts-impl/keyv-types.ts create mode 100644 packages/kv-store/src/keyv-ts-impl/keyv.ts create mode 100644 packages/kv-store/src/keyv-ts-impl/tiered/index.ts create mode 100644 packages/kv-store/src/keyv-ts-impl/tiered/types.ts create mode 100644 packages/kv-store/src/keyv-ts-impl/typeorm/entities/keyValueStoreEntity.ts create mode 100644 packages/kv-store/src/keyv-ts-impl/typeorm/index.ts create mode 100644 packages/kv-store/src/keyv-ts-impl/typeorm/types.ts create mode 100644 packages/kv-store/tsconfig.json diff --git a/packages/kv-store/CHANGELOG.md b/packages/kv-store/CHANGELOG.md new file mode 100644 index 000000000..e69de29bb diff --git a/packages/kv-store/LICENSE b/packages/kv-store/LICENSE new file mode 100644 index 000000000..fd815d7f8 --- /dev/null +++ b/packages/kv-store/LICENSE @@ -0,0 +1,201 @@ + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright 2019 Consensys AG + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. diff --git a/packages/kv-store/README.md b/packages/kv-store/README.md new file mode 100644 index 000000000..a3bcc8c4b --- /dev/null +++ b/packages/kv-store/README.md @@ -0,0 +1,2 @@ +# Veramo Key Value store + diff --git a/packages/kv-store/package.json b/packages/kv-store/package.json new file mode 100644 index 000000000..f2074c53c --- /dev/null +++ b/packages/kv-store/package.json @@ -0,0 +1,53 @@ +{ + "name": "@veramo/kv-store", + "description": "Veramo Key Value Store plugin", + "version": "5.1.2", + "main": "build/index.js", + "exports": "./build/index.js", + "types": "build/index.d.ts", + "scripts": { + "build": "tsc", + "test": "jest --config=../../jest.config.mjs", + "test:ci": "jest --config=../../jest.config.mjs", + "extract-api": "node ../cli/bin/veramo.js dev extract-api" + }, + "dependencies": { + "@veramo/core-types": "^5.1.2", + "@veramo/utils": "^5.1.2", + "events": "^3.3.0", + "json-buffer": "^3.0.1", + "typeorm": "^0.3.10", + "uint8arrays": "^3.1.1" + }, + "devDependencies": { + "@types/json-buffer": "^3.0.0", + "keyv": "^4.5.2", + "@keyv/test-suite": "*", + "@keyv/sqlite": "^3.6.5", + "@keyv/mongo": "^2.1.8", + "@keyv/compress-brotli": "^1.1.3", + "@keyv/compress-gzip": "^1.2.3", + "eslint": "^8.33.0", + "eslint-plugin-promise": "^6.1.1", + "timekeeper": "^2.2.0", + "typescript": "^4.9.5" + }, + "files": [ + "build/**/*", + "src/**/*", + "README.md", + "LICENSE" + ], + "publishConfig": { + "access": "public" + }, + "repository": "git@github.com:uport-project/veramo.git", + "author": "Niels Klomp ", + "license": "Apache-2.0", + "keywords": [], + "type": "module", + "moduleDirectories": [ + "node_modules", + "src" + ] +} diff --git a/packages/kv-store/src/__tests__/keyv-typeorm.test.ts b/packages/kv-store/src/__tests__/keyv-typeorm.test.ts new file mode 100644 index 000000000..801d36f69 --- /dev/null +++ b/packages/kv-store/src/__tests__/keyv-typeorm.test.ts @@ -0,0 +1,66 @@ +import timekeeper from 'timekeeper' +import { Keyv } from '../keyv-ts-impl/keyv.js' +import { KeyvTypeORMStoreAdapter } from '../keyv-ts-impl/typeorm' +import { DataSource } from 'typeorm' +import { KeyValueStoreEntity } from '../keyv-ts-impl/typeorm/entities/keyValueStoreEntity' + +describe('TypeORM Keyv Store adapter', () => { + let dbConnection: DataSource + + beforeEach(async () => { + dbConnection = await new DataSource({ + type: 'sqlite', + database: ':memory:', + logging: 'all', + migrationsRun: false, + synchronize: true, + entities: [KeyValueStoreEntity], + }).initialize() + }) + + afterEach(async () => { + await (await dbConnection).destroy() + }) + + it('should respect ttl', async () => { + const store = new KeyvTypeORMStoreAdapter({ dbConnection, namespace: 'test' }) + const keyv = new Keyv(store) + await keyv.set('key', 'value', 100) + + expect(await keyv.get('key')).toEqual('value') + timekeeper.freeze(Date.now() + 150) + expect(await keyv.get('key')).toBeUndefined() + }) + + it('should set a value that can be retrieved from the proper namespace', async () => { + const store = new KeyvTypeORMStoreAdapter({ dbConnection, namespace: 'test' }) + const keyv = new Keyv(store) + await keyv.set('key', 'value') + expect(await keyv.get('key')).toEqual('value') + + const alternateStore = new KeyvTypeORMStoreAdapter({ dbConnection, namespace: 'another' }) + const alternateKeyv = new Keyv(alternateStore) + expect(await alternateKeyv.get('key')).toBeUndefined() + }) + + it('should set multiple values that can be retrieved', async () => { + const store = new KeyvTypeORMStoreAdapter({ dbConnection, namespace: 'test' }) + const keyv = new Keyv(store) + for (let i = 0; i < 10; i++) { + await keyv.set(`${i}`, `value${i}`) + } + + let values = await keyv.getMany(['0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'nope']) + expect(values).toHaveLength(10) + + await keyv.delete('0') + expect(await keyv.getMany([ '0'])).toHaveLength(0) + values = await keyv.getMany(['0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'nope']) + expect(values).toHaveLength(9) + + await keyv.clear() + values = await keyv.getMany(['0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'nope']) + expect(values).toHaveLength(0) + }) +}) + diff --git a/packages/kv-store/src/__tests__/keyv.test.ts b/packages/kv-store/src/__tests__/keyv.test.ts new file mode 100644 index 000000000..390a813ee --- /dev/null +++ b/packages/kv-store/src/__tests__/keyv.test.ts @@ -0,0 +1,28 @@ +import KeyvSqlite from '@keyv/sqlite'; + +import timekeeper from 'timekeeper' +import { Keyv } from '../keyv-ts-impl/keyv.js' + +describe('MAP store', () => { + it('should respect ttl', async () => { + const store = new Map() + const keyv = new Keyv(store) + await keyv.set('key', 'value', 100) + + expect(await keyv.get('key')).toEqual('value') + timekeeper.freeze(Date.now() + 150) + expect(await keyv.get('key')).toBeUndefined() + }) +}) + + +describe('sqlite store', () => { + it('should respect ttl', async () => { + const keyv = new Keyv(new KeyvSqlite()) + await keyv.set('key', 'value', 100) + + expect(await keyv.get('key')).toEqual('value') + timekeeper.freeze(Date.now() + 150) + expect(await keyv.get('key')).toBeUndefined() + }) +}) diff --git a/packages/kv-store/src/index.ts b/packages/kv-store/src/index.ts new file mode 100644 index 000000000..81901c179 --- /dev/null +++ b/packages/kv-store/src/index.ts @@ -0,0 +1,10 @@ +/** + * Provides a {@link @veramo/did-manager#DIDManager | plugin} for the + * {@link @veramo/core#Agent} that implements {@link @veramo/core-types#IDIDManager} interface. + * + * @packageDocumentation + */ +export { KeyValueStore } from './key-value-store' +export * from './keyv-ts-impl/tiered' +export { Keyv } from './keyv-ts-impl/keyv' +export * from './key-value-types' diff --git a/packages/kv-store/src/key-value-store.ts b/packages/kv-store/src/key-value-store.ts new file mode 100644 index 000000000..fc9ad97e5 --- /dev/null +++ b/packages/kv-store/src/key-value-store.ts @@ -0,0 +1,106 @@ +import { IAgentPlugin } from '@veramo/core-types' +import { + DeserializedValueData, + IKeyValueStore, + KVStoreDeleteArgs, + KVStoreDeleteManyArgs, + KVStoreGetArgs, + KVStoreGetManyArgs, + KVStoreHasArgs, + KVStoreOnArgs, KVStoreOptions, + KVStoreSetArgs, +} from './key-value-types' +import { Keyv } from './keyv-ts-impl/keyv' + +/** + * Agent plugin that implements {@link @veramo/core-types#IKeyValueStore} interface + * @public + */ +export class KeyValueStore implements IAgentPlugin { + /** + * Plugin methods + * @public + */ + readonly methods: IKeyValueStore + private readonly keyv: Keyv + + + constructor(options: KVStoreOptions) { + this.methods = { + kvStoreOn: this.kvStoreOn.bind(this), + kvStoreGet: this.kvStoreGet.bind(this), + kvStoreGetMany: this.kvStoreGetMany.bind(this), + kvStoreSet: this.kvStoreSet.bind(this), + kvStoreHas: this.kvStoreHas.bind(this), + kvStoreDelete: this.kvStoreDelete.bind(this), + kvStoreDeleteMany: this.kvStoreDeleteMany.bind(this), + kvStoreClear: this.kvStoreClear.bind(this), + kvStoreDisconnect: this.kvStoreDisconnect.bind(this), + } + this.keyv = new Keyv(options.uri, options) + } + + private async kvStoreGet(args: KVStoreGetArgs): Promise | undefined> { + const result = await this.keyv.get(args.key, { raw: false }) + if (result === null || result === undefined) { + return undefined + } + return this.toDeserializedValueData(result) + } + + + private async kvStoreGetMany(args: KVStoreGetManyArgs): Promise>> { + const result = await this.keyv.getMany(args.keys, { raw: false }) + + // Please note we are filtering all the undefined/null values from the result here and below! + // I guess we could opt to keep the same indexes as the argument and make them undefined + if (result === null || result === undefined || result.length === 0) { + return [] + } + return result.filter(v => !!v).map(v => this.toDeserializedValueData(v)) + } + + private async kvStoreSet(args: KVStoreSetArgs): Promise { + return await this.keyv.set(args.key, args.value, args.ttl) + } + + + private async kvStoreHas(args: KVStoreHasArgs): Promise { + return await this.keyv.has(args.key) + } + + private async kvStoreDelete(args: KVStoreDeleteArgs): Promise { + return await this.keyv.delete(args.key) + } + + + private async kvStoreDeleteMany(args: KVStoreDeleteManyArgs): Promise { + return await this.keyv.delete(args.keys) + } + + + private async kvStoreClear(): Promise> { + await this.keyv.clear() + return this.methods + } + + private async kvStoreDisconnect(): Promise { + return this.keyv.disconnect() + } + + private async kvStoreOn(args: KVStoreOnArgs): Promise> { + this.keyv.on(args.eventName, args.listener) + return this.methods + } + + private toDeserializedValueData(result: any): DeserializedValueData { + if (result === null || result === undefined) { + throw Error(`Result cannot be undefined or null at this this point`) + } else if (typeof result !== 'object') { + return { value: result } + } else if (!('value' in result)) { + return { value: result } + } + return result as DeserializedValueData + } +} diff --git a/packages/kv-store/src/key-value-types.ts b/packages/kv-store/src/key-value-types.ts new file mode 100644 index 000000000..0d2fdc9ff --- /dev/null +++ b/packages/kv-store/src/key-value-types.ts @@ -0,0 +1,85 @@ +import { IPluginMethodMap } from '@veramo/core-types' +import { KeyvStore } from './keyv-ts-impl/keyv-types' + + +export interface DeserializedValueData { + value: ValueType; + expires?: number | undefined; +} + +export interface KVStoreOnArgs { + eventName: string | symbol, + listener: (...args: any[]) => void +} + +export interface KVStoreGetArgs { + key: string +} + +export interface KVStoreGetManyArgs { + keys: string[] +} +export interface KVStoreHasArgs { + key: string +} + +export interface KVStoreDeleteArgs { + key: string +} + +export interface KVStoreDeleteManyArgs { + keys: string[] +} + +export interface KVStoreSetArgs { + key: string, + value: ValueType, + ttl?: number +} + +export interface KVStoreOptions { + [key: string]: any; + + /** Namespace for the current instance. */ + namespace?: string | undefined; + /** A custom serialization function. */ + /*serialize?: ((data: KeyvDeserializedData) => OrPromise) + /!** A custom deserialization function. *!/ + deserialize?: ((data: any) => OrPromise | undefined>);*/ + /** The connection string URI. */ + uri?: string | undefined; + /** The storage adapter instance to be used by Keyv. */ + store?: KeyvStore | undefined; + /** Default TTL. Can be overridden by specifying a TTL on `.set()`. */ + ttl?: number | undefined; + /** Specify an adapter to use. e.g `'redis'` or `'mongodb'`. */ + adapter?: 'redis' | 'mongodb' | 'mongo' | 'sqlite' | 'postgresql' | 'postgres' | 'mysql' | string | object | undefined; + /** Enable compression option **/ + /*compression?: KeyvCompressionAdapter | undefined;*/ + + emitErrors?: boolean +} + +export interface IKeyValueStore extends IPluginMethodMap { + + kvStoreGet(args: KVStoreGetArgs): Promise | undefined> + + kvStoreOn(args: KVStoreOnArgs): Promise> + + kvStoreGetMany( + args: KVStoreGetManyArgs, + ): Promise | undefined>>; + + kvStoreSet(args: KVStoreSetArgs): Promise; + + kvStoreDelete(args: KVStoreDeleteArgs): Promise; + + kvStoreDeleteMany(args: KVStoreDeleteManyArgs): Promise; + + kvStoreClear(): Promise>; + + kvStoreHas(args: KVStoreHasArgs): Promise; + + kvStoreDisconnect(): Promise + +} diff --git a/packages/kv-store/src/keyv-ts-impl/keyv-types.ts b/packages/kv-store/src/keyv-ts-impl/keyv-types.ts new file mode 100644 index 000000000..6bb9e28db --- /dev/null +++ b/packages/kv-store/src/keyv-ts-impl/keyv-types.ts @@ -0,0 +1,75 @@ +/** + * Please be aware these types are compatible with the keyv package, to ensure we can use its adapters for free. + * + * Be very careful when extending/changing!. Normally you will want to create an adapter or decorator for your additional behaviour or requirements + */ +import { OrPromise } from '@veramo/utils' + +export type WithRequiredProperties = T & Required>; + +export interface KeyvOptions { + [key: string]: any; + + /** Namespace for the current instance. */ + namespace?: string | undefined; + /** A custom serialization function. */ + serialize?: ((data: KeyvDeserializedData) => OrPromise) + /** A custom deserialization function. */ + deserialize?: ((data: any) => OrPromise | undefined>); + /** The connection string URI. */ + uri?: string | undefined; + /** The storage adapter instance to be used by Keyv. */ + store?: KeyvStore | undefined; + /** Default TTL. Can be overridden by specififying a TTL on `.set()`. */ + ttl?: number | undefined; + /** Specify an adapter to use. e.g `'redis'` or `'mongodb'`. */ + adapter?: 'redis' | 'mongodb' | 'mongo' | 'sqlite' | 'postgresql' | 'postgres' | 'mysql' | object| string | undefined; + /** Enable compression option **/ + compression?: KeyvCompressionAdapter | undefined; + + emitErrors?: boolean +} + +export interface KeyvCompressionAdapter { + compress(value: any, options?: any): OrPromise; + + decompress(value: any, options?: any): OrPromise; + + serialize(value: any): OrPromise; + + deserialize(value: any): OrPromise; +} + +export interface KeyvDeserializedData { + value: Value; + expires: number | undefined; +} + +export type KeyvStoredData = KeyvDeserializedData | string | Value | undefined; + +export interface KeyvStore { + namespace?: string | undefined + + opts: KeyvOptions + + on?(eventName: string | symbol, listener: (...args: any[]) => void): void; + get(key: string | string[], options?: {raw?: boolean}): OrPromise | Array>>; + + getMany?( + keys: string[], options?: { raw?: boolean } + ): Array> | Promise>> | undefined; + + iterator?(namespace?: string | undefined): AsyncGenerator; + + set(key: string, value: Value, ttl?: number): any; + + delete(key: string | string[]): OrPromise; + + deleteMany?(keys: string[]): OrPromise; + + clear(): OrPromise; + + has?(key: string): OrPromise; + + disconnect?(): void +} diff --git a/packages/kv-store/src/keyv-ts-impl/keyv.ts b/packages/kv-store/src/keyv-ts-impl/keyv.ts new file mode 100644 index 000000000..68dd49be9 --- /dev/null +++ b/packages/kv-store/src/keyv-ts-impl/keyv.ts @@ -0,0 +1,315 @@ +import EventEmitter from 'events' +import JSONB from 'json-buffer' +import { KeyvDeserializedData, KeyvOptions, KeyvStore, KeyvStoredData } from './keyv-types' + + +/** + * Please note that this is code adapted from @link https://github.com/jaredwray/keyv to support Typescript and ESM in Veramo + * + * The code should support the storage plugins available for the keyv project. + * Veramo itself supports NodeJS, Browser and React-Native. Please be aware that these requirements probably aren't true for any keyv storage plugins. + * The Veramo kv-store module provides out of the box support for in memory/maps, sqlite and typeorm implementations, including a tiered local/remote implementation that support all environments. + * We welcome any new storage modules + */ +export class Keyv extends EventEmitter implements KeyvStore { + readonly opts: KeyvOptions + readonly namespace: string + iterator?: (namespace?: string) => AsyncGenerator + + constructor(uri?: string | Map | KeyvStore | undefined, options?: KeyvOptions) { + super() + const emitErrors = options?.emitErrors === undefined ? true : options.emitErrors + uri = uri ?? options?.uri + if (!uri) { + throw Error('No URI provided') + } + this.opts = { + namespace: 'keyv', + serialize: JSONB.stringify, + deserialize: JSONB.parse, + ...((typeof uri === 'string') ? { uri } : uri), + ...options, + } + + if (!this.opts.store) { + if (typeof uri !== 'string') { + this.opts.store = uri as KeyvStore + } else { + const adapterOptions = { ...this.opts } + this.opts.store = loadStore(adapterOptions) + } + } + if (!this.opts.store) { + throw Error('No store') + } + + if (this.opts.compression) { + const compression = this.opts.compression + this.opts.serialize = compression.serialize.bind(compression) + this.opts.deserialize = compression.deserialize.bind(compression) + } + + if (typeof this.opts.store.on === 'function' && emitErrors) { + this.opts.store.on('error', error => this.emit('error', error)) + } + + this.opts.store.namespace = this.opts.namespace || 'keyv' + this.namespace = this.opts.store.namespace + + const generateIterator = (iterator: any, keyv: Keyv) => async function* () { + for await (const [key, raw] of typeof iterator === 'function' + ? iterator(keyv.store.namespace) + : iterator) { + const data = await keyv.deserialize(raw) + if (keyv.store.namespace && !key.includes(keyv.store.namespace)) { + continue + } + + if (data && typeof data.expires === 'number' && Date.now() > data.expires) { + keyv.delete(key) + continue + } + + yield [keyv._getKeyUnprefix(key), data?.value] + } + } + + // Attach iterators + // @ts-ignore + if (typeof this.store[Symbol.iterator] === 'function' && this.store instanceof Map) { + this.iterator = generateIterator(this.store, this) + } else if (typeof this.store.iterator === 'function' && this.store.opts + && this._checkIterableAdaptar()) { + this.iterator = generateIterator(this.store.iterator.bind(this.store), this) + } + } + + get store(): Required> { + return this.opts.store as Required> + } + + get deserialize() { + return this.opts.deserialize! + } + + get serialize() { + return this.opts.serialize! + } + + _checkIterableAdaptar() { + return (this.store.opts.dialect && iterableAdapters.includes(this.store.opts.dialect)) + || (this.store.opts.url && iterableAdapters.findIndex(element => this.store.opts.url.includes(element)) >= 0) + } + + _getKeyPrefix(key: string): string { + return `${this.opts.namespace}:${key}` + } + + _getKeyPrefixArray(keys: string[]): string[] { + return keys.map(key => this._getKeyPrefix(key)) + } + + _getKeyUnprefix(key: string): string { + return key + .split(':') + .splice(1) + .join(':') + } + + getMany(keys: string[], options?: { raw?: boolean }): Array> | Promise>> | undefined { + if (this.store.getMany !== undefined) { + return this.store.getMany(this._getKeyPrefixArray(keys)) + } + + const keyPrefixed = this._getKeyPrefixArray(keys) + const promises = [] + for (const key of keyPrefixed) { + promises.push(Promise.resolve() + .then(() => this.store.get(key)) + .then(data => (typeof data === 'string') ? this.deserialize(data) : (this.opts.compression ? this.deserialize(data) : data)) + .then(data => { + if (data === undefined || data === null) { + return undefined + } + + if (data && typeof data === 'object' && 'expires' in data && typeof data.expires === 'number' && Date.now() > data.expires) { + return this.delete(key).then(() => undefined) + } + return (options && options.raw) ? data : data && typeof data === 'object' && 'value' in data ? data.value : data + }), + ) + } + + + return Promise.allSettled(promises) + .then(promiseResult => { + const data: KeyvStoredData[] = [] + for (const result of promiseResult) { + if (result?.status !== 'rejected') { + Array.isArray(result.value) ? data.push(...result.value) : data.push(result.value) + } else { + data.push(undefined) + } + } + return data + }) + + } + + get(key: string | string[], options?: { raw?: boolean }): Promise | KeyvStoredData[] | undefined> { + const isArray = Array.isArray(key) + return Promise.resolve() + .then(() => isArray ? this.getMany(this._getKeyPrefixArray(key), options) : this.store.get(this._getKeyPrefix(key))) + .then(data => (typeof data === 'string') ? this.deserialize(data) : (this.opts.compression ? this.deserialize(data) : data)) + .then(data => { + if (data === undefined || data === null) { + return undefined + } + const rows = Array.isArray(data) ? data : [data] + + if (isArray) { + const result = [] + + for (let row of rows) { + if (row === undefined || row === null) { + result.push(undefined) + continue + } + + if (this.isExpired(row)) { + this.delete(key).then(() => undefined) + result.push(undefined) + } else { + result.push((options && options.raw) ? row : toValue(row)) + } + } + + return result + } else if (!Array.isArray(data)) { + if (this.isExpired(data)) { + return this.delete(key).then(() => undefined) + } + } + + return (options && options.raw) ? data : Array.isArray(data) ? data.map(d => toValue(d)) : toValue(data) + }) + } + + private isExpired(data: KeyvDeserializedData | string | Value): boolean { + return typeof data !== 'string' && data && typeof data === 'object' && 'expires' in data && typeof data.expires === 'number' && (Date.now() > data.expires) + } + + set(key: string, value: any, ttl?: number) { + const keyPrefixed = this._getKeyPrefix(key) + if (typeof ttl === 'undefined') { + ttl = this.opts.ttl + } + if (ttl === 0) { + ttl = undefined + } + + // @ts-ignore + return Promise.resolve() + .then(() => { + const expires = (typeof ttl === 'number') ? (Date.now() + ttl) : undefined + if (typeof value === 'symbol') { + this.emit('error', 'symbol cannot be serialized') + } + + const input = { value, expires } + return this.serialize(input) + }) + .then(value => this.store.set(keyPrefixed, value as Value, ttl)) + .then(() => true) + } + + delete(key: string | string[]) { + if (!Array.isArray(key)) { + const keyPrefixed = this._getKeyPrefix(key) + return Promise.resolve() + .then(() => this.store.delete(keyPrefixed)) + } + + const keyPrefixed = this._getKeyPrefixArray(key) + if (this.store.deleteMany !== undefined) { + return Promise.resolve() + .then(() => this.store.deleteMany!(keyPrefixed)) + } + + const promises = [] + for (const key of keyPrefixed) { + promises.push(this.store.delete(key)) + } + + return Promise.allSettled(promises) + .then(values => values.every(x => x.valueOf() === true)) + } + + async clear(): Promise { + return Promise.resolve() + .then(() => this.store.clear()) + } + + has(key: string) { + const keyPrefixed = this._getKeyPrefix(key) + return Promise.resolve() + .then(async () => { + if (typeof this.store.has === 'function') { + return this.store.has(keyPrefixed) + } + + const value = await this.store.get(keyPrefixed) + return value !== undefined + }) + } + + disconnect() { + if (typeof this.store.disconnect === 'function') { + return this.store.disconnect() + } + } +} + + +const loadStore = (options: KeyvOptions) => { + const adapters = { + redis: '@keyv/redis', + rediss: '@keyv/redis', + mongodb: '@keyv/mongo', + mongo: '@keyv/mongo', + sqlite: '@keyv/sqlite', + postgresql: '@keyv/postgres', + postgres: '@keyv/postgres', + mysql: '@keyv/mysql', + etcd: '@keyv/etcd', + offline: '@keyv/offline', + tiered: './tiered/index.js', + } + let adapter = options.adapter + if (!adapter && options.uri) { + const regex = /^[^:+]*/ + if (regex) { + const match = regex.exec(options.uri) + adapter = Array.isArray(match) ? match[0] : undefined + } + } + if (adapter) { + // @ts-ignore + return new (import(adapters[adapter]))(options) + } + + return new Map() +} + +const iterableAdapters = [ + 'sqlite', + 'postgres', + 'mysql', + 'mongo', + 'redis', + 'tiered', +] + +function toValue(input: KeyvDeserializedData | string | Value) { + return input !== null && typeof input === 'object' && 'value' in input ? input.value : input +} diff --git a/packages/kv-store/src/keyv-ts-impl/tiered/index.ts b/packages/kv-store/src/keyv-ts-impl/tiered/index.ts new file mode 100644 index 000000000..f7f389467 --- /dev/null +++ b/packages/kv-store/src/keyv-ts-impl/tiered/index.ts @@ -0,0 +1,120 @@ +import EventEmitter from 'events' +import { Keyv } from '../keyv' +import type { Options, Options_ } from './types' + +type KeyvTieredIndex = 'local' | 'remote'; + +export class KeyvTieredStoreAdapter extends EventEmitter { + opts: Options_ + remote: Keyv + local: Keyv + iterationLimit?: string | number + + constructor({ remote = new Keyv(), local = new Keyv(), ...options }: Options) { + super() + this.opts = { + validator: () => true, + dialect: 'tiered', + ...options, + } + this.remote = remote + this.local = local + } + + async get(key: string): Promise { + const localResult: unknown = await this.local.get(key) + + if (localResult === undefined || !this.opts.validator(localResult, key)) { + const remoteResult = await this.remote.get(key) + + if (remoteResult === localResult) { + return remoteResult + } + + await this.local.set(key, remoteResult) + + return remoteResult + } + + return localResult + } + + async getMany(keys: string[]): Promise { + const promises = [] + for (const key of keys) { + promises.push(this.get(key)) + } + + const values = await Promise.all(promises) + const data: unknown[] = [] + for (const value of values) { + data.push(value) + } + + return data + } + + async set(key: string, value: any, ttl?: number) { + const toSet: KeyvTieredIndex[] = ['local', 'remote'] + return Promise.all(toSet.map(async store => this[store].set(key, value, ttl)), + ) + } + + async clear(): Promise { + const toClear: KeyvTieredIndex[] = ['local'] + if (!this.opts.localOnly) { + toClear.push('remote') + } + + await Promise.all(toClear + .map(async store => this[store].clear()), + ) + + return undefined + } + + async delete(key: string): Promise { + const toDelete: KeyvTieredIndex[] = ['local'] + if (!this.opts.localOnly) { + toDelete.push('remote') + } + + const deleted = await Promise.all(toDelete + .map(async store => this[store].delete(key)), + ) + + return deleted.every(Boolean) + } + + async deleteMany(keys: string[]): Promise { + const promises = [] + for (const key of keys) { + promises.push(this.delete(key)) + } + + const values = await Promise.all(promises) + + return values.every(Boolean) + } + + async has(key: string): Promise { + const response = await this.local.has(key) + + if (!response || !this.opts.validator(response, key)) { + return this.remote.has(key) + } + + return response + } + + async* iterator(namespace?: string): AsyncGenerator { + const limit = Number.parseInt(this.iterationLimit as string, 10) || 10 + this.remote.opts.iterationLimit = limit + if (this.remote && typeof this.remote.iterator === 'function') { + for await (const entries of this.remote.iterator(namespace)) { + yield entries + } + } + } +} + diff --git a/packages/kv-store/src/keyv-ts-impl/tiered/types.ts b/packages/kv-store/src/keyv-ts-impl/tiered/types.ts new file mode 100644 index 000000000..56ec19a87 --- /dev/null +++ b/packages/kv-store/src/keyv-ts-impl/tiered/types.ts @@ -0,0 +1,16 @@ +import type { Keyv } from '../keyv'; + +export type Options = { + local: Keyv; + remote: Keyv; + localOnly?: boolean; + iterationLimit?: number | string; +}; + +// eslint-disable-next-line @typescript-eslint/naming-convention +export type Options_ = { + validator: (value: any, key: string) => boolean; + dialect: string; + iterationLimit?: number | string; + localOnly?: boolean; +}; diff --git a/packages/kv-store/src/keyv-ts-impl/typeorm/entities/keyValueStoreEntity.ts b/packages/kv-store/src/keyv-ts-impl/typeorm/entities/keyValueStoreEntity.ts new file mode 100644 index 000000000..3c57b4dd1 --- /dev/null +++ b/packages/kv-store/src/keyv-ts-impl/typeorm/entities/keyValueStoreEntity.ts @@ -0,0 +1,41 @@ +import { BaseEntity, Column, Entity, PrimaryColumn } from 'typeorm' + + +/** + * + * @beta This API may change without a BREAKING CHANGE notice. + */ +@Entity('keyvaluestorevalue') +export class KeyValueStoreEntity extends BaseEntity { + @PrimaryColumn() + // @ts-ignore + key: string + + @Column({ + type: 'text'/*, transformer: { + // Note: this is a naive implementation which will fail in certain situations. Look into how to properly create a blob type compatible with RN/Browser/Node + to: (entityValue: Value) => { + if (entityValue === null || entityValue === undefined) { + return null + } else if (typeof entityValue === 'object') { + return JSON.stringify(entityValue) + } else { + return '' + entityValue + } + }, + from: (dbValue: string) => { + if (dbValue === null) { + return undefined + } else if (dbValue.trim().startsWith('{') && dbValue.trim().endsWith('}')) { + return JSON.parse(dbValue) as Value + } else { + return dbValue as Value + } + }, + },*/ + }) + // @ts-ignore + value: string + + expires?: number +} diff --git a/packages/kv-store/src/keyv-ts-impl/typeorm/index.ts b/packages/kv-store/src/keyv-ts-impl/typeorm/index.ts new file mode 100644 index 000000000..05e39576d --- /dev/null +++ b/packages/kv-store/src/keyv-ts-impl/typeorm/index.ts @@ -0,0 +1,108 @@ +import EventEmitter from 'events' +import { OrPromise } from '@veramo/utils' +import { DataSource, In, Like } from 'typeorm' +import { KeyValueStoreEntity } from './entities/keyValueStoreEntity' +import { Options, Options_ } from './types' +import { KeyvStore, KeyvStoredData } from '../keyv-types' + +export class KeyvTypeORMStoreAdapter extends EventEmitter implements KeyvStore { + private readonly dbConnection: OrPromise + readonly namespace: string + opts: Options_ + + constructor(options: Options) { + super() + this.dbConnection = options.dbConnection + this.namespace = options.namespace || 'keyv' + this.opts = { + validator: () => true, + dialect: 'typeorm', + ...options, + } + } + + async get(key: string | string[], options?: { raw?: boolean }): Promise | Array>> { + if (Array.isArray(key)) { + return this.getMany(key, options) + } + const connection = await getConnectedDb(this.dbConnection) + const result = await connection.getRepository(KeyValueStoreEntity).findOneBy({ + key + }) + return options?.raw !== true || !result ? result?.value : { value: result?.value, expires: result?.expires } + } + + async getMany(keys: string[], options?: { raw?: boolean }): Promise>> { + const connection = await getConnectedDb(this.dbConnection) + const results = await connection.getRepository(KeyValueStoreEntity).findBy({ + key: In(keys) + }) + return results.filter(result => !!result.value).map(result => options?.raw || !result ? result?.value : { + value: result?.value, + expires: result?.expires, + }) + } + + async set(key: string, value: string, ttl?: number): Promise> { + const connection = await getConnectedDb(this.dbConnection) + const entity = new KeyValueStoreEntity() + entity.key = key + entity.value = value + entity.expires = ttl + const result = await connection.getRepository(KeyValueStoreEntity).save(entity) + return { value: value, expires: ttl } + } + + async delete(key: string | string[]): Promise { + if (Array.isArray(key)) { + return this.deleteMany(key) + } + const connection = await getConnectedDb(this.dbConnection) + const result = await connection.getRepository(KeyValueStoreEntity).delete({ key }) + return result.affected === 1 + } + + async deleteMany(keys: string[]): Promise { + const connection = await getConnectedDb(this.dbConnection) + const results = await connection.getRepository(KeyValueStoreEntity).delete({ + key: In(keys) + }) + return !!results.affected && results.affected >= 1 + } + + async clear(): Promise { + const connection = await getConnectedDb(this.dbConnection) + await connection.getRepository(KeyValueStoreEntity).delete({ + key: Like(`${this.namespace}:%`) + }) + } + + async has(key: string): Promise { + const connection = await getConnectedDb(this.dbConnection) + const result = await connection.getRepository(KeyValueStoreEntity).countBy({ + key + }) + return result === 1 + } + + async disconnect(): Promise { + const connection = await getConnectedDb(this.dbConnection) + await connection.destroy() + } +} + + +/** + * Ensures that the provided DataSource is connected. + * + * @param dbConnection - a TypeORM DataSource or a Promise that resolves to a DataSource + */ +export async function getConnectedDb(dbConnection: OrPromise): Promise { + if (dbConnection instanceof Promise) { + return await dbConnection + } else if (!dbConnection.isInitialized) { + return await (dbConnection).initialize() + } else { + return dbConnection + } +} diff --git a/packages/kv-store/src/keyv-ts-impl/typeorm/types.ts b/packages/kv-store/src/keyv-ts-impl/typeorm/types.ts new file mode 100644 index 000000000..128d0560c --- /dev/null +++ b/packages/kv-store/src/keyv-ts-impl/typeorm/types.ts @@ -0,0 +1,16 @@ +import type { Keyv } from '../keyv'; +import { OrPromise } from '@veramo/utils' +import { DataSource } from 'typeorm' + +export type Options = { + + dbConnection: OrPromise + + namespace?: string +}; + +// eslint-disable-next-line @typescript-eslint/naming-convention +export type Options_ = { + validator: (value: any, key: string) => boolean; + dialect: string; +}; diff --git a/packages/kv-store/tsconfig.json b/packages/kv-store/tsconfig.json new file mode 100644 index 000000000..7748859c3 --- /dev/null +++ b/packages/kv-store/tsconfig.json @@ -0,0 +1,13 @@ +{ + "extends": "../tsconfig.settings.json", + "compilerOptions": { + "esModuleInterop": true, + "rootDir": "src", + "outDir": "build", + "declarationDir": "build" + }, + "references": [ + { "path": "../core-types" }, + { "path": "../utils" } + ] +} From 06d9e77b6bed56a14df51b4ee0f20be0b399453b Mon Sep 17 00:00:00 2001 From: nklomp Date: Wed, 22 Mar 2023 15:05:00 +0100 Subject: [PATCH 02/16] chore: Updated lockfile --- pnpm-lock.yaml | 5249 +++++++++++++++++++++++++++++------------------- 1 file changed, 3203 insertions(+), 2046 deletions(-) diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index d3d2f3081..1928375de 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -59,13 +59,13 @@ importers: '@ethersproject/providers': 5.7.2 '@ethersproject/transactions': 5.7.0 '@ethersproject/wallet': 5.7.0 - '@jest/globals': 29.3.1 + '@jest/globals': 29.5.0 '@metamask/eth-sig-util': 5.0.2 '@microsoft/api-documenter': 7.19.28 '@microsoft/api-extractor': 7.33.8 '@microsoft/api-extractor-model': 7.25.3 '@microsoft/tsdoc': 0.14.2 - '@transmute/credentials-context': 0.7.0-unstable.79 + '@transmute/credentials-context': 0.7.0-unstable.80 '@types/express': 4.17.15 '@types/fs-extra': 11.0.1 '@types/jest': 29.2.6 @@ -75,9 +75,9 @@ importers: caip: 1.1.0 credential-status: 2.0.5 cross-env: 7.0.3 - did-jwt: 6.11.0 - did-jwt-vc: 3.1.0 - did-resolver: 4.0.1 + did-jwt: 6.11.5 + did-jwt-vc: 3.1.2 + did-resolver: 4.1.0 ethr-did-resolver: 8.0.0 express: 4.18.2 ganache: 7.7.3 @@ -96,7 +96,7 @@ importers: ts-jest: 29.0.5_p6ekqnroyms5nhqbfxosryz7rm ts-json-schema-generator: 1.2.0 ts-node: 10.9.1_awa2wsr5thmg3i7jqycphctjfq - typeorm: 0.3.11_ts-node@10.9.1 + typeorm: 0.3.12_ts-node@10.9.1 typescript: 4.9.4 uint8arrays: 4.0.3 uuid: 9.0.0 @@ -176,8 +176,8 @@ importers: dependencies: '@microsoft/api-extractor': 7.33.8 '@microsoft/api-extractor-model': 7.25.3 - '@transmute/credentials-context': 0.7.0-unstable.79 - '@types/blessed': 0.1.19 + '@transmute/credentials-context': 0.7.0-unstable.80 + '@types/blessed': 0.1.21 '@types/swagger-ui-express': 4.1.3 '@veramo/core': link:../core '@veramo/core-types': link:../core-types @@ -209,15 +209,15 @@ importers: cross-fetch: 3.1.5 date-fns: 2.29.3 debug: 4.3.4 - did-resolver: 4.0.1 + did-resolver: 4.1.0 dotenv: 16.0.3 ethr-did-resolver: 8.0.0 express: 4.18.2 - express-handlebars: 6.0.6 + express-handlebars: 6.0.7 fuzzy: 0.1.3 handlebars: 4.7.7 - inquirer: 9.1.4 - inquirer-autocomplete-prompt: 3.0.0_inquirer@9.1.4 + inquirer: 9.1.5 + inquirer-autocomplete-prompt: 3.0.0_inquirer@9.1.5 json-schema: 0.4.0 json5: 2.2.3 jsonpointer: 5.0.1 @@ -225,15 +225,15 @@ importers: openapi-types: 12.1.0 passport: 0.6.0 passport-http-bearer: 1.0.1 - pg: 8.8.0 + pg: 8.10.0 qrcode-terminal: 0.12.0 sqlite3: 5.1.4 - swagger-ui-express: 4.6.0_express@4.18.2 + swagger-ui-express: 4.6.2_express@4.18.2 ts-json-schema-generator: 1.2.0 - typeorm: 0.3.12_pg@8.8.0+sqlite3@5.1.4 + typeorm: 0.3.12_pg@8.10.0+sqlite3@5.1.4 url-parse: 1.5.10 web-did-resolver: 2.0.21 - ws: 8.12.0 + ws: 8.13.0 yaml: 2.2.1 devDependencies: '@types/debug': 4.1.7 @@ -273,8 +273,8 @@ importers: dependencies: credential-status: 2.0.5 debug: 4.3.4 - did-jwt-vc: 3.1.0 - did-resolver: 4.0.1 + did-jwt-vc: 3.1.2 + did-resolver: 4.1.0 devDependencies: '@types/debug': 4.1.7 typescript: 4.9.4 @@ -324,15 +324,15 @@ importers: '@digitalcredentials/jsonld': 5.2.1 '@digitalcredentials/jsonld-signatures': 9.3.1 '@digitalcredentials/vc': 5.0.0 - '@transmute/credentials-context': 0.7.0-unstable.79 - '@transmute/ed25519-signature-2018': 0.7.0-unstable.79 - '@transmute/json-web-signature': 0.7.0-unstable.79 + '@transmute/credentials-context': 0.7.0-unstable.80 + '@transmute/ed25519-signature-2018': 0.7.0-unstable.80 + '@transmute/json-web-signature': 0.7.0-unstable.80 '@veramo-community/lds-ecdsa-secp256k1-recovery2020': github.com/uport-project/EcdsaSecp256k1RecoverySignature2020/ab0db52de6f4e6663ef271a48009ba26e688ef9b '@veramo/core-types': link:../core-types '@veramo/utils': link:../utils cross-fetch: 3.1.5 debug: 4.3.4 - did-resolver: 4.0.1 + did-resolver: 4.1.0 uint8arrays: 3.1.1 devDependencies: '@types/debug': 4.1.7 @@ -352,8 +352,8 @@ importers: '@veramo/core-types': link:../core-types '@veramo/utils': link:../utils credential-status: 2.0.5 - did-jwt: 6.11.0 - did-resolver: 4.0.1 + did-jwt: 6.11.5 + did-resolver: 4.1.0 devDependencies: '@types/debug': 4.1.7 typescript: 4.9.4 @@ -380,9 +380,9 @@ importers: '@veramo/utils': link:../utils canonicalize: 1.0.8 debug: 4.3.4 - did-jwt: 6.11.0 - did-jwt-vc: 3.1.0 - did-resolver: 4.0.1 + did-jwt: 6.11.5 + did-jwt-vc: 3.1.2 + did-resolver: 4.1.0 uint8arrays: 3.1.1 uuid: 9.0.0 optionalDependencies: @@ -414,8 +414,8 @@ importers: '@veramo/key-manager': link:../key-manager '@veramo/utils': link:../utils debug: 4.3.4 - did-jwt-vc: 3.1.0 - typeorm: 0.3.11_sqlite3@5.1.4 + did-jwt-vc: 3.1.2 + typeorm: 0.3.12_sqlite3@5.1.4 uuid: 9.0.0 devDependencies: '@types/debug': 4.1.7 @@ -438,13 +438,13 @@ importers: typescript: 4.9.4 uuid: ^9.0.0 dependencies: - '@ungap/structured-clone': 1.0.1 + '@ungap/structured-clone': 1.0.2 '@veramo/core-types': link:../core-types '@veramo/did-manager': link:../did-manager '@veramo/key-manager': link:../key-manager '@veramo/utils': link:../utils debug: 4.3.4 - did-jwt-vc: 3.1.0 + did-jwt-vc: 3.1.2 uuid: 9.0.0 devDependencies: '@types/debug': 4.1.7 @@ -476,8 +476,8 @@ importers: '@veramo/utils': link:../utils cross-fetch: 3.1.5 debug: 4.3.4 - did-jwt: 6.11.0 - did-resolver: 4.0.1 + did-jwt: 6.11.5 + did-resolver: 4.1.0 uint8arrays: 3.1.1 uuid: 9.0.0 devDependencies: @@ -511,8 +511,8 @@ importers: '@veramo/core-types': link:../core-types '@veramo/message-handler': link:../message-handler debug: 4.3.4 - did-jwt: 6.11.0 - did-resolver: 4.0.1 + did-jwt: 6.11.5 + did-resolver: 4.1.0 devDependencies: '@types/debug': 4.1.7 typescript: 4.9.4 @@ -590,7 +590,7 @@ importers: '@ethersproject/random': 5.7.0 '@ethersproject/signing-key': 5.7.0 '@sphereon/ion-pow': 0.2.0 - '@sphereon/isomorphic-argon2': 1.0.0 + '@sphereon/isomorphic-argon2': 1.0.1 '@stablelib/ed25519': 1.0.3 '@stablelib/sha256': 1.0.1 '@trust/keyto': 1.0.1 @@ -601,7 +601,7 @@ importers: canonicalize: 1.0.8 cross-fetch: 3.1.5 debug: 4.3.4 - did-resolver: 4.0.1 + did-resolver: 4.1.0 multihashes: 4.0.3 uint8arrays: 3.1.1 devDependencies: @@ -624,7 +624,7 @@ importers: '@veramo/did-manager': link:../did-manager '@veramo/utils': link:../utils debug: 4.3.4 - did-resolver: 4.0.1 + did-resolver: 4.1.0 elliptic: 6.5.4 devDependencies: '@types/debug': 4.1.7 @@ -651,7 +651,7 @@ importers: '@veramo/core-types': link:../core-types '@veramo/did-manager': link:../did-manager debug: 4.3.4 - did-resolver: 4.0.1 + did-resolver: 4.1.0 multibase: 4.0.6 multicodec: 3.2.1 devDependencies: @@ -680,7 +680,7 @@ importers: '@veramo/did-manager': link:../did-manager caip: 1.1.0 debug: 4.3.4 - did-resolver: 4.0.1 + did-resolver: 4.1.0 devDependencies: '@types/debug': 4.1.7 typescript: 4.9.4 @@ -716,7 +716,7 @@ importers: '@veramo/utils': link:../utils cross-fetch: 3.1.5 debug: 4.3.4 - did-resolver: 4.0.1 + did-resolver: 4.1.0 devDependencies: '@types/debug': 4.1.7 ethr-did-resolver: 8.0.0 @@ -745,7 +745,7 @@ importers: '@stablelib/ed25519': 1.0.3 '@veramo/core-types': link:../core-types debug: 4.3.4 - did-jwt: 6.11.0 + did-jwt: 6.11.5 uint8arrays: 3.1.1 uuid: 9.0.0 devDependencies: @@ -793,7 +793,7 @@ importers: '@veramo/key-manager': link:../key-manager base-58: 0.0.1 debug: 4.3.4 - did-jwt: 6.11.0 + did-jwt: 6.11.5 elliptic: 6.5.4 uint8arrays: 3.1.1 devDependencies: @@ -822,6 +822,45 @@ importers: '@types/debug': 4.1.7 typescript: 4.9.4 + packages/kv-store: + specifiers: + '@keyv/compress-brotli': ^1.1.3 + '@keyv/compress-gzip': ^1.2.3 + '@keyv/mongo': ^2.1.8 + '@keyv/sqlite': ^3.6.5 + '@keyv/test-suite': '*' + '@types/json-buffer': ^3.0.0 + '@veramo/core-types': ^5.1.2 + '@veramo/utils': ^5.1.2 + eslint: ^8.33.0 + eslint-plugin-promise: ^6.1.1 + events: ^3.3.0 + json-buffer: ^3.0.1 + keyv: ^4.5.2 + timekeeper: ^2.2.0 + typeorm: ^0.3.10 + typescript: ^4.9.5 + uint8arrays: ^3.1.1 + dependencies: + '@veramo/core-types': link:../core-types + '@veramo/utils': link:../utils + events: 3.3.0 + json-buffer: 3.0.1 + typeorm: 0.3.12 + uint8arrays: 3.1.1 + devDependencies: + '@keyv/compress-brotli': 1.1.3 + '@keyv/compress-gzip': 1.2.3 + '@keyv/mongo': 2.1.8 + '@keyv/sqlite': 3.6.5 + '@keyv/test-suite': 1.9.1 + '@types/json-buffer': 3.0.0 + eslint: 8.36.0 + eslint-plugin-promise: 6.1.1_eslint@8.36.0 + keyv: 4.5.2 + timekeeper: 2.2.0 + typescript: 4.9.5 + packages/message-handler: specifiers: '@types/debug': 4.1.7 @@ -872,7 +911,7 @@ importers: '@veramo/core-types': link:../core-types '@veramo/remote-client': link:../remote-client debug: 4.3.4 - did-resolver: 4.0.1 + did-resolver: 4.1.0 express: 4.18.2 passport: 0.6.0 passport-http-bearer: 1.0.1 @@ -901,7 +940,7 @@ importers: '@veramo/message-handler': link:../message-handler '@veramo/utils': link:../utils debug: 4.3.4 - did-jwt: 6.11.0 + did-jwt: 6.11.5 uuid: 9.0.0 devDependencies: '@types/debug': 4.1.7 @@ -996,22 +1035,22 @@ importers: '@veramo/utils': link:../utils buffer: 6.0.3 crypto: /crypto-browserify/3.12.0 - did-resolver: 4.0.1 + did-resolver: 4.1.0 ethr-did-resolver: 8.0.0 path: /path-browserify/1.0.1 process: 0.11.10 react: 18.2.0 react-dom: 18.2.0_react@18.2.0 stream: /stream-browserify/3.0.0 - typeorm: 0.3.11 + typeorm: 0.3.12 util: 0.12.5 web-did-resolver: 2.0.21 - web-vitals: 3.1.1 + web-vitals: 3.3.0 devDependencies: '@babel/plugin-syntax-import-assertions': 7.20.0 '@babel/preset-typescript': 7.18.6 '@craco/craco': 7.0.0_zesqcerkajynswfwy7hd5fzliu - '@types/eslint': 8.4.10 + '@types/eslint': 8.21.3 '@types/eslint-scope': 3.7.4 '@types/expect-puppeteer': 5.0.2 '@types/jest': 29.2.6 @@ -1046,7 +1085,7 @@ importers: '@veramo/did-discovery': link:../did-discovery '@veramo/did-manager': link:../did-manager '@veramo/utils': link:../utils - did-resolver: 4.0.1 + did-resolver: 4.1.0 devDependencies: typescript: 4.9.4 @@ -1062,77 +1101,893 @@ importers: typescript: 4.9.4 url-parse: ^1.5.4 dependencies: - '@veramo/core-types': link:../core-types - '@veramo/message-handler': link:../message-handler - cross-fetch: 3.1.5 - debug: 4.3.4 - url-parse: 1.5.10 - devDependencies: - '@types/debug': 4.1.7 - '@types/url-parse': 1.4.8 - jest-fetch-mock: 3.0.3 - typescript: 4.9.4 + '@veramo/core-types': link:../core-types + '@veramo/message-handler': link:../message-handler + cross-fetch: 3.1.5 + debug: 4.3.4 + url-parse: 1.5.10 + devDependencies: + '@types/debug': 4.1.7 + '@types/url-parse': 1.4.8 + jest-fetch-mock: 3.0.3 + typescript: 4.9.4 + + packages/utils: + specifiers: + '@ethersproject/signing-key': ^5.7.0 + '@ethersproject/transactions': ^5.7.0 + '@stablelib/ed25519': ^1.0.3 + '@types/debug': 4.1.7 + '@types/elliptic': 6.4.14 + '@types/uuid': 9.0.0 + '@veramo/core-types': ^5.1.2 + blakejs: ^1.1.1 + credential-status: ^2.0.5 + cross-fetch: ^3.1.5 + debug: ^4.3.3 + did-jwt: ^6.9.0 + did-jwt-vc: ^3.1.0 + did-resolver: ^4.0.1 + elliptic: ^6.5.4 + multiformats: ^9.9.0 + uint8arrays: ^3.0.0 + dependencies: + '@ethersproject/signing-key': 5.7.0 + '@ethersproject/transactions': 5.7.0 + '@stablelib/ed25519': 1.0.3 + '@veramo/core-types': link:../core-types + blakejs: 1.2.1 + credential-status: 2.0.5 + cross-fetch: 3.1.5 + debug: 4.3.4 + did-jwt: 6.11.5 + did-jwt-vc: 3.1.2 + did-resolver: 4.1.0 + elliptic: 6.5.4 + multiformats: 9.9.0 + uint8arrays: 3.1.1 + devDependencies: + '@types/debug': 4.1.7 + '@types/elliptic': 6.4.14 + '@types/uuid': 9.0.0 + +packages: + + /@ampproject/remapping/2.2.0: + resolution: {integrity: sha512-qRmjj8nj9qmLTQXXmaR1cck3UXSRMPrbsLJAasZpF+t3riI71BXed5ebIOYwQntykeZuhjsdweEc9BxH5Jc26w==} + engines: {node: '>=6.0.0'} + dependencies: + '@jridgewell/gen-mapping': 0.1.1 + '@jridgewell/trace-mapping': 0.3.17 + dev: true + + /@apideck/better-ajv-errors/0.3.6_ajv@8.12.0: + resolution: {integrity: sha512-P+ZygBLZtkp0qqOAJJVX4oX/sFo5JR3eBWwwuqHHhK0GIgQOKWrAfiAaWX0aArHkRWHMuggFEgAZNxVPwPZYaA==} + engines: {node: '>=10'} + peerDependencies: + ajv: '>=8' + dependencies: + ajv: 8.12.0 + json-schema: 0.4.0 + jsonpointer: 5.0.1 + leven: 3.1.0 + dev: true + + /@aws-crypto/ie11-detection/3.0.0: + resolution: {integrity: sha512-341lBBkiY1DfDNKai/wXM3aujNBkXR7tq1URPQDL9wi3AUbI80NR74uF1TXHMm7po1AcnFk8iu2S2IeU/+/A+Q==} + dependencies: + tslib: 1.14.1 + dev: true + optional: true + + /@aws-crypto/sha256-browser/3.0.0: + resolution: {integrity: sha512-8VLmW2B+gjFbU5uMeqtQM6Nj0/F1bro80xQXCW6CQBWgosFWXTx77aeOF5CAIAmbOK64SdMBJdNr6J41yP5mvQ==} + dependencies: + '@aws-crypto/ie11-detection': 3.0.0 + '@aws-crypto/sha256-js': 3.0.0 + '@aws-crypto/supports-web-crypto': 3.0.0 + '@aws-crypto/util': 3.0.0 + '@aws-sdk/types': 3.295.0 + '@aws-sdk/util-locate-window': 3.295.0 + '@aws-sdk/util-utf8-browser': 3.259.0 + tslib: 1.14.1 + dev: true + optional: true + + /@aws-crypto/sha256-js/3.0.0: + resolution: {integrity: sha512-PnNN7os0+yd1XvXAy23CFOmTbMaDxgxXtTKHybrJ39Y8kGzBATgBFibWJKH6BhytLI/Zyszs87xCOBNyBig6vQ==} + dependencies: + '@aws-crypto/util': 3.0.0 + '@aws-sdk/types': 3.295.0 + tslib: 1.14.1 + dev: true + optional: true + + /@aws-crypto/supports-web-crypto/3.0.0: + resolution: {integrity: sha512-06hBdMwUAb2WFTuGG73LSC0wfPu93xWwo5vL2et9eymgmu3Id5vFAHBbajVWiGhPO37qcsdCap/FqXvJGJWPIg==} + dependencies: + tslib: 1.14.1 + dev: true + optional: true + + /@aws-crypto/util/3.0.0: + resolution: {integrity: sha512-2OJlpeJpCR48CC8r+uKVChzs9Iungj9wkZrl8Z041DWEWvyIHILYKCPNzJghKsivj+S3mLo6BVc7mBNzdxA46w==} + dependencies: + '@aws-sdk/types': 3.295.0 + '@aws-sdk/util-utf8-browser': 3.259.0 + tslib: 1.14.1 + dev: true + optional: true + + /@aws-sdk/abort-controller/3.295.0: + resolution: {integrity: sha512-uohsGotvQ8RTgVZ9sQt0y3L60jBEYgN8MOn3Seaku8HpIIo9c6iIfkF0bMXZeFI2sCxqbrBDbsPKYWxr7rd8LA==} + engines: {node: '>=14.0.0'} + dependencies: + '@aws-sdk/types': 3.295.0 + tslib: 2.5.0 + dev: true + optional: true + + /@aws-sdk/client-cognito-identity/3.295.0: + resolution: {integrity: sha512-W17vm7epIEHT7Lr12T0xTAipze4dyS5u6onLV7Sx+5tEiMObmkfkXQsjCheMqHD7pGEJNZqAvY43GeirtzOlSw==} + engines: {node: '>=14.0.0'} + dependencies: + '@aws-crypto/sha256-browser': 3.0.0 + '@aws-crypto/sha256-js': 3.0.0 + '@aws-sdk/client-sts': 3.295.0 + '@aws-sdk/config-resolver': 3.295.0 + '@aws-sdk/credential-provider-node': 3.295.0 + '@aws-sdk/fetch-http-handler': 3.295.0 + '@aws-sdk/hash-node': 3.295.0 + '@aws-sdk/invalid-dependency': 3.295.0 + '@aws-sdk/middleware-content-length': 3.295.0 + '@aws-sdk/middleware-endpoint': 3.295.0 + '@aws-sdk/middleware-host-header': 3.295.0 + '@aws-sdk/middleware-logger': 3.295.0 + '@aws-sdk/middleware-recursion-detection': 3.295.0 + '@aws-sdk/middleware-retry': 3.295.0 + '@aws-sdk/middleware-serde': 3.295.0 + '@aws-sdk/middleware-signing': 3.295.0 + '@aws-sdk/middleware-stack': 3.295.0 + '@aws-sdk/middleware-user-agent': 3.295.0 + '@aws-sdk/node-config-provider': 3.295.0 + '@aws-sdk/node-http-handler': 3.295.0 + '@aws-sdk/protocol-http': 3.295.0 + '@aws-sdk/smithy-client': 3.295.0 + '@aws-sdk/types': 3.295.0 + '@aws-sdk/url-parser': 3.295.0 + '@aws-sdk/util-base64': 3.295.0 + '@aws-sdk/util-body-length-browser': 3.295.0 + '@aws-sdk/util-body-length-node': 3.295.0 + '@aws-sdk/util-defaults-mode-browser': 3.295.0 + '@aws-sdk/util-defaults-mode-node': 3.295.0 + '@aws-sdk/util-endpoints': 3.295.0 + '@aws-sdk/util-retry': 3.295.0 + '@aws-sdk/util-user-agent-browser': 3.295.0 + '@aws-sdk/util-user-agent-node': 3.295.0 + '@aws-sdk/util-utf8': 3.295.0 + tslib: 2.5.0 + transitivePeerDependencies: + - aws-crt + dev: true + optional: true + + /@aws-sdk/client-sso-oidc/3.295.0: + resolution: {integrity: sha512-HijuG2OAmTy0Wa3JHgIMBrBlsWC6GjWkH8KcRIGbFUH2nW8LFh3gBKuB1oubZ4wAdOIBFNECWA6FKFayFlKmew==} + engines: {node: '>=14.0.0'} + dependencies: + '@aws-crypto/sha256-browser': 3.0.0 + '@aws-crypto/sha256-js': 3.0.0 + '@aws-sdk/config-resolver': 3.295.0 + '@aws-sdk/fetch-http-handler': 3.295.0 + '@aws-sdk/hash-node': 3.295.0 + '@aws-sdk/invalid-dependency': 3.295.0 + '@aws-sdk/middleware-content-length': 3.295.0 + '@aws-sdk/middleware-endpoint': 3.295.0 + '@aws-sdk/middleware-host-header': 3.295.0 + '@aws-sdk/middleware-logger': 3.295.0 + '@aws-sdk/middleware-recursion-detection': 3.295.0 + '@aws-sdk/middleware-retry': 3.295.0 + '@aws-sdk/middleware-serde': 3.295.0 + '@aws-sdk/middleware-stack': 3.295.0 + '@aws-sdk/middleware-user-agent': 3.295.0 + '@aws-sdk/node-config-provider': 3.295.0 + '@aws-sdk/node-http-handler': 3.295.0 + '@aws-sdk/protocol-http': 3.295.0 + '@aws-sdk/smithy-client': 3.295.0 + '@aws-sdk/types': 3.295.0 + '@aws-sdk/url-parser': 3.295.0 + '@aws-sdk/util-base64': 3.295.0 + '@aws-sdk/util-body-length-browser': 3.295.0 + '@aws-sdk/util-body-length-node': 3.295.0 + '@aws-sdk/util-defaults-mode-browser': 3.295.0 + '@aws-sdk/util-defaults-mode-node': 3.295.0 + '@aws-sdk/util-endpoints': 3.295.0 + '@aws-sdk/util-retry': 3.295.0 + '@aws-sdk/util-user-agent-browser': 3.295.0 + '@aws-sdk/util-user-agent-node': 3.295.0 + '@aws-sdk/util-utf8': 3.295.0 + tslib: 2.5.0 + transitivePeerDependencies: + - aws-crt + dev: true + optional: true + + /@aws-sdk/client-sso/3.295.0: + resolution: {integrity: sha512-uNEchm1LAQHP2/S21jz0NxCe8yqUe3J1jZG3N/dwx7uKVndHomTmjBsClGxT8IL9hC/Xl57G+fEpTCrFMjUR2g==} + engines: {node: '>=14.0.0'} + dependencies: + '@aws-crypto/sha256-browser': 3.0.0 + '@aws-crypto/sha256-js': 3.0.0 + '@aws-sdk/config-resolver': 3.295.0 + '@aws-sdk/fetch-http-handler': 3.295.0 + '@aws-sdk/hash-node': 3.295.0 + '@aws-sdk/invalid-dependency': 3.295.0 + '@aws-sdk/middleware-content-length': 3.295.0 + '@aws-sdk/middleware-endpoint': 3.295.0 + '@aws-sdk/middleware-host-header': 3.295.0 + '@aws-sdk/middleware-logger': 3.295.0 + '@aws-sdk/middleware-recursion-detection': 3.295.0 + '@aws-sdk/middleware-retry': 3.295.0 + '@aws-sdk/middleware-serde': 3.295.0 + '@aws-sdk/middleware-stack': 3.295.0 + '@aws-sdk/middleware-user-agent': 3.295.0 + '@aws-sdk/node-config-provider': 3.295.0 + '@aws-sdk/node-http-handler': 3.295.0 + '@aws-sdk/protocol-http': 3.295.0 + '@aws-sdk/smithy-client': 3.295.0 + '@aws-sdk/types': 3.295.0 + '@aws-sdk/url-parser': 3.295.0 + '@aws-sdk/util-base64': 3.295.0 + '@aws-sdk/util-body-length-browser': 3.295.0 + '@aws-sdk/util-body-length-node': 3.295.0 + '@aws-sdk/util-defaults-mode-browser': 3.295.0 + '@aws-sdk/util-defaults-mode-node': 3.295.0 + '@aws-sdk/util-endpoints': 3.295.0 + '@aws-sdk/util-retry': 3.295.0 + '@aws-sdk/util-user-agent-browser': 3.295.0 + '@aws-sdk/util-user-agent-node': 3.295.0 + '@aws-sdk/util-utf8': 3.295.0 + tslib: 2.5.0 + transitivePeerDependencies: + - aws-crt + dev: true + optional: true + + /@aws-sdk/client-sts/3.295.0: + resolution: {integrity: sha512-KrLnG5EcXvry9tmsTAONhlj60F0+Z7P2PtT0XDsS8pLayHAtd9lKXsf14DOSQa9+LbPLMFbfLbuSwvPYvgxMzg==} + engines: {node: '>=14.0.0'} + dependencies: + '@aws-crypto/sha256-browser': 3.0.0 + '@aws-crypto/sha256-js': 3.0.0 + '@aws-sdk/config-resolver': 3.295.0 + '@aws-sdk/credential-provider-node': 3.295.0 + '@aws-sdk/fetch-http-handler': 3.295.0 + '@aws-sdk/hash-node': 3.295.0 + '@aws-sdk/invalid-dependency': 3.295.0 + '@aws-sdk/middleware-content-length': 3.295.0 + '@aws-sdk/middleware-endpoint': 3.295.0 + '@aws-sdk/middleware-host-header': 3.295.0 + '@aws-sdk/middleware-logger': 3.295.0 + '@aws-sdk/middleware-recursion-detection': 3.295.0 + '@aws-sdk/middleware-retry': 3.295.0 + '@aws-sdk/middleware-sdk-sts': 3.295.0 + '@aws-sdk/middleware-serde': 3.295.0 + '@aws-sdk/middleware-signing': 3.295.0 + '@aws-sdk/middleware-stack': 3.295.0 + '@aws-sdk/middleware-user-agent': 3.295.0 + '@aws-sdk/node-config-provider': 3.295.0 + '@aws-sdk/node-http-handler': 3.295.0 + '@aws-sdk/protocol-http': 3.295.0 + '@aws-sdk/smithy-client': 3.295.0 + '@aws-sdk/types': 3.295.0 + '@aws-sdk/url-parser': 3.295.0 + '@aws-sdk/util-base64': 3.295.0 + '@aws-sdk/util-body-length-browser': 3.295.0 + '@aws-sdk/util-body-length-node': 3.295.0 + '@aws-sdk/util-defaults-mode-browser': 3.295.0 + '@aws-sdk/util-defaults-mode-node': 3.295.0 + '@aws-sdk/util-endpoints': 3.295.0 + '@aws-sdk/util-retry': 3.295.0 + '@aws-sdk/util-user-agent-browser': 3.295.0 + '@aws-sdk/util-user-agent-node': 3.295.0 + '@aws-sdk/util-utf8': 3.295.0 + fast-xml-parser: 4.1.2 + tslib: 2.5.0 + transitivePeerDependencies: + - aws-crt + dev: true + optional: true + + /@aws-sdk/config-resolver/3.295.0: + resolution: {integrity: sha512-oSGdGAjmOesxGAT/Ce8P7Gdvf4KVQjasKqmlAMTXsUBxh8Mx8BQH9V3UCiCdfJ2Vx7H4pqN4Y8WcAQkje4uvbQ==} + engines: {node: '>=14.0.0'} + dependencies: + '@aws-sdk/signature-v4': 3.295.0 + '@aws-sdk/types': 3.295.0 + '@aws-sdk/util-config-provider': 3.295.0 + '@aws-sdk/util-middleware': 3.295.0 + tslib: 2.5.0 + dev: true + optional: true + + /@aws-sdk/credential-provider-cognito-identity/3.295.0: + resolution: {integrity: sha512-1cqqctA2UdzeV+jCg3vk5yIbkT9JX0M+xtyPcsIcKqwBHEl48SCmLUTs6C7ZpcRS61vlkvE0bTEq+EfMCxuaDw==} + engines: {node: '>=14.0.0'} + dependencies: + '@aws-sdk/client-cognito-identity': 3.295.0 + '@aws-sdk/property-provider': 3.295.0 + '@aws-sdk/types': 3.295.0 + tslib: 2.5.0 + transitivePeerDependencies: + - aws-crt + dev: true + optional: true + + /@aws-sdk/credential-provider-env/3.295.0: + resolution: {integrity: sha512-YjUDJwhgwUgFYT4fJQVCMA1Abw2Jw1xC3EeNxeV2L54CvM9PlbFuRa5qJehePKoTLyva4bjLsMXsensXrEEIGQ==} + engines: {node: '>=14.0.0'} + dependencies: + '@aws-sdk/property-provider': 3.295.0 + '@aws-sdk/types': 3.295.0 + tslib: 2.5.0 + dev: true + optional: true + + /@aws-sdk/credential-provider-imds/3.295.0: + resolution: {integrity: sha512-+tOVCZi7LUG2pvjK9P35hhXL1cZTJsbGtrMsIxrlUODjKEhht4RSiQH7zT324x6MkYby9iLjU4SUejyKBKDhYQ==} + engines: {node: '>=14.0.0'} + dependencies: + '@aws-sdk/node-config-provider': 3.295.0 + '@aws-sdk/property-provider': 3.295.0 + '@aws-sdk/types': 3.295.0 + '@aws-sdk/url-parser': 3.295.0 + tslib: 2.5.0 + dev: true + optional: true + + /@aws-sdk/credential-provider-ini/3.295.0: + resolution: {integrity: sha512-XU3UqVVxxjyXcZ2Wkx3CM+/eLUM/EDlqJkLU6nl3FDGzPZeXC3G9Z9ZywGBo7dpRbBpDfpzSSukJisiGLTwg2w==} + engines: {node: '>=14.0.0'} + dependencies: + '@aws-sdk/credential-provider-env': 3.295.0 + '@aws-sdk/credential-provider-imds': 3.295.0 + '@aws-sdk/credential-provider-process': 3.295.0 + '@aws-sdk/credential-provider-sso': 3.295.0 + '@aws-sdk/credential-provider-web-identity': 3.295.0 + '@aws-sdk/property-provider': 3.295.0 + '@aws-sdk/shared-ini-file-loader': 3.295.0 + '@aws-sdk/types': 3.295.0 + tslib: 2.5.0 + transitivePeerDependencies: + - aws-crt + dev: true + optional: true + + /@aws-sdk/credential-provider-node/3.295.0: + resolution: {integrity: sha512-dU+nDJJKCyx/YBKeGgSuFM1okdoNVGWLTzrkPohPGy5+KnPaFCscrqRe2ni0ihQscguwSFXygV5SQoYNp1FGwA==} + engines: {node: '>=14.0.0'} + dependencies: + '@aws-sdk/credential-provider-env': 3.295.0 + '@aws-sdk/credential-provider-imds': 3.295.0 + '@aws-sdk/credential-provider-ini': 3.295.0 + '@aws-sdk/credential-provider-process': 3.295.0 + '@aws-sdk/credential-provider-sso': 3.295.0 + '@aws-sdk/credential-provider-web-identity': 3.295.0 + '@aws-sdk/property-provider': 3.295.0 + '@aws-sdk/shared-ini-file-loader': 3.295.0 + '@aws-sdk/types': 3.295.0 + tslib: 2.5.0 + transitivePeerDependencies: + - aws-crt + dev: true + optional: true + + /@aws-sdk/credential-provider-process/3.295.0: + resolution: {integrity: sha512-efA41QAcKlb/hbDZVXnUApMPjOnu8Zj58o0WqHAdcpu7qSDzZdsmJ6dqknAbj14cyDjzXaexuN+wubGUAL9IoQ==} + engines: {node: '>=14.0.0'} + dependencies: + '@aws-sdk/property-provider': 3.295.0 + '@aws-sdk/shared-ini-file-loader': 3.295.0 + '@aws-sdk/types': 3.295.0 + tslib: 2.5.0 + dev: true + optional: true + + /@aws-sdk/credential-provider-sso/3.295.0: + resolution: {integrity: sha512-cJoCLbg3ud3/NK7otcBHkRaPvdsVEyX9tryLIPuj8rgagFWneexVh4Kzs9k+PtRN764TjVFzITw99LxBf0fe1w==} + engines: {node: '>=14.0.0'} + dependencies: + '@aws-sdk/client-sso': 3.295.0 + '@aws-sdk/property-provider': 3.295.0 + '@aws-sdk/shared-ini-file-loader': 3.295.0 + '@aws-sdk/token-providers': 3.295.0 + '@aws-sdk/types': 3.295.0 + tslib: 2.5.0 + transitivePeerDependencies: + - aws-crt + dev: true + optional: true + + /@aws-sdk/credential-provider-web-identity/3.295.0: + resolution: {integrity: sha512-rBDhRYh4PiOnvz0M7AbYZZCiaPm5JDkM0xzGHEKKiW/A1wS2Gd2qbyEIK4APQ7vZMX+IJaSBBabfqm+vX5Y1kw==} + engines: {node: '>=14.0.0'} + dependencies: + '@aws-sdk/property-provider': 3.295.0 + '@aws-sdk/types': 3.295.0 + tslib: 2.5.0 + dev: true + optional: true + + /@aws-sdk/credential-providers/3.295.0: + resolution: {integrity: sha512-2SV5UFD0pyCkSP74z4MtPq1AT71uaQ/ERhLMms/kpwcyfWWI/e6m8rfSzSRsVjJOU3t08t8WGHOgaUiJrBh/DA==} + engines: {node: '>=14.0.0'} + requiresBuild: true + dependencies: + '@aws-sdk/client-cognito-identity': 3.295.0 + '@aws-sdk/client-sso': 3.295.0 + '@aws-sdk/client-sts': 3.295.0 + '@aws-sdk/credential-provider-cognito-identity': 3.295.0 + '@aws-sdk/credential-provider-env': 3.295.0 + '@aws-sdk/credential-provider-imds': 3.295.0 + '@aws-sdk/credential-provider-ini': 3.295.0 + '@aws-sdk/credential-provider-node': 3.295.0 + '@aws-sdk/credential-provider-process': 3.295.0 + '@aws-sdk/credential-provider-sso': 3.295.0 + '@aws-sdk/credential-provider-web-identity': 3.295.0 + '@aws-sdk/property-provider': 3.295.0 + '@aws-sdk/shared-ini-file-loader': 3.295.0 + '@aws-sdk/types': 3.295.0 + tslib: 2.5.0 + transitivePeerDependencies: + - aws-crt + dev: true + optional: true + + /@aws-sdk/fetch-http-handler/3.295.0: + resolution: {integrity: sha512-xs274LSLeF2313dAaq7gvm/m0e0tb0/Bt2vew4Lj2zP6YNRtuNlStfSNhYHHuIkOqjTwLeAmKdK+cWFnXKQPTA==} + dependencies: + '@aws-sdk/protocol-http': 3.295.0 + '@aws-sdk/querystring-builder': 3.295.0 + '@aws-sdk/types': 3.295.0 + '@aws-sdk/util-base64': 3.295.0 + tslib: 2.5.0 + dev: true + optional: true + + /@aws-sdk/hash-node/3.295.0: + resolution: {integrity: sha512-jLq6QXUpvtYYu9+K8BECXpw7U52RBrewj/t/ALUVJsEhtwpx16K1WzMqwcVhkQ8mc/xQiki/T4eFSThODZAlcw==} + engines: {node: '>=14.0.0'} + dependencies: + '@aws-sdk/types': 3.295.0 + '@aws-sdk/util-buffer-from': 3.295.0 + '@aws-sdk/util-utf8': 3.295.0 + tslib: 2.5.0 + dev: true + optional: true + + /@aws-sdk/invalid-dependency/3.295.0: + resolution: {integrity: sha512-ctXFKW4qnhLqZ0+qyEK1l0TOYQYwd2+vjj6wdjAiHuKoH6yIMqJ97LOT7oq3drvMQbnXa4I2jCOSFVuNSnzJ7Q==} + dependencies: + '@aws-sdk/types': 3.295.0 + tslib: 2.5.0 + dev: true + optional: true + + /@aws-sdk/is-array-buffer/3.295.0: + resolution: {integrity: sha512-SCIt10cr5dud7hvwveU4wkLjvkGssJ3GrcbHCds2NwI+JHmpcaaNYLAqi305JAuT29T36U5ssTFDSmrrEOcfag==} + engines: {node: '>=14.0.0'} + dependencies: + tslib: 2.5.0 + dev: true + optional: true + + /@aws-sdk/middleware-content-length/3.295.0: + resolution: {integrity: sha512-XzrVPuO1JwxJx5PFHP9eMZLP9zyQxPZ8PM9gTWdOgoc1BMtxCkDZ3HLOnJtcfmfbz8nwSt2/H+wlBEXaRrf7Fg==} + engines: {node: '>=14.0.0'} + dependencies: + '@aws-sdk/protocol-http': 3.295.0 + '@aws-sdk/types': 3.295.0 + tslib: 2.5.0 + dev: true + optional: true + + /@aws-sdk/middleware-endpoint/3.295.0: + resolution: {integrity: sha512-MFRW6XyZABAOeFPu2CC37h+ol6ADaKs8fqqJrv9gtNb13r6c0UeztQFwI6V3tLlZwX7zzH7HcwYFKyks5VO6Xw==} + engines: {node: '>=14.0.0'} + dependencies: + '@aws-sdk/middleware-serde': 3.295.0 + '@aws-sdk/protocol-http': 3.295.0 + '@aws-sdk/signature-v4': 3.295.0 + '@aws-sdk/types': 3.295.0 + '@aws-sdk/url-parser': 3.295.0 + '@aws-sdk/util-config-provider': 3.295.0 + '@aws-sdk/util-middleware': 3.295.0 + tslib: 2.5.0 + dev: true + optional: true + + /@aws-sdk/middleware-host-header/3.295.0: + resolution: {integrity: sha512-CjdC8eCILSuNHTF2AZOtFta5lMvLMM3bXBTto0LKYeHQixgBHmRSgcShfBTiWEPgIgeNSFEjMbKX6bLnHSnODg==} + engines: {node: '>=14.0.0'} + dependencies: + '@aws-sdk/protocol-http': 3.295.0 + '@aws-sdk/types': 3.295.0 + tslib: 2.5.0 + dev: true + optional: true + + /@aws-sdk/middleware-logger/3.295.0: + resolution: {integrity: sha512-dbv0VTA7Dh6ZCkmCs0U7/ssZiDtHDI7Bq3zab+RxEyLEE4wr73bW6occq579U/QQJHOZQ6EBdvYig8ntRNlzVg==} + engines: {node: '>=14.0.0'} + dependencies: + '@aws-sdk/types': 3.295.0 + tslib: 2.5.0 + dev: true + optional: true + + /@aws-sdk/middleware-recursion-detection/3.295.0: + resolution: {integrity: sha512-9Wjb8Y7H0ctL8gIKtGFwXhpHb3c2UGGi2P9I+p2PJwW08rDnMlOpUItY0v49SbZ+6uct1VNBs6iJ+jkv0h5MEQ==} + engines: {node: '>=14.0.0'} + dependencies: + '@aws-sdk/protocol-http': 3.295.0 + '@aws-sdk/types': 3.295.0 + tslib: 2.5.0 + dev: true + optional: true + + /@aws-sdk/middleware-retry/3.295.0: + resolution: {integrity: sha512-IdVX86VaDSSPcGI1JJM8lffabOMmGC9TUpskKkKdFnLW6eKtFohye+hlf2h6Y/2wdvoqCdi6XZyQX9WPJHiHtw==} + engines: {node: '>=14.0.0'} + dependencies: + '@aws-sdk/protocol-http': 3.295.0 + '@aws-sdk/service-error-classification': 3.295.0 + '@aws-sdk/types': 3.295.0 + '@aws-sdk/util-middleware': 3.295.0 + '@aws-sdk/util-retry': 3.295.0 + tslib: 2.5.0 + uuid: 8.3.2 + dev: true + optional: true + + /@aws-sdk/middleware-sdk-sts/3.295.0: + resolution: {integrity: sha512-QTHR+ZXAmii8XsbdRrqJWn6LVeGiRcFfGlniIb1YEjw1p2FU5kpayq8N1SLLtj3JWmE61Bpn0J+LAQmfjbCqFA==} + engines: {node: '>=14.0.0'} + dependencies: + '@aws-sdk/middleware-signing': 3.295.0 + '@aws-sdk/property-provider': 3.295.0 + '@aws-sdk/protocol-http': 3.295.0 + '@aws-sdk/signature-v4': 3.295.0 + '@aws-sdk/types': 3.295.0 + tslib: 2.5.0 + dev: true + optional: true + + /@aws-sdk/middleware-serde/3.295.0: + resolution: {integrity: sha512-LAKtKNKdu6Si7rmLatAq87LSa27mR6HUZ7tZHD2E4SQWOoNpS4ikKfUfATkbjC2GOfbrBYmFmQgBvpghYYZ3jw==} + engines: {node: '>=14.0.0'} + dependencies: + '@aws-sdk/types': 3.295.0 + tslib: 2.5.0 + dev: true + optional: true + + /@aws-sdk/middleware-signing/3.295.0: + resolution: {integrity: sha512-LcNzGqtpo9sdWJ9mKtgjragncbin/Ynbz/pklH/HcIIi45w8ZVrhLBpW1iQZ0MBKyDacAAeWtXxKHy55DkHlvg==} + engines: {node: '>=14.0.0'} + dependencies: + '@aws-sdk/property-provider': 3.295.0 + '@aws-sdk/protocol-http': 3.295.0 + '@aws-sdk/signature-v4': 3.295.0 + '@aws-sdk/types': 3.295.0 + '@aws-sdk/util-middleware': 3.295.0 + tslib: 2.5.0 + dev: true + optional: true + + /@aws-sdk/middleware-stack/3.295.0: + resolution: {integrity: sha512-65HahosleRbpNgu6/XkABcrBmZHudRYTNpyKRfSY18QPKVQv3PRgRqv/goHrc6DHo8cxAliBoMciN88Ali1ufQ==} + engines: {node: '>=14.0.0'} + dependencies: + tslib: 2.5.0 + dev: true + optional: true + + /@aws-sdk/middleware-user-agent/3.295.0: + resolution: {integrity: sha512-11MGXHFxmXgQx6aAFshLqHm3US7awXMP1Hq3IAu6j+GXSdkpkIojh/LlzRbSUftAhh23C5oQpgOkqs6fox4xCw==} + engines: {node: '>=14.0.0'} + dependencies: + '@aws-sdk/protocol-http': 3.295.0 + '@aws-sdk/types': 3.295.0 + '@aws-sdk/util-endpoints': 3.295.0 + tslib: 2.5.0 + dev: true + optional: true + + /@aws-sdk/node-config-provider/3.295.0: + resolution: {integrity: sha512-6lkCmPMmXn6CF1qQHkE/Ii88ge/Mz9MWX+Krj3ICdBRwdMqm4LGzc9qG+bJeqbVI3tPO3djmL+b4SW4a3pvKsw==} + engines: {node: '>=14.0.0'} + dependencies: + '@aws-sdk/property-provider': 3.295.0 + '@aws-sdk/shared-ini-file-loader': 3.295.0 + '@aws-sdk/types': 3.295.0 + tslib: 2.5.0 + dev: true + optional: true + + /@aws-sdk/node-http-handler/3.295.0: + resolution: {integrity: sha512-Ga3vp/IY3LgzTdlSTAcxncYebE0lpQAdgxnko+z1i67OaI8DqNlTL8vdYBoHDaFOb9E6ErShLytVoHAEuJ5TpA==} + engines: {node: '>=14.0.0'} + dependencies: + '@aws-sdk/abort-controller': 3.295.0 + '@aws-sdk/protocol-http': 3.295.0 + '@aws-sdk/querystring-builder': 3.295.0 + '@aws-sdk/types': 3.295.0 + tslib: 2.5.0 + dev: true + optional: true + + /@aws-sdk/property-provider/3.295.0: + resolution: {integrity: sha512-5hxI1W36JWugYaBng7hKH2IxDtNohk0KMsz6wgyHVxTcsrO9VohlYa+5rHntmt3SbQAyy7n5ft9/vb1Nb5TGCw==} + engines: {node: '>=14.0.0'} + dependencies: + '@aws-sdk/types': 3.295.0 + tslib: 2.5.0 + dev: true + optional: true + + /@aws-sdk/protocol-http/3.295.0: + resolution: {integrity: sha512-mDl1jfNDtOFXKQrkiTY0dbTwC9LLjmmAmE8TpxXC1v6JbOihVrARiyPdumZWP4J/71YAim1ASS6JlQHw/GuAqg==} + engines: {node: '>=14.0.0'} + dependencies: + '@aws-sdk/types': 3.295.0 + tslib: 2.5.0 + dev: true + optional: true + + /@aws-sdk/querystring-builder/3.295.0: + resolution: {integrity: sha512-zgFb2pSkxOCHVusZpPjQVIwmQZf59MQEYJETk42OKaigItGTHjap9DrFzKo6+SrHeyEpJLxlZKSz5up4Hulwdw==} + engines: {node: '>=14.0.0'} + dependencies: + '@aws-sdk/types': 3.295.0 + '@aws-sdk/util-uri-escape': 3.295.0 + tslib: 2.5.0 + dev: true + optional: true + + /@aws-sdk/querystring-parser/3.295.0: + resolution: {integrity: sha512-bcm8IBHmflH1e6EHznScJbfvAmNZqwZtC6QaynNk6no/YYKr5Swm+GHqxurKBm86qCYIOoSvdoq8tyhUjXnh4Q==} + engines: {node: '>=14.0.0'} + dependencies: + '@aws-sdk/types': 3.295.0 + tslib: 2.5.0 + dev: true + optional: true + + /@aws-sdk/service-error-classification/3.295.0: + resolution: {integrity: sha512-zqGxXkZUxPD7E0FJXKHZLuJwr02zg/Ux4d+elT/MUTYT9eKupmG2S5586/hZdjUxGGA7gmMMJr92mjrLVJUAkQ==} + engines: {node: '>=14.0.0'} + dev: true + optional: true + + /@aws-sdk/shared-ini-file-loader/3.295.0: + resolution: {integrity: sha512-LF9+jk37/VPoIyadeb+Ls0Tqda6dauo3uG7FDfg7qdiOpdyNRuFaIZE//MTSG5mk4ExAwjkFsnslZaw31hbbUw==} + engines: {node: '>=14.0.0'} + dependencies: + '@aws-sdk/types': 3.295.0 + tslib: 2.5.0 + dev: true + optional: true + + /@aws-sdk/signature-v4/3.295.0: + resolution: {integrity: sha512-yS00sIwWEnPB4aHZWJZpXVL2/wbwrymxbPZw/Xq0JXbR9+RXhzENBqw7C3d7E11K1xLnoTYlVqcJhNuNXgyeZg==} + engines: {node: '>=14.0.0'} + dependencies: + '@aws-sdk/is-array-buffer': 3.295.0 + '@aws-sdk/types': 3.295.0 + '@aws-sdk/util-hex-encoding': 3.295.0 + '@aws-sdk/util-middleware': 3.295.0 + '@aws-sdk/util-uri-escape': 3.295.0 + '@aws-sdk/util-utf8': 3.295.0 + tslib: 2.5.0 + dev: true + optional: true + + /@aws-sdk/smithy-client/3.295.0: + resolution: {integrity: sha512-6Ifq+szMeX6MjWkEEiXvQGm7moY5Wt6WfFi+dMLkZmPdOEWYB0Cr0EBpY605WHWGz702CpFLvM/z6rUkvtak5g==} + engines: {node: '>=14.0.0'} + dependencies: + '@aws-sdk/middleware-stack': 3.295.0 + '@aws-sdk/types': 3.295.0 + tslib: 2.5.0 + dev: true + optional: true + + /@aws-sdk/token-providers/3.295.0: + resolution: {integrity: sha512-/6PsplDacgBoQxFBbKYMW9ZlEeTHHdAm+xE6V+qjEsc0YXy32LwuFllfihryXLjWftrC3kr8EiehLU6d+9JaKA==} + engines: {node: '>=14.0.0'} + dependencies: + '@aws-sdk/client-sso-oidc': 3.295.0 + '@aws-sdk/property-provider': 3.295.0 + '@aws-sdk/shared-ini-file-loader': 3.295.0 + '@aws-sdk/types': 3.295.0 + tslib: 2.5.0 + transitivePeerDependencies: + - aws-crt + dev: true + optional: true + + /@aws-sdk/types/3.295.0: + resolution: {integrity: sha512-flwibucy5+PshdFLeMCClMqV3eFmjUDhcLkEUeQvVgyhGxJPIrU3ntGAfqz27bvk47ZVX5TUdCG5JdxuUaRO+A==} + engines: {node: '>=14.0.0'} + dependencies: + tslib: 2.5.0 + dev: true + optional: true + + /@aws-sdk/url-parser/3.295.0: + resolution: {integrity: sha512-hev5gbi+EWHLaFNgVpoNeNTaJpqfa9ev0SvqgvCPqGlIdUnt3cP9t1Mc8jvx2kUk8ebPtrrq6cp8ZslfxoFeVA==} + dependencies: + '@aws-sdk/querystring-parser': 3.295.0 + '@aws-sdk/types': 3.295.0 + tslib: 2.5.0 + dev: true + optional: true + + /@aws-sdk/util-base64/3.295.0: + resolution: {integrity: sha512-z1r40BsBiOTALnzASvLb4qutGwPpL+jH2UKTCV5WJLXZFMzRnpZaRfeZGE8lMJ/i0+jv9H9G1FmVzE8UgB4rhw==} + engines: {node: '>=14.0.0'} + dependencies: + '@aws-sdk/util-buffer-from': 3.295.0 + tslib: 2.5.0 + dev: true + optional: true + + /@aws-sdk/util-body-length-browser/3.295.0: + resolution: {integrity: sha512-NbG4/RSHV1VueStPRclSo5zRjNUmcDlNAs29sniZF+YaN0+Ad7hEdu/YgJw39shBfUaurz2Wv0pufU3cxE5Tng==} + dependencies: + tslib: 2.5.0 + dev: true + optional: true + + /@aws-sdk/util-body-length-node/3.295.0: + resolution: {integrity: sha512-dvGf8VBmrT66lM0n6P/h7wnlHS4Atafyivyl8f4TUCMvRdpqryvvrtnX6yYcq3T7VKQmas/2SOlgDvcrhGXaiw==} + engines: {node: '>=14.0.0'} + dependencies: + tslib: 2.5.0 + dev: true + optional: true + + /@aws-sdk/util-buffer-from/3.295.0: + resolution: {integrity: sha512-5ezVEITQnrQKn+CU9qfZHgRp2nrrbX0Clmlm9aiNjAEQEPHY33tWl0t6n8h8yU+IpGiNRMWBVC4aSJaE5NA1mA==} + engines: {node: '>=14.0.0'} + dependencies: + '@aws-sdk/is-array-buffer': 3.295.0 + tslib: 2.5.0 + dev: true + optional: true + + /@aws-sdk/util-config-provider/3.295.0: + resolution: {integrity: sha512-/5Dl1aV2yI8YQjqwmg4RTnl/E9NmNsx7HIwBZt+dTcOrM0LMUwczQBFFcLyqCj/qv5y+VsvLoAAA/OiBT7hb3w==} + engines: {node: '>=14.0.0'} + dependencies: + tslib: 2.5.0 + dev: true + optional: true + + /@aws-sdk/util-defaults-mode-browser/3.295.0: + resolution: {integrity: sha512-QqVyl4Sxi9Umn2+TdhZR8fHQRWWs2361JCylig1GzH+ud+8jinDS6tLtWxhzrea2XdKGb4xqjTC4AhCuBqgSmA==} + engines: {node: '>= 10.0.0'} + dependencies: + '@aws-sdk/property-provider': 3.295.0 + '@aws-sdk/types': 3.295.0 + bowser: 2.11.0 + tslib: 2.5.0 + dev: true + optional: true + + /@aws-sdk/util-defaults-mode-node/3.295.0: + resolution: {integrity: sha512-R1e94v6HMsUec8/P2tJmab5fYsT9X3+Kh1rMzCEA27V+kAD88eKStzE26Yb1kQDAC+Fg3Fe1KS1bg4dmQKUSVg==} + engines: {node: '>= 10.0.0'} + dependencies: + '@aws-sdk/config-resolver': 3.295.0 + '@aws-sdk/credential-provider-imds': 3.295.0 + '@aws-sdk/node-config-provider': 3.295.0 + '@aws-sdk/property-provider': 3.295.0 + '@aws-sdk/types': 3.295.0 + tslib: 2.5.0 + dev: true + optional: true + + /@aws-sdk/util-endpoints/3.295.0: + resolution: {integrity: sha512-WZR6jAD++7Wb6ER1SM/U82xU+OVWihcc8V90AzTWyDb0JPeKuogwWokV1aHXiGaQGbWULr1wY1R3wthhvEs3Bg==} + engines: {node: '>=14.0.0'} + dependencies: + '@aws-sdk/types': 3.295.0 + tslib: 2.5.0 + dev: true + optional: true + + /@aws-sdk/util-hex-encoding/3.295.0: + resolution: {integrity: sha512-XJcoVo41kHzhe28PBm/rqt5mdCp8R6abwiW9ug1dA6FOoPUO8kBUxDv6xaOmA2hfRvd2ocFfBXaUCBqUowkGcQ==} + engines: {node: '>=14.0.0'} + dependencies: + tslib: 2.5.0 + dev: true + optional: true + + /@aws-sdk/util-locate-window/3.295.0: + resolution: {integrity: sha512-d/s+zhUx5Kh4l/ecMP/TBjzp1GR/g89Q4nWH6+wH5WgdHsK+LG+vmsk6mVNuP/8wsCofYG4NBqp5Ulbztbm9QA==} + engines: {node: '>=14.0.0'} + dependencies: + tslib: 2.5.0 + dev: true + optional: true - packages/utils: - specifiers: - '@ethersproject/signing-key': ^5.7.0 - '@ethersproject/transactions': ^5.7.0 - '@stablelib/ed25519': ^1.0.3 - '@types/debug': 4.1.7 - '@types/elliptic': 6.4.14 - '@types/uuid': 9.0.0 - '@veramo/core-types': ^5.1.2 - blakejs: ^1.1.1 - credential-status: ^2.0.5 - cross-fetch: ^3.1.5 - debug: ^4.3.3 - did-jwt: ^6.9.0 - did-jwt-vc: ^3.1.0 - did-resolver: ^4.0.1 - elliptic: ^6.5.4 - multiformats: ^9.9.0 - uint8arrays: ^3.0.0 + /@aws-sdk/util-middleware/3.295.0: + resolution: {integrity: sha512-t6UdduLHV97IRZmd1YA0v5HCwerz+OXxDF8lLK0G7qihde0jv6tq5w8fTTjgehDFKM0UGUiaahOtjEcRK7F2Aw==} + engines: {node: '>=14.0.0'} dependencies: - '@ethersproject/signing-key': 5.7.0 - '@ethersproject/transactions': 5.7.0 - '@stablelib/ed25519': 1.0.3 - '@veramo/core-types': link:../core-types - blakejs: 1.2.1 - credential-status: 2.0.5 - cross-fetch: 3.1.5 - debug: 4.3.4 - did-jwt: 6.11.0 - did-jwt-vc: 3.1.0 - did-resolver: 4.0.1 - elliptic: 6.5.4 - multiformats: 9.9.0 - uint8arrays: 3.1.1 - devDependencies: - '@types/debug': 4.1.7 - '@types/elliptic': 6.4.14 - '@types/uuid': 9.0.0 + tslib: 2.5.0 + dev: true + optional: true -packages: + /@aws-sdk/util-retry/3.295.0: + resolution: {integrity: sha512-3xp3A5XtPWGsN9aLuzM3mB4hpM3nZJ5JJiGFgUXu/CTP2ahipbVbMwtRpIUjYDh1kvdjoaDJatEVJ7JhJrXFew==} + engines: {node: '>= 14.0.0'} + dependencies: + '@aws-sdk/service-error-classification': 3.295.0 + tslib: 2.5.0 + dev: true + optional: true - /@ampproject/remapping/2.2.0: - resolution: {integrity: sha512-qRmjj8nj9qmLTQXXmaR1cck3UXSRMPrbsLJAasZpF+t3riI71BXed5ebIOYwQntykeZuhjsdweEc9BxH5Jc26w==} - engines: {node: '>=6.0.0'} + /@aws-sdk/util-uri-escape/3.295.0: + resolution: {integrity: sha512-1H5DcyIoXF8XcPBWf7wzHt0l+TW2EoR8Oq4gsVrPTQkHMTVclC2Yn8EF3gc4arwVBzwLulI9LMBE2L8fexGfTQ==} + engines: {node: '>=14.0.0'} dependencies: - '@jridgewell/gen-mapping': 0.1.1 - '@jridgewell/trace-mapping': 0.3.17 + tslib: 2.5.0 dev: true + optional: true - /@apideck/better-ajv-errors/0.3.6_ajv@8.12.0: - resolution: {integrity: sha512-P+ZygBLZtkp0qqOAJJVX4oX/sFo5JR3eBWwwuqHHhK0GIgQOKWrAfiAaWX0aArHkRWHMuggFEgAZNxVPwPZYaA==} - engines: {node: '>=10'} + /@aws-sdk/util-user-agent-browser/3.295.0: + resolution: {integrity: sha512-lSU80r6yMwSDLkBZ0900G/kHLz/QgXewPXz56Xnq7NHWu7YliY6fzT1zWHPRGwcfCctTGMTWw+10ZSu/0Xv9nw==} + dependencies: + '@aws-sdk/types': 3.295.0 + bowser: 2.11.0 + tslib: 2.5.0 + dev: true + optional: true + + /@aws-sdk/util-user-agent-node/3.295.0: + resolution: {integrity: sha512-EVt/4nWTYLbS6llhjE4sn2tn1mBlifyK6ezAse5kr6boNG3dJt6Y7gHAXXglkmblw2bflxqgOaKj5YCcZFUSyQ==} + engines: {node: '>=14.0.0'} peerDependencies: - ajv: '>=8' + aws-crt: '>=1.0.0' + peerDependenciesMeta: + aws-crt: + optional: true dependencies: - ajv: 8.12.0 - json-schema: 0.4.0 - jsonpointer: 5.0.1 - leven: 3.1.0 + '@aws-sdk/node-config-provider': 3.295.0 + '@aws-sdk/types': 3.295.0 + tslib: 2.5.0 + dev: true + optional: true + + /@aws-sdk/util-utf8-browser/3.259.0: + resolution: {integrity: sha512-UvFa/vR+e19XookZF8RzFZBrw2EUkQWxiBW0yYQAhvk3C+QVGl0H3ouca8LDBlBfQKXwmW3huo/59H8rwb1wJw==} + dependencies: + tslib: 2.5.0 + dev: true + optional: true + + /@aws-sdk/util-utf8/3.295.0: + resolution: {integrity: sha512-ITN8v3F63ZkA4sdmCtSbS/mhav4F0MEAiXDAUXtMJLNqVtaVcyQST4i9vNmPpIVthAPAtP0QjyF2tq/Di8bxtQ==} + engines: {node: '>=14.0.0'} + dependencies: + '@aws-sdk/util-buffer-from': 3.295.0 + tslib: 2.5.0 dev: true + optional: true /@babel/code-frame/7.18.6: resolution: {integrity: sha512-TDCmlK5eOvH+eH7cdAFlNXeVJqWIQ7gW9tY1GJIpUtFb6CmjVyq2VM3u71bOyR8CRihcCgMUYoDNyLXao3+70Q==} @@ -1141,25 +1996,25 @@ packages: '@babel/highlight': 7.18.6 dev: true - /@babel/compat-data/7.20.10: - resolution: {integrity: sha512-sEnuDPpOJR/fcafHMjpcpGN5M2jbUGUHwmuWKM/YdPzeEDJg8bgmbcWQFUfE32MQjti1koACvoPVsDe8Uq+idg==} + /@babel/compat-data/7.21.0: + resolution: {integrity: sha512-gMuZsmsgxk/ENC3O/fRw5QY8A9/uxQbbCEypnLIiYYc/qVJtEV7ouxC3EllIIwNzMqAQee5tanFabWsUOutS7g==} engines: {node: '>=6.9.0'} dev: true - /@babel/core/7.20.12: - resolution: {integrity: sha512-XsMfHovsUYHFMdrIHkZphTN/2Hzzi78R08NuHfDBehym2VsPDL6Zn/JAD/JQdnRvbSsbQc4mVaU1m6JgtTEElg==} + /@babel/core/7.21.3: + resolution: {integrity: sha512-qIJONzoa/qiHghnm0l1n4i/6IIziDpzqc36FBs4pzMhDUraHqponwJLiAKm1hGLP3OSB/TVNz6rMwVGpwxxySw==} engines: {node: '>=6.9.0'} dependencies: '@ampproject/remapping': 2.2.0 '@babel/code-frame': 7.18.6 - '@babel/generator': 7.20.7 - '@babel/helper-compilation-targets': 7.20.7_@babel+core@7.20.12 - '@babel/helper-module-transforms': 7.20.11 - '@babel/helpers': 7.20.7 - '@babel/parser': 7.20.7 + '@babel/generator': 7.21.3 + '@babel/helper-compilation-targets': 7.20.7_@babel+core@7.21.3 + '@babel/helper-module-transforms': 7.21.2 + '@babel/helpers': 7.21.0 + '@babel/parser': 7.21.3 '@babel/template': 7.20.7 - '@babel/traverse': 7.20.12 - '@babel/types': 7.20.7 + '@babel/traverse': 7.21.3 + '@babel/types': 7.21.3 convert-source-map: 1.9.0 debug: 4.3.4 gensync: 1.0.0-beta.2 @@ -1169,26 +2024,27 @@ packages: - supports-color dev: true - /@babel/eslint-parser/7.19.1_ucmnolur3r335ullwiyt3zl3pi: - resolution: {integrity: sha512-AqNf2QWt1rtu2/1rLswy6CDP7H9Oh3mMhk177Y67Rg8d7RD9WfOLLv8CGn6tisFvS2htm86yIe1yLF6I1UDaGQ==} + /@babel/eslint-parser/7.21.3_pxuto7xgangxlusvzceggvrmde: + resolution: {integrity: sha512-kfhmPimwo6k4P8zxNs8+T7yR44q1LdpsZdE1NkCsVlfiuTPRfnGgjaF8Qgug9q9Pou17u6wneYF0lDCZJATMFg==} engines: {node: ^10.13.0 || ^12.13.0 || >=14.0.0} peerDependencies: '@babel/core': '>=7.11.0' eslint: ^7.5.0 || ^8.0.0 dependencies: - '@babel/core': 7.20.12 + '@babel/core': 7.21.3 '@nicolo-ribaudo/eslint-scope-5-internals': 5.1.1-v1 - eslint: 8.31.0 + eslint: 8.36.0 eslint-visitor-keys: 2.1.0 semver: 6.3.0 dev: true - /@babel/generator/7.20.7: - resolution: {integrity: sha512-7wqMOJq8doJMZmP4ApXTzLxSr7+oO2jroJURrVEp6XShrQUObV8Tq/D0NCcoYg2uHqUrjzO0zwBjoYzelxK+sw==} + /@babel/generator/7.21.3: + resolution: {integrity: sha512-QS3iR1GYC/YGUnW7IdggFeN5c1poPUurnGttOV/bZgPGV+izC/D8HnD6DLwod0fsatNyVn1G3EVWMYIF0nHbeA==} engines: {node: '>=6.9.0'} dependencies: - '@babel/types': 7.20.7 + '@babel/types': 7.21.3 '@jridgewell/gen-mapping': 0.3.2 + '@jridgewell/trace-mapping': 0.3.17 jsesc: 2.5.2 dev: true @@ -1196,7 +2052,7 @@ packages: resolution: {integrity: sha512-duORpUiYrEpzKIop6iNbjnwKLAKnJ47csTyRACyEmWj0QdUrm5aqNJGHSSEQSUAvNW0ojX0dOmK9dZduvkfeXA==} engines: {node: '>=6.9.0'} dependencies: - '@babel/types': 7.20.7 + '@babel/types': 7.21.3 dev: true /@babel/helper-builder-binary-assignment-operator-visitor/7.18.9: @@ -1204,33 +2060,33 @@ packages: engines: {node: '>=6.9.0'} dependencies: '@babel/helper-explode-assignable-expression': 7.18.6 - '@babel/types': 7.20.7 + '@babel/types': 7.21.3 dev: true - /@babel/helper-compilation-targets/7.20.7_@babel+core@7.20.12: + /@babel/helper-compilation-targets/7.20.7_@babel+core@7.21.3: resolution: {integrity: sha512-4tGORmfQcrc+bvrjb5y3dG9Mx1IOZjsHqQVUz7XCNHO+iTmqxWnVg3KRygjGmpRLJGdQSKuvFinbIb0CnZwHAQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0 dependencies: - '@babel/compat-data': 7.20.10 - '@babel/core': 7.20.12 - '@babel/helper-validator-option': 7.18.6 - browserslist: 4.21.4 + '@babel/compat-data': 7.21.0 + '@babel/core': 7.21.3 + '@babel/helper-validator-option': 7.21.0 + browserslist: 4.21.5 lru-cache: 5.1.1 semver: 6.3.0 dev: true - /@babel/helper-create-class-features-plugin/7.20.12: - resolution: {integrity: sha512-9OunRkbT0JQcednL0UFvbfXpAsUXiGjUk0a7sN8fUXX7Mue79cUSMjHGDRRi/Vz9vYlpIhLV5fMD5dKoMhhsNQ==} + /@babel/helper-create-class-features-plugin/7.21.0: + resolution: {integrity: sha512-Q8wNiMIdwsv5la5SPxNYzzkPnjgC0Sy0i7jLkVOCdllu/xcVNkr3TeZzbHBJrj+XXRqzX5uCyCoV9eu6xUG7KQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0 dependencies: '@babel/helper-annotate-as-pure': 7.18.6 '@babel/helper-environment-visitor': 7.18.9 - '@babel/helper-function-name': 7.19.0 - '@babel/helper-member-expression-to-functions': 7.20.7 + '@babel/helper-function-name': 7.21.0 + '@babel/helper-member-expression-to-functions': 7.21.0 '@babel/helper-optimise-call-expression': 7.18.6 '@babel/helper-replace-supers': 7.20.7 '@babel/helper-skip-transparent-expression-wrappers': 7.20.0 @@ -1239,17 +2095,17 @@ packages: - supports-color dev: true - /@babel/helper-create-class-features-plugin/7.20.12_@babel+core@7.20.12: - resolution: {integrity: sha512-9OunRkbT0JQcednL0UFvbfXpAsUXiGjUk0a7sN8fUXX7Mue79cUSMjHGDRRi/Vz9vYlpIhLV5fMD5dKoMhhsNQ==} + /@babel/helper-create-class-features-plugin/7.21.0_@babel+core@7.21.3: + resolution: {integrity: sha512-Q8wNiMIdwsv5la5SPxNYzzkPnjgC0Sy0i7jLkVOCdllu/xcVNkr3TeZzbHBJrj+XXRqzX5uCyCoV9eu6xUG7KQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0 dependencies: - '@babel/core': 7.20.12 + '@babel/core': 7.21.3 '@babel/helper-annotate-as-pure': 7.18.6 '@babel/helper-environment-visitor': 7.18.9 - '@babel/helper-function-name': 7.19.0 - '@babel/helper-member-expression-to-functions': 7.20.7 + '@babel/helper-function-name': 7.21.0 + '@babel/helper-member-expression-to-functions': 7.21.0 '@babel/helper-optimise-call-expression': 7.18.6 '@babel/helper-replace-supers': 7.20.7 '@babel/helper-skip-transparent-expression-wrappers': 7.20.0 @@ -1258,24 +2114,24 @@ packages: - supports-color dev: true - /@babel/helper-create-regexp-features-plugin/7.20.5_@babel+core@7.20.12: - resolution: {integrity: sha512-m68B1lkg3XDGX5yCvGO0kPx3v9WIYLnzjKfPcQiwntEQa5ZeRkPmo2X/ISJc8qxWGfwUr+kvZAeEzAwLec2r2w==} + /@babel/helper-create-regexp-features-plugin/7.21.0_@babel+core@7.21.3: + resolution: {integrity: sha512-N+LaFW/auRSWdx7SHD/HiARwXQju1vXTW4fKr4u5SgBUTm51OKEjKgj+cs00ggW3kEvNqwErnlwuq7Y3xBe4eg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0 dependencies: - '@babel/core': 7.20.12 + '@babel/core': 7.21.3 '@babel/helper-annotate-as-pure': 7.18.6 - regexpu-core: 5.2.2 + regexpu-core: 5.3.2 dev: true - /@babel/helper-define-polyfill-provider/0.3.3_@babel+core@7.20.12: + /@babel/helper-define-polyfill-provider/0.3.3_@babel+core@7.21.3: resolution: {integrity: sha512-z5aQKU4IzbqCC1XH0nAqfsFLMVSo22SBKUc0BxGrLkolTdPTructy0ToNnlO2zA4j9Q/7pjMZf0DSY+DSTYzww==} peerDependencies: '@babel/core': ^7.4.0-0 dependencies: - '@babel/core': 7.20.12 - '@babel/helper-compilation-targets': 7.20.7_@babel+core@7.20.12 + '@babel/core': 7.21.3 + '@babel/helper-compilation-targets': 7.20.7_@babel+core@7.21.3 '@babel/helper-plugin-utils': 7.20.2 debug: 4.3.4 lodash.debounce: 4.0.8 @@ -1294,40 +2150,40 @@ packages: resolution: {integrity: sha512-eyAYAsQmB80jNfg4baAtLeWAQHfHFiR483rzFK+BhETlGZaQC9bsfrugfXDCbRHLQbIA7U5NxhhOxN7p/dWIcg==} engines: {node: '>=6.9.0'} dependencies: - '@babel/types': 7.20.7 + '@babel/types': 7.21.3 dev: true - /@babel/helper-function-name/7.19.0: - resolution: {integrity: sha512-WAwHBINyrpqywkUH0nTnNgI5ina5TFn85HKS0pbPDfxFfhyR/aNQEn4hGi1P1JyT//I0t4OgXUlofzWILRvS5w==} + /@babel/helper-function-name/7.21.0: + resolution: {integrity: sha512-HfK1aMRanKHpxemaY2gqBmL04iAPOPRj7DxtNbiDOrJK+gdwkiNRVpCpUJYbUT+aZyemKN8brqTOxzCaG6ExRg==} engines: {node: '>=6.9.0'} dependencies: '@babel/template': 7.20.7 - '@babel/types': 7.20.7 + '@babel/types': 7.21.3 dev: true /@babel/helper-hoist-variables/7.18.6: resolution: {integrity: sha512-UlJQPkFqFULIcyW5sbzgbkxn2FKRgwWiRexcuaR8RNJRy8+LLveqPjwZV/bwrLZCN0eUHD/x8D0heK1ozuoo6Q==} engines: {node: '>=6.9.0'} dependencies: - '@babel/types': 7.20.7 + '@babel/types': 7.21.3 dev: true - /@babel/helper-member-expression-to-functions/7.20.7: - resolution: {integrity: sha512-9J0CxJLq315fEdi4s7xK5TQaNYjZw+nDVpVqr1axNGKzdrdwYBD5b4uKv3n75aABG0rCCTK8Im8Ww7eYfMrZgw==} + /@babel/helper-member-expression-to-functions/7.21.0: + resolution: {integrity: sha512-Muu8cdZwNN6mRRNG6lAYErJ5X3bRevgYR2O8wN0yn7jJSnGDu6eG59RfT29JHxGUovyfrh6Pj0XzmR7drNVL3Q==} engines: {node: '>=6.9.0'} dependencies: - '@babel/types': 7.20.7 + '@babel/types': 7.21.3 dev: true /@babel/helper-module-imports/7.18.6: resolution: {integrity: sha512-0NFvs3VkuSYbFi1x2Vd6tKrywq+z/cLeYC/RJNFrIX/30Bf5aiGYbtvGXolEktzJH8o5E5KJ3tT+nkxuuZFVlA==} engines: {node: '>=6.9.0'} dependencies: - '@babel/types': 7.20.7 + '@babel/types': 7.21.3 dev: true - /@babel/helper-module-transforms/7.20.11: - resolution: {integrity: sha512-uRy78kN4psmji1s2QtbtcCSaj/LILFDp0f/ymhpQH5QY3nljUZCaNWz9X1dEj/8MBdBEFECs7yRhKn8i7NjZgg==} + /@babel/helper-module-transforms/7.21.2: + resolution: {integrity: sha512-79yj2AR4U/Oqq/WOV7Lx6hUjau1Zfo4cI+JLAVYeMV5XIlbOhmjEk5ulbTc9fMpmlojzZHkUUxAiK+UKn+hNQQ==} engines: {node: '>=6.9.0'} dependencies: '@babel/helper-environment-visitor': 7.18.9 @@ -1336,8 +2192,8 @@ packages: '@babel/helper-split-export-declaration': 7.18.6 '@babel/helper-validator-identifier': 7.19.1 '@babel/template': 7.20.7 - '@babel/traverse': 7.20.12 - '@babel/types': 7.20.7 + '@babel/traverse': 7.21.3 + '@babel/types': 7.21.3 transitivePeerDependencies: - supports-color dev: true @@ -1346,7 +2202,7 @@ packages: resolution: {integrity: sha512-HP59oD9/fEHQkdcbgFCnbmgH5vIQTJbxh2yf+CdM89/glUNnuzr87Q8GIjGEnOktTROemO0Pe0iPAYbqZuOUiA==} engines: {node: '>=6.9.0'} dependencies: - '@babel/types': 7.20.7 + '@babel/types': 7.21.3 dev: true /@babel/helper-plugin-utils/7.20.2: @@ -1354,17 +2210,17 @@ packages: engines: {node: '>=6.9.0'} dev: true - /@babel/helper-remap-async-to-generator/7.18.9_@babel+core@7.20.12: + /@babel/helper-remap-async-to-generator/7.18.9_@babel+core@7.21.3: resolution: {integrity: sha512-dI7q50YKd8BAv3VEfgg7PS7yD3Rtbi2J1XMXaalXO0W0164hYLnh8zpjRS0mte9MfVp/tltvr/cfdXPvJr1opA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0 dependencies: - '@babel/core': 7.20.12 + '@babel/core': 7.21.3 '@babel/helper-annotate-as-pure': 7.18.6 '@babel/helper-environment-visitor': 7.18.9 '@babel/helper-wrap-function': 7.20.5 - '@babel/types': 7.20.7 + '@babel/types': 7.21.3 transitivePeerDependencies: - supports-color dev: true @@ -1374,11 +2230,11 @@ packages: engines: {node: '>=6.9.0'} dependencies: '@babel/helper-environment-visitor': 7.18.9 - '@babel/helper-member-expression-to-functions': 7.20.7 + '@babel/helper-member-expression-to-functions': 7.21.0 '@babel/helper-optimise-call-expression': 7.18.6 '@babel/template': 7.20.7 - '@babel/traverse': 7.20.12 - '@babel/types': 7.20.7 + '@babel/traverse': 7.21.3 + '@babel/types': 7.21.3 transitivePeerDependencies: - supports-color dev: true @@ -1387,21 +2243,21 @@ packages: resolution: {integrity: sha512-+0woI/WPq59IrqDYbVGfshjT5Dmk/nnbdpcF8SnMhhXObpTq2KNBdLFRFrkVdbDOyUmHBCxzm5FHV1rACIkIbA==} engines: {node: '>=6.9.0'} dependencies: - '@babel/types': 7.20.7 + '@babel/types': 7.21.3 dev: true /@babel/helper-skip-transparent-expression-wrappers/7.20.0: resolution: {integrity: sha512-5y1JYeNKfvnT8sZcK9DVRtpTbGiomYIHviSP3OQWmDPU3DeH4a1ZlT/N2lyQ5P8egjcRaT/Y9aNqUxK0WsnIIg==} engines: {node: '>=6.9.0'} dependencies: - '@babel/types': 7.20.7 + '@babel/types': 7.21.3 dev: true /@babel/helper-split-export-declaration/7.18.6: resolution: {integrity: sha512-bde1etTx6ZyTmobl9LLMMQsaizFVZrquTEHOqKeQESMKo4PlObf+8+JA25ZsIpZhT/WEd39+vOdLXAFG/nELpA==} engines: {node: '>=6.9.0'} dependencies: - '@babel/types': 7.20.7 + '@babel/types': 7.21.3 dev: true /@babel/helper-string-parser/7.19.4: @@ -1414,8 +2270,8 @@ packages: engines: {node: '>=6.9.0'} dev: true - /@babel/helper-validator-option/7.18.6: - resolution: {integrity: sha512-XO7gESt5ouv/LRJdrVjkShckw6STTaB7l9BrpBaAHDeF5YZT+01PCwmR0SJHnkW6i8OwW/EVWRShfi4j2x+KQw==} + /@babel/helper-validator-option/7.21.0: + resolution: {integrity: sha512-rmL/B8/f0mKS2baE9ZpyTcTavvEuWhTTW8amjzXNvYG4AwBsqTLikfXsEofsJEfKHf+HQVQbFOHy6o+4cnC/fQ==} engines: {node: '>=6.9.0'} dev: true @@ -1423,21 +2279,21 @@ packages: resolution: {integrity: sha512-bYMxIWK5mh+TgXGVqAtnu5Yn1un+v8DDZtqyzKRLUzrh70Eal2O3aZ7aPYiMADO4uKlkzOiRiZ6GX5q3qxvW9Q==} engines: {node: '>=6.9.0'} dependencies: - '@babel/helper-function-name': 7.19.0 + '@babel/helper-function-name': 7.21.0 '@babel/template': 7.20.7 - '@babel/traverse': 7.20.12 - '@babel/types': 7.20.7 + '@babel/traverse': 7.21.3 + '@babel/types': 7.21.3 transitivePeerDependencies: - supports-color dev: true - /@babel/helpers/7.20.7: - resolution: {integrity: sha512-PBPjs5BppzsGaxHQCDKnZ6Gd9s6xl8bBCluz3vEInLGRJmnZan4F6BYCeqtyXqkk4W5IlPmjK4JlOuZkpJ3xZA==} + /@babel/helpers/7.21.0: + resolution: {integrity: sha512-XXve0CBtOW0pd7MRzzmoyuSj0e3SEzj8pgyFxnTT1NJZL38BD1MK7yYrm8yefRPIDvNNe14xR4FdbHwpInD4rA==} engines: {node: '>=6.9.0'} dependencies: '@babel/template': 7.20.7 - '@babel/traverse': 7.20.12 - '@babel/types': 7.20.7 + '@babel/traverse': 7.21.3 + '@babel/types': 7.21.3 transitivePeerDependencies: - supports-color dev: true @@ -1451,233 +2307,233 @@ packages: js-tokens: 4.0.0 dev: true - /@babel/parser/7.20.7: - resolution: {integrity: sha512-T3Z9oHybU+0vZlY9CiDSJQTD5ZapcW18ZctFMi0MOAl/4BjFF4ul7NVSARLdbGO5vDqy9eQiGTV0LtKfvCYvcg==} + /@babel/parser/7.21.3: + resolution: {integrity: sha512-lobG0d7aOfQRXh8AyklEAgZGvA4FShxo6xQbUrrT/cNBPUdIDojlokwJsQyCC/eKia7ifqM0yP+2DRZ4WKw2RQ==} engines: {node: '>=6.0.0'} hasBin: true dependencies: - '@babel/types': 7.20.7 + '@babel/types': 7.21.3 dev: true - /@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/7.18.6_@babel+core@7.20.12: + /@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/7.18.6_@babel+core@7.21.3: resolution: {integrity: sha512-Dgxsyg54Fx1d4Nge8UnvTrED63vrwOdPmyvPzlNN/boaliRP54pm3pGzZD1SJUwrBA+Cs/xdG8kXX6Mn/RfISQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0 dependencies: - '@babel/core': 7.20.12 + '@babel/core': 7.21.3 '@babel/helper-plugin-utils': 7.20.2 dev: true - /@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/7.20.7_@babel+core@7.20.12: + /@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/7.20.7_@babel+core@7.21.3: resolution: {integrity: sha512-sbr9+wNE5aXMBBFBICk01tt7sBf2Oc9ikRFEcem/ZORup9IMUdNhW7/wVLEbbtlWOsEubJet46mHAL2C8+2jKQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.13.0 dependencies: - '@babel/core': 7.20.12 + '@babel/core': 7.21.3 '@babel/helper-plugin-utils': 7.20.2 '@babel/helper-skip-transparent-expression-wrappers': 7.20.0 - '@babel/plugin-proposal-optional-chaining': 7.20.7_@babel+core@7.20.12 + '@babel/plugin-proposal-optional-chaining': 7.21.0_@babel+core@7.21.3 dev: true - /@babel/plugin-proposal-async-generator-functions/7.20.7_@babel+core@7.20.12: + /@babel/plugin-proposal-async-generator-functions/7.20.7_@babel+core@7.21.3: resolution: {integrity: sha512-xMbiLsn/8RK7Wq7VeVytytS2L6qE69bXPB10YCmMdDZbKF4okCqY74pI/jJQ/8U0b/F6NrT2+14b8/P9/3AMGA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.20.12 + '@babel/core': 7.21.3 '@babel/helper-environment-visitor': 7.18.9 '@babel/helper-plugin-utils': 7.20.2 - '@babel/helper-remap-async-to-generator': 7.18.9_@babel+core@7.20.12 - '@babel/plugin-syntax-async-generators': 7.8.4_@babel+core@7.20.12 + '@babel/helper-remap-async-to-generator': 7.18.9_@babel+core@7.21.3 + '@babel/plugin-syntax-async-generators': 7.8.4_@babel+core@7.21.3 transitivePeerDependencies: - supports-color dev: true - /@babel/plugin-proposal-class-properties/7.18.6_@babel+core@7.20.12: + /@babel/plugin-proposal-class-properties/7.18.6_@babel+core@7.21.3: resolution: {integrity: sha512-cumfXOF0+nzZrrN8Rf0t7M+tF6sZc7vhQwYQck9q1/5w2OExlD+b4v4RpMJFaV1Z7WcDRgO6FqvxqxGlwo+RHQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.20.12 - '@babel/helper-create-class-features-plugin': 7.20.12_@babel+core@7.20.12 + '@babel/core': 7.21.3 + '@babel/helper-create-class-features-plugin': 7.21.0_@babel+core@7.21.3 '@babel/helper-plugin-utils': 7.20.2 transitivePeerDependencies: - supports-color dev: true - /@babel/plugin-proposal-class-static-block/7.20.7_@babel+core@7.20.12: - resolution: {integrity: sha512-AveGOoi9DAjUYYuUAG//Ig69GlazLnoyzMw68VCDux+c1tsnnH/OkYcpz/5xzMkEFC6UxjR5Gw1c+iY2wOGVeQ==} + /@babel/plugin-proposal-class-static-block/7.21.0_@babel+core@7.21.3: + resolution: {integrity: sha512-XP5G9MWNUskFuP30IfFSEFB0Z6HzLIUcjYM4bYOPHXl7eiJ9HFv8tWj6TXTN5QODiEhDZAeI4hLok2iHFFV4hw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.12.0 dependencies: - '@babel/core': 7.20.12 - '@babel/helper-create-class-features-plugin': 7.20.12_@babel+core@7.20.12 + '@babel/core': 7.21.3 + '@babel/helper-create-class-features-plugin': 7.21.0_@babel+core@7.21.3 '@babel/helper-plugin-utils': 7.20.2 - '@babel/plugin-syntax-class-static-block': 7.14.5_@babel+core@7.20.12 + '@babel/plugin-syntax-class-static-block': 7.14.5_@babel+core@7.21.3 transitivePeerDependencies: - supports-color dev: true - /@babel/plugin-proposal-decorators/7.20.7_@babel+core@7.20.12: - resolution: {integrity: sha512-JB45hbUweYpwAGjkiM7uCyXMENH2lG+9r3G2E+ttc2PRXAoEkpfd/KW5jDg4j8RS6tLtTG1jZi9LbHZVSfs1/A==} + /@babel/plugin-proposal-decorators/7.21.0_@babel+core@7.21.3: + resolution: {integrity: sha512-MfgX49uRrFUTL/HvWtmx3zmpyzMMr4MTj3d527MLlr/4RTT9G/ytFFP7qet2uM2Ve03b+BkpWUpK+lRXnQ+v9w==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.20.12 - '@babel/helper-create-class-features-plugin': 7.20.12_@babel+core@7.20.12 + '@babel/core': 7.21.3 + '@babel/helper-create-class-features-plugin': 7.21.0_@babel+core@7.21.3 '@babel/helper-plugin-utils': 7.20.2 '@babel/helper-replace-supers': 7.20.7 '@babel/helper-split-export-declaration': 7.18.6 - '@babel/plugin-syntax-decorators': 7.19.0_@babel+core@7.20.12 + '@babel/plugin-syntax-decorators': 7.21.0_@babel+core@7.21.3 transitivePeerDependencies: - supports-color dev: true - /@babel/plugin-proposal-dynamic-import/7.18.6_@babel+core@7.20.12: + /@babel/plugin-proposal-dynamic-import/7.18.6_@babel+core@7.21.3: resolution: {integrity: sha512-1auuwmK+Rz13SJj36R+jqFPMJWyKEDd7lLSdOj4oJK0UTgGueSAtkrCvz9ewmgyU/P941Rv2fQwZJN8s6QruXw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.20.12 + '@babel/core': 7.21.3 '@babel/helper-plugin-utils': 7.20.2 - '@babel/plugin-syntax-dynamic-import': 7.8.3_@babel+core@7.20.12 + '@babel/plugin-syntax-dynamic-import': 7.8.3_@babel+core@7.21.3 dev: true - /@babel/plugin-proposal-export-namespace-from/7.18.9_@babel+core@7.20.12: + /@babel/plugin-proposal-export-namespace-from/7.18.9_@babel+core@7.21.3: resolution: {integrity: sha512-k1NtHyOMvlDDFeb9G5PhUXuGj8m/wiwojgQVEhJ/fsVsMCpLyOP4h0uGEjYJKrRI+EVPlb5Jk+Gt9P97lOGwtA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.20.12 + '@babel/core': 7.21.3 '@babel/helper-plugin-utils': 7.20.2 - '@babel/plugin-syntax-export-namespace-from': 7.8.3_@babel+core@7.20.12 + '@babel/plugin-syntax-export-namespace-from': 7.8.3_@babel+core@7.21.3 dev: true - /@babel/plugin-proposal-json-strings/7.18.6_@babel+core@7.20.12: + /@babel/plugin-proposal-json-strings/7.18.6_@babel+core@7.21.3: resolution: {integrity: sha512-lr1peyn9kOdbYc0xr0OdHTZ5FMqS6Di+H0Fz2I/JwMzGmzJETNeOFq2pBySw6X/KFL5EWDjlJuMsUGRFb8fQgQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.20.12 + '@babel/core': 7.21.3 '@babel/helper-plugin-utils': 7.20.2 - '@babel/plugin-syntax-json-strings': 7.8.3_@babel+core@7.20.12 + '@babel/plugin-syntax-json-strings': 7.8.3_@babel+core@7.21.3 dev: true - /@babel/plugin-proposal-logical-assignment-operators/7.20.7_@babel+core@7.20.12: + /@babel/plugin-proposal-logical-assignment-operators/7.20.7_@babel+core@7.21.3: resolution: {integrity: sha512-y7C7cZgpMIjWlKE5T7eJwp+tnRYM89HmRvWM5EQuB5BoHEONjmQ8lSNmBUwOyy/GFRsohJED51YBF79hE1djug==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.20.12 + '@babel/core': 7.21.3 '@babel/helper-plugin-utils': 7.20.2 - '@babel/plugin-syntax-logical-assignment-operators': 7.10.4_@babel+core@7.20.12 + '@babel/plugin-syntax-logical-assignment-operators': 7.10.4_@babel+core@7.21.3 dev: true - /@babel/plugin-proposal-nullish-coalescing-operator/7.18.6_@babel+core@7.20.12: + /@babel/plugin-proposal-nullish-coalescing-operator/7.18.6_@babel+core@7.21.3: resolution: {integrity: sha512-wQxQzxYeJqHcfppzBDnm1yAY0jSRkUXR2z8RePZYrKwMKgMlE8+Z6LUno+bd6LvbGh8Gltvy74+9pIYkr+XkKA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.20.12 + '@babel/core': 7.21.3 '@babel/helper-plugin-utils': 7.20.2 - '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3_@babel+core@7.20.12 + '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3_@babel+core@7.21.3 dev: true - /@babel/plugin-proposal-numeric-separator/7.18.6_@babel+core@7.20.12: + /@babel/plugin-proposal-numeric-separator/7.18.6_@babel+core@7.21.3: resolution: {integrity: sha512-ozlZFogPqoLm8WBr5Z8UckIoE4YQ5KESVcNudyXOR8uqIkliTEgJ3RoketfG6pmzLdeZF0H/wjE9/cCEitBl7Q==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.20.12 + '@babel/core': 7.21.3 '@babel/helper-plugin-utils': 7.20.2 - '@babel/plugin-syntax-numeric-separator': 7.10.4_@babel+core@7.20.12 + '@babel/plugin-syntax-numeric-separator': 7.10.4_@babel+core@7.21.3 dev: true - /@babel/plugin-proposal-object-rest-spread/7.20.7_@babel+core@7.20.12: + /@babel/plugin-proposal-object-rest-spread/7.20.7_@babel+core@7.21.3: resolution: {integrity: sha512-d2S98yCiLxDVmBmE8UjGcfPvNEUbA1U5q5WxaWFUGRzJSVAZqm5W6MbPct0jxnegUZ0niLeNX+IOzEs7wYg9Dg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/compat-data': 7.20.10 - '@babel/core': 7.20.12 - '@babel/helper-compilation-targets': 7.20.7_@babel+core@7.20.12 + '@babel/compat-data': 7.21.0 + '@babel/core': 7.21.3 + '@babel/helper-compilation-targets': 7.20.7_@babel+core@7.21.3 '@babel/helper-plugin-utils': 7.20.2 - '@babel/plugin-syntax-object-rest-spread': 7.8.3_@babel+core@7.20.12 - '@babel/plugin-transform-parameters': 7.20.7_@babel+core@7.20.12 + '@babel/plugin-syntax-object-rest-spread': 7.8.3_@babel+core@7.21.3 + '@babel/plugin-transform-parameters': 7.21.3_@babel+core@7.21.3 dev: true - /@babel/plugin-proposal-optional-catch-binding/7.18.6_@babel+core@7.20.12: + /@babel/plugin-proposal-optional-catch-binding/7.18.6_@babel+core@7.21.3: resolution: {integrity: sha512-Q40HEhs9DJQyaZfUjjn6vE8Cv4GmMHCYuMGIWUnlxH6400VGxOuwWsPt4FxXxJkC/5eOzgn0z21M9gMT4MOhbw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.20.12 + '@babel/core': 7.21.3 '@babel/helper-plugin-utils': 7.20.2 - '@babel/plugin-syntax-optional-catch-binding': 7.8.3_@babel+core@7.20.12 + '@babel/plugin-syntax-optional-catch-binding': 7.8.3_@babel+core@7.21.3 dev: true - /@babel/plugin-proposal-optional-chaining/7.20.7_@babel+core@7.20.12: - resolution: {integrity: sha512-T+A7b1kfjtRM51ssoOfS1+wbyCVqorfyZhT99TvxxLMirPShD8CzKMRepMlCBGM5RpHMbn8s+5MMHnPstJH6mQ==} + /@babel/plugin-proposal-optional-chaining/7.21.0_@babel+core@7.21.3: + resolution: {integrity: sha512-p4zeefM72gpmEe2fkUr/OnOXpWEf8nAgk7ZYVqqfFiyIG7oFfVZcCrU64hWn5xp4tQ9LkV4bTIa5rD0KANpKNA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.20.12 + '@babel/core': 7.21.3 '@babel/helper-plugin-utils': 7.20.2 '@babel/helper-skip-transparent-expression-wrappers': 7.20.0 - '@babel/plugin-syntax-optional-chaining': 7.8.3_@babel+core@7.20.12 + '@babel/plugin-syntax-optional-chaining': 7.8.3_@babel+core@7.21.3 dev: true - /@babel/plugin-proposal-private-methods/7.18.6_@babel+core@7.20.12: + /@babel/plugin-proposal-private-methods/7.18.6_@babel+core@7.21.3: resolution: {integrity: sha512-nutsvktDItsNn4rpGItSNV2sz1XwS+nfU0Rg8aCx3W3NOKVzdMjJRu0O5OkgDp3ZGICSTbgRpxZoWsxoKRvbeA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.20.12 - '@babel/helper-create-class-features-plugin': 7.20.12_@babel+core@7.20.12 + '@babel/core': 7.21.3 + '@babel/helper-create-class-features-plugin': 7.21.0_@babel+core@7.21.3 '@babel/helper-plugin-utils': 7.20.2 transitivePeerDependencies: - supports-color dev: true - /@babel/plugin-proposal-private-property-in-object/7.20.5_@babel+core@7.20.12: - resolution: {integrity: sha512-Vq7b9dUA12ByzB4EjQTPo25sFhY+08pQDBSZRtUAkj7lb7jahaHR5igera16QZ+3my1nYR4dKsNdYj5IjPHilQ==} + /@babel/plugin-proposal-private-property-in-object/7.21.0_@babel+core@7.21.3: + resolution: {integrity: sha512-ha4zfehbJjc5MmXBlHec1igel5TJXXLDDRbuJ4+XT2TJcyD9/V1919BA8gMvsdHcNMBy4WBUBiRb3nw/EQUtBw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.20.12 + '@babel/core': 7.21.3 '@babel/helper-annotate-as-pure': 7.18.6 - '@babel/helper-create-class-features-plugin': 7.20.12_@babel+core@7.20.12 + '@babel/helper-create-class-features-plugin': 7.21.0_@babel+core@7.21.3 '@babel/helper-plugin-utils': 7.20.2 - '@babel/plugin-syntax-private-property-in-object': 7.14.5_@babel+core@7.20.12 + '@babel/plugin-syntax-private-property-in-object': 7.14.5_@babel+core@7.21.3 transitivePeerDependencies: - supports-color dev: true - /@babel/plugin-proposal-unicode-property-regex/7.18.6_@babel+core@7.20.12: + /@babel/plugin-proposal-unicode-property-regex/7.18.6_@babel+core@7.21.3: resolution: {integrity: sha512-2BShG/d5yoZyXZfVePH91urL5wTG6ASZU9M4o03lKK8u8UW1y08OMttBSOADTcJrnPMpvDXRG3G8fyLh4ovs8w==} engines: {node: '>=4'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.20.12 - '@babel/helper-create-regexp-features-plugin': 7.20.5_@babel+core@7.20.12 + '@babel/core': 7.21.3 + '@babel/helper-create-regexp-features-plugin': 7.21.0_@babel+core@7.21.3 '@babel/helper-plugin-utils': 7.20.2 dev: true @@ -1689,12 +2545,12 @@ packages: '@babel/helper-plugin-utils': 7.20.2 dev: true - /@babel/plugin-syntax-async-generators/7.8.4_@babel+core@7.20.12: + /@babel/plugin-syntax-async-generators/7.8.4_@babel+core@7.21.3: resolution: {integrity: sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.20.12 + '@babel/core': 7.21.3 '@babel/helper-plugin-utils': 7.20.2 dev: true @@ -1706,12 +2562,12 @@ packages: '@babel/helper-plugin-utils': 7.20.2 dev: true - /@babel/plugin-syntax-bigint/7.8.3_@babel+core@7.20.12: + /@babel/plugin-syntax-bigint/7.8.3_@babel+core@7.21.3: resolution: {integrity: sha512-wnTnFlG+YxQm3vDxpGE57Pj0srRU4sHE/mDkt1qv2YJJSeUAec2ma4WLUnUPeKjyrfntVwe/N6dCXpU+zL3Npg==} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.20.12 + '@babel/core': 7.21.3 '@babel/helper-plugin-utils': 7.20.2 dev: true @@ -1723,60 +2579,60 @@ packages: '@babel/helper-plugin-utils': 7.20.2 dev: true - /@babel/plugin-syntax-class-properties/7.12.13_@babel+core@7.20.12: + /@babel/plugin-syntax-class-properties/7.12.13_@babel+core@7.21.3: resolution: {integrity: sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.20.12 + '@babel/core': 7.21.3 '@babel/helper-plugin-utils': 7.20.2 dev: true - /@babel/plugin-syntax-class-static-block/7.14.5_@babel+core@7.20.12: + /@babel/plugin-syntax-class-static-block/7.14.5_@babel+core@7.21.3: resolution: {integrity: sha512-b+YyPmr6ldyNnM6sqYeMWE+bgJcJpO6yS4QD7ymxgH34GBPNDM/THBh8iunyvKIZztiwLH4CJZ0RxTk9emgpjw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.20.12 + '@babel/core': 7.21.3 '@babel/helper-plugin-utils': 7.20.2 dev: true - /@babel/plugin-syntax-decorators/7.19.0_@babel+core@7.20.12: - resolution: {integrity: sha512-xaBZUEDntt4faL1yN8oIFlhfXeQAWJW7CLKYsHTUqriCUbj8xOra8bfxxKGi/UwExPFBuPdH4XfHc9rGQhrVkQ==} + /@babel/plugin-syntax-decorators/7.21.0_@babel+core@7.21.3: + resolution: {integrity: sha512-tIoPpGBR8UuM4++ccWN3gifhVvQu7ZizuR1fklhRJrd5ewgbkUS+0KVFeWWxELtn18NTLoW32XV7zyOgIAiz+w==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.20.12 + '@babel/core': 7.21.3 '@babel/helper-plugin-utils': 7.20.2 dev: true - /@babel/plugin-syntax-dynamic-import/7.8.3_@babel+core@7.20.12: + /@babel/plugin-syntax-dynamic-import/7.8.3_@babel+core@7.21.3: resolution: {integrity: sha512-5gdGbFon+PszYzqs83S3E5mpi7/y/8M9eC90MRTZfduQOYW76ig6SOSPNe41IG5LoP3FGBn2N0RjVDSQiS94kQ==} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.20.12 + '@babel/core': 7.21.3 '@babel/helper-plugin-utils': 7.20.2 dev: true - /@babel/plugin-syntax-export-namespace-from/7.8.3_@babel+core@7.20.12: + /@babel/plugin-syntax-export-namespace-from/7.8.3_@babel+core@7.21.3: resolution: {integrity: sha512-MXf5laXo6c1IbEbegDmzGPwGNTsHZmEy6QGznu5Sh2UCWvueywb2ee+CCE4zQiZstxU9BMoQO9i6zUFSY0Kj0Q==} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.20.12 + '@babel/core': 7.21.3 '@babel/helper-plugin-utils': 7.20.2 dev: true - /@babel/plugin-syntax-flow/7.18.6_@babel+core@7.20.12: + /@babel/plugin-syntax-flow/7.18.6_@babel+core@7.21.3: resolution: {integrity: sha512-LUbR+KNTBWCUAqRG9ex5Gnzu2IOkt8jRJbHHXFT9q+L9zm7M/QQbEqXyw1n1pohYvOyWC8CjeyjrSaIwiYjK7A==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.20.12 + '@babel/core': 7.21.3 '@babel/helper-plugin-utils': 7.20.2 dev: true @@ -1789,13 +2645,13 @@ packages: '@babel/helper-plugin-utils': 7.20.2 dev: true - /@babel/plugin-syntax-import-assertions/7.20.0_@babel+core@7.20.12: + /@babel/plugin-syntax-import-assertions/7.20.0_@babel+core@7.21.3: resolution: {integrity: sha512-IUh1vakzNoWalR8ch/areW7qFopR2AEw03JlG7BbrDqmQ4X3q9uuipQwSGrUn7oGiemKjtSLDhNtQHzMHr1JdQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.20.12 + '@babel/core': 7.21.3 '@babel/helper-plugin-utils': 7.20.2 dev: true @@ -1807,12 +2663,12 @@ packages: '@babel/helper-plugin-utils': 7.20.2 dev: true - /@babel/plugin-syntax-import-meta/7.10.4_@babel+core@7.20.12: + /@babel/plugin-syntax-import-meta/7.10.4_@babel+core@7.21.3: resolution: {integrity: sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g==} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.20.12 + '@babel/core': 7.21.3 '@babel/helper-plugin-utils': 7.20.2 dev: true @@ -1824,22 +2680,22 @@ packages: '@babel/helper-plugin-utils': 7.20.2 dev: true - /@babel/plugin-syntax-json-strings/7.8.3_@babel+core@7.20.12: + /@babel/plugin-syntax-json-strings/7.8.3_@babel+core@7.21.3: resolution: {integrity: sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.20.12 + '@babel/core': 7.21.3 '@babel/helper-plugin-utils': 7.20.2 dev: true - /@babel/plugin-syntax-jsx/7.18.6_@babel+core@7.20.12: + /@babel/plugin-syntax-jsx/7.18.6_@babel+core@7.21.3: resolution: {integrity: sha512-6mmljtAedFGTWu2p/8WIORGwy+61PLgOMPOdazc7YoJ9ZCWUyFy3A6CpPkRKLKD1ToAesxX8KGEViAiLo9N+7Q==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.20.12 + '@babel/core': 7.21.3 '@babel/helper-plugin-utils': 7.20.2 dev: true @@ -1851,12 +2707,12 @@ packages: '@babel/helper-plugin-utils': 7.20.2 dev: true - /@babel/plugin-syntax-logical-assignment-operators/7.10.4_@babel+core@7.20.12: + /@babel/plugin-syntax-logical-assignment-operators/7.10.4_@babel+core@7.21.3: resolution: {integrity: sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.20.12 + '@babel/core': 7.21.3 '@babel/helper-plugin-utils': 7.20.2 dev: true @@ -1868,12 +2724,12 @@ packages: '@babel/helper-plugin-utils': 7.20.2 dev: true - /@babel/plugin-syntax-nullish-coalescing-operator/7.8.3_@babel+core@7.20.12: + /@babel/plugin-syntax-nullish-coalescing-operator/7.8.3_@babel+core@7.21.3: resolution: {integrity: sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.20.12 + '@babel/core': 7.21.3 '@babel/helper-plugin-utils': 7.20.2 dev: true @@ -1885,12 +2741,12 @@ packages: '@babel/helper-plugin-utils': 7.20.2 dev: true - /@babel/plugin-syntax-numeric-separator/7.10.4_@babel+core@7.20.12: + /@babel/plugin-syntax-numeric-separator/7.10.4_@babel+core@7.21.3: resolution: {integrity: sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.20.12 + '@babel/core': 7.21.3 '@babel/helper-plugin-utils': 7.20.2 dev: true @@ -1902,12 +2758,12 @@ packages: '@babel/helper-plugin-utils': 7.20.2 dev: true - /@babel/plugin-syntax-object-rest-spread/7.8.3_@babel+core@7.20.12: + /@babel/plugin-syntax-object-rest-spread/7.8.3_@babel+core@7.21.3: resolution: {integrity: sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.20.12 + '@babel/core': 7.21.3 '@babel/helper-plugin-utils': 7.20.2 dev: true @@ -1919,12 +2775,12 @@ packages: '@babel/helper-plugin-utils': 7.20.2 dev: true - /@babel/plugin-syntax-optional-catch-binding/7.8.3_@babel+core@7.20.12: + /@babel/plugin-syntax-optional-catch-binding/7.8.3_@babel+core@7.21.3: resolution: {integrity: sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.20.12 + '@babel/core': 7.21.3 '@babel/helper-plugin-utils': 7.20.2 dev: true @@ -1936,22 +2792,22 @@ packages: '@babel/helper-plugin-utils': 7.20.2 dev: true - /@babel/plugin-syntax-optional-chaining/7.8.3_@babel+core@7.20.12: + /@babel/plugin-syntax-optional-chaining/7.8.3_@babel+core@7.21.3: resolution: {integrity: sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.20.12 + '@babel/core': 7.21.3 '@babel/helper-plugin-utils': 7.20.2 dev: true - /@babel/plugin-syntax-private-property-in-object/7.14.5_@babel+core@7.20.12: + /@babel/plugin-syntax-private-property-in-object/7.14.5_@babel+core@7.21.3: resolution: {integrity: sha512-0wVnp9dxJ72ZUJDV27ZfbSj6iHLoytYZmh3rFcxNnvsJF3ktkzLDZPy/mA17HGsaQT3/DQsWYX1f1QGWkCoVUg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.20.12 + '@babel/core': 7.21.3 '@babel/helper-plugin-utils': 7.20.2 dev: true @@ -1964,13 +2820,13 @@ packages: '@babel/helper-plugin-utils': 7.20.2 dev: true - /@babel/plugin-syntax-top-level-await/7.14.5_@babel+core@7.20.12: + /@babel/plugin-syntax-top-level-await/7.14.5_@babel+core@7.21.3: resolution: {integrity: sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.20.12 + '@babel/core': 7.21.3 '@babel/helper-plugin-utils': 7.20.2 dev: true @@ -1983,71 +2839,71 @@ packages: '@babel/helper-plugin-utils': 7.20.2 dev: true - /@babel/plugin-syntax-typescript/7.20.0_@babel+core@7.20.12: + /@babel/plugin-syntax-typescript/7.20.0_@babel+core@7.21.3: resolution: {integrity: sha512-rd9TkG+u1CExzS4SM1BlMEhMXwFLKVjOAFFCDx9PbX5ycJWDoWMcwdJH9RhkPu1dOgn5TrxLot/Gx6lWFuAUNQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.20.12 + '@babel/core': 7.21.3 '@babel/helper-plugin-utils': 7.20.2 dev: true - /@babel/plugin-transform-arrow-functions/7.20.7_@babel+core@7.20.12: + /@babel/plugin-transform-arrow-functions/7.20.7_@babel+core@7.21.3: resolution: {integrity: sha512-3poA5E7dzDomxj9WXWwuD6A5F3kc7VXwIJO+E+J8qtDtS+pXPAhrgEyh+9GBwBgPq1Z+bB+/JD60lp5jsN7JPQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.20.12 + '@babel/core': 7.21.3 '@babel/helper-plugin-utils': 7.20.2 dev: true - /@babel/plugin-transform-async-to-generator/7.20.7_@babel+core@7.20.12: + /@babel/plugin-transform-async-to-generator/7.20.7_@babel+core@7.21.3: resolution: {integrity: sha512-Uo5gwHPT9vgnSXQxqGtpdufUiWp96gk7yiP4Mp5bm1QMkEmLXBO7PAGYbKoJ6DhAwiNkcHFBol/x5zZZkL/t0Q==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.20.12 + '@babel/core': 7.21.3 '@babel/helper-module-imports': 7.18.6 '@babel/helper-plugin-utils': 7.20.2 - '@babel/helper-remap-async-to-generator': 7.18.9_@babel+core@7.20.12 + '@babel/helper-remap-async-to-generator': 7.18.9_@babel+core@7.21.3 transitivePeerDependencies: - supports-color dev: true - /@babel/plugin-transform-block-scoped-functions/7.18.6_@babel+core@7.20.12: + /@babel/plugin-transform-block-scoped-functions/7.18.6_@babel+core@7.21.3: resolution: {integrity: sha512-ExUcOqpPWnliRcPqves5HJcJOvHvIIWfuS4sroBUenPuMdmW+SMHDakmtS7qOo13sVppmUijqeTv7qqGsvURpQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.20.12 + '@babel/core': 7.21.3 '@babel/helper-plugin-utils': 7.20.2 dev: true - /@babel/plugin-transform-block-scoping/7.20.11_@babel+core@7.20.12: - resolution: {integrity: sha512-tA4N427a7fjf1P0/2I4ScsHGc5jcHPbb30xMbaTke2gxDuWpUfXDuX1FEymJwKk4tuGUvGcejAR6HdZVqmmPyw==} + /@babel/plugin-transform-block-scoping/7.21.0_@babel+core@7.21.3: + resolution: {integrity: sha512-Mdrbunoh9SxwFZapeHVrwFmri16+oYotcZysSzhNIVDwIAb1UV+kvnxULSYq9J3/q5MDG+4X6w8QVgD1zhBXNQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.20.12 + '@babel/core': 7.21.3 '@babel/helper-plugin-utils': 7.20.2 dev: true - /@babel/plugin-transform-classes/7.20.7_@babel+core@7.20.12: - resolution: {integrity: sha512-LWYbsiXTPKl+oBlXUGlwNlJZetXD5Am+CyBdqhPsDVjM9Jc8jwBJFrKhHf900Kfk2eZG1y9MAG3UNajol7A4VQ==} + /@babel/plugin-transform-classes/7.21.0_@babel+core@7.21.3: + resolution: {integrity: sha512-RZhbYTCEUAe6ntPehC4hlslPWosNHDox+vAs4On/mCLRLfoDVHf6hVEd7kuxr1RnHwJmxFfUM3cZiZRmPxJPXQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.20.12 + '@babel/core': 7.21.3 '@babel/helper-annotate-as-pure': 7.18.6 - '@babel/helper-compilation-targets': 7.20.7_@babel+core@7.20.12 + '@babel/helper-compilation-targets': 7.20.7_@babel+core@7.21.3 '@babel/helper-environment-visitor': 7.18.9 - '@babel/helper-function-name': 7.19.0 + '@babel/helper-function-name': 7.21.0 '@babel/helper-optimise-call-expression': 7.18.6 '@babel/helper-plugin-utils': 7.20.2 '@babel/helper-replace-supers': 7.20.7 @@ -2057,525 +2913,527 @@ packages: - supports-color dev: true - /@babel/plugin-transform-computed-properties/7.20.7_@babel+core@7.20.12: + /@babel/plugin-transform-computed-properties/7.20.7_@babel+core@7.21.3: resolution: {integrity: sha512-Lz7MvBK6DTjElHAmfu6bfANzKcxpyNPeYBGEafyA6E5HtRpjpZwU+u7Qrgz/2OR0z+5TvKYbPdphfSaAcZBrYQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.20.12 + '@babel/core': 7.21.3 '@babel/helper-plugin-utils': 7.20.2 '@babel/template': 7.20.7 dev: true - /@babel/plugin-transform-destructuring/7.20.7_@babel+core@7.20.12: - resolution: {integrity: sha512-Xwg403sRrZb81IVB79ZPqNQME23yhugYVqgTxAhT99h485F4f+GMELFhhOsscDUB7HCswepKeCKLn/GZvUKoBA==} + /@babel/plugin-transform-destructuring/7.21.3_@babel+core@7.21.3: + resolution: {integrity: sha512-bp6hwMFzuiE4HqYEyoGJ/V2LeIWn+hLVKc4pnj++E5XQptwhtcGmSayM029d/j2X1bPKGTlsyPwAubuU22KhMA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.20.12 + '@babel/core': 7.21.3 '@babel/helper-plugin-utils': 7.20.2 dev: true - /@babel/plugin-transform-dotall-regex/7.18.6_@babel+core@7.20.12: + /@babel/plugin-transform-dotall-regex/7.18.6_@babel+core@7.21.3: resolution: {integrity: sha512-6S3jpun1eEbAxq7TdjLotAsl4WpQI9DxfkycRcKrjhQYzU87qpXdknpBg/e+TdcMehqGnLFi7tnFUBR02Vq6wg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.20.12 - '@babel/helper-create-regexp-features-plugin': 7.20.5_@babel+core@7.20.12 + '@babel/core': 7.21.3 + '@babel/helper-create-regexp-features-plugin': 7.21.0_@babel+core@7.21.3 '@babel/helper-plugin-utils': 7.20.2 dev: true - /@babel/plugin-transform-duplicate-keys/7.18.9_@babel+core@7.20.12: + /@babel/plugin-transform-duplicate-keys/7.18.9_@babel+core@7.21.3: resolution: {integrity: sha512-d2bmXCtZXYc59/0SanQKbiWINadaJXqtvIQIzd4+hNwkWBgyCd5F/2t1kXoUdvPMrxzPvhK6EMQRROxsue+mfw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.20.12 + '@babel/core': 7.21.3 '@babel/helper-plugin-utils': 7.20.2 dev: true - /@babel/plugin-transform-exponentiation-operator/7.18.6_@babel+core@7.20.12: + /@babel/plugin-transform-exponentiation-operator/7.18.6_@babel+core@7.21.3: resolution: {integrity: sha512-wzEtc0+2c88FVR34aQmiz56dxEkxr2g8DQb/KfaFa1JYXOFVsbhvAonFN6PwVWj++fKmku8NP80plJ5Et4wqHw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.20.12 + '@babel/core': 7.21.3 '@babel/helper-builder-binary-assignment-operator-visitor': 7.18.9 '@babel/helper-plugin-utils': 7.20.2 dev: true - /@babel/plugin-transform-flow-strip-types/7.19.0_@babel+core@7.20.12: - resolution: {integrity: sha512-sgeMlNaQVbCSpgLSKP4ZZKfsJVnFnNQlUSk6gPYzR/q7tzCgQF2t8RBKAP6cKJeZdveei7Q7Jm527xepI8lNLg==} + /@babel/plugin-transform-flow-strip-types/7.21.0_@babel+core@7.21.3: + resolution: {integrity: sha512-FlFA2Mj87a6sDkW4gfGrQQqwY/dLlBAyJa2dJEZ+FHXUVHBflO2wyKvg+OOEzXfrKYIa4HWl0mgmbCzt0cMb7w==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.20.12 + '@babel/core': 7.21.3 '@babel/helper-plugin-utils': 7.20.2 - '@babel/plugin-syntax-flow': 7.18.6_@babel+core@7.20.12 + '@babel/plugin-syntax-flow': 7.18.6_@babel+core@7.21.3 dev: true - /@babel/plugin-transform-for-of/7.18.8_@babel+core@7.20.12: - resolution: {integrity: sha512-yEfTRnjuskWYo0k1mHUqrVWaZwrdq8AYbfrpqULOJOaucGSp4mNMVps+YtA8byoevxS/urwU75vyhQIxcCgiBQ==} + /@babel/plugin-transform-for-of/7.21.0_@babel+core@7.21.3: + resolution: {integrity: sha512-LlUYlydgDkKpIY7mcBWvyPPmMcOphEyYA27Ef4xpbh1IiDNLr0kZsos2nf92vz3IccvJI25QUwp86Eo5s6HmBQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.20.12 + '@babel/core': 7.21.3 '@babel/helper-plugin-utils': 7.20.2 dev: true - /@babel/plugin-transform-function-name/7.18.9_@babel+core@7.20.12: + /@babel/plugin-transform-function-name/7.18.9_@babel+core@7.21.3: resolution: {integrity: sha512-WvIBoRPaJQ5yVHzcnJFor7oS5Ls0PYixlTYE63lCj2RtdQEl15M68FXQlxnG6wdraJIXRdR7KI+hQ7q/9QjrCQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.20.12 - '@babel/helper-compilation-targets': 7.20.7_@babel+core@7.20.12 - '@babel/helper-function-name': 7.19.0 + '@babel/core': 7.21.3 + '@babel/helper-compilation-targets': 7.20.7_@babel+core@7.21.3 + '@babel/helper-function-name': 7.21.0 '@babel/helper-plugin-utils': 7.20.2 dev: true - /@babel/plugin-transform-literals/7.18.9_@babel+core@7.20.12: + /@babel/plugin-transform-literals/7.18.9_@babel+core@7.21.3: resolution: {integrity: sha512-IFQDSRoTPnrAIrI5zoZv73IFeZu2dhu6irxQjY9rNjTT53VmKg9fenjvoiOWOkJ6mm4jKVPtdMzBY98Fp4Z4cg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.20.12 + '@babel/core': 7.21.3 '@babel/helper-plugin-utils': 7.20.2 dev: true - /@babel/plugin-transform-member-expression-literals/7.18.6_@babel+core@7.20.12: + /@babel/plugin-transform-member-expression-literals/7.18.6_@babel+core@7.21.3: resolution: {integrity: sha512-qSF1ihLGO3q+/g48k85tUjD033C29TNTVB2paCwZPVmOsjn9pClvYYrM2VeJpBY2bcNkuny0YUyTNRyRxJ54KA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.20.12 + '@babel/core': 7.21.3 '@babel/helper-plugin-utils': 7.20.2 dev: true - /@babel/plugin-transform-modules-amd/7.20.11_@babel+core@7.20.12: + /@babel/plugin-transform-modules-amd/7.20.11_@babel+core@7.21.3: resolution: {integrity: sha512-NuzCt5IIYOW0O30UvqktzHYR2ud5bOWbY0yaxWZ6G+aFzOMJvrs5YHNikrbdaT15+KNO31nPOy5Fim3ku6Zb5g==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.20.12 - '@babel/helper-module-transforms': 7.20.11 + '@babel/core': 7.21.3 + '@babel/helper-module-transforms': 7.21.2 '@babel/helper-plugin-utils': 7.20.2 transitivePeerDependencies: - supports-color dev: true - /@babel/plugin-transform-modules-commonjs/7.20.11_@babel+core@7.20.12: - resolution: {integrity: sha512-S8e1f7WQ7cimJQ51JkAaDrEtohVEitXjgCGAS2N8S31Y42E+kWwfSz83LYz57QdBm7q9diARVqanIaH2oVgQnw==} + /@babel/plugin-transform-modules-commonjs/7.21.2_@babel+core@7.21.3: + resolution: {integrity: sha512-Cln+Yy04Gxua7iPdj6nOV96smLGjpElir5YwzF0LBPKoPlLDNJePNlrGGaybAJkd0zKRnOVXOgizSqPYMNYkzA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.20.12 - '@babel/helper-module-transforms': 7.20.11 + '@babel/core': 7.21.3 + '@babel/helper-module-transforms': 7.21.2 '@babel/helper-plugin-utils': 7.20.2 '@babel/helper-simple-access': 7.20.2 transitivePeerDependencies: - supports-color dev: true - /@babel/plugin-transform-modules-systemjs/7.20.11_@babel+core@7.20.12: + /@babel/plugin-transform-modules-systemjs/7.20.11_@babel+core@7.21.3: resolution: {integrity: sha512-vVu5g9BPQKSFEmvt2TA4Da5N+QVS66EX21d8uoOihC+OCpUoGvzVsXeqFdtAEfVa5BILAeFt+U7yVmLbQnAJmw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.20.12 + '@babel/core': 7.21.3 '@babel/helper-hoist-variables': 7.18.6 - '@babel/helper-module-transforms': 7.20.11 + '@babel/helper-module-transforms': 7.21.2 '@babel/helper-plugin-utils': 7.20.2 '@babel/helper-validator-identifier': 7.19.1 transitivePeerDependencies: - supports-color dev: true - /@babel/plugin-transform-modules-umd/7.18.6_@babel+core@7.20.12: + /@babel/plugin-transform-modules-umd/7.18.6_@babel+core@7.21.3: resolution: {integrity: sha512-dcegErExVeXcRqNtkRU/z8WlBLnvD4MRnHgNs3MytRO1Mn1sHRyhbcpYbVMGclAqOjdW+9cfkdZno9dFdfKLfQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.20.12 - '@babel/helper-module-transforms': 7.20.11 + '@babel/core': 7.21.3 + '@babel/helper-module-transforms': 7.21.2 '@babel/helper-plugin-utils': 7.20.2 transitivePeerDependencies: - supports-color dev: true - /@babel/plugin-transform-named-capturing-groups-regex/7.20.5_@babel+core@7.20.12: + /@babel/plugin-transform-named-capturing-groups-regex/7.20.5_@babel+core@7.21.3: resolution: {integrity: sha512-mOW4tTzi5iTLnw+78iEq3gr8Aoq4WNRGpmSlrogqaiCBoR1HFhpU4JkpQFOHfeYx3ReVIFWOQJS4aZBRvuZ6mA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0 dependencies: - '@babel/core': 7.20.12 - '@babel/helper-create-regexp-features-plugin': 7.20.5_@babel+core@7.20.12 + '@babel/core': 7.21.3 + '@babel/helper-create-regexp-features-plugin': 7.21.0_@babel+core@7.21.3 '@babel/helper-plugin-utils': 7.20.2 dev: true - /@babel/plugin-transform-new-target/7.18.6_@babel+core@7.20.12: + /@babel/plugin-transform-new-target/7.18.6_@babel+core@7.21.3: resolution: {integrity: sha512-DjwFA/9Iu3Z+vrAn+8pBUGcjhxKguSMlsFqeCKbhb9BAV756v0krzVK04CRDi/4aqmk8BsHb4a/gFcaA5joXRw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.20.12 + '@babel/core': 7.21.3 '@babel/helper-plugin-utils': 7.20.2 dev: true - /@babel/plugin-transform-object-super/7.18.6_@babel+core@7.20.12: + /@babel/plugin-transform-object-super/7.18.6_@babel+core@7.21.3: resolution: {integrity: sha512-uvGz6zk+pZoS1aTZrOvrbj6Pp/kK2mp45t2B+bTDre2UgsZZ8EZLSJtUg7m/no0zOJUWgFONpB7Zv9W2tSaFlA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.20.12 + '@babel/core': 7.21.3 '@babel/helper-plugin-utils': 7.20.2 '@babel/helper-replace-supers': 7.20.7 transitivePeerDependencies: - supports-color dev: true - /@babel/plugin-transform-parameters/7.20.7_@babel+core@7.20.12: - resolution: {integrity: sha512-WiWBIkeHKVOSYPO0pWkxGPfKeWrCJyD3NJ53+Lrp/QMSZbsVPovrVl2aWZ19D/LTVnaDv5Ap7GJ/B2CTOZdrfA==} + /@babel/plugin-transform-parameters/7.21.3_@babel+core@7.21.3: + resolution: {integrity: sha512-Wxc+TvppQG9xWFYatvCGPvZ6+SIUxQ2ZdiBP+PHYMIjnPXD+uThCshaz4NZOnODAtBjjcVQQ/3OKs9LW28purQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.20.12 + '@babel/core': 7.21.3 '@babel/helper-plugin-utils': 7.20.2 dev: true - /@babel/plugin-transform-property-literals/7.18.6_@babel+core@7.20.12: + /@babel/plugin-transform-property-literals/7.18.6_@babel+core@7.21.3: resolution: {integrity: sha512-cYcs6qlgafTud3PAzrrRNbQtfpQ8+y/+M5tKmksS9+M1ckbH6kzY8MrexEM9mcA6JDsukE19iIRvAyYl463sMg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.20.12 + '@babel/core': 7.21.3 '@babel/helper-plugin-utils': 7.20.2 dev: true - /@babel/plugin-transform-react-constant-elements/7.20.2_@babel+core@7.20.12: - resolution: {integrity: sha512-KS/G8YI8uwMGKErLFOHS/ekhqdHhpEloxs43NecQHVgo2QuQSyJhGIY1fL8UGl9wy5ItVwwoUL4YxVqsplGq2g==} + /@babel/plugin-transform-react-constant-elements/7.21.3_@babel+core@7.21.3: + resolution: {integrity: sha512-4DVcFeWe/yDYBLp0kBmOGFJ6N2UYg7coGid1gdxb4co62dy/xISDMaYBXBVXEDhfgMk7qkbcYiGtwd5Q/hwDDQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.20.12 + '@babel/core': 7.21.3 '@babel/helper-plugin-utils': 7.20.2 dev: true - /@babel/plugin-transform-react-display-name/7.18.6_@babel+core@7.20.12: + /@babel/plugin-transform-react-display-name/7.18.6_@babel+core@7.21.3: resolution: {integrity: sha512-TV4sQ+T013n61uMoygyMRm+xf04Bd5oqFpv2jAEQwSZ8NwQA7zeRPg1LMVg2PWi3zWBz+CLKD+v5bcpZ/BS0aA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.20.12 + '@babel/core': 7.21.3 '@babel/helper-plugin-utils': 7.20.2 dev: true - /@babel/plugin-transform-react-jsx-development/7.18.6_@babel+core@7.20.12: + /@babel/plugin-transform-react-jsx-development/7.18.6_@babel+core@7.21.3: resolution: {integrity: sha512-SA6HEjwYFKF7WDjWcMcMGUimmw/nhNRDWxr+KaLSCrkD/LMDBvWRmHAYgE1HDeF8KUuI8OAu+RT6EOtKxSW2qA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.20.12 - '@babel/plugin-transform-react-jsx': 7.20.7_@babel+core@7.20.12 + '@babel/core': 7.21.3 + '@babel/plugin-transform-react-jsx': 7.21.0_@babel+core@7.21.3 dev: true - /@babel/plugin-transform-react-jsx/7.20.7_@babel+core@7.20.12: - resolution: {integrity: sha512-Tfq7qqD+tRj3EoDhY00nn2uP2hsRxgYGi5mLQ5TimKav0a9Lrpd4deE+fcLXU8zFYRjlKPHZhpCvfEA6qnBxqQ==} + /@babel/plugin-transform-react-jsx/7.21.0_@babel+core@7.21.3: + resolution: {integrity: sha512-6OAWljMvQrZjR2DaNhVfRz6dkCAVV+ymcLUmaf8bccGOHn2v5rHJK3tTpij0BuhdYWP4LLaqj5lwcdlpAAPuvg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.20.12 + '@babel/core': 7.21.3 '@babel/helper-annotate-as-pure': 7.18.6 '@babel/helper-module-imports': 7.18.6 '@babel/helper-plugin-utils': 7.20.2 - '@babel/plugin-syntax-jsx': 7.18.6_@babel+core@7.20.12 - '@babel/types': 7.20.7 + '@babel/plugin-syntax-jsx': 7.18.6_@babel+core@7.21.3 + '@babel/types': 7.21.3 dev: true - /@babel/plugin-transform-react-pure-annotations/7.18.6_@babel+core@7.20.12: + /@babel/plugin-transform-react-pure-annotations/7.18.6_@babel+core@7.21.3: resolution: {integrity: sha512-I8VfEPg9r2TRDdvnHgPepTKvuRomzA8+u+nhY7qSI1fR2hRNebasZEETLyM5mAUr0Ku56OkXJ0I7NHJnO6cJiQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.20.12 + '@babel/core': 7.21.3 '@babel/helper-annotate-as-pure': 7.18.6 '@babel/helper-plugin-utils': 7.20.2 dev: true - /@babel/plugin-transform-regenerator/7.20.5_@babel+core@7.20.12: + /@babel/plugin-transform-regenerator/7.20.5_@babel+core@7.21.3: resolution: {integrity: sha512-kW/oO7HPBtntbsahzQ0qSE3tFvkFwnbozz3NWFhLGqH75vLEg+sCGngLlhVkePlCs3Jv0dBBHDzCHxNiFAQKCQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.20.12 + '@babel/core': 7.21.3 '@babel/helper-plugin-utils': 7.20.2 regenerator-transform: 0.15.1 dev: true - /@babel/plugin-transform-reserved-words/7.18.6_@babel+core@7.20.12: + /@babel/plugin-transform-reserved-words/7.18.6_@babel+core@7.21.3: resolution: {integrity: sha512-oX/4MyMoypzHjFrT1CdivfKZ+XvIPMFXwwxHp/r0Ddy2Vuomt4HDFGmft1TAY2yiTKiNSsh3kjBAzcM8kSdsjA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.20.12 + '@babel/core': 7.21.3 '@babel/helper-plugin-utils': 7.20.2 dev: true - /@babel/plugin-transform-runtime/7.19.6_@babel+core@7.20.12: - resolution: {integrity: sha512-PRH37lz4JU156lYFW1p8OxE5i7d6Sl/zV58ooyr+q1J1lnQPyg5tIiXlIwNVhJaY4W3TmOtdc8jqdXQcB1v5Yw==} + /@babel/plugin-transform-runtime/7.21.0_@babel+core@7.21.3: + resolution: {integrity: sha512-ReY6pxwSzEU0b3r2/T/VhqMKg/AkceBT19X0UptA3/tYi5Pe2eXgEUH+NNMC5nok6c6XQz5tyVTUpuezRfSMSg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.20.12 + '@babel/core': 7.21.3 '@babel/helper-module-imports': 7.18.6 '@babel/helper-plugin-utils': 7.20.2 - babel-plugin-polyfill-corejs2: 0.3.3_@babel+core@7.20.12 - babel-plugin-polyfill-corejs3: 0.6.0_@babel+core@7.20.12 - babel-plugin-polyfill-regenerator: 0.4.1_@babel+core@7.20.12 + babel-plugin-polyfill-corejs2: 0.3.3_@babel+core@7.21.3 + babel-plugin-polyfill-corejs3: 0.6.0_@babel+core@7.21.3 + babel-plugin-polyfill-regenerator: 0.4.1_@babel+core@7.21.3 semver: 6.3.0 transitivePeerDependencies: - supports-color dev: true - /@babel/plugin-transform-shorthand-properties/7.18.6_@babel+core@7.20.12: + /@babel/plugin-transform-shorthand-properties/7.18.6_@babel+core@7.21.3: resolution: {integrity: sha512-eCLXXJqv8okzg86ywZJbRn19YJHU4XUa55oz2wbHhaQVn/MM+XhukiT7SYqp/7o00dg52Rj51Ny+Ecw4oyoygw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.20.12 + '@babel/core': 7.21.3 '@babel/helper-plugin-utils': 7.20.2 dev: true - /@babel/plugin-transform-spread/7.20.7_@babel+core@7.20.12: + /@babel/plugin-transform-spread/7.20.7_@babel+core@7.21.3: resolution: {integrity: sha512-ewBbHQ+1U/VnH1fxltbJqDeWBU1oNLG8Dj11uIv3xVf7nrQu0bPGe5Rf716r7K5Qz+SqtAOVswoVunoiBtGhxw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.20.12 + '@babel/core': 7.21.3 '@babel/helper-plugin-utils': 7.20.2 '@babel/helper-skip-transparent-expression-wrappers': 7.20.0 dev: true - /@babel/plugin-transform-sticky-regex/7.18.6_@babel+core@7.20.12: + /@babel/plugin-transform-sticky-regex/7.18.6_@babel+core@7.21.3: resolution: {integrity: sha512-kfiDrDQ+PBsQDO85yj1icueWMfGfJFKN1KCkndygtu/C9+XUfydLC8Iv5UYJqRwy4zk8EcplRxEOeLyjq1gm6Q==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.20.12 + '@babel/core': 7.21.3 '@babel/helper-plugin-utils': 7.20.2 dev: true - /@babel/plugin-transform-template-literals/7.18.9_@babel+core@7.20.12: + /@babel/plugin-transform-template-literals/7.18.9_@babel+core@7.21.3: resolution: {integrity: sha512-S8cOWfT82gTezpYOiVaGHrCbhlHgKhQt8XH5ES46P2XWmX92yisoZywf5km75wv5sYcXDUCLMmMxOLCtthDgMA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.20.12 + '@babel/core': 7.21.3 '@babel/helper-plugin-utils': 7.20.2 dev: true - /@babel/plugin-transform-typeof-symbol/7.18.9_@babel+core@7.20.12: + /@babel/plugin-transform-typeof-symbol/7.18.9_@babel+core@7.21.3: resolution: {integrity: sha512-SRfwTtF11G2aemAZWivL7PD+C9z52v9EvMqH9BuYbabyPuKUvSWks3oCg6041pT925L4zVFqaVBeECwsmlguEw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.20.12 + '@babel/core': 7.21.3 '@babel/helper-plugin-utils': 7.20.2 dev: true - /@babel/plugin-transform-typescript/7.20.7: - resolution: {integrity: sha512-m3wVKEvf6SoszD8pu4NZz3PvfKRCMgk6D6d0Qi9hNnlM5M6CFS92EgF4EiHVLKbU0r/r7ty1hg7NPZwE7WRbYw==} + /@babel/plugin-transform-typescript/7.21.3: + resolution: {integrity: sha512-RQxPz6Iqt8T0uw/WsJNReuBpWpBqs/n7mNo18sKLoTbMp+UrEekhH+pKSVC7gWz+DNjo9gryfV8YzCiT45RgMw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/helper-create-class-features-plugin': 7.20.12 + '@babel/helper-annotate-as-pure': 7.18.6 + '@babel/helper-create-class-features-plugin': 7.21.0 '@babel/helper-plugin-utils': 7.20.2 '@babel/plugin-syntax-typescript': 7.20.0 transitivePeerDependencies: - supports-color dev: true - /@babel/plugin-transform-typescript/7.20.7_@babel+core@7.20.12: - resolution: {integrity: sha512-m3wVKEvf6SoszD8pu4NZz3PvfKRCMgk6D6d0Qi9hNnlM5M6CFS92EgF4EiHVLKbU0r/r7ty1hg7NPZwE7WRbYw==} + /@babel/plugin-transform-typescript/7.21.3_@babel+core@7.21.3: + resolution: {integrity: sha512-RQxPz6Iqt8T0uw/WsJNReuBpWpBqs/n7mNo18sKLoTbMp+UrEekhH+pKSVC7gWz+DNjo9gryfV8YzCiT45RgMw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.20.12 - '@babel/helper-create-class-features-plugin': 7.20.12_@babel+core@7.20.12 + '@babel/core': 7.21.3 + '@babel/helper-annotate-as-pure': 7.18.6 + '@babel/helper-create-class-features-plugin': 7.21.0_@babel+core@7.21.3 '@babel/helper-plugin-utils': 7.20.2 - '@babel/plugin-syntax-typescript': 7.20.0_@babel+core@7.20.12 + '@babel/plugin-syntax-typescript': 7.20.0_@babel+core@7.21.3 transitivePeerDependencies: - supports-color dev: true - /@babel/plugin-transform-unicode-escapes/7.18.10_@babel+core@7.20.12: + /@babel/plugin-transform-unicode-escapes/7.18.10_@babel+core@7.21.3: resolution: {integrity: sha512-kKAdAI+YzPgGY/ftStBFXTI1LZFju38rYThnfMykS+IXy8BVx+res7s2fxf1l8I35DV2T97ezo6+SGrXz6B3iQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.20.12 + '@babel/core': 7.21.3 '@babel/helper-plugin-utils': 7.20.2 dev: true - /@babel/plugin-transform-unicode-regex/7.18.6_@babel+core@7.20.12: + /@babel/plugin-transform-unicode-regex/7.18.6_@babel+core@7.21.3: resolution: {integrity: sha512-gE7A6Lt7YLnNOL3Pb9BNeZvi+d8l7tcRrG4+pwJjK9hD2xX4mEvjlQW60G9EEmfXVYRPv9VRQcyegIVHCql/AA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.20.12 - '@babel/helper-create-regexp-features-plugin': 7.20.5_@babel+core@7.20.12 + '@babel/core': 7.21.3 + '@babel/helper-create-regexp-features-plugin': 7.21.0_@babel+core@7.21.3 '@babel/helper-plugin-utils': 7.20.2 dev: true - /@babel/preset-env/7.20.2_@babel+core@7.20.12: + /@babel/preset-env/7.20.2_@babel+core@7.21.3: resolution: {integrity: sha512-1G0efQEWR1EHkKvKHqbG+IN/QdgwfByUpM5V5QroDzGV2t3S/WXNQd693cHiHTlCFMpr9B6FkPFXDA2lQcKoDg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/compat-data': 7.20.10 - '@babel/core': 7.20.12 - '@babel/helper-compilation-targets': 7.20.7_@babel+core@7.20.12 + '@babel/compat-data': 7.21.0 + '@babel/core': 7.21.3 + '@babel/helper-compilation-targets': 7.20.7_@babel+core@7.21.3 '@babel/helper-plugin-utils': 7.20.2 - '@babel/helper-validator-option': 7.18.6 - '@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression': 7.18.6_@babel+core@7.20.12 - '@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining': 7.20.7_@babel+core@7.20.12 - '@babel/plugin-proposal-async-generator-functions': 7.20.7_@babel+core@7.20.12 - '@babel/plugin-proposal-class-properties': 7.18.6_@babel+core@7.20.12 - '@babel/plugin-proposal-class-static-block': 7.20.7_@babel+core@7.20.12 - '@babel/plugin-proposal-dynamic-import': 7.18.6_@babel+core@7.20.12 - '@babel/plugin-proposal-export-namespace-from': 7.18.9_@babel+core@7.20.12 - '@babel/plugin-proposal-json-strings': 7.18.6_@babel+core@7.20.12 - '@babel/plugin-proposal-logical-assignment-operators': 7.20.7_@babel+core@7.20.12 - '@babel/plugin-proposal-nullish-coalescing-operator': 7.18.6_@babel+core@7.20.12 - '@babel/plugin-proposal-numeric-separator': 7.18.6_@babel+core@7.20.12 - '@babel/plugin-proposal-object-rest-spread': 7.20.7_@babel+core@7.20.12 - '@babel/plugin-proposal-optional-catch-binding': 7.18.6_@babel+core@7.20.12 - '@babel/plugin-proposal-optional-chaining': 7.20.7_@babel+core@7.20.12 - '@babel/plugin-proposal-private-methods': 7.18.6_@babel+core@7.20.12 - '@babel/plugin-proposal-private-property-in-object': 7.20.5_@babel+core@7.20.12 - '@babel/plugin-proposal-unicode-property-regex': 7.18.6_@babel+core@7.20.12 - '@babel/plugin-syntax-async-generators': 7.8.4_@babel+core@7.20.12 - '@babel/plugin-syntax-class-properties': 7.12.13_@babel+core@7.20.12 - '@babel/plugin-syntax-class-static-block': 7.14.5_@babel+core@7.20.12 - '@babel/plugin-syntax-dynamic-import': 7.8.3_@babel+core@7.20.12 - '@babel/plugin-syntax-export-namespace-from': 7.8.3_@babel+core@7.20.12 - '@babel/plugin-syntax-import-assertions': 7.20.0_@babel+core@7.20.12 - '@babel/plugin-syntax-json-strings': 7.8.3_@babel+core@7.20.12 - '@babel/plugin-syntax-logical-assignment-operators': 7.10.4_@babel+core@7.20.12 - '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3_@babel+core@7.20.12 - '@babel/plugin-syntax-numeric-separator': 7.10.4_@babel+core@7.20.12 - '@babel/plugin-syntax-object-rest-spread': 7.8.3_@babel+core@7.20.12 - '@babel/plugin-syntax-optional-catch-binding': 7.8.3_@babel+core@7.20.12 - '@babel/plugin-syntax-optional-chaining': 7.8.3_@babel+core@7.20.12 - '@babel/plugin-syntax-private-property-in-object': 7.14.5_@babel+core@7.20.12 - '@babel/plugin-syntax-top-level-await': 7.14.5_@babel+core@7.20.12 - '@babel/plugin-transform-arrow-functions': 7.20.7_@babel+core@7.20.12 - '@babel/plugin-transform-async-to-generator': 7.20.7_@babel+core@7.20.12 - '@babel/plugin-transform-block-scoped-functions': 7.18.6_@babel+core@7.20.12 - '@babel/plugin-transform-block-scoping': 7.20.11_@babel+core@7.20.12 - '@babel/plugin-transform-classes': 7.20.7_@babel+core@7.20.12 - '@babel/plugin-transform-computed-properties': 7.20.7_@babel+core@7.20.12 - '@babel/plugin-transform-destructuring': 7.20.7_@babel+core@7.20.12 - '@babel/plugin-transform-dotall-regex': 7.18.6_@babel+core@7.20.12 - '@babel/plugin-transform-duplicate-keys': 7.18.9_@babel+core@7.20.12 - '@babel/plugin-transform-exponentiation-operator': 7.18.6_@babel+core@7.20.12 - '@babel/plugin-transform-for-of': 7.18.8_@babel+core@7.20.12 - '@babel/plugin-transform-function-name': 7.18.9_@babel+core@7.20.12 - '@babel/plugin-transform-literals': 7.18.9_@babel+core@7.20.12 - '@babel/plugin-transform-member-expression-literals': 7.18.6_@babel+core@7.20.12 - '@babel/plugin-transform-modules-amd': 7.20.11_@babel+core@7.20.12 - '@babel/plugin-transform-modules-commonjs': 7.20.11_@babel+core@7.20.12 - '@babel/plugin-transform-modules-systemjs': 7.20.11_@babel+core@7.20.12 - '@babel/plugin-transform-modules-umd': 7.18.6_@babel+core@7.20.12 - '@babel/plugin-transform-named-capturing-groups-regex': 7.20.5_@babel+core@7.20.12 - '@babel/plugin-transform-new-target': 7.18.6_@babel+core@7.20.12 - '@babel/plugin-transform-object-super': 7.18.6_@babel+core@7.20.12 - '@babel/plugin-transform-parameters': 7.20.7_@babel+core@7.20.12 - '@babel/plugin-transform-property-literals': 7.18.6_@babel+core@7.20.12 - '@babel/plugin-transform-regenerator': 7.20.5_@babel+core@7.20.12 - '@babel/plugin-transform-reserved-words': 7.18.6_@babel+core@7.20.12 - '@babel/plugin-transform-shorthand-properties': 7.18.6_@babel+core@7.20.12 - '@babel/plugin-transform-spread': 7.20.7_@babel+core@7.20.12 - '@babel/plugin-transform-sticky-regex': 7.18.6_@babel+core@7.20.12 - '@babel/plugin-transform-template-literals': 7.18.9_@babel+core@7.20.12 - '@babel/plugin-transform-typeof-symbol': 7.18.9_@babel+core@7.20.12 - '@babel/plugin-transform-unicode-escapes': 7.18.10_@babel+core@7.20.12 - '@babel/plugin-transform-unicode-regex': 7.18.6_@babel+core@7.20.12 - '@babel/preset-modules': 0.1.5_@babel+core@7.20.12 - '@babel/types': 7.20.7 - babel-plugin-polyfill-corejs2: 0.3.3_@babel+core@7.20.12 - babel-plugin-polyfill-corejs3: 0.6.0_@babel+core@7.20.12 - babel-plugin-polyfill-regenerator: 0.4.1_@babel+core@7.20.12 - core-js-compat: 3.27.1 + '@babel/helper-validator-option': 7.21.0 + '@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression': 7.18.6_@babel+core@7.21.3 + '@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining': 7.20.7_@babel+core@7.21.3 + '@babel/plugin-proposal-async-generator-functions': 7.20.7_@babel+core@7.21.3 + '@babel/plugin-proposal-class-properties': 7.18.6_@babel+core@7.21.3 + '@babel/plugin-proposal-class-static-block': 7.21.0_@babel+core@7.21.3 + '@babel/plugin-proposal-dynamic-import': 7.18.6_@babel+core@7.21.3 + '@babel/plugin-proposal-export-namespace-from': 7.18.9_@babel+core@7.21.3 + '@babel/plugin-proposal-json-strings': 7.18.6_@babel+core@7.21.3 + '@babel/plugin-proposal-logical-assignment-operators': 7.20.7_@babel+core@7.21.3 + '@babel/plugin-proposal-nullish-coalescing-operator': 7.18.6_@babel+core@7.21.3 + '@babel/plugin-proposal-numeric-separator': 7.18.6_@babel+core@7.21.3 + '@babel/plugin-proposal-object-rest-spread': 7.20.7_@babel+core@7.21.3 + '@babel/plugin-proposal-optional-catch-binding': 7.18.6_@babel+core@7.21.3 + '@babel/plugin-proposal-optional-chaining': 7.21.0_@babel+core@7.21.3 + '@babel/plugin-proposal-private-methods': 7.18.6_@babel+core@7.21.3 + '@babel/plugin-proposal-private-property-in-object': 7.21.0_@babel+core@7.21.3 + '@babel/plugin-proposal-unicode-property-regex': 7.18.6_@babel+core@7.21.3 + '@babel/plugin-syntax-async-generators': 7.8.4_@babel+core@7.21.3 + '@babel/plugin-syntax-class-properties': 7.12.13_@babel+core@7.21.3 + '@babel/plugin-syntax-class-static-block': 7.14.5_@babel+core@7.21.3 + '@babel/plugin-syntax-dynamic-import': 7.8.3_@babel+core@7.21.3 + '@babel/plugin-syntax-export-namespace-from': 7.8.3_@babel+core@7.21.3 + '@babel/plugin-syntax-import-assertions': 7.20.0_@babel+core@7.21.3 + '@babel/plugin-syntax-json-strings': 7.8.3_@babel+core@7.21.3 + '@babel/plugin-syntax-logical-assignment-operators': 7.10.4_@babel+core@7.21.3 + '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3_@babel+core@7.21.3 + '@babel/plugin-syntax-numeric-separator': 7.10.4_@babel+core@7.21.3 + '@babel/plugin-syntax-object-rest-spread': 7.8.3_@babel+core@7.21.3 + '@babel/plugin-syntax-optional-catch-binding': 7.8.3_@babel+core@7.21.3 + '@babel/plugin-syntax-optional-chaining': 7.8.3_@babel+core@7.21.3 + '@babel/plugin-syntax-private-property-in-object': 7.14.5_@babel+core@7.21.3 + '@babel/plugin-syntax-top-level-await': 7.14.5_@babel+core@7.21.3 + '@babel/plugin-transform-arrow-functions': 7.20.7_@babel+core@7.21.3 + '@babel/plugin-transform-async-to-generator': 7.20.7_@babel+core@7.21.3 + '@babel/plugin-transform-block-scoped-functions': 7.18.6_@babel+core@7.21.3 + '@babel/plugin-transform-block-scoping': 7.21.0_@babel+core@7.21.3 + '@babel/plugin-transform-classes': 7.21.0_@babel+core@7.21.3 + '@babel/plugin-transform-computed-properties': 7.20.7_@babel+core@7.21.3 + '@babel/plugin-transform-destructuring': 7.21.3_@babel+core@7.21.3 + '@babel/plugin-transform-dotall-regex': 7.18.6_@babel+core@7.21.3 + '@babel/plugin-transform-duplicate-keys': 7.18.9_@babel+core@7.21.3 + '@babel/plugin-transform-exponentiation-operator': 7.18.6_@babel+core@7.21.3 + '@babel/plugin-transform-for-of': 7.21.0_@babel+core@7.21.3 + '@babel/plugin-transform-function-name': 7.18.9_@babel+core@7.21.3 + '@babel/plugin-transform-literals': 7.18.9_@babel+core@7.21.3 + '@babel/plugin-transform-member-expression-literals': 7.18.6_@babel+core@7.21.3 + '@babel/plugin-transform-modules-amd': 7.20.11_@babel+core@7.21.3 + '@babel/plugin-transform-modules-commonjs': 7.21.2_@babel+core@7.21.3 + '@babel/plugin-transform-modules-systemjs': 7.20.11_@babel+core@7.21.3 + '@babel/plugin-transform-modules-umd': 7.18.6_@babel+core@7.21.3 + '@babel/plugin-transform-named-capturing-groups-regex': 7.20.5_@babel+core@7.21.3 + '@babel/plugin-transform-new-target': 7.18.6_@babel+core@7.21.3 + '@babel/plugin-transform-object-super': 7.18.6_@babel+core@7.21.3 + '@babel/plugin-transform-parameters': 7.21.3_@babel+core@7.21.3 + '@babel/plugin-transform-property-literals': 7.18.6_@babel+core@7.21.3 + '@babel/plugin-transform-regenerator': 7.20.5_@babel+core@7.21.3 + '@babel/plugin-transform-reserved-words': 7.18.6_@babel+core@7.21.3 + '@babel/plugin-transform-shorthand-properties': 7.18.6_@babel+core@7.21.3 + '@babel/plugin-transform-spread': 7.20.7_@babel+core@7.21.3 + '@babel/plugin-transform-sticky-regex': 7.18.6_@babel+core@7.21.3 + '@babel/plugin-transform-template-literals': 7.18.9_@babel+core@7.21.3 + '@babel/plugin-transform-typeof-symbol': 7.18.9_@babel+core@7.21.3 + '@babel/plugin-transform-unicode-escapes': 7.18.10_@babel+core@7.21.3 + '@babel/plugin-transform-unicode-regex': 7.18.6_@babel+core@7.21.3 + '@babel/preset-modules': 0.1.5_@babel+core@7.21.3 + '@babel/types': 7.21.3 + babel-plugin-polyfill-corejs2: 0.3.3_@babel+core@7.21.3 + babel-plugin-polyfill-corejs3: 0.6.0_@babel+core@7.21.3 + babel-plugin-polyfill-regenerator: 0.4.1_@babel+core@7.21.3 + core-js-compat: 3.29.1 semver: 6.3.0 transitivePeerDependencies: - supports-color dev: true - /@babel/preset-modules/0.1.5_@babel+core@7.20.12: + /@babel/preset-modules/0.1.5_@babel+core@7.21.3: resolution: {integrity: sha512-A57th6YRG7oR3cq/yt/Y84MvGgE0eJG2F1JLhKuyG+jFxEgrd/HAMJatiFtmOiZurz+0DkrvbheCLaV5f2JfjA==} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.20.12 + '@babel/core': 7.21.3 '@babel/helper-plugin-utils': 7.20.2 - '@babel/plugin-proposal-unicode-property-regex': 7.18.6_@babel+core@7.20.12 - '@babel/plugin-transform-dotall-regex': 7.18.6_@babel+core@7.20.12 - '@babel/types': 7.20.7 + '@babel/plugin-proposal-unicode-property-regex': 7.18.6_@babel+core@7.21.3 + '@babel/plugin-transform-dotall-regex': 7.18.6_@babel+core@7.21.3 + '@babel/types': 7.21.3 esutils: 2.0.3 dev: true - /@babel/preset-react/7.18.6_@babel+core@7.20.12: + /@babel/preset-react/7.18.6_@babel+core@7.21.3: resolution: {integrity: sha512-zXr6atUmyYdiWRVLOZahakYmOBHtWc2WGCkP8PYTgZi0iJXDY2CN180TdrIW4OGOAdLc7TifzDIvtx6izaRIzg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.20.12 + '@babel/core': 7.21.3 '@babel/helper-plugin-utils': 7.20.2 - '@babel/helper-validator-option': 7.18.6 - '@babel/plugin-transform-react-display-name': 7.18.6_@babel+core@7.20.12 - '@babel/plugin-transform-react-jsx': 7.20.7_@babel+core@7.20.12 - '@babel/plugin-transform-react-jsx-development': 7.18.6_@babel+core@7.20.12 - '@babel/plugin-transform-react-pure-annotations': 7.18.6_@babel+core@7.20.12 + '@babel/helper-validator-option': 7.21.0 + '@babel/plugin-transform-react-display-name': 7.18.6_@babel+core@7.21.3 + '@babel/plugin-transform-react-jsx': 7.21.0_@babel+core@7.21.3 + '@babel/plugin-transform-react-jsx-development': 7.18.6_@babel+core@7.21.3 + '@babel/plugin-transform-react-pure-annotations': 7.18.6_@babel+core@7.21.3 dev: true /@babel/preset-typescript/7.18.6: @@ -2585,28 +3443,32 @@ packages: '@babel/core': ^7.0.0-0 dependencies: '@babel/helper-plugin-utils': 7.20.2 - '@babel/helper-validator-option': 7.18.6 - '@babel/plugin-transform-typescript': 7.20.7 + '@babel/helper-validator-option': 7.21.0 + '@babel/plugin-transform-typescript': 7.21.3 transitivePeerDependencies: - supports-color dev: true - /@babel/preset-typescript/7.18.6_@babel+core@7.20.12: + /@babel/preset-typescript/7.18.6_@babel+core@7.21.3: resolution: {integrity: sha512-s9ik86kXBAnD760aybBucdpnLsAt0jK1xqJn2juOn9lkOvSHV60os5hxoVJsPzMQxvnUJFAlkont2DvvaYEBtQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.20.12 + '@babel/core': 7.21.3 '@babel/helper-plugin-utils': 7.20.2 - '@babel/helper-validator-option': 7.18.6 - '@babel/plugin-transform-typescript': 7.20.7_@babel+core@7.20.12 + '@babel/helper-validator-option': 7.21.0 + '@babel/plugin-transform-typescript': 7.21.3_@babel+core@7.21.3 transitivePeerDependencies: - supports-color dev: true - /@babel/runtime/7.20.7: - resolution: {integrity: sha512-UF0tvkUtxwAgZ5W/KrkHf0Rn0fdnLDU9ScxBrEVNUprE/MzirjK4MJUX1/BVDv00Sv8cljtukVK1aky++X1SjQ==} + /@babel/regjsgen/0.8.0: + resolution: {integrity: sha512-x/rqGMdzj+fWZvCOYForTghzbtqPDZ5gPwaoNGHdgDfF2QA/XZbCBp4Moo5scrkAMPhB7z26XM/AaHuIJdgauA==} + dev: true + + /@babel/runtime/7.21.0: + resolution: {integrity: sha512-xwII0//EObnq89Ji5AKYQaRYiW/nZ3llSv29d49IuxPhKbtJoLP+9QUUZ4nVragQVtaVGeZrpB+ZtG/Pdy/POw==} engines: {node: '>=6.9.0'} dependencies: regenerator-runtime: 0.13.11 @@ -2617,30 +3479,30 @@ packages: engines: {node: '>=6.9.0'} dependencies: '@babel/code-frame': 7.18.6 - '@babel/parser': 7.20.7 - '@babel/types': 7.20.7 + '@babel/parser': 7.21.3 + '@babel/types': 7.21.3 dev: true - /@babel/traverse/7.20.12: - resolution: {integrity: sha512-MsIbFN0u+raeja38qboyF8TIT7K0BFzz/Yd/77ta4MsUsmP2RAnidIlwq7d5HFQrH/OZJecGV6B71C4zAgpoSQ==} + /@babel/traverse/7.21.3: + resolution: {integrity: sha512-XLyopNeaTancVitYZe2MlUEvgKb6YVVPXzofHgqHijCImG33b/uTurMS488ht/Hbsb2XK3U2BnSTxKVNGV3nGQ==} engines: {node: '>=6.9.0'} dependencies: '@babel/code-frame': 7.18.6 - '@babel/generator': 7.20.7 + '@babel/generator': 7.21.3 '@babel/helper-environment-visitor': 7.18.9 - '@babel/helper-function-name': 7.19.0 + '@babel/helper-function-name': 7.21.0 '@babel/helper-hoist-variables': 7.18.6 '@babel/helper-split-export-declaration': 7.18.6 - '@babel/parser': 7.20.7 - '@babel/types': 7.20.7 + '@babel/parser': 7.21.3 + '@babel/types': 7.21.3 debug: 4.3.4 globals: 11.12.0 transitivePeerDependencies: - supports-color dev: true - /@babel/types/7.20.7: - resolution: {integrity: sha512-69OnhBxSSgK0OzTJai4kyPDiKTIe3j+ctaHdIGVbRahTLAT7L3R9oeXHC2aVSuGYt3cVnoAMDmOCgJ2yaiLMvg==} + /@babel/types/7.21.3: + resolution: {integrity: sha512-sBGdETxC+/M4o/zKC0sl6sjWv62WFR/uzxrJ6uYyMLZOUlPnwzw0tKgVHOXxaAd5l2g8pEDM5RZ495GPQI77kg==} engines: {node: '>=6.9.0'} dependencies: '@babel/helper-string-parser': 7.19.4 @@ -2657,6 +3519,21 @@ packages: engines: {node: '>=8.9'} dev: false + /@chainsafe/as-sha256/0.3.1: + resolution: {integrity: sha512-hldFFYuf49ed7DAakWVXSJODuq3pzJEguD8tQ7h+sGkM18vja+OFoJI9krnGmgzyuZC2ETX0NOIcCTy31v2Mtg==} + + /@chainsafe/persistent-merkle-tree/0.4.2: + resolution: {integrity: sha512-lLO3ihKPngXLTus/L7WHKaw9PnNJWizlOF1H9NNzHP6Xvh82vzg9F2bzkXhYIFshMZ2gTCEz8tq6STe7r5NDfQ==} + dependencies: + '@chainsafe/as-sha256': 0.3.1 + + /@chainsafe/ssz/0.9.4: + resolution: {integrity: sha512-77Qtg2N1ayqs4Bg/wvnWfg5Bta7iy7IRh8XqXh7oNMeP2HBbBwx8m6yTpA8p0EHItWPEBkgZd5S5/LSlp3GXuQ==} + dependencies: + '@chainsafe/as-sha256': 0.3.1 + '@chainsafe/persistent-merkle-tree': 0.4.2 + case: 1.6.3 + /@colors/colors/1.5.0: resolution: {integrity: sha512-ooWCrlZP11i8GImSjTHYHLkvFDP48nS4+204nGb1RiX/WXYHmJA2III9/e2DWVabCESdW7hBAEzHRqUn9OUVvQ==} engines: {node: '>=0.1.90'} @@ -2671,7 +3548,7 @@ packages: peerDependencies: react-scripts: ^5.0.0 dependencies: - autoprefixer: 10.4.13 + autoprefixer: 10.4.14 cosmiconfig: 7.1.0 cosmiconfig-typescript-loader: 1.0.9_awa2wsr5thmg3i7jqycphctjfq cross-spawn: 7.0.3 @@ -2704,7 +3581,7 @@ packages: peerDependencies: postcss: ^8.2 dependencies: - '@csstools/selector-specificity': 2.0.2_wajs5nedgkikc5pcuwett7legi + '@csstools/selector-specificity': 2.1.1_wajs5nedgkikc5pcuwett7legi postcss: 8.4.21 postcss-selector-parser: 6.0.11 dev: true @@ -2757,7 +3634,7 @@ packages: peerDependencies: postcss: ^8.2 dependencies: - '@csstools/selector-specificity': 2.0.2_wajs5nedgkikc5pcuwett7legi + '@csstools/selector-specificity': 2.1.1_wajs5nedgkikc5pcuwett7legi postcss: 8.4.21 postcss-selector-parser: 6.0.11 dev: true @@ -2842,11 +3719,11 @@ packages: postcss: 8.4.21 dev: true - /@csstools/selector-specificity/2.0.2_wajs5nedgkikc5pcuwett7legi: - resolution: {integrity: sha512-IkpVW/ehM1hWKln4fCA3NzJU8KwD+kIOvPZA4cqxoJHtE21CCzjyp+Kxbu0i5I4tBNOlXPL9mjwnWlL0VEG4Fg==} - engines: {node: ^12 || ^14 || >=16} + /@csstools/selector-specificity/2.1.1_wajs5nedgkikc5pcuwett7legi: + resolution: {integrity: sha512-jwx+WCqszn53YHOfvFMJJRd/B2GqkCBt+1MJSG6o5/s8+ytHMvDZXsJgUEWLk12UnLd7HYKac4BYU5i/Ron1Cw==} + engines: {node: ^14 || ^16 || >=18} peerDependencies: - postcss: ^8.2 + postcss: ^8.4 postcss-selector-parser: ^6.0.10 dependencies: postcss: 8.4.21 @@ -2925,7 +3802,7 @@ packages: engines: {node: '>=18'} dependencies: '@digitalcredentials/keypair': 1.0.5 - '@noble/ed25519': 1.7.1 + '@noble/ed25519': 1.7.3 base-x: 4.0.0 dev: false @@ -3001,14 +3878,29 @@ packages: - web-streams-polyfill dev: false - /@eslint/eslintrc/1.4.1: - resolution: {integrity: sha512-XXrH9Uarn0stsyldqDYq8r++mROmWRI1xKMXa640Bb//SY1+ECYX6VzT6Lcx5frD0V30XieqJ0oX9I2Xj5aoMA==} + /@eslint-community/eslint-utils/4.3.0_eslint@8.36.0: + resolution: {integrity: sha512-v3oplH6FYCULtFuCeqyuTd9D2WKO937Dxdq+GmHOLL72TTRriLxz2VLlNfkZRsvj6PKnOPAtuT6dwrs/pA5DvA==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + peerDependencies: + eslint: ^6.0.0 || ^7.0.0 || >=8.0.0 + dependencies: + eslint: 8.36.0 + eslint-visitor-keys: 3.3.0 + dev: true + + /@eslint-community/regexpp/4.4.0: + resolution: {integrity: sha512-A9983Q0LnDGdLPjxyXQ00sbV+K+O+ko2Dr+CZigbHWtX9pNfxlaBkMR8X1CztI73zuEyEBXTVjx7CE+/VSwDiQ==} + engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0} + dev: true + + /@eslint/eslintrc/2.0.1: + resolution: {integrity: sha512-eFRmABvW2E5Ho6f5fHLqgena46rOj7r7OKHYfLElqcBfGFHHpjBhivyi5+jOEQuSpdc/1phIZJlbC2te+tZNIw==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} dependencies: ajv: 6.12.6 debug: 4.3.4 - espree: 9.4.1 - globals: 13.19.0 + espree: 9.5.0 + globals: 13.20.0 ignore: 5.2.4 import-fresh: 3.3.0 js-yaml: 4.1.0 @@ -3018,18 +3910,23 @@ packages: - supports-color dev: true - /@ethereumjs/rlp/4.0.0: - resolution: {integrity: sha512-LM4jS5n33bJN60fM5EC8VeyhUgga6/DjCPBV2vWjnfVtobqtOiNC4SQ1MRFqyBSmJGGdB533JZWewyvlcdJtkQ==} + /@eslint/js/8.36.0: + resolution: {integrity: sha512-lxJ9R5ygVm8ZWgYdUweoq5ownDlJ4upvoWmO4eLxBYHdMo+vZ/Rx0EN6MbKWDJOSUGrqJy2Gt+Dyv/VKml0fjg==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + dev: true + + /@ethereumjs/rlp/4.0.1: + resolution: {integrity: sha512-tqsQiBQDQdmPWE1xkkBq4rlSW5QZpLOUJ5RJh2/9fug+q9tnUhuZoVLk7s0scUIKTOzEtR72DFBXI4WiZcMpvw==} engines: {node: '>=14'} hasBin: true - /@ethereumjs/util/8.0.3: - resolution: {integrity: sha512-0apCbwc8xAaie6W7q6QyogfyRS2BMU816a8KwpnpRw9Qrc6Bws+l7J3LfCLMt2iL6Wi8CYb0B29AeIr2N4vHnw==} + /@ethereumjs/util/8.0.5: + resolution: {integrity: sha512-259rXKK3b3D8HRVdRmlOEi6QFvwxdt304hhrEAmpZhsj7ufXEOTIc9JRZPMnXatKjECokdLNBcDOFBeBSzAIaw==} engines: {node: '>=14'} dependencies: - '@ethereumjs/rlp': 4.0.0 - async: 3.2.4 - ethereum-cryptography: 1.1.2 + '@chainsafe/ssz': 0.9.4 + '@ethereumjs/rlp': 4.0.1 + ethereum-cryptography: 1.2.0 /@ethersproject/abi/5.7.0: resolution: {integrity: sha512-351ktp42TiRcYB3H1OP8yajPeAQstMW/yCFokj/AthP9bLHzQFPlOrxOcwYEDkUAICmOHljvN4K39OMTMUa9RA==} @@ -3381,14 +4278,14 @@ packages: slash: 3.0.0 dev: true - /@jest/console/29.3.1: - resolution: {integrity: sha512-IRE6GD47KwcqA09RIWrabKdHPiKDGgtAL31xDxbi/RjQMsr+lY+ppxmHwY0dUEV3qvvxZzoe5Hl0RXZJOjQNUg==} + /@jest/console/29.5.0: + resolution: {integrity: sha512-NEpkObxPwyw/XxZVLPmAGKE89IQRp4puc6IQRPru6JKd1M3fW9v1xM1AnzIJE65hbCkzQAdnL8P47e9hzhiYLQ==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: '@jest/types': 29.5.0 '@types/node': 18.11.18 chalk: 4.1.2 - jest-message-util: 29.3.1 + jest-message-util: 29.5.0 jest-util: 29.5.0 slash: 3.0.0 dev: true @@ -3412,7 +4309,7 @@ packages: chalk: 4.1.2 emittery: 0.8.1 exit: 0.1.2 - graceful-fs: 4.2.10 + graceful-fs: 4.2.11 jest-changed-files: 27.5.1 jest-config: 27.5.1 jest-haste-map: 27.5.1 @@ -3438,8 +4335,8 @@ packages: - utf-8-validate dev: true - /@jest/core/29.3.1: - resolution: {integrity: sha512-0ohVjjRex985w5MmO5L3u5GR1O30DexhBSpuwx2P+9ftyqHdJXnk7IUWiP80oHMvt7ubHCJHxV0a0vlKVuZirw==} + /@jest/core/29.5.0: + resolution: {integrity: sha512-28UzQc7ulUrOQw1IsN/kv1QES3q2kkbl/wGslyhAclqZ/8cMdB5M68BffkIdSJgKBUt50d3hbwJ92XESlE7LiQ==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} peerDependencies: node-notifier: ^8.0.1 || ^9.0.0 || ^10.0.0 @@ -3447,32 +4344,32 @@ packages: node-notifier: optional: true dependencies: - '@jest/console': 29.3.1 - '@jest/reporters': 29.3.1 - '@jest/test-result': 29.3.1 + '@jest/console': 29.5.0 + '@jest/reporters': 29.5.0 + '@jest/test-result': 29.5.0 '@jest/transform': 29.5.0 - '@jest/types': 29.3.1 + '@jest/types': 29.5.0 '@types/node': 18.11.18 ansi-escapes: 4.3.2 chalk: 4.1.2 - ci-info: 3.7.1 + ci-info: 3.8.0 exit: 0.1.2 - graceful-fs: 4.2.10 - jest-changed-files: 29.2.0 - jest-config: 29.3.1_@types+node@18.11.18 - jest-haste-map: 29.3.1 - jest-message-util: 29.3.1 - jest-regex-util: 29.2.0 - jest-resolve: 29.3.1 - jest-resolve-dependencies: 29.3.1 - jest-runner: 29.3.1 - jest-runtime: 29.3.1 - jest-snapshot: 29.3.1 - jest-util: 29.3.1 - jest-validate: 29.3.1 - jest-watcher: 29.3.1 + graceful-fs: 4.2.11 + jest-changed-files: 29.5.0 + jest-config: 29.5.0_@types+node@18.11.18 + jest-haste-map: 29.5.0 + jest-message-util: 29.5.0 + jest-regex-util: 29.4.3 + jest-resolve: 29.5.0 + jest-resolve-dependencies: 29.5.0 + jest-runner: 29.5.0 + jest-runtime: 29.5.0 + jest-snapshot: 29.5.0 + jest-util: 29.5.0 + jest-validate: 29.5.0 + jest-watcher: 29.5.0 micromatch: 4.0.5 - pretty-format: 29.3.1 + pretty-format: 29.5.0 slash: 3.0.0 strip-ansi: 6.0.1 transitivePeerDependencies: @@ -3480,8 +4377,8 @@ packages: - ts-node dev: true - /@jest/core/29.3.1_ts-node@10.9.1: - resolution: {integrity: sha512-0ohVjjRex985w5MmO5L3u5GR1O30DexhBSpuwx2P+9ftyqHdJXnk7IUWiP80oHMvt7ubHCJHxV0a0vlKVuZirw==} + /@jest/core/29.5.0_ts-node@10.9.1: + resolution: {integrity: sha512-28UzQc7ulUrOQw1IsN/kv1QES3q2kkbl/wGslyhAclqZ/8cMdB5M68BffkIdSJgKBUt50d3hbwJ92XESlE7LiQ==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} peerDependencies: node-notifier: ^8.0.1 || ^9.0.0 || ^10.0.0 @@ -3489,32 +4386,32 @@ packages: node-notifier: optional: true dependencies: - '@jest/console': 29.3.1 - '@jest/reporters': 29.3.1 - '@jest/test-result': 29.3.1 + '@jest/console': 29.5.0 + '@jest/reporters': 29.5.0 + '@jest/test-result': 29.5.0 '@jest/transform': 29.5.0 - '@jest/types': 29.3.1 + '@jest/types': 29.5.0 '@types/node': 18.11.18 ansi-escapes: 4.3.2 chalk: 4.1.2 - ci-info: 3.7.1 + ci-info: 3.8.0 exit: 0.1.2 - graceful-fs: 4.2.10 - jest-changed-files: 29.2.0 - jest-config: 29.3.1_zfha7dvnw4nti6zkbsmhmn6xo4 - jest-haste-map: 29.3.1 - jest-message-util: 29.3.1 - jest-regex-util: 29.2.0 - jest-resolve: 29.3.1 - jest-resolve-dependencies: 29.3.1 - jest-runner: 29.3.1 - jest-runtime: 29.3.1 - jest-snapshot: 29.3.1 - jest-util: 29.3.1 - jest-validate: 29.3.1 - jest-watcher: 29.3.1 + graceful-fs: 4.2.11 + jest-changed-files: 29.5.0 + jest-config: 29.5.0_zfha7dvnw4nti6zkbsmhmn6xo4 + jest-haste-map: 29.5.0 + jest-message-util: 29.5.0 + jest-regex-util: 29.4.3 + jest-resolve: 29.5.0 + jest-resolve-dependencies: 29.5.0 + jest-runner: 29.5.0 + jest-runtime: 29.5.0 + jest-snapshot: 29.5.0 + jest-util: 29.5.0 + jest-validate: 29.5.0 + jest-watcher: 29.5.0 micromatch: 4.0.5 - pretty-format: 29.3.1 + pretty-format: 29.5.0 slash: 3.0.0 strip-ansi: 6.0.1 transitivePeerDependencies: @@ -3532,39 +4429,29 @@ packages: jest-mock: 27.5.1 dev: true - /@jest/environment/29.3.1: - resolution: {integrity: sha512-pMmvfOPmoa1c1QpfFW0nXYtNLpofqo4BrCIk6f2kW4JFeNlHV2t3vd+3iDLf31e2ot2Mec0uqZfmI+U0K2CFag==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - dependencies: - '@jest/fake-timers': 29.4.3 - '@jest/types': 29.4.3 - '@types/node': 18.11.18 - jest-mock: 29.4.3 - dev: true - - /@jest/environment/29.4.3: - resolution: {integrity: sha512-dq5S6408IxIa+lr54zeqce+QgI+CJT4nmmA+1yzFgtcsGK8c/EyiUb9XQOgz3BMKrRDfKseeOaxj2eO8LlD3lA==} + /@jest/environment/29.5.0: + resolution: {integrity: sha512-5FXw2+wD29YU1d4I2htpRX7jYnAyTRjP2CsXQdo9SAM8g3ifxWPSV0HnClSn71xwctr0U3oZIIH+dtbfmnbXVQ==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: - '@jest/fake-timers': 29.4.3 + '@jest/fake-timers': 29.5.0 '@jest/types': 29.5.0 '@types/node': 18.11.18 - jest-mock: 29.4.3 + jest-mock: 29.5.0 dev: true - /@jest/expect-utils/29.3.1: - resolution: {integrity: sha512-wlrznINZI5sMjwvUoLVk617ll/UYfGIZNxmbU+Pa7wmkL4vYzhV9R2pwVqUh4NWWuLQWkI8+8mOkxs//prKQ3g==} + /@jest/expect-utils/29.5.0: + resolution: {integrity: sha512-fmKzsidoXQT2KwnrwE0SQq3uj8Z763vzR8LnLBwC2qYWEFpjX8daRsk6rHUM1QvNlEW/UJXNXm59ztmJJWs2Mg==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: - jest-get-type: 29.2.0 + jest-get-type: 29.4.3 dev: true - /@jest/expect/29.3.1: - resolution: {integrity: sha512-QivM7GlSHSsIAWzgfyP8dgeExPRZ9BIe2LsdPyEhCGkZkoyA+kGsoIzbKAfZCvvRzfZioKwPtCZIt5SaoxYCvg==} + /@jest/expect/29.5.0: + resolution: {integrity: sha512-PueDR2HGihN3ciUNGr4uelropW7rqUfTiOn+8u0leg/42UhblPxHkfoh0Ruu3I9Y1962P3u2DY4+h7GVTSVU6g==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: - expect: 29.3.1 - jest-snapshot: 29.3.1 + expect: 29.5.0 + jest-snapshot: 29.5.0 transitivePeerDependencies: - supports-color dev: true @@ -3581,27 +4468,15 @@ packages: jest-util: 27.5.1 dev: true - /@jest/fake-timers/29.3.1: - resolution: {integrity: sha512-iHTL/XpnDlFki9Tq0Q1GGuVeQ8BHZGIYsvCO5eN/O/oJaRzofG9Xndd9HuSDBI/0ZS79pg0iwn07OMTQ7ngF2A==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - dependencies: - '@jest/types': 29.5.0 - '@sinonjs/fake-timers': 9.1.2 - '@types/node': 18.11.18 - jest-message-util: 29.4.3 - jest-mock: 29.4.3 - jest-util: 29.5.0 - dev: true - - /@jest/fake-timers/29.4.3: - resolution: {integrity: sha512-4Hote2MGcCTWSD2gwl0dwbCpBRHhE6olYEuTj8FMowdg3oQWNKr2YuxenPQYZ7+PfqPY1k98wKDU4Z+Hvd4Tiw==} + /@jest/fake-timers/29.5.0: + resolution: {integrity: sha512-9ARvuAAQcBwDAqOnglWq2zwNIRUDtk/SCkp/ToGEhFv5r86K21l+VEs0qNTaXtyiY0lEePl3kylijSYJQqdbDg==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: '@jest/types': 29.5.0 '@sinonjs/fake-timers': 10.0.2 '@types/node': 18.11.18 - jest-message-util: 29.4.3 - jest-mock: 29.4.3 + jest-message-util: 29.5.0 + jest-mock: 29.5.0 jest-util: 29.5.0 dev: true @@ -3614,14 +4489,14 @@ packages: expect: 27.5.1 dev: true - /@jest/globals/29.3.1: - resolution: {integrity: sha512-cTicd134vOcwO59OPaB6AmdHQMCtWOe+/DitpTZVxWgMJ+YvXL1HNAmPyiGbSHmF/mXVBkvlm8YYtQhyHPnV6Q==} + /@jest/globals/29.5.0: + resolution: {integrity: sha512-S02y0qMWGihdzNbUiqSAiKSpSozSuHX5UYc7QbnHP+D9Lyw8DgGGCinrN9uSuHPeKgSSzvPom2q1nAtBvUsvPQ==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: - '@jest/environment': 29.3.1 - '@jest/expect': 29.3.1 - '@jest/types': 29.3.1 - jest-mock: 29.3.1 + '@jest/environment': 29.5.0 + '@jest/expect': 29.5.0 + '@jest/types': 29.5.0 + jest-mock: 29.5.0 transitivePeerDependencies: - supports-color dev: true @@ -3645,7 +4520,7 @@ packages: collect-v8-coverage: 1.0.1 exit: 0.1.2 glob: 7.2.3 - graceful-fs: 4.2.10 + graceful-fs: 4.2.11 istanbul-lib-coverage: 3.2.0 istanbul-lib-instrument: 5.2.1 istanbul-lib-report: 3.0.0 @@ -3664,8 +4539,8 @@ packages: - supports-color dev: true - /@jest/reporters/29.3.1: - resolution: {integrity: sha512-GhBu3YFuDrcAYW/UESz1JphEAbvUjaY2vShRZRoRY1mxpCMB3yGSJ4j9n0GxVlEOdCf7qjvUfBCrTUUqhVfbRA==} + /@jest/reporters/29.5.0: + resolution: {integrity: sha512-D05STXqj/M8bP9hQNSICtPqz97u7ffGzZu+9XLucXhkOFBqKcXe04JLZOgIekOxdb73MAoBUFnqvf7MCpKk5OA==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} peerDependencies: node-notifier: ^8.0.1 || ^9.0.0 || ^10.0.0 @@ -3674,8 +4549,8 @@ packages: optional: true dependencies: '@bcoe/v8-coverage': 0.2.3 - '@jest/console': 29.3.1 - '@jest/test-result': 29.3.1 + '@jest/console': 29.5.0 + '@jest/test-result': 29.5.0 '@jest/transform': 29.5.0 '@jest/types': 29.5.0 '@jridgewell/trace-mapping': 0.3.17 @@ -3684,19 +4559,19 @@ packages: collect-v8-coverage: 1.0.1 exit: 0.1.2 glob: 7.2.3 - graceful-fs: 4.2.10 + graceful-fs: 4.2.11 istanbul-lib-coverage: 3.2.0 istanbul-lib-instrument: 5.2.1 istanbul-lib-report: 3.0.0 istanbul-lib-source-maps: 4.0.1 istanbul-reports: 3.1.5 - jest-message-util: 29.3.1 + jest-message-util: 29.5.0 jest-util: 29.5.0 jest-worker: 29.5.0 slash: 3.0.0 string-length: 4.0.2 strip-ansi: 6.0.1 - v8-to-istanbul: 9.0.1 + v8-to-istanbul: 9.1.0 transitivePeerDependencies: - supports-color dev: true @@ -3708,13 +4583,6 @@ packages: '@sinclair/typebox': 0.24.51 dev: true - /@jest/schemas/29.0.0: - resolution: {integrity: sha512-3Ab5HgYIIAnS0HjqJHQYZS+zXc4tUmTmBH3z83ajI6afXp8X3ZtdLX+nXx+I7LNkJD7uN9LAVhgnjDgZa2z0kA==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - dependencies: - '@sinclair/typebox': 0.24.51 - dev: true - /@jest/schemas/29.4.3: resolution: {integrity: sha512-VLYKXQmtmuEz6IxJsrZwzG9NvtkQsWNnWMsKxqWNu3+CnfzJQhp0WDDKWLVV9hLKr0l3SLLFRqcYHjhtyuDVxg==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} @@ -3727,17 +4595,17 @@ packages: engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} dependencies: callsites: 3.1.0 - graceful-fs: 4.2.10 + graceful-fs: 4.2.11 source-map: 0.6.1 dev: true - /@jest/source-map/29.2.0: - resolution: {integrity: sha512-1NX9/7zzI0nqa6+kgpSdKPK+WU1p+SJk3TloWZf5MzPbxri9UEeXX5bWZAPCzbQcyuAzubcdUHA7hcNznmRqWQ==} + /@jest/source-map/29.4.3: + resolution: {integrity: sha512-qyt/mb6rLyd9j1jUts4EQncvS6Yy3PM9HghnNv86QBlV+zdL2inCdK1tuVlL+J+lpiw2BI67qXOrX3UurBqQ1w==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: '@jridgewell/trace-mapping': 0.3.17 callsites: 3.1.0 - graceful-fs: 4.2.10 + graceful-fs: 4.2.11 dev: true /@jest/test-result/27.5.1: @@ -3760,12 +4628,12 @@ packages: collect-v8-coverage: 1.0.1 dev: true - /@jest/test-result/29.3.1: - resolution: {integrity: sha512-qeLa6qc0ddB0kuOZyZIhfN5q0e2htngokyTWsGriedsDhItisW7SDYZ7ceOe57Ii03sL988/03wAcBh3TChMGw==} + /@jest/test-result/29.5.0: + resolution: {integrity: sha512-fGl4rfitnbfLsrfx1uUpDEESS7zM8JdgZgOCQuxQvL1Sn/I6ijeAVQWGfXI9zb1i9Mzo495cIpVZhA0yr60PkQ==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: - '@jest/console': 29.3.1 - '@jest/types': 29.4.3 + '@jest/console': 29.5.0 + '@jest/types': 29.5.0 '@types/istanbul-lib-coverage': 2.0.4 collect-v8-coverage: 1.0.1 dev: true @@ -3775,20 +4643,20 @@ packages: engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} dependencies: '@jest/test-result': 27.5.1 - graceful-fs: 4.2.10 + graceful-fs: 4.2.11 jest-haste-map: 27.5.1 jest-runtime: 27.5.1 transitivePeerDependencies: - supports-color dev: true - /@jest/test-sequencer/29.3.1: - resolution: {integrity: sha512-IqYvLbieTv20ArgKoAMyhLHNrVHJfzO6ARZAbQRlY4UGWfdDnLlZEF0BvKOMd77uIiIjSZRwq3Jb3Fa3I8+2UA==} + /@jest/test-sequencer/29.5.0: + resolution: {integrity: sha512-yPafQEcKjkSfDXyvtgiV4pevSeyuA6MQr6ZIdVkWJly9vkqjnFfcfhRQqpD5whjoU8EORki752xQmjaqoFjzMQ==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: - '@jest/test-result': 29.3.1 - graceful-fs: 4.2.10 - jest-haste-map: 29.3.1 + '@jest/test-result': 29.5.0 + graceful-fs: 4.2.11 + jest-haste-map: 29.5.0 slash: 3.0.0 dev: true @@ -3796,13 +4664,13 @@ packages: resolution: {integrity: sha512-ipON6WtYgl/1329g5AIJVbUuEh0wZVbdpGwC99Jw4LwuoBNS95MVphU6zOeD9pDkon+LLbFL7lOQRapbB8SCHw==} engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} dependencies: - '@babel/core': 7.20.12 + '@babel/core': 7.21.3 '@jest/types': 27.5.1 babel-plugin-istanbul: 6.1.1 chalk: 4.1.2 convert-source-map: 1.9.0 fast-json-stable-stringify: 2.1.0 - graceful-fs: 4.2.10 + graceful-fs: 4.2.11 jest-haste-map: 27.5.1 jest-regex-util: 27.5.1 jest-util: 27.5.1 @@ -3819,14 +4687,14 @@ packages: resolution: {integrity: sha512-8vbeZWqLJOvHaDfeMuoHITGKSz5qWc9u04lnWrQE3VyuSw604PzQM824ZeX9XSjUCeDiE3GuxZe5UKa8J61NQw==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: - '@babel/core': 7.20.12 + '@babel/core': 7.21.3 '@jest/types': 29.5.0 '@jridgewell/trace-mapping': 0.3.17 babel-plugin-istanbul: 6.1.1 chalk: 4.1.2 convert-source-map: 2.0.0 fast-json-stable-stringify: 2.1.0 - graceful-fs: 4.2.10 + graceful-fs: 4.2.11 jest-haste-map: 29.5.0 jest-regex-util: 29.4.3 jest-util: 29.5.0 @@ -3857,31 +4725,7 @@ packages: '@types/istanbul-lib-coverage': 2.0.4 '@types/istanbul-reports': 3.0.1 '@types/node': 18.11.18 - '@types/yargs': 17.0.19 - chalk: 4.1.2 - dev: true - - /@jest/types/29.3.1: - resolution: {integrity: sha512-d0S0jmmTpjnhCmNpApgX3jrUZgZ22ivKJRvL2lli5hpCRoNnp1f85r2/wpKfXuYu8E7Jjh1hGfhPyup1NM5AmA==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - dependencies: - '@jest/schemas': 29.0.0 - '@types/istanbul-lib-coverage': 2.0.4 - '@types/istanbul-reports': 3.0.1 - '@types/node': 18.11.18 - '@types/yargs': 17.0.19 - chalk: 4.1.2 - dev: true - - /@jest/types/29.4.3: - resolution: {integrity: sha512-bPYfw8V65v17m2Od1cv44FH+SiKW7w2Xu7trhcdTLUmSv85rfKsP+qXSjO4KGJr4dtPSzl/gvslZBXctf1qGEA==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - dependencies: - '@jest/schemas': 29.4.3 - '@types/istanbul-lib-coverage': 2.0.4 - '@types/istanbul-reports': 3.0.1 - '@types/node': 18.11.18 - '@types/yargs': 17.0.19 + '@types/yargs': 17.0.22 chalk: 4.1.2 dev: true @@ -3893,7 +4737,7 @@ packages: '@types/istanbul-lib-coverage': 2.0.4 '@types/istanbul-reports': 3.0.1 '@types/node': 18.11.18 - '@types/yargs': 17.0.19 + '@types/yargs': 17.0.22 chalk: 4.1.2 dev: true @@ -3949,6 +4793,57 @@ packages: '@jridgewell/sourcemap-codec': 1.4.14 dev: true + /@keyv/compress-brotli/1.1.3: + resolution: {integrity: sha512-6QdtGH/iHKj3GGN4a+m/EfhmfVeeVq2Z9yOlDwaHh18Pe9UncFCIJNpbahVdgxn2gedYjKOQR7s06SyPF2Y4Nw==} + engines: {node: '>= 12'} + dependencies: + compress-brotli: 1.3.8 + dev: true + + /@keyv/compress-gzip/1.2.3: + resolution: {integrity: sha512-nwPlHX18bWXNKbmIi0nGfwJlXvqusISbX9IpQssY0Uj/olddhz4s0K8hKJAFr13iEsD8PhJA5stnKB2UNwBasQ==} + engines: {node: '>= 12'} + dependencies: + '@types/pako': 2.0.0 + json-buffer: 3.0.1 + pako: 2.1.0 + dev: true + + /@keyv/mongo/2.1.8: + resolution: {integrity: sha512-IOFKS9Y10c42NCaoD/6OKmqz7FMCm/VbMbrip7ma8tBvdWcPhDkkPV3ZpLgGsGw39RePzzKO6FQ89xs0+BFCKg==} + dependencies: + mongodb: 4.14.0 + pify: 5.0.0 + transitivePeerDependencies: + - aws-crt + dev: true + + /@keyv/sqlite/3.6.5: + resolution: {integrity: sha512-PZPsXcZYHPKUCX1DO7e6dTMGmk5aX7uW8QFzEavOPRMVloIp2QMv+Glt162pu+Dw5NunJinCbvD2DvYwinyNZw==} + engines: {node: '>= 12'} + dependencies: + pify: 5.0.0 + sqlite3: 5.1.6 + transitivePeerDependencies: + - bluebird + - encoding + - supports-color + dev: true + + /@keyv/test-suite/1.9.1: + resolution: {integrity: sha512-U5sB6sLVAF+fwLAKgQtsRVxEv3iTgPSEWghMqGhdiWutXZg8RH0CFuiKGgFxIMXAEnox1ZWzMDmVLuWvg4volA==} + dependencies: + bignumber.js: 9.1.1 + delay: 5.0.0 + json-bigint: 1.0.0 + sqlite3: 5.1.4 + timekeeper: 2.2.0 + transitivePeerDependencies: + - bluebird + - encoding + - supports-color + dev: true + /@leichtgewicht/ip-codec/2.0.4: resolution: {integrity: sha512-Hcv+nVC0kZnQ3tD9GVu5xSMR4VVYOteQIr/hwFPVEvPdlXqgGEuRjiheChHgdM+JyqdgNcmzZOX/tnl0JOiI7A==} dev: true @@ -4213,7 +5108,7 @@ packages: dependencies: '@lerna/child-process': 6.4.1 '@octokit/plugin-enterprise-rest': 6.0.1 - '@octokit/rest': 19.0.5 + '@octokit/rest': 19.0.7 git-url-parse: 13.1.0 npmlog: 6.0.2 transitivePeerDependencies: @@ -4224,7 +5119,7 @@ packages: resolution: {integrity: sha512-AdLG4d+jbUvv0jQyygQUTNaTCNSMDxioJso6aAjQ/vkwyy3fBJ6FYzX74J4adSfOxC2MQZITFyuG+c9ggp7pyQ==} engines: {node: ^14.15.0 || >=16.0.0} dependencies: - node-fetch: 2.6.7 + node-fetch: 2.6.9 npmlog: 6.0.2 transitivePeerDependencies: - encoding @@ -4472,7 +5367,7 @@ packages: npmlog: 6.0.2 dev: true - /@lerna/publish/6.4.1_nx@15.6.3+typescript@4.9.4: + /@lerna/publish/6.4.1_nx@15.8.7+typescript@4.9.5: resolution: {integrity: sha512-/D/AECpw2VNMa1Nh4g29ddYKRIqygEV1ftV8PYXVlHpqWN7VaKrcbRU6pn0ldgpFlMyPtESfv1zS32F5CQ944w==} engines: {node: ^14.15.0 || >=16.0.0} dependencies: @@ -4494,7 +5389,7 @@ packages: '@lerna/run-lifecycle': 6.4.1 '@lerna/run-topologically': 6.4.1 '@lerna/validation-error': 6.4.1 - '@lerna/version': 6.4.1_nx@15.6.3+typescript@4.9.4 + '@lerna/version': 6.4.1_nx@15.8.7+typescript@4.9.5 fs-extra: 9.1.0 libnpmaccess: 6.0.4 npm-package-arg: 8.1.1 @@ -4579,7 +5474,7 @@ packages: '@lerna/timer': 6.4.1 '@lerna/validation-error': 6.4.1 fs-extra: 9.1.0 - nx: 15.6.3 + nx: 15.8.7 p-map: 4.0.0 transitivePeerDependencies: - '@swc-node/register' @@ -4612,7 +5507,7 @@ packages: /@lerna/temp-write/6.4.1: resolution: {integrity: sha512-7uiGFVoTyos5xXbVQg4bG18qVEn9dFmboXCcHbMj5mc/+/QmU9QeNz/Cq36O5TY6gBbLnyj3lfL5PhzERWKMFg==} dependencies: - graceful-fs: 4.2.10 + graceful-fs: 4.2.11 is-stream: 2.0.1 make-dir: 3.1.0 temp-dir: 1.0.0 @@ -4631,7 +5526,7 @@ packages: npmlog: 6.0.2 dev: true - /@lerna/version/6.4.1_nx@15.6.3+typescript@4.9.4: + /@lerna/version/6.4.1_nx@15.8.7+typescript@4.9.5: resolution: {integrity: sha512-1/krPq0PtEqDXtaaZsVuKev9pXJCkNC1vOo2qCcn6PBkODw/QTAvGcUi0I+BM2c//pdxge9/gfmbDo1lC8RtAQ==} engines: {node: ^14.15.0 || >=16.0.0} dependencies: @@ -4649,7 +5544,7 @@ packages: '@lerna/run-topologically': 6.4.1 '@lerna/temp-write': 6.4.1 '@lerna/validation-error': 6.4.1 - '@nrwl/devkit': 15.6.3_nx@15.6.3+typescript@4.9.4 + '@nrwl/devkit': 15.8.7_nx@15.8.7+typescript@4.9.5 chalk: 4.1.2 dedent: 0.7.0 load-json-file: 6.2.0 @@ -4685,7 +5580,7 @@ packages: detect-libc: 2.0.1 https-proxy-agent: 5.0.1 make-dir: 3.1.0 - node-fetch: 2.6.7 + node-fetch: 2.6.9 nopt: 5.0.0 npmlog: 5.0.1 rimraf: 3.0.2 @@ -4699,9 +5594,9 @@ packages: resolution: {integrity: sha512-RU6fG/H6/UlBol221uBkq5C7w3TwLK611nEZliO2u+kO0vHKGBXnIPlhI0tzKUigjhUeOd9mhCNbNvhh0LKt9Q==} engines: {node: '>=14.0.0'} dependencies: - '@ethereumjs/util': 8.0.3 + '@ethereumjs/util': 8.0.5 bn.js: 4.12.0 - ethereum-cryptography: 1.1.2 + ethereum-cryptography: 1.2.0 ethjs-util: 0.1.6 tweetnacl: 1.0.3 tweetnacl-util: 0.15.1 @@ -4768,16 +5663,20 @@ packages: resolution: {integrity: sha512-Rk4SkJFaXZiznFyC/t77Q0NKS4FL7TLJJsVG2V2oiEq3kJVeTdxysEe/yRWSpnWMe808XRDJ+VFh5pt/FN5plw==} dev: false - /@noble/hashes/1.1.2: - resolution: {integrity: sha512-KYRCASVTv6aeUi1tsF8/vpyR7zpfs3FUzy2Jqm+MU+LmUKhQ0y2FpfwqkCcxSg2ua4GALJd8k2R76WxwZGbQpA==} + /@noble/ed25519/1.7.3: + resolution: {integrity: sha512-iR8GBkDt0Q3GyaVcIu7mSsVIqnFbkbRzGLWlvhwunacoLwt4J3swfKhfaM6rN6WY+TBGoYT1GtT1mIh2/jGbRQ==} + dev: false - /@noble/secp256k1/1.6.3: - resolution: {integrity: sha512-T04e4iTurVy7I8Sw4+c5OSN9/RkPlo1uKxAomtxQNLq8j1uPAqnsqG1bqvY3Jv7c13gyr6dui0zmh/I3+f/JaQ==} + /@noble/hashes/1.2.0: + resolution: {integrity: sha512-FZfhjEDbT5GRswV3C6uvLPHMiVD6lQBmpoX5+eSiPaMTXte/IKqI5dykDxzZB/WBeK/CDuQRBWarPdi3FNY2zQ==} /@noble/secp256k1/1.7.0: resolution: {integrity: sha512-kbacwGSsH/CTout0ZnZWxnW1B+jH/7r/WAAKLBtrRJ/+CUH7lgmQzl3GTrQua3SGKWNSDsS6lmjnDpIJ5Dxyaw==} dev: false + /@noble/secp256k1/1.7.1: + resolution: {integrity: sha512-hOUk6AyBFmqVrv7k5WAw/LpszxVbj9gGN4JRkIX52fdFAj1UA61KXmZDvqVEm+pOyec3+fIeZB02LYa/pWOArw==} + /@nodelib/fs.scandir/2.1.5: resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==} engines: {node: '>= 8'} @@ -4859,7 +5758,7 @@ packages: engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0} dependencies: '@npmcli/promise-spawn': 3.0.0 - lru-cache: 7.14.1 + lru-cache: 7.18.3 mkdirp: 1.0.4 npm-pick-manifest: 7.0.2 proc-log: 2.0.1 @@ -4886,7 +5785,7 @@ packages: dependencies: '@npmcli/name-from-folder': 1.0.1 glob: 8.1.0 - minimatch: 5.1.2 + minimatch: 5.1.6 read-package-json-fast: 2.0.3 dev: true @@ -4957,160 +5856,242 @@ packages: - supports-color dev: true - /@nrwl/cli/15.6.3: - resolution: {integrity: sha512-K4E0spofThZXMnhA6R8hkUTdfqmwSnUE2+DlD5Y3jqsvKTAgwF5U41IFkEouFZCf+dWjy0RA20bWoX48EVFtmQ==} - dependencies: - nx: 15.6.3 - transitivePeerDependencies: - - '@swc-node/register' - - '@swc/core' - - debug + /@nrwl/cli/15.8.7: + resolution: {integrity: sha512-G1NEy4jGuZJ/7KjhLQNOe11XmoTgwJS82FW8Tbo4iceq2ItSEbe7bkA8xTSK/AzUixZIMimztb9Oyxw/n1ajGQ==} + dependencies: + nx: 15.8.7 + transitivePeerDependencies: + - '@swc-node/register' + - '@swc/core' + - debug + dev: true + + /@nrwl/devkit/15.8.7_nx@15.8.7+typescript@4.9.5: + resolution: {integrity: sha512-A99nZrA5KN9wRn2uYX2vKByA+t2XEGoZBR5TU/bpXbPYrh92qAHkIJ8ke3ImGQOlzk4iIaZ5Me0k7k1p9Zx4wA==} + peerDependencies: + nx: '>= 14.1 <= 16' + dependencies: + '@phenomnomnominal/tsquery': 4.1.1_typescript@4.9.5 + ejs: 3.1.9 + ignore: 5.2.4 + nx: 15.8.7 + semver: 7.3.4 + tmp: 0.2.1 + tslib: 2.5.0 + transitivePeerDependencies: + - typescript + dev: true + + /@nrwl/nx-darwin-arm64/15.8.7: + resolution: {integrity: sha512-+cu8J337gRxUHjz2TGwS/2Oh3yw8d3/T6SoBfvee1DY72VQaeYd8UTz0doOhDtmc/zowvRu7ZVsW0ytNB0jIXQ==} + engines: {node: '>= 10'} + cpu: [arm64] + os: [darwin] + requiresBuild: true + dev: true + optional: true + + /@nrwl/nx-darwin-x64/15.8.7: + resolution: {integrity: sha512-VqHJEP0wgFu1MU0Bo1vKZ5/s7ThRfYkX8SyGUxjVTzR02CrsjC4rNxFoKD8Cc4YkUn44U/F78toGf+i2gRcjSQ==} + engines: {node: '>= 10'} + cpu: [x64] + os: [darwin] + requiresBuild: true + dev: true + optional: true + + /@nrwl/nx-linux-arm-gnueabihf/15.8.7: + resolution: {integrity: sha512-4F/8awwqPTt7zKQolvjBNrcR1wYicPjGchLOdaqnfMxn/iRRUdh0hD11mEP5zHNv9gZs/nOIvhdBUErNjFkplQ==} + engines: {node: '>= 10'} + cpu: [arm] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /@nrwl/nx-linux-arm64-gnu/15.8.7: + resolution: {integrity: sha512-3ZTSZx02Vv5emQOpaDROIcLtQucoXAe73zGKYDTXB95mxbOPSjjQJ8Rtx+BeqWq9JQoZZyRcD0qnBkTTy1aLRg==} + engines: {node: '>= 10'} + cpu: [arm64] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /@nrwl/nx-linux-arm64-musl/15.8.7: + resolution: {integrity: sha512-SZxTomiHxAh8El+swbmGSGcaA0vGbHb/rmhFAixo19INu1wBJfD6hjkVJt17h6PyEO7BIYPOpRia6Poxnyv8hA==} + engines: {node: '>= 10'} + cpu: [arm64] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /@nrwl/nx-linux-x64-gnu/15.8.7: + resolution: {integrity: sha512-BlNC6Zz1/x6CFbBFTVrgRGMOPqb7zWh5cOjBVNpoBXYTEth1UXb2r1U+gpuQ4xdUqG+uXoWhy6BHJjqBIjzLJA==} + engines: {node: '>= 10'} + cpu: [x64] + os: [linux] + requiresBuild: true dev: true + optional: true - /@nrwl/devkit/15.6.3_nx@15.6.3+typescript@4.9.4: - resolution: {integrity: sha512-/JDvdzNxUM+C1PCZPCrvmFx+OfywqZdOq1GS9QR8C0VctTLG4D/SGSFD88O1SAdcbH/f1mMiBGfEYZYd23fghQ==} - peerDependencies: - nx: '>= 14 <= 16' - dependencies: - '@phenomnomnominal/tsquery': 4.1.1_typescript@4.9.4 - ejs: 3.1.8 - ignore: 5.2.4 - nx: 15.6.3 - semver: 7.3.4 - tslib: 2.4.1 - transitivePeerDependencies: - - typescript + /@nrwl/nx-linux-x64-musl/15.8.7: + resolution: {integrity: sha512-FNYX/IKy8SUbw6bJpvwZrup2YQBYmSJwP6Rw76Vf7c32XHk7uA6AjiPWMIrZCSndXcry8fnwXvR+J2Dnyo82nQ==} + engines: {node: '>= 10'} + cpu: [x64] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /@nrwl/nx-win32-arm64-msvc/15.8.7: + resolution: {integrity: sha512-sZALEzazjPAeLlw6IbFWsMidCZ4ZM3GKWZZ6rsAqG2y7I9t4nlUPH/y/Isl9MuLBvrBCBXbVnD20wh6EhtuwTw==} + engines: {node: '>= 10'} + cpu: [arm64] + os: [win32] + requiresBuild: true dev: true + optional: true + + /@nrwl/nx-win32-x64-msvc/15.8.7: + resolution: {integrity: sha512-VMdDptI2rqkLQRCvertF29QeA/V/MnFtHbsmVzMCEv5EUfrkHbA5LLxV66LLfngmkDT1FHktffztlsMpbxvhRw==} + engines: {node: '>= 10'} + cpu: [x64] + os: [win32] + requiresBuild: true + dev: true + optional: true - /@nrwl/tao/15.6.3: - resolution: {integrity: sha512-bDZbPIbU5Mf2BvX0q8GjPxrm1WkYyfW+gp7mLuuJth2sEpZiCr47mSwuGko/y4CKXvIX46VQcAS0pKQMKugXsg==} + /@nrwl/tao/15.8.7: + resolution: {integrity: sha512-wA7QIEh0VwWcyo32Y/xSCTwnQTGcZupe933nResXv8mAb36W8MoR5SXRx+Wdd8fJ1eWlm2tuotIrslhN+lYx/Q==} hasBin: true dependencies: - nx: 15.6.3 + nx: 15.8.7 transitivePeerDependencies: - '@swc-node/register' - '@swc/core' - debug dev: true - /@octokit/auth-token/3.0.2: - resolution: {integrity: sha512-pq7CwIMV1kmzkFTimdwjAINCXKTajZErLB4wMLYapR2nuB/Jpr66+05wOTZMSCBXP6n4DdDWT2W19Bm17vU69Q==} + /@octokit/auth-token/3.0.3: + resolution: {integrity: sha512-/aFM2M4HVDBT/jjDBa84sJniv1t9Gm/rLkalaz9htOm+L+8JMj1k9w0CkUdcxNyNxZPlTxKPVko+m1VlM58ZVA==} engines: {node: '>= 14'} dependencies: - '@octokit/types': 8.0.0 + '@octokit/types': 9.0.0 dev: true - /@octokit/core/4.1.0: - resolution: {integrity: sha512-Czz/59VefU+kKDy+ZfDwtOIYIkFjExOKf+HA92aiTZJ6EfWpFzYQWw0l54ji8bVmyhc+mGaLUbSUmXazG7z5OQ==} + /@octokit/core/4.2.0: + resolution: {integrity: sha512-AgvDRUg3COpR82P7PBdGZF/NNqGmtMq2NiPqeSsDIeCfYFOZ9gddqWNQHnFdEUf+YwOj4aZYmJnlPp7OXmDIDg==} engines: {node: '>= 14'} dependencies: - '@octokit/auth-token': 3.0.2 - '@octokit/graphql': 5.0.4 - '@octokit/request': 6.2.2 - '@octokit/request-error': 3.0.2 - '@octokit/types': 8.0.0 + '@octokit/auth-token': 3.0.3 + '@octokit/graphql': 5.0.5 + '@octokit/request': 6.2.3 + '@octokit/request-error': 3.0.3 + '@octokit/types': 9.0.0 before-after-hook: 2.2.3 universal-user-agent: 6.0.0 transitivePeerDependencies: - encoding dev: true - /@octokit/endpoint/7.0.3: - resolution: {integrity: sha512-57gRlb28bwTsdNXq+O3JTQ7ERmBTuik9+LelgcLIVfYwf235VHbN9QNo4kXExtp/h8T423cR5iJThKtFYxC7Lw==} + /@octokit/endpoint/7.0.5: + resolution: {integrity: sha512-LG4o4HMY1Xoaec87IqQ41TQ+glvIeTKqfjkCEmt5AIwDZJwQeVZFIEYXrYY6yLwK+pAScb9Gj4q+Nz2qSw1roA==} engines: {node: '>= 14'} dependencies: - '@octokit/types': 8.0.0 + '@octokit/types': 9.0.0 is-plain-object: 5.0.0 universal-user-agent: 6.0.0 dev: true - /@octokit/graphql/5.0.4: - resolution: {integrity: sha512-amO1M5QUQgYQo09aStR/XO7KAl13xpigcy/kI8/N1PnZYSS69fgte+xA4+c2DISKqUZfsh0wwjc2FaCt99L41A==} + /@octokit/graphql/5.0.5: + resolution: {integrity: sha512-Qwfvh3xdqKtIznjX9lz2D458r7dJPP8l6r4GQkIdWQouZwHQK0mVT88uwiU2bdTU2OtT1uOlKpRciUWldpG0yQ==} engines: {node: '>= 14'} dependencies: - '@octokit/request': 6.2.2 - '@octokit/types': 8.0.0 + '@octokit/request': 6.2.3 + '@octokit/types': 9.0.0 universal-user-agent: 6.0.0 transitivePeerDependencies: - encoding dev: true - /@octokit/openapi-types/14.0.0: - resolution: {integrity: sha512-HNWisMYlR8VCnNurDU6os2ikx0s0VyEjDYHNS/h4cgb8DeOxQ0n72HyinUtdDVxJhFy3FWLGl0DJhfEWk3P5Iw==} + /@octokit/openapi-types/16.0.0: + resolution: {integrity: sha512-JbFWOqTJVLHZSUUoF4FzAZKYtqdxWu9Z5m2QQnOyEa04fOFljvyh7D3GYKbfuaSWisqehImiVIMG4eyJeP5VEA==} dev: true /@octokit/plugin-enterprise-rest/6.0.1: resolution: {integrity: sha512-93uGjlhUD+iNg1iWhUENAtJata6w5nE+V4urXOAlIXdco6xNZtUSfYY8dzp3Udy74aqO/B5UZL80x/YMa5PKRw==} dev: true - /@octokit/plugin-paginate-rest/5.0.1_@octokit+core@4.1.0: - resolution: {integrity: sha512-7A+rEkS70pH36Z6JivSlR7Zqepz3KVucEFVDnSrgHXzG7WLAzYwcHZbKdfTXHwuTHbkT1vKvz7dHl1+HNf6Qyw==} + /@octokit/plugin-paginate-rest/6.0.0_@octokit+core@4.2.0: + resolution: {integrity: sha512-Sq5VU1PfT6/JyuXPyt04KZNVsFOSBaYOAq2QRZUwzVlI10KFvcbUo8lR258AAQL1Et60b0WuVik+zOWKLuDZxw==} engines: {node: '>= 14'} peerDependencies: '@octokit/core': '>=4' dependencies: - '@octokit/core': 4.1.0 - '@octokit/types': 8.0.0 + '@octokit/core': 4.2.0 + '@octokit/types': 9.0.0 dev: true - /@octokit/plugin-request-log/1.0.4_@octokit+core@4.1.0: + /@octokit/plugin-request-log/1.0.4_@octokit+core@4.2.0: resolution: {integrity: sha512-mLUsMkgP7K/cnFEw07kWqXGF5LKrOkD+lhCrKvPHXWDywAwuDUeDwWBpc69XK3pNX0uKiVt8g5z96PJ6z9xCFA==} peerDependencies: '@octokit/core': '>=3' dependencies: - '@octokit/core': 4.1.0 + '@octokit/core': 4.2.0 dev: true - /@octokit/plugin-rest-endpoint-methods/6.7.0_@octokit+core@4.1.0: - resolution: {integrity: sha512-orxQ0fAHA7IpYhG2flD2AygztPlGYNAdlzYz8yrD8NDgelPfOYoRPROfEyIe035PlxvbYrgkfUZIhSBKju/Cvw==} + /@octokit/plugin-rest-endpoint-methods/7.0.1_@octokit+core@4.2.0: + resolution: {integrity: sha512-pnCaLwZBudK5xCdrR823xHGNgqOzRnJ/mpC/76YPpNP7DybdsJtP7mdOwh+wYZxK5jqeQuhu59ogMI4NRlBUvA==} engines: {node: '>= 14'} peerDependencies: '@octokit/core': '>=3' dependencies: - '@octokit/core': 4.1.0 - '@octokit/types': 8.0.0 + '@octokit/core': 4.2.0 + '@octokit/types': 9.0.0 deprecation: 2.3.1 dev: true - /@octokit/request-error/3.0.2: - resolution: {integrity: sha512-WMNOFYrSaX8zXWoJg9u/pKgWPo94JXilMLb2VManNOby9EZxrQaBe/QSC4a1TzpAlpxofg2X/jMnCyZgL6y7eg==} + /@octokit/request-error/3.0.3: + resolution: {integrity: sha512-crqw3V5Iy2uOU5Np+8M/YexTlT8zxCfI+qu+LxUB7SZpje4Qmx3mub5DfEKSO8Ylyk0aogi6TYdf6kxzh2BguQ==} engines: {node: '>= 14'} dependencies: - '@octokit/types': 8.0.0 + '@octokit/types': 9.0.0 deprecation: 2.3.1 once: 1.4.0 dev: true - /@octokit/request/6.2.2: - resolution: {integrity: sha512-6VDqgj0HMc2FUX2awIs+sM6OwLgwHvAi4KCK3mT2H2IKRt6oH9d0fej5LluF5mck1lRR/rFWN0YIDSYXYSylbw==} + /@octokit/request/6.2.3: + resolution: {integrity: sha512-TNAodj5yNzrrZ/VxP+H5HiYaZep0H3GU0O7PaF+fhDrt8FPrnkei9Aal/txsN/1P7V3CPiThG0tIvpPDYUsyAA==} engines: {node: '>= 14'} dependencies: - '@octokit/endpoint': 7.0.3 - '@octokit/request-error': 3.0.2 - '@octokit/types': 8.0.0 + '@octokit/endpoint': 7.0.5 + '@octokit/request-error': 3.0.3 + '@octokit/types': 9.0.0 is-plain-object: 5.0.0 - node-fetch: 2.6.7 + node-fetch: 2.6.9 universal-user-agent: 6.0.0 transitivePeerDependencies: - encoding dev: true - /@octokit/rest/19.0.5: - resolution: {integrity: sha512-+4qdrUFq2lk7Va+Qff3ofREQWGBeoTKNqlJO+FGjFP35ZahP+nBenhZiGdu8USSgmq4Ky3IJ/i4u0xbLqHaeow==} + /@octokit/rest/19.0.7: + resolution: {integrity: sha512-HRtSfjrWmWVNp2uAkEpQnuGMJsu/+dBr47dRc5QVgsCbnIc1+GFEaoKBWkYG+zjrsHpSqcAElMio+n10c0b5JA==} engines: {node: '>= 14'} dependencies: - '@octokit/core': 4.1.0 - '@octokit/plugin-paginate-rest': 5.0.1_@octokit+core@4.1.0 - '@octokit/plugin-request-log': 1.0.4_@octokit+core@4.1.0 - '@octokit/plugin-rest-endpoint-methods': 6.7.0_@octokit+core@4.1.0 + '@octokit/core': 4.2.0 + '@octokit/plugin-paginate-rest': 6.0.0_@octokit+core@4.2.0 + '@octokit/plugin-request-log': 1.0.4_@octokit+core@4.2.0 + '@octokit/plugin-rest-endpoint-methods': 7.0.1_@octokit+core@4.2.0 transitivePeerDependencies: - encoding dev: true - /@octokit/types/8.0.0: - resolution: {integrity: sha512-65/TPpOJP1i3K4lBJMnWqPUJ6zuOtzhtagDvydAWbEXpbFYA0oMKKyLb95NFZZP0lSh/4b6K+DQlzvYQJQQePg==} + /@octokit/types/9.0.0: + resolution: {integrity: sha512-LUewfj94xCMH2rbD5YJ+6AQ4AVjFYTgpp6rboWM5T7N3IsIF65SBEOVcYMGAEzO/kKNiNaW4LoWtoThOhH06gw==} dependencies: - '@octokit/openapi-types': 14.0.0 + '@octokit/openapi-types': 16.0.0 dev: true /@parcel/watcher/2.0.4: @@ -5122,8 +6103,8 @@ packages: node-gyp-build: 4.6.0 dev: true - /@peculiar/asn1-schema/2.3.3: - resolution: {integrity: sha512-6GptMYDMyWBHTUKndHaDsRZUO/XMSgIns2krxcm2L7SEExRHwawFvSwNBhqNPR9HJwv3MruAiF1bhN0we6j6GQ==} + /@peculiar/asn1-schema/2.3.6: + resolution: {integrity: sha512-izNRxPoaeJeg/AyH8hER6s+H7p4itk+03QCa4sbxI3lNdseQYCuxzgsuNK8bTXChtLTjpJz6NmXKA73qLa3rCA==} dependencies: asn1js: 3.0.5 pvtsutils: 1.3.2 @@ -5141,23 +6122,23 @@ packages: resolution: {integrity: sha512-eK4C6WTNYxoI7JOabMoZICiyqRRtJB220bh0Mbj5RwRycleZf9BPyZoxsTvpP0FpmVS2aS13NKOuh5/tN3sIRw==} engines: {node: '>=10.12.0'} dependencies: - '@peculiar/asn1-schema': 2.3.3 + '@peculiar/asn1-schema': 2.3.6 '@peculiar/json-schema': 1.1.12 pvtsutils: 1.3.2 tslib: 2.5.0 - webcrypto-core: 1.7.5 + webcrypto-core: 1.7.6 dev: false - /@phenomnomnominal/tsquery/4.1.1_typescript@4.9.4: + /@phenomnomnominal/tsquery/4.1.1_typescript@4.9.5: resolution: {integrity: sha512-jjMmK1tnZbm1Jq5a7fBliM4gQwjxMU7TFoRNwIyzwlO+eHPRCFv/Nv+H/Gi1jc3WR7QURG8D5d0Tn12YGrUqBQ==} peerDependencies: typescript: ^3 || ^4 dependencies: - esquery: 1.4.0 - typescript: 4.9.4 + esquery: 1.5.0 + typescript: 4.9.5 dev: true - /@pmmmwh/react-refresh-webpack-plugin/0.5.10_unmakpayn7vcxadrrsbqlrpehy: + /@pmmmwh/react-refresh-webpack-plugin/0.5.10_ywdxqsa3mkzwfy7y7hsjgx22e4: resolution: {integrity: sha512-j0Ya0hCFZPd4x40qLzbhGsh9TMtdb+CJQiso+WxLOPNasohq9cc5SNUcwsZaRH6++Xh91Xkm/xHCkuIiIu0LUA==} engines: {node: '>= 10.13'} peerDependencies: @@ -5185,7 +6166,7 @@ packages: dependencies: ansi-html-community: 0.0.8 common-path-prefix: 3.0.0 - core-js-pure: 3.27.1 + core-js-pure: 3.29.1 error-stack-parser: 2.1.4 find-up: 5.0.0 html-entities: 2.3.3 @@ -5193,11 +6174,32 @@ packages: react-refresh: 0.11.0 schema-utils: 3.1.1 source-map: 0.7.4 - webpack: 5.75.0 - webpack-dev-server: 4.11.1_webpack@5.75.0 + webpack: 5.76.2 + webpack-dev-server: 4.13.1_webpack@5.76.2 dev: true - /@rollup/plugin-babel/5.3.1_3dsfpkpoyvuuxyfgdbpn4j4uzm: + /@pnpm/config.env-replace/1.0.0: + resolution: {integrity: sha512-ZVPVDi1E8oeXlYqkGRtX0CkzLTwE2zt62bjWaWKaAvI8NZqHzlMvGeSNDpW+JB3+aKanYb4UETJOF1/CxGPemA==} + engines: {node: '>=12.22.0'} + dev: true + + /@pnpm/network.ca-file/1.0.2: + resolution: {integrity: sha512-YcPQ8a0jwYU9bTdJDpXjMi7Brhkr1mXsXrUJvjqM2mQDgkRiz8jFaQGOdaLxgjtUfQgZhKy/O3cG/YwmgKaxLA==} + engines: {node: '>=12.22.0'} + dependencies: + graceful-fs: 4.2.10 + dev: true + + /@pnpm/npm-conf/2.1.0: + resolution: {integrity: sha512-Oe6ntvgsMTE3hDIqy6sajqHF+MnzJrOF06qC2QSiUEybLL7cp6tjoKUa32gpd9+KPVl4QyMs3E3nsXrx/Vdnlw==} + engines: {node: '>=12'} + dependencies: + '@pnpm/config.env-replace': 1.0.0 + '@pnpm/network.ca-file': 1.0.2 + config-chain: 1.1.13 + dev: true + + /@rollup/plugin-babel/5.3.1_hqhlikriuul7byjexqnpgcmenu: resolution: {integrity: sha512-WFfdLWU/xVWKeRQnKmIAQULUI7Il0gZnBIH/ZFO069wYIfPu+8zrfp/KMW0atmELoRDq8FbiP3VCss9MhCut7Q==} engines: {node: '>= 10.0.0'} peerDependencies: @@ -5208,7 +6210,7 @@ packages: '@types/babel__core': optional: true dependencies: - '@babel/core': 7.20.12 + '@babel/core': 7.21.3 '@babel/helper-module-imports': 7.18.6 '@rollup/pluginutils': 3.1.0_rollup@2.79.1 rollup: 2.79.1 @@ -5223,7 +6225,7 @@ packages: '@rollup/pluginutils': 3.1.0_rollup@2.79.1 '@types/resolve': 1.17.1 builtin-modules: 3.3.0 - deepmerge: 4.2.2 + deepmerge: 4.3.1 is-module: 1.0.0 resolve: 1.22.1 rollup: 2.79.1 @@ -5284,17 +6286,17 @@ packages: /@scure/base/1.1.1: resolution: {integrity: sha512-ZxOhsSyxYwLJj3pLZCefNitxsj093tb2vq90mp2txoYeBqbcjDjqFhyM8eUjq/uFm6zJ+mUuqxlS2FkuSY1MTA==} - /@scure/bip32/1.1.0: - resolution: {integrity: sha512-ftTW3kKX54YXLCxH6BB7oEEoJfoE2pIgw7MINKAs5PsS6nqKPuKk1haTF/EuHmYqG330t5GSrdmtRuHaY1a62Q==} + /@scure/bip32/1.1.5: + resolution: {integrity: sha512-XyNh1rB0SkEqd3tXcXMi+Xe1fvg+kUIcoRIEujP1Jgv7DqW2r9lg3Ah0NkFaCs9sTkQAQA8kw7xiRXzENi9Rtw==} dependencies: - '@noble/hashes': 1.1.2 - '@noble/secp256k1': 1.6.3 + '@noble/hashes': 1.2.0 + '@noble/secp256k1': 1.7.1 '@scure/base': 1.1.1 - /@scure/bip39/1.1.0: - resolution: {integrity: sha512-pwrPOS16VeTKg98dYXQyIjJEcWfz7/1YJIwxUEPFfQPtc86Ym/1sVgQ2RLoD43AazMk2l/unK4ITySSpW2+82w==} + /@scure/bip39/1.1.1: + resolution: {integrity: sha512-t+wDck2rVkh65Hmv280fYdVdY25J9YeEUIgn2LG1WM6gxFkGzcksoDiUkWVpVp3Oex9xGC68JU2dSbUfwZ2jPg==} dependencies: - '@noble/hashes': 1.1.2 + '@noble/hashes': 1.2.0 '@scure/base': 1.1.1 /@semantic-release/commit-analyzer/9.0.2_semantic-release@20.0.2: @@ -5326,13 +6328,13 @@ packages: peerDependencies: semantic-release: '>=18.0.0-beta.1' dependencies: - '@octokit/rest': 19.0.5 + '@octokit/rest': 19.0.7 '@semantic-release/error': 3.0.0 aggregate-error: 3.1.0 bottleneck: 2.19.5 debug: 4.3.4 dir-glob: 3.0.1 - fs-extra: 11.1.0 + fs-extra: 11.1.1 globby: 11.1.0 http-proxy-agent: 5.0.0 https-proxy-agent: 5.0.1 @@ -5348,8 +6350,8 @@ packages: - supports-color dev: true - /@semantic-release/npm/9.0.1_semantic-release@20.0.2: - resolution: {integrity: sha512-I5nVZklxBzfMFwemhRNbSrkiN/dsH3c7K9+KSk6jUnq0rdLFUuJt7EBsysq4Ir3moajQgFkfEryEHPqiKJj20g==} + /@semantic-release/npm/9.0.2_semantic-release@20.0.2: + resolution: {integrity: sha512-zgsynF6McdzxPnFet+a4iO9HpAlARXOM5adz7VGVCvj0ne8wtL2ZOQoDV2wZPDmdEotDIbVeJjafhelZjs9j6g==} engines: {node: '>=16 || ^14.17'} peerDependencies: semantic-release: '>=19.0.0' @@ -5357,14 +6359,14 @@ packages: '@semantic-release/error': 3.0.0 aggregate-error: 3.1.0 execa: 5.1.1 - fs-extra: 10.1.0 + fs-extra: 11.1.1 lodash: 4.17.21 nerf-dart: 1.0.0 normalize-url: 6.1.0 - npm: 8.19.3 + npm: 8.19.4 rc: 1.2.8 read-pkg: 5.2.0 - registry-auth-token: 4.2.2 + registry-auth-token: 5.0.2 semantic-release: 20.0.2 semver: 7.3.8 tempy: 1.0.1 @@ -5437,12 +6439,6 @@ packages: '@sinonjs/commons': 1.8.6 dev: true - /@sinonjs/fake-timers/9.1.2: - resolution: {integrity: sha512-BPS4ynJW/o92PUR4wgriz2Ud5gpST5vz6GQfMixEDK0Z8ZCUv2M7SkBLykH56T++Xs+8ln9zTGbOvNGIe02/jw==} - dependencies: - '@sinonjs/commons': 1.8.6 - dev: true - /@sovpro/delimited-stream/1.1.0: resolution: {integrity: sha512-kQpk267uxB19X3X2T1mvNMjyvIEonpNSHrMlK5ZaBU6aZxw7wPbpgKJOjHN3+/GPVpXgAV9soVT2oyHpLkLtyw==} engines: {node: '>= 8'} @@ -5453,7 +6449,7 @@ packages: peerDependencies: '@sphereon/react-native-argon2': ^2.0.7 dependencies: - '@sphereon/isomorphic-argon2': 1.0.0 + '@sphereon/isomorphic-argon2': 1.0.1 cross-fetch: 3.1.5 debug: 4.3.4 uint8arrays: 3.1.1 @@ -5463,11 +6459,11 @@ packages: - supports-color dev: false - /@sphereon/isomorphic-argon2/1.0.0: - resolution: {integrity: sha512-k63y0CzQYRH/EEOLx/u9O6oDFzZ6aiPTraGtwm29Fi0k630oy8xnYxi6xCdObicn+LLO0tCxGMFRtH/cXJHJlA==} + /@sphereon/isomorphic-argon2/1.0.1: + resolution: {integrity: sha512-Z40mdiuuZjII19FfIsti9JFGqX56jhpaeZb135BZayJPaRSbi8JnbJ3pzulJJAHsymkWzVqMqt242fBKpualHg==} peerDependencies: - '@sphereon/react-native-argon2': ^2.0.7 - react-native: ^0.60.0 + '@sphereon/react-native-argon2': ^2.0.9 + react-native: '>=0.60.0' dependencies: argon2-browser: 1.18.0 uint8arrays: 3.1.1 @@ -5627,7 +6623,7 @@ packages: /@surma/rollup-plugin-off-main-thread/2.2.3: resolution: {integrity: sha512-lR8q/9W7hZpMWweNiAKU7NQerBnzQQLvi8qnTDU/fxItPhtZVMbPV3lbCwjhIlNBe9Bbr5V+KHshvWmVSG9cxQ==} dependencies: - ejs: 3.1.8 + ejs: 3.1.9 json5: 2.2.3 magic-string: 0.25.9 string.prototype.matchall: 4.0.8 @@ -5702,14 +6698,14 @@ packages: resolution: {integrity: sha512-cAaR/CAiZRB8GP32N+1jocovUtvlj0+e65TB50/6Lcime+EA49m/8l+P2ko+XPJ4dw3xaPS3jOL4F2X4KWxoeQ==} engines: {node: '>=10'} dependencies: - '@babel/types': 7.20.7 + '@babel/types': 7.21.3 dev: true /@svgr/plugin-jsx/5.5.0: resolution: {integrity: sha512-V/wVh33j12hGh05IDg8GpIUXbjAPnTdPTKuP4VNLggnwaHMPNQNae2pRnyTAILWCQdz5GyMqtO488g7CKM8CBA==} engines: {node: '>=10'} dependencies: - '@babel/core': 7.20.12 + '@babel/core': 7.21.3 '@svgr/babel-preset': 5.5.0 '@svgr/hast-util-to-babel-ast': 5.5.0 svg-parser: 2.0.4 @@ -5722,7 +6718,7 @@ packages: engines: {node: '>=10'} dependencies: cosmiconfig: 7.1.0 - deepmerge: 4.2.2 + deepmerge: 4.3.1 svgo: 1.3.2 dev: true @@ -5730,10 +6726,10 @@ packages: resolution: {integrity: sha512-DOBOK255wfQxguUta2INKkzPj6AIS6iafZYiYmHn6W3pHlycSRRlvWKCfLDG10fXfLWqE3DJHgRUOyJYmARa7g==} engines: {node: '>=10'} dependencies: - '@babel/core': 7.20.12 - '@babel/plugin-transform-react-constant-elements': 7.20.2_@babel+core@7.20.12 - '@babel/preset-env': 7.20.2_@babel+core@7.20.12 - '@babel/preset-react': 7.18.6_@babel+core@7.20.12 + '@babel/core': 7.21.3 + '@babel/plugin-transform-react-constant-elements': 7.21.3_@babel+core@7.21.3 + '@babel/preset-env': 7.20.2_@babel+core@7.21.3 + '@babel/preset-react': 7.18.6_@babel+core@7.21.3 '@svgr/core': 5.5.0 '@svgr/plugin-jsx': 5.5.0 '@svgr/plugin-svgo': 5.5.0 @@ -5751,8 +6747,8 @@ packages: engines: {node: '>= 10'} dev: true - /@transmute/credentials-context/0.7.0-unstable.79: - resolution: {integrity: sha512-3YfUsAaV/wqDw0dB+vdhHzK0aD0h1Z4ZeNmSVBOFRhoyhLCXGG5VyTDO/nKDhNvOylPxtDJ5jwrTClVslGHUQQ==} + /@transmute/credentials-context/0.7.0-unstable.80: + resolution: {integrity: sha512-WhTrnSsIFcWGr3nAVUr1CBBzKKGWs8TJnXPAK+I3QzshennkMNbXpLNpU/sK3cum7eTRPyxFVbH37AxrHStQOw==} /@transmute/did-context/0.6.1-unstable.37: resolution: {integrity: sha512-p/QnG3QKS4218hjIDgdvJOFATCXsAnZKgy4egqRrJLlo3Y6OaDBg7cA73dixOwUPoEKob0K6rLIGcsCI/L1acw==} @@ -5794,7 +6790,7 @@ packages: engines: {node: '>=14'} dependencies: '@transmute/did-key-common': 0.3.0-unstable.10 - '@transmute/secp256k1-key-pair': 0.7.0-unstable.77 + '@transmute/secp256k1-key-pair': 0.7.0-unstable.80 transitivePeerDependencies: - domexception - encoding @@ -5808,7 +6804,7 @@ packages: engines: {node: '>=14'} dependencies: '@transmute/did-key-common': 0.3.0-unstable.10 - '@transmute/x25519-key-pair': 0.7.0-unstable.77 + '@transmute/x25519-key-pair': 0.7.0-unstable.80 transitivePeerDependencies: - domexception - encoding @@ -5831,28 +6827,28 @@ packages: engines: {node: '>=10'} dependencies: '@stablelib/ed25519': 1.0.3 - '@transmute/ld-key-pair': 0.7.0-unstable.77 - '@transmute/x25519-key-pair': 0.7.0-unstable.77 + '@transmute/ld-key-pair': 0.7.0-unstable.80 + '@transmute/x25519-key-pair': 0.7.0-unstable.80 dev: false - /@transmute/ed25519-key-pair/0.7.0-unstable.79: - resolution: {integrity: sha512-i8DYpIQSZuT0qN69Vht/xpvRt8qLJ3gDqYOSn1QWlq72jkyi77gbBLNRUL8nb/SIYmDQ6YbILahXoiQ3NawhwQ==} + /@transmute/ed25519-key-pair/0.7.0-unstable.80: + resolution: {integrity: sha512-Rl9mdLkUrn299hUEeVlcx4JYg5S0zdK8M4GhuLGpcQozkqPApbDuuotzyNIp4ok3tDwyM0v62H1gZRxWEYcvMg==} engines: {node: '>=16'} dependencies: '@stablelib/ed25519': 1.0.3 - '@transmute/ld-key-pair': 0.7.0-unstable.79 - '@transmute/x25519-key-pair': 0.7.0-unstable.79 + '@transmute/ld-key-pair': 0.7.0-unstable.80 + '@transmute/x25519-key-pair': 0.7.0-unstable.80 dev: false - /@transmute/ed25519-signature-2018/0.7.0-unstable.79: - resolution: {integrity: sha512-8X7SafiGmnVjx5ClL1rZ0x74neIuEcEqBcC/nghiewOjuWPf6zwHSYXqMogPotphIll6istThVa3CUDVLHYmWg==} + /@transmute/ed25519-signature-2018/0.7.0-unstable.80: + resolution: {integrity: sha512-KYq36yzNyEHMOZmH4/1k1f35LAyX94dFpzn2jJv1m5ha0EENZdJF2zWWZyq3BDeE688yPXNnxnTmV6HfSgawyQ==} engines: {node: '>=16'} dependencies: - '@transmute/credentials-context': 0.7.0-unstable.79 + '@transmute/credentials-context': 0.7.0-unstable.80 '@transmute/ed25519-key-pair': 0.7.0-unstable.2 - '@transmute/jose-ld': 0.7.0-unstable.79 - '@transmute/security-context': 0.7.0-unstable.79 - jsonld: /@digitalcredentials/jsonld/5.2.1 + '@transmute/jose-ld': 0.7.0-unstable.80 + '@transmute/jsonld': 0.0.4 + '@transmute/security-context': 0.7.0-unstable.80 transitivePeerDependencies: - domexception - expo @@ -5860,28 +6856,28 @@ packages: - web-streams-polyfill dev: false - /@transmute/jose-ld/0.7.0-unstable.79: - resolution: {integrity: sha512-kKq8g36QIiN6hhYPZtHSAlwKfdNF2h0TxHrbbyEXrNoWPZSk8IUH5F971Us/KodbLVVRjL0Pdh5qr3n53hg0Eg==} + /@transmute/jose-ld/0.7.0-unstable.80: + resolution: {integrity: sha512-Bdb/+wd/SDaRpAlGmkDrXL6nsHdBO/7Zr+zNEYC7cQTtiTnKQsjAKbQa+AF470PEgNwJIbNK2YjWIwnsv5q69A==} engines: {node: '>=16'} dependencies: '@peculiar/webcrypto': 1.4.1 '@stablelib/aes-kw': 1.0.1 '@stablelib/xchacha20poly1305': 1.0.1 base64url: 3.0.1 - jose: 4.11.2 + jose: 4.13.1 web-streams-polyfill: 3.2.1 dev: false - /@transmute/json-web-signature/0.7.0-unstable.79: - resolution: {integrity: sha512-dJhJQpAhwxCsk575Pa14bftxbo/i8TuRU+B6NYNuUu/v+mbhw+B9JCkxk3cTEfF2J865+dAihYp0ET0886753A==} + /@transmute/json-web-signature/0.7.0-unstable.80: + resolution: {integrity: sha512-vlLgCkn/1onskP/VWa6t3JBtVrvo1yz6NRpJ5b4abwav0/t6E+AGS64mpYiC6ZMQV32ZGXSFHDs6FAoeCrX57A==} engines: {node: '>=16'} dependencies: - '@transmute/ed25519-key-pair': 0.7.0-unstable.79 - '@transmute/jose-ld': 0.7.0-unstable.79 - '@transmute/secp256k1-key-pair': 0.7.0-unstable.79 - '@transmute/security-context': 0.7.0-unstable.79 - '@transmute/web-crypto-key-pair': 0.7.0-unstable.79 - jsonld: /@digitalcredentials/jsonld/5.2.1 + '@transmute/ed25519-key-pair': 0.7.0-unstable.80 + '@transmute/jose-ld': 0.7.0-unstable.80 + '@transmute/jsonld': 0.0.4 + '@transmute/secp256k1-key-pair': 0.7.0-unstable.80 + '@transmute/security-context': 0.7.0-unstable.80 + '@transmute/web-crypto-key-pair': 0.7.0-unstable.80 transitivePeerDependencies: - domexception - expo @@ -5889,35 +6885,34 @@ packages: - web-streams-polyfill dev: false - /@transmute/ld-key-pair/0.6.1-unstable.37: - resolution: {integrity: sha512-DcTpEruAQBfOd2laZkg3uCQ+67Y7dw2hsvo42NAQ5tItCIx5AClP7zccri7T2JUcfDUFaE32z/BLTMEKYt3XZQ==} - dev: false - - /@transmute/ld-key-pair/0.7.0-unstable.77: - resolution: {integrity: sha512-TdYx6vcztXJ1qmmpad3NHfSge5MVAH6Ruvg139cJOGM9SEAQLXamNo28iTmB+trf1M4dWtGviok/jtJ6JGgjOA==} + /@transmute/jsonld/0.0.4: + resolution: {integrity: sha512-6G++8imMYW9dtTvATPHNfrV3lLeX5E57DOmlgIDfO0A0yjkBCss1usB80NfONS26ynyveb8vTbp4nQDW9Ki4Rw==} engines: {node: '>=16'} + dependencies: + json-pointer: 0.6.2 + jsonld: /@digitalcredentials/jsonld/5.2.1 + transitivePeerDependencies: + - domexception + - expo + - react-native + - web-streams-polyfill dev: false - /@transmute/ld-key-pair/0.7.0-unstable.79: - resolution: {integrity: sha512-QWpzTQStsoD1Bpif1rMWDGlYq0zzsHExw3As8piy3U+MtJpOYIOUJ60L6NSyFBB8Zq+XNeFJq0/puwzMV2lKog==} - engines: {node: '>=16'} + /@transmute/ld-key-pair/0.6.1-unstable.37: + resolution: {integrity: sha512-DcTpEruAQBfOd2laZkg3uCQ+67Y7dw2hsvo42NAQ5tItCIx5AClP7zccri7T2JUcfDUFaE32z/BLTMEKYt3XZQ==} dev: false - /@transmute/secp256k1-key-pair/0.7.0-unstable.77: - resolution: {integrity: sha512-rjru1xbM6/mXu//QO2DY8E+1LXhgjgu1+ppKzPOW7nSuQ3tejOT9omtWLMCJPl9/A9Iv+yPUVX23Y7kkqzYaZQ==} + /@transmute/ld-key-pair/0.7.0-unstable.80: + resolution: {integrity: sha512-oI6xJDT116+xViJKFxbjs8wX/k6O6e5kPKjmLfApYZKF63Tf01m+nflh7iAhgecSWl7W9SRo560SEtkyOVl7fQ==} engines: {node: '>=16'} - dependencies: - '@bitauth/libauth': 1.19.1 - '@transmute/ld-key-pair': 0.7.0-unstable.77 - secp256k1: 4.0.3 dev: false - /@transmute/secp256k1-key-pair/0.7.0-unstable.79: - resolution: {integrity: sha512-Sg9SYya/WMYYT9BDgAS1/wJITJpS1UluUBMk/n3it4YFFqGRrDSDEK9dcEWDHXakv1GfQePpqtuvS2Uv24YgKA==} + /@transmute/secp256k1-key-pair/0.7.0-unstable.80: + resolution: {integrity: sha512-tPq00bzqfMKgk6YYEqtSU1p+702j7VV37XLFlwMSSDK18JgVoQlp3ULZddEeFajbXQgX8N6yq6jlDUdXLW27bA==} engines: {node: '>=16'} dependencies: '@bitauth/libauth': 1.19.1 - '@transmute/ld-key-pair': 0.7.0-unstable.79 + '@transmute/ld-key-pair': 0.7.0-unstable.80 secp256k1: 4.0.3 dev: false @@ -5925,16 +6920,16 @@ packages: resolution: {integrity: sha512-GtLmG65qlORrz/2S4I74DT+vA4+qXsFxrMr0cNOXjUqZBd/AW1PTrFnryLF9907BfoiD58HC9qb1WVGWjSlBYw==} dev: false - /@transmute/security-context/0.7.0-unstable.79: - resolution: {integrity: sha512-6lxUh7RKIcwVQSqPbb4IpZhgPYDc9Jxl9/Conk3QElD4GYuxNGZzBD5UwNcdUgcBBgk7N4jNK3fL9hwoxKCCZQ==} + /@transmute/security-context/0.7.0-unstable.80: + resolution: {integrity: sha512-8Q1Q37QP1HNdemVNAi35Uaww1trPm7ybl8+vam90+MyI5kV4nLhOZab378vNYShUMgAccUkFXHlZSsuqD7HlCw==} dev: false - /@transmute/web-crypto-key-pair/0.7.0-unstable.79: - resolution: {integrity: sha512-F1/jNKmwD5u68pYfn86oTHbaElEDaej+DttsBgpwogCmbNai9UaGpWGxZwkugQM3d2BVBX3UHpc9PgXNGqJRNw==} + /@transmute/web-crypto-key-pair/0.7.0-unstable.80: + resolution: {integrity: sha512-k7kV3DPZoIoLSItnU9qHOBebMhem2y6Qay8JSgS+QTsEf4sGMNl3Unm560I9aocvdlurMTwQmgCfwPJ8WFQYaQ==} engines: {node: '>=16'} dependencies: '@peculiar/webcrypto': 1.4.1 - '@transmute/ld-key-pair': 0.7.0-unstable.79 + '@transmute/ld-key-pair': 0.7.0-unstable.80 big-integer: 1.6.51 dev: false @@ -5946,20 +6941,12 @@ packages: '@transmute/ld-key-pair': 0.6.1-unstable.37 dev: false - /@transmute/x25519-key-pair/0.7.0-unstable.77: - resolution: {integrity: sha512-FYvbtScRUyx0zdac/az2R7Z3XSfvor04lEbEZsIuJIJAW/5KfATmbSmcWdbMyncAHz0V50fxN7N5knCjnAUuTQ==} - engines: {node: '>=16'} - dependencies: - '@stablelib/x25519': 1.0.3 - '@transmute/ld-key-pair': 0.7.0-unstable.77 - dev: false - - /@transmute/x25519-key-pair/0.7.0-unstable.79: - resolution: {integrity: sha512-dcWvq9DgbWpAprS0gosHvifYnmhEotqx9MyYzXLe/EntZFjJcsHffl+KSrRPBupVE82B5NxQnGZKCQeW5E20gA==} + /@transmute/x25519-key-pair/0.7.0-unstable.80: + resolution: {integrity: sha512-6YxaWl3E9pTIsfuOCwoQFWYGH/bLoUkH4S7hhVORaNAS8r/XPNRP9IMcbemfHsP7f67GHVHXbOghVZd9nPLlQg==} engines: {node: '>=16'} dependencies: '@stablelib/x25519': 1.0.3 - '@transmute/ld-key-pair': 0.7.0-unstable.79 + '@transmute/ld-key-pair': 0.7.0-unstable.80 dev: false /@trufflesuite/bigint-buffer/1.1.10: @@ -6008,11 +6995,11 @@ packages: /@types/argparse/1.0.38: resolution: {integrity: sha512-ebDJ9b0e702Yr7pWgB0jzm+CX4Srzz8RcXtLJDJB+BSccqMa36uyH/zUsSYao5+BD1ytv3k3rPYCq4mAE1hsXA==} - /@types/babel__core/7.1.20: - resolution: {integrity: sha512-PVb6Bg2QuscZ30FvOU7z4guG6c926D9YRvOxEaelzndpMsvP+YM74Q/dAFASpg2l6+XLalxSGxcq/lrgYWZtyQ==} + /@types/babel__core/7.20.0: + resolution: {integrity: sha512-+n8dL/9GWblDO0iU6eZAwEIJVr5DWigtle+Q6HLOrh/pdbXOhOtqzq8VPPE2zvNJzSKY4vH/z3iT3tn0A3ypiQ==} dependencies: - '@babel/parser': 7.20.7 - '@babel/types': 7.20.7 + '@babel/parser': 7.21.3 + '@babel/types': 7.21.3 '@types/babel__generator': 7.6.4 '@types/babel__template': 7.4.1 '@types/babel__traverse': 7.18.3 @@ -6021,24 +7008,24 @@ packages: /@types/babel__generator/7.6.4: resolution: {integrity: sha512-tFkciB9j2K755yrTALxD44McOrk+gfpIpvC3sxHjRawj6PfnQxrse4Clq5y/Rq+G3mrBurMax/lG8Qn2t9mSsg==} dependencies: - '@babel/types': 7.20.7 + '@babel/types': 7.21.3 dev: true /@types/babel__template/7.4.1: resolution: {integrity: sha512-azBFKemX6kMg5Io+/rdGT0dkGreboUVR0Cdm3fz9QJWpaQGJRQXl7C+6hOTCZcMll7KFyEQpgbYI2lHdsS4U7g==} dependencies: - '@babel/parser': 7.20.7 - '@babel/types': 7.20.7 + '@babel/parser': 7.21.3 + '@babel/types': 7.21.3 dev: true /@types/babel__traverse/7.18.3: resolution: {integrity: sha512-1kbcJ40lLB7MHsj39U4Sh1uTd2E7rLEa79kmDpI6cy+XiXsteB3POdQomoq4FxszMrO3ZYchkhYJw7A2862b3w==} dependencies: - '@babel/types': 7.20.7 + '@babel/types': 7.21.3 dev: true - /@types/blessed/0.1.19: - resolution: {integrity: sha512-r4qnseYWBsi/kxo5AAlCS22EnTXFbGpnvuXUubJikVeRnYB3e5HwV3NtcwJ0Sk5KOGaLvo9Rtwb8hzxfbqbQPg==} + /@types/blessed/0.1.21: + resolution: {integrity: sha512-nlJHCM/wDUtvhDF7FBW2fWTP1JIPMm16xKXTdaAgOaqXiT4VkB/GIc7LAX5BxhTR09BVeNF2JzxszHC9Tres2w==} dependencies: '@types/node': 18.11.18 dev: false @@ -6064,7 +7051,7 @@ packages: /@types/connect-history-api-fallback/1.3.5: resolution: {integrity: sha512-h8QJa8xSb1WD4fpKBDcATDNGXghFj6/3GRWG6dhmRcu0RX1Ubasur2Uvx5aeEwlf0MwblEC2bMzzMQntxnw/Cw==} dependencies: - '@types/express-serve-static-core': 4.17.32 + '@types/express-serve-static-core': 4.17.33 '@types/node': 18.11.18 dev: true @@ -6101,12 +7088,12 @@ packages: /@types/eslint-scope/3.7.4: resolution: {integrity: sha512-9K4zoImiZc3HlIp6AVUDE4CWYx22a+lhSZMYNpbjW04+YF0KWj4pJXnEMjdnFTiQibFFmElcsasJXDbdI/EPhA==} dependencies: - '@types/eslint': 8.4.10 + '@types/eslint': 8.21.3 '@types/estree': 1.0.0 dev: true - /@types/eslint/8.4.10: - resolution: {integrity: sha512-Sl/HOqN8NKPmhWo2VBEPm0nvHnu2LL3v9vKo8MEq0EtbJ4eVzGPl41VNPvn5E1i5poMk4/XD8UriLHpJvEP/Nw==} + /@types/eslint/8.21.3: + resolution: {integrity: sha512-fa7GkppZVEByMWGbTtE5MbmXWJTVbrjjaS8K6uQj+XtuuUv1fsuPAxhygfqLmsb/Ufb3CV8deFCpiMfAgi00Sw==} dependencies: '@types/estree': 1.0.0 '@types/json-schema': 7.0.11 @@ -6131,8 +7118,8 @@ packages: '@types/puppeteer': 5.4.7 dev: true - /@types/express-serve-static-core/4.17.32: - resolution: {integrity: sha512-aI5h/VOkxOF2Z1saPy0Zsxs5avets/iaiAJYznQFm5By/pamU31xWKL//epiF4OfUA2qTOc9PV6tCUjhO8wlZA==} + /@types/express-serve-static-core/4.17.33: + resolution: {integrity: sha512-TPBqmR/HRYI3eC2E5hmiivIzv+bidAfXofM+sbonAGvyDhySGw9/PQZFt2BLOrjUUR++4eJVpx6KnLQK1Fk9tA==} dependencies: '@types/node': 18.11.18 '@types/qs': 6.9.7 @@ -6142,9 +7129,9 @@ packages: resolution: {integrity: sha512-Yv0k4bXGOH+8a+7bELd2PqHQsuiANB+A8a4gnQrkRWzrkKlb6KHaVvyXhqs04sVW/OWlbPyYxRgYlIXLfrufMQ==} dependencies: '@types/body-parser': 1.19.2 - '@types/express-serve-static-core': 4.17.32 + '@types/express-serve-static-core': 4.17.33 '@types/qs': 6.9.7 - '@types/serve-static': 1.15.0 + '@types/serve-static': 1.15.1 /@types/fs-extra/11.0.1: resolution: {integrity: sha512-MxObHvNl4A69ofaTRU8DFqvgzzv8s9yRtaPPm5gud9HDNvpB3GPQFvNuTWAI59B9huVGV5jXYJwbCsmBsOGYWA==} @@ -6171,8 +7158,8 @@ packages: resolution: {integrity: sha512-/K3ds8TRAfBvi5vfjuz8y6+GiAYBZ0x4tXv1Av6CWBWn0IlADc+ZX9pMq7oU0fNQPnBwIZl3rmeLp6SBApbxSQ==} dev: true - /@types/http-proxy/1.17.9: - resolution: {integrity: sha512-QsbSjA/fSk7xB+UXlCT3wHBy5ai9wOcNDWwZAtud+jXhwOM3l+EYZh8Lng4+/6n8uar0J7xILzqftJdJ/Wdfkw==} + /@types/http-proxy/1.17.10: + resolution: {integrity: sha512-Qs5aULi+zV1bwKAg5z1PWnDXWmsn+LxIvUGv6E2+OOMYhclZMO+OXd9pYVf2gLykf2I7IV2u7oTHwChPNsvJ7g==} dependencies: '@types/node': 18.11.18 dev: true @@ -6211,8 +7198,8 @@ packages: /@types/jest/29.2.6: resolution: {integrity: sha512-XEUC/Tgw3uMh6Ho8GkUtQ2lPhY5Fmgyp3TdlkTJs1W9VgNxs+Ow/x3Elh8lHQKqCbZL0AubQuqWjHVT033Hhrw==} dependencies: - expect: 29.3.1 - pretty-format: 29.3.1 + expect: 29.5.0 + pretty-format: 29.5.0 dev: true /@types/jsdom/20.0.1: @@ -6223,6 +7210,10 @@ packages: parse5: 7.1.2 dev: true + /@types/json-buffer/3.0.0: + resolution: {integrity: sha512-3YP80IxxFJB4b5tYC2SUPwkg0XQLiu0nWvhRgEatgjf+29IcWO9X1k8xRv5DGssJ/lCrjYTjQPcobJr2yWIVuQ==} + dev: true + /@types/json-schema/7.0.11: resolution: {integrity: sha512-wOuvG1SN4Us4rez+tylwwwCV1psiNVOkJeM3AUWUNWg/jDQY2+HE/444y5gc+jBmRqASOm2Oeh5c1axHobwRKQ==} @@ -6282,7 +7273,7 @@ packages: resolution: {integrity: sha512-HhggYPH5N+AQe/OmN6fmhKmRRt2XuNJow+R3pQwJxOOF9GuwM7O2mheyGeIrs5MOIeNjDEdgdoyHBOrFeJBR3g==} deprecated: This is a stub types definition. node-fetch provides its own type definitions, so you do not need this installed. dependencies: - node-fetch: 3.3.0 + node-fetch: 3.3.1 dev: true /@types/node/12.20.24: @@ -6295,6 +7286,10 @@ packages: resolution: {integrity: sha512-Gj7cI7z+98M282Tqmp2K5EIsoouUEzbBJhQQzDE3jSIRk6r9gsz0oUokqIUR4u1R3dMHo0pDHM7sNOHyhulypw==} dev: true + /@types/pako/2.0.0: + resolution: {integrity: sha512-10+iaz93qR5WYxTo+PMifD5TSxiOtdRaxBf7INGGXMQgTCu8Z/7GYWYFUOS3q/G0nE5boj1r4FEB+WSy7s5gbA==} + dev: true + /@types/parse-json/4.0.0: resolution: {integrity: sha512-//oorEZjL6sbPcKUaCdIGlIUeH26mgzimjBB77G6XRgnDl/L5wOnpyBGRe/Mmf5CVW3PwEBE1NjiMZ/ssFh4wA==} dev: true @@ -6379,8 +7374,8 @@ packages: '@types/express': 4.17.15 dev: true - /@types/serve-static/1.15.0: - resolution: {integrity: sha512-z5xyF6uh8CbjAu9760KDKsH2FcDxZ2tFCsA4HIMWE6IkiYMXfVoa+4f9KX+FN0ZLsaMw1WNG2ETLA6N+/YA+cg==} + /@types/serve-static/1.15.1: + resolution: {integrity: sha512-NUo5XNiAdULrJENtJXZZ3fHtfMolzZwczzBbnAeBbqBwG+LaG6YaJtuwzwGSQZ2wsCrxjEhNNjAkKigy3n8teQ==} dependencies: '@types/mime': 3.0.1 '@types/node': 18.11.18 @@ -6399,7 +7394,7 @@ packages: resolution: {integrity: sha512-jqCjGU/tGEaqIplPy3WyQg+Nrp6y80DCFnDEAvVKWkJyv0VivSSDCChkppHRHAablvInZe6pijDFMnavtN0vqA==} dependencies: '@types/express': 4.17.15 - '@types/serve-static': 1.15.0 + '@types/serve-static': 1.15.1 dev: false /@types/through/0.0.30: @@ -6412,8 +7407,8 @@ packages: resolution: {integrity: sha512-Q5vtl1W5ue16D+nIaW8JWebSSraJVlK+EthKn7e7UcD4KWsaSJ8BqGPXNaPghgtcn/fhvrN17Tv8ksUsQpiplw==} dev: true - /@types/trusted-types/2.0.2: - resolution: {integrity: sha512-F5DIZ36YVLE+PN+Zwws4kJogq47hNgX3Nx6WyDJ3kcplxyke3XIzB8uK5n/Lpm1HBsbGzd6nmGehL8cPekP+Tg==} + /@types/trusted-types/2.0.3: + resolution: {integrity: sha512-NfQ4gyz38SL8sDNrSixxU2Os1a5xcdFxipAFxYEuLUlvU2uDwS4NUpsImcf1//SlWItCVMMLiylsxbmNMToV/g==} dev: true /@types/ungap__structured-clone/0.3.0: @@ -6428,6 +7423,17 @@ packages: resolution: {integrity: sha512-kr90f+ERiQtKWMz5rP32ltJ/BtULDI5RVO0uavn1HQUOwjx0R1h0rnDYNL0CepF1zL5bSY6FISAfd9tOdDhU5Q==} dev: true + /@types/webidl-conversions/7.0.0: + resolution: {integrity: sha512-xTE1E+YF4aWPJJeUzaZI5DRntlkY3+BCVJi0axFptnjGmAoWxkyREIh/XMrfxVLejwQxMCfDXdICo0VLxThrog==} + dev: true + + /@types/whatwg-url/8.2.2: + resolution: {integrity: sha512-FtQu10RWgn3D9U4aazdwIE2yzphmTJREDqNdODHrbrZmmMqI0vMheC/6NE/J1Yveaj8H+ela+YwWTjq5PGmuhA==} + dependencies: + '@types/node': 18.11.18 + '@types/webidl-conversions': 7.0.0 + dev: true + /@types/ws/8.5.4: resolution: {integrity: sha512-zdQDHKUgcX/zBc4GrwsE/7dVdAD8JR4EuiAXiiUhhfyIJXXb2+PrGshFyeXWQPMmmZ2XxgaqclgpIC7eTXc1mg==} dependencies: @@ -6444,8 +7450,8 @@ packages: '@types/yargs-parser': 21.0.0 dev: true - /@types/yargs/17.0.19: - resolution: {integrity: sha512-cAx3qamwaYX9R0fzOIZAlFpo4A+1uBVCxqpKz9D26uTF4srRXaGTTsikQmaotCtNdbhzyUH7ft6p9ktz9s6UNQ==} + /@types/yargs/17.0.22: + resolution: {integrity: sha512-pet5WJ9U8yPVRhkwuEIp5ktAeAqRZOq4UdAyWLWzxbtpyXnzbtLdKiXAjJzi/KLmPGS9wk86lUFWZFN6sISo4g==} dependencies: '@types/yargs-parser': 21.0.0 dev: true @@ -6458,8 +7464,8 @@ packages: dev: true optional: true - /@typescript-eslint/eslint-plugin/5.48.1_3jon24igvnqaqexgwtxk6nkpse: - resolution: {integrity: sha512-9nY5K1Rp2ppmpb9s9S2aBiF3xo5uExCehMDmYmmFqqyxgenbHJ3qbarcLt4ITgaD6r/2ypdlcFRdcuVPnks+fQ==} + /@typescript-eslint/eslint-plugin/5.56.0_eiarxozbxyyxr7kdsdkwxpixiq: + resolution: {integrity: sha512-ZNW37Ccl3oMZkzxrYDUX4o7cnuPgU+YrcaYXzsRtLB16I1FR5SHMqga3zGsaSliZADCWo2v8qHWqAYIj8nWCCg==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} peerDependencies: '@typescript-eslint/parser': ^5.0.0 @@ -6469,15 +7475,16 @@ packages: typescript: optional: true dependencies: - '@typescript-eslint/parser': 5.48.1_iukboom6ndih5an6iafl45j2fe - '@typescript-eslint/scope-manager': 5.48.1 - '@typescript-eslint/type-utils': 5.48.1_iukboom6ndih5an6iafl45j2fe - '@typescript-eslint/utils': 5.48.1_iukboom6ndih5an6iafl45j2fe + '@eslint-community/regexpp': 4.4.0 + '@typescript-eslint/parser': 5.56.0_zjoiagdsdpivymr5idw66lxttq + '@typescript-eslint/scope-manager': 5.56.0 + '@typescript-eslint/type-utils': 5.56.0_zjoiagdsdpivymr5idw66lxttq + '@typescript-eslint/utils': 5.56.0_zjoiagdsdpivymr5idw66lxttq debug: 4.3.4 - eslint: 8.31.0 + eslint: 8.36.0 + grapheme-splitter: 1.0.4 ignore: 5.2.4 natural-compare-lite: 1.4.0 - regexpp: 3.2.0 semver: 7.3.8 tsutils: 3.21.0_typescript@4.9.4 typescript: 4.9.4 @@ -6485,21 +7492,21 @@ packages: - supports-color dev: true - /@typescript-eslint/experimental-utils/5.48.1_iukboom6ndih5an6iafl45j2fe: - resolution: {integrity: sha512-8OoIZZuOeqsm5cxn2f01qHWtVC3M4iixSsfZXPiQUg4Sl4LiU+b5epcJFwxNfqeoLl+SGncELyi3x99zI6C0ng==} + /@typescript-eslint/experimental-utils/5.56.0_zjoiagdsdpivymr5idw66lxttq: + resolution: {integrity: sha512-sxWuj0eO5nItmKgZmsBbChVt90EhfkuncDCPbLAVeEJ+SCjXMcZN3AhhNbxed7IeGJ4XwsdL3/FMvD4r+FLqqA==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} peerDependencies: eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 dependencies: - '@typescript-eslint/utils': 5.48.1_iukboom6ndih5an6iafl45j2fe - eslint: 8.31.0 + '@typescript-eslint/utils': 5.56.0_zjoiagdsdpivymr5idw66lxttq + eslint: 8.36.0 transitivePeerDependencies: - supports-color - typescript dev: true - /@typescript-eslint/parser/5.48.1_iukboom6ndih5an6iafl45j2fe: - resolution: {integrity: sha512-4yg+FJR/V1M9Xoq56SF9Iygqm+r5LMXvheo6DQ7/yUWynQ4YfCRnsKuRgqH4EQ5Ya76rVwlEpw4Xu+TgWQUcdA==} + /@typescript-eslint/parser/5.56.0_zjoiagdsdpivymr5idw66lxttq: + resolution: {integrity: sha512-sn1OZmBxUsgxMmR8a8U5QM/Wl+tyqlH//jTqCg8daTAmhAk26L2PFhcqPLlYBhYUJMZJK276qLXlHN3a83o2cg==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} peerDependencies: eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 @@ -6508,26 +7515,26 @@ packages: typescript: optional: true dependencies: - '@typescript-eslint/scope-manager': 5.48.1 - '@typescript-eslint/types': 5.48.1 - '@typescript-eslint/typescript-estree': 5.48.1_typescript@4.9.4 + '@typescript-eslint/scope-manager': 5.56.0 + '@typescript-eslint/types': 5.56.0 + '@typescript-eslint/typescript-estree': 5.56.0_typescript@4.9.4 debug: 4.3.4 - eslint: 8.31.0 + eslint: 8.36.0 typescript: 4.9.4 transitivePeerDependencies: - supports-color dev: true - /@typescript-eslint/scope-manager/5.48.1: - resolution: {integrity: sha512-S035ueRrbxRMKvSTv9vJKIWgr86BD8s3RqoRZmsSh/s8HhIs90g6UlK8ZabUSjUZQkhVxt7nmZ63VJ9dcZhtDQ==} + /@typescript-eslint/scope-manager/5.56.0: + resolution: {integrity: sha512-jGYKyt+iBakD0SA5Ww8vFqGpoV2asSjwt60Gl6YcO8ksQ8s2HlUEyHBMSa38bdLopYqGf7EYQMUIGdT/Luw+sw==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} dependencies: - '@typescript-eslint/types': 5.48.1 - '@typescript-eslint/visitor-keys': 5.48.1 + '@typescript-eslint/types': 5.56.0 + '@typescript-eslint/visitor-keys': 5.56.0 dev: true - /@typescript-eslint/type-utils/5.48.1_iukboom6ndih5an6iafl45j2fe: - resolution: {integrity: sha512-Hyr8HU8Alcuva1ppmqSYtM/Gp0q4JOp1F+/JH5D1IZm/bUBrV0edoewQZiEc1r6I8L4JL21broddxK8HAcZiqQ==} + /@typescript-eslint/type-utils/5.56.0_zjoiagdsdpivymr5idw66lxttq: + resolution: {integrity: sha512-8WxgOgJjWRy6m4xg9KoSHPzBNZeQbGlQOH7l2QEhQID/+YseaFxg5J/DLwWSsi9Axj4e/cCiKx7PVzOq38tY4A==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} peerDependencies: eslint: '*' @@ -6536,23 +7543,23 @@ packages: typescript: optional: true dependencies: - '@typescript-eslint/typescript-estree': 5.48.1_typescript@4.9.4 - '@typescript-eslint/utils': 5.48.1_iukboom6ndih5an6iafl45j2fe + '@typescript-eslint/typescript-estree': 5.56.0_typescript@4.9.4 + '@typescript-eslint/utils': 5.56.0_zjoiagdsdpivymr5idw66lxttq debug: 4.3.4 - eslint: 8.31.0 + eslint: 8.36.0 tsutils: 3.21.0_typescript@4.9.4 typescript: 4.9.4 transitivePeerDependencies: - supports-color dev: true - /@typescript-eslint/types/5.48.1: - resolution: {integrity: sha512-xHyDLU6MSuEEdIlzrrAerCGS3T7AA/L8Hggd0RCYBi0w3JMvGYxlLlXHeg50JI9Tfg5MrtsfuNxbS/3zF1/ATg==} + /@typescript-eslint/types/5.56.0: + resolution: {integrity: sha512-JyAzbTJcIyhuUhogmiu+t79AkdnqgPUEsxMTMc/dCZczGMJQh1MK2wgrju++yMN6AWroVAy2jxyPcPr3SWCq5w==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} dev: true - /@typescript-eslint/typescript-estree/5.48.1_typescript@4.9.4: - resolution: {integrity: sha512-Hut+Osk5FYr+sgFh8J/FHjqX6HFcDzTlWLrFqGoK5kVUN3VBHF/QzZmAsIXCQ8T/W9nQNBTqalxi1P3LSqWnRA==} + /@typescript-eslint/typescript-estree/5.56.0_typescript@4.9.4: + resolution: {integrity: sha512-41CH/GncsLXOJi0jb74SnC7jVPWeVJ0pxQj8bOjH1h2O26jXN3YHKDT1ejkVz5YeTEQPeLCCRY0U2r68tfNOcg==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} peerDependencies: typescript: '*' @@ -6560,8 +7567,8 @@ packages: typescript: optional: true dependencies: - '@typescript-eslint/types': 5.48.1 - '@typescript-eslint/visitor-keys': 5.48.1 + '@typescript-eslint/types': 5.56.0 + '@typescript-eslint/visitor-keys': 5.56.0 debug: 4.3.4 globby: 11.1.0 is-glob: 4.0.3 @@ -6572,36 +7579,36 @@ packages: - supports-color dev: true - /@typescript-eslint/utils/5.48.1_iukboom6ndih5an6iafl45j2fe: - resolution: {integrity: sha512-SmQuSrCGUOdmGMwivW14Z0Lj8dxG1mOFZ7soeJ0TQZEJcs3n5Ndgkg0A4bcMFzBELqLJ6GTHnEU+iIoaD6hFGA==} + /@typescript-eslint/utils/5.56.0_zjoiagdsdpivymr5idw66lxttq: + resolution: {integrity: sha512-XhZDVdLnUJNtbzaJeDSCIYaM+Tgr59gZGbFuELgF7m0IY03PlciidS7UQNKLE0+WpUTn1GlycEr6Ivb/afjbhA==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} peerDependencies: eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 dependencies: + '@eslint-community/eslint-utils': 4.3.0_eslint@8.36.0 '@types/json-schema': 7.0.11 '@types/semver': 7.3.13 - '@typescript-eslint/scope-manager': 5.48.1 - '@typescript-eslint/types': 5.48.1 - '@typescript-eslint/typescript-estree': 5.48.1_typescript@4.9.4 - eslint: 8.31.0 + '@typescript-eslint/scope-manager': 5.56.0 + '@typescript-eslint/types': 5.56.0 + '@typescript-eslint/typescript-estree': 5.56.0_typescript@4.9.4 + eslint: 8.36.0 eslint-scope: 5.1.1 - eslint-utils: 3.0.0_eslint@8.31.0 semver: 7.3.8 transitivePeerDependencies: - supports-color - typescript dev: true - /@typescript-eslint/visitor-keys/5.48.1: - resolution: {integrity: sha512-Ns0XBwmfuX7ZknznfXozgnydyR8F6ev/KEGePP4i74uL3ArsKbEhJ7raeKr1JSa997DBDwol/4a0Y+At82c9dA==} + /@typescript-eslint/visitor-keys/5.56.0: + resolution: {integrity: sha512-1mFdED7u5bZpX6Xxf5N9U2c18sb+8EvU3tyOIj6LQZ5OOvnmj8BVeNNP603OFPm5KkS1a7IvCIcwrdHXaEMG/Q==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} dependencies: - '@typescript-eslint/types': 5.48.1 + '@typescript-eslint/types': 5.56.0 eslint-visitor-keys: 3.3.0 dev: true - /@ungap/structured-clone/1.0.1: - resolution: {integrity: sha512-zKVyTt6rELvPXYwcVPTJcPFtY0AckN5A7xWuc7owBqR0FdtuDYhE9MZZUi6IY1kZUQFSXV1B3UOOIyLkVHYd2w==} + /@ungap/structured-clone/1.0.2: + resolution: {integrity: sha512-06PHwE0K24Wi8FBmC8MuMi/+nQ3DTpcXYL3y/IaZz2ScY2GOJXOe8fyMykVXyLOKxpL2Y0frAnJZmm65OxzMLQ==} dev: false /@unimodules/core/7.1.2: @@ -6741,8 +7748,8 @@ packages: resolution: {integrity: sha512-GpSwvyXOcOOlV70vbnzjj4fW5xW/FdUF6nQEt1ENy7m4ZCczi1+/buVUPAqmGfqznsORNFzUMjctTIp8a9tuCQ==} dev: true - /@yarnpkg/parsers/3.0.0-rc.37: - resolution: {integrity: sha512-MPKHrD11PgNExFMCXcgA/MnfYbITbiHYQjB8TNZmE4t9Z+zRCB1RTJKOppp8K8QOf+OEo8CybufVNcZZMLt2tw==} + /@yarnpkg/parsers/3.0.0-rc.40: + resolution: {integrity: sha512-sKbi5XhHKXCjzb5m0ftGuQuODM2iUXEsrCSl8MkKexNWHepCmU3IPaGTPC5gHZy4sOvsb9JqTLaZEez+kDzG+Q==} engines: {node: '>=14.15.0'} dependencies: js-yaml: 3.14.1 @@ -6820,24 +7827,24 @@ packages: /acorn-globals/7.0.1: resolution: {integrity: sha512-umOSDSDrfHbTNPuNpC2NSnnA3LUrqpevPb4T9jRx4MagXNS0rs+gwiTcAvqCRmsD6utzsrzNt+ebm00SNWiC3Q==} dependencies: - acorn: 8.8.1 + acorn: 8.8.2 acorn-walk: 8.2.0 dev: true - /acorn-import-assertions/1.8.0_acorn@8.8.1: + /acorn-import-assertions/1.8.0_acorn@8.8.2: resolution: {integrity: sha512-m7VZ3jwz4eK6A4Vtt8Ew1/mNbP24u0FhdyfA7fSvnJR6LMdfOYnmuIrrJAgrYfYJ10F/otaHTtrtrtmHdMNzEw==} peerDependencies: acorn: ^8 dependencies: - acorn: 8.8.1 + acorn: 8.8.2 dev: true - /acorn-jsx/5.3.2_acorn@8.8.1: + /acorn-jsx/5.3.2_acorn@8.8.2: resolution: {integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==} peerDependencies: acorn: ^6.0.0 || ^7.0.0 || ^8.0.0 dependencies: - acorn: 8.8.1 + acorn: 8.8.2 dev: true /acorn-node/1.8.2: @@ -6864,8 +7871,8 @@ packages: hasBin: true dev: true - /acorn/8.8.1: - resolution: {integrity: sha512-7zFpHzhnqYKrkYdUjF1HI1bzd0VygEGX8lFk4k5zVMqHEoES+P+7TKI+EvLO9WVMJ8eekdO0aDEK044xTXwPPA==} + /acorn/8.8.2: + resolution: {integrity: sha512-xjIYgE8HBrkpd/sJqOGNspf8uHG+NOHGOw6a/Urj8taM2EXfdNAH2oFcPeIFfsv3+kz/mJrS5VuMqbNLjCa2vw==} engines: {node: '>=0.4.0'} hasBin: true dev: true @@ -6898,12 +7905,12 @@ packages: transitivePeerDependencies: - supports-color - /agentkeepalive/4.2.1: - resolution: {integrity: sha512-Zn4cw2NEqd+9fiSVWMscnjyQ1a8Yfoc5oBajLeo5w+YBHgDUcEBY2hS4YpTz6iN5f/2zQiktcuM6tS8x1p9dpA==} + /agentkeepalive/4.3.0: + resolution: {integrity: sha512-7Epl1Blf4Sy37j4v9f9FjICCh4+KAQOyXgHEwlyBiAQLbhKdq/i2QQU3amQalS/wPhdPzDXPL5DMR5bkn+YeWg==} engines: {node: '>= 8.0.0'} dependencies: debug: 4.3.4 - depd: 1.1.2 + depd: 2.0.0 humanize-ms: 1.2.1 transitivePeerDependencies: - supports-color @@ -6985,11 +7992,11 @@ packages: type-fest: 1.4.0 dev: true - /ansi-escapes/6.0.0: - resolution: {integrity: sha512-IG23inYII3dWlU2EyiAiGj6Bwal5GzsgPMwjYGvc1HPE2dgbj4ZB5ToWBKSquKw74nB3TIuOwaI6/jSULzfgrw==} + /ansi-escapes/6.1.0: + resolution: {integrity: sha512-bQyg9bzRntwR/8b89DOEhGwctcwCrbWW/TuqTQnpqpy5Fz3aovcOTj5i8NJV6AHc8OGNdMaqdxAWww8pz2kiKg==} engines: {node: '>=14.16'} dependencies: - type-fest: 3.5.1 + type-fest: 3.6.1 dev: false /ansi-html-community/0.0.8: @@ -7056,14 +8063,14 @@ packages: engines: {node: '>=10'} dependencies: delegates: 1.0.0 - readable-stream: 3.6.0 + readable-stream: 3.6.2 /are-we-there-yet/3.0.1: resolution: {integrity: sha512-QZW4EDmGwlYur0Yyf/b2uGucHQMa8aFUP7eu9ddR73vvhFyt4V0Vl3QHPcTNJ8l6qYOBdxgXdnBXQrHilfRQBg==} engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0} dependencies: delegates: 1.0.0 - readable-stream: 3.6.0 + readable-stream: 3.6.2 /arg/4.1.3: resolution: {integrity: sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==} @@ -7100,6 +8107,13 @@ packages: engines: {node: '>=0.10.0'} dev: true + /array-buffer-byte-length/1.0.0: + resolution: {integrity: sha512-LPuwb2P+NrQw3XhxGc36+XSvuBPopovXYTR9Ew++Du9Yb/bx5AzBfrIsBoj0EZUifjQU+sHL21sseZ3jerWO/A==} + dependencies: + call-bind: 1.0.2 + is-array-buffer: 3.0.2 + dev: true + /array-differ/3.0.0: resolution: {integrity: sha512-THtfYS6KtME/yIAhKjZ2ul7XI96lQGHRputJQHO80LAWQnuGP4iCIN8vdMRboGbIEYBwU33q8Tch1os2+X0kMg==} engines: {node: '>=8'} @@ -7121,9 +8135,9 @@ packages: engines: {node: '>= 0.4'} dependencies: call-bind: 1.0.2 - define-properties: 1.1.4 - es-abstract: 1.21.1 - get-intrinsic: 1.1.3 + define-properties: 1.2.0 + es-abstract: 1.21.2 + get-intrinsic: 1.2.0 is-string: 1.0.7 dev: true @@ -7137,8 +8151,8 @@ packages: engines: {node: '>= 0.4'} dependencies: call-bind: 1.0.2 - define-properties: 1.1.4 - es-abstract: 1.21.1 + define-properties: 1.2.0 + es-abstract: 1.21.2 es-shim-unscopables: 1.0.0 dev: true @@ -7147,8 +8161,8 @@ packages: engines: {node: '>= 0.4'} dependencies: call-bind: 1.0.2 - define-properties: 1.1.4 - es-abstract: 1.21.1 + define-properties: 1.2.0 + es-abstract: 1.21.2 es-shim-unscopables: 1.0.0 dev: true @@ -7157,8 +8171,8 @@ packages: engines: {node: '>= 0.4'} dependencies: call-bind: 1.0.2 - define-properties: 1.1.4 - es-abstract: 1.21.1 + define-properties: 1.2.0 + es-abstract: 1.21.2 es-array-method-boxes-properly: 1.0.0 is-string: 1.0.7 dev: true @@ -7167,10 +8181,10 @@ packages: resolution: {integrity: sha512-pZYPXPRl2PqWcsUs6LOMn+1f1532nEoPTYowBtqLwAW+W8vSVhkIGnmOX1t/UQjD6YGI0vcD2B1U7ZFGQH9jnQ==} dependencies: call-bind: 1.0.2 - define-properties: 1.1.4 - es-abstract: 1.21.1 + define-properties: 1.2.0 + es-abstract: 1.21.2 es-shim-unscopables: 1.0.0 - get-intrinsic: 1.1.3 + get-intrinsic: 1.2.0 dev: true /arrify/1.0.1: @@ -7227,6 +8241,7 @@ packages: /async/3.2.4: resolution: {integrity: sha512-iAB+JbDEGXhyIUavoDl9WP/Jj106Kz9DEn1DPgYw5ruDn0e3Wgi3sKFm55sASdGBNOQB8F59d9qQ7deqrHA8wQ==} + dev: true /asynckit/0.4.0: resolution: {integrity: sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==} @@ -7236,30 +8251,30 @@ packages: resolution: {integrity: sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg==} engines: {node: '>= 4.0.0'} - /autoprefixer/10.4.13: - resolution: {integrity: sha512-49vKpMqcZYsJjwotvt4+h/BCjJVnhGwcLpDt5xkcaOG3eLrG/HUYLagrihYsQ+qrIBgIzX1Rw7a6L8I/ZA1Atg==} + /autoprefixer/10.4.14: + resolution: {integrity: sha512-FQzyfOsTlwVzjHxKEqRIAdJx9niO6VCBCoEwax/VLSoQF29ggECcPuBqUMZ+u8jCZOPSy8b8/8KnuFbp0SaFZQ==} engines: {node: ^10 || ^12 || >=14} hasBin: true peerDependencies: postcss: ^8.1.0 dependencies: - browserslist: 4.21.4 - caniuse-lite: 1.0.30001442 + browserslist: 4.21.5 + caniuse-lite: 1.0.30001468 fraction.js: 4.2.0 normalize-range: 0.1.2 picocolors: 1.0.0 postcss-value-parser: 4.2.0 dev: true - /autoprefixer/10.4.13_postcss@8.4.21: - resolution: {integrity: sha512-49vKpMqcZYsJjwotvt4+h/BCjJVnhGwcLpDt5xkcaOG3eLrG/HUYLagrihYsQ+qrIBgIzX1Rw7a6L8I/ZA1Atg==} + /autoprefixer/10.4.14_postcss@8.4.21: + resolution: {integrity: sha512-FQzyfOsTlwVzjHxKEqRIAdJx9niO6VCBCoEwax/VLSoQF29ggECcPuBqUMZ+u8jCZOPSy8b8/8KnuFbp0SaFZQ==} engines: {node: ^10 || ^12 || >=14} hasBin: true peerDependencies: postcss: ^8.1.0 dependencies: - browserslist: 4.21.4 - caniuse-lite: 1.0.30001442 + browserslist: 4.21.5 + caniuse-lite: 1.0.30001468 fraction.js: 4.2.0 normalize-range: 0.1.2 picocolors: 1.0.0 @@ -7271,8 +8286,8 @@ packages: resolution: {integrity: sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw==} engines: {node: '>= 0.4'} - /axe-core/4.6.2: - resolution: {integrity: sha512-b1WlTV8+XKLj9gZy2DZXgQiyDp9xkkoe2a6U6UbYccScq2wgH/YwCeI2/Jq2mgo0HzQxqJOjWZBLeA/mqsk5Mg==} + /axe-core/4.6.3: + resolution: {integrity: sha512-/BQzOX780JhsxDnPpH4ZiyrJAzcd8AfzFPkv+89veFSr1rcMjuq2JDCwypKaPeB6ljHp9KjXhPpjgCvQlWYuqg==} engines: {node: '>=4'} dev: true @@ -7293,8 +8308,8 @@ packages: - debug dev: true - /axios/1.2.6: - resolution: {integrity: sha512-rC/7F08XxZwjMV4iuWv+JpD3E0Ksqg9nac4IIg6RwNuF0JTeWoCo/mBNG54+tNhhI11G3/VDRbdDQTs9hGp4pQ==} + /axios/1.3.4: + resolution: {integrity: sha512-toYm+Bsyl6VC5wSkfkbbNB6ROv7KY93PEBBL6xyDczaIHasAiv4wPqQ/c4RjoQzipxRD2W5g21cOqQulZ7rHwQ==} dependencies: follow-redirects: 1.15.2 form-data: 4.0.0 @@ -7321,20 +8336,20 @@ packages: b64-lite: 1.4.0 dev: false - /babel-jest/27.5.1_@babel+core@7.20.12: + /babel-jest/27.5.1_@babel+core@7.21.3: resolution: {integrity: sha512-cdQ5dXjGRd0IBRATiQ4mZGlGlRE8kJpjPOixdNRdT+m3UcNqmYWN6rK6nvtXYfY3D76cb8s/O1Ss8ea24PIwcg==} engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} peerDependencies: '@babel/core': ^7.8.0 dependencies: - '@babel/core': 7.20.12 + '@babel/core': 7.21.3 '@jest/transform': 27.5.1 '@jest/types': 27.5.1 - '@types/babel__core': 7.1.20 + '@types/babel__core': 7.20.0 babel-plugin-istanbul: 6.1.1 - babel-preset-jest: 27.5.1_@babel+core@7.20.12 + babel-preset-jest: 27.5.1_@babel+core@7.21.3 chalk: 4.1.2 - graceful-fs: 4.2.10 + graceful-fs: 4.2.11 slash: 3.0.0 transitivePeerDependencies: - supports-color @@ -7347,47 +8362,47 @@ packages: '@babel/core': ^7.8.0 dependencies: '@jest/transform': 29.5.0 - '@types/babel__core': 7.1.20 + '@types/babel__core': 7.20.0 babel-plugin-istanbul: 6.1.1 babel-preset-jest: 29.5.0 chalk: 4.1.2 - graceful-fs: 4.2.10 + graceful-fs: 4.2.11 slash: 3.0.0 transitivePeerDependencies: - supports-color dev: true - /babel-jest/29.5.0_@babel+core@7.20.12: + /babel-jest/29.5.0_@babel+core@7.21.3: resolution: {integrity: sha512-mA4eCDh5mSo2EcA9xQjVTpmbbNk32Zb3Q3QFQsNhaK56Q+yoXowzFodLux30HRgyOho5rsQ6B0P9QpMkvvnJ0Q==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} peerDependencies: '@babel/core': ^7.8.0 dependencies: - '@babel/core': 7.20.12 + '@babel/core': 7.21.3 '@jest/transform': 29.5.0 - '@types/babel__core': 7.1.20 + '@types/babel__core': 7.20.0 babel-plugin-istanbul: 6.1.1 - babel-preset-jest: 29.5.0_@babel+core@7.20.12 + babel-preset-jest: 29.5.0_@babel+core@7.21.3 chalk: 4.1.2 - graceful-fs: 4.2.10 + graceful-fs: 4.2.11 slash: 3.0.0 transitivePeerDependencies: - supports-color dev: true - /babel-loader/8.3.0_la66t7xldg4uecmyawueag5wkm: + /babel-loader/8.3.0_h5x7dh6zbbyopr7jvxivhylqpa: resolution: {integrity: sha512-H8SvsMF+m9t15HNLMipppzkC+Y2Yq+v3SonZyU70RBL/h1gxPkH08Ot8pEE9Z4Kd+czyWJClmFS8qzIP9OZ04Q==} engines: {node: '>= 8.9'} peerDependencies: '@babel/core': ^7.0.0 webpack: '>=2' dependencies: - '@babel/core': 7.20.12 + '@babel/core': 7.21.3 find-cache-dir: 3.3.2 loader-utils: 2.0.4 make-dir: 3.1.0 schema-utils: 2.7.1 - webpack: 5.75.0 + webpack: 5.76.2 dev: true /babel-plugin-istanbul/6.1.1: @@ -7408,8 +8423,8 @@ packages: engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} dependencies: '@babel/template': 7.20.7 - '@babel/types': 7.20.7 - '@types/babel__core': 7.1.20 + '@babel/types': 7.21.3 + '@types/babel__core': 7.20.0 '@types/babel__traverse': 7.18.3 dev: true @@ -7418,8 +8433,8 @@ packages: engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: '@babel/template': 7.20.7 - '@babel/types': 7.20.7 - '@types/babel__core': 7.1.20 + '@babel/types': 7.21.3 + '@types/babel__core': 7.20.0 '@types/babel__traverse': 7.18.3 dev: true @@ -7427,51 +8442,51 @@ packages: resolution: {integrity: sha512-Cg7TFGpIr01vOQNODXOOaGz2NpCU5gl8x1qJFbb6hbZxR7XrcE2vtbAsTAbJ7/xwJtUuJEw8K8Zr/AE0LHlesg==} engines: {node: '>=10', npm: '>=6'} dependencies: - '@babel/runtime': 7.20.7 + '@babel/runtime': 7.21.0 cosmiconfig: 7.1.0 resolve: 1.22.1 dev: true - /babel-plugin-named-asset-import/0.3.8_@babel+core@7.20.12: + /babel-plugin-named-asset-import/0.3.8_@babel+core@7.21.3: resolution: {integrity: sha512-WXiAc++qo7XcJ1ZnTYGtLxmBCVbddAml3CEXgWaBzNzLNoxtQ8AiGEFDMOhot9XjTCQbvP5E77Fj9Gk924f00Q==} peerDependencies: '@babel/core': ^7.1.0 dependencies: - '@babel/core': 7.20.12 + '@babel/core': 7.21.3 dev: true - /babel-plugin-polyfill-corejs2/0.3.3_@babel+core@7.20.12: + /babel-plugin-polyfill-corejs2/0.3.3_@babel+core@7.21.3: resolution: {integrity: sha512-8hOdmFYFSZhqg2C/JgLUQ+t52o5nirNwaWM2B9LWteozwIvM14VSwdsCAUET10qT+kmySAlseadmfeeSWFCy+Q==} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/compat-data': 7.20.10 - '@babel/core': 7.20.12 - '@babel/helper-define-polyfill-provider': 0.3.3_@babel+core@7.20.12 + '@babel/compat-data': 7.21.0 + '@babel/core': 7.21.3 + '@babel/helper-define-polyfill-provider': 0.3.3_@babel+core@7.21.3 semver: 6.3.0 transitivePeerDependencies: - supports-color dev: true - /babel-plugin-polyfill-corejs3/0.6.0_@babel+core@7.20.12: + /babel-plugin-polyfill-corejs3/0.6.0_@babel+core@7.21.3: resolution: {integrity: sha512-+eHqR6OPcBhJOGgsIar7xoAB1GcSwVUA3XjAd7HJNzOXT4wv6/H7KIdA/Nc60cvUlDbKApmqNvD1B1bzOt4nyA==} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.20.12 - '@babel/helper-define-polyfill-provider': 0.3.3_@babel+core@7.20.12 - core-js-compat: 3.27.1 + '@babel/core': 7.21.3 + '@babel/helper-define-polyfill-provider': 0.3.3_@babel+core@7.21.3 + core-js-compat: 3.29.1 transitivePeerDependencies: - supports-color dev: true - /babel-plugin-polyfill-regenerator/0.4.1_@babel+core@7.20.12: + /babel-plugin-polyfill-regenerator/0.4.1_@babel+core@7.21.3: resolution: {integrity: sha512-NtQGmyQDXjQqQ+IzRkBVwEOz9lQ4zxAQZgoAYEtU9dJjnl1Oc98qnN7jcp+bE7O7aYzVpavXE3/VKXNzUbh7aw==} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.20.12 - '@babel/helper-define-polyfill-provider': 0.3.3_@babel+core@7.20.12 + '@babel/core': 7.21.3 + '@babel/helper-define-polyfill-provider': 0.3.3_@babel+core@7.21.3 transitivePeerDependencies: - supports-color dev: true @@ -7499,35 +8514,35 @@ packages: '@babel/plugin-syntax-top-level-await': 7.14.5 dev: true - /babel-preset-current-node-syntax/1.0.1_@babel+core@7.20.12: + /babel-preset-current-node-syntax/1.0.1_@babel+core@7.21.3: resolution: {integrity: sha512-M7LQ0bxarkxQoN+vz5aJPsLBn77n8QgTFmo8WK0/44auK2xlCXrYcUxHFxgU7qW5Yzw/CjmLRK2uJzaCd7LvqQ==} peerDependencies: '@babel/core': ^7.0.0 dependencies: - '@babel/core': 7.20.12 - '@babel/plugin-syntax-async-generators': 7.8.4_@babel+core@7.20.12 - '@babel/plugin-syntax-bigint': 7.8.3_@babel+core@7.20.12 - '@babel/plugin-syntax-class-properties': 7.12.13_@babel+core@7.20.12 - '@babel/plugin-syntax-import-meta': 7.10.4_@babel+core@7.20.12 - '@babel/plugin-syntax-json-strings': 7.8.3_@babel+core@7.20.12 - '@babel/plugin-syntax-logical-assignment-operators': 7.10.4_@babel+core@7.20.12 - '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3_@babel+core@7.20.12 - '@babel/plugin-syntax-numeric-separator': 7.10.4_@babel+core@7.20.12 - '@babel/plugin-syntax-object-rest-spread': 7.8.3_@babel+core@7.20.12 - '@babel/plugin-syntax-optional-catch-binding': 7.8.3_@babel+core@7.20.12 - '@babel/plugin-syntax-optional-chaining': 7.8.3_@babel+core@7.20.12 - '@babel/plugin-syntax-top-level-await': 7.14.5_@babel+core@7.20.12 - dev: true - - /babel-preset-jest/27.5.1_@babel+core@7.20.12: + '@babel/core': 7.21.3 + '@babel/plugin-syntax-async-generators': 7.8.4_@babel+core@7.21.3 + '@babel/plugin-syntax-bigint': 7.8.3_@babel+core@7.21.3 + '@babel/plugin-syntax-class-properties': 7.12.13_@babel+core@7.21.3 + '@babel/plugin-syntax-import-meta': 7.10.4_@babel+core@7.21.3 + '@babel/plugin-syntax-json-strings': 7.8.3_@babel+core@7.21.3 + '@babel/plugin-syntax-logical-assignment-operators': 7.10.4_@babel+core@7.21.3 + '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3_@babel+core@7.21.3 + '@babel/plugin-syntax-numeric-separator': 7.10.4_@babel+core@7.21.3 + '@babel/plugin-syntax-object-rest-spread': 7.8.3_@babel+core@7.21.3 + '@babel/plugin-syntax-optional-catch-binding': 7.8.3_@babel+core@7.21.3 + '@babel/plugin-syntax-optional-chaining': 7.8.3_@babel+core@7.21.3 + '@babel/plugin-syntax-top-level-await': 7.14.5_@babel+core@7.21.3 + dev: true + + /babel-preset-jest/27.5.1_@babel+core@7.21.3: resolution: {integrity: sha512-Nptf2FzlPCWYuJg41HBqXVT8ym6bXOevuCTbhxlUpjwtysGaIWFvDEjp4y+G7fl13FgOdjs7P/DmErqH7da0Ag==} engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} peerDependencies: '@babel/core': ^7.0.0 dependencies: - '@babel/core': 7.20.12 + '@babel/core': 7.21.3 babel-plugin-jest-hoist: 27.5.1 - babel-preset-current-node-syntax: 1.0.1_@babel+core@7.20.12 + babel-preset-current-node-syntax: 1.0.1_@babel+core@7.21.3 dev: true /babel-preset-jest/29.5.0: @@ -7540,35 +8555,35 @@ packages: babel-preset-current-node-syntax: 1.0.1 dev: true - /babel-preset-jest/29.5.0_@babel+core@7.20.12: + /babel-preset-jest/29.5.0_@babel+core@7.21.3: resolution: {integrity: sha512-JOMloxOqdiBSxMAzjRaH023/vvcaSaec49zvg+2LmNsktC7ei39LTJGw02J+9uUtTZUq6xbLyJ4dxe9sSmIuAg==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} peerDependencies: '@babel/core': ^7.0.0 dependencies: - '@babel/core': 7.20.12 + '@babel/core': 7.21.3 babel-plugin-jest-hoist: 29.5.0 - babel-preset-current-node-syntax: 1.0.1_@babel+core@7.20.12 + babel-preset-current-node-syntax: 1.0.1_@babel+core@7.21.3 dev: true /babel-preset-react-app/10.0.1: resolution: {integrity: sha512-b0D9IZ1WhhCWkrTXyFuIIgqGzSkRIH5D5AmB0bXbzYAB1OBAwHcUeyWW2LorutLWF5btNo/N7r/cIdmvvKJlYg==} dependencies: - '@babel/core': 7.20.12 - '@babel/plugin-proposal-class-properties': 7.18.6_@babel+core@7.20.12 - '@babel/plugin-proposal-decorators': 7.20.7_@babel+core@7.20.12 - '@babel/plugin-proposal-nullish-coalescing-operator': 7.18.6_@babel+core@7.20.12 - '@babel/plugin-proposal-numeric-separator': 7.18.6_@babel+core@7.20.12 - '@babel/plugin-proposal-optional-chaining': 7.20.7_@babel+core@7.20.12 - '@babel/plugin-proposal-private-methods': 7.18.6_@babel+core@7.20.12 - '@babel/plugin-proposal-private-property-in-object': 7.20.5_@babel+core@7.20.12 - '@babel/plugin-transform-flow-strip-types': 7.19.0_@babel+core@7.20.12 - '@babel/plugin-transform-react-display-name': 7.18.6_@babel+core@7.20.12 - '@babel/plugin-transform-runtime': 7.19.6_@babel+core@7.20.12 - '@babel/preset-env': 7.20.2_@babel+core@7.20.12 - '@babel/preset-react': 7.18.6_@babel+core@7.20.12 - '@babel/preset-typescript': 7.18.6_@babel+core@7.20.12 - '@babel/runtime': 7.20.7 + '@babel/core': 7.21.3 + '@babel/plugin-proposal-class-properties': 7.18.6_@babel+core@7.21.3 + '@babel/plugin-proposal-decorators': 7.21.0_@babel+core@7.21.3 + '@babel/plugin-proposal-nullish-coalescing-operator': 7.18.6_@babel+core@7.21.3 + '@babel/plugin-proposal-numeric-separator': 7.18.6_@babel+core@7.21.3 + '@babel/plugin-proposal-optional-chaining': 7.21.0_@babel+core@7.21.3 + '@babel/plugin-proposal-private-methods': 7.18.6_@babel+core@7.21.3 + '@babel/plugin-proposal-private-property-in-object': 7.21.0_@babel+core@7.21.3 + '@babel/plugin-transform-flow-strip-types': 7.21.0_@babel+core@7.21.3 + '@babel/plugin-transform-react-display-name': 7.18.6_@babel+core@7.21.3 + '@babel/plugin-transform-runtime': 7.21.0_@babel+core@7.21.3 + '@babel/preset-env': 7.20.2_@babel+core@7.21.3 + '@babel/preset-react': 7.18.6_@babel+core@7.21.3 + '@babel/preset-typescript': 7.18.6_@babel+core@7.21.3 + '@babel/runtime': 7.21.0 babel-plugin-macros: 3.1.0 babel-plugin-transform-react-remove-prop-types: 0.4.24 transitivePeerDependencies: @@ -7664,7 +8679,7 @@ packages: dependencies: buffer: 5.7.1 inherits: 2.0.4 - readable-stream: 3.6.0 + readable-stream: 3.6.2 dev: true /bl/5.1.0: @@ -7672,7 +8687,7 @@ packages: dependencies: buffer: 6.0.3 inherits: 2.0.4 - readable-stream: 3.6.0 + readable-stream: 3.6.2 dev: false /blakejs/1.2.1: @@ -7699,7 +8714,7 @@ packages: engines: {node: '>= 0.8', npm: 1.2.8000 || >= 1.4.16} dependencies: bytes: 3.1.2 - content-type: 1.0.4 + content-type: 1.0.5 debug: 2.6.9 depd: 2.0.0 destroy: 1.2.0 @@ -7737,13 +8752,18 @@ packages: ieee754: 1.2.1 iso-url: 1.2.1 json-text-sequence: 0.3.0 - readable-stream: 3.6.0 + readable-stream: 3.6.2 dev: true /bottleneck/2.19.5: resolution: {integrity: sha512-VHiNCbI1lKdl44tGrhNfU3lup0Tj/ZBMJB5/2ZbNXRCPuRCO7ed2mgcK4r17y+KB2EfuYuRaVlwNbAeaWGSpbw==} dev: true + /bowser/2.11.0: + resolution: {integrity: sha512-AlcaJBi/pqqJBIQ8U9Mcpc9i8Aqxn88Skv5d+xBX006BY5u8N3mGLHa5Lgppa7L/HfwgwLgZ6NYs+Ag6uUmJRA==} + dev: true + optional: true + /brace-expansion/1.1.11: resolution: {integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==} dependencies: @@ -7813,19 +8833,19 @@ packages: elliptic: 6.5.4 inherits: 2.0.4 parse-asn1: 5.1.6 - readable-stream: 3.6.0 + readable-stream: 3.6.2 safe-buffer: 5.2.1 dev: false - /browserslist/4.21.4: - resolution: {integrity: sha512-CBHJJdDmgjl3daYjN5Cp5kbTf1mUhZoS+beLklHIvkOWscs83YAhLlF3Wsh/lciQYAcbBJgTOD44VtG31ZM4Hw==} + /browserslist/4.21.5: + resolution: {integrity: sha512-tUkiguQGW7S3IhB7N+c2MV/HZPSCPAAiYBZXLsBhFB/PCy6ZKKsZrmBayHV9fdGV/ARIfJ14NkxKzRDjvp7L6w==} engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} hasBin: true dependencies: - caniuse-lite: 1.0.30001442 - electron-to-chromium: 1.4.284 - node-releases: 2.0.8 - update-browserslist-db: 1.0.10_browserslist@4.21.4 + caniuse-lite: 1.0.30001468 + electron-to-chromium: 1.4.333 + node-releases: 2.0.10 + update-browserslist-db: 1.0.10_browserslist@4.21.5 dev: true /bs-logger/0.2.6: @@ -7841,6 +8861,13 @@ packages: node-int64: 0.4.0 dev: true + /bson/4.7.2: + resolution: {integrity: sha512-Ry9wCtIZ5kGqkJoi6aD8KjxFZEx78guTQDnpXWiNthsxzrxAK/i8E6pCHAIZTbaEFWcOCvbecMukfK7XUvyLpQ==} + engines: {node: '>=6.9.0'} + dependencies: + buffer: 5.7.1 + dev: true + /buffer-crc32/0.2.13: resolution: {integrity: sha512-VO9Ht/+p3SN7SKWqcrgEzjGbRSJYTx+Q1pTQC0wrWqHx0vpJraQ6GtHx8tvcg1rlK1byhU5gccxgOgj7B0TDkQ==} dev: true @@ -7943,7 +8970,7 @@ packages: fs-minipass: 2.1.0 glob: 8.1.0 infer-owner: 1.0.4 - lru-cache: 7.14.1 + lru-cache: 7.18.3 minipass: 3.3.6 minipass-collect: 1.0.2 minipass-flush: 1.0.5 @@ -7966,7 +8993,7 @@ packages: resolution: {integrity: sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==} dependencies: function-bind: 1.1.1 - get-intrinsic: 1.1.3 + get-intrinsic: 1.2.0 /callsites/3.1.0: resolution: {integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==} @@ -8007,14 +9034,14 @@ packages: /caniuse-api/3.0.0: resolution: {integrity: sha512-bsTwuIg/BZZK/vreVTYYbSWoe2F+71P7K5QGEX+pT250DZbfU1MQ5prOKpPR+LL6uWKK3KMwMCAS74QB3Um1uw==} dependencies: - browserslist: 4.21.4 - caniuse-lite: 1.0.30001442 + browserslist: 4.21.5 + caniuse-lite: 1.0.30001468 lodash.memoize: 4.1.2 lodash.uniq: 4.5.0 dev: true - /caniuse-lite/1.0.30001442: - resolution: {integrity: sha512-239m03Pqy0hwxYPYR5JwOIxRJfLTWtle9FV8zosfV5pHg+/51uD4nxcUlM8+mWWGfwKtt8lJNHnD3cWw9VZ6ow==} + /caniuse-lite/1.0.30001468: + resolution: {integrity: sha512-zgAo8D5kbOyUcRAgSmgyuvBkjrGk5CGYG5TYgFdpQv+ywcyEpo1LOWoG8YmoflGnh+V+UsNuKYedsoYs0hzV5A==} dev: true /canonicalize/1.0.1: @@ -8037,6 +9064,10 @@ packages: engines: {node: '>=4'} dev: true + /case/1.6.3: + resolution: {integrity: sha512-mzDSXIPaFwVDvZAHqZ9VlbyF4yyXRuX6IvB06WvPYkqJVO24kX1PPhv9bfpKNFZyxYFmmgo03HUiD8iklmJYRQ==} + engines: {node: '>= 0.8.0'} + /catering/2.1.1: resolution: {integrity: sha512-K7Qy8O9p76sL3/3m7/zLKbRkyOlSZAgzEaLhyj2mXS8PsCud2Eo4hAb8aLtZqHh0QGqLcb9dlJSu6lHRVENm1w==} engines: {node: '>=6'} @@ -8119,8 +9150,8 @@ packages: resolution: {integrity: sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ==} dev: true - /ci-info/3.7.1: - resolution: {integrity: sha512-4jYS4MOAaCIStSRwiuxc4B8MYhIe676yO1sYGzARnjXkWpmzZMMYxY6zu8WYWDhSuth5zhrQ1rhNSibyyvv4/w==} + /ci-info/3.8.0: + resolution: {integrity: sha512-eXTggHWSooYhq49F2opQhuHWgzucfF2YgODK4e1566GQs5BIfP30B0oenwBJHfWxAs2fyPB1s7Mg949zLf61Yw==} engines: {node: '>=8'} dev: true @@ -8135,8 +9166,8 @@ packages: resolution: {integrity: sha512-cOU9usZw8/dXIXKtwa8pM0OTJQuJkxMN6w30csNRUerHfeQ5R6U3kkU/FtJeIf3M202OHfY2U8ccInBG7/xogA==} dev: true - /clean-css/5.3.1: - resolution: {integrity: sha512-lCr8OHhiWCTw4v8POJovCoh4T7I9U11yVsPjMWWnnMmp9ZowCxyad1Pathle/9HjaDp+fdQKjO9fQydE6RHTZg==} + /clean-css/5.3.2: + resolution: {integrity: sha512-JVJbM+f3d3Q704rF4bqQ5UUyTtuJ0JRKNbTKVEeujCCBoMdkEi+V+e8oktO9qGQNSvHrFTM6JZRXrUvGR1czww==} engines: {node: '>= 10.0'} dependencies: source-map: 0.6.1 @@ -8376,6 +9407,14 @@ packages: dev: false optional: true + /compress-brotli/1.3.8: + resolution: {integrity: sha512-lVcQsjhxhIXsuupfy9fmZUFtAIdBmXA7EGY6GBdgZ++qkM9zG4YFT8iU7FoBxzryNDMOpD1HIFHUSX4D87oqhQ==} + engines: {node: '>= 12'} + dependencies: + '@types/json-buffer': 3.0.0 + json-buffer: 3.0.1 + dev: true + /compressible/2.0.18: resolution: {integrity: sha512-AF3r7P5dWxL8MxyITRMlORQNaOA2IkAFaTr4k7BUumjPtRpGDTZpl0Pb1XCO6JeDCBdp126Cgs9sMxqSjgYyRg==} engines: {node: '>= 0.6'} @@ -8407,7 +9446,7 @@ packages: dependencies: buffer-from: 1.1.2 inherits: 2.0.4 - readable-stream: 3.6.0 + readable-stream: 3.6.2 typedarray: 0.0.6 dev: true @@ -8442,8 +9481,8 @@ packages: dependencies: safe-buffer: 5.2.1 - /content-type/1.0.4: - resolution: {integrity: sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA==} + /content-type/1.0.5: + resolution: {integrity: sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==} engines: {node: '>= 0.6'} /conventional-changelog-angular/5.0.13: @@ -8546,19 +9585,19 @@ packages: resolution: {integrity: sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw==} engines: {node: '>= 0.6'} - /core-js-compat/3.27.1: - resolution: {integrity: sha512-Dg91JFeCDA17FKnneN7oCMz4BkQ4TcffkgHP4OWwp9yx3pi7ubqMDXXSacfNak1PQqjc95skyt+YBLHQJnkJwA==} + /core-js-compat/3.29.1: + resolution: {integrity: sha512-QmchCua884D8wWskMX8tW5ydINzd8oSJVx38lx/pVkFGqztxt73GYre3pm/hyYq8bPf+MW5In4I/uRShFDsbrA==} dependencies: - browserslist: 4.21.4 + browserslist: 4.21.5 dev: true - /core-js-pure/3.27.1: - resolution: {integrity: sha512-BS2NHgwwUppfeoqOXqi08mUqS5FiZpuRuJJpKsaME7kJz0xxuk0xkhDdfMIlP/zLa80krBqss1LtD7f889heAw==} + /core-js-pure/3.29.1: + resolution: {integrity: sha512-4En6zYVi0i0XlXHVz/bi6l1XDjCqkKRq765NXuX+SnaIatlE96Odt5lMLjdxUiNI1v9OXI5DSLWYPlmTfkTktg==} requiresBuild: true dev: true - /core-js/3.27.1: - resolution: {integrity: sha512-GutwJLBChfGCpwwhbYoqfv03LAfmiz7e7D/BNxzeMxwQf10GRSzqiOjx7AmtEk+heiD/JWmBuyBPgFtx0Sg1ww==} + /core-js/3.29.1: + resolution: {integrity: sha512-+jwgnhg6cQxKYIIjGtAHq2nwUOolo9eoFZ4sHfUH09BLXBgxnH4gA0zEd+t+BO2cNB8idaBtZFcFTRjQJRJmAw==} requiresBuild: true dev: true @@ -8622,6 +9661,16 @@ packages: path-type: 4.0.0 dev: true + /cosmiconfig/8.1.3: + resolution: {integrity: sha512-/UkO2JKI18b5jVMJUp0lvKFMpa/Gye+ZgZjKD+DGEN9y7NRcf/nK1A0sp67ONmKtnDCNMS44E6jrk0Yc3bDuUw==} + engines: {node: '>=14'} + dependencies: + import-fresh: 3.3.0 + js-yaml: 4.1.0 + parse-json: 5.2.0 + path-type: 4.0.0 + dev: true + /create-ecdh/4.0.4: resolution: {integrity: sha512-mf+TCx8wWc9VpuxfP2ht0iSISLZnt0JgWlrOKZiNqyUZWnjIaCIVNQArMHnCZKfEYRg6IM7A+NeJoN8gf/Ws0A==} dependencies: @@ -8657,8 +9706,8 @@ packages: /credential-status/2.0.5: resolution: {integrity: sha512-hh0pOcRidROn4MC1wF3vNURhPEMSzm3RcpFIl5PFVj5HWgCaZy16nXmrOl5cmr50Jhp2WV48cWbNMxh4OFWU+w==} dependencies: - did-jwt: 6.11.0 - did-resolver: 4.0.1 + did-jwt: 6.11.5 + did-resolver: 4.1.0 /credentials-context/2.0.0: resolution: {integrity: sha512-/mFKax6FK26KjgV2KW2D4YqKgoJ5DVJpNt87X2Jc9IxT2HBMy7nEIlc+n7pEi+YFFe721XqrvZPd+jbyyBjsvQ==} @@ -8750,7 +9799,7 @@ packages: postcss-selector-parser: 6.0.11 dev: true - /css-loader/6.7.3_webpack@5.75.0: + /css-loader/6.7.3_webpack@5.76.2: resolution: {integrity: sha512-qhOH1KlBMnZP8FzRO6YCH9UHXQhVMcEGLyNdb7Hv2cpcmJbW0YrddO+tG1ab5nT41KpHIYGsbeHqxB9xPu1pKQ==} engines: {node: '>= 12.13.0'} peerDependencies: @@ -8764,10 +9813,10 @@ packages: postcss-modules-values: 4.0.0_postcss@8.4.21 postcss-value-parser: 4.2.0 semver: 7.3.8 - webpack: 5.75.0 + webpack: 5.76.2 dev: true - /css-minimizer-webpack-plugin/3.4.1_webpack@5.75.0: + /css-minimizer-webpack-plugin/3.4.1_webpack@5.76.2: resolution: {integrity: sha512-1u6D71zeIfgngN2XNRJefc/hY7Ybsxd74Jm4qngIXyUEk7fss3VUzuHxLAq/R8NAba4QU9OUSaMZlbpRc7bM4Q==} engines: {node: '>= 12.13.0'} peerDependencies: @@ -8786,13 +9835,13 @@ packages: esbuild: optional: true dependencies: - cssnano: 5.1.14_postcss@8.4.21 + cssnano: 5.1.15_postcss@8.4.21 jest-worker: 27.5.1 postcss: 8.4.21 schema-utils: 4.0.0 - serialize-javascript: 6.0.0 + serialize-javascript: 6.0.1 source-map: 0.6.1 - webpack: 5.75.0 + webpack: 5.76.2 dev: true /css-prefers-color-scheme/6.0.3_postcss@8.4.21: @@ -8854,8 +9903,8 @@ packages: engines: {node: '>= 6'} dev: true - /cssdb/7.2.1: - resolution: {integrity: sha512-btohrCpVaLqOoMt90aumHe6HU4c06duiYA8ymwtpGfwuZAhWKDBve/c2k+E85Jeq5iojPkeonqiKV+aLeY8QlA==} + /cssdb/7.4.1: + resolution: {integrity: sha512-0Q8NOMpXJ3iTDDbUv9grcmQAfdDx4qz+fN/+Md2FGbevT+6+bJNQ2LjB2YIUlLbpBTM32idU1Sb+tb/uGt6/XQ==} dev: true /cssesc/3.0.0: @@ -8864,8 +9913,8 @@ packages: hasBin: true dev: true - /cssnano-preset-default/5.2.13_postcss@8.4.21: - resolution: {integrity: sha512-PX7sQ4Pb+UtOWuz8A1d+Rbi+WimBIxJTRyBdgGp1J75VU0r/HFQeLnMYgHiCAp6AR4rqrc7Y4R+1Rjk3KJz6DQ==} + /cssnano-preset-default/5.2.14_postcss@8.4.21: + resolution: {integrity: sha512-t0SFesj/ZV2OTylqQVOrFgEh5uanxbO6ZAdeCrNsUQ6fVuXwYTxJPNAGvGTxHbD68ldIJNec7PyYZDBrfDQ+6A==} engines: {node: ^10 || ^12 || >=14.0} peerDependencies: postcss: ^8.2.15 @@ -8874,14 +9923,14 @@ packages: cssnano-utils: 3.1.0_postcss@8.4.21 postcss: 8.4.21 postcss-calc: 8.2.4_postcss@8.4.21 - postcss-colormin: 5.3.0_postcss@8.4.21 + postcss-colormin: 5.3.1_postcss@8.4.21 postcss-convert-values: 5.1.3_postcss@8.4.21 postcss-discard-comments: 5.1.2_postcss@8.4.21 postcss-discard-duplicates: 5.1.0_postcss@8.4.21 postcss-discard-empty: 5.1.1_postcss@8.4.21 postcss-discard-overridden: 5.1.0_postcss@8.4.21 postcss-merge-longhand: 5.1.7_postcss@8.4.21 - postcss-merge-rules: 5.1.3_postcss@8.4.21 + postcss-merge-rules: 5.1.4_postcss@8.4.21 postcss-minify-font-values: 5.1.0_postcss@8.4.21 postcss-minify-gradients: 5.1.1_postcss@8.4.21 postcss-minify-params: 5.1.4_postcss@8.4.21 @@ -8896,7 +9945,7 @@ packages: postcss-normalize-url: 5.1.0_postcss@8.4.21 postcss-normalize-whitespace: 5.1.1_postcss@8.4.21 postcss-ordered-values: 5.1.3_postcss@8.4.21 - postcss-reduce-initial: 5.1.1_postcss@8.4.21 + postcss-reduce-initial: 5.1.2_postcss@8.4.21 postcss-reduce-transforms: 5.1.0_postcss@8.4.21 postcss-svgo: 5.1.0_postcss@8.4.21 postcss-unique-selectors: 5.1.1_postcss@8.4.21 @@ -8911,14 +9960,14 @@ packages: postcss: 8.4.21 dev: true - /cssnano/5.1.14_postcss@8.4.21: - resolution: {integrity: sha512-Oou7ihiTocbKqi0J1bB+TRJIQX5RMR3JghA8hcWSw9mjBLQ5Y3RWqEDoYG3sRNlAbCIXpqMoZGbq5KDR3vdzgw==} + /cssnano/5.1.15_postcss@8.4.21: + resolution: {integrity: sha512-j+BKgDcLDQA+eDifLx0EO4XSA56b7uut3BQFH+wbSaSTuGLuiyTa/wbRYthUXX8LC9mLg+WWKe8h+qJuwTAbHw==} engines: {node: ^10 || ^12 || >=14.0} peerDependencies: postcss: ^8.2.15 dependencies: - cssnano-preset-default: 5.2.13_postcss@8.4.21 - lilconfig: 2.0.6 + cssnano-preset-default: 5.2.14_postcss@8.4.21 + lilconfig: 2.1.0 postcss: 8.4.21 yaml: 1.10.2 dev: true @@ -8975,8 +10024,8 @@ packages: engines: {node: '>= 6'} dev: false - /data-uri-to-buffer/4.0.0: - resolution: {integrity: sha512-Vr3mLBA8qWmcuschSLAOogKgQ/Jwxulv3RNE4FXnYWRGujzrRWQI4m12fQqRkwX06C0KanhLr4hK+GydchZsaA==} + /data-uri-to-buffer/4.0.1: + resolution: {integrity: sha512-0R9ikRb668HB7QDxT1vkpuUBtqc53YyAwMwGeUFKRojY/NWKvdZ+9UYtRfGmhqNbRkTSVpMbmyhXipFFv2cb/A==} engines: {node: '>= 12'} dev: true @@ -9067,10 +10116,10 @@ packages: resolution: {integrity: sha512-RdpzE0Hv4lhowpIUKKMJfeH6C1pXdtT1/it80ubgWqwI3qpuxUBpC1S4hnHg+zjnuOoDkzUtUCEEkG+XG5l3Mw==} dependencies: call-bind: 1.0.2 - es-get-iterator: 1.1.2 - get-intrinsic: 1.1.3 + es-get-iterator: 1.1.3 + get-intrinsic: 1.2.0 is-arguments: 1.1.1 - is-array-buffer: 3.0.1 + is-array-buffer: 3.0.2 is-date-object: 1.0.5 is-regex: 1.1.4 is-shared-array-buffer: 1.0.2 @@ -9094,8 +10143,8 @@ packages: resolution: {integrity: sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==} dev: true - /deepmerge/4.2.2: - resolution: {integrity: sha512-FJ3UgI4gIl+PHZm53knsuSFpE+nESMr7M4v9QcgB7S63Kj/6WqMiFQJpBBYz1Pt+66bZpP3Q7Lye0Oo9MPKEdg==} + /deepmerge/4.3.1: + resolution: {integrity: sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==} engines: {node: '>=0.10.0'} dev: true @@ -9116,8 +10165,8 @@ packages: engines: {node: '>=8'} dev: true - /define-properties/1.1.4: - resolution: {integrity: sha512-uckOqKcfaVvtBdsVkdPv3XjveQJsNQqmhXgRi8uhvWWuPYZCNlzT8qAyblUgNoXdHdjMTzAqeGjAoli8f+bzPA==} + /define-properties/1.2.0: + resolution: {integrity: sha512-xvqAVKGfT1+UAvPwKTVw/njhdQ8ZhXK4lI0bCIuCMrp2up9nPnaDftrLtmpTazqd1o+UY4zgzU+avtMbDP+ldA==} engines: {node: '>= 0.4'} dependencies: has-property-descriptors: 1.0.0 @@ -9133,7 +10182,7 @@ packages: engines: {node: '>=10'} dependencies: globby: 11.1.0 - graceful-fs: 4.2.10 + graceful-fs: 4.2.11 is-glob: 4.0.3 is-path-cwd: 2.2.0 is-path-inside: 3.0.3 @@ -9142,6 +10191,11 @@ packages: slash: 3.0.0 dev: true + /delay/5.0.0: + resolution: {integrity: sha512-ReEBKkIfe4ya47wlPYf/gu5ib6yUG0/Aez0JQZQz94kiWtRQvZIQbTiehsnwHvLSWJnQdhVeqYue7Id1dKr0qw==} + engines: {node: '>=10'} + dev: true + /delayed-stream/1.0.0: resolution: {integrity: sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==} engines: {node: '>=0.4.0'} @@ -9153,6 +10207,7 @@ packages: /depd/1.1.2: resolution: {integrity: sha512-7emPTl6Dpo6JRXOXjLRxck+FlLRX5847cLKEn00PLAgc3g2hTZZgr+e4c2v6QpSmLeFP3n5yUo7ft6avBK/5jQ==} engines: {node: '>= 0.6'} + dev: true /depd/2.0.0: resolution: {integrity: sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==} @@ -9214,7 +10269,7 @@ packages: dependencies: acorn-node: 1.8.2 defined: 1.0.1 - minimist: 1.2.7 + minimist: 1.2.8 dev: true /devtools-protocol/0.0.1082910: @@ -9228,15 +10283,15 @@ packages: wrappy: 1.0.2 dev: true - /did-jwt-vc/3.1.0: - resolution: {integrity: sha512-8N54No9RQpbDM4a/aMiGc/tZWubtH8bqi7DLnO6B62AdWaNVKeS9ddcuANztSS1yTuypyzlyeeEtCTqEzpYgjA==} + /did-jwt-vc/3.1.2: + resolution: {integrity: sha512-+3P2wsUF+61nmjnKaH6ueIlCMjz/NGP+vzu07HyBfTR/wVIALMpMLwS4Goz8uFkBidmCjr0zYJnXk+GWdGVfNg==} engines: {node: '>=14'} dependencies: - did-jwt: 6.11.0 - did-resolver: 4.0.1 + did-jwt: 6.11.5 + did-resolver: 4.1.0 - /did-jwt/6.11.0: - resolution: {integrity: sha512-/qyYzo8v/xjwyt5x3tbknjQ2L15J1JzB+0cQK5/2SgnoOoclOmtEgZoRaxG1B73VMOgyZQYLBytRT4COUVhcpw==} + /did-jwt/6.11.5: + resolution: {integrity: sha512-7Ew4rftHd2RTxLDfAjN6cz0wCMjTzmRBOtFBVuXUPguJF6ct01hJqlM1fr+IuI+bW7gH9QSeh9kDrvlOJnkf9w==} dependencies: '@stablelib/ed25519': 1.0.3 '@stablelib/random': 1.0.2 @@ -9245,14 +10300,14 @@ packages: '@stablelib/xchacha20poly1305': 1.0.1 bech32: 2.0.0 canonicalize: 1.0.8 - did-resolver: 4.0.1 + did-resolver: 4.1.0 elliptic: 6.5.4 js-sha3: 0.8.0 multiformats: 9.9.0 uint8arrays: 3.1.1 - /did-resolver/4.0.1: - resolution: {integrity: sha512-eHs2VLKhcANmh08S87PKvOauIAmSOd7nb7AlhNxcvOyDAIGQY1UfbiqI1VOW5IDKvOO6aEWY+5edOt1qrCp1Eg==} + /did-resolver/4.1.0: + resolution: {integrity: sha512-S6fWHvCXkZg2IhS4RcVHxwuyVejPR7c+a4Go0xbQ9ps5kILa8viiYQgrM4gfTyeTjJ0ekgJH9gk/BawTpmkbZA==} /didyoumean/1.2.2: resolution: {integrity: sha512-gxtyfqMg7GKyhQmb056K7M3xszy/myH8w+B4RT+QXBQsvAOdc3XymqDDPHx1BgPgsdAA5SIifona89YtRATDzw==} @@ -9263,8 +10318,8 @@ packages: engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} dev: true - /diff-sequences/29.3.1: - resolution: {integrity: sha512-hlM3QR272NXCi4pq+N4Kok4kOp6EsgOM3ZSpJI7Da3UAs+Ttsi8MRmB6trM/lhyzUxGfOgnpkHtgqm5Q/CTcfQ==} + /diff-sequences/29.4.3: + resolution: {integrity: sha512-ofrBgwpPhCD85kMKtE9RYFFq6OC1A89oW2vvgWZNCwxrUpRUILopY7lsYyMDSjc8g6U6aiO0Qubg6r4Wgt5ZnA==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dev: true @@ -9423,7 +10478,7 @@ packages: /duplexer2/0.1.4: resolution: {integrity: sha512-asLFVfWWtJ90ZyOUHMqk7/S2w2guQKxUI2itj3d92ADHhxUSbCMGi1f1cBcJ7xM1To+pE/Khbwo1yuNbMEPKeA==} dependencies: - readable-stream: 2.3.7 + readable-stream: 2.3.8 dev: true /eastasianwidth/0.2.0: @@ -9447,16 +10502,16 @@ packages: json-canonicalize: 1.0.4 dev: false - /ejs/3.1.8: - resolution: {integrity: sha512-/sXZeMlhS0ArkfX2Aw780gJzXSMPnKjtspYZv+f3NiKLlubezAHDU5+9xz6gd3/NhG3txQCo6xlglmTS+oTGEQ==} + /ejs/3.1.9: + resolution: {integrity: sha512-rC+QVNMJWv+MtPgkt0y+0rVEIdbtxVADApW9JXrUVlzHetgcyczP/E7DJmWJ4fJCZF2cPcBk0laWO9ZHMG3DmQ==} engines: {node: '>=0.10.0'} hasBin: true dependencies: jake: 10.8.5 dev: true - /electron-to-chromium/1.4.284: - resolution: {integrity: sha512-M8WEXFuKXMYMVr45fo8mq0wUrrJHheiKZf6BArTKk9ZBYCKJEOU5H8cdWgDT+qCVZf7Na4lVUaZsA+h6uA9+PA==} + /electron-to-chromium/1.4.333: + resolution: {integrity: sha512-YyE8+GKyGtPEP1/kpvqsdhD6rA/TP1DUFDN4uiU/YI52NzDxmwHkEb3qjId8hLBa5siJvG0sfC3O66501jMruQ==} dev: true /elliptic/6.5.4: @@ -9522,7 +10577,7 @@ packages: resolution: {integrity: sha512-QHTXI/sZQmko1cbDoNAa3mJ5qhWUUNAq3vR0/YiD379fWQrcfuoX1+HW2S0MTt7XmoPLapdaDKUtelUSPic7hQ==} engines: {node: '>=10.13.0'} dependencies: - graceful-fs: 4.2.10 + graceful-fs: 4.2.11 tapable: 2.2.1 dev: true @@ -9575,17 +10630,17 @@ packages: stackframe: 1.3.4 dev: true - /es-abstract/1.21.1: - resolution: {integrity: sha512-QudMsPOz86xYz/1dG1OuGBKOELjCh99IIWHLzy5znUB6j8xG2yMA7bfTV86VSqKF+Y/H08vQPR+9jyXpuC6hfg==} + /es-abstract/1.21.2: + resolution: {integrity: sha512-y/B5POM2iBnIxCiernH1G7rC9qQoM77lLIMQLuob0zhp8C56Po81+2Nj0WFKnd0pNReDTnkYryc+zhOzpEIROg==} engines: {node: '>= 0.4'} dependencies: + array-buffer-byte-length: 1.0.0 available-typed-arrays: 1.0.5 call-bind: 1.0.2 es-set-tostringtag: 2.0.1 es-to-primitive: 1.2.1 - function-bind: 1.1.1 function.prototype.name: 1.1.5 - get-intrinsic: 1.1.3 + get-intrinsic: 1.2.0 get-symbol-description: 1.0.0 globalthis: 1.0.3 gopd: 1.0.1 @@ -9593,8 +10648,8 @@ packages: has-property-descriptors: 1.0.0 has-proto: 1.0.1 has-symbols: 1.0.3 - internal-slot: 1.0.4 - is-array-buffer: 3.0.1 + internal-slot: 1.0.5 + is-array-buffer: 3.0.2 is-callable: 1.2.7 is-negative-zero: 2.0.2 is-regex: 1.1.4 @@ -9602,11 +10657,12 @@ packages: is-string: 1.0.7 is-typed-array: 1.1.10 is-weakref: 1.0.2 - object-inspect: 1.12.2 + object-inspect: 1.12.3 object-keys: 1.1.1 object.assign: 4.1.4 regexp.prototype.flags: 1.4.3 safe-regex-test: 1.0.0 + string.prototype.trim: 1.2.7 string.prototype.trimend: 1.0.6 string.prototype.trimstart: 1.0.6 typed-array-length: 1.0.4 @@ -9618,17 +10674,18 @@ packages: resolution: {integrity: sha512-wd6JXUmyHmt8T5a2xreUwKcGPq6f1f+WwIJkijUqiGcJz1qqnZgP6XIK+QyIWU5lT7imeNxUll48bziG+TSYcA==} dev: true - /es-get-iterator/1.1.2: - resolution: {integrity: sha512-+DTO8GYwbMCwbywjimwZMHp8AuYXOS2JZFWoi2AlPOS3ebnII9w/NLpNZtA7A0YLaVDw+O7KFCeoIV7OPvM7hQ==} + /es-get-iterator/1.1.3: + resolution: {integrity: sha512-sPZmqHBe6JIiTfN5q2pEi//TwxmAFHwj/XEuYjTuse78i8KxaqMTTzxPoFKuzRpDpTJ+0NAbpfenkmH2rePtuw==} dependencies: call-bind: 1.0.2 - get-intrinsic: 1.1.3 + get-intrinsic: 1.2.0 has-symbols: 1.0.3 is-arguments: 1.1.1 is-map: 2.0.2 is-set: 2.0.2 is-string: 1.0.7 isarray: 2.0.5 + stop-iteration-iterator: 1.0.0 dev: true /es-module-lexer/0.9.3: @@ -9639,7 +10696,7 @@ packages: resolution: {integrity: sha512-g3OMbtlwY3QewlqAiMLI47KywjWZoEytKr8pf6iTC8uJq5bIAH52Z9pnQ8pVL6whrCto53JZDuUIsifGeLorTg==} engines: {node: '>= 0.4'} dependencies: - get-intrinsic: 1.1.3 + get-intrinsic: 1.2.0 has: 1.0.3 has-tostringtag: 1.0.0 dev: true @@ -9698,7 +10755,7 @@ packages: source-map: 0.6.1 dev: true - /eslint-config-react-app/7.0.1_rpd7uhx77krrslgfzifo4tws2e: + /eslint-config-react-app/7.0.1_qatithnvhb32r4na6zargjwuym: resolution: {integrity: sha512-K6rNzvkIeHaTd8m/QEh1Zko0KI7BACWkkneSs6s9cKZC/J27X3eZR6Upt1jkmZ/4FK+XUOPPxMEN7+lbUXfSlA==} engines: {node: '>=14.0.0'} peerDependencies: @@ -9708,21 +10765,21 @@ packages: typescript: optional: true dependencies: - '@babel/core': 7.20.12 - '@babel/eslint-parser': 7.19.1_ucmnolur3r335ullwiyt3zl3pi + '@babel/core': 7.21.3 + '@babel/eslint-parser': 7.21.3_pxuto7xgangxlusvzceggvrmde '@rushstack/eslint-patch': 1.2.0 - '@typescript-eslint/eslint-plugin': 5.48.1_3jon24igvnqaqexgwtxk6nkpse - '@typescript-eslint/parser': 5.48.1_iukboom6ndih5an6iafl45j2fe + '@typescript-eslint/eslint-plugin': 5.56.0_eiarxozbxyyxr7kdsdkwxpixiq + '@typescript-eslint/parser': 5.56.0_zjoiagdsdpivymr5idw66lxttq babel-preset-react-app: 10.0.1 confusing-browser-globals: 1.0.11 - eslint: 8.31.0 - eslint-plugin-flowtype: 8.0.3_eslint@8.31.0 - eslint-plugin-import: 2.26.0_qdjeohovcytra7xto5vgmxssaq - eslint-plugin-jest: 25.7.0_q74whf2yk6ymbmdf7nvvgnccqy - eslint-plugin-jsx-a11y: 6.7.0_eslint@8.31.0 - eslint-plugin-react: 7.32.0_eslint@8.31.0 - eslint-plugin-react-hooks: 4.6.0_eslint@8.31.0 - eslint-plugin-testing-library: 5.9.1_iukboom6ndih5an6iafl45j2fe + eslint: 8.36.0 + eslint-plugin-flowtype: 8.0.3_eslint@8.36.0 + eslint-plugin-import: 2.27.5_cnkxirszkzb4o6ts7gbclno24e + eslint-plugin-jest: 25.7.0_2ccsxwtobso6ld6dzccxmflby4 + eslint-plugin-jsx-a11y: 6.7.1_eslint@8.36.0 + eslint-plugin-react: 7.32.2_eslint@8.36.0 + eslint-plugin-react-hooks: 4.6.0_eslint@8.36.0 + eslint-plugin-testing-library: 5.10.2_zjoiagdsdpivymr5idw66lxttq typescript: 4.9.4 transitivePeerDependencies: - '@babel/plugin-syntax-flow' @@ -9733,16 +10790,17 @@ packages: - supports-color dev: true - /eslint-import-resolver-node/0.3.6: - resolution: {integrity: sha512-0En0w03NRVMn9Uiyn8YRPDKvWjxCWkslUEhGNTdGx15RvPJYQ+lbOlqrlNI2vEAs4pDYK4f/HN2TbDmk5TP0iw==} + /eslint-import-resolver-node/0.3.7: + resolution: {integrity: sha512-gozW2blMLJCeFpBwugLTGyvVjNoeo1knonXAcatC6bjPBZitotxdWf7Gimr25N4c0AAOo4eOUfaG82IJPDpqCA==} dependencies: debug: 3.2.7 + is-core-module: 2.11.0 resolve: 1.22.1 transitivePeerDependencies: - supports-color dev: true - /eslint-module-utils/2.7.4_wwvwfwokyq5c63apkeumvsvvgq: + /eslint-module-utils/2.7.4_tf7h2azriypc3gaglz256o6pea: resolution: {integrity: sha512-j4GT+rqzCoRKHwURX7pddtIPGySnX9Si/cgMI5ztrcqOPtk5dDEeZ34CQVPphnqkJytlc97Vuk05Um2mJ3gEQA==} engines: {node: '>=4'} peerDependencies: @@ -9763,15 +10821,15 @@ packages: eslint-import-resolver-webpack: optional: true dependencies: - '@typescript-eslint/parser': 5.48.1_iukboom6ndih5an6iafl45j2fe + '@typescript-eslint/parser': 5.56.0_zjoiagdsdpivymr5idw66lxttq debug: 3.2.7 - eslint: 8.31.0 - eslint-import-resolver-node: 0.3.6 + eslint: 8.36.0 + eslint-import-resolver-node: 0.3.7 transitivePeerDependencies: - supports-color dev: true - /eslint-plugin-flowtype/8.0.3_eslint@8.31.0: + /eslint-plugin-flowtype/8.0.3_eslint@8.36.0: resolution: {integrity: sha512-dX8l6qUL6O+fYPtpNRideCFSpmWOUVx5QcaGLVqe/vlDiBSe4vYljDWDETwnyFzpl7By/WVIu6rcrniCgH9BqQ==} engines: {node: '>=12.0.0'} peerDependencies: @@ -9779,13 +10837,13 @@ packages: '@babel/plugin-transform-react-jsx': ^7.14.9 eslint: ^8.1.0 dependencies: - eslint: 8.31.0 + eslint: 8.36.0 lodash: 4.17.21 string-natural-compare: 3.0.1 dev: true - /eslint-plugin-import/2.26.0_qdjeohovcytra7xto5vgmxssaq: - resolution: {integrity: sha512-hYfi3FXaM8WPLf4S1cikh/r4IxnO6zrhZbEGz2b660EJRbuxgpDS5gkCuYgGWg2xxh2rBuIr4Pvhve/7c31koA==} + /eslint-plugin-import/2.27.5_cnkxirszkzb4o6ts7gbclno24e: + resolution: {integrity: sha512-LmEt3GVofgiGuiE+ORpnvP+kAm3h6MLZJ4Q5HCyHADofsb4VzXFsRiWj3c0OFiV+3DWFh0qg3v9gcPlfc3zRow==} engines: {node: '>=4'} peerDependencies: '@typescript-eslint/parser': '*' @@ -9794,28 +10852,30 @@ packages: '@typescript-eslint/parser': optional: true dependencies: - '@typescript-eslint/parser': 5.48.1_iukboom6ndih5an6iafl45j2fe + '@typescript-eslint/parser': 5.56.0_zjoiagdsdpivymr5idw66lxttq array-includes: 3.1.6 array.prototype.flat: 1.3.1 - debug: 2.6.9 + array.prototype.flatmap: 1.3.1 + debug: 3.2.7 doctrine: 2.1.0 - eslint: 8.31.0 - eslint-import-resolver-node: 0.3.6 - eslint-module-utils: 2.7.4_wwvwfwokyq5c63apkeumvsvvgq + eslint: 8.36.0 + eslint-import-resolver-node: 0.3.7 + eslint-module-utils: 2.7.4_tf7h2azriypc3gaglz256o6pea has: 1.0.3 is-core-module: 2.11.0 is-glob: 4.0.3 minimatch: 3.1.2 object.values: 1.1.6 resolve: 1.22.1 - tsconfig-paths: 3.14.1 + semver: 6.3.0 + tsconfig-paths: 3.14.2 transitivePeerDependencies: - eslint-import-resolver-typescript - eslint-import-resolver-webpack - supports-color dev: true - /eslint-plugin-jest/25.7.0_q74whf2yk6ymbmdf7nvvgnccqy: + /eslint-plugin-jest/25.7.0_2ccsxwtobso6ld6dzccxmflby4: resolution: {integrity: sha512-PWLUEXeeF7C9QGKqvdSbzLOiLTx+bno7/HC9eefePfEb257QFHg7ye3dh80AZVkaa/RQsBB1Q/ORQvg2X7F0NQ==} engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0} peerDependencies: @@ -9828,31 +10888,31 @@ packages: jest: optional: true dependencies: - '@typescript-eslint/eslint-plugin': 5.48.1_3jon24igvnqaqexgwtxk6nkpse - '@typescript-eslint/experimental-utils': 5.48.1_iukboom6ndih5an6iafl45j2fe - eslint: 8.31.0 + '@typescript-eslint/eslint-plugin': 5.56.0_eiarxozbxyyxr7kdsdkwxpixiq + '@typescript-eslint/experimental-utils': 5.56.0_zjoiagdsdpivymr5idw66lxttq + eslint: 8.36.0 jest: 27.5.1 transitivePeerDependencies: - supports-color - typescript dev: true - /eslint-plugin-jsx-a11y/6.7.0_eslint@8.31.0: - resolution: {integrity: sha512-EGGRKhzejSzXKtjmEjWNtr4SK/DkMkSzkBH7g7e7moBDXZXrqaUIxkmD7uF93upMysc4dKYEJwupu7Dff+ShwA==} + /eslint-plugin-jsx-a11y/6.7.1_eslint@8.36.0: + resolution: {integrity: sha512-63Bog4iIethyo8smBklORknVjB0T2dwB8Mr/hIC+fBS0uyHdYYpzM/Ed+YC8VxTjlXHEWFOdmgwcDn1U2L9VCA==} engines: {node: '>=4.0'} peerDependencies: eslint: ^3 || ^4 || ^5 || ^6 || ^7 || ^8 dependencies: - '@babel/runtime': 7.20.7 + '@babel/runtime': 7.21.0 aria-query: 5.1.3 array-includes: 3.1.6 array.prototype.flatmap: 1.3.1 ast-types-flow: 0.0.7 - axe-core: 4.6.2 + axe-core: 4.6.3 axobject-query: 3.1.1 damerau-levenshtein: 1.0.8 emoji-regex: 9.2.2 - eslint: 8.31.0 + eslint: 8.36.0 has: 1.0.3 jsx-ast-utils: 3.3.3 language-tags: 1.0.5 @@ -9862,17 +10922,26 @@ packages: semver: 6.3.0 dev: true - /eslint-plugin-react-hooks/4.6.0_eslint@8.31.0: + /eslint-plugin-promise/6.1.1_eslint@8.36.0: + resolution: {integrity: sha512-tjqWDwVZQo7UIPMeDReOpUgHCmCiH+ePnVT+5zVapL0uuHnegBUs2smM13CzOs2Xb5+MHMRFTs9v24yjba4Oig==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + peerDependencies: + eslint: ^7.0.0 || ^8.0.0 + dependencies: + eslint: 8.36.0 + dev: true + + /eslint-plugin-react-hooks/4.6.0_eslint@8.36.0: resolution: {integrity: sha512-oFc7Itz9Qxh2x4gNHStv3BqJq54ExXmfC+a1NjAta66IAN87Wu0R/QArgIS9qKzX3dXKPI9H5crl9QchNMY9+g==} engines: {node: '>=10'} peerDependencies: eslint: ^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0 dependencies: - eslint: 8.31.0 + eslint: 8.36.0 dev: true - /eslint-plugin-react/7.32.0_eslint@8.31.0: - resolution: {integrity: sha512-vSBi1+SrPiLZCGvxpiZIa28fMEUaMjXtCplrvxcIxGzmFiYdsXQDwInEjuv5/i/2CTTxbkS87tE8lsQ0Qxinbw==} + /eslint-plugin-react/7.32.2_eslint@8.36.0: + resolution: {integrity: sha512-t2fBMa+XzonrrNkyVirzKlvn5RXzzPwRHtMvLAtVZrt8oxgnTQaYbU6SXTOO1mwQgp1y5+toMSKInnzGr0Knqg==} engines: {node: '>=4'} peerDependencies: eslint: ^3 || ^4 || ^5 || ^6 || ^7 || ^8 @@ -9881,7 +10950,7 @@ packages: array.prototype.flatmap: 1.3.1 array.prototype.tosorted: 1.1.1 doctrine: 2.1.0 - eslint: 8.31.0 + eslint: 8.36.0 estraverse: 5.3.0 jsx-ast-utils: 3.3.3 minimatch: 3.1.2 @@ -9895,14 +10964,14 @@ packages: string.prototype.matchall: 4.0.8 dev: true - /eslint-plugin-testing-library/5.9.1_iukboom6ndih5an6iafl45j2fe: - resolution: {integrity: sha512-6BQp3tmb79jLLasPHJmy8DnxREe+2Pgf7L+7o09TSWPfdqqtQfRZmZNetr5mOs3yqZk/MRNxpN3RUpJe0wB4LQ==} + /eslint-plugin-testing-library/5.10.2_zjoiagdsdpivymr5idw66lxttq: + resolution: {integrity: sha512-f1DmDWcz5SDM+IpCkEX0lbFqrrTs8HRsEElzDEqN/EBI0hpRj8Cns5+IVANXswE8/LeybIJqPAOQIFu2j5Y5sw==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0, npm: '>=6'} peerDependencies: eslint: ^7.5.0 || ^8.0.0 dependencies: - '@typescript-eslint/utils': 5.48.1_iukboom6ndih5an6iafl45j2fe - eslint: 8.31.0 + '@typescript-eslint/utils': 5.56.0_zjoiagdsdpivymr5idw66lxttq + eslint: 8.36.0 transitivePeerDependencies: - supports-color - typescript @@ -9924,16 +10993,6 @@ packages: estraverse: 5.3.0 dev: true - /eslint-utils/3.0.0_eslint@8.31.0: - resolution: {integrity: sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA==} - engines: {node: ^10.0.0 || ^12.0.0 || >= 14.0.0} - peerDependencies: - eslint: '>=5' - dependencies: - eslint: 8.31.0 - eslint-visitor-keys: 2.1.0 - dev: true - /eslint-visitor-keys/2.1.0: resolution: {integrity: sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==} engines: {node: '>=10'} @@ -9944,28 +11003,31 @@ packages: engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} dev: true - /eslint-webpack-plugin/3.2.0_hvhhvch5fcfceof5vvp2w4y5sa: + /eslint-webpack-plugin/3.2.0_c6bstfvn7lmu3jnvygo5gmufvi: resolution: {integrity: sha512-avrKcGncpPbPSUHX6B3stNGzkKFto3eL+DKM4+VyMrVnhPc3vRczVlCq3uhuFOdRvDHTVXuzwk1ZKUrqDQHQ9w==} engines: {node: '>= 12.13.0'} peerDependencies: eslint: ^7.0.0 || ^8.0.0 webpack: ^5.0.0 dependencies: - '@types/eslint': 8.4.10 - eslint: 8.31.0 + '@types/eslint': 8.21.3 + eslint: 8.36.0 jest-worker: 28.1.3 micromatch: 4.0.5 normalize-path: 3.0.0 schema-utils: 4.0.0 - webpack: 5.75.0 + webpack: 5.76.2 dev: true - /eslint/8.31.0: - resolution: {integrity: sha512-0tQQEVdmPZ1UtUKXjX7EMm9BlgJ08G90IhWh0PKDCb3ZLsgAOHI8fYSIzYVZej92zsgq+ft0FGsxhJ3xo2tbuA==} + /eslint/8.36.0: + resolution: {integrity: sha512-Y956lmS7vDqomxlaaQAHVmeb4tNMp2FWIvU/RnU5BD3IKMD/MJPr76xdyr68P8tV1iNMvN2mRK0yy3c+UjL+bw==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} hasBin: true dependencies: - '@eslint/eslintrc': 1.4.1 + '@eslint-community/eslint-utils': 4.3.0_eslint@8.36.0 + '@eslint-community/regexpp': 4.4.0 + '@eslint/eslintrc': 2.0.1 + '@eslint/js': 8.36.0 '@humanwhocodes/config-array': 0.11.8 '@humanwhocodes/module-importer': 1.0.1 '@nodelib/fs.walk': 1.2.8 @@ -9976,23 +11038,22 @@ packages: doctrine: 3.0.0 escape-string-regexp: 4.0.0 eslint-scope: 7.1.1 - eslint-utils: 3.0.0_eslint@8.31.0 eslint-visitor-keys: 3.3.0 - espree: 9.4.1 - esquery: 1.4.0 + espree: 9.5.0 + esquery: 1.5.0 esutils: 2.0.3 fast-deep-equal: 3.1.3 file-entry-cache: 6.0.1 find-up: 5.0.0 glob-parent: 6.0.2 - globals: 13.19.0 + globals: 13.20.0 grapheme-splitter: 1.0.4 ignore: 5.2.4 import-fresh: 3.3.0 imurmurhash: 0.1.4 is-glob: 4.0.3 is-path-inside: 3.0.3 - js-sdsl: 4.2.0 + js-sdsl: 4.3.0 js-yaml: 4.1.0 json-stable-stringify-without-jsonify: 1.0.1 levn: 0.4.1 @@ -10000,7 +11061,6 @@ packages: minimatch: 3.1.2 natural-compare: 1.4.0 optionator: 0.9.1 - regexpp: 3.2.0 strip-ansi: 6.0.1 strip-json-comments: 3.1.1 text-table: 0.2.0 @@ -10008,12 +11068,12 @@ packages: - supports-color dev: true - /espree/9.4.1: - resolution: {integrity: sha512-XwctdmTO6SIvCzd9810yyNzIrOrqNYV9Koizx4C/mRhf9uq0o4yHoCEU/670pOxOL/MSraektvSAji79kX90Vg==} + /espree/9.5.0: + resolution: {integrity: sha512-JPbJGhKc47++oo4JkEoTe2wjy4fmMwvFpgJT9cQzmfXKp22Dr6Hf1tdCteLz1h0P3t+mGvWZ+4Uankvh8+c6zw==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} dependencies: - acorn: 8.8.1 - acorn-jsx: 5.3.2_acorn@8.8.1 + acorn: 8.8.2 + acorn-jsx: 5.3.2_acorn@8.8.2 eslint-visitor-keys: 3.3.0 dev: true @@ -10023,8 +11083,8 @@ packages: hasBin: true dev: true - /esquery/1.4.0: - resolution: {integrity: sha512-cCDispWt5vHHtwMY2YrAQ4ibFkAL8RbH5YGBnZBc90MolvvfkkQcJro/aZiAQUlQ3qgrYS6D6v8Gc5G5CQsc9w==} + /esquery/1.5.0: + resolution: {integrity: sha512-YQLXUplAwJgCydQ78IMJywZCceoqk1oH01OERdSAJc/7U2AylwjhSCLDEtqwg811idIS/9fIU5GjG73IgjKMVg==} engines: {node: '>=0.10'} dependencies: estraverse: 5.3.0 @@ -10060,13 +11120,13 @@ packages: resolution: {integrity: sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==} engines: {node: '>= 0.6'} - /ethereum-cryptography/1.1.2: - resolution: {integrity: sha512-XDSJlg4BD+hq9N2FjvotwUET9Tfxpxc3kWGE2AqUG5vcbeunnbImVk3cj6e/xT3phdW21mE8R5IugU4fspQDcQ==} + /ethereum-cryptography/1.2.0: + resolution: {integrity: sha512-6yFQC9b5ug6/17CQpCyE3k9eKBMdhyVjzUy1WkiuY/E4vj/SXDBbCw8QEIaXqf0Mf2SnY6RmpDcwlUmBSS0EJw==} dependencies: - '@noble/hashes': 1.1.2 - '@noble/secp256k1': 1.6.3 - '@scure/bip32': 1.1.0 - '@scure/bip39': 1.1.0 + '@noble/hashes': 1.2.0 + '@noble/secp256k1': 1.7.1 + '@scure/bip32': 1.1.5 + '@scure/bip39': 1.1.1 /ethjs-util/0.1.6: resolution: {integrity: sha512-CUnVOQq7gSpDHZVVrQW8ExxUETWrnrvXYvYz55wOU8Uj4VCgw56XC2B/fVqQN+f7gmrnRHSLVnFAwsCuNwji8w==} @@ -10089,7 +11149,7 @@ packages: '@ethersproject/providers': 5.7.2 '@ethersproject/signing-key': 5.7.0 '@ethersproject/transactions': 5.7.0 - did-resolver: 4.0.1 + did-resolver: 4.1.0 transitivePeerDependencies: - bufferutil - utf-8-validate @@ -10109,7 +11169,7 @@ packages: '@ethersproject/providers': 5.7.2 '@ethersproject/signing-key': 5.7.0 '@ethersproject/transactions': 5.7.0 - did-resolver: 4.0.1 + did-resolver: 4.1.0 transitivePeerDependencies: - bufferutil - utf-8-validate @@ -10126,8 +11186,8 @@ packages: '@ethersproject/strings': 5.7.0 '@ethersproject/transactions': 5.7.0 '@ethersproject/wallet': 5.7.0 - did-jwt: 6.11.0 - did-resolver: 4.0.1 + did-jwt: 6.11.5 + did-resolver: 4.1.0 ethr-did-resolver: 7.0.2 transitivePeerDependencies: - bufferutil @@ -10226,15 +11286,15 @@ packages: jest-message-util: 27.5.1 dev: true - /expect/29.3.1: - resolution: {integrity: sha512-gGb1yTgU30Q0O/tQq+z30KBWv24ApkMgFUpvKBkyLUBL68Wv8dHdJxTBZFl/iT8K/bqDHvUYRH6IIN3rToopPA==} + /expect/29.5.0: + resolution: {integrity: sha512-yM7xqUrCO2JdpFo4XpM82t+PJBFybdqoQuJLDGeDX2ij8NZzqRHyu3Hp188/JX7SWqud+7t4MUdvcgGBICMHZg==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: - '@jest/expect-utils': 29.3.1 - jest-get-type: 29.2.0 - jest-matcher-utils: 29.3.1 - jest-message-util: 29.3.1 - jest-util: 29.3.1 + '@jest/expect-utils': 29.5.0 + jest-get-type: 29.4.3 + jest-matcher-utils: 29.5.0 + jest-message-util: 29.5.0 + jest-util: 29.5.0 dev: true /expo-modules-autolinking/0.0.3: @@ -10249,8 +11309,8 @@ packages: dev: false optional: true - /expo-random/13.0.0: - resolution: {integrity: sha512-aGb0vtUmFFuW0TF1rdOgsz89zEVD/RXUPUnnZy5+i3jJeQ2PerJ4uo72/EuWqHpCBNto8/qT+aCzFinmQDeTAA==} + /expo-random/13.1.1: + resolution: {integrity: sha512-+KkhGp7xW45GvMRzlcSOzvDwzTgyXo6C84GaG4GI43rOdECBQ2lGUJ12st39OtfZm1lORNskpi66DjnuJ73g9w==} requiresBuild: true peerDependencies: expo: '*' @@ -10259,12 +11319,12 @@ packages: dev: false optional: true - /express-handlebars/6.0.6: - resolution: {integrity: sha512-E4QHYCh+9fyfdBEb8uKJ8p6HD4qq/sUSHBq83lRNlLJp2TQKEg2nFJYbVdC+M3QzaV19dODe43lgjQWVaIpbyQ==} + /express-handlebars/6.0.7: + resolution: {integrity: sha512-iYeMFpc/hMD+E6FNAZA5fgWeXnXr4rslOSPkeEV6TwdmpJ5lEXuWX0u9vFYs31P2MURctQq2batR09oeNj0LIg==} engines: {node: '>=v12.22.9'} dependencies: - glob: 8.0.3 - graceful-fs: 4.2.10 + glob: 8.1.0 + graceful-fs: 4.2.11 handlebars: 4.7.7 dev: false @@ -10276,7 +11336,7 @@ packages: array-flatten: 1.1.1 body-parser: 1.20.1 content-disposition: 0.5.4 - content-type: 1.0.4 + content-type: 1.0.5 cookie: 0.5.0 cookie-signature: 1.0.6 debug: 2.6.9 @@ -10374,6 +11434,14 @@ packages: resolution: {integrity: sha512-VhXlQgj9ioXCqGstD37E/HBeqEGV/qOD/kmbVG8h5xKBYvM1L3lR1Zn4555cQ8GkYbJa8aJSipLPndE1k6zK2w==} dev: false + /fast-xml-parser/4.1.2: + resolution: {integrity: sha512-CDYeykkle1LiA/uqQyNwYpFbyF6Axec6YapmpUP+/RHWIoR1zKjocdvNaTsxCxZzQ6v9MLXaSYm9Qq0thv0DHg==} + hasBin: true + dependencies: + strnum: 1.0.5 + dev: true + optional: true + /fastq/1.15.0: resolution: {integrity: sha512-wBrocU2LCXXa+lWBt8RoIRD89Fi8OdABODa/kEnyeyjS5aZO5/GNvI5sEINADqP/h8M29UHTHUb53sUu5Ihqdw==} dependencies: @@ -10444,7 +11512,7 @@ packages: flat-cache: 3.0.4 dev: true - /file-loader/6.2.0_webpack@5.75.0: + /file-loader/6.2.0_webpack@5.76.2: resolution: {integrity: sha512-qo3glqyTa61Ytg4u73GultjHGjdRyig3tG6lPtyX/jOEJvHif9uB0/OCI2Kif6ctF3caQTW2G5gym21oAsI4pw==} engines: {node: '>= 10.13.0'} peerDependencies: @@ -10452,13 +11520,13 @@ packages: dependencies: loader-utils: 2.0.4 schema-utils: 3.1.1 - webpack: 5.75.0 + webpack: 5.76.2 dev: true /filelist/1.0.4: resolution: {integrity: sha512-w1cEuf3S+DrLCQL7ET6kz+gmlJdbq9J7yXCSjK/OZCPA+qEN1WyF4ZAf0YYJa4/shHJra2t/d/r8SV4Ji+x+8Q==} dependencies: - minimatch: 5.1.2 + minimatch: 5.1.6 dev: true /filesize/8.0.7: @@ -10554,7 +11622,7 @@ packages: resolution: {integrity: sha512-v2ZsoEuVHYy8ZIlYqwPe/39Cy+cFDzp4dXPaxNvkEuouymu+2Jbz0PxpKarJHYJTmv2HWT3O382qY8l4jMWthw==} engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} dependencies: - locate-path: 7.1.1 + locate-path: 7.2.0 path-exists: 5.0.0 dev: true @@ -10614,8 +11682,12 @@ packages: for-in: 1.0.2 dev: true - /fork-ts-checker-webpack-plugin/6.5.2_ztinast3o6ojylpg2e7ubjmesm: - resolution: {integrity: sha512-m5cUmF30xkZ7h4tWUgTAcEaKmUW7tfyUyTqNNOz7OxWJ0v1VWKTcOvH8FWHUwSjlW/356Ijc9vi3XfcPstpQKA==} + /foreach/2.0.6: + resolution: {integrity: sha512-k6GAGDyqLe9JaebCsFCoudPPWfihKu8pylYXRlqP1J7ms39iPoTtk2fviNglIeQEwdh0bQeKJ01ZPyuyQvKzwg==} + dev: false + + /fork-ts-checker-webpack-plugin/6.5.3_kg3azjguh7vrau3wj3msdt6pgy: + resolution: {integrity: sha512-SbH/l9ikmMWycd5puHJKTkZJKddF4iRLyW3DeZ08HTI7NGyLS38MXd/KGgeWumQO7YNQbW2u/NtPT2YowbPaGQ==} engines: {node: '>=10', yarn: '>=1.0.0'} peerDependencies: eslint: '>= 6' @@ -10633,8 +11705,8 @@ packages: chalk: 4.1.2 chokidar: 3.5.3 cosmiconfig: 6.0.0 - deepmerge: 4.2.2 - eslint: 8.31.0 + deepmerge: 4.3.1 + eslint: 8.36.0 fs-extra: 9.1.0 glob: 7.2.3 memfs: 3.4.13 @@ -10643,7 +11715,7 @@ packages: semver: 7.3.8 tapable: 1.1.3 typescript: 4.9.4 - webpack: 5.75.0 + webpack: 5.76.2 dev: true /form-data/3.0.1: @@ -10687,7 +11759,7 @@ packages: resolution: {integrity: sha512-OMcX/4IC/uqEPVgGeyfN22LJk6AZrMkRZHxcHBMBvHScDGgwTm2GT2Wkgtocyd3JfZffjj2kYUDXXII0Fk9W0g==} dependencies: inherits: 2.0.4 - readable-stream: 2.3.7 + readable-stream: 2.3.8 dev: true /fs-constants/1.0.0: @@ -10703,16 +11775,16 @@ packages: resolution: {integrity: sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==} engines: {node: '>=12'} dependencies: - graceful-fs: 4.2.10 + graceful-fs: 4.2.11 jsonfile: 6.1.0 universalify: 2.0.0 dev: true - /fs-extra/11.1.0: - resolution: {integrity: sha512-0rcTq621PD5jM/e0a3EJoGC/1TC5ZBCERW82LQuwfGnCa1V8w7dpYH1yNu+SLb6E5dkeCBzKEyLGlFrnr+dUyw==} + /fs-extra/11.1.1: + resolution: {integrity: sha512-MGIE4HOvQCeUCzmlHs0vXpih4ysz4wg9qiSAu6cd42lVwPbTM1TjV7RusoyQqMmk/95gdQZX72u+YW+c3eEpFQ==} engines: {node: '>=14.14'} dependencies: - graceful-fs: 4.2.10 + graceful-fs: 4.2.11 jsonfile: 6.1.0 universalify: 2.0.0 dev: true @@ -10721,7 +11793,7 @@ packages: resolution: {integrity: sha512-YJDaCJZEnBmcbw13fvdAM9AwNOJwOzrE4pqMqBq5nFiEqXUqHwlK4B+3pUw6JNvfSPtX05xFHtYy/1ni01eGCw==} engines: {node: '>=6 <7 || >=8'} dependencies: - graceful-fs: 4.2.10 + graceful-fs: 4.2.11 jsonfile: 4.0.0 universalify: 0.1.2 @@ -10730,7 +11802,7 @@ packages: engines: {node: '>=10'} dependencies: at-least-node: 1.0.0 - graceful-fs: 4.2.10 + graceful-fs: 4.2.11 jsonfile: 6.1.0 universalify: 2.0.0 @@ -10763,8 +11835,8 @@ packages: engines: {node: '>= 0.4'} dependencies: call-bind: 1.0.2 - define-properties: 1.1.4 - es-abstract: 1.21.1 + define-properties: 1.2.0 + es-abstract: 1.21.2 functions-have-names: 1.2.3 dev: true @@ -10838,8 +11910,8 @@ packages: resolution: {integrity: sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==} engines: {node: 6.* || 8.* || >= 10.*} - /get-intrinsic/1.1.3: - resolution: {integrity: sha512-QJVz1Tj7MS099PevUG5jvnt9tSkXN8K14dxQlikJuPt4uD9hHAHjLyLBiLR5zELelBdD9QNRAXZzsJx0WaDL9A==} + /get-intrinsic/1.2.0: + resolution: {integrity: sha512-L049y6nFOuom5wGyRc3/gdTLO94dySVKRACj1RmJZBQXlbTMhtNIgkWkUHq+jYmZvKf14EW1EoJnnjbmoHij0Q==} dependencies: function-bind: 1.1.1 has: 1.0.3 @@ -10887,7 +11959,7 @@ packages: engines: {node: '>= 0.4'} dependencies: call-bind: 1.0.2 - get-intrinsic: 1.1.3 + get-intrinsic: 1.2.0 dev: true /git-log-parser/1.2.0: @@ -10987,16 +12059,6 @@ packages: once: 1.4.0 path-is-absolute: 1.0.1 - /glob/8.0.3: - resolution: {integrity: sha512-ull455NHSHI/Y1FqGaaYFaLGkNMMJbavMrEGFXG/PGrg6y7sutWHUHrz6gy6WEBH6akM1M414dWKCNs+IhKdiQ==} - engines: {node: '>=12'} - dependencies: - fs.realpath: 1.0.0 - inflight: 1.0.6 - inherits: 2.0.4 - minimatch: 5.1.2 - once: 1.4.0 - /glob/8.1.0: resolution: {integrity: sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ==} engines: {node: '>=12'} @@ -11004,7 +12066,7 @@ packages: fs.realpath: 1.0.0 inflight: 1.0.6 inherits: 2.0.4 - minimatch: 5.1.2 + minimatch: 5.1.6 once: 1.4.0 /global-modules/0.2.3: @@ -11046,8 +12108,8 @@ packages: engines: {node: '>=4'} dev: true - /globals/13.19.0: - resolution: {integrity: sha512-dkQ957uSRWHw7CFXLUtUHQI3g3aWApYhfNR2O6jn/907riyTYKVBmxYVROkBcY614FSSeSJh7Xm7SrUWCxvJMQ==} + /globals/13.20.0: + resolution: {integrity: sha512-Qg5QtVkCy/kv3FUSlu4ukeZDVf9ee0iXLAUYX13gbR17bnejFTzr4iS9bY7kwCf1NztRNm1t91fjOiyx4CSwPQ==} engines: {node: '>=8'} dependencies: type-fest: 0.20.2 @@ -11057,7 +12119,7 @@ packages: resolution: {integrity: sha512-sFdI5LyBiNTHjRd7cGPWapiHWMOXKyuBNX/cWJ3NfzrZQVa8GI/8cofCl74AOVqq9W5kNmguTIzJ/1s2gyI9wA==} engines: {node: '>= 0.4'} dependencies: - define-properties: 1.1.4 + define-properties: 1.2.0 dev: true /globby/11.1.0: @@ -11075,10 +12137,14 @@ packages: /gopd/1.0.1: resolution: {integrity: sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==} dependencies: - get-intrinsic: 1.1.3 + get-intrinsic: 1.2.0 /graceful-fs/4.2.10: resolution: {integrity: sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==} + dev: true + + /graceful-fs/4.2.11: + resolution: {integrity: sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==} /grapheme-splitter/1.0.4: resolution: {integrity: sha512-bzh50DW9kTPM00T8y4o8vQg89Di9oLJVLW/KaOGIXJWP/iqCN6WKYkbNOF04vFLJhwcpYUh9ydh/+5vpOqV4YQ==} @@ -11100,7 +12166,7 @@ packages: engines: {node: '>=0.4.7'} hasBin: true dependencies: - minimist: 1.2.7 + minimist: 1.2.8 neo-async: 2.6.2 source-map: 0.6.1 wordwrap: 1.0.0 @@ -11132,7 +12198,7 @@ packages: /has-property-descriptors/1.0.0: resolution: {integrity: sha512-62DVLZGoiEBDHQyqG4w9xCuZ7eJEwNmJRWw2VY84Oedb7WFcA27fiEVe8oUQx9hAUJ4ekurquucTGwsyO1XGdQ==} dependencies: - get-intrinsic: 1.1.3 + get-intrinsic: 1.2.0 dev: true /has-proto/1.0.1: @@ -11164,7 +12230,7 @@ packages: engines: {node: '>=4'} dependencies: inherits: 2.0.4 - readable-stream: 3.6.0 + readable-stream: 3.6.2 safe-buffer: 5.2.1 dev: false @@ -11228,14 +12294,14 @@ packages: resolution: {integrity: sha512-xIcQYMnhcx2Nr4JTjsFmwwnr9vldugPy9uVm0o87bjqqWMv9GaqsTeT+i99wTl0mk1uLxJtHxLb8kymqTENQsw==} engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0} dependencies: - lru-cache: 7.14.1 + lru-cache: 7.18.3 dev: true /hosted-git-info/6.1.1: resolution: {integrity: sha512-r0EI+HBMcXadMrugk0GCQ+6BQV39PiWAZVfq7oIckeGiN7sjRGyQxPdft3nQekFTCQbYxLBH+/axZMeH8UX6+w==} engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} dependencies: - lru-cache: 7.14.1 + lru-cache: 7.18.3 dev: true /hpack.js/2.1.6: @@ -11243,7 +12309,7 @@ packages: dependencies: inherits: 2.0.4 obuf: 1.1.2 - readable-stream: 2.3.7 + readable-stream: 2.3.8 wbuf: 1.7.3 dev: true @@ -11275,15 +12341,15 @@ packages: hasBin: true dependencies: camel-case: 4.1.2 - clean-css: 5.3.1 + clean-css: 5.3.2 commander: 8.3.0 he: 1.2.0 param-case: 3.0.4 relateurl: 0.2.7 - terser: 5.16.1 + terser: 5.16.6 dev: true - /html-webpack-plugin/5.5.0_webpack@5.75.0: + /html-webpack-plugin/5.5.0_webpack@5.76.2: resolution: {integrity: sha512-sy88PC2cRTVxvETRgUHFrL4No3UxvcH8G1NepGhqaTT+GXN2kTamqasot0inS5hXeg1cMbFDt27zzo9p35lZVw==} engines: {node: '>=10.13.0'} peerDependencies: @@ -11294,7 +12360,7 @@ packages: lodash: 4.17.21 pretty-error: 4.0.0 tapable: 2.2.1 - webpack: 5.75.0 + webpack: 5.76.2 dev: true /htmlparser2/6.1.0: @@ -11306,8 +12372,8 @@ packages: entities: 2.2.0 dev: true - /http-cache-semantics/4.1.0: - resolution: {integrity: sha512-carPklcUh7ROWRK7Cv27RPtdhYhUsela/ue5/jKzjegVvXDqM2ILE9Q2BGn9JZJh1g87cp56su/FgQSzcWS8cQ==} + /http-cache-semantics/4.1.1: + resolution: {integrity: sha512-er295DKPVsV82j5kw1Gjt+ADA/XYHsajl82cGNQG2eyoPkvgUhX+nDIyelzhIWbbsXP39EHcI6l5tYs2FYqYXQ==} /http-deceiver/1.2.7: resolution: {integrity: sha512-LmpOGxTfbpgtGVxJrj5k7asXHCgNZp5nLfp+hWc8QQRqtb7fUy6kRY3BO1h9ddF6yIPYUARgxGOwB42DnxIaNw==} @@ -11368,7 +12434,7 @@ packages: optional: true dependencies: '@types/express': 4.17.15 - '@types/http-proxy': 1.17.9 + '@types/http-proxy': 1.17.10 http-proxy: 1.18.1 is-glob: 4.0.3 is-plain-obj: 3.0.0 @@ -11459,7 +12525,7 @@ packages: resolution: {integrity: sha512-yemi4pMf51WKT7khInJqAvsIGzoqYXblnsz0ql8tM+yi1EKYTY1evX4NAbJrLL/Aanr2HyZeluqU+Oi7MGHokw==} engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0} dependencies: - minimatch: 5.1.2 + minimatch: 5.1.6 dev: true /ignore/5.2.4: @@ -11467,8 +12533,8 @@ packages: engines: {node: '>= 4'} dev: true - /immer/9.0.17: - resolution: {integrity: sha512-+hBruaLSQvkPfxRiTLK/mi4vLH+/VQS6z2KJahdoxlleFOI8ARqzOF17uy12eFDlqWmPoygwc5evgwcp+dlHhg==} + /immer/9.0.19: + resolution: {integrity: sha512-eY+Y0qcsB4TZKwgQzLaE/lqYMlKhv5J9dyd2RhhtGhNo2njPXDqU9XPfcNfa3MIDsdtZt5KlkIsirlo4dHsWdQ==} dev: true /import-fresh/3.3.0: @@ -11543,15 +12609,15 @@ packages: validate-npm-package-name: 4.0.0 dev: true - /inquirer-autocomplete-prompt/3.0.0_inquirer@9.1.4: + /inquirer-autocomplete-prompt/3.0.0_inquirer@9.1.5: resolution: {integrity: sha512-nsPWllBQB3qhvpVgV1UIJN4xo3yz7Qv8y1+zrNVpJUNPxtUZ7btCum/4UCAs5apPCe/FVhKH1V6Wx0cAwkreyg==} engines: {node: '>=12'} peerDependencies: inquirer: ^9.1.0 dependencies: - ansi-escapes: 6.0.0 + ansi-escapes: 6.1.0 figures: 5.0.0 - inquirer: 9.1.4 + inquirer: 9.1.5 picocolors: 1.0.0 run-async: 2.4.1 rxjs: 7.8.0 @@ -11578,32 +12644,32 @@ packages: wrap-ansi: 7.0.0 dev: true - /inquirer/9.1.4: - resolution: {integrity: sha512-9hiJxE5gkK/cM2d1mTEnuurGTAoHebbkX0BYl3h7iEg7FYfuNIom+nDfBCSWtvSnoSrWCeBxqqBZu26xdlJlXA==} - engines: {node: '>=12.0.0'} + /inquirer/9.1.5: + resolution: {integrity: sha512-3ygAIh8gcZavV9bj6MTdYddG2zPSYswP808fKS46NOwlF0zZljVpnLCHODDqItWJDbDpLb3aouAxGaJbkxoppA==} + engines: {node: '>=14.18.0'} dependencies: - ansi-escapes: 6.0.0 + ansi-escapes: 6.1.0 chalk: 5.2.0 cli-cursor: 4.0.0 cli-width: 4.0.0 external-editor: 3.1.0 figures: 5.0.0 lodash: 4.17.21 - mute-stream: 0.0.8 - ora: 6.1.2 + mute-stream: 1.0.0 + ora: 6.2.0 run-async: 2.4.1 rxjs: 7.8.0 string-width: 5.1.2 strip-ansi: 7.0.1 through: 2.3.8 - wrap-ansi: 8.0.1 + wrap-ansi: 8.1.0 dev: false - /internal-slot/1.0.4: - resolution: {integrity: sha512-tA8URYccNzMo94s5MQZgH8NB/XTa6HsOo0MLfXTKKEnHVVdegzaQoFZ7Jp44bdvLvY2waT5dc+j5ICEswhi7UQ==} + /internal-slot/1.0.5: + resolution: {integrity: sha512-Y+R5hJrzs52QCG2laLn4udYVnxsfny9CpOhNhUvk/SSSVyF6T27FzRbF0sroPidSu3X8oEAkOn2K804mjpt6UQ==} engines: {node: '>= 0.4'} dependencies: - get-intrinsic: 1.1.3 + get-intrinsic: 1.2.0 has: 1.0.3 side-channel: 1.0.4 dev: true @@ -11642,11 +12708,11 @@ packages: call-bind: 1.0.2 has-tostringtag: 1.0.0 - /is-array-buffer/3.0.1: - resolution: {integrity: sha512-ASfLknmY8Xa2XtB4wmbz13Wu202baeA18cJBCeCy0wXUHZF0IPyVEXqKEcd+t2fNSLLL1vC6k7lxZEojNbISXQ==} + /is-array-buffer/3.0.2: + resolution: {integrity: sha512-y+FyyR/w8vfIRq4eQcM1EYgSTnmHXPqaF+IgzgraytCFq5Xh8lllDVmAZolPJiZttZLeFSINPYMaEJ7/vWUa1w==} dependencies: call-bind: 1.0.2 - get-intrinsic: 1.1.3 + get-intrinsic: 1.2.0 is-typed-array: 1.1.10 dev: true @@ -11937,7 +13003,7 @@ packages: resolution: {integrity: sha512-t2yVvttHkQktwnNNmBQ98AhENLdPUTDTE21uPqAQ0ARwQfGeQKRVS0NNurH7bTf7RrvcVn1OOge45CnBeHCSmg==} dependencies: call-bind: 1.0.2 - get-intrinsic: 1.1.3 + get-intrinsic: 1.2.0 dev: true /is-windows/0.2.0: @@ -11985,7 +13051,7 @@ packages: optionalDependencies: '@unimodules/core': 7.1.2 '@unimodules/react-native-adapter': 6.3.9 - expo-random: 13.0.0 + expo-random: 13.1.1 react-native-securerandom: 0.1.1 transitivePeerDependencies: - expo @@ -12012,8 +13078,8 @@ packages: resolution: {integrity: sha512-pzqtp31nLv/XFOzXGuvhCb8qhjmTVo5vjVk19XE4CRlSWz0KoeJ3bw9XsA7nOp9YBf4qHjwBxkDzKcME/J29Yg==} engines: {node: '>=8'} dependencies: - '@babel/core': 7.20.12 - '@babel/parser': 7.20.7 + '@babel/core': 7.21.3 + '@babel/parser': 7.21.3 '@istanbuljs/schema': 0.1.3 istanbul-lib-coverage: 3.2.0 semver: 6.3.0 @@ -12074,8 +13140,8 @@ packages: throat: 6.0.2 dev: true - /jest-changed-files/29.2.0: - resolution: {integrity: sha512-qPVmLLyBmvF5HJrY7krDisx6Voi8DmlV3GZYX0aFNbaQsZeoz1hfxcCMbqDGuQCxU1dJy9eYc2xscE8QrCCYaA==} + /jest-changed-files/29.5.0: + resolution: {integrity: sha512-IFG34IUMUaNBIxjQXF/iu7g6EcdMrGRRxaUSw92I/2g2YC6vCdTltl4nHvt7Ci5nSJwXIkCu8Ka1DKF+X7Z1Ag==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: execa: 5.1.1 @@ -12109,27 +13175,28 @@ packages: - supports-color dev: true - /jest-circus/29.3.1: - resolution: {integrity: sha512-wpr26sEvwb3qQQbdlmei+gzp6yoSSoSL6GsLPxnuayZSMrSd5Ka7IjAvatpIernBvT2+Ic6RLTg+jSebScmasg==} + /jest-circus/29.5.0: + resolution: {integrity: sha512-gq/ongqeQKAplVxqJmbeUOJJKkW3dDNPY8PjhJ5G0lBRvu0e3EWGxGy5cI4LAGA7gV2UHCtWBI4EMXK8c9nQKA==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: - '@jest/environment': 29.4.3 - '@jest/expect': 29.3.1 - '@jest/test-result': 29.3.1 - '@jest/types': 29.4.3 + '@jest/environment': 29.5.0 + '@jest/expect': 29.5.0 + '@jest/test-result': 29.5.0 + '@jest/types': 29.5.0 '@types/node': 18.11.18 chalk: 4.1.2 co: 4.6.0 dedent: 0.7.0 is-generator-fn: 2.1.0 - jest-each: 29.3.1 - jest-matcher-utils: 29.3.1 - jest-message-util: 29.4.3 - jest-runtime: 29.3.1 - jest-snapshot: 29.3.1 - jest-util: 29.4.3 + jest-each: 29.5.0 + jest-matcher-utils: 29.5.0 + jest-message-util: 29.5.0 + jest-runtime: 29.5.0 + jest-snapshot: 29.5.0 + jest-util: 29.5.0 p-limit: 3.1.0 - pretty-format: 29.4.3 + pretty-format: 29.5.0 + pure-rand: 6.0.1 slash: 3.0.0 stack-utils: 2.0.6 transitivePeerDependencies: @@ -12151,7 +13218,7 @@ packages: '@jest/types': 27.5.1 chalk: 4.1.2 exit: 0.1.2 - graceful-fs: 4.2.10 + graceful-fs: 4.2.11 import-local: 3.1.0 jest-config: 27.5.1 jest-util: 27.5.1 @@ -12166,8 +13233,8 @@ packages: - utf-8-validate dev: true - /jest-cli/29.3.1_@types+node@18.11.18: - resolution: {integrity: sha512-TO/ewvwyvPOiBBuWZ0gm04z3WWP8TIK8acgPzE4IxgsLKQgb377NYGrQLc3Wl/7ndWzIH2CDNNsUjGxwLL43VQ==} + /jest-cli/29.5.0_@types+node@18.11.18: + resolution: {integrity: sha512-L1KcP1l4HtfwdxXNFCL5bmUbLQiKrakMUriBEcc1Vfz6gx31ORKdreuWvmQVBit+1ss9NNR3yxjwfwzZNdQXJw==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} hasBin: true peerDependencies: @@ -12176,26 +13243,26 @@ packages: node-notifier: optional: true dependencies: - '@jest/core': 29.3.1 - '@jest/test-result': 29.3.1 - '@jest/types': 29.3.1 + '@jest/core': 29.5.0 + '@jest/test-result': 29.5.0 + '@jest/types': 29.5.0 chalk: 4.1.2 exit: 0.1.2 - graceful-fs: 4.2.10 + graceful-fs: 4.2.11 import-local: 3.1.0 - jest-config: 29.3.1_@types+node@18.11.18 - jest-util: 29.3.1 - jest-validate: 29.3.1 + jest-config: 29.5.0_@types+node@18.11.18 + jest-util: 29.5.0 + jest-validate: 29.5.0 prompts: 2.4.2 - yargs: 17.6.2 + yargs: 17.7.1 transitivePeerDependencies: - '@types/node' - supports-color - ts-node dev: true - /jest-cli/29.3.1_zfha7dvnw4nti6zkbsmhmn6xo4: - resolution: {integrity: sha512-TO/ewvwyvPOiBBuWZ0gm04z3WWP8TIK8acgPzE4IxgsLKQgb377NYGrQLc3Wl/7ndWzIH2CDNNsUjGxwLL43VQ==} + /jest-cli/29.5.0_zfha7dvnw4nti6zkbsmhmn6xo4: + resolution: {integrity: sha512-L1KcP1l4HtfwdxXNFCL5bmUbLQiKrakMUriBEcc1Vfz6gx31ORKdreuWvmQVBit+1ss9NNR3yxjwfwzZNdQXJw==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} hasBin: true peerDependencies: @@ -12204,18 +13271,18 @@ packages: node-notifier: optional: true dependencies: - '@jest/core': 29.3.1_ts-node@10.9.1 - '@jest/test-result': 29.3.1 - '@jest/types': 29.3.1 + '@jest/core': 29.5.0_ts-node@10.9.1 + '@jest/test-result': 29.5.0 + '@jest/types': 29.5.0 chalk: 4.1.2 exit: 0.1.2 - graceful-fs: 4.2.10 + graceful-fs: 4.2.11 import-local: 3.1.0 - jest-config: 29.3.1_zfha7dvnw4nti6zkbsmhmn6xo4 - jest-util: 29.3.1 - jest-validate: 29.3.1 + jest-config: 29.5.0_zfha7dvnw4nti6zkbsmhmn6xo4 + jest-util: 29.5.0 + jest-validate: 29.5.0 prompts: 2.4.2 - yargs: 17.6.2 + yargs: 17.7.1 transitivePeerDependencies: - '@types/node' - supports-color @@ -12231,15 +13298,15 @@ packages: ts-node: optional: true dependencies: - '@babel/core': 7.20.12 + '@babel/core': 7.21.3 '@jest/test-sequencer': 27.5.1 '@jest/types': 27.5.1 - babel-jest: 27.5.1_@babel+core@7.20.12 + babel-jest: 27.5.1_@babel+core@7.21.3 chalk: 4.1.2 - ci-info: 3.7.1 - deepmerge: 4.2.2 + ci-info: 3.8.0 + deepmerge: 4.3.1 glob: 7.2.3 - graceful-fs: 4.2.10 + graceful-fs: 4.2.11 jest-circus: 27.5.1 jest-environment-jsdom: 27.5.1 jest-environment-node: 27.5.1 @@ -12274,35 +13341,35 @@ packages: ts-node: optional: true dependencies: - '@babel/core': 7.20.12 - '@jest/test-sequencer': 29.3.1 - '@jest/types': 29.3.1 + '@babel/core': 7.21.3 + '@jest/test-sequencer': 29.5.0 + '@jest/types': 29.5.0 '@types/node': 18.11.18 - babel-jest: 29.5.0_@babel+core@7.20.12 + babel-jest: 29.5.0_@babel+core@7.21.3 chalk: 4.1.2 - ci-info: 3.7.1 - deepmerge: 4.2.2 + ci-info: 3.8.0 + deepmerge: 4.3.1 glob: 7.2.3 - graceful-fs: 4.2.10 - jest-circus: 29.3.1 + graceful-fs: 4.2.11 + jest-circus: 29.5.0 jest-environment-node: 29.3.1 - jest-get-type: 29.2.0 - jest-regex-util: 29.2.0 - jest-resolve: 29.3.1 - jest-runner: 29.3.1 - jest-util: 29.3.1 - jest-validate: 29.3.1 + jest-get-type: 29.4.3 + jest-regex-util: 29.4.3 + jest-resolve: 29.5.0 + jest-runner: 29.5.0 + jest-util: 29.5.0 + jest-validate: 29.5.0 micromatch: 4.0.5 parse-json: 5.2.0 - pretty-format: 29.3.1 + pretty-format: 29.5.0 slash: 3.0.0 strip-json-comments: 3.1.1 transitivePeerDependencies: - supports-color dev: true - /jest-config/29.3.1_zfha7dvnw4nti6zkbsmhmn6xo4: - resolution: {integrity: sha512-y0tFHdj2WnTEhxmGUK1T7fgLen7YK4RtfvpLFBXfQkh2eMJAQq24Vx9472lvn5wg0MAO6B+iPfJfzdR9hJYalg==} + /jest-config/29.5.0_@types+node@18.11.18: + resolution: {integrity: sha512-kvDUKBnNJPNBmFFOhDbm59iu1Fii1Q6SxyhXfvylq3UTHbg6o7j/g8k2dZyXWLvfdKB1vAPxNZnMgtKJcmu3kA==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} peerDependencies: '@types/node': '*' @@ -12313,27 +13380,66 @@ packages: ts-node: optional: true dependencies: - '@babel/core': 7.20.12 - '@jest/test-sequencer': 29.3.1 - '@jest/types': 29.3.1 + '@babel/core': 7.21.3 + '@jest/test-sequencer': 29.5.0 + '@jest/types': 29.5.0 '@types/node': 18.11.18 - babel-jest: 29.5.0_@babel+core@7.20.12 + babel-jest: 29.5.0_@babel+core@7.21.3 chalk: 4.1.2 - ci-info: 3.7.1 - deepmerge: 4.2.2 + ci-info: 3.8.0 + deepmerge: 4.3.1 glob: 7.2.3 - graceful-fs: 4.2.10 - jest-circus: 29.3.1 - jest-environment-node: 29.3.1 - jest-get-type: 29.2.0 - jest-regex-util: 29.2.0 - jest-resolve: 29.3.1 - jest-runner: 29.3.1 - jest-util: 29.3.1 - jest-validate: 29.3.1 + graceful-fs: 4.2.11 + jest-circus: 29.5.0 + jest-environment-node: 29.5.0 + jest-get-type: 29.4.3 + jest-regex-util: 29.4.3 + jest-resolve: 29.5.0 + jest-runner: 29.5.0 + jest-util: 29.5.0 + jest-validate: 29.5.0 + micromatch: 4.0.5 + parse-json: 5.2.0 + pretty-format: 29.5.0 + slash: 3.0.0 + strip-json-comments: 3.1.1 + transitivePeerDependencies: + - supports-color + dev: true + + /jest-config/29.5.0_zfha7dvnw4nti6zkbsmhmn6xo4: + resolution: {integrity: sha512-kvDUKBnNJPNBmFFOhDbm59iu1Fii1Q6SxyhXfvylq3UTHbg6o7j/g8k2dZyXWLvfdKB1vAPxNZnMgtKJcmu3kA==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + peerDependencies: + '@types/node': '*' + ts-node: '>=9.0.0' + peerDependenciesMeta: + '@types/node': + optional: true + ts-node: + optional: true + dependencies: + '@babel/core': 7.21.3 + '@jest/test-sequencer': 29.5.0 + '@jest/types': 29.5.0 + '@types/node': 18.11.18 + babel-jest: 29.5.0_@babel+core@7.21.3 + chalk: 4.1.2 + ci-info: 3.8.0 + deepmerge: 4.3.1 + glob: 7.2.3 + graceful-fs: 4.2.11 + jest-circus: 29.5.0 + jest-environment-node: 29.5.0 + jest-get-type: 29.4.3 + jest-regex-util: 29.4.3 + jest-resolve: 29.5.0 + jest-runner: 29.5.0 + jest-util: 29.5.0 + jest-validate: 29.5.0 micromatch: 4.0.5 parse-json: 5.2.0 - pretty-format: 29.3.1 + pretty-format: 29.5.0 slash: 3.0.0 strip-json-comments: 3.1.1 ts-node: 10.9.1_awa2wsr5thmg3i7jqycphctjfq @@ -12382,14 +13488,14 @@ packages: pretty-format: 27.5.1 dev: true - /jest-diff/29.3.1: - resolution: {integrity: sha512-vU8vyiO7568tmin2lA3r2DP8oRvzhvRcD4DjpXc6uGveQodyk7CKLhQlCSiwgx3g0pFaE88/KLZ0yaTWMc4Uiw==} + /jest-diff/29.5.0: + resolution: {integrity: sha512-LtxijLLZBduXnHSniy0WMdaHjmQnt3g5sa16W4p0HqukYTTsyTW3GD1q41TyGl5YFXj/5B2U6dlh5FM1LIMgxw==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: chalk: 4.1.2 - diff-sequences: 29.3.1 - jest-get-type: 29.2.0 - pretty-format: 29.4.3 + diff-sequences: 29.4.3 + jest-get-type: 29.4.3 + pretty-format: 29.5.0 dev: true /jest-docblock/27.5.1: @@ -12399,8 +13505,8 @@ packages: detect-newline: 3.1.0 dev: true - /jest-docblock/29.2.0: - resolution: {integrity: sha512-bkxUsxTgWQGbXV5IENmfiIuqZhJcyvF7tU4zJ/7ioTutdz4ToB5Yx6JOFBpgI+TphRY4lhOyCWGNH/QFQh5T6A==} + /jest-docblock/29.4.3: + resolution: {integrity: sha512-fzdTftThczeSD9nZ3fzA/4KkHtnmllawWrXO69vtI+L9WjEIuXWs4AmyME7lN5hU7dB0sHhuPfcKofRsUb/2Fg==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: detect-newline: 3.1.0 @@ -12417,15 +13523,15 @@ packages: pretty-format: 27.5.1 dev: true - /jest-each/29.3.1: - resolution: {integrity: sha512-qrZH7PmFB9rEzCSl00BWjZYuS1BSOH8lLuC0azQE9lQrAx3PWGKHTDudQiOSwIy5dGAJh7KA0ScYlCP7JxvFYA==} + /jest-each/29.5.0: + resolution: {integrity: sha512-HM5kIJ1BTnVt+DQZ2ALp3rzXEl+g726csObrW/jpEGl+CDSSQpOJJX2KE/vEg8cxcMXdyEPu6U4QX5eruQv5hA==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: - '@jest/types': 29.4.3 + '@jest/types': 29.5.0 chalk: 4.1.2 - jest-get-type: 29.2.0 - jest-util: 29.4.3 - pretty-format: 29.4.3 + jest-get-type: 29.4.3 + jest-util: 29.5.0 + pretty-format: 29.5.0 dev: true /jest-environment-jsdom/27.5.1: @@ -12455,13 +13561,13 @@ packages: canvas: optional: true dependencies: - '@jest/environment': 29.3.1 - '@jest/fake-timers': 29.3.1 - '@jest/types': 29.3.1 + '@jest/environment': 29.5.0 + '@jest/fake-timers': 29.5.0 + '@jest/types': 29.5.0 '@types/jsdom': 20.0.1 '@types/node': 18.11.18 - jest-mock: 29.3.1 - jest-util: 29.3.1 + jest-mock: 29.5.0 + jest-util: 29.5.0 jsdom: 20.0.3 transitivePeerDependencies: - bufferutil @@ -12485,24 +13591,24 @@ packages: resolution: {integrity: sha512-xm2THL18Xf5sIHoU7OThBPtuH6Lerd+Y1NLYiZJlkE3hbE+7N7r8uvHIl/FkZ5ymKXJe/11SQuf3fv4v6rUMag==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: - '@jest/environment': 29.3.1 - '@jest/fake-timers': 29.3.1 - '@jest/types': 29.3.1 + '@jest/environment': 29.5.0 + '@jest/fake-timers': 29.5.0 + '@jest/types': 29.5.0 '@types/node': 18.11.18 - jest-mock: 29.3.1 - jest-util: 29.3.1 + jest-mock: 29.5.0 + jest-util: 29.5.0 dev: true - /jest-environment-node/29.4.3: - resolution: {integrity: sha512-gAiEnSKF104fsGDXNkwk49jD/0N0Bqu2K9+aMQXA6avzsA9H3Fiv1PW2D+gzbOSR705bWd2wJZRFEFpV0tXISg==} + /jest-environment-node/29.5.0: + resolution: {integrity: sha512-ExxuIK/+yQ+6PRGaHkKewYtg6hto2uGCgvKdb2nfJfKXgZ17DfXjvbZ+jA1Qt9A8EQSfPnt5FKIfnOO3u1h9qw==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: - '@jest/environment': 29.4.3 - '@jest/fake-timers': 29.4.3 - '@jest/types': 29.4.3 + '@jest/environment': 29.5.0 + '@jest/fake-timers': 29.5.0 + '@jest/types': 29.5.0 '@types/node': 18.11.18 - jest-mock: 29.4.3 - jest-util: 29.4.3 + jest-mock: 29.5.0 + jest-util: 29.5.0 dev: true /jest-environment-puppeteer-jsdom/6.0.0: @@ -12528,7 +13634,7 @@ packages: chalk: 4.1.2 cwd: 0.10.0 jest-dev-server: 7.0.1 - jest-environment-node: 29.4.3 + jest-environment-node: 29.5.0 merge-deep: 3.0.3 transitivePeerDependencies: - debug @@ -12539,7 +13645,7 @@ packages: resolution: {integrity: sha512-Ux1nWprtLrdrH4XwE7O7InRY6psIi3GOsqNESJgMJ+M5cv4A8Lh7SN9d2V2kKRZ8ebAfcd1LNyZguAOb6JiDqw==} dependencies: cross-fetch: 3.1.5 - promise-polyfill: 8.2.3 + promise-polyfill: 8.3.0 transitivePeerDependencies: - encoding dev: true @@ -12549,8 +13655,8 @@ packages: engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} dev: true - /jest-get-type/29.2.0: - resolution: {integrity: sha512-uXNJlg8hKFEnDgFsrCjznB+sTxdkuqiCL6zMgA75qEbAJjJYTs9XPrvDctrEig2GDow22T/LvHgO57iJhXB/UA==} + /jest-get-type/29.4.3: + resolution: {integrity: sha512-J5Xez4nRRMjk8emnTpWrlkyb9pfRQQanDrvWHhsR1+VUfbwxi30eVcZFlcdGInRibU4G5LwHXpI7IRHU0CY+gg==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dev: true @@ -12563,7 +13669,7 @@ packages: '@types/node': 18.11.18 anymatch: 3.1.3 fb-watchman: 2.0.2 - graceful-fs: 4.2.10 + graceful-fs: 4.2.11 jest-regex-util: 27.5.1 jest-serializer: 27.5.1 jest-util: 27.5.1 @@ -12574,25 +13680,6 @@ packages: fsevents: 2.3.2 dev: true - /jest-haste-map/29.3.1: - resolution: {integrity: sha512-/FFtvoG1xjbbPXQLFef+WSU4yrc0fc0Dds6aRPBojUid7qlPqZvxdUBA03HW0fnVHXVCnCdkuoghYItKNzc/0A==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - dependencies: - '@jest/types': 29.5.0 - '@types/graceful-fs': 4.1.6 - '@types/node': 18.11.18 - anymatch: 3.1.3 - fb-watchman: 2.0.2 - graceful-fs: 4.2.10 - jest-regex-util: 29.4.3 - jest-util: 29.5.0 - jest-worker: 29.5.0 - micromatch: 4.0.5 - walker: 1.0.8 - optionalDependencies: - fsevents: 2.3.2 - dev: true - /jest-haste-map/29.5.0: resolution: {integrity: sha512-IspOPnnBro8YfVYSw6yDRKh/TiCdRngjxeacCps1cQ9cgVN6+10JUcuJ1EabrgYLOATsIAigxA0rLR9x/YlrSA==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} @@ -12602,7 +13689,7 @@ packages: '@types/node': 18.11.18 anymatch: 3.1.3 fb-watchman: 2.0.2 - graceful-fs: 4.2.10 + graceful-fs: 4.2.11 jest-regex-util: 29.4.3 jest-util: 29.5.0 jest-worker: 29.5.0 @@ -12641,23 +13728,23 @@ packages: resolution: {integrity: sha512-GAsY7aie7YcQc85m/grsOyRGWPDefaJlPYCt2iIPBbA5MMeTbXKrJa4vfMfxJjSmDtbQHxWEoGuUXIA1+bLgvg==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: - '@jest/environment': 29.3.1 - '@jest/expect': 29.3.1 - '@jest/source-map': 29.2.0 - '@jest/test-result': 29.3.1 - '@jest/types': 29.3.1 + '@jest/environment': 29.5.0 + '@jest/expect': 29.5.0 + '@jest/source-map': 29.4.3 + '@jest/test-result': 29.5.0 + '@jest/types': 29.5.0 '@types/node': 18.11.18 chalk: 4.1.2 co: 4.6.0 is-generator-fn: 2.1.0 - jest-each: 29.3.1 - jest-matcher-utils: 29.3.1 - jest-message-util: 29.3.1 - jest-runtime: 29.3.1 - jest-snapshot: 29.3.1 - jest-util: 29.3.1 + jest-each: 29.5.0 + jest-matcher-utils: 29.5.0 + jest-message-util: 29.5.0 + jest-runtime: 29.5.0 + jest-snapshot: 29.5.0 + jest-util: 29.5.0 p-limit: 3.1.0 - pretty-format: 29.3.1 + pretty-format: 29.5.0 transitivePeerDependencies: - supports-color dev: true @@ -12670,12 +13757,12 @@ packages: pretty-format: 27.5.1 dev: true - /jest-leak-detector/29.3.1: - resolution: {integrity: sha512-3DA/VVXj4zFOPagGkuqHnSQf1GZBmmlagpguxEERO6Pla2g84Q1MaVIB3YMxgUaFIaYag8ZnTyQgiZ35YEqAQA==} + /jest-leak-detector/29.5.0: + resolution: {integrity: sha512-u9YdeeVnghBUtpN5mVxjID7KbkKE1QU4f6uUwuxiY0vYRi9BUCLKlPEZfDGR67ofdFmDz9oPAy2G92Ujrntmow==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: - jest-get-type: 29.2.0 - pretty-format: 29.4.3 + jest-get-type: 29.4.3 + pretty-format: 29.5.0 dev: true /jest-matcher-utils/27.5.1: @@ -12688,14 +13775,14 @@ packages: pretty-format: 27.5.1 dev: true - /jest-matcher-utils/29.3.1: - resolution: {integrity: sha512-fkRMZUAScup3txIKfMe3AIZZmPEjWEdsPJFK3AIy5qRohWqQFg1qrmKfYXR9qEkNc7OdAu2N4KPHibEmy4HPeQ==} + /jest-matcher-utils/29.5.0: + resolution: {integrity: sha512-lecRtgm/rjIK0CQ7LPQwzCs2VwW6WAahA55YBuI+xqmhm7LAaxokSB8C97yJeYyT+HvQkH741StzpU41wohhWw==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: chalk: 4.1.2 - jest-diff: 29.3.1 - jest-get-type: 29.2.0 - pretty-format: 29.4.3 + jest-diff: 29.5.0 + jest-get-type: 29.4.3 + pretty-format: 29.5.0 dev: true /jest-message-util/27.5.1: @@ -12706,54 +13793,39 @@ packages: '@jest/types': 27.5.1 '@types/stack-utils': 2.0.1 chalk: 4.1.2 - graceful-fs: 4.2.10 + graceful-fs: 4.2.11 micromatch: 4.0.5 pretty-format: 27.5.1 slash: 3.0.0 stack-utils: 2.0.6 dev: true - /jest-message-util/28.1.3: - resolution: {integrity: sha512-PFdn9Iewbt575zKPf1286Ht9EPoJmYT7P0kY+RibeYZ2XtOr53pDLEFoTWXbd1h4JiGiWpTBC84fc8xMXQMb7g==} - engines: {node: ^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0} - dependencies: - '@babel/code-frame': 7.18.6 - '@jest/types': 28.1.3 - '@types/stack-utils': 2.0.1 - chalk: 4.1.2 - graceful-fs: 4.2.10 - micromatch: 4.0.5 - pretty-format: 28.1.3 - slash: 3.0.0 - stack-utils: 2.0.6 - dev: true - - /jest-message-util/29.3.1: - resolution: {integrity: sha512-lMJTbgNcDm5z+6KDxWtqOFWlGQxD6XaYwBqHR8kmpkP+WWWG90I35kdtQHY67Ay5CSuydkTBbJG+tH9JShFCyA==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + /jest-message-util/28.1.3: + resolution: {integrity: sha512-PFdn9Iewbt575zKPf1286Ht9EPoJmYT7P0kY+RibeYZ2XtOr53pDLEFoTWXbd1h4JiGiWpTBC84fc8xMXQMb7g==} + engines: {node: ^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0} dependencies: '@babel/code-frame': 7.18.6 - '@jest/types': 29.4.3 + '@jest/types': 28.1.3 '@types/stack-utils': 2.0.1 chalk: 4.1.2 - graceful-fs: 4.2.10 + graceful-fs: 4.2.11 micromatch: 4.0.5 - pretty-format: 29.4.3 + pretty-format: 28.1.3 slash: 3.0.0 stack-utils: 2.0.6 dev: true - /jest-message-util/29.4.3: - resolution: {integrity: sha512-1Y8Zd4ZCN7o/QnWdMmT76If8LuDv23Z1DRovBj/vcSFNlGCJGoO8D1nJDw1AdyAGUk0myDLFGN5RbNeJyCRGCw==} + /jest-message-util/29.5.0: + resolution: {integrity: sha512-Kijeg9Dag6CKtIDA7O21zNTACqD5MD/8HfIV8pdD94vFyFuer52SigdC3IQMhab3vACxXMiFk+yMHNdbqtyTGA==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: '@babel/code-frame': 7.18.6 '@jest/types': 29.5.0 '@types/stack-utils': 2.0.1 chalk: 4.1.2 - graceful-fs: 4.2.10 + graceful-fs: 4.2.11 micromatch: 4.0.5 - pretty-format: 29.4.3 + pretty-format: 29.5.0 slash: 3.0.0 stack-utils: 2.0.6 dev: true @@ -12766,17 +13838,8 @@ packages: '@types/node': 18.11.18 dev: true - /jest-mock/29.3.1: - resolution: {integrity: sha512-H8/qFDtDVMFvFP4X8NuOT3XRDzOUTz+FeACjufHzsOIBAxivLqkB1PoLCaJx9iPPQ8dZThHPp/G3WRWyMgA3JA==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - dependencies: - '@jest/types': 29.5.0 - '@types/node': 18.11.18 - jest-util: 29.5.0 - dev: true - - /jest-mock/29.4.3: - resolution: {integrity: sha512-LjFgMg+xed9BdkPMyIJh+r3KeHt1klXPJYBULXVVAkbTaaKjPX1o1uVCAZADMEp/kOxGTwy/Ot8XbvgItOrHEg==} + /jest-mock/29.5.0: + resolution: {integrity: sha512-GqOzvdWDE4fAV2bWQLQCkujxYWL7RxjCnj71b5VhDAGOevB3qj3Ovg26A5NI84ZpODxyzaozXLOh2NCgkbvyaw==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: '@jest/types': 29.5.0 @@ -12796,7 +13859,7 @@ packages: jest-resolve: 27.5.1 dev: true - /jest-pnp-resolver/1.2.3_jest-resolve@29.3.1: + /jest-pnp-resolver/1.2.3_jest-resolve@29.5.0: resolution: {integrity: sha512-+3NpwQEnRoIBtx4fyhblQDPgJI0H1IEIkX7ShLUjPGA7TtUTvI1oiKi3SR4oBR0hQhQR80l4WAe5RrXBwWMA8w==} engines: {node: '>=6'} peerDependencies: @@ -12805,7 +13868,7 @@ packages: jest-resolve: optional: true dependencies: - jest-resolve: 29.3.1 + jest-resolve: 29.5.0 dev: true /jest-puppeteer/7.0.1_puppeteer@19.6.1: @@ -12832,11 +13895,6 @@ packages: engines: {node: ^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0} dev: true - /jest-regex-util/29.2.0: - resolution: {integrity: sha512-6yXn0kg2JXzH30cr2NlThF+70iuO/3irbaB4mh5WyqNIvLLP+B6sFdluO1/1RJmslyh/f9osnefECflHvTbwVA==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - dev: true - /jest-regex-util/29.4.3: resolution: {integrity: sha512-O4FglZaMmWXbGHSQInfXewIsd1LMn9p3ZXB/6r4FOkyhX2/iP/soMG98jGvk/A3HAN78+5VWcBGO0BJAPRh4kg==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} @@ -12853,12 +13911,12 @@ packages: - supports-color dev: true - /jest-resolve-dependencies/29.3.1: - resolution: {integrity: sha512-Vk0cYq0byRw2WluNmNWGqPeRnZ3p3hHmjJMp2dyyZeYIfiBskwq4rpiuGFR6QGAdbj58WC7HN4hQHjf2mpvrLA==} + /jest-resolve-dependencies/29.5.0: + resolution: {integrity: sha512-sjV3GFr0hDJMBpYeUuGduP+YeCRbd7S/ck6IvL3kQ9cpySYKqcqhdLLC2rFwrcL7tz5vYibomBrsFYWkIGGjOg==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: jest-regex-util: 29.4.3 - jest-snapshot: 29.3.1 + jest-snapshot: 29.5.0 transitivePeerDependencies: - supports-color dev: true @@ -12869,28 +13927,28 @@ packages: dependencies: '@jest/types': 27.5.1 chalk: 4.1.2 - graceful-fs: 4.2.10 + graceful-fs: 4.2.11 jest-haste-map: 27.5.1 jest-pnp-resolver: 1.2.3_jest-resolve@27.5.1 jest-util: 27.5.1 jest-validate: 27.5.1 resolve: 1.22.1 - resolve.exports: 1.1.0 + resolve.exports: 1.1.1 slash: 3.0.0 dev: true - /jest-resolve/29.3.1: - resolution: {integrity: sha512-amXJgH/Ng712w3Uz5gqzFBBjxV8WFLSmNjoreBGMqxgCz5cH7swmBZzgBaCIOsvb0NbpJ0vgaSFdJqMdT+rADw==} + /jest-resolve/29.5.0: + resolution: {integrity: sha512-1TzxJ37FQq7J10jPtQjcc+MkCkE3GBpBecsSUWJ0qZNJpmg6m0D9/7II03yJulm3H/fvVjgqLh/k2eYg+ui52w==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: chalk: 4.1.2 - graceful-fs: 4.2.10 - jest-haste-map: 29.3.1 - jest-pnp-resolver: 1.2.3_jest-resolve@29.3.1 - jest-util: 29.4.3 - jest-validate: 29.3.1 + graceful-fs: 4.2.11 + jest-haste-map: 29.5.0 + jest-pnp-resolver: 1.2.3_jest-resolve@29.5.0 + jest-util: 29.5.0 + jest-validate: 29.5.0 resolve: 1.22.1 - resolve.exports: 1.1.0 + resolve.exports: 2.0.1 slash: 3.0.0 dev: true @@ -12906,7 +13964,7 @@ packages: '@types/node': 18.11.18 chalk: 4.1.2 emittery: 0.8.1 - graceful-fs: 4.2.10 + graceful-fs: 4.2.11 jest-docblock: 27.5.1 jest-environment-jsdom: 27.5.1 jest-environment-node: 27.5.1 @@ -12926,29 +13984,29 @@ packages: - utf-8-validate dev: true - /jest-runner/29.3.1: - resolution: {integrity: sha512-oFvcwRNrKMtE6u9+AQPMATxFcTySyKfLhvso7Sdk/rNpbhg4g2GAGCopiInk1OP4q6gz3n6MajW4+fnHWlU3bA==} + /jest-runner/29.5.0: + resolution: {integrity: sha512-m7b6ypERhFghJsslMLhydaXBiLf7+jXy8FwGRHO3BGV1mcQpPbwiqiKUR2zU2NJuNeMenJmlFZCsIqzJCTeGLQ==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: - '@jest/console': 29.3.1 - '@jest/environment': 29.4.3 - '@jest/test-result': 29.3.1 + '@jest/console': 29.5.0 + '@jest/environment': 29.5.0 + '@jest/test-result': 29.5.0 '@jest/transform': 29.5.0 - '@jest/types': 29.4.3 + '@jest/types': 29.5.0 '@types/node': 18.11.18 chalk: 4.1.2 emittery: 0.13.1 - graceful-fs: 4.2.10 - jest-docblock: 29.2.0 - jest-environment-node: 29.3.1 - jest-haste-map: 29.3.1 - jest-leak-detector: 29.3.1 - jest-message-util: 29.4.3 - jest-resolve: 29.3.1 - jest-runtime: 29.3.1 - jest-util: 29.4.3 - jest-watcher: 29.3.1 - jest-worker: 29.3.1 + graceful-fs: 4.2.11 + jest-docblock: 29.4.3 + jest-environment-node: 29.5.0 + jest-haste-map: 29.5.0 + jest-leak-detector: 29.5.0 + jest-message-util: 29.5.0 + jest-resolve: 29.5.0 + jest-runtime: 29.5.0 + jest-util: 29.5.0 + jest-watcher: 29.5.0 + jest-worker: 29.5.0 p-limit: 3.1.0 source-map-support: 0.5.13 transitivePeerDependencies: @@ -12971,7 +14029,7 @@ packages: collect-v8-coverage: 1.0.1 execa: 5.1.1 glob: 7.2.3 - graceful-fs: 4.2.10 + graceful-fs: 4.2.11 jest-haste-map: 27.5.1 jest-message-util: 27.5.1 jest-mock: 27.5.1 @@ -12985,30 +14043,30 @@ packages: - supports-color dev: true - /jest-runtime/29.3.1: - resolution: {integrity: sha512-jLzkIxIqXwBEOZx7wx9OO9sxoZmgT2NhmQKzHQm1xwR1kNW/dn0OjxR424VwHHf1SPN6Qwlb5pp1oGCeFTQ62A==} + /jest-runtime/29.5.0: + resolution: {integrity: sha512-1Hr6Hh7bAgXQP+pln3homOiEZtCDZFqwmle7Ew2j8OlbkIu6uE3Y/etJQG8MLQs3Zy90xrp2C0BRrtPHG4zryw==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: - '@jest/environment': 29.4.3 - '@jest/fake-timers': 29.4.3 - '@jest/globals': 29.3.1 - '@jest/source-map': 29.2.0 - '@jest/test-result': 29.3.1 + '@jest/environment': 29.5.0 + '@jest/fake-timers': 29.5.0 + '@jest/globals': 29.5.0 + '@jest/source-map': 29.4.3 + '@jest/test-result': 29.5.0 '@jest/transform': 29.5.0 - '@jest/types': 29.4.3 + '@jest/types': 29.5.0 '@types/node': 18.11.18 chalk: 4.1.2 cjs-module-lexer: 1.2.2 collect-v8-coverage: 1.0.1 glob: 7.2.3 - graceful-fs: 4.2.10 - jest-haste-map: 29.3.1 - jest-message-util: 29.4.3 - jest-mock: 29.4.3 - jest-regex-util: 29.2.0 - jest-resolve: 29.3.1 - jest-snapshot: 29.3.1 - jest-util: 29.4.3 + graceful-fs: 4.2.11 + jest-haste-map: 29.5.0 + jest-message-util: 29.5.0 + jest-mock: 29.5.0 + jest-regex-util: 29.4.3 + jest-resolve: 29.5.0 + jest-snapshot: 29.5.0 + jest-util: 29.5.0 slash: 3.0.0 strip-bom: 4.0.0 transitivePeerDependencies: @@ -13020,26 +14078,26 @@ packages: engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} dependencies: '@types/node': 18.11.18 - graceful-fs: 4.2.10 + graceful-fs: 4.2.11 dev: true /jest-snapshot/27.5.1: resolution: {integrity: sha512-yYykXI5a0I31xX67mgeLw1DZ0bJB+gpq5IpSuCAoyDi0+BhgU/RIrL+RTzDmkNTchvDFWKP8lp+w/42Z3us5sA==} engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} dependencies: - '@babel/core': 7.20.12 - '@babel/generator': 7.20.7 - '@babel/plugin-syntax-typescript': 7.20.0_@babel+core@7.20.12 - '@babel/traverse': 7.20.12 - '@babel/types': 7.20.7 + '@babel/core': 7.21.3 + '@babel/generator': 7.21.3 + '@babel/plugin-syntax-typescript': 7.20.0_@babel+core@7.21.3 + '@babel/traverse': 7.21.3 + '@babel/types': 7.21.3 '@jest/transform': 27.5.1 '@jest/types': 27.5.1 '@types/babel__traverse': 7.18.3 '@types/prettier': 2.7.2 - babel-preset-current-node-syntax: 1.0.1_@babel+core@7.20.12 + babel-preset-current-node-syntax: 1.0.1_@babel+core@7.21.3 chalk: 4.1.2 expect: 27.5.1 - graceful-fs: 4.2.10 + graceful-fs: 4.2.11 jest-diff: 27.5.1 jest-get-type: 27.5.1 jest-haste-map: 27.5.1 @@ -13053,33 +14111,32 @@ packages: - supports-color dev: true - /jest-snapshot/29.3.1: - resolution: {integrity: sha512-+3JOc+s28upYLI2OJM4PWRGK9AgpsMs/ekNryUV0yMBClT9B1DF2u2qay8YxcQd338PPYSFNb0lsar1B49sLDA==} + /jest-snapshot/29.5.0: + resolution: {integrity: sha512-x7Wolra5V0tt3wRs3/ts3S6ciSQVypgGQlJpz2rsdQYoUKxMxPNaoHMGJN6qAuPJqS+2iQ1ZUn5kl7HCyls84g==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: - '@babel/core': 7.20.12 - '@babel/generator': 7.20.7 - '@babel/plugin-syntax-jsx': 7.18.6_@babel+core@7.20.12 - '@babel/plugin-syntax-typescript': 7.20.0_@babel+core@7.20.12 - '@babel/traverse': 7.20.12 - '@babel/types': 7.20.7 - '@jest/expect-utils': 29.3.1 + '@babel/core': 7.21.3 + '@babel/generator': 7.21.3 + '@babel/plugin-syntax-jsx': 7.18.6_@babel+core@7.21.3 + '@babel/plugin-syntax-typescript': 7.20.0_@babel+core@7.21.3 + '@babel/traverse': 7.21.3 + '@babel/types': 7.21.3 + '@jest/expect-utils': 29.5.0 '@jest/transform': 29.5.0 - '@jest/types': 29.4.3 + '@jest/types': 29.5.0 '@types/babel__traverse': 7.18.3 '@types/prettier': 2.7.2 - babel-preset-current-node-syntax: 1.0.1_@babel+core@7.20.12 + babel-preset-current-node-syntax: 1.0.1_@babel+core@7.21.3 chalk: 4.1.2 - expect: 29.3.1 - graceful-fs: 4.2.10 - jest-diff: 29.3.1 - jest-get-type: 29.2.0 - jest-haste-map: 29.3.1 - jest-matcher-utils: 29.3.1 - jest-message-util: 29.4.3 - jest-util: 29.4.3 + expect: 29.5.0 + graceful-fs: 4.2.11 + jest-diff: 29.5.0 + jest-get-type: 29.4.3 + jest-matcher-utils: 29.5.0 + jest-message-util: 29.5.0 + jest-util: 29.5.0 natural-compare: 1.4.0 - pretty-format: 29.4.3 + pretty-format: 29.5.0 semver: 7.3.8 transitivePeerDependencies: - supports-color @@ -13092,8 +14149,8 @@ packages: '@jest/types': 27.5.1 '@types/node': 18.11.18 chalk: 4.1.2 - ci-info: 3.7.1 - graceful-fs: 4.2.10 + ci-info: 3.8.0 + graceful-fs: 4.2.11 picomatch: 2.3.1 dev: true @@ -13104,32 +14161,8 @@ packages: '@jest/types': 28.1.3 '@types/node': 18.11.18 chalk: 4.1.2 - ci-info: 3.7.1 - graceful-fs: 4.2.10 - picomatch: 2.3.1 - dev: true - - /jest-util/29.3.1: - resolution: {integrity: sha512-7YOVZaiX7RJLv76ZfHt4nbNEzzTRiMW/IiOG7ZOKmTXmoGBxUDefgMAxQubu6WPVqP5zSzAdZG0FfLcC7HOIFQ==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - dependencies: - '@jest/types': 29.4.3 - '@types/node': 18.11.18 - chalk: 4.1.2 - ci-info: 3.7.1 - graceful-fs: 4.2.10 - picomatch: 2.3.1 - dev: true - - /jest-util/29.4.3: - resolution: {integrity: sha512-ToSGORAz4SSSoqxDSylWX8JzkOQR7zoBtNRsA7e+1WUX5F8jrOwaNpuh1YfJHJKDHXLHmObv5eOjejUd+/Ws+Q==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - dependencies: - '@jest/types': 29.5.0 - '@types/node': 18.11.18 - chalk: 4.1.2 - ci-info: 3.7.1 - graceful-fs: 4.2.10 + ci-info: 3.8.0 + graceful-fs: 4.2.11 picomatch: 2.3.1 dev: true @@ -13140,8 +14173,8 @@ packages: '@jest/types': 29.5.0 '@types/node': 18.11.18 chalk: 4.1.2 - ci-info: 3.7.1 - graceful-fs: 4.2.10 + ci-info: 3.8.0 + graceful-fs: 4.2.11 picomatch: 2.3.1 dev: true @@ -13157,16 +14190,16 @@ packages: pretty-format: 27.5.1 dev: true - /jest-validate/29.3.1: - resolution: {integrity: sha512-N9Lr3oYR2Mpzuelp1F8negJR3YE+L1ebk1rYA5qYo9TTY3f9OWdptLoNSPP9itOCBIRBqjt/S5XHlzYglLN67g==} + /jest-validate/29.5.0: + resolution: {integrity: sha512-pC26etNIi+y3HV8A+tUGr/lph9B18GnzSRAkPaaZJIE1eFdiYm6/CewuiJQ8/RlfHd1u/8Ioi8/sJ+CmbA+zAQ==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: - '@jest/types': 29.4.3 + '@jest/types': 29.5.0 camelcase: 6.3.0 chalk: 4.1.2 - jest-get-type: 29.2.0 + jest-get-type: 29.4.3 leven: 3.1.0 - pretty-format: 29.4.3 + pretty-format: 29.5.0 dev: true /jest-watch-typeahead/1.1.0_jest@27.5.1: @@ -13212,11 +14245,11 @@ packages: string-length: 4.0.2 dev: true - /jest-watcher/29.3.1: - resolution: {integrity: sha512-RspXG2BQFDsZSRKGCT/NiNa8RkQ1iKAjrO0//soTMWx/QUt+OcxMqMSBxz23PYGqUuWm2+m2mNNsmj0eIoOaFg==} + /jest-watcher/29.5.0: + resolution: {integrity: sha512-KmTojKcapuqYrKDpRwfqcQ3zjMlwu27SYext9pt4GlF5FUgB+7XE1mcCnSm6a4uUpFyQIkb6ZhzZvHl+jiBCiA==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: - '@jest/test-result': 29.3.1 + '@jest/test-result': 29.5.0 '@jest/types': 29.5.0 '@types/node': 18.11.18 ansi-escapes: 4.3.2 @@ -13253,16 +14286,6 @@ packages: supports-color: 8.1.1 dev: true - /jest-worker/29.3.1: - resolution: {integrity: sha512-lY4AnnmsEWeiXirAIA0c9SDPbuCBq8IYuDVL8PMm0MZ2PEs2yPvRA/J64QBXuZp7CYKrDM/rmNrc9/i3KJQncw==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - dependencies: - '@types/node': 18.11.18 - jest-util: 29.5.0 - merge-stream: 2.0.0 - supports-color: 8.1.1 - dev: true - /jest-worker/29.5.0: resolution: {integrity: sha512-NcrQnevGoSp4b5kg+akIpthoAFHxPBcb5P6mYPY0fUNT+sSvmtu6jlkEle3anczUKIKEbMxFimk9oTP/tpIPgA==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} @@ -13304,10 +14327,10 @@ packages: node-notifier: optional: true dependencies: - '@jest/core': 29.3.1 - '@jest/types': 29.3.1 + '@jest/core': 29.5.0 + '@jest/types': 29.5.0 import-local: 3.1.0 - jest-cli: 29.3.1_@types+node@18.11.18 + jest-cli: 29.5.0_@types+node@18.11.18 transitivePeerDependencies: - '@types/node' - supports-color @@ -13324,10 +14347,10 @@ packages: node-notifier: optional: true dependencies: - '@jest/core': 29.3.1_ts-node@10.9.1 - '@jest/types': 29.3.1 + '@jest/core': 29.5.0_ts-node@10.9.1 + '@jest/types': 29.5.0 import-local: 3.1.0 - jest-cli: 29.3.1_zfha7dvnw4nti6zkbsmhmn6xo4 + jest-cli: 29.5.0_zfha7dvnw4nti6zkbsmhmn6xo4 transitivePeerDependencies: - '@types/node' - supports-color @@ -13337,8 +14360,8 @@ packages: /jju/1.4.0: resolution: {integrity: sha512-8wb9Yw966OSxApiCt0K3yNJL8pnNeIv+OEq2YMidz4FKP6nonSRoOXc80iXY4JaN2FC11B9qsNmDsm+ZOfMROA==} - /joi/17.7.0: - resolution: {integrity: sha512-1/ugc8djfn93rTE3WRKdCzGGt/EtiYKxITMO4Wiv6q5JL1gl9ePt4kBsl1S499nbosspfctIQTpYIhSmHA3WAg==} + /joi/17.9.0: + resolution: {integrity: sha512-PWirKfKoZL3kWHfkGKzdCLGv23c00rI31PKVDMg33b/ANe+bMC/ZPdEnHAoHzn5Hy6BTg3J0A2yRVKzT64e6Xw==} dependencies: '@hapi/hoek': 9.3.0 '@hapi/topo': 5.1.0 @@ -13347,12 +14370,12 @@ packages: '@sideway/pinpoint': 2.0.0 dev: true - /jose/4.11.2: - resolution: {integrity: sha512-njj0VL2TsIxCtgzhO+9RRobBvws4oYyCM8TpvoUQwl/MbIM3NFJRR9+e6x0sS5xXaP1t6OCBkaBME98OV9zU5A==} + /jose/4.13.1: + resolution: {integrity: sha512-MSJQC5vXco5Br38mzaQKiq9mwt7lwj2eXpgpRyQYNHYt2lq1PjkWa7DLXX0WVcQLE9HhMh3jPiufS7fhJf+CLQ==} dev: false - /js-sdsl/4.2.0: - resolution: {integrity: sha512-dyBIzQBDkCqCu+0upx25Y2jGdbTGxE9fshMsCdK0ViOongpV+n5tXRcZY9v7CaVQ79AGS9KA1KHtojxiM7aXSQ==} + /js-sdsl/4.3.0: + resolution: {integrity: sha512-mifzlm2+5nZ+lEcLJMoBK0/IH/bDg8XnJfd/Wq6IP+xoCjLZsTOnV2QpxlVbX9bMnkl5PdEjNtBJ9Cj1NjifhQ==} dev: true /js-sha3/0.8.0: @@ -13393,7 +14416,7 @@ packages: optional: true dependencies: abab: 2.0.6 - acorn: 8.8.1 + acorn: 8.8.2 acorn-globals: 6.0.0 cssom: 0.4.4 cssstyle: 2.3.0 @@ -13417,7 +14440,7 @@ packages: whatwg-encoding: 1.0.5 whatwg-mimetype: 2.3.0 whatwg-url: 8.7.0 - ws: 7.5.9 + ws: 7.4.6 xml-name-validator: 3.0.0 transitivePeerDependencies: - bufferutil @@ -13435,7 +14458,7 @@ packages: optional: true dependencies: abab: 2.0.6 - acorn: 8.8.1 + acorn: 8.8.2 acorn-globals: 7.0.1 cssom: 0.5.0 cssstyle: 2.3.0 @@ -13458,7 +14481,7 @@ packages: whatwg-encoding: 2.0.0 whatwg-mimetype: 3.0.0 whatwg-url: 11.0.0 - ws: 8.12.0 + ws: 8.13.0 xml-name-validator: 4.0.0 transitivePeerDependencies: - bufferutil @@ -13477,6 +14500,15 @@ packages: hasBin: true dev: true + /json-bigint/1.0.0: + resolution: {integrity: sha512-SiPv/8VpZuWbvLSMtTDU8hEfrZWg/mH/nV/b4o0CYbSxu1UIQPLdwKOCIyLQX+VIPO5vrLX3i8qtqFyhdPSUSQ==} + dependencies: + bignumber.js: 9.1.1 + dev: true + + /json-buffer/3.0.1: + resolution: {integrity: sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==} + /json-canonicalize/1.0.4: resolution: {integrity: sha512-YNr/ePzgReHwlnAm3EVV1pcimwesI+1DZr5v7WBKOc1zE1t7pjxWAPRxJFT3ll6flLIdRe0DPia/8cl2FLAZNA==} dev: false @@ -13489,6 +14521,12 @@ packages: resolution: {integrity: sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==} dev: true + /json-pointer/0.6.2: + resolution: {integrity: sha512-vLWcKbOaXlO+jvRy4qNd+TI1QUPZzfJj1tpJ3vAXDych5XJf93ftpUKe5pKCrzyIIwgBJcOcCVRUfqQP25afBw==} + dependencies: + foreach: 2.0.6 + dev: false + /json-schema-traverse/0.4.1: resolution: {integrity: sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==} @@ -13527,7 +14565,7 @@ packages: resolution: {integrity: sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==} hasBin: true dependencies: - minimist: 1.2.7 + minimist: 1.2.8 dev: true /json5/2.2.3: @@ -13542,21 +14580,21 @@ packages: /jsonfile/4.0.0: resolution: {integrity: sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==} optionalDependencies: - graceful-fs: 4.2.10 + graceful-fs: 4.2.11 /jsonfile/6.1.0: resolution: {integrity: sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==} dependencies: universalify: 2.0.0 optionalDependencies: - graceful-fs: 4.2.10 + graceful-fs: 4.2.11 /jsonld-checker/0.1.8: resolution: {integrity: sha512-jclmnPRrm5SEpaIV6IiSTJxplRAqIWHduQLsUfrYpZM41Ng48m1RN2/aUyHze/ynfO0D2UhlJBt8SdObsH5GBw==} engines: {node: '>=10'} dependencies: jsonld: /@digitalcredentials/jsonld/5.2.1 - node-fetch: 2.6.7 + node-fetch: 2.6.9 transitivePeerDependencies: - domexception - encoding @@ -13597,7 +14635,13 @@ packages: dependencies: node-addon-api: 2.0.2 node-gyp-build: 4.6.0 - readable-stream: 3.6.0 + readable-stream: 3.6.2 + dev: true + + /keyv/4.5.2: + resolution: {integrity: sha512-5MHbFaKn8cNSmVW7BYnijeAVlE4cYA/SVkifVgrh7yotnfhKmjuXpDKjrABLnT0SfHWV21P8ow07OGfRrNDg8g==} + dependencies: + json-buffer: 3.0.1 dev: true /kind-of/2.0.1: @@ -13623,8 +14667,8 @@ packages: engines: {node: '>=6'} dev: true - /klona/2.0.5: - resolution: {integrity: sha512-pJiBpiXMbt7dkzXe8Ghj/u4FfXOOa98fPW+bihOJ4SjnoijweJrNThJfd3ifXpXhREjpoF2mZVH1GfS9LV3kHQ==} + /klona/2.0.6: + resolution: {integrity: sha512-dhG34DXATL5hSxJbIexCft8FChFXtmskoZYnoPWjXQuebWYCNkVeV3KkGegCK9CP1oswI/vQibS2GY7Em/sJJA==} engines: {node: '>= 8'} dev: true @@ -13660,6 +14704,13 @@ packages: language-subtag-registry: 0.3.22 dev: true + /launch-editor/2.6.0: + resolution: {integrity: sha512-JpDCcQnyAAzZZaZ7vEiSqL690w7dAEyLao+KC96zBplnYbJS7TYNjvM3M7y3dGz+v7aIsJk3hllWuc0kWAjyRQ==} + dependencies: + picocolors: 1.0.0 + shell-quote: 1.8.0 + dev: true + /lazy-cache/0.2.7: resolution: {integrity: sha512-gkX52wvU/R8DVMMt78ATVPFMJqfW8FPz1GZ1sVHBVQHmu/WvhIWE4cE1GBzhJNFicDeYhnwp6Rl35BcAIM3YOQ==} engines: {node: '>=0.10.0'} @@ -13682,7 +14733,7 @@ packages: make-fetch-happen: 9.1.0 p-map: 3.0.0 progress: 2.0.3 - yargs: 17.6.2 + yargs: 17.7.1 transitivePeerDependencies: - bluebird - supports-color @@ -13708,16 +14759,16 @@ packages: '@lerna/init': 6.4.1 '@lerna/link': 6.4.1 '@lerna/list': 6.4.1 - '@lerna/publish': 6.4.1_nx@15.6.3+typescript@4.9.4 + '@lerna/publish': 6.4.1_nx@15.8.7+typescript@4.9.5 '@lerna/run': 6.4.1 '@lerna/validation-error': 6.4.1 - '@lerna/version': 6.4.1_nx@15.6.3+typescript@4.9.4 - '@nrwl/devkit': 15.6.3_nx@15.6.3+typescript@4.9.4 + '@lerna/version': 6.4.1_nx@15.8.7+typescript@4.9.5 + '@nrwl/devkit': 15.8.7_nx@15.8.7+typescript@4.9.5 import-local: 3.1.0 inquirer: 8.2.5 npmlog: 6.0.2 - nx: 15.6.3 - typescript: 4.9.4 + nx: 15.8.7 + typescript: 4.9.5 transitivePeerDependencies: - '@swc-node/register' - '@swc/core' @@ -13810,8 +14861,8 @@ packages: - supports-color dev: true - /lilconfig/2.0.6: - resolution: {integrity: sha512-9JROoBW7pobfsx+Sq2JsASvCo6Pfo6WWoUW79HuB1BCoBXD4PLWJPqDF6fNj67pqBYTbAHkE57M1kS/+L1neOg==} + /lilconfig/2.1.0: + resolution: {integrity: sha512-utWOt/GHzuUxnLKxB6dk81RoOeoNeHgbrXiuGk4yyF5qlRz+iIVWu56E2fqGHFrXz0QNUhLB/8nKqvRH66JKGQ==} engines: {node: '>=10'} dev: true @@ -13828,7 +14879,7 @@ packages: resolution: {integrity: sha512-Kx8hMakjX03tiGTLAIdJ+lL0htKnXjEZN6hk/tozf/WOuYGdZBJrZ+rCJRbVCugsjB3jMLn9746NsQIf5VjBMw==} engines: {node: '>=4'} dependencies: - graceful-fs: 4.2.10 + graceful-fs: 4.2.11 parse-json: 4.0.0 pify: 3.0.0 strip-bom: 3.0.0 @@ -13838,7 +14889,7 @@ packages: resolution: {integrity: sha512-gUD/epcRms75Cw8RT1pUdHugZYM5ce64ucs2GEISABwkRsOQr0q2wm/MV2TKThycIe5e0ytRweW2RZxclogCdQ==} engines: {node: '>=8'} dependencies: - graceful-fs: 4.2.10 + graceful-fs: 4.2.11 parse-json: 5.2.0 strip-bom: 4.0.0 type-fest: 0.6.0 @@ -13892,8 +14943,8 @@ packages: dependencies: p-locate: 5.0.0 - /locate-path/7.1.1: - resolution: {integrity: sha512-vJXaRMJgRVD3+cUZs3Mncj2mxpt5mP0EmNOsxRSZRMlbqjvxzDEOIUWXGmavo0ZC9+tNZCBLQ66reA11nbpHZg==} + /locate-path/7.2.0: + resolution: {integrity: sha512-gvVijfZvn7R+2qyPX8mAuKcFGDf6Nc61GdvGafQsHL0sBIxfKzA+usWn4GFC/bk+QdwPUD4kWFJLhElipq+0VA==} engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} dependencies: p-locate: 6.0.0 @@ -13996,8 +15047,8 @@ packages: dependencies: yallist: 4.0.0 - /lru-cache/7.14.1: - resolution: {integrity: sha512-ysxwsnTKdAx96aTRdhDOCQfDgbHnt8SK0KY8SEjO0wHinhWOFTESbjVCMPbU1uGXg/ch4lifqx0wfjOawU2+WA==} + /lru-cache/7.18.3: + resolution: {integrity: sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA==} engines: {node: '>=12'} dev: true @@ -14029,13 +15080,13 @@ packages: resolution: {integrity: sha512-NgOPbRiaQM10DYXvN3/hhGVI2M5MtITFryzBGxHM5p4wnFxsVCbxkrBrDsk+EZ5OB4jEOT7AjDxtdF+KVEFT7w==} engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0} dependencies: - agentkeepalive: 4.2.1 + agentkeepalive: 4.3.0 cacache: 16.1.3 - http-cache-semantics: 4.1.0 + http-cache-semantics: 4.1.1 http-proxy-agent: 5.0.0 https-proxy-agent: 5.0.1 is-lambda: 1.0.1 - lru-cache: 7.14.1 + lru-cache: 7.18.3 minipass: 3.3.6 minipass-collect: 1.0.2 minipass-fetch: 2.1.2 @@ -14054,9 +15105,9 @@ packages: resolution: {integrity: sha512-+zopwDy7DNknmwPQplem5lAZX/eCOzSvSNNcSKm5eVwTkOBzoktEfXsa9L23J/GIRhxRsaxzkPEhrJEpE2F4Gg==} engines: {node: '>= 10'} dependencies: - agentkeepalive: 4.2.1 + agentkeepalive: 4.3.0 cacache: 15.3.0 - http-cache-semantics: 4.1.0 + http-cache-semantics: 4.1.1 http-proxy-agent: 4.0.1 https-proxy-agent: 5.0.1 is-lambda: 1.0.1 @@ -14090,7 +15141,7 @@ packages: engines: {node: '>=8'} dev: true - /marked-terminal/5.1.1_marked@4.2.5: + /marked-terminal/5.1.1_marked@4.2.12: resolution: {integrity: sha512-+cKTOx9P4l7HwINYhzbrBSyzgxO2HaHKGZGuB1orZsMIgXYaJyfidT81VXRdpelW/PcHEWxywscePVgI/oUF6g==} engines: {node: '>=14.13.1 || >=16.0.0'} peerDependencies: @@ -14100,13 +15151,13 @@ packages: cardinal: 2.1.1 chalk: 5.2.0 cli-table3: 0.6.3 - marked: 4.2.5 + marked: 4.2.12 node-emoji: 1.11.0 supports-hyperlinks: 2.3.0 dev: true - /marked/4.2.5: - resolution: {integrity: sha512-jPueVhumq7idETHkb203WDD4fMA3yV9emQ5vLwop58lu8bTclMghBWcYAavlDqIEMaisADinV1TooIFCfqOsYQ==} + /marked/4.2.12: + resolution: {integrity: sha512-yr8hSKa3Fv4D3jdZmtMMPghgVt6TWbk86WQaWhDloQjRSQhMMYCAro7jP7VDJrjjdV8pxVxMssXS8B8Y5DZ5aw==} engines: {node: '>= 12'} hasBin: true dev: true @@ -14138,6 +15189,11 @@ packages: fs-monkey: 1.0.3 dev: true + /memory-pager/1.5.0: + resolution: {integrity: sha512-ZS4Bp4r/Zoeq6+NLJpP+0Zzm0pR8whtGPf1XExKLJBAczGMnSi3It14OiNCStjQjM6NU1okjQGSxgEZN8eBYKg==} + dev: true + optional: true + /meow/8.1.2: resolution: {integrity: sha512-r85E3NdZ+mpYk1C6RjPFEMSE+s1iZMuHtsHAqY0DT3jZczl0diWUZ8g6oU7h0M9cD2EL+PzaYghhCLzR0ZNn5Q==} engines: {node: '>=10'} @@ -14229,14 +15285,14 @@ packages: engines: {node: '>=4'} dev: true - /mini-css-extract-plugin/2.7.2_webpack@5.75.0: - resolution: {integrity: sha512-EdlUizq13o0Pd+uCp+WO/JpkLvHRVGt97RqfeGhXqAcorYo1ypJSpkV+WDT0vY/kmh/p7wRdJNJtuyK540PXDw==} + /mini-css-extract-plugin/2.7.5_webpack@5.76.2: + resolution: {integrity: sha512-9HaR++0mlgom81s95vvNjxkg52n2b5s//3ZTI1EtzFb98awsLSivs2LMsVqnQ3ay0PVhqWcGNyDaTE961FOcjQ==} engines: {node: '>= 12.13.0'} peerDependencies: webpack: ^5.0.0 dependencies: schema-utils: 4.0.0 - webpack: 5.75.0 + webpack: 5.76.2 dev: true /minimalistic-assert/1.0.1: @@ -14256,8 +15312,8 @@ packages: dependencies: brace-expansion: 1.1.11 - /minimatch/5.1.2: - resolution: {integrity: sha512-bNH9mmM9qsJ2X4r2Nat1B//1dJVcn3+iBLa3IgqJ7EbGaDNepL9QSHOxN4ng33s52VMMhhIfgCYDk3C4ZmlDAg==} + /minimatch/5.1.6: + resolution: {integrity: sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==} engines: {node: '>=10'} dependencies: brace-expansion: 2.0.1 @@ -14271,8 +15327,8 @@ packages: kind-of: 6.0.3 dev: true - /minimist/1.2.7: - resolution: {integrity: sha512-bzfL1YUZsP41gmu/qjrEk0Q6i2ix/cVeAhbCbqH9u3zYutS1cLg00qhrD0M2MVdCcx4Sc0UpP2eBWo9rotpq6g==} + /minimist/1.2.8: + resolution: {integrity: sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==} /minipass-collect/1.0.2: resolution: {integrity: sha512-6T6lH0H8OG9kITm/Jm6tdooIbogG9e0tLgpY6mphXSm/A9u8Nq1ryBG+Qspiub9LjWlBPsPS3tWQ/Botq4FdxA==} @@ -14332,11 +15388,9 @@ packages: dependencies: yallist: 4.0.0 - /minipass/4.0.0: - resolution: {integrity: sha512-g2Uuh2jEKoht+zvO6vJqXmYpflPqzRBT+Th2h01DKh5z7wbY/AZ2gCQ78cP70YoHPyFdY30YBV5WxgLOEwOykw==} + /minipass/4.2.5: + resolution: {integrity: sha512-+yQl7SX3bIT83Lhb4BVorMAHVuqsskxRdlmO9kTpyukp8vsm2Sn/fUOV9xlnG8/a5JsypJzap21lz/y3FBMJ8Q==} engines: {node: '>=8'} - dependencies: - yallist: 4.0.0 /minizlib/2.1.2: resolution: {integrity: sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg==} @@ -14370,7 +15424,7 @@ packages: resolution: {integrity: sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==} hasBin: true dependencies: - minimist: 1.2.7 + minimist: 1.2.8 dev: true /mkdirp/1.0.4: @@ -14378,11 +15432,10 @@ packages: engines: {node: '>=10'} hasBin: true - /mkdirp/2.1.3: - resolution: {integrity: sha512-sjAkg21peAG9HS+Dkx7hlG9Ztx7HLeKnvB3NQRcu/mltCVmvkF0pisbiTSfDVYTT86XEfZrTUosLdZLStquZUw==} + /mkdirp/2.1.5: + resolution: {integrity: sha512-jbjfql+shJtAPrFoKxHOXip4xS+kul9W3OzfzzrqueWK2QMGon2bFH2opl6W9EagBThjEz+iysyi/swOoVfB/w==} engines: {node: '>=10'} hasBin: true - dev: false /modify-values/1.0.1: resolution: {integrity: sha512-xV2bxeN6F7oYjZWTe/YPAy6MN2M+sL4u/Rlm2AHCIVGfo2p1yGmBHQ6vHehl4bRTZBdHu3TSkWdYgkwpYzAGSw==} @@ -14394,6 +15447,27 @@ packages: engines: {node: '>=10'} dev: true + /mongodb-connection-string-url/2.6.0: + resolution: {integrity: sha512-WvTZlI9ab0QYtTYnuMLgobULWhokRjtC7db9LtcVfJ+Hsnyr5eo6ZtNAt3Ly24XZScGMelOcGtm7lSn0332tPQ==} + dependencies: + '@types/whatwg-url': 8.2.2 + whatwg-url: 11.0.0 + dev: true + + /mongodb/4.14.0: + resolution: {integrity: sha512-coGKkWXIBczZPr284tYKFLg+KbGPPLlSbdgfKAb6QqCFt5bo5VFZ50O3FFzsw4rnkqjwT6D8Qcoo9nshYKM7Mg==} + engines: {node: '>=12.9.0'} + dependencies: + bson: 4.7.2 + mongodb-connection-string-url: 2.6.0 + socks: 2.7.1 + optionalDependencies: + '@aws-sdk/credential-providers': 3.295.0 + saslprep: 1.0.3 + transitivePeerDependencies: + - aws-crt + dev: true + /mri/1.2.0: resolution: {integrity: sha512-tzzskb3bG8LvYGFF/mDTpq3jpI6Q9wc3LEmBaghu+DdCssd1FakN7Bc0hVNmEyGq1bq3RgfkCb3cmQLpNPOroA==} engines: {node: '>=4'} @@ -14436,8 +15510,8 @@ packages: varint: 6.0.0 dev: false - /multiformats/11.0.1: - resolution: {integrity: sha512-atWruyH34YiknSdL5yeIir00EDlJRpHzELYQxG7Iy29eCyL+VrZHpPrX5yqlik3jnuqpLpRKVZ0SGVb9UzKaSA==} + /multiformats/11.0.2: + resolution: {integrity: sha512-b5mYMkOkARIuVZCpvijFj9a6m5wMVLC7cf/jIPd5D/ARDOfLC5+IFkbgDXQgcU2goIsTD/O9NY4DI/Mt4OGvlg==} engines: {node: '>=16.0.0', npm: '>=7.0.0'} dev: true @@ -14477,6 +15551,12 @@ packages: /mute-stream/0.0.8: resolution: {integrity: sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==} + dev: true + + /mute-stream/1.0.0: + resolution: {integrity: sha512-avsJQhyd+680gKXyG/sQc0nXaC6rBkPOfyHYcFb9+hdkqQkR9bdnkJ0AMZhke0oesPqIO+mFFJ+IdBc7mst4IA==} + engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} + dev: false /mz/2.7.0: resolution: {integrity: sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==} @@ -14559,6 +15639,17 @@ packages: dependencies: whatwg-url: 5.0.0 + /node-fetch/2.6.9: + resolution: {integrity: sha512-DJm/CJkZkRjKKj4Zi4BsKVZh3ValV5IR5s7LVZnW+6YMh0W1BfNA8XSs6DLMGYlId5F3KnA70uu2qepcR08Qqg==} + engines: {node: 4.x || >=6.0.0} + peerDependencies: + encoding: ^0.1.0 + peerDependenciesMeta: + encoding: + optional: true + dependencies: + whatwg-url: 5.0.0 + /node-fetch/3.0.0-beta.9: resolution: {integrity: sha512-RdbZCEynH2tH46+tj0ua9caUHVWrd/RHnRfvly2EVdqGmI3ndS1Vn/xjm5KuGejDt2RNDQsVRLPNd2QPwcewVg==} engines: {node: ^10.17 || >=12.3} @@ -14569,11 +15660,11 @@ packages: - domexception dev: false - /node-fetch/3.3.0: - resolution: {integrity: sha512-BKwRP/O0UvoMKp7GNdwPlObhYGB5DQqwhEDQlNKuoqwVYSxkSZCSbHjnFFmUEtwSKRPU4kNK8PbDYYitwaE3QA==} + /node-fetch/3.3.1: + resolution: {integrity: sha512-cRVc/kyto/7E5shrWca1Wsea4y6tL9iYJE5FBCius3JQfb/4P4I295PfhgbJQBLTx6lATE4z+wK0rPM4VS2uow==} engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} dependencies: - data-uri-to-buffer: 4.0.0 + data-uri-to-buffer: 4.0.1 fetch-blob: 3.2.0 formdata-polyfill: 4.0.10 dev: true @@ -14600,7 +15691,7 @@ packages: dependencies: env-paths: 2.2.1 glob: 7.2.3 - graceful-fs: 4.2.10 + graceful-fs: 4.2.11 make-fetch-happen: 9.1.0 nopt: 5.0.0 npmlog: 6.0.2 @@ -14620,7 +15711,7 @@ packages: dependencies: env-paths: 2.2.1 glob: 7.2.3 - graceful-fs: 4.2.10 + graceful-fs: 4.2.11 make-fetch-happen: 10.2.1 nopt: 6.0.0 npmlog: 6.0.2 @@ -14637,8 +15728,8 @@ packages: resolution: {integrity: sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw==} dev: true - /node-releases/2.0.8: - resolution: {integrity: sha512-dFSmB8fFHEH/s81Xi+Y/15DQY6VHW81nXRj86EMSL3lmuTmK1e+aT4wrFCkTbm+gSwkw4KpX+rT/pMM2c1mF+A==} + /node-releases/2.0.10: + resolution: {integrity: sha512-5GFldHPXVG/YZmFzJvKK2zDSzPKhEp0+ZR5SVaoSag9fsL5YgHbUHDfnG5494ISANDcK4KwPXAx2xqVEydmd7w==} dev: true /nopt/5.0.0: @@ -14798,8 +15889,8 @@ packages: path-key: 4.0.0 dev: true - /npm/8.19.3: - resolution: {integrity: sha512-0QjmyPtDxSyMWWD8I91QGbrgx9KzbV6C9FK1liEb/K0zppiZkr5KxXc990G+LzPwBHDfRjUBlO9T1qZ08vl9mA==} + /npm/8.19.4: + resolution: {integrity: sha512-3HANl8i9DKnUA89P4KEgVNN28EjSeDCmvEqbzOAuxCFDzdBZzjUl99zgnGpOUumvW5lvJo2HKcjrsc+tfyv1Hw==} engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0} hasBin: true dev: true @@ -14911,8 +16002,8 @@ packages: resolution: {integrity: sha512-90yv+6538zuvUMnN+zCr8LuV6bPFdq50304114vJYJ8RDyK8D5O9Phpbd6SZWgI7PwzmmfN1upeOJlvybDSgCw==} dev: true - /nx/15.6.3: - resolution: {integrity: sha512-3t0A0GPLNen1yPAyE+VGZ3nkAzZYb5nfXtAcx8SHBlKq4u42yBY3khBmP1y4Og3jhIwFIj7J7Npeh8ZKrthmYQ==} + /nx/15.8.7: + resolution: {integrity: sha512-u6p/1gU20WU61orxK7hcXBsVspPHy3X66XVAAakkYcaOBlsJhJrR7Og191qIyjEkqEWmcekiDQVw3D6XfagL4Q==} hasBin: true requiresBuild: true peerDependencies: @@ -14924,13 +16015,13 @@ packages: '@swc/core': optional: true dependencies: - '@nrwl/cli': 15.6.3 - '@nrwl/tao': 15.6.3 + '@nrwl/cli': 15.8.7 + '@nrwl/tao': 15.8.7 '@parcel/watcher': 2.0.4 '@yarnpkg/lockfile': 1.1.0 - '@yarnpkg/parsers': 3.0.0-rc.37 + '@yarnpkg/parsers': 3.0.0-rc.40 '@zkochan/js-yaml': 0.0.6 - axios: 1.2.6 + axios: 1.3.4 chalk: 4.1.2 cli-cursor: 3.1.0 cli-spinners: 2.6.1 @@ -14940,7 +16031,7 @@ packages: fast-glob: 3.2.7 figures: 3.2.0 flat: 5.0.2 - fs-extra: 11.1.0 + fs-extra: 11.1.1 glob: 7.1.4 ignore: 5.2.4 js-yaml: 4.1.0 @@ -14948,17 +16039,27 @@ packages: lines-and-columns: 2.0.3 minimatch: 3.0.5 npm-run-path: 4.0.1 - open: 8.4.0 + open: 8.4.2 semver: 7.3.4 string-width: 4.2.3 strong-log-transformer: 2.1.0 tar-stream: 2.2.0 tmp: 0.2.1 tsconfig-paths: 4.1.2 - tslib: 2.4.1 + tslib: 2.5.0 v8-compile-cache: 2.3.0 - yargs: 17.6.2 + yargs: 17.7.1 yargs-parser: 21.1.1 + optionalDependencies: + '@nrwl/nx-darwin-arm64': 15.8.7 + '@nrwl/nx-darwin-x64': 15.8.7 + '@nrwl/nx-linux-arm-gnueabihf': 15.8.7 + '@nrwl/nx-linux-arm64-gnu': 15.8.7 + '@nrwl/nx-linux-arm64-musl': 15.8.7 + '@nrwl/nx-linux-x64-gnu': 15.8.7 + '@nrwl/nx-linux-x64-musl': 15.8.7 + '@nrwl/nx-win32-arm64-msvc': 15.8.7 + '@nrwl/nx-win32-x64-msvc': 15.8.7 transitivePeerDependencies: - debug dev: true @@ -14976,7 +16077,7 @@ packages: oas-kit-common: 1.0.8 reftools: 1.1.9 yaml: 1.10.2 - yargs: 17.6.2 + yargs: 17.7.1 /object-assign/4.1.1: resolution: {integrity: sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==} @@ -14987,15 +16088,15 @@ packages: engines: {node: '>= 6'} dev: true - /object-inspect/1.12.2: - resolution: {integrity: sha512-z+cPxW0QGUp0mcqcsgQyLVRDoXFQbXOwBaqyF7VIgI4TWNQsDHrBpUQslRmIfAoYWdYzs6UlKJtB2XJpTaNSpQ==} + /object-inspect/1.12.3: + resolution: {integrity: sha512-geUvdk7c+eizMNUDkRpW1wJwgfOiOeHbxBR/hLXK1aT6zmVSO0jsQcs7fj6MGw89jC/cjGfLcNOrtMYtGqm81g==} /object-is/1.1.5: resolution: {integrity: sha512-3cyDsyHgtmi7I7DfSSI2LDp6SK2lwvtbg0p0R1e0RvTqF5ceGx+K2dfSjm1bKDMVCFEDAQvy+o8c6a7VujOddw==} engines: {node: '>= 0.4'} dependencies: call-bind: 1.0.2 - define-properties: 1.1.4 + define-properties: 1.2.0 dev: true /object-keys/1.1.1: @@ -15008,7 +16109,7 @@ packages: engines: {node: '>= 0.4'} dependencies: call-bind: 1.0.2 - define-properties: 1.1.4 + define-properties: 1.2.0 has-symbols: 1.0.3 object-keys: 1.1.1 dev: true @@ -15018,8 +16119,8 @@ packages: engines: {node: '>= 0.4'} dependencies: call-bind: 1.0.2 - define-properties: 1.1.4 - es-abstract: 1.21.1 + define-properties: 1.2.0 + es-abstract: 1.21.2 dev: true /object.fromentries/2.0.6: @@ -15027,8 +16128,8 @@ packages: engines: {node: '>= 0.4'} dependencies: call-bind: 1.0.2 - define-properties: 1.1.4 - es-abstract: 1.21.1 + define-properties: 1.2.0 + es-abstract: 1.21.2 dev: true /object.getownpropertydescriptors/2.1.5: @@ -15037,15 +16138,15 @@ packages: dependencies: array.prototype.reduce: 1.0.5 call-bind: 1.0.2 - define-properties: 1.1.4 - es-abstract: 1.21.1 + define-properties: 1.2.0 + es-abstract: 1.21.2 dev: true /object.hasown/1.1.2: resolution: {integrity: sha512-B5UIT3J1W+WuWIU55h0mjlwaqxiE5vYENJXIXZ4VFe05pNYrkKuK0U/6aFcb0pKywYJh7IhfoqUfKVmrJJHZHw==} dependencies: - define-properties: 1.1.4 - es-abstract: 1.21.1 + define-properties: 1.2.0 + es-abstract: 1.21.2 dev: true /object.values/1.1.6: @@ -15053,8 +16154,8 @@ packages: engines: {node: '>= 0.4'} dependencies: call-bind: 1.0.2 - define-properties: 1.1.4 - es-abstract: 1.21.1 + define-properties: 1.2.0 + es-abstract: 1.21.2 dev: true /obuf/1.1.2: @@ -15090,8 +16191,8 @@ packages: mimic-fn: 4.0.0 dev: true - /open/8.4.0: - resolution: {integrity: sha512-XgFPPM+B28FtCCgSb9I+s9szOC1vZRSwgWsRUA5ylIxRTgKozqjOCrVOqGsYABPYK5qnfqClxZTFBa8PKt2v6Q==} + /open/8.4.2: + resolution: {integrity: sha512-7x81NCL719oNbsq/3mh+hVrAWmFuEYUqrq/Iw3kUzH8ReypT9QQ0BLoJS7/G9k6N81XjW4qHWtjWwe/9eLy1EQ==} engines: {node: '>=12'} dependencies: define-lazy-prop: 2.0.0 @@ -15141,17 +16242,17 @@ packages: wcwidth: 1.0.1 dev: true - /ora/6.1.2: - resolution: {integrity: sha512-EJQ3NiP5Xo94wJXIzAyOtSb0QEIAUu7m8t6UZ9krbz0vAJqr92JpcK/lEXg91q6B9pEGqrykkd2EQplnifDSBw==} + /ora/6.2.0: + resolution: {integrity: sha512-c1qb/1rdE+EFDYiLXh10VY459uMh7DN9zlgd8mZJLoeiPpYllN8eAOiih2Rkah5ywxRm5tHN5C9zPheDq8d1MA==} engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} dependencies: - bl: 5.1.0 chalk: 5.2.0 cli-cursor: 4.0.0 cli-spinners: 2.7.0 is-interactive: 2.0.0 is-unicode-supported: 1.3.0 log-symbols: 5.1.0 + stdin-discarder: 0.1.0 strip-ansi: 7.0.1 wcwidth: 1.0.1 dev: false @@ -15361,6 +16462,10 @@ packages: - supports-color dev: true + /pako/2.1.0: + resolution: {integrity: sha512-w+eufiZ1WuJYgPXbV/PO3NCMEc3xqylkKHzp8bxp1uW4qaSNQUkwmLLEc3kKsfz8lpV1F8Ht3U1Cm+9Srog2ug==} + dev: true + /param-case/3.0.4: resolution: {integrity: sha512-RXlj7zCYokReqWpOPH9oYivUzLYZ5vAPIfEmCTNViosC78F8F0H9y7T7gG2M39ymgutxF5gcFEsyZQSph9Bp3A==} dependencies: @@ -15560,16 +16665,16 @@ packages: engines: {node: '>=4.0.0'} dev: false - /pg-pool/3.5.2_pg@8.8.0: - resolution: {integrity: sha512-His3Fh17Z4eg7oANLob6ZvH8xIVen3phEZh2QuyrIl4dQSDVEabNducv6ysROKpDNPSD+12tONZVWfSgMvDD9w==} + /pg-pool/3.6.0_pg@8.10.0: + resolution: {integrity: sha512-clFRf2ksqd+F497kWFyM21tMjeikn60oGDmqMT8UBrynEwVEX/5R5xd2sdvdo1cZCFlguORNpVuqxIj+aK4cfQ==} peerDependencies: pg: '>=8.0' dependencies: - pg: 8.8.0 + pg: 8.10.0 dev: false - /pg-protocol/1.5.0: - resolution: {integrity: sha512-muRttij7H8TqRNu/DxrAJQITO4Ac7RmX3Klyr/9mJEOBeIpgnF8f9jAfRz5d3XwQZl5qBjF9gLsUtMPJE0vezQ==} + /pg-protocol/1.6.0: + resolution: {integrity: sha512-M+PDm637OY5WM307051+bsDia5Xej6d9IR4GwJse1qA1DIhiKlksvrneZOYQq42OM+spubpcNYEo2FcKQrDk+Q==} dev: false /pg-types/2.2.0: @@ -15583,8 +16688,8 @@ packages: postgres-interval: 1.2.0 dev: false - /pg/8.8.0: - resolution: {integrity: sha512-UXYN0ziKj+AeNNP7VDMwrehpACThH7LUl/p8TDFpEUuSejCUIwGSfxpHsPvtM6/WXFy6SU4E5RG4IJV/TZAGjw==} + /pg/8.10.0: + resolution: {integrity: sha512-ke7o7qSTMb47iwzOSaZMfeR7xToFdkE71ifIipOAAaLIM0DYzfOAXlgFFmYUIE2BcJtvnVlGCID84ZzCegE8CQ==} engines: {node: '>= 8.0.0'} peerDependencies: pg-native: '>=3.0.1' @@ -15595,8 +16700,8 @@ packages: buffer-writer: 2.0.0 packet-reader: 1.0.0 pg-connection-string: 2.5.0 - pg-pool: 3.5.2_pg@8.8.0 - pg-protocol: 1.5.0 + pg-pool: 3.6.0_pg@8.10.0 + pg-protocol: 1.6.0 pg-types: 2.2.0 pgpass: 1.0.5 dev: false @@ -15675,14 +16780,14 @@ packages: postcss-selector-parser: 6.0.11 dev: true - /postcss-browser-comments/4.0.0_5kwwozqejd6kse3tlstkrpsc6y: + /postcss-browser-comments/4.0.0_jrpp4geoaqu5dz2gragkckznb4: resolution: {integrity: sha512-X9X9/WN3KIvY9+hNERUqX9gncsgBA25XaeR+jshHz2j8+sYyHktHw1JdKuMjeLpGktXidqDhA7b/qm1mrBDmgg==} engines: {node: '>=8'} peerDependencies: browserslist: '>=4' postcss: '>=8' dependencies: - browserslist: 4.21.4 + browserslist: 4.21.5 postcss: 8.4.21 dev: true @@ -15736,13 +16841,13 @@ packages: postcss-value-parser: 4.2.0 dev: true - /postcss-colormin/5.3.0_postcss@8.4.21: - resolution: {integrity: sha512-WdDO4gOFG2Z8n4P8TWBpshnL3JpmNmJwdnfP2gbk2qBA8PWwOYcmjmI/t3CmMeL72a7Hkd+x/Mg9O2/0rD54Pg==} + /postcss-colormin/5.3.1_postcss@8.4.21: + resolution: {integrity: sha512-UsWQG0AqTFQmpBegeLLc1+c3jIqBNB0zlDGRWR+dQ3pRKJL1oeMzyqmH3o2PIfn9MBdNrVPWhDbT769LxCTLJQ==} engines: {node: ^10 || ^12 || >=14.0} peerDependencies: postcss: ^8.2.15 dependencies: - browserslist: 4.21.4 + browserslist: 4.21.5 caniuse-api: 3.0.0 colord: 2.9.3 postcss: 8.4.21 @@ -15755,7 +16860,7 @@ packages: peerDependencies: postcss: ^8.2.15 dependencies: - browserslist: 4.21.4 + browserslist: 4.21.5 postcss: 8.4.21 postcss-value-parser: 4.2.0 dev: true @@ -15932,11 +17037,11 @@ packages: postcss: 8.4.21 dev: true - /postcss-js/4.0.0_postcss@8.4.21: - resolution: {integrity: sha512-77QESFBwgX4irogGVPgQ5s07vLvFqWr228qZY+w6lW599cRlK/HmnlivnnVUxkjHnCu4J16PDMHcH+e+2HbvTQ==} + /postcss-js/4.0.1_postcss@8.4.21: + resolution: {integrity: sha512-dDLF8pEO191hJMtlHFPRa8xsizHaM82MLfNkUHdUtVEV3tgTp5oj+8qbEqYM57SLfc74KSbw//4SeJma2LRVIw==} engines: {node: ^12 || ^14 || >= 16} peerDependencies: - postcss: ^8.3.3 + postcss: ^8.4.21 dependencies: camelcase-css: 2.0.1 postcss: 8.4.21 @@ -15965,12 +17070,12 @@ packages: ts-node: optional: true dependencies: - lilconfig: 2.0.6 + lilconfig: 2.1.0 postcss: 8.4.21 yaml: 1.10.2 dev: true - /postcss-loader/6.2.1_6jdsrmfenkuhhw3gx4zvjlznce: + /postcss-loader/6.2.1_6puvukfnwbwq425eep7g4z27be: resolution: {integrity: sha512-WbbYpmAaKcux/P66bZ40bpWsBucjx/TTgVVzRZ9yUO8yQfVBlameJ0ZGVaPfH64hNSBh63a+ICP5nqOpBA0w+Q==} engines: {node: '>= 12.13.0'} peerDependencies: @@ -15978,10 +17083,10 @@ packages: webpack: ^5.0.0 dependencies: cosmiconfig: 7.1.0 - klona: 2.0.5 + klona: 2.0.6 postcss: 8.4.21 semver: 7.3.8 - webpack: 5.75.0 + webpack: 5.76.2 dev: true /postcss-logical/5.0.4_postcss@8.4.21: @@ -16013,13 +17118,13 @@ packages: stylehacks: 5.1.1_postcss@8.4.21 dev: true - /postcss-merge-rules/5.1.3_postcss@8.4.21: - resolution: {integrity: sha512-LbLd7uFC00vpOuMvyZop8+vvhnfRGpp2S+IMQKeuOZZapPRY4SMq5ErjQeHbHsjCUgJkRNrlU+LmxsKIqPKQlA==} + /postcss-merge-rules/5.1.4_postcss@8.4.21: + resolution: {integrity: sha512-0R2IuYpgU93y9lhVbO/OylTtKMVcHb67zjWIfCiKR9rWL3GUk1677LAqD/BcHizukdZEjT8Ru3oHRoAYoJy44g==} engines: {node: ^10 || ^12 || >=14.0} peerDependencies: postcss: ^8.2.15 dependencies: - browserslist: 4.21.4 + browserslist: 4.21.5 caniuse-api: 3.0.0 cssnano-utils: 3.1.0_postcss@8.4.21 postcss: 8.4.21 @@ -16054,7 +17159,7 @@ packages: peerDependencies: postcss: ^8.2.15 dependencies: - browserslist: 4.21.4 + browserslist: 4.21.5 cssnano-utils: 3.1.0_postcss@8.4.21 postcss: 8.4.21 postcss-value-parser: 4.2.0 @@ -16127,7 +17232,7 @@ packages: peerDependencies: postcss: ^8.2 dependencies: - '@csstools/selector-specificity': 2.0.2_wajs5nedgkikc5pcuwett7legi + '@csstools/selector-specificity': 2.1.1_wajs5nedgkikc5pcuwett7legi postcss: 8.4.21 postcss-selector-parser: 6.0.11 dev: true @@ -16197,7 +17302,7 @@ packages: peerDependencies: postcss: ^8.2.15 dependencies: - browserslist: 4.21.4 + browserslist: 4.21.5 postcss: 8.4.21 postcss-value-parser: 4.2.0 dev: true @@ -16223,7 +17328,7 @@ packages: postcss-value-parser: 4.2.0 dev: true - /postcss-normalize/10.0.1_5kwwozqejd6kse3tlstkrpsc6y: + /postcss-normalize/10.0.1_jrpp4geoaqu5dz2gragkckznb4: resolution: {integrity: sha512-+5w18/rDev5mqERcG3W5GZNMJa1eoYYNGo8gB7tEwaos0ajk3ZXAI4mHGcNT47NE+ZnZD1pEpUOFLvltIwmeJA==} engines: {node: '>= 12'} peerDependencies: @@ -16231,9 +17336,9 @@ packages: postcss: '>= 8' dependencies: '@csstools/normalize.css': 12.0.0 - browserslist: 4.21.4 + browserslist: 4.21.5 postcss: 8.4.21 - postcss-browser-comments: 4.0.0_5kwwozqejd6kse3tlstkrpsc6y + postcss-browser-comments: 4.0.0_jrpp4geoaqu5dz2gragkckznb4 sanitize.css: 13.0.0 dev: true @@ -16305,12 +17410,12 @@ packages: '@csstools/postcss-text-decoration-shorthand': 1.0.0_postcss@8.4.21 '@csstools/postcss-trigonometric-functions': 1.0.2_postcss@8.4.21 '@csstools/postcss-unset-value': 1.0.2_postcss@8.4.21 - autoprefixer: 10.4.13_postcss@8.4.21 - browserslist: 4.21.4 + autoprefixer: 10.4.14_postcss@8.4.21 + browserslist: 4.21.5 css-blank-pseudo: 3.0.3_postcss@8.4.21 css-has-pseudo: 3.0.4_postcss@8.4.21 css-prefers-color-scheme: 6.0.3_postcss@8.4.21 - cssdb: 7.2.1 + cssdb: 7.4.1 postcss: 8.4.21 postcss-attribute-case-insensitive: 5.0.2_postcss@8.4.21 postcss-clamp: 4.1.0_postcss@8.4.21 @@ -16353,13 +17458,13 @@ packages: postcss-selector-parser: 6.0.11 dev: true - /postcss-reduce-initial/5.1.1_postcss@8.4.21: - resolution: {integrity: sha512-//jeDqWcHPuXGZLoolFrUXBDyuEGbr9S2rMo19bkTIjBQ4PqkaO+oI8wua5BOUxpfi97i3PCoInsiFIEBfkm9w==} + /postcss-reduce-initial/5.1.2_postcss@8.4.21: + resolution: {integrity: sha512-dE/y2XRaqAi6OvjzD22pjTUQ8eOfc6m/natGHgKFBK9DxFmIm69YmaRVQrGgFlEfc1HePIurY0TmDeROK05rIg==} engines: {node: ^10 || ^12 || >=14.0} peerDependencies: postcss: ^8.2.15 dependencies: - browserslist: 4.21.4 + browserslist: 4.21.5 caniuse-api: 3.0.0 postcss: 8.4.21 dev: true @@ -16511,17 +17616,8 @@ packages: react-is: 18.2.0 dev: true - /pretty-format/29.3.1: - resolution: {integrity: sha512-FyLnmb1cYJV8biEIiRyzRFvs2lry7PPIvOqKVe1GCUEYg4YGmlx1qG9EJNMxArYm7piII4qb8UV1Pncq5dxmcg==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - dependencies: - '@jest/schemas': 29.0.0 - ansi-styles: 5.2.0 - react-is: 18.2.0 - dev: true - - /pretty-format/29.4.3: - resolution: {integrity: sha512-cvpcHTc42lcsvOOAzd3XuNWTcvk1Jmnzqeu+WsOuiPmxUJTnkbAcFNsRKvEpBEUFVUgy/GTZLulZDcDEi+CIlA==} + /pretty-format/29.5.0: + resolution: {integrity: sha512-V2mGkI31qdttvTFX7Mt4efOqHXqJWMu4/r66Xh3Z3BwZaPfPJgp6/gbwoujRpPUtfEF6AUUWx3Jim3GCw5g/Qw==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: '@jest/schemas': 29.4.3 @@ -16580,8 +17676,8 @@ packages: bluebird: optional: true - /promise-polyfill/8.2.3: - resolution: {integrity: sha512-Og0+jCRQetV84U8wVjMNccfGCnMQ9mGs9Hv78QFe+pSDD3gWTpz0y+1QCuxy5d/vBFuZ3iwP2eycAkvqIMPmWg==} + /promise-polyfill/8.3.0: + resolution: {integrity: sha512-H5oELycFml5yto/atYqmjyigJoAo3+OXwolYiH7OfQuYlAqhxNvTfiNMbV9hsC6Yp83yE5r2KTVmtrG6R9i6Pg==} dev: true /promise-retry/2.0.1: @@ -16660,8 +17756,8 @@ packages: once: 1.4.0 dev: true - /punycode/2.2.0: - resolution: {integrity: sha512-LN6QV1IJ9ZhxWTNdktaPClrNfp8xdSAYS0Zk2ddX7XsXZAxckMHPCBcHRo0cTcEIgYPRiGEkmji3Idkh2yFtYw==} + /punycode/2.3.0: + resolution: {integrity: sha512-rRV+zQD8tVFys26lAGR9WUuS4iUAngJScM+ZRSKtvl5tKeZ2t5bvdNFdNHBW9FWR4guGHlgmsZ1G7BSm2wTbuA==} engines: {node: '>=6'} /puppeteer-core/19.6.1: @@ -16702,6 +17798,10 @@ packages: - utf-8-validate dev: true + /pure-rand/6.0.1: + resolution: {integrity: sha512-t+x1zEHDjBwkDGY5v5ApnZ/utcd4XYDiJsaQQoptTXgUXX95sDg1elCdJghzicm7n2mbCBJ3uYWr6M22SO19rg==} + dev: true + /pvtsutils/1.3.2: resolution: {integrity: sha512-+Ipe2iNUyrZz+8K/2IOo+kKikdtfhRKzNpQbruF2URmqPtoqAs8g3xS7TJvFF2GcPXjh7DkqMnpVveRFq4PgEQ==} dependencies: @@ -16782,7 +17882,7 @@ packages: dependencies: deep-extend: 0.6.0 ini: 1.3.8 - minimist: 1.2.7 + minimist: 1.2.8 strip-json-comments: 2.0.1 dev: true @@ -16790,7 +17890,7 @@ packages: resolution: {integrity: sha512-sZ41cxiU5llIB003yxxQBYrARBqe0repqPTTYBTmMqTz9szeBbE37BehCE891NZsmdZqqP+xWKdT3eo3vOzN8w==} engines: {node: '>=14'} dependencies: - core-js: 3.27.1 + core-js: 3.29.1 object-assign: 4.1.1 promise: 8.3.0 raf: 3.4.1 @@ -16798,7 +17898,7 @@ packages: whatwg-fetch: 3.6.2 dev: true - /react-dev-utils/12.0.1_ztinast3o6ojylpg2e7ubjmesm: + /react-dev-utils/12.0.1_kg3azjguh7vrau3wj3msdt6pgy: resolution: {integrity: sha512-84Ivxmr17KjUupyqzFode6xKhjwuEJDROWKJy/BthkL7Wn6NJ8h4WE6k/exAv6ImS+0oZLRRW5j/aINMHyeGeQ==} engines: {node: '>=14'} peerDependencies: @@ -16810,30 +17910,30 @@ packages: dependencies: '@babel/code-frame': 7.18.6 address: 1.2.2 - browserslist: 4.21.4 + browserslist: 4.21.5 chalk: 4.1.2 cross-spawn: 7.0.3 detect-port-alt: 1.1.6 escape-string-regexp: 4.0.0 filesize: 8.0.7 find-up: 5.0.0 - fork-ts-checker-webpack-plugin: 6.5.2_ztinast3o6ojylpg2e7ubjmesm + fork-ts-checker-webpack-plugin: 6.5.3_kg3azjguh7vrau3wj3msdt6pgy global-modules: 2.0.0 globby: 11.1.0 gzip-size: 6.0.0 - immer: 9.0.17 + immer: 9.0.19 is-root: 2.1.0 loader-utils: 3.2.1 - open: 8.4.0 + open: 8.4.2 pkg-up: 3.1.0 prompts: 2.4.2 react-error-overlay: 6.0.11 recursive-readdir: 2.2.3 - shell-quote: 1.7.4 + shell-quote: 1.8.0 strip-ansi: 6.0.1 text-table: 0.2.0 typescript: 4.9.4 - webpack: 5.75.0 + webpack: 5.76.2 transitivePeerDependencies: - eslint - supports-color @@ -16892,55 +17992,55 @@ packages: typescript: optional: true dependencies: - '@babel/core': 7.20.12 - '@pmmmwh/react-refresh-webpack-plugin': 0.5.10_unmakpayn7vcxadrrsbqlrpehy + '@babel/core': 7.21.3 + '@pmmmwh/react-refresh-webpack-plugin': 0.5.10_ywdxqsa3mkzwfy7y7hsjgx22e4 '@svgr/webpack': 5.5.0 - babel-jest: 27.5.1_@babel+core@7.20.12 - babel-loader: 8.3.0_la66t7xldg4uecmyawueag5wkm - babel-plugin-named-asset-import: 0.3.8_@babel+core@7.20.12 + babel-jest: 27.5.1_@babel+core@7.21.3 + babel-loader: 8.3.0_h5x7dh6zbbyopr7jvxivhylqpa + babel-plugin-named-asset-import: 0.3.8_@babel+core@7.21.3 babel-preset-react-app: 10.0.1 bfj: 7.0.2 - browserslist: 4.21.4 + browserslist: 4.21.5 camelcase: 6.3.0 case-sensitive-paths-webpack-plugin: 2.4.0 - css-loader: 6.7.3_webpack@5.75.0 - css-minimizer-webpack-plugin: 3.4.1_webpack@5.75.0 + css-loader: 6.7.3_webpack@5.76.2 + css-minimizer-webpack-plugin: 3.4.1_webpack@5.76.2 dotenv: 10.0.0 dotenv-expand: 5.1.0 - eslint: 8.31.0 - eslint-config-react-app: 7.0.1_rpd7uhx77krrslgfzifo4tws2e - eslint-webpack-plugin: 3.2.0_hvhhvch5fcfceof5vvp2w4y5sa - file-loader: 6.2.0_webpack@5.75.0 + eslint: 8.36.0 + eslint-config-react-app: 7.0.1_qatithnvhb32r4na6zargjwuym + eslint-webpack-plugin: 3.2.0_c6bstfvn7lmu3jnvygo5gmufvi + file-loader: 6.2.0_webpack@5.76.2 fs-extra: 10.1.0 - html-webpack-plugin: 5.5.0_webpack@5.75.0 + html-webpack-plugin: 5.5.0_webpack@5.76.2 identity-obj-proxy: 3.0.0 jest: 27.5.1 jest-resolve: 27.5.1 jest-watch-typeahead: 1.1.0_jest@27.5.1 - mini-css-extract-plugin: 2.7.2_webpack@5.75.0 + mini-css-extract-plugin: 2.7.5_webpack@5.76.2 postcss: 8.4.21 postcss-flexbugs-fixes: 5.0.2_postcss@8.4.21 - postcss-loader: 6.2.1_6jdsrmfenkuhhw3gx4zvjlznce - postcss-normalize: 10.0.1_5kwwozqejd6kse3tlstkrpsc6y + postcss-loader: 6.2.1_6puvukfnwbwq425eep7g4z27be + postcss-normalize: 10.0.1_jrpp4geoaqu5dz2gragkckznb4 postcss-preset-env: 7.8.3_postcss@8.4.21 prompts: 2.4.2 react: 18.2.0 react-app-polyfill: 3.0.0 - react-dev-utils: 12.0.1_ztinast3o6ojylpg2e7ubjmesm + react-dev-utils: 12.0.1_kg3azjguh7vrau3wj3msdt6pgy react-refresh: 0.11.0 resolve: 1.22.1 resolve-url-loader: 4.0.0 - sass-loader: 12.6.0_webpack@5.75.0 + sass-loader: 12.6.0_webpack@5.76.2 semver: 7.3.8 - source-map-loader: 3.0.2_webpack@5.75.0 - style-loader: 3.3.1_webpack@5.75.0 - tailwindcss: 3.2.4 - terser-webpack-plugin: 5.3.6_webpack@5.75.0 + source-map-loader: 3.0.2_webpack@5.76.2 + style-loader: 3.3.2_webpack@5.76.2 + tailwindcss: 3.2.7 + terser-webpack-plugin: 5.3.7_webpack@5.76.2 typescript: 4.9.4 - webpack: 5.75.0 - webpack-dev-server: 4.11.1_webpack@5.75.0 - webpack-manifest-plugin: 4.1.1_webpack@5.75.0 - workbox-webpack-plugin: 6.5.4_webpack@5.75.0 + webpack: 5.76.2 + webpack-dev-server: 4.13.1_webpack@5.76.2 + webpack-manifest-plugin: 4.1.1_webpack@5.76.2 + workbox-webpack-plugin: 6.5.4_webpack@5.76.2 optionalDependencies: fsevents: 2.3.2 transitivePeerDependencies: @@ -17074,8 +18174,8 @@ packages: mute-stream: 0.0.8 dev: true - /readable-stream/2.3.7: - resolution: {integrity: sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==} + /readable-stream/2.3.8: + resolution: {integrity: sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==} dependencies: core-util-is: 1.0.3 inherits: 2.0.4 @@ -17086,8 +18186,8 @@ packages: util-deprecate: 1.0.2 dev: true - /readable-stream/3.6.0: - resolution: {integrity: sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==} + /readable-stream/3.6.2: + resolution: {integrity: sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==} engines: {node: '>= 6'} dependencies: inherits: 2.0.4 @@ -17100,7 +18200,7 @@ packages: dependencies: debuglog: 1.0.1 dezalgo: 1.0.4 - graceful-fs: 4.2.10 + graceful-fs: 4.2.11 once: 1.4.0 dev: true @@ -17156,7 +18256,7 @@ packages: /regenerator-transform/0.15.1: resolution: {integrity: sha512-knzmNAcuyxV+gQCufkYcvOqX/qIIfHLv0u5x79kRxuGojfYVky1f15TzZEu2Avte8QGepvUNTnLskf8E6X6Vyg==} dependencies: - '@babel/runtime': 7.20.7 + '@babel/runtime': 7.21.0 dev: true /regex-parser/2.2.11: @@ -17168,36 +18268,27 @@ packages: engines: {node: '>= 0.4'} dependencies: call-bind: 1.0.2 - define-properties: 1.1.4 + define-properties: 1.2.0 functions-have-names: 1.2.3 dev: true - /regexpp/3.2.0: - resolution: {integrity: sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg==} - engines: {node: '>=8'} - dev: true - - /regexpu-core/5.2.2: - resolution: {integrity: sha512-T0+1Zp2wjF/juXMrMxHxidqGYn8U4R+zleSJhX9tQ1PUsS8a9UtYfbsF9LdiVgNX3kiX8RNaKM42nfSgvFJjmw==} + /regexpu-core/5.3.2: + resolution: {integrity: sha512-RAM5FlZz+Lhmo7db9L298p2vHP5ZywrVXmVXpmAD9GuL5MPH6t9ROw1iA/wfHkQ76Qe7AaPF0nGuim96/IrQMQ==} engines: {node: '>=4'} dependencies: + '@babel/regjsgen': 0.8.0 regenerate: 1.4.2 regenerate-unicode-properties: 10.1.0 - regjsgen: 0.7.1 regjsparser: 0.9.1 unicode-match-property-ecmascript: 2.0.0 unicode-match-property-value-ecmascript: 2.1.0 dev: true - /registry-auth-token/4.2.2: - resolution: {integrity: sha512-PC5ZysNb42zpFME6D/XlIgtNGdTl8bBOCw90xQLVMpzuuubJKYDWFAEuUNc+Cn8Z8724tg2SDhDRrkVEsqfDMg==} - engines: {node: '>=6.0.0'} + /registry-auth-token/5.0.2: + resolution: {integrity: sha512-o/3ikDxtXaA59BmZuZrJZDJv8NMDGSj+6j6XaeBmHw8eY1i1qd9+6H+LjVvQXx3HN6aRCGa1cUdJ9RaJZUugnQ==} + engines: {node: '>=14'} dependencies: - rc: 1.2.8 - dev: true - - /regjsgen/0.7.1: - resolution: {integrity: sha512-RAt+8H2ZEzHeYWxZ3H2z6tF18zyyOnlcdaafLrm21Bguj7uZy6ULibiAFdXEtKQY4Sy7wDTwDiOazasMLc4KPA==} + '@pnpm/npm-conf': 2.1.0 dev: true /regjsparser/0.9.1: @@ -17278,8 +18369,13 @@ packages: source-map: 0.6.1 dev: true - /resolve.exports/1.1.0: - resolution: {integrity: sha512-J1l+Zxxp4XK3LUDZ9m60LRJF/mAe4z6a4xyabPHk7pvK5t35dACV32iIjJDFeWZFfZlO29w6SZ67knR0tHzJtQ==} + /resolve.exports/1.1.1: + resolution: {integrity: sha512-/NtpHNDN7jWhAaQ9BvBUYZ6YTXsRBgfqWFWP7BZBaoMJO/I3G5OFzvTuWNlZC3aPjins1F+TNrLKsGbH4rfsRQ==} + engines: {node: '>=10'} + dev: true + + /resolve.exports/2.0.1: + resolution: {integrity: sha512-OEJWVeimw8mgQuj3HfkNl4KqRevH7lzeQNaWRPfx0PPse7Jk6ozcsG4FKVgtzDsC1KUF+YlTHh17NcgHOPykLw==} engines: {node: '>=10'} dev: true @@ -17349,6 +18445,7 @@ packages: /rimraf/4.1.1: resolution: {integrity: sha512-Z4Y81w8atcvaJuJuBB88VpADRH66okZAuEm+Jtaufa+s7rZmIz+Hik2G53kGaNytE7lsfXyWktTmfVz0H9xuDg==} engines: {node: '>=14'} + deprecated: Please upgrade to 4.3.1 or higher to fix a potentially damaging issue regarding symbolic link following. See https://github.com/isaacs/rimraf/issues/259 for details. hasBin: true dev: true @@ -17369,7 +18466,7 @@ packages: jest-worker: 26.6.2 rollup: 2.79.1 serialize-javascript: 4.0.0 - terser: 5.16.1 + terser: 5.16.6 dev: true /rollup/2.79.1: @@ -17392,7 +18489,7 @@ packages: /rxjs/7.8.0: resolution: {integrity: sha512-F2+gxDshqmIub1KdvZkaEfGDwLNpPvk9Fs6LD/MyQxNgMds/WH9OdDDXOmxUZpME+iSK3rQCctkL0DYyytUqMg==} dependencies: - tslib: 2.4.1 + tslib: 2.5.0 /safe-buffer/5.1.2: resolution: {integrity: sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==} @@ -17405,12 +18502,12 @@ packages: resolution: {integrity: sha512-JBUUzyOgEwXQY1NuPtvcj/qcBDbDmEvWufhlnXZIm75DEHp+afM1r1ujJpJsV/gSM4t59tpDyPi1sd6ZaPFfsA==} dependencies: call-bind: 1.0.2 - get-intrinsic: 1.1.3 + get-intrinsic: 1.2.0 is-regex: 1.1.4 dev: true - /safe-stable-stringify/2.4.2: - resolution: {integrity: sha512-gMxvPJYhP0O9n2pvcfYfIuYgbledAOJFcqRThtPRmjscaipiwcwPPKLytpVzMkG2HAN87Qmo2d4PtGiri1dSLA==} + /safe-stable-stringify/2.4.3: + resolution: {integrity: sha512-e2bDA2WJT0wxseVd4lsDP4+3ONX6HpMXQa1ZhFQ7SU+GjvORCmShbCMltrtIDfkYhVHrOcPtj+KhmDBdPdZD1g==} engines: {node: '>=10'} /safer-buffer/2.1.2: @@ -17420,7 +18517,16 @@ packages: resolution: {integrity: sha512-ZRwKbh/eQ6w9vmTjkuG0Ioi3HBwPFce0O+v//ve+aOq1oeCy7jMV2qzzAlpsNuqpqCBjjriM1lbtZbF/Q8jVyA==} dev: true - /sass-loader/12.6.0_webpack@5.75.0: + /saslprep/1.0.3: + resolution: {integrity: sha512-/MY/PEMbk2SuY5sScONwhUDsV2p77Znkb/q3nSVstq/yQzYJOH/Azh29p9oJLsl3LnQwSvZDKagDGBsBwSooag==} + engines: {node: '>=6'} + requiresBuild: true + dependencies: + sparse-bitfield: 3.0.3 + dev: true + optional: true + + /sass-loader/12.6.0_webpack@5.76.2: resolution: {integrity: sha512-oLTaH0YCtX4cfnJZxKSLAyglED0naiYfNG1iXfU5w1LNZ+ukoA5DtyDIN5zmKVZwYNJP4KRc5Y3hkWga+7tYfA==} engines: {node: '>= 12.13.0'} peerDependencies: @@ -17439,9 +18545,9 @@ packages: sass-embedded: optional: true dependencies: - klona: 2.0.5 + klona: 2.0.6 neo-async: 2.6.2 - webpack: 5.75.0 + webpack: 5.76.2 dev: true /sax/1.2.4: @@ -17535,10 +18641,10 @@ packages: '@semantic-release/commit-analyzer': 9.0.2_semantic-release@20.0.2 '@semantic-release/error': 3.0.0 '@semantic-release/github': 8.0.7_semantic-release@20.0.2 - '@semantic-release/npm': 9.0.1_semantic-release@20.0.2 + '@semantic-release/npm': 9.0.2_semantic-release@20.0.2 '@semantic-release/release-notes-generator': 10.0.3_semantic-release@20.0.2 aggregate-error: 4.0.1 - cosmiconfig: 8.0.0 + cosmiconfig: 8.1.3 debug: 4.3.4 env-ci: 8.0.0 execa: 6.1.0 @@ -17549,8 +18655,8 @@ packages: hook-std: 3.0.0 hosted-git-info: 6.1.1 lodash-es: 4.17.21 - marked: 4.2.5 - marked-terminal: 5.1.1_marked@4.2.5 + marked: 4.2.12 + marked-terminal: 5.1.1_marked@4.2.12 micromatch: 4.0.5 p-each-series: 3.0.0 p-reduce: 3.0.0 @@ -17559,7 +18665,7 @@ packages: semver: 7.3.8 semver-diff: 4.0.0 signale: 1.4.0 - yargs: 17.6.2 + yargs: 17.7.1 transitivePeerDependencies: - encoding - supports-color @@ -17634,8 +18740,8 @@ packages: randombytes: 2.1.0 dev: true - /serialize-javascript/6.0.0: - resolution: {integrity: sha512-Qr3TosvguFt8ePWqsvRfrKyQXIiW+nGbYpy8XK24NQHE83caxWt+mIymTT19DGFbNWNLfEwsrkSmN64lVWB9ag==} + /serialize-javascript/6.0.1: + resolution: {integrity: sha512-owoXEFjWRllis8/M1Q+Cw5k8ZH40e3zhp/ovX+Xr/vi1qj6QesbyXXViFbpNvWvPNAD62SutwEXavefrLJWj7w==} dependencies: randombytes: 2.1.0 dev: true @@ -17711,16 +18817,16 @@ packages: engines: {node: '>=8'} dev: true - /shell-quote/1.7.4: - resolution: {integrity: sha512-8o/QEhSSRb1a5i7TFR0iM4G16Z0vYB2OQVs4G3aAFXjn3T6yEx8AZxy1PgDF7I00LZHYA3WxaSYIf5e5sAX8Rw==} + /shell-quote/1.8.0: + resolution: {integrity: sha512-QHsz8GgQIGKlRi24yFc6a6lN69Idnx634w49ay6+jA5yFh7a1UY+4Rp6HPx/L/1zcEDPEij8cIsiqR6bQsE5VQ==} dev: true /side-channel/1.0.4: resolution: {integrity: sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==} dependencies: call-bind: 1.0.2 - get-intrinsic: 1.1.3 - object-inspect: 1.12.2 + get-intrinsic: 1.2.0 + object-inspect: 1.12.3 /signal-exit/3.0.7: resolution: {integrity: sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==} @@ -17815,7 +18921,7 @@ packages: engines: {node: '>=0.10.0'} dev: true - /source-map-loader/3.0.2_webpack@5.75.0: + /source-map-loader/3.0.2_webpack@5.76.2: resolution: {integrity: sha512-BokxPoLjyl3iOrgkWaakaxqnelAJSS+0V+De0kKIq6lyWrXuiPgYTGp6z3iHmqljKAaLXwZa+ctD8GccRJeVvg==} engines: {node: '>= 12.13.0'} peerDependencies: @@ -17824,7 +18930,7 @@ packages: abab: 2.0.6 iconv-lite: 0.6.3 source-map-js: 1.0.2 - webpack: 5.75.0 + webpack: 5.76.2 dev: true /source-map-support/0.5.13: @@ -17861,6 +18967,13 @@ packages: deprecated: Please use @jridgewell/sourcemap-codec instead dev: true + /sparse-bitfield/3.0.3: + resolution: {integrity: sha512-kvzhi7vqKTfkh0PZU+2D2PIllw2ymqJKujUcyPMd9Y75Nv4nPbGJZXNhxsgdQab2BmlDct1YnfQCguEvHr7VsQ==} + dependencies: + memory-pager: 1.5.0 + dev: true + optional: true + /spawn-error-forwarder/1.0.0: resolution: {integrity: sha512-gRjMgK5uFjbCvdibeGJuy3I5OYz6VLoVdsOJdA6wV0WlfQVLFueoqMxwwYD9RODdgb6oUIvlRlsyFSiQkMKu0g==} dev: true @@ -17882,11 +18995,11 @@ packages: tree-kill: 1.2.2 dev: true - /spdx-correct/3.1.1: - resolution: {integrity: sha512-cOYcUWwhCuHCXi49RhFRCyJEK3iPj1Ziz9DpViV3tbZOwXD49QzIN3MpOLJNxh2qwq2lJJZaKMVw9qNi4jTC0w==} + /spdx-correct/3.2.0: + resolution: {integrity: sha512-kN9dJbvnySHULIluDHy32WHRUu3Og7B9sbY7tsFLctQkIqnMh3hErYgdMjTYuqmcXX+lK5T1lnUt3G7zNswmZA==} dependencies: spdx-expression-parse: 3.0.1 - spdx-license-ids: 3.0.12 + spdx-license-ids: 3.0.13 dev: true /spdx-exceptions/2.3.0: @@ -17897,11 +19010,11 @@ packages: resolution: {integrity: sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==} dependencies: spdx-exceptions: 2.3.0 - spdx-license-ids: 3.0.12 + spdx-license-ids: 3.0.13 dev: true - /spdx-license-ids/3.0.12: - resolution: {integrity: sha512-rr+VVSXtRhO4OHbXUiAF7xW3Bo9DuuF6C5jH+q/x15j2jniycgKbxU09Hr0WqlSLUs4i4ltHGXqTe7VHclYWyA==} + /spdx-license-ids/3.0.13: + resolution: {integrity: sha512-XkD+zwiqXHikFZm4AX/7JSCXA98U5Db4AFd5XUg/+9UNtnH75+Z9KxtpYiJZx36mUDVOwH83pl7yvCer6ewM3w==} dev: true /spdy-transport/3.0.0: @@ -17911,7 +19024,7 @@ packages: detect-node: 2.1.0 hpack.js: 2.1.6 obuf: 1.1.2 - readable-stream: 3.6.0 + readable-stream: 3.6.2 wbuf: 1.7.3 transitivePeerDependencies: - supports-color @@ -17945,7 +19058,7 @@ packages: /split2/3.2.2: resolution: {integrity: sha512-9NThjpgZnifTkJpzTZ7Eue85S49QwpNhZTq6GRJwObb6jnLFNGB7Qm73V5HewTROPyxD0C29xqmaI68bQtV+hg==} dependencies: - readable-stream: 3.6.0 + readable-stream: 3.6.2 dev: true /split2/4.1.0: @@ -17973,6 +19086,24 @@ packages: - encoding - supports-color + /sqlite3/5.1.6: + resolution: {integrity: sha512-olYkWoKFVNSSSQNvxVUfjiVbz3YtBwTJj+mfV5zpHmqW3sELx2Cf4QCdirMelhM5Zh+KDVaKgQHqCxrqiWHybw==} + requiresBuild: true + peerDependenciesMeta: + node-gyp: + optional: true + dependencies: + '@mapbox/node-pre-gyp': 1.0.10 + node-addon-api: 4.3.0 + tar: 6.1.13 + optionalDependencies: + node-gyp: 8.4.1 + transitivePeerDependencies: + - bluebird + - encoding + - supports-color + dev: true + /ssri/8.0.1: resolution: {integrity: sha512-97qShzy1AiyxvPNIkLWoGua7xoQzzPjQ0HAH4B0rWKo7SZ6USuPcrUiAFrws0UH8RrbWmgq3LMTObhPIHbbBeQ==} engines: {node: '>= 8'} @@ -18011,6 +19142,20 @@ packages: resolution: {integrity: sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==} engines: {node: '>= 0.8'} + /stdin-discarder/0.1.0: + resolution: {integrity: sha512-xhV7w8S+bUwlPTb4bAOUQhv8/cSS5offJuX8GQGq32ONF0ZtDWKfkdomM3HMRA+LhX6um/FZ0COqlwsjD53LeQ==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + dependencies: + bl: 5.1.0 + dev: false + + /stop-iteration-iterator/1.0.0: + resolution: {integrity: sha512-iCGQj+0l0HOdZ2AEeBADlsRC+vsnDsZsbdSiH1yNSjcfKM7fdpCMfqAL/dwF5BLiw/XhRft/Wax6zQbhq2BcjQ==} + engines: {node: '>= 0.4'} + dependencies: + internal-slot: 1.0.5 + dev: true + /str2buf/1.3.0: resolution: {integrity: sha512-xIBmHIUHYZDP4HyoXGHYNVmxlXLXDrtFHYT0eV6IOdEj3VO9ccaF1Ejl9Oq8iFjITllpT8FhaXb4KsNmw+3EuA==} dev: false @@ -18019,14 +19164,14 @@ packages: resolution: {integrity: sha512-H73RAHsVBapbim0tU2JwwOiXUj+fikfiaoYAKHF3VJfA0pe2BCzkhAHBlLG6REzE+2WNZcxOXjK7lkso+9euLA==} dependencies: inherits: 2.0.4 - readable-stream: 3.6.0 + readable-stream: 3.6.2 dev: false /stream-combiner2/1.1.1: resolution: {integrity: sha512-3PnJbYgS56AeWgtKF5jtJRT6uFJe56Z0Hc5Ngg/6sI6rIt8iiMBTa9cvdyFfpMQjaVHr8dusbNeFGIIonxOvKw==} dependencies: duplexer2: 0.1.4 - readable-stream: 2.3.7 + readable-stream: 2.3.8 dev: true /string-argv/0.3.1: @@ -18074,29 +19219,38 @@ packages: resolution: {integrity: sha512-6zOCOcJ+RJAQshcTvXPHoxoQGONa3e/Lqx90wUA+wEzX78sg5Bo+1tQo4N0pohS0erG9qtCqJDjNCQBjeWVxyg==} dependencies: call-bind: 1.0.2 - define-properties: 1.1.4 - es-abstract: 1.21.1 - get-intrinsic: 1.1.3 + define-properties: 1.2.0 + es-abstract: 1.21.2 + get-intrinsic: 1.2.0 has-symbols: 1.0.3 - internal-slot: 1.0.4 + internal-slot: 1.0.5 regexp.prototype.flags: 1.4.3 side-channel: 1.0.4 dev: true + /string.prototype.trim/1.2.7: + resolution: {integrity: sha512-p6TmeT1T3411M8Cgg9wBTMRtY2q9+PNy9EV1i2lIXUN/btt763oIfxwN3RR8VU6wHX8j/1CFy0L+YuThm6bgOg==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.2 + define-properties: 1.2.0 + es-abstract: 1.21.2 + dev: true + /string.prototype.trimend/1.0.6: resolution: {integrity: sha512-JySq+4mrPf9EsDBEDYMOb/lM7XQLulwg5R/m1r0PXEFqrV0qHvl58sdTilSXtKOflCsK2E8jxf+GKC0T07RWwQ==} dependencies: call-bind: 1.0.2 - define-properties: 1.1.4 - es-abstract: 1.21.1 + define-properties: 1.2.0 + es-abstract: 1.21.2 dev: true /string.prototype.trimstart/1.0.6: resolution: {integrity: sha512-omqjMDaY92pbn5HOX7f9IccLA+U1tA9GvtU4JrodiXFfYB7jPzzHpRzpglLAjtUV6bB557zwClJezTqnAiYnQA==} dependencies: call-bind: 1.0.2 - define-properties: 1.1.4 - es-abstract: 1.21.1 + define-properties: 1.2.0 + es-abstract: 1.21.2 dev: true /string_decoder/1.1.1: @@ -18178,23 +19332,28 @@ packages: resolution: {integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==} engines: {node: '>=8'} + /strnum/1.0.5: + resolution: {integrity: sha512-J8bbNyKKXl5qYcR36TIO8W3mVGVHrmmxsd5PAItGkmyzwJvybiw2IVq5nqd0i4LSNSkB/sx9VHllbfFdr9k1JA==} + dev: true + optional: true + /strong-log-transformer/2.1.0: resolution: {integrity: sha512-B3Hgul+z0L9a236FAUC9iZsL+nVHgoCJnqCbN588DjYxvGXaXaaFbfmQ/JhvKjZwsOukuR72XbHv71Qkug0HxA==} engines: {node: '>=4'} hasBin: true dependencies: duplexer: 0.1.2 - minimist: 1.2.7 + minimist: 1.2.8 through: 2.3.8 dev: true - /style-loader/3.3.1_webpack@5.75.0: - resolution: {integrity: sha512-GPcQ+LDJbrcxHORTRes6Jy2sfvK2kS6hpSfI/fXhPt+spVzxF6LJ1dHLN9zIGmVaaP044YKaIatFaufENRiDoQ==} + /style-loader/3.3.2_webpack@5.76.2: + resolution: {integrity: sha512-RHs/vcrKdQK8wZliteNK4NKzxvLBzpuHMqYmUVWeKa6MkaIQ97ZTOS0b+zapZhy6GcrgWnvWYCMHRirC3FsUmw==} engines: {node: '>= 12.13.0'} peerDependencies: webpack: ^5.0.0 dependencies: - webpack: 5.75.0 + webpack: 5.76.2 dev: true /stylehacks/5.1.1_postcss@8.4.21: @@ -18203,7 +19362,7 @@ packages: peerDependencies: postcss: ^8.2.15 dependencies: - browserslist: 4.21.4 + browserslist: 4.21.5 postcss: 8.4.21 postcss-selector-parser: 6.0.11 dev: true @@ -18279,26 +19438,26 @@ packages: stable: 0.1.8 dev: true - /swagger-ui-dist/4.15.5: - resolution: {integrity: sha512-V3eIa28lwB6gg7/wfNvAbjwJYmDXy1Jo1POjyTzlB6wPcHiGlRxq39TSjYGVjQrUSAzpv+a7nzp7mDxgNy57xA==} + /swagger-ui-dist/4.18.1: + resolution: {integrity: sha512-n7AT4wzKIPpHy/BGflJOepGMrbY/7Cd5yVd9ptVczaJGAKScbVJrZxFbAE2ZSZa8KmqdQ0+pOs3/5mWY5tSMZQ==} dev: false - /swagger-ui-express/4.6.0_express@4.18.2: - resolution: {integrity: sha512-ZxpQFp1JR2RF8Ar++CyJzEDdvufa08ujNUJgMVTMWPi86CuQeVdBtvaeO/ysrz6dJAYXf9kbVNhWD7JWocwqsA==} + /swagger-ui-express/4.6.2_express@4.18.2: + resolution: {integrity: sha512-MHIOaq9JrTTB3ygUJD+08PbjM5Tt/q7x80yz9VTFIatw8j5uIWKcr90S0h5NLMzFEDC6+eVprtoeA5MDZXCUKQ==} engines: {node: '>= v0.10.32'} peerDependencies: express: '>=4.0.0' dependencies: express: 4.18.2 - swagger-ui-dist: 4.15.5 + swagger-ui-dist: 4.18.1 dev: false /symbol-tree/3.2.4: resolution: {integrity: sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw==} dev: true - /tailwindcss/3.2.4: - resolution: {integrity: sha512-AhwtHCKMtR71JgeYDaswmZXhPcW9iuI9Sp2LvZPo9upDZ7231ZJ7eA9RaURbhpXGVlrjX4cFNlB4ieTetEb7hQ==} + /tailwindcss/3.2.7: + resolution: {integrity: sha512-B6DLqJzc21x7wntlH/GsZwEXTBttVSl1FtCzC8WP4oBc/NKef7kaax5jeihkkCEWc831/5NDJ9gRNDK6NEioQQ==} engines: {node: '>=12.13.0'} hasBin: true dependencies: @@ -18311,14 +19470,14 @@ packages: fast-glob: 3.2.12 glob-parent: 6.0.2 is-glob: 4.0.3 - lilconfig: 2.0.6 + lilconfig: 2.1.0 micromatch: 4.0.5 normalize-path: 3.0.0 object-hash: 3.0.0 picocolors: 1.0.0 postcss: 8.4.21 postcss-import: 14.1.0_postcss@8.4.21 - postcss-js: 4.0.0_postcss@8.4.21 + postcss-js: 4.0.1_postcss@8.4.21 postcss-load-config: 3.1.4_postcss@8.4.21 postcss-nested: 6.0.0_postcss@8.4.21 postcss-selector-parser: 6.0.11 @@ -18356,7 +19515,7 @@ packages: end-of-stream: 1.4.4 fs-constants: 1.0.0 inherits: 2.0.4 - readable-stream: 3.6.0 + readable-stream: 3.6.2 dev: true /tar/6.1.13: @@ -18365,7 +19524,7 @@ packages: dependencies: chownr: 2.0.0 fs-minipass: 2.1.0 - minipass: 4.0.0 + minipass: 4.2.5 minizlib: 2.1.2 mkdirp: 1.0.4 yallist: 4.0.0 @@ -18409,8 +19568,8 @@ packages: supports-hyperlinks: 2.3.0 dev: true - /terser-webpack-plugin/5.3.6_webpack@5.75.0: - resolution: {integrity: sha512-kfLFk+PoLUQIbLmB1+PZDMRSZS99Mp+/MHqDNmMA6tOItzRt+Npe3E+fsMs5mfcM0wCtrrdU387UnV+vnSffXQ==} + /terser-webpack-plugin/5.3.7_webpack@5.76.2: + resolution: {integrity: sha512-AfKwIktyP7Cu50xNjXF/6Qb5lBNzYaWpU6YfoX3uZicTx0zTy0stDDCsvjDapKsSDvOeWo5MEq4TmdBy2cNoHw==} engines: {node: '>= 10.13.0'} peerDependencies: '@swc/core': '*' @@ -18428,18 +19587,18 @@ packages: '@jridgewell/trace-mapping': 0.3.17 jest-worker: 27.5.1 schema-utils: 3.1.1 - serialize-javascript: 6.0.0 - terser: 5.16.1 - webpack: 5.75.0 + serialize-javascript: 6.0.1 + terser: 5.16.6 + webpack: 5.76.2 dev: true - /terser/5.16.1: - resolution: {integrity: sha512-xvQfyfA1ayT0qdK47zskQgRZeWLoOQ8JQ6mIgRGVNwZKdQMU+5FkCBjmv4QjcrTzyZquRw2FVtlJSRUmMKQslw==} + /terser/5.16.6: + resolution: {integrity: sha512-IBZ+ZQIA9sMaXmRZCUMDjNH0D5AQQfdn4WUjHL0+1lF4TP1IHRJbrhb6fNaXWikrYQTSkb7SLxkeXAiy1p7mbg==} engines: {node: '>=10'} hasBin: true dependencies: '@jridgewell/source-map': 0.3.2 - acorn: 8.8.1 + acorn: 8.8.2 commander: 2.20.3 source-map-support: 0.5.21 dev: true @@ -18483,20 +19642,24 @@ packages: /through2/2.0.5: resolution: {integrity: sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==} dependencies: - readable-stream: 2.3.7 + readable-stream: 2.3.8 xtend: 4.0.2 dev: true /through2/4.0.2: resolution: {integrity: sha512-iOqSav00cVxEEICeD7TjLB1sueEL+81Wpzp2bY17uZjZN0pWZPuo4suZ/61VujxmqSGFfgOcNuTZ85QJwNZQpw==} dependencies: - readable-stream: 3.6.0 + readable-stream: 3.6.2 dev: true /thunky/1.1.0: resolution: {integrity: sha512-eHY7nBftgThBqOyHGVN+l8gF0BucP09fMo0oO/Lb0w1OF80dJv+lDVpXG60WMQvkcxAkNybKsrEIE3ZtKGmPrA==} dev: true + /timekeeper/2.2.0: + resolution: {integrity: sha512-W3AmPTJWZkRwu+iSNxPIsLZ2ByADsOLbbLxe46UJyWj3mlYLlwucKiq+/dPm0l9wTzqoF3/2PH0AGFCebjq23A==} + dev: true + /tmp/0.0.33: resolution: {integrity: sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==} engines: {node: '>=0.6.0'} @@ -18534,7 +19697,7 @@ packages: engines: {node: '>=6'} dependencies: psl: 1.9.0 - punycode: 2.2.0 + punycode: 2.3.0 universalify: 0.2.0 url-parse: 1.5.10 dev: true @@ -18545,21 +19708,21 @@ packages: /tr46/1.0.1: resolution: {integrity: sha512-dTpowEjclQ7Kgx5SdBkqRzVhERQXov8/l9Ft9dVM9fmg0W0KQSVaXX9T4i6twCPNtYiZM53lpSSUAwJbFPOHxA==} dependencies: - punycode: 2.2.0 + punycode: 2.3.0 dev: true /tr46/2.1.0: resolution: {integrity: sha512-15Ih7phfcdP5YxqiB+iDtLoaTz4Nd35+IiAv0kQ5FNKHzXgdWqPoTIqEDDJmXceQt4JZk6lVPT8lnDlPpGDppw==} engines: {node: '>=8'} dependencies: - punycode: 2.2.0 + punycode: 2.3.0 dev: true /tr46/3.0.0: resolution: {integrity: sha512-l7FvfAHlcmulp8kr+flpQZmVwtu7nfRV7NZujtN0OqES8EL4O4e0qqzL0DC5gAvx/ZC/9lk6rhcUwYvkBnBnYA==} engines: {node: '>=12'} dependencies: - punycode: 2.2.0 + punycode: 2.3.0 dev: true /traverse/0.6.7: @@ -18609,7 +19772,7 @@ packages: bs-logger: 0.2.6 fast-json-stable-stringify: 2.1.0 jest: 29.3.1_zfha7dvnw4nti6zkbsmhmn6xo4 - jest-util: 29.3.1 + jest-util: 29.5.0 json5: 2.2.3 lodash.memoize: 4.1.2 make-error: 1.3.6 @@ -18643,7 +19806,7 @@ packages: bs-logger: 0.2.6 fast-json-stable-stringify: 2.1.0 jest: 29.3.1_@types+node@18.11.18 - jest-util: 29.3.1 + jest-util: 29.5.0 json5: 2.2.3 lodash.memoize: 4.1.2 make-error: 1.3.6 @@ -18659,11 +19822,11 @@ packages: dependencies: '@types/json-schema': 7.0.11 commander: 9.5.0 - glob: 8.0.3 + glob: 8.1.0 json5: 2.2.3 normalize-path: 3.0.0 - safe-stable-stringify: 2.4.2 - typescript: 4.9.4 + safe-stable-stringify: 2.4.3 + typescript: 4.9.5 /ts-node/10.9.1_awa2wsr5thmg3i7jqycphctjfq: resolution: {integrity: sha512-NtVysVPkxxrwFGUUxGYhfux8k78pQB3JqYBXlLRZgdGUqTO5wU/UyHop5p70iEbGhB7q5KmiZiU0Y3KlJrScEw==} @@ -18685,7 +19848,7 @@ packages: '@tsconfig/node14': 1.0.3 '@tsconfig/node16': 1.0.3 '@types/node': 18.11.18 - acorn: 8.8.1 + acorn: 8.8.2 acorn-walk: 8.2.0 arg: 4.1.3 create-require: 1.1.1 @@ -18696,12 +19859,12 @@ packages: yn: 3.1.1 dev: true - /tsconfig-paths/3.14.1: - resolution: {integrity: sha512-fxDhWnFSLt3VuTwtvJt5fpwxBHg5AdKWMsgcPOOIilyjymcYVZoCQF8fvFRezCNfblEXmi+PcM1eYHeOAgXCOQ==} + /tsconfig-paths/3.14.2: + resolution: {integrity: sha512-o/9iXgCYc5L/JxCHPe3Hvh8Q/2xm5Z+p18PESBU6Ff33695QnCHBEjcytY2q19ua7Mbl/DavtBOLq+oG0RCL+g==} dependencies: '@types/json5': 0.0.29 json5: 1.0.2 - minimist: 1.2.7 + minimist: 1.2.8 strip-bom: 3.0.0 dev: true @@ -18710,7 +19873,7 @@ packages: engines: {node: '>=6'} dependencies: json5: 2.2.3 - minimist: 1.2.7 + minimist: 1.2.8 strip-bom: 3.0.0 dev: true @@ -18718,9 +19881,6 @@ packages: resolution: {integrity: sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==} dev: true - /tslib/2.4.1: - resolution: {integrity: sha512-tGyy4dAjRIEwI7BzsB0lynWgOpfqjUdq91XXAlIWD2OwKBH7oCl/GZG/HT4BOHrTlPMOASlMQ7veyTqpmRcrNA==} - /tslib/2.5.0: resolution: {integrity: sha512-336iVw3rtn2BUK7ORdIAHTyxHGRIHVReokCR3XjbckJMK7ms8FysBfhLR8IXnAgy7T0PTPNBWKiH514FOW/WSg==} @@ -18803,8 +19963,8 @@ packages: engines: {node: '>=12.20'} dev: true - /type-fest/3.5.1: - resolution: {integrity: sha512-70T99cpILFk2fzwuljwWxmazSphFrdOe3gRHbp6bqs71pxFBbJwFqnmkLO2lQL6aLHxHmYAnP/sL+AJWpT70jA==} + /type-fest/3.6.1: + resolution: {integrity: sha512-htXWckxlT6U4+ilVgweNliPqlsVSSucbxVexRYllyMVJDtf5rTjv6kF/s+qAd4QSL1BZcnJPEJavYBPQiWuZDA==} engines: {node: '>=14.16'} dev: false @@ -18833,8 +19993,8 @@ packages: resolution: {integrity: sha512-/aCDEGatGvZ2BIk+HmLf4ifCJFwvKFNb9/JeZPMulfgFracn9QFcAf5GO8B/mweUjSoblS5In0cWhqpfs/5PQA==} dev: true - /typeorm/0.3.11: - resolution: {integrity: sha512-pzdOyWbVuz/z8Ww6gqvBW4nylsM0KLdUCDExr2gR20/x1khGSVxQkjNV/3YqliG90jrWzrknYbYscpk8yxFJVg==} + /typeorm/0.3.12: + resolution: {integrity: sha512-sYSxBmCf1nJLLTcYtwqZ+lQIRtLPyUoO93rHTOKk9vJCyT4UfRtU7oRsJvfvKP3nnZTD1hzz2SEy2zwPEN6OyA==} engines: {node: '>= 12.9.0'} hasBin: true peerDependencies: @@ -18845,7 +20005,7 @@ packages: ioredis: ^5.0.4 mongodb: ^3.6.0 mssql: ^7.3.0 - mysql2: ^2.2.5 + mysql2: ^2.2.5 || ^3.0.1 oracledb: ^5.1.0 pg: ^8.5.1 pg-native: ^3.0.0 @@ -18899,21 +20059,21 @@ packages: date-fns: 2.29.3 debug: 4.3.4 dotenv: 16.0.3 - glob: 7.2.3 + glob: 8.1.0 js-yaml: 4.1.0 - mkdirp: 1.0.4 + mkdirp: 2.1.5 reflect-metadata: 0.1.13 sha.js: 2.4.11 - tslib: 2.4.1 - uuid: 8.3.2 + tslib: 2.5.0 + uuid: 9.0.0 xml2js: 0.4.23 - yargs: 17.6.2 + yargs: 17.7.1 transitivePeerDependencies: - supports-color dev: false - /typeorm/0.3.11_sqlite3@5.1.4: - resolution: {integrity: sha512-pzdOyWbVuz/z8Ww6gqvBW4nylsM0KLdUCDExr2gR20/x1khGSVxQkjNV/3YqliG90jrWzrknYbYscpk8yxFJVg==} + /typeorm/0.3.12_pg@8.10.0+sqlite3@5.1.4: + resolution: {integrity: sha512-sYSxBmCf1nJLLTcYtwqZ+lQIRtLPyUoO93rHTOKk9vJCyT4UfRtU7oRsJvfvKP3nnZTD1hzz2SEy2zwPEN6OyA==} engines: {node: '>= 12.9.0'} hasBin: true peerDependencies: @@ -18924,7 +20084,7 @@ packages: ioredis: ^5.0.4 mongodb: ^3.6.0 mssql: ^7.3.0 - mysql2: ^2.2.5 + mysql2: ^2.2.5 || ^3.0.1 oracledb: ^5.1.0 pg: ^8.5.1 pg-native: ^3.0.0 @@ -18978,22 +20138,23 @@ packages: date-fns: 2.29.3 debug: 4.3.4 dotenv: 16.0.3 - glob: 7.2.3 + glob: 8.1.0 js-yaml: 4.1.0 - mkdirp: 1.0.4 + mkdirp: 2.1.5 + pg: 8.10.0 reflect-metadata: 0.1.13 sha.js: 2.4.11 sqlite3: 5.1.4 - tslib: 2.4.1 - uuid: 8.3.2 + tslib: 2.5.0 + uuid: 9.0.0 xml2js: 0.4.23 - yargs: 17.6.2 + yargs: 17.7.1 transitivePeerDependencies: - supports-color dev: false - /typeorm/0.3.11_ts-node@10.9.1: - resolution: {integrity: sha512-pzdOyWbVuz/z8Ww6gqvBW4nylsM0KLdUCDExr2gR20/x1khGSVxQkjNV/3YqliG90jrWzrknYbYscpk8yxFJVg==} + /typeorm/0.3.12_sqlite3@5.1.4: + resolution: {integrity: sha512-sYSxBmCf1nJLLTcYtwqZ+lQIRtLPyUoO93rHTOKk9vJCyT4UfRtU7oRsJvfvKP3nnZTD1hzz2SEy2zwPEN6OyA==} engines: {node: '>= 12.9.0'} hasBin: true peerDependencies: @@ -19004,7 +20165,7 @@ packages: ioredis: ^5.0.4 mongodb: ^3.6.0 mssql: ^7.3.0 - mysql2: ^2.2.5 + mysql2: ^2.2.5 || ^3.0.1 oracledb: ^5.1.0 pg: ^8.5.1 pg-native: ^3.0.0 @@ -19058,21 +20219,21 @@ packages: date-fns: 2.29.3 debug: 4.3.4 dotenv: 16.0.3 - glob: 7.2.3 + glob: 8.1.0 js-yaml: 4.1.0 - mkdirp: 1.0.4 + mkdirp: 2.1.5 reflect-metadata: 0.1.13 sha.js: 2.4.11 - ts-node: 10.9.1_awa2wsr5thmg3i7jqycphctjfq - tslib: 2.4.1 - uuid: 8.3.2 + sqlite3: 5.1.4 + tslib: 2.5.0 + uuid: 9.0.0 xml2js: 0.4.23 - yargs: 17.6.2 + yargs: 17.7.1 transitivePeerDependencies: - supports-color - dev: true + dev: false - /typeorm/0.3.12_pg@8.8.0+sqlite3@5.1.4: + /typeorm/0.3.12_ts-node@10.9.1: resolution: {integrity: sha512-sYSxBmCf1nJLLTcYtwqZ+lQIRtLPyUoO93rHTOKk9vJCyT4UfRtU7oRsJvfvKP3nnZTD1hzz2SEy2zwPEN6OyA==} engines: {node: '>= 12.9.0'} hasBin: true @@ -19140,18 +20301,17 @@ packages: dotenv: 16.0.3 glob: 8.1.0 js-yaml: 4.1.0 - mkdirp: 2.1.3 - pg: 8.8.0 + mkdirp: 2.1.5 reflect-metadata: 0.1.13 sha.js: 2.4.11 - sqlite3: 5.1.4 + ts-node: 10.9.1_awa2wsr5thmg3i7jqycphctjfq tslib: 2.5.0 uuid: 9.0.0 xml2js: 0.4.23 - yargs: 17.6.2 + yargs: 17.7.1 transitivePeerDependencies: - supports-color - dev: false + dev: true /typescript/4.8.4: resolution: {integrity: sha512-QCh+85mCy+h0IGff8r5XWzOVSbBO+KfeYrMQh7NJ58QujwcE22u+NUSmUxqF+un70P9GXKxa2HCNiTTMJknyjQ==} @@ -19162,6 +20322,12 @@ packages: resolution: {integrity: sha512-Uz+dTXYzxXXbsFpM86Wh3dKCxrQqUcVMxwU54orwlJjOpO3ao8L7j5lH+dWfTwgCwIuM9GQ2kvVotzYJMXTBZg==} engines: {node: '>=4.2.0'} hasBin: true + dev: true + + /typescript/4.9.5: + resolution: {integrity: sha512-1FXk9E2Hm+QzZQ7z+McJiHL4NW1F2EzMu9Nq9i3zAaGqibafqYwCVU6WyWAuyQRRzOlxou8xZSyXLEN8oKj24g==} + engines: {node: '>=4.2.0'} + hasBin: true /uglify-js/3.17.4: resolution: {integrity: sha512-T9q82TJI9e/C1TAxYvfb16xO120tMVFZrGA3f9/P4424DNu6ypK103y0GPFVa17yotwSyZW5iYXgjYHkGrJW/g==} @@ -19179,7 +20345,7 @@ packages: resolution: {integrity: sha512-b+aKlI2oTnxnfeSQWV1sMacqSNxqhtXySaH6bflvONGxF8V/fT3ZlYH7z2qgGfydsvpVo4JUgM/Ylyfl2YouCg==} engines: {node: '>=16.0.0', npm: '>=7.0.0'} dependencies: - multiformats: 11.0.1 + multiformats: 11.0.2 dev: true /unbox-primitive/1.0.2: @@ -19287,13 +20453,13 @@ packages: engines: {node: '>=4'} dev: true - /update-browserslist-db/1.0.10_browserslist@4.21.4: + /update-browserslist-db/1.0.10_browserslist@4.21.5: resolution: {integrity: sha512-OztqDenkfFkbSG+tRxBeAnCVPckDBcvibKd35yDONx6OU8N7sqgwc7rCbkJ/WcYtVRZ4ba68d6byhC21GFh7sQ==} hasBin: true peerDependencies: browserslist: '>= 4.21.0' dependencies: - browserslist: 4.21.4 + browserslist: 4.21.5 escalade: 3.1.1 picocolors: 1.0.0 dev: true @@ -19301,13 +20467,13 @@ packages: /uri-js/4.4.0: resolution: {integrity: sha512-B0yRTzYdUCCn9n+F4+Gh4yIDtMQcaJsmYBDsTSG8g/OejKBodLQ2IHfN3bM7jUsRXndopT7OIXWdYqc1fjmV6g==} dependencies: - punycode: 2.2.0 + punycode: 2.3.0 dev: false /uri-js/4.4.1: resolution: {integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==} dependencies: - punycode: 2.2.0 + punycode: 2.3.0 /url-join/4.0.1: resolution: {integrity: sha512-jk1+QP6ZJqyOiuEI9AEWQfju/nB2Pw466kbA0LEZljHwKeMgd9WrAEgEGxjPDD2+TNbbb37rTyhEfrCXfuKXnA==} @@ -19334,8 +20500,8 @@ packages: /util.promisify/1.0.1: resolution: {integrity: sha512-g9JpC/3He3bm38zsLupWryXHoEcS22YHthuPQSJdMy6KNrzIRzWqcsHzD/WUnqe45whVou4VIsPew37DoXWNrA==} dependencies: - define-properties: 1.1.4 - es-abstract: 1.21.1 + define-properties: 1.2.0 + es-abstract: 1.21.2 has-symbols: 1.0.3 object.getownpropertydescriptors: 2.1.5 dev: true @@ -19361,6 +20527,7 @@ packages: /uuid/8.3.2: resolution: {integrity: sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==} hasBin: true + dev: true /uuid/9.0.0: resolution: {integrity: sha512-MXcSTerfPa4uqyzStbRoTgt5XIe3x5+42+q1sDuy3R5MDk66URdLMOZe5aPX/SQd+kuYAh0FdP/pO28IkQyTeg==} @@ -19383,8 +20550,8 @@ packages: source-map: 0.7.4 dev: true - /v8-to-istanbul/9.0.1: - resolution: {integrity: sha512-74Y4LqY74kLE6IFyIjPtkSTWzUZmj8tdHT9Ii/26dvQ6K9Dl2NbEfj0XgU2sHCtKgt5VupqhlO/5aWuqS+IY1w==} + /v8-to-istanbul/9.1.0: + resolution: {integrity: sha512-6z3GW9x8G1gd+JIIgQQQxXuiJtCXeAjp6RaPEPLv62mH3iPHPxV6W3robxtCzNErRo6ZwTmzWhsbNvjyEBKzKA==} engines: {node: '>=10.12.0'} dependencies: '@jridgewell/trace-mapping': 0.3.17 @@ -19395,7 +20562,7 @@ packages: /validate-npm-package-license/3.0.4: resolution: {integrity: sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==} dependencies: - spdx-correct: 3.1.1 + spdx-correct: 3.2.0 spdx-expression-parse: 3.0.1 dev: true @@ -19412,8 +20579,8 @@ packages: builtins: 5.0.1 dev: true - /validator/13.7.0: - resolution: {integrity: sha512-nYXQLCBkpJ8X6ltALua9dRrZDHVYxjJ1wgskNt1lH9fzGjs3tgojGSCBjmEPwkWS1y29+DrizMTW19Pr9uB2nw==} + /validator/13.9.0: + resolution: {integrity: sha512-B+dGG8U3fdtM0/aNK4/X8CXq/EcxU2WPrPEkJGslb47qyHsxmbggTWK0yEA4qnYVNF+nxNlN88o14hIcPmSIEA==} engines: {node: '>= 0.10'} /varint/5.0.2: @@ -19455,9 +20622,9 @@ packages: hasBin: true dependencies: axios: 0.25.0 - joi: 17.7.0 + joi: 17.9.0 lodash: 4.17.21 - minimist: 1.2.7 + minimist: 1.2.8 rxjs: 7.8.0 transitivePeerDependencies: - debug @@ -19469,9 +20636,9 @@ packages: hasBin: true dependencies: axios: 0.27.2 - joi: 17.7.0 + joi: 17.9.0 lodash: 4.17.21 - minimist: 1.2.7 + minimist: 1.2.8 rxjs: 7.8.0 transitivePeerDependencies: - debug @@ -19492,7 +20659,7 @@ packages: engines: {node: '>=10.13.0'} dependencies: glob-to-regexp: 0.4.1 - graceful-fs: 4.2.10 + graceful-fs: 4.2.11 dev: true /wbuf/1.7.3: @@ -19510,7 +20677,7 @@ packages: resolution: {integrity: sha512-vKYz0s9spYfYrKhrF88F44lkofS1yj6TCF40+i077a7boru2BNROl5VZEIVL9jJRUDsNzvmVSKkq3kS8kZnB2Q==} dependencies: cross-fetch: 3.1.5 - did-resolver: 4.0.1 + did-resolver: 4.1.0 transitivePeerDependencies: - encoding @@ -19518,14 +20685,14 @@ packages: resolution: {integrity: sha512-e0MO3wdXWKrLbL0DgGnUV7WHVuw9OUvL4hjgnPkIeEvESk74gAITi5G606JtZPp39cd8HA9VQzCIvA49LpPN5Q==} engines: {node: '>= 8'} - /web-vitals/3.1.1: - resolution: {integrity: sha512-qvllU+ZeQChqzBhZ1oyXmWsjJ8a2jHYpH8AMaVuf29yscOPZfTQTjQFRX6+eADTdsDE8IanOZ0cetweHMs8/2A==} + /web-vitals/3.3.0: + resolution: {integrity: sha512-GZsEmJBNclIpViS/7QVOTr7Kbt4BgLeR7kQ5zCCtJVuiWsA+K6xTXaoEXssvl8yYFICEyNmA2Nr+vgBYTnS4bA==} dev: false - /webcrypto-core/1.7.5: - resolution: {integrity: sha512-gaExY2/3EHQlRNNNVSrbG2Cg94Rutl7fAaKILS1w8ZDhGxdFOaw6EbCfHIxPy9vt/xwp5o0VQAx9aySPF6hU1A==} + /webcrypto-core/1.7.6: + resolution: {integrity: sha512-TBPiewB4Buw+HI3EQW+Bexm19/W4cP/qZG/02QJCXN+iN+T5sl074vZ3rJcle/ZtDBQSgjkbsQO/1eFcxnSBUA==} dependencies: - '@peculiar/asn1-schema': 2.3.3 + '@peculiar/asn1-schema': 2.3.6 '@peculiar/json-schema': 1.1.12 asn1js: 3.0.5 pvtsutils: 1.3.2 @@ -19558,7 +20725,7 @@ packages: engines: {node: '>=12'} dev: true - /webpack-dev-middleware/5.3.3_webpack@5.75.0: + /webpack-dev-middleware/5.3.3_webpack@5.76.2: resolution: {integrity: sha512-hj5CYrY0bZLB+eTO+x/j67Pkrquiy7kWepMHmUMoPsmcUaeEnQJqFzHJOyxgWlq746/wUuA64p9ta34Kyb01pA==} engines: {node: '>= 12.13.0'} peerDependencies: @@ -19569,17 +20736,19 @@ packages: mime-types: 2.1.35 range-parser: 1.2.1 schema-utils: 4.0.0 - webpack: 5.75.0 + webpack: 5.76.2 dev: true - /webpack-dev-server/4.11.1_webpack@5.75.0: - resolution: {integrity: sha512-lILVz9tAUy1zGFwieuaQtYiadImb5M3d+H+L1zDYalYoDl0cksAB1UNyuE5MMWJrG6zR1tXkCP2fitl7yoUJiw==} + /webpack-dev-server/4.13.1_webpack@5.76.2: + resolution: {integrity: sha512-5tWg00bnWbYgkN+pd5yISQKDejRBYGEw15RaEEslH+zdbNDxxaZvEAO2WulaSaFKb5n3YG8JXsGaDsut1D0xdA==} engines: {node: '>= 12.13.0'} hasBin: true peerDependencies: webpack: ^4.37.0 || ^5.0.0 webpack-cli: '*' peerDependenciesMeta: + webpack: + optional: true webpack-cli: optional: true dependencies: @@ -19587,7 +20756,7 @@ packages: '@types/connect-history-api-fallback': 1.3.5 '@types/express': 4.17.15 '@types/serve-index': 1.9.1 - '@types/serve-static': 1.15.0 + '@types/serve-static': 1.15.1 '@types/sockjs': 0.3.33 '@types/ws': 8.5.4 ansi-html-community: 0.0.8 @@ -19598,11 +20767,12 @@ packages: connect-history-api-fallback: 2.0.0 default-gateway: 6.0.3 express: 4.18.2 - graceful-fs: 4.2.10 + graceful-fs: 4.2.11 html-entities: 2.3.3 http-proxy-middleware: 2.0.6_@types+express@4.17.15 ipaddr.js: 2.0.1 - open: 8.4.0 + launch-editor: 2.6.0 + open: 8.4.2 p-retry: 4.6.2 rimraf: 3.0.2 schema-utils: 4.0.0 @@ -19610,9 +20780,9 @@ packages: serve-index: 1.9.1 sockjs: 0.3.24 spdy: 4.0.2 - webpack: 5.75.0 - webpack-dev-middleware: 5.3.3_webpack@5.75.0 - ws: 8.12.0 + webpack: 5.76.2 + webpack-dev-middleware: 5.3.3_webpack@5.76.2 + ws: 8.13.0 transitivePeerDependencies: - bufferutil - debug @@ -19620,14 +20790,14 @@ packages: - utf-8-validate dev: true - /webpack-manifest-plugin/4.1.1_webpack@5.75.0: + /webpack-manifest-plugin/4.1.1_webpack@5.76.2: resolution: {integrity: sha512-YXUAwxtfKIJIKkhg03MKuiFAD72PlrqCiwdwO4VEXdRO5V0ORCNwaOwAZawPZalCbmH9kBDmXnNeQOw+BIEiow==} engines: {node: '>=12.22.0'} peerDependencies: webpack: ^4.44.2 || ^5.47.0 dependencies: tapable: 2.2.1 - webpack: 5.75.0 + webpack: 5.76.2 webpack-sources: 2.3.1 dev: true @@ -19659,8 +20829,8 @@ packages: engines: {node: '>=10.13.0'} dev: true - /webpack/5.75.0: - resolution: {integrity: sha512-piaIaoVJlqMsPtX/+3KTTO6jfvrSYgauFVdt8cr9LTHKmcq/AMd4mhzsiP7ZF/PGRNPGA8336jldh9l2Kt2ogQ==} + /webpack/5.76.2: + resolution: {integrity: sha512-Th05ggRm23rVzEOlX8y67NkYCHa9nTNcwHPBhdg+lKG+mtiW7XgggjAeeLnADAe7mLjJ6LUNfgHAuRRh+Z6J7w==} engines: {node: '>=10.13.0'} hasBin: true peerDependencies: @@ -19674,23 +20844,23 @@ packages: '@webassemblyjs/ast': 1.11.1 '@webassemblyjs/wasm-edit': 1.11.1 '@webassemblyjs/wasm-parser': 1.11.1 - acorn: 8.8.1 - acorn-import-assertions: 1.8.0_acorn@8.8.1 - browserslist: 4.21.4 + acorn: 8.8.2 + acorn-import-assertions: 1.8.0_acorn@8.8.2 + browserslist: 4.21.5 chrome-trace-event: 1.0.3 enhanced-resolve: 5.12.0 es-module-lexer: 0.9.3 eslint-scope: 5.1.1 events: 3.3.0 glob-to-regexp: 0.4.1 - graceful-fs: 4.2.10 + graceful-fs: 4.2.11 json-parse-even-better-errors: 2.3.1 loader-runner: 4.3.0 mime-types: 2.1.35 neo-async: 2.6.2 schema-utils: 3.1.1 tapable: 2.2.1 - terser-webpack-plugin: 5.3.6_webpack@5.75.0 + terser-webpack-plugin: 5.3.7_webpack@5.76.2 watchpack: 2.4.0 webpack-sources: 3.2.3 transitivePeerDependencies: @@ -19849,10 +21019,10 @@ packages: engines: {node: '>=10.0.0'} dependencies: '@apideck/better-ajv-errors': 0.3.6_ajv@8.12.0 - '@babel/core': 7.20.12 - '@babel/preset-env': 7.20.2_@babel+core@7.20.12 - '@babel/runtime': 7.20.7 - '@rollup/plugin-babel': 5.3.1_3dsfpkpoyvuuxyfgdbpn4j4uzm + '@babel/core': 7.21.3 + '@babel/preset-env': 7.20.2_@babel+core@7.21.3 + '@babel/runtime': 7.21.0 + '@rollup/plugin-babel': 5.3.1_hqhlikriuul7byjexqnpgcmenu '@rollup/plugin-node-resolve': 11.2.1_rollup@2.79.1 '@rollup/plugin-replace': 2.4.2_rollup@2.79.1 '@surma/rollup-plugin-off-main-thread': 2.2.3 @@ -19970,7 +21140,7 @@ packages: resolution: {integrity: sha512-vo2RQo7DILVRoH5LjGqw3nphavEjK4Qk+FenXeUsknKn14eCNedHOXWbmnvP4ipKhlE35pvJ4yl4YYf6YsJArA==} dev: true - /workbox-webpack-plugin/6.5.4_webpack@5.75.0: + /workbox-webpack-plugin/6.5.4_webpack@5.76.2: resolution: {integrity: sha512-LmWm/zoaahe0EGmMTrSLUi+BjyR3cdGEfU3fS6PN1zKFYbqAKuQ+Oy/27e4VSXsyIwAw8+QDfk1XHNGtZu9nQg==} engines: {node: '>=10.0.0'} peerDependencies: @@ -19979,7 +21149,7 @@ packages: fast-json-stable-stringify: 2.1.0 pretty-bytes: 5.6.0 upath: 1.2.0 - webpack: 5.75.0 + webpack: 5.76.2 webpack-sources: 1.4.3 workbox-build: 6.5.4 transitivePeerDependencies: @@ -19990,7 +21160,7 @@ packages: /workbox-window/6.5.4: resolution: {integrity: sha512-HnLZJDwYBE+hpG25AQBO8RUWBJRaCsI9ksQJEp3aCOFCaG5kqaToAYXFRAHxzRluM2cQbGzdQF5rjKPWPA1fug==} dependencies: - '@types/trusted-types': 2.0.2 + '@types/trusted-types': 2.0.3 workbox-core: 6.5.4 dev: true @@ -20002,8 +21172,8 @@ packages: string-width: 4.2.3 strip-ansi: 6.0.1 - /wrap-ansi/8.0.1: - resolution: {integrity: sha512-QFF+ufAqhoYHvoHdajT/Po7KoXVBPXS2bgjIam5isfWJPfIOnQZ50JtUiVvCv/sjgacf3yRrt2ZKUZ/V4itN4g==} + /wrap-ansi/8.1.0: + resolution: {integrity: sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==} engines: {node: '>=12'} dependencies: ansi-styles: 6.2.1 @@ -20017,7 +21187,7 @@ packages: /write-file-atomic/2.4.3: resolution: {integrity: sha512-GaETH5wwsX+GcnzhPgKcKjJ6M2Cq3/iZp1WyY/X1CSqrW+jVNM9Y7D8EC2sM4ZG/V8wZlSniJnCKWPmBYAucRQ==} dependencies: - graceful-fs: 4.2.10 + graceful-fs: 4.2.11 imurmurhash: 0.1.4 signal-exit: 3.0.7 dev: true @@ -20044,7 +21214,7 @@ packages: engines: {node: '>=6'} dependencies: detect-indent: 5.0.0 - graceful-fs: 4.2.10 + graceful-fs: 4.2.11 make-dir: 2.1.0 pify: 4.0.1 sort-keys: 2.0.0 @@ -20056,7 +21226,7 @@ packages: engines: {node: '>=8.3'} dependencies: detect-indent: 6.1.0 - graceful-fs: 4.2.10 + graceful-fs: 4.2.11 is-plain-obj: 2.1.0 make-dir: 3.1.0 sort-keys: 4.2.0 @@ -20084,19 +21254,6 @@ packages: utf-8-validate: optional: true - /ws/7.5.9: - resolution: {integrity: sha512-F+P9Jil7UiSKSkppIiD94dN07AwvFixvLIj1Og1Rl9GGMuNipJnV9JzjD6XuqmAeiswGvUmNLjr5cFuXwNS77Q==} - engines: {node: '>=8.3.0'} - peerDependencies: - bufferutil: ^4.0.1 - utf-8-validate: ^5.0.2 - peerDependenciesMeta: - bufferutil: - optional: true - utf-8-validate: - optional: true - dev: true - /ws/8.11.0: resolution: {integrity: sha512-HPG3wQd9sNQoT9xHyNCXoDUa+Xw/VevmY9FoHyQ+g+rrMn4j6FB4np7Z0OhdTgjx6MgQLK7jwSy1YecU1+4Asg==} engines: {node: '>=10.0.0'} @@ -20110,8 +21267,8 @@ packages: optional: true dev: true - /ws/8.12.0: - resolution: {integrity: sha512-kU62emKIdKVeEIOIKVegvqpXMSTAMLJozpHZaJNDYqBjzlSYXQGviYwN1osDLJ9av68qHd4a2oSjd7yD4pacig==} + /ws/8.13.0: + resolution: {integrity: sha512-x9vcZYTrFPC7aSIbj7sRCYo7L/Xb8Iy+pW0ng0wt2vCJv7M9HOMy0UoN3rr+IFC7hb7vXoqS+P9ktyLLLhO+LA==} engines: {node: '>=10.0.0'} peerDependencies: bufferutil: ^4.0.1 @@ -20195,8 +21352,8 @@ packages: y18n: 5.0.8 yargs-parser: 20.2.9 - /yargs/17.6.2: - resolution: {integrity: sha512-1/9UrdHjDZc0eOU0HxOHoS78C69UD3JRMvzlJ7S79S2nTaWRA/whGCTV8o9e/N/1Va9YIV7Q4sOxD8VV4pCWOw==} + /yargs/17.7.1: + resolution: {integrity: sha512-cwiTb08Xuv5fqF4AovYacTFNxk62th7LKJ6BL9IGUpTJrWoU7/7WdQGTP2SjKf1dUNBGzDd28p/Yfs/GI6JrLw==} engines: {node: '>=12'} dependencies: cliui: 8.0.1 @@ -20235,7 +21392,7 @@ packages: dependencies: lodash.get: 4.4.2 lodash.isequal: 4.5.0 - validator: 13.7.0 + validator: 13.9.0 optionalDependencies: commander: 9.5.0 From 33f61d91d327fa7370801ab44b5e87483642b390 Mon Sep 17 00:00:00 2001 From: nklomp Date: Wed, 22 Mar 2023 15:57:58 +0100 Subject: [PATCH 03/16] chore: add missing api-extractor.json --- packages/kv-store/api-extractor.json | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) create mode 100644 packages/kv-store/api-extractor.json diff --git a/packages/kv-store/api-extractor.json b/packages/kv-store/api-extractor.json new file mode 100644 index 000000000..409d7f16c --- /dev/null +++ b/packages/kv-store/api-extractor.json @@ -0,0 +1,18 @@ +{ + "$schema": "https://developer.microsoft.com/json-schemas/api-extractor/v7/api-extractor.schema.json", + "apiReport": { + "enabled": true, + "reportFolder": "./api", + "reportTempFolder": "./api" + }, + + "docModel": { + "enabled": true, + "apiJsonFilePath": "./api/.api.json" + }, + + "dtsRollup": { + "enabled": false + }, + "mainEntryPointFilePath": "/build/index.d.ts" +} From 741d3c4d9dbe19aa3b839e2709f0b02908cd2d8a Mon Sep 17 00:00:00 2001 From: nklomp Date: Mon, 27 Mar 2023 16:20:56 +0200 Subject: [PATCH 04/16] chore: refactor key value store. Do not expose keyv (interfaces) to the outside world --- packages/credential-ld/src/ld-suites.ts | 2 +- packages/kv-store/README.md | 125 ++++++++++++++ packages/kv-store/package.json | 6 +- .../src/__tests__/keyv-typeorm.test.ts | 15 +- packages/kv-store/src/__tests__/keyv.test.ts | 2 +- packages/kv-store/src/index.ts | 8 +- packages/kv-store/src/key-value-store.ts | 104 +++++++---- packages/kv-store/src/key-value-types.ts | 77 ++++++--- .../kv-store/src/keyv-ts-impl/tiered/index.ts | 120 ------------- .../src/{keyv-ts-impl => keyv}/keyv-types.ts | 7 +- .../src/{keyv-ts-impl => keyv}/keyv.ts | 38 ++-- packages/kv-store/src/store-adapters/index.ts | 2 + .../src/store-adapters/tiered/index.ts | 162 ++++++++++++++++++ .../tiered/types.ts | 8 +- .../typeorm/entities/keyValueStoreEntity.ts | 0 .../typeorm/index.ts | 26 +-- .../typeorm/types.ts | 4 +- pnpm-lock.yaml | 4 +- 18 files changed, 475 insertions(+), 235 deletions(-) delete mode 100644 packages/kv-store/src/keyv-ts-impl/tiered/index.ts rename packages/kv-store/src/{keyv-ts-impl => keyv}/keyv-types.ts (91%) rename packages/kv-store/src/{keyv-ts-impl => keyv}/keyv.ts (87%) create mode 100644 packages/kv-store/src/store-adapters/index.ts create mode 100644 packages/kv-store/src/store-adapters/tiered/index.ts rename packages/kv-store/src/{keyv-ts-impl => store-adapters}/tiered/types.ts (54%) rename packages/kv-store/src/{keyv-ts-impl => store-adapters}/typeorm/entities/keyValueStoreEntity.ts (100%) rename packages/kv-store/src/{keyv-ts-impl => store-adapters}/typeorm/index.ts (84%) rename packages/kv-store/src/{keyv-ts-impl => store-adapters}/typeorm/types.ts (83%) diff --git a/packages/credential-ld/src/ld-suites.ts b/packages/credential-ld/src/ld-suites.ts index 7ea7599a1..adb141340 100644 --- a/packages/credential-ld/src/ld-suites.ts +++ b/packages/credential-ld/src/ld-suites.ts @@ -12,7 +12,7 @@ import { DIDDocument } from 'did-resolver' export type RequiredAgentMethods = IResolver & Pick /** - * Base class for Veramo adapters of LinkedDataSignature suites. + * Base class for Veramo store-adapters of LinkedDataSignature suites. * * @alpha This API is experimental and is very likely to change or disappear in future releases without notice. */ diff --git a/packages/kv-store/README.md b/packages/kv-store/README.md index a3bcc8c4b..81ec72a8b 100644 --- a/packages/kv-store/README.md +++ b/packages/kv-store/README.md @@ -1,2 +1,127 @@ # Veramo Key Value store +A simple typed Key Value store with out of the box support for in memory/maps, sqlite and typeorm implementations for +usage in browser, NodeJS and React-Native. +It includes a tiered local/remote implementation that support all environments. + +# Usage in your application or module + +## setup + +Veramo provides 3 store adapters out of the box. The first is an in memory Map based store, the second is a TypeORM +based store, meaning we support multiple databases. Lastly there is a tiered store, which allows you to use a local and +remote store together. + +You should also be able to use store adapters from the [keyv](https://github.com/jaredwray/keyv) project. Be aware that +Veramo uses an internal fork of that project, as we have several constraints not present in the upstream project. As a +result the adapters are not guaranteed to work in your environment. +See [Keyv project relationship](#keyv-project-relationship) for more information. + +### Map based in memory store + +This is the simplest implementation where a Map is being used to store the Keys and Values + +````typescript +import { IKeyValueStore, IKeyValueStoreOptions, KeyValueStore } from '@veramo/key-value-store' + +const options: IKeyValueStoreOptions = { + namespace: 'example', + store: new Map() +} +const kvStore: IKeyValueStore = new KeyValueStore({ options }) +```` + +### TypeORM store + +This implementation uses TypeORM using a simple entity to store the namespace prefixed key, an expiration value and the +value itself. It supports multiple database backends. + +````typescript +import { + IKeyValueStore, + IKeyValueStoreOptions, + KeyValueStore, + KeyValueStoreEntity, + KeyValueTypeORMStoreAdapter +} from '@veramo/key-value-store' +import { DataSource } from 'typeorm' + +const dbConnection: DataSource = await new DataSource({ + type: 'sqlite', + database: ':memory:', + logging: 'all', + migrationsRun: true, + synchronize: false, + entities: [KeyValueStoreEntity], +}).initialize() + +const options: IKeyValueStoreOptions = { + namespace: 'example', + store: new KeyValueTypeORMStoreAdapter({ dbConnection }) +} +const kvStore: IKeyValueStore = new KeyValueStore({ options }) +```` + +### Tiered store + +The tiered store expects a local store and a remote store. Obviously it makes most sense to have a memory based local +store and potentially more expensive/slower remote store + +````typescript +import { + IKeyValueStore, + IKeyValueStoreOptions, + KeyValueStore, + KeyValueStoreEntity, + KeyValueTieredStoreAdapter, + KeyValueTypeORMStoreAdapter +} from '@veramo/key-value-store' +import { DataSource } from 'typeorm' +import { KeyValueTieredStoreAdapter } from './index' + +const dbConnection: DataSource = await new DataSource({ + type: 'sqlite', + database: ':memory:', + logging: 'all', + migrationsRun: true, + synchronize: false, + entities: [KeyValueStoreEntity], +}).initialize() + +const local: Map = new Map() +const remote = new KeyValueTypeORMStoreAdapter({ dbConnection }) + +const options: IKeyValueStoreOptions = { + namespace: 'example', + store: new KeyValueTieredStoreAdapter({ local, remote }) +} +const kvStore: IKeyValueStore = new KeyValueStore({ options }) +```` + +## Usage + +After you have setup the Key Value Store as described above in your agent, it will be available in your agent. + + + +# Keyv project relationship + +Please note that a large portion of the Veramo Key Value Store code is a port of +the [keyv](https://github.com/jaredwray/keyv) project, adding support for Typescript and ESM so it can be used Veramo + +The ported code should support the storage plugins available for the keyv project. +Veramo itself supports NodeJS, Browser and React-Native environment. +Please be aware that these requirements probably aren't true for any keyv storage plugins. + +One of the big changes compared to the upstream project is that this port does not have dynamic loading of adapters +based on URIs. We believe that any Veramo Key Value store should use explicitly defined adapters. + +The port is part of the Veramo Key Value Store module code itself, as we do not want to make an official maintained port +out of it. + +Veramo exposes its own API/interfaces for the Key Value store, meaning we could also support any other implementation in +the future The Veramo kv-store module provides out of the box support for in memory/maps, sqlite and typeorm +implementations, +including a tiered local/remote implementation that support all environments. + +We welcome any new storage modules diff --git a/packages/kv-store/package.json b/packages/kv-store/package.json index f2074c53c..e2db69be7 100644 --- a/packages/kv-store/package.json +++ b/packages/kv-store/package.json @@ -12,8 +12,8 @@ "extract-api": "node ../cli/bin/veramo.js dev extract-api" }, "dependencies": { - "@veramo/core-types": "^5.1.2", - "@veramo/utils": "^5.1.2", + "@veramo/core-types": "workspace:*", + "@veramo/utils": "workspace:*", "events": "^3.3.0", "json-buffer": "^3.0.1", "typeorm": "^0.3.10", @@ -44,7 +44,7 @@ "repository": "git@github.com:uport-project/veramo.git", "author": "Niels Klomp ", "license": "Apache-2.0", - "keywords": [], + "keywords": ["Veramo", "Key Value Store", "keyv"], "type": "module", "moduleDirectories": [ "node_modules", diff --git a/packages/kv-store/src/__tests__/keyv-typeorm.test.ts b/packages/kv-store/src/__tests__/keyv-typeorm.test.ts index 801d36f69..4c80dd355 100644 --- a/packages/kv-store/src/__tests__/keyv-typeorm.test.ts +++ b/packages/kv-store/src/__tests__/keyv-typeorm.test.ts @@ -1,8 +1,9 @@ import timekeeper from 'timekeeper' -import { Keyv } from '../keyv-ts-impl/keyv.js' -import { KeyvTypeORMStoreAdapter } from '../keyv-ts-impl/typeorm' +import { Keyv } from '../keyv/keyv.js' import { DataSource } from 'typeorm' -import { KeyValueStoreEntity } from '../keyv-ts-impl/typeorm/entities/keyValueStoreEntity' +import { KeyValueStoreEntity } from '../store-adapters/typeorm/entities/keyValueStoreEntity.js' +import { KeyValueTypeORMStoreAdapter } from '../store-adapters' + describe('TypeORM Keyv Store adapter', () => { let dbConnection: DataSource @@ -23,7 +24,7 @@ describe('TypeORM Keyv Store adapter', () => { }) it('should respect ttl', async () => { - const store = new KeyvTypeORMStoreAdapter({ dbConnection, namespace: 'test' }) + const store = new KeyValueTypeORMStoreAdapter({ dbConnection, namespace: 'test' }) const keyv = new Keyv(store) await keyv.set('key', 'value', 100) @@ -33,18 +34,18 @@ describe('TypeORM Keyv Store adapter', () => { }) it('should set a value that can be retrieved from the proper namespace', async () => { - const store = new KeyvTypeORMStoreAdapter({ dbConnection, namespace: 'test' }) + const store = new KeyValueTypeORMStoreAdapter({ dbConnection, namespace: 'test' }) const keyv = new Keyv(store) await keyv.set('key', 'value') expect(await keyv.get('key')).toEqual('value') - const alternateStore = new KeyvTypeORMStoreAdapter({ dbConnection, namespace: 'another' }) + const alternateStore = new KeyValueTypeORMStoreAdapter({ dbConnection, namespace: 'another' }) const alternateKeyv = new Keyv(alternateStore) expect(await alternateKeyv.get('key')).toBeUndefined() }) it('should set multiple values that can be retrieved', async () => { - const store = new KeyvTypeORMStoreAdapter({ dbConnection, namespace: 'test' }) + const store = new KeyValueTypeORMStoreAdapter({ dbConnection, namespace: 'test' }) const keyv = new Keyv(store) for (let i = 0; i < 10; i++) { await keyv.set(`${i}`, `value${i}`) diff --git a/packages/kv-store/src/__tests__/keyv.test.ts b/packages/kv-store/src/__tests__/keyv.test.ts index 390a813ee..7c1f8a1e6 100644 --- a/packages/kv-store/src/__tests__/keyv.test.ts +++ b/packages/kv-store/src/__tests__/keyv.test.ts @@ -1,7 +1,7 @@ import KeyvSqlite from '@keyv/sqlite'; import timekeeper from 'timekeeper' -import { Keyv } from '../keyv-ts-impl/keyv.js' +import { Keyv } from '../keyv/keyv.js' describe('MAP store', () => { it('should respect ttl', async () => { diff --git a/packages/kv-store/src/index.ts b/packages/kv-store/src/index.ts index 81901c179..bda431252 100644 --- a/packages/kv-store/src/index.ts +++ b/packages/kv-store/src/index.ts @@ -4,7 +4,7 @@ * * @packageDocumentation */ -export { KeyValueStore } from './key-value-store' -export * from './keyv-ts-impl/tiered' -export { Keyv } from './keyv-ts-impl/keyv' -export * from './key-value-types' +export { KeyValueStore } from './key-value-store.js' +export * from './store-adapters/tiered' +export * from './store-adapters/typeorm' +export * from './key-value-types.js' diff --git a/packages/kv-store/src/key-value-store.ts b/packages/kv-store/src/key-value-store.ts index fc9ad97e5..7c5b85d4c 100644 --- a/packages/kv-store/src/key-value-store.ts +++ b/packages/kv-store/src/key-value-store.ts @@ -1,35 +1,43 @@ import { IAgentPlugin } from '@veramo/core-types' import { - DeserializedValueData, + IValueData, IKeyValueStore, - KVStoreDeleteArgs, - KVStoreDeleteManyArgs, - KVStoreGetArgs, - KVStoreGetManyArgs, - KVStoreHasArgs, - KVStoreOnArgs, KVStoreOptions, - KVStoreSetArgs, -} from './key-value-types' -import { Keyv } from './keyv-ts-impl/keyv' + IKeyValueStoreDeleteArgs, + IKeyValueStoreDeleteManyArgs, + IKeyValueStoreGetArgs, + IKeyValueStoreGetManyArgs, + IKeyValueStoreHasArgs, + IKeyValueStoreOnArgs, IKeyValueStoreOptions, + IKeyValueStoreSetArgs, +} from './key-value-types.js' +import { Keyv } from './keyv/keyv.js' +import { KeyvDeserializedData, KeyvOptions, KeyvStoredData } from './keyv/keyv-types.js' /** * Agent plugin that implements {@link @veramo/core-types#IKeyValueStore} interface * @public */ -export class KeyValueStore implements IAgentPlugin { +export class KeyValueStore implements IAgentPlugin { /** * Plugin methods * @public */ - readonly methods: IKeyValueStore + readonly methods: IKeyValueStore + + /** + * The main keyv typescript port which delegates to the storage adapters and takes care of some common functionality + * + * @private + */ private readonly keyv: Keyv - constructor(options: KVStoreOptions) { + constructor(options: IKeyValueStoreOptions) { this.methods = { - kvStoreOn: this.kvStoreOn.bind(this), kvStoreGet: this.kvStoreGet.bind(this), + kvStoreGetAsValueData: this.kvStoreGetAsValueData.bind(this), kvStoreGetMany: this.kvStoreGetMany.bind(this), + kvStoreGetManyAsValueData: this.kvStoreGetManyAsValueData.bind(this), kvStoreSet: this.kvStoreSet.bind(this), kvStoreHas: this.kvStoreHas.bind(this), kvStoreDelete: this.kvStoreDelete.bind(this), @@ -37,49 +45,78 @@ export class KeyValueStore implements IAgentPlugin { kvStoreClear: this.kvStoreClear.bind(this), kvStoreDisconnect: this.kvStoreDisconnect.bind(this), } - this.keyv = new Keyv(options.uri, options) + this.keyv = new Keyv(options.uri, options as KeyvOptions) } - private async kvStoreGet(args: KVStoreGetArgs): Promise | undefined> { - const result = await this.keyv.get(args.key, { raw: false }) + private async kvStoreGet(args: IKeyValueStoreGetArgs): Promise { + const result = await this.keyv.get(args.key, { raw: true }) if (result === null || result === undefined) { return undefined } - return this.toDeserializedValueData(result) + return result as ValueType } + private async kvStoreGetAsValueData(args: IKeyValueStoreGetArgs): Promise> { + const result = await this.keyv.get(args.key, { raw: false }) + if (result === null || result === undefined) { + // We always return a ValueData object for this method + return { value: undefined, expires: undefined } + } + return this.toDeserializedValueData(result) + } - private async kvStoreGetMany(args: KVStoreGetManyArgs): Promise>> { - const result = await this.keyv.getMany(args.keys, { raw: false }) + private async kvStoreGetMany(args: IKeyValueStoreGetManyArgs): Promise> { + if (!args.keys || args.keys.length === 0) { + return [] + } + let result = await this.keyv.getMany(args.keys, { raw: true }) - // Please note we are filtering all the undefined/null values from the result here and below! - // I guess we could opt to keep the same indexes as the argument and make them undefined + // Making sure we return the same array length as the amount of key(s) passed in if (result === null || result === undefined || result.length === 0) { + result = new Array() + for (const key of args.keys) { + result.push(undefined) + } + } + return result.map(v => !!v ? v as ValueType : undefined) + } + + private async kvStoreGetManyAsValueData(args: IKeyValueStoreGetManyArgs): Promise>> { + if (!args.keys || args.keys.length === 0) { return [] } - return result.filter(v => !!v).map(v => this.toDeserializedValueData(v)) + let result = await this.keyv.getMany(args.keys, { raw: false }) + + // Making sure we return the same array length as the amount of key(s) passed in + if (result === null || result === undefined || result.length === 0) { + result = new Array>() + for (const key of args.keys) { + result.push({ value: undefined, expires: undefined } as KeyvDeserializedData) + } + } + return result.map(v => !!v ? this.toDeserializedValueData(v) : { value: undefined, expires: undefined }) } - private async kvStoreSet(args: KVStoreSetArgs): Promise { + private async kvStoreSet(args: IKeyValueStoreSetArgs): Promise { return await this.keyv.set(args.key, args.value, args.ttl) } - private async kvStoreHas(args: KVStoreHasArgs): Promise { + private async kvStoreHas(args: IKeyValueStoreHasArgs): Promise { return await this.keyv.has(args.key) } - private async kvStoreDelete(args: KVStoreDeleteArgs): Promise { + private async kvStoreDelete(args: IKeyValueStoreDeleteArgs): Promise { return await this.keyv.delete(args.key) } - private async kvStoreDeleteMany(args: KVStoreDeleteManyArgs): Promise { + private async kvStoreDeleteMany(args: IKeyValueStoreDeleteManyArgs): Promise { return await this.keyv.delete(args.keys) } - private async kvStoreClear(): Promise> { + private async kvStoreClear(): Promise { await this.keyv.clear() return this.methods } @@ -88,19 +125,20 @@ export class KeyValueStore implements IAgentPlugin { return this.keyv.disconnect() } - private async kvStoreOn(args: KVStoreOnArgs): Promise> { + // Public so parties using the kv store directly can add listeners if they want + public async kvStoreOn(args: IKeyValueStoreOnArgs): Promise { this.keyv.on(args.eventName, args.listener) return this.methods } - private toDeserializedValueData(result: any): DeserializedValueData { + private toDeserializedValueData(result: any): IValueData { if (result === null || result === undefined) { throw Error(`Result cannot be undefined or null at this this point`) } else if (typeof result !== 'object') { - return { value: result } + return { value: result, expires: undefined } } else if (!('value' in result)) { - return { value: result } + return { value: result, expires: undefined } } - return result as DeserializedValueData + return result as IValueData } } diff --git a/packages/kv-store/src/key-value-types.ts b/packages/kv-store/src/key-value-types.ts index 0d2fdc9ff..43c306e98 100644 --- a/packages/kv-store/src/key-value-types.ts +++ b/packages/kv-store/src/key-value-types.ts @@ -1,84 +1,105 @@ import { IPluginMethodMap } from '@veramo/core-types' -import { KeyvStore } from './keyv-ts-impl/keyv-types' - -export interface DeserializedValueData { - value: ValueType; - expires?: number | undefined; +/** + * This is how the store will actually store the value. + * It contains an optional `expires` property, which indicates when the value would expire + */ +export interface IValueData { + value: ValueType | undefined; + expires: number | undefined; } -export interface KVStoreOnArgs { +export interface IKeyValueStoreOnArgs { eventName: string | symbol, listener: (...args: any[]) => void } -export interface KVStoreGetArgs { +export interface IKeyValueStoreGetArgs { key: string } -export interface KVStoreGetManyArgs { +export interface IKeyValueStoreGetManyArgs { keys: string[] } -export interface KVStoreHasArgs { + +export interface IKeyValueStoreHasArgs { key: string } -export interface KVStoreDeleteArgs { +export interface IKeyValueStoreDeleteArgs { key: string } -export interface KVStoreDeleteManyArgs { +export interface IKeyValueStoreDeleteManyArgs { keys: string[] } -export interface KVStoreSetArgs { +export interface IKeyValueStoreSetArgs { key: string, value: ValueType, ttl?: number } -export interface KVStoreOptions { +export interface IKeyValueStoreOptions { [key: string]: any; /** Namespace for the current instance. */ namespace?: string | undefined; + /** A custom serialization function. */ /*serialize?: ((data: KeyvDeserializedData) => OrPromise) /!** A custom deserialization function. *!/ deserialize?: ((data: any) => OrPromise | undefined>);*/ /** The connection string URI. */ uri?: string | undefined; - /** The storage adapter instance to be used by Keyv. */ - store?: KeyvStore | undefined; + /** The storage adapter instance to be used by Keyv. or any other implementation */ + store: IKeyValueStoreAdapter; /** Default TTL. Can be overridden by specifying a TTL on `.set()`. */ ttl?: number | undefined; - /** Specify an adapter to use. e.g `'redis'` or `'mongodb'`. */ - adapter?: 'redis' | 'mongodb' | 'mongo' | 'sqlite' | 'postgresql' | 'postgres' | 'mysql' | string | object | undefined; + /** Enable compression option **/ /*compression?: KeyvCompressionAdapter | undefined;*/ emitErrors?: boolean } -export interface IKeyValueStore extends IPluginMethodMap { +export interface IKeyValueStoreAdapter { + namespace?: string | undefined +} + + +export interface IKeyValueStore extends IPluginMethodMap { + + /** + * Get a single value by key. Can be undefined as the underlying store typically will not throw an error for a non existing key + * + * @param args Contains the key to search for + */ + kvStoreGet(args: IKeyValueStoreGetArgs): Promise - kvStoreGet(args: KVStoreGetArgs): Promise | undefined> + /** + * Get a single item as Value Data from the store. Will always return a Value Data Object, but the value in it can be undefined in case the actual store does not contain the value + * @param args Contains the key to search for + */ + kvStoreGetAsValueData(args: IKeyValueStoreGetArgs): Promise> - kvStoreOn(args: KVStoreOnArgs): Promise> + kvStoreGetMany( + args: IKeyValueStoreGetManyArgs, + ): Promise>; - kvStoreGetMany( - args: KVStoreGetManyArgs, - ): Promise | undefined>>; + kvStoreGetManyAsValueData( + args: IKeyValueStoreGetManyArgs, + ): Promise>>; - kvStoreSet(args: KVStoreSetArgs): Promise; + kvStoreSet(args: IKeyValueStoreSetArgs): Promise; - kvStoreDelete(args: KVStoreDeleteArgs): Promise; + kvStoreDelete(args: IKeyValueStoreDeleteArgs): Promise; - kvStoreDeleteMany(args: KVStoreDeleteManyArgs): Promise; + kvStoreDeleteMany(args: IKeyValueStoreDeleteManyArgs): Promise; - kvStoreClear(): Promise>; + kvStoreClear(): Promise; - kvStoreHas(args: KVStoreHasArgs): Promise; + kvStoreHas(args: IKeyValueStoreHasArgs): Promise; kvStoreDisconnect(): Promise diff --git a/packages/kv-store/src/keyv-ts-impl/tiered/index.ts b/packages/kv-store/src/keyv-ts-impl/tiered/index.ts deleted file mode 100644 index f7f389467..000000000 --- a/packages/kv-store/src/keyv-ts-impl/tiered/index.ts +++ /dev/null @@ -1,120 +0,0 @@ -import EventEmitter from 'events' -import { Keyv } from '../keyv' -import type { Options, Options_ } from './types' - -type KeyvTieredIndex = 'local' | 'remote'; - -export class KeyvTieredStoreAdapter extends EventEmitter { - opts: Options_ - remote: Keyv - local: Keyv - iterationLimit?: string | number - - constructor({ remote = new Keyv(), local = new Keyv(), ...options }: Options) { - super() - this.opts = { - validator: () => true, - dialect: 'tiered', - ...options, - } - this.remote = remote - this.local = local - } - - async get(key: string): Promise { - const localResult: unknown = await this.local.get(key) - - if (localResult === undefined || !this.opts.validator(localResult, key)) { - const remoteResult = await this.remote.get(key) - - if (remoteResult === localResult) { - return remoteResult - } - - await this.local.set(key, remoteResult) - - return remoteResult - } - - return localResult - } - - async getMany(keys: string[]): Promise { - const promises = [] - for (const key of keys) { - promises.push(this.get(key)) - } - - const values = await Promise.all(promises) - const data: unknown[] = [] - for (const value of values) { - data.push(value) - } - - return data - } - - async set(key: string, value: any, ttl?: number) { - const toSet: KeyvTieredIndex[] = ['local', 'remote'] - return Promise.all(toSet.map(async store => this[store].set(key, value, ttl)), - ) - } - - async clear(): Promise { - const toClear: KeyvTieredIndex[] = ['local'] - if (!this.opts.localOnly) { - toClear.push('remote') - } - - await Promise.all(toClear - .map(async store => this[store].clear()), - ) - - return undefined - } - - async delete(key: string): Promise { - const toDelete: KeyvTieredIndex[] = ['local'] - if (!this.opts.localOnly) { - toDelete.push('remote') - } - - const deleted = await Promise.all(toDelete - .map(async store => this[store].delete(key)), - ) - - return deleted.every(Boolean) - } - - async deleteMany(keys: string[]): Promise { - const promises = [] - for (const key of keys) { - promises.push(this.delete(key)) - } - - const values = await Promise.all(promises) - - return values.every(Boolean) - } - - async has(key: string): Promise { - const response = await this.local.has(key) - - if (!response || !this.opts.validator(response, key)) { - return this.remote.has(key) - } - - return response - } - - async* iterator(namespace?: string): AsyncGenerator { - const limit = Number.parseInt(this.iterationLimit as string, 10) || 10 - this.remote.opts.iterationLimit = limit - if (this.remote && typeof this.remote.iterator === 'function') { - for await (const entries of this.remote.iterator(namespace)) { - yield entries - } - } - } -} - diff --git a/packages/kv-store/src/keyv-ts-impl/keyv-types.ts b/packages/kv-store/src/keyv/keyv-types.ts similarity index 91% rename from packages/kv-store/src/keyv-ts-impl/keyv-types.ts rename to packages/kv-store/src/keyv/keyv-types.ts index 6bb9e28db..ce4b954c6 100644 --- a/packages/kv-store/src/keyv-ts-impl/keyv-types.ts +++ b/packages/kv-store/src/keyv/keyv-types.ts @@ -1,12 +1,10 @@ /** - * Please be aware these types are compatible with the keyv package, to ensure we can use its adapters for free. + * Please be aware these types are compatible with the keyv package, to ensure we can use its store-adapters for free. * * Be very careful when extending/changing!. Normally you will want to create an adapter or decorator for your additional behaviour or requirements */ import { OrPromise } from '@veramo/utils' -export type WithRequiredProperties = T & Required>; - export interface KeyvOptions { [key: string]: any; @@ -47,6 +45,7 @@ export interface KeyvDeserializedData { export type KeyvStoredData = KeyvDeserializedData | string | Value | undefined; + export interface KeyvStore { namespace?: string | undefined @@ -57,7 +56,7 @@ export interface KeyvStore { getMany?( keys: string[], options?: { raw?: boolean } - ): Array> | Promise>> | undefined; + ): OrPromise> | undefined>; iterator?(namespace?: string | undefined): AsyncGenerator; diff --git a/packages/kv-store/src/keyv-ts-impl/keyv.ts b/packages/kv-store/src/keyv/keyv.ts similarity index 87% rename from packages/kv-store/src/keyv-ts-impl/keyv.ts rename to packages/kv-store/src/keyv/keyv.ts index 68dd49be9..ba6054407 100644 --- a/packages/kv-store/src/keyv-ts-impl/keyv.ts +++ b/packages/kv-store/src/keyv/keyv.ts @@ -1,14 +1,25 @@ import EventEmitter from 'events' import JSONB from 'json-buffer' -import { KeyvDeserializedData, KeyvOptions, KeyvStore, KeyvStoredData } from './keyv-types' +import { KeyvDeserializedData, KeyvOptions, KeyvStore, KeyvStoredData } from './keyv-types.js' +import { OrPromise } from '@veramo/utils' /** * Please note that this is code adapted from @link https://github.com/jaredwray/keyv to support Typescript and ESM in Veramo * * The code should support the storage plugins available for the keyv project. - * Veramo itself supports NodeJS, Browser and React-Native. Please be aware that these requirements probably aren't true for any keyv storage plugins. - * The Veramo kv-store module provides out of the box support for in memory/maps, sqlite and typeorm implementations, including a tiered local/remote implementation that support all environments. + * Veramo itself supports NodeJS, Browser and React-Native environment. + * Please be aware that these requirements probably aren't true for any keyv storage plugins. + * + * One of the big changes compared to the upstream project is that this port does not have dynamic loading of store-adapters based on URIs. + * We believe that any Veramo Key Value store should use explicitly defined store-adapters. + * + * The port is part of the Veramo Key Value Store module, as we do not want to make an official maintained port out of it. + * Veramo exposes its own API/interfaces for the Key Value store, meaning we could also support any other implementation in the future + * + * The Veramo kv-store module provides out of the box support for in memory/maps, sqlite and typeorm implementations, + * including a tiered local/remote implementation that support all environments. + * * We welcome any new storage modules */ export class Keyv extends EventEmitter implements KeyvStore { @@ -34,10 +45,10 @@ export class Keyv extends EventEmitter implements KeyvStore if (!this.opts.store) { if (typeof uri !== 'string') { this.opts.store = uri as KeyvStore - } else { + }/* else { const adapterOptions = { ...this.opts } this.opts.store = loadStore(adapterOptions) - } + }*/ } if (!this.opts.store) { throw Error('No store') @@ -116,16 +127,17 @@ export class Keyv extends EventEmitter implements KeyvStore .join(':') } - getMany(keys: string[], options?: { raw?: boolean }): Array> | Promise>> | undefined { + getMany(keys: string[], options?: { raw?: boolean }): OrPromise> | undefined> { if (this.store.getMany !== undefined) { - return this.store.getMany(this._getKeyPrefixArray(keys)) + return this.store.getMany(this._getKeyPrefixArray(keys), options) + // todo: Probably wise to check expired ValueData here, if the getMany does not implement this feature itself! } const keyPrefixed = this._getKeyPrefixArray(keys) const promises = [] for (const key of keyPrefixed) { promises.push(Promise.resolve() - .then(() => this.store.get(key)) + .then(() => this.store.get(key, options)) .then(data => (typeof data === 'string') ? this.deserialize(data) : (this.opts.compression ? this.deserialize(data) : data)) .then(data => { if (data === undefined || data === null) { @@ -270,9 +282,9 @@ export class Keyv extends EventEmitter implements KeyvStore } } - +/* const loadStore = (options: KeyvOptions) => { - const adapters = { + const store-adapters = { redis: '@keyv/redis', rediss: '@keyv/redis', mongodb: '@keyv/mongo', @@ -287,7 +299,7 @@ const loadStore = (options: KeyvOptions) => { } let adapter = options.adapter if (!adapter && options.uri) { - const regex = /^[^:+]*/ + const regex = /^[^:+]*!/ if (regex) { const match = regex.exec(options.uri) adapter = Array.isArray(match) ? match[0] : undefined @@ -295,12 +307,12 @@ const loadStore = (options: KeyvOptions) => { } if (adapter) { // @ts-ignore - return new (import(adapters[adapter]))(options) + return new (import(store-adapters[adapter]))(options) } return new Map() } - +*/ const iterableAdapters = [ 'sqlite', 'postgres', diff --git a/packages/kv-store/src/store-adapters/index.ts b/packages/kv-store/src/store-adapters/index.ts new file mode 100644 index 000000000..9c162c9a3 --- /dev/null +++ b/packages/kv-store/src/store-adapters/index.ts @@ -0,0 +1,2 @@ +export * from './tiered' +export * from './typeorm' diff --git a/packages/kv-store/src/store-adapters/tiered/index.ts b/packages/kv-store/src/store-adapters/tiered/index.ts new file mode 100644 index 000000000..81cbeb8fd --- /dev/null +++ b/packages/kv-store/src/store-adapters/tiered/index.ts @@ -0,0 +1,162 @@ +import EventEmitter from 'events' +import type { Options, Options_ } from './types.js' +import { KeyvStore, KeyvStoredData } from '../../keyv/keyv-types.js' +import { Keyv } from '../../keyv/keyv.js' +import { IKeyValueStoreAdapter } from '../../key-value-types.js'; + +type KeyvTieredIndex = 'local' | 'remote'; + +export class KeyValueTieredStoreAdapter extends EventEmitter implements KeyvStore, IKeyValueStoreAdapter { + opts: Options_ + remote: KeyvStore + local: KeyvStore + iterationLimit?: string | number + + namespace?: string | undefined + + constructor({ remote, local, ...options }: Options) { + super() + this.opts = { + validator: () => true, + dialect: 'tiered', + ...options, + } + + // todo: since we are instantiating a new Keyv object in case we encounter a map, the key prefix is probably applied twice, given it will be part of a an outer keyv object as well. + // Probably wise to simply create a Map Store class. As it is an in memory construct, and will work in terms of resolution it does not have highest priority + this.local = (isMap(local) ? new Keyv(local as Map) : local) as KeyvStore + this.remote = (isMap(remote) ? new Keyv(remote as Map) : remote) as KeyvStore + this.namespace = this.local.namespace + } + + async get(key: string | string[], options?: { raw?: boolean }): Promise | Array>> { + if (Array.isArray(key)) { + return await this.getMany(key, options) + } + const localResult: unknown = await this.local.get(key, options) + + if (localResult === undefined || !this.opts.validator(localResult, key)) { + const remoteResult = await this.remote.get(key, options) as string | KeyvStoredData | Value | undefined + + if (remoteResult !== localResult) { + const value = (!!remoteResult ? typeof remoteResult === 'object' && 'value' in remoteResult ? remoteResult.value : remoteResult : undefined) as Value + const ttl = !!remoteResult && typeof remoteResult === 'object' && 'expires' in remoteResult && remoteResult.expires ? remoteResult.expires - Date.now() : undefined + if (!ttl || ttl > 0) { + await this.local.set(key, value, ttl) + } else { + this.local.delete(key) + } + } + return remoteResult + } + + return localResult as KeyvStoredData + } + + async getMany( + keys: string[], options?: { raw?: boolean }, + ): Promise> | undefined> { + const promises: Array | Array>>> = [] + for (const key of keys) { + promises.push(this.get(key, options) as Promise>) + } + + const values = await Promise.all(promises) + const data: Array> | undefined = [] + for (const value of values) { + data.push(value as KeyvStoredData) + } + return data + } + + async set(key: string, value: any, ttl?: number) { + const toSet: KeyvTieredIndex[] = ['local', 'remote'] + return Promise.all(toSet.map(async store => this[store].set(key, value, ttl)), + ) + } + + async clear(): Promise { + const toClear: KeyvTieredIndex[] = ['local'] + if (!this.opts.localOnly) { + toClear.push('remote') + } + + await Promise.all(toClear + .map(async store => this[store].clear()), + ) + + return undefined + } + + async delete(key: string): Promise { + const toDelete: KeyvTieredIndex[] = ['local'] + if (!this.opts.localOnly) { + toDelete.push('remote') + } + + const deleted = await Promise.all(toDelete + .map(async store => this[store].delete(key)), + ) + + return deleted.every(Boolean) + } + + async deleteMany(keys: string[]): Promise { + const promises = [] + for (const key of keys) { + promises.push(this.delete(key)) + } + + const values = await Promise.all(promises) + + return values.every(Boolean) + } + + async has(key: string): Promise { + let response + if (typeof this.local.has === 'function') { + response = this.local.has(key) + } else { + const value = await this.local.get(key) + response = value !== undefined + } + if (!response || !this.opts.validator(response, key)) { + if (typeof this.remote.has === 'function') { + response = this.remote.has(key) + } else { + const value = await this.remote.get(key) + response = value !== undefined + } + } + return response + } + + async* iterator(namespace?: string): AsyncGenerator { + const limit = Number.parseInt(this.iterationLimit as string, 10) || 10 + this.remote.opts.iterationLimit = limit + if (this.remote && typeof this.remote.iterator === 'function') { + for await (const entries of this.remote.iterator(namespace)) { + yield entries + } + } + } + +} + +function isMap(map: any) { + if (map instanceof Map) { + return true + } else if ( + map && + typeof map.clear === 'function' && + typeof map.delete === 'function' && + typeof map.get === 'function' && + typeof map.has === 'function' && + typeof map.set === 'function' + ) { + return true + } + + return false +} + diff --git a/packages/kv-store/src/keyv-ts-impl/tiered/types.ts b/packages/kv-store/src/store-adapters/tiered/types.ts similarity index 54% rename from packages/kv-store/src/keyv-ts-impl/tiered/types.ts rename to packages/kv-store/src/store-adapters/tiered/types.ts index 56ec19a87..039d8af07 100644 --- a/packages/kv-store/src/keyv-ts-impl/tiered/types.ts +++ b/packages/kv-store/src/store-adapters/tiered/types.ts @@ -1,8 +1,8 @@ -import type { Keyv } from '../keyv'; +import { IKeyValueStoreAdapter } from '../../key-value-types.js' -export type Options = { - local: Keyv; - remote: Keyv; +export type Options = { + local: IKeyValueStoreAdapter | Map; + remote: IKeyValueStoreAdapter | Map; localOnly?: boolean; iterationLimit?: number | string; }; diff --git a/packages/kv-store/src/keyv-ts-impl/typeorm/entities/keyValueStoreEntity.ts b/packages/kv-store/src/store-adapters/typeorm/entities/keyValueStoreEntity.ts similarity index 100% rename from packages/kv-store/src/keyv-ts-impl/typeorm/entities/keyValueStoreEntity.ts rename to packages/kv-store/src/store-adapters/typeorm/entities/keyValueStoreEntity.ts diff --git a/packages/kv-store/src/keyv-ts-impl/typeorm/index.ts b/packages/kv-store/src/store-adapters/typeorm/index.ts similarity index 84% rename from packages/kv-store/src/keyv-ts-impl/typeorm/index.ts rename to packages/kv-store/src/store-adapters/typeorm/index.ts index 05e39576d..b31547861 100644 --- a/packages/kv-store/src/keyv-ts-impl/typeorm/index.ts +++ b/packages/kv-store/src/store-adapters/typeorm/index.ts @@ -1,16 +1,18 @@ import EventEmitter from 'events' import { OrPromise } from '@veramo/utils' import { DataSource, In, Like } from 'typeorm' -import { KeyValueStoreEntity } from './entities/keyValueStoreEntity' -import { Options, Options_ } from './types' -import { KeyvStore, KeyvStoredData } from '../keyv-types' +import { KeyValueStoreEntity } from './entities/keyValueStoreEntity.js' +import { KeyValueTypeORMOptions, Options_ } from './types.js' +import { KeyvStore, KeyvStoredData } from '../../keyv/keyv-types.js' +import { IKeyValueStoreAdapter } from '../../key-value-types.js' -export class KeyvTypeORMStoreAdapter extends EventEmitter implements KeyvStore { +export { KeyValueTypeORMOptions } from './types.js' +export class KeyValueTypeORMStoreAdapter extends EventEmitter implements KeyvStore, IKeyValueStoreAdapter { private readonly dbConnection: OrPromise readonly namespace: string opts: Options_ - constructor(options: Options) { + constructor(options: KeyValueTypeORMOptions) { super() this.dbConnection = options.dbConnection this.namespace = options.namespace || 'keyv' @@ -27,7 +29,7 @@ export class KeyvTypeORMStoreAdapter extends EventEmitter implements KeyvStore>> { const connection = await getConnectedDb(this.dbConnection) const results = await connection.getRepository(KeyValueStoreEntity).findBy({ - key: In(keys) + key: In(keys), }) return results.filter(result => !!result.value).map(result => options?.raw || !result ? result?.value : { value: result?.value, @@ -49,7 +51,7 @@ export class KeyvTypeORMStoreAdapter extends EventEmitter implements KeyvStore { const connection = await getConnectedDb(this.dbConnection) const results = await connection.getRepository(KeyValueStoreEntity).delete({ - key: In(keys) + key: In(keys), }) return !!results.affected && results.affected >= 1 } @@ -73,14 +75,14 @@ export class KeyvTypeORMStoreAdapter extends EventEmitter implements KeyvStore { const connection = await getConnectedDb(this.dbConnection) await connection.getRepository(KeyValueStoreEntity).delete({ - key: Like(`${this.namespace}:%`) + key: Like(`${this.namespace}:%`), }) } async has(key: string): Promise { const connection = await getConnectedDb(this.dbConnection) const result = await connection.getRepository(KeyValueStoreEntity).countBy({ - key + key, }) return result === 1 } diff --git a/packages/kv-store/src/keyv-ts-impl/typeorm/types.ts b/packages/kv-store/src/store-adapters/typeorm/types.ts similarity index 83% rename from packages/kv-store/src/keyv-ts-impl/typeorm/types.ts rename to packages/kv-store/src/store-adapters/typeorm/types.ts index 128d0560c..7f48cd140 100644 --- a/packages/kv-store/src/keyv-ts-impl/typeorm/types.ts +++ b/packages/kv-store/src/store-adapters/typeorm/types.ts @@ -1,9 +1,7 @@ -import type { Keyv } from '../keyv'; import { OrPromise } from '@veramo/utils' import { DataSource } from 'typeorm' -export type Options = { - +export type KeyValueTypeORMOptions = { dbConnection: OrPromise namespace?: string diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 1928375de..1d8af95e6 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -830,8 +830,8 @@ importers: '@keyv/sqlite': ^3.6.5 '@keyv/test-suite': '*' '@types/json-buffer': ^3.0.0 - '@veramo/core-types': ^5.1.2 - '@veramo/utils': ^5.1.2 + '@veramo/core-types': workspace:* + '@veramo/utils': workspace:* eslint: ^8.33.0 eslint-plugin-promise: ^6.1.1 events: ^3.3.0 From 57ff727147e14dbe37c33d05f36e13a3c021ebb7 Mon Sep 17 00:00:00 2001 From: nklomp Date: Sun, 2 Apr 2023 03:28:27 +0200 Subject: [PATCH 05/16] chore: implement all functionality and tests --- packages/kv-store/README.md | 5 +- packages/kv-store/package.json | 4 +- .../src/__tests__/keyv-typeorm.test.ts | 67 ----- packages/kv-store/src/__tests__/keyv.test.ts | 203 ++++++++++++++- .../kv-store/src/__tests__/kvstore.test.ts | 95 +++++++ packages/kv-store/src/index.ts | 4 +- packages/kv-store/src/key-value-store.ts | 103 ++++---- packages/kv-store/src/key-value-types.ts | 59 ++--- packages/kv-store/src/keyv/keyv-types.ts | 66 +++-- packages/kv-store/src/keyv/keyv.ts | 246 +++++++++--------- packages/kv-store/src/store-adapters/index.ts | 4 +- .../src/store-adapters/tiered/index.ts | 60 +++-- .../src/store-adapters/tiered/types.ts | 20 +- .../typeorm/entities/keyValueStoreEntity.ts | 31 +-- .../src/store-adapters/typeorm/index.ts | 37 ++- .../typeorm/migrations/1.createKVDatabase.ts | 52 ++++ .../typeorm/migrations/index.ts | 12 + .../src/store-adapters/typeorm/types.ts | 15 +- 18 files changed, 677 insertions(+), 406 deletions(-) delete mode 100644 packages/kv-store/src/__tests__/keyv-typeorm.test.ts create mode 100644 packages/kv-store/src/__tests__/kvstore.test.ts create mode 100644 packages/kv-store/src/store-adapters/typeorm/migrations/1.createKVDatabase.ts create mode 100644 packages/kv-store/src/store-adapters/typeorm/migrations/index.ts diff --git a/packages/kv-store/README.md b/packages/kv-store/README.md index 81ec72a8b..1b40fbd59 100644 --- a/packages/kv-store/README.md +++ b/packages/kv-store/README.md @@ -69,6 +69,7 @@ store and potentially more expensive/slower remote store ````typescript import { + kvStoreMigrations, IKeyValueStore, IKeyValueStoreOptions, KeyValueStore, @@ -77,14 +78,14 @@ import { KeyValueTypeORMStoreAdapter } from '@veramo/key-value-store' import { DataSource } from 'typeorm' -import { KeyValueTieredStoreAdapter } from './index' -const dbConnection: DataSource = await new DataSource({ +dbConnection = await new DataSource({ type: 'sqlite', database: ':memory:', logging: 'all', migrationsRun: true, synchronize: false, + migrations: [...kvStoreMigrations], entities: [KeyValueStoreEntity], }).initialize() diff --git a/packages/kv-store/package.json b/packages/kv-store/package.json index e2db69be7..2a04b7adc 100644 --- a/packages/kv-store/package.json +++ b/packages/kv-store/package.json @@ -15,14 +15,16 @@ "@veramo/core-types": "workspace:*", "@veramo/utils": "workspace:*", "events": "^3.3.0", + "debug": "^4.3.4", "json-buffer": "^3.0.1", "typeorm": "^0.3.10", "uint8arrays": "^3.1.1" }, "devDependencies": { "@types/json-buffer": "^3.0.0", + "@types/debug": "^4.1.7", "keyv": "^4.5.2", - "@keyv/test-suite": "*", + "@keyv/test-suite": "^1.9.1", "@keyv/sqlite": "^3.6.5", "@keyv/mongo": "^2.1.8", "@keyv/compress-brotli": "^1.1.3", diff --git a/packages/kv-store/src/__tests__/keyv-typeorm.test.ts b/packages/kv-store/src/__tests__/keyv-typeorm.test.ts deleted file mode 100644 index 4c80dd355..000000000 --- a/packages/kv-store/src/__tests__/keyv-typeorm.test.ts +++ /dev/null @@ -1,67 +0,0 @@ -import timekeeper from 'timekeeper' -import { Keyv } from '../keyv/keyv.js' -import { DataSource } from 'typeorm' -import { KeyValueStoreEntity } from '../store-adapters/typeorm/entities/keyValueStoreEntity.js' -import { KeyValueTypeORMStoreAdapter } from '../store-adapters' - - -describe('TypeORM Keyv Store adapter', () => { - let dbConnection: DataSource - - beforeEach(async () => { - dbConnection = await new DataSource({ - type: 'sqlite', - database: ':memory:', - logging: 'all', - migrationsRun: false, - synchronize: true, - entities: [KeyValueStoreEntity], - }).initialize() - }) - - afterEach(async () => { - await (await dbConnection).destroy() - }) - - it('should respect ttl', async () => { - const store = new KeyValueTypeORMStoreAdapter({ dbConnection, namespace: 'test' }) - const keyv = new Keyv(store) - await keyv.set('key', 'value', 100) - - expect(await keyv.get('key')).toEqual('value') - timekeeper.freeze(Date.now() + 150) - expect(await keyv.get('key')).toBeUndefined() - }) - - it('should set a value that can be retrieved from the proper namespace', async () => { - const store = new KeyValueTypeORMStoreAdapter({ dbConnection, namespace: 'test' }) - const keyv = new Keyv(store) - await keyv.set('key', 'value') - expect(await keyv.get('key')).toEqual('value') - - const alternateStore = new KeyValueTypeORMStoreAdapter({ dbConnection, namespace: 'another' }) - const alternateKeyv = new Keyv(alternateStore) - expect(await alternateKeyv.get('key')).toBeUndefined() - }) - - it('should set multiple values that can be retrieved', async () => { - const store = new KeyValueTypeORMStoreAdapter({ dbConnection, namespace: 'test' }) - const keyv = new Keyv(store) - for (let i = 0; i < 10; i++) { - await keyv.set(`${i}`, `value${i}`) - } - - let values = await keyv.getMany(['0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'nope']) - expect(values).toHaveLength(10) - - await keyv.delete('0') - expect(await keyv.getMany([ '0'])).toHaveLength(0) - values = await keyv.getMany(['0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'nope']) - expect(values).toHaveLength(9) - - await keyv.clear() - values = await keyv.getMany(['0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'nope']) - expect(values).toHaveLength(0) - }) -}) - diff --git a/packages/kv-store/src/__tests__/keyv.test.ts b/packages/kv-store/src/__tests__/keyv.test.ts index 7c1f8a1e6..42d1c2f55 100644 --- a/packages/kv-store/src/__tests__/keyv.test.ts +++ b/packages/kv-store/src/__tests__/keyv.test.ts @@ -1,28 +1,219 @@ -import KeyvSqlite from '@keyv/sqlite'; +import KeyvSqlite from '@keyv/sqlite' import timekeeper from 'timekeeper' import { Keyv } from '../keyv/keyv.js' +import { DataSource } from 'typeorm' +import { KeyValueStoreEntity } from '../store-adapters/typeorm/entities/keyValueStoreEntity' +import { KeyValueTieredStoreAdapter, KeyValueTypeORMStoreAdapter } from '../store-adapters' +import { KeyvOptions } from '../keyv/keyv-types' +import { kvStoreMigrations } from '../store-adapters/typeorm/migrations' + + +let dbConnection: DataSource +beforeEach(async () => { + dbConnection = await new DataSource({ + type: 'sqlite', + database: ':memory:', + logging: ['error'], + migrationsRun: true, + synchronize: false, + migrations: [...kvStoreMigrations], + entities: [KeyValueStoreEntity], + }).initialize() +}) +afterEach(async () => { + try { + if (dbConnection?.isInitialized) { + await (await dbConnection).destroy() + } + } catch (error) { + // the disconnect test will close the DB anyway + } + +}) +describe('keyv MAP store', () => { + it('should respect ttl', async () => { + const store = new Map() + const keyv = new Keyv(store) + await keyv.set('key', 'value', 100) + + expect(await keyv.get('key')).toEqual('value') + timekeeper.freeze(Date.now() + 150) + expect(await keyv.get('key')).toBeUndefined() + }) + it('should work for all methods', async () => { + const store = new Map() + await testAllKeyvMethods(store) + }) + + +}) + +describe('keyv sqlite store', () => { -describe('MAP store', () => { it('should respect ttl', async () => { - const store = new Map() - const keyv = new Keyv(store) + const keyv = new Keyv(new KeyvSqlite()) await keyv.set('key', 'value', 100) expect(await keyv.get('key')).toEqual('value') timekeeper.freeze(Date.now() + 150) expect(await keyv.get('key')).toBeUndefined() }) + it('should work for all methods', async () => { + const store = new KeyvSqlite() + await testAllKeyvMethods(store) + }) }) +describe('keyv TypeORM store', () => { + /*let dbConnection: DataSource + + beforeEach(async () => { + dbConnection = await new DataSource({ + type: 'sqlite', + database: ':memory:', + logging: 'all', + migrationsRun: true, + synchronize: false, + migrations: [...kvStoreMigrations], + entities: [KeyValueStoreEntity], + }).initialize() + }) + + afterEach(async () => { + try { + (await dbConnection).destroy() + } catch (error) { + // the disconnect test will close the DB anyway + } -describe('sqlite store', () => { + }) +*/ it('should respect ttl', async () => { - const keyv = new Keyv(new KeyvSqlite()) + const store = new KeyValueTypeORMStoreAdapter({ dbConnection, namespace: 'test' }) + const keyv = new Keyv(store) await keyv.set('key', 'value', 100) expect(await keyv.get('key')).toEqual('value') timekeeper.freeze(Date.now() + 150) expect(await keyv.get('key')).toBeUndefined() }) + + it('should set a value that can be retrieved from the proper namespace', async () => { + const store = new KeyValueTypeORMStoreAdapter({ dbConnection, namespace: 'test' }) + const keyv = new Keyv(store) + await keyv.set('key', 'value') + expect(await keyv.get('key')).toEqual('value') + + const alternateStore = new KeyValueTypeORMStoreAdapter({ dbConnection, namespace: 'another' }) + const alternateKeyv = new Keyv(alternateStore) + expect(await alternateKeyv.get('key')).toBeUndefined() + }) + + it('should set multiple values that can be retrieved', async () => { + const store = new KeyValueTypeORMStoreAdapter({ dbConnection, namespace: 'test' }) + const keyv = new Keyv(store) + for (let i = 0; i < 10; i++) { + await keyv.set(`${i}`, `value${i}`) + } + + let values = await keyv.getMany(['0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'nope']) + expect(values).toHaveLength(11) + + await keyv.delete('0') + expect(await keyv.getMany(['0'])).toHaveLength(1) + values = await keyv.getMany(['0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'nope']) + expect(values).toHaveLength(11) + expect(values[9]).toBe('value9') + expect(values[10]).toBeUndefined() + + await keyv.clear() + values = await keyv.getMany(['0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'nope']) + expect(values).toHaveLength(11) + expect(values[0]).toBeUndefined() + expect(values[9]).toBeUndefined() + expect(values[10]).toBeUndefined() + }) + it('should work for all methods', async () => { + const store = new KeyValueTypeORMStoreAdapter({ dbConnection, namespace: 'test-all' }) + await testAllKeyvMethods(store) + await store.disconnect() + }) }) + +describe('keyv tiered store', () => { + + + + + + it('should respect ttl', async () => { + const local: Map = new Map() + const remote = new KeyValueTypeORMStoreAdapter({ dbConnection }) + + const options: KeyvOptions = { + namespace: 'example', + store: new KeyValueTieredStoreAdapter({ local, remote }) + } + const keyv = new Keyv(undefined, options) + await keyv.set('key', 'value', 100) + + expect(await keyv.get('key')).toEqual('value') + timekeeper.freeze(Date.now() + 150) + expect(await keyv.get('key')).toBeUndefined() + await keyv.disconnect() + }) + it('should work for all methods', async () => { + const local: Map = new Map() + const remote = new KeyValueTypeORMStoreAdapter({ dbConnection }) + + const options: KeyvOptions = { + namespace: 'example', + store: new KeyValueTieredStoreAdapter({ local, remote }) + } + const store = new Keyv(undefined, options) + + // No raw match test, as remote and local have different raw values + await testAllKeyvMethods(store, false) + }) + + +}) + + +async function testAllKeyvMethods(store: any, rawMatchTest = true) { + const keyv = new Keyv(store) + + // set value + await expect(keyv.set('key1', 'value1')).resolves.toEqual(true) + await expect(keyv.set('key2', 'value2')).resolves.toEqual(true) + + // get value by key + await expect(keyv.get('key1', {raw: false})).resolves.toEqual('value1') + await expect(keyv.get('key1', {raw: true})).resolves.toMatchObject({value: 'value1'}) + + // get value by non-existing key + await expect(keyv.get('key3', {raw: false})).resolves.toBeUndefined() + await expect(keyv.get('key3', {raw: true})).resolves.toBeUndefined() + + // Get many as non-raw and raw + await expect(keyv.getMany(['key1', 'key2'], {raw: false})).resolves.toMatchObject(['value1', 'value2']) + if (rawMatchTest) { + await expect(keyv.getMany(['key1', 'key2'], { raw: true })).resolves.toMatchObject([{ value: 'value1' }, { value: 'value2' }]) + } + + // Check existence + await expect(keyv.has('key1')).resolves.toEqual(true) + await expect(keyv.has('key3')).resolves.toEqual(false) + + // delete key1 only + await expect(keyv.delete('key1')).resolves.toEqual(true) + await expect(keyv.has('key1')).resolves.toEqual(false) + await expect(keyv.has('key2')).resolves.toEqual(true) + + // clear + await keyv.clear() + await expect(keyv.has('key2')).resolves.toEqual(false) + +} + diff --git a/packages/kv-store/src/__tests__/kvstore.test.ts b/packages/kv-store/src/__tests__/kvstore.test.ts new file mode 100644 index 000000000..f27c57134 --- /dev/null +++ b/packages/kv-store/src/__tests__/kvstore.test.ts @@ -0,0 +1,95 @@ +import { KeyValueStore } from '../key-value-store' +import { IKeyValueStore } from '../key-value-types' +import { beforeEach, expect } from '@jest/globals' + + +interface TestValue { + stringProp: string + numberProp: number + objectProp: { + value: string | number + } +} + +let testValues: TestValue[] = [] + +for (let i = 0; i < 10; i++) { + testValues.push({ + stringProp: `stringValue${i}`, + numberProp: i, + objectProp: { + value: `objectValue${i}`, + }, + }) +} +describe('kvStore with MAP adapter', () => { + let kvStore: IKeyValueStore + beforeEach(async () => { + const store = new Map() + kvStore = new KeyValueStore({ store }) + for (let i = 0; i < 10; i++) { + await kvStore.set(`key${i}`, testValues[i]) + } + }) + afterEach(async () => { + try { + await kvStore.clear() + await kvStore.disconnect() + } catch (error) { + } + + }) + it('should get non-existing keys as undefined', async () => { + await expect(kvStore.get('nope')).resolves.toBeUndefined() + await expect(kvStore.getAsValueData('nope')).resolves.toMatchObject({ value: undefined, expires: undefined }) + }) + + it('should get single results', async () => { + for (let i = 0; i < 10; i++) { + await expect(kvStore.get(`key${i}`)).resolves.toEqual(testValues[i]) + await expect(kvStore.getAsValueData(`key${i}`)).resolves.toMatchObject({ + value: testValues[i], + expires: undefined, + }) + } + }) + + it('should get multiple results', async () => { + // Let's get multiple results + const manyResult = await kvStore.getMany(['key1', 'nope', 'key4']) + expect(manyResult).toHaveLength(3) + expect(manyResult[0]).toEqual(testValues[1]) + expect(manyResult[1]).toBeUndefined() + expect(manyResult[2]).toEqual(testValues[4]) + const manyValueResult = await kvStore.getManyAsValueData(['key1', 'nope', 'key4']) + expect(manyValueResult).toHaveLength(3) + expect(manyValueResult[0]).toEqual({ value: testValues[1], expires: undefined }) + expect(manyValueResult[1]).toEqual({ value: undefined, expires: undefined }) + expect(manyValueResult[2]).toEqual({ value: testValues[4], expires: undefined }) + }) + + it('should check existence of keys', async () => { + await expect(kvStore.has(`key1`)).resolves.toEqual(true) + await expect(kvStore.has(`nope`)).resolves.toEqual(false) + }) + + it('should delete an existing key', async () => { + await expect(kvStore.has(`key1`)).resolves.toEqual(true) + await expect(kvStore.delete(`key1`)).resolves.toEqual(true) + await expect(kvStore.has(`key1`)).resolves.toEqual(false) + }) + + it('should not throw an error when deleting a non-existing key', async () => { + await expect(kvStore.delete(`nope`)).resolves.toEqual(false) + }) + + it('should delete multiple values', async () => { + await expect(kvStore.deleteMany(['key2', 'nope', 'key6'])).resolves.toEqual([true, false, true]) + }) + + it('should clear all', async () => { + await kvStore.clear() + await expect(kvStore.has(`key1`)).resolves.toEqual(false) + }) + +}) diff --git a/packages/kv-store/src/index.ts b/packages/kv-store/src/index.ts index bda431252..415492c9d 100644 --- a/packages/kv-store/src/index.ts +++ b/packages/kv-store/src/index.ts @@ -5,6 +5,6 @@ * @packageDocumentation */ export { KeyValueStore } from './key-value-store.js' -export * from './store-adapters/tiered' -export * from './store-adapters/typeorm' +export * from './store-adapters/tiered/index.js' +export * from './store-adapters/typeorm/index.js' export * from './key-value-types.js' diff --git a/packages/kv-store/src/key-value-store.ts b/packages/kv-store/src/key-value-store.ts index 7c5b85d4c..ff419713a 100644 --- a/packages/kv-store/src/key-value-store.ts +++ b/packages/kv-store/src/key-value-store.ts @@ -1,14 +1,8 @@ -import { IAgentPlugin } from '@veramo/core-types' import { - IValueData, IKeyValueStore, - IKeyValueStoreDeleteArgs, - IKeyValueStoreDeleteManyArgs, - IKeyValueStoreGetArgs, - IKeyValueStoreGetManyArgs, - IKeyValueStoreHasArgs, - IKeyValueStoreOnArgs, IKeyValueStoreOptions, - IKeyValueStoreSetArgs, + IKeyValueStoreOnArgs, + IKeyValueStoreOptions, + IValueData, } from './key-value-types.js' import { Keyv } from './keyv/keyv.js' import { KeyvDeserializedData, KeyvOptions, KeyvStoredData } from './keyv/keyv-types.js' @@ -17,12 +11,7 @@ import { KeyvDeserializedData, KeyvOptions, KeyvStoredData } from './keyv/keyv-t * Agent plugin that implements {@link @veramo/core-types#IKeyValueStore} interface * @public */ -export class KeyValueStore implements IAgentPlugin { - /** - * Plugin methods - * @public - */ - readonly methods: IKeyValueStore +export class KeyValueStore implements IKeyValueStore { /** * The main keyv typescript port which delegates to the storage adapters and takes care of some common functionality @@ -31,33 +20,22 @@ export class KeyValueStore implements IAgentPlugin { */ private readonly keyv: Keyv - constructor(options: IKeyValueStoreOptions) { - this.methods = { - kvStoreGet: this.kvStoreGet.bind(this), - kvStoreGetAsValueData: this.kvStoreGetAsValueData.bind(this), - kvStoreGetMany: this.kvStoreGetMany.bind(this), - kvStoreGetManyAsValueData: this.kvStoreGetManyAsValueData.bind(this), - kvStoreSet: this.kvStoreSet.bind(this), - kvStoreHas: this.kvStoreHas.bind(this), - kvStoreDelete: this.kvStoreDelete.bind(this), - kvStoreDeleteMany: this.kvStoreDeleteMany.bind(this), - kvStoreClear: this.kvStoreClear.bind(this), - kvStoreDisconnect: this.kvStoreDisconnect.bind(this), - } this.keyv = new Keyv(options.uri, options as KeyvOptions) } - private async kvStoreGet(args: IKeyValueStoreGetArgs): Promise { - const result = await this.keyv.get(args.key, { raw: true }) + async get(key: string): Promise { + const result = await this.keyv.get(key, { raw: false }) if (result === null || result === undefined) { return undefined } return result as ValueType } - private async kvStoreGetAsValueData(args: IKeyValueStoreGetArgs): Promise> { - const result = await this.keyv.get(args.key, { raw: false }) + async getAsValueData( + key: string, + ): Promise> { + const result = await this.keyv.get(key, { raw: true }) if (result === null || result === undefined) { // We always return a ValueData object for this method return { value: undefined, expires: undefined } @@ -65,70 +43,74 @@ export class KeyValueStore implements IAgentPlugin { return this.toDeserializedValueData(result) } - private async kvStoreGetMany(args: IKeyValueStoreGetManyArgs): Promise> { - if (!args.keys || args.keys.length === 0) { + async getMany(keys: string[]): Promise> { + if (!keys || keys.length === 0) { return [] } - let result = await this.keyv.getMany(args.keys, { raw: true }) + let result = await this.keyv.getMany(keys, { raw: false }) // Making sure we return the same array length as the amount of key(s) passed in if (result === null || result === undefined || result.length === 0) { result = new Array() - for (const key of args.keys) { + for (const key of keys) { result.push(undefined) } } - return result.map(v => !!v ? v as ValueType : undefined) + return result.map((v) => (!!v ? (v as ValueType) : undefined)) } - private async kvStoreGetManyAsValueData(args: IKeyValueStoreGetManyArgs): Promise>> { - if (!args.keys || args.keys.length === 0) { + async getManyAsValueData( + keys: string[], + ): Promise>> { + if (!keys || keys.length === 0) { return [] } - let result = await this.keyv.getMany(args.keys, { raw: false }) + let result = await this.keyv.getMany(keys, { raw: true }) // Making sure we return the same array length as the amount of key(s) passed in if (result === null || result === undefined || result.length === 0) { result = new Array>() - for (const key of args.keys) { + for (const key of keys) { result.push({ value: undefined, expires: undefined } as KeyvDeserializedData) } } - return result.map(v => !!v ? this.toDeserializedValueData(v) : { value: undefined, expires: undefined }) + return result.map((v) => + !!v ? this.toDeserializedValueData(v) : { value: undefined, expires: undefined }, + ) } - private async kvStoreSet(args: IKeyValueStoreSetArgs): Promise { - return await this.keyv.set(args.key, args.value, args.ttl) + async set( + key: string, value: ValueType, ttl?: number, + ): Promise> { + return this.keyv.set(key, value, ttl).then(() => + this.getAsValueData(key), + ) } - - private async kvStoreHas(args: IKeyValueStoreHasArgs): Promise { - return await this.keyv.has(args.key) + async has(key: string): Promise { + return this.keyv.has(key) } - private async kvStoreDelete(args: IKeyValueStoreDeleteArgs): Promise { - return await this.keyv.delete(args.key) + async delete(key: string): Promise { + return this.keyv.delete(key) } - - private async kvStoreDeleteMany(args: IKeyValueStoreDeleteManyArgs): Promise { - return await this.keyv.delete(args.keys) + async deleteMany(keys: string[]): Promise { + return Promise.all(keys.map(key => this.keyv.delete(key))) } - - private async kvStoreClear(): Promise { - await this.keyv.clear() - return this.methods + async clear(): Promise> { + return this.keyv.clear().then(() => this) } - private async kvStoreDisconnect(): Promise { + async disconnect(): Promise { return this.keyv.disconnect() } // Public so parties using the kv store directly can add listeners if they want - public async kvStoreOn(args: IKeyValueStoreOnArgs): Promise { + async kvStoreOn(args: IKeyValueStoreOnArgs): Promise> { this.keyv.on(args.eventName, args.listener) - return this.methods + return this } private toDeserializedValueData(result: any): IValueData { @@ -139,6 +121,9 @@ export class KeyValueStore implements IAgentPlugin { } else if (!('value' in result)) { return { value: result, expires: undefined } } + if (!('expires' in result)) { + result.expires = undefined + } return result as IValueData } } diff --git a/packages/kv-store/src/key-value-types.ts b/packages/kv-store/src/key-value-types.ts index 43c306e98..ddd382e90 100644 --- a/packages/kv-store/src/key-value-types.ts +++ b/packages/kv-store/src/key-value-types.ts @@ -1,20 +1,18 @@ -import { IPluginMethodMap } from '@veramo/core-types' - /** * This is how the store will actually store the value. * It contains an optional `expires` property, which indicates when the value would expire */ export interface IValueData { - value: ValueType | undefined; - expires: number | undefined; + value: ValueType | undefined + expires: number | undefined } export interface IKeyValueStoreOnArgs { - eventName: string | symbol, + eventName: string | symbol listener: (...args: any[]) => void } -export interface IKeyValueStoreGetArgs { +/*export interface IKeyValueStoreGetArgs { key: string } @@ -35,27 +33,27 @@ export interface IKeyValueStoreDeleteManyArgs { } export interface IKeyValueStoreSetArgs { - key: string, - value: ValueType, + key: string + value: ValueType ttl?: number -} +}*/ export interface IKeyValueStoreOptions { - [key: string]: any; + [key: string]: any /** Namespace for the current instance. */ - namespace?: string | undefined; + namespace?: string | undefined /** A custom serialization function. */ /*serialize?: ((data: KeyvDeserializedData) => OrPromise) /!** A custom deserialization function. *!/ deserialize?: ((data: any) => OrPromise | undefined>);*/ /** The connection string URI. */ - uri?: string | undefined; + uri?: string | undefined /** The storage adapter instance to be used by Keyv. or any other implementation */ - store: IKeyValueStoreAdapter; + store: IKeyValueStoreAdapter | Map /** Default TTL. Can be overridden by specifying a TTL on `.set()`. */ - ttl?: number | undefined; + ttl?: number | undefined /** Enable compression option **/ /*compression?: KeyvCompressionAdapter | undefined;*/ @@ -67,40 +65,33 @@ export interface IKeyValueStoreAdapter { namespace?: string | undefined } - -export interface IKeyValueStore extends IPluginMethodMap { - +export interface IKeyValueStore { /** * Get a single value by key. Can be undefined as the underlying store typically will not throw an error for a non existing key * - * @param args Contains the key to search for + * @param key Contains the key to search for */ - kvStoreGet(args: IKeyValueStoreGetArgs): Promise + get(key: string): Promise /** * Get a single item as Value Data from the store. Will always return a Value Data Object, but the value in it can be undefined in case the actual store does not contain the value - * @param args Contains the key to search for + * @param key Contains the key to search for */ - kvStoreGetAsValueData(args: IKeyValueStoreGetArgs): Promise> - - kvStoreGetMany( - args: IKeyValueStoreGetManyArgs, - ): Promise>; + getAsValueData(key: string): Promise> - kvStoreGetManyAsValueData( - args: IKeyValueStoreGetManyArgs, - ): Promise>>; + getMany(keys: string[]): Promise> - kvStoreSet(args: IKeyValueStoreSetArgs): Promise; + getManyAsValueData(keys: string[]): Promise>> - kvStoreDelete(args: IKeyValueStoreDeleteArgs): Promise; + set(key: string, value: ValueType, ttl?: number): Promise> - kvStoreDeleteMany(args: IKeyValueStoreDeleteManyArgs): Promise; + delete(key: string): Promise - kvStoreClear(): Promise; + deleteMany(keys: string[]): Promise - kvStoreHas(args: IKeyValueStoreHasArgs): Promise; + clear(): Promise> - kvStoreDisconnect(): Promise + has(key: string): Promise + disconnect(): Promise } diff --git a/packages/kv-store/src/keyv/keyv-types.ts b/packages/kv-store/src/keyv/keyv-types.ts index ce4b954c6..a2bc71d93 100644 --- a/packages/kv-store/src/keyv/keyv-types.ts +++ b/packages/kv-store/src/keyv/keyv-types.ts @@ -6,69 +6,79 @@ import { OrPromise } from '@veramo/utils' export interface KeyvOptions { - [key: string]: any; + [key: string]: any /** Namespace for the current instance. */ - namespace?: string | undefined; + namespace?: string | undefined /** A custom serialization function. */ - serialize?: ((data: KeyvDeserializedData) => OrPromise) + serialize?: (data: KeyvDeserializedData) => OrPromise /** A custom deserialization function. */ - deserialize?: ((data: any) => OrPromise | undefined>); + deserialize?: (data: any) => OrPromise | undefined> /** The connection string URI. */ - uri?: string | undefined; + uri?: string | undefined /** The storage adapter instance to be used by Keyv. */ - store?: KeyvStore | undefined; + store?: KeyvStore | undefined /** Default TTL. Can be overridden by specififying a TTL on `.set()`. */ - ttl?: number | undefined; + ttl?: number | undefined /** Specify an adapter to use. e.g `'redis'` or `'mongodb'`. */ - adapter?: 'redis' | 'mongodb' | 'mongo' | 'sqlite' | 'postgresql' | 'postgres' | 'mysql' | object| string | undefined; + adapter?: + | 'redis' + | 'mongodb' + | 'mongo' + | 'sqlite' + | 'postgresql' + | 'postgres' + | 'mysql' + | object + | string + | undefined /** Enable compression option **/ - compression?: KeyvCompressionAdapter | undefined; + compression?: KeyvCompressionAdapter | undefined emitErrors?: boolean } export interface KeyvCompressionAdapter { - compress(value: any, options?: any): OrPromise; + compress(value: any, options?: any): OrPromise - decompress(value: any, options?: any): OrPromise; + decompress(value: any, options?: any): OrPromise - serialize(value: any): OrPromise; + serialize(value: any): OrPromise - deserialize(value: any): OrPromise; + deserialize(value: any): OrPromise } export interface KeyvDeserializedData { - value: Value; - expires: number | undefined; + value: Value + expires: number | undefined } -export type KeyvStoredData = KeyvDeserializedData | string | Value | undefined; - +export type KeyvStoredData = KeyvDeserializedData | string | Value | undefined export interface KeyvStore { namespace?: string | undefined opts: KeyvOptions - on?(eventName: string | symbol, listener: (...args: any[]) => void): void; - get(key: string | string[], options?: {raw?: boolean}): OrPromise | Array>>; + on?(eventName: string | symbol, listener: (...args: any[]) => void): void + get( + key: string | string[], + options?: { raw?: boolean }, + ): OrPromise | Array>> - getMany?( - keys: string[], options?: { raw?: boolean } - ): OrPromise> | undefined>; + getMany?(keys: string[], options?: { raw?: boolean }): OrPromise>> | undefined - iterator?(namespace?: string | undefined): AsyncGenerator; + iterator?(namespace?: string | undefined): AsyncGenerator - set(key: string, value: Value, ttl?: number): any; + set(key: string, value: Value, ttl?: number): any - delete(key: string | string[]): OrPromise; + delete(key: string | string[]): OrPromise - deleteMany?(keys: string[]): OrPromise; + deleteMany?(keys: string[]): OrPromise - clear(): OrPromise; + clear(): OrPromise - has?(key: string): OrPromise; + has?(key: string): OrPromise disconnect?(): void } diff --git a/packages/kv-store/src/keyv/keyv.ts b/packages/kv-store/src/keyv/keyv.ts index ba6054407..47a75e017 100644 --- a/packages/kv-store/src/keyv/keyv.ts +++ b/packages/kv-store/src/keyv/keyv.ts @@ -1,8 +1,6 @@ import EventEmitter from 'events' import JSONB from 'json-buffer' import { KeyvDeserializedData, KeyvOptions, KeyvStore, KeyvStoredData } from './keyv-types.js' -import { OrPromise } from '@veramo/utils' - /** * Please note that this is code adapted from @link https://github.com/jaredwray/keyv to support Typescript and ESM in Veramo @@ -27,25 +25,28 @@ export class Keyv extends EventEmitter implements KeyvStore readonly namespace: string iterator?: (namespace?: string) => AsyncGenerator - constructor(uri?: string | Map | KeyvStore | undefined, options?: KeyvOptions) { + constructor( + uri?: string | Map | KeyvStore | undefined, + options?: KeyvOptions, + ) { super() const emitErrors = options?.emitErrors === undefined ? true : options.emitErrors uri = uri ?? options?.uri - if (!uri) { + /*if (!uri) { throw Error('No URI provided') - } + }*/ this.opts = { namespace: 'keyv', serialize: JSONB.stringify, deserialize: JSONB.parse, - ...((typeof uri === 'string') ? { uri } : uri), + ...(typeof uri === 'string' ? { uri } : uri), ...options, } if (!this.opts.store) { if (typeof uri !== 'string') { this.opts.store = uri as KeyvStore - }/* else { + } /* else { const adapterOptions = { ...this.opts } this.opts.store = loadStore(adapterOptions) }*/ @@ -61,36 +62,36 @@ export class Keyv extends EventEmitter implements KeyvStore } if (typeof this.opts.store.on === 'function' && emitErrors) { - this.opts.store.on('error', error => this.emit('error', error)) + this.opts.store.on('error', (error) => this.emit('error', error)) } this.opts.store.namespace = this.opts.namespace || 'keyv' this.namespace = this.opts.store.namespace - const generateIterator = (iterator: any, keyv: Keyv) => async function* () { - for await (const [key, raw] of typeof iterator === 'function' - ? iterator(keyv.store.namespace) - : iterator) { - const data = await keyv.deserialize(raw) - if (keyv.store.namespace && !key.includes(keyv.store.namespace)) { - continue - } + const generateIterator = (iterator: any, keyv: Keyv) => + async function* () { + for await (const [key, raw] of typeof iterator === 'function' + ? iterator(keyv.store.namespace) + : iterator) { + const data = await keyv.deserialize(raw) + if (keyv.store.namespace && !key.includes(keyv.store.namespace)) { + continue + } - if (data && typeof data.expires === 'number' && Date.now() > data.expires) { - keyv.delete(key) - continue - } + if (data && typeof data.expires === 'number' && Date.now() > data.expires) { + keyv.delete(key) + continue + } - yield [keyv._getKeyUnprefix(key), data?.value] + yield [keyv._getKeyUnprefix(key), data?.value] + } } - } // Attach iterators // @ts-ignore if (typeof this.store[Symbol.iterator] === 'function' && this.store instanceof Map) { this.iterator = generateIterator(this.store, this) - } else if (typeof this.store.iterator === 'function' && this.store.opts - && this._checkIterableAdaptar()) { + } else if (typeof this.store.iterator === 'function' && this.store.opts && this._checkIterableAdapter()) { this.iterator = generateIterator(this.store.iterator.bind(this.store), this) } } @@ -107,9 +108,12 @@ export class Keyv extends EventEmitter implements KeyvStore return this.opts.serialize! } - _checkIterableAdaptar() { - return (this.store.opts.dialect && iterableAdapters.includes(this.store.opts.dialect)) - || (this.store.opts.url && iterableAdapters.findIndex(element => this.store.opts.url.includes(element)) >= 0) + _checkIterableAdapter() { + return ( + (this.store.opts.dialect && iterableAdapters.includes(this.store.opts.dialect)) || + (this.store.opts.url && + iterableAdapters.findIndex((element) => this.store.opts.url.includes(element)) >= 0) + ) } _getKeyPrefix(key: string): string { @@ -117,63 +121,77 @@ export class Keyv extends EventEmitter implements KeyvStore } _getKeyPrefixArray(keys: string[]): string[] { - return keys.map(key => this._getKeyPrefix(key)) + return keys.map((key) => this._getKeyPrefix(key)) } _getKeyUnprefix(key: string): string { - return key - .split(':') - .splice(1) - .join(':') + return key.split(':').splice(1).join(':') } - getMany(keys: string[], options?: { raw?: boolean }): OrPromise> | undefined> { + async getMany(keys: string[], options?: { raw?: boolean }): Promise>> { + const keyPrefixed = this._getKeyPrefixArray(keys) + let promise: Promise>> if (this.store.getMany !== undefined) { - return this.store.getMany(this._getKeyPrefixArray(keys), options) + promise = (this.store.getMany(keyPrefixed, options) as Promise[]>)//.then(value => !!value ? value.values() : undefined) // todo: Probably wise to check expired ValueData here, if the getMany does not implement this feature itself! + } else { + promise = Promise.all(keyPrefixed.map(k => this.store.get(k, options) as Promise>)) } + const allValues = Promise.resolve(promise) + const results: Promise>[] = [] + + + return Promise.resolve(allValues).then(all => { + keys.forEach((key, index) => { + const data = all[index] + + let result = typeof data === 'string' + ? this.deserialize(data) + : !!data && this.opts.compression + ? this.deserialize(data) + : data + + if ( + result && + typeof result === 'object' && + 'expires' in result && + typeof result.expires === 'number' && + Date.now() > result.expires + ) { + this.delete(key) + result = undefined + } - const keyPrefixed = this._getKeyPrefixArray(keys) - const promises = [] - for (const key of keyPrefixed) { - promises.push(Promise.resolve() - .then(() => this.store.get(key, options)) - .then(data => (typeof data === 'string') ? this.deserialize(data) : (this.opts.compression ? this.deserialize(data) : data)) - .then(data => { - if (data === undefined || data === null) { - return undefined - } - - if (data && typeof data === 'object' && 'expires' in data && typeof data.expires === 'number' && Date.now() > data.expires) { - return this.delete(key).then(() => undefined) - } - return (options && options.raw) ? data : data && typeof data === 'object' && 'value' in data ? data.value : data - }), - ) - } - + const final = (options && options.raw + ? result + : result && typeof result === 'object' && 'value' in result + ? result.value + : result) as Promise> - return Promise.allSettled(promises) - .then(promiseResult => { - const data: KeyvStoredData[] = [] - for (const result of promiseResult) { - if (result?.status !== 'rejected') { - Array.isArray(result.value) ? data.push(...result.value) : data.push(result.value) - } else { - data.push(undefined) - } - } - return data + results.push(final) }) - + }).then(() => Promise.all(results)) } - get(key: string | string[], options?: { raw?: boolean }): Promise | KeyvStoredData[] | undefined> { + async get( + key: string | string[], + options?: { raw?: boolean }, + ): Promise | KeyvStoredData[] | undefined> { const isArray = Array.isArray(key) return Promise.resolve() - .then(() => isArray ? this.getMany(this._getKeyPrefixArray(key), options) : this.store.get(this._getKeyPrefix(key))) - .then(data => (typeof data === 'string') ? this.deserialize(data) : (this.opts.compression ? this.deserialize(data) : data)) - .then(data => { + .then(() => + isArray + ? this.getMany(this._getKeyPrefixArray(key), options) + : this.store.get(this._getKeyPrefix(key)), + ) + .then((data) => + typeof data === 'string' + ? this.deserialize(data) + : this.opts.compression + ? this.deserialize(data) + : data, + ) + .then((data) => { if (data === undefined || data === null) { return undefined } @@ -192,7 +210,7 @@ export class Keyv extends EventEmitter implements KeyvStore this.delete(key).then(() => undefined) result.push(undefined) } else { - result.push((options && options.raw) ? row : toValue(row)) + result.push(options && options.raw ? row : toValue(row)) } } @@ -203,15 +221,26 @@ export class Keyv extends EventEmitter implements KeyvStore } } - return (options && options.raw) ? data : Array.isArray(data) ? data.map(d => toValue(d)) : toValue(data) + return options && options.raw + ? data + : Array.isArray(data) + ? data.map((d) => toValue(d)) + : toValue(data) }) } private isExpired(data: KeyvDeserializedData | string | Value): boolean { - return typeof data !== 'string' && data && typeof data === 'object' && 'expires' in data && typeof data.expires === 'number' && (Date.now() > data.expires) + return ( + typeof data !== 'string' && + data && + typeof data === 'object' && + 'expires' in data && + typeof data.expires === 'number' && + Date.now() > data.expires + ) } - set(key: string, value: any, ttl?: number) { + set(key: string, value: Value, ttl?: number) { const keyPrefixed = this._getKeyPrefix(key) if (typeof ttl === 'undefined') { ttl = this.opts.ttl @@ -223,7 +252,7 @@ export class Keyv extends EventEmitter implements KeyvStore // @ts-ignore return Promise.resolve() .then(() => { - const expires = (typeof ttl === 'number') ? (Date.now() + ttl) : undefined + const expires = typeof ttl === 'number' ? Date.now() + ttl : undefined if (typeof value === 'symbol') { this.emit('error', 'symbol cannot be serialized') } @@ -231,21 +260,19 @@ export class Keyv extends EventEmitter implements KeyvStore const input = { value, expires } return this.serialize(input) }) - .then(value => this.store.set(keyPrefixed, value as Value, ttl)) + .then((value) => this.store.set(keyPrefixed, value as Value, ttl)) .then(() => true) } delete(key: string | string[]) { if (!Array.isArray(key)) { const keyPrefixed = this._getKeyPrefix(key) - return Promise.resolve() - .then(() => this.store.delete(keyPrefixed)) + return Promise.resolve().then(() => this.store.delete(keyPrefixed)) } const keyPrefixed = this._getKeyPrefixArray(key) if (this.store.deleteMany !== undefined) { - return Promise.resolve() - .then(() => this.store.deleteMany!(keyPrefixed)) + return Promise.resolve().then(() => this.store.deleteMany!(keyPrefixed)) } const promises = [] @@ -253,26 +280,23 @@ export class Keyv extends EventEmitter implements KeyvStore promises.push(this.store.delete(key)) } - return Promise.allSettled(promises) - .then(values => values.every(x => x.valueOf() === true)) + return Promise.allSettled(promises).then((values) => values.every((x) => x.valueOf() === true)) } async clear(): Promise { - return Promise.resolve() - .then(() => this.store.clear()) + return Promise.resolve().then(() => this.store.clear()) } has(key: string) { const keyPrefixed = this._getKeyPrefix(key) - return Promise.resolve() - .then(async () => { - if (typeof this.store.has === 'function') { - return this.store.has(keyPrefixed) - } + return Promise.resolve().then(async () => { + if (typeof this.store.has === 'function') { + return this.store.has(keyPrefixed) + } - const value = await this.store.get(keyPrefixed) - return value !== undefined - }) + const value = await this.store.get(keyPrefixed) + return value !== undefined + }) } disconnect() { @@ -282,45 +306,7 @@ export class Keyv extends EventEmitter implements KeyvStore } } -/* -const loadStore = (options: KeyvOptions) => { - const store-adapters = { - redis: '@keyv/redis', - rediss: '@keyv/redis', - mongodb: '@keyv/mongo', - mongo: '@keyv/mongo', - sqlite: '@keyv/sqlite', - postgresql: '@keyv/postgres', - postgres: '@keyv/postgres', - mysql: '@keyv/mysql', - etcd: '@keyv/etcd', - offline: '@keyv/offline', - tiered: './tiered/index.js', - } - let adapter = options.adapter - if (!adapter && options.uri) { - const regex = /^[^:+]*!/ - if (regex) { - const match = regex.exec(options.uri) - adapter = Array.isArray(match) ? match[0] : undefined - } - } - if (adapter) { - // @ts-ignore - return new (import(store-adapters[adapter]))(options) - } - - return new Map() -} -*/ -const iterableAdapters = [ - 'sqlite', - 'postgres', - 'mysql', - 'mongo', - 'redis', - 'tiered', -] +const iterableAdapters = ['sqlite', 'postgres', 'mysql', 'mongo', 'redis', 'tiered'] function toValue(input: KeyvDeserializedData | string | Value) { return input !== null && typeof input === 'object' && 'value' in input ? input.value : input diff --git a/packages/kv-store/src/store-adapters/index.ts b/packages/kv-store/src/store-adapters/index.ts index 9c162c9a3..4b88a3c38 100644 --- a/packages/kv-store/src/store-adapters/index.ts +++ b/packages/kv-store/src/store-adapters/index.ts @@ -1,2 +1,2 @@ -export * from './tiered' -export * from './typeorm' +export * from './tiered/index.js' +export * from './typeorm/index.js' diff --git a/packages/kv-store/src/store-adapters/tiered/index.ts b/packages/kv-store/src/store-adapters/tiered/index.ts index 81cbeb8fd..d78422672 100644 --- a/packages/kv-store/src/store-adapters/tiered/index.ts +++ b/packages/kv-store/src/store-adapters/tiered/index.ts @@ -2,11 +2,14 @@ import EventEmitter from 'events' import type { Options, Options_ } from './types.js' import { KeyvStore, KeyvStoredData } from '../../keyv/keyv-types.js' import { Keyv } from '../../keyv/keyv.js' -import { IKeyValueStoreAdapter } from '../../key-value-types.js'; +import { IKeyValueStoreAdapter } from '../../key-value-types.js' -type KeyvTieredIndex = 'local' | 'remote'; +type KeyvTieredIndex = 'local' | 'remote' -export class KeyValueTieredStoreAdapter extends EventEmitter implements KeyvStore, IKeyValueStoreAdapter { +export class KeyValueTieredStoreAdapter + extends EventEmitter + implements KeyvStore, IKeyValueStoreAdapter +{ opts: Options_ remote: KeyvStore local: KeyvStore @@ -22,25 +25,40 @@ export class KeyValueTieredStoreAdapter extends EventEmitter implements K ...options, } - // todo: since we are instantiating a new Keyv object in case we encounter a map, the key prefix is probably applied twice, given it will be part of a an outer keyv object as well. + // todo: since we are instantiating a new Keyv object in case we encounter a map, the key prefix applied twice, given it will be part of a an outer keyv object as well. // Probably wise to simply create a Map Store class. As it is an in memory construct, and will work in terms of resolution it does not have highest priority this.local = (isMap(local) ? new Keyv(local as Map) : local) as KeyvStore this.remote = (isMap(remote) ? new Keyv(remote as Map) : remote) as KeyvStore this.namespace = this.local.namespace } - async get(key: string | string[], options?: { raw?: boolean }): Promise | Array>> { + async get( + key: string | string[], + options?: { raw?: boolean }, + ): Promise | Array>> { if (Array.isArray(key)) { return await this.getMany(key, options) } - const localResult: unknown = await this.local.get(key, options) + const localResult = await this.local.get(key, options) as KeyvStoredData if (localResult === undefined || !this.opts.validator(localResult, key)) { - const remoteResult = await this.remote.get(key, options) as string | KeyvStoredData | Value | undefined + const remoteResult = (await this.remote.get(key, options)) if (remoteResult !== localResult) { - const value = (!!remoteResult ? typeof remoteResult === 'object' && 'value' in remoteResult ? remoteResult.value : remoteResult : undefined) as Value - const ttl = !!remoteResult && typeof remoteResult === 'object' && 'expires' in remoteResult && remoteResult.expires ? remoteResult.expires - Date.now() : undefined + const value = ( + !!remoteResult + ? typeof remoteResult === 'object' && 'value' in remoteResult + ? remoteResult.value + : remoteResult + : undefined + ) as Value + const ttl = + !!remoteResult && + typeof remoteResult === 'object' && + 'expires' in remoteResult && + remoteResult.expires + ? remoteResult.expires - Date.now() + : undefined if (!ttl || ttl > 0) { await this.local.set(key, value, ttl) } else { @@ -50,13 +68,14 @@ export class KeyValueTieredStoreAdapter extends EventEmitter implements K return remoteResult } - return localResult as KeyvStoredData + return localResult } async getMany( - keys: string[], options?: { raw?: boolean }, - ): Promise> | undefined> { - const promises: Array | Array>>> = [] + keys: string[], + options?: { raw?: boolean }, + ): Promise>> { + const promises: Array>> = [] for (const key of keys) { promises.push(this.get(key, options) as Promise>) } @@ -71,8 +90,7 @@ export class KeyValueTieredStoreAdapter extends EventEmitter implements K async set(key: string, value: any, ttl?: number) { const toSet: KeyvTieredIndex[] = ['local', 'remote'] - return Promise.all(toSet.map(async store => this[store].set(key, value, ttl)), - ) + return Promise.all(toSet.map(async (store) => this[store].set(key, value, ttl))) } async clear(): Promise { @@ -81,9 +99,7 @@ export class KeyValueTieredStoreAdapter extends EventEmitter implements K toClear.push('remote') } - await Promise.all(toClear - .map(async store => this[store].clear()), - ) + await Promise.all(toClear.map(async (store) => this[store].clear())) return undefined } @@ -94,9 +110,7 @@ export class KeyValueTieredStoreAdapter extends EventEmitter implements K toDelete.push('remote') } - const deleted = await Promise.all(toDelete - .map(async store => this[store].delete(key)), - ) + const deleted = await Promise.all(toDelete.map(async (store) => this[store].delete(key))) return deleted.every(Boolean) } @@ -131,7 +145,7 @@ export class KeyValueTieredStoreAdapter extends EventEmitter implements K return response } - async* iterator(namespace?: string): AsyncGenerator { + async *iterator(namespace?: string): AsyncGenerator { const limit = Number.parseInt(this.iterationLimit as string, 10) || 10 this.remote.opts.iterationLimit = limit if (this.remote && typeof this.remote.iterator === 'function') { @@ -140,7 +154,6 @@ export class KeyValueTieredStoreAdapter extends EventEmitter implements K } } } - } function isMap(map: any) { @@ -159,4 +172,3 @@ function isMap(map: any) { return false } - diff --git a/packages/kv-store/src/store-adapters/tiered/types.ts b/packages/kv-store/src/store-adapters/tiered/types.ts index 039d8af07..18c84e881 100644 --- a/packages/kv-store/src/store-adapters/tiered/types.ts +++ b/packages/kv-store/src/store-adapters/tiered/types.ts @@ -1,16 +1,16 @@ import { IKeyValueStoreAdapter } from '../../key-value-types.js' export type Options = { - local: IKeyValueStoreAdapter | Map; - remote: IKeyValueStoreAdapter | Map; - localOnly?: boolean; - iterationLimit?: number | string; -}; + local: IKeyValueStoreAdapter | Map + remote: IKeyValueStoreAdapter | Map + localOnly?: boolean + iterationLimit?: number | string +} // eslint-disable-next-line @typescript-eslint/naming-convention export type Options_ = { - validator: (value: any, key: string) => boolean; - dialect: string; - iterationLimit?: number | string; - localOnly?: boolean; -}; + validator: (value: any, key: string) => boolean + dialect: string + iterationLimit?: number | string + localOnly?: boolean +} diff --git a/packages/kv-store/src/store-adapters/typeorm/entities/keyValueStoreEntity.ts b/packages/kv-store/src/store-adapters/typeorm/entities/keyValueStoreEntity.ts index 3c57b4dd1..787fc7575 100644 --- a/packages/kv-store/src/store-adapters/typeorm/entities/keyValueStoreEntity.ts +++ b/packages/kv-store/src/store-adapters/typeorm/entities/keyValueStoreEntity.ts @@ -1,41 +1,20 @@ import { BaseEntity, Column, Entity, PrimaryColumn } from 'typeorm' - /** * * @beta This API may change without a BREAKING CHANGE notice. */ -@Entity('keyvaluestorevalue') +@Entity('keyvaluestore') export class KeyValueStoreEntity extends BaseEntity { @PrimaryColumn() - // @ts-ignore + // @ts-ignore key: string @Column({ - type: 'text'/*, transformer: { - // Note: this is a naive implementation which will fail in certain situations. Look into how to properly create a blob type compatible with RN/Browser/Node - to: (entityValue: Value) => { - if (entityValue === null || entityValue === undefined) { - return null - } else if (typeof entityValue === 'object') { - return JSON.stringify(entityValue) - } else { - return '' + entityValue - } - }, - from: (dbValue: string) => { - if (dbValue === null) { - return undefined - } else if (dbValue.trim().startsWith('{') && dbValue.trim().endsWith('}')) { - return JSON.parse(dbValue) as Value - } else { - return dbValue as Value - } - }, - },*/ + type: 'text', }) - // @ts-ignore - value: string + // @ts-ignore + data: string expires?: number } diff --git a/packages/kv-store/src/store-adapters/typeorm/index.ts b/packages/kv-store/src/store-adapters/typeorm/index.ts index b31547861..0cf8fa371 100644 --- a/packages/kv-store/src/store-adapters/typeorm/index.ts +++ b/packages/kv-store/src/store-adapters/typeorm/index.ts @@ -5,12 +5,16 @@ import { KeyValueStoreEntity } from './entities/keyValueStoreEntity.js' import { KeyValueTypeORMOptions, Options_ } from './types.js' import { KeyvStore, KeyvStoredData } from '../../keyv/keyv-types.js' import { IKeyValueStoreAdapter } from '../../key-value-types.js' +import JSONB from 'json-buffer' export { KeyValueTypeORMOptions } from './types.js' -export class KeyValueTypeORMStoreAdapter extends EventEmitter implements KeyvStore, IKeyValueStoreAdapter { + +export class KeyValueTypeORMStoreAdapter + extends EventEmitter + implements KeyvStore, IKeyValueStoreAdapter { private readonly dbConnection: OrPromise readonly namespace: string - opts: Options_ + opts: Options_ constructor(options: KeyValueTypeORMOptions) { super() @@ -19,11 +23,16 @@ export class KeyValueTypeORMStoreAdapter extends EventEmitter implements KeyvSto this.opts = { validator: () => true, dialect: 'typeorm', + serialize: JSONB.stringify, + deserialize: JSONB.parse, ...options, } } - async get(key: string | string[], options?: { raw?: boolean }): Promise | Array>> { + async get( + key: string | string[], + options?: { raw?: boolean }, + ): Promise | Array>> { if (Array.isArray(key)) { return this.getMany(key, options) } @@ -31,7 +40,9 @@ export class KeyValueTypeORMStoreAdapter extends EventEmitter implements KeyvSto const result = await connection.getRepository(KeyValueStoreEntity).findOneBy({ key, }) - return options?.raw !== true || !result ? result?.value : { value: result?.value, expires: result?.expires } + return options?.raw !== true || !result + ? result?.data + : { value: result?.data, expires: result?.expires } } async getMany(keys: string[], options?: { raw?: boolean }): Promise>> { @@ -39,17 +50,24 @@ export class KeyValueTypeORMStoreAdapter extends EventEmitter implements KeyvSto const results = await connection.getRepository(KeyValueStoreEntity).findBy({ key: In(keys), }) - return results.filter(result => !!result.value).map(result => options?.raw || !result ? result?.value : { - value: result?.value, - expires: result?.expires, + const values = keys.map(async key => { + const result = results.find(result => result.key === key) + return options?.raw !== true || !result + ? result?.data as KeyvStoredData + : { + value: result?.data ? (await this.opts.deserialize(result.data))?.value : undefined, + expires: result?.expires, + } as KeyvStoredData }) + + return Promise.all(values) } async set(key: string, value: string, ttl?: number): Promise> { const connection = await getConnectedDb(this.dbConnection) const entity = new KeyValueStoreEntity() entity.key = key - entity.value = value + entity.data = value entity.expires = ttl await connection.getRepository(KeyValueStoreEntity).save(entity) return { value: value, expires: ttl } @@ -89,11 +107,10 @@ export class KeyValueTypeORMStoreAdapter extends EventEmitter implements KeyvSto async disconnect(): Promise { const connection = await getConnectedDb(this.dbConnection) - await connection.destroy() + connection.destroy() } } - /** * Ensures that the provided DataSource is connected. * diff --git a/packages/kv-store/src/store-adapters/typeorm/migrations/1.createKVDatabase.ts b/packages/kv-store/src/store-adapters/typeorm/migrations/1.createKVDatabase.ts new file mode 100644 index 000000000..594542a75 --- /dev/null +++ b/packages/kv-store/src/store-adapters/typeorm/migrations/1.createKVDatabase.ts @@ -0,0 +1,52 @@ +import { MigrationInterface, QueryRunner, Table } from 'typeorm' +import Debug from 'debug' +const debug = Debug('veramo:data-store:initial-migration') + +/** + * Create the database layout for Veramo 3.0 + * + * @public + */ +export class CreateKVDatabaseMigration implements MigrationInterface { + private readonly _tableName: string + readonly name: string + + + + constructor(tableName?: string) { + this._tableName = tableName || 'keyvaluestore' + this.name = `CreateKVDatabase${tableName}1680297189001` + } + + async up(queryRunner: QueryRunner): Promise { + function getTableName(givenName: string): string { + return ( + queryRunner.connection.entityMetadatas.find((meta) => meta.givenTableName === givenName)?.tableName || + givenName + ) + } + + debug(`creating ${this._tableName} table`) + // CREATE TABLE "keyvaluestore" ("key" varchar PRIMARY KEY NOT NULL, "data" text NOT NULL) + await queryRunner.createTable( + new Table({ + name: getTableName(this._tableName), + columns: [ + { name: 'key', type: 'varchar', isPrimary: true }, + { name: 'data', type: 'text', isNullable: false }, + ], + indices: [ + { + columnNames: ['key'], + isUnique: true, + }, + ], + }), + true, + ) + } + + async down(queryRunner: QueryRunner): Promise { + throw new Error('illegal_operation: cannot roll back initial migration') + } +} diff --git a/packages/kv-store/src/store-adapters/typeorm/migrations/index.ts b/packages/kv-store/src/store-adapters/typeorm/migrations/index.ts new file mode 100644 index 000000000..b8ce4e933 --- /dev/null +++ b/packages/kv-store/src/store-adapters/typeorm/migrations/index.ts @@ -0,0 +1,12 @@ +import { CreateKVDatabaseMigration } from './1.createKVDatabase' + +/** + * The migrations array that SHOULD be used when initializing a TypeORM database connection. + * + * These ensure the correct creation of tables and the proper migrations of data when tables change between versions. + * + * @public + */ +export const kvStoreMigrations = [ + CreateKVDatabaseMigration +] diff --git a/packages/kv-store/src/store-adapters/typeorm/types.ts b/packages/kv-store/src/store-adapters/typeorm/types.ts index 7f48cd140..f4cd84173 100644 --- a/packages/kv-store/src/store-adapters/typeorm/types.ts +++ b/packages/kv-store/src/store-adapters/typeorm/types.ts @@ -1,14 +1,19 @@ import { OrPromise } from '@veramo/utils' import { DataSource } from 'typeorm' +import JSONB from 'json-buffer' +import { KeyvDeserializedData } from '../../keyv/keyv-types' export type KeyValueTypeORMOptions = { dbConnection: OrPromise namespace?: string -}; +} // eslint-disable-next-line @typescript-eslint/naming-convention -export type Options_ = { - validator: (value: any, key: string) => boolean; - dialect: string; -}; +export type Options_ = { + validator: (value: any, key: string) => boolean + dialect: string + serialize: (data: KeyvDeserializedData) => OrPromise + /** A custom deserialization function. */ + deserialize: (data: any) => OrPromise | undefined> +} From 6a1a0ef43ebe82329c4b2aa37fef6d1b8c782e07 Mon Sep 17 00:00:00 2001 From: nklomp Date: Sun, 2 Apr 2023 03:29:28 +0200 Subject: [PATCH 06/16] chore: fix tsconfig and add kv-store --- packages/tsconfig.json | 3 ++- pnpm-lock.yaml | 6 +++++- 2 files changed, 7 insertions(+), 2 deletions(-) diff --git a/packages/tsconfig.json b/packages/tsconfig.json index 950b777f1..551e96634 100644 --- a/packages/tsconfig.json +++ b/packages/tsconfig.json @@ -2,7 +2,7 @@ "files": [], "references": [ { "path": "core" }, - { "path": "core-types" } + { "path": "core-types" }, { "path": "credential-eip712" }, { "path": "credential-ld" }, { "path": "credential-status"}, @@ -22,6 +22,7 @@ { "path": "key-manager" }, { "path": "kms-local" }, { "path": "kms-web3" }, + { "path": "kv-store" }, { "path": "message-handler" }, { "path": "remote-client" }, { "path": "remote-server" }, diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 1d8af95e6..90157daac 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -828,10 +828,12 @@ importers: '@keyv/compress-gzip': ^1.2.3 '@keyv/mongo': ^2.1.8 '@keyv/sqlite': ^3.6.5 - '@keyv/test-suite': '*' + '@keyv/test-suite': ^1.9.1 + '@types/debug': ^4.1.7 '@types/json-buffer': ^3.0.0 '@veramo/core-types': workspace:* '@veramo/utils': workspace:* + debug: ^4.3.4 eslint: ^8.33.0 eslint-plugin-promise: ^6.1.1 events: ^3.3.0 @@ -844,6 +846,7 @@ importers: dependencies: '@veramo/core-types': link:../core-types '@veramo/utils': link:../utils + debug: 4.3.4 events: 3.3.0 json-buffer: 3.0.1 typeorm: 0.3.12 @@ -854,6 +857,7 @@ importers: '@keyv/mongo': 2.1.8 '@keyv/sqlite': 3.6.5 '@keyv/test-suite': 1.9.1 + '@types/debug': 4.1.7 '@types/json-buffer': 3.0.0 eslint: 8.36.0 eslint-plugin-promise: 6.1.1_eslint@8.36.0 From 771b804cbca96fc255a762f2beb37bb350a5cf22 Mon Sep 17 00:00:00 2001 From: nklomp Date: Sun, 2 Apr 2023 03:43:31 +0200 Subject: [PATCH 07/16] chore: Update Readme --- packages/kv-store/README.md | 32 ++++++++++++++++++++++---------- 1 file changed, 22 insertions(+), 10 deletions(-) diff --git a/packages/kv-store/README.md b/packages/kv-store/README.md index 1b40fbd59..d34252813 100644 --- a/packages/kv-store/README.md +++ b/packages/kv-store/README.md @@ -96,33 +96,45 @@ const options: IKeyValueStoreOptions = { namespace: 'example', store: new KeyValueTieredStoreAdapter({ local, remote }) } -const kvStore: IKeyValueStore = new KeyValueStore({ options }) +const kvStore: IKeyValueStore = new KeyValueStore({ options }) ```` ## Usage After you have setup the Key Value Store as described above in your agent, it will be available in your agent. +````typescript + +kvStore.set('hello', { example: world }) // Stores the value object by key untill deleted +kvStore.set('expiring', { example: 'expiration' }, 1000) // Stores the value object by key for 1 second +const value = await kvStore.get('hello') // { example: world } +const values = await kvStore.getMany(['hello', 'expiring']) // [{ example: world }, {example: expiring}] +if (await kvStore.has('hello')) { + await kvStore.delete('hello') // return a boolean for success. You can also call it on non existing keys, which will return false +} + +await kvStore.clear() // Removes all keys/values from the store +kvStore.disconnect() // disconnects the store from it backing adapter. You cannot reuse the store afterwards unlesss you initialize a new store. + +```` # Keyv project relationship Please note that a large portion of the Veramo Key Value Store code is a port of -the [keyv](https://github.com/jaredwray/keyv) project, adding support for Typescript and ESM so it can be used Veramo +the [keyv](https://github.com/jaredwray/keyv) project, adding support for Typescript and ESM, so it can be used Veramo -The ported code should support the storage plugins available for the keyv project. -Veramo itself supports NodeJS, Browser and React-Native environment. +The ported code should support the storage plugins available for the keyv project, although testing has been limited +Veramo itself has a requirement to support NodeJS, Browser and React-Native environments. The port and the store +adapters included in Veramo run in these environments. Please be aware that these requirements probably aren't true for any keyv storage plugins. One of the big changes compared to the upstream project is that this port does not have dynamic loading of adapters -based on URIs. We believe that any Veramo Key Value store should use explicitly defined adapters. +based on URIs. We believe that any Veramo Key Value store should use explicit defined adapters. -The port is part of the Veramo Key Value Store module code itself, as we do not want to make an official maintained port -out of it. +The keyv port is part of the Veramo Key Value Store module code itself, as we do not want to make an official maintained port at this point. Veramo exposes its own API/interfaces for the Key Value store, meaning we could also support any other implementation in -the future The Veramo kv-store module provides out of the box support for in memory/maps, sqlite and typeorm -implementations, -including a tiered local/remote implementation that support all environments. +the future We welcome any new storage modules From a2f9482a26941ff0ac43b377c6dc1b6e1f2c0282 Mon Sep 17 00:00:00 2001 From: nklomp Date: Sun, 2 Apr 2023 20:59:32 +0200 Subject: [PATCH 08/16] chore: cleanup imports/prettier --- packages/kv-store/src/__tests__/keyv.test.ts | 34 +++------ .../kv-store/src/__tests__/kvstore.test.ts | 11 ++- packages/kv-store/src/key-value-store.ts | 26 ++----- packages/kv-store/src/keyv/keyv-types.ts | 2 +- packages/kv-store/src/keyv/keyv.ts | 74 ++++++++++--------- .../src/store-adapters/tiered/index.ts | 9 +-- .../src/store-adapters/typeorm/index.ts | 21 +++--- .../typeorm/migrations/1.createKVDatabase.ts | 2 - .../typeorm/migrations/index.ts | 4 +- .../src/store-adapters/typeorm/types.ts | 1 - 10 files changed, 77 insertions(+), 107 deletions(-) diff --git a/packages/kv-store/src/__tests__/keyv.test.ts b/packages/kv-store/src/__tests__/keyv.test.ts index 42d1c2f55..83a00ce54 100644 --- a/packages/kv-store/src/__tests__/keyv.test.ts +++ b/packages/kv-store/src/__tests__/keyv.test.ts @@ -8,7 +8,6 @@ import { KeyValueTieredStoreAdapter, KeyValueTypeORMStoreAdapter } from '../stor import { KeyvOptions } from '../keyv/keyv-types' import { kvStoreMigrations } from '../store-adapters/typeorm/migrations' - let dbConnection: DataSource beforeEach(async () => { dbConnection = await new DataSource({ @@ -29,7 +28,6 @@ afterEach(async () => { } catch (error) { // the disconnect test will close the DB anyway } - }) describe('keyv MAP store', () => { it('should respect ttl', async () => { @@ -45,12 +43,9 @@ describe('keyv MAP store', () => { const store = new Map() await testAllKeyvMethods(store) }) - - }) describe('keyv sqlite store', () => { - it('should respect ttl', async () => { const keyv = new Keyv(new KeyvSqlite()) await keyv.set('key', 'value', 100) @@ -142,18 +137,13 @@ describe('keyv TypeORM store', () => { }) describe('keyv tiered store', () => { - - - - - it('should respect ttl', async () => { const local: Map = new Map() const remote = new KeyValueTypeORMStoreAdapter({ dbConnection }) const options: KeyvOptions = { namespace: 'example', - store: new KeyValueTieredStoreAdapter({ local, remote }) + store: new KeyValueTieredStoreAdapter({ local, remote }), } const keyv = new Keyv(undefined, options) await keyv.set('key', 'value', 100) @@ -169,18 +159,15 @@ describe('keyv tiered store', () => { const options: KeyvOptions = { namespace: 'example', - store: new KeyValueTieredStoreAdapter({ local, remote }) + store: new KeyValueTieredStoreAdapter({ local, remote }), } const store = new Keyv(undefined, options) // No raw match test, as remote and local have different raw values await testAllKeyvMethods(store, false) }) - - }) - async function testAllKeyvMethods(store: any, rawMatchTest = true) { const keyv = new Keyv(store) @@ -189,17 +176,20 @@ async function testAllKeyvMethods(store: any, rawMatchTest = true) { await expect(keyv.set('key2', 'value2')).resolves.toEqual(true) // get value by key - await expect(keyv.get('key1', {raw: false})).resolves.toEqual('value1') - await expect(keyv.get('key1', {raw: true})).resolves.toMatchObject({value: 'value1'}) + await expect(keyv.get('key1', { raw: false })).resolves.toEqual('value1') + await expect(keyv.get('key1', { raw: true })).resolves.toMatchObject({ value: 'value1' }) // get value by non-existing key - await expect(keyv.get('key3', {raw: false})).resolves.toBeUndefined() - await expect(keyv.get('key3', {raw: true})).resolves.toBeUndefined() + await expect(keyv.get('key3', { raw: false })).resolves.toBeUndefined() + await expect(keyv.get('key3', { raw: true })).resolves.toBeUndefined() // Get many as non-raw and raw - await expect(keyv.getMany(['key1', 'key2'], {raw: false})).resolves.toMatchObject(['value1', 'value2']) + await expect(keyv.getMany(['key1', 'key2'], { raw: false })).resolves.toMatchObject(['value1', 'value2']) if (rawMatchTest) { - await expect(keyv.getMany(['key1', 'key2'], { raw: true })).resolves.toMatchObject([{ value: 'value1' }, { value: 'value2' }]) + await expect(keyv.getMany(['key1', 'key2'], { raw: true })).resolves.toMatchObject([ + { value: 'value1' }, + { value: 'value2' }, + ]) } // Check existence @@ -214,6 +204,4 @@ async function testAllKeyvMethods(store: any, rawMatchTest = true) { // clear await keyv.clear() await expect(keyv.has('key2')).resolves.toEqual(false) - } - diff --git a/packages/kv-store/src/__tests__/kvstore.test.ts b/packages/kv-store/src/__tests__/kvstore.test.ts index f27c57134..b515a26a3 100644 --- a/packages/kv-store/src/__tests__/kvstore.test.ts +++ b/packages/kv-store/src/__tests__/kvstore.test.ts @@ -2,7 +2,6 @@ import { KeyValueStore } from '../key-value-store' import { IKeyValueStore } from '../key-value-types' import { beforeEach, expect } from '@jest/globals' - interface TestValue { stringProp: string numberProp: number @@ -35,13 +34,14 @@ describe('kvStore with MAP adapter', () => { try { await kvStore.clear() await kvStore.disconnect() - } catch (error) { - } - + } catch (error) {} }) it('should get non-existing keys as undefined', async () => { await expect(kvStore.get('nope')).resolves.toBeUndefined() - await expect(kvStore.getAsValueData('nope')).resolves.toMatchObject({ value: undefined, expires: undefined }) + await expect(kvStore.getAsValueData('nope')).resolves.toMatchObject({ + value: undefined, + expires: undefined, + }) }) it('should get single results', async () => { @@ -91,5 +91,4 @@ describe('kvStore with MAP adapter', () => { await kvStore.clear() await expect(kvStore.has(`key1`)).resolves.toEqual(false) }) - }) diff --git a/packages/kv-store/src/key-value-store.ts b/packages/kv-store/src/key-value-store.ts index ff419713a..2b0148b56 100644 --- a/packages/kv-store/src/key-value-store.ts +++ b/packages/kv-store/src/key-value-store.ts @@ -1,9 +1,4 @@ -import { - IKeyValueStore, - IKeyValueStoreOnArgs, - IKeyValueStoreOptions, - IValueData, -} from './key-value-types.js' +import { IKeyValueStore, IKeyValueStoreOnArgs, IKeyValueStoreOptions, IValueData } from './key-value-types.js' import { Keyv } from './keyv/keyv.js' import { KeyvDeserializedData, KeyvOptions, KeyvStoredData } from './keyv/keyv-types.js' @@ -12,7 +7,6 @@ import { KeyvDeserializedData, KeyvOptions, KeyvStoredData } from './keyv/keyv-t * @public */ export class KeyValueStore implements IKeyValueStore { - /** * The main keyv typescript port which delegates to the storage adapters and takes care of some common functionality * @@ -32,9 +26,7 @@ export class KeyValueStore implements IKeyValueStore { return result as ValueType } - async getAsValueData( - key: string, - ): Promise> { + async getAsValueData(key: string): Promise> { const result = await this.keyv.get(key, { raw: true }) if (result === null || result === undefined) { // We always return a ValueData object for this method @@ -59,9 +51,7 @@ export class KeyValueStore implements IKeyValueStore { return result.map((v) => (!!v ? (v as ValueType) : undefined)) } - async getManyAsValueData( - keys: string[], - ): Promise>> { + async getManyAsValueData(keys: string[]): Promise>> { if (!keys || keys.length === 0) { return [] } @@ -79,12 +69,8 @@ export class KeyValueStore implements IKeyValueStore { ) } - async set( - key: string, value: ValueType, ttl?: number, - ): Promise> { - return this.keyv.set(key, value, ttl).then(() => - this.getAsValueData(key), - ) + async set(key: string, value: ValueType, ttl?: number): Promise> { + return this.keyv.set(key, value, ttl).then(() => this.getAsValueData(key)) } async has(key: string): Promise { @@ -96,7 +82,7 @@ export class KeyValueStore implements IKeyValueStore { } async deleteMany(keys: string[]): Promise { - return Promise.all(keys.map(key => this.keyv.delete(key))) + return Promise.all(keys.map((key) => this.keyv.delete(key))) } async clear(): Promise> { diff --git a/packages/kv-store/src/keyv/keyv-types.ts b/packages/kv-store/src/keyv/keyv-types.ts index a2bc71d93..e23714e39 100644 --- a/packages/kv-store/src/keyv/keyv-types.ts +++ b/packages/kv-store/src/keyv/keyv-types.ts @@ -66,7 +66,7 @@ export interface KeyvStore { options?: { raw?: boolean }, ): OrPromise | Array>> - getMany?(keys: string[], options?: { raw?: boolean }): OrPromise>> | undefined + getMany?(keys: string[], options?: { raw?: boolean }): OrPromise>> | undefined iterator?(namespace?: string | undefined): AsyncGenerator diff --git a/packages/kv-store/src/keyv/keyv.ts b/packages/kv-store/src/keyv/keyv.ts index 47a75e017..5b54ce28e 100644 --- a/packages/kv-store/src/keyv/keyv.ts +++ b/packages/kv-store/src/keyv/keyv.ts @@ -132,45 +132,51 @@ export class Keyv extends EventEmitter implements KeyvStore const keyPrefixed = this._getKeyPrefixArray(keys) let promise: Promise>> if (this.store.getMany !== undefined) { - promise = (this.store.getMany(keyPrefixed, options) as Promise[]>)//.then(value => !!value ? value.values() : undefined) + promise = this.store.getMany(keyPrefixed, options) as Promise[]> //.then(value => !!value ? value.values() : undefined) // todo: Probably wise to check expired ValueData here, if the getMany does not implement this feature itself! } else { - promise = Promise.all(keyPrefixed.map(k => this.store.get(k, options) as Promise>)) + promise = Promise.all( + keyPrefixed.map((k) => this.store.get(k, options) as Promise>), + ) } const allValues = Promise.resolve(promise) const results: Promise>[] = [] + return Promise.resolve(allValues) + .then((all) => { + keys.forEach((key, index) => { + const data = all[index] + + let result = + typeof data === 'string' + ? this.deserialize(data) + : !!data && this.opts.compression + ? this.deserialize(data) + : data + + if ( + result && + typeof result === 'object' && + 'expires' in result && + typeof result.expires === 'number' && + Date.now() > result.expires + ) { + this.delete(key) + result = undefined + } - return Promise.resolve(allValues).then(all => { - keys.forEach((key, index) => { - const data = all[index] - - let result = typeof data === 'string' - ? this.deserialize(data) - : !!data && this.opts.compression - ? this.deserialize(data) - : data - - if ( - result && - typeof result === 'object' && - 'expires' in result && - typeof result.expires === 'number' && - Date.now() > result.expires - ) { - this.delete(key) - result = undefined - } - - const final = (options && options.raw - ? result - : result && typeof result === 'object' && 'value' in result - ? result.value - : result) as Promise> + const final = ( + options && options.raw + ? result + : result && typeof result === 'object' && 'value' in result + ? result.value + : result + ) as Promise> - results.push(final) + results.push(final) + }) }) - }).then(() => Promise.all(results)) + .then(() => Promise.all(results)) } async get( @@ -188,8 +194,8 @@ export class Keyv extends EventEmitter implements KeyvStore typeof data === 'string' ? this.deserialize(data) : this.opts.compression - ? this.deserialize(data) - : data, + ? this.deserialize(data) + : data, ) .then((data) => { if (data === undefined || data === null) { @@ -224,8 +230,8 @@ export class Keyv extends EventEmitter implements KeyvStore return options && options.raw ? data : Array.isArray(data) - ? data.map((d) => toValue(d)) - : toValue(data) + ? data.map((d) => toValue(d)) + : toValue(data) }) } diff --git a/packages/kv-store/src/store-adapters/tiered/index.ts b/packages/kv-store/src/store-adapters/tiered/index.ts index d78422672..90129a3fb 100644 --- a/packages/kv-store/src/store-adapters/tiered/index.ts +++ b/packages/kv-store/src/store-adapters/tiered/index.ts @@ -39,10 +39,10 @@ export class KeyValueTieredStoreAdapter if (Array.isArray(key)) { return await this.getMany(key, options) } - const localResult = await this.local.get(key, options) as KeyvStoredData + const localResult = (await this.local.get(key, options)) as KeyvStoredData if (localResult === undefined || !this.opts.validator(localResult, key)) { - const remoteResult = (await this.remote.get(key, options)) + const remoteResult = await this.remote.get(key, options) if (remoteResult !== localResult) { const value = ( @@ -71,10 +71,7 @@ export class KeyValueTieredStoreAdapter return localResult } - async getMany( - keys: string[], - options?: { raw?: boolean }, - ): Promise>> { + async getMany(keys: string[], options?: { raw?: boolean }): Promise>> { const promises: Array>> = [] for (const key of keys) { promises.push(this.get(key, options) as Promise>) diff --git a/packages/kv-store/src/store-adapters/typeorm/index.ts b/packages/kv-store/src/store-adapters/typeorm/index.ts index 0cf8fa371..1c90d2e1b 100644 --- a/packages/kv-store/src/store-adapters/typeorm/index.ts +++ b/packages/kv-store/src/store-adapters/typeorm/index.ts @@ -11,7 +11,8 @@ export { KeyValueTypeORMOptions } from './types.js' export class KeyValueTypeORMStoreAdapter extends EventEmitter - implements KeyvStore, IKeyValueStoreAdapter { + implements KeyvStore, IKeyValueStoreAdapter +{ private readonly dbConnection: OrPromise readonly namespace: string opts: Options_ @@ -40,9 +41,7 @@ export class KeyValueTypeORMStoreAdapter const result = await connection.getRepository(KeyValueStoreEntity).findOneBy({ key, }) - return options?.raw !== true || !result - ? result?.data - : { value: result?.data, expires: result?.expires } + return options?.raw !== true || !result ? result?.data : { value: result?.data, expires: result?.expires } } async getMany(keys: string[], options?: { raw?: boolean }): Promise>> { @@ -50,14 +49,14 @@ export class KeyValueTypeORMStoreAdapter const results = await connection.getRepository(KeyValueStoreEntity).findBy({ key: In(keys), }) - const values = keys.map(async key => { - const result = results.find(result => result.key === key) + const values = keys.map(async (key) => { + const result = results.find((result) => result.key === key) return options?.raw !== true || !result - ? result?.data as KeyvStoredData - : { - value: result?.data ? (await this.opts.deserialize(result.data))?.value : undefined, - expires: result?.expires, - } as KeyvStoredData + ? (result?.data as KeyvStoredData) + : ({ + value: result?.data ? (await this.opts.deserialize(result.data))?.value : undefined, + expires: result?.expires, + } as KeyvStoredData) }) return Promise.all(values) diff --git a/packages/kv-store/src/store-adapters/typeorm/migrations/1.createKVDatabase.ts b/packages/kv-store/src/store-adapters/typeorm/migrations/1.createKVDatabase.ts index 594542a75..3a33baf01 100644 --- a/packages/kv-store/src/store-adapters/typeorm/migrations/1.createKVDatabase.ts +++ b/packages/kv-store/src/store-adapters/typeorm/migrations/1.createKVDatabase.ts @@ -11,8 +11,6 @@ export class CreateKVDatabaseMigration implements MigrationInterface { private readonly _tableName: string readonly name: string - - constructor(tableName?: string) { this._tableName = tableName || 'keyvaluestore' this.name = `CreateKVDatabase${tableName}1680297189001` diff --git a/packages/kv-store/src/store-adapters/typeorm/migrations/index.ts b/packages/kv-store/src/store-adapters/typeorm/migrations/index.ts index b8ce4e933..6d6075eb5 100644 --- a/packages/kv-store/src/store-adapters/typeorm/migrations/index.ts +++ b/packages/kv-store/src/store-adapters/typeorm/migrations/index.ts @@ -7,6 +7,4 @@ import { CreateKVDatabaseMigration } from './1.createKVDatabase' * * @public */ -export const kvStoreMigrations = [ - CreateKVDatabaseMigration -] +export const kvStoreMigrations = [CreateKVDatabaseMigration] diff --git a/packages/kv-store/src/store-adapters/typeorm/types.ts b/packages/kv-store/src/store-adapters/typeorm/types.ts index f4cd84173..fb2dcc33f 100644 --- a/packages/kv-store/src/store-adapters/typeorm/types.ts +++ b/packages/kv-store/src/store-adapters/typeorm/types.ts @@ -1,6 +1,5 @@ import { OrPromise } from '@veramo/utils' import { DataSource } from 'typeorm' -import JSONB from 'json-buffer' import { KeyvDeserializedData } from '../../keyv/keyv-types' export type KeyValueTypeORMOptions = { From 045e95318d024ce2a86db8f877820edd542dcd7f Mon Sep 17 00:00:00 2001 From: nklomp Date: Wed, 3 May 2023 02:12:18 +0200 Subject: [PATCH 09/16] fix: Fix schema generator naive implementation of array handling, replacing any '>' character. Now only applies to typed arrays --- packages/cli/src/dev.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/cli/src/dev.ts b/packages/cli/src/dev.ts index eb36713c1..3e11c1f6a 100644 --- a/packages/cli/src/dev.ts +++ b/packages/cli/src/dev.ts @@ -31,7 +31,7 @@ function createSchema(generator: TJS.SchemaGenerator, symbol: string) { return { components: { schemas: {} } } } - let fixedSymbol = symbol.replace('Array<', '').replace('>', '') + let fixedSymbol = symbol.replace(/Array\<(.*)\>/gm, '$1') const schema = generator.createSchema(fixedSymbol) From 500cf0aeb463c170908cec9be103a6df3f757297 Mon Sep 17 00:00:00 2001 From: nklomp Date: Wed, 3 May 2023 02:14:06 +0200 Subject: [PATCH 10/16] fix: cleanups/imports/comments --- packages/kv-store/package.json | 3 +- packages/kv-store/src/__tests__/keyv.test.ts | 28 +- .../kv-store/src/__tests__/kvstore.test.ts | 4 +- packages/kv-store/src/key-value-store.ts | 16 +- packages/kv-store/src/key-value-types.ts | 100 ++++-- packages/kv-store/src/keyv/keyv.ts | 2 +- .../src/store-adapters/tiered/index.ts | 6 +- .../src/store-adapters/typeorm/index.ts | 25 +- .../typeorm/migrations/index.ts | 2 +- .../src/store-adapters/typeorm/types.ts | 9 +- pnpm-lock.yaml | 327 +++++++++++++----- 11 files changed, 368 insertions(+), 154 deletions(-) diff --git a/packages/kv-store/package.json b/packages/kv-store/package.json index 2a04b7adc..9ce64a008 100644 --- a/packages/kv-store/package.json +++ b/packages/kv-store/package.json @@ -24,9 +24,8 @@ "@types/json-buffer": "^3.0.0", "@types/debug": "^4.1.7", "keyv": "^4.5.2", - "@keyv/test-suite": "^1.9.1", + "@keyv/test-suite": "^1.9.2", "@keyv/sqlite": "^3.6.5", - "@keyv/mongo": "^2.1.8", "@keyv/compress-brotli": "^1.1.3", "@keyv/compress-gzip": "^1.2.3", "eslint": "^8.33.0", diff --git a/packages/kv-store/src/__tests__/keyv.test.ts b/packages/kv-store/src/__tests__/keyv.test.ts index 83a00ce54..6f927d5b7 100644 --- a/packages/kv-store/src/__tests__/keyv.test.ts +++ b/packages/kv-store/src/__tests__/keyv.test.ts @@ -3,9 +3,9 @@ import KeyvSqlite from '@keyv/sqlite' import timekeeper from 'timekeeper' import { Keyv } from '../keyv/keyv.js' import { DataSource } from 'typeorm' -import { KeyValueStoreEntity } from '../store-adapters/typeorm/entities/keyValueStoreEntity' -import { KeyValueTieredStoreAdapter, KeyValueTypeORMStoreAdapter } from '../store-adapters' -import { KeyvOptions } from '../keyv/keyv-types' +import { KeyValueStoreEntity } from '../store-adapters/typeorm/entities/keyValueStoreEntity.js' +import { KeyValueTieredStoreAdapter, KeyValueTypeORMStoreAdapter } from '../store-adapters/index.js' +import { KeyvOptions } from '../keyv/keyv-types.js' import { kvStoreMigrations } from '../store-adapters/typeorm/migrations' let dbConnection: DataSource @@ -61,29 +61,7 @@ describe('keyv sqlite store', () => { }) describe('keyv TypeORM store', () => { - /*let dbConnection: DataSource - - beforeEach(async () => { - dbConnection = await new DataSource({ - type: 'sqlite', - database: ':memory:', - logging: 'all', - migrationsRun: true, - synchronize: false, - migrations: [...kvStoreMigrations], - entities: [KeyValueStoreEntity], - }).initialize() - }) - - afterEach(async () => { - try { - (await dbConnection).destroy() - } catch (error) { - // the disconnect test will close the DB anyway - } - }) -*/ it('should respect ttl', async () => { const store = new KeyValueTypeORMStoreAdapter({ dbConnection, namespace: 'test' }) const keyv = new Keyv(store) diff --git a/packages/kv-store/src/__tests__/kvstore.test.ts b/packages/kv-store/src/__tests__/kvstore.test.ts index b515a26a3..afff5b968 100644 --- a/packages/kv-store/src/__tests__/kvstore.test.ts +++ b/packages/kv-store/src/__tests__/kvstore.test.ts @@ -1,5 +1,5 @@ -import { KeyValueStore } from '../key-value-store' -import { IKeyValueStore } from '../key-value-types' +import { KeyValueStore } from '../key-value-store.js' +import { IKeyValueStore } from '../key-value-types.js' import { beforeEach, expect } from '@jest/globals' interface TestValue { diff --git a/packages/kv-store/src/key-value-store.ts b/packages/kv-store/src/key-value-store.ts index 2b0148b56..c3d905034 100644 --- a/packages/kv-store/src/key-value-store.ts +++ b/packages/kv-store/src/key-value-store.ts @@ -1,16 +1,24 @@ -import { IKeyValueStore, IKeyValueStoreOnArgs, IKeyValueStoreOptions, IValueData } from './key-value-types.js' +import { + IKeyValueStore, + IKeyValueStoreOnArgs, + IKeyValueStoreOptions, + IValueData, + ValueStoreType, +} from './key-value-types.js' import { Keyv } from './keyv/keyv.js' import { KeyvDeserializedData, KeyvOptions, KeyvStoredData } from './keyv/keyv-types.js' + + /** * Agent plugin that implements {@link @veramo/core-types#IKeyValueStore} interface * @public */ -export class KeyValueStore implements IKeyValueStore { +export class KeyValueStore implements IKeyValueStore { /** * The main keyv typescript port which delegates to the storage adapters and takes care of some common functionality * - * @private + * @internal */ private readonly keyv: Keyv @@ -61,7 +69,7 @@ export class KeyValueStore implements IKeyValueStore { if (result === null || result === undefined || result.length === 0) { result = new Array>() for (const key of keys) { - result.push({ value: undefined, expires: undefined } as KeyvDeserializedData) + result.push({ value: undefined, expires: undefined } as unknown as KeyvDeserializedData) } } return result.map((v) => diff --git a/packages/kv-store/src/key-value-types.ts b/packages/kv-store/src/key-value-types.ts index ddd382e90..d845f9bd7 100644 --- a/packages/kv-store/src/key-value-types.ts +++ b/packages/kv-store/src/key-value-types.ts @@ -1,43 +1,29 @@ /** * This is how the store will actually store the value. * It contains an optional `expires` property, which indicates when the value would expire + * + * @beta */ export interface IValueData { value: ValueType | undefined expires: number | undefined } +/** + * Event listener arguments + * + * @beta + */ export interface IKeyValueStoreOnArgs { eventName: string | symbol listener: (...args: any[]) => void } -/*export interface IKeyValueStoreGetArgs { - key: string -} - -export interface IKeyValueStoreGetManyArgs { - keys: string[] -} - -export interface IKeyValueStoreHasArgs { - key: string -} - -export interface IKeyValueStoreDeleteArgs { - key: string -} - -export interface IKeyValueStoreDeleteManyArgs { - keys: string[] -} - -export interface IKeyValueStoreSetArgs { - key: string - value: ValueType - ttl?: number -}*/ - +/** + * Options for the Key Value store + * + * @beta + */ export interface IKeyValueStoreOptions { [key: string]: any @@ -61,37 +47,93 @@ export interface IKeyValueStoreOptions { emitErrors?: boolean } +/** + * A store adapter implementation needs to provide namespace support + * + * @beta + */ export interface IKeyValueStoreAdapter { namespace?: string | undefined } -export interface IKeyValueStore { +/** + * The types that can be stored by a store adapter + * + * @public + */ +export type ValueStoreType = object | string | number | boolean + +/** + * A Key Value store is responsible for managing Values identified by keys. + * + * @beta + */ +export interface IKeyValueStore { /** * Get a single value by key. Can be undefined as the underlying store typically will not throw an error for a non existing key * - * @param key Contains the key to search for + * @param key - Contains the key to search for */ get(key: string): Promise /** * Get a single item as Value Data from the store. Will always return a Value Data Object, but the value in it can be undefined in case the actual store does not contain the value - * @param key Contains the key to search for + * + * @param key - Contains the key to search for */ getAsValueData(key: string): Promise> + /** + * Get multiple values from the store. Will always return an array with values, but the values can be undefined in case the actual store does not contain the value for the respective key + * + * @param keys - Contains the keys to search for + */ getMany(keys: string[]): Promise> + /** + * Get multiple items as Value Data from the store. Will always return an array with Value Data Object, but the value in it can be undefined in case the actual store does not contain the value + * + * @param keys - Contains the keys to search for + */ getManyAsValueData(keys: string[]): Promise>> + /** + * Store a single value + * + * @param key - The key + * @param value - The value + * @param ttl - An optional number how long to store the value in milliseconds. If not provided will be stored indefinitely + */ set(key: string, value: ValueType, ttl?: number): Promise> + /** + * Delete a value from the store by key + * + * @param key - The key to delete the value for + */ delete(key: string): Promise + /** + * Delete multiple values by provided keys + * + * @param keys - The keys to delete the values for + */ deleteMany(keys: string[]): Promise + /** + * Clear the whole store (delete all values) + */ clear(): Promise> + /** + * Determine whether the store has the value belonging to the provided key + * + * @param key The key to search for + */ has(key: string): Promise + /** + * Disconnect the backing store. After this operation the store typically cannot be reused, unless the store object is re-instantiated + */ disconnect(): Promise } diff --git a/packages/kv-store/src/keyv/keyv.ts b/packages/kv-store/src/keyv/keyv.ts index 5b54ce28e..0e1fa3a0c 100644 --- a/packages/kv-store/src/keyv/keyv.ts +++ b/packages/kv-store/src/keyv/keyv.ts @@ -1,4 +1,4 @@ -import EventEmitter from 'events' +import { EventEmitter } from 'events' import JSONB from 'json-buffer' import { KeyvDeserializedData, KeyvOptions, KeyvStore, KeyvStoredData } from './keyv-types.js' diff --git a/packages/kv-store/src/store-adapters/tiered/index.ts b/packages/kv-store/src/store-adapters/tiered/index.ts index 90129a3fb..9cfac0569 100644 --- a/packages/kv-store/src/store-adapters/tiered/index.ts +++ b/packages/kv-store/src/store-adapters/tiered/index.ts @@ -1,4 +1,4 @@ -import EventEmitter from 'events' +import { EventEmitter } from 'events' import type { Options, Options_ } from './types.js' import { KeyvStore, KeyvStoredData } from '../../keyv/keyv-types.js' import { Keyv } from '../../keyv/keyv.js' @@ -6,6 +6,10 @@ import { IKeyValueStoreAdapter } from '../../key-value-types.js' type KeyvTieredIndex = 'local' | 'remote' +/** + * Tiered keyv store adapter, combining 2 adapters/stores into one + * @alpha + */ export class KeyValueTieredStoreAdapter extends EventEmitter implements KeyvStore, IKeyValueStoreAdapter diff --git a/packages/kv-store/src/store-adapters/typeorm/index.ts b/packages/kv-store/src/store-adapters/typeorm/index.ts index 1c90d2e1b..196296839 100644 --- a/packages/kv-store/src/store-adapters/typeorm/index.ts +++ b/packages/kv-store/src/store-adapters/typeorm/index.ts @@ -1,4 +1,4 @@ -import EventEmitter from 'events' +import { EventEmitter } from 'events' import { OrPromise } from '@veramo/utils' import { DataSource, In, Like } from 'typeorm' import { KeyValueStoreEntity } from './entities/keyValueStoreEntity.js' @@ -9,6 +9,10 @@ import JSONB from 'json-buffer' export { KeyValueTypeORMOptions } from './types.js' +/** + * TypeORM based key value store adapter + * @beta + */ export class KeyValueTypeORMStoreAdapter extends EventEmitter implements KeyvStore, IKeyValueStoreAdapter @@ -37,7 +41,7 @@ export class KeyValueTypeORMStoreAdapter if (Array.isArray(key)) { return this.getMany(key, options) } - const connection = await getConnectedDb(this.dbConnection) + const connection = await _getConnectedDb(this.dbConnection) const result = await connection.getRepository(KeyValueStoreEntity).findOneBy({ key, }) @@ -45,7 +49,7 @@ export class KeyValueTypeORMStoreAdapter } async getMany(keys: string[], options?: { raw?: boolean }): Promise>> { - const connection = await getConnectedDb(this.dbConnection) + const connection = await _getConnectedDb(this.dbConnection) const results = await connection.getRepository(KeyValueStoreEntity).findBy({ key: In(keys), }) @@ -63,7 +67,7 @@ export class KeyValueTypeORMStoreAdapter } async set(key: string, value: string, ttl?: number): Promise> { - const connection = await getConnectedDb(this.dbConnection) + const connection = await _getConnectedDb(this.dbConnection) const entity = new KeyValueStoreEntity() entity.key = key entity.data = value @@ -76,13 +80,13 @@ export class KeyValueTypeORMStoreAdapter if (Array.isArray(key)) { return this.deleteMany(key) } - const connection = await getConnectedDb(this.dbConnection) + const connection = await _getConnectedDb(this.dbConnection) const result = await connection.getRepository(KeyValueStoreEntity).delete({ key }) return result.affected === 1 } async deleteMany(keys: string[]): Promise { - const connection = await getConnectedDb(this.dbConnection) + const connection = await _getConnectedDb(this.dbConnection) const results = await connection.getRepository(KeyValueStoreEntity).delete({ key: In(keys), }) @@ -90,14 +94,14 @@ export class KeyValueTypeORMStoreAdapter } async clear(): Promise { - const connection = await getConnectedDb(this.dbConnection) + const connection = await _getConnectedDb(this.dbConnection) await connection.getRepository(KeyValueStoreEntity).delete({ key: Like(`${this.namespace}:%`), }) } async has(key: string): Promise { - const connection = await getConnectedDb(this.dbConnection) + const connection = await _getConnectedDb(this.dbConnection) const result = await connection.getRepository(KeyValueStoreEntity).countBy({ key, }) @@ -105,7 +109,7 @@ export class KeyValueTypeORMStoreAdapter } async disconnect(): Promise { - const connection = await getConnectedDb(this.dbConnection) + const connection = await _getConnectedDb(this.dbConnection) connection.destroy() } } @@ -114,8 +118,9 @@ export class KeyValueTypeORMStoreAdapter * Ensures that the provided DataSource is connected. * * @param dbConnection - a TypeORM DataSource or a Promise that resolves to a DataSource + * @internal */ -export async function getConnectedDb(dbConnection: OrPromise): Promise { +export async function _getConnectedDb(dbConnection: OrPromise): Promise { if (dbConnection instanceof Promise) { return await dbConnection } else if (!dbConnection.isInitialized) { diff --git a/packages/kv-store/src/store-adapters/typeorm/migrations/index.ts b/packages/kv-store/src/store-adapters/typeorm/migrations/index.ts index 6d6075eb5..ee1b5715e 100644 --- a/packages/kv-store/src/store-adapters/typeorm/migrations/index.ts +++ b/packages/kv-store/src/store-adapters/typeorm/migrations/index.ts @@ -1,4 +1,4 @@ -import { CreateKVDatabaseMigration } from './1.createKVDatabase' +import { CreateKVDatabaseMigration } from './1.createKVDatabase.js' /** * The migrations array that SHOULD be used when initializing a TypeORM database connection. diff --git a/packages/kv-store/src/store-adapters/typeorm/types.ts b/packages/kv-store/src/store-adapters/typeorm/types.ts index fb2dcc33f..80ec3ce67 100644 --- a/packages/kv-store/src/store-adapters/typeorm/types.ts +++ b/packages/kv-store/src/store-adapters/typeorm/types.ts @@ -1,13 +1,20 @@ import { OrPromise } from '@veramo/utils' import { DataSource } from 'typeorm' -import { KeyvDeserializedData } from '../../keyv/keyv-types' +import { KeyvDeserializedData } from '../../keyv/keyv-types.js' +/** + * @public + */ export type KeyValueTypeORMOptions = { dbConnection: OrPromise namespace?: string } +/** + * Internal options for the TypeORM adapter + * @internal + */ // eslint-disable-next-line @typescript-eslint/naming-convention export type Options_ = { validator: (value: any, key: string) => boolean diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index e2b9b8215..4b55e7a98 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -1195,6 +1195,64 @@ importers: specifier: 4.9.4 version: 4.9.4 + packages/kv-store: + dependencies: + '@veramo/core-types': + specifier: workspace:* + version: link:../core-types + '@veramo/utils': + specifier: workspace:* + version: link:../utils + debug: + specifier: ^4.3.4 + version: 4.3.4 + events: + specifier: ^3.3.0 + version: 3.3.0 + json-buffer: + specifier: ^3.0.1 + version: 3.0.1 + typeorm: + specifier: ^0.3.10 + version: 0.3.11(sqlite3@5.1.4)(ts-node@10.9.1) + uint8arrays: + specifier: ^3.1.1 + version: 3.1.1 + devDependencies: + '@keyv/compress-brotli': + specifier: ^1.1.3 + version: 1.1.3 + '@keyv/compress-gzip': + specifier: ^1.2.3 + version: 1.2.3 + '@keyv/sqlite': + specifier: ^3.6.5 + version: 3.6.5 + '@keyv/test-suite': + specifier: ^1.9.2 + version: 1.9.2 + '@types/debug': + specifier: ^4.1.7 + version: 4.1.7 + '@types/json-buffer': + specifier: ^3.0.0 + version: 3.0.0 + eslint: + specifier: ^8.33.0 + version: 8.33.0 + eslint-plugin-promise: + specifier: ^6.1.1 + version: 6.1.1(eslint@8.33.0) + keyv: + specifier: ^4.5.2 + version: 4.5.2 + timekeeper: + specifier: ^2.2.0 + version: 2.2.0 + typescript: + specifier: ^4.9.5 + version: 4.9.5 + packages/message-handler: dependencies: '@veramo/core-types': @@ -1489,7 +1547,7 @@ importers: version: 19.6.1 react-scripts: specifier: 5.0.1 - version: 5.0.1(@babel/plugin-syntax-flow@7.18.6)(@babel/plugin-transform-react-jsx@7.20.7)(eslint@8.31.0)(react@18.2.0)(ts-node@10.9.1)(typescript@4.9.4) + version: 5.0.1(@babel/plugin-syntax-flow@7.18.6)(@babel/plugin-transform-react-jsx@7.20.7)(eslint@8.33.0)(react@18.2.0)(ts-node@10.9.1)(typescript@4.9.4) ts-jest: specifier: 29.0.5 version: 29.0.5(@babel/core@7.20.12)(babel-jest@29.5.0)(jest@29.3.1)(typescript@4.9.4) @@ -1671,7 +1729,7 @@ packages: transitivePeerDependencies: - supports-color - /@babel/eslint-parser@7.19.1(@babel/core@7.20.12)(eslint@8.31.0): + /@babel/eslint-parser@7.19.1(@babel/core@7.20.12)(eslint@8.33.0): resolution: {integrity: sha512-AqNf2QWt1rtu2/1rLswy6CDP7H9Oh3mMhk177Y67Rg8d7RD9WfOLLv8CGn6tisFvS2htm86yIe1yLF6I1UDaGQ==} engines: {node: ^10.13.0 || ^12.13.0 || >=14.0.0} peerDependencies: @@ -1680,7 +1738,7 @@ packages: dependencies: '@babel/core': 7.20.12 '@nicolo-ribaudo/eslint-scope-5-internals': 5.1.1-v1 - eslint: 8.31.0 + eslint: 8.33.0 eslint-visitor-keys: 2.1.0 semver: 6.3.0 dev: true @@ -3026,7 +3084,7 @@ packages: cosmiconfig-typescript-loader: 1.0.9(@types/node@18.11.18)(cosmiconfig@7.1.0)(typescript@4.9.4) cross-spawn: 7.0.3 lodash: 4.17.21 - react-scripts: 5.0.1(@babel/plugin-syntax-flow@7.18.6)(@babel/plugin-transform-react-jsx@7.20.7)(eslint@8.31.0)(react@18.2.0)(ts-node@10.9.1)(typescript@4.9.4) + react-scripts: 5.0.1(@babel/plugin-syntax-flow@7.18.6)(@babel/plugin-transform-react-jsx@7.20.7)(eslint@8.33.0)(react@18.2.0)(ts-node@10.9.1)(typescript@4.9.4) semver: 7.3.8 webpack-merge: 5.8.0 transitivePeerDependencies: @@ -4674,6 +4732,48 @@ packages: '@jridgewell/resolve-uri': 3.1.0 '@jridgewell/sourcemap-codec': 1.4.14 + /@keyv/compress-brotli@1.1.3: + resolution: {integrity: sha512-6QdtGH/iHKj3GGN4a+m/EfhmfVeeVq2Z9yOlDwaHh18Pe9UncFCIJNpbahVdgxn2gedYjKOQR7s06SyPF2Y4Nw==} + engines: {node: '>= 12'} + dependencies: + compress-brotli: 1.3.8 + dev: true + + /@keyv/compress-gzip@1.2.3: + resolution: {integrity: sha512-nwPlHX18bWXNKbmIi0nGfwJlXvqusISbX9IpQssY0Uj/olddhz4s0K8hKJAFr13iEsD8PhJA5stnKB2UNwBasQ==} + engines: {node: '>= 12'} + dependencies: + '@types/pako': 2.0.0 + json-buffer: 3.0.1 + pako: 2.1.0 + dev: true + + /@keyv/sqlite@3.6.5: + resolution: {integrity: sha512-PZPsXcZYHPKUCX1DO7e6dTMGmk5aX7uW8QFzEavOPRMVloIp2QMv+Glt162pu+Dw5NunJinCbvD2DvYwinyNZw==} + engines: {node: '>= 12'} + dependencies: + pify: 5.0.0 + sqlite3: 5.1.6 + transitivePeerDependencies: + - bluebird + - encoding + - supports-color + dev: true + + /@keyv/test-suite@1.9.2: + resolution: {integrity: sha512-0pB36ZP22fBSeZuwwQRrFeuuRu6L10lEOJMv+5Fq6XXbXjN1Tvaoh7et6pqnk35qW0s0RSlOsY0m6lqydb7b6A==} + dependencies: + bignumber.js: 9.1.1 + delay: 5.0.0 + json-bigint: 1.0.0 + sqlite3: 5.1.6 + timekeeper: 2.2.0 + transitivePeerDependencies: + - bluebird + - encoding + - supports-color + dev: true + /@leichtgewicht/ip-codec@2.0.4: resolution: {integrity: sha512-Hcv+nVC0kZnQ3tD9GVu5xSMR4VVYOteQIr/hwFPVEvPdlXqgGEuRjiheChHgdM+JyqdgNcmzZOX/tnl0JOiI7A==} dev: true @@ -7245,6 +7345,10 @@ packages: parse5: 7.1.2 dev: true + /@types/json-buffer@3.0.0: + resolution: {integrity: sha512-3YP80IxxFJB4b5tYC2SUPwkg0XQLiu0nWvhRgEatgjf+29IcWO9X1k8xRv5DGssJ/lCrjYTjQPcobJr2yWIVuQ==} + dev: true + /@types/json-schema@7.0.11: resolution: {integrity: sha512-wOuvG1SN4Us4rez+tylwwwCV1psiNVOkJeM3AUWUNWg/jDQY2+HE/444y5gc+jBmRqASOm2Oeh5c1axHobwRKQ==} @@ -7317,6 +7421,10 @@ packages: resolution: {integrity: sha512-Gj7cI7z+98M282Tqmp2K5EIsoouUEzbBJhQQzDE3jSIRk6r9gsz0oUokqIUR4u1R3dMHo0pDHM7sNOHyhulypw==} dev: true + /@types/pako@2.0.0: + resolution: {integrity: sha512-10+iaz93qR5WYxTo+PMifD5TSxiOtdRaxBf7INGGXMQgTCu8Z/7GYWYFUOS3q/G0nE5boj1r4FEB+WSy7s5gbA==} + dev: true + /@types/parse-json@4.0.0: resolution: {integrity: sha512-//oorEZjL6sbPcKUaCdIGlIUeH26mgzimjBB77G6XRgnDl/L5wOnpyBGRe/Mmf5CVW3PwEBE1NjiMZ/ssFh4wA==} dev: true @@ -7493,7 +7601,7 @@ packages: dev: true optional: true - /@typescript-eslint/eslint-plugin@5.48.1(@typescript-eslint/parser@5.48.1)(eslint@8.31.0)(typescript@4.9.4): + /@typescript-eslint/eslint-plugin@5.48.1(@typescript-eslint/parser@5.48.1)(eslint@8.33.0)(typescript@4.9.4): resolution: {integrity: sha512-9nY5K1Rp2ppmpb9s9S2aBiF3xo5uExCehMDmYmmFqqyxgenbHJ3qbarcLt4ITgaD6r/2ypdlcFRdcuVPnks+fQ==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} peerDependencies: @@ -7504,12 +7612,12 @@ packages: typescript: optional: true dependencies: - '@typescript-eslint/parser': 5.48.1(eslint@8.31.0)(typescript@4.9.4) + '@typescript-eslint/parser': 5.48.1(eslint@8.33.0)(typescript@4.9.4) '@typescript-eslint/scope-manager': 5.48.1 - '@typescript-eslint/type-utils': 5.48.1(eslint@8.31.0)(typescript@4.9.4) - '@typescript-eslint/utils': 5.48.1(eslint@8.31.0)(typescript@4.9.4) + '@typescript-eslint/type-utils': 5.48.1(eslint@8.33.0)(typescript@4.9.4) + '@typescript-eslint/utils': 5.48.1(eslint@8.33.0)(typescript@4.9.4) debug: 4.3.4 - eslint: 8.31.0 + eslint: 8.33.0 ignore: 5.2.4 natural-compare-lite: 1.4.0 regexpp: 3.2.0 @@ -7520,20 +7628,20 @@ packages: - supports-color dev: true - /@typescript-eslint/experimental-utils@5.48.1(eslint@8.31.0)(typescript@4.9.4): + /@typescript-eslint/experimental-utils@5.48.1(eslint@8.33.0)(typescript@4.9.4): resolution: {integrity: sha512-8OoIZZuOeqsm5cxn2f01qHWtVC3M4iixSsfZXPiQUg4Sl4LiU+b5epcJFwxNfqeoLl+SGncELyi3x99zI6C0ng==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} peerDependencies: eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 dependencies: - '@typescript-eslint/utils': 5.48.1(eslint@8.31.0)(typescript@4.9.4) - eslint: 8.31.0 + '@typescript-eslint/utils': 5.48.1(eslint@8.33.0)(typescript@4.9.4) + eslint: 8.33.0 transitivePeerDependencies: - supports-color - typescript dev: true - /@typescript-eslint/parser@5.48.1(eslint@8.31.0)(typescript@4.9.4): + /@typescript-eslint/parser@5.48.1(eslint@8.33.0)(typescript@4.9.4): resolution: {integrity: sha512-4yg+FJR/V1M9Xoq56SF9Iygqm+r5LMXvheo6DQ7/yUWynQ4YfCRnsKuRgqH4EQ5Ya76rVwlEpw4Xu+TgWQUcdA==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} peerDependencies: @@ -7547,7 +7655,7 @@ packages: '@typescript-eslint/types': 5.48.1 '@typescript-eslint/typescript-estree': 5.48.1(typescript@4.9.4) debug: 4.3.4 - eslint: 8.31.0 + eslint: 8.33.0 typescript: 4.9.4 transitivePeerDependencies: - supports-color @@ -7561,7 +7669,7 @@ packages: '@typescript-eslint/visitor-keys': 5.48.1 dev: true - /@typescript-eslint/type-utils@5.48.1(eslint@8.31.0)(typescript@4.9.4): + /@typescript-eslint/type-utils@5.48.1(eslint@8.33.0)(typescript@4.9.4): resolution: {integrity: sha512-Hyr8HU8Alcuva1ppmqSYtM/Gp0q4JOp1F+/JH5D1IZm/bUBrV0edoewQZiEc1r6I8L4JL21broddxK8HAcZiqQ==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} peerDependencies: @@ -7572,9 +7680,9 @@ packages: optional: true dependencies: '@typescript-eslint/typescript-estree': 5.48.1(typescript@4.9.4) - '@typescript-eslint/utils': 5.48.1(eslint@8.31.0)(typescript@4.9.4) + '@typescript-eslint/utils': 5.48.1(eslint@8.33.0)(typescript@4.9.4) debug: 4.3.4 - eslint: 8.31.0 + eslint: 8.33.0 tsutils: 3.21.0(typescript@4.9.4) typescript: 4.9.4 transitivePeerDependencies: @@ -7607,7 +7715,7 @@ packages: - supports-color dev: true - /@typescript-eslint/utils@5.48.1(eslint@8.31.0)(typescript@4.9.4): + /@typescript-eslint/utils@5.48.1(eslint@8.33.0)(typescript@4.9.4): resolution: {integrity: sha512-SmQuSrCGUOdmGMwivW14Z0Lj8dxG1mOFZ7soeJ0TQZEJcs3n5Ndgkg0A4bcMFzBELqLJ6GTHnEU+iIoaD6hFGA==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} peerDependencies: @@ -7618,9 +7726,9 @@ packages: '@typescript-eslint/scope-manager': 5.48.1 '@typescript-eslint/types': 5.48.1 '@typescript-eslint/typescript-estree': 5.48.1(typescript@4.9.4) - eslint: 8.31.0 + eslint: 8.33.0 eslint-scope: 5.1.1 - eslint-utils: 3.0.0(eslint@8.31.0) + eslint-utils: 3.0.0(eslint@8.33.0) semver: 7.3.8 transitivePeerDependencies: - supports-color @@ -9849,6 +9957,14 @@ packages: dev: false optional: true + /compress-brotli@1.3.8: + resolution: {integrity: sha512-lVcQsjhxhIXsuupfy9fmZUFtAIdBmXA7EGY6GBdgZ++qkM9zG4YFT8iU7FoBxzryNDMOpD1HIFHUSX4D87oqhQ==} + engines: {node: '>= 12'} + dependencies: + '@types/json-buffer': 3.0.0 + json-buffer: 3.0.1 + dev: true + /compressible@2.0.18: resolution: {integrity: sha512-AF3r7P5dWxL8MxyITRMlORQNaOA2IkAFaTr4k7BUumjPtRpGDTZpl0Pb1XCO6JeDCBdp126Cgs9sMxqSjgYyRg==} engines: {node: '>= 0.6'} @@ -10734,6 +10850,11 @@ packages: rimraf: 3.0.2 slash: 3.0.0 + /delay@5.0.0: + resolution: {integrity: sha512-ReEBKkIfe4ya47wlPYf/gu5ib6yUG0/Aez0JQZQz94kiWtRQvZIQbTiehsnwHvLSWJnQdhVeqYue7Id1dKr0qw==} + engines: {node: '>=10'} + dev: true + /delayed-stream@1.0.0: resolution: {integrity: sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==} engines: {node: '>=0.4.0'} @@ -11315,7 +11436,7 @@ packages: source-map: 0.6.1 dev: true - /eslint-config-react-app@7.0.1(@babel/plugin-syntax-flow@7.18.6)(@babel/plugin-transform-react-jsx@7.20.7)(eslint@8.31.0)(jest@27.5.1)(typescript@4.9.4): + /eslint-config-react-app@7.0.1(@babel/plugin-syntax-flow@7.18.6)(@babel/plugin-transform-react-jsx@7.20.7)(eslint@8.33.0)(jest@27.5.1)(typescript@4.9.4): resolution: {integrity: sha512-K6rNzvkIeHaTd8m/QEh1Zko0KI7BACWkkneSs6s9cKZC/J27X3eZR6Upt1jkmZ/4FK+XUOPPxMEN7+lbUXfSlA==} engines: {node: '>=14.0.0'} peerDependencies: @@ -11326,20 +11447,20 @@ packages: optional: true dependencies: '@babel/core': 7.20.12 - '@babel/eslint-parser': 7.19.1(@babel/core@7.20.12)(eslint@8.31.0) + '@babel/eslint-parser': 7.19.1(@babel/core@7.20.12)(eslint@8.33.0) '@rushstack/eslint-patch': 1.2.0 - '@typescript-eslint/eslint-plugin': 5.48.1(@typescript-eslint/parser@5.48.1)(eslint@8.31.0)(typescript@4.9.4) - '@typescript-eslint/parser': 5.48.1(eslint@8.31.0)(typescript@4.9.4) + '@typescript-eslint/eslint-plugin': 5.48.1(@typescript-eslint/parser@5.48.1)(eslint@8.33.0)(typescript@4.9.4) + '@typescript-eslint/parser': 5.48.1(eslint@8.33.0)(typescript@4.9.4) babel-preset-react-app: 10.0.1 confusing-browser-globals: 1.0.11 - eslint: 8.31.0 - eslint-plugin-flowtype: 8.0.3(@babel/plugin-syntax-flow@7.18.6)(@babel/plugin-transform-react-jsx@7.20.7)(eslint@8.31.0) - eslint-plugin-import: 2.26.0(@typescript-eslint/parser@5.48.1)(eslint@8.31.0) - eslint-plugin-jest: 25.7.0(@typescript-eslint/eslint-plugin@5.48.1)(eslint@8.31.0)(jest@27.5.1)(typescript@4.9.4) - eslint-plugin-jsx-a11y: 6.7.0(eslint@8.31.0) - eslint-plugin-react: 7.32.0(eslint@8.31.0) - eslint-plugin-react-hooks: 4.6.0(eslint@8.31.0) - eslint-plugin-testing-library: 5.9.1(eslint@8.31.0)(typescript@4.9.4) + eslint: 8.33.0 + eslint-plugin-flowtype: 8.0.3(@babel/plugin-syntax-flow@7.18.6)(@babel/plugin-transform-react-jsx@7.20.7)(eslint@8.33.0) + eslint-plugin-import: 2.26.0(@typescript-eslint/parser@5.48.1)(eslint@8.33.0) + eslint-plugin-jest: 25.7.0(@typescript-eslint/eslint-plugin@5.48.1)(eslint@8.33.0)(jest@27.5.1)(typescript@4.9.4) + eslint-plugin-jsx-a11y: 6.7.0(eslint@8.33.0) + eslint-plugin-react: 7.32.0(eslint@8.33.0) + eslint-plugin-react-hooks: 4.6.0(eslint@8.33.0) + eslint-plugin-testing-library: 5.9.1(eslint@8.33.0)(typescript@4.9.4) typescript: 4.9.4 transitivePeerDependencies: - '@babel/plugin-syntax-flow' @@ -11359,7 +11480,7 @@ packages: - supports-color dev: true - /eslint-module-utils@2.7.4(@typescript-eslint/parser@5.48.1)(eslint-import-resolver-node@0.3.6)(eslint@8.31.0): + /eslint-module-utils@2.7.4(@typescript-eslint/parser@5.48.1)(eslint-import-resolver-node@0.3.6)(eslint@8.33.0): resolution: {integrity: sha512-j4GT+rqzCoRKHwURX7pddtIPGySnX9Si/cgMI5ztrcqOPtk5dDEeZ34CQVPphnqkJytlc97Vuk05Um2mJ3gEQA==} engines: {node: '>=4'} peerDependencies: @@ -11380,15 +11501,15 @@ packages: eslint-import-resolver-webpack: optional: true dependencies: - '@typescript-eslint/parser': 5.48.1(eslint@8.31.0)(typescript@4.9.4) + '@typescript-eslint/parser': 5.48.1(eslint@8.33.0)(typescript@4.9.4) debug: 3.2.7 - eslint: 8.31.0 + eslint: 8.33.0 eslint-import-resolver-node: 0.3.6 transitivePeerDependencies: - supports-color dev: true - /eslint-plugin-flowtype@8.0.3(@babel/plugin-syntax-flow@7.18.6)(@babel/plugin-transform-react-jsx@7.20.7)(eslint@8.31.0): + /eslint-plugin-flowtype@8.0.3(@babel/plugin-syntax-flow@7.18.6)(@babel/plugin-transform-react-jsx@7.20.7)(eslint@8.33.0): resolution: {integrity: sha512-dX8l6qUL6O+fYPtpNRideCFSpmWOUVx5QcaGLVqe/vlDiBSe4vYljDWDETwnyFzpl7By/WVIu6rcrniCgH9BqQ==} engines: {node: '>=12.0.0'} peerDependencies: @@ -11398,12 +11519,12 @@ packages: dependencies: '@babel/plugin-syntax-flow': 7.18.6(@babel/core@7.20.12) '@babel/plugin-transform-react-jsx': 7.20.7(@babel/core@7.20.12) - eslint: 8.31.0 + eslint: 8.33.0 lodash: 4.17.21 string-natural-compare: 3.0.1 dev: true - /eslint-plugin-import@2.26.0(@typescript-eslint/parser@5.48.1)(eslint@8.31.0): + /eslint-plugin-import@2.26.0(@typescript-eslint/parser@5.48.1)(eslint@8.33.0): resolution: {integrity: sha512-hYfi3FXaM8WPLf4S1cikh/r4IxnO6zrhZbEGz2b660EJRbuxgpDS5gkCuYgGWg2xxh2rBuIr4Pvhve/7c31koA==} engines: {node: '>=4'} peerDependencies: @@ -11413,14 +11534,14 @@ packages: '@typescript-eslint/parser': optional: true dependencies: - '@typescript-eslint/parser': 5.48.1(eslint@8.31.0)(typescript@4.9.4) + '@typescript-eslint/parser': 5.48.1(eslint@8.33.0)(typescript@4.9.4) array-includes: 3.1.6 array.prototype.flat: 1.3.1 debug: 2.6.9 doctrine: 2.1.0 - eslint: 8.31.0 + eslint: 8.33.0 eslint-import-resolver-node: 0.3.6 - eslint-module-utils: 2.7.4(@typescript-eslint/parser@5.48.1)(eslint-import-resolver-node@0.3.6)(eslint@8.31.0) + eslint-module-utils: 2.7.4(@typescript-eslint/parser@5.48.1)(eslint-import-resolver-node@0.3.6)(eslint@8.33.0) has: 1.0.3 is-core-module: 2.11.0 is-glob: 4.0.3 @@ -11434,7 +11555,7 @@ packages: - supports-color dev: true - /eslint-plugin-jest@25.7.0(@typescript-eslint/eslint-plugin@5.48.1)(eslint@8.31.0)(jest@27.5.1)(typescript@4.9.4): + /eslint-plugin-jest@25.7.0(@typescript-eslint/eslint-plugin@5.48.1)(eslint@8.33.0)(jest@27.5.1)(typescript@4.9.4): resolution: {integrity: sha512-PWLUEXeeF7C9QGKqvdSbzLOiLTx+bno7/HC9eefePfEb257QFHg7ye3dh80AZVkaa/RQsBB1Q/ORQvg2X7F0NQ==} engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0} peerDependencies: @@ -11447,16 +11568,16 @@ packages: jest: optional: true dependencies: - '@typescript-eslint/eslint-plugin': 5.48.1(@typescript-eslint/parser@5.48.1)(eslint@8.31.0)(typescript@4.9.4) - '@typescript-eslint/experimental-utils': 5.48.1(eslint@8.31.0)(typescript@4.9.4) - eslint: 8.31.0 + '@typescript-eslint/eslint-plugin': 5.48.1(@typescript-eslint/parser@5.48.1)(eslint@8.33.0)(typescript@4.9.4) + '@typescript-eslint/experimental-utils': 5.48.1(eslint@8.33.0)(typescript@4.9.4) + eslint: 8.33.0 jest: 27.5.1(ts-node@10.9.1) transitivePeerDependencies: - supports-color - typescript dev: true - /eslint-plugin-jsx-a11y@6.7.0(eslint@8.31.0): + /eslint-plugin-jsx-a11y@6.7.0(eslint@8.33.0): resolution: {integrity: sha512-EGGRKhzejSzXKtjmEjWNtr4SK/DkMkSzkBH7g7e7moBDXZXrqaUIxkmD7uF93upMysc4dKYEJwupu7Dff+ShwA==} engines: {node: '>=4.0'} peerDependencies: @@ -11471,7 +11592,7 @@ packages: axobject-query: 3.1.1 damerau-levenshtein: 1.0.8 emoji-regex: 9.2.2 - eslint: 8.31.0 + eslint: 8.33.0 has: 1.0.3 jsx-ast-utils: 3.3.3 language-tags: 1.0.5 @@ -11481,16 +11602,25 @@ packages: semver: 6.3.0 dev: true - /eslint-plugin-react-hooks@4.6.0(eslint@8.31.0): + /eslint-plugin-promise@6.1.1(eslint@8.33.0): + resolution: {integrity: sha512-tjqWDwVZQo7UIPMeDReOpUgHCmCiH+ePnVT+5zVapL0uuHnegBUs2smM13CzOs2Xb5+MHMRFTs9v24yjba4Oig==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + peerDependencies: + eslint: ^7.0.0 || ^8.0.0 + dependencies: + eslint: 8.33.0 + dev: true + + /eslint-plugin-react-hooks@4.6.0(eslint@8.33.0): resolution: {integrity: sha512-oFc7Itz9Qxh2x4gNHStv3BqJq54ExXmfC+a1NjAta66IAN87Wu0R/QArgIS9qKzX3dXKPI9H5crl9QchNMY9+g==} engines: {node: '>=10'} peerDependencies: eslint: ^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0 dependencies: - eslint: 8.31.0 + eslint: 8.33.0 dev: true - /eslint-plugin-react@7.32.0(eslint@8.31.0): + /eslint-plugin-react@7.32.0(eslint@8.33.0): resolution: {integrity: sha512-vSBi1+SrPiLZCGvxpiZIa28fMEUaMjXtCplrvxcIxGzmFiYdsXQDwInEjuv5/i/2CTTxbkS87tE8lsQ0Qxinbw==} engines: {node: '>=4'} peerDependencies: @@ -11500,7 +11630,7 @@ packages: array.prototype.flatmap: 1.3.1 array.prototype.tosorted: 1.1.1 doctrine: 2.1.0 - eslint: 8.31.0 + eslint: 8.33.0 estraverse: 5.3.0 jsx-ast-utils: 3.3.3 minimatch: 3.1.2 @@ -11514,14 +11644,14 @@ packages: string.prototype.matchall: 4.0.8 dev: true - /eslint-plugin-testing-library@5.9.1(eslint@8.31.0)(typescript@4.9.4): + /eslint-plugin-testing-library@5.9.1(eslint@8.33.0)(typescript@4.9.4): resolution: {integrity: sha512-6BQp3tmb79jLLasPHJmy8DnxREe+2Pgf7L+7o09TSWPfdqqtQfRZmZNetr5mOs3yqZk/MRNxpN3RUpJe0wB4LQ==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0, npm: '>=6'} peerDependencies: eslint: ^7.5.0 || ^8.0.0 dependencies: - '@typescript-eslint/utils': 5.48.1(eslint@8.31.0)(typescript@4.9.4) - eslint: 8.31.0 + '@typescript-eslint/utils': 5.48.1(eslint@8.33.0)(typescript@4.9.4) + eslint: 8.33.0 transitivePeerDependencies: - supports-color - typescript @@ -11543,13 +11673,13 @@ packages: estraverse: 5.3.0 dev: true - /eslint-utils@3.0.0(eslint@8.31.0): + /eslint-utils@3.0.0(eslint@8.33.0): resolution: {integrity: sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA==} engines: {node: ^10.0.0 || ^12.0.0 || >= 14.0.0} peerDependencies: eslint: '>=5' dependencies: - eslint: 8.31.0 + eslint: 8.33.0 eslint-visitor-keys: 2.1.0 dev: true @@ -11563,7 +11693,7 @@ packages: engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} dev: true - /eslint-webpack-plugin@3.2.0(eslint@8.31.0)(webpack@5.75.0): + /eslint-webpack-plugin@3.2.0(eslint@8.33.0)(webpack@5.75.0): resolution: {integrity: sha512-avrKcGncpPbPSUHX6B3stNGzkKFto3eL+DKM4+VyMrVnhPc3vRczVlCq3uhuFOdRvDHTVXuzwk1ZKUrqDQHQ9w==} engines: {node: '>= 12.13.0'} peerDependencies: @@ -11571,7 +11701,7 @@ packages: webpack: ^5.0.0 dependencies: '@types/eslint': 8.4.10 - eslint: 8.31.0 + eslint: 8.33.0 jest-worker: 28.1.3 micromatch: 4.0.5 normalize-path: 3.0.0 @@ -11579,8 +11709,8 @@ packages: webpack: 5.75.0 dev: true - /eslint@8.31.0: - resolution: {integrity: sha512-0tQQEVdmPZ1UtUKXjX7EMm9BlgJ08G90IhWh0PKDCb3ZLsgAOHI8fYSIzYVZej92zsgq+ft0FGsxhJ3xo2tbuA==} + /eslint@8.33.0: + resolution: {integrity: sha512-WjOpFQgKK8VrCnAtl8We0SUOy/oVZ5NHykyMiagV1M9r8IFpIJX7DduK6n1mpfhlG7T1NLWm2SuD8QB7KFySaA==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} hasBin: true dependencies: @@ -11595,7 +11725,7 @@ packages: doctrine: 3.0.0 escape-string-regexp: 4.0.0 eslint-scope: 7.1.1 - eslint-utils: 3.0.0(eslint@8.31.0) + eslint-utils: 3.0.0(eslint@8.33.0) eslint-visitor-keys: 3.3.0 espree: 9.4.1 esquery: 1.4.0 @@ -12596,7 +12726,7 @@ packages: for-in: 1.0.2 dev: true - /fork-ts-checker-webpack-plugin@6.5.2(eslint@8.31.0)(typescript@4.9.4)(webpack@5.75.0): + /fork-ts-checker-webpack-plugin@6.5.2(eslint@8.33.0)(typescript@4.9.4)(webpack@5.75.0): resolution: {integrity: sha512-m5cUmF30xkZ7h4tWUgTAcEaKmUW7tfyUyTqNNOz7OxWJ0v1VWKTcOvH8FWHUwSjlW/356Ijc9vi3XfcPstpQKA==} engines: {node: '>=10', yarn: '>=1.0.0'} peerDependencies: @@ -12616,7 +12746,7 @@ packages: chokidar: 3.5.3 cosmiconfig: 6.0.0 deepmerge: 4.2.2 - eslint: 8.31.0 + eslint: 8.33.0 fs-extra: 9.1.0 glob: 7.2.3 memfs: 3.4.13 @@ -15904,6 +16034,15 @@ packages: engines: {node: '>=4'} hasBin: true + /json-bigint@1.0.0: + resolution: {integrity: sha512-SiPv/8VpZuWbvLSMtTDU8hEfrZWg/mH/nV/b4o0CYbSxu1UIQPLdwKOCIyLQX+VIPO5vrLX3i8qtqFyhdPSUSQ==} + dependencies: + bignumber.js: 9.1.1 + dev: true + + /json-buffer@3.0.1: + resolution: {integrity: sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==} + /json-canonicalize@1.0.4: resolution: {integrity: sha512-YNr/ePzgReHwlnAm3EVV1pcimwesI+1DZr5v7WBKOc1zE1t7pjxWAPRxJFT3ll6flLIdRe0DPia/8cl2FLAZNA==} dev: false @@ -16063,6 +16202,12 @@ packages: readable-stream: 3.6.0 dev: true + /keyv@4.5.2: + resolution: {integrity: sha512-5MHbFaKn8cNSmVW7BYnijeAVlE4cYA/SVkifVgrh7yotnfhKmjuXpDKjrABLnT0SfHWV21P8ow07OGfRrNDg8g==} + dependencies: + json-buffer: 3.0.1 + dev: true + /kind-of@1.1.0: resolution: {integrity: sha512-aUH6ElPnMGon2/YkxRIigV32MOpTVcoXQ1Oo8aYn40s+sJ3j+0gFZsT8HKDcxNy7Fi9zuquWtGaGAahOdv5p/g==} engines: {node: '>=0.10.0'} @@ -17592,12 +17737,6 @@ packages: dependencies: yallist: 4.0.0 - /minipass@4.0.0: - resolution: {integrity: sha512-g2Uuh2jEKoht+zvO6vJqXmYpflPqzRBT+Th2h01DKh5z7wbY/AZ2gCQ78cP70YoHPyFdY30YBV5WxgLOEwOykw==} - engines: {node: '>=8'} - dependencies: - yallist: 4.0.0 - /minipass@4.2.8: resolution: {integrity: sha512-fNzuVyifolSLFL4NzpF+wEF4qrgqaaKX0haXPQEdQ7NKAN+WecoKMHV09YcuL/DHxrUsYQOK3MiuDf7Ip2OXfQ==} engines: {node: '>=8'} @@ -18864,6 +19003,10 @@ packages: - supports-color dev: true + /pako@2.1.0: + resolution: {integrity: sha512-w+eufiZ1WuJYgPXbV/PO3NCMEc3xqylkKHzp8bxp1uW4qaSNQUkwmLLEc3kKsfz8lpV1F8Ht3U1Cm+9Srog2ug==} + dev: true + /param-case@3.0.4: resolution: {integrity: sha512-RXlj7zCYokReqWpOPH9oYivUzLYZ5vAPIfEmCTNViosC78F8F0H9y7T7gG2M39ymgutxF5gcFEsyZQSph9Bp3A==} dependencies: @@ -20416,7 +20559,7 @@ packages: resolution: {integrity: sha512-WUSQJ4P/wWcusaH+zZmbECOk7H5N2pOIl0vzheeornkIMhu+qrNdGFm0bDZLCb0hSF0jf/kH1SgkNGfBdTc4wA==} dev: false - /react-dev-utils@12.0.1(eslint@8.31.0)(typescript@4.9.4)(webpack@5.75.0): + /react-dev-utils@12.0.1(eslint@8.33.0)(typescript@4.9.4)(webpack@5.75.0): resolution: {integrity: sha512-84Ivxmr17KjUupyqzFode6xKhjwuEJDROWKJy/BthkL7Wn6NJ8h4WE6k/exAv6ImS+0oZLRRW5j/aINMHyeGeQ==} engines: {node: '>=14'} peerDependencies: @@ -20435,7 +20578,7 @@ packages: escape-string-regexp: 4.0.0 filesize: 8.0.7 find-up: 5.0.0 - fork-ts-checker-webpack-plugin: 6.5.2(eslint@8.31.0)(typescript@4.9.4)(webpack@5.75.0) + fork-ts-checker-webpack-plugin: 6.5.2(eslint@8.33.0)(typescript@4.9.4)(webpack@5.75.0) global-modules: 2.0.0 globby: 11.1.0 gzip-size: 6.0.0 @@ -20645,7 +20788,7 @@ packages: dev: false optional: true - /react-scripts@5.0.1(@babel/plugin-syntax-flow@7.18.6)(@babel/plugin-transform-react-jsx@7.20.7)(eslint@8.31.0)(react@18.2.0)(ts-node@10.9.1)(typescript@4.9.4): + /react-scripts@5.0.1(@babel/plugin-syntax-flow@7.18.6)(@babel/plugin-transform-react-jsx@7.20.7)(eslint@8.33.0)(react@18.2.0)(ts-node@10.9.1)(typescript@4.9.4): resolution: {integrity: sha512-8VAmEm/ZAwQzJ+GOMLbBsTdDKOpuZh7RPs0UymvBR2vRk4iZWCskjbFnxqjrzoIvlNNRZ3QJFx6/qDSi6zSnaQ==} engines: {node: '>=14.0.0'} hasBin: true @@ -20672,9 +20815,9 @@ packages: css-minimizer-webpack-plugin: 3.4.1(webpack@5.75.0) dotenv: 10.0.0 dotenv-expand: 5.1.0 - eslint: 8.31.0 - eslint-config-react-app: 7.0.1(@babel/plugin-syntax-flow@7.18.6)(@babel/plugin-transform-react-jsx@7.20.7)(eslint@8.31.0)(jest@27.5.1)(typescript@4.9.4) - eslint-webpack-plugin: 3.2.0(eslint@8.31.0)(webpack@5.75.0) + eslint: 8.33.0 + eslint-config-react-app: 7.0.1(@babel/plugin-syntax-flow@7.18.6)(@babel/plugin-transform-react-jsx@7.20.7)(eslint@8.33.0)(jest@27.5.1)(typescript@4.9.4) + eslint-webpack-plugin: 3.2.0(eslint@8.33.0)(webpack@5.75.0) file-loader: 6.2.0(webpack@5.75.0) fs-extra: 10.1.0 html-webpack-plugin: 5.5.0(webpack@5.75.0) @@ -20691,7 +20834,7 @@ packages: prompts: 2.4.2 react: 18.2.0 react-app-polyfill: 3.0.0 - react-dev-utils: 12.0.1(eslint@8.31.0)(typescript@4.9.4)(webpack@5.75.0) + react-dev-utils: 12.0.1(eslint@8.33.0)(typescript@4.9.4)(webpack@5.75.0) react-refresh: 0.11.0 resolve: 1.22.1 resolve-url-loader: 4.0.0 @@ -21340,7 +21483,7 @@ packages: /rxjs@7.8.0: resolution: {integrity: sha512-F2+gxDshqmIub1KdvZkaEfGDwLNpPvk9Fs6LD/MyQxNgMds/WH9OdDDXOmxUZpME+iSK3rQCctkL0DYyytUqMg==} dependencies: - tslib: 2.4.1 + tslib: 2.5.0 /safe-buffer@5.1.2: resolution: {integrity: sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==} @@ -22106,6 +22249,24 @@ packages: - encoding - supports-color + /sqlite3@5.1.6: + resolution: {integrity: sha512-olYkWoKFVNSSSQNvxVUfjiVbz3YtBwTJj+mfV5zpHmqW3sELx2Cf4QCdirMelhM5Zh+KDVaKgQHqCxrqiWHybw==} + requiresBuild: true + peerDependenciesMeta: + node-gyp: + optional: true + dependencies: + '@mapbox/node-pre-gyp': 1.0.10 + node-addon-api: 4.3.0 + tar: 6.1.13 + optionalDependencies: + node-gyp: 8.4.1 + transitivePeerDependencies: + - bluebird + - encoding + - supports-color + dev: true + /ssri@8.0.1: resolution: {integrity: sha512-97qShzy1AiyxvPNIkLWoGua7xoQzzPjQ0HAH4B0rWKo7SZ6USuPcrUiAFrws0UH8RrbWmgq3LMTObhPIHbbBeQ==} engines: {node: '>= 8'} @@ -22612,7 +22773,7 @@ packages: dependencies: chownr: 2.0.0 fs-minipass: 2.1.0 - minipass: 4.0.0 + minipass: 4.2.8 minizlib: 2.1.2 mkdirp: 1.0.4 yallist: 4.0.0 @@ -22790,6 +22951,10 @@ packages: engines: {node: '>=0.10.0'} dev: false + /timekeeper@2.2.0: + resolution: {integrity: sha512-W3AmPTJWZkRwu+iSNxPIsLZ2ByADsOLbbLxe46UJyWj3mlYLlwucKiq+/dPm0l9wTzqoF3/2PH0AGFCebjq23A==} + dev: true + /tmp@0.0.33: resolution: {integrity: sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==} engines: {node: '>=0.6.0'} @@ -23305,6 +23470,12 @@ packages: engines: {node: '>=4.2.0'} hasBin: true + /typescript@4.9.5: + resolution: {integrity: sha512-1FXk9E2Hm+QzZQ7z+McJiHL4NW1F2EzMu9Nq9i3zAaGqibafqYwCVU6WyWAuyQRRzOlxou8xZSyXLEN8oKj24g==} + engines: {node: '>=4.2.0'} + hasBin: true + dev: true + /ua-parser-js@0.7.35: resolution: {integrity: sha512-veRf7dawaj9xaWEu9HoTVn5Pggtc/qj+kqTOFvNiN1l0YdxwC1kvel57UCjThjGa3BHBihE8/UJAHI+uQHmd/g==} dev: false From 427ad3e01fabe6f7e702d7f63e6ce5f8afdc3ba6 Mon Sep 17 00:00:00 2001 From: nklomp Date: Wed, 3 May 2023 02:15:05 +0200 Subject: [PATCH 11/16] chore: prettier --- packages/kv-store/src/__tests__/keyv.test.ts | 1 - packages/kv-store/src/key-value-store.ts | 2 -- 2 files changed, 3 deletions(-) diff --git a/packages/kv-store/src/__tests__/keyv.test.ts b/packages/kv-store/src/__tests__/keyv.test.ts index 6f927d5b7..244d8d41a 100644 --- a/packages/kv-store/src/__tests__/keyv.test.ts +++ b/packages/kv-store/src/__tests__/keyv.test.ts @@ -61,7 +61,6 @@ describe('keyv sqlite store', () => { }) describe('keyv TypeORM store', () => { - it('should respect ttl', async () => { const store = new KeyValueTypeORMStoreAdapter({ dbConnection, namespace: 'test' }) const keyv = new Keyv(store) diff --git a/packages/kv-store/src/key-value-store.ts b/packages/kv-store/src/key-value-store.ts index c3d905034..d2b28a633 100644 --- a/packages/kv-store/src/key-value-store.ts +++ b/packages/kv-store/src/key-value-store.ts @@ -8,8 +8,6 @@ import { import { Keyv } from './keyv/keyv.js' import { KeyvDeserializedData, KeyvOptions, KeyvStoredData } from './keyv/keyv-types.js' - - /** * Agent plugin that implements {@link @veramo/core-types#IKeyValueStore} interface * @public From f992f2e7300dfb16b96bed2c83002cc51909b117 Mon Sep 17 00:00:00 2001 From: Niels Klomp Date: Thu, 18 May 2023 20:27:32 +0200 Subject: [PATCH 12/16] Update packages/kv-store/src/key-value-store.ts Co-authored-by: Mircea Nistor --- packages/kv-store/src/key-value-store.ts | 3 --- 1 file changed, 3 deletions(-) diff --git a/packages/kv-store/src/key-value-store.ts b/packages/kv-store/src/key-value-store.ts index d2b28a633..91e15f0f3 100644 --- a/packages/kv-store/src/key-value-store.ts +++ b/packages/kv-store/src/key-value-store.ts @@ -113,9 +113,6 @@ export class KeyValueStore implements IKeyValu } else if (!('value' in result)) { return { value: result, expires: undefined } } - if (!('expires' in result)) { - result.expires = undefined - } return result as IValueData } } From 5d09937678855926a5eefd7399cbc0eb48fdf485 Mon Sep 17 00:00:00 2001 From: Niels Klomp Date: Thu, 18 May 2023 20:27:43 +0200 Subject: [PATCH 13/16] Update packages/kv-store/src/key-value-types.ts Co-authored-by: Mircea Nistor --- packages/kv-store/src/key-value-types.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/kv-store/src/key-value-types.ts b/packages/kv-store/src/key-value-types.ts index d845f9bd7..5736b2ec6 100644 --- a/packages/kv-store/src/key-value-types.ts +++ b/packages/kv-store/src/key-value-types.ts @@ -5,8 +5,8 @@ * @beta */ export interface IValueData { - value: ValueType | undefined - expires: number | undefined + value?: ValueType + expires?: number } /** From 8534c2e619388cbc4727252180911c73cce8673a Mon Sep 17 00:00:00 2001 From: nklomp Date: Thu, 18 May 2023 20:59:31 +0200 Subject: [PATCH 14/16] chore: small cleanups and make expiration property optional --- packages/kv-store/src/__tests__/kvstore.test.ts | 2 -- packages/kv-store/src/key-value-store.ts | 7 ++++++- packages/kv-store/src/key-value-types.ts | 7 ------- 3 files changed, 6 insertions(+), 10 deletions(-) diff --git a/packages/kv-store/src/__tests__/kvstore.test.ts b/packages/kv-store/src/__tests__/kvstore.test.ts index afff5b968..fd01b070d 100644 --- a/packages/kv-store/src/__tests__/kvstore.test.ts +++ b/packages/kv-store/src/__tests__/kvstore.test.ts @@ -1,6 +1,5 @@ import { KeyValueStore } from '../key-value-store.js' import { IKeyValueStore } from '../key-value-types.js' -import { beforeEach, expect } from '@jest/globals' interface TestValue { stringProp: string @@ -49,7 +48,6 @@ describe('kvStore with MAP adapter', () => { await expect(kvStore.get(`key${i}`)).resolves.toEqual(testValues[i]) await expect(kvStore.getAsValueData(`key${i}`)).resolves.toMatchObject({ value: testValues[i], - expires: undefined, }) } }) diff --git a/packages/kv-store/src/key-value-store.ts b/packages/kv-store/src/key-value-store.ts index 91e15f0f3..4230a9cc0 100644 --- a/packages/kv-store/src/key-value-store.ts +++ b/packages/kv-store/src/key-value-store.ts @@ -9,7 +9,12 @@ import { Keyv } from './keyv/keyv.js' import { KeyvDeserializedData, KeyvOptions, KeyvStoredData } from './keyv/keyv-types.js' /** - * Agent plugin that implements {@link @veramo/core-types#IKeyValueStore} interface + * Class that implements the {@link @veramo/kv-store#IKeyValueStore} interface + * + * This class is a Key Value store that leverages a port of the keyv package internally. + * The store does not leak the types of the Keyv port, + * so it could be replaced with another implementations if we want to. + * * @public */ export class KeyValueStore implements IKeyValueStore { diff --git a/packages/kv-store/src/key-value-types.ts b/packages/kv-store/src/key-value-types.ts index 5736b2ec6..8b3f5b6c2 100644 --- a/packages/kv-store/src/key-value-types.ts +++ b/packages/kv-store/src/key-value-types.ts @@ -30,10 +30,6 @@ export interface IKeyValueStoreOptions { /** Namespace for the current instance. */ namespace?: string | undefined - /** A custom serialization function. */ - /*serialize?: ((data: KeyvDeserializedData) => OrPromise) - /!** A custom deserialization function. *!/ - deserialize?: ((data: any) => OrPromise | undefined>);*/ /** The connection string URI. */ uri?: string | undefined /** The storage adapter instance to be used by Keyv. or any other implementation */ @@ -41,9 +37,6 @@ export interface IKeyValueStoreOptions { /** Default TTL. Can be overridden by specifying a TTL on `.set()`. */ ttl?: number | undefined - /** Enable compression option **/ - /*compression?: KeyvCompressionAdapter | undefined;*/ - emitErrors?: boolean } From a7a29ba02bfb4421dbe5a1d9ceaf30401357e467 Mon Sep 17 00:00:00 2001 From: Niels Klomp Date: Thu, 18 May 2023 21:03:41 +0200 Subject: [PATCH 15/16] Update ld-suites.ts Rever change outside of kv-store from refactoring --- packages/credential-ld/src/ld-suites.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/credential-ld/src/ld-suites.ts b/packages/credential-ld/src/ld-suites.ts index 3ec2acf40..28331f1ce 100644 --- a/packages/credential-ld/src/ld-suites.ts +++ b/packages/credential-ld/src/ld-suites.ts @@ -13,7 +13,7 @@ import { DIDDocument } from 'did-resolver' export type RequiredAgentMethods = IResolver & Pick /** - * Base class for Veramo store-adapters of LinkedDataSignature suites. + * Base class for Veramo adapters of LinkedDataSignature suites. * * @alpha This API is experimental and is very likely to change or disappear in future releases without notice. */ From eb0a51d64146aece66641a9aa27efc56f48455ee Mon Sep 17 00:00:00 2001 From: nklomp Date: Thu, 18 May 2023 21:06:21 +0200 Subject: [PATCH 16/16] chore: Add myself to authors --- authors.md | 1 + 1 file changed, 1 insertion(+) diff --git a/authors.md b/authors.md index f80265a59..a65663bad 100644 --- a/authors.md +++ b/authors.md @@ -34,3 +34,4 @@ Special thanks to the following extraordinary individuals, for their contributio - [Devraj Singh Rawat](https://github.com/devrajsinghrawat) - [Eseoghene Mentie](https://github.com/Eseoghene) - [Ilan Olkies](https://github.com/ilanolkies) +- [Niels Klomp](https://github.com/nklomp)